-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings.js
3 lines (3 loc) · 535 KB
/
settings.js
1
2
3
/*! For license information please see settings.js.LICENSE.txt */
(()=>{"use strict";var e={d:(t,i)=>{for(var n in i)e.o(i,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{afterMain:()=>w,afterRead:()=>b,afterWrite:()=>C,applyStyles:()=>D,arrow:()=>G,auto:()=>r,basePlacements:()=>a,beforeMain:()=>v,beforeRead:()=>g,beforeWrite:()=>E,bottom:()=>n,clippingParents:()=>d,computeStyles:()=>te,createPopper:()=>Se,createPopperBase:()=>Le,createPopperLite:()=>De,detectOverflow:()=>ge,end:()=>c,eventListeners:()=>ne,flip:()=>_e,hide:()=>ye,left:()=>o,main:()=>y,modifierPhases:()=>T,offset:()=>we,placements:()=>m,popper:()=>u,popperGenerator:()=>ke,popperOffsets:()=>Ee,preventOverflow:()=>Ae,read:()=>_,reference:()=>f,right:()=>s,start:()=>l,top:()=>i,variationPlacements:()=>p,viewport:()=>h,write:()=>A});var i="top",n="bottom",s="right",o="left",r="auto",a=[i,n,s,o],l="start",c="end",d="clippingParents",h="viewport",u="popper",f="reference",p=a.reduce((function(e,t){return e.concat([t+"-"+l,t+"-"+c])}),[]),m=[].concat(a,[r]).reduce((function(e,t){return e.concat([t,t+"-"+l,t+"-"+c])}),[]),g="beforeRead",_="read",b="afterRead",v="beforeMain",y="main",w="afterMain",E="beforeWrite",A="write",C="afterWrite",T=[g,_,b,v,y,w,E,A,C];function x(e){return e?(e.nodeName||"").toLowerCase():null}function O(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function k(e){return e instanceof O(e).Element||e instanceof Element}function L(e){return e instanceof O(e).HTMLElement||e instanceof HTMLElement}function S(e){return"undefined"!=typeof ShadowRoot&&(e instanceof O(e).ShadowRoot||e instanceof ShadowRoot)}const D={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var i=t.styles[e]||{},n=t.attributes[e]||{},s=t.elements[e];L(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(e){var t=n[e];!1===t?s.removeAttribute(e):s.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,i={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,i.popper),t.styles=i,t.elements.arrow&&Object.assign(t.elements.arrow.style,i.arrow),function(){Object.keys(t.elements).forEach((function(e){var n=t.elements[e],s=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:i[e]).reduce((function(e,t){return e[t]="",e}),{});L(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(e){n.removeAttribute(e)})))}))}},requires:["computeStyles"]};function $(e){return e.split("-")[0]}var I=Math.max,P=Math.min,N=Math.round;function j(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function M(){return!/^((?!chrome|android).)*safari/i.test(j())}function F(e,t,i){void 0===t&&(t=!1),void 0===i&&(i=!1);var n=e.getBoundingClientRect(),s=1,o=1;t&&L(e)&&(s=e.offsetWidth>0&&N(n.width)/e.offsetWidth||1,o=e.offsetHeight>0&&N(n.height)/e.offsetHeight||1);var r=(k(e)?O(e):window).visualViewport,a=!M()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,d=n.width/s,h=n.height/o;return{width:d,height:h,top:c,right:l+d,bottom:c+h,left:l,x:l,y:c}}function H(e){var t=F(e),i=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-i)<=1&&(i=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:i,height:n}}function z(e,t){var i=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(i&&S(i)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function W(e){return O(e).getComputedStyle(e)}function B(e){return["table","td","th"].indexOf(x(e))>=0}function q(e){return((k(e)?e.ownerDocument:e.document)||window.document).documentElement}function R(e){return"html"===x(e)?e:e.assignedSlot||e.parentNode||(S(e)?e.host:null)||q(e)}function V(e){return L(e)&&"fixed"!==W(e).position?e.offsetParent:null}function K(e){for(var t=O(e),i=V(e);i&&B(i)&&"static"===W(i).position;)i=V(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===W(i).position)?t:i||function(e){var t=/firefox/i.test(j());if(/Trident/i.test(j())&&L(e)&&"fixed"===W(e).position)return null;var i=R(e);for(S(i)&&(i=i.host);L(i)&&["html","body"].indexOf(x(i))<0;){var n=W(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||t&&"filter"===n.willChange||t&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(e)||t}function Q(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e,t,i){return I(e,P(t,i))}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function U(e,t){return t.reduce((function(t,i){return t[i]=e,t}),{})}const G={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,r=e.state,l=e.name,c=e.options,d=r.elements.arrow,h=r.modifiersData.popperOffsets,u=$(r.placement),f=Q(u),p=[o,s].indexOf(u)>=0?"height":"width";if(d&&h){var m=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:U(e,a))}(c.padding,r),g=H(d),_="y"===f?i:o,b="y"===f?n:s,v=r.rects.reference[p]+r.rects.reference[f]-h[f]-r.rects.popper[p],y=h[f]-r.rects.reference[f],w=K(d),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,C=m[_],T=E-g[p]-m[b],x=E/2-g[p]/2+A,O=X(C,x,T),k=f;r.modifiersData[l]=((t={})[k]=O,t.centerOffset=O-x,t)}},effect:function(e){var t=e.state,i=e.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=t.elements.popper.querySelector(n)))&&z(t.elements.popper,n)&&(t.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function J(e){return e.split("-")[1]}var Z={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ee(e){var t,r=e.popper,a=e.popperRect,l=e.placement,d=e.variation,h=e.offsets,u=e.position,f=e.gpuAcceleration,p=e.adaptive,m=e.roundOffsets,g=e.isFixed,_=h.x,b=void 0===_?0:_,v=h.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=h.hasOwnProperty("x"),A=h.hasOwnProperty("y"),C=o,T=i,x=window;if(p){var k=K(r),L="clientHeight",S="clientWidth";k===O(r)&&"static"!==W(k=q(r)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===i||(l===o||l===s)&&d===c)&&(T=n,y-=(g&&k===x&&x.visualViewport?x.visualViewport.height:k[L])-a.height,y*=f?1:-1),l!==o&&(l!==i&&l!==n||d!==c)||(C=s,b-=(g&&k===x&&x.visualViewport?x.visualViewport.width:k[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&Z),I=!0===m?function(e,t){var i=e.x,n=e.y,s=t.devicePixelRatio||1;return{x:N(i*s)/s||0,y:N(n*s)/s||0}}({x:b,y},O(r)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[T]=A?"0":"",D[C]=E?"0":"",D.transform=(x.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((t={})[T]=A?y+"px":"",t[C]=E?b+"px":"",t.transform="",t))}const te={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,i=e.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:$(t.placement),variation:J(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ee(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ee(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var ie={passive:!0};const ne={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,i=e.instance,n=e.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=O(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach((function(e){e.addEventListener("scroll",i.update,ie)})),a&&l.addEventListener("resize",i.update,ie),function(){o&&c.forEach((function(e){e.removeEventListener("scroll",i.update,ie)})),a&&l.removeEventListener("resize",i.update,ie)}},data:{}};var se={left:"right",right:"left",bottom:"top",top:"bottom"};function oe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var re={start:"end",end:"start"};function ae(e){return e.replace(/start|end/g,(function(e){return re[e]}))}function le(e){var t=O(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function ce(e){return F(q(e)).left+le(e).scrollLeft}function de(e){var t=W(e),i=t.overflow,n=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function he(e){return["html","body","#document"].indexOf(x(e))>=0?e.ownerDocument.body:L(e)&&de(e)?e:he(R(e))}function ue(e,t){var i;void 0===t&&(t=[]);var n=he(e),s=n===(null==(i=e.ownerDocument)?void 0:i.body),o=O(n),r=s?[o].concat(o.visualViewport||[],de(n)?n:[]):n,a=t.concat(r);return s?a:a.concat(ue(R(r)))}function fe(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function pe(e,t,i){return t===h?fe(function(e,t){var i=O(e),n=q(e),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=M();(c||!c&&"fixed"===t)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ce(e),y:l}}(e,i)):k(t)?function(e,t){var i=F(e,!1,"fixed"===t);return i.top=i.top+e.clientTop,i.left=i.left+e.clientLeft,i.bottom=i.top+e.clientHeight,i.right=i.left+e.clientWidth,i.width=e.clientWidth,i.height=e.clientHeight,i.x=i.left,i.y=i.top,i}(t,i):fe(function(e){var t,i=q(e),n=le(e),s=null==(t=e.ownerDocument)?void 0:t.body,o=I(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=I(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ce(e),l=-n.scrollTop;return"rtl"===W(s||i).direction&&(a+=I(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(e)))}function me(e){var t,r=e.reference,a=e.element,d=e.placement,h=d?$(d):null,u=d?J(d):null,f=r.x+r.width/2-a.width/2,p=r.y+r.height/2-a.height/2;switch(h){case i:t={x:f,y:r.y-a.height};break;case n:t={x:f,y:r.y+r.height};break;case s:t={x:r.x+r.width,y:p};break;case o:t={x:r.x-a.width,y:p};break;default:t={x:r.x,y:r.y}}var m=h?Q(h):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case l:t[m]=t[m]-(r[g]/2-a[g]/2);break;case c:t[m]=t[m]+(r[g]/2-a[g]/2)}}return t}function ge(e,t){void 0===t&&(t={});var o=t,r=o.placement,l=void 0===r?e.placement:r,c=o.strategy,p=void 0===c?e.strategy:c,m=o.boundary,g=void 0===m?d:m,_=o.rootBoundary,b=void 0===_?h:_,v=o.elementContext,y=void 0===v?u:v,w=o.altBoundary,E=void 0!==w&&w,A=o.padding,C=void 0===A?0:A,T=Y("number"!=typeof C?C:U(C,a)),O=y===u?f:u,S=e.rects.popper,D=e.elements[E?O:y],$=function(e,t,i,n){var s="clippingParents"===t?function(e){var t=ue(R(e)),i=["absolute","fixed"].indexOf(W(e).position)>=0&&L(e)?K(e):e;return k(i)?t.filter((function(e){return k(e)&&z(e,i)&&"body"!==x(e)})):[]}(e):[].concat(t),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(t,i){var s=pe(e,i,n);return t.top=I(s.top,t.top),t.right=P(s.right,t.right),t.bottom=P(s.bottom,t.bottom),t.left=I(s.left,t.left),t}),pe(e,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(k(D)?D:D.contextElement||q(e.elements.popper),g,b,p),N=F(e.elements.reference),j=me({reference:N,element:S,strategy:"absolute",placement:l}),M=fe(Object.assign({},S,j)),H=y===u?M:N,B={top:$.top-H.top+T.top,bottom:H.bottom-$.bottom+T.bottom,left:$.left-H.left+T.left,right:H.right-$.right+T.right},V=e.modifiersData.offset;if(y===u&&V){var Q=V[l];Object.keys(B).forEach((function(e){var t=[s,n].indexOf(e)>=0?1:-1,o=[i,n].indexOf(e)>=0?"y":"x";B[e]+=Q[o]*t}))}return B}const _e={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,c=e.options,d=e.name;if(!t.modifiersData[d]._skip){for(var h=c.mainAxis,u=void 0===h||h,f=c.altAxis,g=void 0===f||f,_=c.fallbackPlacements,b=c.padding,v=c.boundary,y=c.rootBoundary,w=c.altBoundary,E=c.flipVariations,A=void 0===E||E,C=c.allowedAutoPlacements,T=t.options.placement,x=$(T),O=_||(x!==T&&A?function(e){if($(e)===r)return[];var t=oe(e);return[ae(e),t,ae(t)]}(T):[oe(T)]),k=[T].concat(O).reduce((function(e,i){return e.concat($(i)===r?function(e,t){void 0===t&&(t={});var i=t,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,l=i.flipVariations,c=i.allowedAutoPlacements,d=void 0===c?m:c,h=J(n),u=h?l?p:p.filter((function(e){return J(e)===h})):a,f=u.filter((function(e){return d.indexOf(e)>=0}));0===f.length&&(f=u);var g=f.reduce((function(t,i){return t[i]=ge(e,{placement:i,boundary:s,rootBoundary:o,padding:r})[$(i)],t}),{});return Object.keys(g).sort((function(e,t){return g[e]-g[t]}))}(t,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:C}):i)}),[]),L=t.rects.reference,S=t.rects.popper,D=new Map,I=!0,P=k[0],N=0;N<k.length;N++){var j=k[N],M=$(j),F=J(j)===l,H=[i,n].indexOf(M)>=0,z=H?"width":"height",W=ge(t,{placement:j,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),B=H?F?s:o:F?n:i;L[z]>S[z]&&(B=oe(B));var q=oe(B),R=[];if(u&&R.push(W[M]<=0),g&&R.push(W[B]<=0,W[q]<=0),R.every((function(e){return e}))){P=j,I=!1;break}D.set(j,R)}if(I)for(var V=function(e){var t=k.find((function(t){var i=D.get(t);if(i)return i.slice(0,e).every((function(e){return e}))}));if(t)return P=t,"break"},K=A?3:1;K>0&&"break"!==V(K);K--);t.placement!==P&&(t.modifiersData[d]._skip=!0,t.placement=P,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function be(e,t,i){return void 0===i&&(i={x:0,y:0}),{top:e.top-t.height-i.y,right:e.right-t.width+i.x,bottom:e.bottom-t.height+i.y,left:e.left-t.width-i.x}}function ve(e){return[i,s,n,o].some((function(t){return e[t]>=0}))}const ye={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,i=e.name,n=t.rects.reference,s=t.rects.popper,o=t.modifiersData.preventOverflow,r=ge(t,{elementContext:"reference"}),a=ge(t,{altBoundary:!0}),l=be(r,n),c=be(a,s,o),d=ve(l),h=ve(c);t.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:d,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":h})}},we={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,a=n.offset,l=void 0===a?[0,0]:a,c=m.reduce((function(e,n){return e[n]=function(e,t,n){var r=$(e),a=[o,i].indexOf(r)>=0?-1:1,l="function"==typeof n?n(Object.assign({},t,{placement:e})):n,c=l[0],d=l[1];return c=c||0,d=(d||0)*a,[o,s].indexOf(r)>=0?{x:d,y:c}:{x:c,y:d}}(n,t.rects,l),e}),{}),d=c[t.placement],h=d.x,u=d.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=h,t.modifiersData.popperOffsets.y+=u),t.modifiersData[r]=c}},Ee={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,i=e.name;t.modifiersData[i]=me({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},Ae={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,r=e.options,a=e.name,c=r.mainAxis,d=void 0===c||c,h=r.altAxis,u=void 0!==h&&h,f=r.boundary,p=r.rootBoundary,m=r.altBoundary,g=r.padding,_=r.tether,b=void 0===_||_,v=r.tetherOffset,y=void 0===v?0:v,w=ge(t,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=$(t.placement),A=J(t.placement),C=!A,T=Q(E),x="x"===T?"y":"x",O=t.modifiersData.popperOffsets,k=t.rects.reference,L=t.rects.popper,S="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),N=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,j={x:0,y:0};if(O){if(d){var M,F="y"===T?i:o,z="y"===T?n:s,W="y"===T?"height":"width",B=O[T],q=B+w[F],R=B-w[z],V=b?-L[W]/2:0,Y=A===l?k[W]:L[W],U=A===l?-L[W]:-k[W],G=t.elements.arrow,Z=b&&G?H(G):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[F],ie=ee[z],ne=X(0,k[W],Z[W]),se=C?k[W]/2-V-ne-te-D.mainAxis:Y-ne-te-D.mainAxis,oe=C?-k[W]/2+V+ne+ie+D.mainAxis:U+ne+ie+D.mainAxis,re=t.elements.arrow&&K(t.elements.arrow),ae=re?"y"===T?re.clientTop||0:re.clientLeft||0:0,le=null!=(M=null==N?void 0:N[T])?M:0,ce=B+oe-le,de=X(b?P(q,B+se-le-ae):q,B,b?I(R,ce):R);O[T]=de,j[T]=de-B}if(u){var he,ue="x"===T?i:o,fe="x"===T?n:s,pe=O[x],me="y"===x?"height":"width",_e=pe+w[ue],be=pe-w[fe],ve=-1!==[i,o].indexOf(E),ye=null!=(he=null==N?void 0:N[x])?he:0,we=ve?_e:pe-k[me]-L[me]-ye+D.altAxis,Ee=ve?pe+k[me]+L[me]-ye-D.altAxis:be,Ae=b&&ve?function(e,t,i){var n=X(e,t,i);return n>i?i:n}(we,pe,Ee):X(b?we:_e,pe,b?Ee:be);O[x]=Ae,j[x]=Ae-pe}t.modifiersData[a]=j}},requiresIfExists:["offset"]};function Ce(e,t,i){void 0===i&&(i=!1);var n,s,o=L(t),r=L(t)&&function(e){var t=e.getBoundingClientRect(),i=N(t.width)/e.offsetWidth||1,n=N(t.height)/e.offsetHeight||1;return 1!==i||1!==n}(t),a=q(t),l=F(e,r,i),c={scrollLeft:0,scrollTop:0},d={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(t)||de(a))&&(c=(n=t)!==O(n)&&L(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:le(n)),L(t)?((d=F(t,!0)).x+=t.clientLeft,d.y+=t.clientTop):a&&(d.x=ce(a))),{x:l.left+c.scrollLeft-d.x,y:l.top+c.scrollTop-d.y,width:l.width,height:l.height}}function Te(e){var t=new Map,i=new Set,n=[];function s(e){i.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!i.has(e)){var n=t.get(e);n&&s(n)}})),n.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){i.has(e.name)||s(e)})),n}var xe={placement:"bottom",modifiers:[],strategy:"absolute"};function Oe(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function ke(e){void 0===e&&(e={});var t=e,i=t.defaultModifiers,n=void 0===i?[]:i,s=t.defaultOptions,o=void 0===s?xe:s;return function(e,t,i){void 0===i&&(i=o);var s,r,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},xe,o),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},l=[],c=!1,d={state:a,setOptions:function(i){var s="function"==typeof i?i(a.options):i;h(),a.options=Object.assign({},o,a.options,s),a.scrollParents={reference:k(e)?ue(e):e.contextElement?ue(e.contextElement):[],popper:ue(t)};var r,c,u=function(e){var t=Te(e);return T.reduce((function(e,i){return e.concat(t.filter((function(e){return e.phase===i})))}),[])}((r=[].concat(n,a.options.modifiers),c=r.reduce((function(e,t){var i=e[t.name];return e[t.name]=i?Object.assign({},i,t,{options:Object.assign({},i.options,t.options),data:Object.assign({},i.data,t.data)}):t,e}),{}),Object.keys(c).map((function(e){return c[e]}))));return a.orderedModifiers=u.filter((function(e){return e.enabled})),a.orderedModifiers.forEach((function(e){var t=e.name,i=e.options,n=void 0===i?{}:i,s=e.effect;if("function"==typeof s){var o=s({state:a,name:t,instance:d,options:n});l.push(o||function(){})}})),d.update()},forceUpdate:function(){if(!c){var e=a.elements,t=e.reference,i=e.popper;if(Oe(t,i)){a.rects={reference:Ce(t,K(i),"fixed"===a.options.strategy),popper:H(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(e){return a.modifiersData[e.name]=Object.assign({},e.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,h=s.name;"function"==typeof o&&(a=o({state:a,options:l,name:h,instance:d})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(e){d.forceUpdate(),e(a)}))},function(){return r||(r=new Promise((function(e){Promise.resolve().then((function(){r=void 0,e(s())}))}))),r}),destroy:function(){h(),c=!0}};if(!Oe(e,t))return d;function h(){l.forEach((function(e){return e()})),l=[]}return d.setOptions(i).then((function(e){!c&&i.onFirstUpdate&&i.onFirstUpdate(e)})),d}}var Le=ke(),Se=ke({defaultModifiers:[ne,Ee,te,D,we,_e,Ae,G,ye]}),De=ke({defaultModifiers:[ne,Ee,te,D]});const $e=new Map,Ie={set(e,t,i){$e.has(e)||$e.set(e,new Map);const n=$e.get(e);n.has(t)||0===n.size?n.set(t,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(e,t)=>$e.has(e)&&$e.get(e).get(t)||null,remove(e,t){if(!$e.has(e))return;const i=$e.get(e);i.delete(t),0===i.size&&$e.delete(e)}},Pe="transitionend",Ne=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),je=e=>{e.dispatchEvent(new Event(Pe))},Me=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),Fe=e=>Me(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(Ne(e)):null,He=e=>{if(!Me(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),i=e.closest("details:not([open])");if(!i)return t;if(i!==e){const t=e.closest("summary");if(t&&t.parentNode!==i)return!1;if(null===t)return!1}return t},ze=e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")),We=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?We(e.parentNode):null},Be=()=>{},qe=e=>{e.offsetHeight},Re=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Ve=[],Ke=()=>"rtl"===document.documentElement.dir,Qe=e=>{var t;t=()=>{const t=Re();if(t){const i=e.NAME,n=t.fn[i];t.fn[i]=e.jQueryInterface,t.fn[i].Constructor=e,t.fn[i].noConflict=()=>(t.fn[i]=n,e.jQueryInterface)}},"loading"===document.readyState?(Ve.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of Ve)e()})),Ve.push(t)):t()},Xe=(e,t=[],i=e)=>"function"==typeof e?e(...t):i,Ye=(e,t,i=!0)=>{if(!i)return void Xe(e);const n=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:i}=window.getComputedStyle(e);const n=Number.parseFloat(t),s=Number.parseFloat(i);return n||s?(t=t.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(i))):0})(t)+5;let s=!1;const o=({target:i})=>{i===t&&(s=!0,t.removeEventListener(Pe,o),Xe(e))};t.addEventListener(Pe,o),setTimeout((()=>{s||je(t)}),n)},Ue=(e,t,i,n)=>{const s=e.length;let o=e.indexOf(t);return-1===o?!i&&n?e[s-1]:e[0]:(o+=i?1:-1,n&&(o=(o+s)%s),e[Math.max(0,Math.min(o,s-1))])},Ge=/[^.]*(?=\..*)\.|.*/,Je=/\..*/,Ze=/::\d+$/,et={};let tt=1;const it={mouseenter:"mouseover",mouseleave:"mouseout"},nt=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function st(e,t){return t&&`${t}::${tt++}`||e.uidEvent||tt++}function ot(e){const t=st(e);return e.uidEvent=t,et[t]=et[t]||{},et[t]}function rt(e,t,i=null){return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===i))}function at(e,t,i){const n="string"==typeof t,s=n?i:t||i;let o=ht(e);return nt.has(o)||(o=e),[n,s,o]}function lt(e,t,i,n,s){if("string"!=typeof t||!e)return;let[o,r,a]=at(t,i,n);if(t in it){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};r=e(r)}const l=ot(e),c=l[a]||(l[a]={}),d=rt(c,r,o?i:null);if(d)return void(d.oneOff=d.oneOff&&s);const h=st(r,t.replace(Ge,"")),u=o?function(e,t,i){return function n(s){const o=e.querySelectorAll(t);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return ft(s,{delegateTarget:r}),n.oneOff&&ut.off(e,s.type,t,i),i.apply(r,[s])}}(e,i,r):function(e,t){return function i(n){return ft(n,{delegateTarget:e}),i.oneOff&&ut.off(e,n.type,t),t.apply(e,[n])}}(e,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=h,c[h]=u,e.addEventListener(a,u,o)}function ct(e,t,i,n,s){const o=rt(t[i],n,s);o&&(e.removeEventListener(i,o,Boolean(s)),delete t[i][o.uidEvent])}function dt(e,t,i,n){const s=t[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&ct(e,t,i,r.callable,r.delegationSelector)}function ht(e){return e=e.replace(Je,""),it[e]||e}const ut={on(e,t,i,n){lt(e,t,i,n,!1)},one(e,t,i,n){lt(e,t,i,n,!0)},off(e,t,i,n){if("string"!=typeof t||!e)return;const[s,o,r]=at(t,i,n),a=r!==t,l=ot(e),c=l[r]||{},d=t.startsWith(".");if(void 0===o){if(d)for(const i of Object.keys(l))dt(e,l,i,t.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(Ze,"");a&&!t.includes(s)||ct(e,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;ct(e,l,r,o,s?i:null)}},trigger(e,t,i){if("string"!=typeof t||!e)return null;const n=Re();let s=null,o=!0,r=!0,a=!1;t!==ht(t)&&n&&(s=n.Event(t,i),n(e).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=ft(new Event(t,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&e.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function ft(e,t={}){for(const[i,n]of Object.entries(t))try{e[i]=n}catch(t){Object.defineProperty(e,i,{configurable:!0,get:()=>n})}return e}function pt(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch(t){return e}}function mt(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const gt={setDataAttribute(e,t,i){e.setAttribute(`data-bs-${mt(t)}`,i)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${mt(t)}`)},getDataAttributes(e){if(!e)return{};const t={},i=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),t[i]=pt(e.dataset[n])}return t},getDataAttribute:(e,t)=>pt(e.getAttribute(`data-bs-${mt(t)}`))};class _t{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const i=Me(t)?gt.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Me(t)?gt.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[n,s]of Object.entries(t)){const t=e[n],o=Me(t)?"element":null==(i=t)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class bt extends _t{constructor(e,t){super(),(e=Fe(e))&&(this._element=e,this._config=this._getConfig(t),Ie.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Ie.remove(this._element,this.constructor.DATA_KEY),ut.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,i=!0){Ye(e,t,i)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Ie.get(Fe(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const vt=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let i=e.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),t=i&&"#"!==i?i.trim():null}return t?t.split(",").map((e=>Ne(e))).join(","):null},yt={find:(e,t=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(t,e)),findOne:(e,t=document.documentElement)=>Element.prototype.querySelector.call(t,e),children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const i=[];let n=e.parentNode.closest(t);for(;n;)i.push(n),n=n.parentNode.closest(t);return i},prev(e,t){let i=e.previousElementSibling;for(;i;){if(i.matches(t))return[i];i=i.previousElementSibling}return[]},next(e,t){let i=e.nextElementSibling;for(;i;){if(i.matches(t))return[i];i=i.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!ze(e)&&He(e)))},getSelectorFromElement(e){const t=vt(e);return t&&yt.findOne(t)?t:null},getElementFromSelector(e){const t=vt(e);return t?yt.findOne(t):null},getMultipleElementsFromSelector(e){const t=vt(e);return t?yt.find(t):[]}},wt=(e,t="hide")=>{const i=`click.dismiss${e.EVENT_KEY}`,n=e.NAME;ut.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),ze(this))return;const s=yt.getElementFromSelector(this)||this.closest(`.${n}`);e.getOrCreateInstance(s)[t]()}))},Et=".bs.alert",At=`close${Et}`,Ct=`closed${Et}`;class Tt extends bt{static get NAME(){return"alert"}close(){if(ut.trigger(this._element,At).defaultPrevented)return;this._element.classList.remove("show");const e=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,e)}_destroyElement(){this._element.remove(),ut.trigger(this._element,Ct),this.dispose()}static jQueryInterface(e){return this.each((function(){const t=Tt.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}wt(Tt,"close"),Qe(Tt);const xt='[data-bs-toggle="button"]';class Ot extends bt{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(e){return this.each((function(){const t=Ot.getOrCreateInstance(this);"toggle"===e&&t[e]()}))}}ut.on(document,"click.bs.button.data-api",xt,(e=>{e.preventDefault();const t=e.target.closest(xt);Ot.getOrCreateInstance(t).toggle()})),Qe(Ot);const kt=".bs.swipe",Lt=`touchstart${kt}`,St=`touchmove${kt}`,Dt=`touchend${kt}`,$t=`pointerdown${kt}`,It=`pointerup${kt}`,Pt={endCallback:null,leftCallback:null,rightCallback:null},Nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class jt extends _t{constructor(e,t){super(),this._element=e,e&&jt.isSupported()&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pt}static get DefaultType(){return Nt}static get NAME(){return"swipe"}dispose(){ut.off(this._element,kt)}_start(e){this._supportPointerEvents?this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX):this._deltaX=e.touches[0].clientX}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),Xe(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=40)return;const t=e/this._deltaX;this._deltaX=0,t&&Xe(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(ut.on(this._element,$t,(e=>this._start(e))),ut.on(this._element,It,(e=>this._end(e))),this._element.classList.add("pointer-event")):(ut.on(this._element,Lt,(e=>this._start(e))),ut.on(this._element,St,(e=>this._move(e))),ut.on(this._element,Dt,(e=>this._end(e))))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&("pen"===e.pointerType||"touch"===e.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Mt=".bs.carousel",Ft=".data-api",Ht="ArrowLeft",zt="ArrowRight",Wt="next",Bt="prev",qt="left",Rt="right",Vt=`slide${Mt}`,Kt=`slid${Mt}`,Qt=`keydown${Mt}`,Xt=`mouseenter${Mt}`,Yt=`mouseleave${Mt}`,Ut=`dragstart${Mt}`,Gt=`load${Mt}${Ft}`,Jt=`click${Mt}${Ft}`,Zt="carousel",ei="active",ti=".active",ii=".carousel-item",ni=ti+ii,si={[Ht]:Rt,[zt]:qt},oi={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ri={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ai extends bt{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=yt.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Zt&&this.cycle()}static get Default(){return oi}static get DefaultType(){return ri}static get NAME(){return"carousel"}next(){this._slide(Wt)}nextWhenVisible(){!document.hidden&&He(this._element)&&this.next()}prev(){this._slide(Bt)}pause(){this._isSliding&&je(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?ut.one(this._element,Kt,(()=>this.cycle())):this.cycle())}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding)return void ut.one(this._element,Kt,(()=>this.to(e)));const i=this._getItemIndex(this._getActive());if(i===e)return;const n=e>i?Wt:Bt;this._slide(n,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&ut.on(this._element,Qt,(e=>this._keydown(e))),"hover"===this._config.pause&&(ut.on(this._element,Xt,(()=>this.pause())),ut.on(this._element,Yt,(()=>this._maybeEnableCycle()))),this._config.touch&&jt.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const e of yt.find(".carousel-item img",this._element))ut.on(e,Ut,(e=>e.preventDefault()));const e={leftCallback:()=>this._slide(this._directionToOrder(qt)),rightCallback:()=>this._slide(this._directionToOrder(Rt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new jt(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=si[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=yt.findOne(ti,this._indicatorsElement);t.classList.remove(ei),t.removeAttribute("aria-current");const i=yt.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);i&&(i.classList.add(ei),i.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const i=this._getActive(),n=e===Wt,s=t||Ue(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=t=>ut.trigger(this._element,t,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(i),to:o});if(r(Vt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qe(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Kt)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return yt.findOne(ni,this._element)}_getItems(){return yt.find(ii,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return Ke()?e===qt?Bt:Wt:e===qt?Wt:Bt}_orderToDirection(e){return Ke()?e===Bt?qt:Rt:e===Bt?Rt:qt}static jQueryInterface(e){return this.each((function(){const t=ai.getOrCreateInstance(this,e);if("number"!=typeof e){if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}else t.to(e)}))}}ut.on(document,Jt,"[data-bs-slide], [data-bs-slide-to]",(function(e){const t=yt.getElementFromSelector(this);if(!t||!t.classList.contains(Zt))return;e.preventDefault();const i=ai.getOrCreateInstance(t),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===gt.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),ut.on(window,Gt,(()=>{const e=yt.find('[data-bs-ride="carousel"]');for(const t of e)ai.getOrCreateInstance(t)})),Qe(ai);const li=".bs.collapse",ci=`show${li}`,di=`shown${li}`,hi=`hide${li}`,ui=`hidden${li}`,fi=`click${li}.data-api`,pi="show",mi="collapse",gi="collapsing",_i=`:scope .${mi} .${mi}`,bi='[data-bs-toggle="collapse"]',vi={parent:null,toggle:!0},yi={parent:"(null|element)",toggle:"boolean"};class wi extends bt{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const i=yt.find(bi);for(const e of i){const t=yt.getSelectorFromElement(e),i=yt.find(t).filter((e=>e===this._element));null!==t&&i.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return vi}static get DefaultType(){return yi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((e=>e!==this._element)).map((e=>wi.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(ut.trigger(this._element,ci).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(mi),this._element.classList.add(gi),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(mi,pi),this._element.style[t]="",ut.trigger(this._element,di)}),this._element,!0),this._element.style[t]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(ut.trigger(this._element,hi).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,qe(this._element),this._element.classList.add(gi),this._element.classList.remove(mi,pi);for(const e of this._triggerArray){const t=yt.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0,this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(gi),this._element.classList.add(mi),ut.trigger(this._element,ui)}),this._element,!0)}_isShown(e=this._element){return e.classList.contains(pi)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=Fe(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(bi);for(const t of e){const e=yt.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=yt.find(_i,this._config.parent);return yt.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const i of e)i.classList.toggle("collapsed",!t),i.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const i=wi.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e]()}}))}}ut.on(document,fi,bi,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of yt.getMultipleElementsFromSelector(this))wi.getOrCreateInstance(e,{toggle:!1}).toggle()})),Qe(wi);const Ei="dropdown",Ai=".bs.dropdown",Ci=".data-api",Ti="ArrowUp",xi="ArrowDown",Oi=`hide${Ai}`,ki=`hidden${Ai}`,Li=`show${Ai}`,Si=`shown${Ai}`,Di=`click${Ai}${Ci}`,$i=`keydown${Ai}${Ci}`,Ii=`keyup${Ai}${Ci}`,Pi="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Ni}.${Pi}`,Mi=".dropdown-menu",Fi=Ke()?"top-end":"top-start",Hi=Ke()?"top-start":"top-end",zi=Ke()?"bottom-end":"bottom-start",Wi=Ke()?"bottom-start":"bottom-end",Bi=Ke()?"left-start":"right-start",qi=Ke()?"right-start":"left-start",Ri={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Vi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends bt{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=yt.next(this._element,Mi)[0]||yt.prev(this._element,Mi)[0]||yt.findOne(Mi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Ri}static get DefaultType(){return Vi}static get NAME(){return Ei}toggle(){return this._isShown()?this.hide():this.show()}show(){if(ze(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!ut.trigger(this._element,Li,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))ut.on(e,"mouseover",Be);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),ut.trigger(this._element,Si,e)}}hide(){if(ze(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!ut.trigger(this._element,Oi,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))ut.off(e,"mouseover",Be);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),gt.removeDataAttribute(this._menu,"popper"),ut.trigger(this._element,ki,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!Me(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${Ei.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===t)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=this._parent:Me(this._config.reference)?e=Fe(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig();this._popper=Se(e,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return Bi;if(e.classList.contains("dropstart"))return qi;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?Hi:Fi:t?Wi:zi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(gt.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...Xe(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:t}){const i=yt.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((e=>He(e)));i.length&&Ue(i,t,e===xi,!i.includes(t)).focus()}static jQueryInterface(e){return this.each((function(){const t=Ki.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=yt.find(ji);for(const i of t){const t=Ki.getInstance(i);if(!t||!1===t._config.autoClose)continue;const n=e.composedPath(),s=n.includes(t._menu);if(n.includes(t._element)||"inside"===t._config.autoClose&&!s||"outside"===t._config.autoClose&&s)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const o={relatedTarget:t._element};"click"===e.type&&(o.clickEvent=e),t._completeHide(o)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),i="Escape"===e.key,n=[Ti,xi].includes(e.key);if(!n&&!i)return;if(t&&!i)return;e.preventDefault();const s=this.matches(Ni)?this:yt.prev(this,Ni)[0]||yt.next(this,Ni)[0]||yt.findOne(Ni,e.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return e.stopPropagation(),o.show(),void o._selectMenuItem(e);o._isShown()&&(e.stopPropagation(),o.hide(),s.focus())}}ut.on(document,$i,Ni,Ki.dataApiKeydownHandler),ut.on(document,$i,Mi,Ki.dataApiKeydownHandler),ut.on(document,Di,Ki.clearMenus),ut.on(document,Ii,Ki.clearMenus),ut.on(document,Di,Ni,(function(e){e.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qe(Ki);const Qi="backdrop",Xi="show",Yi=`mousedown.bs.${Qi}`,Ui={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Gi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ji extends _t{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Ui}static get DefaultType(){return Gi}static get NAME(){return Qi}show(e){if(!this._config.isVisible)return void Xe(e);this._append();const t=this._getElement();this._config.isAnimated&&qe(t),t.classList.add(Xi),this._emulateAnimation((()=>{Xe(e)}))}hide(e){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xe(e)}))):Xe(e)}dispose(){this._isAppended&&(ut.off(this._element,Yi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add("fade"),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=Fe(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),ut.on(e,Yi,(()=>{Xe(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(e){Ye(e,this._getElement(),this._config.isAnimated)}}const Zi=".bs.focustrap",en=`focusin${Zi}`,tn=`keydown.tab${Zi}`,nn="backward",sn={autofocus:!0,trapElement:null},on={autofocus:"boolean",trapElement:"element"};class rn extends _t{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return sn}static get DefaultType(){return on}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),ut.off(document,Zi),ut.on(document,en,(e=>this._handleFocusin(e))),ut.on(document,tn,(e=>this._handleKeydown(e))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,ut.off(document,Zi))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const i=yt.focusableChildren(t);0===i.length?t.focus():this._lastTabNavDirection===nn?i[i.length-1].focus():i[0].focus()}_handleKeydown(e){"Tab"===e.key&&(this._lastTabNavDirection=e.shiftKey?nn:"forward")}}const an=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ln=".sticky-top",cn="padding-right",dn="margin-right";class hn{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,cn,(t=>t+e)),this._setElementAttributes(an,cn,(t=>t+e)),this._setElementAttributes(ln,dn,(t=>t-e))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,cn),this._resetElementAttributes(an,cn),this._resetElementAttributes(ln,dn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,i){const n=this.getWidth();this._applyManipulationCallback(e,(e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+n)return;this._saveInitialAttribute(e,t);const s=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(e,t){const i=e.style.getPropertyValue(t);i&>.setDataAttribute(e,t,i)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,(e=>{const i=gt.getDataAttribute(e,t);null!==i?(gt.removeDataAttribute(e,t),e.style.setProperty(t,i)):e.style.removeProperty(t)}))}_applyManipulationCallback(e,t){if(Me(e))t(e);else for(const i of yt.find(e,this._element))t(i)}}const un=".bs.modal",fn=`hide${un}`,pn=`hidePrevented${un}`,mn=`hidden${un}`,gn=`show${un}`,_n=`shown${un}`,bn=`resize${un}`,vn=`click.dismiss${un}`,yn=`mousedown.dismiss${un}`,wn=`keydown.dismiss${un}`,En=`click${un}.data-api`,An="modal-open",Cn="show",Tn="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class kn extends bt{constructor(e,t){super(e,t),this._dialog=yt.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new hn,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||ut.trigger(this._element,gn,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(An),this._adjustDialog(),this._backdrop.show((()=>this._showElement(e))))}hide(){this._isShown&&!this._isTransitioning&&(ut.trigger(this._element,fn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){ut.off(window,un),ut.off(this._dialog,un),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ji({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new rn({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=yt.findOne(".modal-body",this._dialog);t&&(t.scrollTop=0),qe(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,ut.trigger(this._element,_n,{relatedTarget:e})}),this._dialog,this._isAnimated())}_addEventListeners(){ut.on(this._element,wn,(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),ut.on(window,bn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),ut.on(this._element,yn,(e=>{ut.one(this._element,vn,(t=>{this._element===e.target&&this._element===t.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(An),this._resetAdjustments(),this._scrollBar.reset(),ut.trigger(this._element,mn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(ut.trigger(this._element,pn).defaultPrevented)return;const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;"hidden"===t||this._element.classList.contains(Tn)||(e||(this._element.style.overflowY="hidden"),this._element.classList.add(Tn),this._queueCallback((()=>{this._element.classList.remove(Tn),this._queueCallback((()=>{this._element.style.overflowY=t}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),i=t>0;if(i&&!e){const e=Ke()?"paddingLeft":"paddingRight";this._element.style[e]=`${t}px`}if(!i&&e){const e=Ke()?"paddingRight":"paddingLeft";this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each((function(){const i=kn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===i[e])throw new TypeError(`No method named "${e}"`);i[e](t)}}))}}ut.on(document,En,'[data-bs-toggle="modal"]',(function(e){const t=yt.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),ut.one(t,gn,(e=>{e.defaultPrevented||ut.one(t,mn,(()=>{He(this)&&this.focus()}))}));const i=yt.findOne(".modal.show");i&&kn.getInstance(i).hide(),kn.getOrCreateInstance(t).toggle(this)})),wt(kn),Qe(kn);const Ln=".bs.offcanvas",Sn=".data-api",Dn=`load${Ln}${Sn}`,$n="show",In="showing",Pn="hiding",Nn=".offcanvas.show",jn=`show${Ln}`,Mn=`shown${Ln}`,Fn=`hide${Ln}`,Hn=`hidePrevented${Ln}`,zn=`hidden${Ln}`,Wn=`resize${Ln}`,Bn=`click${Ln}${Sn}`,qn=`keydown.dismiss${Ln}`,Rn={backdrop:!0,keyboard:!0,scroll:!1},Vn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends bt{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Rn}static get DefaultType(){return Vn}static get NAME(){return"offcanvas"}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||ut.trigger(this._element,jn,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new hn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(In),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add($n),this._element.classList.remove(In),ut.trigger(this._element,Mn,{relatedTarget:e})}),this._element,!0))}hide(){this._isShown&&(ut.trigger(this._element,Fn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove($n,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new hn).reset(),ut.trigger(this._element,zn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=Boolean(this._config.backdrop);return new Ji({className:"offcanvas-backdrop",isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?()=>{"static"!==this._config.backdrop?this.hide():ut.trigger(this._element,Hn)}:null})}_initializeFocusTrap(){return new rn({trapElement:this._element})}_addEventListeners(){ut.on(this._element,qn,(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():ut.trigger(this._element,Hn))}))}static jQueryInterface(e){return this.each((function(){const t=Kn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}ut.on(document,Bn,'[data-bs-toggle="offcanvas"]',(function(e){const t=yt.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),ze(this))return;ut.one(t,zn,(()=>{He(this)&&this.focus()}));const i=yt.findOne(Nn);i&&i!==t&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(t).toggle(this)})),ut.on(window,Dn,(()=>{for(const e of yt.find(Nn))Kn.getOrCreateInstance(e).show()})),ut.on(window,Wn,(()=>{for(const e of yt.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(e).position&&Kn.getOrCreateInstance(e).hide()})),wt(Kn),Qe(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Yn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Un=(e,t)=>{const i=e.nodeName.toLowerCase();return t.includes(i)?!Xn.has(i)||Boolean(Yn.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(i)))},Gn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},Jn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Zn={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends _t{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Gn}static get DefaultType(){return Jn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,i]of Object.entries(this._config.content))this._setContent(e,i,t);const t=e.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&t.classList.add(...i.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,i]of Object.entries(e))super._typeCheckConfig({selector:t,entry:i},Zn)}_setContent(e,t,i){const n=yt.findOne(i,e);n&&((t=this._resolvePossibleFunction(t))?Me(t)?this._putElementInTemplate(Fe(t),n):this._config.html?n.innerHTML=this._maybeSanitize(t):n.textContent=t:n.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,i){if(!e.length)return e;if(i&&"function"==typeof i)return i(e);const n=(new window.DOMParser).parseFromString(e,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const e of s){const i=e.nodeName.toLowerCase();if(!Object.keys(t).includes(i)){e.remove();continue}const n=[].concat(...e.attributes),s=[].concat(t["*"]||[],t[i]||[]);for(const t of n)Un(t,s)||e.removeAttribute(t.nodeName)}return n.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return Xe(e,[this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const ts=new Set(["sanitize","allowList","sanitizeFn"]),is="fade",ns="show",ss=".tooltip-inner",os=".modal",rs="hide.bs.modal",as="hover",ls="focus",cs={AUTO:"auto",TOP:"top",RIGHT:Ke()?"left":"right",BOTTOM:"bottom",LEFT:Ke()?"right":"left"},ds={allowList:Qn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},hs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class us extends bt{constructor(e,i){if(void 0===t)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ds}static get DefaultType(){return hs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),ut.off(this._element.closest(os),rs,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=ut.trigger(this._element,this.constructor.eventName("show")),t=(We(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),ut.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ns),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))ut.on(e,"mouseover",Be);this._queueCallback((()=>{ut.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!ut.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ns),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))ut.off(e,"mouseover",Be);this._activeTrigger.click=!1,this._activeTrigger[ls]=!1,this._activeTrigger[as]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),ut.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(is,ns),t.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",i),this._isAnimated()&&t.classList.add(is),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new es({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[ss]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(is)}_isShown(){return this.tip&&this.tip.classList.contains(ns)}_createPopper(e){const t=Xe(this._config.placement,[this,e,this._element]),i=cs[t.toUpperCase()];return Se(this._element,e,this._getPopperConfig(i))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return Xe(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...Xe(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)ut.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e=t===as?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=t===as?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");ut.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?ls:as]=!0,t._enter()})),ut.on(this._element,i,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?ls:as]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},ut.on(this._element.closest(os),rs,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=gt.getDataAttributes(this._element);for(const e of Object.keys(t))ts.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:Fe(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,i]of Object.entries(this._config))this.constructor.Default[t]!==i&&(e[t]=i);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=us.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Qe(us);const fs=".popover-header",ps=".popover-body",ms={...us.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},gs={...us.DefaultType,content:"(null|string|element|function)"};class _s extends us{static get Default(){return ms}static get DefaultType(){return gs}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[fs]:this._getTitle(),[ps]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each((function(){const t=_s.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Qe(_s);const bs=".bs.scrollspy",vs=`activate${bs}`,ys=`click${bs}`,ws=`load${bs}.data-api`,Es="active",As="[href]",Cs=".nav-link",Ts=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Os={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ks extends bt{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return xs}static get DefaultType(){return Os}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=Fe(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,"string"==typeof e.threshold&&(e.threshold=e.threshold.split(",").map((e=>Number.parseFloat(e)))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(ut.off(this._config.target,ys),ut.on(this._config.target,ys,As,(e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const i=this._rootElement||window,n=t.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((e=>this._observerCallback(e)),e)}_observerCallback(e){const t=e=>this._targetLinks.get(`#${e.target.id}`),i=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of e){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(o));continue}const e=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&e){if(i(o),!n)return}else s||e||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=yt.find(As,this._config.target);for(const t of e){if(!t.hash||ze(t))continue;const e=yt.findOne(decodeURI(t.hash),this._element);He(e)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(Es),this._activateParents(e),ut.trigger(this._element,vs,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains("dropdown-item"))yt.findOne(".dropdown-toggle",e.closest(".dropdown")).classList.add(Es);else for(const t of yt.parents(e,".nav, .list-group"))for(const e of yt.prev(t,Ts))e.classList.add(Es)}_clearActiveClass(e){e.classList.remove(Es);const t=yt.find(`${As}.${Es}`,e);for(const e of t)e.classList.remove(Es)}static jQueryInterface(e){return this.each((function(){const t=ks.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}ut.on(window,ws,(()=>{for(const e of yt.find('[data-bs-spy="scroll"]'))ks.getOrCreateInstance(e)})),Qe(ks);const Ls=".bs.tab",Ss=`hide${Ls}`,Ds=`hidden${Ls}`,$s=`show${Ls}`,Is=`shown${Ls}`,Ps=`click${Ls}`,Ns=`keydown${Ls}`,js=`load${Ls}`,Ms="ArrowLeft",Fs="ArrowRight",Hs="ArrowUp",zs="ArrowDown",Ws="Home",Bs="End",qs="active",Rs="fade",Vs="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ys=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Us=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Gs extends bt{constructor(e){super(e),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),ut.on(this._element,Ns,(e=>this._keydown(e))))}static get NAME(){return"tab"}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),i=t?ut.trigger(t,Ss,{relatedTarget:e}):null;ut.trigger(e,$s,{relatedTarget:t}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){e&&(e.classList.add(qs),this._activate(yt.getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),ut.trigger(e,Is,{relatedTarget:t})):e.classList.add(Vs)}),e,e.classList.contains(Rs)))}_deactivate(e,t){e&&(e.classList.remove(qs),e.blur(),this._deactivate(yt.getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),ut.trigger(e,Ds,{relatedTarget:t})):e.classList.remove(Vs)}),e,e.classList.contains(Rs)))}_keydown(e){if(![Ms,Fs,Hs,zs,Ws,Bs].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=this._getChildren().filter((e=>!ze(e)));let i;if([Ws,Bs].includes(e.key))i=t[e.key===Ws?0:t.length-1];else{const n=[Fs,zs].includes(e.key);i=Ue(t,e.target,n,!0)}i&&(i.focus({preventScroll:!0}),Gs.getOrCreateInstance(i).show())}_getChildren(){return yt.find(Ys,this._parent)}_getActiveElem(){return this._getChildren().find((e=>this._elemIsActive(e)))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),i=this._getOuterElement(e);e.setAttribute("aria-selected",t),i!==e&&this._setAttributeIfNotExists(i,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=yt.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){const i=this._getOuterElement(e);if(!i.classList.contains("dropdown"))return;const n=(e,n)=>{const s=yt.findOne(e,i);s&&s.classList.toggle(n,t)};n(Ks,qs),n(".dropdown-menu",Vs),i.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,i){e.hasAttribute(t)||e.setAttribute(t,i)}_elemIsActive(e){return e.classList.contains(qs)}_getInnerElement(e){return e.matches(Ys)?e:yt.findOne(Ys,e)}_getOuterElement(e){return e.closest(".nav-item, .list-group-item")||e}static jQueryInterface(e){return this.each((function(){const t=Gs.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}ut.on(document,Ps,Xs,(function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),ze(this)||Gs.getOrCreateInstance(this).show()})),ut.on(window,js,(()=>{for(const e of yt.find(Us))Gs.getOrCreateInstance(e)})),Qe(Gs);const Js=".bs.toast",Zs=`mouseover${Js}`,eo=`mouseout${Js}`,to=`focusin${Js}`,io=`focusout${Js}`,no=`hide${Js}`,so=`hidden${Js}`,oo=`show${Js}`,ro=`shown${Js}`,ao="hide",lo="show",co="showing",ho={animation:"boolean",autohide:"boolean",delay:"number"},uo={animation:!0,autohide:!0,delay:5e3};class fo extends bt{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return uo}static get DefaultType(){return ho}static get NAME(){return"toast"}show(){ut.trigger(this._element,oo).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(ao),qe(this._element),this._element.classList.add(lo,co),this._queueCallback((()=>{this._element.classList.remove(co),ut.trigger(this._element,ro),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(ut.trigger(this._element,no).defaultPrevented||(this._element.classList.add(co),this._queueCallback((()=>{this._element.classList.add(ao),this._element.classList.remove(co,lo),ut.trigger(this._element,so)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(lo),super.dispose()}isShown(){return this._element.classList.contains(lo)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const i=e.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){ut.on(this._element,Zs,(e=>this._onInteraction(e,!0))),ut.on(this._element,eo,(e=>this._onInteraction(e,!1))),ut.on(this._element,to,(e=>this._onInteraction(e,!0))),ut.on(this._element,io,(e=>this._onInteraction(e,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each((function(){const t=fo.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}function po(e){return new Promise(((t,i)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>i(e.error)}))}let mo;function go(){return mo||(mo=function(e,t){const i=indexedDB.open("keyval-store");i.onupgradeneeded=()=>i.result.createObjectStore(t);const n=po(i);return(e,i)=>n.then((n=>i(n.transaction(t,e).objectStore(t))))}(0,"keyval")),mo}function _o(e,t,i=go()){return i("readwrite",(i=>(i.put(t,e),po(i.transaction))))}function bo(e){if("png"==e)return!0;try{return ClipboardItem.supports("svg"==e?"image/svg+xml":"image/jpeg")}catch(e){return console.error(e," - error = no support for PNG"),!1}}wt(fo),Qe(fo);var vo=function(e,t,i,n){return new(i||(i=Promise))((function(s,o){function r(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(r,a)}l((n=n.apply(e,t||[])).next())}))};const yo={size:{width:document.querySelector("#size-width"),height:document.querySelector("#size-height")},main:document.querySelector("#card-body")};window.onload=()=>vo(void 0,void 0,void 0,(function*(){var e;let t=null!==(e=yield function(e,t=go()){return t("readonly",(t=>po(t.get(e))))}("size"))&&void 0!==e?e:2e3;yo.size.width.value=t,yo.size.height.value=t,console.log(t),yo.size.width.onkeyup=yo.size.width.onpaste=yo.size.width.onchange=()=>vo(void 0,void 0,void 0,(function*(){yield _o("size",yo.size.width.value),yo.size.height.value=yo.size.width.value}));let i=["png"];try{bo("svg")&&i.push("svg"),bo("jpeg")&&i.push("jpeg")}catch(e){throw console.log("ClipboardItem.supports() error, reporting PNG-only support"),e}let n=document.createElement("div");n.classList.add("input-group","us-types");let s=document.createElement("button");s.classList.add("btn","btn-outline-secondary","dropdown-toggle"),s.setAttribute("data-bs-toggle","dropdown"),s.setAttribute("aria-expanded","false"),s.innerText="Copy SVGs as",n.appendChild(s);let o=document.createElement("ul");if(o.classList.add("dropdown-menu"),i.includes("svg")){let e=document.createElement("li"),t=document.createElement("a");t.classList.add("dropdown-item"),t.id="svg-copy-svg",t.href="#",t.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-svg","svg")})),t.innerText="SVG",e.appendChild(t),o.appendChild(e)}let r=document.createElement("li"),a=document.createElement("a");a.classList.add("dropdown-item"),a.id="svg-copy-text",a.href="#",a.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-svg","text")})),a.innerText="Text",r.appendChild(a),o.appendChild(r);let l=document.createElement("li"),c=document.createElement("a");c.classList.add("dropdown-item"),c.id="svg-copy-png",c.href="#",c.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-svg","png")})),c.innerText="PNG",l.appendChild(c),o.appendChild(l),n.appendChild(o),new Ki(s);let d=document.createElement("button");d.classList.add("btn","btn-outline-secondary","dropdown-toggle"),d.setAttribute("data-bs-toggle","dropdown"),d.setAttribute("aria-expanded","false"),d.innerText="Copy JPGs as",n.appendChild(d);let h=document.createElement("ul");if(h.classList.add("dropdown-menu"),i.includes("jpeg")){let e=document.createElement("li"),t=document.createElement("a");t.classList.add("dropdown-item"),t.id="jpg-copy-jpg",t.href="#",t.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-jpg","jpg")})),t.innerText="JPG",e.appendChild(t),h.appendChild(e)}let u=document.createElement("li"),f=document.createElement("a");f.classList.add("dropdown-item"),f.id="jpg-copy-png",f.href="#",f.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-jpg","png")})),f.innerText="PNG",u.appendChild(f),h.appendChild(u);let p=document.createElement("li"),m=document.createElement("a");m.classList.add("dropdown-item"),m.id="jpg-copy-text",m.href="#",m.onclick=()=>vo(void 0,void 0,void 0,(function*(){yield _o("copy-jpg","text")})),m.innerText="Text (not recommended!)",p.appendChild(m),h.appendChild(p),n.appendChild(h),new Ki(d),yo.main.appendChild(document.createElement("br")),yo.main.appendChild(n),yo.size.width.disabled=!1}))})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJtYXBwaW5ncyI6IjttQkFDQSxJQUFJQSxFQUFzQixDQ0ExQkEsRUFBd0IsQ0FBQ0MsRUFBU0MsS0FDakMsSUFBSSxJQUFJQyxLQUFPRCxFQUNYRixFQUFvQkksRUFBRUYsRUFBWUMsS0FBU0gsRUFBb0JJLEVBQUVILEVBQVNFLElBQzVFRSxPQUFPQyxlQUFlTCxFQUFTRSxFQUFLLENBQUVJLFlBQVksRUFBTUMsSUFBS04sRUFBV0MsSUFFMUUsRUNOREgsRUFBd0IsQ0FBQ1MsRUFBS0MsSUFBVUwsT0FBT00sVUFBVUMsZUFBZUMsS0FBS0osRUFBS0MsR0NDbEZWLEVBQXlCQyxJQUNILG9CQUFYYSxRQUEwQkEsT0FBT0MsYUFDMUNWLE9BQU9DLGVBQWVMLEVBQVNhLE9BQU9DLFlBQWEsQ0FBRUMsTUFBTyxXQUU3RFgsT0FBT0MsZUFBZUwsRUFBUyxhQUFjLENBQUVlLE9BQU8sR0FBTyxpcEJDTHZELElBQUksRUFBTSxNQUNOQyxFQUFTLFNBQ1RDLEVBQVEsUUFDUkMsRUFBTyxPQUNQQyxFQUFPLE9BQ1BDLEVBQWlCLENBQUMsRUFBS0osRUFBUUMsRUFBT0MsR0FDdENHLEVBQVEsUUFDUkMsRUFBTSxNQUNOQyxFQUFrQixrQkFDbEJDLEVBQVcsV0FDWEMsRUFBUyxTQUNUQyxFQUFZLFlBQ1pDLEVBQW1DUCxFQUFlUSxRQUFPLFNBQVVDLEVBQUtDLEdBQ2pGLE9BQU9ELEVBQUlFLE9BQU8sQ0FBQ0QsRUFBWSxJQUFNVCxFQUFPUyxFQUFZLElBQU1SLEdBQ2hFLEdBQUcsSUFDUSxFQUEwQixHQUFHUyxPQUFPWCxFQUFnQixDQUFDRCxJQUFPUyxRQUFPLFNBQVVDLEVBQUtDLEdBQzNGLE9BQU9ELEVBQUlFLE9BQU8sQ0FBQ0QsRUFBV0EsRUFBWSxJQUFNVCxFQUFPUyxFQUFZLElBQU1SLEdBQzNFLEdBQUcsSUFFUVUsRUFBYSxhQUNiQyxFQUFPLE9BQ1BDLEVBQVksWUFFWkMsRUFBYSxhQUNiQyxFQUFPLE9BQ1BDLEVBQVksWUFFWkMsRUFBYyxjQUNkQyxFQUFRLFFBQ1JDLEVBQWEsYUFDYkMsRUFBaUIsQ0FBQ1QsRUFBWUMsRUFBTUMsRUFBV0MsRUFBWUMsRUFBTUMsRUFBV0MsRUFBYUMsRUFBT0MsR0M5QjVGLFNBQVNFLEVBQVlDLEdBQ2xDLE9BQU9BLEdBQVdBLEVBQVFDLFVBQVksSUFBSUMsY0FBZ0IsSUFDNUQsQ0NGZSxTQUFTQyxFQUFVQyxHQUNoQyxHQUFZLE1BQVJBLEVBQ0YsT0FBT0MsT0FHVCxHQUF3QixvQkFBcEJELEVBQUtFLFdBQWtDLENBQ3pDLElBQUlDLEVBQWdCSCxFQUFLRyxjQUN6QixPQUFPQSxHQUFnQkEsRUFBY0MsYUFBd0JILE1BQy9ELENBRUEsT0FBT0QsQ0FDVCxDQ1RBLFNBQVNLLEVBQVVMLEdBRWpCLE9BQU9BLGFBRFVELEVBQVVDLEdBQU1NLFNBQ0lOLGFBQWdCTSxPQUN2RCxDQUVBLFNBQVNDLEVBQWNQLEdBRXJCLE9BQU9BLGFBRFVELEVBQVVDLEdBQU1RLGFBQ0lSLGFBQWdCUSxXQUN2RCxDQUVBLFNBQVNDLEVBQWFULEdBRXBCLE1BQTBCLG9CQUFmVSxhQUtKVixhQURVRCxFQUFVQyxHQUFNVSxZQUNJVixhQUFnQlUsV0FDdkQsQ0N3REEsU0FDRUMsS0FBTSxjQUNOQyxTQUFTLEVBQ1RDLE1BQU8sUUFDUEMsR0E1RUYsU0FBcUJDLEdBQ25CLElBQUlDLEVBQVFELEVBQUtDLE1BQ2pCM0QsT0FBTzRELEtBQUtELEVBQU1FLFVBQVVDLFNBQVEsU0FBVVIsR0FDNUMsSUFBSVMsRUFBUUosRUFBTUssT0FBT1YsSUFBUyxDQUFDLEVBQy9CVyxFQUFhTixFQUFNTSxXQUFXWCxJQUFTLENBQUMsRUFDeENmLEVBQVVvQixFQUFNRSxTQUFTUCxHQUV4QkosRUFBY1gsSUFBYUQsRUFBWUMsS0FPNUN2QyxPQUFPa0UsT0FBTzNCLEVBQVF3QixNQUFPQSxHQUM3Qi9ELE9BQU80RCxLQUFLSyxHQUFZSCxTQUFRLFNBQVVSLEdBQ3hDLElBQUkzQyxFQUFRc0QsRUFBV1gsSUFFVCxJQUFWM0MsRUFDRjRCLEVBQVE0QixnQkFBZ0JiLEdBRXhCZixFQUFRNkIsYUFBYWQsR0FBZ0IsSUFBVjNDLEVBQWlCLEdBQUtBLEVBRXJELElBQ0YsR0FDRixFQW9ERTBELE9BbERGLFNBQWdCQyxHQUNkLElBQUlYLEVBQVFXLEVBQU1YLE1BQ2RZLEVBQWdCLENBQ2xCbEQsT0FBUSxDQUNObUQsU0FBVWIsRUFBTWMsUUFBUUMsU0FDeEI1RCxLQUFNLElBQ042RCxJQUFLLElBQ0xDLE9BQVEsS0FFVkMsTUFBTyxDQUNMTCxTQUFVLFlBRVpsRCxVQUFXLENBQUMsR0FTZCxPQVBBdEIsT0FBT2tFLE9BQU9QLEVBQU1FLFNBQVN4QyxPQUFPMEMsTUFBT1EsRUFBY2xELFFBQ3pEc0MsRUFBTUssT0FBU08sRUFFWFosRUFBTUUsU0FBU2dCLE9BQ2pCN0UsT0FBT2tFLE9BQU9QLEVBQU1FLFNBQVNnQixNQUFNZCxNQUFPUSxFQUFjTSxPQUduRCxXQUNMN0UsT0FBTzRELEtBQUtELEVBQU1FLFVBQVVDLFNBQVEsU0FBVVIsR0FDNUMsSUFBSWYsRUFBVW9CLEVBQU1FLFNBQVNQLEdBQ3pCVyxFQUFhTixFQUFNTSxXQUFXWCxJQUFTLENBQUMsRUFHeENTLEVBRmtCL0QsT0FBTzRELEtBQUtELEVBQU1LLE9BQU96RCxlQUFlK0MsR0FBUUssRUFBTUssT0FBT1YsR0FBUWlCLEVBQWNqQixJQUU3RTlCLFFBQU8sU0FBVXVDLEVBQU9lLEdBRWxELE9BREFmLEVBQU1lLEdBQVksR0FDWGYsQ0FDVCxHQUFHLENBQUMsR0FFQ2IsRUFBY1gsSUFBYUQsRUFBWUMsS0FJNUN2QyxPQUFPa0UsT0FBTzNCLEVBQVF3QixNQUFPQSxHQUM3Qi9ELE9BQU80RCxLQUFLSyxHQUFZSCxTQUFRLFNBQVVpQixHQUN4Q3hDLEVBQVE0QixnQkFBZ0JZLEVBQzFCLElBQ0YsR0FDRixDQUNGLEVBU0VDLFNBQVUsQ0FBQyxrQkNqRkUsU0FBU0MsRUFBaUJ2RCxHQUN2QyxPQUFPQSxFQUFVd0QsTUFBTSxLQUFLLEVBQzlCLENDSE8sSUFBSSxFQUFNQyxLQUFLQyxJQUNYLEVBQU1ELEtBQUtFLElBQ1hDLEVBQVFILEtBQUtHLE1DRlQsU0FBU0MsSUFDdEIsSUFBSUMsRUFBU0MsVUFBVUMsY0FFdkIsT0FBYyxNQUFWRixHQUFrQkEsRUFBT0csUUFBVUMsTUFBTUMsUUFBUUwsRUFBT0csUUFDbkRILEVBQU9HLE9BQU9HLEtBQUksU0FBVUMsR0FDakMsT0FBT0EsRUFBS0MsTUFBUSxJQUFNRCxFQUFLRSxPQUNqQyxJQUFHQyxLQUFLLEtBR0hULFVBQVVVLFNBQ25CLENDVGUsU0FBU0MsSUFDdEIsT0FBUSxpQ0FBaUNDLEtBQUtkLElBQ2hELENDQ2UsU0FBU2UsRUFBc0IvRCxFQUFTZ0UsRUFBY0MsUUFDOUMsSUFBakJELElBQ0ZBLEdBQWUsUUFHTyxJQUFwQkMsSUFDRkEsR0FBa0IsR0FHcEIsSUFBSUMsRUFBYWxFLEVBQVErRCx3QkFDckJJLEVBQVMsRUFDVEMsRUFBUyxFQUVUSixHQUFnQnJELEVBQWNYLEtBQ2hDbUUsRUFBU25FLEVBQVFxRSxZQUFjLEdBQUl0QixFQUFNbUIsRUFBV0ksT0FBU3RFLEVBQVFxRSxhQUFtQixFQUN4RkQsRUFBU3BFLEVBQVF1RSxhQUFlLEdBQUl4QixFQUFNbUIsRUFBV00sUUFBVXhFLEVBQVF1RSxjQUFvQixHQUc3RixJQUNJRSxHQURPaEUsRUFBVVQsR0FBV0csRUFBVUgsR0FBV0ssUUFDM0JvRSxlQUV0QkMsR0FBb0JiLEtBQXNCSSxFQUMxQ1UsR0FBS1QsRUFBVzNGLE1BQVFtRyxHQUFvQkQsRUFBaUJBLEVBQWVHLFdBQWEsSUFBTVQsRUFDL0ZVLEdBQUtYLEVBQVc5QixLQUFPc0MsR0FBb0JELEVBQWlCQSxFQUFlSyxVQUFZLElBQU1WLEVBQzdGRSxFQUFRSixFQUFXSSxNQUFRSCxFQUMzQkssRUFBU04sRUFBV00sT0FBU0osRUFDakMsTUFBTyxDQUNMRSxNQUFPQSxFQUNQRSxPQUFRQSxFQUNScEMsSUFBS3lDLEVBQ0x2RyxNQUFPcUcsRUFBSUwsRUFDWGpHLE9BQVF3RyxFQUFJTCxFQUNaakcsS0FBTW9HLEVBQ05BLEVBQUdBLEVBQ0hFLEVBQUdBLEVBRVAsQ0NyQ2UsU0FBU0UsRUFBYy9FLEdBQ3BDLElBQUlrRSxFQUFhSCxFQUFzQi9ELEdBR25Dc0UsRUFBUXRFLEVBQVFxRSxZQUNoQkcsRUFBU3hFLEVBQVF1RSxhQVVyQixPQVJJM0IsS0FBS29DLElBQUlkLEVBQVdJLE1BQVFBLElBQVUsSUFDeENBLEVBQVFKLEVBQVdJLE9BR2pCMUIsS0FBS29DLElBQUlkLEVBQVdNLE9BQVNBLElBQVcsSUFDMUNBLEVBQVNOLEVBQVdNLFFBR2YsQ0FDTEcsRUFBRzNFLEVBQVE0RSxXQUNYQyxFQUFHN0UsRUFBUThFLFVBQ1hSLE1BQU9BLEVBQ1BFLE9BQVFBLEVBRVosQ0N2QmUsU0FBU1MsRUFBU0MsRUFBUUMsR0FDdkMsSUFBSUMsRUFBV0QsRUFBTUUsYUFBZUYsRUFBTUUsY0FFMUMsR0FBSUgsRUFBT0QsU0FBU0UsR0FDbEIsT0FBTyxFQUVKLEdBQUlDLEdBQVl2RSxFQUFhdUUsR0FBVyxDQUN6QyxJQUFJRSxFQUFPSCxFQUVYLEVBQUcsQ0FDRCxHQUFJRyxHQUFRSixFQUFPSyxXQUFXRCxHQUM1QixPQUFPLEVBSVRBLEVBQU9BLEVBQUtFLFlBQWNGLEVBQUtHLElBQ2pDLE9BQVNILEVBQ1gsQ0FHRixPQUFPLENBQ1QsQ0NyQmUsU0FBUyxFQUFpQnRGLEdBQ3ZDLE9BQU9HLEVBQVVILEdBQVMwRixpQkFBaUIxRixFQUM3QyxDQ0ZlLFNBQVMyRixFQUFlM0YsR0FDckMsTUFBTyxDQUFDLFFBQVMsS0FBTSxNQUFNNEYsUUFBUTdGLEVBQVlDLEtBQWEsQ0FDaEUsQ0NGZSxTQUFTNkYsRUFBbUI3RixHQUV6QyxRQUFTUyxFQUFVVCxHQUFXQSxFQUFRTyxjQUN0Q1AsRUFBUThGLFdBQWF6RixPQUFPeUYsVUFBVUMsZUFDeEMsQ0NGZSxTQUFTQyxFQUFjaEcsR0FDcEMsTUFBNkIsU0FBekJELEVBQVlDLEdBQ1BBLEVBTVBBLEVBQVFpRyxjQUNSakcsRUFBUXdGLGFBQ1IzRSxFQUFhYixHQUFXQSxFQUFReUYsS0FBTyxPQUV2Q0ksRUFBbUI3RixFQUd2QixDQ1ZBLFNBQVNrRyxFQUFvQmxHLEdBQzNCLE9BQUtXLEVBQWNYLElBQ29CLFVBQXZDLEVBQWlCQSxHQUFTaUMsU0FJbkJqQyxFQUFRbUcsYUFITixJQUlYLENBd0NlLFNBQVNDLEVBQWdCcEcsR0FJdEMsSUFIQSxJQUFJSyxFQUFTRixFQUFVSCxHQUNuQm1HLEVBQWVELEVBQW9CbEcsR0FFaENtRyxHQUFnQlIsRUFBZVEsSUFBNkQsV0FBNUMsRUFBaUJBLEdBQWNsRSxVQUNwRmtFLEVBQWVELEVBQW9CQyxHQUdyQyxPQUFJQSxJQUErQyxTQUE5QnBHLEVBQVlvRyxJQUEwRCxTQUE5QnBHLEVBQVlvRyxJQUF3RSxXQUE1QyxFQUFpQkEsR0FBY2xFLFVBQzNINUIsRUFHRjhGLEdBaERULFNBQTRCbkcsR0FDMUIsSUFBSXFHLEVBQVksV0FBV3ZDLEtBQUtkLEtBR2hDLEdBRlcsV0FBV2MsS0FBS2QsTUFFZnJDLEVBQWNYLElBSUksVUFGWCxFQUFpQkEsR0FFbkJpQyxTQUNiLE9BQU8sS0FJWCxJQUFJcUUsRUFBY04sRUFBY2hHLEdBTWhDLElBSklhLEVBQWF5RixLQUNmQSxFQUFjQSxFQUFZYixNQUdyQjlFLEVBQWMyRixJQUFnQixDQUFDLE9BQVEsUUFBUVYsUUFBUTdGLEVBQVl1RyxJQUFnQixHQUFHLENBQzNGLElBQUlDLEVBQU0sRUFBaUJELEdBSTNCLEdBQXNCLFNBQWxCQyxFQUFJQyxXQUE0QyxTQUFwQkQsRUFBSUUsYUFBMEMsVUFBaEJGLEVBQUlHLFVBQWlGLElBQTFELENBQUMsWUFBYSxlQUFlZCxRQUFRVyxFQUFJSSxhQUFzQk4sR0FBZ0MsV0FBbkJFLEVBQUlJLFlBQTJCTixHQUFhRSxFQUFJSyxRQUF5QixTQUFmTCxFQUFJSyxPQUNqTyxPQUFPTixFQUVQQSxFQUFjQSxFQUFZZCxVQUU5QixDQUVBLE9BQU8sSUFDVCxDQWdCeUJxQixDQUFtQjdHLElBQVlLLENBQ3hELENDcEVlLFNBQVN5RyxFQUF5QjNILEdBQy9DLE1BQU8sQ0FBQyxNQUFPLFVBQVV5RyxRQUFRekcsSUFBYyxFQUFJLElBQU0sR0FDM0QsQ0NETyxTQUFTNEgsRUFBT2pFLEVBQUsxRSxFQUFPeUUsR0FDakMsT0FBTyxFQUFRQyxFQUFLLEVBQVExRSxFQUFPeUUsR0FDckMsQ0NGZSxTQUFTbUUsRUFBbUJDLEdBQ3pDLE9BQU94SixPQUFPa0UsT0FBTyxDQUFDLEVDRGYsQ0FDTFMsSUFBSyxFQUNMOUQsTUFBTyxFQUNQRCxPQUFRLEVBQ1JFLEtBQU0sR0RIdUMwSSxFQUNqRCxDRUhlLFNBQVNDLEVBQWdCOUksRUFBT2lELEdBQzdDLE9BQU9BLEVBQUtwQyxRQUFPLFNBQVVrSSxFQUFTNUosR0FFcEMsT0FEQTRKLEVBQVE1SixHQUFPYSxFQUNSK0ksQ0FDVCxHQUFHLENBQUMsRUFDTixDQzRFQSxTQUNFcEcsS0FBTSxRQUNOQyxTQUFTLEVBQ1RDLE1BQU8sT0FDUEMsR0FwRUYsU0FBZUMsR0FDYixJQUFJaUcsRUFFQWhHLEVBQVFELEVBQUtDLE1BQ2JMLEVBQU9JLEVBQUtKLEtBQ1ptQixFQUFVZixFQUFLZSxRQUNmbUYsRUFBZWpHLEVBQU1FLFNBQVNnQixNQUM5QmdGLEVBQWdCbEcsRUFBTW1HLGNBQWNELGNBQ3BDRSxFQUFnQjlFLEVBQWlCdEIsRUFBTWpDLFdBQ3ZDc0ksRUFBT1gsRUFBeUJVLEdBRWhDRSxFQURhLENBQUNuSixFQUFNRCxHQUFPc0gsUUFBUTRCLElBQWtCLEVBQ2xDLFNBQVcsUUFFbEMsR0FBS0gsR0FBaUJDLEVBQXRCLENBSUEsSUFBSUwsRUF4QmdCLFNBQXlCVSxFQUFTdkcsR0FJdEQsT0FBTzRGLEVBQXNDLGlCQUg3Q1csRUFBNkIsbUJBQVpBLEVBQXlCQSxFQUFRbEssT0FBT2tFLE9BQU8sQ0FBQyxFQUFHUCxFQUFNd0csTUFBTyxDQUMvRXpJLFVBQVdpQyxFQUFNakMsYUFDYndJLEdBQ2tEQSxFQUFVVCxFQUFnQlMsRUFBU2xKLEdBQzdGLENBbUJzQm9KLENBQWdCM0YsRUFBUXlGLFFBQVN2RyxHQUNqRDBHLEVBQVkvQyxFQUFjc0MsR0FDMUJVLEVBQW1CLE1BQVROLEVBQWUsRUFBTWxKLEVBQy9CeUosRUFBbUIsTUFBVFAsRUFBZXBKLEVBQVNDLEVBQ2xDMkosRUFBVTdHLEVBQU13RyxNQUFNN0ksVUFBVTJJLEdBQU90RyxFQUFNd0csTUFBTTdJLFVBQVUwSSxHQUFRSCxFQUFjRyxHQUFRckcsRUFBTXdHLE1BQU05SSxPQUFPNEksR0FDOUdRLEVBQVlaLEVBQWNHLEdBQVFyRyxFQUFNd0csTUFBTTdJLFVBQVUwSSxHQUN4RFUsRUFBb0IvQixFQUFnQmlCLEdBQ3BDZSxFQUFhRCxFQUE2QixNQUFUVixFQUFlVSxFQUFrQkUsY0FBZ0IsRUFBSUYsRUFBa0JHLGFBQWUsRUFBSSxFQUMzSEMsRUFBb0JOLEVBQVUsRUFBSUMsRUFBWSxFQUc5Q3BGLEVBQU1tRSxFQUFjYyxHQUNwQmxGLEVBQU11RixFQUFhTixFQUFVSixHQUFPVCxFQUFjZSxHQUNsRFEsRUFBU0osRUFBYSxFQUFJTixFQUFVSixHQUFPLEVBQUlhLEVBQy9DRSxFQUFTMUIsRUFBT2pFLEVBQUswRixFQUFRM0YsR0FFN0I2RixFQUFXakIsRUFDZnJHLEVBQU1tRyxjQUFjeEcsS0FBU3FHLEVBQXdCLENBQUMsR0FBeUJzQixHQUFZRCxFQUFRckIsRUFBc0J1QixhQUFlRixFQUFTRCxFQUFRcEIsRUFuQnpKLENBb0JGLEVBa0NFdEYsT0FoQ0YsU0FBZ0JDLEdBQ2QsSUFBSVgsRUFBUVcsRUFBTVgsTUFFZHdILEVBRFU3RyxFQUFNRyxRQUNXbEMsUUFDM0JxSCxPQUFvQyxJQUFyQnVCLEVBQThCLHNCQUF3QkEsRUFFckQsTUFBaEJ2QixJQUt3QixpQkFBakJBLElBQ1RBLEVBQWVqRyxFQUFNRSxTQUFTeEMsT0FBTytKLGNBQWN4QixNQU9oRHBDLEVBQVM3RCxFQUFNRSxTQUFTeEMsT0FBUXVJLEtBSXJDakcsRUFBTUUsU0FBU2dCLE1BQVErRSxFQUN6QixFQVNFNUUsU0FBVSxDQUFDLGlCQUNYcUcsaUJBQWtCLENBQUMsb0JDeEZOLFNBQVNDLEVBQWE1SixHQUNuQyxPQUFPQSxFQUFVd0QsTUFBTSxLQUFLLEVBQzlCLENDT0EsSUFBSXFHLEVBQWEsQ0FDZjVHLElBQUssT0FDTDlELE1BQU8sT0FDUEQsT0FBUSxPQUNSRSxLQUFNLFFBZUQsU0FBUzBLLEdBQVlsSCxHQUMxQixJQUFJbUgsRUFFQXBLLEVBQVNpRCxFQUFNakQsT0FDZnFLLEVBQWFwSCxFQUFNb0gsV0FDbkJoSyxFQUFZNEMsRUFBTTVDLFVBQ2xCaUssRUFBWXJILEVBQU1xSCxVQUNsQkMsRUFBVXRILEVBQU1zSCxRQUNoQnBILEVBQVdGLEVBQU1FLFNBQ2pCcUgsRUFBa0J2SCxFQUFNdUgsZ0JBQ3hCQyxFQUFXeEgsRUFBTXdILFNBQ2pCQyxFQUFlekgsRUFBTXlILGFBQ3JCQyxFQUFVMUgsRUFBTTBILFFBQ2hCQyxFQUFhTCxFQUFRMUUsRUFDckJBLE9BQW1CLElBQWYrRSxFQUF3QixFQUFJQSxFQUNoQ0MsRUFBYU4sRUFBUXhFLEVBQ3JCQSxPQUFtQixJQUFmOEUsRUFBd0IsRUFBSUEsRUFFaENDLEVBQWdDLG1CQUFqQkosRUFBOEJBLEVBQWEsQ0FDNUQ3RSxFQUFHQSxFQUNIRSxJQUNHLENBQ0hGLEVBQUdBLEVBQ0hFLEdBR0ZGLEVBQUlpRixFQUFNakYsRUFDVkUsRUFBSStFLEVBQU0vRSxFQUNWLElBQUlnRixFQUFPUixFQUFRckwsZUFBZSxLQUM5QjhMLEVBQU9ULEVBQVFyTCxlQUFlLEtBQzlCK0wsRUFBUXhMLEVBQ1J5TCxFQUFRLEVBQ1JDLEVBQU01SixPQUVWLEdBQUlrSixFQUFVLENBQ1osSUFBSXBELEVBQWVDLEVBQWdCdEgsR0FDL0JvTCxFQUFhLGVBQ2JDLEVBQVksY0FFWmhFLElBQWlCaEcsRUFBVXJCLElBR21CLFdBQTVDLEVBRkpxSCxFQUFlTixFQUFtQi9HLElBRUNtRCxVQUFzQyxhQUFiQSxJQUMxRGlJLEVBQWEsZUFDYkMsRUFBWSxnQkFPWmhMLElBQWMsSUFBUUEsSUFBY1osR0FBUVksSUFBY2IsSUFBVThLLElBQWN6SyxLQUNwRnFMLEVBQVEzTCxFQUdSd0csSUFGYzRFLEdBQVd0RCxJQUFpQjhELEdBQU9BLEVBQUl4RixlQUFpQndGLEVBQUl4RixlQUFlRCxPQUN6RjJCLEVBQWErRCxJQUNFZixFQUFXM0UsT0FDMUJLLEdBQUt5RSxFQUFrQixHQUFLLEdBRzFCbkssSUFBY1osSUFBU1ksSUFBYyxHQUFPQSxJQUFjZCxHQUFXK0ssSUFBY3pLLEtBQ3JGb0wsRUFBUXpMLEVBR1JxRyxJQUZjOEUsR0FBV3RELElBQWlCOEQsR0FBT0EsRUFBSXhGLGVBQWlCd0YsRUFBSXhGLGVBQWVILE1BQ3pGNkIsRUFBYWdFLElBQ0VoQixFQUFXN0UsTUFDMUJLLEdBQUsyRSxFQUFrQixHQUFLLEVBRWhDLENBRUEsSUFnQk1jLEVBaEJGQyxFQUFlNU0sT0FBT2tFLE9BQU8sQ0FDL0JNLFNBQVVBLEdBQ1RzSCxHQUFZUCxHQUVYc0IsR0FBeUIsSUFBakJkLEVBbEZkLFNBQTJCckksRUFBTThJLEdBQy9CLElBQUl0RixFQUFJeEQsRUFBS3dELEVBQ1RFLEVBQUkxRCxFQUFLMEQsRUFDVDBGLEVBQU1OLEVBQUlPLGtCQUFvQixFQUNsQyxNQUFPLENBQ0w3RixFQUFHNUIsRUFBTTRCLEVBQUk0RixHQUFPQSxHQUFPLEVBQzNCMUYsRUFBRzlCLEVBQU04QixFQUFJMEYsR0FBT0EsR0FBTyxFQUUvQixDQTBFc0NFLENBQWtCLENBQ3BEOUYsRUFBR0EsRUFDSEUsR0FDQzFFLEVBQVVyQixJQUFXLENBQ3RCNkYsRUFBR0EsRUFDSEUsR0FNRixPQUhBRixFQUFJMkYsRUFBTTNGLEVBQ1ZFLEVBQUl5RixFQUFNekYsRUFFTnlFLEVBR0s3TCxPQUFPa0UsT0FBTyxDQUFDLEVBQUcwSSxJQUFlRCxFQUFpQixDQUFDLEdBQWtCSixHQUFTRixFQUFPLElBQU0sR0FBSU0sRUFBZUwsR0FBU0YsRUFBTyxJQUFNLEdBQUlPLEVBQWU1RCxXQUFheUQsRUFBSU8sa0JBQW9CLElBQU0sRUFBSSxhQUFlN0YsRUFBSSxPQUFTRSxFQUFJLE1BQVEsZUFBaUJGLEVBQUksT0FBU0UsRUFBSSxTQUFVdUYsSUFHNVIzTSxPQUFPa0UsT0FBTyxDQUFDLEVBQUcwSSxJQUFlbkIsRUFBa0IsQ0FBQyxHQUFtQmMsR0FBU0YsRUFBT2pGLEVBQUksS0FBTyxHQUFJcUUsRUFBZ0JhLEdBQVNGLEVBQU9sRixFQUFJLEtBQU8sR0FBSXVFLEVBQWdCMUMsVUFBWSxHQUFJMEMsR0FDOUwsQ0E0Q0EsVUFDRW5JLEtBQU0sZ0JBQ05DLFNBQVMsRUFDVEMsTUFBTyxjQUNQQyxHQTlDRixTQUF1QndKLEdBQ3JCLElBQUl0SixFQUFRc0osRUFBTXRKLE1BQ2RjLEVBQVV3SSxFQUFNeEksUUFDaEJ5SSxFQUF3QnpJLEVBQVFvSCxnQkFDaENBLE9BQTRDLElBQTFCcUIsR0FBMENBLEVBQzVEQyxFQUFvQjFJLEVBQVFxSCxTQUM1QkEsT0FBaUMsSUFBdEJxQixHQUFzQ0EsRUFDakRDLEVBQXdCM0ksRUFBUXNILGFBQ2hDQSxPQUF5QyxJQUExQnFCLEdBQTBDQSxFQUN6RFIsRUFBZSxDQUNqQmxMLFVBQVd1RCxFQUFpQnRCLEVBQU1qQyxXQUNsQ2lLLFVBQVdMLEVBQWEzSCxFQUFNakMsV0FDOUJMLE9BQVFzQyxFQUFNRSxTQUFTeEMsT0FDdkJxSyxXQUFZL0gsRUFBTXdHLE1BQU05SSxPQUN4QndLLGdCQUFpQkEsRUFDakJHLFFBQW9DLFVBQTNCckksRUFBTWMsUUFBUUMsVUFHZ0IsTUFBckNmLEVBQU1tRyxjQUFjRCxnQkFDdEJsRyxFQUFNSyxPQUFPM0MsT0FBU3JCLE9BQU9rRSxPQUFPLENBQUMsRUFBR1AsRUFBTUssT0FBTzNDLE9BQVFtSyxHQUFZeEwsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHMEksRUFBYyxDQUN2R2hCLFFBQVNqSSxFQUFNbUcsY0FBY0QsY0FDN0JyRixTQUFVYixFQUFNYyxRQUFRQyxTQUN4Qm9ILFNBQVVBLEVBQ1ZDLGFBQWNBLE9BSWUsTUFBN0JwSSxFQUFNbUcsY0FBY2pGLFFBQ3RCbEIsRUFBTUssT0FBT2EsTUFBUTdFLE9BQU9rRSxPQUFPLENBQUMsRUFBR1AsRUFBTUssT0FBT2EsTUFBTzJHLEdBQVl4TCxPQUFPa0UsT0FBTyxDQUFDLEVBQUcwSSxFQUFjLENBQ3JHaEIsUUFBU2pJLEVBQU1tRyxjQUFjakYsTUFDN0JMLFNBQVUsV0FDVnNILFVBQVUsRUFDVkMsYUFBY0EsT0FJbEJwSSxFQUFNTSxXQUFXNUMsT0FBU3JCLE9BQU9rRSxPQUFPLENBQUMsRUFBR1AsRUFBTU0sV0FBVzVDLE9BQVEsQ0FDbkUsd0JBQXlCc0MsRUFBTWpDLFdBRW5DLEVBUUUyTCxLQUFNLENBQUMsR0NyS1QsSUFBSUMsR0FBVSxDQUNaQSxTQUFTLEdBc0NYLFVBQ0VoSyxLQUFNLGlCQUNOQyxTQUFTLEVBQ1RDLE1BQU8sUUFDUEMsR0FBSSxXQUFlLEVBQ25CWSxPQXhDRixTQUFnQlgsR0FDZCxJQUFJQyxFQUFRRCxFQUFLQyxNQUNiNEosRUFBVzdKLEVBQUs2SixTQUNoQjlJLEVBQVVmLEVBQUtlLFFBQ2YrSSxFQUFrQi9JLEVBQVFnSixPQUMxQkEsT0FBNkIsSUFBcEJELEdBQW9DQSxFQUM3Q0UsRUFBa0JqSixFQUFRa0osT0FDMUJBLE9BQTZCLElBQXBCRCxHQUFvQ0EsRUFDN0M5SyxFQUFTRixFQUFVaUIsRUFBTUUsU0FBU3hDLFFBQ2xDdU0sRUFBZ0IsR0FBR2pNLE9BQU9nQyxFQUFNaUssY0FBY3RNLFVBQVdxQyxFQUFNaUssY0FBY3ZNLFFBWWpGLE9BVklvTSxHQUNGRyxFQUFjOUosU0FBUSxTQUFVK0osR0FDOUJBLEVBQWFDLGlCQUFpQixTQUFVUCxFQUFTUSxPQUFRVCxHQUMzRCxJQUdFSyxHQUNGL0ssRUFBT2tMLGlCQUFpQixTQUFVUCxFQUFTUSxPQUFRVCxJQUc5QyxXQUNERyxHQUNGRyxFQUFjOUosU0FBUSxTQUFVK0osR0FDOUJBLEVBQWFHLG9CQUFvQixTQUFVVCxFQUFTUSxPQUFRVCxHQUM5RCxJQUdFSyxHQUNGL0ssRUFBT29MLG9CQUFvQixTQUFVVCxFQUFTUSxPQUFRVCxHQUUxRCxDQUNGLEVBU0VELEtBQU0sQ0FBQyxHQy9DVCxJQUFJWSxHQUFPLENBQ1RuTixLQUFNLFFBQ05ELE1BQU8sT0FDUEQsT0FBUSxNQUNSK0QsSUFBSyxVQUVRLFNBQVN1SixHQUFxQnhNLEdBQzNDLE9BQU9BLEVBQVV5TSxRQUFRLDBCQUEwQixTQUFVQyxHQUMzRCxPQUFPSCxHQUFLRyxFQUNkLEdBQ0YsQ0NWQSxJQUFJLEdBQU8sQ0FDVG5OLE1BQU8sTUFDUEMsSUFBSyxTQUVRLFNBQVNtTixHQUE4QjNNLEdBQ3BELE9BQU9BLEVBQVV5TSxRQUFRLGNBQWMsU0FBVUMsR0FDL0MsT0FBTyxHQUFLQSxFQUNkLEdBQ0YsQ0NQZSxTQUFTRSxHQUFnQjNMLEdBQ3RDLElBQUk2SixFQUFNOUosRUFBVUMsR0FHcEIsTUFBTyxDQUNMNEwsV0FIZS9CLEVBQUlnQyxZQUluQkMsVUFIY2pDLEVBQUlrQyxZQUt0QixDQ05lLFNBQVNDLEdBQW9CcE0sR0FRMUMsT0FBTytELEVBQXNCOEIsRUFBbUI3RixJQUFVekIsS0FBT3dOLEdBQWdCL0wsR0FBU2dNLFVBQzVGLENDWGUsU0FBU0ssR0FBZXJNLEdBRXJDLElBQUlzTSxFQUFvQixFQUFpQnRNLEdBQ3JDdU0sRUFBV0QsRUFBa0JDLFNBQzdCQyxFQUFZRixFQUFrQkUsVUFDOUJDLEVBQVlILEVBQWtCRyxVQUVsQyxNQUFPLDZCQUE2QjNJLEtBQUt5SSxFQUFXRSxFQUFZRCxFQUNsRSxDQ0xlLFNBQVNFLEdBQWdCdE0sR0FDdEMsTUFBSSxDQUFDLE9BQVEsT0FBUSxhQUFhd0YsUUFBUTdGLEVBQVlLLEtBQVUsRUFFdkRBLEVBQUtHLGNBQWNvTSxLQUd4QmhNLEVBQWNQLElBQVNpTSxHQUFlak0sR0FDakNBLEVBR0ZzTSxHQUFnQjFHLEVBQWM1RixHQUN2QyxDQ0plLFNBQVN3TSxHQUFrQjVNLEVBQVM2TSxHQUNqRCxJQUFJQyxPQUVTLElBQVRELElBQ0ZBLEVBQU8sSUFHVCxJQUFJdkIsRUFBZW9CLEdBQWdCMU0sR0FDL0IrTSxFQUFTekIsS0FBcUUsT0FBbER3QixFQUF3QjlNLEVBQVFPLG9CQUF5QixFQUFTdU0sRUFBc0JILE1BQ3BIMUMsRUFBTTlKLEVBQVVtTCxHQUNoQjBCLEVBQVNELEVBQVMsQ0FBQzlDLEdBQUs3SyxPQUFPNkssRUFBSXhGLGdCQUFrQixHQUFJNEgsR0FBZWYsR0FBZ0JBLEVBQWUsSUFBTUEsRUFDN0cyQixFQUFjSixFQUFLek4sT0FBTzROLEdBQzlCLE9BQU9ELEVBQVNFLEVBQ2hCQSxFQUFZN04sT0FBT3dOLEdBQWtCNUcsRUFBY2dILElBQ3JELENDekJlLFNBQVNFLEdBQWlCQyxHQUN2QyxPQUFPMVAsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHd0wsRUFBTSxDQUM3QjVPLEtBQU00TyxFQUFLeEksRUFDWHZDLElBQUsrSyxFQUFLdEksRUFDVnZHLE1BQU82TyxFQUFLeEksRUFBSXdJLEVBQUs3SSxNQUNyQmpHLE9BQVE4TyxFQUFLdEksRUFBSXNJLEVBQUszSSxRQUUxQixDQ3FCQSxTQUFTNEksR0FBMkJwTixFQUFTcU4sRUFBZ0JsTCxHQUMzRCxPQUFPa0wsSUFBbUJ4TyxFQUFXcU8sR0N6QnhCLFNBQXlCbE4sRUFBU21DLEdBQy9DLElBQUk4SCxFQUFNOUosRUFBVUgsR0FDaEJzTixFQUFPekgsRUFBbUI3RixHQUMxQnlFLEVBQWlCd0YsRUFBSXhGLGVBQ3JCSCxFQUFRZ0osRUFBS2hGLFlBQ2I5RCxFQUFTOEksRUFBS2pGLGFBQ2QxRCxFQUFJLEVBQ0pFLEVBQUksRUFFUixHQUFJSixFQUFnQixDQUNsQkgsRUFBUUcsRUFBZUgsTUFDdkJFLEVBQVNDLEVBQWVELE9BQ3hCLElBQUkrSSxFQUFpQjFKLEtBRWpCMEosSUFBbUJBLEdBQStCLFVBQWJwTCxLQUN2Q3dDLEVBQUlGLEVBQWVHLFdBQ25CQyxFQUFJSixFQUFlSyxVQUV2QixDQUVBLE1BQU8sQ0FDTFIsTUFBT0EsRUFDUEUsT0FBUUEsRUFDUkcsRUFBR0EsRUFBSXlILEdBQW9CcE0sR0FDM0I2RSxFQUFHQSxFQUVQLENERHdEMkksQ0FBZ0J4TixFQUFTbUMsSUFBYTFCLEVBQVU0TSxHQWR4RyxTQUFvQ3JOLEVBQVNtQyxHQUMzQyxJQUFJZ0wsRUFBT3BKLEVBQXNCL0QsR0FBUyxFQUFvQixVQUFibUMsR0FTakQsT0FSQWdMLEVBQUsvSyxJQUFNK0ssRUFBSy9LLElBQU1wQyxFQUFReU4sVUFDOUJOLEVBQUs1TyxLQUFPNE8sRUFBSzVPLEtBQU95QixFQUFRME4sV0FDaENQLEVBQUs5TyxPQUFTOE8sRUFBSy9LLElBQU1wQyxFQUFRcUksYUFDakM4RSxFQUFLN08sTUFBUTZPLEVBQUs1TyxLQUFPeUIsRUFBUXNJLFlBQ2pDNkUsRUFBSzdJLE1BQVF0RSxFQUFRc0ksWUFDckI2RSxFQUFLM0ksT0FBU3hFLEVBQVFxSSxhQUN0QjhFLEVBQUt4SSxFQUFJd0ksRUFBSzVPLEtBQ2Q0TyxFQUFLdEksRUFBSXNJLEVBQUsvSyxJQUNQK0ssQ0FDVCxDQUcwSFEsQ0FBMkJOLEVBQWdCbEwsR0FBWStLLEdFdEJsSyxTQUF5QmxOLEdBQ3RDLElBQUk4TSxFQUVBUSxFQUFPekgsRUFBbUI3RixHQUMxQjROLEVBQVk3QixHQUFnQi9MLEdBQzVCMk0sRUFBMEQsT0FBbERHLEVBQXdCOU0sRUFBUU8sb0JBQXlCLEVBQVN1TSxFQUFzQkgsS0FDaEdySSxFQUFRLEVBQUlnSixFQUFLTyxZQUFhUCxFQUFLaEYsWUFBYXFFLEVBQU9BLEVBQUtrQixZQUFjLEVBQUdsQixFQUFPQSxFQUFLckUsWUFBYyxHQUN2RzlELEVBQVMsRUFBSThJLEVBQUtRLGFBQWNSLEVBQUtqRixhQUFjc0UsRUFBT0EsRUFBS21CLGFBQWUsRUFBR25CLEVBQU9BLEVBQUt0RSxhQUFlLEdBQzVHMUQsR0FBS2lKLEVBQVU1QixXQUFhSSxHQUFvQnBNLEdBQ2hENkUsR0FBSytJLEVBQVUxQixVQU1uQixNQUppRCxRQUE3QyxFQUFpQlMsR0FBUVcsR0FBTVMsWUFDakNwSixHQUFLLEVBQUkySSxFQUFLaEYsWUFBYXFFLEVBQU9BLEVBQUtyRSxZQUFjLEdBQUtoRSxHQUdyRCxDQUNMQSxNQUFPQSxFQUNQRSxPQUFRQSxFQUNSRyxFQUFHQSxFQUNIRSxFQUFHQSxFQUVQLENGQ2tNbUosQ0FBZ0JuSSxFQUFtQjdGLElBQ3JPLENHMUJlLFNBQVNpTyxHQUFlOU0sR0FDckMsSUFPSWtJLEVBUEF0SyxFQUFZb0MsRUFBS3BDLFVBQ2pCaUIsRUFBVW1CLEVBQUtuQixRQUNmYixFQUFZZ0MsRUFBS2hDLFVBQ2pCcUksRUFBZ0JySSxFQUFZdUQsRUFBaUJ2RCxHQUFhLEtBQzFEaUssRUFBWWpLLEVBQVk0SixFQUFhNUosR0FBYSxLQUNsRCtPLEVBQVVuUCxFQUFVNEYsRUFBSTVGLEVBQVV1RixNQUFRLEVBQUl0RSxFQUFRc0UsTUFBUSxFQUM5RDZKLEVBQVVwUCxFQUFVOEYsRUFBSTlGLEVBQVV5RixPQUFTLEVBQUl4RSxFQUFRd0UsT0FBUyxFQUdwRSxPQUFRZ0QsR0FDTixLQUFLLEVBQ0g2QixFQUFVLENBQ1IxRSxFQUFHdUosRUFDSHJKLEVBQUc5RixFQUFVOEYsRUFBSTdFLEVBQVF3RSxRQUUzQixNQUVGLEtBQUtuRyxFQUNIZ0wsRUFBVSxDQUNSMUUsRUFBR3VKLEVBQ0hySixFQUFHOUYsRUFBVThGLEVBQUk5RixFQUFVeUYsUUFFN0IsTUFFRixLQUFLbEcsRUFDSCtLLEVBQVUsQ0FDUjFFLEVBQUc1RixFQUFVNEYsRUFBSTVGLEVBQVV1RixNQUMzQk8sRUFBR3NKLEdBRUwsTUFFRixLQUFLNVAsRUFDSDhLLEVBQVUsQ0FDUjFFLEVBQUc1RixFQUFVNEYsRUFBSTNFLEVBQVFzRSxNQUN6Qk8sRUFBR3NKLEdBRUwsTUFFRixRQUNFOUUsRUFBVSxDQUNSMUUsRUFBRzVGLEVBQVU0RixFQUNiRSxFQUFHOUYsRUFBVThGLEdBSW5CLElBQUl1SixFQUFXNUcsRUFBZ0JWLEVBQXlCVSxHQUFpQixLQUV6RSxHQUFnQixNQUFaNEcsRUFBa0IsQ0FDcEIsSUFBSTFHLEVBQW1CLE1BQWIwRyxFQUFtQixTQUFXLFFBRXhDLE9BQVFoRixHQUNOLEtBQUsxSyxFQUNIMkssRUFBUStFLEdBQVkvRSxFQUFRK0UsSUFBYXJQLEVBQVUySSxHQUFPLEVBQUkxSCxFQUFRMEgsR0FBTyxHQUM3RSxNQUVGLEtBQUsvSSxFQUNIMEssRUFBUStFLEdBQVkvRSxFQUFRK0UsSUFBYXJQLEVBQVUySSxHQUFPLEVBQUkxSCxFQUFRMEgsR0FBTyxHQUtuRixDQUVBLE9BQU8yQixDQUNULENDM0RlLFNBQVNnRixHQUFlak4sRUFBT2MsUUFDNUIsSUFBWkEsSUFDRkEsRUFBVSxDQUFDLEdBR2IsSUFBSW9NLEVBQVdwTSxFQUNYcU0sRUFBcUJELEVBQVNuUCxVQUM5QkEsT0FBbUMsSUFBdkJvUCxFQUFnQ25OLEVBQU1qQyxVQUFZb1AsRUFDOURDLEVBQW9CRixFQUFTbk0sU0FDN0JBLE9BQWlDLElBQXRCcU0sRUFBK0JwTixFQUFNZSxTQUFXcU0sRUFDM0RDLEVBQW9CSCxFQUFTSSxTQUM3QkEsT0FBaUMsSUFBdEJELEVBQStCN1AsRUFBa0I2UCxFQUM1REUsRUFBd0JMLEVBQVNNLGFBQ2pDQSxPQUF5QyxJQUExQkQsRUFBbUM5UCxFQUFXOFAsRUFDN0RFLEVBQXdCUCxFQUFTUSxlQUNqQ0EsT0FBMkMsSUFBMUJELEVBQW1DL1AsRUFBUytQLEVBQzdERSxFQUF1QlQsRUFBU1UsWUFDaENBLE9BQXVDLElBQXpCRCxHQUEwQ0EsRUFDeERFLEVBQW1CWCxFQUFTM0csUUFDNUJBLE9BQStCLElBQXJCc0gsRUFBOEIsRUFBSUEsRUFDNUNoSSxFQUFnQkQsRUFBc0MsaUJBQVpXLEVBQXVCQSxFQUFVVCxFQUFnQlMsRUFBU2xKLElBQ3BHeVEsRUFBYUosSUFBbUJoUSxFQUFTQyxFQUFZRCxFQUNyRHFLLEVBQWEvSCxFQUFNd0csTUFBTTlJLE9BQ3pCa0IsRUFBVW9CLEVBQU1FLFNBQVMwTixFQUFjRSxFQUFhSixHQUNwREssRUprQlMsU0FBeUJuUCxFQUFTME8sRUFBVUUsRUFBY3pNLEdBQ3ZFLElBQUlpTixFQUFtQyxvQkFBYlYsRUFsQjVCLFNBQTRCMU8sR0FDMUIsSUFBSXBCLEVBQWtCZ08sR0FBa0I1RyxFQUFjaEcsSUFFbERxUCxFQURvQixDQUFDLFdBQVksU0FBU3pKLFFBQVEsRUFBaUI1RixHQUFTaUMsV0FBYSxHQUNuRHRCLEVBQWNYLEdBQVdvRyxFQUFnQnBHLEdBQVdBLEVBRTlGLE9BQUtTLEVBQVU0TyxHQUtSelEsRUFBZ0JnSSxRQUFPLFNBQVV5RyxHQUN0QyxPQUFPNU0sRUFBVTRNLElBQW1CcEksRUFBU29JLEVBQWdCZ0MsSUFBbUQsU0FBaEN0UCxFQUFZc04sRUFDOUYsSUFOUyxFQU9YLENBSzZEaUMsQ0FBbUJ0UCxHQUFXLEdBQUdaLE9BQU9zUCxHQUMvRjlQLEVBQWtCLEdBQUdRLE9BQU9nUSxFQUFxQixDQUFDUixJQUNsRFcsRUFBc0IzUSxFQUFnQixHQUN0QzRRLEVBQWU1USxFQUFnQkssUUFBTyxTQUFVd1EsRUFBU3BDLEdBQzNELElBQUlGLEVBQU9DLEdBQTJCcE4sRUFBU3FOLEVBQWdCbEwsR0FLL0QsT0FKQXNOLEVBQVFyTixJQUFNLEVBQUkrSyxFQUFLL0ssSUFBS3FOLEVBQVFyTixLQUNwQ3FOLEVBQVFuUixNQUFRLEVBQUk2TyxFQUFLN08sTUFBT21SLEVBQVFuUixPQUN4Q21SLEVBQVFwUixPQUFTLEVBQUk4TyxFQUFLOU8sT0FBUW9SLEVBQVFwUixRQUMxQ29SLEVBQVFsUixLQUFPLEVBQUk0TyxFQUFLNU8sS0FBTWtSLEVBQVFsUixNQUMvQmtSLENBQ1QsR0FBR3JDLEdBQTJCcE4sRUFBU3VQLEVBQXFCcE4sSUFLNUQsT0FKQXFOLEVBQWFsTCxNQUFRa0wsRUFBYWxSLE1BQVFrUixFQUFhalIsS0FDdkRpUixFQUFhaEwsT0FBU2dMLEVBQWFuUixPQUFTbVIsRUFBYXBOLElBQ3pEb04sRUFBYTdLLEVBQUk2SyxFQUFhalIsS0FDOUJpUixFQUFhM0ssRUFBSTJLLEVBQWFwTixJQUN2Qm9OLENBQ1QsQ0luQzJCRSxDQUFnQmpQLEVBQVVULEdBQVdBLEVBQVVBLEVBQVEyUCxnQkFBa0I5SixFQUFtQnpFLEVBQU1FLFNBQVN4QyxRQUFTNFAsRUFBVUUsRUFBY3pNLEdBQ2pLeU4sRUFBc0I3TCxFQUFzQjNDLEVBQU1FLFNBQVN2QyxXQUMzRHVJLEVBQWdCMkcsR0FBZSxDQUNqQ2xQLFVBQVc2USxFQUNYNVAsUUFBU21KLEVBQ1RoSCxTQUFVLFdBQ1ZoRCxVQUFXQSxJQUVUMFEsRUFBbUIzQyxHQUFpQnpQLE9BQU9rRSxPQUFPLENBQUMsRUFBR3dILEVBQVk3QixJQUNsRXdJLEVBQW9CaEIsSUFBbUJoUSxFQUFTK1EsRUFBbUJELEVBR25FRyxFQUFrQixDQUNwQjNOLElBQUsrTSxFQUFtQi9NLElBQU0wTixFQUFrQjFOLElBQU02RSxFQUFjN0UsSUFDcEUvRCxPQUFReVIsRUFBa0J6UixPQUFTOFEsRUFBbUI5USxPQUFTNEksRUFBYzVJLE9BQzdFRSxLQUFNNFEsRUFBbUI1USxLQUFPdVIsRUFBa0J2UixLQUFPMEksRUFBYzFJLEtBQ3ZFRCxNQUFPd1IsRUFBa0J4UixNQUFRNlEsRUFBbUI3USxNQUFRMkksRUFBYzNJLE9BRXhFMFIsRUFBYTVPLEVBQU1tRyxjQUFja0IsT0FFckMsR0FBSXFHLElBQW1CaFEsR0FBVWtSLEVBQVksQ0FDM0MsSUFBSXZILEVBQVN1SCxFQUFXN1EsR0FDeEIxQixPQUFPNEQsS0FBSzBPLEdBQWlCeE8sU0FBUSxTQUFVaEUsR0FDN0MsSUFBSTBTLEVBQVcsQ0FBQzNSLEVBQU9ELEdBQVF1SCxRQUFRckksSUFBUSxFQUFJLEdBQUssRUFDcERrSyxFQUFPLENBQUMsRUFBS3BKLEdBQVF1SCxRQUFRckksSUFBUSxFQUFJLElBQU0sSUFDbkR3UyxFQUFnQnhTLElBQVFrTCxFQUFPaEIsR0FBUXdJLENBQ3pDLEdBQ0YsQ0FFQSxPQUFPRixDQUNULENDeUVBLFVBQ0VoUCxLQUFNLE9BQ05DLFNBQVMsRUFDVEMsTUFBTyxPQUNQQyxHQTVIRixTQUFjQyxHQUNaLElBQUlDLEVBQVFELEVBQUtDLE1BQ2JjLEVBQVVmLEVBQUtlLFFBQ2ZuQixFQUFPSSxFQUFLSixLQUVoQixJQUFJSyxFQUFNbUcsY0FBY3hHLEdBQU1tUCxNQUE5QixDQW9DQSxJQWhDQSxJQUFJQyxFQUFvQmpPLEVBQVFrTSxTQUM1QmdDLE9BQXNDLElBQXRCRCxHQUFzQ0EsRUFDdERFLEVBQW1Cbk8sRUFBUW9PLFFBQzNCQyxPQUFvQyxJQUFyQkYsR0FBcUNBLEVBQ3BERyxFQUE4QnRPLEVBQVF1TyxtQkFDdEM5SSxFQUFVekYsRUFBUXlGLFFBQ2xCK0csRUFBV3hNLEVBQVF3TSxTQUNuQkUsRUFBZTFNLEVBQVEwTSxhQUN2QkksRUFBYzlNLEVBQVE4TSxZQUN0QjBCLEVBQXdCeE8sRUFBUXlPLGVBQ2hDQSxPQUEyQyxJQUExQkQsR0FBMENBLEVBQzNERSxFQUF3QjFPLEVBQVEwTyxzQkFDaENDLEVBQXFCelAsRUFBTWMsUUFBUS9DLFVBQ25DcUksRUFBZ0I5RSxFQUFpQm1PLEdBRWpDSixFQUFxQkQsSUFESGhKLElBQWtCcUosR0FDcUNGLEVBakMvRSxTQUF1Q3hSLEdBQ3JDLEdBQUl1RCxFQUFpQnZELEtBQWVYLEVBQ2xDLE1BQU8sR0FHVCxJQUFJc1MsRUFBb0JuRixHQUFxQnhNLEdBQzdDLE1BQU8sQ0FBQzJNLEdBQThCM00sR0FBWTJSLEVBQW1CaEYsR0FBOEJnRixHQUNyRyxDQTBCNklDLENBQThCRixHQUEzRSxDQUFDbEYsR0FBcUJrRixLQUNoSEcsRUFBYSxDQUFDSCxHQUFvQnpSLE9BQU9xUixHQUFvQnhSLFFBQU8sU0FBVUMsRUFBS0MsR0FDckYsT0FBT0QsRUFBSUUsT0FBT3NELEVBQWlCdkQsS0FBZVgsRUN2Q3ZDLFNBQThCNEMsRUFBT2MsUUFDbEMsSUFBWkEsSUFDRkEsRUFBVSxDQUFDLEdBR2IsSUFBSW9NLEVBQVdwTSxFQUNYL0MsRUFBWW1QLEVBQVNuUCxVQUNyQnVQLEVBQVdKLEVBQVNJLFNBQ3BCRSxFQUFlTixFQUFTTSxhQUN4QmpILEVBQVUyRyxFQUFTM0csUUFDbkJnSixFQUFpQnJDLEVBQVNxQyxlQUMxQk0sRUFBd0IzQyxFQUFTc0Msc0JBQ2pDQSxPQUFrRCxJQUExQkssRUFBbUMsRUFBZ0JBLEVBQzNFN0gsRUFBWUwsRUFBYTVKLEdBQ3pCNlIsRUFBYTVILEVBQVl1SCxFQUFpQjNSLEVBQXNCQSxFQUFvQjRILFFBQU8sU0FBVXpILEdBQ3ZHLE9BQU80SixFQUFhNUosS0FBZWlLLENBQ3JDLElBQUszSyxFQUNEeVMsRUFBb0JGLEVBQVdwSyxRQUFPLFNBQVV6SCxHQUNsRCxPQUFPeVIsRUFBc0JoTCxRQUFRekcsSUFBYyxDQUNyRCxJQUVpQyxJQUE3QitSLEVBQWtCQyxTQUNwQkQsRUFBb0JGLEdBSXRCLElBQUlJLEVBQVlGLEVBQWtCalMsUUFBTyxTQUFVQyxFQUFLQyxHQU90RCxPQU5BRCxFQUFJQyxHQUFha1AsR0FBZWpOLEVBQU8sQ0FDckNqQyxVQUFXQSxFQUNYdVAsU0FBVUEsRUFDVkUsYUFBY0EsRUFDZGpILFFBQVNBLElBQ1JqRixFQUFpQnZELElBQ2JELENBQ1QsR0FBRyxDQUFDLEdBQ0osT0FBT3pCLE9BQU80RCxLQUFLK1AsR0FBV0MsTUFBSyxTQUFVQyxFQUFHQyxHQUM5QyxPQUFPSCxFQUFVRSxHQUFLRixFQUFVRyxFQUNsQyxHQUNGLENEQzZEQyxDQUFxQnBRLEVBQU8sQ0FDbkZqQyxVQUFXQSxFQUNYdVAsU0FBVUEsRUFDVkUsYUFBY0EsRUFDZGpILFFBQVNBLEVBQ1RnSixlQUFnQkEsRUFDaEJDLHNCQUF1QkEsSUFDcEJ6UixFQUNQLEdBQUcsSUFDQ3NTLEVBQWdCclEsRUFBTXdHLE1BQU03SSxVQUM1Qm9LLEVBQWEvSCxFQUFNd0csTUFBTTlJLE9BQ3pCNFMsRUFBWSxJQUFJQyxJQUNoQkMsR0FBcUIsRUFDckJDLEVBQXdCYixFQUFXLEdBRTlCYyxFQUFJLEVBQUdBLEVBQUlkLEVBQVdHLE9BQVFXLElBQUssQ0FDMUMsSUFBSTNTLEVBQVk2UixFQUFXYyxHQUV2QkMsRUFBaUJyUCxFQUFpQnZELEdBRWxDNlMsRUFBbUJqSixFQUFhNUosS0FBZVQsRUFDL0N1VCxFQUFhLENBQUMsRUFBSzVULEdBQVF1SCxRQUFRbU0sSUFBbUIsRUFDdERySyxFQUFNdUssRUFBYSxRQUFVLFNBQzdCMUYsRUFBVzhCLEdBQWVqTixFQUFPLENBQ25DakMsVUFBV0EsRUFDWHVQLFNBQVVBLEVBQ1ZFLGFBQWNBLEVBQ2RJLFlBQWFBLEVBQ2JySCxRQUFTQSxJQUVQdUssRUFBb0JELEVBQWFELEVBQW1CMVQsRUFBUUMsRUFBT3lULEVBQW1CM1QsRUFBUyxFQUUvRm9ULEVBQWMvSixHQUFPeUIsRUFBV3pCLEtBQ2xDd0ssRUFBb0J2RyxHQUFxQnVHLElBRzNDLElBQUlDLEVBQW1CeEcsR0FBcUJ1RyxHQUN4Q0UsRUFBUyxHQVViLEdBUkloQyxHQUNGZ0MsRUFBT0MsS0FBSzlGLEVBQVN3RixJQUFtQixHQUd0Q3hCLEdBQ0Y2QixFQUFPQyxLQUFLOUYsRUFBUzJGLElBQXNCLEVBQUczRixFQUFTNEYsSUFBcUIsR0FHMUVDLEVBQU9FLE9BQU0sU0FBVUMsR0FDekIsT0FBT0EsQ0FDVCxJQUFJLENBQ0ZWLEVBQXdCMVMsRUFDeEJ5UyxHQUFxQixFQUNyQixLQUNGLENBRUFGLEVBQVVjLElBQUlyVCxFQUFXaVQsRUFDM0IsQ0FFQSxHQUFJUixFQXFCRixJQW5CQSxJQUVJYSxFQUFRLFNBQWVDLEdBQ3pCLElBQUlDLEVBQW1CM0IsRUFBVzRCLE1BQUssU0FBVXpULEdBQy9DLElBQUlpVCxFQUFTVixFQUFVOVQsSUFBSXVCLEdBRTNCLEdBQUlpVCxFQUNGLE9BQU9BLEVBQU9TLE1BQU0sRUFBR0gsR0FBSUosT0FBTSxTQUFVQyxHQUN6QyxPQUFPQSxDQUNULEdBRUosSUFFQSxHQUFJSSxFQUVGLE9BREFkLEVBQXdCYyxFQUNqQixPQUVYLEVBRVNELEVBbkJZL0IsRUFBaUIsRUFBSSxFQW1CWitCLEVBQUssR0FHcEIsVUFGRkQsRUFBTUMsR0FEbUJBLEtBT3BDdFIsRUFBTWpDLFlBQWMwUyxJQUN0QnpRLEVBQU1tRyxjQUFjeEcsR0FBTW1QLE9BQVEsRUFDbEM5TyxFQUFNakMsVUFBWTBTLEVBQ2xCelEsRUFBTTBSLE9BQVEsRUE1R2hCLENBOEdGLEVBUUVoSyxpQkFBa0IsQ0FBQyxVQUNuQmdDLEtBQU0sQ0FDSm9GLE9BQU8sSUU3SVgsU0FBUzZDLEdBQWV4RyxFQUFVWSxFQUFNNkYsR0FRdEMsWUFQeUIsSUFBckJBLElBQ0ZBLEVBQW1CLENBQ2pCck8sRUFBRyxFQUNIRSxFQUFHLElBSUEsQ0FDTHpDLElBQUttSyxFQUFTbkssSUFBTStLLEVBQUszSSxPQUFTd08sRUFBaUJuTyxFQUNuRHZHLE1BQU9pTyxFQUFTak8sTUFBUTZPLEVBQUs3SSxNQUFRME8sRUFBaUJyTyxFQUN0RHRHLE9BQVFrTyxFQUFTbE8sT0FBUzhPLEVBQUszSSxPQUFTd08sRUFBaUJuTyxFQUN6RHRHLEtBQU1nTyxFQUFTaE8sS0FBTzRPLEVBQUs3SSxNQUFRME8sRUFBaUJyTyxFQUV4RCxDQUVBLFNBQVNzTyxHQUFzQjFHLEdBQzdCLE1BQU8sQ0FBQyxFQUFLak8sRUFBT0QsRUFBUUUsR0FBTTJVLE1BQUssU0FBVUMsR0FDL0MsT0FBTzVHLEVBQVM0RyxJQUFTLENBQzNCLEdBQ0YsQ0ErQkEsVUFDRXBTLEtBQU0sT0FDTkMsU0FBUyxFQUNUQyxNQUFPLE9BQ1A2SCxpQkFBa0IsQ0FBQyxtQkFDbkI1SCxHQWxDRixTQUFjQyxHQUNaLElBQUlDLEVBQVFELEVBQUtDLE1BQ2JMLEVBQU9JLEVBQUtKLEtBQ1owUSxFQUFnQnJRLEVBQU13RyxNQUFNN0ksVUFDNUJvSyxFQUFhL0gsRUFBTXdHLE1BQU05SSxPQUN6QmtVLEVBQW1CNVIsRUFBTW1HLGNBQWM2TCxnQkFDdkNDLEVBQW9CaEYsR0FBZWpOLEVBQU8sQ0FDNUMwTixlQUFnQixjQUVkd0UsRUFBb0JqRixHQUFlak4sRUFBTyxDQUM1QzROLGFBQWEsSUFFWHVFLEVBQTJCUixHQUFlTSxFQUFtQjVCLEdBQzdEK0IsRUFBc0JULEdBQWVPLEVBQW1CbkssRUFBWTZKLEdBQ3BFUyxFQUFvQlIsR0FBc0JNLEdBQzFDRyxFQUFtQlQsR0FBc0JPLEdBQzdDcFMsRUFBTW1HLGNBQWN4RyxHQUFRLENBQzFCd1MseUJBQTBCQSxFQUMxQkMsb0JBQXFCQSxFQUNyQkMsa0JBQW1CQSxFQUNuQkMsaUJBQWtCQSxHQUVwQnRTLEVBQU1NLFdBQVc1QyxPQUFTckIsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHUCxFQUFNTSxXQUFXNUMsT0FBUSxDQUNuRSwrQkFBZ0MyVSxFQUNoQyxzQkFBdUJDLEdBRTNCLEdDSkEsSUFDRTNTLEtBQU0sU0FDTkMsU0FBUyxFQUNUQyxNQUFPLE9BQ1B3QixTQUFVLENBQUMsaUJBQ1h2QixHQTVCRixTQUFnQmEsR0FDZCxJQUFJWCxFQUFRVyxFQUFNWCxNQUNkYyxFQUFVSCxFQUFNRyxRQUNoQm5CLEVBQU9nQixFQUFNaEIsS0FDYjRTLEVBQWtCelIsRUFBUXVHLE9BQzFCQSxPQUE2QixJQUFwQmtMLEVBQTZCLENBQUMsRUFBRyxHQUFLQSxFQUMvQzdJLEVBQU8sRUFBVzdMLFFBQU8sU0FBVUMsRUFBS0MsR0FFMUMsT0FEQUQsRUFBSUMsR0E1QkQsU0FBaUNBLEVBQVd5SSxFQUFPYSxHQUN4RCxJQUFJakIsRUFBZ0I5RSxFQUFpQnZELEdBQ2pDeVUsRUFBaUIsQ0FBQ3JWLEVBQU0sR0FBS3FILFFBQVE0QixJQUFrQixHQUFLLEVBQUksRUFFaEVyRyxFQUF5QixtQkFBWHNILEVBQXdCQSxFQUFPaEwsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHaUcsRUFBTyxDQUN4RXpJLFVBQVdBLEtBQ1BzSixFQUNGb0wsRUFBVzFTLEVBQUssR0FDaEIyUyxFQUFXM1MsRUFBSyxHQUlwQixPQUZBMFMsRUFBV0EsR0FBWSxFQUN2QkMsR0FBWUEsR0FBWSxHQUFLRixFQUN0QixDQUFDclYsRUFBTUQsR0FBT3NILFFBQVE0QixJQUFrQixFQUFJLENBQ2pEN0MsRUFBR21QLEVBQ0hqUCxFQUFHZ1AsR0FDRCxDQUNGbFAsRUFBR2tQLEVBQ0hoUCxFQUFHaVAsRUFFUCxDQVNxQkMsQ0FBd0I1VSxFQUFXaUMsRUFBTXdHLE1BQU9hLEdBQzFEdkosQ0FDVCxHQUFHLENBQUMsR0FDQThVLEVBQXdCbEosRUFBSzFKLEVBQU1qQyxXQUNuQ3dGLEVBQUlxUCxFQUFzQnJQLEVBQzFCRSxFQUFJbVAsRUFBc0JuUCxFQUVXLE1BQXJDekQsRUFBTW1HLGNBQWNELGdCQUN0QmxHLEVBQU1tRyxjQUFjRCxjQUFjM0MsR0FBS0EsRUFDdkN2RCxFQUFNbUcsY0FBY0QsY0FBY3pDLEdBQUtBLEdBR3pDekQsRUFBTW1HLGNBQWN4RyxHQUFRK0osQ0FDOUIsR0MxQkEsSUFDRS9KLEtBQU0sZ0JBQ05DLFNBQVMsRUFDVEMsTUFBTyxPQUNQQyxHQXBCRixTQUF1QkMsR0FDckIsSUFBSUMsRUFBUUQsRUFBS0MsTUFDYkwsRUFBT0ksRUFBS0osS0FLaEJLLEVBQU1tRyxjQUFjeEcsR0FBUWtOLEdBQWUsQ0FDekNsUCxVQUFXcUMsRUFBTXdHLE1BQU03SSxVQUN2QmlCLFFBQVNvQixFQUFNd0csTUFBTTlJLE9BQ3JCcUQsU0FBVSxXQUNWaEQsVUFBV2lDLEVBQU1qQyxXQUVyQixFQVFFMkwsS0FBTSxDQUFDLEdDZ0hULElBQ0UvSixLQUFNLGtCQUNOQyxTQUFTLEVBQ1RDLE1BQU8sT0FDUEMsR0EvSEYsU0FBeUJDLEdBQ3ZCLElBQUlDLEVBQVFELEVBQUtDLE1BQ2JjLEVBQVVmLEVBQUtlLFFBQ2ZuQixFQUFPSSxFQUFLSixLQUNab1AsRUFBb0JqTyxFQUFRa00sU0FDNUJnQyxPQUFzQyxJQUF0QkQsR0FBc0NBLEVBQ3RERSxFQUFtQm5PLEVBQVFvTyxRQUMzQkMsT0FBb0MsSUFBckJGLEdBQXNDQSxFQUNyRDNCLEVBQVd4TSxFQUFRd00sU0FDbkJFLEVBQWUxTSxFQUFRME0sYUFDdkJJLEVBQWM5TSxFQUFROE0sWUFDdEJySCxFQUFVekYsRUFBUXlGLFFBQ2xCc00sRUFBa0IvUixFQUFRZ1MsT0FDMUJBLE9BQTZCLElBQXBCRCxHQUFvQ0EsRUFDN0NFLEVBQXdCalMsRUFBUWtTLGFBQ2hDQSxPQUF5QyxJQUExQkQsRUFBbUMsRUFBSUEsRUFDdEQ1SCxFQUFXOEIsR0FBZWpOLEVBQU8sQ0FDbkNzTixTQUFVQSxFQUNWRSxhQUFjQSxFQUNkakgsUUFBU0EsRUFDVHFILFlBQWFBLElBRVh4SCxFQUFnQjlFLEVBQWlCdEIsRUFBTWpDLFdBQ3ZDaUssRUFBWUwsRUFBYTNILEVBQU1qQyxXQUMvQmtWLEdBQW1CakwsRUFDbkJnRixFQUFXdEgsRUFBeUJVLEdBQ3BDOEksRUNyQ1ksTURxQ1NsQyxFQ3JDSCxJQUFNLElEc0N4QjlHLEVBQWdCbEcsRUFBTW1HLGNBQWNELGNBQ3BDbUssRUFBZ0JyUSxFQUFNd0csTUFBTTdJLFVBQzVCb0ssRUFBYS9ILEVBQU13RyxNQUFNOUksT0FDekJ3VixFQUE0QyxtQkFBakJGLEVBQThCQSxFQUFhM1csT0FBT2tFLE9BQU8sQ0FBQyxFQUFHUCxFQUFNd0csTUFBTyxDQUN2R3pJLFVBQVdpQyxFQUFNakMsYUFDYmlWLEVBQ0ZHLEVBQTJELGlCQUF0QkQsRUFBaUMsQ0FDeEVsRyxTQUFVa0csRUFDVmhFLFFBQVNnRSxHQUNQN1csT0FBT2tFLE9BQU8sQ0FDaEJ5TSxTQUFVLEVBQ1ZrQyxRQUFTLEdBQ1JnRSxHQUNDRSxFQUFzQnBULEVBQU1tRyxjQUFja0IsT0FBU3JILEVBQU1tRyxjQUFja0IsT0FBT3JILEVBQU1qQyxXQUFhLEtBQ2pHMkwsRUFBTyxDQUNUbkcsRUFBRyxFQUNIRSxFQUFHLEdBR0wsR0FBS3lDLEVBQUwsQ0FJQSxHQUFJOEksRUFBZSxDQUNqQixJQUFJcUUsRUFFQUMsRUFBd0IsTUFBYnRHLEVBQW1CLEVBQU03UCxFQUNwQ29XLEVBQXVCLE1BQWJ2RyxFQUFtQi9QLEVBQVNDLEVBQ3RDb0osRUFBbUIsTUFBYjBHLEVBQW1CLFNBQVcsUUFDcEMzRixFQUFTbkIsRUFBYzhHLEdBQ3ZCdEwsRUFBTTJGLEVBQVM4RCxFQUFTbUksR0FDeEI3UixFQUFNNEYsRUFBUzhELEVBQVNvSSxHQUN4QkMsRUFBV1YsR0FBVS9LLEVBQVd6QixHQUFPLEVBQUksRUFDM0NtTixFQUFTekwsSUFBYzFLLEVBQVErUyxFQUFjL0osR0FBT3lCLEVBQVd6QixHQUMvRG9OLEVBQVMxTCxJQUFjMUssR0FBU3lLLEVBQVd6QixJQUFRK0osRUFBYy9KLEdBR2pFTCxFQUFlakcsRUFBTUUsU0FBU2dCLE1BQzlCd0YsRUFBWW9NLEdBQVU3TSxFQUFldEMsRUFBY3NDLEdBQWdCLENBQ3JFL0MsTUFBTyxFQUNQRSxPQUFRLEdBRU51USxHQUFxQjNULEVBQU1tRyxjQUFjLG9CQUFzQm5HLEVBQU1tRyxjQUFjLG9CQUFvQkksUXhCaEZ0RyxDQUNMdkYsSUFBSyxFQUNMOUQsTUFBTyxFQUNQRCxPQUFRLEVBQ1JFLEtBQU0sR3dCNkVGeVcsR0FBa0JELEdBQW1CTCxHQUNyQ08sR0FBa0JGLEdBQW1CSixHQU1yQ08sR0FBV25PLEVBQU8sRUFBRzBLLEVBQWMvSixHQUFNSSxFQUFVSixJQUNuRHlOLEdBQVlkLEVBQWtCNUMsRUFBYy9KLEdBQU8sRUFBSWtOLEVBQVdNLEdBQVdGLEdBQWtCVCxFQUE0Qm5HLFNBQVd5RyxFQUFTSyxHQUFXRixHQUFrQlQsRUFBNEJuRyxTQUN4TWdILEdBQVlmLEdBQW1CNUMsRUFBYy9KLEdBQU8sRUFBSWtOLEVBQVdNLEdBQVdELEdBQWtCVixFQUE0Qm5HLFNBQVcwRyxFQUFTSSxHQUFXRCxHQUFrQlYsRUFBNEJuRyxTQUN6TWpHLEdBQW9CL0csRUFBTUUsU0FBU2dCLE9BQVM4RCxFQUFnQmhGLEVBQU1FLFNBQVNnQixPQUMzRStTLEdBQWVsTixHQUFpQyxNQUFiaUcsRUFBbUJqRyxHQUFrQnNGLFdBQWEsRUFBSXRGLEdBQWtCdUYsWUFBYyxFQUFJLEVBQzdINEgsR0FBd0gsT0FBakdiLEVBQStDLE1BQXZCRCxPQUE4QixFQUFTQSxFQUFvQnBHLElBQXFCcUcsRUFBd0IsRUFFdkpjLEdBQVk5TSxFQUFTMk0sR0FBWUUsR0FDakNFLEdBQWtCek8sRUFBT21OLEVBQVMsRUFBUXBSLEVBRjlCMkYsRUFBUzBNLEdBQVlHLEdBQXNCRCxJQUVLdlMsRUFBSzJGLEVBQVF5TCxFQUFTLEVBQVFyUixFQUFLMFMsSUFBYTFTLEdBQ2hIeUUsRUFBYzhHLEdBQVlvSCxHQUMxQjFLLEVBQUtzRCxHQUFZb0gsR0FBa0IvTSxDQUNyQyxDQUVBLEdBQUk4SCxFQUFjLENBQ2hCLElBQUlrRixHQUVBQyxHQUF5QixNQUFidEgsRUFBbUIsRUFBTTdQLEVBRXJDb1gsR0FBd0IsTUFBYnZILEVBQW1CL1AsRUFBU0MsRUFFdkNzWCxHQUFVdE8sRUFBY2dKLEdBRXhCdUYsR0FBbUIsTUFBWnZGLEVBQWtCLFNBQVcsUUFFcEN3RixHQUFPRixHQUFVckosRUFBU21KLElBRTFCSyxHQUFPSCxHQUFVckosRUFBU29KLElBRTFCSyxJQUF1RCxJQUF4QyxDQUFDLEVBQUt6WCxHQUFNcUgsUUFBUTRCLEdBRW5DeU8sR0FBeUgsT0FBakdSLEdBQWdELE1BQXZCakIsT0FBOEIsRUFBU0EsRUFBb0JsRSxJQUFvQm1GLEdBQXlCLEVBRXpKUyxHQUFhRixHQUFlRixHQUFPRixHQUFVbkUsRUFBY29FLElBQVExTSxFQUFXME0sSUFBUUksR0FBdUIxQixFQUE0QmpFLFFBRXpJNkYsR0FBYUgsR0FBZUosR0FBVW5FLEVBQWNvRSxJQUFRMU0sRUFBVzBNLElBQVFJLEdBQXVCMUIsRUFBNEJqRSxRQUFVeUYsR0FFNUlLLEdBQW1CbEMsR0FBVThCLEcxQnpIOUIsU0FBd0JsVCxFQUFLMUUsRUFBT3lFLEdBQ3pDLElBQUl3VCxFQUFJdFAsRUFBT2pFLEVBQUsxRSxFQUFPeUUsR0FDM0IsT0FBT3dULEVBQUl4VCxFQUFNQSxFQUFNd1QsQ0FDekIsQzBCc0hvREMsQ0FBZUosR0FBWU4sR0FBU08sSUFBY3BQLEVBQU9tTixFQUFTZ0MsR0FBYUosR0FBTUYsR0FBUzFCLEVBQVNpQyxHQUFhSixJQUVwS3pPLEVBQWNnSixHQUFXOEYsR0FDekJ0TCxFQUFLd0YsR0FBVzhGLEdBQW1CUixFQUNyQyxDQUVBeFUsRUFBTW1HLGNBQWN4RyxHQUFRK0osQ0F2RTVCLENBd0VGLEVBUUVoQyxpQkFBa0IsQ0FBQyxXRTFITixTQUFTeU4sR0FBaUJDLEVBQXlCclEsRUFBY3NELFFBQzlELElBQVpBLElBQ0ZBLEdBQVUsR0FHWixJQ25Cb0NySixFQ0pPSixFRnVCdkN5VyxFQUEwQjlWLEVBQWN3RixHQUN4Q3VRLEVBQXVCL1YsRUFBY3dGLElBZjNDLFNBQXlCbkcsR0FDdkIsSUFBSW1OLEVBQU9uTixFQUFRK0Qsd0JBQ2ZJLEVBQVNwQixFQUFNb0ssRUFBSzdJLE9BQVN0RSxFQUFRcUUsYUFBZSxFQUNwREQsRUFBU3JCLEVBQU1vSyxFQUFLM0ksUUFBVXhFLEVBQVF1RSxjQUFnQixFQUMxRCxPQUFrQixJQUFYSixHQUEyQixJQUFYQyxDQUN6QixDQVU0RHVTLENBQWdCeFEsR0FDdEVKLEVBQWtCRixFQUFtQk0sR0FDckNnSCxFQUFPcEosRUFBc0J5UyxFQUF5QkUsRUFBc0JqTixHQUM1RXlCLEVBQVMsQ0FDWGMsV0FBWSxFQUNaRSxVQUFXLEdBRVQ3QyxFQUFVLENBQ1oxRSxFQUFHLEVBQ0hFLEVBQUcsR0FrQkwsT0FmSTRSLElBQTRCQSxJQUE0QmhOLE1BQ3hCLFNBQTlCMUosRUFBWW9HLElBQ2hCa0csR0FBZXRHLE1BQ2JtRixHQ25DZ0M5SyxFRG1DVCtGLEtDbENkaEcsRUFBVUMsSUFBVU8sRUFBY1AsR0NKeEMsQ0FDTDRMLFlBRnlDaE0sRURRYkksR0NOUjRMLFdBQ3BCRSxVQUFXbE0sRUFBUWtNLFdER1pILEdBQWdCM0wsSURvQ25CTyxFQUFjd0YsS0FDaEJrRCxFQUFVdEYsRUFBc0JvQyxHQUFjLElBQ3RDeEIsR0FBS3dCLEVBQWF1SCxXQUMxQnJFLEVBQVF4RSxHQUFLc0IsRUFBYXNILFdBQ2pCMUgsSUFDVHNELEVBQVExRSxFQUFJeUgsR0FBb0JyRyxLQUk3QixDQUNMcEIsRUFBR3dJLEVBQUs1TyxLQUFPMk0sRUFBT2MsV0FBYTNDLEVBQVExRSxFQUMzQ0UsRUFBR3NJLEVBQUsvSyxJQUFNOEksRUFBT2dCLFVBQVk3QyxFQUFReEUsRUFDekNQLE1BQU82SSxFQUFLN0ksTUFDWkUsT0FBUTJJLEVBQUszSSxPQUVqQixDR3ZEQSxTQUFTb1MsR0FBTUMsR0FDYixJQUFJdFQsRUFBTSxJQUFJb08sSUFDVm1GLEVBQVUsSUFBSUMsSUFDZEMsRUFBUyxHQUtiLFNBQVMzRixFQUFLNEYsR0FDWkgsRUFBUUksSUFBSUQsRUFBU2xXLE1BQ04sR0FBRzNCLE9BQU82WCxFQUFTeFUsVUFBWSxHQUFJd1UsRUFBU25PLGtCQUFvQixJQUN0RXZILFNBQVEsU0FBVTRWLEdBQ3pCLElBQUtMLEVBQVFNLElBQUlELEdBQU0sQ0FDckIsSUFBSUUsRUFBYzlULEVBQUkzRixJQUFJdVosR0FFdEJFLEdBQ0ZoRyxFQUFLZ0csRUFFVCxDQUNGLElBQ0FMLEVBQU8zRSxLQUFLNEUsRUFDZCxDQVFBLE9BekJBSixFQUFVdFYsU0FBUSxTQUFVMFYsR0FDMUIxVCxFQUFJaVAsSUFBSXlFLEVBQVNsVyxLQUFNa1csRUFDekIsSUFpQkFKLEVBQVV0VixTQUFRLFNBQVUwVixHQUNyQkgsRUFBUU0sSUFBSUgsRUFBU2xXLE9BRXhCc1EsRUFBSzRGLEVBRVQsSUFDT0QsQ0FDVCxDQ3ZCQSxJQUFJTSxHQUFrQixDQUNwQm5ZLFVBQVcsU0FDWDBYLFVBQVcsR0FDWDFVLFNBQVUsWUFHWixTQUFTb1YsS0FDUCxJQUFLLElBQUkxQixFQUFPMkIsVUFBVXJHLE9BQVFzRyxFQUFPLElBQUlwVSxNQUFNd1MsR0FBTzZCLEVBQU8sRUFBR0EsRUFBTzdCLEVBQU02QixJQUMvRUQsRUFBS0MsR0FBUUYsVUFBVUUsR0FHekIsT0FBUUQsRUFBS3ZFLE1BQUssU0FBVWxULEdBQzFCLFFBQVNBLEdBQW9ELG1CQUFsQ0EsRUFBUStELHNCQUNyQyxHQUNGLENBRU8sU0FBUzRULEdBQWdCQyxRQUNMLElBQXJCQSxJQUNGQSxFQUFtQixDQUFDLEdBR3RCLElBQUlDLEVBQW9CRCxFQUNwQkUsRUFBd0JELEVBQWtCRSxpQkFDMUNBLE9BQTZDLElBQTFCRCxFQUFtQyxHQUFLQSxFQUMzREUsRUFBeUJILEVBQWtCSSxlQUMzQ0EsT0FBNEMsSUFBM0JELEVBQW9DVixHQUFrQlUsRUFDM0UsT0FBTyxTQUFzQmpaLEVBQVdELEVBQVFvRCxRQUM5QixJQUFaQSxJQUNGQSxFQUFVK1YsR0FHWixJQ3hDNkIvVyxFQUMzQmdYLEVEdUNFOVcsRUFBUSxDQUNWakMsVUFBVyxTQUNYZ1osaUJBQWtCLEdBQ2xCalcsUUFBU3pFLE9BQU9rRSxPQUFPLENBQUMsRUFBRzJWLEdBQWlCVyxHQUM1QzFRLGNBQWUsQ0FBQyxFQUNoQmpHLFNBQVUsQ0FDUnZDLFVBQVdBLEVBQ1hELE9BQVFBLEdBRVY0QyxXQUFZLENBQUMsRUFDYkQsT0FBUSxDQUFDLEdBRVAyVyxFQUFtQixHQUNuQkMsR0FBYyxFQUNkck4sRUFBVyxDQUNiNUosTUFBT0EsRUFDUGtYLFdBQVksU0FBb0JDLEdBQzlCLElBQUlyVyxFQUFzQyxtQkFBckJxVyxFQUFrQ0EsRUFBaUJuWCxFQUFNYyxTQUFXcVcsRUFDekZDLElBQ0FwWCxFQUFNYyxRQUFVekUsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHc1csRUFBZ0I3VyxFQUFNYyxRQUFTQSxHQUNqRWQsRUFBTWlLLGNBQWdCLENBQ3BCdE0sVUFBVzBCLEVBQVUxQixHQUFhNk4sR0FBa0I3TixHQUFhQSxFQUFVNFEsZUFBaUIvQyxHQUFrQjdOLEVBQVU0USxnQkFBa0IsR0FDMUk3USxPQUFROE4sR0FBa0I5TixJQUk1QixJRWxFNEIrWCxFQUM5QjRCLEVGaUVNTixFRGhDRyxTQUF3QnRCLEdBRXJDLElBQUlzQixFQUFtQnZCLEdBQU1DLEdBRTdCLE9BQU8vVyxFQUFlYixRQUFPLFNBQVVDLEVBQUsrQixHQUMxQyxPQUFPL0IsRUFBSUUsT0FBTytZLEVBQWlCdlIsUUFBTyxTQUFVcVEsR0FDbEQsT0FBT0EsRUFBU2hXLFFBQVVBLENBQzVCLElBQ0YsR0FBRyxHQUNMLENDdUIrQnlYLEVFbEVLN0IsRUZrRXNCLEdBQUd6WCxPQUFPMlksRUFBa0IzVyxFQUFNYyxRQUFRMlUsV0VqRTlGNEIsRUFBUzVCLEVBQVU1WCxRQUFPLFNBQVV3WixFQUFRRSxHQUM5QyxJQUFJQyxFQUFXSCxFQUFPRSxFQUFRNVgsTUFLOUIsT0FKQTBYLEVBQU9FLEVBQVE1WCxNQUFRNlgsRUFBV25iLE9BQU9rRSxPQUFPLENBQUMsRUFBR2lYLEVBQVVELEVBQVMsQ0FDckV6VyxRQUFTekUsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHaVgsRUFBUzFXLFFBQVN5VyxFQUFRelcsU0FDckQ0SSxLQUFNck4sT0FBT2tFLE9BQU8sQ0FBQyxFQUFHaVgsRUFBUzlOLEtBQU02TixFQUFRN04sUUFDNUM2TixFQUNFRixDQUNULEdBQUcsQ0FBQyxHQUVHaGIsT0FBTzRELEtBQUtvWCxHQUFRbFYsS0FBSSxTQUFVaEcsR0FDdkMsT0FBT2tiLEVBQU9sYixFQUNoQixNRjRETSxPQUpBNkQsRUFBTStXLGlCQUFtQkEsRUFBaUJ2UixRQUFPLFNBQVVpUyxHQUN6RCxPQUFPQSxFQUFFN1gsT0FDWCxJQStGRkksRUFBTStXLGlCQUFpQjVXLFNBQVEsU0FBVUosR0FDdkMsSUFBSUosRUFBT0ksRUFBS0osS0FDWitYLEVBQWUzWCxFQUFLZSxRQUNwQkEsT0FBMkIsSUFBakI0VyxFQUEwQixDQUFDLEVBQUlBLEVBQ3pDaFgsRUFBU1gsRUFBS1csT0FFbEIsR0FBc0IsbUJBQVhBLEVBQXVCLENBQ2hDLElBQUlpWCxFQUFZalgsRUFBTyxDQUNyQlYsTUFBT0EsRUFDUEwsS0FBTUEsRUFDTmlLLFNBQVVBLEVBQ1Y5SSxRQUFTQSxJQUtYa1csRUFBaUIvRixLQUFLMEcsR0FGVCxXQUFtQixFQUdsQyxDQUNGLElBL0dTL04sRUFBU1EsUUFDbEIsRUFNQXdOLFlBQWEsV0FDWCxJQUFJWCxFQUFKLENBSUEsSUFBSVksRUFBa0I3WCxFQUFNRSxTQUN4QnZDLEVBQVlrYSxFQUFnQmxhLFVBQzVCRCxFQUFTbWEsRUFBZ0JuYSxPQUc3QixHQUFLeVksR0FBaUJ4WSxFQUFXRCxHQUFqQyxDQUtBc0MsRUFBTXdHLE1BQVEsQ0FDWjdJLFVBQVd3WCxHQUFpQnhYLEVBQVdxSCxFQUFnQnRILEdBQW9DLFVBQTNCc0MsRUFBTWMsUUFBUUMsVUFDOUVyRCxPQUFRaUcsRUFBY2pHLElBT3hCc0MsRUFBTTBSLE9BQVEsRUFDZDFSLEVBQU1qQyxVQUFZaUMsRUFBTWMsUUFBUS9DLFVBS2hDaUMsRUFBTStXLGlCQUFpQjVXLFNBQVEsU0FBVTBWLEdBQ3ZDLE9BQU83VixFQUFNbUcsY0FBYzBQLEVBQVNsVyxNQUFRdEQsT0FBT2tFLE9BQU8sQ0FBQyxFQUFHc1YsRUFBU25NLEtBQ3pFLElBRUEsSUFBSyxJQUFJb08sRUFBUSxFQUFHQSxFQUFROVgsRUFBTStXLGlCQUFpQmhILE9BQVErSCxJQUN6RCxJQUFvQixJQUFoQjlYLEVBQU0wUixNQUFWLENBTUEsSUFBSXFHLEVBQXdCL1gsRUFBTStXLGlCQUFpQmUsR0FDL0NoWSxFQUFLaVksRUFBc0JqWSxHQUMzQmtZLEVBQXlCRCxFQUFzQmpYLFFBQy9Db00sT0FBc0MsSUFBM0I4SyxFQUFvQyxDQUFDLEVBQUlBLEVBQ3BEclksRUFBT29ZLEVBQXNCcFksS0FFZixtQkFBUEcsSUFDVEUsRUFBUUYsRUFBRyxDQUNURSxNQUFPQSxFQUNQYyxRQUFTb00sRUFDVHZOLEtBQU1BLEVBQ05pSyxTQUFVQSxLQUNONUosRUFkUixNQUhFQSxFQUFNMFIsT0FBUSxFQUNkb0csR0FBUyxDQXpCYixDQVRBLENBcURGLEVBR0ExTixRQzFJMkJ0SyxFRDBJVixXQUNmLE9BQU8sSUFBSW1ZLFNBQVEsU0FBVUMsR0FDM0J0TyxFQUFTZ08sY0FDVE0sRUFBUWxZLEVBQ1YsR0FDRixFQzdJRyxXQVVMLE9BVEs4VyxJQUNIQSxFQUFVLElBQUltQixTQUFRLFNBQVVDLEdBQzlCRCxRQUFRQyxVQUFVQyxNQUFLLFdBQ3JCckIsT0FBVXNCLEVBQ1ZGLEVBQVFwWSxJQUNWLEdBQ0YsS0FHS2dYLENBQ1QsR0RtSUl1QixRQUFTLFdBQ1BqQixJQUNBSCxHQUFjLENBQ2hCLEdBR0YsSUFBS2QsR0FBaUJ4WSxFQUFXRCxHQUMvQixPQUFPa00sRUFtQ1QsU0FBU3dOLElBQ1BKLEVBQWlCN1csU0FBUSxTQUFVTCxHQUNqQyxPQUFPQSxHQUNULElBQ0FrWCxFQUFtQixFQUNyQixDQUVBLE9BdkNBcE4sRUFBU3NOLFdBQVdwVyxHQUFTcVgsTUFBSyxTQUFVblksSUFDckNpWCxHQUFlblcsRUFBUXdYLGVBQzFCeFgsRUFBUXdYLGNBQWN0WSxFQUUxQixJQW1DTzRKLENBQ1QsQ0FDRixDQUNPLElBQUkyTyxHQUE0QmhDLEtHekxuQyxHQUE0QkEsR0FBZ0IsQ0FDOUNJLGlCQUZxQixDQUFDNkIsR0FBZ0IsR0FBZSxHQUFlLEVBQWEsR0FBUSxHQUFNLEdBQWlCLEVBQU8sTUNKckgsR0FBNEJqQyxHQUFnQixDQUM5Q0ksaUJBRnFCLENBQUM2QixHQUFnQixHQUFlLEdBQWUsS0NhdEUsTUFBTUMsR0FBYSxJQUFJbEksSUFDakJtSSxHQUFPLENBQ1gsR0FBQXRILENBQUl4UyxFQUFTekMsRUFBS3lOLEdBQ1g2TyxHQUFXekMsSUFBSXBYLElBQ2xCNlosR0FBV3JILElBQUl4UyxFQUFTLElBQUkyUixLQUU5QixNQUFNb0ksRUFBY0YsR0FBV2pjLElBQUlvQyxHQUk5QitaLEVBQVkzQyxJQUFJN1osSUFBNkIsSUFBckJ3YyxFQUFZQyxLQUt6Q0QsRUFBWXZILElBQUlqVixFQUFLeU4sR0FIbkJpUCxRQUFRQyxNQUFNLCtFQUErRTdXLE1BQU04VyxLQUFLSixFQUFZMVksUUFBUSxNQUloSSxFQUNBekQsSUFBRyxDQUFDb0MsRUFBU3pDLElBQ1BzYyxHQUFXekMsSUFBSXBYLElBQ1Y2WixHQUFXamMsSUFBSW9DLEdBQVNwQyxJQUFJTCxJQUU5QixLQUVULE1BQUE2YyxDQUFPcGEsRUFBU3pDLEdBQ2QsSUFBS3NjLEdBQVd6QyxJQUFJcFgsR0FDbEIsT0FFRixNQUFNK1osRUFBY0YsR0FBV2pjLElBQUlvQyxHQUNuQytaLEVBQVlNLE9BQU85YyxHQUdNLElBQXJCd2MsRUFBWUMsTUFDZEgsR0FBV1EsT0FBT3JhLEVBRXRCLEdBWUlzYSxHQUFpQixnQkFPakJDLEdBQWdCQyxJQUNoQkEsR0FBWW5hLE9BQU9vYSxLQUFPcGEsT0FBT29hLElBQUlDLFNBRXZDRixFQUFXQSxFQUFTNU8sUUFBUSxpQkFBaUIsQ0FBQytPLEVBQU9DLElBQU8sSUFBSUgsSUFBSUMsT0FBT0UsUUFFdEVKLEdBNENISyxHQUF1QjdhLElBQzNCQSxFQUFROGEsY0FBYyxJQUFJQyxNQUFNVCxJQUFnQixFQUU1QyxHQUFZVSxNQUNYQSxHQUE0QixpQkFBWEEsVUFHTyxJQUFsQkEsRUFBT0MsU0FDaEJELEVBQVNBLEVBQU8sU0FFZ0IsSUFBcEJBLEVBQU9FLFVBRWpCQyxHQUFhSCxHQUViLEdBQVVBLEdBQ0xBLEVBQU9DLE9BQVNELEVBQU8sR0FBS0EsRUFFZixpQkFBWEEsR0FBdUJBLEVBQU83SixPQUFTLEVBQ3pDckwsU0FBUytDLGNBQWMwUixHQUFjUyxJQUV2QyxLQUVISSxHQUFZcGIsSUFDaEIsSUFBSyxHQUFVQSxJQUFnRCxJQUFwQ0EsRUFBUXFiLGlCQUFpQmxLLE9BQ2xELE9BQU8sRUFFVCxNQUFNbUssRUFBZ0YsWUFBN0Q1VixpQkFBaUIxRixHQUFTdWIsaUJBQWlCLGNBRTlEQyxFQUFnQnhiLEVBQVF5YixRQUFRLHVCQUN0QyxJQUFLRCxFQUNILE9BQU9GLEVBRVQsR0FBSUUsSUFBa0J4YixFQUFTLENBQzdCLE1BQU0wYixFQUFVMWIsRUFBUXliLFFBQVEsV0FDaEMsR0FBSUMsR0FBV0EsRUFBUWxXLGFBQWVnVyxFQUNwQyxPQUFPLEVBRVQsR0FBZ0IsT0FBWkUsRUFDRixPQUFPLENBRVgsQ0FDQSxPQUFPSixDQUFnQixFQUVuQkssR0FBYTNiLElBQ1pBLEdBQVdBLEVBQVFrYixXQUFhVSxLQUFLQyxnQkFHdEM3YixFQUFROGIsVUFBVTdXLFNBQVMsbUJBR0MsSUFBckJqRixFQUFRK2IsU0FDVi9iLEVBQVErYixTQUVWL2IsRUFBUWdjLGFBQWEsYUFBb0QsVUFBckNoYyxFQUFRaWMsYUFBYSxhQUU1REMsR0FBaUJsYyxJQUNyQixJQUFLOEYsU0FBU0MsZ0JBQWdCb1csYUFDNUIsT0FBTyxLQUlULEdBQW1DLG1CQUF4Qm5jLEVBQVFxRixZQUE0QixDQUM3QyxNQUFNK1csRUFBT3BjLEVBQVFxRixjQUNyQixPQUFPK1csYUFBZ0J0YixXQUFhc2IsRUFBTyxJQUM3QyxDQUNBLE9BQUlwYyxhQUFtQmMsV0FDZGQsRUFJSkEsRUFBUXdGLFdBR04wVyxHQUFlbGMsRUFBUXdGLFlBRnJCLElBRWdDLEVBRXJDNlcsR0FBTyxPQVVQQyxHQUFTdGMsSUFDYkEsRUFBUXVFLFlBQVksRUFFaEJnWSxHQUFZLElBQ1psYyxPQUFPbWMsU0FBVzFXLFNBQVM2RyxLQUFLcVAsYUFBYSxxQkFDeEMzYixPQUFPbWMsT0FFVCxLQUVIQyxHQUE0QixHQWdCNUJDLEdBQVEsSUFBdUMsUUFBakM1VyxTQUFTQyxnQkFBZ0I0VyxJQUN2Q0MsR0FBcUJDLElBaEJBQyxRQWlCTixLQUNqQixNQUFNQyxFQUFJUixLQUVWLEdBQUlRLEVBQUcsQ0FDTCxNQUFNaGMsRUFBTzhiLEVBQU9HLEtBQ2RDLEVBQXFCRixFQUFFN2IsR0FBR0gsR0FDaENnYyxFQUFFN2IsR0FBR0gsR0FBUThiLEVBQU9LLGdCQUNwQkgsRUFBRTdiLEdBQUdILEdBQU1vYyxZQUFjTixFQUN6QkUsRUFBRTdiLEdBQUdILEdBQU1xYyxXQUFhLEtBQ3RCTCxFQUFFN2IsR0FBR0gsR0FBUWtjLEVBQ05KLEVBQU9LLGdCQUVsQixHQTVCMEIsWUFBeEJwWCxTQUFTdVgsWUFFTlosR0FBMEJ0TCxRQUM3QnJMLFNBQVN5RixpQkFBaUIsb0JBQW9CLEtBQzVDLElBQUssTUFBTXVSLEtBQVlMLEdBQ3JCSyxHQUNGLElBR0pMLEdBQTBCcEssS0FBS3lLLElBRS9CQSxHQWtCQSxFQUVFUSxHQUFVLENBQUNDLEVBQWtCOUYsRUFBTyxHQUFJK0YsRUFBZUQsSUFDeEIsbUJBQXJCQSxFQUFrQ0EsS0FBb0I5RixHQUFRK0YsRUFFeEVDLEdBQXlCLENBQUNYLEVBQVVZLEVBQW1CQyxHQUFvQixLQUMvRSxJQUFLQSxFQUVILFlBREFMLEdBQVFSLEdBR1YsTUFDTWMsRUEvSmlDNWQsS0FDdkMsSUFBS0EsRUFDSCxPQUFPLEVBSVQsSUFBSSxtQkFDRjZkLEVBQWtCLGdCQUNsQkMsR0FDRXpkLE9BQU9xRixpQkFBaUIxRixHQUM1QixNQUFNK2QsRUFBMEJDLE9BQU9DLFdBQVdKLEdBQzVDSyxFQUF1QkYsT0FBT0MsV0FBV0gsR0FHL0MsT0FBS0MsR0FBNEJHLEdBS2pDTCxFQUFxQkEsRUFBbUJsYixNQUFNLEtBQUssR0FDbkRtYixFQUFrQkEsRUFBZ0JuYixNQUFNLEtBQUssR0F0RGYsS0F1RHRCcWIsT0FBT0MsV0FBV0osR0FBc0JHLE9BQU9DLFdBQVdILEtBTnpELENBTW9HLEVBMElwRkssQ0FBaUNULEdBRGxDLEVBRXhCLElBQUlVLEdBQVMsRUFDYixNQUFNQyxFQUFVLEVBQ2RyUixhQUVJQSxJQUFXMFEsSUFHZlUsR0FBUyxFQUNUVixFQUFrQmpTLG9CQUFvQjZPLEdBQWdCK0QsR0FDdERmLEdBQVFSLEdBQVMsRUFFbkJZLEVBQWtCblMsaUJBQWlCK08sR0FBZ0IrRCxHQUNuREMsWUFBVyxLQUNKRixHQUNIdkQsR0FBcUI2QyxFQUN2QixHQUNDRSxFQUFpQixFQVloQlcsR0FBdUIsQ0FBQzFSLEVBQU0yUixFQUFlQyxFQUFlQyxLQUNoRSxNQUFNQyxFQUFhOVIsRUFBS3NFLE9BQ3hCLElBQUkrSCxFQUFRck0sRUFBS2pILFFBQVE0WSxHQUl6QixPQUFlLElBQVh0RixHQUNNdUYsR0FBaUJDLEVBQWlCN1IsRUFBSzhSLEVBQWEsR0FBSzlSLEVBQUssSUFFeEVxTSxHQUFTdUYsRUFBZ0IsR0FBSyxFQUMxQkMsSUFDRnhGLEdBQVNBLEVBQVF5RixHQUFjQSxHQUUxQjlSLEVBQUtqSyxLQUFLQyxJQUFJLEVBQUdELEtBQUtFLElBQUlvVyxFQUFPeUYsRUFBYSxLQUFJLEVBZXJEQyxHQUFpQixxQkFDakJDLEdBQWlCLE9BQ2pCQyxHQUFnQixTQUNoQkMsR0FBZ0IsQ0FBQyxFQUN2QixJQUFJQyxHQUFXLEVBQ2YsTUFBTUMsR0FBZSxDQUNuQkMsV0FBWSxZQUNaQyxXQUFZLFlBRVJDLEdBQWUsSUFBSXJJLElBQUksQ0FBQyxRQUFTLFdBQVksVUFBVyxZQUFhLGNBQWUsYUFBYyxpQkFBa0IsWUFBYSxXQUFZLFlBQWEsY0FBZSxZQUFhLFVBQVcsV0FBWSxRQUFTLG9CQUFxQixhQUFjLFlBQWEsV0FBWSxjQUFlLGNBQWUsY0FBZSxZQUFhLGVBQWdCLGdCQUFpQixlQUFnQixnQkFBaUIsYUFBYyxRQUFTLE9BQVEsU0FBVSxRQUFTLFNBQVUsU0FBVSxVQUFXLFdBQVksT0FBUSxTQUFVLGVBQWdCLFNBQVUsT0FBUSxtQkFBb0IsbUJBQW9CLFFBQVMsUUFBUyxXQU0vbEIsU0FBU3NJLEdBQWFyZixFQUFTc2YsR0FDN0IsT0FBT0EsR0FBTyxHQUFHQSxNQUFRTixRQUFnQmhmLEVBQVFnZixVQUFZQSxJQUMvRCxDQUNBLFNBQVNPLEdBQWlCdmYsR0FDeEIsTUFBTXNmLEVBQU1ELEdBQWFyZixHQUd6QixPQUZBQSxFQUFRZ2YsU0FBV00sRUFDbkJQLEdBQWNPLEdBQU9QLEdBQWNPLElBQVEsQ0FBQyxFQUNyQ1AsR0FBY08sRUFDdkIsQ0FpQ0EsU0FBU0UsR0FBWUMsRUFBUUMsRUFBVUMsRUFBcUIsTUFDMUQsT0FBT2xpQixPQUFPbWlCLE9BQU9ILEdBQVE3TSxNQUFLaU4sR0FBU0EsRUFBTUgsV0FBYUEsR0FBWUcsRUFBTUYscUJBQXVCQSxHQUN6RyxDQUNBLFNBQVNHLEdBQW9CQyxFQUFtQjFCLEVBQVMyQixHQUN2RCxNQUFNQyxFQUFpQyxpQkFBWjVCLEVBRXJCcUIsRUFBV08sRUFBY0QsRUFBcUIzQixHQUFXMkIsRUFDL0QsSUFBSUUsRUFBWUMsR0FBYUosR0FJN0IsT0FIS1gsR0FBYWhJLElBQUk4SSxLQUNwQkEsRUFBWUgsR0FFUCxDQUFDRSxFQUFhUCxFQUFVUSxFQUNqQyxDQUNBLFNBQVNFLEdBQVdwZ0IsRUFBUytmLEVBQW1CMUIsRUFBUzJCLEVBQW9CSyxHQUMzRSxHQUFpQyxpQkFBdEJOLElBQW1DL2YsRUFDNUMsT0FFRixJQUFLaWdCLEVBQWFQLEVBQVVRLEdBQWFKLEdBQW9CQyxFQUFtQjFCLEVBQVMyQixHQUl6RixHQUFJRCxLQUFxQmQsR0FBYyxDQUNyQyxNQUFNcUIsRUFBZXBmLEdBQ1osU0FBVTJlLEdBQ2YsSUFBS0EsRUFBTVUsZUFBaUJWLEVBQU1VLGdCQUFrQlYsRUFBTVcsaUJBQW1CWCxFQUFNVyxlQUFldmIsU0FBUzRhLEVBQU1VLGVBQy9HLE9BQU9yZixFQUFHakQsS0FBS3dpQixLQUFNWixFQUV6QixFQUVGSCxFQUFXWSxFQUFhWixFQUMxQixDQUNBLE1BQU1ELEVBQVNGLEdBQWlCdmYsR0FDMUIwZ0IsRUFBV2pCLEVBQU9TLEtBQWVULEVBQU9TLEdBQWEsQ0FBQyxHQUN0RFMsRUFBbUJuQixHQUFZa0IsRUFBVWhCLEVBQVVPLEVBQWM1QixFQUFVLE1BQ2pGLEdBQUlzQyxFQUVGLFlBREFBLEVBQWlCTixPQUFTTSxFQUFpQk4sUUFBVUEsR0FHdkQsTUFBTWYsRUFBTUQsR0FBYUssRUFBVUssRUFBa0JuVSxRQUFRZ1QsR0FBZ0IsS0FDdkUxZCxFQUFLK2UsRUE1RGIsU0FBb0NqZ0IsRUFBU3dhLEVBQVV0WixHQUNyRCxPQUFPLFNBQVNtZCxFQUFRd0IsR0FDdEIsTUFBTWUsRUFBYzVnQixFQUFRNmdCLGlCQUFpQnJHLEdBQzdDLElBQUssSUFBSSxPQUNQeE4sR0FDRTZTLEVBQU83UyxHQUFVQSxJQUFXeVQsS0FBTXpULEVBQVNBLEVBQU94SCxXQUNwRCxJQUFLLE1BQU1zYixLQUFjRixFQUN2QixHQUFJRSxJQUFlOVQsRUFTbkIsT0FOQStULEdBQVdsQixFQUFPLENBQ2hCVyxlQUFnQnhULElBRWRxUixFQUFRZ0MsUUFDVlcsR0FBYUMsSUFBSWpoQixFQUFTNmYsRUFBTXFCLEtBQU0xRyxFQUFVdFosR0FFM0NBLEVBQUdpZ0IsTUFBTW5VLEVBQVEsQ0FBQzZTLEdBRy9CLENBQ0YsQ0F3QzJCdUIsQ0FBMkJwaEIsRUFBU3FlLEVBQVNxQixHQXZFeEUsU0FBMEIxZixFQUFTa0IsR0FDakMsT0FBTyxTQUFTbWQsRUFBUXdCLEdBT3RCLE9BTkFrQixHQUFXbEIsRUFBTyxDQUNoQlcsZUFBZ0J4Z0IsSUFFZHFlLEVBQVFnQyxRQUNWVyxHQUFhQyxJQUFJamhCLEVBQVM2ZixFQUFNcUIsS0FBTWhnQixHQUVqQ0EsRUFBR2lnQixNQUFNbmhCLEVBQVMsQ0FBQzZmLEdBQzVCLENBQ0YsQ0E2RG9Gd0IsQ0FBaUJyaEIsRUFBUzBmLEdBQzVHeGUsRUFBR3llLG1CQUFxQk0sRUFBYzVCLEVBQVUsS0FDaERuZCxFQUFHd2UsU0FBV0EsRUFDZHhlLEVBQUdtZixPQUFTQSxFQUNabmYsRUFBRzhkLFNBQVdNLEVBQ2RvQixFQUFTcEIsR0FBT3BlLEVBQ2hCbEIsRUFBUXVMLGlCQUFpQjJVLEVBQVdoZixFQUFJK2UsRUFDMUMsQ0FDQSxTQUFTcUIsR0FBY3RoQixFQUFTeWYsRUFBUVMsRUFBVzdCLEVBQVNzQixHQUMxRCxNQUFNemUsRUFBS3NlLEdBQVlDLEVBQU9TLEdBQVk3QixFQUFTc0IsR0FDOUN6ZSxJQUdMbEIsRUFBUXlMLG9CQUFvQnlVLEVBQVdoZixFQUFJcWdCLFFBQVE1QixXQUM1Q0YsRUFBT1MsR0FBV2hmLEVBQUc4ZCxVQUM5QixDQUNBLFNBQVN3QyxHQUF5QnhoQixFQUFTeWYsRUFBUVMsRUFBV3VCLEdBQzVELE1BQU1DLEVBQW9CakMsRUFBT1MsSUFBYyxDQUFDLEVBQ2hELElBQUssTUFBT3lCLEVBQVk5QixLQUFVcGlCLE9BQU9ta0IsUUFBUUYsR0FDM0NDLEVBQVdFLFNBQVNKLElBQ3RCSCxHQUFjdGhCLEVBQVN5ZixFQUFRUyxFQUFXTCxFQUFNSCxTQUFVRyxFQUFNRixtQkFHdEUsQ0FDQSxTQUFTUSxHQUFhTixHQUdwQixPQURBQSxFQUFRQSxFQUFNalUsUUFBUWlULEdBQWdCLElBQy9CSSxHQUFhWSxJQUFVQSxDQUNoQyxDQUNBLE1BQU1tQixHQUFlLENBQ25CLEVBQUFjLENBQUc5aEIsRUFBUzZmLEVBQU94QixFQUFTMkIsR0FDMUJJLEdBQVdwZ0IsRUFBUzZmLEVBQU94QixFQUFTMkIsR0FBb0IsRUFDMUQsRUFDQSxHQUFBK0IsQ0FBSS9oQixFQUFTNmYsRUFBT3hCLEVBQVMyQixHQUMzQkksR0FBV3BnQixFQUFTNmYsRUFBT3hCLEVBQVMyQixHQUFvQixFQUMxRCxFQUNBLEdBQUFpQixDQUFJamhCLEVBQVMrZixFQUFtQjFCLEVBQVMyQixHQUN2QyxHQUFpQyxpQkFBdEJELElBQW1DL2YsRUFDNUMsT0FFRixNQUFPaWdCLEVBQWFQLEVBQVVRLEdBQWFKLEdBQW9CQyxFQUFtQjFCLEVBQVMyQixHQUNyRmdDLEVBQWM5QixJQUFjSCxFQUM1Qk4sRUFBU0YsR0FBaUJ2ZixHQUMxQjBoQixFQUFvQmpDLEVBQU9TLElBQWMsQ0FBQyxFQUMxQytCLEVBQWNsQyxFQUFrQm1DLFdBQVcsS0FDakQsUUFBd0IsSUFBYnhDLEVBQVgsQ0FRQSxHQUFJdUMsRUFDRixJQUFLLE1BQU1FLEtBQWdCMWtCLE9BQU80RCxLQUFLb2UsR0FDckMrQixHQUF5QnhoQixFQUFTeWYsRUFBUTBDLEVBQWNwQyxFQUFrQmxOLE1BQU0sSUFHcEYsSUFBSyxNQUFPdVAsRUFBYXZDLEtBQVVwaUIsT0FBT21rQixRQUFRRixHQUFvQixDQUNwRSxNQUFNQyxFQUFhUyxFQUFZeFcsUUFBUWtULEdBQWUsSUFDakRrRCxJQUFlakMsRUFBa0I4QixTQUFTRixJQUM3Q0wsR0FBY3RoQixFQUFTeWYsRUFBUVMsRUFBV0wsRUFBTUgsU0FBVUcsRUFBTUYsbUJBRXBFLENBWEEsS0FQQSxDQUVFLElBQUtsaUIsT0FBTzRELEtBQUtxZ0IsR0FBbUJ2USxPQUNsQyxPQUVGbVEsR0FBY3RoQixFQUFTeWYsRUFBUVMsRUFBV1IsRUFBVU8sRUFBYzVCLEVBQVUsS0FFOUUsQ0FZRixFQUNBLE9BQUFnRSxDQUFRcmlCLEVBQVM2ZixFQUFPcEksR0FDdEIsR0FBcUIsaUJBQVZvSSxJQUF1QjdmLEVBQ2hDLE9BQU8sS0FFVCxNQUFNK2MsRUFBSVIsS0FHVixJQUFJK0YsRUFBYyxLQUNkQyxHQUFVLEVBQ1ZDLEdBQWlCLEVBQ2pCQyxHQUFtQixFQUpINUMsSUFERk0sR0FBYU4sSUFNWjlDLElBQ2pCdUYsRUFBY3ZGLEVBQUVoQyxNQUFNOEUsRUFBT3BJLEdBQzdCc0YsRUFBRS9jLEdBQVNxaUIsUUFBUUMsR0FDbkJDLEdBQVdELEVBQVlJLHVCQUN2QkYsR0FBa0JGLEVBQVlLLGdDQUM5QkYsRUFBbUJILEVBQVlNLHNCQUVqQyxNQUFNQyxFQUFNOUIsR0FBVyxJQUFJaEcsTUFBTThFLEVBQU8sQ0FDdEMwQyxVQUNBTyxZQUFZLElBQ1ZyTCxHQVVKLE9BVElnTCxHQUNGSSxFQUFJRSxpQkFFRlAsR0FDRnhpQixFQUFROGEsY0FBYytILEdBRXBCQSxFQUFJSixrQkFBb0JILEdBQzFCQSxFQUFZUyxpQkFFUEYsQ0FDVCxHQUVGLFNBQVM5QixHQUFXbGpCLEVBQUttbEIsRUFBTyxDQUFDLEdBQy9CLElBQUssTUFBT3psQixFQUFLYSxLQUFVWCxPQUFPbWtCLFFBQVFvQixHQUN4QyxJQUNFbmxCLEVBQUlOLEdBQU9hLENBQ2IsQ0FBRSxNQUFPNmtCLEdBQ1B4bEIsT0FBT0MsZUFBZUcsRUFBS04sRUFBSyxDQUM5QjJsQixjQUFjLEVBQ2R0bEIsSUFBRyxJQUNNUSxHQUdiLENBRUYsT0FBT1AsQ0FDVCxDQVNBLFNBQVNzbEIsR0FBYy9rQixHQUNyQixHQUFjLFNBQVZBLEVBQ0YsT0FBTyxFQUVULEdBQWMsVUFBVkEsRUFDRixPQUFPLEVBRVQsR0FBSUEsSUFBVTRmLE9BQU81ZixHQUFPa0MsV0FDMUIsT0FBTzBkLE9BQU81ZixHQUVoQixHQUFjLEtBQVZBLEdBQTBCLFNBQVZBLEVBQ2xCLE9BQU8sS0FFVCxHQUFxQixpQkFBVkEsRUFDVCxPQUFPQSxFQUVULElBQ0UsT0FBT2dsQixLQUFLQyxNQUFNQyxtQkFBbUJsbEIsR0FDdkMsQ0FBRSxNQUFPNmtCLEdBQ1AsT0FBTzdrQixDQUNULENBQ0YsQ0FDQSxTQUFTbWxCLEdBQWlCaG1CLEdBQ3hCLE9BQU9BLEVBQUlxTyxRQUFRLFVBQVU0WCxHQUFPLElBQUlBLEVBQUl0akIsaUJBQzlDLENBQ0EsTUFBTXVqQixHQUFjLENBQ2xCLGdCQUFBQyxDQUFpQjFqQixFQUFTekMsRUFBS2EsR0FDN0I0QixFQUFRNkIsYUFBYSxXQUFXMGhCLEdBQWlCaG1CLEtBQVFhLEVBQzNELEVBQ0EsbUJBQUF1bEIsQ0FBb0IzakIsRUFBU3pDLEdBQzNCeUMsRUFBUTRCLGdCQUFnQixXQUFXMmhCLEdBQWlCaG1CLEtBQ3RELEVBQ0EsaUJBQUFxbUIsQ0FBa0I1akIsR0FDaEIsSUFBS0EsRUFDSCxNQUFPLENBQUMsRUFFVixNQUFNMEIsRUFBYSxDQUFDLEVBQ2RtaUIsRUFBU3BtQixPQUFPNEQsS0FBS3JCLEVBQVE4akIsU0FBU2xkLFFBQU9ySixHQUFPQSxFQUFJMmtCLFdBQVcsUUFBVTNrQixFQUFJMmtCLFdBQVcsY0FDbEcsSUFBSyxNQUFNM2tCLEtBQU9zbUIsRUFBUSxDQUN4QixJQUFJRSxFQUFVeG1CLEVBQUlxTyxRQUFRLE1BQU8sSUFDakNtWSxFQUFVQSxFQUFRQyxPQUFPLEdBQUc5akIsY0FBZ0I2akIsRUFBUWxSLE1BQU0sRUFBR2tSLEVBQVE1UyxRQUNyRXpQLEVBQVdxaUIsR0FBV1osR0FBY25qQixFQUFROGpCLFFBQVF2bUIsR0FDdEQsQ0FDQSxPQUFPbUUsQ0FDVCxFQUNBdWlCLGlCQUFnQixDQUFDamtCLEVBQVN6QyxJQUNqQjRsQixHQUFjbmpCLEVBQVFpYyxhQUFhLFdBQVdzSCxHQUFpQmhtQixRQWdCMUUsTUFBTTJtQixHQUVKLGtCQUFXQyxHQUNULE1BQU8sQ0FBQyxDQUNWLENBQ0Esc0JBQVdDLEdBQ1QsTUFBTyxDQUFDLENBQ1YsQ0FDQSxlQUFXcEgsR0FDVCxNQUFNLElBQUlxSCxNQUFNLHNFQUNsQixDQUNBLFVBQUFDLENBQVdDLEdBSVQsT0FIQUEsRUFBUzlELEtBQUsrRCxnQkFBZ0JELEdBQzlCQSxFQUFTOUQsS0FBS2dFLGtCQUFrQkYsR0FDaEM5RCxLQUFLaUUsaUJBQWlCSCxHQUNmQSxDQUNULENBQ0EsaUJBQUFFLENBQWtCRixHQUNoQixPQUFPQSxDQUNULENBQ0EsZUFBQUMsQ0FBZ0JELEVBQVF2a0IsR0FDdEIsTUFBTTJrQixFQUFhLEdBQVUza0IsR0FBV3lqQixHQUFZUSxpQkFBaUJqa0IsRUFBUyxVQUFZLENBQUMsRUFFM0YsTUFBTyxJQUNGeWdCLEtBQUttRSxZQUFZVCxXQUNNLGlCQUFmUSxFQUEwQkEsRUFBYSxDQUFDLEtBQy9DLEdBQVUza0IsR0FBV3lqQixHQUFZRyxrQkFBa0I1akIsR0FBVyxDQUFDLEtBQzdDLGlCQUFYdWtCLEVBQXNCQSxFQUFTLENBQUMsRUFFL0MsQ0FDQSxnQkFBQUcsQ0FBaUJILEVBQVFNLEVBQWNwRSxLQUFLbUUsWUFBWVIsYUFDdEQsSUFBSyxNQUFPN2hCLEVBQVV1aUIsS0FBa0JybkIsT0FBT21rQixRQUFRaUQsR0FBYyxDQUNuRSxNQUFNem1CLEVBQVFtbUIsRUFBT2hpQixHQUNmd2lCLEVBQVksR0FBVTNtQixHQUFTLFVBaGlCckM0YyxPQURTQSxFQWlpQitDNWMsR0EvaEJuRCxHQUFHNGMsSUFFTHZkLE9BQU9NLFVBQVV1QyxTQUFTckMsS0FBSytjLEdBQVFMLE1BQU0sZUFBZSxHQUFHemEsY0E4aEJsRSxJQUFLLElBQUk4a0IsT0FBT0YsR0FBZWhoQixLQUFLaWhCLEdBQ2xDLE1BQU0sSUFBSUUsVUFBVSxHQUFHeEUsS0FBS21FLFlBQVk1SCxLQUFLa0ksMEJBQTBCM2lCLHFCQUE0QndpQix5QkFBaUNELE1BRXhJLENBcmlCVzlKLEtBc2lCYixFQXFCRixNQUFNbUssV0FBc0JqQixHQUMxQixXQUFBVSxDQUFZNWtCLEVBQVN1a0IsR0FDbkJhLFNBQ0FwbEIsRUFBVW1iLEdBQVduYixNQUlyQnlnQixLQUFLNEUsU0FBV3JsQixFQUNoQnlnQixLQUFLNkUsUUFBVTdFLEtBQUs2RCxXQUFXQyxHQUMvQnpLLEdBQUt0SCxJQUFJaU8sS0FBSzRFLFNBQVU1RSxLQUFLbUUsWUFBWVcsU0FBVTlFLE1BQ3JELENBR0EsT0FBQStFLEdBQ0UxTCxHQUFLTSxPQUFPcUcsS0FBSzRFLFNBQVU1RSxLQUFLbUUsWUFBWVcsVUFDNUN2RSxHQUFhQyxJQUFJUixLQUFLNEUsU0FBVTVFLEtBQUttRSxZQUFZYSxXQUNqRCxJQUFLLE1BQU1DLEtBQWdCam9CLE9BQU9rb0Isb0JBQW9CbEYsTUFDcERBLEtBQUtpRixHQUFnQixJQUV6QixDQUNBLGNBQUFFLENBQWU5SSxFQUFVOWMsRUFBUzZsQixHQUFhLEdBQzdDcEksR0FBdUJYLEVBQVU5YyxFQUFTNmxCLEVBQzVDLENBQ0EsVUFBQXZCLENBQVdDLEdBSVQsT0FIQUEsRUFBUzlELEtBQUsrRCxnQkFBZ0JELEVBQVE5RCxLQUFLNEUsVUFDM0NkLEVBQVM5RCxLQUFLZ0Usa0JBQWtCRixHQUNoQzlELEtBQUtpRSxpQkFBaUJILEdBQ2ZBLENBQ1QsQ0FHQSxrQkFBT3VCLENBQVk5bEIsR0FDakIsT0FBTzhaLEdBQUtsYyxJQUFJdWQsR0FBV25iLEdBQVV5Z0IsS0FBSzhFLFNBQzVDLENBQ0EsMEJBQU9RLENBQW9CL2xCLEVBQVN1a0IsRUFBUyxDQUFDLEdBQzVDLE9BQU85RCxLQUFLcUYsWUFBWTlsQixJQUFZLElBQUl5Z0IsS0FBS3pnQixFQUEyQixpQkFBWHVrQixFQUFzQkEsRUFBUyxLQUM5RixDQUNBLGtCQUFXeUIsR0FDVCxNQTVDWSxPQTZDZCxDQUNBLG1CQUFXVCxHQUNULE1BQU8sTUFBTTlFLEtBQUt6RCxNQUNwQixDQUNBLG9CQUFXeUksR0FDVCxNQUFPLElBQUloRixLQUFLOEUsVUFDbEIsQ0FDQSxnQkFBT1UsQ0FBVWxsQixHQUNmLE1BQU8sR0FBR0EsSUFBTzBmLEtBQUtnRixXQUN4QixFQVVGLE1BQU1TLEdBQWNsbUIsSUFDbEIsSUFBSXdhLEVBQVd4YSxFQUFRaWMsYUFBYSxrQkFDcEMsSUFBS3pCLEdBQXlCLE1BQWJBLEVBQWtCLENBQ2pDLElBQUkyTCxFQUFnQm5tQixFQUFRaWMsYUFBYSxRQU16QyxJQUFLa0ssSUFBa0JBLEVBQWN0RSxTQUFTLE9BQVNzRSxFQUFjakUsV0FBVyxLQUM5RSxPQUFPLEtBSUxpRSxFQUFjdEUsU0FBUyxPQUFTc0UsRUFBY2pFLFdBQVcsT0FDM0RpRSxFQUFnQixJQUFJQSxFQUFjeGpCLE1BQU0sS0FBSyxNQUUvQzZYLEVBQVcyTCxHQUFtQyxNQUFsQkEsRUFBd0JBLEVBQWNDLE9BQVMsSUFDN0UsQ0FDQSxPQUFPNUwsRUFBV0EsRUFBUzdYLE1BQU0sS0FBS1ksS0FBSThpQixHQUFPOUwsR0FBYzhMLEtBQU0xaUIsS0FBSyxLQUFPLElBQUksRUFFakYyaUIsR0FBaUIsQ0FDckIxVCxLQUFJLENBQUM0SCxFQUFVeGEsRUFBVThGLFNBQVNDLGtCQUN6QixHQUFHM0csVUFBVXNCLFFBQVEzQyxVQUFVOGlCLGlCQUFpQjVpQixLQUFLK0IsRUFBU3dhLElBRXZFK0wsUUFBTyxDQUFDL0wsRUFBVXhhLEVBQVU4RixTQUFTQyxrQkFDNUJyRixRQUFRM0MsVUFBVThLLGNBQWM1SyxLQUFLK0IsRUFBU3dhLEdBRXZEZ00sU0FBUSxDQUFDeG1CLEVBQVN3YSxJQUNULEdBQUdwYixVQUFVWSxFQUFRd21CLFVBQVU1ZixRQUFPekIsR0FBU0EsRUFBTXNoQixRQUFRak0sS0FFdEUsT0FBQWtNLENBQVExbUIsRUFBU3dhLEdBQ2YsTUFBTWtNLEVBQVUsR0FDaEIsSUFBSUMsRUFBVzNtQixFQUFRd0YsV0FBV2lXLFFBQVFqQixHQUMxQyxLQUFPbU0sR0FDTEQsRUFBUXJVLEtBQUtzVSxHQUNiQSxFQUFXQSxFQUFTbmhCLFdBQVdpVyxRQUFRakIsR0FFekMsT0FBT2tNLENBQ1QsRUFDQSxJQUFBRSxDQUFLNW1CLEVBQVN3YSxHQUNaLElBQUlxTSxFQUFXN21CLEVBQVE4bUIsdUJBQ3ZCLEtBQU9ELEdBQVUsQ0FDZixHQUFJQSxFQUFTSixRQUFRak0sR0FDbkIsTUFBTyxDQUFDcU0sR0FFVkEsRUFBV0EsRUFBU0Msc0JBQ3RCLENBQ0EsTUFBTyxFQUNULEVBRUEsSUFBQXhoQixDQUFLdEYsRUFBU3dhLEdBQ1osSUFBSWxWLEVBQU90RixFQUFRK21CLG1CQUNuQixLQUFPemhCLEdBQU0sQ0FDWCxHQUFJQSxFQUFLbWhCLFFBQVFqTSxHQUNmLE1BQU8sQ0FBQ2xWLEdBRVZBLEVBQU9BLEVBQUt5aEIsa0JBQ2QsQ0FDQSxNQUFPLEVBQ1QsRUFDQSxpQkFBQUMsQ0FBa0JobkIsR0FDaEIsTUFBTWluQixFQUFhLENBQUMsSUFBSyxTQUFVLFFBQVMsV0FBWSxTQUFVLFVBQVcsYUFBYyw0QkFBNEIxakIsS0FBSWlYLEdBQVksR0FBR0EsMkJBQWlDN1csS0FBSyxLQUNoTCxPQUFPOGMsS0FBSzdOLEtBQUtxVSxFQUFZam5CLEdBQVM0RyxRQUFPc2dCLElBQU92TCxHQUFXdUwsSUFBTzlMLEdBQVU4TCxJQUNsRixFQUNBLHNCQUFBQyxDQUF1Qm5uQixHQUNyQixNQUFNd2EsRUFBVzBMLEdBQVlsbUIsR0FDN0IsT0FBSXdhLEdBQ0s4TCxHQUFlQyxRQUFRL0wsR0FBWUEsRUFFckMsSUFDVCxFQUNBLHNCQUFBNE0sQ0FBdUJwbkIsR0FDckIsTUFBTXdhLEVBQVcwTCxHQUFZbG1CLEdBQzdCLE9BQU93YSxFQUFXOEwsR0FBZUMsUUFBUS9MLEdBQVksSUFDdkQsRUFDQSwrQkFBQTZNLENBQWdDcm5CLEdBQzlCLE1BQU13YSxFQUFXMEwsR0FBWWxtQixHQUM3QixPQUFPd2EsRUFBVzhMLEdBQWUxVCxLQUFLNEgsR0FBWSxFQUNwRCxHQVVJOE0sR0FBdUIsQ0FBQ0MsRUFBV0MsRUFBUyxVQUNoRCxNQUFNQyxFQUFhLGdCQUFnQkYsRUFBVTlCLFlBQ3ZDMWtCLEVBQU93bUIsRUFBVXZLLEtBQ3ZCZ0UsR0FBYWMsR0FBR2hjLFNBQVUyaEIsRUFBWSxxQkFBcUIxbUIsT0FBVSxTQUFVOGUsR0FJN0UsR0FISSxDQUFDLElBQUssUUFBUWdDLFNBQVNwQixLQUFLaUgsVUFDOUI3SCxFQUFNa0QsaUJBRUpwSCxHQUFXOEUsTUFDYixPQUVGLE1BQU16VCxFQUFTc1osR0FBZWMsdUJBQXVCM0csT0FBU0EsS0FBS2hGLFFBQVEsSUFBSTFhLEtBQzlEd21CLEVBQVV4QixvQkFBb0IvWSxHQUd0Q3dhLElBQ1gsR0FBRSxFQWlCRUcsR0FBYyxZQUNkQyxHQUFjLFFBQVFELEtBQ3RCRSxHQUFlLFNBQVNGLEtBUTlCLE1BQU1HLFdBQWMzQyxHQUVsQixlQUFXbkksR0FDVCxNQWZXLE9BZ0JiLENBR0EsS0FBQStLLEdBRUUsR0FEbUIvRyxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVdUMsSUFDeENuRixpQkFDYixPQUVGaEMsS0FBSzRFLFNBQVN2SixVQUFVMUIsT0FsQkYsUUFtQnRCLE1BQU15TCxFQUFhcEYsS0FBSzRFLFNBQVN2SixVQUFVN1csU0FwQnJCLFFBcUJ0QndiLEtBQUttRixnQkFBZSxJQUFNbkYsS0FBS3VILG1CQUFtQnZILEtBQUs0RSxTQUFVUSxFQUNuRSxDQUdBLGVBQUFtQyxHQUNFdkgsS0FBSzRFLFNBQVNqTCxTQUNkNEcsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVXdDLElBQ3BDcEgsS0FBSytFLFNBQ1AsQ0FHQSxzQkFBT3RJLENBQWdCcUgsR0FDckIsT0FBTzlELEtBQUt3SCxNQUFLLFdBQ2YsTUFBTW5kLEVBQU9nZCxHQUFNL0Isb0JBQW9CdEYsTUFDdkMsR0FBc0IsaUJBQVg4RCxFQUFYLENBR0EsUUFBcUIvSyxJQUFqQjFPLEVBQUt5WixJQUF5QkEsRUFBT3JDLFdBQVcsTUFBbUIsZ0JBQVhxQyxFQUMxRCxNQUFNLElBQUlVLFVBQVUsb0JBQW9CVixNQUUxQ3paLEVBQUt5WixHQUFROUQsS0FKYixDQUtGLEdBQ0YsRUFPRjZHLEdBQXFCUSxHQUFPLFNBTTVCbEwsR0FBbUJrTCxJQWNuQixNQUtNSSxHQUF5Qiw0QkFPL0IsTUFBTUMsV0FBZWhELEdBRW5CLGVBQVduSSxHQUNULE1BZlcsUUFnQmIsQ0FHQSxNQUFBb0wsR0FFRTNILEtBQUs0RSxTQUFTeGpCLGFBQWEsZUFBZ0I0ZSxLQUFLNEUsU0FBU3ZKLFVBQVVzTSxPQWpCM0MsVUFrQjFCLENBR0Esc0JBQU9sTCxDQUFnQnFILEdBQ3JCLE9BQU85RCxLQUFLd0gsTUFBSyxXQUNmLE1BQU1uZCxFQUFPcWQsR0FBT3BDLG9CQUFvQnRGLE1BQ3pCLFdBQVg4RCxHQUNGelosRUFBS3laLElBRVQsR0FDRixFQU9GdkQsR0FBYWMsR0FBR2hjLFNBakNlLDJCQWlDbUJvaUIsSUFBd0JySSxJQUN4RUEsRUFBTWtELGlCQUNOLE1BQU1zRixFQUFTeEksRUFBTTdTLE9BQU95TyxRQUFReU0sSUFDdkJDLEdBQU9wQyxvQkFBb0JzQyxHQUNuQ0QsUUFBUSxJQU9meEwsR0FBbUJ1TCxJQWNuQixNQUNNRyxHQUFjLFlBQ2RDLEdBQW1CLGFBQWFELEtBQ2hDRSxHQUFrQixZQUFZRixLQUM5QkcsR0FBaUIsV0FBV0gsS0FDNUJJLEdBQW9CLGNBQWNKLEtBQ2xDSyxHQUFrQixZQUFZTCxLQUs5Qk0sR0FBWSxDQUNoQkMsWUFBYSxLQUNiQyxhQUFjLEtBQ2RDLGNBQWUsTUFFWEMsR0FBZ0IsQ0FDcEJILFlBQWEsa0JBQ2JDLGFBQWMsa0JBQ2RDLGNBQWUsbUJBT2pCLE1BQU1FLFdBQWMvRSxHQUNsQixXQUFBVSxDQUFZNWtCLEVBQVN1a0IsR0FDbkJhLFFBQ0EzRSxLQUFLNEUsU0FBV3JsQixFQUNYQSxHQUFZaXBCLEdBQU1DLGdCQUd2QnpJLEtBQUs2RSxRQUFVN0UsS0FBSzZELFdBQVdDLEdBQy9COUQsS0FBSzBJLFFBQVUsRUFDZjFJLEtBQUsySSxzQkFBd0I3SCxRQUFRbGhCLE9BQU9ncEIsY0FDNUM1SSxLQUFLNkksY0FDUCxDQUdBLGtCQUFXbkYsR0FDVCxPQUFPeUUsRUFDVCxDQUNBLHNCQUFXeEUsR0FDVCxPQUFPNEUsRUFDVCxDQUNBLGVBQVdoTSxHQUNULE1BL0NXLE9BZ0RiLENBR0EsT0FBQXdJLEdBQ0V4RSxHQUFhQyxJQUFJUixLQUFLNEUsU0FBVWlELEdBQ2xDLENBR0EsTUFBQWlCLENBQU8xSixHQUNBWSxLQUFLMkksc0JBSU4zSSxLQUFLK0ksd0JBQXdCM0osS0FDL0JZLEtBQUswSSxRQUFVdEosRUFBTTRKLFNBSnJCaEosS0FBSzBJLFFBQVV0SixFQUFNNkosUUFBUSxHQUFHRCxPQU1wQyxDQUNBLElBQUFFLENBQUs5SixHQUNDWSxLQUFLK0ksd0JBQXdCM0osS0FDL0JZLEtBQUswSSxRQUFVdEosRUFBTTRKLFFBQVVoSixLQUFLMEksU0FFdEMxSSxLQUFLbUosZUFDTHRNLEdBQVFtRCxLQUFLNkUsUUFBUXVELFlBQ3ZCLENBQ0EsS0FBQWdCLENBQU1oSyxHQUNKWSxLQUFLMEksUUFBVXRKLEVBQU02SixTQUFXN0osRUFBTTZKLFFBQVF2WSxPQUFTLEVBQUksRUFBSTBPLEVBQU02SixRQUFRLEdBQUdELFFBQVVoSixLQUFLMEksT0FDakcsQ0FDQSxZQUFBUyxHQUNFLE1BQU1FLEVBQVlsbkIsS0FBS29DLElBQUl5YixLQUFLMEksU0FDaEMsR0FBSVcsR0FuRWdCLEdBb0VsQixPQUVGLE1BQU0vYixFQUFZK2IsRUFBWXJKLEtBQUswSSxRQUNuQzFJLEtBQUswSSxRQUFVLEVBQ1ZwYixHQUdMdVAsR0FBUXZQLEVBQVksRUFBSTBTLEtBQUs2RSxRQUFReUQsY0FBZ0J0SSxLQUFLNkUsUUFBUXdELGFBQ3BFLENBQ0EsV0FBQVEsR0FDTTdJLEtBQUsySSx1QkFDUHBJLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVXFELElBQW1CN0ksR0FBU1ksS0FBSzhJLE9BQU8xSixLQUN2RW1CLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVXNELElBQWlCOUksR0FBU1ksS0FBS2tKLEtBQUs5SixLQUNuRVksS0FBSzRFLFNBQVN2SixVQUFVNUUsSUFsRkcsbUJBb0YzQjhKLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVWtELElBQWtCMUksR0FBU1ksS0FBSzhJLE9BQU8xSixLQUN0RW1CLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVW1ELElBQWlCM0ksR0FBU1ksS0FBS29KLE1BQU1oSyxLQUNwRW1CLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVW9ELElBQWdCNUksR0FBU1ksS0FBS2tKLEtBQUs5SixLQUV0RSxDQUNBLHVCQUFBMkosQ0FBd0IzSixHQUN0QixPQUFPWSxLQUFLMkksd0JBM0ZTLFFBMkZpQnZKLEVBQU1rSyxhQTVGckIsVUE0RnlEbEssRUFBTWtLLFlBQ3hGLENBR0Esa0JBQU9iLEdBQ0wsTUFBTyxpQkFBa0JwakIsU0FBU0MsaUJBQW1CN0MsVUFBVThtQixlQUFpQixDQUNsRixFQWVGLE1BRU1DLEdBQWMsZUFDZEMsR0FBaUIsWUFDakJDLEdBQW1CLFlBQ25CQyxHQUFvQixhQUdwQkMsR0FBYSxPQUNiQyxHQUFhLE9BQ2JDLEdBQWlCLE9BQ2pCQyxHQUFrQixRQUNsQkMsR0FBYyxRQUFRUixLQUN0QlMsR0FBYSxPQUFPVCxLQUNwQlUsR0FBa0IsVUFBVVYsS0FDNUJXLEdBQXFCLGFBQWFYLEtBQ2xDWSxHQUFxQixhQUFhWixLQUNsQ2EsR0FBbUIsWUFBWWIsS0FDL0JjLEdBQXdCLE9BQU9kLEtBQWNDLEtBQzdDYyxHQUF5QixRQUFRZixLQUFjQyxLQUMvQ2UsR0FBc0IsV0FDdEJDLEdBQXNCLFNBTXRCQyxHQUFrQixVQUNsQkMsR0FBZ0IsaUJBQ2hCQyxHQUF1QkYsR0FBa0JDLEdBS3pDRSxHQUFtQixDQUN2QixDQUFDbkIsSUFBbUJLLEdBQ3BCLENBQUNKLElBQW9CRyxJQUVqQmdCLEdBQVksQ0FDaEJDLFNBQVUsSUFDVkMsVUFBVSxFQUNWQyxNQUFPLFFBQ1BDLE1BQU0sRUFDTkMsT0FBTyxFQUNQQyxNQUFNLEdBRUZDLEdBQWdCLENBQ3BCTixTQUFVLG1CQUVWQyxTQUFVLFVBQ1ZDLE1BQU8sbUJBQ1BDLEtBQU0sbUJBQ05DLE1BQU8sVUFDUEMsS0FBTSxXQU9SLE1BQU1FLFdBQWlCNUcsR0FDckIsV0FBQVAsQ0FBWTVrQixFQUFTdWtCLEdBQ25CYSxNQUFNcGxCLEVBQVN1a0IsR0FDZjlELEtBQUt1TCxVQUFZLEtBQ2pCdkwsS0FBS3dMLGVBQWlCLEtBQ3RCeEwsS0FBS3lMLFlBQWEsRUFDbEJ6TCxLQUFLMEwsYUFBZSxLQUNwQjFMLEtBQUsyTCxhQUFlLEtBQ3BCM0wsS0FBSzRMLG1CQUFxQi9GLEdBQWVDLFFBckNqQix1QkFxQzhDOUYsS0FBSzRFLFVBQzNFNUUsS0FBSzZMLHFCQUNEN0wsS0FBSzZFLFFBQVFxRyxPQUFTVixJQUN4QnhLLEtBQUs4TCxPQUVULENBR0Esa0JBQVdwSSxHQUNULE9BQU9vSCxFQUNULENBQ0Esc0JBQVduSCxHQUNULE9BQU8wSCxFQUNULENBQ0EsZUFBVzlPLEdBQ1QsTUFuRlcsVUFvRmIsQ0FHQSxJQUFBMVgsR0FDRW1iLEtBQUsrTCxPQUFPbkMsR0FDZCxDQUNBLGVBQUFvQyxJQUlPM21CLFNBQVM0bUIsUUFBVXRSLEdBQVVxRixLQUFLNEUsV0FDckM1RSxLQUFLbmIsTUFFVCxDQUNBLElBQUFzaEIsR0FDRW5HLEtBQUsrTCxPQUFPbEMsR0FDZCxDQUNBLEtBQUFvQixHQUNNakwsS0FBS3lMLFlBQ1ByUixHQUFxQjRGLEtBQUs0RSxVQUU1QjVFLEtBQUtrTSxnQkFDUCxDQUNBLEtBQUFKLEdBQ0U5TCxLQUFLa00saUJBQ0xsTSxLQUFLbU0sa0JBQ0xuTSxLQUFLdUwsVUFBWWEsYUFBWSxJQUFNcE0sS0FBS2dNLG1CQUFtQmhNLEtBQUs2RSxRQUFRa0csU0FDMUUsQ0FDQSxpQkFBQXNCLEdBQ09yTSxLQUFLNkUsUUFBUXFHLE9BR2RsTCxLQUFLeUwsV0FDUGxMLEdBQWFlLElBQUl0QixLQUFLNEUsU0FBVXFGLElBQVksSUFBTWpLLEtBQUs4TCxVQUd6RDlMLEtBQUs4TCxRQUNQLENBQ0EsRUFBQVEsQ0FBRzdULEdBQ0QsTUFBTThULEVBQVF2TSxLQUFLd00sWUFDbkIsR0FBSS9ULEVBQVE4VCxFQUFNN2IsT0FBUyxHQUFLK0gsRUFBUSxFQUN0QyxPQUVGLEdBQUl1SCxLQUFLeUwsV0FFUCxZQURBbEwsR0FBYWUsSUFBSXRCLEtBQUs0RSxTQUFVcUYsSUFBWSxJQUFNakssS0FBS3NNLEdBQUc3VCxLQUc1RCxNQUFNZ1UsRUFBY3pNLEtBQUswTSxjQUFjMU0sS0FBSzJNLGNBQzVDLEdBQUlGLElBQWdCaFUsRUFDbEIsT0FFRixNQUFNdEMsRUFBUXNDLEVBQVFnVSxFQUFjN0MsR0FBYUMsR0FDakQ3SixLQUFLK0wsT0FBTzVWLEVBQU9vVyxFQUFNOVQsR0FDM0IsQ0FDQSxPQUFBc00sR0FDTS9FLEtBQUsyTCxjQUNQM0wsS0FBSzJMLGFBQWE1RyxVQUVwQkosTUFBTUksU0FDUixDQUdBLGlCQUFBZixDQUFrQkYsR0FFaEIsT0FEQUEsRUFBTzhJLGdCQUFrQjlJLEVBQU9pSCxTQUN6QmpILENBQ1QsQ0FDQSxrQkFBQStILEdBQ003TCxLQUFLNkUsUUFBUW1HLFVBQ2Z6SyxHQUFhYyxHQUFHckIsS0FBSzRFLFNBQVVzRixJQUFpQjlLLEdBQVNZLEtBQUs2TSxTQUFTek4sS0FFOUMsVUFBdkJZLEtBQUs2RSxRQUFRb0csUUFDZjFLLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVXVGLElBQW9CLElBQU1uSyxLQUFLaUwsVUFDOUQxSyxHQUFhYyxHQUFHckIsS0FBSzRFLFNBQVV3RixJQUFvQixJQUFNcEssS0FBS3FNLHVCQUU1RHJNLEtBQUs2RSxRQUFRc0csT0FBUzNDLEdBQU1DLGVBQzlCekksS0FBSzhNLHlCQUVULENBQ0EsdUJBQUFBLEdBQ0UsSUFBSyxNQUFNQyxLQUFPbEgsR0FBZTFULEtBcklYLHFCQXFJbUM2TixLQUFLNEUsVUFDNURyRSxHQUFhYyxHQUFHMEwsRUFBSzFDLElBQWtCakwsR0FBU0EsRUFBTWtELG1CQUV4RCxNQW1CTTBLLEVBQWMsQ0FDbEIzRSxhQUFjLElBQU1ySSxLQUFLK0wsT0FBTy9MLEtBQUtpTixrQkFBa0JuRCxLQUN2RHhCLGNBQWUsSUFBTXRJLEtBQUsrTCxPQUFPL0wsS0FBS2lOLGtCQUFrQmxELEtBQ3hEM0IsWUF0QmtCLEtBQ1MsVUFBdkJwSSxLQUFLNkUsUUFBUW9HLFFBWWpCakwsS0FBS2lMLFFBQ0RqTCxLQUFLMEwsY0FDUHdCLGFBQWFsTixLQUFLMEwsY0FFcEIxTCxLQUFLMEwsYUFBZTdOLFlBQVcsSUFBTW1DLEtBQUtxTSxxQkFqTGpCLElBaUwrRHJNLEtBQUs2RSxRQUFRa0csVUFBUyxHQU9oSC9LLEtBQUsyTCxhQUFlLElBQUluRCxHQUFNeEksS0FBSzRFLFNBQVVvSSxFQUMvQyxDQUNBLFFBQUFILENBQVN6TixHQUNQLEdBQUksa0JBQWtCL2IsS0FBSytiLEVBQU03UyxPQUFPMGEsU0FDdEMsT0FFRixNQUFNM1osRUFBWXVkLEdBQWlCekwsRUFBTXRpQixLQUNyQ3dRLElBQ0Y4UixFQUFNa0QsaUJBQ050QyxLQUFLK0wsT0FBTy9MLEtBQUtpTixrQkFBa0IzZixJQUV2QyxDQUNBLGFBQUFvZixDQUFjbnRCLEdBQ1osT0FBT3lnQixLQUFLd00sWUFBWXJuQixRQUFRNUYsRUFDbEMsQ0FDQSwwQkFBQTR0QixDQUEyQjFVLEdBQ3pCLElBQUt1SCxLQUFLNEwsbUJBQ1IsT0FFRixNQUFNd0IsRUFBa0J2SCxHQUFlQyxRQUFRNEUsR0FBaUIxSyxLQUFLNEwsb0JBQ3JFd0IsRUFBZ0IvUixVQUFVMUIsT0FBTzhRLElBQ2pDMkMsRUFBZ0Jqc0IsZ0JBQWdCLGdCQUNoQyxNQUFNa3NCLEVBQXFCeEgsR0FBZUMsUUFBUSxzQkFBc0JyTixNQUFXdUgsS0FBSzRMLG9CQUNwRnlCLElBQ0ZBLEVBQW1CaFMsVUFBVTVFLElBQUlnVSxJQUNqQzRDLEVBQW1CanNCLGFBQWEsZUFBZ0IsUUFFcEQsQ0FDQSxlQUFBK3FCLEdBQ0UsTUFBTTVzQixFQUFVeWdCLEtBQUt3TCxnQkFBa0J4TCxLQUFLMk0sYUFDNUMsSUFBS3B0QixFQUNILE9BRUYsTUFBTSt0QixFQUFrQi9QLE9BQU9nUSxTQUFTaHVCLEVBQVFpYyxhQUFhLG9CQUFxQixJQUNsRndFLEtBQUs2RSxRQUFRa0csU0FBV3VDLEdBQW1CdE4sS0FBSzZFLFFBQVErSCxlQUMxRCxDQUNBLE1BQUFiLENBQU81VixFQUFPNVcsRUFBVSxNQUN0QixHQUFJeWdCLEtBQUt5TCxXQUNQLE9BRUYsTUFBTTFOLEVBQWdCaUMsS0FBSzJNLGFBQ3JCYSxFQUFTclgsSUFBVXlULEdBQ25CNkQsRUFBY2x1QixHQUFXdWUsR0FBcUJrQyxLQUFLd00sWUFBYXpPLEVBQWV5UCxFQUFReE4sS0FBSzZFLFFBQVF1RyxNQUMxRyxHQUFJcUMsSUFBZ0IxUCxFQUNsQixPQUVGLE1BQU0yUCxFQUFtQjFOLEtBQUswTSxjQUFjZSxHQUN0Q0UsRUFBZW5JLEdBQ1pqRixHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVWSxFQUFXLENBQ3BEMUYsY0FBZTJOLEVBQ2ZuZ0IsVUFBVzBTLEtBQUs0TixrQkFBa0J6WCxHQUNsQ3VELEtBQU1zRyxLQUFLME0sY0FBYzNPLEdBQ3pCdU8sR0FBSW9CLElBSVIsR0FEbUJDLEVBQWEzRCxJQUNqQmhJLGlCQUNiLE9BRUYsSUFBS2pFLElBQWtCMFAsRUFHckIsT0FFRixNQUFNSSxFQUFZL00sUUFBUWQsS0FBS3VMLFdBQy9CdkwsS0FBS2lMLFFBQ0xqTCxLQUFLeUwsWUFBYSxFQUNsQnpMLEtBQUttTiwyQkFBMkJPLEdBQ2hDMU4sS0FBS3dMLGVBQWlCaUMsRUFDdEIsTUFBTUssRUFBdUJOLEVBM09SLHNCQURGLG9CQTZPYk8sRUFBaUJQLEVBM09ILHFCQUNBLHFCQTJPcEJDLEVBQVlwUyxVQUFVNUUsSUFBSXNYLEdBQzFCbFMsR0FBTzRSLEdBQ1AxUCxFQUFjMUMsVUFBVTVFLElBQUlxWCxHQUM1QkwsRUFBWXBTLFVBQVU1RSxJQUFJcVgsR0FRMUI5TixLQUFLbUYsZ0JBUG9CLEtBQ3ZCc0ksRUFBWXBTLFVBQVUxQixPQUFPbVUsRUFBc0JDLEdBQ25ETixFQUFZcFMsVUFBVTVFLElBQUlnVSxJQUMxQjFNLEVBQWMxQyxVQUFVMUIsT0FBTzhRLEdBQXFCc0QsRUFBZ0JELEdBQ3BFOU4sS0FBS3lMLFlBQWEsRUFDbEJrQyxFQUFhMUQsR0FBVyxHQUVZbE0sRUFBZWlDLEtBQUtnTyxlQUN0REgsR0FDRjdOLEtBQUs4TCxPQUVULENBQ0EsV0FBQWtDLEdBQ0UsT0FBT2hPLEtBQUs0RSxTQUFTdkosVUFBVTdXLFNBaFFWLFFBaVF2QixDQUNBLFVBQUFtb0IsR0FDRSxPQUFPOUcsR0FBZUMsUUFBUThFLEdBQXNCNUssS0FBSzRFLFNBQzNELENBQ0EsU0FBQTRILEdBQ0UsT0FBTzNHLEdBQWUxVCxLQUFLd1ksR0FBZTNLLEtBQUs0RSxTQUNqRCxDQUNBLGNBQUFzSCxHQUNNbE0sS0FBS3VMLFlBQ1AwQyxjQUFjak8sS0FBS3VMLFdBQ25CdkwsS0FBS3VMLFVBQVksS0FFckIsQ0FDQSxpQkFBQTBCLENBQWtCM2YsR0FDaEIsT0FBSTJPLEtBQ0szTyxJQUFjd2MsR0FBaUJELEdBQWFELEdBRTlDdGMsSUFBY3djLEdBQWlCRixHQUFhQyxFQUNyRCxDQUNBLGlCQUFBK0QsQ0FBa0J6WCxHQUNoQixPQUFJOEYsS0FDSzlGLElBQVUwVCxHQUFhQyxHQUFpQkMsR0FFMUM1VCxJQUFVMFQsR0FBYUUsR0FBa0JELEVBQ2xELENBR0Esc0JBQU9yTixDQUFnQnFILEdBQ3JCLE9BQU85RCxLQUFLd0gsTUFBSyxXQUNmLE1BQU1uZCxFQUFPaWhCLEdBQVNoRyxvQkFBb0J0RixLQUFNOEQsR0FDaEQsR0FBc0IsaUJBQVhBLEdBSVgsR0FBc0IsaUJBQVhBLEVBQXFCLENBQzlCLFFBQXFCL0ssSUFBakIxTyxFQUFLeVosSUFBeUJBLEVBQU9yQyxXQUFXLE1BQW1CLGdCQUFYcUMsRUFDMUQsTUFBTSxJQUFJVSxVQUFVLG9CQUFvQlYsTUFFMUN6WixFQUFLeVosSUFDUCxPQVJFelosRUFBS2lpQixHQUFHeEksRUFTWixHQUNGLEVBT0Z2RCxHQUFhYyxHQUFHaGMsU0FBVWtsQixHQXZTRSx1Q0F1UzJDLFNBQVVuTCxHQUMvRSxNQUFNN1MsRUFBU3NaLEdBQWVjLHVCQUF1QjNHLE1BQ3JELElBQUt6VCxJQUFXQSxFQUFPOE8sVUFBVTdXLFNBQVNnbUIsSUFDeEMsT0FFRnBMLEVBQU1rRCxpQkFDTixNQUFNNEwsRUFBVzVDLEdBQVNoRyxvQkFBb0IvWSxHQUN4QzRoQixFQUFhbk8sS0FBS3hFLGFBQWEsb0JBQ3JDLE9BQUkyUyxHQUNGRCxFQUFTNUIsR0FBRzZCLFFBQ1pELEVBQVM3QixxQkFHeUMsU0FBaERySixHQUFZUSxpQkFBaUJ4RCxLQUFNLFVBQ3JDa08sRUFBU3JwQixZQUNUcXBCLEVBQVM3QixzQkFHWDZCLEVBQVMvSCxZQUNUK0gsRUFBUzdCLG9CQUNYLElBQ0E5TCxHQUFhYyxHQUFHemhCLE9BQVEwcUIsSUFBdUIsS0FDN0MsTUFBTThELEVBQVl2SSxHQUFlMVQsS0E1VFIsNkJBNlR6QixJQUFLLE1BQU0rYixLQUFZRSxFQUNyQjlDLEdBQVNoRyxvQkFBb0I0SSxFQUMvQixJQU9GL1IsR0FBbUJtUCxJQWNuQixNQUVNK0MsR0FBYyxlQUVkQyxHQUFlLE9BQU9ELEtBQ3RCRSxHQUFnQixRQUFRRixLQUN4QkcsR0FBZSxPQUFPSCxLQUN0QkksR0FBaUIsU0FBU0osS0FDMUJLLEdBQXlCLFFBQVFMLGNBQ2pDTSxHQUFvQixPQUNwQkMsR0FBc0IsV0FDdEJDLEdBQXdCLGFBRXhCQyxHQUE2QixXQUFXRixPQUF3QkEsS0FLaEVHLEdBQXlCLDhCQUN6QkMsR0FBWSxDQUNoQnZxQixPQUFRLEtBQ1JrakIsUUFBUSxHQUVKc0gsR0FBZ0IsQ0FDcEJ4cUIsT0FBUSxpQkFDUmtqQixPQUFRLFdBT1YsTUFBTXVILFdBQWlCeEssR0FDckIsV0FBQVAsQ0FBWTVrQixFQUFTdWtCLEdBQ25CYSxNQUFNcGxCLEVBQVN1a0IsR0FDZjlELEtBQUttUCxrQkFBbUIsRUFDeEJuUCxLQUFLb1AsY0FBZ0IsR0FDckIsTUFBTUMsRUFBYXhKLEdBQWUxVCxLQUFLNGMsSUFDdkMsSUFBSyxNQUFNTyxLQUFRRCxFQUFZLENBQzdCLE1BQU10VixFQUFXOEwsR0FBZWEsdUJBQXVCNEksR0FDakRDLEVBQWdCMUosR0FBZTFULEtBQUs0SCxHQUFVNVQsUUFBT3FwQixHQUFnQkEsSUFBaUJ4UCxLQUFLNEUsV0FDaEYsT0FBYjdLLEdBQXFCd1YsRUFBYzdlLFFBQ3JDc1AsS0FBS29QLGNBQWN4ZCxLQUFLMGQsRUFFNUIsQ0FDQXRQLEtBQUt5UCxzQkFDQXpQLEtBQUs2RSxRQUFRcGdCLFFBQ2hCdWIsS0FBSzBQLDBCQUEwQjFQLEtBQUtvUCxjQUFlcFAsS0FBSzJQLFlBRXREM1AsS0FBSzZFLFFBQVE4QyxRQUNmM0gsS0FBSzJILFFBRVQsQ0FHQSxrQkFBV2pFLEdBQ1QsT0FBT3NMLEVBQ1QsQ0FDQSxzQkFBV3JMLEdBQ1QsT0FBT3NMLEVBQ1QsQ0FDQSxlQUFXMVMsR0FDVCxNQTlEVyxVQStEYixDQUdBLE1BQUFvTCxHQUNNM0gsS0FBSzJQLFdBQ1AzUCxLQUFLNFAsT0FFTDVQLEtBQUs2UCxNQUVULENBQ0EsSUFBQUEsR0FDRSxHQUFJN1AsS0FBS21QLGtCQUFvQm5QLEtBQUsyUCxXQUNoQyxPQUVGLElBQUlHLEVBQWlCLEdBUXJCLEdBTEk5UCxLQUFLNkUsUUFBUXBnQixTQUNmcXJCLEVBQWlCOVAsS0FBSytQLHVCQWhFSCx3Q0FnRTRDNXBCLFFBQU81RyxHQUFXQSxJQUFZeWdCLEtBQUs0RSxXQUFVOWhCLEtBQUl2RCxHQUFXMnZCLEdBQVM1SixvQkFBb0IvbEIsRUFBUyxDQUMvSm9vQixRQUFRLE9BR1JtSSxFQUFlcGYsUUFBVW9mLEVBQWUsR0FBR1gsaUJBQzdDLE9BR0YsR0FEbUI1TyxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVMEosSUFDeEN0TSxpQkFDYixPQUVGLElBQUssTUFBTWdPLEtBQWtCRixFQUMzQkUsRUFBZUosT0FFakIsTUFBTUssRUFBWWpRLEtBQUtrUSxnQkFDdkJsUSxLQUFLNEUsU0FBU3ZKLFVBQVUxQixPQUFPaVYsSUFDL0I1TyxLQUFLNEUsU0FBU3ZKLFVBQVU1RSxJQUFJb1ksSUFDNUI3TyxLQUFLNEUsU0FBUzdqQixNQUFNa3ZCLEdBQWEsRUFDakNqUSxLQUFLMFAsMEJBQTBCMVAsS0FBS29QLGVBQWUsR0FDbkRwUCxLQUFLbVAsa0JBQW1CLEVBQ3hCLE1BUU1nQixFQUFhLFNBRFVGLEVBQVUsR0FBR3hMLGNBQWdCd0wsRUFBVTdkLE1BQU0sS0FFMUU0TixLQUFLbUYsZ0JBVFksS0FDZm5GLEtBQUttUCxrQkFBbUIsRUFDeEJuUCxLQUFLNEUsU0FBU3ZKLFVBQVUxQixPQUFPa1YsSUFDL0I3TyxLQUFLNEUsU0FBU3ZKLFVBQVU1RSxJQUFJbVksR0FBcUJELElBQ2pEM08sS0FBSzRFLFNBQVM3akIsTUFBTWt2QixHQUFhLEdBQ2pDMVAsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVTJKLEdBQWMsR0FJdEJ2TyxLQUFLNEUsVUFBVSxHQUM3QzVFLEtBQUs0RSxTQUFTN2pCLE1BQU1rdkIsR0FBYSxHQUFHalEsS0FBSzRFLFNBQVN1TCxNQUNwRCxDQUNBLElBQUFQLEdBQ0UsR0FBSTVQLEtBQUttUCxtQkFBcUJuUCxLQUFLMlAsV0FDakMsT0FHRixHQURtQnBQLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVU0SixJQUN4Q3hNLGlCQUNiLE9BRUYsTUFBTWlPLEVBQVlqUSxLQUFLa1EsZ0JBQ3ZCbFEsS0FBSzRFLFNBQVM3akIsTUFBTWt2QixHQUFhLEdBQUdqUSxLQUFLNEUsU0FBU3RoQix3QkFBd0Iyc0IsT0FDMUVwVSxHQUFPbUUsS0FBSzRFLFVBQ1o1RSxLQUFLNEUsU0FBU3ZKLFVBQVU1RSxJQUFJb1ksSUFDNUI3TyxLQUFLNEUsU0FBU3ZKLFVBQVUxQixPQUFPaVYsR0FBcUJELElBQ3BELElBQUssTUFBTS9NLEtBQVc1QixLQUFLb1AsY0FBZSxDQUN4QyxNQUFNN3ZCLEVBQVVzbUIsR0FBZWMsdUJBQXVCL0UsR0FDbERyaUIsSUFBWXlnQixLQUFLMlAsU0FBU3B3QixJQUM1QnlnQixLQUFLMFAsMEJBQTBCLENBQUM5TixJQUFVLEVBRTlDLENBQ0E1QixLQUFLbVAsa0JBQW1CLEVBT3hCblAsS0FBSzRFLFNBQVM3akIsTUFBTWt2QixHQUFhLEdBQ2pDalEsS0FBS21GLGdCQVBZLEtBQ2ZuRixLQUFLbVAsa0JBQW1CLEVBQ3hCblAsS0FBSzRFLFNBQVN2SixVQUFVMUIsT0FBT2tWLElBQy9CN08sS0FBSzRFLFNBQVN2SixVQUFVNUUsSUFBSW1ZLElBQzVCck8sR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVTZKLEdBQWUsR0FHdkJ6TyxLQUFLNEUsVUFBVSxFQUMvQyxDQUNBLFFBQUErSyxDQUFTcHdCLEVBQVV5Z0IsS0FBSzRFLFVBQ3RCLE9BQU9ybEIsRUFBUThiLFVBQVU3VyxTQUFTbXFCLEdBQ3BDLENBR0EsaUJBQUEzSyxDQUFrQkYsR0FHaEIsT0FGQUEsRUFBTzZELE9BQVM3RyxRQUFRZ0QsRUFBTzZELFFBQy9CN0QsRUFBT3JmLE9BQVNpVyxHQUFXb0osRUFBT3JmLFFBQzNCcWYsQ0FDVCxDQUNBLGFBQUFvTSxHQUNFLE9BQU9sUSxLQUFLNEUsU0FBU3ZKLFVBQVU3VyxTQTNJTCx1QkFDaEIsUUFDQyxRQTBJYixDQUNBLG1CQUFBaXJCLEdBQ0UsSUFBS3pQLEtBQUs2RSxRQUFRcGdCLE9BQ2hCLE9BRUYsTUFBTXNoQixFQUFXL0YsS0FBSytQLHVCQUF1QmhCLElBQzdDLElBQUssTUFBTXh2QixLQUFXd21CLEVBQVUsQ0FDOUIsTUFBTXFLLEVBQVd2SyxHQUFlYyx1QkFBdUJwbkIsR0FDbkQ2d0IsR0FDRnBRLEtBQUswUCwwQkFBMEIsQ0FBQ253QixHQUFVeWdCLEtBQUsyUCxTQUFTUyxHQUU1RCxDQUNGLENBQ0Esc0JBQUFMLENBQXVCaFcsR0FDckIsTUFBTWdNLEVBQVdGLEdBQWUxVCxLQUFLMmMsR0FBNEI5TyxLQUFLNkUsUUFBUXBnQixRQUU5RSxPQUFPb2hCLEdBQWUxVCxLQUFLNEgsRUFBVWlHLEtBQUs2RSxRQUFRcGdCLFFBQVEwQixRQUFPNUcsSUFBWXdtQixFQUFTM0UsU0FBUzdoQixJQUNqRyxDQUNBLHlCQUFBbXdCLENBQTBCVyxFQUFjQyxHQUN0QyxHQUFLRCxFQUFhM2YsT0FHbEIsSUFBSyxNQUFNblIsS0FBVzh3QixFQUNwQjl3QixFQUFROGIsVUFBVXNNLE9BcktLLGFBcUt5QjJJLEdBQ2hEL3dCLEVBQVE2QixhQUFhLGdCQUFpQmt2QixFQUUxQyxDQUdBLHNCQUFPN1QsQ0FBZ0JxSCxHQUNyQixNQUFNZSxFQUFVLENBQUMsRUFJakIsTUFIc0IsaUJBQVhmLEdBQXVCLFlBQVl6Z0IsS0FBS3lnQixLQUNqRGUsRUFBUThDLFFBQVMsR0FFWjNILEtBQUt3SCxNQUFLLFdBQ2YsTUFBTW5kLEVBQU82a0IsR0FBUzVKLG9CQUFvQnRGLEtBQU02RSxHQUNoRCxHQUFzQixpQkFBWGYsRUFBcUIsQ0FDOUIsUUFBNEIsSUFBakJ6WixFQUFLeVosR0FDZCxNQUFNLElBQUlVLFVBQVUsb0JBQW9CVixNQUUxQ3paLEVBQUt5WixJQUNQLENBQ0YsR0FDRixFQU9GdkQsR0FBYWMsR0FBR2hjLFNBQVVxcEIsR0FBd0JLLElBQXdCLFNBQVUzUCxJQUVyRCxNQUF6QkEsRUFBTTdTLE9BQU8wYSxTQUFtQjdILEVBQU1XLGdCQUFtRCxNQUFqQ1gsRUFBTVcsZUFBZWtILFVBQy9FN0gsRUFBTWtELGlCQUVSLElBQUssTUFBTS9pQixLQUFXc21CLEdBQWVlLGdDQUFnQzVHLE1BQ25Fa1AsR0FBUzVKLG9CQUFvQi9sQixFQUFTLENBQ3BDb29CLFFBQVEsSUFDUEEsUUFFUCxJQU1BeEwsR0FBbUIrUyxJQWNuQixNQUFNcUIsR0FBUyxXQUVUQyxHQUFjLGVBQ2RDLEdBQWlCLFlBR2pCQyxHQUFpQixVQUNqQkMsR0FBbUIsWUFHbkJDLEdBQWUsT0FBT0osS0FDdEJLLEdBQWlCLFNBQVNMLEtBQzFCTSxHQUFlLE9BQU9OLEtBQ3RCTyxHQUFnQixRQUFRUCxLQUN4QlEsR0FBeUIsUUFBUVIsS0FBY0MsS0FDL0NRLEdBQXlCLFVBQVVULEtBQWNDLEtBQ2pEUyxHQUF1QixRQUFRVixLQUFjQyxLQUM3Q1UsR0FBb0IsT0FNcEJDLEdBQXlCLDREQUN6QkMsR0FBNkIsR0FBR0QsTUFBMEJELEtBQzFERyxHQUFnQixpQkFJaEJDLEdBQWdCdFYsS0FBVSxVQUFZLFlBQ3RDdVYsR0FBbUJ2VixLQUFVLFlBQWMsVUFDM0N3VixHQUFtQnhWLEtBQVUsYUFBZSxlQUM1Q3lWLEdBQXNCelYsS0FBVSxlQUFpQixhQUNqRDBWLEdBQWtCMVYsS0FBVSxhQUFlLGNBQzNDMlYsR0FBaUIzVixLQUFVLGNBQWdCLGFBRzNDNFYsR0FBWSxDQUNoQkMsV0FBVyxFQUNYN2pCLFNBQVUsa0JBQ1Y4akIsUUFBUyxVQUNUL3BCLE9BQVEsQ0FBQyxFQUFHLEdBQ1pncUIsYUFBYyxLQUNkMXpCLFVBQVcsVUFFUDJ6QixHQUFnQixDQUNwQkgsVUFBVyxtQkFDWDdqQixTQUFVLG1CQUNWOGpCLFFBQVMsU0FDVC9wQixPQUFRLDBCQUNSZ3FCLGFBQWMseUJBQ2QxekIsVUFBVywyQkFPYixNQUFNNHpCLFdBQWlCeE4sR0FDckIsV0FBQVAsQ0FBWTVrQixFQUFTdWtCLEdBQ25CYSxNQUFNcGxCLEVBQVN1a0IsR0FDZjlELEtBQUttUyxRQUFVLEtBQ2ZuUyxLQUFLb1MsUUFBVXBTLEtBQUs0RSxTQUFTN2YsV0FFN0JpYixLQUFLcVMsTUFBUXhNLEdBQWVoaEIsS0FBS21iLEtBQUs0RSxTQUFVME0sSUFBZSxJQUFNekwsR0FBZU0sS0FBS25HLEtBQUs0RSxTQUFVME0sSUFBZSxJQUFNekwsR0FBZUMsUUFBUXdMLEdBQWV0UixLQUFLb1MsU0FDeEtwUyxLQUFLc1MsVUFBWXRTLEtBQUt1UyxlQUN4QixDQUdBLGtCQUFXN08sR0FDVCxPQUFPbU8sRUFDVCxDQUNBLHNCQUFXbE8sR0FDVCxPQUFPc08sRUFDVCxDQUNBLGVBQVcxVixHQUNULE9BQU9nVSxFQUNULENBR0EsTUFBQTVJLEdBQ0UsT0FBTzNILEtBQUsyUCxXQUFhM1AsS0FBSzRQLE9BQVM1UCxLQUFLNlAsTUFDOUMsQ0FDQSxJQUFBQSxHQUNFLEdBQUkzVSxHQUFXOEUsS0FBSzRFLFdBQWE1RSxLQUFLMlAsV0FDcEMsT0FFRixNQUFNN1AsRUFBZ0IsQ0FDcEJBLGNBQWVFLEtBQUs0RSxVQUd0QixJQURrQnJFLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVVrTSxHQUFjaFIsR0FDdERrQyxpQkFBZCxDQVNBLEdBTkFoQyxLQUFLd1MsZ0JBTUQsaUJBQWtCbnRCLFNBQVNDLGtCQUFvQjBhLEtBQUtvUyxRQUFRcFgsUUF6RXhDLGVBMEV0QixJQUFLLE1BQU16YixJQUFXLEdBQUdaLFVBQVUwRyxTQUFTNkcsS0FBSzZaLFVBQy9DeEYsR0FBYWMsR0FBRzloQixFQUFTLFlBQWFxYyxJQUcxQ29FLEtBQUs0RSxTQUFTNk4sUUFDZHpTLEtBQUs0RSxTQUFTeGpCLGFBQWEsaUJBQWlCLEdBQzVDNGUsS0FBS3FTLE1BQU1oWCxVQUFVNUUsSUFBSTBhLElBQ3pCblIsS0FBSzRFLFNBQVN2SixVQUFVNUUsSUFBSTBhLElBQzVCNVEsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVW1NLEdBQWVqUixFQWhCbkQsQ0FpQkYsQ0FDQSxJQUFBOFAsR0FDRSxHQUFJMVUsR0FBVzhFLEtBQUs0RSxZQUFjNUUsS0FBSzJQLFdBQ3JDLE9BRUYsTUFBTTdQLEVBQWdCLENBQ3BCQSxjQUFlRSxLQUFLNEUsVUFFdEI1RSxLQUFLMFMsY0FBYzVTLEVBQ3JCLENBQ0EsT0FBQWlGLEdBQ00vRSxLQUFLbVMsU0FDUG5TLEtBQUttUyxRQUFRblosVUFFZjJMLE1BQU1JLFNBQ1IsQ0FDQSxNQUFBaGEsR0FDRWlWLEtBQUtzUyxVQUFZdFMsS0FBS3VTLGdCQUNsQnZTLEtBQUttUyxTQUNQblMsS0FBS21TLFFBQVFwbkIsUUFFakIsQ0FHQSxhQUFBMm5CLENBQWM1UyxHQUVaLElBRGtCUyxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVZ00sR0FBYzlRLEdBQ3REa0MsaUJBQWQsQ0FNQSxHQUFJLGlCQUFrQjNjLFNBQVNDLGdCQUM3QixJQUFLLE1BQU0vRixJQUFXLEdBQUdaLFVBQVUwRyxTQUFTNkcsS0FBSzZaLFVBQy9DeEYsR0FBYUMsSUFBSWpoQixFQUFTLFlBQWFxYyxJQUd2Q29FLEtBQUttUyxTQUNQblMsS0FBS21TLFFBQVFuWixVQUVmZ0gsS0FBS3FTLE1BQU1oWCxVQUFVMUIsT0FBT3dYLElBQzVCblIsS0FBSzRFLFNBQVN2SixVQUFVMUIsT0FBT3dYLElBQy9CblIsS0FBSzRFLFNBQVN4akIsYUFBYSxnQkFBaUIsU0FDNUM0aEIsR0FBWUUsb0JBQW9CbEQsS0FBS3FTLE1BQU8sVUFDNUM5UixHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVaU0sR0FBZ0IvUSxFQWhCcEQsQ0FpQkYsQ0FDQSxVQUFBK0QsQ0FBV0MsR0FFVCxHQUFnQyxpQkFEaENBLEVBQVNhLE1BQU1kLFdBQVdDLElBQ1J4bEIsWUFBMkIsR0FBVXdsQixFQUFPeGxCLFlBQWdFLG1CQUEzQ3dsQixFQUFPeGxCLFVBQVVnRixzQkFFbEcsTUFBTSxJQUFJa2hCLFVBQVUsR0FBRytMLEdBQU85TCwrR0FFaEMsT0FBT1gsQ0FDVCxDQUNBLGFBQUEwTyxHQUNFLFFBQXNCLElBQVgsRUFDVCxNQUFNLElBQUloTyxVQUFVLGdFQUV0QixJQUFJbU8sRUFBbUIzUyxLQUFLNEUsU0FDRyxXQUEzQjVFLEtBQUs2RSxRQUFRdm1CLFVBQ2ZxMEIsRUFBbUIzUyxLQUFLb1MsUUFDZixHQUFVcFMsS0FBSzZFLFFBQVF2bUIsV0FDaENxMEIsRUFBbUJqWSxHQUFXc0YsS0FBSzZFLFFBQVF2bUIsV0FDQSxpQkFBM0IwaEIsS0FBSzZFLFFBQVF2bUIsWUFDN0JxMEIsRUFBbUIzUyxLQUFLNkUsUUFBUXZtQixXQUVsQyxNQUFNMHpCLEVBQWVoUyxLQUFLNFMsbUJBQzFCNVMsS0FBS21TLFFBQVUsR0FBb0JRLEVBQWtCM1MsS0FBS3FTLE1BQU9MLEVBQ25FLENBQ0EsUUFBQXJDLEdBQ0UsT0FBTzNQLEtBQUtxUyxNQUFNaFgsVUFBVTdXLFNBQVMyc0IsR0FDdkMsQ0FDQSxhQUFBMEIsR0FDRSxNQUFNQyxFQUFpQjlTLEtBQUtvUyxRQUM1QixHQUFJVSxFQUFlelgsVUFBVTdXLFNBcktOLFdBc0tyQixPQUFPbXRCLEdBRVQsR0FBSW1CLEVBQWV6WCxVQUFVN1csU0F2S0osYUF3S3ZCLE9BQU9vdEIsR0FFVCxHQUFJa0IsRUFBZXpYLFVBQVU3VyxTQXpLQSxpQkEwSzNCLE1BNUpzQixNQThKeEIsR0FBSXN1QixFQUFlelgsVUFBVTdXLFNBM0tFLG1CQTRLN0IsTUE5SnlCLFNBa0szQixNQUFNdXVCLEVBQWtGLFFBQTFFOXRCLGlCQUFpQithLEtBQUtxUyxPQUFPdlgsaUJBQWlCLGlCQUFpQjZLLE9BQzdFLE9BQUltTixFQUFlelgsVUFBVTdXLFNBckxQLFVBc0xidXVCLEVBQVF2QixHQUFtQkQsR0FFN0J3QixFQUFRckIsR0FBc0JELEVBQ3ZDLENBQ0EsYUFBQWMsR0FDRSxPQUFrRCxPQUEzQ3ZTLEtBQUs0RSxTQUFTNUosUUFuTEQsVUFvTHRCLENBQ0EsVUFBQWdZLEdBQ0UsTUFBTSxPQUNKaHJCLEdBQ0VnWSxLQUFLNkUsUUFDVCxNQUFzQixpQkFBWDdjLEVBQ0ZBLEVBQU85RixNQUFNLEtBQUtZLEtBQUluRixHQUFTNGYsT0FBT2dRLFNBQVM1dkIsRUFBTyxNQUV6QyxtQkFBWHFLLEVBQ0ZpckIsR0FBY2pyQixFQUFPaXJCLEVBQVlqVCxLQUFLNEUsVUFFeEM1YyxDQUNULENBQ0EsZ0JBQUE0cUIsR0FDRSxNQUFNTSxFQUF3QixDQUM1QngwQixVQUFXc2hCLEtBQUs2UyxnQkFDaEJ6YyxVQUFXLENBQUMsQ0FDVjlWLEtBQU0sa0JBQ05tQixRQUFTLENBQ1B3TSxTQUFVK1IsS0FBSzZFLFFBQVE1VyxXQUV4QixDQUNEM04sS0FBTSxTQUNObUIsUUFBUyxDQUNQdUcsT0FBUWdZLEtBQUtnVCxpQkFhbkIsT0FQSWhULEtBQUtzUyxXQUFzQyxXQUF6QnRTLEtBQUs2RSxRQUFRa04sV0FDakMvTyxHQUFZQyxpQkFBaUJqRCxLQUFLcVMsTUFBTyxTQUFVLFVBQ25EYSxFQUFzQjljLFVBQVksQ0FBQyxDQUNqQzlWLEtBQU0sY0FDTkMsU0FBUyxLQUdOLElBQ0YyeUIsS0FDQXJXLEdBQVFtRCxLQUFLNkUsUUFBUW1OLGFBQWMsQ0FBQ2tCLElBRTNDLENBQ0EsZUFBQUMsRUFBZ0IsSUFDZHIyQixFQUFHLE9BQ0h5UCxJQUVBLE1BQU1nZ0IsRUFBUTFHLEdBQWUxVCxLQWhPRiw4REFnTytCNk4sS0FBS3FTLE9BQU9sc0IsUUFBTzVHLEdBQVdvYixHQUFVcGIsS0FDN0ZndEIsRUFBTTdiLFFBTVhvTixHQUFxQnlPLEVBQU9oZ0IsRUFBUXpQLElBQVE2ekIsSUFBbUJwRSxFQUFNbkwsU0FBUzdVLElBQVNrbUIsT0FDekYsQ0FHQSxzQkFBT2hXLENBQWdCcUgsR0FDckIsT0FBTzlELEtBQUt3SCxNQUFLLFdBQ2YsTUFBTW5kLEVBQU82bkIsR0FBUzVNLG9CQUFvQnRGLEtBQU04RCxHQUNoRCxHQUFzQixpQkFBWEEsRUFBWCxDQUdBLFFBQTRCLElBQWpCelosRUFBS3laLEdBQ2QsTUFBTSxJQUFJVSxVQUFVLG9CQUFvQlYsTUFFMUN6WixFQUFLeVosSUFKTCxDQUtGLEdBQ0YsQ0FDQSxpQkFBT3NQLENBQVdoVSxHQUNoQixHQTVRdUIsSUE0UW5CQSxFQUFNd0ksUUFBZ0QsVUFBZnhJLEVBQU1xQixNQS9RbkMsUUErUXVEckIsRUFBTXRpQixJQUN6RSxPQUVGLE1BQU11MkIsRUFBY3hOLEdBQWUxVCxLQUFLa2YsSUFDeEMsSUFBSyxNQUFNMUosS0FBVTBMLEVBQWEsQ0FDaEMsTUFBTUMsRUFBVXBCLEdBQVM3TSxZQUFZc0MsR0FDckMsSUFBSzJMLElBQXlDLElBQTlCQSxFQUFRek8sUUFBUWlOLFVBQzlCLFNBRUYsTUFBTXlCLEVBQWVuVSxFQUFNbVUsZUFDckJDLEVBQWVELEVBQWFuUyxTQUFTa1MsRUFBUWpCLE9BQ25ELEdBQUlrQixFQUFhblMsU0FBU2tTLEVBQVExTyxXQUEyQyxXQUE5QjBPLEVBQVF6TyxRQUFRaU4sWUFBMkIwQixHQUE4QyxZQUE5QkYsRUFBUXpPLFFBQVFpTixXQUEyQjBCLEVBQ25KLFNBSUYsR0FBSUYsRUFBUWpCLE1BQU03dEIsU0FBUzRhLEVBQU03UyxVQUEyQixVQUFmNlMsRUFBTXFCLE1BL1J2QyxRQStSMkRyQixFQUFNdGlCLEtBQXFCLHFDQUFxQ3VHLEtBQUsrYixFQUFNN1MsT0FBTzBhLFVBQ3ZKLFNBRUYsTUFBTW5ILEVBQWdCLENBQ3BCQSxjQUFld1QsRUFBUTFPLFVBRU4sVUFBZnhGLEVBQU1xQixPQUNSWCxFQUFja0gsV0FBYTVILEdBRTdCa1UsRUFBUVosY0FBYzVTLEVBQ3hCLENBQ0YsQ0FDQSw0QkFBTzJULENBQXNCclUsR0FJM0IsTUFBTXNVLEVBQVUsa0JBQWtCcndCLEtBQUsrYixFQUFNN1MsT0FBTzBhLFNBQzlDME0sRUFqVFcsV0FpVEt2VSxFQUFNdGlCLElBQ3RCODJCLEVBQWtCLENBQUNsRCxHQUFnQkMsSUFBa0J2UCxTQUFTaEMsRUFBTXRpQixLQUMxRSxJQUFLODJCLElBQW9CRCxFQUN2QixPQUVGLEdBQUlELElBQVlDLEVBQ2QsT0FFRnZVLEVBQU1rRCxpQkFHTixNQUFNdVIsRUFBa0I3VCxLQUFLZ0csUUFBUW9MLElBQTBCcFIsS0FBTzZGLEdBQWVNLEtBQUtuRyxLQUFNb1IsSUFBd0IsSUFBTXZMLEdBQWVoaEIsS0FBS21iLEtBQU1vUixJQUF3QixJQUFNdkwsR0FBZUMsUUFBUXNMLEdBQXdCaFMsRUFBTVcsZUFBZWhiLFlBQ3BQd0YsRUFBVzJuQixHQUFTNU0sb0JBQW9CdU8sR0FDOUMsR0FBSUQsRUFJRixPQUhBeFUsRUFBTTBVLGtCQUNOdnBCLEVBQVNzbEIsWUFDVHRsQixFQUFTNG9CLGdCQUFnQi9ULEdBR3ZCN1UsRUFBU29sQixhQUVYdlEsRUFBTTBVLGtCQUNOdnBCLEVBQVNxbEIsT0FDVGlFLEVBQWdCcEIsUUFFcEIsRUFPRmxTLEdBQWFjLEdBQUdoYyxTQUFVNHJCLEdBQXdCRyxHQUF3QmMsR0FBU3VCLHVCQUNuRmxULEdBQWFjLEdBQUdoYyxTQUFVNHJCLEdBQXdCSyxHQUFlWSxHQUFTdUIsdUJBQzFFbFQsR0FBYWMsR0FBR2hjLFNBQVUyckIsR0FBd0JrQixHQUFTa0IsWUFDM0Q3UyxHQUFhYyxHQUFHaGMsU0FBVTZyQixHQUFzQmdCLEdBQVNrQixZQUN6RDdTLEdBQWFjLEdBQUdoYyxTQUFVMnJCLEdBQXdCSSxJQUF3QixTQUFVaFMsR0FDbEZBLEVBQU1rRCxpQkFDTjRQLEdBQVM1TSxvQkFBb0J0RixNQUFNMkgsUUFDckMsSUFNQXhMLEdBQW1CK1YsSUFjbkIsTUFBTTZCLEdBQVMsV0FFVEMsR0FBb0IsT0FDcEJDLEdBQWtCLGdCQUFnQkYsS0FDbENHLEdBQVksQ0FDaEJDLFVBQVcsaUJBQ1hDLGNBQWUsS0FDZmhQLFlBQVksRUFDWnpLLFdBQVcsRUFFWDBaLFlBQWEsUUFFVEMsR0FBZ0IsQ0FDcEJILFVBQVcsU0FDWEMsY0FBZSxrQkFDZmhQLFdBQVksVUFDWnpLLFVBQVcsVUFDWDBaLFlBQWEsb0JBT2YsTUFBTUUsV0FBaUI5USxHQUNyQixXQUFBVSxDQUFZTCxHQUNWYSxRQUNBM0UsS0FBSzZFLFFBQVU3RSxLQUFLNkQsV0FBV0MsR0FDL0I5RCxLQUFLd1UsYUFBYyxFQUNuQnhVLEtBQUs0RSxTQUFXLElBQ2xCLENBR0Esa0JBQVdsQixHQUNULE9BQU93USxFQUNULENBQ0Esc0JBQVd2USxHQUNULE9BQU8yUSxFQUNULENBQ0EsZUFBVy9YLEdBQ1QsT0FBT3dYLEVBQ1QsQ0FHQSxJQUFBbEUsQ0FBS3hULEdBQ0gsSUFBSzJELEtBQUs2RSxRQUFRbEssVUFFaEIsWUFEQWtDLEdBQVFSLEdBR1YyRCxLQUFLeVUsVUFDTCxNQUFNbDFCLEVBQVV5Z0IsS0FBSzBVLGNBQ2pCMVUsS0FBSzZFLFFBQVFPLFlBQ2Z2SixHQUFPdGMsR0FFVEEsRUFBUThiLFVBQVU1RSxJQUFJdWQsSUFDdEJoVSxLQUFLMlUsbUJBQWtCLEtBQ3JCOVgsR0FBUVIsRUFBUyxHQUVyQixDQUNBLElBQUF1VCxDQUFLdlQsR0FDRTJELEtBQUs2RSxRQUFRbEssV0FJbEJxRixLQUFLMFUsY0FBY3JaLFVBQVUxQixPQUFPcWEsSUFDcENoVSxLQUFLMlUsbUJBQWtCLEtBQ3JCM1UsS0FBSytFLFVBQ0xsSSxHQUFRUixFQUFTLEtBTmpCUSxHQUFRUixFQVFaLENBQ0EsT0FBQTBJLEdBQ08vRSxLQUFLd1UsY0FHVmpVLEdBQWFDLElBQUlSLEtBQUs0RSxTQUFVcVAsSUFDaENqVSxLQUFLNEUsU0FBU2pMLFNBQ2RxRyxLQUFLd1UsYUFBYyxFQUNyQixDQUdBLFdBQUFFLEdBQ0UsSUFBSzFVLEtBQUs0RSxTQUFVLENBQ2xCLE1BQU1nUSxFQUFXdnZCLFNBQVN3dkIsY0FBYyxPQUN4Q0QsRUFBU1QsVUFBWW5VLEtBQUs2RSxRQUFRc1AsVUFDOUJuVSxLQUFLNkUsUUFBUU8sWUFDZndQLEVBQVN2WixVQUFVNUUsSUFwRkQsUUFzRnBCdUosS0FBSzRFLFNBQVdnUSxDQUNsQixDQUNBLE9BQU81VSxLQUFLNEUsUUFDZCxDQUNBLGlCQUFBWixDQUFrQkYsR0FHaEIsT0FEQUEsRUFBT3VRLFlBQWMzWixHQUFXb0osRUFBT3VRLGFBQ2hDdlEsQ0FDVCxDQUNBLE9BQUEyUSxHQUNFLEdBQUl6VSxLQUFLd1UsWUFDUCxPQUVGLE1BQU1qMUIsRUFBVXlnQixLQUFLMFUsY0FDckIxVSxLQUFLNkUsUUFBUXdQLFlBQVlTLE9BQU92MUIsR0FDaENnaEIsR0FBYWMsR0FBRzloQixFQUFTMDBCLElBQWlCLEtBQ3hDcFgsR0FBUW1ELEtBQUs2RSxRQUFRdVAsY0FBYyxJQUVyQ3BVLEtBQUt3VSxhQUFjLENBQ3JCLENBQ0EsaUJBQUFHLENBQWtCdFksR0FDaEJXLEdBQXVCWCxFQUFVMkQsS0FBSzBVLGNBQWUxVSxLQUFLNkUsUUFBUU8sV0FDcEUsRUFlRixNQUVNMlAsR0FBYyxnQkFDZEMsR0FBa0IsVUFBVUQsS0FDNUJFLEdBQW9CLGNBQWNGLEtBR2xDRyxHQUFtQixXQUNuQkMsR0FBWSxDQUNoQkMsV0FBVyxFQUNYQyxZQUFhLE1BRVRDLEdBQWdCLENBQ3BCRixVQUFXLFVBQ1hDLFlBQWEsV0FPZixNQUFNRSxXQUFrQjlSLEdBQ3RCLFdBQUFVLENBQVlMLEdBQ1ZhLFFBQ0EzRSxLQUFLNkUsUUFBVTdFLEtBQUs2RCxXQUFXQyxHQUMvQjlELEtBQUt3VixXQUFZLEVBQ2pCeFYsS0FBS3lWLHFCQUF1QixJQUM5QixDQUdBLGtCQUFXL1IsR0FDVCxPQUFPeVIsRUFDVCxDQUNBLHNCQUFXeFIsR0FDVCxPQUFPMlIsRUFDVCxDQUNBLGVBQVcvWSxHQUNULE1BckNXLFdBc0NiLENBR0EsUUFBQW1aLEdBQ00xVixLQUFLd1YsWUFHTHhWLEtBQUs2RSxRQUFRdVEsV0FDZnBWLEtBQUs2RSxRQUFRd1EsWUFBWTVDLFFBRTNCbFMsR0FBYUMsSUFBSW5iLFNBQVUwdkIsSUFDM0J4VSxHQUFhYyxHQUFHaGMsU0FBVTJ2QixJQUFpQjVWLEdBQVNZLEtBQUsyVixlQUFldlcsS0FDeEVtQixHQUFhYyxHQUFHaGMsU0FBVTR2QixJQUFtQjdWLEdBQVNZLEtBQUs0VixlQUFleFcsS0FDMUVZLEtBQUt3VixXQUFZLEVBQ25CLENBQ0EsVUFBQUssR0FDTzdWLEtBQUt3VixZQUdWeFYsS0FBS3dWLFdBQVksRUFDakJqVixHQUFhQyxJQUFJbmIsU0FBVTB2QixJQUM3QixDQUdBLGNBQUFZLENBQWV2VyxHQUNiLE1BQU0sWUFDSmlXLEdBQ0VyVixLQUFLNkUsUUFDVCxHQUFJekYsRUFBTTdTLFNBQVdsSCxVQUFZK1osRUFBTTdTLFNBQVc4b0IsR0FBZUEsRUFBWTd3QixTQUFTNGEsRUFBTTdTLFFBQzFGLE9BRUYsTUFBTTFMLEVBQVdnbEIsR0FBZVUsa0JBQWtCOE8sR0FDMUIsSUFBcEJ4MEIsRUFBUzZQLE9BQ1gya0IsRUFBWTVDLFFBQ0h6UyxLQUFLeVYsdUJBQXlCUCxHQUN2Q3IwQixFQUFTQSxFQUFTNlAsT0FBUyxHQUFHK2hCLFFBRTlCNXhCLEVBQVMsR0FBRzR4QixPQUVoQixDQUNBLGNBQUFtRCxDQUFleFcsR0F6RUQsUUEwRVJBLEVBQU10aUIsTUFHVmtqQixLQUFLeVYscUJBQXVCclcsRUFBTTBXLFNBQVdaLEdBNUV6QixVQTZFdEIsRUFlRixNQUFNYSxHQUF5QixvREFDekJDLEdBQTBCLGNBQzFCQyxHQUFtQixnQkFDbkJDLEdBQWtCLGVBTXhCLE1BQU1DLEdBQ0osV0FBQWhTLEdBQ0VuRSxLQUFLNEUsU0FBV3ZmLFNBQVM2RyxJQUMzQixDQUdBLFFBQUFrcUIsR0FFRSxNQUFNQyxFQUFnQmh4QixTQUFTQyxnQkFBZ0J1QyxZQUMvQyxPQUFPMUYsS0FBS29DLElBQUkzRSxPQUFPMDJCLFdBQWFELEVBQ3RDLENBQ0EsSUFBQXpHLEdBQ0UsTUFBTS9yQixFQUFRbWMsS0FBS29XLFdBQ25CcFcsS0FBS3VXLG1CQUVMdlcsS0FBS3dXLHNCQUFzQnhXLEtBQUs0RSxTQUFVcVIsSUFBa0JRLEdBQW1CQSxFQUFrQjV5QixJQUVqR21jLEtBQUt3VyxzQkFBc0JULEdBQXdCRSxJQUFrQlEsR0FBbUJBLEVBQWtCNXlCLElBQzFHbWMsS0FBS3dXLHNCQUFzQlIsR0FBeUJFLElBQWlCTyxHQUFtQkEsRUFBa0I1eUIsR0FDNUcsQ0FDQSxLQUFBd08sR0FDRTJOLEtBQUswVyx3QkFBd0IxVyxLQUFLNEUsU0FBVSxZQUM1QzVFLEtBQUswVyx3QkFBd0IxVyxLQUFLNEUsU0FBVXFSLElBQzVDalcsS0FBSzBXLHdCQUF3QlgsR0FBd0JFLElBQ3JEalcsS0FBSzBXLHdCQUF3QlYsR0FBeUJFLEdBQ3hELENBQ0EsYUFBQVMsR0FDRSxPQUFPM1csS0FBS29XLFdBQWEsQ0FDM0IsQ0FHQSxnQkFBQUcsR0FDRXZXLEtBQUs0VyxzQkFBc0I1VyxLQUFLNEUsU0FBVSxZQUMxQzVFLEtBQUs0RSxTQUFTN2pCLE1BQU0rSyxTQUFXLFFBQ2pDLENBQ0EscUJBQUEwcUIsQ0FBc0J6YyxFQUFVOGMsRUFBZXhhLEdBQzdDLE1BQU15YSxFQUFpQjlXLEtBQUtvVyxXQVM1QnBXLEtBQUsrVywyQkFBMkJoZCxHQVJIeGEsSUFDM0IsR0FBSUEsSUFBWXlnQixLQUFLNEUsVUFBWWhsQixPQUFPMDJCLFdBQWEvMkIsRUFBUXNJLFlBQWNpdkIsRUFDekUsT0FFRjlXLEtBQUs0VyxzQkFBc0JyM0IsRUFBU3MzQixHQUNwQyxNQUFNSixFQUFrQjcyQixPQUFPcUYsaUJBQWlCMUYsR0FBU3ViLGlCQUFpQitiLEdBQzFFdDNCLEVBQVF3QixNQUFNaTJCLFlBQVlILEVBQWUsR0FBR3hhLEVBQVNrQixPQUFPQyxXQUFXaVosUUFBc0IsR0FHakcsQ0FDQSxxQkFBQUcsQ0FBc0JyM0IsRUFBU3MzQixHQUM3QixNQUFNSSxFQUFjMTNCLEVBQVF3QixNQUFNK1osaUJBQWlCK2IsR0FDL0NJLEdBQ0ZqVSxHQUFZQyxpQkFBaUIxakIsRUFBU3MzQixFQUFlSSxFQUV6RCxDQUNBLHVCQUFBUCxDQUF3QjNjLEVBQVU4YyxHQVdoQzdXLEtBQUsrVywyQkFBMkJoZCxHQVZIeGEsSUFDM0IsTUFBTTVCLEVBQVFxbEIsR0FBWVEsaUJBQWlCamtCLEVBQVNzM0IsR0FFdEMsT0FBVmw1QixHQUlKcWxCLEdBQVlFLG9CQUFvQjNqQixFQUFTczNCLEdBQ3pDdDNCLEVBQVF3QixNQUFNaTJCLFlBQVlILEVBQWVsNUIsSUFKdkM0QixFQUFRd0IsTUFBTW0yQixlQUFlTCxFQUlnQixHQUduRCxDQUNBLDBCQUFBRSxDQUEyQmhkLEVBQVVvZCxHQUNuQyxHQUFJLEdBQVVwZCxHQUNab2QsRUFBU3BkLFFBR1gsSUFBSyxNQUFNNkwsS0FBT0MsR0FBZTFULEtBQUs0SCxFQUFVaUcsS0FBSzRFLFVBQ25EdVMsRUFBU3ZSLEVBRWIsRUFlRixNQUVNd1IsR0FBYyxZQUdkQyxHQUFlLE9BQU9ELEtBQ3RCRSxHQUF5QixnQkFBZ0JGLEtBQ3pDRyxHQUFpQixTQUFTSCxLQUMxQkksR0FBZSxPQUFPSixLQUN0QkssR0FBZ0IsUUFBUUwsS0FDeEJNLEdBQWlCLFNBQVNOLEtBQzFCTyxHQUFzQixnQkFBZ0JQLEtBQ3RDUSxHQUEwQixvQkFBb0JSLEtBQzlDUyxHQUEwQixrQkFBa0JULEtBQzVDVSxHQUF5QixRQUFRVixjQUNqQ1csR0FBa0IsYUFFbEJDLEdBQW9CLE9BQ3BCQyxHQUFvQixlQUtwQkMsR0FBWSxDQUNoQnRELFVBQVUsRUFDVm5DLE9BQU8sRUFDUHpILFVBQVUsR0FFTm1OLEdBQWdCLENBQ3BCdkQsU0FBVSxtQkFDVm5DLE1BQU8sVUFDUHpILFNBQVUsV0FPWixNQUFNb04sV0FBYzFULEdBQ2xCLFdBQUFQLENBQVk1a0IsRUFBU3VrQixHQUNuQmEsTUFBTXBsQixFQUFTdWtCLEdBQ2Y5RCxLQUFLcVksUUFBVXhTLEdBQWVDLFFBckJWLGdCQXFCbUM5RixLQUFLNEUsVUFDNUQ1RSxLQUFLc1ksVUFBWXRZLEtBQUt1WSxzQkFDdEJ2WSxLQUFLd1ksV0FBYXhZLEtBQUt5WSx1QkFDdkJ6WSxLQUFLMlAsVUFBVyxFQUNoQjNQLEtBQUttUCxrQkFBbUIsRUFDeEJuUCxLQUFLMFksV0FBYSxJQUFJdkMsR0FDdEJuVyxLQUFLNkwsb0JBQ1AsQ0FHQSxrQkFBV25JLEdBQ1QsT0FBT3dVLEVBQ1QsQ0FDQSxzQkFBV3ZVLEdBQ1QsT0FBT3dVLEVBQ1QsQ0FDQSxlQUFXNWIsR0FDVCxNQTFEVyxPQTJEYixDQUdBLE1BQUFvTCxDQUFPN0gsR0FDTCxPQUFPRSxLQUFLMlAsU0FBVzNQLEtBQUs0UCxPQUFTNVAsS0FBSzZQLEtBQUsvUCxFQUNqRCxDQUNBLElBQUErUCxDQUFLL1AsR0FDQ0UsS0FBSzJQLFVBQVkzUCxLQUFLbVAsa0JBR1I1TyxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVNFMsR0FBYyxDQUNsRTFYLGtCQUVZa0MsbUJBR2RoQyxLQUFLMlAsVUFBVyxFQUNoQjNQLEtBQUttUCxrQkFBbUIsRUFDeEJuUCxLQUFLMFksV0FBVzlJLE9BQ2hCdnFCLFNBQVM2RyxLQUFLbVAsVUFBVTVFLElBQUlzaEIsSUFDNUIvWCxLQUFLMlksZ0JBQ0wzWSxLQUFLc1ksVUFBVXpJLE1BQUssSUFBTTdQLEtBQUs0WSxhQUFhOVksS0FDOUMsQ0FDQSxJQUFBOFAsR0FDTzVQLEtBQUsyUCxXQUFZM1AsS0FBS21QLG1CQUdUNU8sR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVXlTLElBQ3hDclYsbUJBR2RoQyxLQUFLMlAsVUFBVyxFQUNoQjNQLEtBQUttUCxrQkFBbUIsRUFDeEJuUCxLQUFLd1ksV0FBVzNDLGFBQ2hCN1YsS0FBSzRFLFNBQVN2SixVQUFVMUIsT0FBT3FlLElBQy9CaFksS0FBS21GLGdCQUFlLElBQU1uRixLQUFLNlksY0FBYzdZLEtBQUs0RSxTQUFVNUUsS0FBS2dPLGdCQUNuRSxDQUNBLE9BQUFqSixHQUNFeEUsR0FBYUMsSUFBSTVnQixPQUFRdzNCLElBQ3pCN1csR0FBYUMsSUFBSVIsS0FBS3FZLFFBQVNqQixJQUMvQnBYLEtBQUtzWSxVQUFVdlQsVUFDZi9FLEtBQUt3WSxXQUFXM0MsYUFDaEJsUixNQUFNSSxTQUNSLENBQ0EsWUFBQStULEdBQ0U5WSxLQUFLMlksZUFDUCxDQUdBLG1CQUFBSixHQUNFLE9BQU8sSUFBSWhFLEdBQVMsQ0FDbEI1WixVQUFXbUcsUUFBUWQsS0FBSzZFLFFBQVErUCxVQUVoQ3hQLFdBQVlwRixLQUFLZ08sZUFFckIsQ0FDQSxvQkFBQXlLLEdBQ0UsT0FBTyxJQUFJbEQsR0FBVSxDQUNuQkYsWUFBYXJWLEtBQUs0RSxVQUV0QixDQUNBLFlBQUFnVSxDQUFhOVksR0FFTnphLFNBQVM2RyxLQUFLMUgsU0FBU3diLEtBQUs0RSxXQUMvQnZmLFNBQVM2RyxLQUFLNG9CLE9BQU85VSxLQUFLNEUsVUFFNUI1RSxLQUFLNEUsU0FBUzdqQixNQUFNZ3hCLFFBQVUsUUFDOUIvUixLQUFLNEUsU0FBU3pqQixnQkFBZ0IsZUFDOUI2ZSxLQUFLNEUsU0FBU3hqQixhQUFhLGNBQWMsR0FDekM0ZSxLQUFLNEUsU0FBU3hqQixhQUFhLE9BQVEsVUFDbkM0ZSxLQUFLNEUsU0FBU25aLFVBQVksRUFDMUIsTUFBTXN0QixFQUFZbFQsR0FBZUMsUUE3R1QsY0E2R3NDOUYsS0FBS3FZLFNBQy9EVSxJQUNGQSxFQUFVdHRCLFVBQVksR0FFeEJvUSxHQUFPbUUsS0FBSzRFLFVBQ1o1RSxLQUFLNEUsU0FBU3ZKLFVBQVU1RSxJQUFJdWhCLElBVTVCaFksS0FBS21GLGdCQVRzQixLQUNyQm5GLEtBQUs2RSxRQUFRNE4sT0FDZnpTLEtBQUt3WSxXQUFXOUMsV0FFbEIxVixLQUFLbVAsa0JBQW1CLEVBQ3hCNU8sR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVTZTLEdBQWUsQ0FDakQzWCxpQkFDQSxHQUVvQ0UsS0FBS3FZLFFBQVNyWSxLQUFLZ08sY0FDN0QsQ0FDQSxrQkFBQW5DLEdBQ0V0TCxHQUFhYyxHQUFHckIsS0FBSzRFLFNBQVVpVCxJQUF5QnpZLElBaEp2QyxXQWlKWEEsRUFBTXRpQixNQUdOa2pCLEtBQUs2RSxRQUFRbUcsU0FDZmhMLEtBQUs0UCxPQUdQNVAsS0FBS2daLDZCQUE0QixJQUVuQ3pZLEdBQWFjLEdBQUd6aEIsT0FBUTgzQixJQUFnQixLQUNsQzFYLEtBQUsyUCxXQUFhM1AsS0FBS21QLGtCQUN6Qm5QLEtBQUsyWSxlQUNQLElBRUZwWSxHQUFhYyxHQUFHckIsS0FBSzRFLFNBQVVnVCxJQUF5QnhZLElBRXREbUIsR0FBYWUsSUFBSXRCLEtBQUs0RSxTQUFVK1MsSUFBcUJzQixJQUMvQ2paLEtBQUs0RSxXQUFheEYsRUFBTTdTLFFBQVV5VCxLQUFLNEUsV0FBYXFVLEVBQU8xc0IsU0FHakMsV0FBMUJ5VCxLQUFLNkUsUUFBUStQLFNBSWI1VSxLQUFLNkUsUUFBUStQLFVBQ2Y1VSxLQUFLNFAsT0FKTDVQLEtBQUtnWiw2QkFLUCxHQUNBLEdBRU4sQ0FDQSxVQUFBSCxHQUNFN1ksS0FBSzRFLFNBQVM3akIsTUFBTWd4QixRQUFVLE9BQzlCL1IsS0FBSzRFLFNBQVN4akIsYUFBYSxlQUFlLEdBQzFDNGUsS0FBSzRFLFNBQVN6akIsZ0JBQWdCLGNBQzlCNmUsS0FBSzRFLFNBQVN6akIsZ0JBQWdCLFFBQzlCNmUsS0FBS21QLGtCQUFtQixFQUN4Qm5QLEtBQUtzWSxVQUFVMUksTUFBSyxLQUNsQnZxQixTQUFTNkcsS0FBS21QLFVBQVUxQixPQUFPb2UsSUFDL0IvWCxLQUFLa1osb0JBQ0xsWixLQUFLMFksV0FBV3JtQixRQUNoQmtPLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVUyUyxHQUFlLEdBRXZELENBQ0EsV0FBQXZKLEdBQ0UsT0FBT2hPLEtBQUs0RSxTQUFTdkosVUFBVTdXLFNBakxULE9Ba0x4QixDQUNBLDBCQUFBdzBCLEdBRUUsR0FEa0J6WSxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVMFMsSUFDeEN0VixpQkFDWixPQUVGLE1BQU1tWCxFQUFxQm5aLEtBQUs0RSxTQUFTdlgsYUFBZWhJLFNBQVNDLGdCQUFnQnNDLGFBQzNFd3hCLEVBQW1CcFosS0FBSzRFLFNBQVM3akIsTUFBTWlMLFVBRXBCLFdBQXJCb3RCLEdBQWlDcFosS0FBSzRFLFNBQVN2SixVQUFVN1csU0FBU3l6QixNQUdqRWtCLElBQ0huWixLQUFLNEUsU0FBUzdqQixNQUFNaUwsVUFBWSxVQUVsQ2dVLEtBQUs0RSxTQUFTdkosVUFBVTVFLElBQUl3aEIsSUFDNUJqWSxLQUFLbUYsZ0JBQWUsS0FDbEJuRixLQUFLNEUsU0FBU3ZKLFVBQVUxQixPQUFPc2UsSUFDL0JqWSxLQUFLbUYsZ0JBQWUsS0FDbEJuRixLQUFLNEUsU0FBUzdqQixNQUFNaUwsVUFBWW90QixDQUFnQixHQUMvQ3BaLEtBQUtxWSxRQUFRLEdBQ2ZyWSxLQUFLcVksU0FDUnJZLEtBQUs0RSxTQUFTNk4sUUFDaEIsQ0FNQSxhQUFBa0csR0FDRSxNQUFNUSxFQUFxQm5aLEtBQUs0RSxTQUFTdlgsYUFBZWhJLFNBQVNDLGdCQUFnQnNDLGFBQzNFa3ZCLEVBQWlCOVcsS0FBSzBZLFdBQVd0QyxXQUNqQ2lELEVBQW9CdkMsRUFBaUIsRUFDM0MsR0FBSXVDLElBQXNCRixFQUFvQixDQUM1QyxNQUFNcjNCLEVBQVdtYSxLQUFVLGNBQWdCLGVBQzNDK0QsS0FBSzRFLFNBQVM3akIsTUFBTWUsR0FBWSxHQUFHZzFCLEtBQ3JDLENBQ0EsSUFBS3VDLEdBQXFCRixFQUFvQixDQUM1QyxNQUFNcjNCLEVBQVdtYSxLQUFVLGVBQWlCLGNBQzVDK0QsS0FBSzRFLFNBQVM3akIsTUFBTWUsR0FBWSxHQUFHZzFCLEtBQ3JDLENBQ0YsQ0FDQSxpQkFBQW9DLEdBQ0VsWixLQUFLNEUsU0FBUzdqQixNQUFNdTRCLFlBQWMsR0FDbEN0WixLQUFLNEUsU0FBUzdqQixNQUFNdzRCLGFBQWUsRUFDckMsQ0FHQSxzQkFBTzljLENBQWdCcUgsRUFBUWhFLEdBQzdCLE9BQU9FLEtBQUt3SCxNQUFLLFdBQ2YsTUFBTW5kLEVBQU8rdEIsR0FBTTlTLG9CQUFvQnRGLEtBQU04RCxHQUM3QyxHQUFzQixpQkFBWEEsRUFBWCxDQUdBLFFBQTRCLElBQWpCelosRUFBS3laLEdBQ2QsTUFBTSxJQUFJVSxVQUFVLG9CQUFvQlYsTUFFMUN6WixFQUFLeVosR0FBUWhFLEVBSmIsQ0FLRixHQUNGLEVBT0ZTLEdBQWFjLEdBQUdoYyxTQUFVeXlCLEdBOU9LLDRCQThPMkMsU0FBVTFZLEdBQ2xGLE1BQU03UyxFQUFTc1osR0FBZWMsdUJBQXVCM0csTUFDakQsQ0FBQyxJQUFLLFFBQVFvQixTQUFTcEIsS0FBS2lILFVBQzlCN0gsRUFBTWtELGlCQUVSL0IsR0FBYWUsSUFBSS9VLEVBQVFpckIsSUFBY2dDLElBQ2pDQSxFQUFVeFgsa0JBSWR6QixHQUFhZSxJQUFJL1UsRUFBUWdyQixJQUFnQixLQUNuQzVjLEdBQVVxRixPQUNaQSxLQUFLeVMsT0FDUCxHQUNBLElBSUosTUFBTWdILEVBQWM1VCxHQUFlQyxRQW5RYixlQW9RbEIyVCxHQUNGckIsR0FBTS9TLFlBQVlvVSxHQUFhN0osT0FFcEJ3SSxHQUFNOVMsb0JBQW9CL1ksR0FDbENvYixPQUFPM0gsS0FDZCxJQUNBNkcsR0FBcUJ1UixJQU1yQmpjLEdBQW1CaWMsSUFjbkIsTUFFTXNCLEdBQWMsZ0JBQ2RDLEdBQWlCLFlBQ2pCQyxHQUF3QixPQUFPRixLQUFjQyxLQUU3Q0UsR0FBb0IsT0FDcEJDLEdBQXVCLFVBQ3ZCQyxHQUFvQixTQUVwQkMsR0FBZ0Isa0JBQ2hCQyxHQUFlLE9BQU9QLEtBQ3RCUSxHQUFnQixRQUFRUixLQUN4QlMsR0FBZSxPQUFPVCxLQUN0QlUsR0FBdUIsZ0JBQWdCVixLQUN2Q1csR0FBaUIsU0FBU1gsS0FDMUJZLEdBQWUsU0FBU1osS0FDeEJhLEdBQXlCLFFBQVFiLEtBQWNDLEtBQy9DYSxHQUF3QixrQkFBa0JkLEtBRTFDZSxHQUFZLENBQ2hCN0YsVUFBVSxFQUNWNUosVUFBVSxFQUNWdmdCLFFBQVEsR0FFSml3QixHQUFnQixDQUNwQjlGLFNBQVUsbUJBQ1Y1SixTQUFVLFVBQ1Z2Z0IsT0FBUSxXQU9WLE1BQU1rd0IsV0FBa0JqVyxHQUN0QixXQUFBUCxDQUFZNWtCLEVBQVN1a0IsR0FDbkJhLE1BQU1wbEIsRUFBU3VrQixHQUNmOUQsS0FBSzJQLFVBQVcsRUFDaEIzUCxLQUFLc1ksVUFBWXRZLEtBQUt1WSxzQkFDdEJ2WSxLQUFLd1ksV0FBYXhZLEtBQUt5WSx1QkFDdkJ6WSxLQUFLNkwsb0JBQ1AsQ0FHQSxrQkFBV25JLEdBQ1QsT0FBTytXLEVBQ1QsQ0FDQSxzQkFBVzlXLEdBQ1QsT0FBTytXLEVBQ1QsQ0FDQSxlQUFXbmUsR0FDVCxNQXBEVyxXQXFEYixDQUdBLE1BQUFvTCxDQUFPN0gsR0FDTCxPQUFPRSxLQUFLMlAsU0FBVzNQLEtBQUs0UCxPQUFTNVAsS0FBSzZQLEtBQUsvUCxFQUNqRCxDQUNBLElBQUErUCxDQUFLL1AsR0FDQ0UsS0FBSzJQLFVBR1NwUCxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVcVYsR0FBYyxDQUNsRW5hLGtCQUVZa0MsbUJBR2RoQyxLQUFLMlAsVUFBVyxFQUNoQjNQLEtBQUtzWSxVQUFVekksT0FDVjdQLEtBQUs2RSxRQUFRcGEsU0FDaEIsSUFBSTByQixJQUFrQnZHLE9BRXhCNVAsS0FBSzRFLFNBQVN4akIsYUFBYSxjQUFjLEdBQ3pDNGUsS0FBSzRFLFNBQVN4akIsYUFBYSxPQUFRLFVBQ25DNGUsS0FBSzRFLFNBQVN2SixVQUFVNUUsSUFBSXFqQixJQVc1QjlaLEtBQUttRixnQkFWb0IsS0FDbEJuRixLQUFLNkUsUUFBUXBhLFNBQVV1VixLQUFLNkUsUUFBUStQLFVBQ3ZDNVUsS0FBS3dZLFdBQVc5QyxXQUVsQjFWLEtBQUs0RSxTQUFTdkosVUFBVTVFLElBQUlvakIsSUFDNUI3WixLQUFLNEUsU0FBU3ZKLFVBQVUxQixPQUFPbWdCLElBQy9CdlosR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVXNWLEdBQWUsQ0FDakRwYSxpQkFDQSxHQUVrQ0UsS0FBSzRFLFVBQVUsR0FDdkQsQ0FDQSxJQUFBZ0wsR0FDTzVQLEtBQUsyUCxXQUdRcFAsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVXVWLElBQ3hDblksbUJBR2RoQyxLQUFLd1ksV0FBVzNDLGFBQ2hCN1YsS0FBSzRFLFNBQVNnVyxPQUNkNWEsS0FBSzJQLFVBQVcsRUFDaEIzUCxLQUFLNEUsU0FBU3ZKLFVBQVU1RSxJQUFJc2pCLElBQzVCL1osS0FBS3NZLFVBQVUxSSxPQVVmNVAsS0FBS21GLGdCQVRvQixLQUN2Qm5GLEtBQUs0RSxTQUFTdkosVUFBVTFCLE9BQU9rZ0IsR0FBbUJFLElBQ2xEL1osS0FBSzRFLFNBQVN6akIsZ0JBQWdCLGNBQzlCNmUsS0FBSzRFLFNBQVN6akIsZ0JBQWdCLFFBQ3pCNmUsS0FBSzZFLFFBQVFwYSxTQUNoQixJQUFJMHJCLElBQWtCOWpCLFFBRXhCa08sR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVXlWLEdBQWUsR0FFZnJhLEtBQUs0RSxVQUFVLElBQ3ZELENBQ0EsT0FBQUcsR0FDRS9FLEtBQUtzWSxVQUFVdlQsVUFDZi9FLEtBQUt3WSxXQUFXM0MsYUFDaEJsUixNQUFNSSxTQUNSLENBR0EsbUJBQUF3VCxHQUNFLE1BU001ZCxFQUFZbUcsUUFBUWQsS0FBSzZFLFFBQVErUCxVQUN2QyxPQUFPLElBQUlMLEdBQVMsQ0FDbEJKLFVBM0hzQixxQkE0SHRCeFosWUFDQXlLLFlBQVksRUFDWmlQLFlBQWFyVSxLQUFLNEUsU0FBUzdmLFdBQzNCcXZCLGNBQWV6WixFQWZLLEtBQ1UsV0FBMUJxRixLQUFLNkUsUUFBUStQLFNBSWpCNVUsS0FBSzRQLE9BSEhyUCxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVd1YsR0FHM0IsRUFVZ0MsTUFFL0MsQ0FDQSxvQkFBQTNCLEdBQ0UsT0FBTyxJQUFJbEQsR0FBVSxDQUNuQkYsWUFBYXJWLEtBQUs0RSxVQUV0QixDQUNBLGtCQUFBaUgsR0FDRXRMLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVTRWLElBQXVCcGIsSUE1SXZDLFdBNklUQSxFQUFNdGlCLE1BR05rakIsS0FBSzZFLFFBQVFtRyxTQUNmaEwsS0FBSzRQLE9BR1ByUCxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVd1YsSUFBcUIsR0FFN0QsQ0FHQSxzQkFBTzNkLENBQWdCcUgsR0FDckIsT0FBTzlELEtBQUt3SCxNQUFLLFdBQ2YsTUFBTW5kLEVBQU9zd0IsR0FBVXJWLG9CQUFvQnRGLEtBQU04RCxHQUNqRCxHQUFzQixpQkFBWEEsRUFBWCxDQUdBLFFBQXFCL0ssSUFBakIxTyxFQUFLeVosSUFBeUJBLEVBQU9yQyxXQUFXLE1BQW1CLGdCQUFYcUMsRUFDMUQsTUFBTSxJQUFJVSxVQUFVLG9CQUFvQlYsTUFFMUN6WixFQUFLeVosR0FBUTlELEtBSmIsQ0FLRixHQUNGLEVBT0ZPLEdBQWFjLEdBQUdoYyxTQUFVazFCLEdBN0pLLGdDQTZKMkMsU0FBVW5iLEdBQ2xGLE1BQU03UyxFQUFTc1osR0FBZWMsdUJBQXVCM0csTUFJckQsR0FISSxDQUFDLElBQUssUUFBUW9CLFNBQVNwQixLQUFLaUgsVUFDOUI3SCxFQUFNa0QsaUJBRUpwSCxHQUFXOEUsTUFDYixPQUVGTyxHQUFhZSxJQUFJL1UsRUFBUTh0QixJQUFnQixLQUVuQzFmLEdBQVVxRixPQUNaQSxLQUFLeVMsT0FDUCxJQUlGLE1BQU1nSCxFQUFjNVQsR0FBZUMsUUFBUWtVLElBQ3ZDUCxHQUFlQSxJQUFnQmx0QixHQUNqQ291QixHQUFVdFYsWUFBWW9VLEdBQWE3SixPQUV4QitLLEdBQVVyVixvQkFBb0IvWSxHQUN0Q29iLE9BQU8zSCxLQUNkLElBQ0FPLEdBQWFjLEdBQUd6aEIsT0FBUWc2QixJQUF1QixLQUM3QyxJQUFLLE1BQU03ZixLQUFZOEwsR0FBZTFULEtBQUs2bkIsSUFDekNXLEdBQVVyVixvQkFBb0J2TCxHQUFVOFYsTUFDMUMsSUFFRnRQLEdBQWFjLEdBQUd6aEIsT0FBUTA2QixJQUFjLEtBQ3BDLElBQUssTUFBTS82QixLQUFXc21CLEdBQWUxVCxLQUFLLGdEQUNHLFVBQXZDbE4saUJBQWlCMUYsR0FBU2lDLFVBQzVCbTVCLEdBQVVyVixvQkFBb0IvbEIsR0FBU3F3QixNQUUzQyxJQUVGL0ksR0FBcUI4VCxJQU1yQnhlLEdBQW1Cd2UsSUFVbkIsTUFDTUUsR0FBbUIsQ0FFdkIsSUFBSyxDQUFDLFFBQVMsTUFBTyxLQUFNLE9BQVEsT0FIUCxrQkFJN0JocUIsRUFBRyxDQUFDLFNBQVUsT0FBUSxRQUFTLE9BQy9CaXFCLEtBQU0sR0FDTmhxQixFQUFHLEdBQ0hpcUIsR0FBSSxHQUNKQyxJQUFLLEdBQ0xDLEtBQU0sR0FDTkMsR0FBSSxHQUNKQyxJQUFLLEdBQ0xDLEdBQUksR0FDSkMsR0FBSSxHQUNKQyxHQUFJLEdBQ0pDLEdBQUksR0FDSkMsR0FBSSxHQUNKQyxHQUFJLEdBQ0pDLEdBQUksR0FDSkMsR0FBSSxHQUNKQyxHQUFJLEdBQ0pDLEdBQUksR0FDSnhxQixFQUFHLEdBQ0gwYixJQUFLLENBQUMsTUFBTyxTQUFVLE1BQU8sUUFBUyxRQUFTLFVBQ2hEK08sR0FBSSxHQUNKQyxHQUFJLEdBQ0pDLEVBQUcsR0FDSEMsSUFBSyxHQUNMQyxFQUFHLEdBQ0hDLE1BQU8sR0FDUEMsS0FBTSxHQUNOQyxJQUFLLEdBQ0xDLElBQUssR0FDTEMsT0FBUSxHQUNSQyxFQUFHLEdBQ0hDLEdBQUksSUFJQUMsR0FBZ0IsSUFBSXBtQixJQUFJLENBQUMsYUFBYyxPQUFRLE9BQVEsV0FBWSxXQUFZLFNBQVUsTUFBTyxlQVNoR3FtQixHQUFtQiwwREFDbkJDLEdBQW1CLENBQUM3NkIsRUFBVzg2QixLQUNuQyxNQUFNQyxFQUFnQi82QixFQUFVdkMsU0FBU0MsY0FDekMsT0FBSW85QixFQUFxQnpiLFNBQVMwYixJQUM1QkosR0FBYy9sQixJQUFJbW1CLElBQ2JoYyxRQUFRNmIsR0FBaUJ0NUIsS0FBS3RCLEVBQVVnN0IsWUFNNUNGLEVBQXFCMTJCLFFBQU82MkIsR0FBa0JBLGFBQTBCelksU0FBUTlSLE1BQUt3cUIsR0FBU0EsRUFBTTU1QixLQUFLeTVCLElBQWUsRUEwQzNISSxHQUFZLENBQ2hCQyxVQUFXdEMsR0FDWHVDLFFBQVMsQ0FBQyxFQUVWQyxXQUFZLEdBQ1p4d0IsTUFBTSxFQUNOeXdCLFVBQVUsRUFDVkMsV0FBWSxLQUNaQyxTQUFVLGVBRU5DLEdBQWdCLENBQ3BCTixVQUFXLFNBQ1hDLFFBQVMsU0FDVEMsV0FBWSxvQkFDWnh3QixLQUFNLFVBQ055d0IsU0FBVSxVQUNWQyxXQUFZLGtCQUNaQyxTQUFVLFVBRU5FLEdBQXFCLENBQ3pCQyxNQUFPLGlDQUNQNWpCLFNBQVUsb0JBT1osTUFBTTZqQixXQUF3Qm5hLEdBQzVCLFdBQUFVLENBQVlMLEdBQ1ZhLFFBQ0EzRSxLQUFLNkUsUUFBVTdFLEtBQUs2RCxXQUFXQyxFQUNqQyxDQUdBLGtCQUFXSixHQUNULE9BQU93WixFQUNULENBQ0Esc0JBQVd2WixHQUNULE9BQU84WixFQUNULENBQ0EsZUFBV2xoQixHQUNULE1BM0NXLGlCQTRDYixDQUdBLFVBQUFzaEIsR0FDRSxPQUFPN2dDLE9BQU9taUIsT0FBT2EsS0FBSzZFLFFBQVF1WSxTQUFTdDZCLEtBQUlnaEIsR0FBVTlELEtBQUs4ZCx5QkFBeUJoYSxLQUFTM2QsT0FBTzJhLFFBQ3pHLENBQ0EsVUFBQWlkLEdBQ0UsT0FBTy9kLEtBQUs2ZCxhQUFhbnRCLE9BQVMsQ0FDcEMsQ0FDQSxhQUFBc3RCLENBQWNaLEdBTVosT0FMQXBkLEtBQUtpZSxjQUFjYixHQUNuQnBkLEtBQUs2RSxRQUFRdVksUUFBVSxJQUNsQnBkLEtBQUs2RSxRQUFRdVksV0FDYkEsR0FFRXBkLElBQ1QsQ0FDQSxNQUFBa2UsR0FDRSxNQUFNQyxFQUFrQjk0QixTQUFTd3ZCLGNBQWMsT0FDL0NzSixFQUFnQkMsVUFBWXBlLEtBQUtxZSxlQUFlcmUsS0FBSzZFLFFBQVEyWSxVQUM3RCxJQUFLLE1BQU96akIsRUFBVXVrQixLQUFTdGhDLE9BQU9ta0IsUUFBUW5CLEtBQUs2RSxRQUFRdVksU0FDekRwZCxLQUFLdWUsWUFBWUosRUFBaUJHLEVBQU12a0IsR0FFMUMsTUFBTXlqQixFQUFXVyxFQUFnQnBZLFNBQVMsR0FDcENzWCxFQUFhcmQsS0FBSzhkLHlCQUF5QjlkLEtBQUs2RSxRQUFRd1ksWUFJOUQsT0FISUEsR0FDRkcsRUFBU25pQixVQUFVNUUsT0FBTzRtQixFQUFXbjdCLE1BQU0sTUFFdENzN0IsQ0FDVCxDQUdBLGdCQUFBdlosQ0FBaUJILEdBQ2ZhLE1BQU1WLGlCQUFpQkgsR0FDdkI5RCxLQUFLaWUsY0FBY25hLEVBQU9zWixRQUM1QixDQUNBLGFBQUFhLENBQWNPLEdBQ1osSUFBSyxNQUFPemtCLEVBQVVxakIsS0FBWXBnQyxPQUFPbWtCLFFBQVFxZCxHQUMvQzdaLE1BQU1WLGlCQUFpQixDQUNyQmxLLFdBQ0E0akIsTUFBT1AsR0FDTk0sR0FFUCxDQUNBLFdBQUFhLENBQVlmLEVBQVVKLEVBQVNyakIsR0FDN0IsTUFBTTBrQixFQUFrQjVZLEdBQWVDLFFBQVEvTCxFQUFVeWpCLEdBQ3BEaUIsS0FHTHJCLEVBQVVwZCxLQUFLOGQseUJBQXlCVixJQUtwQyxHQUFVQSxHQUNacGQsS0FBSzBlLHNCQUFzQmhrQixHQUFXMGlCLEdBQVVxQixHQUc5Q3plLEtBQUs2RSxRQUFRaFksS0FDZjR4QixFQUFnQkwsVUFBWXBlLEtBQUtxZSxlQUFlakIsR0FHbERxQixFQUFnQkUsWUFBY3ZCLEVBWDVCcUIsRUFBZ0I5a0IsU0FZcEIsQ0FDQSxjQUFBMGtCLENBQWVHLEdBQ2IsT0FBT3hlLEtBQUs2RSxRQUFReVksU0FwSnhCLFNBQXNCc0IsRUFBWXpCLEVBQVcwQixHQUMzQyxJQUFLRCxFQUFXbHVCLE9BQ2QsT0FBT2t1QixFQUVULEdBQUlDLEdBQWdELG1CQUFyQkEsRUFDN0IsT0FBT0EsRUFBaUJELEdBRTFCLE1BQ01FLEdBRFksSUFBSWwvQixPQUFPbS9CLFdBQ0tDLGdCQUFnQkosRUFBWSxhQUN4RC85QixFQUFXLEdBQUdsQyxVQUFVbWdDLEVBQWdCNXlCLEtBQUtrVSxpQkFBaUIsTUFDcEUsSUFBSyxNQUFNN2dCLEtBQVdzQixFQUFVLENBQzlCLE1BQU1vK0IsRUFBYzEvQixFQUFRQyxTQUFTQyxjQUNyQyxJQUFLekMsT0FBTzRELEtBQUt1OEIsR0FBVy9iLFNBQVM2ZCxHQUFjLENBQ2pEMS9CLEVBQVFvYSxTQUNSLFFBQ0YsQ0FDQSxNQUFNdWxCLEVBQWdCLEdBQUd2Z0MsVUFBVVksRUFBUTBCLFlBQ3JDaytCLEVBQW9CLEdBQUd4Z0MsT0FBT3crQixFQUFVLE1BQVEsR0FBSUEsRUFBVThCLElBQWdCLElBQ3BGLElBQUssTUFBTWw5QixLQUFhbTlCLEVBQ2pCdEMsR0FBaUI3NkIsRUFBV285QixJQUMvQjUvQixFQUFRNEIsZ0JBQWdCWSxFQUFVdkMsU0FHeEMsQ0FDQSxPQUFPcy9CLEVBQWdCNXlCLEtBQUtreUIsU0FDOUIsQ0EySG1DZ0IsQ0FBYVosRUFBS3hlLEtBQUs2RSxRQUFRc1ksVUFBV25kLEtBQUs2RSxRQUFRMFksWUFBY2lCLENBQ3RHLENBQ0Esd0JBQUFWLENBQXlCVSxHQUN2QixPQUFPM2hCLEdBQVEyaEIsRUFBSyxDQUFDeGUsTUFDdkIsQ0FDQSxxQkFBQTBlLENBQXNCbi9CLEVBQVNrL0IsR0FDN0IsR0FBSXplLEtBQUs2RSxRQUFRaFksS0FHZixPQUZBNHhCLEVBQWdCTCxVQUFZLFFBQzVCSyxFQUFnQjNKLE9BQU92MUIsR0FHekJrL0IsRUFBZ0JFLFlBQWNwL0IsRUFBUW8vQixXQUN4QyxFQWVGLE1BQ01VLEdBQXdCLElBQUkvb0IsSUFBSSxDQUFDLFdBQVksWUFBYSxlQUMxRGdwQixHQUFvQixPQUVwQkMsR0FBb0IsT0FDcEJDLEdBQXlCLGlCQUN6QkMsR0FBaUIsU0FDakJDLEdBQW1CLGdCQUNuQkMsR0FBZ0IsUUFDaEJDLEdBQWdCLFFBYWhCQyxHQUFnQixDQUNwQkMsS0FBTSxPQUNOQyxJQUFLLE1BQ0xDLE1BQU8vakIsS0FBVSxPQUFTLFFBQzFCZ2tCLE9BQVEsU0FDUkMsS0FBTWprQixLQUFVLFFBQVUsUUFFdEJra0IsR0FBWSxDQUNoQmhELFVBQVd0QyxHQUNYdUYsV0FBVyxFQUNYbnlCLFNBQVUsa0JBQ1ZveUIsV0FBVyxFQUNYQyxZQUFhLEdBQ2JDLE1BQU8sRUFDUHZ3QixtQkFBb0IsQ0FBQyxNQUFPLFFBQVMsU0FBVSxRQUMvQ25ELE1BQU0sRUFDTjdFLE9BQVEsQ0FBQyxFQUFHLEdBQ1p0SixVQUFXLE1BQ1hzekIsYUFBYyxLQUNkc0wsVUFBVSxFQUNWQyxXQUFZLEtBQ1p4akIsVUFBVSxFQUNWeWpCLFNBQVUsK0dBQ1ZnRCxNQUFPLEdBQ1A1ZSxRQUFTLGVBRUw2ZSxHQUFnQixDQUNwQnRELFVBQVcsU0FDWGlELFVBQVcsVUFDWG55QixTQUFVLG1CQUNWb3lCLFVBQVcsMkJBQ1hDLFlBQWEsb0JBQ2JDLE1BQU8sa0JBQ1B2d0IsbUJBQW9CLFFBQ3BCbkQsS0FBTSxVQUNON0UsT0FBUSwwQkFDUnRKLFVBQVcsb0JBQ1hzekIsYUFBYyx5QkFDZHNMLFNBQVUsVUFDVkMsV0FBWSxrQkFDWnhqQixTQUFVLG1CQUNWeWpCLFNBQVUsU0FDVmdELE1BQU8sNEJBQ1A1ZSxRQUFTLFVBT1gsTUFBTThlLFdBQWdCaGMsR0FDcEIsV0FBQVAsQ0FBWTVrQixFQUFTdWtCLEdBQ25CLFFBQXNCLElBQVgsRUFDVCxNQUFNLElBQUlVLFVBQVUsK0RBRXRCRyxNQUFNcGxCLEVBQVN1a0IsR0FHZjlELEtBQUsyZ0IsWUFBYSxFQUNsQjNnQixLQUFLNGdCLFNBQVcsRUFDaEI1Z0IsS0FBSzZnQixXQUFhLEtBQ2xCN2dCLEtBQUs4Z0IsZUFBaUIsQ0FBQyxFQUN2QjlnQixLQUFLbVMsUUFBVSxLQUNmblMsS0FBSytnQixpQkFBbUIsS0FDeEIvZ0IsS0FBS2doQixZQUFjLEtBR25CaGhCLEtBQUtpaEIsSUFBTSxLQUNYamhCLEtBQUtraEIsZ0JBQ0FsaEIsS0FBSzZFLFFBQVE5SyxVQUNoQmlHLEtBQUttaEIsV0FFVCxDQUdBLGtCQUFXemQsR0FDVCxPQUFPeWMsRUFDVCxDQUNBLHNCQUFXeGMsR0FDVCxPQUFPOGMsRUFDVCxDQUNBLGVBQVdsa0IsR0FDVCxNQXhHVyxTQXlHYixDQUdBLE1BQUE2a0IsR0FDRXBoQixLQUFLMmdCLFlBQWEsQ0FDcEIsQ0FDQSxPQUFBVSxHQUNFcmhCLEtBQUsyZ0IsWUFBYSxDQUNwQixDQUNBLGFBQUFXLEdBQ0V0aEIsS0FBSzJnQixZQUFjM2dCLEtBQUsyZ0IsVUFDMUIsQ0FDQSxNQUFBaFosR0FDTzNILEtBQUsyZ0IsYUFHVjNnQixLQUFLOGdCLGVBQWVTLE9BQVN2aEIsS0FBSzhnQixlQUFlUyxNQUM3Q3ZoQixLQUFLMlAsV0FDUDNQLEtBQUt3aEIsU0FHUHhoQixLQUFLeWhCLFNBQ1AsQ0FDQSxPQUFBMWMsR0FDRW1JLGFBQWFsTixLQUFLNGdCLFVBQ2xCcmdCLEdBQWFDLElBQUlSLEtBQUs0RSxTQUFTNUosUUFBUXlrQixJQUFpQkMsR0FBa0IxZixLQUFLMGhCLG1CQUMzRTFoQixLQUFLNEUsU0FBU3BKLGFBQWEsMkJBQzdCd0UsS0FBSzRFLFNBQVN4akIsYUFBYSxRQUFTNGUsS0FBSzRFLFNBQVNwSixhQUFhLDJCQUVqRXdFLEtBQUsyaEIsaUJBQ0xoZCxNQUFNSSxTQUNSLENBQ0EsSUFBQThLLEdBQ0UsR0FBb0MsU0FBaEM3UCxLQUFLNEUsU0FBUzdqQixNQUFNZ3hCLFFBQ3RCLE1BQU0sSUFBSW5PLE1BQU0sdUNBRWxCLElBQU01RCxLQUFLNGhCLG1CQUFvQjVoQixLQUFLMmdCLFdBQ2xDLE9BRUYsTUFBTW5ILEVBQVlqWixHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVNUUsS0FBS21FLFlBQVlxQixVQWxJdEQsU0FvSVhxYyxHQURhcG1CLEdBQWV1RSxLQUFLNEUsV0FDTDVFLEtBQUs0RSxTQUFTOWtCLGNBQWN3RixpQkFBaUJkLFNBQVN3YixLQUFLNEUsVUFDN0YsR0FBSTRVLEVBQVV4WCxtQkFBcUI2ZixFQUNqQyxPQUlGN2hCLEtBQUsyaEIsaUJBQ0wsTUFBTVYsRUFBTWpoQixLQUFLOGhCLGlCQUNqQjloQixLQUFLNEUsU0FBU3hqQixhQUFhLG1CQUFvQjYvQixFQUFJemxCLGFBQWEsT0FDaEUsTUFBTSxVQUNKNmtCLEdBQ0VyZ0IsS0FBSzZFLFFBWVQsR0FYSzdFLEtBQUs0RSxTQUFTOWtCLGNBQWN3RixnQkFBZ0JkLFNBQVN3YixLQUFLaWhCLE9BQzdEWixFQUFVdkwsT0FBT21NLEdBQ2pCMWdCLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVU1RSxLQUFLbUUsWUFBWXFCLFVBaEpwQyxjQWtKbkJ4RixLQUFLbVMsUUFBVW5TLEtBQUt3UyxjQUFjeU8sR0FDbENBLEVBQUk1bEIsVUFBVTVFLElBQUk4b0IsSUFNZCxpQkFBa0JsNkIsU0FBU0MsZ0JBQzdCLElBQUssTUFBTS9GLElBQVcsR0FBR1osVUFBVTBHLFNBQVM2RyxLQUFLNlosVUFDL0N4RixHQUFhYyxHQUFHOWhCLEVBQVMsWUFBYXFjLElBVTFDb0UsS0FBS21GLGdCQVBZLEtBQ2Y1RSxHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVNUUsS0FBS21FLFlBQVlxQixVQWhLckMsV0FpS1EsSUFBcEJ4RixLQUFLNmdCLFlBQ1A3Z0IsS0FBS3doQixTQUVQeGhCLEtBQUs2Z0IsWUFBYSxDQUFLLEdBRUs3Z0IsS0FBS2loQixJQUFLamhCLEtBQUtnTyxjQUMvQyxDQUNBLElBQUE0QixHQUNFLEdBQUs1UCxLQUFLMlAsYUFHUXBQLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVU1RSxLQUFLbUUsWUFBWXFCLFVBL0t0RCxTQWdMSHhELGlCQUFkLENBUUEsR0FMWWhDLEtBQUs4aEIsaUJBQ2J6bUIsVUFBVTFCLE9BQU80bEIsSUFJakIsaUJBQWtCbDZCLFNBQVNDLGdCQUM3QixJQUFLLE1BQU0vRixJQUFXLEdBQUdaLFVBQVUwRyxTQUFTNkcsS0FBSzZaLFVBQy9DeEYsR0FBYUMsSUFBSWpoQixFQUFTLFlBQWFxYyxJQUczQ29FLEtBQUs4Z0IsZUFBNEIsT0FBSSxFQUNyQzlnQixLQUFLOGdCLGVBQWVsQixLQUFpQixFQUNyQzVmLEtBQUs4Z0IsZUFBZW5CLEtBQWlCLEVBQ3JDM2YsS0FBSzZnQixXQUFhLEtBWWxCN2dCLEtBQUttRixnQkFWWSxLQUNYbkYsS0FBSytoQix5QkFHSi9oQixLQUFLNmdCLFlBQ1I3Z0IsS0FBSzJoQixpQkFFUDNoQixLQUFLNEUsU0FBU3pqQixnQkFBZ0Isb0JBQzlCb2YsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVTVFLEtBQUttRSxZQUFZcUIsVUF6TXBDLFdBeU04RCxHQUVuRHhGLEtBQUtpaEIsSUFBS2poQixLQUFLZ08sY0ExQjdDLENBMkJGLENBQ0EsTUFBQWpqQixHQUNNaVYsS0FBS21TLFNBQ1BuUyxLQUFLbVMsUUFBUXBuQixRQUVqQixDQUdBLGNBQUE2MkIsR0FDRSxPQUFPOWdCLFFBQVFkLEtBQUtnaUIsWUFDdEIsQ0FDQSxjQUFBRixHQUlFLE9BSEs5aEIsS0FBS2loQixNQUNSamhCLEtBQUtpaEIsSUFBTWpoQixLQUFLaWlCLGtCQUFrQmppQixLQUFLZ2hCLGFBQWVoaEIsS0FBS2tpQiwyQkFFdERsaUIsS0FBS2loQixHQUNkLENBQ0EsaUJBQUFnQixDQUFrQjdFLEdBQ2hCLE1BQU02RCxFQUFNamhCLEtBQUttaUIsb0JBQW9CL0UsR0FBU2MsU0FHOUMsSUFBSytDLEVBQ0gsT0FBTyxLQUVUQSxFQUFJNWxCLFVBQVUxQixPQUFPMmxCLEdBQW1CQyxJQUV4QzBCLEVBQUk1bEIsVUFBVTVFLElBQUksTUFBTXVKLEtBQUttRSxZQUFZNUgsYUFDekMsTUFBTTZsQixFQXZ1R0tDLEtBQ2IsR0FDRUEsR0FBVWxnQyxLQUFLbWdDLE1BL0JILElBK0JTbmdDLEtBQUtvZ0MsZ0JBQ25CbDlCLFNBQVNtOUIsZUFBZUgsSUFDakMsT0FBT0EsQ0FBTSxFQW11R0dJLENBQU96aUIsS0FBS21FLFlBQVk1SCxNQUFNMWMsV0FLNUMsT0FKQW9oQyxFQUFJNy9CLGFBQWEsS0FBTWdoQyxHQUNuQnBpQixLQUFLZ08sZUFDUGlULEVBQUk1bEIsVUFBVTVFLElBQUk2b0IsSUFFYjJCLENBQ1QsQ0FDQSxVQUFBeUIsQ0FBV3RGLEdBQ1RwZCxLQUFLZ2hCLFlBQWM1RCxFQUNmcGQsS0FBSzJQLGFBQ1AzUCxLQUFLMmhCLGlCQUNMM2hCLEtBQUs2UCxPQUVULENBQ0EsbUJBQUFzUyxDQUFvQi9FLEdBWWxCLE9BWElwZCxLQUFLK2dCLGlCQUNQL2dCLEtBQUsrZ0IsaUJBQWlCL0MsY0FBY1osR0FFcENwZCxLQUFLK2dCLGlCQUFtQixJQUFJbkQsR0FBZ0IsSUFDdkM1ZCxLQUFLNkUsUUFHUnVZLFVBQ0FDLFdBQVlyZCxLQUFLOGQseUJBQXlCOWQsS0FBSzZFLFFBQVF5YixlQUdwRHRnQixLQUFLK2dCLGdCQUNkLENBQ0Esc0JBQUFtQixHQUNFLE1BQU8sQ0FDTCxDQUFDMUMsSUFBeUJ4ZixLQUFLZ2lCLFlBRW5DLENBQ0EsU0FBQUEsR0FDRSxPQUFPaGlCLEtBQUs4ZCx5QkFBeUI5ZCxLQUFLNkUsUUFBUTJiLFFBQVV4Z0IsS0FBSzRFLFNBQVNwSixhQUFhLHlCQUN6RixDQUdBLDRCQUFBbW5CLENBQTZCdmpCLEdBQzNCLE9BQU9ZLEtBQUttRSxZQUFZbUIsb0JBQW9CbEcsRUFBTVcsZUFBZ0JDLEtBQUs0aUIscUJBQ3pFLENBQ0EsV0FBQTVVLEdBQ0UsT0FBT2hPLEtBQUs2RSxRQUFRdWIsV0FBYXBnQixLQUFLaWhCLEtBQU9qaEIsS0FBS2loQixJQUFJNWxCLFVBQVU3VyxTQUFTODZCLEdBQzNFLENBQ0EsUUFBQTNQLEdBQ0UsT0FBTzNQLEtBQUtpaEIsS0FBT2poQixLQUFLaWhCLElBQUk1bEIsVUFBVTdXLFNBQVMrNkIsR0FDakQsQ0FDQSxhQUFBL00sQ0FBY3lPLEdBQ1osTUFBTXZpQyxFQUFZbWUsR0FBUW1ELEtBQUs2RSxRQUFRbm1CLFVBQVcsQ0FBQ3NoQixLQUFNaWhCLEVBQUtqaEIsS0FBSzRFLFdBQzdEaWUsRUFBYWhELEdBQWNuaEMsRUFBVStsQixlQUMzQyxPQUFPLEdBQW9CekUsS0FBSzRFLFNBQVVxYyxFQUFLamhCLEtBQUs0UyxpQkFBaUJpUSxHQUN2RSxDQUNBLFVBQUE3UCxHQUNFLE1BQU0sT0FDSmhyQixHQUNFZ1ksS0FBSzZFLFFBQ1QsTUFBc0IsaUJBQVg3YyxFQUNGQSxFQUFPOUYsTUFBTSxLQUFLWSxLQUFJbkYsR0FBUzRmLE9BQU9nUSxTQUFTNXZCLEVBQU8sTUFFekMsbUJBQVhxSyxFQUNGaXJCLEdBQWNqckIsRUFBT2lyQixFQUFZalQsS0FBSzRFLFVBRXhDNWMsQ0FDVCxDQUNBLHdCQUFBODFCLENBQXlCVSxHQUN2QixPQUFPM2hCLEdBQVEyaEIsRUFBSyxDQUFDeGUsS0FBSzRFLFVBQzVCLENBQ0EsZ0JBQUFnTyxDQUFpQmlRLEdBQ2YsTUFBTTNQLEVBQXdCLENBQzVCeDBCLFVBQVdta0MsRUFDWHpzQixVQUFXLENBQUMsQ0FDVjlWLEtBQU0sT0FDTm1CLFFBQVMsQ0FDUHVPLG1CQUFvQmdRLEtBQUs2RSxRQUFRN1UscUJBRWxDLENBQ0QxUCxLQUFNLFNBQ05tQixRQUFTLENBQ1B1RyxPQUFRZ1ksS0FBS2dULGVBRWQsQ0FDRDF5QixLQUFNLGtCQUNObUIsUUFBUyxDQUNQd00sU0FBVStSLEtBQUs2RSxRQUFRNVcsV0FFeEIsQ0FDRDNOLEtBQU0sUUFDTm1CLFFBQVMsQ0FDUGxDLFFBQVMsSUFBSXlnQixLQUFLbUUsWUFBWTVILGVBRS9CLENBQ0RqYyxLQUFNLGtCQUNOQyxTQUFTLEVBQ1RDLE1BQU8sYUFDUEMsR0FBSTRKLElBR0YyVixLQUFLOGhCLGlCQUFpQjFnQyxhQUFhLHdCQUF5QmlKLEVBQUsxSixNQUFNakMsVUFBVSxLQUl2RixNQUFPLElBQ0Z3MEIsS0FDQXJXLEdBQVFtRCxLQUFLNkUsUUFBUW1OLGFBQWMsQ0FBQ2tCLElBRTNDLENBQ0EsYUFBQWdPLEdBQ0UsTUFBTTRCLEVBQVc5aUIsS0FBSzZFLFFBQVFqRCxRQUFRMWYsTUFBTSxLQUM1QyxJQUFLLE1BQU0wZixLQUFXa2hCLEVBQ3BCLEdBQWdCLFVBQVpsaEIsRUFDRnJCLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVTVFLEtBQUttRSxZQUFZcUIsVUFqVmxDLFNBaVY0RHhGLEtBQUs2RSxRQUFROUssVUFBVXFGLElBQy9FWSxLQUFLMmlCLDZCQUE2QnZqQixHQUMxQ3VJLFFBQVEsU0FFYixHQTNWVSxXQTJWTi9GLEVBQTRCLENBQ3JDLE1BQU1taEIsRUFBVW5oQixJQUFZK2QsR0FBZ0IzZixLQUFLbUUsWUFBWXFCLFVBblY1QyxjQW1WMEV4RixLQUFLbUUsWUFBWXFCLFVBclY1RixXQXNWVndkLEVBQVdwaEIsSUFBWStkLEdBQWdCM2YsS0FBS21FLFlBQVlxQixVQW5WN0MsY0FtVjJFeEYsS0FBS21FLFlBQVlxQixVQXJWNUYsWUFzVmpCakYsR0FBYWMsR0FBR3JCLEtBQUs0RSxTQUFVbWUsRUFBUy9pQixLQUFLNkUsUUFBUTlLLFVBQVVxRixJQUM3RCxNQUFNa1UsRUFBVXRULEtBQUsyaUIsNkJBQTZCdmpCLEdBQ2xEa1UsRUFBUXdOLGVBQThCLFlBQWYxaEIsRUFBTXFCLEtBQXFCbWYsR0FBZ0JELEtBQWlCLEVBQ25Gck0sRUFBUW1PLFFBQVEsSUFFbEJsaEIsR0FBYWMsR0FBR3JCLEtBQUs0RSxTQUFVb2UsRUFBVWhqQixLQUFLNkUsUUFBUTlLLFVBQVVxRixJQUM5RCxNQUFNa1UsRUFBVXRULEtBQUsyaUIsNkJBQTZCdmpCLEdBQ2xEa1UsRUFBUXdOLGVBQThCLGFBQWYxaEIsRUFBTXFCLEtBQXNCbWYsR0FBZ0JELElBQWlCck0sRUFBUTFPLFNBQVNwZ0IsU0FBUzRhLEVBQU1VLGVBQ3BId1QsRUFBUWtPLFFBQVEsR0FFcEIsQ0FFRnhoQixLQUFLMGhCLGtCQUFvQixLQUNuQjFoQixLQUFLNEUsVUFDUDVFLEtBQUs0UCxNQUNQLEVBRUZyUCxHQUFhYyxHQUFHckIsS0FBSzRFLFNBQVM1SixRQUFReWtCLElBQWlCQyxHQUFrQjFmLEtBQUswaEIsa0JBQ2hGLENBQ0EsU0FBQVAsR0FDRSxNQUFNWCxFQUFReGdCLEtBQUs0RSxTQUFTcEosYUFBYSxTQUNwQ2dsQixJQUdBeGdCLEtBQUs0RSxTQUFTcEosYUFBYSxlQUFrQndFLEtBQUs0RSxTQUFTK1osWUFBWWhaLFFBQzFFM0YsS0FBSzRFLFNBQVN4akIsYUFBYSxhQUFjby9CLEdBRTNDeGdCLEtBQUs0RSxTQUFTeGpCLGFBQWEseUJBQTBCby9CLEdBQ3JEeGdCLEtBQUs0RSxTQUFTempCLGdCQUFnQixTQUNoQyxDQUNBLE1BQUFzZ0MsR0FDTXpoQixLQUFLMlAsWUFBYzNQLEtBQUs2Z0IsV0FDMUI3Z0IsS0FBSzZnQixZQUFhLEdBR3BCN2dCLEtBQUs2Z0IsWUFBYSxFQUNsQjdnQixLQUFLaWpCLGFBQVksS0FDWGpqQixLQUFLNmdCLFlBQ1A3Z0IsS0FBSzZQLE1BQ1AsR0FDQzdQLEtBQUs2RSxRQUFRMGIsTUFBTTFRLE1BQ3hCLENBQ0EsTUFBQTJSLEdBQ014aEIsS0FBSytoQix5QkFHVC9oQixLQUFLNmdCLFlBQWEsRUFDbEI3Z0IsS0FBS2lqQixhQUFZLEtBQ1ZqakIsS0FBSzZnQixZQUNSN2dCLEtBQUs0UCxNQUNQLEdBQ0M1UCxLQUFLNkUsUUFBUTBiLE1BQU0zUSxNQUN4QixDQUNBLFdBQUFxVCxDQUFZcmxCLEVBQVNzbEIsR0FDbkJoVyxhQUFhbE4sS0FBSzRnQixVQUNsQjVnQixLQUFLNGdCLFNBQVcvaUIsV0FBV0QsRUFBU3NsQixFQUN0QyxDQUNBLG9CQUFBbkIsR0FDRSxPQUFPL2tDLE9BQU9taUIsT0FBT2EsS0FBSzhnQixnQkFBZ0IxZixVQUFTLEVBQ3JELENBQ0EsVUFBQXlDLENBQVdDLEdBQ1QsTUFBTXFmLEVBQWlCbmdCLEdBQVlHLGtCQUFrQm5ELEtBQUs0RSxVQUMxRCxJQUFLLE1BQU13ZSxLQUFpQnBtQyxPQUFPNEQsS0FBS3VpQyxHQUNsQzlELEdBQXNCMW9CLElBQUl5c0IsV0FDckJELEVBQWVDLEdBVTFCLE9BUEF0ZixFQUFTLElBQ0pxZixLQUNtQixpQkFBWHJmLEdBQXVCQSxFQUFTQSxFQUFTLENBQUMsR0FFdkRBLEVBQVM5RCxLQUFLK0QsZ0JBQWdCRCxHQUM5QkEsRUFBUzlELEtBQUtnRSxrQkFBa0JGLEdBQ2hDOUQsS0FBS2lFLGlCQUFpQkgsR0FDZkEsQ0FDVCxDQUNBLGlCQUFBRSxDQUFrQkYsR0FjaEIsT0FiQUEsRUFBT3VjLFdBQWlDLElBQXJCdmMsRUFBT3VjLFVBQXNCaDdCLFNBQVM2RyxLQUFPd08sR0FBV29KLEVBQU91YyxXQUN0RCxpQkFBakJ2YyxFQUFPeWMsUUFDaEJ6YyxFQUFPeWMsTUFBUSxDQUNiMVEsS0FBTS9MLEVBQU95YyxNQUNiM1EsS0FBTTlMLEVBQU95YyxRQUdXLGlCQUFqQnpjLEVBQU8wYyxRQUNoQjFjLEVBQU8wYyxNQUFRMWMsRUFBTzBjLE1BQU0zZ0MsWUFFQSxpQkFBbkJpa0IsRUFBT3NaLFVBQ2hCdFosRUFBT3NaLFFBQVV0WixFQUFPc1osUUFBUXY5QixZQUUzQmlrQixDQUNULENBQ0Esa0JBQUE4ZSxHQUNFLE1BQU05ZSxFQUFTLENBQUMsRUFDaEIsSUFBSyxNQUFPaG5CLEVBQUthLEtBQVVYLE9BQU9ta0IsUUFBUW5CLEtBQUs2RSxTQUN6QzdFLEtBQUttRSxZQUFZVCxRQUFRNW1CLEtBQVNhLElBQ3BDbW1CLEVBQU9obkIsR0FBT2EsR0FTbEIsT0FOQW1tQixFQUFPL0osVUFBVyxFQUNsQitKLEVBQU9sQyxRQUFVLFNBS1ZrQyxDQUNULENBQ0EsY0FBQTZkLEdBQ00zaEIsS0FBS21TLFVBQ1BuUyxLQUFLbVMsUUFBUW5aLFVBQ2JnSCxLQUFLbVMsUUFBVSxNQUViblMsS0FBS2loQixNQUNQamhCLEtBQUtpaEIsSUFBSXRuQixTQUNUcUcsS0FBS2loQixJQUFNLEtBRWYsQ0FHQSxzQkFBT3hrQixDQUFnQnFILEdBQ3JCLE9BQU85RCxLQUFLd0gsTUFBSyxXQUNmLE1BQU1uZCxFQUFPcTJCLEdBQVFwYixvQkFBb0J0RixLQUFNOEQsR0FDL0MsR0FBc0IsaUJBQVhBLEVBQVgsQ0FHQSxRQUE0QixJQUFqQnpaLEVBQUt5WixHQUNkLE1BQU0sSUFBSVUsVUFBVSxvQkFBb0JWLE1BRTFDelosRUFBS3laLElBSkwsQ0FLRixHQUNGLEVBT0YzSCxHQUFtQnVrQixJQWNuQixNQUNNMkMsR0FBaUIsa0JBQ2pCQyxHQUFtQixnQkFDbkJDLEdBQVksSUFDYjdDLEdBQVFoZCxRQUNYMFosUUFBUyxHQUNUcDFCLE9BQVEsQ0FBQyxFQUFHLEdBQ1p0SixVQUFXLFFBQ1g4K0IsU0FBVSw4SUFDVjViLFFBQVMsU0FFTDRoQixHQUFnQixJQUNqQjlDLEdBQVEvYyxZQUNYeVosUUFBUyxrQ0FPWCxNQUFNcUcsV0FBZ0IvQyxHQUVwQixrQkFBV2hkLEdBQ1QsT0FBTzZmLEVBQ1QsQ0FDQSxzQkFBVzVmLEdBQ1QsT0FBTzZmLEVBQ1QsQ0FDQSxlQUFXam5CLEdBQ1QsTUE3QlcsU0E4QmIsQ0FHQSxjQUFBcWxCLEdBQ0UsT0FBTzVoQixLQUFLZ2lCLGFBQWVoaUIsS0FBSzBqQixhQUNsQyxDQUdBLHNCQUFBeEIsR0FDRSxNQUFPLENBQ0wsQ0FBQ21CLElBQWlCcmpCLEtBQUtnaUIsWUFDdkIsQ0FBQ3NCLElBQW1CdGpCLEtBQUswakIsY0FFN0IsQ0FDQSxXQUFBQSxHQUNFLE9BQU8xakIsS0FBSzhkLHlCQUF5QjlkLEtBQUs2RSxRQUFRdVksUUFDcEQsQ0FHQSxzQkFBTzNnQixDQUFnQnFILEdBQ3JCLE9BQU85RCxLQUFLd0gsTUFBSyxXQUNmLE1BQU1uZCxFQUFPbzVCLEdBQVFuZSxvQkFBb0J0RixLQUFNOEQsR0FDL0MsR0FBc0IsaUJBQVhBLEVBQVgsQ0FHQSxRQUE0QixJQUFqQnpaLEVBQUt5WixHQUNkLE1BQU0sSUFBSVUsVUFBVSxvQkFBb0JWLE1BRTFDelosRUFBS3laLElBSkwsQ0FLRixHQUNGLEVBT0YzSCxHQUFtQnNuQixJQWNuQixNQUVNRSxHQUFjLGdCQUVkQyxHQUFpQixXQUFXRCxLQUM1QkUsR0FBYyxRQUFRRixLQUN0QkcsR0FBd0IsT0FBT0gsY0FFL0JJLEdBQXNCLFNBRXRCQyxHQUF3QixTQUV4QkMsR0FBcUIsWUFHckJDLEdBQXNCLEdBQUdELG1CQUErQ0EsdUJBR3hFRSxHQUFZLENBQ2hCbjhCLE9BQVEsS0FFUm84QixXQUFZLGVBQ1pDLGNBQWMsRUFDZDkzQixPQUFRLEtBQ1IrM0IsVUFBVyxDQUFDLEdBQUssR0FBSyxJQUVsQkMsR0FBZ0IsQ0FDcEJ2OEIsT0FBUSxnQkFFUm84QixXQUFZLFNBQ1pDLGFBQWMsVUFDZDkzQixPQUFRLFVBQ1IrM0IsVUFBVyxTQU9iLE1BQU1FLFdBQWtCOWYsR0FDdEIsV0FBQVAsQ0FBWTVrQixFQUFTdWtCLEdBQ25CYSxNQUFNcGxCLEVBQVN1a0IsR0FHZjlELEtBQUt5a0IsYUFBZSxJQUFJdnpCLElBQ3hCOE8sS0FBSzBrQixvQkFBc0IsSUFBSXh6QixJQUMvQjhPLEtBQUsya0IsYUFBNkQsWUFBOUMxL0IsaUJBQWlCK2EsS0FBSzRFLFVBQVU1WSxVQUEwQixLQUFPZ1UsS0FBSzRFLFNBQzFGNUUsS0FBSzRrQixjQUFnQixLQUNyQjVrQixLQUFLNmtCLFVBQVksS0FDakI3a0IsS0FBSzhrQixvQkFBc0IsQ0FDekJDLGdCQUFpQixFQUNqQkMsZ0JBQWlCLEdBRW5CaGxCLEtBQUtpbEIsU0FDUCxDQUdBLGtCQUFXdmhCLEdBQ1QsT0FBT3lnQixFQUNULENBQ0Esc0JBQVd4Z0IsR0FDVCxPQUFPNGdCLEVBQ1QsQ0FDQSxlQUFXaG9CLEdBQ1QsTUFoRVcsV0FpRWIsQ0FHQSxPQUFBMG9CLEdBQ0VqbEIsS0FBS2tsQixtQ0FDTGxsQixLQUFLbWxCLDJCQUNEbmxCLEtBQUs2a0IsVUFDUDdrQixLQUFLNmtCLFVBQVVPLGFBRWZwbEIsS0FBSzZrQixVQUFZN2tCLEtBQUtxbEIsa0JBRXhCLElBQUssTUFBTUMsS0FBV3RsQixLQUFLMGtCLG9CQUFvQnZsQixTQUM3Q2EsS0FBSzZrQixVQUFVVSxRQUFRRCxFQUUzQixDQUNBLE9BQUF2Z0IsR0FDRS9FLEtBQUs2a0IsVUFBVU8sYUFDZnpnQixNQUFNSSxTQUNSLENBR0EsaUJBQUFmLENBQWtCRixHQVNoQixPQVBBQSxFQUFPdlgsT0FBU21PLEdBQVdvSixFQUFPdlgsU0FBV2xILFNBQVM2RyxLQUd0RDRYLEVBQU9zZ0IsV0FBYXRnQixFQUFPOWIsT0FBUyxHQUFHOGIsRUFBTzliLG9CQUFzQjhiLEVBQU9zZ0IsV0FDM0MsaUJBQXJCdGdCLEVBQU93Z0IsWUFDaEJ4Z0IsRUFBT3dnQixVQUFZeGdCLEVBQU93Z0IsVUFBVXBpQyxNQUFNLEtBQUtZLEtBQUluRixHQUFTNGYsT0FBT0MsV0FBVzdmLE1BRXpFbW1CLENBQ1QsQ0FDQSx3QkFBQXFoQixHQUNPbmxCLEtBQUs2RSxRQUFRd2YsZUFLbEI5akIsR0FBYUMsSUFBSVIsS0FBSzZFLFFBQVF0WSxPQUFRczNCLElBQ3RDdGpCLEdBQWFjLEdBQUdyQixLQUFLNkUsUUFBUXRZLE9BQVFzM0IsR0FBYUcsSUFBdUI1a0IsSUFDdkUsTUFBTW9tQixFQUFvQnhsQixLQUFLMGtCLG9CQUFvQnZuQyxJQUFJaWlCLEVBQU03UyxPQUFPdEIsTUFDcEUsR0FBSXU2QixFQUFtQixDQUNyQnBtQixFQUFNa0QsaUJBQ04sTUFBTTNHLEVBQU9xRSxLQUFLMmtCLGNBQWdCL2tDLE9BQzVCbUUsRUFBU3loQyxFQUFrQm5oQyxVQUFZMmIsS0FBSzRFLFNBQVN2Z0IsVUFDM0QsR0FBSXNYLEVBQUs4cEIsU0FLUCxZQUpBOXBCLEVBQUs4cEIsU0FBUyxDQUNaOWpDLElBQUtvQyxFQUNMMmhDLFNBQVUsV0FNZC9wQixFQUFLbFEsVUFBWTFILENBQ25CLEtBRUosQ0FDQSxlQUFBc2hDLEdBQ0UsTUFBTTVqQyxFQUFVLENBQ2RrYSxLQUFNcUUsS0FBSzJrQixhQUNYTCxVQUFXdGtCLEtBQUs2RSxRQUFReWYsVUFDeEJGLFdBQVlwa0IsS0FBSzZFLFFBQVF1ZixZQUUzQixPQUFPLElBQUl1QixzQkFBcUJ4a0IsR0FBV25CLEtBQUs0bEIsa0JBQWtCemtCLElBQVUxZixFQUM5RSxDQUdBLGlCQUFBbWtDLENBQWtCemtCLEdBQ2hCLE1BQU0wa0IsRUFBZ0JsSSxHQUFTM2QsS0FBS3lrQixhQUFhdG5DLElBQUksSUFBSXdnQyxFQUFNcHhCLE9BQU80TixNQUNoRXViLEVBQVdpSSxJQUNmM2QsS0FBSzhrQixvQkFBb0JDLGdCQUFrQnBILEVBQU1weEIsT0FBT2xJLFVBQ3hEMmIsS0FBSzhsQixTQUFTRCxFQUFjbEksR0FBTyxFQUUvQnFILEdBQW1CaGxCLEtBQUsya0IsY0FBZ0J0L0IsU0FBU0MsaUJBQWlCbUcsVUFDbEVzNkIsRUFBa0JmLEdBQW1CaGxCLEtBQUs4a0Isb0JBQW9CRSxnQkFDcEVobEIsS0FBSzhrQixvQkFBb0JFLGdCQUFrQkEsRUFDM0MsSUFBSyxNQUFNckgsS0FBU3hjLEVBQVMsQ0FDM0IsSUFBS3djLEVBQU1xSSxlQUFnQixDQUN6QmhtQixLQUFLNGtCLGNBQWdCLEtBQ3JCNWtCLEtBQUtpbUIsa0JBQWtCSixFQUFjbEksSUFDckMsUUFDRixDQUNBLE1BQU11SSxFQUEyQnZJLEVBQU1weEIsT0FBT2xJLFdBQWEyYixLQUFLOGtCLG9CQUFvQkMsZ0JBRXBGLEdBQUlnQixHQUFtQkcsR0FHckIsR0FGQXhRLEVBQVNpSSxJQUVKcUgsRUFDSCxZQU1DZSxHQUFvQkcsR0FDdkJ4USxFQUFTaUksRUFFYixDQUNGLENBQ0EsZ0NBQUF1SCxHQUNFbGxCLEtBQUt5a0IsYUFBZSxJQUFJdnpCLElBQ3hCOE8sS0FBSzBrQixvQkFBc0IsSUFBSXh6QixJQUMvQixNQUFNaTFCLEVBQWN0Z0IsR0FBZTFULEtBQUs2eEIsR0FBdUJoa0IsS0FBSzZFLFFBQVF0WSxRQUM1RSxJQUFLLE1BQU02NUIsS0FBVUQsRUFBYSxDQUVoQyxJQUFLQyxFQUFPbjdCLE1BQVFpUSxHQUFXa3JCLEdBQzdCLFNBRUYsTUFBTVosRUFBb0IzZixHQUFlQyxRQUFRdWdCLFVBQVVELEVBQU9uN0IsTUFBTytVLEtBQUs0RSxVQUcxRWpLLEdBQVU2cUIsS0FDWnhsQixLQUFLeWtCLGFBQWExeUIsSUFBSXMwQixVQUFVRCxFQUFPbjdCLE1BQU9tN0IsR0FDOUNwbUIsS0FBSzBrQixvQkFBb0IzeUIsSUFBSXEwQixFQUFPbjdCLEtBQU11NkIsR0FFOUMsQ0FDRixDQUNBLFFBQUFNLENBQVN2NUIsR0FDSHlULEtBQUs0a0IsZ0JBQWtCcjRCLElBRzNCeVQsS0FBS2ltQixrQkFBa0JqbUIsS0FBSzZFLFFBQVF0WSxRQUNwQ3lULEtBQUs0a0IsY0FBZ0JyNEIsRUFDckJBLEVBQU84TyxVQUFVNUUsSUFBSXN0QixJQUNyQi9qQixLQUFLc21CLGlCQUFpQi81QixHQUN0QmdVLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVVnZixHQUFnQixDQUNsRDlqQixjQUFldlQsSUFFbkIsQ0FDQSxnQkFBQSs1QixDQUFpQi81QixHQUVmLEdBQUlBLEVBQU84TyxVQUFVN1csU0E5TFEsaUJBK0wzQnFoQixHQUFlQyxRQXJMYyxtQkFxTHNCdlosRUFBT3lPLFFBdEx0QyxjQXNMa0VLLFVBQVU1RSxJQUFJc3RCLFNBR3RHLElBQUssTUFBTXdDLEtBQWExZ0IsR0FBZUksUUFBUTFaLEVBOUxuQixxQkFpTTFCLElBQUssTUFBTXhKLEtBQVE4aUIsR0FBZU0sS0FBS29nQixFQUFXckMsSUFDaERuaEMsRUFBS3NZLFVBQVU1RSxJQUFJc3RCLEdBR3pCLENBQ0EsaUJBQUFrQyxDQUFrQnhoQyxHQUNoQkEsRUFBTzRXLFVBQVUxQixPQUFPb3FCLElBQ3hCLE1BQU15QyxFQUFjM2dCLEdBQWUxVCxLQUFLLEdBQUc2eEIsTUFBeUJELEtBQXVCdC9CLEdBQzNGLElBQUssTUFBTTlFLEtBQVE2bUMsRUFDakI3bUMsRUFBSzBiLFVBQVUxQixPQUFPb3FCLEdBRTFCLENBR0Esc0JBQU90bkIsQ0FBZ0JxSCxHQUNyQixPQUFPOUQsS0FBS3dILE1BQUssV0FDZixNQUFNbmQsRUFBT202QixHQUFVbGYsb0JBQW9CdEYsS0FBTThELEdBQ2pELEdBQXNCLGlCQUFYQSxFQUFYLENBR0EsUUFBcUIvSyxJQUFqQjFPLEVBQUt5WixJQUF5QkEsRUFBT3JDLFdBQVcsTUFBbUIsZ0JBQVhxQyxFQUMxRCxNQUFNLElBQUlVLFVBQVUsb0JBQW9CVixNQUUxQ3paLEVBQUt5WixJQUpMLENBS0YsR0FDRixFQU9GdkQsR0FBYWMsR0FBR3poQixPQUFRa2tDLElBQXVCLEtBQzdDLElBQUssTUFBTTJDLEtBQU81Z0IsR0FBZTFULEtBcE9ULDBCQXFPdEJxeUIsR0FBVWxmLG9CQUFvQm1oQixFQUNoQyxJQU9GdHFCLEdBQW1CcW9CLElBY25CLE1BRU1rQyxHQUFjLFVBQ2RDLEdBQWUsT0FBT0QsS0FDdEJFLEdBQWlCLFNBQVNGLEtBQzFCRyxHQUFlLE9BQU9ILEtBQ3RCSSxHQUFnQixRQUFRSixLQUN4QkssR0FBdUIsUUFBUUwsS0FDL0JNLEdBQWdCLFVBQVVOLEtBQzFCTyxHQUFzQixPQUFPUCxLQUM3QlEsR0FBaUIsWUFDakJDLEdBQWtCLGFBQ2xCQyxHQUFlLFVBQ2ZDLEdBQWlCLFlBQ2pCQyxHQUFXLE9BQ1hDLEdBQVUsTUFDVkMsR0FBb0IsU0FDcEJDLEdBQW9CLE9BQ3BCQyxHQUFvQixPQUVwQkMsR0FBMkIsbUJBRTNCQyxHQUErQixRQUFRRCxNQUl2Q0UsR0FBdUIsMkVBQ3ZCQyxHQUFzQixZQUZPRix1QkFBaURBLG1CQUE2Q0EsT0FFL0VDLEtBQzVDRSxHQUE4QixJQUFJUCw4QkFBNkNBLCtCQUE4Q0EsNEJBTW5JLE1BQU1RLFdBQVl0akIsR0FDaEIsV0FBQVAsQ0FBWTVrQixHQUNWb2xCLE1BQU1wbEIsR0FDTnlnQixLQUFLb1MsUUFBVXBTLEtBQUs0RSxTQUFTNUosUUFkTix1Q0FlbEJnRixLQUFLb1MsVUFPVnBTLEtBQUtpb0Isc0JBQXNCam9CLEtBQUtvUyxRQUFTcFMsS0FBS2tvQixnQkFDOUMzbkIsR0FBYWMsR0FBR3JCLEtBQUs0RSxTQUFVb2lCLElBQWU1bkIsR0FBU1ksS0FBSzZNLFNBQVN6TixLQUN2RSxDQUdBLGVBQVc3QyxHQUNULE1BbkRXLEtBb0RiLENBR0EsSUFBQXNULEdBRUUsTUFBTXNZLEVBQVlub0IsS0FBSzRFLFNBQ3ZCLEdBQUk1RSxLQUFLb29CLGNBQWNELEdBQ3JCLE9BSUYsTUFBTUUsRUFBU3JvQixLQUFLc29CLGlCQUNkQyxFQUFZRixFQUFTOW5CLEdBQWFxQixRQUFReW1CLEVBQVExQixHQUFjLENBQ3BFN21CLGNBQWVxb0IsSUFDWixLQUNhNW5CLEdBQWFxQixRQUFRdW1CLEVBQVd0QixHQUFjLENBQzlEL21CLGNBQWV1b0IsSUFFSHJtQixrQkFBb0J1bUIsR0FBYUEsRUFBVXZtQixtQkFHekRoQyxLQUFLd29CLFlBQVlILEVBQVFGLEdBQ3pCbm9CLEtBQUt5b0IsVUFBVU4sRUFBV0UsR0FDNUIsQ0FHQSxTQUFBSSxDQUFVbHBDLEVBQVNtcEMsR0FDWm5wQyxJQUdMQSxFQUFROGIsVUFBVTVFLElBQUkrd0IsSUFDdEJ4bkIsS0FBS3lvQixVQUFVNWlCLEdBQWVjLHVCQUF1QnBuQixJQWNyRHlnQixLQUFLbUYsZ0JBWlksS0FDc0IsUUFBakM1bEIsRUFBUWljLGFBQWEsU0FJekJqYyxFQUFRNEIsZ0JBQWdCLFlBQ3hCNUIsRUFBUTZCLGFBQWEsaUJBQWlCLEdBQ3RDNGUsS0FBSzJvQixnQkFBZ0JwcEMsR0FBUyxHQUM5QmdoQixHQUFhcUIsUUFBUXJpQixFQUFTdW5DLEdBQWUsQ0FDM0NobkIsY0FBZTRvQixLQVBmbnBDLEVBQVE4YixVQUFVNUUsSUFBSWl4QixHQVF0QixHQUUwQm5vQyxFQUFTQSxFQUFROGIsVUFBVTdXLFNBQVNpakMsS0FDcEUsQ0FDQSxXQUFBZSxDQUFZanBDLEVBQVNtcEMsR0FDZG5wQyxJQUdMQSxFQUFROGIsVUFBVTFCLE9BQU82dEIsSUFDekJqb0MsRUFBUXE3QixPQUNSNWEsS0FBS3dvQixZQUFZM2lCLEdBQWVjLHVCQUF1QnBuQixJQWN2RHlnQixLQUFLbUYsZ0JBWlksS0FDc0IsUUFBakM1bEIsRUFBUWljLGFBQWEsU0FJekJqYyxFQUFRNkIsYUFBYSxpQkFBaUIsR0FDdEM3QixFQUFRNkIsYUFBYSxXQUFZLE1BQ2pDNGUsS0FBSzJvQixnQkFBZ0JwcEMsR0FBUyxHQUM5QmdoQixHQUFhcUIsUUFBUXJpQixFQUFTcW5DLEdBQWdCLENBQzVDOW1CLGNBQWU0b0IsS0FQZm5wQyxFQUFROGIsVUFBVTFCLE9BQU8rdEIsR0FRekIsR0FFMEJub0MsRUFBU0EsRUFBUThiLFVBQVU3VyxTQUFTaWpDLEtBQ3BFLENBQ0EsUUFBQTVhLENBQVN6TixHQUNQLElBQUssQ0FBQzhuQixHQUFnQkMsR0FBaUJDLEdBQWNDLEdBQWdCQyxHQUFVQyxJQUFTbm1CLFNBQVNoQyxFQUFNdGlCLEtBQ3JHLE9BRUZzaUIsRUFBTTBVLGtCQUNOMVUsRUFBTWtELGlCQUNOLE1BQU15RCxFQUFXL0YsS0FBS2tvQixlQUFlL2hDLFFBQU81RyxJQUFZMmIsR0FBVzNiLEtBQ25FLElBQUlxcEMsRUFDSixHQUFJLENBQUN0QixHQUFVQyxJQUFTbm1CLFNBQVNoQyxFQUFNdGlCLEtBQ3JDOHJDLEVBQW9CN2lCLEVBQVMzRyxFQUFNdGlCLE1BQVF3cUMsR0FBVyxFQUFJdmhCLEVBQVNyVixPQUFTLE9BQ3ZFLENBQ0wsTUFBTThjLEVBQVMsQ0FBQzJaLEdBQWlCRSxJQUFnQmptQixTQUFTaEMsRUFBTXRpQixLQUNoRThyQyxFQUFvQjlxQixHQUFxQmlJLEVBQVUzRyxFQUFNN1MsT0FBUWloQixHQUFRLEVBQzNFLENBQ0lvYixJQUNGQSxFQUFrQm5XLE1BQU0sQ0FDdEJvVyxlQUFlLElBRWpCYixHQUFJMWlCLG9CQUFvQnNqQixHQUFtQi9ZLE9BRS9DLENBQ0EsWUFBQXFZLEdBRUUsT0FBT3JpQixHQUFlMVQsS0FBSzIxQixHQUFxQjluQixLQUFLb1MsUUFDdkQsQ0FDQSxjQUFBa1csR0FDRSxPQUFPdG9CLEtBQUtrb0IsZUFBZS8xQixNQUFLek4sR0FBU3NiLEtBQUtvb0IsY0FBYzFqQyxNQUFXLElBQ3pFLENBQ0EscUJBQUF1akMsQ0FBc0J4akMsRUFBUXNoQixHQUM1Qi9GLEtBQUs4b0IseUJBQXlCcmtDLEVBQVEsT0FBUSxXQUM5QyxJQUFLLE1BQU1DLEtBQVNxaEIsRUFDbEIvRixLQUFLK29CLDZCQUE2QnJrQyxFQUV0QyxDQUNBLDRCQUFBcWtDLENBQTZCcmtDLEdBQzNCQSxFQUFRc2IsS0FBS2dwQixpQkFBaUJ0a0MsR0FDOUIsTUFBTXVrQyxFQUFXanBCLEtBQUtvb0IsY0FBYzFqQyxHQUM5QndrQyxFQUFZbHBCLEtBQUttcEIsaUJBQWlCemtDLEdBQ3hDQSxFQUFNdEQsYUFBYSxnQkFBaUI2bkMsR0FDaENDLElBQWN4a0MsR0FDaEJzYixLQUFLOG9CLHlCQUF5QkksRUFBVyxPQUFRLGdCQUU5Q0QsR0FDSHZrQyxFQUFNdEQsYUFBYSxXQUFZLE1BRWpDNGUsS0FBSzhvQix5QkFBeUJwa0MsRUFBTyxPQUFRLE9BRzdDc2IsS0FBS29wQixtQ0FBbUMxa0MsRUFDMUMsQ0FDQSxrQ0FBQTBrQyxDQUFtQzFrQyxHQUNqQyxNQUFNNkgsRUFBU3NaLEdBQWVjLHVCQUF1QmppQixHQUNoRDZILElBR0x5VCxLQUFLOG9CLHlCQUF5QnY4QixFQUFRLE9BQVEsWUFDMUM3SCxFQUFNeVYsSUFDUjZGLEtBQUs4b0IseUJBQXlCdjhCLEVBQVEsa0JBQW1CLEdBQUc3SCxFQUFNeVYsTUFFdEUsQ0FDQSxlQUFBd3VCLENBQWdCcHBDLEVBQVM4cEMsR0FDdkIsTUFBTUgsRUFBWWxwQixLQUFLbXBCLGlCQUFpQjVwQyxHQUN4QyxJQUFLMnBDLEVBQVU3dEIsVUFBVTdXLFNBcEtOLFlBcUtqQixPQUVGLE1BQU1takIsRUFBUyxDQUFDNU4sRUFBVW9hLEtBQ3hCLE1BQU01MEIsRUFBVXNtQixHQUFlQyxRQUFRL0wsRUFBVW12QixHQUM3QzNwQyxHQUNGQSxFQUFROGIsVUFBVXNNLE9BQU93TSxFQUFXa1YsRUFDdEMsRUFFRjFoQixFQUFPZ2dCLEdBQTBCSCxJQUNqQzdmLEVBNUsyQixpQkE0S0krZixJQUMvQndCLEVBQVU5bkMsYUFBYSxnQkFBaUJpb0MsRUFDMUMsQ0FDQSx3QkFBQVAsQ0FBeUJ2cEMsRUFBU3dDLEVBQVdwRSxHQUN0QzRCLEVBQVFnYyxhQUFheFosSUFDeEJ4QyxFQUFRNkIsYUFBYVcsRUFBV3BFLEVBRXBDLENBQ0EsYUFBQXlxQyxDQUFjOVksR0FDWixPQUFPQSxFQUFLalUsVUFBVTdXLFNBQVNnakMsR0FDakMsQ0FHQSxnQkFBQXdCLENBQWlCMVosR0FDZixPQUFPQSxFQUFLdEosUUFBUThoQixJQUF1QnhZLEVBQU96SixHQUFlQyxRQUFRZ2lCLEdBQXFCeFksRUFDaEcsQ0FHQSxnQkFBQTZaLENBQWlCN1osR0FDZixPQUFPQSxFQUFLdFUsUUE1TE8sZ0NBNExvQnNVLENBQ3pDLENBR0Esc0JBQU83UyxDQUFnQnFILEdBQ3JCLE9BQU85RCxLQUFLd0gsTUFBSyxXQUNmLE1BQU1uZCxFQUFPMjlCLEdBQUkxaUIsb0JBQW9CdEYsTUFDckMsR0FBc0IsaUJBQVg4RCxFQUFYLENBR0EsUUFBcUIvSyxJQUFqQjFPLEVBQUt5WixJQUF5QkEsRUFBT3JDLFdBQVcsTUFBbUIsZ0JBQVhxQyxFQUMxRCxNQUFNLElBQUlVLFVBQVUsb0JBQW9CVixNQUUxQ3paLEVBQUt5WixJQUpMLENBS0YsR0FDRixFQU9GdkQsR0FBYWMsR0FBR2hjLFNBQVUwaEMsR0FBc0JjLElBQXNCLFNBQVV6b0IsR0FDMUUsQ0FBQyxJQUFLLFFBQVFnQyxTQUFTcEIsS0FBS2lILFVBQzlCN0gsRUFBTWtELGlCQUVKcEgsR0FBVzhFLE9BR2Znb0IsR0FBSTFpQixvQkFBb0J0RixNQUFNNlAsTUFDaEMsSUFLQXRQLEdBQWFjLEdBQUd6aEIsT0FBUXFuQyxJQUFxQixLQUMzQyxJQUFLLE1BQU0xbkMsS0FBV3NtQixHQUFlMVQsS0FBSzQxQixJQUN4Q0MsR0FBSTFpQixvQkFBb0IvbEIsRUFDMUIsSUFNRjRjLEdBQW1CNnJCLElBY25CLE1BRU1oakIsR0FBWSxZQUNac2tCLEdBQWtCLFlBQVl0a0IsS0FDOUJ1a0IsR0FBaUIsV0FBV3ZrQixLQUM1QndrQixHQUFnQixVQUFVeGtCLEtBQzFCeWtCLEdBQWlCLFdBQVd6a0IsS0FDNUIwa0IsR0FBYSxPQUFPMWtCLEtBQ3BCMmtCLEdBQWUsU0FBUzNrQixLQUN4QjRrQixHQUFhLE9BQU81a0IsS0FDcEI2a0IsR0FBYyxRQUFRN2tCLEtBRXRCOGtCLEdBQWtCLE9BQ2xCQyxHQUFrQixPQUNsQkMsR0FBcUIsVUFDckJybUIsR0FBYyxDQUNsQnljLFVBQVcsVUFDWDZKLFNBQVUsVUFDVjFKLE1BQU8sVUFFSDdjLEdBQVUsQ0FDZDBjLFdBQVcsRUFDWDZKLFVBQVUsRUFDVjFKLE1BQU8sS0FPVCxNQUFNMkosV0FBY3hsQixHQUNsQixXQUFBUCxDQUFZNWtCLEVBQVN1a0IsR0FDbkJhLE1BQU1wbEIsRUFBU3VrQixHQUNmOUQsS0FBSzRnQixTQUFXLEtBQ2hCNWdCLEtBQUttcUIsc0JBQXVCLEVBQzVCbnFCLEtBQUtvcUIseUJBQTBCLEVBQy9CcHFCLEtBQUtraEIsZUFDUCxDQUdBLGtCQUFXeGQsR0FDVCxPQUFPQSxFQUNULENBQ0Esc0JBQVdDLEdBQ1QsT0FBT0EsRUFDVCxDQUNBLGVBQVdwSCxHQUNULE1BL0NTLE9BZ0RYLENBR0EsSUFBQXNULEdBQ29CdFAsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVWdsQixJQUN4QzVuQixtQkFHZGhDLEtBQUtxcUIsZ0JBQ0RycUIsS0FBSzZFLFFBQVF1YixXQUNmcGdCLEtBQUs0RSxTQUFTdkosVUFBVTVFLElBL0NOLFFBc0RwQnVKLEtBQUs0RSxTQUFTdkosVUFBVTFCLE9BQU9td0IsSUFDL0JqdUIsR0FBT21FLEtBQUs0RSxVQUNaNUUsS0FBSzRFLFNBQVN2SixVQUFVNUUsSUFBSXN6QixHQUFpQkMsSUFDN0NocUIsS0FBS21GLGdCQVJZLEtBQ2ZuRixLQUFLNEUsU0FBU3ZKLFVBQVUxQixPQUFPcXdCLElBQy9CenBCLEdBQWFxQixRQUFRNUIsS0FBSzRFLFNBQVVpbEIsSUFDcEM3cEIsS0FBS3NxQixvQkFBb0IsR0FLR3RxQixLQUFLNEUsU0FBVTVFLEtBQUs2RSxRQUFRdWIsV0FDNUQsQ0FDQSxJQUFBeFEsR0FDTzVQLEtBQUt1cUIsWUFHUWhxQixHQUFhcUIsUUFBUTVCLEtBQUs0RSxTQUFVOGtCLElBQ3hDMW5CLG1CQVFkaEMsS0FBSzRFLFNBQVN2SixVQUFVNUUsSUFBSXV6QixJQUM1QmhxQixLQUFLbUYsZ0JBTlksS0FDZm5GLEtBQUs0RSxTQUFTdkosVUFBVTVFLElBQUlxekIsSUFDNUI5cEIsS0FBSzRFLFNBQVN2SixVQUFVMUIsT0FBT3F3QixHQUFvQkQsSUFDbkR4cEIsR0FBYXFCLFFBQVE1QixLQUFLNEUsU0FBVStrQixHQUFhLEdBR3JCM3BCLEtBQUs0RSxTQUFVNUUsS0FBSzZFLFFBQVF1YixZQUM1RCxDQUNBLE9BQUFyYixHQUNFL0UsS0FBS3FxQixnQkFDRHJxQixLQUFLdXFCLFdBQ1B2cUIsS0FBSzRFLFNBQVN2SixVQUFVMUIsT0FBT293QixJQUVqQ3BsQixNQUFNSSxTQUNSLENBQ0EsT0FBQXdsQixHQUNFLE9BQU92cUIsS0FBSzRFLFNBQVN2SixVQUFVN1csU0FBU3VsQyxHQUMxQyxDQUlBLGtCQUFBTyxHQUNPdHFCLEtBQUs2RSxRQUFRb2xCLFdBR2RqcUIsS0FBS21xQixzQkFBd0JucUIsS0FBS29xQiwwQkFHdENwcUIsS0FBSzRnQixTQUFXL2lCLFlBQVcsS0FDekJtQyxLQUFLNFAsTUFBTSxHQUNWNVAsS0FBSzZFLFFBQVEwYixRQUNsQixDQUNBLGNBQUFpSyxDQUFlcHJCLEVBQU9xckIsR0FDcEIsT0FBUXJyQixFQUFNcUIsTUFDWixJQUFLLFlBQ0wsSUFBSyxXQUVEVCxLQUFLbXFCLHFCQUF1Qk0sRUFDNUIsTUFFSixJQUFLLFVBQ0wsSUFBSyxXQUVEenFCLEtBQUtvcUIsd0JBQTBCSyxFQUlyQyxHQUFJQSxFQUVGLFlBREF6cUIsS0FBS3FxQixnQkFHUCxNQUFNNWMsRUFBY3JPLEVBQU1VLGNBQ3RCRSxLQUFLNEUsV0FBYTZJLEdBQWV6TixLQUFLNEUsU0FBU3BnQixTQUFTaXBCLElBRzVEek4sS0FBS3NxQixvQkFDUCxDQUNBLGFBQUFwSixHQUNFM2dCLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVTBrQixJQUFpQmxxQixHQUFTWSxLQUFLd3FCLGVBQWVwckIsR0FBTyxLQUNwRm1CLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVTJrQixJQUFnQm5xQixHQUFTWSxLQUFLd3FCLGVBQWVwckIsR0FBTyxLQUNuRm1CLEdBQWFjLEdBQUdyQixLQUFLNEUsU0FBVTRrQixJQUFlcHFCLEdBQVNZLEtBQUt3cUIsZUFBZXByQixHQUFPLEtBQ2xGbUIsR0FBYWMsR0FBR3JCLEtBQUs0RSxTQUFVNmtCLElBQWdCcnFCLEdBQVNZLEtBQUt3cUIsZUFBZXByQixHQUFPLElBQ3JGLENBQ0EsYUFBQWlyQixHQUNFbmQsYUFBYWxOLEtBQUs0Z0IsVUFDbEI1Z0IsS0FBSzRnQixTQUFXLElBQ2xCLENBR0Esc0JBQU9ua0IsQ0FBZ0JxSCxHQUNyQixPQUFPOUQsS0FBS3dILE1BQUssV0FDZixNQUFNbmQsRUFBTzYvQixHQUFNNWtCLG9CQUFvQnRGLEtBQU04RCxHQUM3QyxHQUFzQixpQkFBWEEsRUFBcUIsQ0FDOUIsUUFBNEIsSUFBakJ6WixFQUFLeVosR0FDZCxNQUFNLElBQUlVLFVBQVUsb0JBQW9CVixNQUUxQ3paLEVBQUt5WixHQUFROUQsS0FDZixDQUNGLEdBQ0YsRUM5MElGLFNBQVMwcUIsR0FBaUJDLEdBQ3RCLE9BQU8sSUFBSS94QixTQUFRLENBQUNDLEVBQVMreEIsS0FFekJELEVBQVFFLFdBQWFGLEVBQVFHLFVBQVksSUFBTWp5QixFQUFROHhCLEVBQVFwMEIsUUFFL0RvMEIsRUFBUUksUUFBVUosRUFBUUssUUFBVSxJQUFNSixFQUFPRCxFQUFRbHhCLE1BQU0sR0FFdkUsQ0FPQSxJQUFJd3hCLEdBQ0osU0FBU0MsS0FJTCxPQUhLRCxLQUNEQSxHQVRSLFNBQXFCRSxFQUFRQyxHQUN6QixNQUFNVCxFQUFVVSxVQUFVaEMsS0FRWSxnQkFQdENzQixFQUFRVyxnQkFBa0IsSUFBTVgsRUFBUXAwQixPQUFPZzFCLGtCQUFrQkgsR0FDakUsTUFBTUksRUFBTWQsR0FBaUJDLEdBQzdCLE1BQU8sQ0FBQ2MsRUFBUXB2QixJQUFhbXZCLEVBQUkxeUIsTUFBTTR5QixHQUFPcnZCLEVBQVNxdkIsRUFBR0MsWUFBWVAsRUFBV0ssR0FBUUcsWUFBWVIsS0FDekcsQ0FJOEJTLENBQVksRUFBZ0IsV0FFL0NaLEVBQ1gsQ0FpQkEsU0FBU2w1QixHQUFJalYsRUFBS2EsRUFBT211QyxFQUFjWixNQUNuQyxPQUFPWSxFQUFZLGFBQWNDLElBQzdCQSxFQUFNQyxJQUFJcnVDLEVBQU9iLEdBQ1Y0dEMsR0FBaUJxQixFQUFNSixlQUV0QyxDQ3hDZSxTQUFTTSxHQUFheHJCLEdBQ2pDLEdBQVksT0FBUkEsRUFBZSxPQUFPLEVBQzFCLElBQ0ksT0FBT3lyQixjQUFjQyxTQUFrQixPQUFSMXJCLEVBQWlCLGdCQUFrQixhQUN0RSxDQUFFLE1BQU8yckIsR0FFTCxPQURBNXlCLFFBQVFDLE1BQU0yeUIsRUFBSyxrQ0FDWixDQUNYLENBQ0osQ0YyMElBdmxCLEdBQXFCcWpCLElBTXJCL3RCLEdBQW1CK3RCLCtTR3QxSW5CLE1BQU1tQyxHQUFNLENBQ1IsS0FBUSxDQUNKLE1BQVVobkMsU0FBUytDLGNBQWMsZUFDakMsT0FBVy9DLFNBQVMrQyxjQUFjLGlCQUV0QyxLQUFTL0MsU0FBUytDLGNBQWMsZUFHcEN4SSxPQUFPMHNDLE9BQVMsSUFBWSxRQUFELG1DQUN2QixJQUFJL3lCLEVBQTJCLFFBQXBCLFFGYWYsU0FBYXpjLEVBQUtndkMsRUFBY1osTUFDNUIsT0FBT1ksRUFBWSxZQUFhQyxHQUFVckIsR0FBaUJxQixFQUFNNXVDLElBQUlMLEtBQ3pFLENFZnFCLENBQU8sZUFBTyxRQUFJLElBQ25DdXZDLEdBQUk5eUIsS0FBSzFWLE1BQU1sRyxNQUFRNGIsRUFDdkI4eUIsR0FBSTl5QixLQUFLeFYsT0FBT3BHLE1BQVE0YixFQUN4QkMsUUFBUSt5QixJQUFJaHpCLEdBRVo4eUIsR0FBSTl5QixLQUFLMVYsTUFBTTJvQyxRQUFVSCxHQUFJOXlCLEtBQUsxVixNQUFNNG9DLFFBQVVKLEdBQUk5eUIsS0FBSzFWLE1BQU02b0MsU0FBVyxJQUFZLFFBQUQsbUNBQzdFLEdBQU8sT0FBUUwsR0FBSTl5QixLQUFLMVYsTUFBTWxHLE9BQ3BDMHVDLEdBQUk5eUIsS0FBS3hWLE9BQU9wRyxNQUFRMHVDLEdBQUk5eUIsS0FBSzFWLE1BQU1sRyxLQUMzQyxJQUVBLElBQUlndkMsRUFBaUIsQ0FBQyxPQUV0QixJQUNRVixHQUFhLFFBQ2JVLEVBQWUvNkIsS0FBSyxPQUVwQnE2QixHQUFhLFNBQ2JVLEVBQWUvNkIsS0FBSyxPQUU1QixDQUFFLE1BQU93NkIsR0FFTCxNQURBNXlCLFFBQVEreUIsSUFBSSw4REFDTkgsQ0FDVixDQUVBLElBQUlRLEVBQW1Cdm5DLFNBQVN3dkIsY0FBYyxPQUM5QytYLEVBQWlCdnhCLFVBQVU1RSxJQUFJLGNBQWUsWUFFOUMsSUFBSW8yQixFQUFTeG5DLFNBQVN3dkIsY0FBYyxVQUNwQ2dZLEVBQU94eEIsVUFBVTVFLElBQUksTUFBTyx3QkFBeUIsbUJBQ3JEbzJCLEVBQU96ckMsYUFBYSxpQkFBa0IsWUFDdEN5ckMsRUFBT3pyQyxhQUFhLGdCQUFpQixTQUNyQ3lyQyxFQUFPQyxVQUFZLGVBQ25CRixFQUFpQkcsWUFBWUYsR0FFN0IsSUFBSUcsRUFBUzNuQyxTQUFTd3ZCLGNBQWMsTUFHcEMsR0FGQW1ZLEVBQU8zeEIsVUFBVTVFLElBQUksaUJBRWpCazJCLEVBQWV2ckIsU0FBUyxPQUFRLENBQ2hDLElBQUk2ckIsRUFBbUI1bkMsU0FBU3d2QixjQUFjLE1BQzFDcVksRUFBVTduQyxTQUFTd3ZCLGNBQWMsS0FDckNxWSxFQUFRN3hCLFVBQVU1RSxJQUFJLGlCQUN0QnkyQixFQUFRL3lCLEdBQUssZUFDYit5QixFQUFRQyxLQUFPLElBQ2ZELEVBQVFFLFFBQVUsSUFBWSxRQUFELG1DQUNuQixHQUFPLFdBQVksTUFDN0IsSUFDQUYsRUFBUUosVUFBWSxNQUNwQkcsRUFBaUJGLFlBQVlHLEdBQzdCRixFQUFPRCxZQUFZRSxFQUN2QixDQUVBLElBQUlJLEVBQXVCaG9DLFNBQVN3dkIsY0FBYyxNQUM5Q3lZLEVBQWNqb0MsU0FBU3d2QixjQUFjLEtBQ3pDeVksRUFBWWp5QixVQUFVNUUsSUFBSSxpQkFDMUI2MkIsRUFBWW56QixHQUFLLGdCQUNqQm16QixFQUFZSCxLQUFPLElBQ25CRyxFQUFZRixRQUFVLElBQVksUUFBRCxtQ0FDdkIsR0FBTyxXQUFZLE9BQzdCLElBQ0FFLEVBQVlSLFVBQVksT0FDeEJPLEVBQXFCTixZQUFZTyxHQUNqQ04sRUFBT0QsWUFBWU0sR0FFbkIsSUFBSUUsRUFBc0Jsb0MsU0FBU3d2QixjQUFjLE1BQzdDMlksRUFBYW5vQyxTQUFTd3ZCLGNBQWMsS0FDeEMyWSxFQUFXbnlCLFVBQVU1RSxJQUFJLGlCQUN6QisyQixFQUFXcnpCLEdBQUssZUFDaEJxekIsRUFBV0wsS0FBTyxJQUNsQkssRUFBV0osUUFBVSxJQUFZLFFBQUQsbUNBQ3RCLEdBQU8sV0FBWSxNQUM3QixJQUNBSSxFQUFXVixVQUFZLE1BQ3ZCUyxFQUFvQlIsWUFBWVMsR0FDaENSLEVBQU9ELFlBQVlRLEdBRW5CWCxFQUFpQkcsWUFBWUMsR0FFN0IsSUFBSSxHQUFtQkgsR0FFdkIsSUFBSVksRUFBU3BvQyxTQUFTd3ZCLGNBQWMsVUFDcEM0WSxFQUFPcHlCLFVBQVU1RSxJQUFJLE1BQU8sd0JBQXlCLG1CQUNyRGczQixFQUFPcnNDLGFBQWEsaUJBQWtCLFlBQ3RDcXNDLEVBQU9yc0MsYUFBYSxnQkFBaUIsU0FDckNxc0MsRUFBT1gsVUFBWSxlQUNuQkYsRUFBaUJHLFlBQVlVLEdBRTdCLElBQUlDLEVBQVNyb0MsU0FBU3d2QixjQUFjLE1BR3BDLEdBRkE2WSxFQUFPcnlCLFVBQVU1RSxJQUFJLGlCQUVqQmsyQixFQUFldnJCLFNBQVMsUUFBUyxDQUNqQyxJQUFJdXNCLEVBQW1CdG9DLFNBQVN3dkIsY0FBYyxNQUMxQytZLEVBQVV2b0MsU0FBU3d2QixjQUFjLEtBQ3JDK1ksRUFBUXZ5QixVQUFVNUUsSUFBSSxpQkFDdEJtM0IsRUFBUXp6QixHQUFLLGVBQ2J5ekIsRUFBUVQsS0FBTyxJQUNmUyxFQUFRUixRQUFVLElBQVksUUFBRCxtQ0FDbkIsR0FBTyxXQUFZLE1BQzdCLElBQ0FRLEVBQVFkLFVBQVksTUFDcEJhLEVBQWlCWixZQUFZYSxHQUM3QkYsRUFBT1gsWUFBWVksRUFDdkIsQ0FFQSxJQUFJRSxFQUFzQnhvQyxTQUFTd3ZCLGNBQWMsTUFDN0NpWixFQUFhem9DLFNBQVN3dkIsY0FBYyxLQUN4Q2laLEVBQVd6eUIsVUFBVTVFLElBQUksaUJBQ3pCcTNCLEVBQVczekIsR0FBSyxlQUNoQjJ6QixFQUFXWCxLQUFPLElBQ2xCVyxFQUFXVixRQUFVLElBQVksUUFBRCxtQ0FDdEIsR0FBTyxXQUFZLE1BQzdCLElBQ0FVLEVBQVdoQixVQUFZLE1BQ3ZCZSxFQUFvQmQsWUFBWWUsR0FDaENKLEVBQU9YLFlBQVljLEdBRW5CLElBQUlFLEVBQXVCMW9DLFNBQVN3dkIsY0FBYyxNQUM5Q21aLEVBQWMzb0MsU0FBU3d2QixjQUFjLEtBQ3pDbVosRUFBWTN5QixVQUFVNUUsSUFBSSxpQkFDMUJ1M0IsRUFBWTd6QixHQUFLLGdCQUNqQjZ6QixFQUFZYixLQUFPLElBQ25CYSxFQUFZWixRQUFVLElBQVksUUFBRCxtQ0FDdkIsR0FBTyxXQUFZLE9BQzdCLElBQ0FZLEVBQVlsQixVQUFZLDBCQUN4QmlCLEVBQXFCaEIsWUFBWWlCLEdBQ2pDTixFQUFPWCxZQUFZZ0IsR0FDbkJuQixFQUFpQkcsWUFBWVcsR0FFN0IsSUFBSSxHQUFtQkQsR0FFdkJwQixHQUFJcnRDLEtBQUsrdEMsWUFBWTFuQyxTQUFTd3ZCLGNBQWMsT0FFNUN3WCxHQUFJcnRDLEtBQUsrdEMsWUFBWUgsR0FFckJQLEdBQUk5eUIsS0FBSzFWLE1BQU15WCxVQUFXLENBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL21pa2V5bGFiLXFyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwid2VicGFjazovL21pa2V5bGFiLXFyLy4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLWxpdGUuanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmVzbS5qcyIsIndlYnBhY2s6Ly9taWtleWxhYi1xci8uL25vZGVfbW9kdWxlcy9pZGIta2V5dmFsL2Rpc3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9zcmMvbGliL2NoZWNrLXN1cHBvcnQudHMiLCJ3ZWJwYWNrOi8vbWlrZXlsYWItcXIvLi9zcmMvc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCIvKiFcbiAgKiBCb290c3RyYXAgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKTtcbmNvbnN0IERhdGEgPSB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpO1xuICB9LFxuICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKGVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSk7XG5cbiAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICBpZiAoaW5zdGFuY2VNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwO1xuY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yO1xufTtcblxuLy8gU2hvdXQtb3V0IEFuZ3VzIENyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5jb25zdCB0b1R5cGUgPSBvYmplY3QgPT4ge1xuICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke29iamVjdH1gO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogUHVibGljIFV0aWwgQVBJXG4gKi9cblxuY29uc3QgZ2V0VUlEID0gcHJlZml4ID0+IHtcbiAgZG8ge1xuICAgIHByZWZpeCArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBNQVhfVUlEKTtcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSk7XG4gIHJldHVybiBwcmVmaXg7XG59O1xuY29uc3QgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQge1xuICAgIHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICB0cmFuc2l0aW9uRGVsYXlcbiAgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbik7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAvLyBSZXR1cm4gMCBpZiBlbGVtZW50IG9yIHRyYW5zaXRpb24gZHVyYXRpb24gaXMgbm90IGZvdW5kXG4gIGlmICghZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gJiYgIWZsb2F0VHJhbnNpdGlvbkRlbGF5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXTtcbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUjtcbn07XG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSk7XG59O1xuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QuanF1ZXJ5ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCc7XG59O1xuY29uc3QgZ2V0RWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QuanF1ZXJ5ID8gb2JqZWN0WzBdIDogb2JqZWN0O1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgaXNWaXNpYmxlID0gZWxlbWVudCA9PiB7XG4gIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gIC8vIEhhbmRsZSBgZGV0YWlsc2AgZWxlbWVudCBhcyBpdHMgY29udGVudCBtYXkgZmFsc2llIGFwcGVhciB2aXNpYmxlIHdoZW4gaXQgaXMgY2xvc2VkXG4gIGNvbnN0IGNsb3NlZERldGFpbHMgPSBlbGVtZW50LmNsb3Nlc3QoJ2RldGFpbHM6bm90KFtvcGVuXSknKTtcbiAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG4gIH1cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5Jyk7XG4gICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xufTtcbmNvbnN0IGlzRGlzYWJsZWQgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkO1xuICB9XG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbn07XG5jb25zdCBmaW5kU2hhZG93Um9vdCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICB9XG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbn07XG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiB3aW5kb3cualF1ZXJ5O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXTtcbmNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIC8vIGFkZCBsaXN0ZW5lciBvbiB0aGUgZmlyc3QgY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBpbiBsb2FkaW5nIHN0YXRlXG4gICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufTtcbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG5jb25zdCBkZWZpbmVKUXVlcnlQbHVnaW4gPSBwbHVnaW4gPT4ge1xuICBvbkRPTUNvbnRlbnRMb2FkZWQoKCkgPT4ge1xuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXTtcbiAgICAgICQuZm5bbmFtZV0gPSBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlO1xuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVDtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgZXhlY3V0ZSA9IChwb3NzaWJsZUNhbGxiYWNrLCBhcmdzID0gW10sIGRlZmF1bHRWYWx1ZSA9IHBvc3NpYmxlQ2FsbGJhY2spID0+IHtcbiAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjayguLi5hcmdzKSA6IGRlZmF1bHRWYWx1ZTtcbn07XG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNTtcbiAgY29uc3QgZW11bGF0ZWREdXJhdGlvbiA9IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRyYW5zaXRpb25FbGVtZW50KSArIGR1cmF0aW9uUGFkZGluZztcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICBjb25zdCBoYW5kbGVyID0gKHtcbiAgICB0YXJnZXRcbiAgfSkgPT4ge1xuICAgIGlmICh0YXJnZXQgIT09IHRyYW5zaXRpb25FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgdHJhbnNpdGlvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gIH07XG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpO1xuICAgIH1cbiAgfSwgZW11bGF0ZWREdXJhdGlvbik7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBjb25zdCBsaXN0TGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIGxldCBpbmRleCA9IGxpc3QuaW5kZXhPZihhY3RpdmVFbGVtZW50KTtcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAvLyBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdO1xuICB9XG4gIGluZGV4ICs9IHNob3VsZEdldE5leHQgPyAxIDogLTE7XG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoO1xuICB9XG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXTtcbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZXZlbnQtaGFuZGxlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi87XG5jb25zdCBzdHJpcE5hbWVSZWdleCA9IC9cXC4uKi87XG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvO1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9OyAvLyBFdmVudHMgc3RvcmFnZVxubGV0IHVpZEV2ZW50ID0gMTtcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn07XG5jb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2V1cCcsICdtb3VzZWRvd24nLCAnY29udGV4dG1lbnUnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJywgJ3NlbGVjdHN0YXJ0JywgJ3NlbGVjdGVuZCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ29yaWVudGF0aW9uY2hhbmdlJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVybGVhdmUnLCAncG9pbnRlcmNhbmNlbCcsICdnZXN0dXJlc3RhcnQnLCAnZ2VzdHVyZWNoYW5nZScsICdnZXN0dXJlZW5kJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJywgJ3Jlc2V0JywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdsb2FkJywgJ3VubG9hZCcsICdiZWZvcmV1bmxvYWQnLCAncmVzaXplJywgJ21vdmUnLCAnRE9NQ29udGVudExvYWRlZCcsICdyZWFkeXN0YXRlY2hhbmdlJywgJ2Vycm9yJywgJ2Fib3J0JywgJ3Njcm9sbCddKTtcblxuLyoqXG4gKiBQcml2YXRlIG1ldGhvZHNcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRXZlbnRVaWQoZWxlbWVudCwgdWlkKSB7XG4gIHJldHVybiB1aWQgJiYgYCR7dWlkfTo6JHt1aWRFdmVudCsrfWAgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrO1xufVxuZnVuY3Rpb24gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChlbGVtZW50KTtcbiAgZWxlbWVudC51aWRFdmVudCA9IHVpZDtcbiAgZXZlbnRSZWdpc3RyeVt1aWRdID0gZXZlbnRSZWdpc3RyeVt1aWRdIHx8IHt9O1xuICByZXR1cm4gZXZlbnRSZWdpc3RyeVt1aWRdO1xufVxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgIGRlbGVnYXRlVGFyZ2V0OiBlbGVtZW50XG4gICAgfSk7XG4gICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pO1xuICB9O1xufVxuZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIGZvciAobGV0IHtcbiAgICAgIHRhcmdldFxuICAgIH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgICAgIGRlbGVnYXRlVGFyZ2V0OiB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGFyZ2V0LCBbZXZlbnRdKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGV2ZW50cykuZmluZChldmVudCA9PiBldmVudC5jYWxsYWJsZSA9PT0gY2FsbGFibGUgJiYgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yID09PSBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gIGNvbnN0IGlzRGVsZWdhdGVkID0gdHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnO1xuICAvLyBUT0RPOiB0b29sdGlwIHBhc3NlcyBgZmFsc2VgIGluc3RlYWQgb2Ygc2VsZWN0b3IsIHNvIHdlIG5lZWQgdG8gY2hlY2tcbiAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IGhhbmRsZXIgfHwgZGVsZWdhdGlvbkZ1bmN0aW9uO1xuICBsZXQgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KG9yaWdpbmFsVHlwZUV2ZW50KTtcbiAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgfVxuICByZXR1cm4gW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XTtcbn1cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgb25lT2ZmKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcblxuICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gIC8vIHRoaXMgcHJldmVudHMgdGhlIGhhbmRsZXIgZnJvbSBiZWluZyBkaXNwYXRjaGVkIHRoZSBzYW1lIHdheSBhcyBtb3VzZW92ZXIgb3IgbW91c2VvdXQgZG9lc1xuICBpZiAob3JpZ2luYWxUeXBlRXZlbnQgaW4gY3VzdG9tRXZlbnRzKSB7XG4gICAgY29uc3Qgd3JhcEZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgY2FsbGFibGUgPSB3cmFwRnVuY3Rpb24oY2FsbGFibGUpO1xuICB9XG4gIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pO1xuICBjb25zdCBwcmV2aW91c0Z1bmN0aW9uID0gZmluZEhhbmRsZXIoaGFuZGxlcnMsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiA9IHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmICYmIG9uZU9mZjtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGNhbGxhYmxlLCBvcmlnaW5hbFR5cGVFdmVudC5yZXBsYWNlKG5hbWVzcGFjZVJlZ2V4LCAnJykpO1xuICBjb25zdCBmbiA9IGlzRGVsZWdhdGVkID8gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDogYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBjYWxsYWJsZSk7XG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGw7XG4gIGZuLmNhbGxhYmxlID0gY2FsbGFibGU7XG4gIGZuLm9uZU9mZiA9IG9uZU9mZjtcbiAgZm4udWlkRXZlbnQgPSB1aWQ7XG4gIGhhbmRsZXJzW3VpZF0gPSBmbjtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICBpZiAoIWZuKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpO1xuICBkZWxldGUgZXZlbnRzW3R5cGVFdmVudF1bZm4udWlkRXZlbnRdO1xufVxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fTtcbiAgZm9yIChjb25zdCBbaGFuZGxlcktleSwgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0VHlwZUV2ZW50KGV2ZW50KSB7XG4gIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgZXZlbnQgPSBldmVudC5yZXBsYWNlKHN0cmlwTmFtZVJlZ2V4LCAnJyk7XG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50O1xufVxuY29uc3QgRXZlbnRIYW5kbGVyID0ge1xuICBvbihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBmYWxzZSk7XG4gIH0sXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKTtcbiAgfSxcbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IHR5cGVFdmVudCAhPT0gb3JpZ2luYWxUeXBlRXZlbnQ7XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgIGNvbnN0IGlzTmFtZXNwYWNlID0gb3JpZ2luYWxUeXBlRXZlbnQuc3RhcnRzV2l0aCgnLicpO1xuICAgIGlmICh0eXBlb2YgY2FsbGFibGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgIGlmICghT2JqZWN0LmtleXMoc3RvcmVFbGVtZW50RXZlbnQpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBba2V5SGFuZGxlcnMsIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKTtcbiAgICAgIGlmICghaW5OYW1lc3BhY2UgfHwgb3JpZ2luYWxUeXBlRXZlbnQuaW5jbHVkZXMoaGFuZGxlcktleSkpIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KCk7XG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KTtcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IGV2ZW50ICE9PSB0eXBlRXZlbnQ7XG4gICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbDtcbiAgICBsZXQgYnViYmxlcyA9IHRydWU7XG4gICAgbGV0IG5hdGl2ZURpc3BhdGNoID0gdHJ1ZTtcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICBqUXVlcnlFdmVudCA9ICQuRXZlbnQoZXZlbnQsIGFyZ3MpO1xuICAgICAgJChlbGVtZW50KS50cmlnZ2VyKGpRdWVyeUV2ZW50KTtcbiAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7XG4gICAgICBkZWZhdWx0UHJldmVudGVkID0galF1ZXJ5RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfVxuICAgIGNvbnN0IGV2dCA9IGh5ZHJhdGVPYmoobmV3IEV2ZW50KGV2ZW50LCB7XG4gICAgICBidWJibGVzLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pLCBhcmdzKTtcbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChuYXRpdmVEaXNwYXRjaCkge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgfVxuICAgIGlmIChldnQuZGVmYXVsdFByZXZlbnRlZCAmJiBqUXVlcnlFdmVudCkge1xuICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGV2dDtcbiAgfVxufTtcbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBOdW1iZXIodmFsdWUpLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfVxuICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YCk7XG59XG5jb25zdCBNYW5pcHVsYXRvciA9IHtcbiAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCwgdmFsdWUpO1xuICB9LFxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApO1xuICB9LFxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICBjb25zdCBic0tleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykgJiYgIWtleS5zdGFydHNXaXRoKCdic0NvbmZpZycpKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBic0tleXMpIHtcbiAgICAgIGxldCBwdXJlS2V5ID0ga2V5LnJlcGxhY2UoL15icy8sICcnKTtcbiAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aCk7XG4gICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9LFxuICBnZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApKTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29uZmlnLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgZWxlbWVudCkge1xuICAgIGNvbnN0IGpzb25Db25maWcgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsICdjb25maWcnKSA6IHt9OyAvLyB0cnkgdG8gcGFyc2VcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGpzb25Db25maWcgPT09ICdvYmplY3QnID8ganNvbkNvbmZpZyA6IHt9KSxcbiAgICAgIC4uLihpc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH07XG4gIH1cbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcsIGNvbmZpZ1R5cGVzID0gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSkge1xuICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCBleHBlY3RlZFR5cGVzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdUeXBlcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW3Byb3BlcnR5XTtcbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGlzRWxlbWVudCh2YWx1ZSkgPyAnZWxlbWVudCcgOiB0b1R5cGUodmFsdWUpO1xuICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IuTkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBWRVJTSU9OID0gJzUuMy4zJztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSk7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgfVxuICB9XG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnLCB0aGlzLl9lbGVtZW50KTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHJldHVybiBEYXRhLmdldChnZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKTtcbiAgfVxuICBzdGF0aWMgZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCBjb25maWcgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmdldEluc3RhbmNlKGVsZW1lbnQpIHx8IG5ldyB0aGlzKGVsZW1lbnQsIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDogbnVsbCk7XG4gIH1cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OO1xuICB9XG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gO1xuICB9XG4gIHN0YXRpYyBnZXQgRVZFTlRfS0VZKCkge1xuICAgIHJldHVybiBgLiR7dGhpcy5EQVRBX0tFWX1gO1xuICB9XG4gIHN0YXRpYyBldmVudE5hbWUobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpO1xuICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICBsZXQgaHJlZkF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgIWhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgIGlmIChocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBocmVmQXR0cmlidXRlID0gYCMke2hyZWZBdHRyaWJ1dGUuc3BsaXQoJyMnKVsxXX1gO1xuICAgIH1cbiAgICBzZWxlY3RvciA9IGhyZWZBdHRyaWJ1dGUgJiYgaHJlZkF0dHJpYnV0ZSAhPT0gJyMnID8gaHJlZkF0dHJpYnV0ZS50cmltKCkgOiBudWxsO1xuICB9XG4gIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBwYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGw7XG59O1xuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpO1xuICB9LFxuICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IuY2FsbChlbGVtZW50LCBzZWxlY3Rvcik7XG4gIH0sXG4gIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5lbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpO1xuICB9LFxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgIHBhcmVudHMucHVzaChhbmNlc3Rvcik7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRzO1xuICB9LFxuICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IHByZXZpb3VzID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbcHJldmlvdXNdO1xuICAgICAgfVxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG4gIC8vIFRPRE86IHRoaXMgaXMgbm93IHVudXNlZDsgcmVtb3ZlIGxhdGVyIGFsb25nIHdpdGggcHJldigpXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICBpZiAobmV4dC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW25leHRdO1xuICAgICAgfVxuICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG4gIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICBjb25zdCBmb2N1c2FibGVzID0gWydhJywgJ2J1dHRvbicsICdpbnB1dCcsICd0ZXh0YXJlYScsICdzZWxlY3QnLCAnZGV0YWlscycsICdbdGFiaW5kZXhdJywgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJ10ubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfTpub3QoW3RhYmluZGV4Xj1cIi1cIl0pYCkuam9pbignLCcpO1xuICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpc0Rpc2FibGVkKGVsKSAmJiBpc1Zpc2libGUoZWwpKTtcbiAgfSxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgOiBudWxsO1xuICB9LFxuICBnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW107XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBlbmFibGVEaXNtaXNzVHJpZ2dlciA9IChjb21wb25lbnQsIG1ldGhvZCA9ICdoaWRlJykgPT4ge1xuICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YDtcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FO1xuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIGNsaWNrRXZlbnQsIGBbZGF0YS1icy1kaXNtaXNzPVwiJHtuYW1lfVwiXWAsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApO1xuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcblxuICAgIC8vIE1ldGhvZCBhcmd1bWVudCBpcyBsZWZ0LCBmb3IgQWxlcnQgYW5kIG9ubHksIGFzIGl0IGRvZXNuJ3QgaW1wbGVtZW50IHRoZSAnaGlkZScgbWV0aG9kXG4gICAgaW5zdGFuY2VbbWV0aG9kXSgpO1xuICB9KTtcbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGYgPSAnYWxlcnQnO1xuY29uc3QgREFUQV9LRVkkYSA9ICdicy5hbGVydCc7XG5jb25zdCBFVkVOVF9LRVkkYiA9IGAuJHtEQVRBX0tFWSRhfWA7XG5jb25zdCBFVkVOVF9DTE9TRSA9IGBjbG9zZSR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IEVWRU5UX0NMT1NFRCA9IGBjbG9zZWQke0VWRU5UX0tFWSRifWA7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkNSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ4ID0gJ3Nob3cnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBBbGVydCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRmO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGNsb3NlKCkge1xuICAgIGNvbnN0IGNsb3NlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRSk7XG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDgpO1xuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkNSk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rlc3Ryb3lFbGVtZW50KCkge1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKCk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xPU0VEKTtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEFsZXJ0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQWxlcnQpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZSA9ICdidXR0b24nO1xuY29uc3QgREFUQV9LRVkkOSA9ICdicy5idXR0b24nO1xuY29uc3QgRVZFTlRfS0VZJGEgPSBgLiR7REFUQV9LRVkkOX1gO1xuY29uc3QgREFUQV9BUElfS0VZJDYgPSAnLmRhdGEtYXBpJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFJDMgPSAnYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJztcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDYgPSBgY2xpY2ske0VWRU5UX0tFWSRhfSR7REFUQV9BUElfS0VZJDZ9YDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGU7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSQzKSk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmIChjb25maWcgPT09ICd0b2dnbGUnKSB7XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDYsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDUsIGV2ZW50ID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUkNSk7XG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pO1xuICBkYXRhLnRvZ2dsZSgpO1xufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKEJ1dHRvbik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZCA9ICdzd2lwZSc7XG5jb25zdCBFVkVOVF9LRVkkOSA9ICcuYnMuc3dpcGUnO1xuY29uc3QgRVZFTlRfVE9VQ0hTVEFSVCA9IGB0b3VjaHN0YXJ0JHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hNT1ZFID0gYHRvdWNobW92ZSR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1RPVUNIRU5EID0gYHRvdWNoZW5kJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfUE9JTlRFUkRPV04gPSBgcG9pbnRlcmRvd24ke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSVVAgPSBgcG9pbnRlcnVwJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgUE9JTlRFUl9UWVBFX1RPVUNIID0gJ3RvdWNoJztcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJztcbmNvbnN0IENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCA9ICdwb2ludGVyLWV2ZW50JztcbmNvbnN0IFNXSVBFX1RIUkVTSE9MRCA9IDQwO1xuY29uc3QgRGVmYXVsdCRjID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYyA9IHtcbiAgZW5kQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBsZWZ0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICByaWdodENhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU3dpcGUgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgIGlmICghZWxlbWVudCB8fCAhU3dpcGUuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9kZWx0YVggPSAwO1xuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KTtcbiAgICB0aGlzLl9pbml0RXZlbnRzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRjO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGM7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGQ7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWSQ5KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3N0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cykge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgfVxuICB9XG4gIF9lbmQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkpIHtcbiAgICAgIHRoaXMuX2RlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gICAgfVxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKCk7XG4gICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuZW5kQ2FsbGJhY2spO1xuICB9XG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgPyAwIDogZXZlbnQudG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fZGVsdGFYO1xuICB9XG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpO1xuICAgIGlmIChhYnNEZWx0YVggPD0gU1dJUEVfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGFic0RlbHRhWCAvIHRoaXMuX2RlbHRhWDtcbiAgICB0aGlzLl9kZWx0YVggPSAwO1xuICAgIGlmICghZGlyZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4ZWN1dGUoZGlyZWN0aW9uID4gMCA/IHRoaXMuX2NvbmZpZy5yaWdodENhbGxiYWNrIDogdGhpcy5fY29uZmlnLmxlZnRDYWxsYmFjayk7XG4gIH1cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUlVQLCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hTVEFSVCwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSE1PVkUsIGV2ZW50ID0+IHRoaXMuX21vdmUoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSk7XG4gICAgfVxuICB9XG4gIF9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzICYmIChldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1BFTiB8fCBldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1RPVUNIKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBjYXJvdXNlbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJGMgPSAnY2Fyb3VzZWwnO1xuY29uc3QgREFUQV9LRVkkOCA9ICdicy5jYXJvdXNlbCc7XG5jb25zdCBFVkVOVF9LRVkkOCA9IGAuJHtEQVRBX0tFWSQ4fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNSA9ICcuZGF0YS1hcGknO1xuY29uc3QgQVJST1dfTEVGVF9LRVkkMSA9ICdBcnJvd0xlZnQnO1xuY29uc3QgQVJST1dfUklHSFRfS0VZJDEgPSAnQXJyb3dSaWdodCc7XG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwOyAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0JztcbmNvbnN0IE9SREVSX1BSRVYgPSAncHJldic7XG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0JztcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCc7XG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0tFWURPV04kMSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiQxID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFJDEgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQzID0gYGxvYWQke0VWRU5UX0tFWSQ4fSR7REFUQV9BUElfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDUgPSBgY2xpY2ske0VWRU5UX0tFWSQ4fSR7REFUQV9BUElfS0VZJDV9YDtcbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMiA9ICdhY3RpdmUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSc7XG5jb25zdCBDTEFTU19OQU1FX0VORCA9ICdjYXJvdXNlbC1pdGVtLWVuZCc7XG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnO1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCc7XG5jb25zdCBDTEFTU19OQU1FX1BSRVYgPSAnY2Fyb3VzZWwtaXRlbS1wcmV2JztcbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJztcbmNvbnN0IFNFTEVDVE9SX0lURU0gPSAnLmNhcm91c2VsLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSBTRUxFQ1RPUl9BQ1RJVkUgKyBTRUxFQ1RPUl9JVEVNO1xuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJztcbmNvbnN0IFNFTEVDVE9SX0lORElDQVRPUlMgPSAnLmNhcm91c2VsLWluZGljYXRvcnMnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1JJREUgPSAnW2RhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJdJztcbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWSQxXTogRElSRUNUSU9OX1JJR0hULFxuICBbQVJST1dfUklHSFRfS0VZJDFdOiBESVJFQ1RJT05fTEVGVFxufTtcbmNvbnN0IERlZmF1bHQkYiA9IHtcbiAgaW50ZXJ2YWw6IDUwMDAsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBwYXVzZTogJ2hvdmVyJyxcbiAgcmlkZTogZmFsc2UsXG4gIHRvdWNoOiB0cnVlLFxuICB3cmFwOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYiA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJyxcbiAgLy8gVE9ETzp2NiByZW1vdmUgYm9vbGVhbiBzdXBwb3J0XG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHJpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgdG91Y2g6ICdib29sZWFuJyxcbiAgd3JhcDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDYXJvdXNlbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBudWxsO1xuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIGlmICh0aGlzLl9jb25maWcucmlkZSA9PT0gQ0xBU1NfTkFNRV9DQVJPVVNFTCkge1xuICAgICAgdGhpcy5jeWNsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGI7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYztcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpO1xuICB9XG4gIG5leHRXaGVuVmlzaWJsZSgpIHtcbiAgICAvLyBGSVhNRSBUT0RPIHVzZSBgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlYFxuICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVudCBpc24ndCB2aXNpYmxlXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgaXNWaXNpYmxlKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH1cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKTtcbiAgfVxuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICB9XG4gIGN5Y2xlKCkge1xuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKTtcbiAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCgpO1xuICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5uZXh0V2hlblZpc2libGUoKSwgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgfVxuICBfbWF5YmVFbmFibGVDeWNsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy5jeWNsZSgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jeWNsZSgpO1xuICB9XG4gIHRvKGluZGV4KSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtcygpO1xuICAgIGlmIChpbmRleCA+IGl0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy50byhpbmRleCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9nZXRBY3RpdmUoKSk7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgICB0aGlzLl9zbGlkZShvcmRlciwgaXRlbXNbaW5kZXhdKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9zd2lwZUhlbHBlcikge1xuICAgICAgdGhpcy5fc3dpcGVIZWxwZXIuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgPSBjb25maWcuaW50ZXJ2YWw7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04kMSwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiQxLCAoKSA9PiB0aGlzLnBhdXNlKCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUkMSwgKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiBTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGZvciAoY29uc3QgaW1nIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICB9XG4gICAgY29uc3QgZW5kQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlICE9PSAnaG92ZXInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgaWYgKHRoaXMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKTtcbiAgICB9O1xuICAgIGNvbnN0IHN3aXBlQ29uZmlnID0ge1xuICAgICAgbGVmdENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9MRUZUKSksXG4gICAgICByaWdodENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9SSUdIVCkpLFxuICAgICAgZW5kQ2FsbGJhY2s6IGVuZENhbGxCYWNrXG4gICAgfTtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG5ldyBTd2lwZSh0aGlzLl9lbGVtZW50LCBzd2lwZUNvbmZpZyk7XG4gIH1cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldO1xuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbikpO1xuICAgIH1cbiAgfVxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbXMoKS5pbmRleE9mKGVsZW1lbnQpO1xuICB9XG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRSwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpO1xuICAgIGFjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpO1xuICAgIGNvbnN0IG5ld0FjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYFtkYXRhLWJzLXNsaWRlLXRvPVwiJHtpbmRleH1cIl1gLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgaWYgKG5ld0FjdGl2ZUluZGljYXRvcikge1xuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3Iuc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpO1xuICAgIH1cbiAgfVxuICBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRJbnRlcnZhbCA9IE51bWJlci5wYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1pbnRlcnZhbCcpLCAxMCk7XG4gICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gZWxlbWVudEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWw7XG4gIH1cbiAgX3NsaWRlKG9yZGVyLCBlbGVtZW50ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2dldEFjdGl2ZSgpO1xuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUO1xuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRJdGVtcygpLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKTtcbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudCk7XG4gICAgY29uc3QgdHJpZ2dlckV2ZW50ID0gZXZlbnROYW1lID0+IHtcbiAgICAgIHJldHVybiBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBldmVudE5hbWUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlciksXG4gICAgICAgIGZyb206IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KSxcbiAgICAgICAgdG86IG5leHRFbGVtZW50SW5kZXhcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRyaWdnZXJFdmVudChFVkVOVF9TTElERSk7XG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAvLyBTb21lIHdlaXJkbmVzcyBpcyBoYXBwZW5pbmcsIHNvIHdlIGJhaWxcbiAgICAgIC8vIFRPRE86IGNoYW5nZSB0ZXN0cyB0aGF0IHVzZSBlbXB0eSBkaXZzIHRvIGF2b2lkIHRoaXMgY2hlY2tcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWU7XG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudEluZGV4KTtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkQ7XG4gICAgY29uc3Qgb3JkZXJDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX05FWFQgOiBDTEFTU19OQU1FX1BSRVY7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSk7XG4gICAgcmVmbG93KG5leHRFbGVtZW50KTtcbiAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSk7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDIpO1xuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDIsIG9yZGVyQ2xhc3NOYW1lLCBkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZTtcbiAgICAgIHRyaWdnZXJFdmVudChFVkVOVF9TTElEKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKTtcbiAgfVxuICBfZ2V0QWN0aXZlKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfZ2V0SXRlbXMoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTSwgdGhpcy5fZWxlbWVudCk7XG4gIH1cbiAgX2NsZWFySW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfUFJFViA6IE9SREVSX05FWFQ7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVY7XG4gIH1cbiAgX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX0xFRlQgOiBESVJFQ1RJT05fUklHSFQ7XG4gICAgfVxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRhdGEudG8oY29uZmlnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSwgU0VMRUNUT1JfREFUQV9TTElERSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGNvbnN0IGNhcm91c2VsID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBjb25zdCBzbGlkZUluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtc2xpZGUtdG8nKTtcbiAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICBjYXJvdXNlbC50byhzbGlkZUluZGV4KTtcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZSh0aGlzLCAnc2xpZGUnKSA9PT0gJ25leHQnKSB7XG4gICAgY2Fyb3VzZWwubmV4dCgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNhcm91c2VsLnByZXYoKTtcbiAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQzLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKTtcbiAgZm9yIChjb25zdCBjYXJvdXNlbCBvZiBjYXJvdXNlbHMpIHtcbiAgICBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKGNhcm91c2VsKTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENhcm91c2VsKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYiA9ICdjb2xsYXBzZSc7XG5jb25zdCBEQVRBX0tFWSQ3ID0gJ2JzLmNvbGxhcHNlJztcbmNvbnN0IEVWRU5UX0tFWSQ3ID0gYC4ke0RBVEFfS0VZJDd9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ0ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9TSE9XJDYgPSBgc2hvdyR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDYgPSBgc2hvd24ke0VWRU5UX0tFWSQ3fWA7XG5jb25zdCBFVkVOVF9ISURFJDYgPSBgaGlkZSR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ2ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDQgPSBgY2xpY2ske0VWRU5UX0tFWSQ3fSR7REFUQV9BUElfS0VZJDR9YDtcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ3ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFRCA9ICdjb2xsYXBzZWQnO1xuY29uc3QgQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4gPSBgOnNjb3BlIC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YDtcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJztcbmNvbnN0IFdJRFRIID0gJ3dpZHRoJztcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFUyA9ICcuY29sbGFwc2Uuc2hvdywgLmNvbGxhcHNlLmNvbGxhcHNpbmcnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCA9ICdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXSc7XG5jb25zdCBEZWZhdWx0JGEgPSB7XG4gIHBhcmVudDogbnVsbCxcbiAgdG9nZ2xlOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkYSA9IHtcbiAgcGFyZW50OiAnKG51bGx8ZWxlbWVudCknLFxuICB0b2dnbGU6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl90cmlnZ2VyQXJyYXkgPSBbXTtcbiAgICBjb25zdCB0b2dnbGVMaXN0ID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdG9nZ2xlTGlzdCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBTZWxlY3RvckVuZ2luZS5nZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pO1xuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpLmZpbHRlcihmb3VuZEVsZW1lbnQgPT4gZm91bmRFbGVtZW50ID09PSB0aGlzLl9lbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChlbGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0aGlzLl9pc1Nob3duKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCRhO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJGE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYWN0aXZlQ2hpbGRyZW4gPSBbXTtcblxuICAgIC8vIGZpbmQgYWN0aXZlIGNoaWxkcmVuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIGFjdGl2ZUNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0FDVElWRVMpLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQpLm1hcChlbGVtZW50ID0+IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgICB0b2dnbGU6IGZhbHNlXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmIChhY3RpdmVDaGlsZHJlbi5sZW5ndGggJiYgYWN0aXZlQ2hpbGRyZW5bMF0uX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgYWN0aXZlSW5zdGFuY2Ugb2YgYWN0aXZlQ2hpbGRyZW4pIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlLmhpZGUoKTtcbiAgICB9XG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IDA7XG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ2KTtcbiAgICB9O1xuICAgIGNvbnN0IGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSk7XG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWA7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGA7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNik7XG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl19cHhgO1xuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0aGlzLl90cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRyaWdnZXIpO1xuICAgICAgaWYgKGVsZW1lbnQgJiYgIXRoaXMuX2lzU2hvd24oZWxlbWVudCkpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFt0cmlnZ2VyXSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ2KTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQ3KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSk7IC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFQ7XG4gIH1cbiAgX2luaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfREFUQV9UT0dHTEUkNCk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFtlbGVtZW50XSwgdGhpcy5faXNTaG93bihzZWxlY3RlZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KTtcbiAgICAvLyByZW1vdmUgY2hpbGRyZW4gaWYgZ3JlYXRlciBkZXB0aFxuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZWxlbWVudCA9PiAhY2hpbGRyZW4uaW5jbHVkZXMoZWxlbWVudCkpO1xuICB9XG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyaWdnZXJBcnJheSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQ09MTEFQU0VELCAhaXNPcGVuKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKTtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICBjb25zdCBfY29uZmlnID0ge307XG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBfY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDQsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQsIGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IodGhpcykpIHtcbiAgICBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHtcbiAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICB9KS50b2dnbGUoKTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENvbGxhcHNlKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRyb3Bkb3duLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYSA9ICdkcm9wZG93bic7XG5jb25zdCBEQVRBX0tFWSQ2ID0gJ2JzLmRyb3Bkb3duJztcbmNvbnN0IEVWRU5UX0tFWSQ2ID0gYC4ke0RBVEFfS0VZJDZ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQzID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFU0NBUEVfS0VZJDIgPSAnRXNjYXBlJztcbmNvbnN0IFRBQl9LRVkkMSA9ICdUYWInO1xuY29uc3QgQVJST1dfVVBfS0VZJDEgPSAnQXJyb3dVcCc7XG5jb25zdCBBUlJPV19ET1dOX0tFWSQxID0gJ0Fycm93RG93bic7XG5jb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyOyAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFJDUgPSBgaGlkZSR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQ1ID0gYGhpZGRlbiR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX1NIT1ckNSA9IGBzaG93JHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPV04kNSA9IGBzaG93biR7RVZFTlRfS0VZJDZ9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMgPSBgY2xpY2ske0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZVVBfREFUQV9BUEkgPSBga2V5dXAke0VWRU5UX0tFWSQ2fSR7REFUQV9BUElfS0VZJDN9YDtcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ2ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVAgPSAnZHJvcHVwJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFNUQVJUID0gJ2Ryb3BzdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUF9DRU5URVIgPSAnZHJvcHVwLWNlbnRlcic7XG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMyA9ICdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTiA9IGAke1NFTEVDVE9SX0RBVEFfVE9HR0xFJDN9LiR7Q0xBU1NfTkFNRV9TSE9XJDZ9YDtcbmNvbnN0IFNFTEVDVE9SX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnO1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSID0gJy5uYXZiYXInO1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdic7XG5jb25zdCBTRUxFQ1RPUl9WSVNJQkxFX0lURU1TID0gJy5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfVE9QRU5EID0gaXNSVEwoKSA/ICd0b3Atc3RhcnQnIDogJ3RvcC1lbmQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTSA9IGlzUlRMKCkgPyAnYm90dG9tLWVuZCcgOiAnYm90dG9tLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfUklHSFQgPSBpc1JUTCgpID8gJ2xlZnQtc3RhcnQnIDogJ3JpZ2h0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9MRUZUID0gaXNSVEwoKSA/ICdyaWdodC1zdGFydCcgOiAnbGVmdC1zdGFydCc7XG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSID0gJ2JvdHRvbSc7XG5jb25zdCBEZWZhdWx0JDkgPSB7XG4gIGF1dG9DbG9zZTogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBkaXNwbGF5OiAnZHluYW1pYycsXG4gIG9mZnNldDogWzAsIDJdLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHJlZmVyZW5jZTogJ3RvZ2dsZSdcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ5ID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZTsgLy8gZHJvcGRvd24gd3JhcHBlclxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICB0aGlzLl9tZW51ID0gU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fCBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KTtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkOTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRhO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93bigpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKTtcbiAgfVxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY3JlYXRlUG9wcGVyKCk7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgIXRoaXMuX3BhcmVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUl9OQVYpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpO1xuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9O1xuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKTtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNSwgcmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSBzdXBlci5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmIHR5cGVvZiBjb25maWcucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gUG9wcGVyIHZpcnR1YWwgZWxlbWVudHMgcmVxdWlyZSBhIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2RcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7TkFNRSRhLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCJyZWZlcmVuY2VcIiBwcm92aWRlZCB0eXBlIFwib2JqZWN0XCIgd2l0aG91dCBhIHJlcXVpcmVkIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIgbWV0aG9kLmApO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9jcmVhdGVQb3BwZXIoKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgIH1cbiAgICBsZXQgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50O1xuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gZ2V0RWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2U7XG4gICAgfVxuICAgIGNvbnN0IHBvcHBlckNvbmZpZyA9IHRoaXMuX2dldFBvcHBlckNvbmZpZygpO1xuICAgIHRoaXMuX3BvcHBlciA9IFBvcHBlci5jcmVhdGVQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgdGhpcy5fbWVudSwgcG9wcGVyQ29uZmlnKTtcbiAgfVxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICB9XG4gIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgcGFyZW50RHJvcGRvd24gPSB0aGlzLl9wYXJlbnQ7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BFTkQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1JJR0hUO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfVE9QQ0VOVEVSO1xuICAgIH1cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9CT1RUT01DRU5URVI7XG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byB0cmltIHRoZSB2YWx1ZSBiZWNhdXNlIGN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBhbHNvIGluY2x1ZGUgc3BhY2VzXG4gICAgY29uc3QgaXNFbmQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lbnUpLmdldFByb3BlcnR5VmFsdWUoJy0tYnMtcG9zaXRpb24nKS50cmltKCkgPT09ICdlbmQnO1xuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVApKSB7XG4gICAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfVE9QRU5EIDogUExBQ0VNRU5UX1RPUDtcbiAgICB9XG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT007XG4gIH1cbiAgX2RldGVjdE5hdmJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUikgIT09IG51bGw7XG4gIH1cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvZmZzZXRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKTsgLy8gVE9ETzogdjYgcmVtb3ZlXG4gICAgICBkZWZhdWx0QnNQb3BwZXJDb25maWcubW9kaWZpZXJzID0gW3tcbiAgICAgICAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1dO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uZXhlY3V0ZSh0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnLCBbZGVmYXVsdEJzUG9wcGVyQ29uZmlnXSlcbiAgICB9O1xuICB9XG4gIF9zZWxlY3RNZW51SXRlbSh7XG4gICAga2V5LFxuICAgIHRhcmdldFxuICB9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMsIHRoaXMuX21lbnUpLmZpbHRlcihlbGVtZW50ID0+IGlzVmlzaWJsZShlbGVtZW50KSk7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBpZiB0YXJnZXQgaXNuJ3QgaW5jbHVkZWQgaW4gaXRlbXMgKGUuZy4gd2hlbiBleHBhbmRpbmcgdGhlIGRyb3Bkb3duKVxuICAgIC8vIGFsbG93IGN5Y2xpbmcgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0gaW4gY2FzZSBrZXkgZXF1YWxzIEFSUk9XX1VQX0tFWVxuICAgIGdldE5leHRBY3RpdmVFbGVtZW50KGl0ZW1zLCB0YXJnZXQsIGtleSA9PT0gQVJST1dfRE9XTl9LRVkkMSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxuICBzdGF0aWMgY2xlYXJNZW51cyhldmVudCkge1xuICAgIGlmIChldmVudC5idXR0b24gPT09IFJJR0hUX01PVVNFX0JVVFRPTiB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSQxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Ub2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTik7XG4gICAgZm9yIChjb25zdCB0b2dnbGUgb2Ygb3BlblRvZ2dsZXMpIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBEcm9wZG93bi5nZXRJbnN0YW5jZSh0b2dnbGUpO1xuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY29tcG9zZWRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSk7XG4gICAgICBpZiAoY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdpbnNpZGUnICYmICFpc01lbnVUYXJnZXQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgaWYgKGNvbnRleHQuX21lbnUuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkkMSB8fCAvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudFxuICAgICAgfTtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50O1xuICAgICAgfVxuICAgICAgY29udGV4dC5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGFuIFVQIHwgRE9XTiB8IEVTQ0FQRSBrZXkgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhICYmIGlmIGtleSBpcyBvdGhlciB0aGFuIEVTQ0FQRSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG5cbiAgICBjb25zdCBpc0lucHV0ID0gL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSk7XG4gICAgY29uc3QgaXNFc2NhcGVFdmVudCA9IGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSQyO1xuICAgIGNvbnN0IGlzVXBPckRvd25FdmVudCA9IFtBUlJPV19VUF9LRVkkMSwgQVJST1dfRE9XTl9LRVkkMV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICBpZiAoIWlzVXBPckRvd25FdmVudCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNJbnB1dCAmJiAhaXNFc2NhcGVFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIGNvbnN0IGdldFRvZ2dsZUJ1dHRvbiA9IHRoaXMubWF0Y2hlcyhTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKSA/IHRoaXMgOiBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpWzBdIHx8IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMylbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzLCBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UoZ2V0VG9nZ2xlQnV0dG9uKTtcbiAgICBpZiAoaXNVcE9yRG93bkV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGluc3RhbmNlLnNob3coKTtcbiAgICAgIGluc3RhbmNlLl9zZWxlY3RNZW51SXRlbShldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZS5faXNTaG93bigpKSB7XG4gICAgICAvLyBlbHNlIGlzIGVzY2FwZSBhbmQgd2UgY2hlY2sgaWYgaXQgaXMgc2hvd25cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgZ2V0VG9nZ2xlQnV0dG9uLmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcik7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcik7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMsIERyb3Bkb3duLmNsZWFyTWVudXMpO1xuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlVUF9EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cyk7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpO1xufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvYmFja2Ryb3AuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ5ID0gJ2JhY2tkcm9wJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ0ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDUgPSAnc2hvdyc7XG5jb25zdCBFVkVOVF9NT1VTRURPV04gPSBgbW91c2Vkb3duLmJzLiR7TkFNRSQ5fWA7XG5jb25zdCBEZWZhdWx0JDggPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgY2xpY2tDYWxsYmFjazogbnVsbCxcbiAgaXNBbmltYXRlZDogZmFsc2UsXG4gIGlzVmlzaWJsZTogdHJ1ZSxcbiAgLy8gaWYgZmFsc2UsIHdlIHVzZSB0aGUgYmFja2Ryb3AgaGVscGVyIHdpdGhvdXQgYWRkaW5nIGFueSBlbGVtZW50IHRvIHRoZSBkb21cbiAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkOCA9IHtcbiAgY2xhc3NOYW1lOiAnc3RyaW5nJyxcbiAgY2xpY2tDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGlzQW5pbWF0ZWQ6ICdib29sZWFuJyxcbiAgaXNWaXNpYmxlOiAnYm9vbGVhbicsXG4gIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ4O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDg7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdyhjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FwcGVuZCgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3coZWxlbWVudCk7XG4gICAgfVxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckNSk7XG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuICBoaWRlKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDUpO1xuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGlmICghdGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTik7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9nZXRFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudCkge1xuICAgICAgY29uc3QgYmFja2Ryb3AgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWU7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUkNCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50ID0gYmFja2Ryb3A7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50O1xuICB9XG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpO1xuICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCBFVkVOVF9NT1VTRURPV04sICgpID0+IHtcbiAgICAgIGV4ZWN1dGUodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSB0cnVlO1xuICB9XG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkOCA9ICdmb2N1c3RyYXAnO1xuY29uc3QgREFUQV9LRVkkNSA9ICdicy5mb2N1c3RyYXAnO1xuY29uc3QgRVZFTlRfS0VZJDUgPSBgLiR7REFUQV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfRk9DVVNJTiQyID0gYGZvY3VzaW4ke0VWRU5UX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX1RBQiA9IGBrZXlkb3duLnRhYiR7RVZFTlRfS0VZJDV9YDtcbmNvbnN0IFRBQl9LRVkgPSAnVGFiJztcbmNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJztcbmNvbnN0IFRBQl9OQVZfQkFDS1dBUkQgPSAnYmFja3dhcmQnO1xuY29uc3QgRGVmYXVsdCQ3ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNyA9IHtcbiAgYXV0b2ZvY3VzOiAnYm9vbGVhbicsXG4gIHRyYXBFbGVtZW50OiAnZWxlbWVudCdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEZvY3VzVHJhcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbDtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDc7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkODtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgIHRoaXMuX2NvbmZpZy50cmFwRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkkNSk7IC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiQyLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpO1xuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTtcbiAgfVxuICBkZWFjdGl2YXRlKCkge1xuICAgIGlmICghdGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkkNSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9oYW5kbGVGb2N1c2luKGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgdHJhcEVsZW1lbnRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KTtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cmFwRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkQ7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQgPSAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCc7XG5jb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCc7XG5jb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnO1xuY29uc3QgUFJPUEVSVFlfTUFSR0lOID0gJ21hcmdpbi1yaWdodCc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbEJhckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aCk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKTtcbiAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKTtcbiAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlIC0gd2lkdGgpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTik7XG4gIH1cbiAgaXNPdmVyZmxvd2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXaWR0aCgpID4gMDtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rpc2FibGVPdmVyRmxvdygpIHtcbiAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH1cbiAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIGAke2NhbGxiYWNrKE51bWJlci5wYXJzZUZsb2F0KGNhbGN1bGF0ZWRWYWx1ZSkpfXB4YCk7XG4gICAgfTtcbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gIH1cbiAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICBpZiAoYWN0dWFsVmFsdWUpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSwgYWN0dWFsVmFsdWUpO1xuICAgIH1cbiAgfVxuICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBwcm9wZXJ0eSBpZiB0aGUgdmFsdWUgaXMgYG51bGxgOyB0aGUgdmFsdWUgY2FuIGFsc28gYmUgemVyb1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIHZhbHVlKTtcbiAgICB9O1xuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgfVxuICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkge1xuICAgICAgY2FsbEJhY2soc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlbCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgY2FsbEJhY2soc2VsKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNyA9ICdtb2RhbCc7XG5jb25zdCBEQVRBX0tFWSQ0ID0gJ2JzLm1vZGFsJztcbmNvbnN0IEVWRU5UX0tFWSQ0ID0gYC4ke0RBVEFfS0VZJDR9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQyID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFU0NBUEVfS0VZJDEgPSAnRXNjYXBlJztcbmNvbnN0IEVWRU5UX0hJREUkNCA9IGBoaWRlJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQkMSA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfSElEREVOJDQgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfU0hPVyQ0ID0gYHNob3cke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ0ID0gYHNob3duJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfUkVTSVpFJDEgPSBgcmVzaXplJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVkkNH1gO1xuY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MkMSA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQyID0gYGNsaWNrJHtFVkVOVF9LRVkkNH0ke0RBVEFfQVBJX0tFWSQyfWA7XG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3Blbic7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMyA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQ0ID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJztcbmNvbnN0IE9QRU5fU0VMRUNUT1IkMSA9ICcubW9kYWwuc2hvdyc7XG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZyc7XG5jb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5JztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFJDIgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nO1xuY29uc3QgRGVmYXVsdCQ2ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAgZm9jdXM6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNiA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgZm9jdXM6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKTtcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ2O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ3O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBzaG93KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBpZiAodGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQ0LCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ0KTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDQpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHdpbmRvdywgRVZFTlRfS0VZJDQpO1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9LRVkkNCk7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGlzVmlzaWJsZTogQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApLFxuICAgICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlLFxuICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgfSk7XG4gIH1cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuICBfc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkge1xuICAgIC8vIHRyeSB0byBhcHBlbmQgZHluYW1pYyBtb2RhbFxuICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJyk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcbiAgICB0aGlzLl9lbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpO1xuICAgIGlmIChtb2RhbEJvZHkpIHtcbiAgICAgIG1vZGFsQm9keS5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ0KTtcbiAgICBjb25zdCB0cmFuc2l0aW9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgIHRoaXMuX2ZvY3VzdHJhcC5hY3RpdmF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiQ0LCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUyQxLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZJDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpO1xuICAgIH0pO1xuICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSQxLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgLy8gYSBiYWQgdHJpY2sgdG8gc2VncmVnYXRlIGNsaWNrcyB0aGF0IG1heSBzdGFydCBpbnNpZGUgZGlhbG9nIGJ1dCBlbmQgb3V0c2lkZSwgYW5kIGF2b2lkIGxpc3RlbiB0byBzY3JvbGxiYXIgY2xpY2tzXG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50ICE9PSBldmVudC50YXJnZXQgfHwgdGhpcy5fZWxlbWVudCAhPT0gZXZlbnQyLnRhcmdldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKTtcbiAgICAgIHRoaXMuX3Njcm9sbEJhci5yZXNldCgpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDQpO1xuICAgIH0pO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMyk7XG4gIH1cbiAgX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQkMSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKGluaXRpYWxPdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU1RBVElDKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZO1xuICAgICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgKi9cblxuICBfYWRqdXN0RGlhbG9nKCkge1xuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpO1xuICAgIGNvbnN0IGlzQm9keU92ZXJmbG93aW5nID0gc2Nyb2xsYmFyV2lkdGggPiAwO1xuICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCc7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YDtcbiAgICB9XG4gICAgaWYgKCFpc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nUmlnaHQnIDogJ3BhZGRpbmdMZWZ0JztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgIH1cbiAgfVxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJyc7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnJztcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZywgcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXShyZWxhdGVkVGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQyLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQyLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1ckNCwgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiQ0LCAoKSA9PiB7XG4gICAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IkMSk7XG4gIGlmIChhbHJlYWR5T3Blbikge1xuICAgIE1vZGFsLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKCk7XG4gIH1cbiAgY29uc3QgZGF0YSA9IE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgZGF0YS50b2dnbGUodGhpcyk7XG59KTtcbmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNiA9ICdvZmZjYW52YXMnO1xuY29uc3QgREFUQV9LRVkkMyA9ICdicy5vZmZjYW52YXMnO1xuY29uc3QgRVZFTlRfS0VZJDMgPSBgLiR7REFUQV9LRVkkM31gO1xuY29uc3QgREFUQV9BUElfS0VZJDEgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMiA9IGBsb2FkJHtFVkVOVF9LRVkkM30ke0RBVEFfQVBJX0tFWSQxfWA7XG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyQxID0gJ3Nob3dpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9ISURJTkcgPSAnaGlkaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQkFDS0RST1AgPSAnb2ZmY2FudmFzLWJhY2tkcm9wJztcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93JztcbmNvbnN0IEVWRU5UX1NIT1ckMyA9IGBzaG93JHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfU0hPV04kMyA9IGBzaG93biR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJREUkMyA9IGBoaWRlJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQzID0gYGhpZGRlbiR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSQxID0gYGNsaWNrJHtFVkVOVF9LRVkkM30ke0RBVEFfQVBJX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMSA9ICdbZGF0YS1icy10b2dnbGU9XCJvZmZjYW52YXNcIl0nO1xuY29uc3QgRGVmYXVsdCQ1ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ1ID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzY3JvbGw6ICdib29sZWFuJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgT2ZmY2FudmFzIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ1O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDU7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1ckMywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gdHJ1ZTtcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkckMSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCB8fCB0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDMpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyQxKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDMsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkMyk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgdGhpcy5fZWxlbWVudC5ibHVyKCk7XG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJRElORyk7XG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgpO1xuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDMsIENMQVNTX05BTUVfSElESU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpO1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5yZXNldCgpO1xuICAgICAgfVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDMpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxiYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICBjb25zdCBjbGlja0NhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9O1xuXG4gICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgY29uc3QgaXNWaXNpYmxlID0gQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApO1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgY2xhc3NOYW1lOiBDTEFTU19OQU1FX0JBQ0tEUk9QLFxuICAgICAgaXNWaXNpYmxlLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIHJvb3RFbGVtZW50OiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICBjbGlja0NhbGxiYWNrOiBpc1Zpc2libGUgPyBjbGlja0NhbGxiYWNrIDogbnVsbFxuICAgIH0pO1xuICB9XG4gIF9pbml0aWFsaXplRm9jdXNUcmFwKCkge1xuICAgIHJldHVybiBuZXcgRm9jdXNUcmFwKHtcbiAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERV9QUkVWRU5URUQpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQxLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQxLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiQzLCAoKSA9PiB7XG4gICAgLy8gZm9jdXMgb24gdHJpZ2dlciB3aGVuIGl0IGlzIGNsb3NlZFxuICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgYSB0b2dnbGVyIG9mIGFuIG9mZmNhbnZhcywgd2hpbGUgYW5vdGhlciBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKTtcbiAgaWYgKGFscmVhZHlPcGVuICYmIGFscmVhZHlPcGVuICE9PSB0YXJnZXQpIHtcbiAgICBPZmZjYW52YXMuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKTtcbiAgfVxuICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcbiAgZGF0YS50b2dnbGUodGhpcyk7XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEkkMiwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNlbGVjdG9yIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoT1BFTl9TRUxFQ1RPUikpIHtcbiAgICBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShzZWxlY3Rvcikuc2hvdygpO1xuICB9XG59KTtcbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZCgnW2FyaWEtbW9kYWxdW2NsYXNzKj1zaG93XVtjbGFzcyo9b2ZmY2FudmFzLV0nKSkge1xuICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XG4gICAgICBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50KS5oaWRlKCk7XG4gICAgfVxuICB9XG59KTtcbmVuYWJsZURpc21pc3NUcmlnZ2VyKE9mZmNhbnZhcyk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE9mZmNhbnZhcyk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8vIGpzLWRvY3Mtc3RhcnQgYWxsb3ctbGlzdFxuY29uc3QgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pO1xuY29uc3QgRGVmYXVsdEFsbG93bGlzdCA9IHtcbiAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgJyonOiBbJ2NsYXNzJywgJ2RpcicsICdpZCcsICdsYW5nJywgJ3JvbGUnLCBBUklBX0FUVFJJQlVURV9QQVRURVJOXSxcbiAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgYXJlYTogW10sXG4gIGI6IFtdLFxuICBicjogW10sXG4gIGNvbDogW10sXG4gIGNvZGU6IFtdLFxuICBkZDogW10sXG4gIGRpdjogW10sXG4gIGRsOiBbXSxcbiAgZHQ6IFtdLFxuICBlbTogW10sXG4gIGhyOiBbXSxcbiAgaDE6IFtdLFxuICBoMjogW10sXG4gIGgzOiBbXSxcbiAgaDQ6IFtdLFxuICBoNTogW10sXG4gIGg2OiBbXSxcbiAgaTogW10sXG4gIGltZzogWydzcmMnLCAnc3Jjc2V0JywgJ2FsdCcsICd0aXRsZScsICd3aWR0aCcsICdoZWlnaHQnXSxcbiAgbGk6IFtdLFxuICBvbDogW10sXG4gIHA6IFtdLFxuICBwcmU6IFtdLFxuICBzOiBbXSxcbiAgc21hbGw6IFtdLFxuICBzcGFuOiBbXSxcbiAgc3ViOiBbXSxcbiAgc3VwOiBbXSxcbiAgc3Ryb25nOiBbXSxcbiAgdTogW10sXG4gIHVsOiBbXVxufTtcbi8vIGpzLWRvY3MtZW5kIGFsbG93LWxpc3RcblxuY29uc3QgdXJpQXR0cmlidXRlcyA9IG5ldyBTZXQoWydiYWNrZ3JvdW5kJywgJ2NpdGUnLCAnaHJlZicsICdpdGVtdHlwZScsICdsb25nZGVzYycsICdwb3N0ZXInLCAnc3JjJywgJ3hsaW5rOmhyZWYnXSk7XG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBVUkxzIHRoYXQgYXJlIHNhZmUgd3J0LiBYU1MgaW4gVVJMIG5hdmlnYXRpb25cbiAqIGNvbnRleHRzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xNS4yLjgvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHMjTDM4XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2JldHRlci1yZWdleFxuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvaTtcbmNvbnN0IGFsbG93ZWRBdHRyaWJ1dGUgPSAoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlTGlzdCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBDaGVjayBpZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB2YWxpZGF0ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgcmV0dXJuIGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihhdHRyaWJ1dGVSZWdleCA9PiBhdHRyaWJ1dGVSZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkuc29tZShyZWdleCA9PiByZWdleC50ZXN0KGF0dHJpYnV0ZU5hbWUpKTtcbn07XG5mdW5jdGlvbiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgYWxsb3dMaXN0LCBzYW5pdGl6ZUZ1bmN0aW9uKSB7XG4gIGlmICghdW5zYWZlSHRtbC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5zYWZlSHRtbDtcbiAgfVxuICBpZiAoc2FuaXRpemVGdW5jdGlvbiAmJiB0eXBlb2Ygc2FuaXRpemVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZ1bmN0aW9uKHVuc2FmZUh0bWwpO1xuICB9XG4gIGNvbnN0IGRvbVBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpO1xuICBjb25zdCBlbGVtZW50cyA9IFtdLmNvbmNhdCguLi5jcmVhdGVkRG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIU9iamVjdC5rZXlzKGFsbG93TGlzdCkuaW5jbHVkZXMoZWxlbWVudE5hbWUpKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBbXS5jb25jYXQoLi4uZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICBjb25zdCBhbGxvd2VkQXR0cmlidXRlcyA9IFtdLmNvbmNhdChhbGxvd0xpc3RbJyonXSB8fCBbXSwgYWxsb3dMaXN0W2VsZW1lbnROYW1lXSB8fCBbXSk7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlTGlzdCkge1xuICAgICAgaWYgKCFhbGxvd2VkQXR0cmlidXRlKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS5ub2RlTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUw7XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3RlbXBsYXRlLWZhY3RvcnkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ1ID0gJ1RlbXBsYXRlRmFjdG9yeSc7XG5jb25zdCBEZWZhdWx0JDQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgY29udGVudDoge30sXG4gIC8vIHsgc2VsZWN0b3IgOiB0ZXh0ICwgIHNlbGVjdG9yMiA6IHRleHQyICwgfVxuICBleHRyYUNsYXNzOiAnJyxcbiAgaHRtbDogZmFsc2UsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+J1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDQgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGNvbnRlbnQ6ICdvYmplY3QnLFxuICBleHRyYUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZydcbn07XG5jb25zdCBEZWZhdWx0Q29udGVudFR5cGUgPSB7XG4gIGVudHJ5OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9ufG51bGwpJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGVtcGxhdGVGYWN0b3J5IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDQ7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRDb250ZW50KCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KS5tYXAoY29uZmlnID0+IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbmZpZykpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBoYXNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggPiAwO1xuICB9XG4gIGNoYW5nZUNvbnRlbnQoY29udGVudCkge1xuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb250ZW50KTtcbiAgICB0aGlzLl9jb25maWcuY29udGVudCA9IHtcbiAgICAgIC4uLnRoaXMuX2NvbmZpZy5jb250ZW50LFxuICAgICAgLi4uY29udGVudFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgdG9IdG1sKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRlbXBsYXRlV3JhcHBlci5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKHRoaXMuX2NvbmZpZy50ZW1wbGF0ZSk7XG4gICAgZm9yIChjb25zdCBbc2VsZWN0b3IsIHRleHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZy5jb250ZW50KSkge1xuICAgICAgdGhpcy5fc2V0Q29udGVudCh0ZW1wbGF0ZVdyYXBwZXIsIHRleHQsIHNlbGVjdG9yKTtcbiAgICB9XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZVdyYXBwZXIuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgZXh0cmFDbGFzcyA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5leHRyYUNsYXNzKTtcbiAgICBpZiAoZXh0cmFDbGFzcykge1xuICAgICAgdGVtcGxhdGUuY2xhc3NMaXN0LmFkZCguLi5leHRyYUNsYXNzLnNwbGl0KCcgJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnKSB7XG4gICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2NoZWNrQ29udGVudChjb25maWcuY29udGVudCk7XG4gIH1cbiAgX2NoZWNrQ29udGVudChhcmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoYXJnKSkge1xuICAgICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7XG4gICAgICAgIHNlbGVjdG9yLFxuICAgICAgICBlbnRyeTogY29udGVudFxuICAgICAgfSwgRGVmYXVsdENvbnRlbnRUeXBlKTtcbiAgICB9XG4gIH1cbiAgX3NldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpO1xuICAgIGlmICghdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRlbnQgPSB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KTtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgdGhpcy5fcHV0RWxlbWVudEluVGVtcGxhdGUoZ2V0RWxlbWVudChjb250ZW50KSwgdGVtcGxhdGVFbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZShjb250ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudDtcbiAgfVxuICBfbWF5YmVTYW5pdGl6ZShhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNhbml0aXplID8gc2FuaXRpemVIdG1sKGFyZywgdGhpcy5fY29uZmlnLmFsbG93TGlzdCwgdGhpcy5fY29uZmlnLnNhbml0aXplRm4pIDogYXJnO1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzXSk7XG4gIH1cbiAgX3B1dEVsZW1lbnRJblRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmFwcGVuZChlbGVtZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdG9vbHRpcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDQgPSAndG9vbHRpcCc7XG5jb25zdCBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFsnc2FuaXRpemUnLCAnYWxsb3dMaXN0JywgJ3Nhbml0aXplRm4nXSk7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMiA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfTU9EQUwgPSAnbW9kYWwnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDIgPSAnc2hvdyc7XG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJztcbmNvbnN0IFNFTEVDVE9SX01PREFMID0gYC4ke0NMQVNTX05BTUVfTU9EQUx9YDtcbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCc7XG5jb25zdCBUUklHR0VSX0hPVkVSID0gJ2hvdmVyJztcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnO1xuY29uc3QgVFJJR0dFUl9DTElDSyA9ICdjbGljayc7XG5jb25zdCBUUklHR0VSX01BTlVBTCA9ICdtYW51YWwnO1xuY29uc3QgRVZFTlRfSElERSQyID0gJ2hpZGUnO1xuY29uc3QgRVZFTlRfSElEREVOJDIgPSAnaGlkZGVuJztcbmNvbnN0IEVWRU5UX1NIT1ckMiA9ICdzaG93JztcbmNvbnN0IEVWRU5UX1NIT1dOJDIgPSAnc2hvd24nO1xuY29uc3QgRVZFTlRfSU5TRVJURUQgPSAnaW5zZXJ0ZWQnO1xuY29uc3QgRVZFTlRfQ0xJQ0skMSA9ICdjbGljayc7XG5jb25zdCBFVkVOVF9GT0NVU0lOJDEgPSAnZm9jdXNpbic7XG5jb25zdCBFVkVOVF9GT0NVU09VVCQxID0gJ2ZvY3Vzb3V0JztcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSAnbW91c2VlbnRlcic7XG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gJ21vdXNlbGVhdmUnO1xuY29uc3QgQXR0YWNobWVudE1hcCA9IHtcbiAgQVVUTzogJ2F1dG8nLFxuICBUT1A6ICd0b3AnLFxuICBSSUdIVDogaXNSVEwoKSA/ICdsZWZ0JyA6ICdyaWdodCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG4gIExFRlQ6IGlzUlRMKCkgPyAncmlnaHQnIDogJ2xlZnQnXG59O1xuY29uc3QgRGVmYXVsdCQzID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjb250YWluZXI6IGZhbHNlLFxuICBjdXN0b21DbGFzczogJycsXG4gIGRlbGF5OiAwLFxuICBmYWxsYmFja1BsYWNlbWVudHM6IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10sXG4gIGh0bWw6IGZhbHNlLFxuICBvZmZzZXQ6IFswLCA2XSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgc2VsZWN0b3I6IGZhbHNlLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+JyArICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PicgKyAnPC9kaXY+JyxcbiAgdGl0bGU6ICcnLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMyA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGJvdW5kYXJ5OiAnKHN0cmluZ3xlbGVtZW50KScsXG4gIGNvbnRhaW5lcjogJyhzdHJpbmd8ZWxlbWVudHxib29sZWFuKScsXG4gIGN1c3RvbUNsYXNzOiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBkZWxheTogJyhudW1iZXJ8b2JqZWN0KScsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogJ2FycmF5JyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBvZmZzZXQ6ICcoYXJyYXl8c3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBsYWNlbWVudDogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHNhbml0aXplOiAnYm9vbGVhbicsXG4gIHNhbml0aXplRm46ICcobnVsbHxmdW5jdGlvbiknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB0ZW1wbGF0ZTogJ3N0cmluZycsXG4gIHRpdGxlOiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKScsXG4gIHRyaWdnZXI6ICdzdHJpbmcnXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpO1xuICAgIH1cbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fdGltZW91dCA9IDA7XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbDtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge307XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbDtcbiAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBudWxsO1xuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBudWxsO1xuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy50aXAgPSBudWxsO1xuICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLl9maXhUaXRsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBlbmFibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgfVxuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlO1xuICB9XG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZDtcbiAgfVxuICB0b2dnbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICF0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrO1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2xlYXZlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VudGVyKCk7XG4gIH1cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSk7XG4gICAgfVxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKTtcbiAgICB9XG4gICAgaWYgKCEodGhpcy5faXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPVyQyKSk7XG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbnN0IGlzSW5UaGVEb20gPSAoc2hhZG93Um9vdCB8fCB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiB2NiByZW1vdmUgdGhpcyBvciBtYWtlIGl0IG9wdGlvbmFsXG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcC5nZXRBdHRyaWJ1dGUoJ2lkJykpO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRhaW5lclxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSU5TRVJURUQpKTtcbiAgICB9XG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcCk7XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfU0hPV04kMikpO1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURFJDIpKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQyKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfQ0xJQ0tdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZTtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsOyAvLyBpdCBpcyBhIHRyaWNrIHRvIHN1cHBvcnQgbWFudWFsIHRyaWdnZXJpbmdcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElEREVOJDIpKTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpO1xuICB9XG4gIF9nZXRUaXBFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy5fY3JlYXRlVGlwRWxlbWVudCh0aGlzLl9uZXdDb250ZW50IHx8IHRoaXMuX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGlwO1xuICB9XG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKCk7XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBjaGVjayBpbiB2NlxuICAgIGlmICghdGlwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFJDIsIENMQVNTX05BTUVfU0hPVyQyKTtcbiAgICAvLyBUT0RPOiB2NiB0aGUgZm9sbG93aW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIENTUyBvbmx5XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoYGJzLSR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hdXRvYCk7XG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKS50b1N0cmluZygpO1xuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpO1xuICAgIGlmICh0aGlzLl9pc0FuaW1hdGVkKCkpIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpcDtcbiAgfVxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gY29udGVudDtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG5ldyBUZW1wbGF0ZUZhY3Rvcnkoe1xuICAgICAgICAuLi50aGlzLl9jb25maWcsXG4gICAgICAgIC8vIHRoZSBgY29udGVudGAgdmFyIGhhcyB0byBiZSBhZnRlciBgdGhpcy5fY29uZmlnYFxuICAgICAgICAvLyB0byBvdmVycmlkZSBjb25maWcuY29udGVudCBpbiBjYXNlIG9mIHBvcG92ZXJcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgZXh0cmFDbGFzczogdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3Rvcnk7XG4gIH1cbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RPT0xUSVBfSU5ORVJdOiB0aGlzLl9nZXRUaXRsZSgpXG4gICAgfTtcbiAgfVxuICBfZ2V0VGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy50aXRsZSkgfHwgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UoZXZlbnQuZGVsZWdhdGVUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpO1xuICB9XG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuYW5pbWF0aW9uIHx8IHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMik7XG4gIH1cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckMik7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcih0aXApIHtcbiAgICBjb25zdCBwbGFjZW1lbnQgPSBleGVjdXRlKHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQsIFt0aGlzLCB0aXAsIHRoaXMuX2VsZW1lbnRdKTtcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV07XG4gICAgcmV0dXJuIFBvcHBlci5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCwgdGlwLCB0aGlzLl9nZXRQb3BwZXJDb25maWcoYXR0YWNobWVudCkpO1xuICB9XG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb2Zmc2V0XG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZXhlY3V0ZShhcmcsIFt0aGlzLl9lbGVtZW50XSk7XG4gIH1cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHNcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZWxlbWVudDogYC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgXG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgbmFtZTogJ3ByZVNldFBsYWNlbWVudCcsXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIHBoYXNlOiAnYmVmb3JlTWFpbicsXG4gICAgICAgIGZuOiBkYXRhID0+IHtcbiAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgLy8gT3RoZXJ3aXNlLCBQb3BwZXIgbWl4ZXMgdXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgZGltZW5zaW9ucyBzaW5jZSB0aGUgaW5pdGlhbCBhcnJvdyBzdHlsZSBpcyBmb3IgdG9wIHBsYWNlbWVudFxuICAgICAgICAgIHRoaXMuX2dldFRpcEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcsIGRhdGEuc3RhdGUucGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH07XG4gIH1cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBjb25zdCB0cmlnZ2VycyA9IHRoaXMuX2NvbmZpZy50cmlnZ2VyLnNwbGl0KCcgJyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0skMSksIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDogdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfRk9DVVNJTiQxKTtcbiAgICAgICAgY29uc3QgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VMRUFWRSkgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVCQxKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50SW4sIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gdHJ1ZTtcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50T3V0LCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgIGNvbnRleHQuX2xlYXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcik7XG4gIH1cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykgJiYgIXRoaXMuX2VsZW1lbnQudGV4dENvbnRlbnQudHJpbSgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSk7IC8vIERPIE5PVCBVU0UgSVQuIElzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gIH1cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlO1xuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdyk7XG4gIH1cbiAgX2xlYXZlKCkge1xuICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuaGlkZSk7XG4gIH1cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KTtcbiAgfVxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCk7XG4gICAgZm9yIChjb25zdCBkYXRhQXR0cmlidXRlIG9mIE9iamVjdC5rZXlzKGRhdGFBdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5oYXMoZGF0YUF0dHJpYnV0ZSkpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyaWJ1dGVdO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9O1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcik7XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aXRsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy50aXRsZSA9IGNvbmZpZy50aXRsZS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlO1xuICAgIGNvbmZpZy50cmlnZ2VyID0gJ21hbnVhbCc7XG5cbiAgICAvLyBJbiB0aGUgZnV0dXJlIGNhbiBiZSByZXBsYWNlZCB3aXRoOlxuICAgIC8vIGNvbnN0IGtleXNXaXRoRGlmZmVyZW50VmFsdWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VudHJ5WzBdXSAhPT0gdGhpcy5fY29uZmlnW2VudHJ5WzBdXSlcbiAgICAvLyBgT2JqZWN0LmZyb21FbnRyaWVzKGtleXNXaXRoRGlmZmVyZW50VmFsdWVzKWBcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9kaXNwb3NlUG9wcGVyKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwLnJlbW92ZSgpO1xuICAgICAgdGhpcy50aXAgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9vbHRpcCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBwb3BvdmVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMyA9ICdwb3BvdmVyJztcbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcic7XG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknO1xuY29uc3QgRGVmYXVsdCQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHQsXG4gIGNvbnRlbnQ6ICcnLFxuICBvZmZzZXQ6IFswLCA4XSxcbiAgcGxhY2VtZW50OiAncmlnaHQnLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWFycm93XCI+PC9kaXY+JyArICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0cmlnZ2VyOiAnY2xpY2snXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkMiA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFBvcG92ZXIgZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQyO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQzO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RJVExFXTogdGhpcy5fZ2V0VGl0bGUoKSxcbiAgICAgIFtTRUxFQ1RPUl9DT05URU5UXTogdGhpcy5fZ2V0Q29udGVudCgpXG4gICAgfTtcbiAgfVxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gUG9wb3Zlci5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDIgPSAnc2Nyb2xsc3B5JztcbmNvbnN0IERBVEFfS0VZJDIgPSAnYnMuc2Nyb2xsc3B5JztcbmNvbnN0IEVWRU5UX0tFWSQyID0gYC4ke0RBVEFfS0VZJDJ9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWSQyfWA7XG5jb25zdCBFVkVOVF9DTElDSyA9IGBjbGljayR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkkMSA9IGBsb2FkJHtFVkVOVF9LRVkkMn0ke0RBVEFfQVBJX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNID0gJ2Ryb3Bkb3duLWl0ZW0nO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMSA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9TUFkgPSAnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJztcbmNvbnN0IFNFTEVDVE9SX1RBUkdFVF9MSU5LUyA9ICdbaHJlZl0nO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnO1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJTktTID0gJy5uYXYtbGluayc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9MSU5LX0lURU1TID0gYCR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9OQVZfSVRFTVN9ID4gJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9YDtcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOID0gJy5kcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUkMSA9ICcuZHJvcGRvd24tdG9nZ2xlJztcbmNvbnN0IERlZmF1bHQkMSA9IHtcbiAgb2Zmc2V0OiBudWxsLFxuICAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn07XG5jb25zdCBEZWZhdWx0VHlwZSQxID0ge1xuICBvZmZzZXQ6ICcobnVtYmVyfG51bGwpJyxcbiAgLy8gVE9ETyB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnc3RyaW5nJyxcbiAgc21vb3RoU2Nyb2xsOiAnYm9vbGVhbicsXG4gIHRhcmdldDogJ2VsZW1lbnQnLFxuICB0aHJlc2hvbGQ6ICdhcnJheSdcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbFNweSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9yb290RWxlbWVudCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudCkub3ZlcmZsb3dZID09PSAndmlzaWJsZScgPyBudWxsIDogdGhpcy5fZWxlbWVudDtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgIHRoaXMuX29ic2VydmVyID0gbnVsbDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEgPSB7XG4gICAgICB2aXNpYmxlRW50cnlUb3A6IDAsXG4gICAgICBwYXJlbnRTY3JvbGxUb3A6IDBcbiAgICB9O1xuICAgIHRoaXMucmVmcmVzaCgpOyAvLyBpbml0aWFsaXplXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQxO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDE7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDI7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCk7XG4gICAgdGhpcy5fbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKTtcbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIgPSB0aGlzLl9nZXROZXdPYnNlcnZlcigpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIFRPRE86IG9uIHY2IHRhcmdldCBzaG91bGQgYmUgZ2l2ZW4gZXhwbGljaXRseSAmIHJlbW92ZSB0aGUge3RhcmdldDogJ3NzLXRhcmdldCd9IGNhc2VcbiAgICBjb25maWcudGFyZ2V0ID0gZ2V0RWxlbWVudChjb25maWcudGFyZ2V0KSB8fCBkb2N1bWVudC5ib2R5O1xuXG4gICAgLy8gVE9ETzogdjYgT25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gVXNlIHJvb3RNYXJnaW4gb25seVxuICAgIGNvbmZpZy5yb290TWFyZ2luID0gY29uZmlnLm9mZnNldCA/IGAke2NvbmZpZy5vZmZzZXR9cHggMHB4IC0zMCVgIDogY29uZmlnLnJvb3RNYXJnaW47XG4gICAgaWYgKHR5cGVvZiBjb25maWcudGhyZXNob2xkID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnLnRocmVzaG9sZCA9IGNvbmZpZy50aHJlc2hvbGQuc3BsaXQoJywnKS5tYXAodmFsdWUgPT4gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc21vb3RoU2Nyb2xsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSyk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLLCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLmdldChldmVudC50YXJnZXQuaGFzaCk7XG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3RFbGVtZW50IHx8IHdpbmRvdztcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gb2JzZXJ2YWJsZVNlY3Rpb24ub2Zmc2V0VG9wIC0gdGhpcy5fZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3A6IGhlaWdodCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9O1xuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLl9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9IGVudHJ5ID0+IHtcbiAgICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3AgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wO1xuICAgICAgdGhpcy5fcHJvY2Vzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgfTtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGxUb3AgPSAodGhpcy5fcm9vdEVsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3A7XG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3A7XG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcCA9IHBhcmVudFNjcm9sbFRvcDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wO1xuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICAgIC8vIGlmIHBhcmVudCBpc24ndCBzY3JvbGxlZCwgbGV0J3Mga2VlcCB0aGUgZmlyc3QgdmlzaWJsZSBpdGVtLCBicmVha2luZyB0aGUgaXRlcmF0aW9uXG4gICAgICAgIGlmICghcGFyZW50U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIHVwLCBwaWNrIHRoZSBzbWFsbGVzdCBvZmZzZXRUb3BcbiAgICAgIGlmICghdXNlclNjcm9sbHNEb3duICYmICFlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMpIHtcbiAgICAgICAgYWN0aXZhdGUoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgZm9yIChjb25zdCBhbmNob3Igb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbmNob3IgaGFzIGFuIGlkIGFuZCBpcyBub3QgZGlzYWJsZWRcbiAgICAgIGlmICghYW5jaG9yLmhhc2ggfHwgaXNEaXNhYmxlZChhbmNob3IpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGRlY29kZVVSSShhbmNob3IuaGFzaCksIHRoaXMuX2VsZW1lbnQpO1xuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2YWJsZVNlY3Rpb24gZXhpc3RzICYgaXMgdmlzaWJsZVxuICAgICAgaWYgKGlzVmlzaWJsZShvYnNlcnZhYmxlU2VjdGlvbikpIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0TGlua3Muc2V0KGRlY29kZVVSSShhbmNob3IuaGFzaCksIGFuY2hvcik7XG4gICAgICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5zZXQoYW5jaG9yLmhhc2gsIG9ic2VydmFibGVTZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGhpcy5fY29uZmlnLnRhcmdldCk7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIHRoaXMuX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0YXJnZXRcbiAgICB9KTtcbiAgfVxuICBfYWN0aXZhdGVQYXJlbnRzKHRhcmdldCkge1xuICAgIC8vIEFjdGl2YXRlIGRyb3Bkb3duIHBhcmVudHNcbiAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0lURU0pKSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxLCB0YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTikpLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgbGlzdEdyb3VwIG9mIFNlbGVjdG9yRW5naW5lLnBhcmVudHModGFyZ2V0LCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCkpIHtcbiAgICAgIC8vIFNldCB0cmlnZ2VyZWQgbGlua3MgcGFyZW50cyBhcyBhY3RpdmVcbiAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBTRUxFQ1RPUl9MSU5LX0lURU1TKSkge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIGNvbnN0IGFjdGl2ZU5vZGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChgJHtTRUxFQ1RPUl9UQVJHRVRfTElOS1N9LiR7Q0xBU1NfTkFNRV9BQ1RJVkUkMX1gLCBwYXJlbnQpO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBhY3RpdmVOb2Rlcykge1xuICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFJDEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQxLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc3B5IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9TUFkpKSB7XG4gICAgU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2Uoc3B5KTtcbiAgfVxufSk7XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0YWIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQxID0gJ3RhYic7XG5jb25zdCBEQVRBX0tFWSQxID0gJ2JzLnRhYic7XG5jb25zdCBFVkVOVF9LRVkkMSA9IGAuJHtEQVRBX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9ISURFJDEgPSBgaGlkZSR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiQxID0gYGhpZGRlbiR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX1NIT1ckMSA9IGBzaG93JHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPV04kMSA9IGBzaG93biR7RVZFTlRfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0JztcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZID0gJ0Fycm93RG93bic7XG5jb25zdCBIT01FX0tFWSA9ICdIb21lJztcbmNvbnN0IEVORF9LRVkgPSAnRW5kJztcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX0ZBREUkMSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQxID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gYDpub3QoJHtTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9KWA7XG5jb25zdCBTRUxFQ1RPUl9UQUJfUEFORUwgPSAnLmxpc3QtZ3JvdXAsIC5uYXYsIFtyb2xlPVwidGFibGlzdFwiXSc7XG5jb25zdCBTRUxFQ1RPUl9PVVRFUiA9ICcubmF2LWl0ZW0sIC5saXN0LWdyb3VwLWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfSU5ORVIgPSBgLm5hdi1saW5rJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgLmxpc3QtZ3JvdXAtaXRlbSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIFtyb2xlPVwidGFiXCJdJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nOyAvLyBUT0RPOiBjb3VsZCBvbmx5IGJlIGB0YWJgIGluIHY2XG5jb25zdCBTRUxFQ1RPUl9JTk5FUl9FTEVNID0gYCR7U0VMRUNUT1JfSU5ORVJ9LCAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUgPSBgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdYDtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBzdXBlcihlbGVtZW50KTtcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfVEFCX1BBTkVMKTtcbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgICAgLy8gVE9ETzogc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpbiB2NlxuICAgICAgLy8gdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlbGVtZW50Lm91dGVySFRNTH0gaGFzIG5vdCBhIHZhbGlkIHBhcmVudCAke1NFTEVDVE9SX0lOTkVSX0VMRU19YClcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgaW5pdGlhbCBhcmlhIGF0dHJpYnV0ZXNcbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlcyh0aGlzLl9wYXJlbnQsIHRoaXMuX2dldENoaWxkcmVuKCkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQxO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgLy8gU2hvd3MgdGhpcyBlbGVtIGFuZCBkZWFjdGl2YXRlIHRoZSBhY3RpdmUgc2libGluZyBpZiBleGlzdHNcbiAgICBjb25zdCBpbm5lckVsZW0gPSB0aGlzLl9lbGVtZW50O1xuICAgIGlmICh0aGlzLl9lbGVtSXNBY3RpdmUoaW5uZXJFbGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlYXJjaCBmb3IgYWN0aXZlIHRhYiBvbiBzYW1lIHBhcmVudCB0byBkZWFjdGl2YXRlIGl0XG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5fZ2V0QWN0aXZlRWxlbSgpO1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IGFjdGl2ZSA/IEV2ZW50SGFuZGxlci50cmlnZ2VyKGFjdGl2ZSwgRVZFTlRfSElERSQxLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiBpbm5lckVsZW1cbiAgICB9KSA6IG51bGw7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIoaW5uZXJFbGVtLCBFVkVOVF9TSE9XJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGFjdGl2ZVxuICAgIH0pO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBoaWRlRXZlbnQgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZGVhY3RpdmF0ZShhY3RpdmUsIGlubmVyRWxlbSk7XG4gICAgdGhpcy5fYWN0aXZhdGUoaW5uZXJFbGVtLCBhY3RpdmUpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKTsgLy8gU2VhcmNoIGFuZCBhY3RpdmF0ZS9zaG93IHRoZSBwcm9wZXIgc2VjdGlvblxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSAhPT0gJ3RhYicpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgdHJ1ZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9TSE9XTiQxLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQxKSk7XG4gIH1cbiAgX2RlYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgICBlbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9kZWFjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGRlYWN0aXZhdGUgdGhlIHNob3duIHNlY3Rpb24gdG9vXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgZmFsc2UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfSElEREVOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICghW0FSUk9XX0xFRlRfS0VZLCBBUlJPV19SSUdIVF9LRVksIEFSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVksIEhPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBzdG9wUHJvcGFnYXRpb24vcHJldmVudERlZmF1bHQgYm90aCBhZGRlZCB0byBzdXBwb3J0IHVwL2Rvd24ga2V5cyB3aXRob3V0IHNjcm9sbGluZyB0aGUgcGFnZVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKTtcbiAgICBsZXQgbmV4dEFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKFtIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBjaGlsZHJlbltldmVudC5rZXkgPT09IEhPTUVfS0VZID8gMCA6IGNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpc05leHQgPSBbQVJST1dfUklHSFRfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KTtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoY2hpbGRyZW4sIGV2ZW50LnRhcmdldCwgaXNOZXh0LCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKG5leHRBY3RpdmVFbGVtZW50KSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgIH0pO1xuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKTtcbiAgICB9XG4gIH1cbiAgX2dldENoaWxkcmVuKCkge1xuICAgIC8vIGNvbGxlY3Rpb24gb2YgaW5uZXIgZWxlbWVudHNcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JTk5FUl9FTEVNLCB0aGlzLl9wYXJlbnQpO1xuICB9XG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbDtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXMocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHBhcmVudCwgJ3JvbGUnLCAndGFibGlzdCcpO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCk7XG4gICAgfVxuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZCk7XG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpO1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChjaGlsZCk7XG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpO1xuICAgIGlmIChvdXRlckVsZW0gIT09IGNoaWxkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhvdXRlckVsZW0sICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKTtcblxuICAgIC8vIHNldCBhdHRyaWJ1dGVzIHRvIHRoZSByZWxhdGVkIHBhbmVsIHRvb1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCk7XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpO1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ3JvbGUnLCAndGFicGFuZWwnKTtcbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAke2NoaWxkLmlkfWApO1xuICAgIH1cbiAgfVxuICBfdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgb3Blbikge1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIW91dGVyRWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfRFJPUERPV04pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRvZ2dsZSA9IChzZWxlY3RvciwgY2xhc3NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3Rvciwgb3V0ZXJFbGVtKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjbGFzc05hbWUsIG9wZW4pO1xuICAgICAgfVxuICAgIH07XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VLCBDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgb3V0ZXJFbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4pO1xuICB9XG4gIF9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgX2VsZW1Jc0FjdGl2ZShlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIGlubmVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtbGluaylcbiAgX2dldElubmVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0ubWF0Y2hlcyhTRUxFQ1RPUl9JTk5FUl9FTEVNKSA/IGVsZW0gOiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lOTkVSX0VMRU0sIGVsZW0pO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgb3V0ZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1pdGVtKVxuICBfZ2V0T3V0ZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbG9zZXN0KFNFTEVDVE9SX09VVEVSKSB8fCBlbGVtO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS5zaG93KCk7XG59KTtcblxuLyoqXG4gKiBJbml0aWFsaXplIG9uIGZvY3VzXG4gKi9cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFKSkge1xuICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpO1xuICB9XG59KTtcbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYik7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b2FzdC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RvYXN0JztcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvYXN0JztcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gO1xuY29uc3QgRVZFTlRfTU9VU0VPVkVSID0gYG1vdXNlb3ZlciR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSBgZm9jdXNvdXQke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJzsgLy8gQGRlcHJlY2F0ZWQgLSBrZXB0IGhlcmUgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93JztcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJztcbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYXV0b2hpZGU6ICdib29sZWFuJyxcbiAgZGVsYXk6ICdudW1iZXInXG59O1xuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTik7XG4gICAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfU0hPV0lORyk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbik7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0hJREUpOyAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTik7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBpc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9tYXliZVNjaGVkdWxlSGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hdXRvaGlkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiB8fCB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheSk7XG4gIH1cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBpZiAodGhpcy5fZWxlbWVudCA9PT0gbmV4dEVsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5jb250YWlucyhuZXh0RWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9WRVIsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTSU4sIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSk7XG4gIH1cbiAgX2NsZWFyVGltZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10odGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKFRvYXN0KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVG9hc3QpO1xuXG5leHBvcnQgeyBBbGVydCwgQnV0dG9uLCBDYXJvdXNlbCwgQ29sbGFwc2UsIERyb3Bkb3duLCBNb2RhbCwgT2ZmY2FudmFzLCBQb3BvdmVyLCBTY3JvbGxTcHksIFRhYiwgVG9hc3QsIFRvb2x0aXAgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb3RzdHJhcC5lc20uanMubWFwXG4iLCJmdW5jdGlvbiBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlIC0gZmlsZSBzaXplIGhhY2tzXG4gICAgICAgIHJlcXVlc3Qub25jb21wbGV0ZSA9IHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gcmVzb2x2ZShyZXF1ZXN0LnJlc3VsdCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgLSBmaWxlIHNpemUgaGFja3NcbiAgICAgICAgcmVxdWVzdC5vbmFib3J0ID0gcmVxdWVzdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlU3RvcmUoZGJOYW1lLCBzdG9yZU5hbWUpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTtcbiAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9ICgpID0+IHJlcXVlc3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG4gICAgY29uc3QgZGJwID0gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KTtcbiAgICByZXR1cm4gKHR4TW9kZSwgY2FsbGJhY2spID0+IGRicC50aGVuKChkYikgPT4gY2FsbGJhY2soZGIudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCB0eE1vZGUpLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkpKTtcbn1cbmxldCBkZWZhdWx0R2V0U3RvcmVGdW5jO1xuZnVuY3Rpb24gZGVmYXVsdEdldFN0b3JlKCkge1xuICAgIGlmICghZGVmYXVsdEdldFN0b3JlRnVuYykge1xuICAgICAgICBkZWZhdWx0R2V0U3RvcmVGdW5jID0gY3JlYXRlU3RvcmUoJ2tleXZhbC1zdG9yZScsICdrZXl2YWwnKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRHZXRTdG9yZUZ1bmM7XG59XG4vKipcbiAqIEdldCBhIHZhbHVlIGJ5IGl0cyBrZXkuXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXksIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldChrZXkpKSk7XG59XG4vKipcbiAqIFNldCBhIHZhbHVlIHdpdGggYSBrZXkuXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBzdG9yZS5wdXQodmFsdWUsIGtleSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbi8qKlxuICogU2V0IG11bHRpcGxlIHZhbHVlcyBhdCBvbmNlLiBUaGlzIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgc2V0KCkgbXVsdGlwbGUgdGltZXMuXG4gKiBJdCdzIGFsc28gYXRvbWljIOKAkyBpZiBvbmUgb2YgdGhlIHBhaXJzIGNhbid0IGJlIGFkZGVkLCBub25lIHdpbGwgYmUgYWRkZWQuXG4gKlxuICogQHBhcmFtIGVudHJpZXMgQXJyYXkgb2YgZW50cmllcywgd2hlcmUgZWFjaCBlbnRyeSBpcyBhbiBhcnJheSBvZiBgW2tleSwgdmFsdWVdYC5cbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBzZXRNYW55KGVudHJpZXMsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiBzdG9yZS5wdXQoZW50cnlbMV0sIGVudHJ5WzBdKSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbn1cbi8qKlxuICogR2V0IG11bHRpcGxlIHZhbHVlcyBieSB0aGVpciBrZXlzXG4gKlxuICogQHBhcmFtIGtleXNcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBnZXRNYW55KGtleXMsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBQcm9taXNlLmFsbChrZXlzLm1hcCgoa2V5KSA9PiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldChrZXkpKSkpKTtcbn1cbi8qKlxuICogVXBkYXRlIGEgdmFsdWUuIFRoaXMgbGV0cyB5b3Ugc2VlIHRoZSBvbGQgdmFsdWUgYW5kIHVwZGF0ZSBpdCBhcyBhbiBhdG9taWMgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB1cGRhdGVyIEEgY2FsbGJhY2sgdGhhdCB0YWtlcyB0aGUgb2xkIHZhbHVlIGFuZCByZXR1cm5zIGEgbmV3IHZhbHVlLlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZShrZXksIHVwZGF0ZXIsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4gXG4gICAgLy8gTmVlZCB0byBjcmVhdGUgdGhlIHByb21pc2UgbWFudWFsbHkuXG4gICAgLy8gSWYgSSB0cnkgdG8gY2hhaW4gcHJvbWlzZXMsIHRoZSB0cmFuc2FjdGlvbiBjbG9zZXMgaW4gYnJvd3NlcnNcbiAgICAvLyB0aGF0IHVzZSBhIHByb21pc2UgcG9seWZpbGwgKElFMTAvMTEpLlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc3RvcmUuZ2V0KGtleSkub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXQodXBkYXRlcih0aGlzLnJlc3VsdCksIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSkpO1xufVxuLyoqXG4gKiBEZWxldGUgYSBwYXJ0aWN1bGFyIGtleSBmcm9tIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gY3VzdG9tU3RvcmUgTWV0aG9kIHRvIGdldCBhIGN1c3RvbSBzdG9yZS4gVXNlIHdpdGggY2F1dGlvbiAoc2VlIHRoZSBkb2NzKS5cbiAqL1xuZnVuY3Rpb24gZGVsKGtleSwgY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZHdyaXRlJywgKHN0b3JlKSA9PiB7XG4gICAgICAgIHN0b3JlLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG4vKipcbiAqIERlbGV0ZSBtdWx0aXBsZSBrZXlzIGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIGtleXMgTGlzdCBvZiBrZXlzIHRvIGRlbGV0ZS5cbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBkZWxNYW55KGtleXMsIGN1c3RvbVN0b3JlID0gZGVmYXVsdEdldFN0b3JlKCkpIHtcbiAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWR3cml0ZScsIChzdG9yZSkgPT4ge1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4gc3RvcmUuZGVsZXRlKGtleSkpO1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG4gICAgfSk7XG59XG4vKipcbiAqIENsZWFyIGFsbCB2YWx1ZXMgaW4gdGhlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSBjdXN0b21TdG9yZSBNZXRob2QgdG8gZ2V0IGEgY3VzdG9tIHN0b3JlLiBVc2Ugd2l0aCBjYXV0aW9uIChzZWUgdGhlIGRvY3MpLlxuICovXG5mdW5jdGlvbiBjbGVhcihjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkd3JpdGUnLCAoc3RvcmUpID0+IHtcbiAgICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZWFjaEN1cnNvcihzdG9yZSwgY2FsbGJhY2spIHtcbiAgICBzdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYWxsYmFjayh0aGlzLnJlc3VsdCk7XG4gICAgICAgIHRoaXMucmVzdWx0LmNvbnRpbnVlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS50cmFuc2FjdGlvbik7XG59XG4vKipcbiAqIEdldCBhbGwga2V5cyBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGtleXMoY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IHtcbiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaWYgKHN0b3JlLmdldEFsbEtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLmdldEFsbEtleXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIGVhY2hDdXJzb3Ioc3RvcmUsIChjdXJzb3IpID0+IGl0ZW1zLnB1c2goY3Vyc29yLmtleSkpLnRoZW4oKCkgPT4gaXRlbXMpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBHZXQgYWxsIHZhbHVlcyBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhjdXN0b21TdG9yZSA9IGRlZmF1bHRHZXRTdG9yZSgpKSB7XG4gICAgcmV0dXJuIGN1c3RvbVN0b3JlKCdyZWFkb25seScsIChzdG9yZSkgPT4ge1xuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIG1vZGVybiBicm93c2Vyc1xuICAgICAgICBpZiAoc3RvcmUuZ2V0QWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXRBbGwoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIGVhY2hDdXJzb3Ioc3RvcmUsIChjdXJzb3IpID0+IGl0ZW1zLnB1c2goY3Vyc29yLnZhbHVlKSkudGhlbigoKSA9PiBpdGVtcyk7XG4gICAgfSk7XG59XG4vKipcbiAqIEdldCBhbGwgZW50cmllcyBpbiB0aGUgc3RvcmUuIEVhY2ggZW50cnkgaXMgYW4gYXJyYXkgb2YgYFtrZXksIHZhbHVlXWAuXG4gKlxuICogQHBhcmFtIGN1c3RvbVN0b3JlIE1ldGhvZCB0byBnZXQgYSBjdXN0b20gc3RvcmUuIFVzZSB3aXRoIGNhdXRpb24gKHNlZSB0aGUgZG9jcykuXG4gKi9cbmZ1bmN0aW9uIGVudHJpZXMoY3VzdG9tU3RvcmUgPSBkZWZhdWx0R2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjdXN0b21TdG9yZSgncmVhZG9ubHknLCAoc3RvcmUpID0+IHtcbiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgLy8gKGFsdGhvdWdoLCBob3BlZnVsbHkgd2UnbGwgZ2V0IGEgc2ltcGxlciBwYXRoIHNvbWUgZGF5KVxuICAgICAgICBpZiAoc3RvcmUuZ2V0QWxsICYmIHN0b3JlLmdldEFsbEtleXMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgcHJvbWlzaWZ5UmVxdWVzdChzdG9yZS5nZXRBbGxLZXlzKCkpLFxuICAgICAgICAgICAgICAgIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0QWxsKCkpLFxuICAgICAgICAgICAgXSkudGhlbigoW2tleXMsIHZhbHVlc10pID0+IGtleXMubWFwKChrZXksIGkpID0+IFtrZXksIHZhbHVlc1tpXV0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICByZXR1cm4gY3VzdG9tU3RvcmUoJ3JlYWRvbmx5JywgKHN0b3JlKSA9PiBlYWNoQ3Vyc29yKHN0b3JlLCAoY3Vyc29yKSA9PiBpdGVtcy5wdXNoKFtjdXJzb3Iua2V5LCBjdXJzb3IudmFsdWVdKSkudGhlbigoKSA9PiBpdGVtcykpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgeyBjbGVhciwgY3JlYXRlU3RvcmUsIGRlbCwgZGVsTWFueSwgZW50cmllcywgZ2V0LCBnZXRNYW55LCBrZXlzLCBwcm9taXNpZnlSZXF1ZXN0LCBzZXQsIHNldE1hbnksIHVwZGF0ZSwgdmFsdWVzIH07XG4iLCJpbXBvcnQgeyBJbWFnZVR5cGUgfSBmcm9tIFwiLi9zdmctY29udmVydFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjaGVja1N1cHBvcnQodHlwZTogSW1hZ2VUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGUgPT0gXCJwbmdcIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIENsaXBib2FyZEl0ZW0uc3VwcG9ydHMoKHR5cGUgPT0gXCJzdmdcIikgPyBcImltYWdlL3N2Zyt4bWxcIiA6IFwiaW1hZ2UvanBlZ1wiKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIFwiIC0gZXJyb3IgPSBubyBzdXBwb3J0IGZvciBQTkdcIik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59IiwiaW1wb3J0IFwiLi9zZXR0aW5ncy5zY3NzXCI7XG5pbXBvcnQgKiBhcyBib290c3RyYXAgZnJvbSBcImJvb3RzdHJhcFwiO1xuaW1wb3J0IHsgZ2V0IGFzIGlkYkdldCwgc2V0IGFzIGlkYlNldCB9IGZyb20gXCJpZGIta2V5dmFsXCI7XG5pbXBvcnQgY2hlY2tTdXBwb3J0IGZyb20gXCIuL2xpYi9jaGVjay1zdXBwb3J0XCI7XG5cbmNvbnN0IERPTSA9IHtcbiAgICBcInNpemVcIjoge1xuICAgICAgICBcIndpZHRoXCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3NpemUtd2lkdGhcIikgYXMgSFRNTElucHV0RWxlbWVudCksXG4gICAgICAgIFwiaGVpZ2h0XCI6IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3NpemUtaGVpZ2h0XCIpIGFzIEhUTUxJbnB1dEVsZW1lbnQpXG4gICAgfSxcbiAgICBcIm1haW5cIjogKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FyZC1ib2R5XCIpIGFzIEhUTUxEaXZFbGVtZW50KVxufTtcblxud2luZG93Lm9ubG9hZCA9IGFzeW5jICgpID0+IHtcbiAgICBsZXQgc2l6ZSA9IGF3YWl0IGlkYkdldChcInNpemVcIikgPz8gMjAwMDtcbiAgICBET00uc2l6ZS53aWR0aC52YWx1ZSA9IHNpemU7XG4gICAgRE9NLnNpemUuaGVpZ2h0LnZhbHVlID0gc2l6ZTtcbiAgICBjb25zb2xlLmxvZyhzaXplKTtcblxuICAgIERPTS5zaXplLndpZHRoLm9ua2V5dXAgPSBET00uc2l6ZS53aWR0aC5vbnBhc3RlID0gRE9NLnNpemUud2lkdGgub25jaGFuZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGlkYlNldChcInNpemVcIiwgRE9NLnNpemUud2lkdGgudmFsdWUpO1xuICAgICAgICBET00uc2l6ZS5oZWlnaHQudmFsdWUgPSBET00uc2l6ZS53aWR0aC52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgc3VwcG9ydGVkVHlwZXMgPSBbXCJwbmdcIl07XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoY2hlY2tTdXBwb3J0KFwic3ZnXCIpKSB7XG4gICAgICAgICAgICBzdXBwb3J0ZWRUeXBlcy5wdXNoKFwic3ZnXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrU3VwcG9ydChcImpwZWdcIikpIHtcbiAgICAgICAgICAgIHN1cHBvcnRlZFR5cGVzLnB1c2goXCJqcGVnXCIpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2xpcGJvYXJkSXRlbS5zdXBwb3J0cygpIGVycm9yLCByZXBvcnRpbmcgUE5HLW9ubHkgc3VwcG9ydFwiKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGxldCB1bnN1cHBvcnRlZFR5cGVzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB1bnN1cHBvcnRlZFR5cGVzLmNsYXNzTGlzdC5hZGQoXCJpbnB1dC1ncm91cFwiLCBcInVzLXR5cGVzXCIpO1xuXG4gICAgbGV0IHN2Z0J0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgc3ZnQnRuLmNsYXNzTGlzdC5hZGQoXCJidG5cIiwgXCJidG4tb3V0bGluZS1zZWNvbmRhcnlcIiwgXCJkcm9wZG93bi10b2dnbGVcIik7XG4gICAgc3ZnQnRuLnNldEF0dHJpYnV0ZShcImRhdGEtYnMtdG9nZ2xlXCIsIFwiZHJvcGRvd25cIik7XG4gICAgc3ZnQnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcbiAgICBzdmdCdG4uaW5uZXJUZXh0ID0gXCJDb3B5IFNWR3MgYXNcIjtcbiAgICB1bnN1cHBvcnRlZFR5cGVzLmFwcGVuZENoaWxkKHN2Z0J0bik7XG5cbiAgICBsZXQgc3ZnU2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInVsXCIpO1xuICAgIHN2Z1NlbC5jbGFzc0xpc3QuYWRkKFwiZHJvcGRvd24tbWVudVwiKTtcblxuICAgIGlmIChzdXBwb3J0ZWRUeXBlcy5pbmNsdWRlcyhcInN2Z1wiKSkge1xuICAgICAgICBsZXQgY29weVNWR0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICAgICAgbGV0IGNvcHlTVkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgY29weVNWRy5jbGFzc0xpc3QuYWRkKFwiZHJvcGRvd24taXRlbVwiKTtcbiAgICAgICAgY29weVNWRy5pZCA9IFwic3ZnLWNvcHktc3ZnXCI7XG4gICAgICAgIGNvcHlTVkcuaHJlZiA9IFwiI1wiO1xuICAgICAgICBjb3B5U1ZHLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBpZGJTZXQoXCJjb3B5LXN2Z1wiLCBcInN2Z1wiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29weVNWRy5pbm5lclRleHQgPSBcIlNWR1wiO1xuICAgICAgICBjb3B5U1ZHQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvcHlTVkcpO1xuICAgICAgICBzdmdTZWwuYXBwZW5kQ2hpbGQoY29weVNWR0NvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgbGV0IHN2Z0NvcHlUZXh0Q29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO1xuICAgIGxldCBzdmdDb3B5VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgIHN2Z0NvcHlUZXh0LmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1pdGVtXCIpO1xuICAgIHN2Z0NvcHlUZXh0LmlkID0gXCJzdmctY29weS10ZXh0XCI7XG4gICAgc3ZnQ29weVRleHQuaHJlZiA9IFwiI1wiO1xuICAgIHN2Z0NvcHlUZXh0Lm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGlkYlNldChcImNvcHktc3ZnXCIsIFwidGV4dFwiKTtcbiAgICB9O1xuICAgIHN2Z0NvcHlUZXh0LmlubmVyVGV4dCA9IFwiVGV4dFwiO1xuICAgIHN2Z0NvcHlUZXh0Q29udGFpbmVyLmFwcGVuZENoaWxkKHN2Z0NvcHlUZXh0KTtcbiAgICBzdmdTZWwuYXBwZW5kQ2hpbGQoc3ZnQ29weVRleHRDb250YWluZXIpO1xuXG4gICAgbGV0IHN2Z0NvcHlQTkdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgbGV0IHN2Z0NvcHlQTkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBzdmdDb3B5UE5HLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1pdGVtXCIpO1xuICAgIHN2Z0NvcHlQTkcuaWQgPSBcInN2Zy1jb3B5LXBuZ1wiO1xuICAgIHN2Z0NvcHlQTkcuaHJlZiA9IFwiI1wiO1xuICAgIHN2Z0NvcHlQTkcub25jbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgaWRiU2V0KFwiY29weS1zdmdcIiwgXCJwbmdcIik7XG4gICAgfTtcbiAgICBzdmdDb3B5UE5HLmlubmVyVGV4dCA9IFwiUE5HXCI7XG4gICAgc3ZnQ29weVBOR0NvbnRhaW5lci5hcHBlbmRDaGlsZChzdmdDb3B5UE5HKTtcbiAgICBzdmdTZWwuYXBwZW5kQ2hpbGQoc3ZnQ29weVBOR0NvbnRhaW5lcik7XG5cbiAgICB1bnN1cHBvcnRlZFR5cGVzLmFwcGVuZENoaWxkKHN2Z1NlbCk7XG5cbiAgICBuZXcgYm9vdHN0cmFwLkRyb3Bkb3duKHN2Z0J0bik7XG5cbiAgICBsZXQganBnQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgICBqcGdCdG4uY2xhc3NMaXN0LmFkZChcImJ0blwiLCBcImJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiLCBcImRyb3Bkb3duLXRvZ2dsZVwiKTtcbiAgICBqcGdCdG4uc2V0QXR0cmlidXRlKFwiZGF0YS1icy10b2dnbGVcIiwgXCJkcm9wZG93blwiKTtcbiAgICBqcGdCdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBcImZhbHNlXCIpO1xuICAgIGpwZ0J0bi5pbm5lclRleHQgPSBcIkNvcHkgSlBHcyBhc1wiO1xuICAgIHVuc3VwcG9ydGVkVHlwZXMuYXBwZW5kQ2hpbGQoanBnQnRuKTtcblxuICAgIGxldCBqcGdTZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIik7XG4gICAganBnU2VsLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1tZW51XCIpO1xuXG4gICAgaWYgKHN1cHBvcnRlZFR5cGVzLmluY2x1ZGVzKFwianBlZ1wiKSkge1xuICAgICAgICBsZXQgY29weUpQR0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgICAgICAgbGV0IGNvcHlKUEcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgY29weUpQRy5jbGFzc0xpc3QuYWRkKFwiZHJvcGRvd24taXRlbVwiKTtcbiAgICAgICAgY29weUpQRy5pZCA9IFwianBnLWNvcHktanBnXCI7XG4gICAgICAgIGNvcHlKUEcuaHJlZiA9IFwiI1wiO1xuICAgICAgICBjb3B5SlBHLm9uY2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBpZGJTZXQoXCJjb3B5LWpwZ1wiLCBcImpwZ1wiKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29weUpQRy5pbm5lclRleHQgPSBcIkpQR1wiO1xuICAgICAgICBjb3B5SlBHQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvcHlKUEcpO1xuICAgICAgICBqcGdTZWwuYXBwZW5kQ2hpbGQoY29weUpQR0NvbnRhaW5lcik7XG4gICAgfVxuXG4gICAgbGV0IGpwZ0NvcHlQTkdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgbGV0IGpwZ0NvcHlQTkcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICBqcGdDb3B5UE5HLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1pdGVtXCIpO1xuICAgIGpwZ0NvcHlQTkcuaWQgPSBcImpwZy1jb3B5LXBuZ1wiO1xuICAgIGpwZ0NvcHlQTkcuaHJlZiA9IFwiI1wiO1xuICAgIGpwZ0NvcHlQTkcub25jbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgaWRiU2V0KFwiY29weS1qcGdcIiwgXCJwbmdcIik7XG4gICAgfTtcbiAgICBqcGdDb3B5UE5HLmlubmVyVGV4dCA9IFwiUE5HXCI7XG4gICAganBnQ29weVBOR0NvbnRhaW5lci5hcHBlbmRDaGlsZChqcGdDb3B5UE5HKTtcbiAgICBqcGdTZWwuYXBwZW5kQ2hpbGQoanBnQ29weVBOR0NvbnRhaW5lcik7XG5cbiAgICBsZXQganBnQ29weVRleHRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgbGV0IGpwZ0NvcHlUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAganBnQ29weVRleHQuY2xhc3NMaXN0LmFkZChcImRyb3Bkb3duLWl0ZW1cIik7XG4gICAganBnQ29weVRleHQuaWQgPSBcImpwZy1jb3B5LXRleHRcIjtcbiAgICBqcGdDb3B5VGV4dC5ocmVmID0gXCIjXCI7XG4gICAganBnQ29weVRleHQub25jbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgaWRiU2V0KFwiY29weS1qcGdcIiwgXCJ0ZXh0XCIpO1xuICAgIH07XG4gICAganBnQ29weVRleHQuaW5uZXJUZXh0ID0gXCJUZXh0IChub3QgcmVjb21tZW5kZWQhKVwiO1xuICAgIGpwZ0NvcHlUZXh0Q29udGFpbmVyLmFwcGVuZENoaWxkKGpwZ0NvcHlUZXh0KTtcbiAgICBqcGdTZWwuYXBwZW5kQ2hpbGQoanBnQ29weVRleHRDb250YWluZXIpO1xuICAgIHVuc3VwcG9ydGVkVHlwZXMuYXBwZW5kQ2hpbGQoanBnU2VsKTtcblxuICAgIG5ldyBib290c3RyYXAuRHJvcGRvd24oanBnQnRuKTtcblxuICAgIERPTS5tYWluLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG5cbiAgICBET00ubWFpbi5hcHBlbmRDaGlsZCh1bnN1cHBvcnRlZFR5cGVzKTtcblxuICAgIERPTS5zaXplLndpZHRoLmRpc2FibGVkID0gZmFsc2U7XG59O1xuIl0sIm5hbWVzIjpbIl9fd2VicGFja19yZXF1aXJlX18iLCJleHBvcnRzIiwiZGVmaW5pdGlvbiIsImtleSIsIm8iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJvYmoiLCJwcm9wIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJ2YWx1ZSIsImJvdHRvbSIsInJpZ2h0IiwibGVmdCIsImF1dG8iLCJiYXNlUGxhY2VtZW50cyIsInN0YXJ0IiwiZW5kIiwiY2xpcHBpbmdQYXJlbnRzIiwidmlld3BvcnQiLCJwb3BwZXIiLCJyZWZlcmVuY2UiLCJ2YXJpYXRpb25QbGFjZW1lbnRzIiwicmVkdWNlIiwiYWNjIiwicGxhY2VtZW50IiwiY29uY2F0IiwiYmVmb3JlUmVhZCIsInJlYWQiLCJhZnRlclJlYWQiLCJiZWZvcmVNYWluIiwibWFpbiIsImFmdGVyTWFpbiIsImJlZm9yZVdyaXRlIiwid3JpdGUiLCJhZnRlcldyaXRlIiwibW9kaWZpZXJQaGFzZXMiLCJnZXROb2RlTmFtZSIsImVsZW1lbnQiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiZ2V0V2luZG93Iiwibm9kZSIsIndpbmRvdyIsInRvU3RyaW5nIiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwiaXNFbGVtZW50IiwiRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsIlNoYWRvd1Jvb3QiLCJuYW1lIiwiZW5hYmxlZCIsInBoYXNlIiwiZm4iLCJfcmVmIiwic3RhdGUiLCJrZXlzIiwiZWxlbWVudHMiLCJmb3JFYWNoIiwic3R5bGUiLCJzdHlsZXMiLCJhdHRyaWJ1dGVzIiwiYXNzaWduIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiZWZmZWN0IiwiX3JlZjIiLCJpbml0aWFsU3R5bGVzIiwicG9zaXRpb24iLCJvcHRpb25zIiwic3RyYXRlZ3kiLCJ0b3AiLCJtYXJnaW4iLCJhcnJvdyIsInByb3BlcnR5IiwiYXR0cmlidXRlIiwicmVxdWlyZXMiLCJnZXRCYXNlUGxhY2VtZW50Iiwic3BsaXQiLCJNYXRoIiwibWF4IiwibWluIiwicm91bmQiLCJnZXRVQVN0cmluZyIsInVhRGF0YSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudERhdGEiLCJicmFuZHMiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJpdGVtIiwiYnJhbmQiLCJ2ZXJzaW9uIiwiam9pbiIsInVzZXJBZ2VudCIsImlzTGF5b3V0Vmlld3BvcnQiLCJ0ZXN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlWCIsInNjYWxlWSIsIm9mZnNldFdpZHRoIiwid2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJoZWlnaHQiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJ4Iiwib2Zmc2V0TGVmdCIsInkiLCJvZmZzZXRUb3AiLCJnZXRMYXlvdXRSZWN0IiwiYWJzIiwiY29udGFpbnMiLCJwYXJlbnQiLCJjaGlsZCIsInJvb3ROb2RlIiwiZ2V0Um9vdE5vZGUiLCJuZXh0IiwiaXNTYW1lTm9kZSIsInBhcmVudE5vZGUiLCJob3N0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImlzVGFibGVFbGVtZW50IiwiaW5kZXhPZiIsImdldERvY3VtZW50RWxlbWVudCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0UGFyZW50Tm9kZSIsImFzc2lnbmVkU2xvdCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJvZmZzZXRQYXJlbnQiLCJnZXRPZmZzZXRQYXJlbnQiLCJpc0ZpcmVmb3giLCJjdXJyZW50Tm9kZSIsImNzcyIsInRyYW5zZm9ybSIsInBlcnNwZWN0aXZlIiwiY29udGFpbiIsIndpbGxDaGFuZ2UiLCJmaWx0ZXIiLCJnZXRDb250YWluaW5nQmxvY2siLCJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCJ3aXRoaW4iLCJtZXJnZVBhZGRpbmdPYmplY3QiLCJwYWRkaW5nT2JqZWN0IiwiZXhwYW5kVG9IYXNoTWFwIiwiaGFzaE1hcCIsIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsImFycm93RWxlbWVudCIsInBvcHBlck9mZnNldHMiLCJtb2RpZmllcnNEYXRhIiwiYmFzZVBsYWNlbWVudCIsImF4aXMiLCJsZW4iLCJwYWRkaW5nIiwicmVjdHMiLCJ0b1BhZGRpbmdPYmplY3QiLCJhcnJvd1JlY3QiLCJtaW5Qcm9wIiwibWF4UHJvcCIsImVuZERpZmYiLCJzdGFydERpZmYiLCJhcnJvd09mZnNldFBhcmVudCIsImNsaWVudFNpemUiLCJjbGllbnRIZWlnaHQiLCJjbGllbnRXaWR0aCIsImNlbnRlclRvUmVmZXJlbmNlIiwiY2VudGVyIiwib2Zmc2V0IiwiYXhpc1Byb3AiLCJjZW50ZXJPZmZzZXQiLCJfb3B0aW9ucyRlbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInJlcXVpcmVzSWZFeGlzdHMiLCJnZXRWYXJpYXRpb24iLCJ1bnNldFNpZGVzIiwibWFwVG9TdHlsZXMiLCJfT2JqZWN0JGFzc2lnbjIiLCJwb3BwZXJSZWN0IiwidmFyaWF0aW9uIiwib2Zmc2V0cyIsImdwdUFjY2VsZXJhdGlvbiIsImFkYXB0aXZlIiwicm91bmRPZmZzZXRzIiwiaXNGaXhlZCIsIl9vZmZzZXRzJHgiLCJfb2Zmc2V0cyR5IiwiX3JlZjMiLCJoYXNYIiwiaGFzWSIsInNpZGVYIiwic2lkZVkiLCJ3aW4iLCJoZWlnaHRQcm9wIiwid2lkdGhQcm9wIiwiX09iamVjdCRhc3NpZ24iLCJjb21tb25TdHlsZXMiLCJfcmVmNCIsImRwciIsImRldmljZVBpeGVsUmF0aW8iLCJyb3VuZE9mZnNldHNCeURQUiIsIl9yZWY1IiwiX29wdGlvbnMkZ3B1QWNjZWxlcmF0IiwiX29wdGlvbnMkYWRhcHRpdmUiLCJfb3B0aW9ucyRyb3VuZE9mZnNldHMiLCJkYXRhIiwicGFzc2l2ZSIsImluc3RhbmNlIiwiX29wdGlvbnMkc2Nyb2xsIiwic2Nyb2xsIiwiX29wdGlvbnMkcmVzaXplIiwicmVzaXplIiwic2Nyb2xsUGFyZW50cyIsInNjcm9sbFBhcmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1cGRhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFzaCIsImdldE9wcG9zaXRlUGxhY2VtZW50IiwicmVwbGFjZSIsIm1hdGNoZWQiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsImdldFdpbmRvd1Njcm9sbCIsInNjcm9sbExlZnQiLCJwYWdlWE9mZnNldCIsInNjcm9sbFRvcCIsInBhZ2VZT2Zmc2V0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImlzU2Nyb2xsUGFyZW50IiwiX2dldENvbXB1dGVkU3R5bGUiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsImdldFNjcm9sbFBhcmVudCIsImJvZHkiLCJsaXN0U2Nyb2xsUGFyZW50cyIsImxpc3QiLCJfZWxlbWVudCRvd25lckRvY3VtZW4iLCJpc0JvZHkiLCJ0YXJnZXQiLCJ1cGRhdGVkTGlzdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUiLCJjbGlwcGluZ1BhcmVudCIsImh0bWwiLCJsYXlvdXRWaWV3cG9ydCIsImdldFZpZXdwb3J0UmVjdCIsImNsaWVudFRvcCIsImNsaWVudExlZnQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsIndpblNjcm9sbCIsInNjcm9sbFdpZHRoIiwic2Nyb2xsSGVpZ2h0IiwiZGlyZWN0aW9uIiwiZ2V0RG9jdW1lbnRSZWN0IiwiY29tcHV0ZU9mZnNldHMiLCJjb21tb25YIiwiY29tbW9uWSIsIm1haW5BeGlzIiwiZGV0ZWN0T3ZlcmZsb3ciLCJfb3B0aW9ucyIsIl9vcHRpb25zJHBsYWNlbWVudCIsIl9vcHRpb25zJHN0cmF0ZWd5IiwiX29wdGlvbnMkYm91bmRhcnkiLCJib3VuZGFyeSIsIl9vcHRpb25zJHJvb3RCb3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsIl9vcHRpb25zJGVsZW1lbnRDb250ZSIsImVsZW1lbnRDb250ZXh0IiwiX29wdGlvbnMkYWx0Qm91bmRhcnkiLCJhbHRCb3VuZGFyeSIsIl9vcHRpb25zJHBhZGRpbmciLCJhbHRDb250ZXh0IiwiY2xpcHBpbmdDbGllbnRSZWN0IiwibWFpbkNsaXBwaW5nUGFyZW50cyIsImNsaXBwZXJFbGVtZW50IiwiZ2V0Q2xpcHBpbmdQYXJlbnRzIiwiZmlyc3RDbGlwcGluZ1BhcmVudCIsImNsaXBwaW5nUmVjdCIsImFjY1JlY3QiLCJnZXRDbGlwcGluZ1JlY3QiLCJjb250ZXh0RWxlbWVudCIsInJlZmVyZW5jZUNsaWVudFJlY3QiLCJwb3BwZXJDbGllbnRSZWN0IiwiZWxlbWVudENsaWVudFJlY3QiLCJvdmVyZmxvd09mZnNldHMiLCJvZmZzZXREYXRhIiwibXVsdGlwbHkiLCJfc2tpcCIsIl9vcHRpb25zJG1haW5BeGlzIiwiY2hlY2tNYWluQXhpcyIsIl9vcHRpb25zJGFsdEF4aXMiLCJhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwiZmxpcFZhcmlhdGlvbnMiLCJhbGxvd2VkQXV0b1BsYWNlbWVudHMiLCJwcmVmZXJyZWRQbGFjZW1lbnQiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsImFsbG93ZWRQbGFjZW1lbnRzIiwibGVuZ3RoIiwib3ZlcmZsb3dzIiwic29ydCIsImEiLCJiIiwiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCJyZWZlcmVuY2VSZWN0IiwiY2hlY2tzTWFwIiwiTWFwIiwibWFrZUZhbGxiYWNrQ2hlY2tzIiwiZmlyc3RGaXR0aW5nUGxhY2VtZW50IiwiaSIsIl9iYXNlUGxhY2VtZW50IiwiaXNTdGFydFZhcmlhdGlvbiIsImlzVmVydGljYWwiLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJwdXNoIiwiZXZlcnkiLCJjaGVjayIsInNldCIsIl9sb29wIiwiX2kiLCJmaXR0aW5nUGxhY2VtZW50IiwiZmluZCIsInNsaWNlIiwicmVzZXQiLCJnZXRTaWRlT2Zmc2V0cyIsInByZXZlbnRlZE9mZnNldHMiLCJpc0FueVNpZGVGdWxseUNsaXBwZWQiLCJzb21lIiwic2lkZSIsInByZXZlbnRPdmVyZmxvdyIsInJlZmVyZW5jZU92ZXJmbG93IiwicG9wcGVyQWx0T3ZlcmZsb3ciLCJyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMiLCJwb3BwZXJFc2NhcGVPZmZzZXRzIiwiaXNSZWZlcmVuY2VIaWRkZW4iLCJoYXNQb3BwZXJFc2NhcGVkIiwiX29wdGlvbnMkb2Zmc2V0IiwiaW52ZXJ0RGlzdGFuY2UiLCJza2lkZGluZyIsImRpc3RhbmNlIiwiZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkiLCJfZGF0YSRzdGF0ZSRwbGFjZW1lbnQiLCJfb3B0aW9ucyR0ZXRoZXIiLCJ0ZXRoZXIiLCJfb3B0aW9ucyR0ZXRoZXJPZmZzZXQiLCJ0ZXRoZXJPZmZzZXQiLCJpc0Jhc2VQbGFjZW1lbnQiLCJ0ZXRoZXJPZmZzZXRWYWx1ZSIsIm5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSIsIm9mZnNldE1vZGlmaWVyU3RhdGUiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQiLCJtYWluU2lkZSIsImFsdFNpZGUiLCJhZGRpdGl2ZSIsIm1pbkxlbiIsIm1heExlbiIsImFycm93UGFkZGluZ09iamVjdCIsImFycm93UGFkZGluZ01pbiIsImFycm93UGFkZGluZ01heCIsImFycm93TGVuIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiY2xpZW50T2Zmc2V0Iiwib2Zmc2V0TW9kaWZpZXJWYWx1ZSIsInRldGhlck1heCIsInByZXZlbnRlZE9mZnNldCIsIl9vZmZzZXRNb2RpZmllclN0YXRlJDIiLCJfbWFpblNpZGUiLCJfYWx0U2lkZSIsIl9vZmZzZXQiLCJfbGVuIiwiX21pbiIsIl9tYXgiLCJpc09yaWdpblNpZGUiLCJfb2Zmc2V0TW9kaWZpZXJWYWx1ZSIsIl90ZXRoZXJNaW4iLCJfdGV0aGVyTWF4IiwiX3ByZXZlbnRlZE9mZnNldCIsInYiLCJ3aXRoaW5NYXhDbGFtcCIsImdldENvbXBvc2l0ZVJlY3QiLCJlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UGFyZW50SXNTY2FsZWQiLCJpc0VsZW1lbnRTY2FsZWQiLCJvcmRlciIsIm1vZGlmaWVycyIsInZpc2l0ZWQiLCJTZXQiLCJyZXN1bHQiLCJtb2RpZmllciIsImFkZCIsImRlcCIsImhhcyIsImRlcE1vZGlmaWVyIiwiREVGQVVMVF9PUFRJT05TIiwiYXJlVmFsaWRFbGVtZW50cyIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwicG9wcGVyR2VuZXJhdG9yIiwiZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmIiwiZGVmYXVsdE1vZGlmaWVycyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZjIiLCJkZWZhdWx0T3B0aW9ucyIsInBlbmRpbmciLCJvcmRlcmVkTW9kaWZpZXJzIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwic2V0T3B0aW9ucyIsInNldE9wdGlvbnNBY3Rpb24iLCJjbGVhbnVwTW9kaWZpZXJFZmZlY3RzIiwibWVyZ2VkIiwib3JkZXJNb2RpZmllcnMiLCJjdXJyZW50IiwiZXhpc3RpbmciLCJtIiwiX3JlZiRvcHRpb25zIiwiY2xlYW51cEZuIiwiZm9yY2VVcGRhdGUiLCJfc3RhdGUkZWxlbWVudHMiLCJpbmRleCIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZSIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJ1bmRlZmluZWQiLCJkZXN0cm95Iiwib25GaXJzdFVwZGF0ZSIsImNyZWF0ZVBvcHBlciIsImV2ZW50TGlzdGVuZXJzIiwiZWxlbWVudE1hcCIsIkRhdGEiLCJpbnN0YW5jZU1hcCIsInNpemUiLCJjb25zb2xlIiwiZXJyb3IiLCJmcm9tIiwicmVtb3ZlIiwiZGVsZXRlIiwiVFJBTlNJVElPTl9FTkQiLCJwYXJzZVNlbGVjdG9yIiwic2VsZWN0b3IiLCJDU1MiLCJlc2NhcGUiLCJtYXRjaCIsImlkIiwidHJpZ2dlclRyYW5zaXRpb25FbmQiLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnQiLCJvYmplY3QiLCJqcXVlcnkiLCJub2RlVHlwZSIsImdldEVsZW1lbnQiLCJpc1Zpc2libGUiLCJnZXRDbGllbnRSZWN0cyIsImVsZW1lbnRJc1Zpc2libGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiY2xvc2VkRGV0YWlscyIsImNsb3Nlc3QiLCJzdW1tYXJ5IiwiaXNEaXNhYmxlZCIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJjbGFzc0xpc3QiLCJkaXNhYmxlZCIsImhhc0F0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsImZpbmRTaGFkb3dSb290IiwiYXR0YWNoU2hhZG93Iiwicm9vdCIsIm5vb3AiLCJyZWZsb3ciLCJnZXRqUXVlcnkiLCJqUXVlcnkiLCJET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzIiwiaXNSVEwiLCJkaXIiLCJkZWZpbmVKUXVlcnlQbHVnaW4iLCJwbHVnaW4iLCJjYWxsYmFjayIsIiQiLCJOQU1FIiwiSlFVRVJZX05PX0NPTkZMSUNUIiwialF1ZXJ5SW50ZXJmYWNlIiwiQ29uc3RydWN0b3IiLCJub0NvbmZsaWN0IiwicmVhZHlTdGF0ZSIsImV4ZWN1dGUiLCJwb3NzaWJsZUNhbGxiYWNrIiwiZGVmYXVsdFZhbHVlIiwiZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiIsInRyYW5zaXRpb25FbGVtZW50Iiwid2FpdEZvclRyYW5zaXRpb24iLCJlbXVsYXRlZER1cmF0aW9uIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJOdW1iZXIiLCJwYXJzZUZsb2F0IiwiZmxvYXRUcmFuc2l0aW9uRGVsYXkiLCJnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCIsImNhbGxlZCIsImhhbmRsZXIiLCJzZXRUaW1lb3V0IiwiZ2V0TmV4dEFjdGl2ZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50Iiwic2hvdWxkR2V0TmV4dCIsImlzQ3ljbGVBbGxvd2VkIiwibGlzdExlbmd0aCIsIm5hbWVzcGFjZVJlZ2V4Iiwic3RyaXBOYW1lUmVnZXgiLCJzdHJpcFVpZFJlZ2V4IiwiZXZlbnRSZWdpc3RyeSIsInVpZEV2ZW50IiwiY3VzdG9tRXZlbnRzIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJuYXRpdmVFdmVudHMiLCJtYWtlRXZlbnRVaWQiLCJ1aWQiLCJnZXRFbGVtZW50RXZlbnRzIiwiZmluZEhhbmRsZXIiLCJldmVudHMiLCJjYWxsYWJsZSIsImRlbGVnYXRpb25TZWxlY3RvciIsInZhbHVlcyIsImV2ZW50Iiwibm9ybWFsaXplUGFyYW1ldGVycyIsIm9yaWdpbmFsVHlwZUV2ZW50IiwiZGVsZWdhdGlvbkZ1bmN0aW9uIiwiaXNEZWxlZ2F0ZWQiLCJ0eXBlRXZlbnQiLCJnZXRUeXBlRXZlbnQiLCJhZGRIYW5kbGVyIiwib25lT2ZmIiwid3JhcEZ1bmN0aW9uIiwicmVsYXRlZFRhcmdldCIsImRlbGVnYXRlVGFyZ2V0IiwidGhpcyIsImhhbmRsZXJzIiwicHJldmlvdXNGdW5jdGlvbiIsImRvbUVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsImRvbUVsZW1lbnQiLCJoeWRyYXRlT2JqIiwiRXZlbnRIYW5kbGVyIiwib2ZmIiwidHlwZSIsImFwcGx5IiwiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCJib290c3RyYXBIYW5kbGVyIiwicmVtb3ZlSGFuZGxlciIsIkJvb2xlYW4iLCJyZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMiLCJuYW1lc3BhY2UiLCJzdG9yZUVsZW1lbnRFdmVudCIsImhhbmRsZXJLZXkiLCJlbnRyaWVzIiwiaW5jbHVkZXMiLCJvbiIsIm9uZSIsImluTmFtZXNwYWNlIiwiaXNOYW1lc3BhY2UiLCJzdGFydHNXaXRoIiwiZWxlbWVudEV2ZW50Iiwia2V5SGFuZGxlcnMiLCJ0cmlnZ2VyIiwialF1ZXJ5RXZlbnQiLCJidWJibGVzIiwibmF0aXZlRGlzcGF0Y2giLCJkZWZhdWx0UHJldmVudGVkIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsImlzRGVmYXVsdFByZXZlbnRlZCIsImV2dCIsImNhbmNlbGFibGUiLCJwcmV2ZW50RGVmYXVsdCIsIm1ldGEiLCJfdW51c2VkIiwiY29uZmlndXJhYmxlIiwibm9ybWFsaXplRGF0YSIsIkpTT04iLCJwYXJzZSIsImRlY29kZVVSSUNvbXBvbmVudCIsIm5vcm1hbGl6ZURhdGFLZXkiLCJjaHIiLCJNYW5pcHVsYXRvciIsInNldERhdGFBdHRyaWJ1dGUiLCJyZW1vdmVEYXRhQXR0cmlidXRlIiwiZ2V0RGF0YUF0dHJpYnV0ZXMiLCJic0tleXMiLCJkYXRhc2V0IiwicHVyZUtleSIsImNoYXJBdCIsImdldERhdGFBdHRyaWJ1dGUiLCJDb25maWciLCJEZWZhdWx0IiwiRGVmYXVsdFR5cGUiLCJFcnJvciIsIl9nZXRDb25maWciLCJjb25maWciLCJfbWVyZ2VDb25maWdPYmoiLCJfY29uZmlnQWZ0ZXJNZXJnZSIsIl90eXBlQ2hlY2tDb25maWciLCJqc29uQ29uZmlnIiwiY29uc3RydWN0b3IiLCJjb25maWdUeXBlcyIsImV4cGVjdGVkVHlwZXMiLCJ2YWx1ZVR5cGUiLCJSZWdFeHAiLCJUeXBlRXJyb3IiLCJ0b1VwcGVyQ2FzZSIsIkJhc2VDb21wb25lbnQiLCJzdXBlciIsIl9lbGVtZW50IiwiX2NvbmZpZyIsIkRBVEFfS0VZIiwiZGlzcG9zZSIsIkVWRU5UX0tFWSIsInByb3BlcnR5TmFtZSIsImdldE93blByb3BlcnR5TmFtZXMiLCJfcXVldWVDYWxsYmFjayIsImlzQW5pbWF0ZWQiLCJnZXRJbnN0YW5jZSIsImdldE9yQ3JlYXRlSW5zdGFuY2UiLCJWRVJTSU9OIiwiZXZlbnROYW1lIiwiZ2V0U2VsZWN0b3IiLCJocmVmQXR0cmlidXRlIiwidHJpbSIsInNlbCIsIlNlbGVjdG9yRW5naW5lIiwiZmluZE9uZSIsImNoaWxkcmVuIiwibWF0Y2hlcyIsInBhcmVudHMiLCJhbmNlc3RvciIsInByZXYiLCJwcmV2aW91cyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJuZXh0RWxlbWVudFNpYmxpbmciLCJmb2N1c2FibGVDaGlsZHJlbiIsImZvY3VzYWJsZXMiLCJlbCIsImdldFNlbGVjdG9yRnJvbUVsZW1lbnQiLCJnZXRFbGVtZW50RnJvbVNlbGVjdG9yIiwiZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3RvciIsImVuYWJsZURpc21pc3NUcmlnZ2VyIiwiY29tcG9uZW50IiwibWV0aG9kIiwiY2xpY2tFdmVudCIsInRhZ05hbWUiLCJFVkVOVF9LRVkkYiIsIkVWRU5UX0NMT1NFIiwiRVZFTlRfQ0xPU0VEIiwiQWxlcnQiLCJjbG9zZSIsIl9kZXN0cm95RWxlbWVudCIsImVhY2giLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1IiwiQnV0dG9uIiwidG9nZ2xlIiwiYnV0dG9uIiwiRVZFTlRfS0VZJDkiLCJFVkVOVF9UT1VDSFNUQVJUIiwiRVZFTlRfVE9VQ0hNT1ZFIiwiRVZFTlRfVE9VQ0hFTkQiLCJFVkVOVF9QT0lOVEVSRE9XTiIsIkVWRU5UX1BPSU5URVJVUCIsIkRlZmF1bHQkYyIsImVuZENhbGxiYWNrIiwibGVmdENhbGxiYWNrIiwicmlnaHRDYWxsYmFjayIsIkRlZmF1bHRUeXBlJGMiLCJTd2lwZSIsImlzU3VwcG9ydGVkIiwiX2RlbHRhWCIsIl9zdXBwb3J0UG9pbnRlckV2ZW50cyIsIlBvaW50ZXJFdmVudCIsIl9pbml0RXZlbnRzIiwiX3N0YXJ0IiwiX2V2ZW50SXNQb2ludGVyUGVuVG91Y2giLCJjbGllbnRYIiwidG91Y2hlcyIsIl9lbmQiLCJfaGFuZGxlU3dpcGUiLCJfbW92ZSIsImFic0RlbHRhWCIsInBvaW50ZXJUeXBlIiwibWF4VG91Y2hQb2ludHMiLCJFVkVOVF9LRVkkOCIsIkRBVEFfQVBJX0tFWSQ1IiwiQVJST1dfTEVGVF9LRVkkMSIsIkFSUk9XX1JJR0hUX0tFWSQxIiwiT1JERVJfTkVYVCIsIk9SREVSX1BSRVYiLCJESVJFQ1RJT05fTEVGVCIsIkRJUkVDVElPTl9SSUdIVCIsIkVWRU5UX1NMSURFIiwiRVZFTlRfU0xJRCIsIkVWRU5UX0tFWURPV04kMSIsIkVWRU5UX01PVVNFRU5URVIkMSIsIkVWRU5UX01PVVNFTEVBVkUkMSIsIkVWRU5UX0RSQUdfU1RBUlQiLCJFVkVOVF9MT0FEX0RBVEFfQVBJJDMiLCJFVkVOVF9DTElDS19EQVRBX0FQSSQ1IiwiQ0xBU1NfTkFNRV9DQVJPVVNFTCIsIkNMQVNTX05BTUVfQUNUSVZFJDIiLCJTRUxFQ1RPUl9BQ1RJVkUiLCJTRUxFQ1RPUl9JVEVNIiwiU0VMRUNUT1JfQUNUSVZFX0lURU0iLCJLRVlfVE9fRElSRUNUSU9OIiwiRGVmYXVsdCRiIiwiaW50ZXJ2YWwiLCJrZXlib2FyZCIsInBhdXNlIiwicmlkZSIsInRvdWNoIiwid3JhcCIsIkRlZmF1bHRUeXBlJGIiLCJDYXJvdXNlbCIsIl9pbnRlcnZhbCIsIl9hY3RpdmVFbGVtZW50IiwiX2lzU2xpZGluZyIsInRvdWNoVGltZW91dCIsIl9zd2lwZUhlbHBlciIsIl9pbmRpY2F0b3JzRWxlbWVudCIsIl9hZGRFdmVudExpc3RlbmVycyIsImN5Y2xlIiwiX3NsaWRlIiwibmV4dFdoZW5WaXNpYmxlIiwiaGlkZGVuIiwiX2NsZWFySW50ZXJ2YWwiLCJfdXBkYXRlSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIl9tYXliZUVuYWJsZUN5Y2xlIiwidG8iLCJpdGVtcyIsIl9nZXRJdGVtcyIsImFjdGl2ZUluZGV4IiwiX2dldEl0ZW1JbmRleCIsIl9nZXRBY3RpdmUiLCJkZWZhdWx0SW50ZXJ2YWwiLCJfa2V5ZG93biIsIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwiaW1nIiwic3dpcGVDb25maWciLCJfZGlyZWN0aW9uVG9PcmRlciIsImNsZWFyVGltZW91dCIsIl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50IiwiYWN0aXZlSW5kaWNhdG9yIiwibmV3QWN0aXZlSW5kaWNhdG9yIiwiZWxlbWVudEludGVydmFsIiwicGFyc2VJbnQiLCJpc05leHQiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJ0cmlnZ2VyRXZlbnQiLCJfb3JkZXJUb0RpcmVjdGlvbiIsImlzQ3ljbGluZyIsImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwib3JkZXJDbGFzc05hbWUiLCJfaXNBbmltYXRlZCIsImNsZWFySW50ZXJ2YWwiLCJjYXJvdXNlbCIsInNsaWRlSW5kZXgiLCJjYXJvdXNlbHMiLCJFVkVOVF9LRVkkNyIsIkVWRU5UX1NIT1ckNiIsIkVWRU5UX1NIT1dOJDYiLCJFVkVOVF9ISURFJDYiLCJFVkVOVF9ISURERU4kNiIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJJDQiLCJDTEFTU19OQU1FX1NIT1ckNyIsIkNMQVNTX05BTUVfQ09MTEFQU0UiLCJDTEFTU19OQU1FX0NPTExBUFNJTkciLCJDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiIsIlNFTEVDVE9SX0RBVEFfVE9HR0xFJDQiLCJEZWZhdWx0JGEiLCJEZWZhdWx0VHlwZSRhIiwiQ29sbGFwc2UiLCJfaXNUcmFuc2l0aW9uaW5nIiwiX3RyaWdnZXJBcnJheSIsInRvZ2dsZUxpc3QiLCJlbGVtIiwiZmlsdGVyRWxlbWVudCIsImZvdW5kRWxlbWVudCIsIl9pbml0aWFsaXplQ2hpbGRyZW4iLCJfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzIiwiX2lzU2hvd24iLCJoaWRlIiwic2hvdyIsImFjdGl2ZUNoaWxkcmVuIiwiX2dldEZpcnN0TGV2ZWxDaGlsZHJlbiIsImFjdGl2ZUluc3RhbmNlIiwiZGltZW5zaW9uIiwiX2dldERpbWVuc2lvbiIsInNjcm9sbFNpemUiLCJzZWxlY3RlZCIsInRyaWdnZXJBcnJheSIsImlzT3BlbiIsIk5BTUUkYSIsIkVWRU5UX0tFWSQ2IiwiREFUQV9BUElfS0VZJDMiLCJBUlJPV19VUF9LRVkkMSIsIkFSUk9XX0RPV05fS0VZJDEiLCJFVkVOVF9ISURFJDUiLCJFVkVOVF9ISURERU4kNSIsIkVWRU5UX1NIT1ckNSIsIkVWRU5UX1NIT1dOJDUiLCJFVkVOVF9DTElDS19EQVRBX0FQSSQzIiwiRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSIsIkVWRU5UX0tFWVVQX0RBVEFfQVBJIiwiQ0xBU1NfTkFNRV9TSE9XJDYiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzIiwiU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04iLCJTRUxFQ1RPUl9NRU5VIiwiUExBQ0VNRU5UX1RPUCIsIlBMQUNFTUVOVF9UT1BFTkQiLCJQTEFDRU1FTlRfQk9UVE9NIiwiUExBQ0VNRU5UX0JPVFRPTUVORCIsIlBMQUNFTUVOVF9SSUdIVCIsIlBMQUNFTUVOVF9MRUZUIiwiRGVmYXVsdCQ5IiwiYXV0b0Nsb3NlIiwiZGlzcGxheSIsInBvcHBlckNvbmZpZyIsIkRlZmF1bHRUeXBlJDkiLCJEcm9wZG93biIsIl9wb3BwZXIiLCJfcGFyZW50IiwiX21lbnUiLCJfaW5OYXZiYXIiLCJfZGV0ZWN0TmF2YmFyIiwiX2NyZWF0ZVBvcHBlciIsImZvY3VzIiwiX2NvbXBsZXRlSGlkZSIsInJlZmVyZW5jZUVsZW1lbnQiLCJfZ2V0UG9wcGVyQ29uZmlnIiwiX2dldFBsYWNlbWVudCIsInBhcmVudERyb3Bkb3duIiwiaXNFbmQiLCJfZ2V0T2Zmc2V0IiwicG9wcGVyRGF0YSIsImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsIl9zZWxlY3RNZW51SXRlbSIsImNsZWFyTWVudXMiLCJvcGVuVG9nZ2xlcyIsImNvbnRleHQiLCJjb21wb3NlZFBhdGgiLCJpc01lbnVUYXJnZXQiLCJkYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCJpc0lucHV0IiwiaXNFc2NhcGVFdmVudCIsImlzVXBPckRvd25FdmVudCIsImdldFRvZ2dsZUJ1dHRvbiIsInN0b3BQcm9wYWdhdGlvbiIsIk5BTUUkOSIsIkNMQVNTX05BTUVfU0hPVyQ1IiwiRVZFTlRfTU9VU0VET1dOIiwiRGVmYXVsdCQ4IiwiY2xhc3NOYW1lIiwiY2xpY2tDYWxsYmFjayIsInJvb3RFbGVtZW50IiwiRGVmYXVsdFR5cGUkOCIsIkJhY2tkcm9wIiwiX2lzQXBwZW5kZWQiLCJfYXBwZW5kIiwiX2dldEVsZW1lbnQiLCJfZW11bGF0ZUFuaW1hdGlvbiIsImJhY2tkcm9wIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZCIsIkVWRU5UX0tFWSQ1IiwiRVZFTlRfRk9DVVNJTiQyIiwiRVZFTlRfS0VZRE9XTl9UQUIiLCJUQUJfTkFWX0JBQ0tXQVJEIiwiRGVmYXVsdCQ3IiwiYXV0b2ZvY3VzIiwidHJhcEVsZW1lbnQiLCJEZWZhdWx0VHlwZSQ3IiwiRm9jdXNUcmFwIiwiX2lzQWN0aXZlIiwiX2xhc3RUYWJOYXZEaXJlY3Rpb24iLCJhY3RpdmF0ZSIsIl9oYW5kbGVGb2N1c2luIiwiX2hhbmRsZUtleWRvd24iLCJkZWFjdGl2YXRlIiwic2hpZnRLZXkiLCJTRUxFQ1RPUl9GSVhFRF9DT05URU5UIiwiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCJQUk9QRVJUWV9QQURESU5HIiwiUFJPUEVSVFlfTUFSR0lOIiwiU2Nyb2xsQmFySGVscGVyIiwiZ2V0V2lkdGgiLCJkb2N1bWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsIl9kaXNhYmxlT3ZlckZsb3ciLCJfc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCJjYWxjdWxhdGVkVmFsdWUiLCJfcmVzZXRFbGVtZW50QXR0cmlidXRlcyIsImlzT3ZlcmZsb3dpbmciLCJfc2F2ZUluaXRpYWxBdHRyaWJ1dGUiLCJzdHlsZVByb3BlcnR5Iiwic2Nyb2xsYmFyV2lkdGgiLCJfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayIsInNldFByb3BlcnR5IiwiYWN0dWFsVmFsdWUiLCJyZW1vdmVQcm9wZXJ0eSIsImNhbGxCYWNrIiwiRVZFTlRfS0VZJDQiLCJFVkVOVF9ISURFJDQiLCJFVkVOVF9ISURFX1BSRVZFTlRFRCQxIiwiRVZFTlRfSElEREVOJDQiLCJFVkVOVF9TSE9XJDQiLCJFVkVOVF9TSE9XTiQ0IiwiRVZFTlRfUkVTSVpFJDEiLCJFVkVOVF9DTElDS19ESVNNSVNTIiwiRVZFTlRfTU9VU0VET1dOX0RJU01JU1MiLCJFVkVOVF9LRVlET1dOX0RJU01JU1MkMSIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJJDIiLCJDTEFTU19OQU1FX09QRU4iLCJDTEFTU19OQU1FX1NIT1ckNCIsIkNMQVNTX05BTUVfU1RBVElDIiwiRGVmYXVsdCQ2IiwiRGVmYXVsdFR5cGUkNiIsIk1vZGFsIiwiX2RpYWxvZyIsIl9iYWNrZHJvcCIsIl9pbml0aWFsaXplQmFja0Ryb3AiLCJfZm9jdXN0cmFwIiwiX2luaXRpYWxpemVGb2N1c1RyYXAiLCJfc2Nyb2xsQmFyIiwiX2FkanVzdERpYWxvZyIsIl9zaG93RWxlbWVudCIsIl9oaWRlTW9kYWwiLCJoYW5kbGVVcGRhdGUiLCJtb2RhbEJvZHkiLCJfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbiIsImV2ZW50MiIsIl9yZXNldEFkanVzdG1lbnRzIiwiaXNNb2RhbE92ZXJmbG93aW5nIiwiaW5pdGlhbE92ZXJmbG93WSIsImlzQm9keU92ZXJmbG93aW5nIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJzaG93RXZlbnQiLCJhbHJlYWR5T3BlbiIsIkVWRU5UX0tFWSQzIiwiREFUQV9BUElfS0VZJDEiLCJFVkVOVF9MT0FEX0RBVEFfQVBJJDIiLCJDTEFTU19OQU1FX1NIT1ckMyIsIkNMQVNTX05BTUVfU0hPV0lORyQxIiwiQ0xBU1NfTkFNRV9ISURJTkciLCJPUEVOX1NFTEVDVE9SIiwiRVZFTlRfU0hPVyQzIiwiRVZFTlRfU0hPV04kMyIsIkVWRU5UX0hJREUkMyIsIkVWRU5UX0hJREVfUFJFVkVOVEVEIiwiRVZFTlRfSElEREVOJDMiLCJFVkVOVF9SRVNJWkUiLCJFVkVOVF9DTElDS19EQVRBX0FQSSQxIiwiRVZFTlRfS0VZRE9XTl9ESVNNSVNTIiwiRGVmYXVsdCQ1IiwiRGVmYXVsdFR5cGUkNSIsIk9mZmNhbnZhcyIsImJsdXIiLCJEZWZhdWx0QWxsb3dsaXN0IiwiYXJlYSIsImJyIiwiY29sIiwiY29kZSIsImRkIiwiZGl2IiwiZGwiLCJkdCIsImVtIiwiaHIiLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJsaSIsIm9sIiwicCIsInByZSIsInMiLCJzbWFsbCIsInNwYW4iLCJzdWIiLCJzdXAiLCJzdHJvbmciLCJ1IiwidWwiLCJ1cmlBdHRyaWJ1dGVzIiwiU0FGRV9VUkxfUEFUVEVSTiIsImFsbG93ZWRBdHRyaWJ1dGUiLCJhbGxvd2VkQXR0cmlidXRlTGlzdCIsImF0dHJpYnV0ZU5hbWUiLCJub2RlVmFsdWUiLCJhdHRyaWJ1dGVSZWdleCIsInJlZ2V4IiwiRGVmYXVsdCQ0IiwiYWxsb3dMaXN0IiwiY29udGVudCIsImV4dHJhQ2xhc3MiLCJzYW5pdGl6ZSIsInNhbml0aXplRm4iLCJ0ZW1wbGF0ZSIsIkRlZmF1bHRUeXBlJDQiLCJEZWZhdWx0Q29udGVudFR5cGUiLCJlbnRyeSIsIlRlbXBsYXRlRmFjdG9yeSIsImdldENvbnRlbnQiLCJfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24iLCJoYXNDb250ZW50IiwiY2hhbmdlQ29udGVudCIsIl9jaGVja0NvbnRlbnQiLCJ0b0h0bWwiLCJ0ZW1wbGF0ZVdyYXBwZXIiLCJpbm5lckhUTUwiLCJfbWF5YmVTYW5pdGl6ZSIsInRleHQiLCJfc2V0Q29udGVudCIsImFyZyIsInRlbXBsYXRlRWxlbWVudCIsIl9wdXRFbGVtZW50SW5UZW1wbGF0ZSIsInRleHRDb250ZW50IiwidW5zYWZlSHRtbCIsInNhbml0aXplRnVuY3Rpb24iLCJjcmVhdGVkRG9jdW1lbnQiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJlbGVtZW50TmFtZSIsImF0dHJpYnV0ZUxpc3QiLCJhbGxvd2VkQXR0cmlidXRlcyIsInNhbml0aXplSHRtbCIsIkRJU0FMTE9XRURfQVRUUklCVVRFUyIsIkNMQVNTX05BTUVfRkFERSQyIiwiQ0xBU1NfTkFNRV9TSE9XJDIiLCJTRUxFQ1RPUl9UT09MVElQX0lOTkVSIiwiU0VMRUNUT1JfTU9EQUwiLCJFVkVOVF9NT0RBTF9ISURFIiwiVFJJR0dFUl9IT1ZFUiIsIlRSSUdHRVJfRk9DVVMiLCJBdHRhY2htZW50TWFwIiwiQVVUTyIsIlRPUCIsIlJJR0hUIiwiQk9UVE9NIiwiTEVGVCIsIkRlZmF1bHQkMyIsImFuaW1hdGlvbiIsImNvbnRhaW5lciIsImN1c3RvbUNsYXNzIiwiZGVsYXkiLCJ0aXRsZSIsIkRlZmF1bHRUeXBlJDMiLCJUb29sdGlwIiwiX2lzRW5hYmxlZCIsIl90aW1lb3V0IiwiX2lzSG92ZXJlZCIsIl9hY3RpdmVUcmlnZ2VyIiwiX3RlbXBsYXRlRmFjdG9yeSIsIl9uZXdDb250ZW50IiwidGlwIiwiX3NldExpc3RlbmVycyIsIl9maXhUaXRsZSIsImVuYWJsZSIsImRpc2FibGUiLCJ0b2dnbGVFbmFibGVkIiwiY2xpY2siLCJfbGVhdmUiLCJfZW50ZXIiLCJfaGlkZU1vZGFsSGFuZGxlciIsIl9kaXNwb3NlUG9wcGVyIiwiX2lzV2l0aENvbnRlbnQiLCJpc0luVGhlRG9tIiwiX2dldFRpcEVsZW1lbnQiLCJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsIl9nZXRUaXRsZSIsIl9jcmVhdGVUaXBFbGVtZW50IiwiX2dldENvbnRlbnRGb3JUZW1wbGF0ZSIsIl9nZXRUZW1wbGF0ZUZhY3RvcnkiLCJ0aXBJZCIsInByZWZpeCIsImZsb29yIiwicmFuZG9tIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRVSUQiLCJzZXRDb250ZW50IiwiX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldCIsIl9nZXREZWxlZ2F0ZUNvbmZpZyIsImF0dGFjaG1lbnQiLCJ0cmlnZ2VycyIsImV2ZW50SW4iLCJldmVudE91dCIsIl9zZXRUaW1lb3V0IiwidGltZW91dCIsImRhdGFBdHRyaWJ1dGVzIiwiZGF0YUF0dHJpYnV0ZSIsIlNFTEVDVE9SX1RJVExFIiwiU0VMRUNUT1JfQ09OVEVOVCIsIkRlZmF1bHQkMiIsIkRlZmF1bHRUeXBlJDIiLCJQb3BvdmVyIiwiX2dldENvbnRlbnQiLCJFVkVOVF9LRVkkMiIsIkVWRU5UX0FDVElWQVRFIiwiRVZFTlRfQ0xJQ0siLCJFVkVOVF9MT0FEX0RBVEFfQVBJJDEiLCJDTEFTU19OQU1FX0FDVElWRSQxIiwiU0VMRUNUT1JfVEFSR0VUX0xJTktTIiwiU0VMRUNUT1JfTkFWX0xJTktTIiwiU0VMRUNUT1JfTElOS19JVEVNUyIsIkRlZmF1bHQkMSIsInJvb3RNYXJnaW4iLCJzbW9vdGhTY3JvbGwiLCJ0aHJlc2hvbGQiLCJEZWZhdWx0VHlwZSQxIiwiU2Nyb2xsU3B5IiwiX3RhcmdldExpbmtzIiwiX29ic2VydmFibGVTZWN0aW9ucyIsIl9yb290RWxlbWVudCIsIl9hY3RpdmVUYXJnZXQiLCJfb2JzZXJ2ZXIiLCJfcHJldmlvdXNTY3JvbGxEYXRhIiwidmlzaWJsZUVudHJ5VG9wIiwicGFyZW50U2Nyb2xsVG9wIiwicmVmcmVzaCIsIl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzIiwiX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsIiwiZGlzY29ubmVjdCIsIl9nZXROZXdPYnNlcnZlciIsInNlY3Rpb24iLCJvYnNlcnZlIiwib2JzZXJ2YWJsZVNlY3Rpb24iLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfb2JzZXJ2ZXJDYWxsYmFjayIsInRhcmdldEVsZW1lbnQiLCJfcHJvY2VzcyIsInVzZXJTY3JvbGxzRG93biIsImlzSW50ZXJzZWN0aW5nIiwiX2NsZWFyQWN0aXZlQ2xhc3MiLCJlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMiLCJ0YXJnZXRMaW5rcyIsImFuY2hvciIsImRlY29kZVVSSSIsIl9hY3RpdmF0ZVBhcmVudHMiLCJsaXN0R3JvdXAiLCJhY3RpdmVOb2RlcyIsInNweSIsIkVWRU5UX0tFWSQxIiwiRVZFTlRfSElERSQxIiwiRVZFTlRfSElEREVOJDEiLCJFVkVOVF9TSE9XJDEiLCJFVkVOVF9TSE9XTiQxIiwiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCJFVkVOVF9LRVlET1dOIiwiRVZFTlRfTE9BRF9EQVRBX0FQSSIsIkFSUk9XX0xFRlRfS0VZIiwiQVJST1dfUklHSFRfS0VZIiwiQVJST1dfVVBfS0VZIiwiQVJST1dfRE9XTl9LRVkiLCJIT01FX0tFWSIsIkVORF9LRVkiLCJDTEFTU19OQU1FX0FDVElWRSIsIkNMQVNTX05BTUVfRkFERSQxIiwiQ0xBU1NfTkFNRV9TSE9XJDEiLCJTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCJOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFIiwiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCJTRUxFQ1RPUl9JTk5FUl9FTEVNIiwiU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFIiwiVGFiIiwiX3NldEluaXRpYWxBdHRyaWJ1dGVzIiwiX2dldENoaWxkcmVuIiwiaW5uZXJFbGVtIiwiX2VsZW1Jc0FjdGl2ZSIsImFjdGl2ZSIsIl9nZXRBY3RpdmVFbGVtIiwiaGlkZUV2ZW50IiwiX2RlYWN0aXZhdGUiLCJfYWN0aXZhdGUiLCJyZWxhdGVkRWxlbSIsIl90b2dnbGVEcm9wRG93biIsIm5leHRBY3RpdmVFbGVtZW50IiwicHJldmVudFNjcm9sbCIsIl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyIsIl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQiLCJfZ2V0SW5uZXJFbGVtZW50IiwiaXNBY3RpdmUiLCJvdXRlckVsZW0iLCJfZ2V0T3V0ZXJFbGVtZW50IiwiX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbCIsIm9wZW4iLCJFVkVOVF9NT1VTRU9WRVIiLCJFVkVOVF9NT1VTRU9VVCIsIkVWRU5UX0ZPQ1VTSU4iLCJFVkVOVF9GT0NVU09VVCIsIkVWRU5UX0hJREUiLCJFVkVOVF9ISURERU4iLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJDTEFTU19OQU1FX0hJREUiLCJDTEFTU19OQU1FX1NIT1ciLCJDTEFTU19OQU1FX1NIT1dJTkciLCJhdXRvaGlkZSIsIlRvYXN0IiwiX2hhc01vdXNlSW50ZXJhY3Rpb24iLCJfaGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiIsIl9jbGVhclRpbWVvdXQiLCJfbWF5YmVTY2hlZHVsZUhpZGUiLCJpc1Nob3duIiwiX29uSW50ZXJhY3Rpb24iLCJpc0ludGVyYWN0aW5nIiwicHJvbWlzaWZ5UmVxdWVzdCIsInJlcXVlc3QiLCJyZWplY3QiLCJvbmNvbXBsZXRlIiwib25zdWNjZXNzIiwib25hYm9ydCIsIm9uZXJyb3IiLCJkZWZhdWx0R2V0U3RvcmVGdW5jIiwiZGVmYXVsdEdldFN0b3JlIiwiZGJOYW1lIiwic3RvcmVOYW1lIiwiaW5kZXhlZERCIiwib251cGdyYWRlbmVlZGVkIiwiY3JlYXRlT2JqZWN0U3RvcmUiLCJkYnAiLCJ0eE1vZGUiLCJkYiIsInRyYW5zYWN0aW9uIiwib2JqZWN0U3RvcmUiLCJjcmVhdGVTdG9yZSIsImN1c3RvbVN0b3JlIiwic3RvcmUiLCJwdXQiLCJjaGVja1N1cHBvcnQiLCJDbGlwYm9hcmRJdGVtIiwic3VwcG9ydHMiLCJlcnIiLCJET00iLCJvbmxvYWQiLCJsb2ciLCJvbmtleXVwIiwib25wYXN0ZSIsIm9uY2hhbmdlIiwic3VwcG9ydGVkVHlwZXMiLCJ1bnN1cHBvcnRlZFR5cGVzIiwic3ZnQnRuIiwiaW5uZXJUZXh0IiwiYXBwZW5kQ2hpbGQiLCJzdmdTZWwiLCJjb3B5U1ZHQ29udGFpbmVyIiwiY29weVNWRyIsImhyZWYiLCJvbmNsaWNrIiwic3ZnQ29weVRleHRDb250YWluZXIiLCJzdmdDb3B5VGV4dCIsInN2Z0NvcHlQTkdDb250YWluZXIiLCJzdmdDb3B5UE5HIiwianBnQnRuIiwianBnU2VsIiwiY29weUpQR0NvbnRhaW5lciIsImNvcHlKUEciLCJqcGdDb3B5UE5HQ29udGFpbmVyIiwianBnQ29weVBORyIsImpwZ0NvcHlUZXh0Q29udGFpbmVyIiwianBnQ29weVRleHQiXSwic291cmNlUm9vdCI6IiJ9