@ilamy/calendar 1.3.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +18 -13
- package/dist/index.js +6 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{RRule as YX}from"rrule";import{RRule as E2}from"rrule";import W0 from"dayjs";import b2 from"dayjs/plugin/isBetween.js";import I2 from"dayjs/plugin/isSameOrAfter.js";import w2 from"dayjs/plugin/isSameOrBefore.js";import H2 from"dayjs/plugin/localeData.js";import T2 from"dayjs/plugin/minMax.js";import k2 from"dayjs/plugin/timezone.js";import h2 from"dayjs/plugin/utc.js";import g2 from"dayjs/plugin/weekday.js";import C2 from"dayjs/plugin/weekOfYear.js";W0.extend(g2);W0.extend(C2);W0.extend(I2);W0.extend(w2);W0.extend(b2);W0.extend(T2);W0.extend(k2);W0.extend(h2);W0.extend(H2);var F=W0;import{clsx as D2}from"clsx";import{twMerge as y2}from"tailwind-merge";function U(...P){return y2(D2(P))}function PP(P){if(P===void 0)return;if(F.isDayjs(P))return P;let f=F(P);return f.isValid()?f:void 0}var Hf=(P,f)=>{let $={...P};for(let J of f)delete $[J];return $};function kP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:F.isDayjs(f.start)?f.start:F(f.start),end:F.isDayjs(f.end)?f.end:F(f.end)}})}var hP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},j2=(P,f)=>{return f.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},fP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},O0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Jf=({event:P,currentEvents:f,startDate:$,endDate:J})=>{if(!P.rrule)return[];try{let X=hP(P.start),z=P.rrule.until?hP(F(P.rrule.until)):void 0,Q={...P.rrule,dtstart:X,until:z},Y=new E2(Q),Z=O0(P),q=f.filter((_)=>_.recurrenceId&&O0(_)===Z),G=P.end.diff(P.start),p=hP($.subtract(G,"millisecond")),O=hP(J);return Y.between(p,O,!0).map((_,N)=>{let L=j2(_,P.start),W=q.find((h)=>PP(h.recurrenceId)?.isSame(L));if(W)return{...P,...W};let V=P.end.diff(P.start),B=L.add(V,"millisecond"),R=`${P.id}_${N}`,S=O0(P);return{...P,id:R,start:L,end:B,uid:S,rrule:void 0}}).filter((_)=>{if(P.exdates&&P.exdates.length>0){let W=_.start.toISOString();if(P.exdates.includes(W))return!1}return _.start.isSameOrBefore(J)&&_.end.isSameOrAfter($)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},Tf=({targetEvent:P,updates:f,currentEvents:$,scope:J})=>{let X=[...$],z=O0(P),Q=X.findIndex((Z)=>{return O0(Z)===z&&Z.rrule&&!Z.recurrenceId});if(Q===-1)throw Error("Base recurring event not found");let Y=X[Q];switch(J){case"this":{let Z=P.start.toISOString(),G=[...Y.exdates||[],Z],p={...Y,exdates:G};X[Q]=p;let O=`${P.id}_modified_${Date.now()}`,A={...Hf(P,["width","height","top","left","right"]),...f,id:O,recurrenceId:Z,uid:O0(Y),rrule:void 0};X.push(A);break}case"following":{let q=P.start.subtract(1,"day").endOf("day").toDate(),G={...Y,rrule:{...Y.rrule,until:q}};X[Q]=G;let p=Y.end.diff(Y.start),O=f.start||P.start,A=f.end||O.add(p),K=`${Y.id}_following`,_=`${K}@ilamy.calendar`,N={...Y,...f,rrule:{...Y.rrule,...f.rrule,dtstart:O.toDate()},id:K,uid:_,start:O,end:A,recurrenceId:void 0};X.push(N);break}case"all":{let Z={...Y,...f};X[Q]=Z;break}default:throw Error(`Invalid scope: ${J}. Must be 'this', 'following', or 'all'`)}return X},kf=({targetEvent:P,currentEvents:f,scope:$})=>{let J=[...f],X=O0(P),z=J.findIndex((Y)=>{return O0(Y)===X&&Y.rrule&&!Y.recurrenceId});if(z===-1)throw Error("Base recurring event not found");let Q=J[z];switch($){case"this":{let Y=P.start.toISOString(),q=[...Q.exdates||[],Y],G={...Q,exdates:q};J[z]=G;break}case"following":{let Z=P.start.subtract(1,"day").endOf("day").toDate(),q={...Q,rrule:{...Q.rrule,until:Z}};J[z]=q;break}case"all":{let Y=O0(P);return J.filter((q)=>O0(q)!==Y)}default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return J};import{AnimatePresence as x2,motion as v2}from"motion/react";import{jsx as hf}from"react/jsx-runtime";var i2={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},y=({children:P,transitionKey:f,delay:$=0,className:J,direction:X="vertical",layout:z,layoutId:Q,"data-testid":Y,ref:Z,...q})=>hf(x2,{mode:"wait",children:hf(v2.div,{animate:"visible",className:U("inline-block w-full",J),custom:{delay:$,direction:X},"data-testid":Y,exit:"exit",initial:"hidden",layout:z,layoutId:Q,ref:Z,variants:i2,...q,children:P},f)});y.displayName="AnimatedSection";import{DndContext as J1,MouseSensor as X1,pointerWithin as q1,TouchSensor as Q1,useSensor as nf,useSensors as Y1}from"@dnd-kit/core";import{useRef as tf,useState as _1}from"react";import{Slot as o2}from"@radix-ui/react-slot";import{cva as l2}from"class-variance-authority";import{jsx as c2}from"react/jsx-runtime";var gP=l2("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:f,size:$,asChild:J=!1,...X}){return c2(J?o2:"button",{className:U(gP({variant:f,size:$,className:P})),"data-slot":"button",...X})}import*as Z0 from"@radix-ui/react-dialog";import{XIcon as u2}from"lucide-react";import{jsx as F0,jsxs as Xf}from"react/jsx-runtime";function $P({...P}){return F0(Z0.Root,{"data-slot":"dialog",...P})}function d2({...P}){return F0(Z0.Portal,{"data-slot":"dialog-portal",...P})}function r2({className:P,...f}){return F0(Z0.Overlay,{className:U("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...f})}function zP({className:P,children:f,...$}){return Xf(d2,{"data-slot":"dialog-portal",children:[F0(r2,{}),Xf(Z0.Content,{className:U("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...$,children:[f,Xf(Z0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[F0(u2,{}),F0("span",{className:"sr-only",children:"Close"})]})]})]})}function ZP({className:P,...f}){return F0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function CP({className:P,...f}){return F0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function JP({className:P,...f}){return F0(Z0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function DP({className:P,...f}){return F0(Z0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as uf}from"react";import{createContext as a2,useContext as gf}from"react";var XP=a2(void 0),U0=()=>{let P=gf(XP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},n2=()=>{let P=gf(XP);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,businessHours:P.businessHours}};import{createContext as t2,useContext as Cf}from"react";var qP=t2(void 0),o=()=>{let P=Cf(qP);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},s2=()=>{let P=Cf(qP);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}};import{useCallback as Y0,useMemo as e2,useState as of}from"react";import{useCallback as P0,useEffect as Qf,useMemo as xf,useState as a0}from"react";var qf={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function J0(P,f){let $=P.startOf("week").day(f),J=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(X,z)=>J.add(z,"day"))}function yP(P,f){let $=J0(P.startOf("month"),f);return Array.from({length:6},(J,X)=>{let z=$[0].add(X,"week");return J0(z,f)})}function Df(P){let f=P.daysInMonth();return Array.from({length:f},($,J)=>P.startOf("month").add(J,"day"))}function yf({referenceDate:P=F(),length:f=24}={}){return Array.from({length:f},($,J)=>P.hour(J).minute(0).second(0).millisecond(0))}var H0=1,Ef=24,G0=24,QP=4,jf="bg-secondary text-muted-foreground pointer-events-none",YP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var vf={day:"day",week:"week",month:"month",year:"year"},EP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:J="month",initialDate:X=F(),businessHours:z,onEventAdd:Q,onEventUpdate:Y,onEventDelete:Z,onDateChange:q,onViewChange:G,locale:p,timezone:O,translations:A,translator:K}=P,[_,N]=a0(X),[L,W]=a0(J),[V,B]=a0(f),[R,S]=a0(!1),[k,h]=a0(null),[C,D]=a0(null),[l,u]=a0(p||"en"),d=xf(()=>{if(K)return K;if(A)return(M)=>A[M]||M;return(M)=>qf[M]||M},[A,K]),c=P0((M,H)=>{let j=[];for(let r of V)if(r.rrule)j.push(...Jf({event:r,currentEvents:V,startDate:M,endDate:H}));else{let r0=r.start.isSameOrAfter(M)&&r.start.isSameOrBefore(H),Zf=r.end.isSameOrAfter(M)&&r.end.isSameOrBefore(H),T=r.start.isBefore(M)&&r.end.isAfter(H);if(r0||Zf||T)j.push(r)}return j},[V]),w=P0(()=>{if(L==="day")return{start:_.startOf("day"),end:_.endOf("day")};if(L==="year")return{start:_.startOf("year"),end:_.endOf("year")};if(L==="week"){let H=J0(_,$);return{start:H[0].startOf("day"),end:H[6].endOf("day")}}let M=yP(_,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[_,L,$]),b=xf(()=>{let{start:M,end:H}=w();return c(M,H)},[c,w]);Qf(()=>{if(f)B(f)},[f]),Qf(()=>{if(p)u(p),F.locale(p),N((M)=>M.locale(p))},[p]),Qf(()=>{if(O)F.tz.setDefault(O)},[O]);let p0=P0((M)=>{N(M),q?.(M)},[q]),Q0=P0((M)=>{N((H)=>{let j=M===1?H.add(1,vf[L]):H.subtract(1,vf[L]);return q?.(j),j})},[L,q]),z0=P0(()=>Q0(1),[Q0]),N0=P0(()=>Q0(-1),[Q0]),t=P0(()=>{let M=F();N(M),q?.(M)},[q]),i=P0((M)=>{B((H)=>[...H,M]),Q?.(M)},[Q]),t0=P0((M,H)=>{B((j)=>j.map((r)=>{if(r.id!==M)return r;let r0={...r,...H};return Y?.(r0),r0}))},[Y]),s0=P0((M,H,j)=>{Y?.({...M,...H}),B(Tf({targetEvent:M,updates:H,currentEvents:V,scope:j.scope}))},[V,Y]),e0=P0((M,H)=>{Z?.(M),B(kf({targetEvent:M,currentEvents:V,scope:H.scope}))},[V,Z]),S0=P0((M)=>{B((H)=>{let j=H.find((r)=>r.id===M);if(j)Z?.(j);return H.filter((r)=>r.id!==M)})},[Z]),c0=P0((M)=>{if(M?.start)D(M.start);let H=M?.start??_;h({title:d("newEvent"),start:H,end:M?.end??H.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:M?.allDay??!1}),S(!0)},[_,d]),u0=P0(()=>{D(null),h(null),S(!1)},[]),d0=P0((M)=>{W(M),G?.(M)},[G]),m=P0((M)=>{let H=M.uid;return V.find((j)=>(j.uid||`${j.id}@ilamy.calendar`)===H&&j.rrule)||null},[V]);return{currentDate:_,view:L,events:b,rawEvents:V,isEventFormOpen:R,selectedEvent:k,selectedDate:C,firstDayOfWeek:$,dayMaxEvents:QP,currentLocale:l,businessHours:z,setCurrentDate:N,selectDate:p0,setView:d0,nextPeriod:z0,prevPeriod:N0,today:t,addEvent:i,updateEvent:t0,updateRecurringEvent:s0,deleteEvent:S0,deleteRecurringEvent:e0,openEventForm:c0,closeEventForm:u0,setSelectedEvent:h,setIsEventFormOpen:S,setSelectedDate:D,getEventsForDateRange:c,findParentRecurringEvent:m,t:d}};import{jsx as P1}from"react/jsx-runtime";var lf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},cf=({children:P,events:f=[],resources:$=[],firstDayOfWeek:J=0,initialView:X="month",initialDate:z,renderEvent:Q,onEventClick:Y,onCellClick:Z,onViewChange:q,onEventAdd:G,onEventUpdate:p,onEventDelete:O,onDateChange:A,locale:K,timezone:_,disableCellClick:N,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:V,eventSpacing:B,stickyViewHeader:R=!0,viewHeaderClassName:S="",headerComponent:k,headerClassName:h,translations:C,translator:D,renderResource:l,renderEventForm:u,businessHours:d,timeFormat:c="12-hour",classesOverride:w,orientation:b="horizontal",renderCurrentTimeIndicator:p0,hideNonBusinessHours:Q0=!1})=>{let[z0]=of($),[N0,t]=of(new Set($.map((T)=>T.id))),i=EP({events:f,firstDayOfWeek:J,initialView:X,initialDate:z,businessHours:d,onEventAdd:G,onEventUpdate:p,onEventDelete:O,onDateChange:A,onViewChange:q,locale:K,timezone:_,translations:C,translator:D}),t0=Y0((T)=>{t((e)=>{let w0=new Set(e);if(w0.has(T))w0.delete(T);else w0.add(T);return w0})},[]),s0=Y0((T)=>{t((e)=>new Set(e).add(T))},[]),e0=Y0((T)=>{t((e)=>{let w0=new Set(e);return w0.delete(T),w0})},[]),S0=Y0(()=>{t(new Set(z0.map((T)=>T.id)))},[z0]),c0=Y0(()=>{t(new Set)},[]),u0=Y0((T)=>{return i.events.filter((e)=>{if(e.resourceIds)return e.resourceIds.includes(T);return e.resourceId===T})},[i.events]),d0=Y0((T)=>{return i.events.filter((e)=>{return lf(e).some((m2)=>T.includes(m2))})},[i.events]),m=Y0((T)=>{return z0.find((e)=>e.id===T)},[z0]),M=Y0(()=>{return z0.filter((T)=>N0.has(T.id))},[z0,N0]),H=Y0((T)=>{return Boolean(T.resourceIds&&T.resourceIds.length>1)},[]),j=Y0((T)=>{i.setSelectedEvent(T),i.setIsEventFormOpen(!0)},[i]),r=Y0((T)=>{if(L)return;if(Y)Y(T);else j(T)},[L,Y,j]),r0=Y0((T)=>{if(N)return;if(Z)Z(T);else{let e={title:i.t("newEvent"),start:T.start,end:T.end,description:"",allDay:!1};if(T.resourceId!==void 0)e.resourceId=T.resourceId;i.setSelectedEvent(e),i.setSelectedDate(T.start),i.setIsEventFormOpen(!0)}},[Z,N,i]),Zf=e2(()=>({...i,view:i.view,setView:i.setView,events:i.events,rawEvents:i.rawEvents,resources:z0,visibleResources:N0,toggleResourceVisibility:t0,showResource:s0,hideResource:e0,showAllResources:S0,hideAllResources:c0,getEventsForResource:u0,getEventsForResources:d0,getResourceById:m,getVisibleResources:M,isEventCrossResource:H,getEventResourceIds:lf,onEventClick:r,onCellClick:r0,headerComponent:k,headerClassName:h,renderEvent:Q,renderResource:l,renderEventForm:u,locale:K,timezone:_,disableCellClick:N,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:V,eventSpacing:B,stickyViewHeader:R,viewHeaderClassName:S,businessHours:d,timeFormat:c,classesOverride:w,orientation:b,renderCurrentTimeIndicator:p0,hideNonBusinessHours:Q0}),[i,z0,N0,t0,s0,e0,S0,c0,u0,d0,m,M,H,r,r0,Q,l,u,K,_,N,L,W,V,B,R,S,k,h,d,c,w,b,p0,Q0]);return P1(qP.Provider,{value:Zf,children:P})};function I(P){let f=uf(qP),$=uf(XP);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as _0,jsxs as n0}from"react/jsx-runtime";function OP({isOpen:P,onClose:f,onConfirm:$,operationType:J,eventTitle:X}){let{t:z}=I((Z)=>({t:Z.t})),Q=(Z)=>{$(Z),f()},Y=J==="edit";return _0($P,{onOpenChange:f,open:P,children:n0(zP,{className:"max-w-md",children:[n0(ZP,{children:[_0(JP,{children:Y?z("editRecurringEvent"):z("deleteRecurringEvent")}),n0(DP,{children:['"',X,'"'," ",Y?z("editRecurringEventQuestion"):z("deleteRecurringEventQuestion")]})]}),n0("div",{className:"space-y-3",children:[_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q("this"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisEvent")}),_0("div",{className:"text-sm text-muted-foreground",children:Y?z("onlyChangeThis"):z("onlyDeleteThis")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q("following"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisAndFollowingEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Y?z("changeThisAndFuture"):z("deleteThisAndFuture")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q("all"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("allEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Y?z("changeEntireSeries"):z("deleteEntireSeries")})]})})]}),_0(CP,{children:_0(g,{onClick:f,variant:"outline",children:z("cancel")})})]})})}var df=(P,f)=>{let{active:$,over:J}=P;if(!$||!J||!f)return null;let X=J.data.current?.type==="time-cell",{resourceId:z,allDay:Q}=J.data.current||{},Y;if(X){let{date:p,hour:O=0,minute:A=0}=J.data.current;Y=F(p).hour(O).minute(A)}else{let{date:p}=J.data.current;Y=F(p)}let Z=f.end.diff(f.start,"second"),q=Y.add(Z,"second");if(q.isSame(q.startOf("day")))q=q.subtract(1,"day").endOf("day");let G={start:Y,end:q,resourceId:z,allDay:X?!1:Q??f.allDay};return{activeEvent:f,updates:G}};import{DragOverlay as f1}from"@dnd-kit/core";import{snapCenterToCursor as $1}from"@dnd-kit/modifiers";import{useImperativeHandle as z1,useState as Z1}from"react";import{jsx as rf}from"react/jsx-runtime";var af=({ref:P})=>{let[f,$]=Z1(null);return z1(P,()=>({setActiveEvent:$})),rf(f1,{modifiers:[$1],children:f&&rf("div",{className:U("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as sf,jsxs as ef,Fragment as K1}from"react/jsx-runtime";function jP({children:P}){let f=tf(null),$=tf(null),{updateEvent:J,updateRecurringEvent:X,disableDragAndDrop:z}=I((L)=>({updateEvent:L.updateEvent,updateRecurringEvent:L.updateRecurringEvent,disableDragAndDrop:L.disableDragAndDrop})),[Q,Y]=_1({isOpen:!1,event:null,updates:null}),Z=nf(X1,{activationConstraint:{distance:2}}),q=nf(Q1,{activationConstraint:{delay:100,tolerance:5}}),G=Y1(Z,q),p=(L,W)=>{if(!L||!L.id)return;if(!W||Object.keys(W).length===0)return;if(fP(L))Y({isOpen:!0,event:L,updates:W});else J(L.id,W)},O=(L)=>{if(!Q.event||!Q.updates){Y({isOpen:!1,event:null,updates:null});return}try{X(Q.event,Q.updates,{scope:L,eventDate:Q.event.start})}catch{}finally{Y({isOpen:!1,event:null,updates:null})}},A=()=>{Y({isOpen:!1,event:null,updates:null})},K=(L)=>{let{active:W}=L;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},_=(L)=>{let W=df(L,f.current);if(W){let{activeEvent:V,updates:B}=W;p(V,B)}f.current=null,$.current?.setActiveEvent(null)},N=(L)=>{f.current=null};if(z)return P;return ef(K1,{children:[ef(J1,{collisionDetection:q1,onDragCancel:N,onDragEnd:_,onDragStart:K,sensors:G,children:[P,sf(af,{ref:$})]}),sf(OP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:A,onConfirm:O,operationType:"edit"})]})}import{useEffect as x1,useMemo as v1,useState as y0}from"react";import*as xP from"@radix-ui/react-checkbox";import{CheckIcon as p1}from"lucide-react";import{jsx as Yf}from"react/jsx-runtime";function T0({className:P,...f}){return Yf(xP.Root,{className:U("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...f,children:Yf(xP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:Yf(p1,{className:"size-3.5"})})})}import{PopoverClose as W1}from"@radix-ui/react-popover";import{Calendar as O1}from"lucide-react";import{useEffect as F1,useRef as V1,useState as B1}from"react";import{ChevronDownIcon as U1,ChevronLeftIcon as L1,ChevronRightIcon as G1}from"lucide-react";import*as vP from"react";import{DayPicker as A1,getDefaultClassNames as P5}from"react-day-picker";import{jsx as k0}from"react/jsx-runtime";function f5({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:J="label",buttonVariant:X="ghost",formatters:z,components:Q,...Y}){let Z=P5();return k0(A1,{captionLayout:J,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",Z.root),months:U("flex gap-4 flex-col md:flex-row relative",Z.months),month:U("flex flex-col w-full gap-4",Z.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",Z.nav),button_previous:U(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Z.button_previous),button_next:U(gP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Z.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",Z.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",Z.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",Z.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",Z.dropdown),caption_label:U("select-none font-medium",J==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",Z.caption_label),table:"w-full border-collapse",weekdays:U("flex",Z.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",Z.weekday),week:U("flex w-full mt-2",Z.week),week_number_header:U("select-none w-(--cell-size)",Z.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",Z.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Y.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",Z.day),range_start:U("rounded-l-md bg-accent",Z.range_start),range_middle:U("rounded-none",Z.range_middle),range_end:U("rounded-r-md bg-accent",Z.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",Z.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",Z.outside),disabled:U("text-muted-foreground opacity-50",Z.disabled),hidden:U("invisible",Z.hidden),...f},components:{Root:({className:q,rootRef:G,...p})=>{return k0("div",{className:U(q),"data-slot":"calendar",ref:G,...p})},Chevron:({className:q,orientation:G,...p})=>{if(G==="left")return k0(L1,{className:U("size-4",q),...p});if(G==="right")return k0(G1,{className:U("size-4",q),...p});return k0(U1,{className:U("size-4",q),...p})},DayButton:N1,WeekNumber:({children:q,...G})=>{return k0("td",{...G,children:k0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:q})})},...Q},formatters:{formatMonthDropdown:(q)=>q.toLocaleString("default",{month:"short"}),...z},showOutsideDays:$,...Y})}function N1({className:P,day:f,modifiers:$,...J}){let X=P5(),z=vP.useRef(null);return vP.useEffect(()=>{if($.focused)z.current?.focus()},[$.focused]),k0(g,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",X.day,P),"data-day":f.date.toLocaleDateString(),"data-range-end":$.range_end,"data-range-middle":$.range_middle,"data-range-start":$.range_start,"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,ref:z,size:"icon",variant:"ghost",...J})}import*as R0 from"@radix-ui/react-popover";import{jsx as iP}from"react/jsx-runtime";function h0({...P}){return iP(R0.Root,{"data-slot":"popover",...P})}function g0({...P}){return iP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,...J}){return iP(R0.Portal,{children:iP(R0.Content,{align:f,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:$,...J})})}import{jsx as _P,jsxs as _f}from"react/jsx-runtime";function FP({date:P,closeOnSelect:f,onChange:$,label:J="Pick a date",className:X,disabled:z}){let Q=V1(null),[Y,Z]=B1(P);F1(()=>{Z(P)},[P]);let q=(G)=>{if(Z(G),f)Q.current?.click();$?.(G)};return _P("div",{className:X,children:_f(h0,{children:[_P(g0,{asChild:!0,children:_f(g,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[_P(O1,{}),Y?F(Y).format("MMM D, YYYY"):_P("span",{children:J})]})}),_f(C0,{align:"start",className:"w-auto p-0",children:[_P(W1,{ref:Q}),_P(f5,{captionLayout:"dropdown",defaultMonth:Y,disabled:z,mode:"single",onSelect:q,selected:Y})]})]})})}import{jsx as M1}from"react/jsx-runtime";function m0({className:P,type:f,...$}){return M1("input",{className:U("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:f,...$})}import*as $5 from"@radix-ui/react-label";import{jsx as S1}from"react/jsx-runtime";function a({className:P,...f}){return S1($5.Root,{className:U("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...f})}import*as V0 from"@radix-ui/react-scroll-area";import{jsx as VP,jsxs as R1}from"react/jsx-runtime";function B0({className:P,children:f,viewPortProps:$,...J}){return R1(V0.Root,{className:U("relative",P),"data-slot":"scroll-area",...J,children:[VP(V0.Viewport,{...$,className:U("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),"data-slot":"scroll-area-viewport",children:f}),VP(b0,{}),VP(V0.Corner,{})]})}function b0({className:P,orientation:f="vertical",...$}){return VP(V0.ScrollAreaScrollbar,{className:U("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:f,...$,children:VP(V0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as b1}from"lucide-react";import{useEffect as I1,useRef as Z5,useState as Kf}from"react";import{useMemo as m1}from"react";function z5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:m1(()=>{let z=[],[Q,Y]=f.split(":").map(Number),[Z,q]=$.split(":").map(Number),G=Q*60+Y,p=Z*60+q;for(let O=G;O<=p;O+=15){let A=Math.floor(O/60),K=O%60,_=`${A.toString().padStart(2,"0")}:${K.toString().padStart(2,"0")}`;z.push(_)}return z},[f,$]),formatTime:(z)=>{let[Q,Y]=z.split(":").map(Number),Z=Q>=12?"PM":"AM",q=Q===0?12:Q>12?Q-12:Q;if(P==="24-hour")return`${Q.toString().padStart(2,"0")}:${Y.toString().padStart(2,"0")}`;return`${q}:${Y.toString().padStart(2,"0")} ${Z}`}}}import{jsx as D0,jsxs as pf}from"react/jsx-runtime";var w1=(P)=>{P.stopPropagation()};function Uf({value:P,onChange:f,minTime:$="00:00",maxTime:J="23:45",timeFormat:X="12-hour",placeholder:z="Select time...",className:Q,disabled:Y=!1,name:Z}){let[q,G]=Kf(!1),[p,O]=Kf(""),A=Z5(null),K=Z5(null),[_,N]=Kf(0),{timeOptions:L,formatTime:W}=z5({timeFormat:X,minTime:$,maxTime:J}),V=L.filter((S)=>{return W(S).toLowerCase().includes(p.toLowerCase())}),B=(S)=>{f(S),G(!1),O("")};I1(()=>{if(q){if(K.current)N(K.current.offsetWidth);setTimeout(()=>{A.current?.focus()},0)}},[q]);let R=P?W(P):z;return pf(h0,{onOpenChange:G,open:q,children:[D0(g0,{asChild:!0,children:pf(g,{"aria-controls":"time-picker-listbox","aria-expanded":q,className:U("w-full justify-start",Q),"data-testid":`time-picker-${Z}`,disabled:Y,ref:K,role:"combobox",variant:"outline",children:[D0(b1,{className:"mr-2 h-4 w-4"}),R]})}),pf(C0,{align:"start",className:"p-0",style:{width:_},children:[D0("div",{className:"p-2 border-b",children:D0(m0,{className:"h-8",onChange:(S)=>O(S.target.value),placeholder:"Search time...",ref:A,value:p})}),D0(B0,{className:"h-[200px]",onWheel:w1,children:D0("div",{className:"p-1",children:V.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):V.map((S)=>{let k=W(S);return D0("button",{className:U("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",S===P&&"bg-accent text-accent-foreground"),onClick:()=>B(S),type:"button",children:k},S)})})})]})]})}var Lf=(P,f)=>{if(!f)return!0;let $=!1;return KP(f,{date:P,onMatch:()=>{$=!0}}),$},J5=({date:P,hour:f,minute:$=0,businessHours:J})=>{if(!J)return!0;if(f===void 0)return Lf(P,J);let X=!1,z=f*60+$;return KP(J,{date:P,onMatch:(Q)=>{let Y=Q.startTime??9,Z=Q.endTime??17,q=Y*60,G=Z*60;if(z>=q&&z<G)X=!0}}),X},KP=(P,f)=>{let{date:$,onMatch:J}=f;if(!P)return;let X=Array.isArray(P)?P:[P];for(let z of X)if($&&z.daysOfWeek){let Q=$.day();if(z.daysOfWeek.some((Y)=>YP[Y]===Q))J(z)}else J(z)},oP=(P)=>{let{allDates:f,businessHours:$,resourceBusinessHours:J=[],hideNonBusinessHours:X}=P,z=24,Q=0,Y=!1,Z=(q)=>{Y=!0,z=Math.min(z,q.startTime??9),Q=Math.max(Q,q.endTime??17)};for(let q of f){KP($,{date:q,onMatch:Z});for(let G of J)KP(G,{date:q,onMatch:Z})}if(!Y&&X){KP($,{onMatch:Z});for(let q of J)KP(q,{onMatch:Z});if(!Y)z=9,Q=17,Y=!0}return{minStart:z,maxEnd:Q,hasBusinessHours:Y}};var Gf=(P,f,$)=>{let[J,X]=f.split(":").map(Number),z=F(P).hour(J).minute(X);return $?z.hour(0).minute(0):z},X5=(P,f,$)=>{let[J,X]=f.split(":").map(Number),z=F(P).hour(J).minute(X);return $?z.hour(23).minute(59):z},Af=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=F(P),{minStart:J,maxEnd:X,hasBusinessHours:z}=oP({allDates:[$],businessHours:f,hideNonBusinessHours:!1});if(!z)return{min:"00:00",max:"23:59"};return{min:`${J.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as g1,useMemo as C1,useState as N5}from"react";import{RRule as q0}from"rrule";import{jsx as lP}from"react/jsx-runtime";function q5({className:P,...f}){return lP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function Q5({className:P,...f}){return lP("div",{className:U("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...f})}function Y5({className:P,...f}){return lP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...f})}function _5({className:P,...f}){return lP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as E from"@radix-ui/react-select";import{CheckIcon as H1,ChevronDownIcon as K5,ChevronUpIcon as T1}from"lucide-react";import{jsx as f0,jsxs as Nf}from"react/jsx-runtime";function p5({...P}){return f0(E.Root,{"data-slot":"select",...P})}function U5({...P}){return f0(E.Value,{"data-slot":"select-value",...P})}function L5({className:P,size:f="default",children:$,...J}){return Nf(E.Trigger,{className:U("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":f,"data-slot":"select-trigger",...J,children:[$,f0(E.Icon,{asChild:!0,children:f0(K5,{className:"size-4 opacity-50"})})]})}function G5({className:P,children:f,position:$="popper",align:J="center",...X}){return f0(E.Portal,{children:Nf(E.Content,{align:J,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:$,...X,children:[f0(k1,{}),f0(E.Viewport,{className:U("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),f0(h1,{})]})})}function A5({className:P,children:f,...$}){return Nf(E.Item,{className:U("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...$,children:[f0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f0(E.ItemIndicator,{children:f0(H1,{className:"size-4"})})}),f0(E.ItemText,{children:f})]})}function k1({className:P,...f}){return f0(E.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:f0(T1,{className:"size-4"})})}function h1({className:P,...f}){return f0(E.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:f0(K5,{className:"size-4"})})}import{jsx as x,jsxs as X0}from"react/jsx-runtime";var Wf={DAILY:q0.DAILY,WEEKLY:q0.WEEKLY,MONTHLY:q0.MONTHLY,YEARLY:q0.YEARLY},D1=Object.fromEntries(Object.entries(Wf).map(([P,f])=>[f,P])),W5=[q0.SU,q0.MO,q0.TU,q0.WE,q0.TH,q0.FR,q0.SA],y1=["sun","mon","tue","wed","thu","fri","sat"],O5=(P)=>Math.max(1,Number.parseInt(P,10)||1),E1=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new q0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},F5=({value:P,onChange:f})=>{let{t:$}=I((_)=>({t:_.t})),[J,X]=N5(!!P),[z,Q]=N5(()=>P||null),Y=C1(()=>y1.map((_,N)=>({value:W5[N],label:$(_)})),[$]);g1(()=>{if(X(!!P),P)Q(P)},[P]);let Z=(_)=>{if(!z)return;let N={...z,..._};Q(N),f(J?N:null)},q=(_)=>{if(X(_),!_){f(null);return}if(z){f(z);return}let N={freq:q0.DAILY,interval:1};Q(N),f(N)},G=(_)=>{let N=z?.byweekday||[],L=W5[_],W=N.includes(L)?N.filter((V)=>V!==L):[...N,L];Z({byweekday:W.length?W:void 0})},p=(_)=>{let N={count:void 0,until:void 0};if(_==="count")N.count=z?.count||1;if(_==="until")N.until=z?.until||F().add(1,"month").endOf("day").toDate();Z(N)},O=z?.until?"until":z?.count?"count":"never",A=D1[z?.freq??q0.DAILY]||"DAILY",K=Array.isArray(z?.byweekday)?z.byweekday:z?.byweekday?[z.byweekday]:[];return X0(q5,{"data-testid":"recurrence-editor",children:[X0(Q5,{className:"pb-3",children:[X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:q}),x(Y5,{className:"text-sm",children:$("repeat")})]}),J&&P&&x("p",{className:"text-xs text-muted-foreground",children:E1(P,$)})]}),J&&x(_5,{className:"pt-0",children:X0("div",{className:"space-y-4",children:[X0("div",{className:"grid grid-cols-2 gap-4",children:[X0("div",{children:[x(a,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),X0(p5,{onValueChange:(_)=>Z({freq:Wf[_]}),value:A,children:[x(L5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:x(U5,{})}),x(G5,{children:Object.keys(Wf).map((_)=>x(A5,{value:_,children:$(_.toLowerCase())},_))})]})]}),X0("div",{children:[x(a,{className:"text-xs",htmlFor:"interval",children:$("every")}),x(m0,{className:"h-8",id:"interval",min:"1",onChange:(_)=>Z({interval:O5(_.target.value)}),type:"number",value:z?.interval||1})]})]}),z?.freq===q0.WEEKLY&&X0("div",{children:[x(a,{className:"text-xs",children:$("repeatOn")}),x("div",{className:"flex flex-wrap gap-1 mt-1",children:Y.map((_,N)=>X0("div",{className:"flex items-center space-x-1",children:[x(T0,{checked:K.includes(_.value),id:`day-${N}`,onCheckedChange:()=>G(N)}),x(a,{className:"text-xs cursor-pointer",htmlFor:`day-${N}`,children:_.label})]},_.label))})]}),X0("div",{children:[x(a,{className:"text-xs",children:$("ends")}),X0("div",{className:"space-y-2 mt-1",children:[X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:O==="never",id:"never",onCheckedChange:()=>p("never")}),x(a,{className:"text-xs",htmlFor:"never",children:$("never")})]}),X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:O==="count",id:"after",onCheckedChange:()=>p("count")}),x(a,{className:"text-xs",htmlFor:"after",children:$("after")}),O==="count"&&x(m0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(_)=>Z({count:O5(_.target.value)}),type:"number",value:z?.count||1}),x("span",{className:"text-xs",children:$("occurrences")})]}),X0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:O==="until",id:"on",onCheckedChange:()=>p("until")}),x(a,{className:"text-xs",htmlFor:"on",children:$("on")}),O==="until"&&x(FP,{className:"h-6",date:z?.until,onChange:(_)=>Z({until:_?F(_).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as cP,useState as j1}from"react";function V5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=I((q)=>({updateRecurringEvent:q.updateRecurringEvent,deleteRecurringEvent:q.deleteRecurringEvent})),[J,X]=j1({isOpen:!1,operationType:"edit",event:null}),z=cP((q,G)=>{X({isOpen:!0,operationType:"edit",event:q,updates:G,onConfirm:(p)=>{f(q,G,{scope:p,eventDate:q.start})}})},[f]),Q=cP((q)=>{X({isOpen:!0,operationType:"delete",event:q,onConfirm:(G)=>{$(q,{scope:G,eventDate:q.start})}})},[$]),Y=cP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),Z=cP((q)=>{if(J.onConfirm)J.onConfirm(q);Y(),P?.()},[J,Y,P]);return{dialogState:J,openEditDialog:z,openDeleteDialog:Q,closeDialog:Y,handleConfirm:Z}}import{jsx as v,jsxs as $0,Fragment as i1}from"react/jsx-runtime";var B5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],M5=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:J,onAdd:X})=>{let{dialogState:z,openEditDialog:Q,openDeleteDialog:Y,closeDialog:Z,handleConfirm:q}=V5(f),{findParentRecurringEvent:G,t:p,businessHours:O,timeFormat:A,getResourceById:K}=I((m)=>({findParentRecurringEvent:m.findParentRecurringEvent,t:m.t,businessHours:m.businessHours,timeFormat:m.timeFormat,getResourceById:m.getResourceById})),_=P?.start??F(),N=P?.end??F().add(1,"hour"),L=P?G(P):null,[W,V]=y0(_.toDate()),[B,R]=y0(N.toDate()),[S,k]=y0(P?.allDay||!1),[h,C]=y0(P?.color||B5[0].value),[D,l]=y0(_.format("HH:mm")),[u,d]=y0(N.format("HH:mm")),[c,w]=y0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[b,p0]=y0(()=>{return P?.rrule||L?.rrule||null}),Q0=(m)=>{if(V(m),m&&F(m).isAfter(F(B)))R(m)},z0=(m)=>{if(R(m),m&&F(m).isBefore(F(W)))V(m)},N0=(m)=>{if(l(m),F(W).isSame(F(B),"day")&&m>u)d(m)},t=(m)=>{if(d(m),F(W).isSame(F(B),"day")&&m<D)l(m)},i=(m)=>{let{name:M,value:H}=m.target;w((j)=>({...j,[M]:H}))};x1(()=>{if(S)d("23:59")},[S]);let t0=(m)=>{m.preventDefault();let M=Gf(W,D,S),H=X5(B,u,S),j={id:P?.id||F().format("YYYYMMDDHHmmss"),title:c.title,start:M,end:H,resourceId:P?.resourceId,description:c.description,location:c.location,allDay:S,color:h,rrule:b||void 0};if(P?.id&&fP(P)){Q(P,{title:c.title,start:M,end:H,description:c.description,location:c.location,allDay:S,color:h,rrule:b||void 0});return}if(P?.id)$?.(j);else X?.(j);f()},s0=()=>{if(P?.id){if(fP(P)){Y(P);return}J?.(P),f()}},e0=(m)=>{if(!m){p0(null);return}let M=Gf(W,D,S);p0({...m,dtstart:M.toDate()})},S0=v1(()=>{let m=P?.resourceId;if(m&&K){let M=K(m);if(M?.businessHours)return M.businessHours}return O},[P?.resourceId,K,O]),c0=S0?(m)=>!Lf(F(m),S0):void 0,u0=Af(W,S0),d0=Af(B,S0);return $0(i1,{children:[$0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:t0,children:[v(B0,{className:"flex-1 min-h-0",children:$0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[$0("div",{className:"grid gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"title",children:p("title")}),v(m0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:i,placeholder:p("eventTitlePlaceholder"),required:!0,value:c.title})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"description",children:p("description")}),v(m0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:i,placeholder:p("eventDescriptionPlaceholder"),value:c.description})]}),$0("div",{className:"flex items-center space-x-2",children:[v(T0,{checked:S,id:"allDay",onCheckedChange:(m)=>k(m===!0)}),v(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:p("allDay")})]}),$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("startDate")}),v(FP,{className:"mt-1",closeOnSelect:!0,date:W,disabled:c0,onChange:Q0})]}),$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("endDate")}),v(FP,{className:"mt-1",closeOnSelect:!0,date:B,disabled:c0,onChange:z0})]})]}),!S&&$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("startTime")}),v(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"start-time",onChange:N0,timeFormat:A,value:D})]}),$0("div",{children:[v(a,{className:"text-xs sm:text-sm",children:p("endTime")}),v(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:d0.max,minTime:d0.min,name:"end-time",onChange:t,timeFormat:A,value:u})]})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",children:p("color")}),v("div",{className:"flex flex-wrap gap-2",children:B5.map((m)=>v(g,{"aria-label":m.label,className:U(`${m.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,h===m.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>C(m.value),type:"button",variant:"ghost"},m.value))})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[v(a,{className:"text-xs sm:text-sm",htmlFor:"location",children:p("location")}),v(m0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:i,placeholder:p("eventLocationPlaceholder"),value:c.location})]}),v(F5,{onChange:e0,value:b})]})}),$0(CP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&v(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:s0,size:"sm",type:"button",variant:"destructive",children:p("delete")}),$0("div",{className:"flex w-full gap-2 sm:w-auto",children:[v(g,{className:"flex-1 sm:flex-none",onClick:f,size:"sm",type:"button",variant:"outline",children:p("cancel")}),v(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?p("update"):p("create")})]})]})]}),v(OP,{eventTitle:z.event?.title||"",isOpen:z.isOpen,onClose:Z,onConfirm:q,operationType:z.operationType})]})};import{jsx as uP,jsxs as S5}from"react/jsx-runtime";var dP=()=>{let{t:P,selectedEvent:f,isEventFormOpen:$,closeEventForm:J,addEvent:X,updateEvent:z,deleteEvent:Q,renderEventForm:Y}=I((p)=>({t:p.t,selectedEvent:p.selectedEvent,isEventFormOpen:p.isEventFormOpen,closeEventForm:p.closeEventForm,addEvent:p.addEvent,updateEvent:p.updateEvent,deleteEvent:p.deleteEvent,renderEventForm:p.renderEventForm})),G={open:$,onClose:J,selectedEvent:f,onAdd:X,onUpdate:(p)=>{z(p.id,p)},onDelete:(p)=>{Q(p.id)}};if(Y)return Y(G);return uP($P,{onOpenChange:J,open:$,children:S5(zP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[S5(ZP,{className:"mb-2 sm:mb-4 shrink-0",children:[uP(JP,{className:"text-base sm:text-lg",children:f?.id?P("editEvent"):P("createEvent")}),uP(DP,{className:"text-xs sm:text-sm",children:f?.id?P("editEventDetails"):P("addNewEvent")})]}),uP(M5,{...G})]})})};import{Calendar as J4,Download as X4,Menu as q4,Plus as Q4}from"lucide-react";import{useState as Y4}from"react";import{RRule as o1}from"rrule";var Of=`\r
|
|
2
|
-
`,
|
|
3
|
-
`,"\\n").replaceAll("\r","")},rP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},
|
|
4
|
-
`).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},u1=(P)=>{let f=F().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",J=P.rrule?c1(P.rrule):"",X=P.exdates?.length?P.exdates.map((Y)=>rP(F(Y),P.allDay)).join(","):null,z=P.recurrenceId?rP(F(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${R5(P)}`,`DTSTART${$}:${rP(P.start,P.allDay)}`,`DTEND${$}:${rP(P.end,P.allDay)}`,`SUMMARY:${aP(P.title)}`,P.description&&`DESCRIPTION:${aP(P.description)}`,P.location&&`LOCATION:${aP(P.location)}`,J,X&&`EXDATE:${X}`,z&&`RECURRENCE-ID:${z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(Of)},d1=(P)=>{let f=new Set;return P.filter(($)=>{let J=R5($),X=$.rrule&&!$.recurrenceId,z=$.recurrenceId&&!$.rrule;if(X)return f.add(J),!0;if(z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(J)})},r1=(P,f="ilamy Calendar")=>{let $=aP(f),J=d1(P).map(u1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,l1,...J,"END:VCALENDAR"].join(Of)},m5=(P,f="calendar.ics",$="ilamy Calendar")=>{let J=new Blob([r1(P,$)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(J),z=f.endsWith(".ics")?f:`${f}.ics`,Q=document.createElement("a");Q.href=X,Q.download=z,document.body.append(Q),Q.click(),Q.remove(),URL.revokeObjectURL(X)};import{ChevronDown as a1}from"lucide-react";import{useMemo as n1,useState as t1}from"react";import{jsx as s,jsxs as tP,Fragment as nP}from"react/jsx-runtime";var s1=["january","february","march","april","may","june","july","august","september","october","november","december"],e1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:J,firstDayOfWeek:X}=I((L)=>({currentDate:L.currentDate,view:L.view,setCurrentDate:L.setCurrentDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),[z,Q]=t1(null),Y=n1(()=>s1.map((L)=>J(L)),[J]),Z=P.year(),q=Array.from({length:11},(L,W)=>Z-5+W),G=J0(P,X),p=(L)=>{$(L),Q(null)},O=()=>s(nP,{children:Y.map((L,W)=>s(g,{className:U("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>p(P.month(W)),variant:"ghost",children:L},L))}),A=()=>s(nP,{children:q.map((L)=>s(g,{className:U("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>p(P.year(L)),variant:"ghost",children:L},L))}),K=()=>s(nP,{children:Array.from({length:7},(L,W)=>{let V=P.subtract(3,"week").add(W,"week"),B=J0(V,X),R=B[0],S=B[6],k=V.isSame(P,"week"),h=R.month()!==S.month();return s(g,{className:U("justify-start font-normal",k&&"bg-primary/10"),onClick:()=>p(R),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:`${R.format("MMM D")} - ${S.format("D")}`}),h&&s("span",{className:"ml-0.5 text-xs opacity-70",children:`${R.format("MMM")}-${S.format("MMM")}`})]})},R.format("YYYY-MM-DD"))})}),_=()=>{let L=P.startOf("month"),W=P.daysInMonth();return s(nP,{children:Array.from({length:W},(V,B)=>{let R=L.date(B+1),S=R.isSame(P,"day"),k=R.isSame(F(),"day");return s(g,{className:U("justify-start font-normal",S&&"bg-primary/10"),onClick:()=>p(R),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:R.format("dddd, MMM D")}),k&&s("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:J("today")})]})},R.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:O},{id:"year",hidden:!1,title:P.format("YYYY"),render:A},{id:"week",hidden:f!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:K},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:_}].filter((L)=>!L.hidden).map((L)=>tP(h0,{onOpenChange:(W)=>Q(W?L.id:null),open:z===L.id,children:[s(g0,{asChild:!0,children:tP(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[s(y,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${L.id}-${P.format("YYYY-MM-DD")}`,children:L.title}),s(a1,{className:"h-4 w-4"})]})}),s(C0,{className:"w-40 p-0",children:s("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},b5=e1;import{ChevronLeft as P4,ChevronRight as f4}from"lucide-react";import{jsx as pP,jsxs as Z4}from"react/jsx-runtime";var $4=["day","week","month","year"],z4=({currentView:P,onChange:f,variant:$="default",size:J="sm",className:X,onToday:z,onNext:Q,onPrevious:Y})=>{let{t:Z,resources:q}=I((K)=>({t:K.t,resources:K.resources})),G=$==="grid",p=q&&q.length>0,O=(K)=>{return U(G?"w-full":"",P===K&&"bg-primary/80")},A=(K)=>{return P===K?"default":"outline"};return Z4("div",{className:U(G?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[pP(g,{onClick:Y,size:J,variant:"outline",children:pP(P4,{className:"h-4 w-4"})}),pP(g,{onClick:Q,size:J,variant:"outline",children:pP(f4,{className:"h-4 w-4"})}),$4.map((K)=>{if(p&&K==="year")return null;return pP(g,{className:O(K),onClick:()=>f(K),size:J,variant:A(K),children:Z(K)},K)}),pP(g,{onClick:z,size:J,variant:"outline",children:Z("today")})]})},Ff=z4;import{jsx as n,jsxs as I0}from"react/jsx-runtime";var _4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:J,prevPeriod:X,today:z,openEventForm:Q,headerComponent:Y,headerClassName:Z,rawEvents:q,t:G}=I((L)=>({view:L.view,setView:L.setView,nextPeriod:L.nextPeriod,prevPeriod:L.prevPeriod,today:L.today,openEventForm:L.openEventForm,headerComponent:L.headerComponent,headerClassName:L.headerClassName,rawEvents:L.rawEvents,t:L.t})),[p,O]=Y4(!1),A=()=>O(!1),K=()=>{let L=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;m5(q,L,"ilamy Calendar"),A()},_=()=>I0(g,{className:"flex items-center gap-1",onClick:()=>Q(),size:"sm",variant:"default",children:[n(Q4,{className:"h-4 w-4"}),n("span",{className:"hidden @4xl:inline",children:G("new")})]}),N=({fullWidth:L=!1})=>I0(g,{className:U("flex items-center gap-1",L&&"w-full gap-2"),onClick:K,size:"sm",variant:"outline",children:[n(X4,{className:"h-4 w-4"}),L?`${G("export")} Calendar (.ics)`:n("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(Y)return Y;return n("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:I0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,Z),children:[I0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[n(J4,{className:"h-5 w-5"}),n(b5,{})]}),I0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[I0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[n(Ff,{className:"justify-end",currentView:f,onChange:$,onNext:J,onPrevious:X,onToday:z,variant:"default"}),n(_,{}),n(N,{})]}),I0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[n(_,{}),I0(h0,{onOpenChange:O,open:p,children:[n(g0,{asChild:!0,children:n(g,{size:"sm",variant:"outline",children:n(q4,{className:"h-4 w-4"})})}),n(C0,{align:"end",className:"w-[240px] p-2",children:I0("div",{className:"space-y-2",children:[n(Ff,{currentView:f,onChange:(L)=>{$(L),A()},onNext:()=>{J(),A()},onPrevious:()=>{X(),A()},onToday:()=>{z(),A()},variant:"grid"}),n("div",{className:"pt-2 border-t",children:n(N,{fullWidth:!0})})]})})]})]})]})]})})},BP=_4;import{memo as k4}from"react";import{memo as m4,useCallback as b4}from"react";import V4,{memo as B4,useMemo as k5}from"react";import{jsx as K4}from"react/jsx-runtime";var I5=({date:P,locale:f="en",className:$})=>{let J=P.isSame(F(),"day");return K4("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",J&&"bg-primary text-primary-foreground font-medium",$),"data-testid":J?"day-number-today":`day-number-${P.format("D")}`,children:Intl.DateTimeFormat(f,{day:"numeric"}).format(P.toDate())})};import{useImperativeHandle as N4,useState as w5}from"react";import{useDraggable as p4}from"@dnd-kit/core";import{memo as U4}from"react";import{jsx as MP,jsxs as A4}from"react/jsx-runtime";var L4=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function G4({elementId:P,event:f,className:$,style:J,disableDrag:X=!1}){let{onEventClick:z,renderEvent:Q,disableEventClick:Y,disableDragAndDrop:Z}=I((K)=>({onEventClick:K.onEventClick,renderEvent:K.renderEvent,disableEventClick:K.disableEventClick,disableDragAndDrop:K.disableDragAndDrop})),{attributes:q,listeners:G,setNodeRef:p,isDragging:O}=p4({id:P,data:{event:f,type:"calendar-event"},disabled:X||Z}),A=()=>{let K=f,_=K.isTruncatedStart,N=K.isTruncatedEnd;return A4("div",{className:U(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",L4(_,N)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[_&&MP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),MP("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",_&&"pl-1",N&&"pr-1"),children:f.title}),N&&MP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return MP(y,{className:U("truncate h-full w-full",X||Z?Y?"cursor-default":"cursor-pointer":"cursor-grab",O&&!(X||Z)&&"cursor-grabbing shadow-lg",$),layout:!0,layoutId:P,onClick:(K)=>{K.stopPropagation(),z(f)},ref:p,style:J,transitionKey:P,...q,...G,children:Q?Q(f):MP(A,{})})}var UP=U4(G4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as SP,jsxs as W4}from"react/jsx-runtime";var H5=({ref:P})=>{let[f,$]=w5(!1),[J,X]=w5(null),{currentDate:z,firstDayOfWeek:Q}=I((q)=>({currentDate:q.currentDate,firstDayOfWeek:q.firstDayOfWeek}));N4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(q)=>X(q)}));let Z=z.startOf("month").clone();while(Z.day()!==Q)Z=Z.subtract(1,"day");return SP($P,{onOpenChange:$,open:f,children:W4(zP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[SP(ZP,{children:SP(JP,{children:J?.day.format("MMMM D, YYYY")})}),SP("div",{className:"mt-4 space-y-3",children:J?.events.map((q)=>{return SP(UP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${q.id}`,event:q},q.id)})})]})})};import{useDroppable as O4}from"@dnd-kit/core";import{jsx as F4}from"react/jsx-runtime";function T5({id:P,type:f,date:$,hour:J,minute:X,resourceId:z,allDay:Q,children:Y,className:Z,style:q,"data-testid":G,disabled:p=!1}){let{onCellClick:O,disableDragAndDrop:A,disableCellClick:K,classesOverride:_,view:N}=I((B)=>({onCellClick:B.onCellClick,disableDragAndDrop:B.disableDragAndDrop,disableCellClick:B.disableCellClick,classesOverride:B.classesOverride,view:B.view})),{isOver:L,setNodeRef:W}=O4({id:P,data:{type:f,date:$,hour:J,minute:X,resourceId:z,allDay:Q},disabled:A||p}),V=(B)=>{if(B.stopPropagation(),K||p)return;let R=$.hour(J??0).minute(X??0),S=R.clone();if(J!==void 0&&X!==void 0)S=S.hour(J).minute(X+15);else if(J!==void 0)S=S.hour(J+1).minute(0);else S=S.hour(23).minute(59);O({start:R,end:S,resourceId:z,allDay:Q})};return F4("div",{className:U("droppable-cell",Z,L&&!A&&!p&&"bg-accent",K||p?"cursor-default":"cursor-pointer",p&&(_?.disabledCell||jf)),"data-disabled":p.toString(),"data-testid":G,"data-view":N,onClick:V,ref:W,style:q,children:Y})}import{jsx as sP,jsxs as eP,Fragment as h5}from"react/jsx-runtime";var M4=({day:P,hour:f,minute:$,className:J="",resourceId:X,gridType:z="day",shouldRenderEvents:Q=!0,allDay:Y=!1,"data-testid":Z,showDayNumber:q=!1,children:G})=>{let p=V4.useRef(null),{dayMaxEvents:O=0,getEventsForDateRange:A,currentDate:K,t:_,getEventsForResource:N,businessHours:L,currentLocale:W,eventSpacing:V,getResourceById:B}=I((w)=>({dayMaxEvents:w.dayMaxEvents,getEventsForDateRange:w.getEventsForDateRange,currentDate:w.currentDate,firstDayOfWeek:w.firstDayOfWeek,t:w.t,getEventsForResource:w.getEventsForResource,businessHours:w.businessHours,currentLocale:w.currentLocale,eventSpacing:w.eventSpacing,getResourceById:w.getResourceById})),R=k5(()=>{if(!Q)return[];let w=A(P.startOf(z),P.endOf(z));if(Y)w=w.filter((b)=>b.allDay);if(X){let b=N(X)??[];return w.filter((p0)=>b.some((Q0)=>String(Q0.id)===String(p0.id)))}return w},[P,X,A,N,z,Q,Y]),S=(w,b)=>{p.current?.setSelectedDayEvents({day:w,events:b}),p.current?.open()},k=P.month()===K.month(),h=R.length-O,C=h>0,D=k5(()=>{if(X&&B){let w=B(X);if(w?.businessHours)return w.businessHours}return L},[X,B,L]),l=J5({date:P,hour:z==="hour"?P.hour():void 0,businessHours:D}),u=P.format("HH"),d=P.format("mm"),c=z==="hour"?`day-cell-${P.format("YYYY-MM-DD")}-${u}-${d}`:`day-cell-${P.format("YYYY-MM-DD")}`;return eP(h5,{children:[sP(T5,{allDay:Y,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",J),"data-testid":Z||c,date:P,disabled:!l||!k,hour:f,id:`day-cell-${P.toISOString()}${X?`-resource-${X}`:""}`,minute:$,resourceId:X,type:"day-cell",children:eP("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${V}px`},children:[q&&sP(I5,{date:P,locale:W}),Q&&eP(h5,{children:[R.slice(0,O).map((w,b)=>sP("div",{className:"w-full shrink-0","data-testid":w?.title,style:{height:`${G0}px`}},`empty-${b}-${w.id}`)),C&&eP("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(w)=>{w.stopPropagation(),S(P,R)},onKeyDown:(w)=>{if(w.key==="Enter"||w.key===" ")w.preventDefault(),w.stopPropagation(),S(P,R)},role:"button",tabIndex:0,children:["+",h," ",_("more")]})]}),G]})}),sP(H5,{ref:p})]})},RP=B4(M4);import{jsx as g5}from"react/jsx-runtime";var E0=({resource:P,className:f,children:$,"data-testid":J})=>{let{renderResource:X}=o();return g5("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",f),"data-testid":J,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):$??g5("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as S4}from"react";import{useMemo as D5}from"react";var C5=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:J=Ef,gridType:X="day",eventSpacing:z=H0})=>{let Q=X==="hour"?P.at(0).startOf("hour"):P.at(0).startOf("day"),Y=X==="hour"?P.at(-1).endOf("hour"):P.at(-1).endOf("day"),Z=P.length,q=f.filter((_)=>_.end.diff(_.start,X)>0),G=f.filter((_)=>_.end.diff(_.start,X)===0),p=[...q].sort((_,N)=>{let L=_.start.diff(N.start);if(L!==0)return L;return N.end.diff(N.start)-_.end.diff(_.start)}),O=[...G].sort((_,N)=>_.start.diff(N.start)),A=[];for(let _=0;_<$;_++){A[_]=[];for(let N=0;N<Z;N++)A[_][N]={taken:!1,event:null}}let K=[];for(let _ of p){let N=F.max(_.start.startOf(X),Q),L=X==="hour"?_.end.subtract(1,"minute"):_.end,W=F.min(L.startOf(X),Y),V=Math.max(0,N.diff(Q,X)),B=Math.min(Z-1,W.diff(Q,X)),R=_.start.startOf(X).isBefore(Q),S=_.end.startOf(X).isAfter(Y),k=!1,h=-1;for(let C=0;C<$;C++){let D=!0;for(let l=V;l<=B;l++)if(A[C][l].taken){D=!1;break}if(D){h=C;break}}if(h!==-1){for(let D=V;D<=B;D++)A[h][D]={taken:!0,event:_};let C=B-V+1;K.push({left:V/Z*100,width:C/Z*100,top:J+z+h*(G0+z),height:G0,position:h,..._,isTruncatedStart:R,isTruncatedEnd:S}),k=!0}if(!k)for(let C=V+1;C<=B;C++){let D=-1;for(let l=0;l<$;l++){let u=!0;for(let d=C;d<=B;d++)if(A[l][d].taken){u=!1;break}if(u){D=l;break}}if(D!==-1){for(let u=C;u<=B;u++)A[D][u]={taken:!0,event:_};let l=B-C+1;K.push({left:C/Z*100,width:l/Z*100,top:J+z+D*(G0+z),height:G0,position:D,..._,isTruncatedStart:!0,isTruncatedEnd:S}),k=!0;break}}}for(let _ of O){let N=F.max(_.start.startOf(X),Q),L=Math.max(0,Math.min(Z-1,N.diff(Q,X))),W=!1,V=!1,B=-1;for(let R=0;R<$;R++)if(!A[R][L].taken){B=R;break}if(B!==-1)A[B][L]={taken:!0,event:_},K.push({left:L/Z*100,width:1/Z*100,top:J+z+B*(G0+z),height:G0,position:B,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return K};var y5=({days:P,allDay:f,dayNumberHeight:$,resourceId:J,gridType:X})=>{let{getEventsForDateRange:z,dayMaxEvents:Q,eventSpacing:Y,getEventsForResource:Z}=I((A)=>({getEventsForDateRange:A.getEventsForDateRange,dayMaxEvents:A.dayMaxEvents,eventSpacing:A.eventSpacing,getEventsForResource:A.getEventsForResource})),q=P.at(0).startOf("day"),G=P.at(-1).endOf("day"),p=D5(()=>{let A=z(q,G);if(J){let K=Z(J);A=A.filter((_)=>K.some((N)=>String(N.id)===String(_.id)))}if(f)A=A.filter((K)=>!!K.allDay===f);return A},[z,Z,q,G,J,f]);return D5(()=>{return C5({days:P,events:p,dayMaxEvents:Q,dayNumberHeight:$,eventSpacing:Y,gridType:X})},[P,Q,$,Y,p,X])};import{jsx as Vf}from"react/jsx-runtime";var R4=({days:P,gridType:f="day",resourceId:$,dayNumberHeight:J,"data-testid":X,allDay:z})=>{let Q=P.at(0).startOf("day"),Y=y5({days:P,gridType:f,resourceId:$,dayNumberHeight:J,allDay:z});return Vf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:Y.map((Z)=>{let q=`${Z.id}-${Z.position}-${Q.toISOString()}-${$??"no-resource"}`;return Vf("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":Z.left,"data-testid":`horizontal-event-${Z.id}`,"data-top":Z.top,"data-width":Z.width,style:{left:`calc(${Z.left}% + var(--spacing) * 0.25)`,width:`calc(${Z.width}% - var(--spacing) * 1)`,top:`${Z.top}px`,height:`${G0}px`},children:Vf(UP,{className:"h-full w-full shadow",elementId:q,event:Z})},`${q}-wrapper`)})})},E5=S4(R4);import{jsx as j0,jsxs as Bf}from"react/jsx-runtime";var I4=({id:P,resource:f,gridType:$="day",variant:J="resource",dayNumberHeight:X,className:z,columns:Q=[],allDay:Y,showDayNumber:Z=!1,isLastRow:q=!1})=>{let{renderResource:G}=I((K)=>({renderResource:K.renderResource})),p=J==="resource",O=Q.some((K)=>K.days),A=b4((K)=>{return j0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:j0(E5,{allDay:Y,"data-testid":`horizontal-events-${P}`,dayNumberHeight:X,days:K,gridType:$,resourceId:f?.id})})},[Y,X,$,P,f?.id]);return Bf("div",{className:U("flex flex-1 relative",z),"data-testid":`horizontal-row-${P}`,children:[p&&j0(E0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${f?.id}`,resource:f,children:G?G(f):j0("div",{className:"wrap-break-word text-sm",children:f?.title})}),Bf("div",{className:"relative flex-1 flex",children:[j0("div",{className:"flex w-full",children:Q.map((K,_)=>{if(K.day)return j0(RP,{allDay:Y,className:U("flex-1 w-20",q&&"border-b-0",K.className),day:K.day,gridType:$,hour:$==="hour"?K.day.hour():void 0,resourceId:f?.id,showDayNumber:Z},K.day.toISOString());let N=_===Q.length-1;return Bf("div",{className:"flex relative w-full",children:[j0("div",{className:"flex w-full",children:K.days?.map((L)=>j0(RP,{allDay:Y,className:U("flex-1 w-20",q&&"border-b-0",!N&&"border-r!",K.className),day:L,gridType:$,hour:$==="hour"?L.hour():void 0,resourceId:f?.id,showDayNumber:Z},L.toISOString()))}),A(K.days)]},K.id)})}),!O&&A(Q.map((K)=>K.day).filter(Boolean))]})]})},Pf=m4(I4);import{memo as w4}from"react";import{jsx as T4}from"react/jsx-runtime";var H4=({className:P})=>{let{t:f}=I(($)=>({t:$.t}));return T4("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:f("allDay")})},LP=w4(H4);import{jsx as j5,jsxs as g4}from"react/jsx-runtime";var h4=({days:P,classes:f,resource:$,showSpacer:J=!0})=>{let X=P.map((z,Q)=>({id:`allday-col-${z.toISOString()}-${Q}`,day:z,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return g4("div",{className:U("flex w-full",f?.row),"data-testid":"all-day-row",children:[J&&j5(LP,{className:f?.spacer}),j5(Pf,{allDay:!0,className:"flex-1 min-h-fit",columns:X,dayNumberHeight:0,gridType:"day",id:`all-day-row-${$?.id??"main"}`,isLastRow:!0,resource:$,variant:"regular"})]})},x0=k4(h4);import{memo as i4}from"react";import{memo as j4}from"react";import C4 from"dayjs";import{memo as D4}from"react";import{jsx as x5,Fragment as E4}from"react/jsx-runtime";var y4=({rangeStart:P,rangeEnd:f,now:$,resource:J})=>{let{renderCurrentTimeIndicator:X,view:z}=I((p)=>({renderCurrentTimeIndicator:p.renderCurrentTimeIndicator,view:p.view})),Q=$??C4();if(!(Q.isSameOrAfter(P)&&Q.isBefore(f)))return null;let Z=f.diff(P,"minute"),G=Q.diff(P,"minute")/Z*100;if(X)return x5(E4,{children:X({currentTime:Q,rangeStart:P,rangeEnd:f,progress:G,resource:J,view:z})});return x5("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${G}%`}})},v5=D4(y4);import{useMemo as o5}from"react";var i5=({days:P,gridType:f="hour",events:$})=>{let J=$.filter((p)=>!p.allDay).toSorted((p,O)=>p.start.diff(O.start));if(J.length===0)return[];let X=P.at(0)||F(),z=P.length,Q=f==="day",Y=[],Z=[],q=null;for(let p of J){if(q&&p.start.isSameOrAfter(q)){if(Z.length>0)Y.push(Z);Z=[]}Z.push(p),q=q?F.max(q,p.end):p.end}if(Z.length>0)Y.push(Z);let G=[];for(let p of Y){if(p.length===1){let N=p[0],L=N.start.diff(X,f,!0),W=N.end.diff(X,f,!0);if(Q){if(L=Math.floor(L),W=Math.ceil(W),W<=L)W=L+1}if(L<0)L=0;if(W>z)W=z;let V=Math.max(0,W-L);if(V===0)continue;let B=L/z*100,R=V/z*100;G.push({...N,left:0,width:100,top:B,height:R});continue}let O=[...p].sort((N,L)=>{let W=N.end.diff(N.start,"minute"),V=L.end.diff(L.start,"minute");if(W!==V)return V-W;return N.start.diff(L.start)}),A=O.length,K;if(A===2)K=25;else if(A===3)K=50;else if(A===4)K=60;else K=70;let _=A>1?K/(A-1):0;for(let N=0;N<O.length;N++){let L=O[N],W=L.start.diff(X,f,!0),V=L.end.diff(X,f,!0);if(Q){if(W=Math.floor(W),V=Math.ceil(V),V<=W)V=W+1}if(W<0)W=0;if(V>z)V=z;let B=Math.max(0,V-W);if(B===0)continue;let R=W/z*100,S=B/z*100,k,h,C;if(N===0)k=0,h=100,C=1;else k=_*N,h=100-k,C=N+1;G.push({...L,left:k,width:h,top:R,height:S,zIndex:C})}}return G};var l5=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:J,getEventsForResource:X}=I((q)=>({getEventsForDateRange:q.getEventsForDateRange,getEventsForResource:q.getEventsForResource})),z=P.at(0).startOf("day"),Q=P.at(-1).endOf("day"),Y=o5(()=>{let q=J(z,Q);if($){let G=X($);q=q.filter((p)=>G.some((O)=>String(O.id)===String(p.id)))}return q.filter((G)=>!G.allDay)},[z,Q,J,$,X]);return o5(()=>{return i5({days:P,events:Y,gridType:f})},[P,f,Y])};import{jsx as Mf,jsxs as v4}from"react/jsx-runtime";var x4=({days:P,gridType:f="hour",resourceId:$,resource:J,"data-testid":X})=>{let z=l5({days:P,gridType:f,resourceId:$}),Q=P.at(0),Y=P.at(-1)?.add(1,f);return v4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Q&&Y&&Mf(v5,{rangeEnd:Y,rangeStart:Q,resource:J}),z.map((Z,q)=>{let G=`event-${Z.id}-${q}-${P.at(0).toISOString()}-${$??"no-resource"}`,p=Z.end.diff(Z.start,"minute")<=15;return Mf("div",{className:"absolute",style:{left:`${Z.left}%`,width:`calc(${Z.width}% - var(--spacing) * 2)`,top:`${Z.top}%`,height:`${Z.height}%`},children:Mf(UP,{className:U("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":p}),elementId:G,event:Z})},`${G}-wrapper`)})]})},c5=j4(x4);import{jsx as mP,jsxs as l4}from"react/jsx-runtime";var o4=({id:P,days:f,resourceId:$,resource:J,"data-testid":X,gridType:z,className:Q,renderCell:Y,noEvents:Z,cellSlots:q=[60],isLastColumn:G})=>{return mP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Q),"data-testid":X||`vertical-col-${P}`,children:l4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((p)=>{let O=p.format("HH"),A=p.format("YYYY-MM-DD");if(Y){let K=P==="time-col"?`vertical-time-${O}`:`vertical-cell-${A}-${O}-00${$?`-${$}`:""}`;return mP("div",{className:"h-[60px] border-b border-r","data-testid":K,children:Y(p)},`${A}-${O}`)}return q.map((K)=>{let _=K===60?void 0:K,N=_===void 0?"00":String(_).padStart(2,"0"),L=`vertical-cell-${A}-${O}-${N}${$?`-${$}`:""}`;return mP(RP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",K===60?"":"border-dashed h-[15px] min-h-[15px]",G?"border-r-0":"border-r"),"data-testid":L,day:_?p.minute(_):p,gridType:z,hour:p.hour(),minute:_,resourceId:$,shouldRenderEvents:!1},`${A}-${O}-${N}-${$||"no-resource"}`)})}),!Z&&mP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:mP(c5,{"data-testid":`vertical-events-${P}`,days:f,gridType:z,resource:J,resourceId:$})})]})})},u5=i4(o4);import{memo as c4}from"react";import{jsx as d5,jsxs as d4}from"react/jsx-runtime";var u4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:J,viewHeaderClassName:X}=I((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return d4("div",{className:U(J&&"sticky top-0 z-21 bg-background",X),children:[d5("div",{className:U("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&d5("div",{className:U("flex w-full border-b min-h-12 h-full",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},r5=c4(u4);import{jsx as bP,jsxs as n5}from"react/jsx-runtime";var a5="h-[calc(100%-3rem)]",M0=({columns:P,children:f,gridType:$="day",variant:J="resource",classes:X,allDayRow:z,cellSlots:Q})=>{let Y=J==="resource",Z=!Y,q=f&&bP(r5,{allDayRow:z,classes:{header:X?.header,allDay:X?.allDay},children:f});return n5("div",{className:"h-full","data-testid":"vertical-grid-container",children:[Z&&q,n5(B0,{className:U("h-full",Z&&"overflow-auto",Z&&a5),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Y&&q,bP("div",{className:U("flex flex-1 w-fit",Y&&a5,X?.body),"data-testid":"vertical-grid-body",children:P.map((G,p)=>bP(u5,{...G,cellSlots:Q,gridType:$,isLastColumn:p===P.length-1},`${G.id}-${p}`))}),bP(b0,{className:"z-30"})," ",bP(b0,{className:"z-30",orientation:"horizontal"})," "]})]})};function L0({referenceDate:P,businessHours:f,hideNonBusinessHours:$,allDates:J=[P],resourceBusinessHours:X=[]}){let z=yf({referenceDate:P});if(!$||!f&&X.length===0)return z;let{minStart:Q,maxEnd:Y,hasBusinessHours:Z}=oP({allDates:J,businessHours:f,resourceBusinessHours:X,hideNonBusinessHours:$});if(!Z)return z;return z.filter((q)=>{let G=q.hour();return G>=Q&&G<Y})}import{jsx as GP,jsxs as a4}from"react/jsx-runtime";var r4=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:J,businessHours:X,hideNonBusinessHours:z}=U0(),Q=P.isSame(F(),"day"),Y=L0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P]}),Z={id:"time-col",day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>GP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(G.toDate())})},q={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Y,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return GP(M0,{allDayRow:GP(x0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[Z,q],gridType:"hour",variant:"regular",children:GP("div",{className:"flex h-full flex-1 justify-center items-center","data-testid":"day-view-header",children:a4(y,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",Q&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[GP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),Q&&GP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:J("today")})]})})})},t5=r4;import{useMemo as e4}from"react";import{memo as n4}from"react";import{jsx as s4}from"react/jsx-runtime";var t4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:J}=I((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return s4("div",{className:U("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,J),"data-testid":"horizontal-grid-header",children:P})},s5=n4(t4);import{jsx as AP,jsxs as P2}from"react/jsx-runtime";var e5="h-[calc(100%-3rem)]",ff=({rows:P,children:f,classes:$,allDay:J,gridType:X,variant:z="resource",dayNumberHeight:Q})=>{let{currentDate:Y}=I((p)=>({currentDate:p.currentDate})),Z=z==="resource",q=!Z,G=f&&AP(s5,{className:$?.header,children:f});return P2("div",{className:"h-full","data-testid":"horizontal-grid-container",children:[q&&G,P2(B0,{className:U("h-full",q&&"overflow-auto",q&&e5),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Z&&G,AP("div",{className:U("flex flex-1 w-fit",Z&&e5,$?.body),"data-testid":"horizontal-grid-body",children:AP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((p,O)=>AP(Pf,{allDay:p.allDay??J,dayNumberHeight:Q,gridType:X,isLastRow:O===P.length-1,variant:z,...p},p.id))},Y.format("YYYY-MM"))}),AP(b0,{className:"z-30"}),AP(b0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as Sf}from"react/jsx-runtime";var f2=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:J,currentDate:X}=U0(),z=J0(X,f);return Sf("div",{className:U("flex w-full",$&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:z.map((Q,Y)=>Sf(y,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${Q.format("ddd").toLowerCase()}`,delay:Y*0.05,transitionKey:Q.toISOString(),children:Sf("span",{className:"text-sm capitalize",children:Q.format("ddd")})},Q.toISOString()))})};import{jsx as $2}from"react/jsx-runtime";var z2=()=>{let{currentDate:P,firstDayOfWeek:f}=U0(),J=e4(()=>yP(P,f),[P,f]).map((X,z)=>({id:`week-${z}`,columns:X.map((Q)=>({id:`col-${Q.toISOString()}`,day:Q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return $2(ff,{classes:{body:"w-full",header:"w-full"},rows:J,variant:"regular",children:$2(f2,{className:"h-12"})})};import{useMemo as Rf}from"react";import{jsx as v0,jsxs as mf}from"react/jsx-runtime";var Z2="w-[calc((100%-4rem)/7)] min-w-[calc((100%-4rem)/7)] flex-1",J2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",P3=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:J,openEventForm:X,currentLocale:z,timeFormat:Q,businessHours:Y,hideNonBusinessHours:Z}=U0(),q=Rf(()=>J0(f,$),[f,$]),G=Rf(()=>L0({referenceDate:f,businessHours:Y,hideNonBusinessHours:Z,allDates:q}),[f,Y,Z,q]),p={id:"time-col",days:G,day:void 0,className:`shrink-0 ${J2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(A)=>v0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(z,{hour:"numeric",hour12:Q==="12-hour"}).format(A.toDate())})},O=Rf(()=>{return q.map((A)=>({id:`day-col-${A.format("YYYY-MM-DD")}`,day:A,label:A.format("D"),className:Z2,days:G.map((K)=>A.hour(K.hour()).minute(0).second(0).millisecond(0)),value:A}))},[q,G]);return v0(M0,{allDayRow:v0(x0,{classes:{cell:Z2,spacer:J2},days:q}),classes:{header:"w-full h-18",body:"h-[calc(100%-4.5rem)] w-full"},columns:[p,...O],gridType:"hour",variant:"regular",children:mf("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[v0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:mf("div",{className:"flex flex-col items-center justify-center",children:[v0("span",{className:"text-muted-foreground text-xs",children:P("week")}),v0("span",{className:"font-medium",children:f.week()})]})}),q.map((A,K)=>{let _=A.isSame(F(),"day"),N=`week-day-header-${A.toISOString()}`;return mf(y,{className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",_&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${A.format("dddd").toLowerCase()}`,delay:K*0.05,onClick:()=>{J(A),X({start:A})},transitionKey:N,children:[v0("div",{className:"text-xs sm:text-sm",children:A.format("ddd")}),v0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",_&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(z,{day:"numeric"}).format(A.toDate())})]},N)})]})})},X2=P3;import{jsx as i0,jsxs as IP}from"react/jsx-runtime";var f3=["S","M","T","W","T","F","S"],$3=["bg-primary","bg-blue-500","bg-green-500"],z3=42,Z3=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},J3=()=>{let{currentDate:P,selectDate:f,events:$,setView:J,getEventsForDateRange:X,t:z}=U0(),Q=P.year(),Y=()=>{return Array.from({length:12},(K,_)=>{let N=F().year(Q).month(_).startOf("month"),L=$.filter((W)=>W.start.year()===Q&&W.start.month()===_);return{date:N,name:N.format("MMMM"),eventCount:L.length,monthKey:N.format("MM")}})},Z=(K)=>{let _=K.startOf("month").startOf("week");return Array.from({length:z3},(N,L)=>{let W=_.add(L,"day"),V=W.startOf("day"),B=W.endOf("day"),R=X(V,B);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===K.month(),isToday:W.isSame(F(),"day"),isSelected:W.isSame(P,"day"),eventCount:R.length}})},q=(K,_,N)=>{N?.stopPropagation(),f(K),J(_)},G=(K)=>{let _=K===1?z("event"):z("events");return`${K} ${_}`},p=(K)=>{let N=K.isInCurrentMonth?"":"text-muted-foreground opacity-50",L=K.isToday?"bg-primary text-primary-foreground rounded-full":"",W=K.isSelected&&!K.isToday?"bg-muted rounded-full font-bold":"",V=K.eventCount>0&&!K.isToday&&!K.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",N,L,W,V)},O=(K,_)=>{return U("h-[3px] w-[3px] rounded-full",_?"bg-primary-foreground":K)},A=Y();return IP(B0,{className:"h-full","data-testid":"year-view",children:[i0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:A.map((K,_)=>{let N=Z(K.date),L=_*0.05;return IP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${K.monthKey}`,children:[IP(y,{className:"mb-2 flex items-center justify-between",delay:L,transitionKey:`month-${_}`,children:[i0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${K.monthKey}`,onClick:()=>q(K.date,"month"),type:"button",children:K.name}),K.eventCount>0&&i0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${K.monthKey}`,children:G(K.eventCount)})]},`month-${_}`),IP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${K.monthKey}`,children:[f3.map((W,V)=>i0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${V}`)),N.map((W)=>{let V=`year-day-${K.date.format("YYYY-MM")}-${W.dayKey}`,B=W.eventCount>0,R=Math.min(W.eventCount,3),S=$3.slice(0,R);return IP("button",{className:p(W),"data-testid":V,onClick:(k)=>q(W.date,"day",k),title:Z3(W.eventCount),type:"button",children:[i0("span",{className:"text-center leading-none",children:W.date.date()}),B&&i0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:S.map((k)=>i0("span",{className:O(k,W.isToday)},k))})]},W.dayKey)})]})]},K.monthKey)})}),i0(b0,{className:"z-30"})]})},q2=J3;import{useCallback as bf,useMemo as X3}from"react";import{jsx as q3}from"react/jsx-runtime";var Q2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:J="month",initialDate:X,renderEvent:z,onEventClick:Q,onCellClick:Y,onViewChange:Z,onEventAdd:q,onEventUpdate:G,onEventDelete:p,onDateChange:O,locale:A,timezone:K,disableCellClick:_,disableEventClick:N,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:V=H0,stickyViewHeader:B=!0,viewHeaderClassName:R="",headerComponent:S,headerClassName:k,businessHours:h,renderEventForm:C,translations:D,translator:l,timeFormat:u="12-hour",classesOverride:d,renderCurrentTimeIndicator:c,hideNonBusinessHours:w=!1})=>{let b=EP({events:f,firstDayOfWeek:$,initialView:J,initialDate:X,businessHours:h,onEventAdd:q,onEventUpdate:G,onEventDelete:p,onDateChange:O,onViewChange:Z,locale:A,timezone:K,translations:D,translator:l}),p0=bf((t)=>{b.setSelectedEvent(t),b.setIsEventFormOpen(!0)},[b]),Q0=bf((t)=>{if(N)return;if(Q)Q(t);else p0(t)},[N,Q,p0]),z0=bf((t)=>{if(_)return;if(Y)Y(t);else b.openEventForm(t)},[Y,_,b]),N0=X3(()=>({currentDate:b.currentDate,view:b.view,events:b.events,rawEvents:b.rawEvents,currentLocale:b.currentLocale,isEventFormOpen:b.isEventFormOpen,selectedEvent:b.selectedEvent,selectedDate:b.selectedDate,firstDayOfWeek:b.firstDayOfWeek,setCurrentDate:b.setCurrentDate,selectDate:b.selectDate,setView:b.setView,nextPeriod:b.nextPeriod,prevPeriod:b.prevPeriod,today:b.today,addEvent:b.addEvent,updateEvent:b.updateEvent,updateRecurringEvent:b.updateRecurringEvent,deleteEvent:b.deleteEvent,deleteRecurringEvent:b.deleteRecurringEvent,openEventForm:b.openEventForm,closeEventForm:b.closeEventForm,getEventsForDateRange:b.getEventsForDateRange,findParentRecurringEvent:b.findParentRecurringEvent,renderEvent:z,onEventClick:Q0,onCellClick:z0,locale:A,timezone:K,disableCellClick:_,disableEventClick:N,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:V,stickyViewHeader:B,viewHeaderClassName:R,headerComponent:S,headerClassName:k,businessHours:h,renderEventForm:C,t:b.t,timeFormat:u,classesOverride:d,renderCurrentTimeIndicator:c,hideNonBusinessHours:w}),[b,z,Q0,z0,A,K,_,N,L,W,V,B,R,S,k,h,C,u,d,c,w]);return q3(XP.Provider,{value:N0,children:P})};import{jsx as A0,jsxs as _3}from"react/jsx-runtime";var Q3=()=>{let{view:P,dayMaxEvents:f}=U0();return _3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[A0(BP,{className:"p-1"}),A0(jP,{children:A0(y,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:A0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:A0(z2,{dayMaxEvents:f},"month"),week:A0(X2,{},"week"),day:A0(t5,{},"day"),year:A0(q2,{},"year")}[P]})})}),A0(dP,{})]})},Y3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:J,dayMaxEvents:X=QP,eventSpacing:z=H0,stickyViewHeader:Q=!0,viewHeaderClassName:Y="",timeFormat:Z="12-hour",hideNonBusinessHours:q=!1,...G})=>{return A0(Q2,{dayMaxEvents:X,eventSpacing:z,events:kP(P),firstDayOfWeek:YP[f],hideNonBusinessHours:q,initialDate:PP(J),initialView:$,stickyViewHeader:Q,timeFormat:Z,viewHeaderClassName:Y,...G,children:A0(Q3,{})})};import{jsx as K3}from"react/jsx-runtime";var NP=({days:P,gridType:f="day",children:$,classes:J})=>{let{getVisibleResources:X}=o(),z=X(),Q=P.map((Z)=>{let q=Array.isArray(Z);return{id:`col-${q?Z[0]?.format("YYYY-MM-DD"):Z.toISOString()}`,day:q?void 0:Z,days:q?Z:void 0,className:J?.cell,gridType:f}}),Y=z.map((Z)=>({id:Z.id,title:Z.title,resource:Z,columns:Q}));return K3(ff,{classes:J,dayNumberHeight:0,gridType:f,rows:Y,children:$})};import{jsx as wP,jsxs as p3}from"react/jsx-runtime";var Y2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:J,businessHours:X,hideNonBusinessHours:z,getVisibleResources:Q}=o(),Y=Q(),Z=L0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:Y.map((q)=>q.businessHours).filter(Boolean)});return p3(NP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Z,gridType:"hour",children:[wP("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:wP("div",{className:"text-sm",children:f("resources")})}),wP("div",{className:"flex-1 flex flex-col",children:wP("div",{className:"flex h-12",children:Z.map((q,G)=>{let p=q.isSame(F(),"hour"),O=`resource-day-header-${q.toISOString()}`;return wP(y,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",p&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${q.format("HH")}`,delay:G*0.05,transitionKey:`${O}-motion`,children:Intl.DateTimeFormat($,{hour:"numeric",hour12:J==="12-hour"}).format(q.toDate())},`${O}-animated`)})})})]})};import{jsx as WP,jsxs as _2}from"react/jsx-runtime";var K2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:J,businessHours:X,hideNonBusinessHours:z}=o(),Q=f(),Y=L0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:Q.map((G)=>G.businessHours).filter(Boolean)}),Z={id:"time-col",day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>WP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:J==="12-hour"}).format(G.toDate())})},q=Q.map((G)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${G.id}`,resourceId:G.id,resource:G,days:Y,day:P,gridType:"hour"}));return WP(M0,{allDayRow:_2("div",{className:"flex w-full",children:[WP(LP,{}),Q.map((G)=>WP(x0,{classes:{cell:"min-w-50"},days:[P],resource:G,showSpacer:!1},`resource-allday-row-${G.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[Z,...q],"data-testid":"resource-day",gridType:"hour",children:_2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[WP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),Q.map((G)=>WP(E0,{className:"min-w-50 flex-1",resource:G},`resource-cell-${G.id}`))]})})};import{jsx as p2}from"react/jsx-runtime";var U2=()=>{let{orientation:P}=o();if(P==="vertical")return p2(K2,{});return p2(Y2,{})};import{useMemo as U3}from"react";import{jsx as $f,jsxs as L2}from"react/jsx-runtime";var G2=()=>{let{currentDate:P,t:f}=o(),$=U3(()=>{return Df(P)},[P]);return L2(NP,{days:$,children:[$f("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:$f("div",{className:"text-sm",children:f("resources")})}),$.map((J,X)=>{let z=`resource-month-header-${J.toISOString()}`;return L2(y,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:`${z}-motion`,children:[$f("div",{className:"text-xs font-medium",children:J.format("D")}),$f("div",{className:"text-xs text-muted-foreground",children:J.format("ddd")})]},`${z}-animated`)})]})};import{jsx as HP,jsxs as A2}from"react/jsx-runtime";var N2=()=>{let{currentDate:P,getVisibleResources:f}=o(),$=f(),J=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Y,Z)=>J.add(Z,"day")),z={id:"date-col",days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(Y)=>A2("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[HP("span",{children:Y.format("D")}),HP("span",{children:Y.format("ddd")})]})},Q=$.map((Y)=>({id:`month-col-resource-${Y.id}`,day:void 0,resourceId:Y.id,days:X,gridType:"day"}));return HP(M0,{classes:{header:"w-full",body:"w-full"},columns:[z,...Q],"data-testid":"resource-month-vertical-grid",children:A2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[HP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Y)=>HP(E0,{className:"min-w-50 flex-1",resource:Y},`resource-cell-${Y.id}`))]})})};import{jsx as W2}from"react/jsx-runtime";var O2=()=>{let{orientation:P}=o();if(P==="vertical")return W2(N2,{});return W2(G2,{})};import{useMemo as If}from"react";import{jsx as o0,jsxs as wf}from"react/jsx-runtime";var F2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:J,timeFormat:X,businessHours:z,hideNonBusinessHours:Q,getVisibleResources:Y}=o(),Z=Y(),q=If(()=>J0(P,f),[P,f]),G=If(()=>Z.map((O)=>O.businessHours).filter(Boolean),[Z]),p=If(()=>{return q.map((O)=>L0({referenceDate:O,businessHours:z,hideNonBusinessHours:Q,resourceBusinessHours:G}))},[q,z,Q,G]);return wf(NP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:p,gridType:"hour",children:[o0("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:o0("div",{className:"text-sm",children:$("resources")})}),wf("div",{className:"flex-1 flex flex-col",children:[o0("div",{className:"flex h-12",children:q.map((O,A)=>{let K=O.isSame(F(),"day"),_=`resource-week-header-${O.toISOString()}-day`;return o0(y,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",K&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:A*0.05,transitionKey:`${_}-motion`,children:wf("div",{className:"sticky left-1/2",children:[o0("div",{className:"text-sm",children:O.format("ddd")}),o0("div",{className:"text-xs text-muted-foreground",children:O.format("M/D")})]})},`${_}-animated`)})}),o0("div",{className:"flex h-12 border-b",children:p.flat().map((O,A)=>{let K=O.isSame(F(),"hour"),_=`resource-week-header-${O.toISOString()}-hour`;return o0(y,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${O.format("HH")}`,delay:A*0.005,transitionKey:`${_}-motion`,children:Intl.DateTimeFormat(J,{hour:"numeric",hour12:X==="12-hour"}).format(O.toDate())},`${_}-animated`)})})]})]})};import{useMemo as zf}from"react";import{jsx as K0,jsxs as TP}from"react/jsx-runtime";var V2=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:J,timeFormat:X,t:z,businessHours:Q,hideNonBusinessHours:Y}=o(),Z=f(),q=zf(()=>J0(P,$),[P,$]),G=zf(()=>L0({referenceDate:P,businessHours:Q,hideNonBusinessHours:Y,allDates:q,resourceBusinessHours:Z.map((A)=>A.businessHours).filter(Boolean)}),[P,Q,Y,q,Z]),p=zf(()=>({id:"time-col",days:G,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(A)=>K0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(J,{hour:"numeric",hour12:X==="12-hour"}).format(A.toDate())})}),[G,J,X]),O=zf(()=>Z.flatMap((A)=>q.map((K)=>({id:`day-col-${K.format("YYYY-MM-DD")}-resource-${A.id}`,resourceId:A.id,resource:A,day:K,days:G.map((_)=>K.hour(_.hour()).minute(0).second(0).millisecond(0)),gridType:"hour"}))),[Z,q,G]);return K0(M0,{allDayRow:TP("div",{className:"flex",children:[K0(LP,{}),Z.map((A)=>K0(x0,{classes:{cell:"min-w-50"},days:q,resource:A,showSpacer:!1},`resource-week-allday-row-${A.id}`))]}),classes:{header:"h-24"},columns:[p,...O],"data-testid":"resource-week",gridType:"hour",children:TP("div",{className:"flex-1 flex flex-col",children:[TP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:z("week")})}),Z.map((A,K)=>{let _=`resource-week-header-${A.id}-day`;return K0(y,{className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(7*var(--spacing)*50)]"),delay:K*0.05,transitionKey:`${_}-motion`,children:K0(E0,{className:"h-full w-full flex-1",resource:A,children:K0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:A.title})})},`${_}-animated`)})]}),TP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),O.map((A,K)=>{let _=A.day,N=`resource-week-header-${_.toISOString()}-hour-${A.resourceId}`;return TP(y,{className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${_.format("HH")}`,delay:K*0.05,transitionKey:`${N}-motion`,children:[K0("div",{className:"text-sm",children:_.format("ddd")}),K0("div",{className:"text-xs text-muted-foreground",children:_.format("M/D")})]},`${N}-animated`)})]})]})})};import{jsx as B2}from"react/jsx-runtime";var M2=()=>{let{orientation:P}=o();if(P==="vertical")return B2(V2,{});return B2(F2,{})};import{jsx as l0,jsxs as L3}from"react/jsx-runtime";var S2=()=>{let{view:P}=o();return L3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[l0(BP,{className:"p-1"}),l0(jP,{children:l0(y,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:l0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:l0(O2,{},"month"),week:l0(M2,{},"week"),day:l0(U2,{},"day")}[P]})})}),l0(dP,{})]})};import{jsx as R2}from"react/jsx-runtime";var G3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:J="month",initialDate:X,disableDragAndDrop:z=!1,dayMaxEvents:Q=QP,timeFormat:Y="12-hour",eventSpacing:Z=H0,...q})=>{return R2(cf,{dayMaxEvents:Q,disableDragAndDrop:z,eventSpacing:Z,events:kP(P),firstDayOfWeek:YP[$],initialDate:PP(X),initialView:J,resources:f,timeFormat:Y,...q,children:R2(S2,{})})};export{s2 as useIlamyResourceCalendarContext,n2 as useIlamyCalendarContext,fP as isRecurringEvent,Jf as generateRecurringEvents,qf as defaultTranslations,YX as RRule,G3 as IlamyResourceCalendar,Y3 as IlamyCalendar};
|
|
1
|
+
import{RRule as $X}from"rrule";import{RRule as g2}from"rrule";import W0 from"dayjs";import B2 from"dayjs/plugin/isBetween.js";import M2 from"dayjs/plugin/isSameOrAfter.js";import R2 from"dayjs/plugin/isSameOrBefore.js";import S2 from"dayjs/plugin/localeData.js";import I2 from"dayjs/plugin/minMax.js";import b2 from"dayjs/plugin/timezone.js";import w2 from"dayjs/plugin/utc.js";import m2 from"dayjs/plugin/weekday.js";import H2 from"dayjs/plugin/weekOfYear.js";W0.extend(m2);W0.extend(H2);W0.extend(M2);W0.extend(R2);W0.extend(B2);W0.extend(I2);W0.extend(b2);W0.extend(w2);W0.extend(S2);var V=W0;import{clsx as T2}from"clsx";import{twMerge as k2}from"tailwind-merge";function U(...P){return k2(T2(P))}function e0(P){if(P===void 0)return;if(V.isDayjs(P))return P;let f=V(P);return f.isValid()?f:void 0}var mf=(P,f)=>{let $={...P};for(let Z of f)delete $[Z];return $};function HP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:V.isDayjs(f.start)?f.start:V(f.start),end:V.isDayjs(f.end)?f.end:V(f.end)}})}var TP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},h2=(P,f)=>{return f.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},PP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},N0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Jf=({event:P,currentEvents:f,startDate:$,endDate:Z})=>{if(!P.rrule)return[];try{let X=TP(P.start),z=P.rrule.until?TP(V(P.rrule.until)):void 0,q={...P.rrule,dtstart:X,until:z},Q=new g2(q),J=N0(P),Y=f.filter((_)=>_.recurrenceId&&N0(_)===J),G=P.end.diff(P.start),K=TP($.subtract(G,"millisecond")),N=TP(Z);return Q.between(K,N,!0).map((_,L)=>{let p=h2(_,P.start),W=Y.find((k)=>e0(k.recurrenceId)?.isSame(p));if(W)return{...P,...W};let B=P.end.diff(P.start),R=p.add(B,"millisecond"),b=`${P.id}_${L}`,I=N0(P);return{...P,id:b,start:p,end:R,uid:I,rrule:void 0}}).filter((_)=>{if(P.exdates&&P.exdates.length>0){let W=_.start.toISOString();if(P.exdates.includes(W))return!1}return _.start.isSameOrBefore(Z)&&_.end.isSameOrAfter($)})}catch(X){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${X instanceof Error?X.message:"Unknown error"}`)}},Hf=({targetEvent:P,updates:f,currentEvents:$,scope:Z})=>{let X=[...$],z=N0(P),q=X.findIndex((J)=>{return N0(J)===z&&J.rrule&&!J.recurrenceId});if(q===-1)throw Error("Base recurring event not found");let Q=X[q];switch(Z){case"this":{let J=P.start.toISOString(),G=[...Q.exdates||[],J],K={...Q,exdates:G};X[q]=K;let N=`${P.id}_modified_${Date.now()}`,O={...mf(P,["width","height","top","left","right"]),...f,id:N,recurrenceId:J,uid:N0(Q),rrule:void 0};X.push(O);break}case"following":{let Y=P.start.subtract(1,"day").endOf("day").toDate(),G={...Q,rrule:{...Q.rrule,until:Y}};X[q]=G;let K=Q.end.diff(Q.start),N=f.start||P.start,O=f.end||N.add(K),A=`${Q.id}_following`,_=`${A}@ilamy.calendar`,L={...Q,...f,rrule:{...Q.rrule,...f.rrule,dtstart:N.toDate()},id:A,uid:_,start:N,end:O,recurrenceId:void 0};X.push(L);break}case"all":{let J={...Q,...f};X[q]=J;break}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X},Tf=({targetEvent:P,currentEvents:f,scope:$})=>{let Z=[...f],X=N0(P),z=Z.findIndex((Q)=>{return N0(Q)===X&&Q.rrule&&!Q.recurrenceId});if(z===-1)throw Error("Base recurring event not found");let q=Z[z];switch($){case"this":{let Q=P.start.toISOString(),Y=[...q.exdates||[],Q],G={...q,exdates:Y};Z[z]=G;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),Y={...q,rrule:{...q.rrule,until:J}};Z[z]=Y;break}case"all":{let Q=N0(P);return Z.filter((Y)=>N0(Y)!==Q)}default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return Z};import{AnimatePresence as C2,motion as D2}from"motion/react";import{jsx as kf}from"react/jsx-runtime";var E2={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},D=({children:P,transitionKey:f,delay:$=0,className:Z,direction:X="vertical",layout:z,layoutId:q,"data-testid":Q,ref:J,...Y})=>kf(C2,{mode:"wait",children:kf(D2.div,{animate:"visible",className:U("inline-block w-full",Z),custom:{delay:$,direction:X},"data-testid":Q,exit:"exit",initial:"hidden",layout:z,layoutId:q,ref:J,variants:E2,...Y,children:P},f)});D.displayName="AnimatedSection";import{DndContext as e2,MouseSensor as P1,pointerWithin as f1,TouchSensor as $1,useSensor as df,useSensors as z1}from"@dnd-kit/core";import{useRef as rf,useState as Z1}from"react";import{Slot as j2}from"@radix-ui/react-slot";import{cva as y2}from"class-variance-authority";import{jsx as x2}from"react/jsx-runtime";var kP=y2("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:f,size:$,asChild:Z=!1,...X}){return x2(Z?j2:"button",{className:U(kP({variant:f,size:$,className:P})),"data-slot":"button",...X})}import*as z0 from"@radix-ui/react-dialog";import{XIcon as v2}from"lucide-react";import{jsx as O0,jsxs as Xf}from"react/jsx-runtime";function fP({...P}){return O0(z0.Root,{"data-slot":"dialog",...P})}function o2({...P}){return O0(z0.Portal,{"data-slot":"dialog-portal",...P})}function i2({className:P,...f}){return O0(z0.Overlay,{className:U("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...f})}function $P({className:P,children:f,...$}){return Xf(o2,{"data-slot":"dialog-portal",children:[O0(i2,{}),Xf(z0.Content,{className:U("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...$,children:[f,Xf(z0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[O0(v2,{}),O0("span",{className:"sr-only",children:"Close"})]})]})]})}function zP({className:P,...f}){return O0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function gP({className:P,...f}){return O0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function ZP({className:P,...f}){return O0(z0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function hP({className:P,...f}){return O0(z0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as of}from"react";import{createContext as c2}from"react";var CP=c2(void 0);import{createContext as l2}from"react";var DP=l2(void 0);import{useCallback as Y0,useMemo as u2,useState as yf}from"react";import{useCallback as P0,useEffect as Qf,useMemo as Ef,useState as a0}from"react";var qf={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function Z0(P,f){let $=P.startOf("week").day(f),Z=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(X,z)=>Z.add(z,"day"))}function EP(P,f){let $=Z0(P.startOf("month"),f);return Array.from({length:6},(Z,X)=>{let z=$[0].add(X,"week");return Z0(z,f)})}function gf(P){let f=P.daysInMonth();return Array.from({length:f},($,Z)=>P.startOf("month").add(Z,"day"))}function hf({referenceDate:P=V(),length:f=24}={}){let $=P.startOf("day");return Array.from({length:f},(Z,X)=>$.hour(X).minute(0).second(0).millisecond(0))}var m0=1,Cf=24,G0=24,JP=4,Df="bg-secondary text-muted-foreground pointer-events-none",H0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var jf={day:"day",week:"week",month:"month",year:"year"},jP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X=V(),businessHours:z,onEventAdd:q,onEventUpdate:Q,onEventDelete:J,onDateChange:Y,onViewChange:G,locale:K,timezone:N,translations:O,translator:A}=P,[_,L]=a0(X),[p,W]=a0(Z),[B,R]=a0(f),[b,I]=a0(!1),[T,k]=a0(null),[h,C]=a0(null),[v,c]=a0(K||"en"),l=Ef(()=>{if(A)return A;if(O)return(M)=>O[M]||M;return(M)=>qf[M]||M},[O,A]),o=P0((M,m)=>{let j=[];for(let d of B)if(d.rrule)j.push(...Jf({event:d,currentEvents:B,startDate:M,endDate:m}));else{let r0=d.start.isSameOrAfter(M)&&d.start.isSameOrBefore(m),mP=d.end.isSameOrAfter(M)&&d.end.isSameOrBefore(m),Zf=d.start.isBefore(M)&&d.end.isAfter(m);if(r0||mP||Zf)j.push(d)}return j},[B]),p0=P0(()=>{if(p==="day")return{start:_.startOf("day"),end:_.endOf("day")};if(p==="year")return{start:_.startOf("year"),end:_.endOf("year")};if(p==="week"){let m=Z0(_,$);return{start:m[0].startOf("day"),end:m[6].endOf("day")}}let M=EP(_,$);return{start:M[0][0].startOf("day"),end:M[5][6].endOf("day")}},[_,p,$]),Q0=Ef(()=>{let{start:M,end:m}=p0();return o(M,m)},[o,p0]);Qf(()=>{if(f)R(f)},[f]),Qf(()=>{if(K)c(K),V.locale(K),L((M)=>M.locale(K))},[K]),Qf(()=>{if(N)V.tz.setDefault(N)},[N]);let S=P0((M)=>{L(M),Y?.(M)},[Y]),u=P0((M)=>{L((m)=>{let j=M===1?m.add(1,jf[p]):m.subtract(1,jf[p]);return Y?.(j),j})},[p,Y]),U0=P0(()=>u(1),[u]),t=P0(()=>u(-1),[u]),A0=P0(()=>{let M=V();L(M),Y?.(M)},[Y]),r=P0((M)=>{R((m)=>[...m,M]),q?.(M)},[q]),i=P0((M,m)=>{R((j)=>j.map((d)=>{if(d.id!==M)return d;let r0={...d,...m};return Q?.(r0),r0}))},[Q]),t0=P0((M,m,j)=>{Q?.({...M,...m}),R(Hf({targetEvent:M,updates:m,currentEvents:B,scope:j.scope}))},[B,Q]),s0=P0((M,m)=>{J?.(M),R(Tf({targetEvent:M,currentEvents:B,scope:m.scope}))},[B,J]),M0=P0((M)=>{R((m)=>{let j=m.find((d)=>d.id===M);if(j)J?.(j);return m.filter((d)=>d.id!==M)})},[J]),l0=P0((M)=>{if(M?.start)C(M.start);let m=M?.start??_;k({title:l("newEvent"),start:m,end:M?.end??m.add(1,"hour"),resourceId:M?.resourceId,description:"",allDay:M?.allDay??!1}),I(!0)},[_,l]),u0=P0(()=>{C(null),k(null),I(!1)},[]),d0=P0((M)=>{W(M),G?.(M)},[G]),w=P0((M)=>{let m=M.uid;return B.find((j)=>(j.uid||`${j.id}@ilamy.calendar`)===m&&j.rrule)||null},[B]);return{currentDate:_,view:p,events:Q0,rawEvents:B,isEventFormOpen:b,selectedEvent:T,selectedDate:h,firstDayOfWeek:$,dayMaxEvents:JP,currentLocale:v,businessHours:z,setCurrentDate:L,selectDate:S,setView:d0,nextPeriod:U0,prevPeriod:t,today:A0,addEvent:r,updateEvent:i,updateRecurringEvent:t0,deleteEvent:M0,deleteRecurringEvent:s0,openEventForm:l0,closeEventForm:u0,setSelectedEvent:k,setIsEventFormOpen:I,setSelectedDate:C,getEventsForDateRange:o,findParentRecurringEvent:w,t:l}};import{jsx as d2}from"react/jsx-runtime";var xf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},vf=({children:P,events:f=[],resources:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:z,renderEvent:q,onEventClick:Q,onCellClick:J,onViewChange:Y,onEventAdd:G,onEventUpdate:K,onEventDelete:N,onDateChange:O,locale:A,timezone:_,disableCellClick:L,disableEventClick:p,disableDragAndDrop:W,dayMaxEvents:B,eventSpacing:R,stickyViewHeader:b=!0,viewHeaderClassName:I="",headerComponent:T,headerClassName:k,translations:h,translator:C,renderResource:v,renderEventForm:c,businessHours:l,timeFormat:o="12-hour",classesOverride:p0,orientation:Q0="horizontal",renderCurrentTimeIndicator:S,hideNonBusinessHours:u=!1,hiddenDays:U0})=>{let[t]=yf($),[A0,r]=yf(new Set($.map((H)=>H.id))),i=jP({events:f,firstDayOfWeek:Z,initialView:X,initialDate:z,businessHours:l,onEventAdd:G,onEventUpdate:K,onEventDelete:N,onDateChange:O,onViewChange:Y,locale:A,timezone:_,translations:h,translator:C}),t0=Y0((H)=>{r((e)=>{let w0=new Set(e);if(w0.has(H))w0.delete(H);else w0.add(H);return w0})},[]),s0=Y0((H)=>{r((e)=>new Set(e).add(H))},[]),M0=Y0((H)=>{r((e)=>{let w0=new Set(e);return w0.delete(H),w0})},[]),l0=Y0(()=>{r(new Set(t.map((H)=>H.id)))},[t]),u0=Y0(()=>{r(new Set)},[]),d0=Y0((H)=>{return i.events.filter((e)=>{if(e.resourceIds)return e.resourceIds.includes(H);return e.resourceId===H})},[i.events]),w=Y0((H)=>{return i.events.filter((e)=>{return xf(e).some((V2)=>H.includes(V2))})},[i.events]),M=Y0((H)=>{return t.find((e)=>e.id===H)},[t]),m=Y0(()=>{return t.filter((H)=>A0.has(H.id))},[t,A0]),j=Y0((H)=>{return Boolean(H.resourceIds&&H.resourceIds.length>1)},[]),d=Y0((H)=>{i.setSelectedEvent(H),i.setIsEventFormOpen(!0)},[i]),r0=Y0((H)=>{if(p)return;if(Q)Q(H);else d(H)},[p,Q,d]),mP=Y0((H)=>{if(L)return;if(J)J(H);else{let e={title:i.t("newEvent"),start:H.start,end:H.end,description:"",allDay:!1};if(H.resourceId!==void 0)e.resourceId=H.resourceId;i.setSelectedEvent(e),i.setSelectedDate(H.start),i.setIsEventFormOpen(!0)}},[J,L,i]),Zf=u2(()=>({...i,view:i.view,setView:i.setView,events:i.events,rawEvents:i.rawEvents,resources:t,visibleResources:A0,toggleResourceVisibility:t0,showResource:s0,hideResource:M0,showAllResources:l0,hideAllResources:u0,getEventsForResource:d0,getEventsForResources:w,getResourceById:M,getVisibleResources:m,isEventCrossResource:j,getEventResourceIds:xf,onEventClick:r0,onCellClick:mP,headerComponent:T,headerClassName:k,renderEvent:q,renderResource:v,renderEventForm:c,locale:A,timezone:_,disableCellClick:L,disableEventClick:p,disableDragAndDrop:W,dayMaxEvents:B,eventSpacing:R,stickyViewHeader:b,viewHeaderClassName:I,businessHours:l,timeFormat:o,classesOverride:p0,orientation:Q0,renderCurrentTimeIndicator:S,hideNonBusinessHours:u,hiddenDays:U0}),[i,t,A0,t0,s0,M0,l0,u0,d0,w,M,m,j,r0,mP,q,v,c,A,_,L,p,W,B,R,b,I,T,k,l,o,p0,Q0,S,u,U0]);return d2(DP.Provider,{value:Zf,children:P})};function F(P){let f=of(DP),$=of(CP),Z=f||$;if(!Z)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(Z):Z}function r2(){let P=F();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as _0,jsxs as n0}from"react/jsx-runtime";function LP({isOpen:P,onClose:f,onConfirm:$,operationType:Z,eventTitle:X}){let{t:z}=F((J)=>({t:J.t})),q=(J)=>{$(J),f()},Q=Z==="edit";return _0(fP,{onOpenChange:f,open:P,children:n0($P,{className:"max-w-md",children:[n0(zP,{children:[_0(ZP,{children:Q?z("editRecurringEvent"):z("deleteRecurringEvent")}),n0(hP,{children:['"',X,'"'," ",Q?z("editRecurringEventQuestion"):z("deleteRecurringEventQuestion")]})]}),n0("div",{className:"space-y-3",children:[_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("this"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisEvent")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?z("onlyChangeThis"):z("onlyDeleteThis")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("following"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("thisAndFollowingEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeThisAndFuture"):z("deleteThisAndFuture")})]})}),_0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>q("all"),variant:"outline",children:n0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:z("allEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?z("changeEntireSeries"):z("deleteEntireSeries")})]})})]}),_0(gP,{children:_0(g,{onClick:f,variant:"outline",children:z("cancel")})})]})})}var cf=(P,f)=>{let{active:$,over:Z}=P;if(!$||!Z||!f)return null;let X=Z.data.current?.type==="time-cell",{resourceId:z,allDay:q}=Z.data.current||{},Q;if(X){let{date:K,hour:N=0,minute:O=0}=Z.data.current;Q=V(K).hour(N).minute(O)}else{let{date:K}=Z.data.current;Q=V(K)}let J=f.end.diff(f.start,"second"),Y=Q.add(J,"second");if(Y.isSame(Y.startOf("day")))Y=Y.subtract(1,"day").endOf("day");let G={start:Q,end:Y,resourceId:z,allDay:X?!1:q??f.allDay};return{activeEvent:f,updates:G}};import{DragOverlay as a2}from"@dnd-kit/core";import{snapCenterToCursor as n2}from"@dnd-kit/modifiers";import{useImperativeHandle as t2,useState as s2}from"react";import{jsx as lf}from"react/jsx-runtime";var uf=({ref:P})=>{let[f,$]=s2(null);return t2(P,()=>({setActiveEvent:$})),lf(a2,{modifiers:[n2],children:f&&lf("div",{className:U("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as af,jsxs as nf,Fragment as J1}from"react/jsx-runtime";function yP({children:P}){let f=rf(null),$=rf(null),{updateEvent:Z,updateRecurringEvent:X,disableDragAndDrop:z}=F((p)=>({updateEvent:p.updateEvent,updateRecurringEvent:p.updateRecurringEvent,disableDragAndDrop:p.disableDragAndDrop})),[q,Q]=Z1({isOpen:!1,event:null,updates:null}),J=df(P1,{activationConstraint:{distance:2}}),Y=df($1,{activationConstraint:{delay:100,tolerance:5}}),G=z1(J,Y),K=(p,W)=>{if(!p||!p.id)return;if(!W||Object.keys(W).length===0)return;if(PP(p))Q({isOpen:!0,event:p,updates:W});else Z(p.id,W)},N=(p)=>{if(!q.event||!q.updates){Q({isOpen:!1,event:null,updates:null});return}try{X(q.event,q.updates,{scope:p,eventDate:q.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},O=()=>{Q({isOpen:!1,event:null,updates:null})},A=(p)=>{let{active:W}=p;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},_=(p)=>{let W=cf(p,f.current);if(W){let{activeEvent:B,updates:R}=W;K(B,R)}f.current=null,$.current?.setActiveEvent(null)},L=(p)=>{f.current=null};if(z)return P;return nf(J1,{children:[nf(e2,{collisionDetection:f1,onDragCancel:L,onDragEnd:_,onDragStart:A,sensors:G,children:[P,af(uf,{ref:$})]}),af(LP,{eventTitle:q.event?.title||"",isOpen:q.isOpen,onClose:O,onConfirm:N,operationType:"edit"})]})}import{useEffect as h1,useMemo as C1,useState as E0}from"react";import*as xP from"@radix-ui/react-checkbox";import{CheckIcon as X1}from"lucide-react";import{jsx as Yf}from"react/jsx-runtime";function T0({className:P,...f}){return Yf(xP.Root,{className:U("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...f,children:Yf(xP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:Yf(X1,{className:"size-3.5"})})})}import{PopoverClose as p1}from"@radix-ui/react-popover";import{Calendar as U1}from"lucide-react";import{useEffect as G1,useRef as L1,useState as A1}from"react";import{ChevronDownIcon as q1,ChevronLeftIcon as Q1,ChevronRightIcon as Y1}from"lucide-react";import*as vP from"react";import{DayPicker as _1,getDefaultClassNames as tf}from"react-day-picker";import{jsx as k0}from"react/jsx-runtime";function sf({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:Z="label",buttonVariant:X="ghost",formatters:z,components:q,...Q}){let J=tf();return k0(_1,{captionLayout:Z,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",J.root),months:U("flex gap-4 flex-col md:flex-row relative",J.months),month:U("flex flex-col w-full gap-4",J.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",J.nav),button_previous:U(kP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_previous),button_next:U(kP({variant:X}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",J.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",J.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",J.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",J.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",J.dropdown),caption_label:U("select-none font-medium",Z==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",J.caption_label),table:"w-full border-collapse",weekdays:U("flex",J.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",J.weekday),week:U("flex w-full mt-2",J.week),week_number_header:U("select-none w-(--cell-size)",J.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",J.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Q.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",J.day),range_start:U("rounded-l-md bg-accent",J.range_start),range_middle:U("rounded-none",J.range_middle),range_end:U("rounded-r-md bg-accent",J.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",J.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",J.outside),disabled:U("text-muted-foreground opacity-50",J.disabled),hidden:U("invisible",J.hidden),...f},components:{Root:({className:Y,rootRef:G,...K})=>{return k0("div",{className:U(Y),"data-slot":"calendar",ref:G,...K})},Chevron:({className:Y,orientation:G,...K})=>{if(G==="left")return k0(Q1,{className:U("size-4",Y),...K});if(G==="right")return k0(Y1,{className:U("size-4",Y),...K});return k0(q1,{className:U("size-4",Y),...K})},DayButton:K1,WeekNumber:({children:Y,...G})=>{return k0("td",{...G,children:k0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:Y})})},...q},formatters:{formatMonthDropdown:(Y)=>Y.toLocaleString("default",{month:"short"}),...z},showOutsideDays:$,...Q})}function K1({className:P,day:f,modifiers:$,...Z}){let X=tf(),z=vP.useRef(null);return vP.useEffect(()=>{if($.focused)z.current?.focus()},[$.focused]),k0(g,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",X.day,P),"data-day":f.date.toLocaleDateString(),"data-range-end":$.range_end,"data-range-middle":$.range_middle,"data-range-start":$.range_start,"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,ref:z,size:"icon",variant:"ghost",...Z})}import*as R0 from"@radix-ui/react-popover";import{jsx as oP}from"react/jsx-runtime";function g0({...P}){return oP(R0.Root,{"data-slot":"popover",...P})}function h0({...P}){return oP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function C0({className:P,align:f="center",sideOffset:$=4,...Z}){return oP(R0.Portal,{children:oP(R0.Content,{align:f,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:$,...Z})})}import{jsx as XP,jsxs as _f}from"react/jsx-runtime";function AP({date:P,closeOnSelect:f,onChange:$,label:Z="Pick a date",className:X,disabled:z}){let q=L1(null),[Q,J]=A1(P);G1(()=>{J(P)},[P]);let Y=(G)=>{if(J(G),f)q.current?.click();$?.(G)};return XP("div",{className:X,children:_f(g0,{children:[XP(h0,{asChild:!0,children:_f(g,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[XP(U1,{}),Q?V(Q).format("MMM D, YYYY"):XP("span",{children:Z})]})}),_f(C0,{align:"start",className:"w-auto p-0",children:[XP(p1,{ref:q}),XP(sf,{captionLayout:"dropdown",defaultMonth:Q,disabled:z,mode:"single",onSelect:Y,selected:Q})]})]})})}import{jsx as W1}from"react/jsx-runtime";function S0({className:P,type:f,...$}){return W1("input",{className:U("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:f,...$})}import*as ef from"@radix-ui/react-label";import{jsx as N1}from"react/jsx-runtime";function a({className:P,...f}){return N1(ef.Root,{className:U("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...f})}import*as F0 from"@radix-ui/react-scroll-area";import{jsx as WP,jsxs as O1}from"react/jsx-runtime";function V0({className:P,children:f,viewPortProps:$,...Z}){return O1(F0.Root,{className:U("relative",P),"data-slot":"scroll-area",...Z,children:[WP(F0.Viewport,{...$,className:U("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),"data-slot":"scroll-area-viewport",children:f}),WP(I0,{}),WP(F0.Corner,{})]})}function I0({className:P,orientation:f="vertical",...$}){return WP(F0.ScrollAreaScrollbar,{className:U("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:f,...$,children:WP(F0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as V1}from"lucide-react";import{useEffect as B1,useRef as f5,useState as Kf}from"react";import{useMemo as F1}from"react";function P5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:F1(()=>{let z=[],[q,Q]=f.split(":").map(Number),[J,Y]=$.split(":").map(Number),G=q*60+Q,K=J*60+Y;for(let N=G;N<=K;N+=15){let O=Math.floor(N/60),A=N%60,_=`${O.toString().padStart(2,"0")}:${A.toString().padStart(2,"0")}`;z.push(_)}return z},[f,$]),formatTime:(z)=>{let[q,Q]=z.split(":").map(Number),J=q>=12?"PM":"AM",Y=q===0?12:q>12?q-12:q;if(P==="24-hour")return`${q.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${Y}:${Q.toString().padStart(2,"0")} ${J}`}}}import{jsx as D0,jsxs as pf}from"react/jsx-runtime";var M1=(P)=>{P.stopPropagation()};function Uf({value:P,onChange:f,minTime:$="00:00",maxTime:Z="23:45",timeFormat:X="12-hour",placeholder:z="Select time...",className:q,disabled:Q=!1,name:J}){let[Y,G]=Kf(!1),[K,N]=Kf(""),O=f5(null),A=f5(null),[_,L]=Kf(0),{timeOptions:p,formatTime:W}=P5({timeFormat:X,minTime:$,maxTime:Z}),B=p.filter((I)=>{return W(I).toLowerCase().includes(K.toLowerCase())}),R=(I)=>{f(I),G(!1),N("")};B1(()=>{if(Y){if(A.current)L(A.current.offsetWidth);setTimeout(()=>{O.current?.focus()},0)}},[Y]);let b=P?W(P):z;return pf(g0,{onOpenChange:G,open:Y,children:[D0(h0,{asChild:!0,children:pf(g,{"aria-controls":"time-picker-listbox","aria-expanded":Y,className:U("w-full justify-start",q),"data-testid":`time-picker-${J}`,disabled:Q,ref:A,role:"combobox",variant:"outline",children:[D0(V1,{className:"mr-2 h-4 w-4"}),b]})}),pf(C0,{align:"start",className:"p-0",style:{width:_},children:[D0("div",{className:"p-2 border-b",children:D0(S0,{className:"h-8",onChange:(I)=>N(I.target.value),placeholder:"Search time...",ref:O,value:K})}),D0(V0,{className:"h-[200px]",onWheel:M1,children:D0("div",{className:"p-1",children:B.length===0?D0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):B.map((I)=>{let T=W(I);return D0("button",{className:U("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",I===P&&"bg-accent text-accent-foreground"),onClick:()=>R(I),type:"button",children:T},I)})})})]})]})}var Gf=(P,f)=>{if(!f)return!0;let $=!1;return qP(f,{date:P,onMatch:()=>{$=!0}}),$},$5=({date:P,hour:f,minute:$=0,businessHours:Z})=>{if(!Z)return!0;if(f===void 0)return Gf(P,Z);let X=!1,z=f*60+$;return qP(Z,{date:P,onMatch:(q)=>{let Q=q.startTime??9,J=q.endTime??17,Y=Q*60,G=J*60;if(z>=Y&&z<G)X=!0}}),X},qP=(P,f)=>{let{date:$,onMatch:Z}=f;if(!P)return;let X=Array.isArray(P)?P:[P];for(let z of X)if($&&z.daysOfWeek){let q=$.day();if(z.daysOfWeek.some((Q)=>H0[Q]===q))Z(z)}else Z(z)},iP=(P)=>{let{allDates:f,businessHours:$,resourceBusinessHours:Z=[],hideNonBusinessHours:X}=P,z=24,q=0,Q=!1,J=(Y)=>{Q=!0,z=Math.min(z,Y.startTime??9),q=Math.max(q,Y.endTime??17)};for(let Y of f){qP($,{date:Y,onMatch:J});for(let G of Z)qP(G,{date:Y,onMatch:J})}if(!Q&&X){qP($,{onMatch:J});for(let Y of Z)qP(Y,{onMatch:J});if(!Q)z=9,q=17,Q=!0}return{minStart:z,maxEnd:q,hasBusinessHours:Q}};var Lf=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=V(P).hour(Z).minute(X);return $?z.hour(0).minute(0):z},z5=(P,f,$)=>{let[Z,X]=f.split(":").map(Number),z=V(P).hour(Z).minute(X);return $?z.hour(23).minute(59):z},Af=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=V(P),{minStart:Z,maxEnd:X,hasBusinessHours:z}=iP({allDates:[$],businessHours:f,hideNonBusinessHours:!1});if(!z)return{min:"00:00",max:"23:59"};return{min:`${Z.toString().padStart(2,"0")}:00`,max:`${(X-1).toString().padStart(2,"0")}:45`}};import{useEffect as w1,useMemo as m1,useState as G5}from"react";import{RRule as X0}from"rrule";import{jsx as cP}from"react/jsx-runtime";function Z5({className:P,...f}){return cP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function J5({className:P,...f}){return cP("div",{className:U("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...f})}function X5({className:P,...f}){return cP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...f})}function q5({className:P,...f}){return cP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as E from"@radix-ui/react-select";import{CheckIcon as R1,ChevronDownIcon as Q5,ChevronUpIcon as S1}from"lucide-react";import{jsx as f0,jsxs as Wf}from"react/jsx-runtime";function Y5({...P}){return f0(E.Root,{"data-slot":"select",...P})}function _5({...P}){return f0(E.Value,{"data-slot":"select-value",...P})}function K5({className:P,size:f="default",children:$,...Z}){return Wf(E.Trigger,{className:U("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":f,"data-slot":"select-trigger",...Z,children:[$,f0(E.Icon,{asChild:!0,children:f0(Q5,{className:"size-4 opacity-50"})})]})}function p5({className:P,children:f,position:$="popper",align:Z="center",...X}){return f0(E.Portal,{children:Wf(E.Content,{align:Z,className:U("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:$,...X,children:[f0(I1,{}),f0(E.Viewport,{className:U("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),f0(b1,{})]})})}function U5({className:P,children:f,...$}){return Wf(E.Item,{className:U("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...$,children:[f0("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f0(E.ItemIndicator,{children:f0(R1,{className:"size-4"})})}),f0(E.ItemText,{children:f})]})}function I1({className:P,...f}){return f0(E.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:f0(S1,{className:"size-4"})})}function b1({className:P,...f}){return f0(E.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:f0(Q5,{className:"size-4"})})}import{jsx as y,jsxs as J0}from"react/jsx-runtime";var Nf={DAILY:X0.DAILY,WEEKLY:X0.WEEKLY,MONTHLY:X0.MONTHLY,YEARLY:X0.YEARLY},H1=Object.fromEntries(Object.entries(Nf).map(([P,f])=>[f,P])),L5=[X0.SU,X0.MO,X0.TU,X0.WE,X0.TH,X0.FR,X0.SA],T1=["sun","mon","tue","wed","thu","fri","sat"],A5=(P)=>Math.max(1,Number.parseInt(P,10)||1),k1=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new X0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},W5=({value:P,onChange:f})=>{let{t:$}=F((_)=>({t:_.t})),[Z,X]=G5(!!P),[z,q]=G5(()=>P||null),Q=m1(()=>T1.map((_,L)=>({value:L5[L],label:$(_)})),[$]);w1(()=>{if(X(!!P),P)q(P)},[P]);let J=(_)=>{if(!z)return;let L={...z,..._};q(L),f(Z?L:null)},Y=(_)=>{if(X(_),!_){f(null);return}if(z){f(z);return}let L={freq:X0.DAILY,interval:1};q(L),f(L)},G=(_)=>{let L=z?.byweekday||[],p=L5[_],W=L.includes(p)?L.filter((B)=>B!==p):[...L,p];J({byweekday:W.length?W:void 0})},K=(_)=>{let L={count:void 0,until:void 0};if(_==="count")L.count=z?.count||1;if(_==="until")L.until=z?.until||V().add(1,"month").endOf("day").toDate();J(L)},N=z?.until?"until":z?.count?"count":"never",O=H1[z?.freq??X0.DAILY]||"DAILY",A=Array.isArray(z?.byweekday)?z.byweekday:z?.byweekday?[z.byweekday]:[];return J0(Z5,{"data-testid":"recurrence-editor",children:[J0(J5,{className:"pb-3",children:[J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:Z,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:Y}),y(X5,{className:"text-sm",children:$("repeat")})]}),Z&&P&&y("p",{className:"text-xs text-muted-foreground",children:k1(P,$)})]}),Z&&y(q5,{className:"pt-0",children:J0("div",{className:"space-y-4",children:[J0("div",{className:"grid grid-cols-2 gap-4",children:[J0("div",{children:[y(a,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),J0(Y5,{onValueChange:(_)=>J({freq:Nf[_]}),value:O,children:[y(K5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:y(_5,{})}),y(p5,{children:Object.keys(Nf).map((_)=>y(U5,{value:_,children:$(_.toLowerCase())},_))})]})]}),J0("div",{children:[y(a,{className:"text-xs",htmlFor:"interval",children:$("every")}),y(S0,{className:"h-8",id:"interval",min:"1",onChange:(_)=>J({interval:A5(_.target.value)}),type:"number",value:z?.interval||1})]})]}),z?.freq===X0.WEEKLY&&J0("div",{children:[y(a,{className:"text-xs",children:$("repeatOn")}),y("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((_,L)=>J0("div",{className:"flex items-center space-x-1",children:[y(T0,{checked:A.includes(_.value),id:`day-${L}`,onCheckedChange:()=>G(L)}),y(a,{className:"text-xs cursor-pointer",htmlFor:`day-${L}`,children:_.label})]},_.label))})]}),J0("div",{children:[y(a,{className:"text-xs",children:$("ends")}),J0("div",{className:"space-y-2 mt-1",children:[J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:N==="never",id:"never",onCheckedChange:()=>K("never")}),y(a,{className:"text-xs",htmlFor:"never",children:$("never")})]}),J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:N==="count",id:"after",onCheckedChange:()=>K("count")}),y(a,{className:"text-xs",htmlFor:"after",children:$("after")}),N==="count"&&y(S0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(_)=>J({count:A5(_.target.value)}),type:"number",value:z?.count||1}),y("span",{className:"text-xs",children:$("occurrences")})]}),J0("div",{className:"flex items-center space-x-2",children:[y(T0,{checked:N==="until",id:"on",onCheckedChange:()=>K("until")}),y(a,{className:"text-xs",htmlFor:"on",children:$("on")}),N==="until"&&y(AP,{className:"h-6",date:z?.until,onChange:(_)=>J({until:_?V(_).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as lP,useState as g1}from"react";function N5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=F((Y)=>({updateRecurringEvent:Y.updateRecurringEvent,deleteRecurringEvent:Y.deleteRecurringEvent})),[Z,X]=g1({isOpen:!1,operationType:"edit",event:null}),z=lP((Y,G)=>{X({isOpen:!0,operationType:"edit",event:Y,updates:G,onConfirm:(K)=>{f(Y,G,{scope:K,eventDate:Y.start})}})},[f]),q=lP((Y)=>{X({isOpen:!0,operationType:"delete",event:Y,onConfirm:(G)=>{$(Y,{scope:G,eventDate:Y.start})}})},[$]),Q=lP(()=>{X({isOpen:!1,operationType:"edit",event:null})},[]),J=lP((Y)=>{if(Z.onConfirm)Z.onConfirm(Y);Q(),P?.()},[Z,Q,P]);return{dialogState:Z,openEditDialog:z,openDeleteDialog:q,closeDialog:Q,handleConfirm:J}}import{jsx as x,jsxs as $0,Fragment as D1}from"react/jsx-runtime";var O5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],F5=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:Z,onAdd:X})=>{let{dialogState:z,openEditDialog:q,openDeleteDialog:Q,closeDialog:J,handleConfirm:Y}=N5(f),{findParentRecurringEvent:G,t:K,businessHours:N,timeFormat:O,getResourceById:A}=F((w)=>({findParentRecurringEvent:w.findParentRecurringEvent,t:w.t,businessHours:w.businessHours,timeFormat:w.timeFormat,getResourceById:w.getResourceById})),_=P?.start??V(),L=P?.end??V().add(1,"hour"),p=P?G(P):null,[W,B]=E0(_.toDate()),[R,b]=E0(L.toDate()),[I,T]=E0(P?.allDay||!1),[k,h]=E0(P?.color||O5[0].value),[C,v]=E0(_.format("HH:mm")),[c,l]=E0(L.format("HH:mm")),[o,p0]=E0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[Q0,S]=E0(()=>{return P?.rrule||p?.rrule||null}),u=(w)=>{if(B(w),w&&V(w).isAfter(V(R)))b(w)},U0=(w)=>{if(b(w),w&&V(w).isBefore(V(W)))B(w)},t=(w)=>{if(v(w),V(W).isSame(V(R),"day")&&w>c)l(w)},A0=(w)=>{if(l(w),V(W).isSame(V(R),"day")&&w<C)v(w)},r=(w)=>{let{name:M,value:m}=w.target;p0((j)=>({...j,[M]:m}))};h1(()=>{if(I)l("23:59")},[I]);let i=(w)=>{w.preventDefault();let M=Lf(W,C,I),m=z5(R,c,I),j={id:P?.id||V().format("YYYYMMDDHHmmss"),title:o.title,start:M,end:m,resourceId:P?.resourceId,description:o.description,location:o.location,allDay:I,color:k,rrule:Q0||void 0};if(P?.id&&PP(P)){q(P,{title:o.title,start:M,end:m,description:o.description,location:o.location,allDay:I,color:k,rrule:Q0||void 0});return}if(P?.id)$?.(j);else X?.(j);f()},t0=()=>{if(P?.id){if(PP(P)){Q(P);return}Z?.(P),f()}},s0=(w)=>{if(!w){S(null);return}let M=Lf(W,C,I);S({...w,dtstart:M.toDate()})},M0=C1(()=>{let w=P?.resourceId;if(w&&A){let M=A(w);if(M?.businessHours)return M.businessHours}return N},[P?.resourceId,A,N]),l0=M0?(w)=>!Gf(V(w),M0):void 0,u0=Af(W,M0),d0=Af(R,M0);return $0(D1,{children:[$0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:i,children:[x(V0,{className:"flex-1 min-h-0",children:$0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[$0("div",{className:"grid gap-2",children:[x(a,{className:"text-xs sm:text-sm",htmlFor:"title",children:K("title")}),x(S0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:r,placeholder:K("eventTitlePlaceholder"),required:!0,value:o.title})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[x(a,{className:"text-xs sm:text-sm",htmlFor:"description",children:K("description")}),x(S0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:r,placeholder:K("eventDescriptionPlaceholder"),value:o.description})]}),$0("div",{className:"flex items-center space-x-2",children:[x(T0,{checked:I,id:"allDay",onCheckedChange:(w)=>T(w===!0)}),x(a,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("startDate")}),x(AP,{className:"mt-1",closeOnSelect:!0,date:W,disabled:l0,onChange:u})]}),$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("endDate")}),x(AP,{className:"mt-1",closeOnSelect:!0,date:R,disabled:l0,onChange:U0})]})]}),!I&&$0("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("startTime")}),x(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:u0.max,minTime:u0.min,name:"start-time",onChange:t,timeFormat:O,value:C})]}),$0("div",{children:[x(a,{className:"text-xs sm:text-sm",children:K("endTime")}),x(Uf,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:d0.max,minTime:d0.min,name:"end-time",onChange:A0,timeFormat:O,value:c})]})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[x(a,{className:"text-xs sm:text-sm",children:K("color")}),x("div",{className:"flex flex-wrap gap-2",children:O5.map((w)=>x(g,{"aria-label":w.label,className:U(`${w.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,k===w.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>h(w.value),type:"button",variant:"ghost"},w.value))})]}),$0("div",{className:"grid gap-1 sm:gap-2",children:[x(a,{className:"text-xs sm:text-sm",htmlFor:"location",children:K("location")}),x(S0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:r,placeholder:K("eventLocationPlaceholder"),value:o.location})]}),x(W5,{onChange:s0,value:Q0})]})}),$0(gP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&x(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:t0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),$0("div",{className:"flex w-full gap-2 sm:w-auto",children:[x(g,{className:"flex-1 sm:flex-none",onClick:f,size:"sm",type:"button",variant:"outline",children:K("cancel")}),x(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),x(LP,{eventTitle:z.event?.title||"",isOpen:z.isOpen,onClose:J,onConfirm:Y,operationType:z.operationType})]})};import{jsx as uP,jsxs as V5}from"react/jsx-runtime";var dP=()=>{let{t:P,selectedEvent:f,isEventFormOpen:$,closeEventForm:Z,addEvent:X,updateEvent:z,deleteEvent:q,renderEventForm:Q}=F((K)=>({t:K.t,selectedEvent:K.selectedEvent,isEventFormOpen:K.isEventFormOpen,closeEventForm:K.closeEventForm,addEvent:K.addEvent,updateEvent:K.updateEvent,deleteEvent:K.deleteEvent,renderEventForm:K.renderEventForm})),G={open:$,onClose:Z,selectedEvent:f,onAdd:X,onUpdate:(K)=>{z(K.id,K)},onDelete:(K)=>{q(K.id)}};if(Q)return Q(G);return uP(fP,{onOpenChange:Z,open:$,children:V5($P,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[V5(zP,{className:"mb-2 sm:mb-4 shrink-0",children:[uP(ZP,{className:"text-base sm:text-lg",children:f?.id?P("editEvent"):P("createEvent")}),uP(hP,{className:"text-xs sm:text-sm",children:f?.id?P("editEventDetails"):P("addNewEvent")})]}),uP(F5,{...G})]})})};import{Calendar as e1,Download as P4,Menu as f4,Plus as $4}from"lucide-react";import{useState as z4}from"react";import{RRule as E1}from"rrule";var Of=`\r
|
|
2
|
+
`,j1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(Of),aP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
|
|
3
|
+
`,"\\n").replaceAll("\r","")},rP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},B5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},y1=(P)=>{try{return new E1(P).toString().split(`
|
|
4
|
+
`).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},x1=(P)=>{let f=V().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",Z=P.rrule?y1(P.rrule):"",X=P.exdates?.length?P.exdates.map((Q)=>rP(V(Q),P.allDay)).join(","):null,z=P.recurrenceId?rP(V(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${B5(P)}`,`DTSTART${$}:${rP(P.start,P.allDay)}`,`DTEND${$}:${rP(P.end,P.allDay)}`,`SUMMARY:${aP(P.title)}`,P.description&&`DESCRIPTION:${aP(P.description)}`,P.location&&`LOCATION:${aP(P.location)}`,Z,X&&`EXDATE:${X}`,z&&`RECURRENCE-ID:${z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(Of)},v1=(P)=>{let f=new Set;return P.filter(($)=>{let Z=B5($),X=$.rrule&&!$.recurrenceId,z=$.recurrenceId&&!$.rrule;if(X)return f.add(Z),!0;if(z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(Z)})},o1=(P,f="ilamy Calendar")=>{let $=aP(f),Z=v1(P).map(x1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,j1,...Z,"END:VCALENDAR"].join(Of)},M5=(P,f="calendar.ics",$="ilamy Calendar")=>{let Z=new Blob([o1(P,$)],{type:"text/calendar;charset=utf-8"}),X=URL.createObjectURL(Z),z=f.endsWith(".ics")?f:`${f}.ics`,q=document.createElement("a");q.href=X,q.download=z,document.body.append(q),q.click(),q.remove(),URL.revokeObjectURL(X)};import{ChevronDown as i1}from"lucide-react";import{useMemo as c1,useState as l1}from"react";import{jsx as s,jsxs as tP,Fragment as nP}from"react/jsx-runtime";var u1=["january","february","march","april","may","june","july","august","september","october","november","december"],d1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:Z,firstDayOfWeek:X}=F((p)=>({currentDate:p.currentDate,view:p.view,setCurrentDate:p.setCurrentDate,t:p.t,firstDayOfWeek:p.firstDayOfWeek})),[z,q]=l1(null),Q=c1(()=>u1.map((p)=>Z(p)),[Z]),J=P.year(),Y=Array.from({length:11},(p,W)=>J-5+W),G=Z0(P,X),K=(p)=>{$(p),q(null)},N=()=>s(nP,{children:Q.map((p,W)=>s(g,{className:U("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>K(P.month(W)),variant:"ghost",children:p},p))}),O=()=>s(nP,{children:Y.map((p)=>s(g,{className:U("justify-start font-normal",P.year()===p&&"bg-primary/10"),onClick:()=>K(P.year(p)),variant:"ghost",children:p},p))}),A=()=>s(nP,{children:Array.from({length:7},(p,W)=>{let B=P.subtract(3,"week").add(W,"week"),R=Z0(B,X),b=R[0],I=R[6],T=B.isSame(P,"week"),k=b.month()!==I.month();return s(g,{className:U("justify-start font-normal",T&&"bg-primary/10"),onClick:()=>K(b),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:`${b.format("MMM D")} - ${I.format("D")}`}),k&&s("span",{className:"ml-0.5 text-xs opacity-70",children:`${b.format("MMM")}-${I.format("MMM")}`})]})},b.format("YYYY-MM-DD"))})}),_=()=>{let p=P.startOf("month"),W=P.daysInMonth();return s(nP,{children:Array.from({length:W},(B,R)=>{let b=p.date(R+1),I=b.isSame(P,"day"),T=b.isSame(V(),"day");return s(g,{className:U("justify-start font-normal",I&&"bg-primary/10"),onClick:()=>K(b),variant:"ghost",children:tP("div",{className:"flex w-full items-center justify-between",children:[s("span",{children:b.format("dddd, MMM D")}),T&&s("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:Z("today")})]})},b.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:N},{id:"year",hidden:!1,title:P.format("YYYY"),render:O},{id:"week",hidden:f!=="week",title:`${G[0].format("MMM D")} - ${G[6].format("MMM D")}`,render:A},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:_}].filter((p)=>!p.hidden).map((p)=>tP(g0,{onOpenChange:(W)=>q(W?p.id:null),open:z===p.id,children:[s(h0,{asChild:!0,children:tP(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[s(D,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:`${p.id}-${P.format("YYYY-MM-DD")}`,children:p.title}),s(i1,{className:"h-4 w-4"})]})}),s(C0,{className:"w-40 p-0",children:s("div",{className:"flex max-h-60 flex-col overflow-auto",children:p.render()})})]},p.id))},R5=d1;import{ChevronLeft as r1,ChevronRight as a1}from"lucide-react";import{jsx as QP,jsxs as s1}from"react/jsx-runtime";var n1=["day","week","month","year"],t1=({currentView:P,onChange:f,variant:$="default",size:Z="sm",className:X,onToday:z,onNext:q,onPrevious:Q})=>{let{t:J,resources:Y}=F((A)=>({t:A.t,resources:A.resources})),G=$==="grid",K=Y&&Y.length>0,N=(A)=>{return U(G?"w-full":"",P===A&&"bg-primary/80")},O=(A)=>{return P===A?"default":"outline"};return s1("div",{className:U(G?"grid grid-cols-2 gap-2":"flex gap-1",X),children:[QP(g,{onClick:Q,size:Z,variant:"outline",children:QP(r1,{className:"h-4 w-4"})}),QP(g,{onClick:q,size:Z,variant:"outline",children:QP(a1,{className:"h-4 w-4"})}),n1.map((A)=>{if(K&&A==="year")return null;return QP(g,{className:N(A),onClick:()=>f(A),size:Z,variant:O(A),children:J(A)},A)}),QP(g,{onClick:z,size:Z,variant:"outline",children:J("today")})]})},Ff=t1;import{jsx as n,jsxs as b0}from"react/jsx-runtime";var Z4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:Z,prevPeriod:X,today:z,openEventForm:q,headerComponent:Q,headerClassName:J,rawEvents:Y,t:G}=F((p)=>({view:p.view,setView:p.setView,nextPeriod:p.nextPeriod,prevPeriod:p.prevPeriod,today:p.today,openEventForm:p.openEventForm,headerComponent:p.headerComponent,headerClassName:p.headerClassName,rawEvents:p.rawEvents,t:p.t})),[K,N]=z4(!1),O=()=>N(!1),A=()=>{let p=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;M5(Y,p,"ilamy Calendar"),O()},_=()=>b0(g,{className:"flex items-center gap-1",onClick:()=>q(),size:"sm",variant:"default",children:[n($4,{className:"h-4 w-4"}),n("span",{className:"hidden @4xl:inline",children:G("new")})]}),L=({fullWidth:p=!1})=>b0(g,{className:U("flex items-center gap-1",p&&"w-full gap-2"),onClick:A,size:"sm",variant:"outline",children:[n(P4,{className:"h-4 w-4"}),p?`${G("export")} Calendar (.ics)`:n("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(Q)return Q;return n("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:b0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,J),children:[b0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[n(e1,{className:"h-5 w-5"}),n(R5,{})]}),b0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[b0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[n(Ff,{className:"justify-end",currentView:f,onChange:$,onNext:Z,onPrevious:X,onToday:z,variant:"default"}),n(_,{}),n(L,{})]}),b0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[n(_,{}),b0(g0,{onOpenChange:N,open:K,children:[n(h0,{asChild:!0,children:n(g,{size:"sm",variant:"outline",children:n(f4,{className:"h-4 w-4"})})}),n(C0,{align:"end",className:"w-[240px] p-2",children:b0("div",{className:"space-y-2",children:[n(Ff,{currentView:f,onChange:(p)=>{$(p),O()},onNext:()=>{Z(),O()},onPrevious:()=>{X(),O()},onToday:()=>{z(),O()},variant:"grid"}),n("div",{className:"pt-2 border-t",children:n(L,{fullWidth:!0})})]})})]})]})]})]})})},NP=Z4;import{memo as I4}from"react";import{memo as F4,useCallback as V4}from"react";import L4,{memo as A4,useMemo as m5}from"react";import{jsx as J4}from"react/jsx-runtime";var S5=({date:P,locale:f="en",className:$})=>{let Z=P.isSame(V(),"day");return J4("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",Z&&"bg-primary text-primary-foreground font-medium",$),"data-testid":Z?"day-number-today":`day-number-${P.format("D")}`,children:Intl.DateTimeFormat(f,{day:"numeric"}).format(P.toDate())})};import{useImperativeHandle as K4,useState as I5}from"react";import{useDraggable as X4}from"@dnd-kit/core";import{memo as q4}from"react";import{jsx as OP,jsxs as _4}from"react/jsx-runtime";var Q4=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function Y4({elementId:P,event:f,className:$,style:Z,disableDrag:X=!1}){let{onEventClick:z,renderEvent:q,disableEventClick:Q,disableDragAndDrop:J}=F(),{attributes:Y,listeners:G,setNodeRef:K,isDragging:N}=X4({id:P,data:{event:f,type:"calendar-event"},disabled:X||J}),O=()=>{let A=f,_=A.isTruncatedStart,L=A.isTruncatedEnd;return _4("div",{className:U(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",Q4(_,L)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[_&&OP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),OP("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",_&&"pl-1",L&&"pr-1"),children:f.title}),L&&OP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return OP(D,{className:U("truncate h-full w-full",X||J?Q?"cursor-default":"cursor-pointer":"cursor-grab",N&&!(X||J)&&"cursor-grabbing shadow-lg",$),layout:!0,layoutId:P,onClick:(A)=>{A.stopPropagation(),z(f)},ref:K,style:Z,transitionKey:P,...Y,...G,children:q?q(f):OP(O,{})})}var YP=q4(Y4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as FP,jsxs as p4}from"react/jsx-runtime";var b5=({ref:P})=>{let[f,$]=I5(!1),[Z,X]=I5(null),{currentDate:z,firstDayOfWeek:q}=F();K4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(Y)=>X(Y)}));let J=z.startOf("month").clone();while(J.day()!==q)J=J.subtract(1,"day");return FP(fP,{onOpenChange:$,open:f,children:p4($P,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[FP(zP,{children:FP(ZP,{children:Z?.day.format("MMMM D, YYYY")})}),FP("div",{className:"mt-4 space-y-3",children:Z?.events.map((Y)=>{return FP(YP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${Y.id}`,event:Y},Y.id)})})]})})};import{useDroppable as U4}from"@dnd-kit/core";import{jsx as G4}from"react/jsx-runtime";function w5({id:P,type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q,children:Q,className:J,style:Y,"data-testid":G,disabled:K=!1}){let{onCellClick:N,disableDragAndDrop:O,disableCellClick:A,classesOverride:_,view:L}=F(),{isOver:p,setNodeRef:W}=U4({id:P,data:{type:f,date:$,hour:Z,minute:X,resourceId:z,allDay:q},disabled:O||K}),B=(R)=>{if(R.stopPropagation(),A||K)return;let b=$.hour(Z??0).minute(X??0),I=b.clone();if(Z!==void 0&&X!==void 0)I=I.hour(Z).minute(X+15);else if(Z!==void 0)I=I.hour(Z+1).minute(0);else I=I.hour(23).minute(59);N({start:b,end:I,resourceId:z,allDay:q})};return G4("div",{className:U("droppable-cell",J,p&&!O&&!K&&"bg-accent",A||K?"cursor-default":"cursor-pointer",K&&(_?.disabledCell||Df)),"data-disabled":K.toString(),"data-testid":G,"data-view":L,onClick:B,ref:W,style:Y,children:Q})}import{jsx as sP,jsxs as eP,Fragment as H5}from"react/jsx-runtime";var W4=({day:P,hour:f,minute:$,className:Z="",resourceId:X,gridType:z="day",shouldRenderEvents:q=!0,allDay:Q=!1,"data-testid":J,showDayNumber:Y=!1,children:G})=>{let K=L4.useRef(null),{dayMaxEvents:N=0,getEventsForDateRange:O,currentDate:A,t:_,getEventsForResource:L,businessHours:p,currentLocale:W,eventSpacing:B,getResourceById:R}=F(),b=m5(()=>{if(!q)return[];let S=O(P.startOf(z),P.endOf(z));if(Q)S=S.filter((u)=>u.allDay);if(X){let u=L(X)??[];return S.filter((U0)=>u.some((t)=>String(t.id)===String(U0.id)))}return S},[P,X,O,L,z,q,Q]),I=(S,u)=>{K.current?.setSelectedDayEvents({day:S,events:u}),K.current?.open()},T=P.month()===A.month(),k=b.length-N,h=k>0,C=m5(()=>{if(X&&R){let S=R(X);if(S?.businessHours)return S.businessHours}return p},[X,R,p]),v=$5({date:P,hour:z==="hour"?P.hour():void 0,businessHours:C}),c=P.format("HH"),l=P.format("mm"),o=`day-cell-${P.format("YYYY-MM-DD")}`,p0=z==="hour"?`${o}-${c}-${l}`:o,Q0=`day-cell-${P.toISOString()}${Q?"-allday":""}${X?`-resource-${X}`:""}`;return eP(H5,{children:[sP(w5,{allDay:Q,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",Z),"data-testid":J||p0,date:P,disabled:!v||!T,hour:f,id:Q0,minute:$,resourceId:X,type:"day-cell",children:eP("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${B}px`},children:[Y&&sP(S5,{date:P,locale:W}),q&&eP(H5,{children:[b.slice(0,N).map((S,u)=>sP("div",{className:"w-full shrink-0","data-testid":S?.title,style:{height:`${G0}px`}},`empty-${u}-${S.id}`)),h&&eP("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(S)=>{S.stopPropagation(),I(P,b)},onKeyDown:(S)=>{if(S.key==="Enter"||S.key===" ")S.preventDefault(),S.stopPropagation(),I(P,b)},role:"button",tabIndex:0,children:["+",k," ",_("more")]})]}),G]})}),sP(b5,{ref:K})]})},VP=A4(W4);import{jsx as T5}from"react/jsx-runtime";var j0=({resource:P,className:f,children:$,"data-testid":Z})=>{let{renderResource:X}=F();return T5("div",{className:U("flex items-center justify-center p-2 border-r last:border-r-0",f),"data-testid":Z,style:{color:P.color,backgroundColor:P.backgroundColor},children:X?X(P):$??T5("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as N4}from"react";import{useMemo as g5}from"react";var k5=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:Z=Cf,gridType:X="day",eventSpacing:z=m0})=>{let q=X==="hour"?P.at(0).startOf("hour"):P.at(0).startOf("day"),Q=X==="hour"?P.at(-1).endOf("hour"):P.at(-1).endOf("day"),J=P.length,Y=f.filter((_)=>_.end.diff(_.start,X)>0),G=f.filter((_)=>_.end.diff(_.start,X)===0),K=[...Y].sort((_,L)=>{let p=_.start.diff(L.start);if(p!==0)return p;return L.end.diff(L.start)-_.end.diff(_.start)}),N=[...G].sort((_,L)=>_.start.diff(L.start)),O=[];for(let _=0;_<$;_++){O[_]=[];for(let L=0;L<J;L++)O[_][L]={taken:!1,event:null}}let A=[];for(let _ of K){let L=V.max(_.start.startOf(X),q),p=X==="hour"?_.end.subtract(1,"minute"):_.end,W=V.min(p.startOf(X),Q),B=Math.max(0,L.diff(q,X)),R=Math.min(J-1,W.diff(q,X)),b=_.start.startOf(X).isBefore(q),I=_.end.startOf(X).isAfter(Q),T=!1,k=-1;for(let h=0;h<$;h++){let C=!0;for(let v=B;v<=R;v++)if(O[h][v].taken){C=!1;break}if(C){k=h;break}}if(k!==-1){for(let C=B;C<=R;C++)O[k][C]={taken:!0,event:_};let h=R-B+1;A.push({left:B/J*100,width:h/J*100,top:Z+z+k*(G0+z),height:G0,position:k,..._,isTruncatedStart:b,isTruncatedEnd:I}),T=!0}if(!T)for(let h=B+1;h<=R;h++){let C=-1;for(let v=0;v<$;v++){let c=!0;for(let l=h;l<=R;l++)if(O[v][l].taken){c=!1;break}if(c){C=v;break}}if(C!==-1){for(let c=h;c<=R;c++)O[C][c]={taken:!0,event:_};let v=R-h+1;A.push({left:h/J*100,width:v/J*100,top:Z+z+C*(G0+z),height:G0,position:C,..._,isTruncatedStart:!0,isTruncatedEnd:I}),T=!0;break}}}for(let _ of N){let L=V.max(_.start.startOf(X),q),p=Math.max(0,Math.min(J-1,L.diff(q,X))),W=!1,B=!1,R=-1;for(let b=0;b<$;b++)if(!O[b][p].taken){R=b;break}if(R!==-1)O[R][p]={taken:!0,event:_},A.push({left:p/J*100,width:1/J*100,top:Z+z+R*(G0+z),height:G0,position:R,..._,isTruncatedStart:!1,isTruncatedEnd:!1})}return A};var h5=({days:P,allDay:f,dayNumberHeight:$,resourceId:Z,gridType:X})=>{let{getEventsForDateRange:z,dayMaxEvents:q,eventSpacing:Q,getEventsForResource:J}=F(),Y=P.at(0).startOf("day"),G=P.at(-1).endOf("day"),K=g5(()=>{let O=z(Y,G);if(Z){let A=J(Z);O=O.filter((_)=>A.some((L)=>String(L.id)===String(_.id)))}if(f)O=O.filter((A)=>!!A.allDay===f);return O},[z,J,Y,G,Z,f]);return g5(()=>{return k5({days:P,events:K,dayMaxEvents:q,dayNumberHeight:$,eventSpacing:Q,gridType:X})},[P,q,$,Q,K,X])};import{jsx as Vf}from"react/jsx-runtime";var O4=({days:P,gridType:f="day",resourceId:$,dayNumberHeight:Z,"data-testid":X,allDay:z})=>{let q=P.at(0).startOf("day"),Q=h5({days:P,gridType:f,resourceId:$,dayNumberHeight:Z,allDay:z});return Vf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:Q.map((J)=>{let Y=`${J.id}-${J.position}-${q.toISOString()}-${$??"no-resource"}`;return Vf("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":J.left,"data-testid":`horizontal-event-${J.id}`,"data-top":J.top,"data-width":J.width,style:{left:`calc(${J.left}% + var(--spacing) * 0.25)`,width:`calc(${J.width}% - var(--spacing) * 1)`,top:`${J.top}px`,height:`${G0}px`},children:Vf(YP,{className:"h-full w-full shadow",elementId:Y,event:J})},`${Y}-wrapper`)})})},C5=N4(O4);import{jsx as y0,jsxs as Bf}from"react/jsx-runtime";var B4=({id:P,resource:f,gridType:$="day",variant:Z="resource",dayNumberHeight:X,className:z,columns:q=[],allDay:Q,showDayNumber:J=!1,isLastRow:Y=!1})=>{let{renderResource:G}=F(),K=Z==="resource",N=q.some((A)=>A.days),O=V4((A)=>{return y0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:y0(C5,{allDay:Q,"data-testid":`horizontal-events-${P}`,dayNumberHeight:X,days:A,gridType:$,resourceId:f?.id})})},[Q,X,$,P,f?.id]);return Bf("div",{className:U("flex flex-1 relative",z),"data-testid":`horizontal-row-${P}`,children:[K&&y0(j0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${f?.id}`,resource:f,children:G?G(f):y0("div",{className:"wrap-break-word text-sm",children:f?.title})}),Bf("div",{className:"relative flex-1 flex",children:[y0("div",{className:"flex w-full",children:q.map((A,_)=>{if(A.day)return y0(VP,{allDay:Q,className:U("flex-1 w-20",Y&&"border-b-0",A.className),day:A.day,gridType:$,hour:$==="hour"?A.day.hour():void 0,resourceId:f?.id,showDayNumber:J},A.day.toISOString());let L=_===q.length-1;return Bf("div",{className:"flex relative w-full",children:[y0("div",{className:"flex w-full",children:A.days?.map((p)=>y0(VP,{allDay:Q,className:U("flex-1 w-20",Y&&"border-b-0",!L&&"border-r!",A.className),day:p,gridType:$,hour:$==="hour"?p.hour():void 0,resourceId:f?.id,showDayNumber:J},p.toISOString()))}),O(A.days)]},A.id)})}),!N&&O(q.map((A)=>A.day).filter(Boolean))]})]})},Pf=F4(B4);import{memo as M4}from"react";import{jsx as S4}from"react/jsx-runtime";var R4=({className:P})=>{let{t:f}=F();return S4("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:f("allDay")})},_P=M4(R4);import{jsx as D5,jsxs as w4}from"react/jsx-runtime";var b4=({days:P,classes:f,resource:$,showSpacer:Z=!0})=>{let X=P.map((z,q)=>({id:`allday-col-${z.toISOString()}-${q}`,day:z,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return w4("div",{className:U("flex w-full",f?.row),"data-testid":"all-day-row",children:[Z&&D5(_P,{className:f?.spacer}),D5(Pf,{allDay:!0,className:"flex-1 min-h-fit",columns:X,dayNumberHeight:0,gridType:"day",id:`all-day-row-${$?.id??"main"}`,isLastRow:!0,resource:$,variant:"regular"})]})},x0=I4(b4);import{memo as D4}from"react";import{memo as g4}from"react";import m4 from"dayjs";import{memo as H4}from"react";import{jsx as E5,Fragment as k4}from"react/jsx-runtime";var T4=({rangeStart:P,rangeEnd:f,now:$,resource:Z})=>{let{renderCurrentTimeIndicator:X,view:z}=F((K)=>({renderCurrentTimeIndicator:K.renderCurrentTimeIndicator,view:K.view})),q=$??m4();if(!(q.isSameOrAfter(P)&&q.isBefore(f)))return null;let J=f.diff(P,"minute"),G=q.diff(P,"minute")/J*100;if(X)return E5(k4,{children:X({currentTime:q,rangeStart:P,rangeEnd:f,progress:G,resource:Z,view:z})});return E5("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${G}%`}})},j5=H4(T4);import{useMemo as x5}from"react";var y5=({days:P,gridType:f="hour",events:$})=>{let Z=$.filter((K)=>!K.allDay).toSorted((K,N)=>K.start.diff(N.start));if(Z.length===0)return[];let X=P.at(0)||V(),z=P.length,q=f==="day",Q=[],J=[],Y=null;for(let K of Z){if(Y&&K.start.isSameOrAfter(Y)){if(J.length>0)Q.push(J);J=[]}J.push(K),Y=Y?V.max(Y,K.end):K.end}if(J.length>0)Q.push(J);let G=[];for(let K of Q){if(K.length===1){let L=K[0],p=L.start.diff(X,f,!0),W=L.end.diff(X,f,!0);if(q){if(p=Math.floor(p),W=Math.ceil(W),W<=p)W=p+1}if(p<0)p=0;if(W>z)W=z;let B=Math.max(0,W-p);if(B===0)continue;let R=p/z*100,b=B/z*100;G.push({...L,left:0,width:100,top:R,height:b});continue}let N=[...K].sort((L,p)=>{let W=L.end.diff(L.start,"minute"),B=p.end.diff(p.start,"minute");if(W!==B)return B-W;return L.start.diff(p.start)}),O=N.length,A;if(O===2)A=25;else if(O===3)A=50;else if(O===4)A=60;else A=70;let _=O>1?A/(O-1):0;for(let L=0;L<N.length;L++){let p=N[L],W=p.start.diff(X,f,!0),B=p.end.diff(X,f,!0);if(q){if(W=Math.floor(W),B=Math.ceil(B),B<=W)B=W+1}if(W<0)W=0;if(B>z)B=z;let R=Math.max(0,B-W);if(R===0)continue;let b=W/z*100,I=R/z*100,T,k,h;if(L===0)T=0,k=100,h=1;else T=_*L,k=100-T,h=L+1;G.push({...p,left:T,width:k,top:b,height:I,zIndex:h})}}return G};var v5=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:Z,getEventsForResource:X}=F(),z=P.at(0).startOf("day"),q=P.at(-1).endOf("day"),Q=x5(()=>{let Y=Z(z,q);if($){let G=X($);Y=Y.filter((K)=>G.some((N)=>String(N.id)===String(K.id)))}return Y.filter((G)=>!G.allDay)},[z,q,Z,$,X]);return x5(()=>{return y5({days:P,events:Q,gridType:f})},[P,f,Q])};import{jsx as Mf,jsxs as C4}from"react/jsx-runtime";var h4=({days:P,gridType:f="hour",resourceId:$,resource:Z,"data-testid":X})=>{let z=v5({days:P,gridType:f,resourceId:$}),q=P.at(0),Q=P.at(-1)?.add(1,f);return C4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[q&&Q&&Mf(j5,{rangeEnd:Q,rangeStart:q,resource:Z}),z.map((J,Y)=>{let G=`event-${J.id}-${Y}-${P.at(0).toISOString()}-${$??"no-resource"}`,K=J.end.diff(J.start,"minute")<=15;return Mf("div",{className:"absolute",style:{left:`${J.left}%`,width:`calc(${J.width}% - var(--spacing) * 2)`,top:`${J.top}%`,height:`${J.height}%`},children:Mf(YP,{className:U("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":K}),elementId:G,event:J})},`${G}-wrapper`)})]})},o5=g4(h4);import{jsx as BP,jsxs as j4}from"react/jsx-runtime";var E4=({id:P,days:f,resourceId:$,resource:Z,"data-testid":X,gridType:z,className:q,renderCell:Q,noEvents:J,cellSlots:Y=[60],isLastColumn:G})=>{return BP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",q),"data-testid":X||`vertical-col-${P}`,children:j4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((K,N)=>{let O=K.format("HH"),A=K.format("YYYY-MM-DD");if(Q){let _=P==="time-col"?`vertical-time-${O}`:`vertical-cell-${A}-${O}-00${$?`-${$}`:""}`;return BP("div",{className:"h-[60px] border-b border-r","data-testid":_,children:Q(K)},`${P}-${N}-${O}`)}return Y.map((_)=>{let L=_===60?void 0:_,p=L===void 0?"00":String(L).padStart(2,"0"),W=`vertical-cell-${A}-${O}-${p}${$?`-${$}`:""}`;return BP(VP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",_===60?"":"border-dashed h-[15px] min-h-[15px]",G?"border-r-0":"border-r"),"data-testid":W,day:L?K.minute(L):K,gridType:z,hour:K.hour(),minute:L,resourceId:$,shouldRenderEvents:!1},`${P}-${N}-${p}`)})}),!J&&BP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:BP(o5,{"data-testid":`vertical-events-${P}`,days:f,gridType:z,resource:Z,resourceId:$})})]})})},i5=D4(E4);import{memo as y4}from"react";import{jsx as c5,jsxs as v4}from"react/jsx-runtime";var x4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=F((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return v4("div",{className:U(Z&&"sticky top-0 z-21 bg-background",X),children:[c5("div",{className:U("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&c5("div",{className:U("flex w-full border-b min-h-12",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},l5=y4(x4);import{jsx as MP,jsxs as u5}from"react/jsx-runtime";var B0=({columns:P,children:f,gridType:$="day",variant:Z="resource",classes:X,allDayRow:z,cellSlots:q,style:Q})=>{let J=Z==="resource",Y=!J,G=f&&MP(l5,{allDayRow:z,classes:{header:X?.header,allDay:X?.allDay},children:f});return u5("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:Q,children:[Y&&G,u5(V0,{className:U("h-full",Y&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&G,MP("div",{className:U("flex flex-1 w-fit",X?.body),"data-testid":"vertical-grid-body",children:P.map((K,N)=>MP(i5,{...K,cellSlots:q,gridType:$,isLastColumn:N===P.length-1},`${K.id}-${N}`))}),MP(I0,{className:"z-30"})," ",MP(I0,{className:"z-30",orientation:"horizontal"})," "]})]})};function q0({referenceDate:P,businessHours:f,hideNonBusinessHours:$,allDates:Z=[P],resourceBusinessHours:X=[]}){let z=hf({referenceDate:P}),q=!!f||X.length>0;if(!($&&q))return z;let{minStart:J,maxEnd:Y,hasBusinessHours:G}=iP({allDates:Z,businessHours:f,resourceBusinessHours:X,hideNonBusinessHours:$});if(!G)return z;return z.filter((K)=>{let N=K.hour();return N>=J&&N<Y})}import{jsx as KP,jsxs as o4}from"react/jsx-runtime";var d5=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:Z,businessHours:X,hideNonBusinessHours:z}=F(),q=P.isSame(V(),"day"),Q=q0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P]}),J={id:"time-col",day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>KP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(G.toDate())})},Y={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return KP(B0,{allDayRow:KP(x0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[J,Y],gridType:"hour",variant:"regular",children:KP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:o4(D,{className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",q&&"text-primary"),transitionKey:P.format("YYYY-MM-DD"),children:[KP("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),q&&KP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:Z("today")})]})})})};import{useMemo as u4}from"react";import{memo as i4}from"react";import{jsx as l4}from"react/jsx-runtime";var c4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:Z}=F((X)=>({stickyViewHeader:X.stickyViewHeader,viewHeaderClassName:X.viewHeaderClassName}));return l4("div",{className:U("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,Z),"data-testid":"horizontal-grid-header",children:P})},r5=i4(c4);import{jsx as pP,jsxs as a5}from"react/jsx-runtime";var ff=({rows:P,children:f,classes:$,allDay:Z,gridType:X,variant:z="resource",dayNumberHeight:q})=>{let{currentDate:Q}=F(),J=z==="resource",Y=!J,G=f&&pP(r5,{className:$?.header,children:f});return a5("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[Y&&G,a5(V0,{className:U("h-full",Y&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[J&&G,pP("div",{className:U("flex flex-1 w-fit",$?.body),"data-testid":"horizontal-grid-body",children:pP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((K,N)=>pP(Pf,{allDay:K.allDay??Z,dayNumberHeight:q,gridType:X,isLastRow:N===P.length-1,variant:z,...K},K.id))},Q.format("YYYY-MM"))}),pP(I0,{className:"z-30"}),pP(I0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as Rf}from"react/jsx-runtime";var n5=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:Z,currentDate:X}=F(),z=Z0(X,f);return Rf("div",{className:U("flex w-full",$&&"sticky top-0 z-20",Z,P),"data-testid":"month-header",children:z.map((q,Q)=>Rf(D,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${q.format("ddd").toLowerCase()}`,delay:Q*0.05,transitionKey:q.toISOString(),children:Rf("span",{className:"text-sm capitalize",children:q.format("ddd")})},q.toISOString()))})};import{jsx as t5}from"react/jsx-runtime";var s5=()=>{let{currentDate:P,firstDayOfWeek:f}=F(),Z=u4(()=>EP(P,f),[P,f]).map((X,z)=>({id:`week-${z}`,columns:X.map((q)=>({id:`col-${q.toISOString()}`,day:q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return t5(ff,{classes:{body:"w-full",header:"w-full"},rows:Z,variant:"regular",children:t5(n5,{className:"h-12"})})};import{useMemo as $f}from"react";import{jsx as v0,jsxs as Sf}from"react/jsx-runtime";var e5="w-[calc((100%-4rem)/var(--visible-days))] min-w-[calc((100%-4rem)/var(--visible-days))] flex-1",P2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",f2=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:Z,openEventForm:X,currentLocale:z,timeFormat:q,businessHours:Q,hideNonBusinessHours:J,hiddenDays:Y}=F(),G=$f(()=>Z0(f,$),[f,$]),K=$f(()=>Y?G.filter((L)=>!Y.has(L.day())):G,[G,Y]),O={id:"time-col",days:$f(()=>q0({referenceDate:f,businessHours:Q,hideNonBusinessHours:J,allDates:G}),[f,Q,J,G]),day:void 0,className:`shrink-0 ${P2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(L)=>v0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(z,{hour:"numeric",hour12:q==="12-hour"}).format(L.toDate())})},A=$f(()=>{return K.map((L)=>({id:`day-col-${L.format("YYYY-MM-DD")}`,day:L,label:L.format("D"),className:e5,days:q0({referenceDate:L,businessHours:Q,hideNonBusinessHours:J,allDates:G}),value:L}))},[G,Q,J,K.map]),_={"--visible-days":K.length};return v0(B0,{allDayRow:v0(x0,{classes:{cell:e5,spacer:P2},days:K}),classes:{header:"w-full h-18",body:"w-full"},columns:[O,...A],gridType:"hour",style:_,variant:"regular",children:Sf("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[v0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:Sf("div",{className:"flex flex-col items-center justify-center",children:[v0("span",{className:"text-muted-foreground text-xs",children:P("week")}),v0("span",{className:"font-medium",children:f.week()})]})}),K.map((L,p)=>{let W=L.isSame(V(),"day"),B=`week-day-header-${L.toISOString()}`;return Sf(D,{className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",W&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${L.format("dddd").toLowerCase()}`,delay:p*0.05,onClick:()=>{Z(L),X({start:L})},transitionKey:B,children:[v0("div",{className:"text-xs sm:text-sm",children:L.format("ddd")}),v0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",W&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(z,{day:"numeric"}).format(L.toDate())})]},B)})]})})};import{jsx as o0,jsxs as RP}from"react/jsx-runtime";var d4=["S","M","T","W","T","F","S"],r4=["bg-primary","bg-blue-500","bg-green-500"],a4=42,n4=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},$2=()=>{let{currentDate:P,selectDate:f,events:$,setView:Z,getEventsForDateRange:X,t:z}=F(),q=P.year(),Q=()=>{return Array.from({length:12},(A,_)=>{let L=V().year(q).month(_).startOf("month"),p=$.filter((W)=>W.start.year()===q&&W.start.month()===_);return{date:L,name:L.format("MMMM"),eventCount:p.length,monthKey:L.format("MM")}})},J=(A)=>{let _=A.startOf("month").startOf("week");return Array.from({length:a4},(L,p)=>{let W=_.add(p,"day"),B=W.startOf("day"),R=W.endOf("day"),b=X(B,R);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===A.month(),isToday:W.isSame(V(),"day"),isSelected:W.isSame(P,"day"),eventCount:b.length}})},Y=(A,_,L)=>{L?.stopPropagation(),f(A),Z(_)},G=(A)=>{let _=A===1?z("event"):z("events");return`${A} ${_}`},K=(A)=>{let L=A.isInCurrentMonth?"":"text-muted-foreground opacity-50",p=A.isToday?"bg-primary text-primary-foreground rounded-full":"",W=A.isSelected&&!A.isToday?"bg-muted rounded-full font-bold":"",B=A.eventCount>0&&!A.isToday&&!A.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",L,p,W,B)},N=(A,_)=>{return U("h-[3px] w-[3px] rounded-full",_?"bg-primary-foreground":A)},O=Q();return RP(V0,{className:"h-full","data-testid":"year-view",children:[o0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:O.map((A,_)=>{let L=J(A.date),p=_*0.05;return RP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${A.monthKey}`,children:[RP(D,{className:"mb-2 flex items-center justify-between",delay:p,transitionKey:`month-${A.monthKey}`,children:[o0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${A.monthKey}`,onClick:()=>Y(A.date,"month"),type:"button",children:A.name}),A.eventCount>0&&o0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${A.monthKey}`,children:G(A.eventCount)})]},`month-${A.monthKey}`),RP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${A.monthKey}`,children:[d4.map((W)=>o0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${W}`)),L.map((W)=>{let B=`year-day-${A.date.format("YYYY-MM")}-${W.dayKey}`,R=W.eventCount>0,b=Math.min(W.eventCount,3),I=r4.slice(0,b);return RP("button",{className:K(W),"data-testid":B,onClick:(T)=>Y(W.date,"day",T),title:n4(W.eventCount),type:"button",children:[o0("span",{className:"text-center leading-none",children:W.date.date()}),R&&o0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:I.map((T)=>o0("span",{className:N(T,W.isToday)},T))})]},W.dayKey)})]})]},A.monthKey)})}),o0(I0,{className:"z-30"})]})};import{useCallback as If,useMemo as t4}from"react";import{jsx as s4}from"react/jsx-runtime";var z2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:Z="month",initialDate:X,renderEvent:z,onEventClick:q,onCellClick:Q,onViewChange:J,onEventAdd:Y,onEventUpdate:G,onEventDelete:K,onDateChange:N,locale:O,timezone:A,disableCellClick:_,disableEventClick:L,disableDragAndDrop:p,dayMaxEvents:W,eventSpacing:B=m0,stickyViewHeader:R=!0,viewHeaderClassName:b="",headerComponent:I,headerClassName:T,businessHours:k,renderEventForm:h,translations:C,translator:v,timeFormat:c="12-hour",classesOverride:l,renderCurrentTimeIndicator:o,hideNonBusinessHours:p0=!1,hiddenDays:Q0})=>{let S=jP({events:f,firstDayOfWeek:$,initialView:Z,initialDate:X,businessHours:k,onEventAdd:Y,onEventUpdate:G,onEventDelete:K,onDateChange:N,onViewChange:J,locale:O,timezone:A,translations:C,translator:v}),u=If((r)=>{S.setSelectedEvent(r),S.setIsEventFormOpen(!0)},[S]),U0=If((r)=>{if(L)return;if(q)q(r);else u(r)},[L,q,u]),t=If((r)=>{if(_)return;if(Q)Q(r);else S.openEventForm(r)},[Q,_,S]),A0=t4(()=>({currentDate:S.currentDate,view:S.view,events:S.events,rawEvents:S.rawEvents,currentLocale:S.currentLocale,isEventFormOpen:S.isEventFormOpen,selectedEvent:S.selectedEvent,selectedDate:S.selectedDate,firstDayOfWeek:S.firstDayOfWeek,setCurrentDate:S.setCurrentDate,selectDate:S.selectDate,setView:S.setView,nextPeriod:S.nextPeriod,prevPeriod:S.prevPeriod,today:S.today,addEvent:S.addEvent,updateEvent:S.updateEvent,updateRecurringEvent:S.updateRecurringEvent,deleteEvent:S.deleteEvent,deleteRecurringEvent:S.deleteRecurringEvent,openEventForm:S.openEventForm,closeEventForm:S.closeEventForm,getEventsForDateRange:S.getEventsForDateRange,findParentRecurringEvent:S.findParentRecurringEvent,renderEvent:z,onEventClick:U0,onCellClick:t,locale:O,timezone:A,disableCellClick:_,disableEventClick:L,disableDragAndDrop:p,dayMaxEvents:W,eventSpacing:B,stickyViewHeader:R,viewHeaderClassName:b,headerComponent:I,headerClassName:T,businessHours:k,renderEventForm:h,t:S.t,timeFormat:c,classesOverride:l,renderCurrentTimeIndicator:o,hideNonBusinessHours:p0,hiddenDays:Q0}),[S,z,U0,t,O,A,_,L,p,W,B,R,b,I,T,k,h,c,l,o,p0,Q0]);return s4(CP.Provider,{value:A0,children:P})};import{jsx as L0,jsxs as $3}from"react/jsx-runtime";var e4=()=>{let{view:P,dayMaxEvents:f}=F();return $3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[L0(NP,{className:"p-1"}),L0(yP,{children:L0(D,{className:"w-full h-[calc(100%-3.5rem)]",direction:"horizontal",transitionKey:P,children:L0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:L0(s5,{dayMaxEvents:f},"month"),week:L0(f2,{},"week"),day:L0(d5,{},"day"),year:L0($2,{},"year")}[P]})})}),L0(dP,{})]})},P3=(P)=>{if(!P||P.length===0)return;return new Set(P.map((f)=>H0[f]))},f3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:Z,dayMaxEvents:X=JP,eventSpacing:z=m0,stickyViewHeader:q=!0,viewHeaderClassName:Q="",timeFormat:J="12-hour",hideNonBusinessHours:Y=!1,hiddenDays:G,...K})=>{return L0(z2,{dayMaxEvents:X,eventSpacing:z,events:HP(P),firstDayOfWeek:H0[f],hiddenDays:P3(G),hideNonBusinessHours:Y,initialDate:e0(Z),initialView:$,stickyViewHeader:q,timeFormat:J,viewHeaderClassName:Q,...K,children:L0(e4,{})})};import{jsx as z3}from"react/jsx-runtime";var UP=({days:P,gridType:f="day",children:$,classes:Z})=>{let{getVisibleResources:X}=F(),z=X(),q=P.map((J)=>{let Y=Array.isArray(J);return{id:`col-${Y?J[0]?.format("YYYY-MM-DD"):J.toISOString()}`,day:Y?void 0:J,days:Y?J:void 0,className:Z?.cell,gridType:f}}),Q=z.map((J)=>({id:J.id,title:J.title,resource:J,columns:q}));return z3(ff,{classes:Z,dayNumberHeight:0,gridType:f,rows:Q,children:$})};import{jsx as SP,jsxs as Z3}from"react/jsx-runtime";var Z2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z,getVisibleResources:q}=F(),Q=q(),J=q0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:Q.map((Y)=>Y.businessHours).filter(Boolean)});return Z3(UP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:J,gridType:"hour",children:[SP("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:SP("div",{className:"text-sm",children:f("resources")})}),SP("div",{className:"flex-1 flex flex-col",children:SP("div",{className:"flex h-12",children:J.map((Y,G)=>{let K=Y.isSame(V(),"hour"),N=`resource-day-header-${Y.toISOString()}`;return SP(D,{className:U("min-w-20 flex-1 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Y.format("HH")}`,delay:G*0.05,transitionKey:`${N}-motion`,children:Intl.DateTimeFormat($,{hour:"numeric",hour12:Z==="12-hour"}).format(Y.toDate())},`${N}-animated`)})})})]})};import{jsx as GP,jsxs as J2}from"react/jsx-runtime";var X2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:Z,businessHours:X,hideNonBusinessHours:z}=F(),q=f(),Q=q0({referenceDate:P,businessHours:X,hideNonBusinessHours:z,allDates:[P],resourceBusinessHours:q.map((G)=>G.businessHours).filter(Boolean)}),J={id:"time-col",day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(G)=>GP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:Z==="12-hour"}).format(G.toDate())})},Y=q.map((G)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${G.id}`,resourceId:G.id,resource:G,days:Q,day:P,gridType:"hour"}));return GP(B0,{allDayRow:J2("div",{className:"flex w-full",children:[GP(_P,{}),q.map((G)=>GP(x0,{classes:{cell:"min-w-50"},days:[P],resource:G,showSpacer:!1},`resource-allday-row-${G.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[J,...Y],"data-testid":"resource-day",gridType:"hour",children:J2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[GP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),q.map((G)=>GP(j0,{className:"min-w-50 flex-1",resource:G},`resource-cell-${G.id}`))]})})};import{jsx as q2}from"react/jsx-runtime";var Q2=()=>{let{orientation:P}=F();if(P==="vertical")return q2(X2,{});return q2(Z2,{})};import{useMemo as J3}from"react";import{jsx as zf,jsxs as Y2}from"react/jsx-runtime";var _2=()=>{let{currentDate:P,t:f}=F(),$=J3(()=>{return gf(P)},[P]);return Y2(UP,{days:$,children:[zf("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:zf("div",{className:"text-sm",children:f("resources")})}),$.map((Z,X)=>{let z=`resource-month-header-${Z.toISOString()}`;return Y2(D,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:X*0.05,transitionKey:`${z}-motion`,children:[zf("div",{className:"text-xs font-medium",children:Z.format("D")}),zf("div",{className:"text-xs text-muted-foreground",children:Z.format("ddd")})]},`${z}-animated`)})]})};import{jsx as IP,jsxs as K2}from"react/jsx-runtime";var p2=()=>{let{currentDate:P,getVisibleResources:f}=F(),$=f(),Z=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,J)=>Z.add(J,"day")),z={id:"date-col",days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(Q)=>K2("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[IP("span",{children:Q.format("D")}),IP("span",{children:Q.format("ddd")})]})},q=$.map((Q)=>({id:`month-col-resource-${Q.id}`,day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return IP(B0,{classes:{header:"w-full",body:"w-full"},columns:[z,...q],"data-testid":"resource-month-vertical-grid",children:K2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[IP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Q)=>IP(j0,{className:"min-w-50 flex-1",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as U2}from"react/jsx-runtime";var G2=()=>{let{orientation:P}=F();if(P==="vertical")return U2(p2,{});return U2(_2,{})};import{useMemo as bf}from"react";import{jsx as i0,jsxs as wf}from"react/jsx-runtime";var L2=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:Z,timeFormat:X,businessHours:z,hideNonBusinessHours:q,getVisibleResources:Q}=F(),J=Q(),Y=bf(()=>Z0(P,f),[P,f]),G=bf(()=>J.map((N)=>N.businessHours).filter(Boolean),[J]),K=bf(()=>{return Y.map((N)=>q0({referenceDate:N,businessHours:z,hideNonBusinessHours:q,resourceBusinessHours:G}))},[Y,z,q,G]);return wf(UP,{classes:{header:"h-24 min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:K,gridType:"hour",children:[i0("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:i0("div",{className:"text-sm",children:$("resources")})}),wf("div",{className:"flex-1 flex flex-col",children:[i0("div",{className:"flex h-12",children:Y.map((N,O)=>{let A=N.isSame(V(),"day"),_=`resource-week-header-${N.toISOString()}-day`;return i0(D,{className:U("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium",A&&"bg-blue-50 text-blue-600"),"data-testid":"resource-week-day-header",delay:O*0.05,transitionKey:`${_}-motion`,children:wf("div",{className:"sticky left-1/2",children:[i0("div",{className:"text-sm",children:N.format("ddd")}),i0("div",{className:"text-xs text-muted-foreground",children:N.format("M/D")})]})},`${_}-animated`)})}),i0("div",{className:"flex h-12 border-b",children:K.flat().map((N,O)=>{let A=N.isSame(V(),"hour"),_=`resource-week-header-${N.toISOString()}-hour`;return i0(D,{className:U("min-w-20 flex-1 border-r flex items-center justify-center text-xs shrink-0",A&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${N.format("HH")}`,delay:O*0.005,transitionKey:`${_}-motion`,children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(N.toDate())},`${_}-animated`)})})]})]})};import{useMemo as bP}from"react";import{jsx as K0,jsxs as wP}from"react/jsx-runtime";var A2=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:Z,timeFormat:X,t:z,businessHours:q,hideNonBusinessHours:Q,hiddenDays:J}=F(),Y=f(),G=bP(()=>Z0(P,$),[P,$]),K=bP(()=>J?G.filter((_)=>!J.has(_.day())):G,[G,J]),N=bP(()=>q0({referenceDate:P,businessHours:q,hideNonBusinessHours:Q,allDates:G,resourceBusinessHours:Y.map((_)=>_.businessHours).filter(Boolean)}),[P,q,Q,G,Y]),O=bP(()=>({id:"time-col",days:N,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(_)=>K0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:X==="12-hour"}).format(_.toDate())})}),[N,Z,X]),A=bP(()=>Y.flatMap((_)=>K.map((L)=>({id:`day-col-${L.format("YYYY-MM-DD")}-resource-${_.id}`,resourceId:_.id,resource:_,day:L,days:q0({referenceDate:L,businessHours:q,hideNonBusinessHours:Q,allDates:G,resourceBusinessHours:Y.map((p)=>p.businessHours).filter(Boolean)}),gridType:"hour"}))),[Y,G,q,Q,K.map]);return K0(B0,{allDayRow:wP("div",{className:"flex",children:[K0(_P,{}),Y.map((_)=>K0(x0,{classes:{cell:"min-w-50"},days:K,resource:_,showSpacer:!1},`resource-week-allday-row-${_.id}`))]}),classes:{header:"h-24"},columns:[O,...A],"data-testid":"resource-week",gridType:"hour",children:wP("div",{className:"flex-1 flex flex-col",children:[wP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:z("week")})}),Y.map((_,L)=>{let p=`resource-week-header-${_.id}-day`;return K0(D,{className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium"),delay:L*0.05,style:{width:`calc(${K.length} * var(--spacing) * 50)`},transitionKey:`${p}-motion`,children:K0(j0,{className:"h-full w-full flex-1",resource:_,children:K0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:_.title})})},`${p}-animated`)})]}),wP("div",{className:"flex h-12",children:[K0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:K0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),A.map((_,L)=>{let p=_.day,W=`resource-week-header-${p.toISOString()}-hour-${_.resourceId}`;return wP(D,{className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${p.format("HH")}`,delay:L*0.05,transitionKey:`${W}-motion`,children:[K0("div",{className:"text-sm",children:p.format("ddd")}),K0("div",{className:"text-xs text-muted-foreground",children:p.format("M/D")})]},`${W}-animated`)})]})]})})};import{jsx as W2}from"react/jsx-runtime";var N2=()=>{let{orientation:P}=F();if(P==="vertical")return W2(A2,{});return W2(L2,{})};import{jsx as c0,jsxs as X3}from"react/jsx-runtime";var O2=()=>{let{view:P}=F();return X3("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[c0(NP,{className:"p-1"}),c0(yP,{children:c0(D,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:c0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:c0(G2,{},"month"),week:c0(N2,{},"week"),day:c0(Q2,{},"day")}[P]})})}),c0(dP,{})]})};import{jsx as F2}from"react/jsx-runtime";var q3=(P)=>{if(!P||P.length===0)return;return new Set(P.map((f)=>H0[f]))},Q3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,disableDragAndDrop:z=!1,dayMaxEvents:q=JP,timeFormat:Q="12-hour",eventSpacing:J=m0,hiddenDays:Y,...G})=>{return F2(vf,{dayMaxEvents:q,disableDragAndDrop:z,eventSpacing:J,events:HP(P),firstDayOfWeek:H0[$],hiddenDays:q3(Y),initialDate:e0(X),initialView:Z,resources:f,timeFormat:Q,...G,children:F2(O2,{})})};export{r2 as useIlamyCalendarContext,PP as isRecurringEvent,Jf as generateRecurringEvents,qf as defaultTranslations,$X as RRule,Q3 as IlamyResourceCalendar,f3 as IlamyCalendar};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7XG5cdENlbGxDbGlja0luZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlc291cmNlIGNhbGVuZGFyIHR5cGVzXG5leHBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbi8qKlxuICogQ29udmVydHMgYSBEYXlqcyBvYmplY3QgdG8gYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIHJlcHJlc2VudGF0aW9uLlxuICogSW4gRmxvYXRpbmcgVGltZSwgd2UgdXNlIGEgVVRDIERhdGUgb2JqZWN0IGJ1dCBzZXQgaXRzIFVUQyBjb21wb25lbnRzXG4gKiB0byBtYXRjaCB0aGUgbG9jYWwgY29tcG9uZW50cyBvZiB0aGUgdXNlcidzIGRhdGUuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIFJSdWxlIGV2YWx1YXRpb24gYmVjYXVzZSBpdCBlbnN1cmVzIHRoYXQgYSBydWxlXG4gKiBsaWtlIFwiRXZlcnkgV2VkbmVzZGF5XCIgcmVmZXJzIHRvIHRoZSB1c2VyJ3MgbG9jYWwgV2VkbmVzZGF5LCBldmVuIGlmXG4gKiB0aGF0IHRpbWUgZmFsbHMgb24gYSBUaHVyc2RheSBpbiBhY3R1YWwgVVRDLlxuICovXG5jb25zdCB0b0Zsb2F0aW5nRGF0ZSA9IChkOiBkYXlqcy5EYXlqcyk6IERhdGUgPT4ge1xuXHRyZXR1cm4gbmV3IERhdGUoXG5cdFx0RGF0ZS5VVEMoXG5cdFx0XHRkLnllYXIoKSxcblx0XHRcdGQubW9udGgoKSxcblx0XHRcdGQuZGF0ZSgpLFxuXHRcdFx0ZC5ob3VyKCksXG5cdFx0XHRkLm1pbnV0ZSgpLFxuXHRcdFx0ZC5zZWNvbmQoKSxcblx0XHRcdGQubWlsbGlzZWNvbmQoKVxuXHRcdClcblx0KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgXCJGbG9hdGluZyBUaW1lXCIgRGF0ZSBiYWNrIHRvIGEgRGF5anMgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBjb250ZXh0LlxuICogSXQgdGFrZXMgdGhlIFlNREhNUyBjb21wb25lbnRzIGZyb20gdGhlIFVUQyBEYXRlIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlXG4gKiByZWZlcmVuY2UgRGF5anMgb2JqZWN0IChwcmVzZXJ2aW5nIGl0cyB0aW1lem9uZS9sb2NhbGUpLlxuICovXG5jb25zdCBmcm9tRmxvYXRpbmdEYXRlID0gKGRhdGU6IERhdGUsIHJlZmVyZW5jZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqcyA9PiB7XG5cdHJldHVybiByZWZlcmVuY2Vcblx0XHQueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpXG5cdFx0Lm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSlcblx0XHQuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSlcblx0XHQuaG91cihkYXRlLmdldFVUQ0hvdXJzKCkpXG5cdFx0Lm1pbnV0ZShkYXRlLmdldFVUQ01pbnV0ZXMoKSlcblx0XHQuc2Vjb25kKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuXHRcdC5taWxsaXNlY29uZChkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRyZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG4vKipcbiAqIENvbnNpc3RlbnRseSBkZXJpdmVzIGEgcGFyZW50IFVJRCBmcm9tIGFuIGV2ZW50LlxuICogVXNlcyB0aGUgZXhwbGljaXQgYHVpZGAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBgJHtpZH1AaWxhbXkuY2FsZW5kYXJgLlxuICovXG5jb25zdCBnZXRFdmVudFBhcmVudFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IGRheWpzLkRheWpzXG5cdGVuZERhdGU6IGRheWpzLkRheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzLmluY2x1ZGVzKGV2ZW50U3RhcnRJU08pXG5cdFx0XHRcdFx0aWYgKGlzRXhjbHVkZWQpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZpbHRlciB0byBvbmx5IGluY2x1ZGUgZXZlbnRzIHRoYXQgc3BhbiB0aHJvdWdoIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgZGF0ZSByYW5nZVxuXHRcdFx0XHQvLyBBbiBldmVudCBzcGFucyB0aGUgcmFuZ2UgaWY6IGV2ZW50X3N0YXJ0IDwgcmFuZ2VfZW5kIEFORCBldmVudF9lbmQgPiByYW5nZV9zdGFydFxuXHRcdFx0XHQvLyBVc2UgaXNTYW1lT3JCZWZvcmUvaXNTYW1lT3JBZnRlciB0byBpbmNsdWRlIGJvdW5kYXJ5IGNhc2VzXG5cdFx0XHRcdGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSkgJiZcblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpXG5cblx0XHRcdFx0cmV0dXJuIGV2ZW50U3BhbnNSYW5nZVxuXHRcdFx0fSlcblxuXHRcdHJldHVybiByZWN1cnJpbmdFdmVudHNcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBIYW5kbGUgaW52YWxpZCBSUlVMRSBvcHRpb25zXG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEludmFsaWQgUlJVTEUgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShldmVudC5ycnVsZSl9LiBFcnJvcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gXG5cdFx0KVxuXHR9XG59XG5cbmludGVyZmFjZSBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzIHtcblx0dGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdHVwZGF0ZXMsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBiYXNlIGV2ZW50IGFuZCBjcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudFxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0ZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnQgd2l0aCByZWN1cnJlbmNlSWRcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnRJZCA9IGAke3RhcmdldEV2ZW50LmlkfV9tb2RpZmllZF8ke0RhdGUubm93KCl9YFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBmaXggdGhlIHR5cGVzXG5cdFx0XHRcdC4uLm9taXRLZXlzKHRhcmdldEV2ZW50LCBbJ3dpZHRoJywgJ2hlaWdodCcsICd0b3AnLCAnbGVmdCcsICdyaWdodCddKSxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0aWQ6IG1vZGlmaWVkRXZlbnRJZCxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB0YXJnZXRFdmVudFN0YXJ0SVNPLCAvLyBUaGlzIG1hcmtzIGl0IGFzIGEgbW9kaWZpZWQgaW5zdGFuY2Vcblx0XHRcdFx0dWlkOiBnZXRFdmVudFBhcmVudFVJRChiYXNlRXZlbnQpLCAvLyBLZWVwIHNhbWUgVUlEIGFzIGJhc2UgZXZlbnQgKGlDYWxlbmRhciBzdGFuZGFyZClcblx0XHRcdFx0cnJ1bGU6IHVuZGVmaW5lZCwgLy8gU3RhbmRhbG9uZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobW9kaWZpZWRFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBvcmlnaW5hbCBzZXJpZXMgYW5kIGNyZWF0ZSBuZXcgc2VyaWVzXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Ly8gVXBkYXRlIG9yaWdpbmFsIHNlcmllcyB3aXRoIFVOVElMIHRvIGVuZCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogdGVybWluYXRpb25EYXRlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIG5ldyBzZXJpZXMgc3RhcnRpbmcgZnJvbSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNTdGFydFRpbWUgPSB1cGRhdGVzLnN0YXJ0IHx8IHRhcmdldEV2ZW50LnN0YXJ0XG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFbmRUaW1lID1cblx0XHRcdFx0dXBkYXRlcy5lbmQgfHwgbmV3U2VyaWVzU3RhcnRUaW1lLmFkZChvcmlnaW5hbER1cmF0aW9uKVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzSWQgPSBgJHtiYXNlRXZlbnQuaWR9X2ZvbGxvd2luZ2Bcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1VJRCA9IGAke25ld1Nlcmllc0lkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0Li4udXBkYXRlcy5ycnVsZSxcblx0XHRcdFx0XHRkdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUudG9EYXRlKCksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBuZXdTZXJpZXNJZCxcblx0XHRcdFx0dWlkOiBuZXdTZXJpZXNVSUQsIC8vIE5ldyBVSUQgZm9yIG5ldyBzZXJpZXNcblx0XHRcdFx0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZSxcblx0XHRcdFx0ZW5kOiBuZXdTZXJpZXNFbmRUaW1lLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHVuZGVmaW5lZCwgLy8gVGhpcyBpcyBhIG5ldyBiYXNlIGV2ZW50LCBub3QgYW4gaW5zdGFuY2Vcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChuZXdTZXJpZXNFdmVudClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnYWxsJzoge1xuXHRcdFx0Ly8gXCJBbGwgZXZlbnRzXCIgLSBVcGRhdGUgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEludmFsaWQgc2NvcGU6ICR7c2NvcGV9LiBNdXN0IGJlICd0aGlzJywgJ2ZvbGxvd2luZycsIG9yICdhbGwnYFxuXHRcdFx0KVxuXHR9XG5cblx0cmV0dXJuIHVwZGF0ZWRFdmVudHNcbn1cblxuaW50ZXJmYWNlIERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHRjdXJyZW50RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0c2NvcGU6ICd0aGlzJyB8ICdmb2xsb3dpbmcnIHwgJ2FsbCdcbn1cblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gKHtcblx0dGFyZ2V0RXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHNjb3BlLFxufTogRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBbLi4uY3VycmVudEV2ZW50c11cblxuXHQvLyBGaW5kIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuXHRjb25zdCB0YXJnZXRVaWQgPSBnZXRFdmVudFBhcmVudFVJRCh0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuXHRcdHJldHVybiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gdGFyZ2V0VWlkICYmIGUucnJ1bGUgJiYgIWUucmVjdXJyZW5jZUlkXG5cdH0pXG5cblx0aWYgKGJhc2VFdmVudEluZGV4ID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQmFzZSByZWN1cnJpbmcgZXZlbnQgbm90IGZvdW5kJylcblx0fVxuXG5cdGNvbnN0IGJhc2VFdmVudCA9IHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdXG5cblx0c3dpdGNoIChzY29wZSkge1xuXHRcdGNhc2UgJ3RoaXMnOiB7XG5cdFx0XHQvLyBcIlRoaXMgZXZlbnQgb25seVwiIC0gQWRkIEVYREFURSB0byBleGNsdWRlIHRoaXMgb2NjdXJyZW5jZVxuXHRcdFx0Y29uc3QgdGFyZ2V0RXZlbnRTdGFydElTTyA9IHRhcmdldEV2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcblx0XHRcdGNvbnN0IGV4aXN0aW5nRXhkYXRlcyA9IGJhc2VFdmVudC5leGRhdGVzIHx8IFtdXG5cdFx0XHRjb25zdCB1cGRhdGVkRXhkYXRlcyA9IFsuLi5leGlzdGluZ0V4ZGF0ZXMsIHRhcmdldEV2ZW50U3RhcnRJU09dXG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7IC4uLmJhc2VFdmVudCwgZXhkYXRlczogdXBkYXRlZEV4ZGF0ZXMgfVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgc2VyaWVzIHdpdGggVU5USUwgYmVmb3JlIHRhcmdldCBkYXRlXG5cblx0XHRcdC8vIENhbGN1bGF0ZSB0aGUgdGVybWluYXRpb24gZGF0ZTogZGF5IGJlZm9yZSB0YXJnZXQgd2l0aCBlbmQgb2YgZGF5IHRpbWVcblx0XHRcdC8vIFRoaXMgZW5zdXJlcyB0aGUgbGFzdCBvY2N1cnJlbmNlIGJlZm9yZSB0YXJnZXQgaXMgaW5jbHVkZWQgaW4gdGhlIHRlcm1pbmF0ZWQgc2VyaWVzXG5cdFx0XHRjb25zdCBkYXlCZWZvcmVUYXJnZXQgPSB0YXJnZXRFdmVudC5zdGFydC5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0XHRcdGNvbnN0IHRlcm1pbmF0aW9uRGF0ZSA9IGRheUJlZm9yZVRhcmdldC5lbmRPZignZGF5JykudG9EYXRlKClcblxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gJ3RhaWx3aW5kLW1lcmdlJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG5cdGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuXHRpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG5cdFx0cmV0dXJuIGRhdGVcblx0fVxuXHRjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcblx0cmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuXHRvYmo6IFQsXG5cdGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGRlbGV0ZSByZXN1bHRba2V5XVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcblx0VElucHV0IGV4dGVuZHMge1xuXHRcdHN0YXJ0OiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0XHRlbmQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHR9LFxuXHRUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcblx0aWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5ldmVudCxcblx0XHRcdHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuXHRcdFx0ZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuXHRcdH0gYXMgVE91dHB1dFxuXHR9KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRBbmltYXRlUHJlc2VuY2UsXG5cdHR5cGUgSFRNTE1vdGlvblByb3BzLFxuXHRtb3Rpb24sXG5cdHR5cGUgVmFyaWFudHMsXG59IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgQW5pbWF0ZWRTZWN0aW9uUHJvcHNcblx0ZXh0ZW5kcyBPbWl0PEhUTUxNb3Rpb25Qcm9wczwnZGl2Jz4sICdjaGlsZHJlbicgfCAnbGF5b3V0JyB8ICdsYXlvdXRJZCc+IHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuXHR0cmFuc2l0aW9uS2V5OiBzdHJpbmdcblx0ZGVsYXk/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpcmVjdGlvbj86ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblx0bGF5b3V0PzogYm9vbGVhbiB8ICdwb3NpdGlvbicgfCAnc2l6ZScgfCAncHJlc2VydmUtYXNwZWN0J1xuXHRsYXlvdXRJZD86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IHZhcmlhbnRzOiBWYXJpYW50cyA9IHtcblx0aGlkZGVuOiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdH0pLFxuXHR2aXNpYmxlOiAoeyBkZWxheSB9OiB7IGRlbGF5OiBudW1iZXIgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAxLFxuXHRcdHg6IDAsXG5cdFx0eTogMCxcblx0XHR0cmFuc2l0aW9uOiB7IGR1cmF0aW9uOiAwLjIsIGVhc2U6IFswLjQsIDAsIDAuMiwgMV0sIGRlbGF5IH0sXG5cdH0pLFxuXHRleGl0OiAoeyBkaXJlY3Rpb24gfTogeyBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfSkgPT4gKHtcblx0XHRvcGFjaXR5OiAwLFxuXHRcdHg6IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gLTEwIDogMCxcblx0XHR5OiBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAtMTAgOiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMTUgfSxcblx0fSksXG59XG5cbmV4cG9ydCBjb25zdCBBbmltYXRlZFNlY3Rpb246IFJlYWN0LkZDPEFuaW1hdGVkU2VjdGlvblByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHR0cmFuc2l0aW9uS2V5LFxuXHRkZWxheSA9IDAsXG5cdGNsYXNzTmFtZSxcblx0ZGlyZWN0aW9uID0gJ3ZlcnRpY2FsJyxcblx0bGF5b3V0LFxuXHRsYXlvdXRJZCxcblx0J2RhdGEtdGVzdGlkJzogdGVzdElkLFxuXHRyZWYsXG5cdC4uLnByb3BzXG59KSA9PiAoXG5cdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0YW5pbWF0ZT1cInZpc2libGVcIlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignaW5saW5lLWJsb2NrIHctZnVsbCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRjdXN0b209e3sgZGVsYXksIGRpcmVjdGlvbiB9fVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdGV4aXQ9XCJleGl0XCJcblx0XHRcdGluaXRpYWw9XCJoaWRkZW5cIlxuXHRcdFx0a2V5PXt0cmFuc2l0aW9uS2V5fVxuXHRcdFx0bGF5b3V0PXtsYXlvdXR9XG5cdFx0XHRsYXlvdXRJZD17bGF5b3V0SWR9XG5cdFx0XHRyZWY9e3JlZn1cblx0XHRcdHZhcmlhbnRzPXt2YXJpYW50c31cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9tb3Rpb24uZGl2PlxuXHQ8L0FuaW1hdGVQcmVzZW5jZT5cbilcblxuQW5pbWF0ZWRTZWN0aW9uLmRpc3BsYXlOYW1lID0gJ0FuaW1hdGVkU2VjdGlvbidcbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcblx0Y29uc3QgYWN0aXZlRXZlbnRSZWYgPSB1c2VSZWY8Q2FsZW5kYXJFdmVudD4obnVsbClcblx0Y29uc3QgZHJhZ092ZXJsYXlSZWYgPSB1c2VSZWY8e1xuXHRcdHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0fT4obnVsbClcblxuXHRjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogY29udGV4dC5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0fSkpXG5cblx0Ly8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcblx0Y29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcblx0XHRpc09wZW46IGJvb2xlYW5cblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRldmVudDogbnVsbCxcblx0XHR1cGRhdGVzOiBudWxsLFxuXHR9KVxuXG5cdC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcblx0Y29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcblx0XHQvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcblx0XHRhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuXHRcdFx0ZGlzdGFuY2U6IDIsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuXHRcdC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkZWxheTogMTAwLFxuXHRcdFx0dG9sZXJhbmNlOiA1LFxuXHRcdH0sXG5cdH0pXG5cblx0Y29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG5cdC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG5cdGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdCkgPT4ge1xuXHRcdC8vIFZhbGlkYXRlIGlucHV0c1xuXHRcdGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0fSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG5cdFx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0aWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG5cdFx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcblx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuXHRcdFx0fSlcblx0XHR9IGNhdGNoIHtcblx0XHRcdC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG5cdFx0Ly8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcblx0XHRpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuXHRcdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcblx0XHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdXBkYXRlZEV2ZW50ID0gZ2V0VXBkYXRlZEV2ZW50KGV2ZW50LCBhY3RpdmVFdmVudFJlZi5jdXJyZW50KVxuXHRcdGlmICh1cGRhdGVkRXZlbnQpIHtcblx0XHRcdGNvbnN0IHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfSA9IHVwZGF0ZWRFdmVudFxuXHRcdFx0cGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuXHRcdH1cblxuXHRcdC8vIENsZWFyIHRoZSBhY3RpdmUgZXZlbnQgcmVmZXJlbmNlXG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChudWxsKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdH1cblxuXHQvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcblx0aWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuXHRcdHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEbmRDb250ZXh0XG5cdFx0XHRcdGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cblx0XHRcdFx0b25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuXHRcdFx0XHRvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG5cdFx0XHRcdG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG5cdFx0XHRcdHNlbnNvcnM9e3NlbnNvcnN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PEV2ZW50RHJhZ092ZXJsYXkgcmVmPXtkcmFnT3ZlcmxheVJlZn0gLz5cblx0XHRcdDwvRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG5cdFx0XHRcdG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG5cdFx0XHQvPlxuXHRcdDwvPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG5cdFwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHdoaXRlc3BhY2Utbm93cmFwIHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCBzaHJpbmstMCBbJl9zdmddOnNocmluay0wIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmVcIixcblx0e1xuXHRcdHZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAnLFxuXHRcdFx0XHRkZXN0cnVjdGl2ZTpcblx0XHRcdFx0XHQnYmctZGVzdHJ1Y3RpdmUgdGV4dC13aGl0ZSBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG5cdFx0XHRcdG91dGxpbmU6XG5cdFx0XHRcdFx0J2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuXHRcdFx0XHRzZWNvbmRhcnk6XG5cdFx0XHRcdFx0J2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG5cdFx0XHRcdGdob3N0OlxuXHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG5cdFx0XHRcdGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG5cdFx0XHR9LFxuXHRcdFx0c2l6ZToge1xuXHRcdFx0XHRkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuXHRcdFx0XHRzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG5cdFx0XHRcdGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00Jyxcblx0XHRcdFx0aWNvbjogJ3NpemUtOScsXG5cdFx0XHRcdCdpY29uLXNtJzogJ3NpemUtOCcsXG5cdFx0XHRcdCdpY29uLWxnJzogJ3NpemUtMTAnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdGRlZmF1bHRWYXJpYW50czoge1xuXHRcdFx0dmFyaWFudDogJ2RlZmF1bHQnLFxuXHRcdFx0c2l6ZTogJ2RlZmF1bHQnLFxuXHRcdH0sXG5cdH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHR2YXJpYW50LFxuXHRzaXplLFxuXHRhc0NoaWxkID0gZmFsc2UsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuXHRWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcblx0XHRhc0NoaWxkPzogYm9vbGVhblxuXHR9KSB7XG5cdGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cblx0cmV0dXJuIChcblx0XHQ8Q29tcFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJidXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctb3ZlcmxheVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cblx0XHRcdDxEaWFsb2dPdmVybGF5IC8+XG5cdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctYmFja2dyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZml4ZWQgdG9wLVs1MCVdIGxlZnQtWzUwJV0gei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSB0cmFuc2xhdGUteC1bLTUwJV0gdHJhbnNsYXRlLXktWy01MCVdIGdhcC00IHJvdW5kZWQtbGcgYm9yZGVyIHAtNiBzaGFkb3ctbGcgZHVyYXRpb24tMjAwIHNtOm1heC13LWxnIG1heC1oLVs5MCVdJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuXHRcdFx0XHRcdDxYSWNvbiAvPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cblx0XHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG5cdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvRGlhbG9nUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCBnYXAtMiB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ2xvc2UsXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dGb290ZXIsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nT3ZlcmxheSxcblx0RGlhbG9nUG9ydGFsLFxuXHREaWFsb2dUaXRsZSxcblx0RGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcblxuLyoqXG4gKiBHZW5lcmljIGhvb2sgdGhhdCBkZXRlY3RzIHdoaWNoIGNhbGVuZGFyIGNvbnRleHQgaXMgYXZhaWxhYmxlIGFuZCByZXR1cm5zIHNlbGVjdGVkIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KHNlbGVjdG9yOiAoY29udGV4dCkgPT4gVCk6IFQge1xuXHQvLyBDaGVjayBib3RoIGNvbnRleHRzIHVzaW5nIHVzZUNvbnRleHQgZGlyZWN0bHkgKG5vIGhvb2tzKVxuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdGlmIChyZXNvdXJjZUNvbnRleHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IocmVzb3VyY2VDb250ZXh0KVxuXHR9XG5cblx0aWYgKHJlZ3VsYXJDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9yKHJlZ3VsYXJDb250ZXh0KVxuXHR9XG5cblx0Ly8gSWYgbmVpdGhlciBjb250ZXh0IGlzIGF2YWlsYWJsZSwgdGhyb3cgYW4gZXJyb3Jcblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxuXHRSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25LZXkgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdGN1cnJlbnRMb2NhbGU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nOiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG5cdHRpbWVGb3JtYXQ6IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuXHRjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuXHR9XG5cdHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuXHRyZWFkb25seSB2aWV3OiBDYWxlbmRhclZpZXdcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG5cdHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuXHRcdClcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdHZpZXc6IGNvbnRleHQudmlldyxcblx0XHRldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG5cdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGNvbnRleHQuc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdH0gYXMgY29uc3Rcbn1cbiIsCiAgICAiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNvbnRleHRUeXBlLFxuXHRVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENlbGxDbGlja0luZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlUmVzb3VyY2VzOiBTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuXHRnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IGJvb2xlYW5cblx0Z2V0RXZlbnRSZXNvdXJjZUlkczogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiAoc3RyaW5nIHwgbnVtYmVyKVtdXG5cblx0Ly8gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZyb20gY2FsZW5kYXIgY29udGV4dFxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuXHRSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcblx0Y29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHQndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblx0cmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuXHRleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgcmVzb3VyY2VzOiBSZXNvdXJjZVtdXG5cdHJlYWRvbmx5IGdldEV2ZW50c0ZvclJlc291cmNlOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID1cblx0KCk6IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRcdGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0J3VzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0XHRcdClcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0fSBhcyBjb25zdFxuXHR9XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxkYXlqcy5EYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcblx0XHRzdGFydERhdGU6IGRheWpzLkRheWpzLFxuXHRcdGVuZERhdGU6IGRheWpzLkRheWpzXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHN0cmluZ1xufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBkYXlqcy5NYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oaW5pdGlhbERhdGUpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblxuXHRjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHtcblx0XHRcdHJldHVybiB0cmFuc2xhdG9yXG5cdFx0fVxuXHRcdGlmICh0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuXHRcdH1cblx0XHRyZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cblx0XHRcdGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuXHRcdFx0XHRpZiAoZXZlbnQucnJ1bGUpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChcblx0XHRcdFx0XHRcdC4uLmdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGVuZHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IHNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXHRcdFx0XHRcdGlmIChzdGFydHNJblJhbmdlIHx8IGVuZHNJblJhbmdlIHx8IHNwYW5zUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmICh2aWV3ID09PSAnZGF5Jykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcblx0XHRcdFx0ZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0XHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdFx0ZW5kOiB3ZWVrRGF5c1s2XS5lbmRPZignZGF5JyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG1vbnRoIHZpZXdcblx0XHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzKSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUpIHtcblx0XHRcdGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihkYXRlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHRcdD8gcHJldi5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHRcdDogcHJldi5zdWJ0cmFjdCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuXHRcdFx0XHRyZXR1cm4gbmV3RGF0ZVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt2aWV3LCBvbkRhdGVDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y29uc3QgbmV3RGF0ZSA9IGRheWpzKClcblx0XHRzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuXHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5pZCAhPT0gZXZlbnRJZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGV2ZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cdFx0XHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdFx0XHRcdHJldHVybiBuZXdFdmVudFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2LmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRcdGlmIChldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0bW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogZGF5anMuRGF5anMgLy8gUmVmZXJlbmNlIGRhdGUgdG8gc2V0IHRoZSBob3VycyBvbiAoZGVmYXVsdCBpcyB0b2RheSlcblx0bGVuZ3RoPzogbnVtYmVyIC8vIE51bWJlciBvZiBob3VycyBpbiB0aGUgZGF5IChkZWZhdWx0IGlzIDI0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IGRheWpzLkRheWpzW10ge1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRyZWZlcmVuY2VEYXRlLmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgaXNUaW1lQ2VsbCA9IG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gb3Zlci5kYXRhLmN1cnJlbnQgfHwge31cblx0bGV0IG5ld1N0YXJ0XG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHsgRGlhbG9nRm9vdGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgVGltZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS90aW1lLXBpY2tlcidcbmltcG9ydCB7IGlzQnVzaW5lc3NEYXkgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHtcblx0YnVpbGREYXRlVGltZSxcblx0YnVpbGRFbmREYXRlVGltZSxcblx0Z2V0VGltZUNvbnN0cmFpbnRzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2V2ZW50LWZvcm0tdXRpbHMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHtcblx0XHR2YWx1ZTogYGJnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDBgLFxuXHRcdGxhYmVsOiAnQmx1ZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMGAsXG5cdFx0bGFiZWw6ICdHcmVlbicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwYCxcblx0XHRsYWJlbDogJ1B1cnBsZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJlZC0xMDAgdGV4dC1yZWQtODAwYCxcblx0XHRsYWJlbDogJ1JlZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwYCxcblx0XHRsYWJlbDogJ1llbGxvdycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXBpbmstMTAwIHRleHQtcGluay04MDBgLFxuXHRcdGxhYmVsOiAnUGluaycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwYCxcblx0XHRsYWJlbDogJ0luZGlnbycsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMGAsXG5cdFx0bGFiZWw6ICdBbWJlcicsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDBgLFxuXHRcdGxhYmVsOiAnRW1lcmFsZCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXNreS0xMDAgdGV4dC1za3ktODAwYCxcblx0XHRsYWJlbDogJ1NreScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwYCxcblx0XHRsYWJlbDogJ1Zpb2xldCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXJvc2UtMTAwIHRleHQtcm9zZS04MDBgLFxuXHRcdGxhYmVsOiAnUm9zZScsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLXRlYWwtMTAwIHRleHQtdGVhbC04MDBgLFxuXHRcdGxhYmVsOiAnVGVhbCcsXG5cdH0sXG5cdHtcblx0XHR2YWx1ZTogYGJnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwYCxcblx0XHRsYWJlbDogJ09yYW5nZScsXG5cdH0sXG5dXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3Qge1xuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0dGltZUZvcm1hdDogY29udGV4dC50aW1lRm9ybWF0LFxuXHRcdGdldFJlc291cmNlQnlJZDogY29udGV4dC5nZXRSZXNvdXJjZUJ5SWQsXG5cdH0pKVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0aWYgKGRhdGUgJiYgZGF5anMoZGF0ZSkuaXNCZWZvcmUoZGF5anMoc3RhcnREYXRlKSkpIHtcblx0XHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdC8vIFRpbWUgdmFsaWRhdGlvbiBoYW5kbGVycyAtIG9ubHkgdmFsaWRhdGUgd2hlbiBkYXRlcyBhcmUgdGhlIHNhbWVcblx0Y29uc3QgaGFuZGxlU3RhcnRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lID4gZW5kVGltZSkge1xuXHRcdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0RW5kVGltZSh0aW1lKVxuXHRcdC8vIE9ubHkgdmFsaWRhdGUgaWYgc2FtZSBkYXlcblx0XHRpZiAoZGF5anMoc3RhcnREYXRlKS5pc1NhbWUoZGF5anMoZW5kRGF0ZSksICdkYXknKSAmJiB0aW1lIDwgc3RhcnRUaW1lKSB7XG5cdFx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHQvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG5cdGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuXHRcdGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuXHQpID0+IHtcblx0XHRjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuXHRcdHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG5cdH1cblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG5cdFx0aWYgKGlzQWxsRGF5KSB7XG5cdFx0XHRzZXRFbmRUaW1lKCcyMzo1OScpXG5cdFx0fVxuXHR9LCBbaXNBbGxEYXldKVxuXG5cdGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcblx0XHRlLnByZXZlbnREZWZhdWx0KClcblxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IGJ1aWxkRW5kRGF0ZVRpbWUoZW5kRGF0ZSwgZW5kVGltZSwgaXNBbGxEYXkpXG5cblx0XHRjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG5cdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdHJlc291cmNlSWQ6IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsXG5cdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQgJiYgaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0b3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuXHRcdFx0XHR0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcblx0XHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdFx0YWxsRGF5OiBpc0FsbERheSxcblx0XHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHRvblVwZGF0ZT8uKGV2ZW50RGF0YSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b25BZGQ/LihldmVudERhdGEpXG5cdFx0fVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuXHRcdFx0aWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdFx0Ly8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuXHRcdFx0XHRvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRcdHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuXHRcdFx0fVxuXHRcdFx0b25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuXHRcdFx0b25DbG9zZSgpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcblx0XHRpZiAoIW5ld1JSdWxlKSB7XG5cdFx0XHRzZXRScnVsZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBidWlsZERhdGVUaW1lKHN0YXJ0RGF0ZSwgc3RhcnRUaW1lLCBpc0FsbERheSlcblx0XHRzZXRScnVsZSh7IC4uLm5ld1JSdWxlLCBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpIH0pXG5cdH1cblxuXHQvLyBVc2UgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gZ2xvYmFsXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCByZXNvdXJjZUlkID0gc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZFxuXHRcdGlmIChyZXNvdXJjZUlkICYmIGdldFJlc291cmNlQnlJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZUJ5SWQocmVzb3VyY2VJZClcblx0XHRcdGlmIChyZXNvdXJjZT8uYnVzaW5lc3NIb3Vycykge1xuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2UuYnVzaW5lc3NIb3Vyc1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYnVzaW5lc3NIb3Vyc1xuXHR9LCBbc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCwgZ2V0UmVzb3VyY2VCeUlkLCBidXNpbmVzc0hvdXJzXSlcblxuXHRjb25zdCBkaXNhYmxlZERhdGVNYXRjaGVyID0gZWZmZWN0aXZlQnVzaW5lc3NIb3Vyc1xuXHRcdD8gKGRhdGU6IERhdGUpID0+ICFpc0J1c2luZXNzRGF5KGRheWpzKGRhdGUpLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgc3RhcnRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhzdGFydERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdGNvbnN0IGVuZENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKGVuZERhdGUsIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PGZvcm0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cInRpdGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwiZGVzY3JpcHRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnZGVzY3JpcHRpb24nKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVzY3JpcHRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJhbGxEYXlcIlxuXHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImFsbERheVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0RGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17c3RhcnREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZW5kRGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0eyFpc0FsbERheSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ3N0YXJ0VGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtzdGFydENvbnN0cmFpbnRzLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cInN0YXJ0LXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17c3RhcnRUaW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmRUaW1lJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4VGltZT17ZW5kQ29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtlbmRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJlbmQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZW5kVGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImxvY2F0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImxvY2F0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBNYXRjaGVyIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcblx0ZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuXHRvbkNoYW5nZT86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGxhYmVsPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxuXHRkaXNhYmxlZD86IE1hdGNoZXIgfCBNYXRjaGVyW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF0ZSB8IHVuZGVmaW5lZD4oZGF0ZSlcblxuXHQvLyBTeW5jIGRhdGUgc3RhdGUgd2l0aCBkYXRlIHByb3Bcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuXHRcdFx0XHRcdDxDYWxlbmRhclxuXHRcdFx0XHRcdFx0Y2FwdGlvbkxheW91dD1cImRyb3Bkb3duXCJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0bW9kZT1cInNpbmdsZVwiXG5cdFx0XHRcdFx0XHRvblNlbGVjdD17aGFuZGxlRGF0ZVNlbGVjdH1cblx0XHRcdFx0XHRcdHNlbGVjdGVkPXtzZWxlY3RlZERhdGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQge1xuXHRDaGV2cm9uRG93bkljb24sXG5cdENoZXZyb25MZWZ0SWNvbixcblx0Q2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuXHRjbGFzc05hbWUsXG5cdGNsYXNzTmFtZXMsXG5cdHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG5cdGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuXHRidXR0b25WYXJpYW50ID0gJ2dob3N0Jyxcblx0Zm9ybWF0dGVycyxcblx0Y29tcG9uZW50cyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuXHRidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRyZXR1cm4gKFxuXHRcdDxEYXlQaWNrZXJcblx0XHRcdGNhcHRpb25MYXlvdXQ9e2NhcHRpb25MYXlvdXR9XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRjbGFzc05hbWVzPXt7XG5cdFx0XHRcdHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuXHRcdFx0XHRtb250aHM6IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcblx0XHRcdFx0bmF2OiBjbihcblx0XHRcdFx0XHQnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fcHJldmlvdXM6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRidXR0b25fbmV4dDogY24oXG5cdFx0XHRcdFx0YnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuXHRcdFx0XHRcdCdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcblx0XHRcdFx0KSxcblx0XHRcdFx0bW9udGhfY2FwdGlvbjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bnM6IGNuKFxuXHRcdFx0XHRcdCd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duX3Jvb3Q6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRyb3Bkb3duOiBjbihcblx0XHRcdFx0XHQnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cblx0XHRcdFx0KSxcblx0XHRcdFx0Y2FwdGlvbl9sYWJlbDogY24oXG5cdFx0XHRcdFx0J3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG5cdFx0XHRcdFx0XHQ/ICd0ZXh0LXNtJ1xuXHRcdFx0XHRcdFx0OiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuXHRcdFx0XHR3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG5cdFx0XHRcdHdlZWtkYXk6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuXHRcdFx0XHR3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHR3ZWVrX251bWJlcjogY24oXG5cdFx0XHRcdFx0J3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkYXk6IGNuKFxuXHRcdFx0XHRcdCdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdHByb3BzLnNob3dXZWVrTnVtYmVyXG5cdFx0XHRcdFx0XHQ/ICdbJjpudGgtY2hpbGQoMilbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCdcblx0XHRcdFx0XHRcdDogJ1smOmZpcnN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9zdGFydDogY24oXG5cdFx0XHRcdFx0J3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG5cdFx0XHRcdCksXG5cdFx0XHRcdHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG5cdFx0XHRcdHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuXHRcdFx0XHR0b2RheTogY24oXG5cdFx0XHRcdFx0J2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRvdXRzaWRlOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGRpc2FibGVkOiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG5cdFx0XHRcdCksXG5cdFx0XHRcdGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG5cdFx0XHRcdC4uLmNsYXNzTmFtZXMsXG5cdFx0XHR9fVxuXHRcdFx0Y29tcG9uZW50cz17e1xuXHRcdFx0XHRSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcblx0XHRcdFx0XHRcdFx0cmVmPXtyb290UmVmfVxuXHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Q2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0RGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcblx0XHRcdFx0V2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PHRkIHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQuLi5jb21wb25lbnRzLFxuXHRcdFx0fX1cblx0XHRcdGZvcm1hdHRlcnM9e3tcblx0XHRcdFx0Zm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG5cdFx0XHRcdFx0ZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG5cdFx0XHRcdC4uLmZvcm1hdHRlcnMsXG5cdFx0XHR9fVxuXHRcdFx0c2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYWxlbmRhckRheUJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0ZGF5LFxuXHRtb2RpZmllcnMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5QnV0dG9uPikge1xuXHRjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuXHRjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG1vZGlmaWVycy5mb2N1c2VkKSB7XG5cdFx0XHRyZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdH1cblx0fSwgW21vZGlmaWVycy5mb2N1c2VkXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcblx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cblx0XHRcdGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuXHRcdFx0ZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuXHRcdFx0ZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuXHRcdFx0XHRtb2RpZmllcnMuc2VsZWN0ZWQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuXHRcdFx0XHQhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuXHRcdFx0fVxuXHRcdFx0cmVmPXtyZWZ9XG5cdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIENhbGVuZGFyRGF5QnV0dG9uIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGVXaGVlbCA9IChlOiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuXHQvLyBQcmV2ZW50IGV2ZW50IGZyb20gYnViYmxpbmcgdG8gcHJldmVudCBQb3BvdmVyIGZyb20gY2xvc2luZ1xuXHRlLnN0b3BQcm9wYWdhdGlvbigpXG59XG5cbmludGVyZmFjZSBUaW1lUGlja2VyUHJvcHMge1xuXHR2YWx1ZTogc3RyaW5nXG5cdG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0cGxhY2Vob2xkZXI/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxuXHRuYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lUGlja2VyKHtcblx0dmFsdWUsXG5cdG9uQ2hhbmdlLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdHBsYWNlaG9sZGVyID0gJ1NlbGVjdCB0aW1lLi4uJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCA9IGZhbHNlLFxuXHRuYW1lLFxufTogVGltZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VhcmNoLCBzZXRTZWFyY2hdID0gdXNlU3RhdGUoJycpXG5cdGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG5cdGNvbnN0IFt0cmlnZ2VyV2lkdGgsIHNldFRyaWdnZXJXaWR0aF0gPSB1c2VTdGF0ZTxudW1iZXI+KDApXG5cblx0Y29uc3QgeyB0aW1lT3B0aW9ucywgZm9ybWF0VGltZSB9ID0gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdFx0dGltZUZvcm1hdCxcblx0XHRtaW5UaW1lLFxuXHRcdG1heFRpbWUsXG5cdH0pXG5cblx0Ly8gRmlsdGVyIHRpbWUgb3B0aW9ucyBiYXNlZCBvbiBzZWFyY2hcblx0Y29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGltZU9wdGlvbnMuZmlsdGVyKCh0aW1lKSA9PiB7XG5cdFx0Y29uc3QgZm9ybWF0dGVkVGltZSA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRyZXR1cm4gZm9ybWF0dGVkVGltZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKVxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdCA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRvbkNoYW5nZSh0aW1lKVxuXHRcdHNldE9wZW4oZmFsc2UpXG5cdFx0c2V0U2VhcmNoKCcnKVxuXHR9XG5cblx0Ly8gTWVhc3VyZSB0cmlnZ2VyIHdpZHRoIGFuZCBmb2N1cyBpbnB1dCB3aGVuIHBvcG92ZXIgb3BlbnNcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAob3Blbikge1xuXHRcdFx0aWYgKHRyaWdnZXJSZWYuY3VycmVudCkge1xuXHRcdFx0XHRzZXRUcmlnZ2VyV2lkdGgodHJpZ2dlclJlZi5jdXJyZW50Lm9mZnNldFdpZHRoKVxuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHRcdH0sIDApXG5cdFx0fVxuXHR9LCBbb3Blbl0pXG5cblx0Y29uc3QgY3VycmVudFRpbWVTdHJpbmcgPSB2YWx1ZSA/IGZvcm1hdFRpbWUodmFsdWUpIDogcGxhY2Vob2xkZXJcblxuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyIG9uT3BlbkNoYW5nZT17c2V0T3Blbn0gb3Blbj17b3Blbn0+XG5cdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtY29udHJvbHM9XCJ0aW1lLXBpY2tlci1saXN0Ym94XCJcblx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPXtvcGVufVxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0JywgY2xhc3NOYW1lKX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHRpbWUtcGlja2VyLSR7bmFtZX1gfVxuXHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRyZWY9e3RyaWdnZXJSZWZ9XG5cdFx0XHRcdFx0cm9sZT1cImNvbWJvYm94XCJcblx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8Q2xvY2sgY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cblx0XHRcdFx0XHR7Y3VycmVudFRpbWVTdHJpbmd9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdDxQb3BvdmVyQ29udGVudFxuXHRcdFx0XHRhbGlnbj1cInN0YXJ0XCJcblx0XHRcdFx0Y2xhc3NOYW1lPVwicC0wXCJcblx0XHRcdFx0c3R5bGU9e3sgd2lkdGg6IHRyaWdnZXJXaWR0aCB9fVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMiBib3JkZXItYlwiPlxuXHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoKGUudGFyZ2V0LnZhbHVlKX1cblx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiU2VhcmNoIHRpbWUuLi5cIlxuXHRcdFx0XHRcdFx0cmVmPXtpbnB1dFJlZn1cblx0XHRcdFx0XHRcdHZhbHVlPXtzZWFyY2h9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtWzIwMHB4XVwiIG9uV2hlZWw9e2hhbmRsZVdoZWVsfT5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInAtMVwiPlxuXHRcdFx0XHRcdFx0e2ZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgPyAoXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHktNiB0ZXh0LWNlbnRlciB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdE4vQVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdGZpbHRlcmVkT3B0aW9ucy5tYXAoKHRpbWUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU2VsZWN0ZWQgPSB0aW1lID09PSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3JlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB4LTIgcHktMS41IHRleHQtc20gb3V0bGluZS1ub25lIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3QodGltZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dGltZVN0cmluZ31cblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0PC9Qb3BvdmVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmludGVyZmFjZSBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMge1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRtaW5UaW1lPzogc3RyaW5nXG5cdG1heFRpbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRtaW5UaW1lID0gJzAwOjAwJyxcblx0bWF4VGltZSA9ICcyMzo0NScsXG59OiBVc2VBdXRvY29tcGxldGVUaW1lcGlja2VyUHJvcHMpIHtcblx0Ly8gR2VuZXJhdGUgdGltZSBvcHRpb25zICgxNS1taW51dGUgaW50ZXJ2YWxzKSB3aXRoaW4gbWluL21heCByYW5nZVxuXHRjb25zdCB0aW1lT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHRpbWVzOiBzdHJpbmdbXSA9IFtdXG5cdFx0Y29uc3QgW21pbkhvdXIsIG1pbk1pbnV0ZV0gPSBtaW5UaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBbbWF4SG91ciwgbWF4TWludXRlXSA9IG1heFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG5cdFx0Y29uc3QgbWluVG90YWxNaW51dGVzID0gbWluSG91ciAqIDYwICsgbWluTWludXRlXG5cdFx0Y29uc3QgbWF4VG90YWxNaW51dGVzID0gbWF4SG91ciAqIDYwICsgbWF4TWludXRlXG5cblx0XHRmb3IgKFxuXHRcdFx0bGV0IHRvdGFsTWludXRlcyA9IG1pblRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyA8PSBtYXhUb3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgKz0gMTVcblx0XHQpIHtcblx0XHRcdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbE1pbnV0ZXMgLyA2MClcblx0XHRcdGNvbnN0IG1pbnV0ZXMgPSB0b3RhbE1pbnV0ZXMgJSA2MFxuXG5cdFx0XHRjb25zdCB0aW1lU3RyaW5nID0gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHRcdHRpbWVzLnB1c2godGltZVN0cmluZylcblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZXNcblx0fSwgW21pblRpbWUsIG1heFRpbWVdKVxuXG5cdGNvbnN0IGZvcm1hdFRpbWUgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IHBlcmlvZCA9IGhvdXJzID49IDEyID8gJ1BNJyA6ICdBTSdcblx0XHRjb25zdCBkaXNwbGF5SG91cnMgPSBob3VycyA9PT0gMCA/IDEyIDogaG91cnMgPiAxMiA/IGhvdXJzIC0gMTIgOiBob3Vyc1xuXG5cdFx0aWYgKHRpbWVGb3JtYXQgPT09ICcyNC1ob3VyJykge1xuXHRcdFx0cmV0dXJuIGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGAke2Rpc3BsYXlIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YFxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR0aW1lT3B0aW9ucyxcblx0XHRmb3JtYXRUaW1lLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogZGF5anMuRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IGRheWpzLkRheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIFByb2Nlc3MgZ2xvYmFsIGFuZCByZXNvdXJjZSBidXNpbmVzcyBob3VycyBmb3IgZWFjaCBkYXRlXG5cdGZvciAoY29uc3QgZGF0ZSBvZiBhbGxEYXRlcykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHQvLyBGYWxsYmFjayBsb2dpYyBpZiBubyBidXNpbmVzcyBob3VycyBmb3VuZCBmb3Igc3BlY2lmaWMgZGF0ZXNcblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzICYmIGhpZGVOb25CdXNpbmVzc0hvdXJzKSB7XG5cdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3VycywgeyBvbk1hdGNoIH0pXG5cdFx0Zm9yIChjb25zdCByYmggb2YgcmVzb3VyY2VCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhyYmgsIHsgb25NYXRjaCB9KVxuXHRcdH1cblxuXHRcdC8vIEZpbmFsIGZhbGxiYWNrIHRvIGRlZmF1bHQgOS0xNyBpZiBzdGlsbCBub3RoaW5nXG5cdFx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRtaW5TdGFydCA9IDlcblx0XHRcdG1heEVuZCA9IDE3XG5cdFx0XHRoYXNCdXNpbmVzc0hvdXJzID0gdHJ1ZVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2UgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogZGF5anMuRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlczogW2RheWpzRGF0ZV0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VyczogZmFsc2UsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAke21pblN0YXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KG1heEVuZCAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IEZSRVFfTUFQID0ge1xuXHREQUlMWTogUlJ1bGUuREFJTFksXG5cdFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuXHRNT05USExZOiBSUnVsZS5NT05USExZLFxuXHRZRUFSTFk6IFJSdWxlLllFQVJMWSxcbn0gYXMgY29uc3RcbmNvbnN0IEZSRVFfVE9fU1RSID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuXHRPYmplY3QuZW50cmllcyhGUkVRX01BUCkubWFwKChbaywgdl0pID0+IFt2LCBrXSlcbikgYXMgUmVjb3JkPG51bWJlciwgc3RyaW5nPlxuY29uc3QgV0VFS0RBWVMgPSBbXG5cdFJSdWxlLlNVLFxuXHRSUnVsZS5NTyxcblx0UlJ1bGUuVFUsXG5cdFJSdWxlLldFLFxuXHRSUnVsZS5USCxcblx0UlJ1bGUuRlIsXG5cdFJSdWxlLlNBLFxuXVxuY29uc3QgREFZX0tFWVMgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddXG5jb25zdCBwYXJzZU51bSA9ICh2OiBzdHJpbmcpID0+IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludCh2LCAxMCkgfHwgMSlcblxuY29uc3QgZ2V0RGVzY3JpcHRpb24gPSAoXG5cdG9wdHM6IFJSdWxlT3B0aW9ucyB8IG51bGwsXG5cdHQ6IChrOiBzdHJpbmcpID0+IHN0cmluZ1xuKSA9PiB7XG5cdGlmICghb3B0cykge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxuXHR0cnkge1xuXHRcdGNvbnN0IHRleHQgPSBuZXcgUlJ1bGUob3B0cykudG9UZXh0KClcblx0XHRyZXR1cm4gdGV4dCAmJiAhdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG5cdFx0XHQ/IHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpXG5cdFx0XHQ6IHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcblx0dmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG5cdG9uQ2hhbmdlOiAodjogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UHJvcHM+ID0gKHsgdmFsdWUsIG9uQ2hhbmdlIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoeyB0OiBjdHgudCB9KSlcblx0Y29uc3QgW3Nob3csIHNldFNob3ddID0gdXNlU3RhdGUoISF2YWx1ZSlcblx0Y29uc3QgW29wdHMsIHNldE9wdHNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4gdmFsdWUgfHwgbnVsbClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gREFZX0tFWVMubWFwKChrLCBpKSA9PiAoeyB2YWx1ZTogV0VFS0RBWVNbaV0sIGxhYmVsOiB0KGspIH0pKSxcblx0XHRbdF1cblx0KVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2hvdyghIXZhbHVlKVxuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0c2V0T3B0cyh2YWx1ZSlcblx0XHR9XG5cdH0sIFt2YWx1ZV0pXG5cblx0Y29uc3QgdXBkYXRlID0gKHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuXHRcdGlmICghb3B0cykge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IG5leHQgPSB7IC4uLm9wdHMsIC4uLnUgfVxuXHRcdHNldE9wdHMobmV4dClcblx0XHRvbkNoYW5nZShzaG93ID8gbmV4dCA6IG51bGwpXG5cdH1cblxuXHRjb25zdCB0b2dnbGUgPSAoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuXHRcdHNldFNob3coY2hlY2tlZClcblx0XHRpZiAoIWNoZWNrZWQpIHtcblx0XHRcdG9uQ2hhbmdlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0aWYgKG9wdHMpIHtcblx0XHRcdG9uQ2hhbmdlKG9wdHMpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgZGVmID0geyBmcmVxOiBSUnVsZS5EQUlMWSwgaW50ZXJ2YWw6IDEgfSBhcyBSUnVsZU9wdGlvbnNcblx0XHRzZXRPcHRzKGRlZilcblx0XHRvbkNoYW5nZShkZWYpXG5cdH1cblxuXHRjb25zdCB0b2dnbGVEYXkgPSAoaTogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgY3VyciA9IChvcHRzPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuXHRcdGNvbnN0IGRheSA9IFdFRUtEQVlTW2ldXG5cdFx0Y29uc3QgbmV4dCA9IGN1cnIuaW5jbHVkZXMoZGF5KVxuXHRcdFx0PyBjdXJyLmZpbHRlcigoZCkgPT4gZCAhPT0gZGF5KVxuXHRcdFx0OiBbLi4uY3VyciwgZGF5XVxuXHRcdHVwZGF0ZSh7IGJ5d2Vla2RheTogbmV4dC5sZW5ndGggPyBuZXh0IDogdW5kZWZpbmVkIH0pXG5cdH1cblxuXHRjb25zdCBzZXRFbmRUeXBlID0gKHR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuXHRcdGNvbnN0IHU6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHsgY291bnQ6IHVuZGVmaW5lZCwgdW50aWw6IHVuZGVmaW5lZCB9XG5cdFx0aWYgKHR5cGUgPT09ICdjb3VudCcpIHtcblx0XHRcdHUuY291bnQgPSBvcHRzPy5jb3VudCB8fCAxXG5cdFx0fVxuXHRcdGlmICh0eXBlID09PSAndW50aWwnKSB7XG5cdFx0XHR1LnVudGlsID0gb3B0cz8udW50aWwgfHwgZGF5anMoKS5hZGQoMSwgJ21vbnRoJykuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0fVxuXHRcdHVwZGF0ZSh1KVxuXHR9XG5cblx0Y29uc3QgZW5kVHlwZSA9IG9wdHM/LnVudGlsID8gJ3VudGlsJyA6IG9wdHM/LmNvdW50ID8gJ2NvdW50JyA6ICduZXZlcidcblx0Y29uc3QgZnJlcSA9IEZSRVFfVE9fU1RSW29wdHM/LmZyZXEgPz8gUlJ1bGUuREFJTFldIHx8ICdEQUlMWSdcblx0Y29uc3QgYnl3ZWVrZGF5ID0gQXJyYXkuaXNBcnJheShvcHRzPy5ieXdlZWtkYXkpXG5cdFx0PyBvcHRzLmJ5d2Vla2RheVxuXHRcdDogb3B0cz8uYnl3ZWVrZGF5XG5cdFx0XHQ/IFtvcHRzLmJ5d2Vla2RheV1cblx0XHRcdDogW11cblxuXHRyZXR1cm4gKFxuXHRcdDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cblx0XHRcdDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdGNoZWNrZWQ9e3Nob3d9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInRvZ2dsZS1yZWN1cnJlbmNlXCJcblx0XHRcdFx0XHRcdGlkPVwicmVjdXJyaW5nXCJcblx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17dG9nZ2xlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3JlcGVhdCcpfTwvQ2FyZFRpdGxlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0e3Nob3cgJiYgdmFsdWUgJiYgKFxuXHRcdFx0XHRcdDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHR7Z2V0RGVzY3JpcHRpb24odmFsdWUsIHQpfVxuXHRcdFx0XHRcdDwvcD5cblx0XHRcdFx0KX1cblx0XHRcdDwvQ2FyZEhlYWRlcj5cblxuXHRcdFx0e3Nob3cgJiYgKFxuXHRcdFx0XHQ8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJmcmVxdWVuY3lcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdyZXBlYXRzJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRvblZhbHVlQ2hhbmdlPXsoZikgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgZnJlcTogRlJFUV9NQVBbZiBhcyBrZXlvZiB0eXBlb2YgRlJFUV9NQVBdIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17ZnJlcX1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VHJpZ2dlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZyZXF1ZW5jeVwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RWYWx1ZSAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtPYmplY3Qua2V5cyhGUkVRX01BUCkubWFwKChmKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdEl0ZW0ga2V5PXtmfSB2YWx1ZT17Zn0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChmLnRvTG93ZXJDYXNlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdENvbnRlbnQ+XG5cdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3Q+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImludGVydmFsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgnZXZlcnknKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW50ZXJ2YWxcIlxuXHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGludGVydmFsOiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJudW1iZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmludGVydmFsIHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0e29wdHM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3dlZWtEYXlzLm1hcCgoZCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiIGtleT17ZC5sYWJlbH0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtieXdlZWtkYXkuaW5jbHVkZXMoZC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17YGRheS0ke2l9YH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gdG9nZ2xlRGF5KGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGh0bWxGb3I9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2QubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ25ldmVyJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuZXZlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJuZXZlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnbmV2ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjaGVja2VkPXtlbmRUeXBlID09PSAnY291bnQnfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImFmdGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCdjb3VudCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImFmdGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdhZnRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdHtlbmRUeXBlID09PSAnY291bnQnICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgY291bnQ6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uY291bnQgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ3VudGlsJ31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgndW50aWwnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJvblwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnb24nKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bnRpbDogZCA/IGRheWpzKGQpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9DYXJkQ29udGVudD5cblx0XHRcdCl9XG5cdFx0PC9DYXJkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0Q2FyZCxcblx0Q2FyZEhlYWRlcixcblx0Q2FyZEZvb3Rlcixcblx0Q2FyZFRpdGxlLFxuXHRDYXJkQWN0aW9uLFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcblx0cmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcblx0Y2xhc3NOYW1lLFxuXHRzaXplID0gJ2RlZmF1bHQnLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2l6ZT17c2l6ZX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC10cmlnZ2VyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cblx0XHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHBvc2l0aW9uID0gJ3BvcHBlcicsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG5cdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHQnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcblx0XHRcdFx0cG9zaXRpb249e3Bvc2l0aW9ufVxuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxVcEJ1dHRvbiAvPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdwLTEnLFxuXHRcdFx0XHRcdFx0cG9zaXRpb24gPT09ICdwb3BwZXInICYmXG5cdFx0XHRcdFx0XHRcdCdoLVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpXSB3LWZ1bGwgbWluLXctW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKV0gc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtW2Rpc2FibGVkXTpwb2ludGVyLWV2ZW50cy1ub25lIGRhdGEtW2Rpc2FibGVkXTpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNCAqOltzcGFuXTpsYXN0OmZsZXggKjpbc3Bhbl06bGFzdDppdGVtcy1jZW50ZXIgKjpbc3Bhbl06bGFzdDpnYXAtMlwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiBmbGV4IHNpemUtMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD57Y2hpbGRyZW59PC9TZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbT5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTZXBhcmF0b3Ioe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNlcGFyYXRvclxuXHRcdFx0Y2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsVXBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uVXBJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RHcm91cCxcblx0U2VsZWN0SXRlbSxcblx0U2VsZWN0TGFiZWwsXG5cdFNlbGVjdFNjcm9sbERvd25CdXR0b24sXG5cdFNlbGVjdFNjcm9sbFVwQnV0dG9uLFxuXHRTZWxlY3RTZXBhcmF0b3IsXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuXHRjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0fSkpXG5cblx0Y29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG5cdFx0aXNPcGVuOiBib29sZWFuXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0XHR1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHRcdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHR9Pih7XG5cdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0ZXZlbnQ6IG51bGwsXG5cdH0pXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRpc09wZW46IGZhbHNlLFxuXHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0ZXZlbnQ6IG51bGwsXG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0aWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuXHRcdFx0XHRkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRjbG9zZURpYWxvZygpXG5cdFx0XHQvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG5cdFx0XHRvbkNvbXBsZXRlPy4oKVxuXHRcdH0sXG5cdFx0W2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cblx0KVxuXG5cdHJldHVybiB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJy4vZXZlbnQtZm9ybSdcblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybURpYWxvZyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybTogY29udGV4dC5yZW5kZXJFdmVudEZvcm0sXG5cdH0pKVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0aWYgKHJlbmRlckV2ZW50Rm9ybSkge1xuXHRcdHJldHVybiByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtjbG9zZUV2ZW50Rm9ybX0gb3Blbj17aXNFdmVudEZvcm1PcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNCBzaHJpbmstMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0PERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblxuXHRcdFx0XHQ8RXZlbnRGb3JtIHsuLi5ldmVudEZvcm1Qcm9wc30gLz5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXh0UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJldlBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcblx0J2phbnVhcnknLFxuXHQnZmVicnVhcnknLFxuXHQnbWFyY2gnLFxuXHQnYXByaWwnLFxuXHQnbWF5Jyxcblx0J2p1bmUnLFxuXHQnanVseScsXG5cdCdhdWd1c3QnLFxuXHQnc2VwdGVtYmVyJyxcblx0J29jdG9iZXInLFxuXHQnbm92ZW1iZXInLFxuXHQnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGN0eC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7cG9wb3Zlci5pZH0tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkUm93IH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtcm93J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBgYWxsZGF5LWNvbC0ke2RheS50b0lTT1N0cmluZygpfS0ke2luZGV4fWAsXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCcsIGNsYXNzZXM/LnJvdyl9IGRhdGEtdGVzdGlkPVwiYWxsLWRheS1yb3dcIj5cblx0XHRcdHsvKiBUaW1lIGNvbCBzcGFjZXIgKi99XG5cdFx0XHR7c2hvd1NwYWNlciAmJiA8QWxsRGF5Q2VsbCBjbGFzc05hbWU9e2NsYXNzZXM/LnNwYWNlcn0gLz59XG5cblx0XHRcdHsvKiBEYXkgYWxsIGRheSBjZWxsICovfVxuXHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdGFsbERheVxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgbWluLWgtZml0XCJcblx0XHRcdFx0Y29sdW1ucz17Y29sdW1uc31cblx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0XHRncmlkVHlwZT1cImRheVwiXG5cdFx0XHRcdGlkPXtgYWxsLWRheS1yb3ctJHtyZXNvdXJjZT8uaWQgPz8gJ21haW4nfWB9XG5cdFx0XHRcdGlzTGFzdFJvd1xuXHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHRcdC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheVJvdyA9IG1lbW8oTm9NZW1vQWxsRGF5Um93KVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogZGF5anMuRGF5anNcblx0ZGF5cz86IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdHJlbmRlclJlc291cmNlOiBzdGF0ZS5yZW5kZXJSZXNvdXJjZSxcblx0fSkpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc0dyb3VwZWQgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLmRheXMpXG5cblx0Y29uc3QgcmVuZGVyRXZlbnRzTGF5ZXIgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF5czogZGF5anMuRGF5anNbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2FsbERheSwgZGF5TnVtYmVySGVpZ2h0LCBncmlkVHlwZSwgaWQsIHJlc291cmNlPy5pZF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgaC1mdWxsXCJcblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LWxhYmVsLSR7cmVzb3VyY2U/LmlkfWB9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3JlbmRlclJlc291cmNlID8gKFxuXHRcdFx0XHRcdFx0cmVuZGVyUmVzb3VyY2UocmVzb3VyY2UpXG5cdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwid3JhcC1icmVhay13b3JkIHRleHQtc21cIj57cmVzb3VyY2U/LnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGNvbC5kYXkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGRheT17Y29sLmRheX1cblx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmRheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGlzTGFzdENvbCA9IGluZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDFcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHJlbGF0aXZlIHctZnVsbFwiIGtleT17Y29sLmlkfT5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7Y29sLmRheXM/Lm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93ICYmICdib3JkZXItYi0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckV2ZW50c0xheWVyKGNvbC5kYXlzKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0eyFpc0dyb3VwZWQgJiZcblx0XHRcdFx0XHRyZW5kZXJFdmVudHNMYXllcihjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoQm9vbGVhbikpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkUm93ID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZFJvdylcbiIsCiAgICAiaW1wb3J0IFJlYWN0LCB7IG1lbW8sIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERheU51bWJlciB9IGZyb20gJ0AvY29tcG9uZW50cy9kYXktbnVtYmVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0hvdXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXIgLy8gT3B0aW9uYWwgaG91ciBmb3IgaG91ci1iYXNlZCBncmlkc1xuXHRtaW51dGU/OiBudW1iZXIgLy8gT3B0aW9uYWwgbWludXRlIGZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHNcblx0ZGF5TWF4RXZlbnRzPzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdHNob3VsZFJlbmRlckV2ZW50cz86IGJvb2xlYW4gLy8gRmxhZyB0byBkZXRlcm1pbmUgaWYgZXZlbnRzIHNob3VsZCBiZSByZW5kZXJlZFxuXHRhbGxEYXk/OiBib29sZWFuIC8vIEZsYWcgdG8gaW5kaWNhdGUgaWYgdGhpcyBpcyBhbiBhbGwtZGF5IGNlbGxcblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW4gLy8gRmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIGRheSBudW1iZXJcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9HcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG5cdGRheSxcblx0aG91cixcblx0bWludXRlLFxuXHRjbGFzc05hbWUgPSAnJyxcblx0cmVzb3VyY2VJZCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0c2hvdWxkUmVuZGVyRXZlbnRzID0gdHJ1ZSxcblx0YWxsRGF5ID0gZmFsc2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0Y2hpbGRyZW4sXG59KSA9PiB7XG5cdGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+KG51bGwpXG5cdGNvbnN0IHtcblx0XHRkYXlNYXhFdmVudHMgPSAwLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR0LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdGRheU1heEV2ZW50czogc3RhdGUuZGF5TWF4RXZlbnRzLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogc3RhdGUuZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlazogc3RhdGUuZmlyc3REYXlPZldlZWssXG5cdFx0dDogc3RhdGUudCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3Vyczogc3RhdGUuYnVzaW5lc3NIb3Vycyxcblx0XHRjdXJyZW50TG9jYWxlOiBzdGF0ZS5jdXJyZW50TG9jYWxlLFxuXHRcdGV2ZW50U3BhY2luZzogc3RhdGUuZXZlbnRTcGFjaW5nLFxuXHRcdGdldFJlc291cmNlQnlJZDogc3RhdGUuZ2V0UmVzb3VyY2VCeUlkLFxuXHR9KSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghc2hvdWxkUmVuZGVyRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gW11cblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cblx0XHRcdHJldHVybiB0b2RheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChyZSkgPT4gU3RyaW5nKHJlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHRyZXR1cm4gdG9kYXlFdmVudHNcblx0fSwgW1xuXHRcdGRheSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRncmlkVHlwZSxcblx0XHRzaG91bGRSZW5kZXJFdmVudHMsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdC8vIEhhbmRsZXIgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyBpbiBhIGRpYWxvZ1xuXHRjb25zdCBzaG93QWxsRXZlbnRzID0gKGRheTogZGF5anMuRGF5anMsIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKSA9PiB7XG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkRGF5RXZlbnRzKHtcblx0XHRcdGRheSxcblx0XHRcdGV2ZW50cyxcblx0XHR9KVxuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5vcGVuKClcblx0fVxuXG5cdGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IGN1cnJlbnREYXRlLm1vbnRoKClcblxuXHRjb25zdCBoaWRkZW5FdmVudHNDb3VudCA9IHRvZGF5RXZlbnRzLmxlbmd0aCAtIGRheU1heEV2ZW50c1xuXHRjb25zdCBoYXNIaWRkZW5FdmVudHMgPSBoaWRkZW5FdmVudHNDb3VudCA+IDBcblxuXHQvLyBVc2UgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbGJhY2sgdG8gZ2xvYmFsXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAocmVzb3VyY2VJZCAmJiBnZXRSZXNvdXJjZUJ5SWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2VCeUlkKHJlc291cmNlSWQpXG5cdFx0XHRpZiAocmVzb3VyY2U/LmJ1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlLmJ1c2luZXNzSG91cnNcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fSwgW3Jlc291cmNlSWQsIGdldFJlc291cmNlQnlJZCwgYnVzaW5lc3NIb3Vyc10pXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCBob3VyU3RyID0gZGF5LmZvcm1hdCgnSEgnKVxuXHRjb25zdCBtbSA9IGRheS5mb3JtYXQoJ21tJylcblx0Y29uc3QgZGF0ZVRlc3RJZEJhc2UgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8gYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS0ke2hvdXJTdHJ9LSR7bW19YFxuXHRcdFx0OiBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBvbmx5OmJvcmRlci1yIGJvcmRlci1iJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgZGF0ZVRlc3RJZEJhc2V9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2BkYXktY2VsbC0ke2RheS50b0lTT1N0cmluZygpfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgZW1wdHktJHtyb3dJbmRleH0tJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXRhZy1vdmVyLXJvbGVcblx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXswfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdCt7aGlkZGVuRXZlbnRzQ291bnR9IHt0KCdtb3JlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgR3JpZENlbGwgPSBtZW1vKE5vTWVtb0dyaWRDZWxsKSBhcyB0eXBlb2YgTm9NZW1vR3JpZENlbGxcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5TnVtYmVyUHJvcHMge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRsb2NhbGU/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgZGF5IG51bWJlciBmb3IgYSBjYWxlbmRhciBjZWxsLCBoaWdobGlnaHRpbmcgJ3RvZGF5JyB3aXRoIGEgcHJpbWFyeSBiYWNrZ3JvdW5kLlxuICovXG5leHBvcnQgY29uc3QgRGF5TnVtYmVyOiBSZWFjdC5GQzxEYXlOdW1iZXJQcm9wcz4gPSAoe1xuXHRkYXRlLFxuXHRsb2NhbGUgPSAnZW4nLFxuXHRjbGFzc05hbWUsXG59KSA9PiB7XG5cdGNvbnN0IGlzVG9kYXkgPSBkYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtcblx0XHRcdFx0aXNUb2RheSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gXG5cdFx0XHR9XG5cdFx0PlxuXHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7IGRheTogJ251bWVyaWMnIH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlazogc3RhdGUuZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdG9wZW46ICgpID0+IHNldERpYWxvZ09wZW4odHJ1ZSksXG5cdFx0Y2xvc2U6ICgpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpLFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT5cblx0XHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzKGRheUV2ZW50cyksXG5cdH0pKVxuXG5cdC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuXHQvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcblx0Ly8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcblx0bGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcblx0d2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuXHRcdGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2cgb25PcGVuQ2hhbmdlPXtzZXREaWFsb2dPcGVufSBvcGVuPXtkaWFsb2dPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC1oLVs4MHZoXSBtYXgtdy1tZCBvdmVyZmxvdy15LWF1dG9cIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlcj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGU+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXlFdmVudHM/LmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdDwvRGlhbG9nVGl0bGU+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgbXktMSBoLVszMHB4XVwiIC8vIFVzZSBldmVudCBJRCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtldmVudC5pZH1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRvbkV2ZW50Q2xpY2s6IHN0YXRlLm9uRXZlbnRDbGljayxcblx0XHRcdHJlbmRlckV2ZW50OiBzdGF0ZS5yZW5kZXJFdmVudCxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrOiBzdGF0ZS5kaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogc3RhdGUuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhpc1RydW5jYXRlZFN0YXJ0LCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR2aWV3LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdG9uQ2VsbENsaWNrOiBzdGF0ZS5vbkNlbGxDbGljayxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrOiBzdGF0ZS5kaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZTogc3RhdGUuY2xhc3Nlc092ZXJyaWRlLFxuXHRcdHZpZXc6IHN0YXRlLnZpZXcsXG5cdH0pKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IFRoZSBjZWxsIGlzIGludGVyYWN0aXZlIGZvciBldmVudCBjcmVhdGlvblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlS2V5V2l0aENsaWNrRXZlbnRzOiBLZXkgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGlzYWJsZWQ9e2Rpc2FibGVkLnRvU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdGRhdGEtdmlldz17dmlld31cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUNlbGxQcm9wcyB7XG5cdHJlc291cmNlOiBSZXNvdXJjZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDZWxsOiBSZWFjdC5GQzxSZXNvdXJjZUNlbGxQcm9wcz4gPSAoe1xuXHRyZXNvdXJjZSxcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdGNvbG9yOiByZXNvdXJjZS5jb2xvcixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiByZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtyZW5kZXJSZXNvdXJjZVxuXHRcdFx0XHQ/IHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHQ6IChjaGlsZHJlbiA/PyAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGVcIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0YWxsRGF5PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxcblx0SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclByb3BzXG4+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0cmVzb3VyY2VJZCxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRhbGxEYXksXG59KSA9PiB7XG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5JylcblxuXHRjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG5cdFx0ZGF5cyxcblx0XHRncmlkVHlwZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRhbGxEYXksXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgei0xMCBwb2ludGVyLWV2ZW50cy1hdXRvIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0XHRcdFx0ZGF0YS1sZWZ0PXtldmVudC5sZWZ0fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50LSR7ZXZlbnQuaWR9YH1cblx0XHRcdFx0XHRcdGRhdGEtdG9wPXtldmVudC50b3B9XG5cdFx0XHRcdFx0XHRkYXRhLXdpZHRoPXtldmVudC53aWR0aH1cblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7RVZFTlRfQkFSX0hFSUdIVH1weGAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9Ib3Jpem9udGFsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldFBvc2l0aW9uZWRFdmVudHMgfSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRkYXlNYXhFdmVudHM6IHN0YXRlLmRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmc6IHN0YXRlLmV2ZW50U3BhY2luZyxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZTogc3RhdGUuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0pKVxuXG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5Jylcblx0Y29uc3Qgd2Vla0VuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgoZSkgPT4gU3RyaW5nKGUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZSkgPT4gISFlLmFsbERheSA9PT0gYWxsRGF5KVxuXHRcdH1cblxuXHRcdHJldHVybiB3ZWVrRXZlbnRzXG5cdH0sIFtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0d2Vla1N0YXJ0LFxuXHRcdHdlZWtFbmQsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcblx0Y29uc3QgcG9zaXRpb25lZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZGF5TWF4RXZlbnRzLCBkYXlOdW1iZXJIZWlnaHQsIGV2ZW50U3BhY2luZywgZXZlbnRzLCBncmlkVHlwZV0pXG5cblx0cmV0dXJuIHBvc2l0aW9uZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0cG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyIC8vIEN1c3RvbSB2ZXJ0aWNhbCBzcGFjaW5nIGJldHdlZW4gZXZlbnRzIChkZWZhdWx0cyB0byBHQVBfQkVUV0VFTl9FTEVNRU5UUylcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRldmVudHMsXG5cdGRheU1heEV2ZW50cyxcblx0ZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufTogR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzKSA9PiB7XG5cdC8vIEZvciBob3VyLWJhc2VkIGdyaWRzLCB1c2UgYWN0dWFsIGZpcnN0L2xhc3QgaG91cnMgZnJvbSBkYXlzIGFycmF5XG5cdC8vIEZvciBkYXktYmFzZWQgZ3JpZHMsIHVzZSBzdGFydC9lbmQgb2YgZGF5IHRvIGNhcHR1cmUgYWxsIGV2ZW50c1xuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGRheXMuYXQoMCkuc3RhcnRPZignaG91cicpIDogZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBsYXN0RGF5ID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5cy5hdCgtMSkuZW5kT2YoJ2hvdXInKSA6IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXHRjb25zdCBkYXlDb3VudCA9IGRheXMubGVuZ3RoXG5cblx0Ly8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRjb25zdCBtdWx0aURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID4gMClcblx0Y29uc3Qgc2luZ2xlRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcblx0XHQoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPT09IDBcblx0KVxuXG5cdC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG5cdGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0aWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGlmZlxuXHRcdH1cblx0XHRyZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHR9KVxuXG5cdC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuXHRcdGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHQpXG5cblx0Ly8gQ3JlYXRlIGRheUNvdW50IHggZGF5TWF4RXZlbnRzIGdyaWQgd2l0aCBmbGFnc1xuXHRjb25zdCBncmlkOiB7IHRha2VuOiBib29sZWFuOyBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwgfVtdW10gPSBbXVxuXHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0Z3JpZFtyb3ddID0gW11cblx0XHRmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBkYXlDb3VudDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgYWRqdXN0ZWRFbmQgPVxuXHRcdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGV2ZW50LmVuZC5zdWJ0cmFjdCgxLCAnbWludXRlJykgOiBldmVudC5lbmRcblx0XHRjb25zdCBldmVudEVuZCA9IGRheWpzLm1pbihhZGp1c3RlZEVuZC5zdGFydE9mKGdyaWRUeXBlKSwgbGFzdERheSlcblx0XHRjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdGNvbnN0IGVuZENvbCA9IE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRFbmQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXG5cdFx0Ly8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuXHRcdGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG5cdFx0Ly8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoc3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHR9XG5cblx0XHQvLyBJZiBjb3VsZG4ndCBwbGFjZSBhdCBvcmlnaW5hbCBwb3NpdGlvbiwgdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRpZiAoIXBsYWNlZFN1Y2Nlc3NmdWxseSkge1xuXHRcdFx0Zm9yIChcblx0XHRcdFx0bGV0IHRyeVN0YXJ0Q29sID0gc3RhcnRDb2wgKyAxO1xuXHRcdFx0XHR0cnlTdGFydENvbCA8PSBlbmRDb2w7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sKytcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIHRydW5jYXRlZCBldmVudCBzdGFydGluZyBmcm9tIHRoaXMgY29sdW1uXG5cdFx0XHRcdGxldCB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IC0xXG5cdFx0XHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHdlIGZvdW5kIGEgcm93IGZvciB0aGUgdHJ1bmNhdGVkIHZlcnNpb24sIHBsYWNlIGl0XG5cdFx0XHRcdGlmICh0cnVuY2F0ZWRBc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGdyaWRbdHJ1bmNhdGVkQXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHRoZSB0cnVuY2F0ZWQgcmVuZGVyaW5nXG5cdFx0XHRcdFx0Y29uc3QgdHJ1bmNhdGVkU3BhbkRheXMgPSBlbmRDb2wgLSB0cnlTdGFydENvbCArIDFcblx0XHRcdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRsZWZ0OiAodHJ5U3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcblx0XHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHRcdFx0XHRicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHQvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cblx0XHQvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG5cdFx0Ly8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0aWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoeyB0OiBzdGF0ZS50IH0pKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlcnRpY2FsR3JpZENvbFByb3BzIHtcblx0aWQ6IHN0cmluZ1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlbmRlckhlYWRlcj86ICgpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJDZWxsPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0bm9FdmVudHM/OiBib29sZWFuXG5cdC8qKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cblx0LyoqIFdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIGdyaWQgKi9cblx0aXNMYXN0Q29sdW1uPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRDb2w6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZENvbFByb3BzPiA9ICh7XG5cdGlkLFxuXHRkYXlzLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0Z3JpZFR5cGUsXG5cdGNsYXNzTmFtZSxcblx0cmVuZGVyQ2VsbCxcblx0bm9FdmVudHMsXG5cdGNlbGxTbG90cyA9IFs2MF0sIC8vIERlZmF1bHQgdG8gZnVsbCBob3VyIHNsb3RzXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi13LTUwIGJnLWJhY2tncm91bmQgcmVsYXRpdmUnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCBgdmVydGljYWwtY29sLSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7LyogVGltZSBzbG90cyAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHJlbGF0aXZlIGdyaWRcIlxuXHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdGdyaWRUZW1wbGF0ZVJvd3M6IGByZXBlYXQoJHtkYXlzLmxlbmd0aH0sIG1pbm1heCgwLCAxZnIpKWAsXG5cdFx0XHRcdH19XG5cdFx0XHQ+XG5cdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRjb25zdCBkYXRlU3RyID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID1cblx0XHRcdFx0XHRcdFx0aWQgPT09ICd0aW1lLWNvbCdcblx0XHRcdFx0XHRcdFx0XHQ/IGB2ZXJ0aWNhbC10aW1lLSR7aG91clN0cn1gXG5cdFx0XHRcdFx0XHRcdFx0OiBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tMDAke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7cmVuZGVyQ2VsbChkYXkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gY2VsbFNsb3RzLm1hcCgobWludXRlKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBtID0gbWludXRlID09PSA2MCA/IHVuZGVmaW5lZCA6IG1pbnV0ZVxuXHRcdFx0XHRcdFx0Y29uc3QgbW0gPSBtID09PSB1bmRlZmluZWQgPyAnMDAnIDogU3RyaW5nKG0pLnBhZFN0YXJ0KDIsICcwJylcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9IGB2ZXJ0aWNhbC1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfS0ke21tfSR7cmVzb3VyY2VJZCA/IGAtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWludXRlID09PSA2MCA/ICcnIDogJ2JvcmRlci1kYXNoZWQgaC1bMTVweF0gbWluLWgtWzE1cHhdJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbiA/ICdib3JkZXItci0wJyA6ICdib3JkZXItcidcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXt0ZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5PXttID8gZGF5Lm1pbnV0ZShtKSA6IGRheX1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aG91cj17ZGF5LmhvdXIoKX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0tJHtyZXNvdXJjZUlkIHx8ICduby1yZXNvdXJjZSd9YH1cblx0XHRcdFx0XHRcdFx0XHRtaW51dGU9e219XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH0gLy8gRXZlbnRzIGFyZSByZW5kZXJlZCBpbiBhIHNlcGFyYXRlIGxheWVyXG5cdFx0XHRcdFx0XHRcdFx0c2hvdWxkUmVuZGVyRXZlbnRzPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B2ZXJ0aWNhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtkYXlzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkQ29sID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkQ29sXG4pIGFzIHR5cGVvZiBOb01lbW9WZXJ0aWNhbEdyaWRDb2xcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgbGF5ZXIgcmVwcmVzZW50c1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSA9ICdob3VyJyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlUHJvY2Vzc2VkRGF5RXZlbnRzKHsgZGF5cywgZ3JpZFR5cGUsIHJlc291cmNlSWQgfSlcblx0Y29uc3QgcmFuZ2VTdGFydCA9IGRheXMuYXQoMClcblx0Y29uc3QgcmFuZ2VFbmQgPSBkYXlzLmF0KC0xKT8uYWRkKDEsIGdyaWRUeXBlKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cmFuZ2VTdGFydCAmJiByYW5nZUVuZCAmJiAoXG5cdFx0XHRcdDxDdXJyZW50VGltZUluZGljYXRvclxuXHRcdFx0XHRcdHJhbmdlRW5kPXtyYW5nZUVuZH1cblx0XHRcdFx0XHRyYW5nZVN0YXJ0PXtyYW5nZVN0YXJ0fVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0Lz5cblx0XHRcdCl9XG5cdFx0XHR7dG9kYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgZXZlbnQtJHtldmVudC5pZH0tJHtpbmRleH0tJHtkYXlzLmF0KDApLnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblx0XHRcdFx0Y29uc3QgaXNTaG9ydEV2ZW50ID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQsICdtaW51dGUnKSA8PSAxNVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuXHRcdFx0XHRcdFx0a2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG5cdFx0XHRcdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRcdFx0XHRsZWZ0OiBgJHtldmVudC5sZWZ0fSVgLFxuXHRcdFx0XHRcdFx0XHR3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAyKWAsXG5cdFx0XHRcdFx0XHRcdHRvcDogYCR7ZXZlbnQudG9wfSVgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH0lYCxcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PERyYWdnYWJsZUV2ZW50XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG5cdFx0XHRcdFx0XHRcdFx0J1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIgPSBtZW1vKE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyKVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW50ZXJmYWNlIEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMge1xuXHQvKiogVGhlIHN0YXJ0IGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIHRvcCBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZVN0YXJ0OiBkYXlqcy5EYXlqc1xuXHQvKiogVGhlIGVuZCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCBib3R0b20gb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VFbmQ6IGRheWpzLkRheWpzXG5cdC8qKiBPcHRpb25hbCByZWZlcmVuY2UgdGltZSBmb3IgXCJub3dcIiAodXNlZnVsIGZvciB0ZXN0aW5nKSAqL1xuXHRub3c/OiBkYXlqcy5EYXlqc1xuXHQvKiogVGhlIHJlc291cmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbHVtbiAob3B0aW9uYWwpICovXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgaG9yaXpvbnRhbCByZWQgbGluZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHRpbWUgcmVsYXRpdmUgdG8gYSB2ZXJ0aWNhbCBjb250YWluZXIncyB0aW1lbGluZS5cbiAqIFRoZSBpbmRpY2F0b3IgaGFuZGxlcyBpdHMgb3duIHZpc2liaWxpdHkgYmFzZWQgb24gd2hldGhlciAnbm93JyBmYWxscyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICogU3VwcG9ydHMgY3VzdG9tIHJlbmRlcmluZyB2aWEgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IgZnJvbSBjb250ZXh0LlxuICovXG5jb25zdCBOb01lbW9DdXJyZW50VGltZUluZGljYXRvciA9ICh7XG5cdHJhbmdlU3RhcnQsXG5cdHJhbmdlRW5kLFxuXHRub3c6IHByb3BOb3csXG5cdHJlc291cmNlLFxufTogQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcykgPT4ge1xuXHQvLyBHZXQgcmVuZGVyIGZ1bmN0aW9uIGFuZCBjdXJyZW50IHZpZXcgZnJvbSBjb250ZXh0XG5cdGNvbnN0IHsgcmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsIHZpZXcgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChzdGF0ZSkgPT4gKHtcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yOiBzdGF0ZS5yZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHZpZXc6IHN0YXRlLnZpZXcsXG5cdFx0fSlcblx0KVxuXG5cdGNvbnN0IG5vdyA9IHByb3BOb3cgPz8gZGF5anMoKVxuXG5cdC8vIENoZWNrIGlmIGN1cnJlbnQgdGltZSBmYWxscyB3aXRoaW4gdGhpcyByYW5nZVxuXHRjb25zdCBpc1dpdGhpblJhbmdlID0gbm93LmlzU2FtZU9yQWZ0ZXIocmFuZ2VTdGFydCkgJiYgbm93LmlzQmVmb3JlKHJhbmdlRW5kKVxuXG5cdGlmICghaXNXaXRoaW5SYW5nZSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRjb25zdCB0b3RhbER1cmF0aW9uID0gcmFuZ2VFbmQuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgbWludXRlc0Zyb21TdGFydCA9IG5vdy5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBwcm9ncmVzcyA9IChtaW51dGVzRnJvbVN0YXJ0IC8gdG90YWxEdXJhdGlvbikgKiAxMDBcblxuXHQvLyBJZiBjdXN0b20gcmVuZGVyIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHZpYSBjb250ZXh0LCB1c2UgaXRcblx0aWYgKHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcih7XG5cdFx0XHRcdFx0Y3VycmVudFRpbWU6IG5vdyxcblx0XHRcdFx0XHRyYW5nZVN0YXJ0LFxuXHRcdFx0XHRcdHJhbmdlRW5kLFxuXHRcdFx0XHRcdHByb2dyZXNzLFxuXHRcdFx0XHRcdHJlc291cmNlLFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Ly8gRGVmYXVsdCBpbmRpY2F0b3IgcmVuZGVyaW5nXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgaC0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdHRvcDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHR9fVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRUaW1lSW5kaWNhdG9yID0gbWVtbyhOb01lbW9DdXJyZW50VGltZUluZGljYXRvcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHRnZXRQb3NpdGlvbmVkRGF5RXZlbnRzLFxuXHR0eXBlIFBvc2l0aW9uZWRFdmVudCxcbn0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24tZGF5LWV2ZW50cydcblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWREYXlFdmVudHMgPSAoe1xuXHRkYXlzLFxuXHRncmlkVHlwZSxcblx0cmVzb3VyY2VJZCxcbn06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG5cdGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRFdmVudHNGb3JSZXNvdXJjZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHR9KSlcblx0Y29uc3QgZGF5U3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGRheUVuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0ZGF5RXZlbnRzID0gZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0Ly8gRW5zdXJlIGF0IGxlYXN0IDEgdW5pdCBkdXJhdGlvbiBmb3IgZGlzY3JldGUgZXZlbnRzXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0Ly8gU2tpcCBldmVudHMgdGhhdCBhcmUgY29tcGxldGVseSBvdXRzaWRlIHRoZSBncmlkXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG5cdFx0Ly8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpXG5cblx0XHRcdC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0XHRcdGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYkR1cmF0aW9uIC0gYUR1cmF0aW9uXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuXHRcdFx0cmV0dXJuIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHQvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcblx0XHRjb25zdCB0b3RhbEV2ZW50cyA9IHNvcnRlZENsdXN0ZXIubGVuZ3RoXG5cblx0XHQvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRcdC8vIEZld2VyIGV2ZW50cyA9IGxhcmdlciBpbmRpdmlkdWFsIG9mZnNldHMsIG1vcmUgZXZlbnRzID0gc21hbGxlciBvZmZzZXRzXG5cdFx0bGV0IG1heE9mZnNldDogbnVtYmVyXG5cdFx0aWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSAyNSAvLyAyNSUgb2Zmc2V0IGZvciAyIGV2ZW50c1xuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcblx0XHRcdG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDQpIHtcblx0XHRcdG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA3MCAvLyA3MCUgdG90YWwgZm9yIDUrIGV2ZW50c1xuXHRcdH1cblxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENsdXN0ZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gc29ydGVkQ2x1c3RlcltpXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcblx0XHRcdGxldCBsZWZ0OiBudW1iZXJcblx0XHRcdGxldCB3aWR0aDogbnVtYmVyXG5cdFx0XHRsZXQgekluZGV4OiBudW1iZXJcblxuXHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0Ly8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG5cdFx0XHRcdGxlZnQgPSAwXG5cdFx0XHRcdHdpZHRoID0gMTAwXG5cdFx0XHRcdHpJbmRleCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFN1YnNlcXVlbnQgZXZlbnRzIGFyZSBvZmZzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gdG90YWwgZXZlbnQgY291bnRcblx0XHRcdFx0bGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0XHR3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG5cdFx0XHRcdHpJbmRleCA9IGkgKyAxIC8vIEhpZ2hlciB6LWluZGV4IGZvciBldmVudHMgb24gdG9wXG5cdFx0XHR9XG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGxlZnQsXG5cdFx0XHRcdHdpZHRoLFxuXHRcdFx0XHR0b3AsXG5cdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0ekluZGV4LFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93IH0pID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLTEyIGJvcmRlci1iIHctZml0JywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggdy1mdWxsIGJvcmRlci1iIG1pbi1oLTEyIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5hbGxEYXlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZENvbCwgdHlwZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1jb2wnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcblxuY29uc3QgQk9EWV9IRUlHSFQgPSAnaC1bY2FsYygxMDAlLTNyZW0pXSdcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZFByb3BzIHtcblx0Y29sdW1uczogVmVydGljYWxHcmlkQ29sUHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInZlcnRpY2FsLWdyaWQtY29udGFpbmVyXCI+XG5cdFx0XHR7LyogaGVhZGVyIHJvdyAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2gtZnVsbCcsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmIEJPRFlfSEVJR0hUIC8vIHNjcm9sbCBhcmVhIGJlY29tZXMgYm9keSBpbiByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1zY3JvbGxcIlxuXHRcdFx0XHR2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggZmxleC0xIHctZml0Jyxcblx0XHRcdFx0XHRcdGlzUmVzb3VyY2VDYWxlbmRhciAmJiBCT0RZX0hFSUdIVCxcblx0XHRcdFx0XHRcdGNsYXNzZXM/LmJvZHlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkQ29sXG5cdFx0XHRcdFx0XHRcdGtleT17YCR7Y29sdW1uLmlkfS0ke2luZGV4fWB9XG5cdFx0XHRcdFx0XHRcdHsuLi5jb2x1bW59XG5cdFx0XHRcdFx0XHRcdGNlbGxTbG90cz17Y2VsbFNsb3RzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbj17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPiB7LyogdmVydGljYWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPnsnICd9XG5cdFx0XHRcdHsvKiBob3Jpem9udGFsIHNjcm9sbGJhciAqL31cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUhvdXJzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJy4vYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHZXRWaWV3SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZTogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdC8qKlxuXHQgKiBGb3Igdmlld3Mgd2l0aCBtdWx0aXBsZSBkYXlzIChsaWtlIFdlZWtWaWV3KSwgd2UgbWlnaHQgd2FudCB0byBzaG93XG5cdCAqIHRoZSB1bmlvbiBvZiBhbGwgYnVzaW5lc3MgaG91cnMgYWNyb3NzIHRob3NlIGRheXMuXG5cdCAqL1xuXHRhbGxEYXRlcz86IGRheWpzLkRheWpzW11cblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFkZGl0aW9uYWwgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvbnMgKGUuZy4sIGZyb20gcmVzb3VyY2VzKS5cblx0ICogVGhlc2Ugd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGUgZ2xvYmFsIGJ1c2luZXNzSG91cnMgd2hlbiBjYWxjdWxhdGluZyB0aGUgdmlzaWJsZSByYW5nZS5cblx0ICovXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBsaXN0IG9mIGhvdXJzIHRvIGRpc3BsYXkgaW4gdGhlIGNhbGVuZGFyIHZpZXcuXG4gKiBJZiBoaWRlTm9uQnVzaW5lc3NIb3VycyBpcyB0cnVlLCBpdCBmaWx0ZXJzIHRoZSBob3VycyBiYXNlZCBvbiBidXNpbmVzc0hvdXJzIGNvbmZpZ3VyYXRpb24uXG4gKiBGb3IgbXVsdGlwbGUgZGF0ZXMsIGl0IHRha2VzIHRoZSBlYXJsaWVzdCBzdGFydCBhbmQgbGF0ZXN0IGVuZCBhY3Jvc3MgYWxsIGRhdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0hvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSxcblx0YnVzaW5lc3NIb3Vycyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdGFsbERhdGVzID0gW3JlZmVyZW5jZURhdGVdLFxuXHRyZXNvdXJjZUJ1c2luZXNzSG91cnMgPSBbXSxcbn06IEdldFZpZXdIb3Vyc09wdGlvbnMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgYWxsSG91cnMgPSBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGUgfSlcblxuXHRpZiAoXG5cdFx0IWhpZGVOb25CdXNpbmVzc0hvdXJzIHx8XG5cdFx0KCFidXNpbmVzc0hvdXJzICYmIHJlc291cmNlQnVzaW5lc3NIb3Vycy5sZW5ndGggPT09IDApXG5cdCkge1xuXHRcdHJldHVybiBhbGxIb3Vyc1xuXHR9XG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiBhbGxIb3Vyc1xuXHR9XG5cblx0Ly8gUmV0dXJuIGhvdXJzIHdpdGhpbiB0aGUgcmFuZ2UgW21pblN0YXJ0LCBtYXhFbmQpXG5cdHJldHVybiBhbGxIb3Vycy5maWx0ZXIoKGgpID0+IHtcblx0XHRjb25zdCBob3VyID0gaC5ob3VyKClcblx0XHRyZXR1cm4gaG91ciA+PSBtaW5TdGFydCAmJiBob3VyIDwgbWF4RW5kXG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBEYXlWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdHQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJywgYWxsRGF5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlcid9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LXZpZXctaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgdGV4dC1iYXNlIGZvbnQtc2VtaWJvbGQgc206dGV4dC14bCcsXG5cdFx0XHRcdFx0XHRpc1RvZGF5ICYmICd0ZXh0LXByaW1hcnknXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInhzOmlubGluZSBoaWRkZW5cIj5cblx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsICcpfVxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHR7aXNUb2RheSAmJiAoXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF5Vmlld1xuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDogYHdlZWstJHt3ZWVrSW5kZXh9YCxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGBjb2wtJHtkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Y2xhc3NOYW1lOiAndy1hdXRvJyxcblx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHR9KSksXG5cdFx0Y2xhc3NOYW1lOiAnZmxleC0xJyxcblx0XHRzaG93RGF5TnVtYmVyOiB0cnVlLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0cm93cz17cm93c31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC0xMlwiIC8+XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciA9ICh7XG5cdGNoaWxkcmVuLFxuXHRjbGFzc05hbWUsXG59OiBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzKSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGgtMTIgdy1maXQnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuaW1wb3J0IHtcblx0SG9yaXpvbnRhbEdyaWRSb3csXG5cdHR5cGUgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyxcbn0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtcm93J1xuXG5jb25zdCBCT0RZX0hFSUdIVCA9ICdoLVtjYWxjKDEwMCUtM3JlbSldJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRQcm9wcyB7XG5cdHJvd3M6IEhvcml6b250YWxHcmlkUm93UHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZDogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRQcm9wcz4gPSAoe1xuXHRyb3dzLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcblx0YWxsRGF5OiB0b3BMZXZlbEFsbERheSxcblx0Z3JpZFR5cGUsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG59KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG5cdH0pKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1jb250YWluZXJcIj5cblx0XHRcdHsvKipcblx0XHRcdCAqIGhlYWRlciByb3cgaXMgcmVuZGVyZWQgb3V0c2lkZSBzY3JvbGwgYXJlYSBmb3IgcmVndWxhciBjYWxlbmRhclxuXHRcdFx0ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnaC1mdWxsJyxcblx0XHRcdFx0XHRpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQgLy8gc2Nyb2xsIGFyZWEgYmVjb21lcyBib2R5IGluIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qKlxuXHRcdFx0XHQgKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWFcblx0XHRcdFx0ICogKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGZsZXgtMSB3LWZpdCcsXG5cdFx0XHRcdFx0XHRpc1Jlc291cmNlQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQsIC8vIHRoaXMgYmVjb21lcyBib2R5IGluIHJlc291cmNlIGNhbGVuZGFyXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5ib2R5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBmbGV4IGZsZXgtY29sIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTScpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e3Jvdy5hbGxEYXkgPz8gdG9wTGV2ZWxBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PXt2YXJpYW50fVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5yb3d9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IGZpcnN0RGF5T2ZXZWVrLCBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lLCBjdXJyZW50RGF0ZSB9ID1cblx0XHR1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdy1mdWxsJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cIm1vbnRoLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0e3dlZWtEYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInB5LTIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMVwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrZGF5LWhlYWRlci0ke3dlZWtEYXkuZm9ybWF0KCdkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRrZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGNhcGl0YWxpemVcIj57d2Vla0RheS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5jb25zdCBDRUxMX0NMQVNTID0gJ3ctW2NhbGMoKDEwMCUtNHJlbSkvNyldIG1pbi13LVtjYWxjKCgxMDAlLTRyZW0pLzcpXSBmbGV4LTEnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGhvdXJzLm1hcCgoaCkgPT5cblx0XHRcdFx0ZGF5LmhvdXIoaC5ob3VyKCkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0XHRcdCksXG5cdFx0XHR2YWx1ZTogZGF5LFxuXHRcdH0pKVxuXHR9LCBbd2Vla0RheXMsIGhvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt3ZWVrRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsIGgtMTgnLCBib2R5OiAnaC1bY2FsYygxMDAlLTQuNXJlbSldIHctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xJ30gZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXctaGVhZGVyXCI+XG5cdFx0XHRcdHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTAgc206dy0xNiBoLWZ1bGwgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHAtMiBmbGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHdlZWstZGF5LWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBmbGV4LTEgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTUwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeS8xMCBmb250LWJvbGQnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LmZvcm1hdCgnZGRkZCcpLnRvTG93ZXJDYXNlKCl9YH1cblx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3REYXRlKGRheSlcblx0XHRcdFx0XHRcdFx0XHRvcGVuRXZlbnRGb3JtKHsgc3RhcnQ6IGRheSB9KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoZGF5LnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vla1ZpZXdcbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgREFZX0hFQURFUl9OQU1FUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0cmV0dXJuICcnXG5cdH1cblx0Y29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuXHRyZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuXHRcdHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IGRheWpzLkRheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YG1vbnRoLSR7bW9udGhJbmRleH1gfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Btb250aC0ke21vbnRoSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvRGF0ZShtb250aC5kYXRlLCAnbW9udGgnKX1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHttb250aC5uYW1lfVxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXG5cdFx0XHRcdFx0XHRcdFx0e21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLWV2ZW50LWNvdW50LSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2dldEV2ZW50Q291bnRMYWJlbChtb250aC5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1pbmktY2FsZW5kYXItJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0RBWV9IRUFERVJfTkFNRVMubWFwKChkYXlOYW1lLCBoZWFkZXJJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgaGVhZGVyLSR7aGVhZGVySW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheU5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZURvdENvdW50XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXlUZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZGF5S2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5kYXRlLmRhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7aGFzRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RvdENvbG9yfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHQ8L1Njcm9sbEFyZWE+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgWWVhclZpZXdcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBkYXlqcy5EYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtKGluZm8pXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXHRcdFx0Y3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcblx0XHRcdGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuXHRcdFx0c2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcblx0XHRcdHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuXHRcdFx0c2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuXHRcdFx0cHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcblx0XHRcdHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcblx0XHRcdGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcblx0XHRcdHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG5cdFx0XHRjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG5cdFx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0OiBjYWxlbmRhckVuZ2luZS50LFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBEYXlWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgV2Vla1ZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcnXG5pbXBvcnQgWWVhclZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldywgZGF5TWF4RXZlbnRzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxNb250aFZpZXcgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHRcdHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJpbGFteS1jYWxlbmRhclwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KGV2ZW50cyl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM9e2hpZGVOb25CdXNpbmVzc0hvdXJzfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2FsZW5kYXJDb250ZW50IC8+XG5cdFx0PC9DYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogZGF5anMuRGF5anNbXSB8IGRheWpzLkRheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IGBjb2wtJHtpc0FycmF5ID8gZGF5WzBdPy5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IGRheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXk6IGlzQXJyYXkgPyB1bmRlZmluZWQgOiBkYXksXG5cdFx0XHRkYXlzOiBpc0FycmF5ID8gZGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzPy5jZWxsLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fVxuXHR9KVxuXG5cdGNvbnN0IHJvd3MgPSB2aXNpYmxlUmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCBkYXlIb3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtkYXlIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7ZGF5SG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1kYXktaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHJlc291cmNlLWRheS10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoY29sLnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgZGF5LWNvbC0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0cmVzb3VyY2UsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiBjdXJyZW50RGF0ZSxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy01MCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtYWxsZGF5LXJvdy0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWNlbGwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIC0gZGF5cyBvZiB0aGUgbW9udGhcblx0Y29uc3QgbW9udGhEYXlzID0gdXNlTWVtbzxkYXlqcy5EYXlqc1tdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1vbnRoRGF5cyhjdXJyZW50RGF0ZSlcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXttb250aERheXN9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdHttb250aERheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS1tb250aC1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGZsZXgtY29sXCJcblx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAnZGF0ZS1jb2wnLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgbW9udGgtY29sLXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTAgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17YHJlc291cmNlLWNlbGwtJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VNb250aFZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlTW9udGhIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdHQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIFJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGNvbWJpbmVkXG5cdGNvbnN0IHJlc291cmNlQnVzaW5lc3NIb3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3VycykuZmlsdGVyKEJvb2xlYW4pIGFzIChcblx0XHRcdFx0fCBCdXNpbmVzc0hvdXJzXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1tdXG5cdFx0XHQpW10sXG5cdFx0W3Jlc291cmNlc11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMubWFwKChkYXkpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBkYXksXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdFx0XHR9KVxuXHRcdClcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgcmVzb3VyY2VCdXNpbmVzc0hvdXJzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICdoLTI0IG1pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e3dlZWtIb3Vyc31cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnc2hyaW5rLTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXgtMSBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLXdlZWstZGF5LWhlYWRlclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tYW5pbWF0ZWRgfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdNL0QnKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHR7d2Vla0hvdXJzLmZsYXQoKS5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXJgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHR9KS5mb3JtYXQoY29sLnRvRGF0ZSgpKX1cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1jZWxsJ1xuaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRhbGxEYXRlczogd2Vla0RheXMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdFx0XHR9KSxcblx0XHRbY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB3ZWVrRGF5cywgcmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRcdGRheXM6IGhvdXJzLFxuXHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6XG5cdFx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2hvdXJzLCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0XVxuXHQpXG5cblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5mbGF0TWFwKChyZXNvdXJjZSkgPT5cblx0XHRcdFx0d2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRcdFx0aWQ6IGBkYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGhvdXJzLm1hcCgoaCkgPT5cblx0XHRcdFx0XHRcdGRheS5ob3VyKGguaG91cigpKS5taW51dGUoMCkuc2Vjb25kKDApLm1pbGxpc2Vjb25kKDApXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGhvdXJzXVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4XCI+XG5cdFx0XHRcdFx0PEFsbERheUNlbGwgLz5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiAnbWluLXctNTAnIH19XG5cdFx0XHRcdFx0XHRcdGRheXM9e3dlZWtEYXlzfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS13ZWVrLWFsbGRheS1yb3ctJHtyZXNvdXJjZS5pZH1gfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHNob3dTcGFjZXI9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ2gtMjQnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrXCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogUmVzb3VyY2UgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInB4LTIgaC1mdWxsIHctZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWVuZCB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7dCgnd2VlaycpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke3Jlc291cmNlLmlkfS1kYXlgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSB3LVtjYWxjKDcqdmFyKC0tc3BhY2luZykqNTApXSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VXZWVrVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB7IFJlc291cmNlRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldydcbmltcG9ydCB7IFJlc291cmNlTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckJvZHk6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IHZpZXcgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcblx0XHR3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJpbGFteS1yZXNvdXJjZS1jYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVkU2VjdGlvbiBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldIEBjb250YWluZXIvY2FsZW5kYXItYm9keVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG5cdFx0XHQ8RXZlbnRGb3JtRGlhbG9nIC8+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5leHBvcnQgY29uc3QgSWxhbXlSZXNvdXJjZUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0Li4ucHJvcHNcbn0pID0+IHtcblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KFxuXHRcdFx0XHRldmVudHNcblx0XHRcdCl9XG5cdFx0XHRmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuXHRcdFx0aW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cblx0XHRcdGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cblx0XHRcdHJlc291cmNlcz17cmVzb3VyY2VzfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8UmVzb3VyY2VDYWxlbmRhckJvZHkgLz5cblx0XHQ8L1Jlc291cmNlQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIkFBSUEsZ0JBQVMsZUNKVCxnQkFBUyxlQ0FULHNCQUNBLDBDQUNBLDhDQUNBLCtDQUNBLDJDQUNBLHVDQUNBLHlDQUNBLG9DQUNBLHdDQUNBLDJDQUdBLEdBQU0sT0FBTyxFQUFPLEVBQ3BCLEdBQU0sT0FBTyxFQUFVLEVBQ3ZCLEdBQU0sT0FBTyxFQUFhLEVBQzFCLEdBQU0sT0FBTyxFQUFjLEVBQzNCLEdBQU0sT0FBTyxFQUFTLEVBQ3RCLEdBQU0sT0FBTyxFQUFNLEVBQ25CLEdBQU0sT0FBTyxFQUFRLEVBQ3JCLEdBQU0sT0FBTyxFQUFHLEVBQ2hCLEdBQU0sT0FBTyxFQUFVLEVBRXZCLElBQWUsS0NyQmYsZUFBUyxjQUNULGtCQUFTLHdCQUdGLFNBQVMsQ0FBRSxJQUFJLEVBQXNCLENBQzNDLE9BQU8sR0FBUSxHQUFLLENBQU0sQ0FBQyxFQUdyQixTQUFTLEVBQVEsQ0FDdkIsRUFDMEIsQ0FDMUIsR0FBSSxJQUFTLE9BQ1osT0FFRCxHQUFJLEVBQU0sUUFBUSxDQUFJLEVBQ3JCLE9BQU8sRUFFUixJQUFNLEVBQWEsRUFBTSxDQUFJLEVBQzdCLE9BQU8sRUFBVyxRQUFRLEVBQUksRUFBYSxPQUdyQyxJQUFNLEdBQVcsQ0FDdkIsRUFDQSxJQUNnQixDQUNoQixJQUFNLEVBQVMsSUFBSyxDQUFJLEVBQ3hCLFFBQVcsS0FBTyxFQUNqQixPQUFPLEVBQU8sR0FFZixPQUFPLEdBaUJELFNBQVMsRUFNZixDQUFDLEVBQXlDLENBQzFDLEdBQUksQ0FBQyxHQUFVLENBQUMsRUFBTyxPQUN0QixNQUFPLENBQUMsRUFHVCxPQUFPLEVBQU8sSUFBSSxDQUFDLElBQVUsQ0FDNUIsTUFBTyxJQUNILEVBQ0gsTUFBTyxFQUFNLFFBQVEsRUFBTSxLQUFLLEVBQUksRUFBTSxNQUFRLEVBQU0sRUFBTSxLQUFLLEVBQ25FLElBQUssRUFBTSxRQUFRLEVBQU0sR0FBRyxFQUFJLEVBQU0sSUFBTSxFQUFNLEVBQU0sR0FBRyxDQUM1RCxFQUNBLEVGakRGLElBQU0sR0FBaUIsQ0FBQyxJQUF5QixDQUNoRCxPQUFPLElBQUksS0FDVixLQUFLLElBQ0osRUFBRSxLQUFLLEVBQ1AsRUFBRSxNQUFNLEVBQ1IsRUFBRSxLQUFLLEVBQ1AsRUFBRSxLQUFLLEVBQ1AsRUFBRSxPQUFPLEVBQ1QsRUFBRSxPQUFPLEVBQ1QsRUFBRSxZQUFZLENBQ2YsQ0FDRCxHQVFLLEdBQW1CLENBQUMsRUFBWSxJQUF3QyxDQUM3RSxPQUFPLEVBQ0wsS0FBSyxFQUFLLGVBQWUsQ0FBQyxFQUMxQixNQUFNLEVBQUssWUFBWSxDQUFDLEVBQ3hCLEtBQUssRUFBSyxXQUFXLENBQUMsRUFDdEIsS0FBSyxFQUFLLFlBQVksQ0FBQyxFQUN2QixPQUFPLEVBQUssY0FBYyxDQUFDLEVBQzNCLE9BQU8sRUFBSyxjQUFjLENBQUMsRUFDM0IsWUFBWSxFQUFLLG1CQUFtQixDQUFDLEdBRzNCLEdBQW1CLENBQUMsSUFBa0MsQ0FDbEUsT0FBTyxRQUFRLEVBQU0sT0FBUyxFQUFNLGNBQWdCLEVBQU0sR0FBRyxHQU94RCxHQUFvQixDQUFDLElBQWlDLENBQzNELE9BQU8sRUFBTSxLQUFPLEdBQUcsRUFBTSxxQkFVakIsR0FBMEIsRUFDdEMsUUFDQSxnQkFDQSxZQUNBLGFBQ29ELENBRXBELEdBQUksQ0FBQyxFQUFNLE1BQ1YsTUFBTyxDQUFDLEVBR1QsR0FBSSxDQUlILElBQU0sRUFBZ0IsR0FBZSxFQUFNLEtBQUssRUFDMUMsRUFBZ0IsRUFBTSxNQUFNLE1BQy9CLEdBQWUsRUFBTSxFQUFNLE1BQU0sS0FBSyxDQUFDLEVBQ3ZDLE9BRUcsRUFBNEIsSUFDOUIsRUFBTSxNQUNULFFBQVMsRUFDVCxNQUFPLENBQ1IsRUFDTSxFQUFPLElBQUksR0FBTSxDQUFXLEVBRTVCLEVBQVksR0FBa0IsQ0FBSyxFQUNuQyxFQUFZLEVBQWMsT0FDL0IsQ0FBQyxJQUFNLEVBQUUsY0FBZ0IsR0FBa0IsQ0FBQyxJQUFNLENBQ25ELEVBR00sRUFBZ0IsRUFBTSxJQUFJLEtBQUssRUFBTSxLQUFLLEVBSTFDLEVBQXdCLEdBQzdCLEVBQVUsU0FBUyxFQUFlLGFBQWEsQ0FDaEQsRUFDTSxFQUFjLEdBQWUsQ0FBTyxFQXlEMUMsT0F0RG9CLEVBQUssUUFBUSxFQUF1QixFQUFhLEVBQUksRUFJdkUsSUFBSSxDQUFDLEVBQVksSUFBVSxDQUMzQixJQUFNLEVBQWlCLEdBQWlCLEVBQVksRUFBTSxLQUFLLEVBQ3pELEVBQW1CLEVBQVUsS0FBSyxDQUFDLElBQ3hDLEdBQVMsRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFjLENBQ2hELEVBR0EsR0FBSSxFQUNILE1BQU8sSUFBSyxLQUFVLENBQWlCLEVBSXhDLElBQU0sRUFBbUIsRUFBTSxJQUFJLEtBQUssRUFBTSxLQUFLLEVBQzdDLEVBQWEsRUFBZSxJQUFJLEVBQWtCLGFBQWEsRUFDL0QsRUFBbUIsR0FBRyxFQUFNLE1BQU0sSUFDbEMsRUFBWSxHQUFrQixDQUFLLEVBWXpDLE1BVHNDLElBQ2xDLEVBQ0gsR0FBSSxFQUNKLE1BQU8sRUFDUCxJQUFLLEVBQ0wsSUFBSyxFQUNMLE1BQU8sTUFDUixFQUdBLEVBQ0EsT0FBTyxDQUFDLElBQW1CLENBRzNCLEdBRG1CLEVBQU0sU0FBVyxFQUFNLFFBQVEsT0FBUyxFQUMzQyxDQUNmLElBQU0sRUFBZ0IsRUFBZSxNQUFNLFlBQVksRUFFdkQsR0FEbUIsRUFBTSxRQUFRLFNBQVMsQ0FBYSxFQUV0RCxNQUFPLEdBV1QsT0FIQyxFQUFlLE1BQU0sZUFBZSxDQUFPLEdBQzNDLEVBQWUsSUFBSSxjQUFjLENBQVMsRUFHM0MsRUFHRCxNQUFPLEVBQU8sQ0FFZixNQUFVLE1BQ1QsMEJBQTBCLEtBQUssVUFBVSxFQUFNLEtBQUssYUFBYSxhQUFpQixNQUFRLEVBQU0sUUFBVSxpQkFDM0csSUFXVyxHQUF1QixFQUNuQyxjQUNBLFVBQ0EsZ0JBQ0EsV0FDaUQsQ0FDakQsSUFBTSxFQUFnQixDQUFDLEdBQUcsQ0FBYSxFQUdqQyxFQUFZLEdBQWtCLENBQVcsRUFDekMsRUFBaUIsRUFBYyxVQUFVLENBQUMsSUFBTSxDQUNyRCxPQUFPLEdBQWtCLENBQUMsSUFBTSxHQUFhLEVBQUUsT0FBUyxDQUFDLEVBQUUsYUFDM0QsRUFFRCxHQUFJLElBQW1CLEdBQ3RCLE1BQVUsTUFBTSxnQ0FBZ0MsRUFHakQsSUFBTSxFQUFZLEVBQWMsR0FFaEMsT0FBUSxPQUNGLE9BQVEsQ0FFWixJQUFNLEVBQXNCLEVBQVksTUFBTSxZQUFZLEVBRXBELEVBQWlCLENBQUMsR0FEQSxFQUFVLFNBQVcsQ0FBQyxFQUNGLENBQW1CLEVBRXpELEVBQW1CLElBQ3JCLEVBQ0gsUUFBUyxDQUNWLEVBQ0EsRUFBYyxHQUFrQixFQUdoQyxJQUFNLEVBQWtCLEdBQUcsRUFBWSxlQUFlLEtBQUssSUFBSSxJQUN6RCxFQUErQixJQUVqQyxHQUFTLEVBQWEsQ0FBQyxRQUFTLFNBQVUsTUFBTyxPQUFRLE9BQU8sQ0FBQyxLQUNqRSxFQUNILEdBQUksRUFDSixhQUFjLEVBQ2QsSUFBSyxHQUFrQixDQUFTLEVBQ2hDLE1BQU8sTUFDUixFQUNBLEVBQWMsS0FBSyxDQUFhLEVBQ2hDLEtBQ0QsS0FFSyxZQUFhLENBTWpCLElBQU0sRUFEa0IsRUFBWSxNQUFNLFNBQVMsRUFBRyxLQUFLLEVBQ25CLE1BQU0sS0FBSyxFQUFFLE9BQU8sRUFHdEQsRUFBa0IsSUFDcEIsRUFDSCxNQUFPLElBQ0gsRUFBVSxNQUNiLE1BQU8sQ0FDUixDQUNELEVBQ0EsRUFBYyxHQUFrQixFQUdoQyxJQUFNLEVBQW1CLEVBQVUsSUFBSSxLQUFLLEVBQVUsS0FBSyxFQUNyRCxFQUFxQixFQUFRLE9BQVMsRUFBWSxNQUNsRCxFQUNMLEVBQVEsS0FBTyxFQUFtQixJQUFJLENBQWdCLEVBQ2pELEVBQWMsR0FBRyxFQUFVLGVBQzNCLEVBQWUsR0FBRyxtQkFFbEIsRUFBZ0MsSUFDbEMsS0FDQSxFQUNILE1BQU8sSUFDSCxFQUFVLFNBQ1YsRUFBUSxNQUNYLFFBQVMsRUFBbUIsT0FBTyxDQUNwQyxFQUNBLEdBQUksRUFDSixJQUFLLEVBQ0wsTUFBTyxFQUNQLElBQUssRUFDTCxhQUFjLE1BQ2YsRUFDQSxFQUFjLEtBQUssQ0FBYyxFQUNqQyxLQUNELEtBRUssTUFBTyxDQUVYLElBQU0sRUFBbUIsSUFDckIsS0FDQSxDQUNKLEVBQ0EsRUFBYyxHQUFrQixFQUNoQyxLQUNELFNBR0MsTUFBVSxNQUNULGtCQUFrQiwwQ0FDbkIsRUFHRixPQUFPLEdBU0ssR0FBdUIsRUFDbkMsY0FDQSxnQkFDQSxXQUNpRCxDQUNqRCxJQUFNLEVBQWdCLENBQUMsR0FBRyxDQUFhLEVBR2pDLEVBQVksR0FBa0IsQ0FBVyxFQUN6QyxFQUFpQixFQUFjLFVBQVUsQ0FBQyxJQUFNLENBQ3JELE9BQU8sR0FBa0IsQ0FBQyxJQUFNLEdBQWEsRUFBRSxPQUFTLENBQUMsRUFBRSxhQUMzRCxFQUVELEdBQUksSUFBbUIsR0FDdEIsTUFBVSxNQUFNLGdDQUFnQyxFQUdqRCxJQUFNLEVBQVksRUFBYyxHQUVoQyxPQUFRLE9BQ0YsT0FBUSxDQUVaLElBQU0sRUFBc0IsRUFBWSxNQUFNLFlBQVksRUFFcEQsRUFBaUIsQ0FBQyxHQURBLEVBQVUsU0FBVyxDQUFDLEVBQ0YsQ0FBbUIsRUFFekQsRUFBbUIsSUFBSyxFQUFXLFFBQVMsQ0FBZSxFQUNqRSxFQUFjLEdBQWtCLEVBQ2hDLEtBQ0QsS0FFSyxZQUFhLENBTWpCLElBQU0sRUFEa0IsRUFBWSxNQUFNLFNBQVMsRUFBRyxLQUFLLEVBQ25CLE1BQU0sS0FBSyxFQUFFLE9BQU8sRUFFdEQsRUFBa0IsSUFDcEIsRUFDSCxNQUFPLElBQ0gsRUFBVSxNQUNiLE1BQU8sQ0FDUixDQUNELEVBQ0EsRUFBYyxHQUFrQixFQUNoQyxLQUNELEtBRUssTUFBTyxDQUVYLElBQU0sRUFBWSxHQUFrQixDQUFXLEVBSS9DLE9BSGtDLEVBQWMsT0FDL0MsQ0FBQyxJQUFNLEdBQWtCLENBQUMsSUFBTSxDQUNqQyxDQUVELFNBR0MsTUFBVSxNQUNULGtCQUFrQiwwQ0FDbkIsRUFHRixPQUFPLEdHdldSLDBCQUNDLGFBRUEsK0RBa0JELElBQU0sR0FBcUIsQ0FDMUIsT0FBUSxFQUFHLGdCQUEyRCxDQUNyRSxRQUFTLEVBQ1QsRUFBRyxJQUFjLGFBQWUsR0FBSyxFQUNyQyxFQUFHLElBQWMsV0FBYSxJQUFNLENBQ3JDLEdBQ0EsUUFBUyxFQUFHLFlBQWdDLENBQzNDLFFBQVMsRUFDVCxFQUFHLEVBQ0gsRUFBRyxFQUNILFdBQVksQ0FBRSxTQUFVLElBQUssS0FBTSxDQUFDLElBQUssRUFBRyxJQUFLLENBQUMsRUFBRyxPQUFNLENBQzVELEdBQ0EsS0FBTSxFQUFHLGdCQUEyRCxDQUNuRSxRQUFTLEVBQ1QsRUFBRyxJQUFjLGFBQWUsSUFBTSxFQUN0QyxFQUFHLElBQWMsV0FBYSxJQUFNLEVBQ3BDLFdBQVksQ0FBRSxTQUFVLElBQUssQ0FDOUIsRUFDRCxFQUVhLEVBQWtELEVBQzlELFdBQ0EsZ0JBQ0EsUUFBUSxFQUNSLFlBQ0EsWUFBWSxXQUNaLFNBQ0EsV0FDQSxjQUFlLEVBQ2YsU0FDRyxLQUVILEdBaUJFLEdBakJGLENBQWlCLEtBQUssT0FBdEIsU0FDQyxHQWVFLEdBQU8sSUFmVCxDQUNDLFFBQVEsVUFDUixVQUFXLEVBQUcsc0JBQXVCLENBQVMsRUFDOUMsT0FBUSxDQUFFLFFBQU8sV0FBVSxFQUMzQixjQUFhLEVBQ2IsS0FBSyxPQUNMLFFBQVEsU0FFUixPQUFRLEVBQ1IsU0FBVSxFQUNWLElBQUssRUFDTCxTQUFVLE1BQ04sRUFaTCxTQWNFLEdBUEksQ0FRSixFQUNELEVBR0gsRUFBZ0IsWUFBYyxrQkNwRTlCLHFCQUNDLGtCQUNBLG9CQUNBLGtCQUNBLGdCQUNBLGlCQUNBLHVCQUdELGlCQUFTLGVBQVEsZUNkakIsZUFBUyw4QkFFVCxjQUFTLDJFQUtULElBQU0sR0FBaUIsR0FDdEIsOGJBQ0EsQ0FDQyxTQUFVLENBQ1QsUUFBUyxDQUNSLFFBQVMseURBQ1QsWUFDQyxvSkFDRCxRQUNDLHdJQUNELFVBQ0MsK0RBQ0QsTUFDQyx1RUFDRCxLQUFNLGlEQUNQLEVBQ0EsS0FBTSxDQUNMLFFBQVMsZ0NBQ1QsR0FBSSxnREFDSixHQUFJLHVDQUNKLEtBQU0sU0FDTixVQUFXLFNBQ1gsVUFBVyxTQUNaLENBQ0QsRUFDQSxnQkFBaUIsQ0FDaEIsUUFBUyxVQUNULEtBQU0sU0FDUCxDQUNELENBQ0QsRUFFQSxTQUFTLENBQU0sRUFDZCxZQUNBLFVBQ0EsT0FDQSxVQUFVLE1BQ1AsR0FJQSxDQUdILE9BQ0MsR0FIWSxFQUFVLEdBQU8sU0FHN0IsQ0FDQyxVQUFXLEVBQUcsR0FBZSxDQUFFLFVBQVMsT0FBTSxXQUFVLENBQUMsQ0FBQyxFQUMxRCxZQUFVLFlBQ04sRUFDTCxFQ3hERiwwQ0FDQSxnQkFBUywwRUFLVCxTQUFTLEVBQU0sS0FDWCxHQUNrRCxDQUNyRCxPQUFPLEdBQWlCLFFBQWpCLENBQXNCLFlBQVUsWUFBYSxFQUFPLEVBUzVELFNBQVMsRUFBWSxLQUNqQixHQUNvRCxDQUN2RCxPQUFPLEdBQWlCLFVBQWpCLENBQXdCLFlBQVUsbUJBQW9CLEVBQU8sRUFTckUsU0FBUyxFQUFhLEVBQ3JCLGVBQ0csR0FDcUQsQ0FDeEQsT0FDQyxHQUFpQixXQUFqQixDQUNDLFVBQVcsRUFDVix5SkFDQSxDQUNELEVBQ0EsWUFBVSxvQkFDTixFQUNMLEVBSUYsU0FBUyxFQUFhLEVBQ3JCLFlBQ0EsY0FDRyxHQUNxRCxDQUN4RCxPQUNDLEdBZ0JFLEdBaEJGLENBQWMsWUFBVSxnQkFBeEIsU0FnQkUsQ0FmRCxHQUFDLEdBQUQsRUFBZSxFQUNmLEdBYWtCLFdBYmxCLENBQ0MsVUFBVyxFQUNWLDBYQUNBLENBQ0QsRUFDQSxZQUFVLG9CQUNOLEVBTkwsU0FhRSxDQUxBLEVBQ0QsR0FHa0IsU0FIbEIsQ0FBdUIsVUFBVSxvV0FBakMsU0FHRSxDQUZELEdBQUMsR0FBRCxFQUFPLEVBQ1AsR0FBaUMsT0FBakMsQ0FBTSxVQUFVLFVBQWhCLGlCQUFpQyxHQUNoQyxHQUNELEdBQ0QsRUFJSixTQUFTLEVBQVksRUFBRyxlQUFjLEdBQXNDLENBQzNFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUFHLCtDQUFnRCxDQUFTLEVBQ3ZFLFlBQVUsbUJBQ04sRUFDTCxFQUlGLFNBQVMsRUFBWSxFQUFHLGVBQWMsR0FBc0MsQ0FDM0UsT0FDQyxHQUFDLE1BQUQsQ0FDQyxVQUFXLEVBQ1YseURBQ0EsQ0FDRCxFQUNBLFlBQVUsbUJBQ04sRUFDTCxFQUlGLFNBQVMsRUFBVyxFQUNuQixlQUNHLEdBQ21ELENBQ3RELE9BQ0MsR0FBaUIsU0FBakIsQ0FDQyxVQUFXLEVBQUcscUNBQXNDLENBQVMsRUFDN0QsWUFBVSxrQkFDTixFQUNMLEVBSUYsU0FBUyxFQUFpQixFQUN6QixlQUNHLEdBQ3lELENBQzVELE9BQ0MsR0FBaUIsZUFBakIsQ0FDQyxVQUFXLEVBQUcsZ0NBQWlDLENBQVMsRUFDeEQsWUFBVSx3QkFDTixFQUNMLEVDckhGLHFCQUFTLGVDQVQsd0JBQVMsaUJBQWUsZUF3RWpCLElBQU0sR0FDWixHQUErQyxNQUFTLEVBRTVDLEdBQXFCLElBQTJCLENBQzVELElBQU0sRUFBVSxHQUFXLEVBQWUsRUFDMUMsR0FBSSxJQUFZLE9BQ2YsTUFBVSxNQUFNLDJEQUEyRCxFQUU1RSxPQUFPLEdBZ0NLLEdBQTBCLElBQXFDLENBQzNFLElBQU0sRUFBVSxHQUFXLEVBQWUsRUFDMUMsR0FBSSxJQUFZLE9BQ2YsTUFBVSxNQUNULGdFQUNELEVBRUQsTUFBTyxDQUNOLFlBQWEsRUFBUSxZQUNyQixLQUFNLEVBQVEsS0FDZCxPQUFRLEVBQVEsT0FDaEIsZ0JBQWlCLEVBQVEsZ0JBQ3pCLGNBQWUsRUFBUSxjQUN2QixhQUFjLEVBQVEsYUFDdEIsZUFBZ0IsRUFBUSxlQUN4QixlQUFnQixFQUFRLGVBQ3hCLFdBQVksRUFBUSxXQUNwQixRQUFTLEVBQVEsUUFDakIsV0FBWSxFQUFRLFdBQ3BCLFdBQVksRUFBUSxXQUNwQixNQUFPLEVBQVEsTUFDZixTQUFVLEVBQVEsU0FDbEIsWUFBYSxFQUFRLFlBQ3JCLFlBQWEsRUFBUSxZQUNyQixjQUFlLEVBQVEsY0FDdkIsZUFBZ0IsRUFBUSxlQUN4QixjQUFlLEVBQVEsYUFDeEIsR0MzSUQsd0JBQVMsaUJBQWUsZUErQmpCLElBQU0sR0FFVCxHQUF1RCxNQUFTLEVBRXZELEVBQTZCLElBQW1DLENBQzVFLElBQU0sRUFBVSxHQUFXLEVBQXVCLEVBQ2xELEdBQUksSUFBWSxPQUNmLE1BQVUsTUFDVCwyRUFDRCxFQUVELE9BQU8sR0FlSyxHQUNaLElBQTZDLENBQzVDLElBQU0sRUFBVSxHQUFXLEVBQXVCLEVBQ2xELEdBQUksSUFBWSxPQUNmLE1BQVUsTUFDVCxnRkFDRCxFQUVELE1BQU8sQ0FDTixZQUFhLEVBQVEsWUFDckIsS0FBTSxFQUFRLEtBQ2QsT0FBUSxFQUFRLE9BQ2hCLFVBQVcsRUFBUSxVQUNuQixnQkFBaUIsRUFBUSxnQkFDekIsY0FBZSxFQUFRLGNBQ3ZCLGFBQWMsRUFBUSxhQUN0QixlQUFnQixFQUFRLGVBQ3hCLGVBQWdCLEVBQVEsZUFDeEIsV0FBWSxFQUFRLFdBQ3BCLFFBQVMsRUFBUSxRQUNqQixXQUFZLEVBQVEsV0FDcEIsV0FBWSxFQUFRLFdBQ3BCLE1BQU8sRUFBUSxNQUNmLFNBQVUsRUFBUSxTQUNsQixZQUFhLEVBQVEsWUFDckIsWUFBYSxFQUFRLFlBQ3JCLGNBQWUsRUFBUSxjQUN2QixlQUFnQixFQUFRLGVBQ3hCLHFCQUFzQixFQUFRLHFCQUM5QixjQUFlLEVBQVEsYUFDeEIsR0N0RkYsc0JBQVMsY0FBYSxlQUFTLGVDRC9CLHNCQUFTLGdCQUFhLGNBQVcsZUFBUyxlQ0VuQyxJQUFNLEdBQW9DLENBRWhELE1BQU8sUUFDUCxPQUFRLFNBQ1IsSUFBSyxNQUNMLE9BQVEsU0FDUixPQUFRLFNBQ1IsT0FBUSxTQUNSLE9BQVEsU0FHUixNQUFPLFFBQ1AsT0FBUSxTQUNSLFNBQVUsWUFDVixNQUFPLFFBQ1AsWUFBYSxjQUNiLFNBQVUsV0FDVixPQUFRLFVBQ1IsVUFBVyxhQUNYLFFBQVMsV0FDVCxVQUFXLGFBQ1gsUUFBUyxXQUNULE1BQU8sUUFHUCxZQUFhLGVBQ2IsVUFBVyxhQUNYLFlBQWEsbUNBQ2IsaUJBQWtCLDBCQUNsQixzQkFBdUIsY0FDdkIsNEJBQTZCLCtCQUM3Qix5QkFBMEIsNEJBRzFCLE9BQVEsU0FDUixRQUFTLFVBQ1QsaUJBQWtCLG9CQUNsQixNQUFPLFFBQ1AsT0FBUSxTQUNSLFFBQVMsVUFDVCxPQUFRLFNBQ1IsU0FBVSxXQUNWLFNBQVUsWUFDVixNQUFPLFFBQ1AsTUFBTyxRQUNQLE1BQU8sUUFDUCxLQUFNLE9BQ04sTUFBTyxRQUNQLFlBQWEsY0FDYixHQUFJLEtBR0osbUJBQW9CLHVCQUNwQixxQkFBc0IseUJBQ3RCLDJCQUNDLHVEQUNELDZCQUNDLHlEQUNELFVBQVcsYUFDWCxxQkFBc0IsdUNBQ3RCLHVCQUF3Qiw0QkFDeEIsa0NBQW1DLHVDQUNuQyxVQUFXLGFBQ1gscUJBQXNCLG1DQUN0QixlQUFnQix1Q0FDaEIsb0JBQXFCLHlDQUNyQixtQkFBb0IscUNBQ3BCLGVBQWdCLHVDQUNoQixvQkFBcUIseUNBQ3JCLG1CQUFvQixxQ0FHcEIsTUFBTyxRQUNQLEtBQU0sT0FDTixJQUFLLE1BQ0wsS0FBTSxPQUNOLEtBQU0sT0FHTixVQUFXLFlBQ1gsU0FBVSxXQUNWLEtBQU0sT0FDTixLQUFNLE9BQ04sbUJBQW9CLHVCQUNwQiwyQkFBNEIsc0NBRzVCLE9BQVEsU0FDUixPQUFRLFNBQ1IsUUFBUyxVQUNULFVBQVcsWUFDWCxTQUFVLFdBQ1YsT0FBUSxTQUNSLFNBQVUsV0FHVixJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BR0wsUUFBUyxVQUNULFNBQVUsV0FDVixNQUFPLFFBQ1AsTUFBTyxRQUNQLElBQUssTUFDTCxLQUFNLE9BQ04sS0FBTSxPQUNOLE9BQVEsU0FDUixVQUFXLFlBQ1gsUUFBUyxVQUNULFNBQVUsV0FDVixTQUFVLFVBQ1gsRUNqR08sU0FBUyxFQUFXLENBQzFCLEVBQ0EsRUFDZ0IsQ0FDaEIsSUFBTSxFQUE2QixFQUNqQyxRQUFRLE1BQU0sRUFDZCxJQUFJLENBQWMsRUFFZCxFQUFzQixFQUFZLFNBQVMsQ0FBMEIsRUFDeEUsRUFBMkIsU0FBUyxFQUFHLE1BQU0sRUFDN0MsRUFFSCxPQUFPLE1BQU0sS0FBSyxDQUFFLE9BQVEsQ0FBRSxFQUFHLENBQUMsRUFBRyxJQUNwQyxFQUFvQixJQUFJLEVBQVUsS0FBSyxDQUN4QyxFQU9NLFNBQVMsRUFBYSxDQUM1QixFQUNBLEVBQ2tCLENBQ2xCLElBQU0sRUFBWSxHQUFZLEVBQVUsUUFBUSxPQUFPLEVBQUcsQ0FBYyxFQUV4RSxPQUFPLE1BQU0sS0FBSyxDQUFFLE9BQVEsQ0FBRSxFQUFHLENBQUMsRUFBRyxJQUFjLENBQ2xELElBQU0sRUFBWSxFQUFVLEdBQUcsSUFBSSxFQUFXLE1BQU0sRUFDcEQsT0FBTyxHQUFZLEVBQVcsQ0FBYyxFQUM1QyxFQUdLLFNBQVMsRUFBWSxDQUFDLEVBQXVDLENBQ25FLElBQU0sRUFBYyxFQUFVLFlBQVksRUFDMUMsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQVksRUFBRyxDQUFDLEVBQUcsSUFDOUMsRUFBVSxRQUFRLE9BQU8sRUFBRSxJQUFJLEVBQUcsS0FBSyxDQUN4QyxFQVFNLFNBQVMsRUFBVyxFQUMxQixnQkFBZ0IsRUFBTSxFQUN0QixTQUFTLElBQ2MsQ0FBQyxFQUFrQixDQUMxQyxPQUFPLE1BQU0sS0FBSyxDQUFFLFFBQU8sRUFBRyxDQUFDLEVBQUcsSUFDakMsRUFBYyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FDeEQsRUN2RU0sSUFBTSxHQUF1QixFQUN2QixHQUFvQixHQUNwQixHQUFtQixHQUNuQixHQUF5QixFQUN6QixHQUNaLHlEQUVZLEdBQWlELENBQzdELE9BQVEsRUFDUixPQUFRLEVBQ1IsUUFBUyxFQUNULFVBQVcsRUFDWCxTQUFVLEVBQ1YsT0FBUSxFQUNSLFNBQVUsQ0FDWCxFSDBEQSxJQUFNLEdBQXlELENBQzlELElBQUssTUFDTCxLQUFNLE9BQ04sTUFBTyxRQUNQLEtBQU0sTUFDUCxFQUVhLEdBQW9CLENBQ2hDLElBQzBCLENBQzFCLElBQ0MsU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUFjLEVBQU0sRUFDcEIsZ0JBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLGVBQ0EsU0FDQSxXQUNBLGVBQ0EsY0FDRyxHQUVHLEVBQWEsR0FBa0IsR0FBc0IsQ0FBVyxHQUNoRSxFQUFNLEdBQVcsR0FBdUIsQ0FBVyxHQUNuRCxFQUFlLEdBQW9CLEdBQTBCLENBQU0sR0FDbkUsRUFBaUIsR0FBc0IsR0FBUyxFQUFLLEdBQ3JELEVBQWUsR0FBb0IsR0FBK0IsSUFBSSxHQUN0RSxFQUFjLEdBQW1CLEdBQTZCLElBQUksR0FDbEUsRUFBZSxHQUFvQixHQUFTLEdBQVUsSUFBSSxFQUUzRCxFQUFJLEdBQVEsSUFBTSxDQUN2QixHQUFJLEVBQ0gsT0FBTyxFQUVSLEdBQUksRUFDSCxNQUFPLENBQUMsSUFBNEIsRUFBYSxJQUFRLEVBRTFELE1BQU8sQ0FBQyxJQUE0QixHQUFvQixJQUFRLEdBQzlELENBQUMsRUFBYyxDQUFVLENBQUMsRUFFdkIsRUFBd0IsR0FDN0IsQ0FBQyxFQUF3QixJQUEwQyxDQUNsRSxJQUFNLEVBQTZCLENBQUMsRUFFcEMsUUFBVyxLQUFTLEVBQ25CLEdBQUksRUFBTSxNQUNULEVBQVUsS0FDVCxHQUFHLEdBQXdCLENBQzFCLFFBQ0EsZ0JBQ0EsWUFDQSxTQUNELENBQUMsQ0FDRixFQUNNLEtBQ04sSUFBTSxHQUNMLEVBQU0sTUFBTSxjQUFjLENBQVMsR0FDbkMsRUFBTSxNQUFNLGVBQWUsQ0FBTyxFQUM3QixHQUNMLEVBQU0sSUFBSSxjQUFjLENBQVMsR0FDakMsRUFBTSxJQUFJLGVBQWUsQ0FBTyxFQUMzQixFQUNMLEVBQU0sTUFBTSxTQUFTLENBQVMsR0FBSyxFQUFNLElBQUksUUFBUSxDQUFPLEVBQzdELEdBQUksSUFBaUIsSUFBZSxFQUNuQyxFQUFVLEtBQUssQ0FBSyxFQUl2QixPQUFPLEdBRVIsQ0FBQyxDQUFhLENBQ2YsRUFFTSxFQUFzQixHQUFZLElBQU0sQ0FDN0MsR0FBSSxJQUFTLE1BQ1osTUFBTyxDQUNOLE1BQU8sRUFBWSxRQUFRLEtBQUssRUFDaEMsSUFBSyxFQUFZLE1BQU0sS0FBSyxDQUM3QixFQUVELEdBQUksSUFBUyxPQUNaLE1BQU8sQ0FDTixNQUFPLEVBQVksUUFBUSxNQUFNLEVBQ2pDLElBQUssRUFBWSxNQUFNLE1BQU0sQ0FDOUIsRUFFRCxHQUFJLElBQVMsT0FBUSxDQUNwQixJQUFNLEVBQVcsR0FBWSxFQUFhLENBQWMsRUFDeEQsTUFBTyxDQUNOLE1BQU8sRUFBUyxHQUFHLFFBQVEsS0FBSyxFQUNoQyxJQUFLLEVBQVMsR0FBRyxNQUFNLEtBQUssQ0FDN0IsRUFHRCxJQUFNLEVBQVEsR0FBYyxFQUFhLENBQWMsRUFDdkQsTUFBTyxDQUFFLE1BQU8sRUFBTSxHQUFHLEdBQUcsUUFBUSxLQUFLLEVBQUcsSUFBSyxFQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBRSxHQUN4RSxDQUFDLEVBQWEsRUFBTSxDQUFjLENBQUMsRUFFaEMsRUFBa0IsR0FBUSxJQUFNLENBQ3JDLElBQVEsUUFBTyxPQUFRLEVBQW9CLEVBQzNDLE9BQU8sRUFBc0IsRUFBTyxDQUFHLEdBQ3JDLENBQUMsRUFBdUIsQ0FBbUIsQ0FBQyxFQUUvQyxHQUFVLElBQU0sQ0FDZixHQUFJLEVBQ0gsRUFBaUIsQ0FBTSxHQUV0QixDQUFDLENBQU0sQ0FBQyxFQUNYLEdBQVUsSUFBTSxDQUNmLEdBQUksRUFDSCxFQUFpQixDQUFNLEVBQ3ZCLEVBQU0sT0FBTyxDQUFNLEVBQ25CLEVBQWUsQ0FBQyxJQUFhLEVBQVMsT0FBTyxDQUFNLENBQUMsR0FFbkQsQ0FBQyxDQUFNLENBQUMsRUFDWCxHQUFVLElBQU0sQ0FDZixHQUFJLEVBQ0gsRUFBTSxHQUFHLFdBQVcsQ0FBUSxHQUUzQixDQUFDLENBQVEsQ0FBQyxFQUViLElBQU0sR0FBYSxHQUNsQixDQUFDLElBQXNCLENBQ3RCLEVBQWUsQ0FBSSxFQUNuQixJQUFlLENBQUksR0FFcEIsQ0FBQyxDQUFZLENBQ2QsRUFFTSxHQUFpQixHQUN0QixDQUFDLElBQXNCLENBQ3RCLEVBQWUsQ0FBQyxJQUFTLENBQ3hCLElBQU0sRUFDTCxJQUFjLEVBQ1gsRUFBSyxJQUFJLEVBQUcsR0FBVyxFQUFLLEVBQzVCLEVBQUssU0FBUyxFQUFHLEdBQVcsRUFBSyxFQUVyQyxPQURBLElBQWUsQ0FBTyxFQUNmLEVBQ1AsR0FFRixDQUFDLEVBQU0sQ0FBWSxDQUNwQixFQUVNLEdBQWEsR0FBWSxJQUFNLEdBQWUsQ0FBQyxFQUFHLENBQUMsRUFBYyxDQUFDLEVBQ2xFLEdBQWEsR0FBWSxJQUFNLEdBQWUsRUFBRSxFQUFHLENBQUMsRUFBYyxDQUFDLEVBRW5FLEVBQVEsR0FBWSxJQUFNLENBQy9CLElBQU0sRUFBVSxFQUFNLEVBQ3RCLEVBQWUsQ0FBTyxFQUN0QixJQUFlLENBQU8sR0FDcEIsQ0FBQyxDQUFZLENBQUMsRUFFWCxFQUFXLEdBQ2hCLENBQUMsSUFBeUIsQ0FDekIsRUFBaUIsQ0FBQyxJQUFTLENBQUMsR0FBRyxFQUFNLENBQUssQ0FBQyxFQUMzQyxJQUFhLENBQUssR0FFbkIsQ0FBQyxDQUFVLENBQ1osRUFFTSxHQUFjLEdBQ25CLENBQUMsRUFBMEIsSUFBb0MsQ0FDOUQsRUFBaUIsQ0FBQyxJQUNqQixFQUFLLElBQUksQ0FBQyxJQUFVLENBQ25CLEdBQUksRUFBTSxLQUFPLEVBQ2hCLE9BQU8sRUFFUixJQUFNLEdBQVcsSUFBSyxLQUFVLENBQVEsRUFFeEMsT0FEQSxJQUFnQixFQUFRLEVBQ2pCLEdBQ1AsQ0FDRixHQUVELENBQUMsQ0FBYSxDQUNmLEVBRU0sR0FBdUIsR0FDNUIsQ0FDQyxFQUNBLEVBQ0EsSUFDSSxDQUNKLElBQWdCLElBQUssS0FBVSxDQUFRLENBQUMsRUFDeEMsRUFDQyxHQUF5QixDQUN4QixZQUFhLEVBQ2IsVUFDQSxnQkFDQSxNQUFPLEVBQVEsS0FDaEIsQ0FBQyxDQUNGLEdBRUQsQ0FBQyxFQUFlLENBQWEsQ0FDOUIsRUFFTSxHQUF1QixHQUM1QixDQUFDLEVBQXNCLElBQW1DLENBQ3pELElBQWdCLENBQUssRUFDckIsRUFDQyxHQUF5QixDQUN4QixZQUFhLEVBQ2IsZ0JBQ0EsTUFBTyxFQUFRLEtBQ2hCLENBQUMsQ0FDRixHQUVELENBQUMsRUFBZSxDQUFhLENBQzlCLEVBRU0sR0FBYyxHQUNuQixDQUFDLElBQTZCLENBQzdCLEVBQWlCLENBQUMsSUFBUyxDQUMxQixJQUFNLEVBQWdCLEVBQUssS0FBSyxDQUFDLElBQU0sRUFBRSxLQUFPLENBQU8sRUFDdkQsR0FBSSxFQUNILElBQWdCLENBQWEsRUFFOUIsT0FBTyxFQUFLLE9BQU8sQ0FBQyxJQUFNLEVBQUUsS0FBTyxDQUFPLEVBQzFDLEdBRUYsQ0FBQyxDQUFhLENBQ2YsRUFFTSxHQUFnQixHQUNyQixDQUFDLElBQXVDLENBQ3ZDLEdBQUksR0FBVyxNQUNkLEVBQWdCLEVBQVUsS0FBSyxFQUVoQyxJQUFNLEVBQVEsR0FBVyxPQUFTLEVBQ2xDLEVBQWlCLENBQ2hCLE1BQU8sRUFBRSxVQUFVLEVBQ25CLFFBQ0EsSUFBSyxHQUFXLEtBQU8sRUFBTSxJQUFJLEVBQUcsTUFBTSxFQUMxQyxXQUFZLEdBQVcsV0FDdkIsWUFBYSxHQUNiLE9BQVEsR0FBVyxRQUFVLEVBQzlCLENBQWtCLEVBQ2xCLEVBQW1CLEVBQUksR0FFeEIsQ0FBQyxFQUFhLENBQUMsQ0FDaEIsRUFFTSxHQUFpQixHQUFZLElBQU0sQ0FDeEMsRUFBZ0IsSUFBSSxFQUNwQixFQUFpQixJQUFJLEVBQ3JCLEVBQW1CLEVBQUssR0FDdEIsQ0FBQyxDQUFDLEVBRUMsR0FBbUIsR0FDeEIsQ0FBQyxJQUEwQixDQUMxQixFQUFRLENBQU8sRUFDZixJQUFlLENBQU8sR0FFdkIsQ0FBQyxDQUFZLENBQ2QsRUFFTSxFQUEyQixHQUNoQyxDQUFDLElBQStDLENBQy9DLElBQU0sRUFBWSxFQUFNLElBQ3hCLE9BQ0MsRUFBYyxLQUNiLENBQUMsS0FBTyxFQUFFLEtBQU8sR0FBRyxFQUFFLHVCQUF5QixHQUFhLEVBQUUsS0FDL0QsR0FBSyxNQUdQLENBQUMsQ0FBYSxDQUNmLEVBRUEsTUFBTyxDQUNOLGNBQ0EsT0FDQSxPQUFRLEVBQ1IsVUFBVyxFQUNYLGtCQUNBLGdCQUNBLGVBQ0EsaUJBQ0EsYUFBYyxHQUNkLGdCQUNBLGdCQUNBLGlCQUNBLGNBQ0EsUUFBUyxHQUNULGNBQ0EsY0FDQSxRQUNBLFdBQ0EsZUFDQSx3QkFDQSxlQUNBLHdCQUNBLGlCQUNBLGtCQUNBLG1CQUNBLHFCQUNBLGtCQUNBLHdCQUNBLDJCQUNBLEdBQ0QsNENEN1dELElBQU0sR0FBc0IsQ0FBQyxJQUE4QyxDQUMxRSxHQUFJLEVBQU0sWUFDVCxPQUFPLEVBQU0sWUFFZCxHQUFJLEVBQU0sYUFBZSxPQUN4QixNQUFPLENBQUMsRUFBTSxVQUFVLEVBRXpCLE1BQU8sQ0FBQyxHQWVJLEdBRVQsRUFDSCxXQUNBLFNBQVMsQ0FBQyxFQUNWLFlBQVksQ0FBQyxFQUNiLGlCQUFpQixFQUNqQixjQUFjLFFBQ2QsY0FDQSxjQUNBLGVBQ0EsY0FDQSxlQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxTQUNBLFdBQ0EsbUJBQ0Esb0JBQ0EscUJBQ0EsZUFDQSxlQUNBLG1CQUFtQixHQUNuQixzQkFBc0IsR0FDdEIsa0JBQ0Esa0JBQ0EsZUFDQSxhQUNBLGlCQUNBLGtCQUNBLGdCQUNBLGFBQWEsVUFDYixrQkFDQSxjQUFjLGFBQ2QsOEJBQ0Esd0JBQXVCLE1BQ2xCLENBRUwsSUFBTyxJQUFvQixHQUFxQixDQUFTLEdBQ2xELEdBQWtCLEdBQXVCLEdBRTlDLElBQUksSUFBSSxFQUFVLElBQUksQ0FBQyxJQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFHL0IsRUFBaUIsR0FBa0IsQ0FDeEMsU0FDQSxpQkFDQSxjQUNBLGNBQ0EsZ0JBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLGFBQWMsRUFDZCxTQUNBLFdBQ0EsZUFDQSxZQUNELENBQUMsRUFHSyxHQUEyQixHQUNoQyxDQUFDLElBQWdDLENBQ2hDLEVBQW9CLENBQUMsSUFBUyxDQUM3QixJQUFNLEdBQVMsSUFBSSxJQUFJLENBQUksRUFDM0IsR0FBSSxHQUFPLElBQUksQ0FBVSxFQUN4QixHQUFPLE9BQU8sQ0FBVSxFQUV4QixRQUFPLElBQUksQ0FBVSxFQUV0QixPQUFPLEdBQ1AsR0FFRixDQUFDLENBQ0YsRUFFTSxHQUFlLEdBQVksQ0FBQyxJQUFnQyxDQUNqRSxFQUFvQixDQUFDLElBQVMsSUFBSSxJQUFJLENBQUksRUFBRSxJQUFJLENBQVUsQ0FBQyxHQUN6RCxDQUFDLENBQUMsRUFFQyxHQUFlLEdBQVksQ0FBQyxJQUFnQyxDQUNqRSxFQUFvQixDQUFDLElBQVMsQ0FDN0IsSUFBTSxHQUFTLElBQUksSUFBSSxDQUFJLEVBRTNCLE9BREEsR0FBTyxPQUFPLENBQVUsRUFDakIsR0FDUCxHQUNDLENBQUMsQ0FBQyxFQUVDLEdBQW1CLEdBQVksSUFBTSxDQUMxQyxFQUFvQixJQUFJLElBQUksR0FBaUIsSUFBSSxDQUFDLElBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUM1RCxDQUFDLEVBQWdCLENBQUMsRUFFZixHQUFtQixHQUFZLElBQU0sQ0FDMUMsRUFBb0IsSUFBSSxHQUFLLEdBQzNCLENBQUMsQ0FBQyxFQUdDLEdBQXVCLEdBQzVCLENBQUMsSUFBaUQsQ0FDakQsT0FBTyxFQUFlLE9BQU8sT0FBTyxDQUFDLElBQXlCLENBQzdELEdBQUksRUFBTSxZQUNULE9BQU8sRUFBTSxZQUFZLFNBQVMsQ0FBVSxFQUU3QyxPQUFPLEVBQU0sYUFBZSxFQUM1QixHQUVGLENBQUMsRUFBZSxNQUFNLENBQ3ZCLEVBRU0sR0FBd0IsR0FDN0IsQ0FBQyxJQUFzRCxDQUN0RCxPQUFPLEVBQWUsT0FBTyxPQUFPLENBQUMsSUFBeUIsQ0FFN0QsT0FEeUIsR0FBb0IsQ0FBSyxFQUMxQixLQUFLLENBQUMsS0FBTyxFQUFZLFNBQVMsRUFBRSxDQUFDLEVBQzdELEdBRUYsQ0FBQyxFQUFlLE1BQU0sQ0FDdkIsRUFFTSxFQUFrQixHQUN2QixDQUFDLElBQXNELENBQ3RELE9BQU8sR0FBaUIsS0FBSyxDQUFDLElBQWEsRUFBUyxLQUFPLENBQVUsR0FFdEUsQ0FBQyxFQUFnQixDQUNsQixFQUVNLEVBQXNCLEdBQVksSUFBa0IsQ0FDekQsT0FBTyxHQUFpQixPQUFPLENBQUMsSUFDL0IsR0FBaUIsSUFBSSxFQUFTLEVBQUUsQ0FDakMsR0FDRSxDQUFDLEdBQWtCLEVBQWdCLENBQUMsRUFHakMsRUFBdUIsR0FBWSxDQUFDLElBQWtDLENBQzNFLE9BQU8sUUFBUSxFQUFNLGFBQWUsRUFBTSxZQUFZLE9BQVMsQ0FBQyxHQUM5RCxDQUFDLENBQUMsRUFHQyxFQUFZLEdBQ2pCLENBQUMsSUFBeUIsQ0FDekIsRUFBZSxpQkFBaUIsQ0FBSyxFQUNyQyxFQUFlLG1CQUFtQixFQUFJLEdBRXZDLENBQUMsQ0FBYyxDQUNoQixFQUVNLEVBQW1CLEdBQ3hCLENBQUMsSUFBeUIsQ0FDekIsR0FBSSxFQUNILE9BRUQsR0FBSSxFQUNILEVBQWEsQ0FBSyxFQUVsQixPQUFVLENBQUssR0FHakIsQ0FBQyxFQUFtQixFQUFjLENBQVMsQ0FDNUMsRUFFTSxHQUFrQixHQUN2QixDQUFDLElBQXdCLENBQ3hCLEdBQUksRUFDSCxPQUdELEdBQUksRUFDSCxFQUFZLENBQUksRUFDVixLQUNOLElBQU0sRUFBMEIsQ0FDL0IsTUFBTyxFQUFlLEVBQUUsVUFBVSxFQUNsQyxNQUFPLEVBQUssTUFDWixJQUFLLEVBQUssSUFDVixZQUFhLEdBQ2IsT0FBUSxFQUNULEVBRUEsR0FBSSxFQUFLLGFBQWUsT0FDdkIsRUFBUyxXQUFhLEVBQUssV0FHNUIsRUFBZSxpQkFBaUIsQ0FBUSxFQUN4QyxFQUFlLGdCQUFnQixFQUFLLEtBQUssRUFDekMsRUFBZSxtQkFBbUIsRUFBSSxJQUd4QyxDQUFDLEVBQWEsRUFBa0IsQ0FBYyxDQUMvQyxFQUdNLEdBQWUsR0FDcEIsS0FBTyxJQUNILEVBQ0gsS0FBTSxFQUFlLEtBQ3JCLFFBQVMsRUFBZSxRQUN4QixPQUFRLEVBQWUsT0FDdkIsVUFBVyxFQUFlLFVBRzFCLFVBQVcsR0FDWCxvQkFDQSw0QkFDQSxnQkFDQSxnQkFDQSxvQkFDQSxvQkFHQSx3QkFDQSx5QkFDQSxrQkFDQSxzQkFHQSx1QkFDQSx1QkFHQSxhQUFjLEVBQ2QsWUFBYSxHQUdiLGtCQUNBLGtCQUdBLGNBQ0EsaUJBQ0Esa0JBQ0EsU0FDQSxXQUNBLG1CQUNBLG9CQUNBLHFCQUNBLGVBQ0EsZUFDQSxtQkFDQSxzQkFDQSxnQkFDQSxhQUNBLGtCQUNBLGNBQ0EsOEJBQ0EsdUJBQ0QsR0FDQSxDQUNDLEVBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEdBQ0EsRUFDRCxDQUNELEVBRUEsT0FDQyxHQUVFLEdBQXdCLFNBRjFCLENBQWtDLE1BQU8sR0FBekMsU0FDRSxFQUNBLEdIOVRHLFNBQVMsQ0FBMEIsQ0FBQyxFQUE2QixDQUV2RSxJQUFNLEVBQWtCLEdBQVcsRUFBdUIsRUFDcEQsRUFBaUIsR0FBVyxFQUFlLEVBRWpELEdBQUksRUFDSCxPQUFPLEVBQVMsQ0FBZSxFQUdoQyxHQUFJLEVBQ0gsT0FBTyxFQUFTLENBQWMsRUFJL0IsTUFBVSxNQUNULDRGQUNELHNEUUhNLFNBQVMsRUFBb0IsRUFDbkMsU0FDQSxVQUNBLFlBQ0EsZ0JBQ0EsY0FDNkIsQ0FDN0IsSUFBUSxLQUFNLEVBQXdCLENBQUMsS0FBYSxDQUFFLEVBQUcsRUFBUSxDQUFFLEVBQUUsRUFFL0QsRUFBb0IsQ0FBQyxJQUErQixDQUN6RCxFQUFVLENBQUssRUFDZixFQUFRLEdBR0gsRUFBUyxJQUFrQixPQUVqQyxPQUNDLEdBNkRFLEdBN0RGLENBQVEsYUFBYyxFQUFTLEtBQU0sRUFBckMsU0FDQyxHQTJERSxHQTNERixDQUFlLFVBQVUsV0FBekIsU0EyREUsQ0ExREQsR0FVRSxHQVZGLFVBVUUsQ0FURCxHQUVFLEdBRkYsVUFDRSxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxzQkFBc0IsRUFDM0QsRUFDRixHQUtFLEdBTEYsVUFLRSxDQUxGLElBQ0csRUFESCxJQUNnQixJQUNkLEVBQ0UsRUFBRSw0QkFBNEIsRUFDOUIsRUFBRSw4QkFBOEIsR0FDbEMsR0FDRCxFQUVGLEdBdUNFLE1BdkNGLENBQUssVUFBVSxZQUFmLFNBdUNFLENBdENELEdBV0UsRUFYRixDQUNDLFVBQVUsa0NBQ1YsUUFBUyxJQUFNLEVBQWtCLE1BQU0sRUFDdkMsUUFBUSxVQUhULFNBS0MsR0FLRSxNQUxGLENBQUssVUFBVSxZQUFmLFNBS0UsQ0FKRCxHQUErQyxNQUEvQyxDQUFLLFVBQVUsY0FBZixTQUE4QixFQUFFLFdBQVcsRUFBSSxFQUMvQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBUyxFQUFFLGdCQUFnQixFQUFJLEVBQUUsZ0JBQWdCLEVBQ2pELEdBQ0QsRUFDRCxFQUVGLEdBV0UsRUFYRixDQUNDLFVBQVUsa0NBQ1YsUUFBUyxJQUFNLEVBQWtCLFdBQVcsRUFDNUMsUUFBUSxVQUhULFNBS0MsR0FLRSxNQUxGLENBQUssVUFBVSxZQUFmLFNBS0UsQ0FKRCxHQUE0RCxNQUE1RCxDQUFLLFVBQVUsY0FBZixTQUE4QixFQUFFLHdCQUF3QixFQUFJLEVBQzVELEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFTLEVBQUUscUJBQXFCLEVBQUksRUFBRSxxQkFBcUIsRUFDM0QsR0FDRCxFQUNELEVBRUYsR0FXRSxFQVhGLENBQ0MsVUFBVSxrQ0FDVixRQUFTLElBQU0sRUFBa0IsS0FBSyxFQUN0QyxRQUFRLFVBSFQsU0FLQyxHQUtFLE1BTEYsQ0FBSyxVQUFVLFlBQWYsU0FLRSxDQUpELEdBQStDLE1BQS9DLENBQUssVUFBVSxjQUFmLFNBQThCLEVBQUUsV0FBVyxFQUFJLEVBQy9DLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxvQkFBb0IsRUFDekQsR0FDRCxFQUNELEdBQ0QsRUFFRixHQUlFLEdBSkYsVUFDQyxHQUVFLEVBRkYsQ0FBUSxRQUFTLEVBQVMsUUFBUSxVQUFsQyxTQUNFLEVBQUUsUUFBUSxFQUNWLEVBQ0QsR0FDRCxFQUNELEVDOUZHLElBQU0sR0FBa0IsQ0FDOUIsRUFDQSxJQUNJLENBQ0osSUFBUSxTQUFRLFFBQVMsRUFFekIsR0FBSSxDQUFDLEdBQVUsQ0FBQyxHQUFRLENBQUMsRUFDeEIsT0FBTyxLQUdSLElBQU0sRUFBYSxFQUFLLEtBQUssU0FBUyxPQUFTLGFBQ3ZDLGFBQVksVUFBVyxFQUFLLEtBQUssU0FBVyxDQUFDLEVBQ2pELEVBRUosR0FBSSxFQUFZLENBQ2YsSUFBUSxPQUFNLE9BQU8sRUFBRyxTQUFTLEdBQU0sRUFBSyxLQUFLLFFBR2pELEVBQVcsRUFBTSxDQUFJLEVBQUUsS0FBSyxDQUFJLEVBQUUsT0FBTyxDQUFNLEVBQ3pDLEtBQ04sSUFBUSxRQUFTLEVBQUssS0FBSyxRQUUzQixFQUFXLEVBQU0sQ0FBSSxFQUd0QixJQUFNLEVBQWdCLEVBQVksSUFBSSxLQUFLLEVBQVksTUFBTyxRQUFRLEVBR2xFLEVBQVMsRUFBUyxJQUFJLEVBQWUsUUFBUSxFQUVqRCxHQUFJLEVBQU8sT0FBTyxFQUFPLFFBQVEsS0FBSyxDQUFDLEVBRXRDLEVBQVMsRUFBTyxTQUFTLEVBQUcsS0FBSyxFQUFFLE1BQU0sS0FBSyxFQUkvQyxJQUFNLEVBQVUsQ0FDZixNQUFPLEVBQ1AsSUFBSyxFQUNMLGFBQ0EsT0FBUSxFQUFhLEdBQVMsR0FBVSxFQUFZLE1BQ3JELEVBQ0EsTUFBTyxDQUFFLGNBQWEsU0FBUSxHQzlDL0Isc0JBQVMsdUJBQ1QsNkJBQVMsNEJBRVQsOEJBQVMsZUFBcUIsd0RBUXZCLElBQU0sR0FBb0QsRUFBRyxTQUFVLENBQzdFLElBQU8sRUFBYSxHQUFrQixHQUF3QixJQUFJLEVBTWxFLE9BSkEsR0FBb0IsRUFBSyxLQUFPLENBQy9CLGdCQUNELEVBQUUsRUFHRCxHQVlFLEdBWkYsQ0FBYSxVQUFXLENBQUMsRUFBa0IsRUFBM0MsU0FDRSxHQUNBLEdBUUUsTUFSRixDQUNDLFVBQVcsRUFDVixzRkFDQSxFQUFZLGlCQUFtQixjQUMvQixFQUFZLE9BQVMsWUFDdEIsRUFMRCxTQU9FLEdBQWEsTUFDYixFQUVGLHNFYkpHLFNBQVMsRUFBa0IsRUFBRyxZQUFxQyxDQUN6RSxJQUFNLEVBQWlCLEdBQXNCLElBQUksRUFDM0MsRUFBaUIsR0FFcEIsSUFBSSxHQUVDLGNBQWEsdUJBQXNCLHNCQUMxQyxFQUF3QixDQUFDLEtBQWEsQ0FDckMsWUFBYSxFQUFRLFlBQ3JCLHFCQUFzQixFQUFRLHFCQUM5QixtQkFBb0IsRUFBUSxrQkFDN0IsRUFBRSxHQUdJLEVBQWlCLEdBQXNCLEdBSTNDLENBQ0YsT0FBUSxHQUNSLE1BQU8sS0FDUCxRQUFTLElBQ1YsQ0FBQyxFQUdLLEVBQWMsR0FBVSxHQUFhLENBRTFDLHFCQUFzQixDQUNyQixTQUFVLENBQ1gsQ0FDRCxDQUFDLEVBRUssRUFBYyxHQUFVLEdBQWEsQ0FFMUMscUJBQXNCLENBQ3JCLE1BQU8sSUFDUCxVQUFXLENBQ1osQ0FDRCxDQUFDLEVBRUssRUFBVSxHQUFXLEVBQWEsQ0FBVyxFQUc3QyxFQUFxQixDQUMxQixFQUNBLElBQ0ksQ0FFSixHQUFJLENBQUMsR0FBUyxDQUFDLEVBQU0sR0FDcEIsT0FHRCxHQUFJLENBQUMsR0FBVyxPQUFPLEtBQUssQ0FBTyxFQUFFLFNBQVcsRUFDL0MsT0FHRCxHQUFJLEdBQWlCLENBQUssRUFFekIsRUFBbUIsQ0FDbEIsT0FBUSxHQUNSLFFBQ0EsU0FDRCxDQUFDLEVBR0QsT0FBWSxFQUFNLEdBQUksQ0FBTyxHQUt6QixFQUE4QixDQUFDLElBQStCLENBQ25FLEdBQUksQ0FBQyxFQUFnQixPQUFTLENBQUMsRUFBZ0IsUUFBUyxDQUN2RCxFQUFtQixDQUFFLE9BQVEsR0FBTyxNQUFPLEtBQU0sUUFBUyxJQUFLLENBQUMsRUFDaEUsT0FHRCxHQUFJLENBQ0gsRUFBcUIsRUFBZ0IsTUFBTyxFQUFnQixRQUFTLENBQ3BFLFFBQ0EsVUFBVyxFQUFnQixNQUFNLEtBQ2xDLENBQUMsRUFDQSxLQUFNLFNBRU4sQ0FDRCxFQUFtQixDQUFFLE9BQVEsR0FBTyxNQUFPLEtBQU0sUUFBUyxJQUFLLENBQUMsSUFLNUQsRUFBNEIsSUFBTSxDQUN2QyxFQUFtQixDQUFFLE9BQVEsR0FBTyxNQUFPLEtBQU0sUUFBUyxJQUFLLENBQUMsR0FHM0QsRUFBa0IsQ0FBQyxJQUEwQixDQUNsRCxJQUFRLFVBQVcsRUFHbkIsR0FBSSxFQUFPLEtBQUssU0FBUyxPQUFTLGlCQUNqQyxFQUFlLFNBQVMsZUFBZSxFQUFPLEtBQUssUUFBUSxLQUFLLEVBQ2hFLEVBQWUsUUFBVSxFQUFPLEtBQUssUUFBUSxPQUl6QyxFQUFnQixDQUFDLElBQXdCLENBQzlDLElBQU0sRUFBZSxHQUFnQixFQUFPLEVBQWUsT0FBTyxFQUNsRSxHQUFJLEVBQWMsQ0FDakIsSUFBUSxjQUFhLFdBQVksRUFDakMsRUFBbUIsRUFBYSxDQUFPLEVBSXhDLEVBQWUsUUFBVSxLQUN6QixFQUFlLFNBQVMsZUFBZSxJQUFJLEdBR3RDLEVBQW1CLENBQUMsSUFBNEIsQ0FDckQsRUFBZSxRQUFVLE1BSTFCLEdBQUksRUFDSCxPQUFPLEVBR1IsT0FDQyxnQkFvQkUsQ0FuQkQsR0FTRSxHQVRGLENBQ0MsbUJBQW9CLEdBQ3BCLGFBQWMsRUFDZCxVQUFXLEVBQ1gsWUFBYSxFQUNiLFFBQVMsRUFMVixTQVNFLENBRkEsRUFDRCxHQUFDLEdBQUQsQ0FBa0IsSUFBSyxFQUFnQixHQUN0QyxFQUdGLEdBQUMsR0FBRCxDQUNDLFdBQVksRUFBZ0IsT0FBTyxPQUFTLEdBQzVDLE9BQVEsRUFBZ0IsT0FDeEIsUUFBUyxFQUNULFVBQVcsRUFDWCxjQUFjLE9BQ2YsR0FDQyxFYzNLSixvQkFBUyxjQUFXLGVBQVMsZUNEN0IsNENBQ0Esb0JBQVMsK0RBS1QsU0FBUyxFQUFRLEVBQ2hCLGVBQ0csR0FDb0QsQ0FDdkQsT0FDQyxHQWNvQixRQWRwQixDQUNDLFVBQVcsRUFDViw4ZUFDQSxDQUNELEVBQ0EsWUFBVSxjQUNOLEVBTkwsU0FRQyxHQUtvQixhQUxwQixDQUNDLFVBQVUsZ0VBQ1YsWUFBVSxxQkFGWCxTQUlDLEdBQUMsR0FBRCxDQUFXLFVBQVUsV0FBVyxFQUMvQixFQUNELEVDekJKLHVCQUFTLGlDQUNULG1CQUFTLHNCQUNULG9CQUFTLGFBQVcsZUFBUSxlQ0Y1QiwwQkFDQyxzQkFDQSx1QkFDQSxzQkFFRCx5QkFFQSxvQkFBUywyQkFBVyxtRUFJcEIsU0FBUyxFQUFRLEVBQ2hCLFlBQ0EsYUFDQSxrQkFBa0IsR0FDbEIsZ0JBQWdCLFFBQ2hCLGdCQUFnQixRQUNoQixhQUNBLGdCQUNHLEdBR0QsQ0FDRixJQUFNLEVBQW9CLEdBQXFCLEVBRS9DLE9BQ0MsR0FBQyxHQUFELENBQ0MsY0FBZSxFQUNmLFVBQVcsRUFDVix5SkFDQSxPQUFPLCtDQUNQLE9BQU8sbURBQ1AsQ0FDRCxFQUNBLFdBQVksQ0FDWCxLQUFNLEVBQUcsUUFBUyxFQUFrQixJQUFJLEVBQ3hDLE9BQVEsRUFDUCwyQ0FDQSxFQUFrQixNQUNuQixFQUNBLE1BQU8sRUFBRyw2QkFBOEIsRUFBa0IsS0FBSyxFQUMvRCxJQUFLLEVBQ0osMEVBQ0EsRUFBa0IsR0FDbkIsRUFDQSxnQkFBaUIsRUFDaEIsR0FBZSxDQUFFLFFBQVMsQ0FBYyxDQUFDLEVBQ3pDLDhEQUNBLEVBQWtCLGVBQ25CLEVBQ0EsWUFBYSxFQUNaLEdBQWUsQ0FBRSxRQUFTLENBQWMsQ0FBQyxFQUN6Qyw4REFDQSxFQUFrQixXQUNuQixFQUNBLGNBQWUsRUFDZCwyRUFDQSxFQUFrQixhQUNuQixFQUNBLFVBQVcsRUFDVixzRkFDQSxFQUFrQixTQUNuQixFQUNBLGNBQWUsRUFDZCxzSEFDQSxFQUFrQixhQUNuQixFQUNBLFNBQVUsRUFDVCx3Q0FDQSxFQUFrQixRQUNuQixFQUNBLGNBQWUsRUFDZCwwQkFDQSxJQUFrQixRQUNmLFVBQ0EsMEdBQ0gsRUFBa0IsYUFDbkIsRUFDQSxNQUFPLHlCQUNQLFNBQVUsRUFBRyxPQUFRLEVBQWtCLFFBQVEsRUFDL0MsUUFBUyxFQUNSLGdGQUNBLEVBQWtCLE9BQ25CLEVBQ0EsS0FBTSxFQUFHLG1CQUFvQixFQUFrQixJQUFJLEVBQ25ELG1CQUFvQixFQUNuQiw4QkFDQSxFQUFrQixrQkFDbkIsRUFDQSxZQUFhLEVBQ1osa0RBQ0EsRUFBa0IsV0FDbkIsRUFDQSxJQUFLLEVBQ0osb0lBQ0EsRUFBTSxlQUNILDJEQUNBLDBEQUNILEVBQWtCLEdBQ25CLEVBQ0EsWUFBYSxFQUNaLHlCQUNBLEVBQWtCLFdBQ25CLEVBQ0EsYUFBYyxFQUFHLGVBQWdCLEVBQWtCLFlBQVksRUFDL0QsVUFBVyxFQUFHLHlCQUEwQixFQUFrQixTQUFTLEVBQ25FLE1BQU8sRUFDTixnRkFDQSxFQUFrQixLQUNuQixFQUNBLFFBQVMsRUFDUiw0REFDQSxFQUFrQixPQUNuQixFQUNBLFNBQVUsRUFDVCxtQ0FDQSxFQUFrQixRQUNuQixFQUNBLE9BQVEsRUFBRyxZQUFhLEVBQWtCLE1BQU0sS0FDN0MsQ0FDSixFQUNBLFdBQVksQ0FDWCxLQUFNLEVBQUcsWUFBVyxhQUFZLEtBQVksQ0FDM0MsT0FDQyxHQUFDLE1BQUQsQ0FDQyxVQUFXLEVBQUcsQ0FBUyxFQUN2QixZQUFVLFdBQ1YsSUFBSyxLQUNELEVBQ0wsR0FHRixRQUFTLEVBQUcsWUFBVyxpQkFBZ0IsS0FBWSxDQUNsRCxHQUFJLElBQWdCLE9BQ25CLE9BQ0MsR0FBQyxHQUFELENBQWlCLFVBQVcsRUFBRyxTQUFVLENBQVMsS0FBTyxFQUFPLEVBSWxFLEdBQUksSUFBZ0IsUUFDbkIsT0FDQyxHQUFDLEdBQUQsQ0FDQyxVQUFXLEVBQUcsU0FBVSxDQUFTLEtBQzdCLEVBQ0wsRUFJRixPQUNDLEdBQUMsR0FBRCxDQUFpQixVQUFXLEVBQUcsU0FBVSxDQUFTLEtBQU8sRUFBTyxHQUdsRSxVQUFXLEdBQ1gsV0FBWSxFQUFHLGNBQWEsS0FBWSxDQUN2QyxPQUNDLEdBSUUsS0FKRixJQUFRLEVBQVIsU0FDQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtFQUFmLFNBQ0UsRUFDQSxFQUNELE1BR0QsQ0FDSixFQUNBLFdBQVksQ0FDWCxvQkFBcUIsQ0FBQyxJQUNyQixFQUFLLGVBQWUsVUFBVyxDQUFFLE1BQU8sT0FBUSxDQUFDLEtBQy9DLENBQ0osRUFDQSxnQkFBaUIsS0FDYixFQUNMLEVBSUYsU0FBUyxFQUFpQixFQUN6QixZQUNBLE1BQ0EsZUFDRyxHQUN1QyxDQUMxQyxJQUFNLEVBQW9CLEdBQXFCLEVBRXpDLEVBQVksVUFBMEIsSUFBSSxFQU9oRCxPQU5NLGFBQVUsSUFBTSxDQUNyQixHQUFJLEVBQVUsUUFDYixFQUFJLFNBQVMsTUFBTSxHQUVsQixDQUFDLEVBQVUsT0FBTyxDQUFDLEVBR3JCLEdBQUMsRUFBRCxDQUNDLFVBQVcsRUFDVixtM0JBQ0EsRUFBa0IsSUFDbEIsQ0FDRCxFQUNBLFdBQVUsRUFBSSxLQUFLLG1CQUFtQixFQUN0QyxpQkFBZ0IsRUFBVSxVQUMxQixvQkFBbUIsRUFBVSxhQUM3QixtQkFBa0IsRUFBVSxZQUM1Qix1QkFDQyxFQUFVLFVBQ1YsQ0FBQyxFQUFVLGFBQ1gsQ0FBQyxFQUFVLFdBQ1gsQ0FBQyxFQUFVLGFBRVosSUFBSyxFQUNMLEtBQUssT0FDTCxRQUFRLFdBQ0osRUFDTCxFQ25ORixvRkFLQSxTQUFTLEVBQU8sS0FDWixHQUNtRCxDQUN0RCxPQUFPLEdBQWtCLFFBQWxCLENBQXVCLFlBQVUsYUFBYyxFQUFPLEVBRzlELFNBQVMsRUFBYyxLQUNuQixHQUNzRCxDQUN6RCxPQUFPLEdBQWtCLFdBQWxCLENBQTBCLFlBQVUscUJBQXNCLEVBQU8sRUFHekUsU0FBUyxFQUFjLEVBQ3RCLFlBQ0EsUUFBUSxTQUNSLGFBQWEsS0FDVixHQUNzRCxDQUN6RCxPQUNDLEdBV21CLFVBWG5CLFVBQ0MsR0FBa0IsV0FBbEIsQ0FDQyxNQUFPLEVBQ1AsVUFBVyxFQUNWLGllQUNBLENBQ0QsRUFDQSxZQUFVLGtCQUNWLFdBQVksS0FDUixFQUNMLEVBQ0Msc0RGWkcsU0FBUyxFQUFVLEVBQ3pCLE9BQ0EsZ0JBQ0EsV0FDQSxRQUFRLGNBQ1IsWUFDQSxZQUNtQixDQUNuQixJQUFNLEVBQWEsR0FBaUMsSUFBSSxHQUNqRCxFQUFjLEdBQW1CLEdBQTJCLENBQUksRUFHdkUsR0FBVSxJQUFNLENBQ2YsRUFBZ0IsQ0FBSSxHQUNsQixDQUFDLENBQUksQ0FBQyxFQUVULElBQU0sRUFBbUIsQ0FBQyxJQUEyQixDQUVwRCxHQURBLEVBQWdCLENBQUksRUFDaEIsRUFDSCxFQUFXLFNBQVMsTUFBTSxFQUUzQixJQUFXLENBQUksR0FHaEIsT0FDQyxHQThCRSxNQTlCRixDQUFLLFVBQVcsRUFBaEIsU0FDQyxHQTRCRSxHQTVCRixVQTRCRSxDQTNCRCxHQWVFLEdBZkYsQ0FBZ0IsUUFBTyxHQUF2QixTQUNDLEdBYUUsRUFiRixDQUNDLFVBQVcsRUFDVixvRkFDRCxFQUNBLGFBQVksQ0FBQyxFQUNiLFFBQVEsVUFMVCxTQWFFLENBTkQsR0FBQyxHQUFELEVBQWMsRUFDYixFQUNBLEVBQU0sQ0FBWSxFQUFFLE9BQU8sYUFBYSxFQUV4QyxHQUFlLE9BQWYsVUFBTyxFQUFRLEdBRWYsRUFDRCxFQUNGLEdBVUUsR0FWRixDQUFnQixNQUFNLFFBQVEsVUFBVSxhQUF4QyxTQVVFLENBVEQsR0FBQyxHQUFELENBQWMsSUFBSyxFQUFZLEVBQy9CLEdBQUMsR0FBRCxDQUNDLGNBQWMsV0FDZCxhQUFjLEVBQ2QsU0FBVSxFQUNWLEtBQUssU0FDTCxTQUFVLEVBQ1YsU0FBVSxFQUNYLEdBQ0MsR0FDRCxFQUNELDJDRzFFSixTQUFTLEVBQUssRUFBRyxZQUFXLFVBQVMsR0FBd0MsQ0FDNUUsT0FDQyxHQUFDLFFBQUQsQ0FDQyxVQUFXLEVBQ1Ysa2NBQ0EsZ0ZBQ0EseUdBQ0EsQ0FDRCxFQUNBLFlBQVUsUUFDVixLQUFNLEtBQ0YsRUFDTCxFQ2hCRixrRkFLQSxTQUFTLENBQUssRUFDYixlQUNHLEdBQ2lELENBQ3BELE9BQ0MsR0FBZ0IsUUFBaEIsQ0FDQyxVQUFXLEVBQ1Ysc05BQ0EsQ0FDRCxFQUNBLFlBQVUsV0FDTixFQUNMLEVDakJGLG1HQVVBLFNBQVMsRUFBVSxFQUNsQixZQUNBLFdBQ0EsbUJBQ0csR0FDZ0IsQ0FDbkIsT0FDQyxHQWlCc0IsUUFqQnRCLENBQ0MsVUFBVyxFQUFHLFdBQVksQ0FBUyxFQUNuQyxZQUFVLGlCQUNOLEVBSEwsU0FpQkUsQ0FaRCxHQVNzQixZQVR0QixJQUNLLEVBQ0osVUFBVyxFQUNWLHFKQUNBLEdBQWUsU0FDaEIsRUFDQSxZQUFVLHVCQU5YLFNBUUUsRUFDQSxFQUNGLEdBQUMsR0FBRCxFQUFXLEVBQ1gsR0FBcUIsVUFBckIsRUFBNEIsR0FDM0IsRUFJSixTQUFTLEVBQVMsRUFDakIsWUFDQSxjQUFjLGNBQ1gsR0FDcUUsQ0FDeEUsT0FDQyxHQWlCc0IsdUJBakJ0QixDQUNDLFVBQVcsRUFDVixxREFDQSxJQUFnQixZQUNmLDZDQUNELElBQWdCLGNBQ2YsK0NBQ0QsQ0FDRCxFQUNBLFlBQVUsd0JBQ1YsWUFBYSxLQUNULEVBWEwsU0FhQyxHQUFxQixtQkFBckIsQ0FDQyxVQUFVLHlDQUNWLFlBQVUsb0JBQ1gsRUFDQyxFQzdESixnQkFBUyxzQkFDVCxvQkFBUyxhQUFXLGVBQVEsZUNENUIsa0JBQVMsZUFTRixTQUFTLEVBQXlCLEVBQ3hDLGFBQWEsVUFDYixVQUFVLFFBQ1YsVUFBVSxTQUN3QixDQXFDbEMsTUFBTyxDQUNOLFlBcENtQixHQUFRLElBQU0sQ0FDakMsSUFBTSxFQUFrQixDQUFDLEdBQ2xCLEVBQVMsR0FBYSxFQUFRLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxHQUNuRCxFQUFTLEdBQWEsRUFBUSxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFFcEQsRUFBa0IsRUFBVSxHQUFLLEVBQ2pDLEVBQWtCLEVBQVUsR0FBSyxFQUV2QyxRQUNLLEVBQWUsRUFDbkIsR0FBZ0IsRUFDaEIsR0FBZ0IsR0FDZixDQUNELElBQU0sRUFBUSxLQUFLLE1BQU0sRUFBZSxFQUFFLEVBQ3BDLEVBQVUsRUFBZSxHQUV6QixFQUFhLEdBQUcsRUFBTSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsS0FBSyxFQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxJQUM3RixFQUFNLEtBQUssQ0FBVSxFQUd0QixPQUFPLEdBQ0wsQ0FBQyxFQUFTLENBQU8sQ0FBQyxFQWdCcEIsV0Fka0IsQ0FBQyxJQUFpQixDQUNwQyxJQUFPLEVBQU8sR0FBVyxFQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxFQUM3QyxFQUFTLEdBQVMsR0FBSyxLQUFPLEtBQzlCLEVBQWUsSUFBVSxFQUFJLEdBQUssRUFBUSxHQUFLLEVBQVEsR0FBSyxFQUVsRSxHQUFJLElBQWUsVUFDbEIsTUFBTyxHQUFHLEVBQU0sU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEtBQUssRUFBUSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsSUFHbEYsTUFBTyxHQUFHLEtBQWdCLEVBQVEsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEtBQUssSUFNbEUsc0REdkNELElBQU0sR0FBYyxDQUFDLElBQXdDLENBRTVELEVBQUUsZ0JBQWdCLEdBZVosU0FBUyxFQUFVLEVBQ3pCLFFBQ0EsV0FDQSxVQUFVLFFBQ1YsVUFBVSxRQUNWLGFBQWEsVUFDYixjQUFjLGlCQUNkLFlBQ0EsV0FBVyxHQUNYLFFBQ21CLENBQ25CLElBQU8sRUFBTSxHQUFXLEdBQVMsRUFBSyxHQUMvQixFQUFRLEdBQWEsR0FBUyxFQUFFLEVBQ2pDLEVBQVcsR0FBeUIsSUFBSSxFQUN4QyxFQUFhLEdBQTBCLElBQUksR0FDMUMsRUFBYyxHQUFtQixHQUFpQixDQUFDLEdBRWxELGNBQWEsY0FBZSxHQUEwQixDQUM3RCxhQUNBLFVBQ0EsU0FDRCxDQUFDLEVBR0ssRUFBa0IsRUFBWSxPQUFPLENBQUMsSUFBUyxDQUVwRCxPQURzQixFQUFXLENBQUksRUFDaEIsWUFBWSxFQUFFLFNBQVMsRUFBTyxZQUFZLENBQUMsRUFDaEUsRUFFSyxFQUFlLENBQUMsSUFBaUIsQ0FDdEMsRUFBUyxDQUFJLEVBQ2IsRUFBUSxFQUFLLEVBQ2IsRUFBVSxFQUFFLEdBSWIsR0FBVSxJQUFNLENBQ2YsR0FBSSxFQUFNLENBQ1QsR0FBSSxFQUFXLFFBQ2QsRUFBZ0IsRUFBVyxRQUFRLFdBQVcsRUFFL0MsV0FBVyxJQUFNLENBQ2hCLEVBQVMsU0FBUyxNQUFNLEdBQ3RCLENBQUMsSUFFSCxDQUFDLENBQUksQ0FBQyxFQUVULElBQU0sRUFBb0IsRUFBUSxFQUFXLENBQUssRUFBSSxFQUV0RCxPQUNDLEdBMERFLEdBMURGLENBQVMsYUFBYyxFQUFTLEtBQU0sRUFBdEMsU0EwREUsQ0F6REQsR0FjRSxHQWRGLENBQWdCLFFBQU8sR0FBdkIsU0FDQyxHQVlFLEVBWkYsQ0FDQyxnQkFBYyxzQkFDZCxnQkFBZSxFQUNmLFVBQVcsRUFBRyx1QkFBd0IsQ0FBUyxFQUMvQyxjQUFhLGVBQWUsSUFDNUIsU0FBVSxFQUNWLElBQUssRUFDTCxLQUFLLFdBQ0wsUUFBUSxVQVJULFNBWUUsQ0FGRCxHQUFDLEdBQUQsQ0FBTyxVQUFVLGVBQWUsRUFDL0IsR0FDQSxFQUNELEVBQ0YsR0F5Q0UsR0F6Q0YsQ0FDQyxNQUFNLFFBQ04sVUFBVSxNQUNWLE1BQU8sQ0FBRSxNQUFPLENBQWEsRUFIOUIsU0F5Q0UsQ0FwQ0QsR0FRRSxNQVJGLENBQUssVUFBVSxlQUFmLFNBQ0MsR0FBQyxHQUFELENBQ0MsVUFBVSxNQUNWLFNBQVUsQ0FBQyxJQUFNLEVBQVUsRUFBRSxPQUFPLEtBQUssRUFDekMsWUFBWSxpQkFDWixJQUFLLEVBQ0wsTUFBTyxFQUNSLEVBQ0MsRUFDRixHQTBCRSxHQTFCRixDQUFZLFVBQVUsWUFBWSxRQUFTLEdBQTNDLFNBQ0MsR0F3QkUsTUF4QkYsQ0FBSyxVQUFVLE1BQWYsU0FDRSxFQUFnQixTQUFXLEVBQzNCLEdBRUUsTUFGRixDQUFLLFVBQVUsaURBQWYsZUFFRSxFQUVGLEVBQWdCLElBQUksQ0FBQyxJQUFTLENBQzdCLElBQU0sRUFBYSxFQUFXLENBQUksRUFFbEMsT0FDQyxHQVVFLFNBVkYsQ0FDQyxVQUFXLEVBQ1YsMEtBSmdCLElBQVMsR0FLWCxrQ0FDZixFQUVBLFFBQVMsSUFBTSxFQUFhLENBQUksRUFDaEMsS0FBSyxTQVBOLFNBU0UsR0FKSSxDQUtKLEVBRUgsRUFFRCxFQUNELEdBQ0QsR0FDRCxFRWhJRyxJQUFNLEdBQWdCLENBQzVCLEVBQ0EsSUFDYSxDQUNiLEdBQUksQ0FBQyxFQUNKLE1BQU8sR0FHUixJQUFJLEVBQVcsR0FRZixPQVBBLEdBQXFCLEVBQWUsQ0FDbkMsT0FDQSxRQUFTLElBQU0sQ0FDZCxFQUFXLEdBRWIsQ0FBQyxFQUVNLEdBZ0JLLEdBQWlCLEVBQzdCLE9BQ0EsT0FDQSxTQUFTLEVBQ1QsbUJBQ3FDLENBRXJDLEdBQUksQ0FBQyxFQUNKLE1BQU8sR0FJUixHQUFJLElBQVMsT0FDWixPQUFPLEdBQWMsRUFBTSxDQUFhLEVBR3pDLElBQUksRUFBbUIsR0FDakIsRUFBaUIsRUFBTyxHQUFLLEVBbUJuQyxPQWpCQSxHQUFxQixFQUFlLENBQ25DLE9BQ0EsUUFBUyxDQUFDLElBQVcsQ0FHcEIsSUFBTSxFQUFTLEVBQU8sV0FBYSxFQUM3QixFQUFPLEVBQU8sU0FBVyxHQUV6QixFQUFlLEVBQVMsR0FDeEIsRUFBYSxFQUFPLEdBRTFCLEdBQUksR0FBa0IsR0FBZ0IsRUFBaUIsRUFDdEQsRUFBbUIsR0FHdEIsQ0FBQyxFQUVNLEdBTUssR0FBdUIsQ0FDbkMsRUFDQSxJQUlJLENBQ0osSUFBUSxPQUFNLFdBQVksRUFDMUIsR0FBSSxDQUFDLEVBQUksT0FFVCxJQUFNLEVBQVUsTUFBTSxRQUFRLENBQUUsRUFBSSxFQUFLLENBQUMsQ0FBRSxFQUU1QyxRQUFXLEtBQVUsRUFDcEIsR0FBSSxHQUFRLEVBQU8sV0FBWSxDQUM5QixJQUFNLEVBQVksRUFBSyxJQUFJLEVBQzNCLEdBQ0MsRUFBTyxXQUFXLEtBQUssQ0FBQyxJQUFNLEdBQXFCLEtBQU8sQ0FBUyxFQUVuRSxFQUFRLENBQU0sRUFHZixPQUFRLENBQU0sR0FjSixHQUE4QixDQUFDLElBS2xCLENBQ3pCLElBQ0MsV0FDQSxnQkFDQSx3QkFBd0IsQ0FBQyxFQUN6Qix3QkFDRyxFQUVBLEVBQVcsR0FDWCxFQUFTLEVBQ1QsRUFBbUIsR0FFakIsRUFBVSxDQUFDLElBQTBCLENBQzFDLEVBQW1CLEdBQ25CLEVBQVcsS0FBSyxJQUFJLEVBQVUsRUFBTyxXQUFhLENBQUMsRUFDbkQsRUFBUyxLQUFLLElBQUksRUFBUSxFQUFPLFNBQVcsRUFBRSxHQUkvQyxRQUFXLEtBQVEsRUFBVSxDQUM1QixHQUFxQixFQUFlLENBQUUsT0FBTSxTQUFRLENBQUMsRUFDckQsUUFBVyxLQUFPLEVBQ2pCLEdBQXFCLEVBQUssQ0FBRSxPQUFNLFNBQVEsQ0FBQyxFQUs3QyxHQUFJLENBQUMsR0FBb0IsRUFBc0IsQ0FDOUMsR0FBcUIsRUFBZSxDQUFFLFNBQVEsQ0FBQyxFQUMvQyxRQUFXLEtBQU8sRUFDakIsR0FBcUIsRUFBSyxDQUFFLFNBQVEsQ0FBQyxFQUl0QyxHQUFJLENBQUMsRUFDSixFQUFXLEVBQ1gsRUFBUyxHQUNULEVBQW1CLEdBSXJCLE1BQU8sQ0FBRSxXQUFVLFNBQVEsa0JBQWlCLEdDbEt0QyxJQUFNLEdBQWdCLENBQzVCLEVBQ0EsRUFDQSxJQUNpQixDQUNqQixJQUFPLEVBQU8sR0FBVyxFQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxFQUM3QyxFQUFPLEVBQU0sQ0FBSSxFQUFFLEtBQUssQ0FBSyxFQUFFLE9BQU8sQ0FBTyxFQUNuRCxPQUFPLEVBQVcsRUFBSyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBSSxHQUcvQixHQUFtQixDQUMvQixFQUNBLEVBQ0EsSUFDaUIsQ0FDakIsSUFBTyxFQUFPLEdBQVcsRUFBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFDN0MsRUFBTyxFQUFNLENBQUksRUFBRSxLQUFLLENBQUssRUFBRSxPQUFPLENBQU8sRUFDbkQsT0FBTyxFQUFXLEVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUksR0FHakMsR0FBcUIsQ0FDakMsRUFDQSxJQUNJLENBQ0osR0FBSSxDQUFDLEVBQWUsTUFBTyxDQUFFLElBQUssUUFBUyxJQUFLLE9BQVEsRUFFeEQsSUFBTSxFQUFZLEVBQU0sQ0FBSSxHQUVwQixXQUFVLFNBQVEsb0JBQXFCLEdBQTRCLENBQzFFLFNBQVUsQ0FBQyxDQUFTLEVBQ3BCLGdCQUNBLHFCQUFzQixFQUN2QixDQUFDLEVBRUQsR0FBSSxDQUFDLEVBQ0osTUFBTyxDQUFFLElBQUssUUFBUyxJQUFLLE9BQVEsRUFHckMsTUFBTyxDQUNOLElBQUssR0FBRyxFQUFTLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxPQUMzQyxJQUFLLElBQUksRUFBUyxHQUFHLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxNQUNoRCxHQzdDRCxvQkFBUyxjQUFXLGVBQVMsZUFFN0IsZ0JBQVMsd0RDRVQsU0FBUyxFQUFJLEVBQUcsZUFBYyxHQUFzQyxDQUNuRSxPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVcsRUFDVix1RUFDQSxDQUNELEVBQ0EsWUFBVSxVQUNOLEVBQ0wsRUFJRixTQUFTLEVBQVUsRUFBRyxlQUFjLEdBQXNDLENBQ3pFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUNWLGdKQUNBLENBQ0QsRUFDQSxZQUFVLGlCQUNOLEVBQ0wsRUFJRixTQUFTLEVBQVMsRUFBRyxlQUFjLEdBQXNDLENBQ3hFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUFHLDZCQUE4QixDQUFTLEVBQ3JELFlBQVUsZ0JBQ04sRUFDTCxFQTJCRixTQUFTLEVBQVcsRUFBRyxlQUFjLEdBQXNDLENBQzFFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUFHLFdBQVksQ0FBUyxFQUNuQyxZQUFVLGtCQUNOLEVBQ0wsRUNyRUYseUNBQ0Esb0JBQVMsc0JBQVcsb0JBQWlCLDBFQUtyQyxTQUFTLEVBQU0sS0FDWCxHQUNrRCxDQUNyRCxPQUFPLEdBQWlCLE9BQWpCLENBQXNCLFlBQVUsWUFBYSxFQUFPLEVBUzVELFNBQVMsRUFBVyxLQUNoQixHQUNtRCxDQUN0RCxPQUFPLEdBQWlCLFFBQWpCLENBQXVCLFlBQVUsa0JBQW1CLEVBQU8sRUFHbkUsU0FBUyxFQUFhLEVBQ3JCLFlBQ0EsT0FBTyxVQUNQLGNBQ0csR0FHRCxDQUNGLE9BQ0MsR0Fha0IsVUFibEIsQ0FDQyxVQUFXLEVBQ1YsK3lCQUNBLENBQ0QsRUFDQSxZQUFXLEVBQ1gsWUFBVSxvQkFDTixFQVBMLFNBYUUsQ0FKQSxFQUNELEdBRWtCLE9BRmxCLENBQXNCLFFBQU8sR0FBN0IsU0FDQyxHQUFDLEdBQUQsQ0FBaUIsVUFBVSxvQkFBb0IsRUFDOUMsR0FDRCxFQUlKLFNBQVMsRUFBYSxFQUNyQixZQUNBLFdBQ0EsV0FBVyxTQUNYLFFBQVEsWUFDTCxHQUNxRCxDQUN4RCxPQUNDLEdBeUJrQixTQXpCbEIsVUFDQyxHQXVCa0IsVUF2QmxCLENBQ0MsTUFBTyxFQUNQLFVBQVcsRUFDVixnakJBQ0EsSUFBYSxVQUNaLGtJQUNELENBQ0QsRUFDQSxZQUFVLGlCQUNWLFNBQVUsS0FDTixFQVZMLFNBdUJFLENBWEQsR0FBQyxHQUFELEVBQXNCLEVBQ3RCLEdBUWtCLFdBUmxCLENBQ0MsVUFBVyxFQUNWLE1BQ0EsSUFBYSxVQUNaLHFHQUNGLEVBTEQsU0FPRSxFQUNBLEVBQ0YsR0FBQyxHQUFELEVBQXdCLEdBQ3ZCLEVBQ0QsRUFpQkosU0FBUyxFQUFVLEVBQ2xCLFlBQ0EsY0FDRyxHQUNrRCxDQUNyRCxPQUNDLEdBY2tCLE9BZGxCLENBQ0MsVUFBVyxFQUNWLDRhQUNBLENBQ0QsRUFDQSxZQUFVLGlCQUNOLEVBTkwsU0FjRSxDQU5ELEdBSUUsT0FKRixDQUFNLFVBQVUsNkRBQWhCLFNBQ0MsR0FFa0IsZ0JBRmxCLFVBQ0MsR0FBQyxHQUFELENBQVcsVUFBVSxTQUFTLEVBQzdCLEVBQ0QsRUFDRixHQUFzRCxXQUF0RCxVQUEyQixFQUFXLEdBQ3JDLEVBaUJKLFNBQVMsRUFBb0IsRUFDNUIsZUFDRyxHQUM0RCxDQUMvRCxPQUNDLEdBU2tCLGlCQVRsQixDQUNDLFVBQVcsRUFDVix1REFDQSxDQUNELEVBQ0EsWUFBVSw2QkFDTixFQU5MLFNBUUMsR0FBQyxHQUFELENBQWUsVUFBVSxTQUFTLEVBQ2pDLEVBSUosU0FBUyxFQUFzQixFQUM5QixlQUNHLEdBQzhELENBQ2pFLE9BQ0MsR0FTa0IsbUJBVGxCLENBQ0MsVUFBVyxFQUNWLHVEQUNBLENBQ0QsRUFDQSxZQUFVLCtCQUNOLEVBTkwsU0FRQyxHQUFDLEdBQUQsQ0FBaUIsVUFBVSxTQUFTLEVBQ25DLHFERnRKSixJQUFNLEdBQVcsQ0FDaEIsTUFBTyxHQUFNLE1BQ2IsT0FBUSxHQUFNLE9BQ2QsUUFBUyxHQUFNLFFBQ2YsT0FBUSxHQUFNLE1BQ2YsRUFDTSxHQUFjLE9BQU8sWUFDMUIsT0FBTyxRQUFRLEVBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRyxLQUFPLENBQUMsRUFBRyxDQUFDLENBQUMsQ0FDaEQsRUFDTSxHQUFXLENBQ2hCLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sRUFDUCxFQUNNLEdBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxLQUFLLEVBQzNELEdBQVcsQ0FBQyxJQUFjLEtBQUssSUFBSSxFQUFHLE9BQU8sU0FBUyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBRWpFLEdBQWlCLENBQ3RCLEVBQ0EsSUFDSSxDQUNKLEdBQUksQ0FBQyxFQUNKLE9BQU8sRUFBRSxrQkFBa0IsRUFFNUIsR0FBSSxDQUNILElBQU0sRUFBTyxJQUFJLEdBQU0sQ0FBSSxFQUFFLE9BQU8sRUFDcEMsT0FBTyxHQUFRLENBQUMsRUFBSyxZQUFZLEVBQUUsU0FBUyxPQUFPLEVBQ2hELEVBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUFJLEVBQUssTUFBTSxDQUFDLEVBQzNDLEVBQUUsa0JBQWtCLEVBQ3RCLEtBQU0sQ0FDUCxPQUFPLEVBQUUsa0JBQWtCLElBU2hCLEdBQW9DLEVBQUcsUUFBTyxjQUFlLENBQ3pFLElBQVEsS0FBTSxFQUF3QixDQUFDLEtBQVMsQ0FBRSxFQUFHLEVBQUksQ0FBRSxFQUFFLEdBQ3RELEVBQU0sR0FBVyxHQUFTLENBQUMsQ0FBQyxDQUFLLEdBQ2pDLEVBQU0sR0FBVyxHQUE4QixJQUFNLEdBQVMsSUFBSSxFQUVuRSxFQUFXLEdBQ2hCLElBQU0sR0FBUyxJQUFJLENBQUMsRUFBRyxLQUFPLENBQUUsTUFBTyxHQUFTLEdBQUksTUFBTyxFQUFFLENBQUMsQ0FBRSxFQUFFLEVBQ2xFLENBQUMsQ0FBQyxDQUNILEVBRUEsR0FBVSxJQUFNLENBRWYsR0FEQSxFQUFRLENBQUMsQ0FBQyxDQUFLLEVBQ1gsRUFDSCxFQUFRLENBQUssR0FFWixDQUFDLENBQUssQ0FBQyxFQUVWLElBQU0sRUFBUyxDQUFDLElBQTZCLENBQzVDLEdBQUksQ0FBQyxFQUNKLE9BRUQsSUFBTSxFQUFPLElBQUssS0FBUyxDQUFFLEVBQzdCLEVBQVEsQ0FBSSxFQUNaLEVBQVMsRUFBTyxFQUFPLElBQUksR0FHdEIsRUFBUyxDQUFDLElBQXFCLENBRXBDLEdBREEsRUFBUSxDQUFPLEVBQ1gsQ0FBQyxFQUFTLENBQ2IsRUFBUyxJQUFJLEVBQ2IsT0FFRCxHQUFJLEVBQU0sQ0FDVCxFQUFTLENBQUksRUFDYixPQUVELElBQU0sRUFBTSxDQUFFLEtBQU0sR0FBTSxNQUFPLFNBQVUsQ0FBRSxFQUM3QyxFQUFRLENBQUcsRUFDWCxFQUFTLENBQUcsR0FHUCxFQUFZLENBQUMsSUFBYyxDQUNoQyxJQUFNLEVBQVEsR0FBTSxXQUEyQixDQUFDLEVBQzFDLEVBQU0sR0FBUyxHQUNmLEVBQU8sRUFBSyxTQUFTLENBQUcsRUFDM0IsRUFBSyxPQUFPLENBQUMsSUFBTSxJQUFNLENBQUcsRUFDNUIsQ0FBQyxHQUFHLEVBQU0sQ0FBRyxFQUNoQixFQUFPLENBQUUsVUFBVyxFQUFLLE9BQVMsRUFBTyxNQUFVLENBQUMsR0FHL0MsRUFBYSxDQUFDLElBQXNDLENBQ3pELElBQU0sRUFBMkIsQ0FBRSxNQUFPLE9BQVcsTUFBTyxNQUFVLEVBQ3RFLEdBQUksSUFBUyxRQUNaLEVBQUUsTUFBUSxHQUFNLE9BQVMsRUFFMUIsR0FBSSxJQUFTLFFBQ1osRUFBRSxNQUFRLEdBQU0sT0FBUyxFQUFNLEVBQUUsSUFBSSxFQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFBRSxPQUFPLEVBRXRFLEVBQU8sQ0FBQyxHQUdILEVBQVUsR0FBTSxNQUFRLFFBQVUsR0FBTSxNQUFRLFFBQVUsUUFDMUQsRUFBTyxHQUFZLEdBQU0sTUFBUSxHQUFNLFFBQVUsUUFDakQsRUFBWSxNQUFNLFFBQVEsR0FBTSxTQUFTLEVBQzVDLEVBQUssVUFDTCxHQUFNLFVBQ0wsQ0FBQyxFQUFLLFNBQVMsRUFDZixDQUFDLEVBRUwsT0FDQyxHQXNKRSxHQXRKRixDQUFNLGNBQVksb0JBQWxCLFNBc0pFLENBckpELEdBZUUsR0FmRixDQUFZLFVBQVUsT0FBdEIsU0FlRSxDQWRELEdBUUUsTUFSRixDQUFLLFVBQVUsOEJBQWYsU0FRRSxDQVBELEVBQUMsR0FBRCxDQUNDLFFBQVMsRUFDVCxjQUFZLG9CQUNaLEdBQUcsWUFDSCxnQkFBaUIsRUFDbEIsRUFDQSxFQUE4QyxHQUE5QyxDQUFXLFVBQVUsVUFBckIsU0FBZ0MsRUFBRSxRQUFRLEVBQUksR0FDN0MsRUFDRCxHQUFRLEdBQ1IsRUFFRSxJQUZGLENBQUcsVUFBVSxnQ0FBYixTQUNFLEdBQWUsRUFBTyxDQUFDLEVBQ3ZCLEdBRUYsRUFFRCxHQUNBLEVBaUlFLEdBaklGLENBQWEsVUFBVSxPQUF2QixTQUNDLEdBK0hFLE1BL0hGLENBQUssVUFBVSxZQUFmLFNBK0hFLENBOUhELEdBMENFLE1BMUNGLENBQUssVUFBVSx5QkFBZixTQTBDRSxDQXpDRCxHQXlCRSxNQXpCRixVQXlCRSxDQXhCRCxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxZQUFuQyxTQUNFLEVBQUUsU0FBUyxFQUNYLEVBQ0YsR0FvQkUsR0FwQkYsQ0FDQyxjQUFlLENBQUMsSUFDZixFQUFPLENBQUUsS0FBTSxHQUFTLEVBQTRCLENBQUMsRUFFdEQsTUFBTyxFQUpSLFNBb0JFLENBZEQsRUFNRSxHQU5GLENBQ0MsVUFBVSxNQUNWLGNBQVksbUJBQ1osR0FBRyxZQUhKLFNBS0MsRUFBQyxHQUFELEVBQWEsRUFDWixFQUNGLEVBTUUsR0FORixVQUNFLE9BQU8sS0FBSyxFQUFRLEVBQUUsSUFBSSxDQUFDLElBQzNCLEVBRUUsR0FGRixDQUFvQixNQUFPLEVBQTNCLFNBQ0UsRUFBRSxFQUFFLFlBQVksQ0FBQyxHQURGLENBRWYsQ0FDRixFQUNBLEdBQ0QsR0FDRCxFQUNGLEdBY0UsTUFkRixVQWNFLENBYkQsRUFFRSxFQUZGLENBQU8sVUFBVSxVQUFVLFFBQVEsV0FBbkMsU0FDRSxFQUFFLE9BQU8sRUFDVCxFQUNGLEVBQUMsR0FBRCxDQUNDLFVBQVUsTUFDVixHQUFHLFdBQ0gsSUFBSSxJQUNKLFNBQVUsQ0FBQyxJQUNWLEVBQU8sQ0FBRSxTQUFVLEdBQVMsRUFBRSxPQUFPLEtBQUssQ0FBRSxDQUFDLEVBRTlDLEtBQUssU0FDTCxNQUFPLEdBQU0sVUFBWSxFQUMxQixHQUNDLEdBQ0QsRUFFRCxHQUFNLE9BQVMsR0FBTSxRQUNyQixHQW1CRSxNQW5CRixVQW1CRSxDQWxCRCxFQUE0QyxFQUE1QyxDQUFPLFVBQVUsVUFBakIsU0FBNEIsRUFBRSxVQUFVLEVBQUksRUFDNUMsRUFnQkUsTUFoQkYsQ0FBSyxVQUFVLDRCQUFmLFNBQ0UsRUFBUyxJQUFJLENBQUMsRUFBRyxJQUNqQixHQVlFLE1BWkYsQ0FBSyxVQUFVLDhCQUFmLFNBWUUsQ0FYRCxFQUFDLEdBQUQsQ0FDQyxRQUFTLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFDbkMsR0FBSSxPQUFPLElBQ1gsZ0JBQWlCLElBQU0sRUFBVSxDQUFDLEVBQ25DLEVBQ0EsRUFLRSxFQUxGLENBQ0MsVUFBVSx5QkFDVixRQUFTLE9BQU8sSUFGakIsU0FJRSxFQUFFLE1BQ0YsSUFYK0MsRUFBRSxLQVlsRCxDQUNGLEVBQ0EsR0FDRCxFQUdILEdBMERFLE1BMURGLFVBMERFLENBekRELEVBQXdDLEVBQXhDLENBQU8sVUFBVSxVQUFqQixTQUE0QixFQUFFLE1BQU0sRUFBSSxFQUN4QyxHQXVERSxNQXZERixDQUFLLFVBQVUsaUJBQWYsU0F1REUsQ0F0REQsR0FTRSxNQVRGLENBQUssVUFBVSw4QkFBZixTQVNFLENBUkQsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLFFBQ3JCLEdBQUcsUUFDSCxnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDMUMsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxRQUFuQyxTQUNFLEVBQUUsT0FBTyxFQUNULEdBQ0QsRUFDRixHQXNCRSxNQXRCRixDQUFLLFVBQVUsOEJBQWYsU0FzQkUsQ0FyQkQsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLFFBQ3JCLEdBQUcsUUFDSCxnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDMUMsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxRQUFuQyxTQUNFLEVBQUUsT0FBTyxFQUNULEVBQ0QsSUFBWSxTQUNaLEVBQUMsR0FBRCxDQUNDLFVBQVUsbUJBQ1YsY0FBWSxjQUNaLElBQUksSUFDSixTQUFVLENBQUMsSUFDVixFQUFPLENBQUUsTUFBTyxHQUFTLEVBQUUsT0FBTyxLQUFLLENBQUUsQ0FBQyxFQUUzQyxLQUFLLFNBQ0wsTUFBTyxHQUFNLE9BQVMsRUFDdkIsRUFFRCxFQUE4QyxPQUE5QyxDQUFNLFVBQVUsVUFBaEIsU0FBMkIsRUFBRSxhQUFhLEVBQUksR0FDN0MsRUFDRixHQW9CRSxNQXBCRixDQUFLLFVBQVUsOEJBQWYsU0FvQkUsQ0FuQkQsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLFFBQ3JCLEdBQUcsS0FDSCxnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDMUMsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxLQUFuQyxTQUNFLEVBQUUsSUFBSSxFQUNOLEVBQ0QsSUFBWSxTQUNaLEVBQUMsR0FBRCxDQUNDLFVBQVUsTUFDVixLQUFNLEdBQU0sTUFDWixTQUFVLENBQUMsSUFDVixFQUFPLENBQ04sTUFBTyxFQUFJLEVBQU0sQ0FBQyxFQUFFLE1BQU0sS0FBSyxFQUFFLE9BQU8sRUFBSSxNQUM3QyxDQUFDLEVBRUgsR0FFQSxHQUNELEdBQ0QsR0FDRCxFQUNELEdBRUYsR0cxUkosc0JBQVMsZUFBYSxlQUtmLFNBQVMsRUFBd0IsQ0FBQyxFQUF5QixDQUNqRSxJQUFRLHVCQUFzQix3QkFDN0IsRUFBd0IsQ0FBQyxLQUFhLENBQ3JDLHFCQUFzQixFQUFRLHFCQUM5QixxQkFBc0IsRUFBUSxvQkFDL0IsRUFBRSxHQUVJLEVBQWEsR0FBa0IsR0FNbkMsQ0FDRixPQUFRLEdBQ1IsY0FBZSxPQUNmLE1BQU8sSUFDUixDQUFDLEVBRUssRUFBaUIsR0FDdEIsQ0FBQyxFQUFzQixJQUFvQyxDQUMxRCxFQUFlLENBQ2QsT0FBUSxHQUNSLGNBQWUsT0FDZixRQUNBLFVBQ0EsVUFBVyxDQUFDLElBQStCLENBQzFDLEVBQXFCLEVBQU8sRUFBUyxDQUNwQyxRQUNBLFVBQVcsRUFBTSxLQUNsQixDQUFDLEVBRUgsQ0FBQyxHQUVGLENBQUMsQ0FBb0IsQ0FDdEIsRUFFTSxFQUFtQixHQUN4QixDQUFDLElBQXlCLENBQ3pCLEVBQWUsQ0FDZCxPQUFRLEdBQ1IsY0FBZSxTQUNmLFFBQ0EsVUFBVyxDQUFDLElBQStCLENBQzFDLEVBQXFCLEVBQU8sQ0FDM0IsUUFDQSxVQUFXLEVBQU0sS0FDbEIsQ0FBQyxFQUVILENBQUMsR0FFRixDQUFDLENBQW9CLENBQ3RCLEVBRU0sRUFBYyxHQUFZLElBQU0sQ0FDckMsRUFBZSxDQUNkLE9BQVEsR0FDUixjQUFlLE9BQ2YsTUFBTyxJQUNSLENBQUMsR0FDQyxDQUFDLENBQUMsRUFFQyxFQUFnQixHQUNyQixDQUFDLElBQStCLENBQy9CLEdBQUksRUFBWSxVQUNmLEVBQVksVUFBVSxDQUFLLEVBRTVCLEVBQVksRUFFWixJQUFhLEdBRWQsQ0FBQyxFQUFhLEVBQWEsQ0FBVSxDQUN0QyxFQUVBLE1BQU8sQ0FDTixjQUNBLGlCQUNBLG1CQUNBLGNBQ0EsZUFDRCxvRWYzREQsSUFBTSxHQUFnQixDQUNyQixDQUNDLE1BQU8sNEJBQ1AsTUFBTyxNQUNSLEVBQ0EsQ0FDQyxNQUFPLDhCQUNQLE1BQU8sT0FDUixFQUNBLENBQ0MsTUFBTyxnQ0FDUCxNQUFPLFFBQ1IsRUFDQSxDQUNDLE1BQU8sMEJBQ1AsTUFBTyxLQUNSLEVBQ0EsQ0FDQyxNQUFPLGdDQUNQLE1BQU8sUUFDUixFQUNBLENBQ0MsTUFBTyw0QkFDUCxNQUFPLE1BQ1IsRUFDQSxDQUNDLE1BQU8sZ0NBQ1AsTUFBTyxRQUNSLEVBQ0EsQ0FDQyxNQUFPLDhCQUNQLE1BQU8sT0FDUixFQUNBLENBQ0MsTUFBTyxrQ0FDUCxNQUFPLFNBQ1IsRUFDQSxDQUNDLE1BQU8sMEJBQ1AsTUFBTyxLQUNSLEVBQ0EsQ0FDQyxNQUFPLGdDQUNQLE1BQU8sUUFDUixFQUNBLENBQ0MsTUFBTyw0QkFDUCxNQUFPLE1BQ1IsRUFDQSxDQUNDLE1BQU8sNEJBQ1AsTUFBTyxNQUNSLEVBQ0EsQ0FDQyxNQUFPLGdDQUNQLE1BQU8sUUFDUixDQUNELEVBV2EsR0FBc0MsRUFDbEQsZ0JBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDSyxDQUNMLElBQ0MsY0FDQSxpQkFDQSxtQkFDQSxjQUNBLGlCQUNHLEdBQXlCLENBQU8sR0FHbkMsMkJBQ0EsSUFDQSxnQkFDQSxhQUNBLG1CQUNHLEVBQXdCLENBQUMsS0FBYSxDQUN6Qyx5QkFBMEIsRUFBUSx5QkFDbEMsRUFBRyxFQUFRLEVBQ1gsY0FBZSxFQUFRLGNBQ3ZCLFdBQVksRUFBUSxXQUNwQixnQkFBaUIsRUFBUSxlQUMxQixFQUFFLEVBRUksRUFBUSxHQUFlLE9BQVMsRUFBTSxFQUN0QyxFQUFNLEdBQWUsS0FBTyxFQUFNLEVBQUUsSUFBSSxFQUFHLE1BQU0sRUFHakQsRUFBYyxFQUNqQixFQUF5QixDQUFhLEVBQ3RDLE1BR0ksRUFBVyxHQUFnQixHQUFTLEVBQU0sT0FBTyxDQUFDLEdBQ2xELEVBQVMsR0FBYyxHQUFTLEVBQUksT0FBTyxDQUFDLEdBQzVDLEVBQVUsR0FBZSxHQUFTLEdBQWUsUUFBVSxFQUFLLEdBQ2hFLEVBQWUsR0FBb0IsR0FDekMsR0FBZSxPQUFTLEdBQWMsR0FBRyxLQUMxQyxHQUdPLEVBQVcsR0FBZ0IsR0FBUyxFQUFNLE9BQU8sT0FBTyxDQUFDLEdBQ3pELEVBQVMsR0FBYyxHQUFTLEVBQUksT0FBTyxPQUFPLENBQUMsR0FHbkQsRUFBWSxHQUFpQixHQUFTLENBQzVDLE1BQU8sR0FBZSxPQUFTLEdBQy9CLFlBQWEsR0FBZSxhQUFlLEdBQzNDLFNBQVUsR0FBZSxVQUFZLEVBQ3RDLENBQUMsR0FHTSxFQUFPLElBQVksR0FBOEIsSUFBTSxDQUU3RCxPQURtQixHQUFlLE9BQVMsR0FBYSxPQUNuQyxLQUNyQixFQUdLLEdBQXdCLENBQUMsSUFBMkIsQ0FFekQsR0FEQSxFQUFhLENBQUksRUFDYixHQUFRLEVBQU0sQ0FBSSxFQUFFLFFBQVEsRUFBTSxDQUFPLENBQUMsRUFDN0MsRUFBVyxDQUFJLEdBSVgsR0FBc0IsQ0FBQyxJQUEyQixDQUV2RCxHQURBLEVBQVcsQ0FBSSxFQUNYLEdBQVEsRUFBTSxDQUFJLEVBQUUsU0FBUyxFQUFNLENBQVMsQ0FBQyxFQUNoRCxFQUFhLENBQUksR0FLYixHQUF3QixDQUFDLElBQWlCLENBRy9DLEdBRkEsRUFBYSxDQUFJLEVBRWIsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUM1RCxFQUFXLENBQUksR0FJWCxFQUFzQixDQUFDLElBQWlCLENBRzdDLEdBRkEsRUFBVyxDQUFJLEVBRVgsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUM1RCxFQUFhLENBQUksR0FLYixFQUFvQixDQUN6QixJQUNJLENBQ0osSUFBUSxPQUFNLFNBQVUsRUFBRSxPQUMxQixFQUFjLENBQUMsS0FBVSxJQUFLLEdBQU8sR0FBTyxDQUFNLEVBQUUsR0FHckQsR0FBVSxJQUFNLENBRWYsR0FBSSxFQUNILEVBQVcsT0FBTyxHQUVqQixDQUFDLENBQVEsQ0FBQyxFQUViLElBQU0sR0FBZSxDQUFDLElBQXVCLENBQzVDLEVBQUUsZUFBZSxFQUVqQixJQUFNLEVBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDNUQsRUFBYyxHQUFpQixFQUFTLEVBQVMsQ0FBUSxFQUV6RCxFQUEyQixDQUNoQyxHQUFJLEdBQWUsSUFBTSxFQUFNLEVBQUUsT0FBTyxnQkFBZ0IsRUFDeEQsTUFBTyxFQUFXLE1BQ2xCLE1BQU8sRUFDUCxJQUFLLEVBQ0wsV0FBWSxHQUFlLFdBQzNCLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLEdBQVMsTUFDakIsRUFFQSxHQUFJLEdBQWUsSUFBTSxHQUFpQixDQUFhLEVBQUcsQ0FDekQsRUFBZSxFQUFlLENBQzdCLE1BQU8sRUFBVyxNQUNsQixNQUFPLEVBQ1AsSUFBSyxFQUNMLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLEdBQVMsTUFDakIsQ0FBQyxFQUNELE9BR0QsR0FBSSxHQUFlLEdBQ2xCLElBQVcsQ0FBUyxFQUVwQixTQUFRLENBQVMsRUFFbEIsRUFBUSxHQUdILEdBQWUsSUFBTSxDQUMxQixHQUFJLEdBQWUsR0FBSSxDQUV0QixHQUFJLEdBQWlCLENBQWEsRUFBRyxDQUVwQyxFQUFpQixDQUFhLEVBQzlCLE9BRUQsSUFBVyxDQUFhLEVBQ3hCLEVBQVEsSUFJSixHQUFvQixDQUFDLElBQWtDLENBQzVELEdBQUksQ0FBQyxFQUFVLENBQ2QsR0FBUyxJQUFJLEVBQ2IsT0FFRCxJQUFNLEVBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDbEUsR0FBUyxJQUFLLEVBQVUsUUFBUyxFQUFjLE9BQU8sQ0FBRSxDQUFDLEdBSXBELEdBQXlCLEdBQVEsSUFBTSxDQUM1QyxJQUFNLEVBQWEsR0FBZSxXQUNsQyxHQUFJLEdBQWMsRUFBaUIsQ0FDbEMsSUFBTSxFQUFXLEVBQWdCLENBQVUsRUFDM0MsR0FBSSxHQUFVLGNBQ2IsT0FBTyxFQUFTLGNBR2xCLE9BQU8sR0FDTCxDQUFDLEdBQWUsV0FBWSxFQUFpQixDQUFhLENBQUMsRUFFeEQsR0FBc0IsR0FDekIsQ0FBQyxJQUFlLENBQUMsR0FBYyxFQUFNLENBQUksRUFBRyxFQUFzQixFQUNsRSxPQUVHLEdBQW1CLEdBQW1CLEVBQVcsRUFBc0IsRUFDdkUsR0FBaUIsR0FBbUIsRUFBUyxFQUFzQixFQUV6RSxPQUNDLGdCQTRLRSxDQTNLRCxHQWlLRSxPQWpLRixDQUFNLFVBQVUsK0JBQStCLFNBQVUsR0FBekQsU0FpS0UsQ0FoS0QsRUFtSUUsR0FuSUYsQ0FBWSxVQUFVLGlCQUF0QixTQUNDLEdBaUlFLE1BaklGLENBQUssVUFBVSwwQkFBZixTQWlJRSxDQWhJRCxHQWFFLE1BYkYsQ0FBSyxVQUFVLGFBQWYsU0FhRSxDQVpELEVBRUUsRUFGRixDQUFPLFVBQVUscUJBQXFCLFFBQVEsUUFBOUMsU0FDRSxFQUFFLE9BQU8sRUFDVCxFQUNGLEVBQUMsR0FBRCxDQUNDLFVBQVUscUJBQ1YsR0FBRyxRQUNILEtBQUssUUFDTCxTQUFVLEVBQ1YsWUFBYSxFQUFFLHVCQUF1QixFQUN0QyxTQUFRLEdBQ1IsTUFBTyxFQUFXLE1BQ25CLEdBQ0MsRUFFRixHQVlFLE1BWkYsQ0FBSyxVQUFVLHNCQUFmLFNBWUUsQ0FYRCxFQUVFLEVBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLGNBQTlDLFNBQ0UsRUFBRSxhQUFhLEVBQ2YsRUFDRixFQUFDLEdBQUQsQ0FDQyxVQUFVLHFCQUNWLEdBQUcsY0FDSCxLQUFLLGNBQ0wsU0FBVSxFQUNWLFlBQWEsRUFBRSw2QkFBNkIsRUFDNUMsTUFBTyxFQUFXLFlBQ25CLEdBQ0MsRUFFRixHQVNFLE1BVEYsQ0FBSyxVQUFVLDhCQUFmLFNBU0UsQ0FSRCxFQUFDLEdBQUQsQ0FDQyxRQUFTLEVBQ1QsR0FBRyxTQUNILGdCQUFpQixDQUFDLElBQVksRUFBWSxJQUFZLEVBQUksRUFDM0QsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLFNBQTlDLFNBQ0UsRUFBRSxRQUFRLEVBQ1YsR0FDRCxFQUVGLEdBcUJFLE1BckJGLENBQUssVUFBVSxrQ0FBZixTQXFCRSxDQXBCRCxHQVNFLE1BVEYsVUFTRSxDQVJELEVBQXdELEVBQXhELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxXQUFXLEVBQUksRUFDeEQsRUFBQyxHQUFELENBQ0MsVUFBVSxPQUNWLGNBQWEsR0FDYixLQUFNLEVBQ04sU0FBVSxHQUNWLFNBQVUsR0FDWCxHQUNDLEVBQ0YsR0FTRSxNQVRGLFVBU0UsQ0FSRCxFQUFzRCxFQUF0RCxDQUFPLFVBQVUscUJBQWpCLFNBQXVDLEVBQUUsU0FBUyxFQUFJLEVBQ3RELEVBQUMsR0FBRCxDQUNDLFVBQVUsT0FDVixjQUFhLEdBQ2IsS0FBTSxFQUNOLFNBQVUsR0FDVixTQUFVLEdBQ1gsR0FDQyxHQUNELEVBRUQsQ0FBQyxHQUNELEdBeUJFLE1BekJGLENBQUssVUFBVSxrQ0FBZixTQXlCRSxDQXhCRCxHQVdFLE1BWEYsVUFXRSxDQVZELEVBQXdELEVBQXhELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxXQUFXLEVBQUksRUFDeEQsRUFBQyxHQUFELENBQ0MsVUFBVSwwQkFDVixRQUFTLEdBQWlCLElBQzFCLFFBQVMsR0FBaUIsSUFDMUIsS0FBSyxhQUNMLFNBQVUsR0FDVixXQUFZLEVBQ1osTUFBTyxFQUNSLEdBQ0MsRUFDRixHQVdFLE1BWEYsVUFXRSxDQVZELEVBQXNELEVBQXRELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxTQUFTLEVBQUksRUFDdEQsRUFBQyxHQUFELENBQ0MsVUFBVSwwQkFDVixRQUFTLEdBQWUsSUFDeEIsUUFBUyxHQUFlLElBQ3hCLEtBQUssV0FDTCxTQUFVLEVBQ1YsV0FBWSxFQUNaLE1BQU8sRUFDUixHQUNDLEdBQ0QsRUFHSCxHQWtCRSxNQWxCRixDQUFLLFVBQVUsc0JBQWYsU0FrQkUsQ0FqQkQsRUFBb0QsRUFBcEQsQ0FBTyxVQUFVLHFCQUFqQixTQUF1QyxFQUFFLE9BQU8sRUFBSSxFQUNwRCxFQWVFLE1BZkYsQ0FBSyxVQUFVLHVCQUFmLFNBQ0UsR0FBYyxJQUFJLENBQUMsSUFDbkIsRUFBQyxFQUFELENBQ0MsYUFBWSxFQUFNLE1BQ2xCLFVBQVcsRUFDVixHQUFHLEVBQU0sMkNBQ1QsSUFBa0IsRUFBTSxPQUN2QixrREFDRixFQUVBLFFBQVMsSUFBTSxFQUFpQixFQUFNLEtBQUssRUFDM0MsS0FBSyxTQUNMLFFBQVEsU0FISCxFQUFNLEtBSVosQ0FDQSxFQUNBLEdBQ0QsRUFFRixHQVlFLE1BWkYsQ0FBSyxVQUFVLHNCQUFmLFNBWUUsQ0FYRCxFQUVFLEVBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLFdBQTlDLFNBQ0UsRUFBRSxVQUFVLEVBQ1osRUFDRixFQUFDLEdBQUQsQ0FDQyxVQUFVLHFCQUNWLEdBQUcsV0FDSCxLQUFLLFdBQ0wsU0FBVSxFQUNWLFlBQWEsRUFBRSwwQkFBMEIsRUFDekMsTUFBTyxFQUFXLFNBQ25CLEdBQ0MsRUFHRixFQUFDLEdBQUQsQ0FBa0IsU0FBVSxHQUFtQixNQUFPLEVBQU8sR0FDNUQsRUFDRCxFQUVGLEdBMEJFLEdBMUJGLENBQWMsVUFBVSxpRUFBeEIsU0EwQkUsQ0F6QkEsR0FBZSxJQUNmLEVBUUUsRUFSRixDQUNDLFVBQVUsOEJBQ1YsUUFBUyxHQUNULEtBQUssS0FDTCxLQUFLLFNBQ0wsUUFBUSxjQUxULFNBT0UsRUFBRSxRQUFRLEVBQ1YsRUFFSCxHQWFFLE1BYkYsQ0FBSyxVQUFVLDhCQUFmLFNBYUUsQ0FaRCxFQVFFLEVBUkYsQ0FDQyxVQUFVLHNCQUNWLFFBQVMsRUFDVCxLQUFLLEtBQ0wsS0FBSyxTQUNMLFFBQVEsVUFMVCxTQU9FLEVBQUUsUUFBUSxFQUNWLEVBQ0YsRUFFRSxFQUZGLENBQVEsVUFBVSxzQkFBc0IsS0FBSyxLQUFLLEtBQUssU0FBdkQsU0FDRSxHQUFlLEdBQUssRUFBRSxRQUFRLEVBQUksRUFBRSxRQUFRLEVBQzVDLEdBQ0QsR0FDRCxHQUNELEVBR0YsRUFBQyxHQUFELENBQ0MsV0FBWSxFQUFZLE9BQU8sT0FBUyxHQUN4QyxPQUFRLEVBQVksT0FDcEIsUUFBUyxFQUNULFVBQVcsRUFDWCxjQUFlLEVBQVksY0FDNUIsR0FDQyx1RGdCL2JHLElBQU0sR0FBa0IsSUFBTSxDQUNwQyxJQUNDLElBQ0EsZ0JBQ0Esa0JBQ0EsaUJBQ0EsV0FDQSxjQUNBLGNBQ0EsbUJBQ0csRUFBd0IsQ0FBQyxLQUFhLENBQ3pDLEVBQUcsRUFBUSxFQUNYLGNBQWUsRUFBUSxjQUN2QixnQkFBaUIsRUFBUSxnQkFDekIsZUFBZ0IsRUFBUSxlQUN4QixTQUFVLEVBQVEsU0FDbEIsWUFBYSxFQUFRLFlBQ3JCLFlBQWEsRUFBUSxZQUNyQixnQkFBaUIsRUFBUSxlQUMxQixFQUFFLEVBVUksRUFBaUIsQ0FDdEIsS0FBTSxFQUNOLFFBQVMsRUFDVCxnQkFDQSxNQUFPLEVBQ1AsU0Fic0IsQ0FBQyxJQUF5QixDQUNoRCxFQUFZLEVBQU0sR0FBSSxDQUFLLEdBYTNCLFNBVnNCLENBQUMsSUFBeUIsQ0FDaEQsRUFBWSxFQUFNLEVBQUUsRUFVckIsRUFFQSxHQUFJLEVBQ0gsT0FBTyxFQUFnQixDQUFjLEVBR3RDLE9BQ0MsR0FhRSxHQWJGLENBQVEsYUFBYyxFQUFnQixLQUFNLEVBQTVDLFNBQ0MsR0FXRSxHQVhGLENBQWUsVUFBVSxpRkFBekIsU0FXRSxDQVZELEdBT0UsR0FQRixDQUFjLFVBQVUsd0JBQXhCLFNBT0UsQ0FORCxHQUVFLEdBRkYsQ0FBYSxVQUFVLHVCQUF2QixTQUNFLEdBQWUsR0FBSyxFQUFFLFdBQVcsRUFBSSxFQUFFLGFBQWEsRUFDcEQsRUFDRixHQUVFLEdBRkYsQ0FBbUIsVUFBVSxxQkFBN0IsU0FDRSxHQUFlLEdBQUssRUFBRSxrQkFBa0IsRUFBSSxFQUFFLGFBQWEsRUFDM0QsR0FDRCxFQUVGLEdBQUMsR0FBRCxJQUFlLEVBQWdCLEdBQzlCLEVBQ0QsR0NuRUosbUJBQVMsZUFBMEIsV0FBVSxXQUFNLHNCQUVuRCxtQkFBUyxlQ0ZULGdCQUFTLGVBSVQsSUFBTSxHQUFPO0FBQUEsRUFFUCxHQUFnQixDQUNyQixrQkFDQSxXQUNBLGlCQUNBLDBCQUNBLGFBQ0EscUJBQ0EsbUJBQ0EsZUFDQSxlQUNELEVBQUUsS0FBSyxFQUFJLEVBRUwsR0FBYSxDQUFDLElBQXlCLENBQzVDLE9BQU8sRUFDTCxXQUFXLEtBQU0sTUFBTSxFQUN2QixXQUFXLElBQUssS0FBSyxFQUNyQixXQUFXLElBQUssS0FBSyxFQUNyQixXQUFXO0FBQUEsRUFBTSxLQUFLLEVBQ3RCLFdBQVcsS0FBTSxFQUFFLEdBR2hCLEdBQWEsQ0FBQyxFQUFtQixFQUFXLEtBQWtCLENBQ25FLE9BQU8sRUFDSixFQUFLLE9BQU8sVUFBVSxFQUN0QixFQUFLLElBQUksRUFBRSxPQUFPLHNCQUFzQixHQUd0QyxHQUFTLENBQUMsSUFBaUMsQ0FDaEQsT0FBTyxFQUFNLEtBQU8sR0FBRyxFQUFNLHFCQUd4QixHQUFjLENBQUMsSUFBa0MsQ0FDdEQsR0FBSSxDQUlILE9BSG9CLElBQUksR0FDdkIsQ0FDRCxFQUFFLFNBQVMsRUFFRSxNQUFNO0FBQUEsQ0FBSSxFQUFFLEtBQUssQ0FBQyxJQUFTLEVBQUssV0FBVyxRQUFRLENBQUMsR0FBSyxHQUVyRSxLQUFNLENBQ1AsTUFBTyxLQUlILEdBQXVCLENBQUMsSUFBaUMsQ0FDOUQsSUFBTSxFQUFZLEVBQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxzQkFBc0IsRUFDdkQsRUFBWSxFQUFNLE9BQVMsY0FBZ0IsR0FDM0MsRUFBUSxFQUFNLE1BQVEsR0FBWSxFQUFNLEtBQUssRUFBSSxHQUVqRCxFQUFVLEVBQU0sU0FBUyxPQUM1QixFQUFNLFFBQVEsSUFBSSxDQUFDLElBQU0sR0FBVyxFQUFNLENBQUMsRUFBRyxFQUFNLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUNyRSxLQUVHLEVBQWUsRUFBTSxhQUN4QixHQUFXLEVBQU0sRUFBTSxZQUFZLEVBQUcsRUFBTSxNQUFNLEVBQ2xELEtBc0JILE1BcEJjLENBQ2IsZUFDQSxPQUFPLEdBQU8sQ0FBSyxJQUNuQixVQUFVLEtBQWEsR0FBVyxFQUFNLE1BQU8sRUFBTSxNQUFNLElBQzNELFFBQVEsS0FBYSxHQUFXLEVBQU0sSUFBSyxFQUFNLE1BQU0sSUFDdkQsV0FBVyxHQUFXLEVBQU0sS0FBSyxJQUNqQyxFQUFNLGFBQWUsZUFBZSxHQUFXLEVBQU0sV0FBVyxJQUNoRSxFQUFNLFVBQVksWUFBWSxHQUFXLEVBQU0sUUFBUSxJQUN2RCxFQUNBLEdBQVcsVUFBVSxJQUNyQixHQUFnQixpQkFBaUIsSUFDakMsV0FBVyxJQUNYLFdBQVcsSUFDWCxpQkFBaUIsSUFDakIsbUJBQ0EsYUFDQSxnQkFDQSxZQUNELEVBRWEsT0FBTyxPQUFPLEVBQUUsS0FBSyxFQUFJLEdBR2pDLEdBQWUsQ0FBQyxJQUE2QyxDQUNsRSxJQUFNLEVBQVcsSUFBSSxJQUVyQixPQUFPLEVBQU8sT0FBTyxDQUFDLElBQVUsQ0FDL0IsSUFBTSxFQUFNLEdBQU8sQ0FBSyxFQUNsQixFQUFrQixFQUFNLE9BQVMsQ0FBQyxFQUFNLGFBQ3hDLEVBQXFCLEVBQU0sY0FBZ0IsQ0FBQyxFQUFNLE1BRXhELEdBQUksRUFFSCxPQURBLEVBQVMsSUFBSSxDQUFHLEVBQ1QsR0FFUixHQUFJLEVBQ0gsTUFBTyxHQUVSLE1BQU8sQ0FBQyxFQUFNLE9BQVMsQ0FBQyxFQUFNLGNBQWdCLENBQUMsRUFBUyxJQUFJLENBQUcsRUFDL0QsR0FHVyxHQUFvQixDQUNoQyxFQUNBLEVBQWUsbUJBQ0gsQ0FDWixJQUFNLEVBQU8sR0FBVyxDQUFZLEVBQzlCLEVBQWdCLEdBQWEsQ0FBTSxFQUFFLElBQUksRUFBb0IsRUFFbkUsTUFBTyxDQUNOLGtCQUNBLGNBQ0Esc0NBQ0EscUJBQ0EsaUJBQ0EsZ0JBQWdCLElBQ2hCLDhCQUE4QixJQUM5QixHQUNBLEdBQUcsRUFDSCxlQUNELEVBQUUsS0FBSyxFQUFJLEdBR0MsR0FBb0IsQ0FDaEMsRUFDQSxFQUFXLGVBQ1gsRUFBZSxtQkFDTCxDQUNWLElBQU0sRUFBTyxJQUFJLEtBQUssQ0FBQyxHQUFrQixFQUFRLENBQVksQ0FBQyxFQUFHLENBQ2hFLEtBQU0sNkJBQ1AsQ0FBQyxFQUNLLEVBQU0sSUFBSSxnQkFBZ0IsQ0FBSSxFQUM5QixFQUFxQixFQUFTLFNBQVMsTUFBTSxFQUNoRCxFQUNBLEdBQUcsUUFFQSxFQUFPLFNBQVMsY0FBYyxHQUFHLEVBQ3ZDLEVBQUssS0FBTyxFQUNaLEVBQUssU0FBVyxFQUVoQixTQUFTLEtBQUssT0FBTyxDQUFJLEVBQ3pCLEVBQUssTUFBTSxFQUNYLEVBQUssT0FBTyxFQUNaLElBQUksZ0JBQWdCLENBQUcsR0NsSnhCLHNCQUFTLHNCQUNULGtCQUFTLGVBQVMsaUZBYWxCLElBQU0sR0FBYSxDQUNsQixVQUNBLFdBQ0EsUUFDQSxRQUNBLE1BQ0EsT0FDQSxPQUNBLFNBQ0EsWUFDQSxVQUNBLFdBQ0EsVUFDRCxFQUVNLEdBQWUsSUFBTSxDQUMxQixJQUFRLGNBQWEsT0FBTSxpQkFBZ0IsSUFBRyxrQkFDN0MsRUFBd0IsQ0FBQyxLQUFTLENBQ2pDLFlBQWEsRUFBSSxZQUNqQixLQUFNLEVBQUksS0FDVixlQUFnQixFQUFJLGVBQ3BCLEVBQUcsRUFBSSxFQUNQLGVBQWdCLEVBQUksY0FDckIsRUFBRSxHQUVJLEVBQWEsR0FBa0IsR0FBd0IsSUFBSSxFQUU1RCxFQUFTLEdBQVEsSUFBTSxHQUFXLElBQUksQ0FBQyxJQUFRLEVBQUUsQ0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsRUFDM0QsRUFBYyxFQUFZLEtBQUssRUFDL0IsRUFBUSxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBTSxFQUFjLEVBQUksQ0FBQyxFQUNoRSxFQUFXLEdBQVksRUFBYSxDQUFjLEVBRWxELEVBQWEsQ0FBQyxJQUFzQixDQUN6QyxFQUFlLENBQUksRUFDbkIsRUFBZSxJQUFJLEdBR2QsRUFBcUIsSUFDMUIsZUFDRSxFQUFPLElBQUksQ0FBQyxFQUFPLElBQ25CLEVBVUUsRUFWRixDQUNDLFVBQVcsRUFDViw0QkFDQSxFQUFZLE1BQU0sSUFBTSxHQUFTLGVBQ2xDLEVBRUEsUUFBUyxJQUFNLEVBQVcsRUFBWSxNQUFNLENBQUssQ0FBQyxFQUNsRCxRQUFRLFFBUFQsU0FTRSxHQUpJLENBS0osQ0FDRixFQUNBLEVBR0csRUFBb0IsSUFDekIsZUFDRSxFQUFNLElBQUksQ0FBQyxJQUNYLEVBVUUsRUFWRixDQUNDLFVBQVcsRUFDViw0QkFDQSxFQUFZLEtBQUssSUFBTSxHQUFRLGVBQ2hDLEVBRUEsUUFBUyxJQUFNLEVBQVcsRUFBWSxLQUFLLENBQUksQ0FBQyxFQUNoRCxRQUFRLFFBUFQsU0FTRSxHQUpJLENBS0osQ0FDRixFQUNBLEVBR0csRUFBb0IsSUFDekIsZUFDRSxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQUUsRUFBRyxDQUFDLEVBQUcsSUFBTSxDQUNwQyxJQUFNLEVBQVcsRUFBWSxTQUFTLEVBQUcsTUFBTSxFQUFFLElBQUksRUFBRyxNQUFNLEVBQ3hELEVBQU8sR0FBWSxFQUFVLENBQWMsRUFDM0MsRUFBUSxFQUFLLEdBQ2IsRUFBTSxFQUFLLEdBQ1gsRUFBZ0IsRUFBUyxPQUFPLEVBQWEsTUFBTSxFQUNuRCxFQUFlLEVBQU0sTUFBTSxJQUFNLEVBQUksTUFBTSxFQUVqRCxPQUNDLEVBZUUsRUFmRixDQUNDLFVBQVcsRUFDViw0QkFDQSxHQUFpQixlQUNsQixFQUVBLFFBQVMsSUFBTSxFQUFXLENBQUssRUFDL0IsUUFBUSxRQVBULFNBU0MsR0FLRSxNQUxGLENBQUssVUFBVSwyQ0FBZixTQUtFLENBSkQsRUFBeUQsT0FBekQsVUFBTyxHQUFHLEVBQU0sT0FBTyxPQUFPLE9BQU8sRUFBSSxPQUFPLEdBQUcsSUFBTSxFQUN4RCxHQUNBLEVBQTZGLE9BQTdGLENBQU0sVUFBVSw0QkFBaEIsU0FBNkMsR0FBRyxFQUFNLE9BQU8sS0FBSyxLQUFLLEVBQUksT0FBTyxLQUFLLElBQU0sR0FFN0YsR0FURyxFQUFNLE9BQU8sWUFBWSxDQVU3QixFQUVILEVBQ0EsRUFHRyxFQUFtQixJQUFNLENBQzlCLElBQU0sRUFBVyxFQUFZLFFBQVEsT0FBTyxFQUN0QyxFQUFjLEVBQVksWUFBWSxFQUU1QyxPQUNDLGVBQ0UsTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFZLEVBQUcsQ0FBQyxFQUFHLElBQU0sQ0FDOUMsSUFBTSxFQUFNLEVBQVMsS0FBSyxFQUFJLENBQUMsRUFDekIsRUFBZSxFQUFJLE9BQU8sRUFBYSxLQUFLLEVBQzVDLEVBQVUsRUFBSSxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBRXpDLE9BQ0MsRUFpQkUsRUFqQkYsQ0FDQyxVQUFXLEVBQ1YsNEJBQ0EsR0FBZ0IsZUFDakIsRUFFQSxRQUFTLElBQU0sRUFBVyxDQUFHLEVBQzdCLFFBQVEsUUFQVCxTQVNDLEdBT0UsTUFQRixDQUFLLFVBQVUsMkNBQWYsU0FPRSxDQU5ELEVBQW1DLE9BQW5DLFVBQU8sRUFBSSxPQUFPLGFBQWEsRUFBSSxFQUNsQyxHQUNBLEVBRUUsT0FGRixDQUFNLFVBQVUsOERBQWhCLFNBQ0UsRUFBRSxPQUFPLEVBQ1QsR0FFRixHQVhHLEVBQUksT0FBTyxZQUFZLENBWTNCLEVBRUgsRUFDQSxHQStCSixNQTNCaUIsQ0FDaEIsQ0FDQyxHQUFJLFFBQ0osT0FBUSxJQUFTLE9BQ2pCLE1BQU8sRUFBWSxPQUFPLE1BQU0sRUFDaEMsT0FBUSxDQUNULEVBQ0EsQ0FDQyxHQUFJLE9BQ0osT0FBUSxHQUNSLE1BQU8sRUFBWSxPQUFPLE1BQU0sRUFDaEMsT0FBUSxDQUNULEVBQ0EsQ0FDQyxHQUFJLE9BQ0osT0FBUSxJQUFTLE9BQ2pCLE1BQU8sR0FBRyxFQUFTLEdBQUcsT0FBTyxPQUFPLE9BQU8sRUFBUyxHQUFHLE9BQU8sT0FBTyxJQUNyRSxPQUFRLENBQ1QsRUFDQSxDQUNDLEdBQUksTUFDSixPQUFRLElBQVMsTUFDakIsTUFBTyxFQUFZLE9BQU8sU0FBUyxFQUNuQyxPQUFRLENBQ1QsQ0FDRCxFQUdFLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLEVBQ3ZCLElBQUksQ0FBQyxJQUNMLEdBMEJFLEdBMUJGLENBRUMsYUFBYyxDQUFDLElBQVMsRUFBZSxFQUFPLEVBQVEsR0FBSyxJQUFJLEVBQy9ELEtBQU0sSUFBZ0IsRUFBUSxHQUgvQixTQTBCRSxDQXJCRCxFQWVFLEdBZkYsQ0FBZ0IsUUFBTyxHQUF2QixTQUNDLEdBYUUsRUFiRixDQUNDLFVBQVUsOENBQ1YsY0FBWSx3QkFDWixRQUFRLFFBSFQsU0FhRSxDQVJELEVBTUUsRUFORixDQUNDLFVBQVUsOENBQ1YsY0FBWSx3QkFDWixjQUFlLEdBQUcsRUFBUSxNQUFNLEVBQVksT0FBTyxZQUFZLElBSGhFLFNBS0UsRUFBUSxNQUNSLEVBQ0YsRUFBQyxHQUFELENBQWEsVUFBVSxVQUFVLEdBQ2hDLEVBQ0QsRUFDRixFQUlFLEdBSkYsQ0FBZ0IsVUFBVSxXQUExQixTQUNDLEVBRUUsTUFGRixDQUFLLFVBQVUsdUNBQWYsU0FDRSxFQUFRLE9BQU8sRUFDZixFQUNELElBeEJHLEVBQVEsRUF5QlosQ0FDRixHQUdZLE1Ddk5mLHNCQUFTLG1CQUFhLDBFQU90QixJQUFNLEdBQThCLENBQUMsTUFBTyxPQUFRLFFBQVMsTUFBTSxFQWE3RCxHQUE0QyxFQUNqRCxjQUNBLFdBQ0EsVUFBVSxVQUNWLE9BQU8sS0FDUCxZQUNBLFVBQ0EsU0FDQSxnQkFDSyxDQUNMLElBQVEsSUFBRyxhQUFjLEVBQXdCLENBQUMsS0FBYSxDQUM5RCxFQUFHLEVBQVEsRUFDWCxVQUFXLEVBQVEsU0FDcEIsRUFBRSxFQUNJLEVBQVMsSUFBWSxPQUNyQixFQUFxQixHQUFhLEVBQVUsT0FBUyxFQUdyRCxFQUFxQixDQUFDLElBQXVCLENBQ2xELE9BQU8sRUFFTixFQUFTLFNBQVcsR0FFcEIsSUFBZ0IsR0FBWSxlQUM3QixHQUdLLEVBQWdCLENBQUMsSUFBdUIsQ0FDN0MsT0FBTyxJQUFnQixFQUFXLFVBQVksV0FHL0MsT0FDQyxHQWtDRSxNQWxDRixDQUNDLFVBQVcsRUFDVixFQUFTLHlCQUEyQixhQUNwQyxDQUNELEVBSkQsU0FrQ0UsQ0E1QkQsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFZLEtBQU0sRUFBTSxRQUFRLFVBQWpELFNBQ0MsR0FBQyxHQUFELENBQWEsVUFBVSxVQUFVLEVBQ2hDLEVBQ0YsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFRLEtBQU0sRUFBTSxRQUFRLFVBQTdDLFNBQ0MsR0FBQyxHQUFELENBQWMsVUFBVSxVQUFVLEVBQ2pDLEVBRUQsR0FBZ0IsSUFBSSxDQUFDLElBQW1CLENBQ3hDLEdBQUksR0FBc0IsSUFBUyxPQUNsQyxPQUFPLEtBR1IsT0FDQyxHQVFFLEVBUkYsQ0FDQyxVQUFXLEVBQW1CLENBQUksRUFFbEMsUUFBUyxJQUFNLEVBQVMsQ0FBSSxFQUM1QixLQUFNLEVBQ04sUUFBUyxFQUFjLENBQUksRUFMNUIsU0FPRSxFQUFFLENBQUksR0FMRixDQU1KLEVBRUgsRUFFRCxHQUVFLEVBRkYsQ0FBUSxRQUFTLEVBQVMsS0FBTSxFQUFNLFFBQVEsVUFBOUMsU0FDRSxFQUFFLE9BQU8sRUFDVCxHQUNELEdBSVcseURIdkVmLElBQU0sR0FBZ0MsRUFBRyxZQUFZLE1BQVMsQ0FDN0QsSUFDQyxPQUNBLFVBQ0EsYUFDQSxhQUNBLFFBQ0EsZ0JBQ0Esa0JBQ0Esa0JBQ0EsWUFDQSxLQUNHLEVBQXdCLENBQUMsS0FBUyxDQUNyQyxLQUFNLEVBQUksS0FDVixRQUFTLEVBQUksUUFDYixXQUFZLEVBQUksV0FDaEIsV0FBWSxFQUFJLFdBQ2hCLE1BQU8sRUFBSSxNQUNYLGNBQWUsRUFBSSxjQUNuQixnQkFBaUIsRUFBSSxnQkFDckIsZ0JBQWlCLEVBQUksZ0JBQ3JCLFVBQVcsRUFBSSxVQUNmLEVBQUcsRUFBSSxDQUNSLEVBQUUsR0FFSyxFQUFnQixHQUFxQixHQUFTLEVBQUssRUFFcEQsRUFBa0IsSUFBTSxFQUFrQixFQUFLLEVBRS9DLEVBQWUsSUFBTSxDQUMxQixJQUFNLEVBQVcsa0JBQWtCLElBQUksS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsRUFBRSxTQUN2RSxHQUFrQixFQUFXLEVBQVUsZ0JBQWdCLEVBQ3ZELEVBQWdCLEdBR1gsRUFBaUIsSUFDdEIsR0FRRSxFQVJGLENBQ0MsVUFBVSwwQkFDVixRQUFTLElBQU0sRUFBYyxFQUM3QixLQUFLLEtBQ0wsUUFBUSxVQUpULFNBUUUsQ0FGRCxFQUFDLEdBQUQsQ0FBTSxVQUFVLFVBQVUsRUFDMUIsRUFBaUQsT0FBakQsQ0FBTSxVQUFVLHFCQUFoQixTQUFzQyxFQUFFLEtBQUssRUFBSSxHQUNoRCxFQUdHLEVBQWUsRUFBRyxZQUFZLE1BQ25DLEdBWUUsRUFaRixDQUNDLFVBQVcsRUFBRywwQkFBMkIsR0FBYSxjQUFjLEVBQ3BFLFFBQVMsRUFDVCxLQUFLLEtBQ0wsUUFBUSxVQUpULFNBWUUsQ0FORCxFQUFDLEdBQUQsQ0FBVSxVQUFVLFVBQVUsRUFDN0IsRUFDQSxHQUFHLEVBQUUsUUFBUSxvQkFFYixFQUFnRSxPQUFoRSxDQUFNLFVBQVUsaUNBQWhCLFNBQWtELEVBQUUsUUFBUSxFQUFJLEdBRWhFLEVBR0gsR0FBSSxFQUNILE9BQU8sRUFHUixPQUNDLEVBc0VFLE1BdEVGLENBQ0MsVUFBVSxnQ0FDVixjQUFZLGtCQUZiLFNBSUMsR0FpRUUsTUFqRUYsQ0FDQyxVQUFXLEVBQ1Ysb0ZBQ0EsRUFDQSxDQUNELEVBTEQsU0FpRUUsQ0ExREQsR0FHRSxNQUhGLENBQUssVUFBVSxrRkFBZixTQUdFLENBRkQsRUFBQyxHQUFELENBQWMsVUFBVSxVQUFVLEVBQ2xDLEVBQUMsR0FBRCxFQUFjLEdBQ2IsRUFFRixHQW9ERSxNQXBERixDQUFLLFVBQVUsaUhBQWYsU0FvREUsQ0FuREQsR0FZRSxNQVpGLENBQUssVUFBVSwrREFBZixTQVlFLENBWEQsRUFBQyxHQUFELENBQ0MsVUFBVSxjQUNWLFlBQWEsRUFDYixTQUFVLEVBQ1YsT0FBUSxFQUNSLFdBQVksRUFDWixRQUFTLEVBQ1QsUUFBUSxVQUNULEVBQ0EsRUFBQyxFQUFELEVBQWdCLEVBQ2hCLEVBQUMsRUFBRCxFQUFjLEdBQ2IsRUFFRixHQW9DRSxNQXBDRixDQUFLLFVBQVUsNkRBQWYsU0FvQ0UsQ0FuQ0QsRUFBQyxFQUFELEVBQWdCLEVBQ2hCLEdBaUNFLEdBakNGLENBQVMsYUFBYyxFQUFtQixLQUFNLEVBQWhELFNBaUNFLENBaENELEVBSUUsR0FKRixDQUFnQixRQUFPLEdBQXZCLFNBQ0MsRUFFRSxFQUZGLENBQVEsS0FBSyxLQUFLLFFBQVEsVUFBMUIsU0FDQyxFQUFDLEdBQUQsQ0FBTSxVQUFVLFVBQVUsRUFDekIsRUFDRCxFQUNGLEVBMEJFLEdBMUJGLENBQWdCLE1BQU0sTUFBTSxVQUFVLGdCQUF0QyxTQUNDLEdBd0JFLE1BeEJGLENBQUssVUFBVSxZQUFmLFNBd0JFLENBdkJELEVBQUMsR0FBRCxDQUNDLFlBQWEsRUFDYixTQUFVLENBQUMsSUFBTSxDQUNoQixFQUFRLENBQUMsRUFDVCxFQUFnQixHQUVqQixPQUFRLElBQU0sQ0FDYixFQUFXLEVBQ1gsRUFBZ0IsR0FFakIsV0FBWSxJQUFNLENBQ2pCLEVBQVcsRUFDWCxFQUFnQixHQUVqQixRQUFTLElBQU0sQ0FDZCxFQUFNLEVBQ04sRUFBZ0IsR0FFakIsUUFBUSxPQUNULEVBQ0EsRUFFRSxNQUZGLENBQUssVUFBVSxnQkFBZixTQUNDLEVBQUMsRUFBRCxDQUFjLFVBQVMsR0FBQyxFQUN2QixHQUNELEVBQ0QsR0FDRCxHQUNELEdBQ0QsR0FDRCxFQUNELEdBSVcsTUloS2YsZUFBUyxlQ0FULGVBQVMsa0JBQU0sZUNEZixtQkFBZ0IsY0FBTSx3RENhZixJQUFNLEdBQXNDLEVBQ2xELE9BQ0EsU0FBUyxLQUNULGVBQ0ssQ0FDTCxJQUFNLEVBQVUsRUFBSyxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBRTFDLE9BQ0MsR0FXRSxNQVhGLENBQ0MsVUFBVyxFQUNWLHlFQUNBLEdBQVcsaURBQ1gsQ0FDRCxFQUNBLGNBQ0MsRUFBVSxtQkFBcUIsY0FBYyxFQUFLLE9BQU8sR0FBRyxJQVA5RCxTQVVFLEtBQUssZUFBZSxFQUFRLENBQUUsSUFBSyxTQUFVLENBQUMsRUFBRSxPQUFPLEVBQUssT0FBTyxDQUFDLEVBQ3BFLEdDL0JKLDhCQUFTLGVBQXFCLGVDRDlCLHVCQUFTLHVCQUVULGVBQVMsbUVBTVQsSUFBTSxHQUF1QixDQUM1QixFQUNBLElBQ0ksQ0FDSixHQUFJLEdBQW9CLEVBQ3ZCLE1BQU8sZUFFUixHQUFJLEVBQ0gsTUFBTyw4QkFFUixHQUFJLEVBQ0gsTUFBTyw4QkFFUixNQUFPLGNBR1IsU0FBUyxFQUF3QixFQUNoQyxZQUNBLFFBQ0EsWUFDQSxRQUNBLGNBQWMsSUFPWixDQUNGLElBQVEsZUFBYyxjQUFhLG9CQUFtQixzQkFDckQsRUFBd0IsQ0FBQyxLQUFXLENBQ25DLGFBQWMsRUFBTSxhQUNwQixZQUFhLEVBQU0sWUFDbkIsa0JBQW1CLEVBQU0sa0JBQ3pCLG1CQUFvQixFQUFNLGtCQUMzQixFQUFFLEdBRUssYUFBWSxZQUFXLGFBQVksY0FBZSxHQUFhLENBQ3RFLEdBQUksRUFDSixLQUFNLENBQ0wsUUFDQSxLQUFNLGdCQUNQLEVBQ0EsU0FBVSxHQUFlLENBQzFCLENBQUMsRUFHSyxFQUFzQixJQUFNLENBRWpDLElBQU0sRUFBZ0IsRUFJaEIsRUFBbUIsRUFBYyxpQkFDakMsRUFBaUIsRUFBYyxlQUVyQyxPQUNDLEdBOEJFLE1BOUJGLENBQ0MsVUFBVyxFQUNWLEVBQU0saUJBQW1CLGNBQ3pCLEVBQU0sT0FBUyxhQUNmLGlGQUNBLEdBQXFCLEVBQWtCLENBQWMsQ0FDdEQsRUFDQSxNQUFPLENBQUUsZ0JBQWlCLEVBQU0sZ0JBQWlCLE1BQU8sRUFBTSxLQUFNLEVBUHJFLFNBOEJFLENBcEJBLEdBQ0EsR0FBeUUsTUFBekUsQ0FBSyxVQUFVLHdEQUEwRCxFQUkxRSxHQVNFLElBVEYsQ0FDQyxVQUFXLEVBQ1YsOENBRUEsR0FBb0IsT0FDcEIsR0FBa0IsTUFDbkIsRUFORCxTQVFFLEVBQU0sTUFDTixFQUdELEdBQ0EsR0FBMEUsTUFBMUUsQ0FBSyxVQUFVLHlEQUEyRCxHQUUxRSxHQUlKLE9BQ0MsR0EyQkUsRUEzQkYsQ0FDQyxVQUFXLEVBQ1YseUJBQ0EsR0FBZSxFQUNaLEVBQ0MsaUJBQ0EsaUJBQ0QsY0FDSCxHQUNDLEVBQUUsR0FBZSxJQUNqQiw0QkFDRCxDQUNELEVBQ0EsT0FBUSxHQUNSLFNBQVUsRUFDVixRQUFTLENBQUMsSUFBTSxDQUNmLEVBQUUsZ0JBQWdCLEVBQ2xCLEVBQWEsQ0FBSyxHQUVuQixJQUFLLEVBQ0wsTUFBTyxFQUNQLGNBQWUsS0FDWCxLQUNBLEVBdkJMLFNBMEJFLEVBQWMsRUFBWSxDQUFLLEVBQUksR0FBQyxFQUFELEVBQXFCLEVBQ3hELEVBSUcsSUFBTSxHQUFpQixHQUM3QixHQUNBLENBQUMsRUFBVyxJQUFjLENBRXpCLE9BQ0MsRUFBVSxZQUFjLEVBQVUsV0FDbEMsRUFBVSxjQUFnQixFQUFVLGFBQ3BDLEVBQVUsWUFBYyxFQUFVLFdBQ2xDLEVBQVUsUUFBVSxFQUFVLE1BR2pDLHNERHJITyxJQUFNLEdBQWdELEVBQUcsU0FBVSxDQUN6RSxJQUFPLEVBQVksR0FBaUIsR0FBUyxFQUFLLEdBQzNDLEVBQW1CLEdBQ3pCLEdBQW1DLElBQUksR0FDaEMsY0FBYSxrQkFBbUIsRUFBd0IsQ0FBQyxLQUFXLENBQzNFLFlBQWEsRUFBTSxZQUNuQixlQUFnQixFQUFNLGNBQ3ZCLEVBQUUsRUFFRixHQUFvQixFQUFLLEtBQU8sQ0FDL0IsS0FBTSxJQUFNLEVBQWMsRUFBSSxFQUM5QixNQUFPLElBQU0sRUFBYyxFQUFLLEVBQ2hDLHFCQUFzQixDQUFDLElBQ3RCLEVBQXFCLENBQVMsQ0FDaEMsRUFBRSxFQU9GLElBQUksRUFKb0IsRUFBWSxRQUFRLE9BQU8sRUFJRixNQUFNLEVBQ3ZELE1BQU8sRUFBMkIsSUFBSSxJQUFNLEVBQzNDLEVBQTZCLEVBQTJCLFNBQVMsRUFBRyxLQUFLLEVBRzFFLE9BQ0MsR0FvQkUsR0FwQkYsQ0FBUSxhQUFjLEVBQWUsS0FBTSxFQUEzQyxTQUNDLEdBa0JFLEdBbEJGLENBQWUsVUFBVSx3Q0FBekIsU0FrQkUsQ0FqQkQsR0FJRSxHQUpGLFVBQ0MsR0FFRSxHQUZGLFVBQ0UsR0FBbUIsSUFBSSxPQUFPLGNBQWMsRUFDNUMsRUFDRCxFQUNGLEdBV0UsTUFYRixDQUFLLFVBQVUsaUJBQWYsU0FDRSxHQUFtQixPQUFPLElBQUksQ0FBQyxJQUFVLENBQ3pDLE9BQ0MsR0FBQyxHQUFELENBQ0MsVUFBVSx5QkFDVixVQUFXLDRCQUE0QixFQUFNLEtBQzdDLE1BQU8sR0FDRixFQUFNLEVBQ1osRUFFRCxFQUNBLEdBQ0QsRUFDRCxHRXRFSix1QkFBUyxnRUFzQkYsU0FBUyxFQUFhLEVBQzVCLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsU0FDQSxhQUNBLFNBQ0EsV0FDQSxZQUNBLFFBQ0EsY0FBZSxFQUNmLFdBQVcsSUFDVyxDQUN0QixJQUNDLGNBQ0EscUJBQ0EsbUJBQ0Esa0JBQ0EsUUFDRyxFQUF3QixDQUFDLEtBQVcsQ0FDdkMsWUFBYSxFQUFNLFlBQ25CLG1CQUFvQixFQUFNLG1CQUMxQixpQkFBa0IsRUFBTSxpQkFDeEIsZ0JBQWlCLEVBQU0sZ0JBQ3ZCLEtBQU0sRUFBTSxJQUNiLEVBQUUsR0FFTSxTQUFRLGNBQWUsR0FBYSxDQUMzQyxLQUNBLEtBQU0sQ0FDTCxPQUNBLE9BQ0EsT0FDQSxTQUNBLGFBQ0EsUUFDRCxFQUNBLFNBQVUsR0FBc0IsQ0FDakMsQ0FBQyxFQUVLLEVBQWtCLENBQUMsSUFBd0IsQ0FHaEQsR0FGQSxFQUFFLGdCQUFnQixFQUVkLEdBQW9CLEVBQ3ZCLE9BR0QsSUFBTSxFQUFRLEVBQUssS0FBSyxHQUFRLENBQUMsRUFBRSxPQUFPLEdBQVUsQ0FBQyxFQUNqRCxFQUFNLEVBQU0sTUFBTSxFQUN0QixHQUFJLElBQVMsUUFBYSxJQUFXLE9BQ3BDLEVBQU0sRUFBSSxLQUFLLENBQUksRUFBRSxPQUFPLEVBQVMsRUFBRSxFQUNqQyxRQUFJLElBQVMsT0FDbkIsRUFBTSxFQUFJLEtBQUssRUFBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBRWpDLE9BQU0sRUFBSSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFHN0IsRUFBWSxDQUFFLFFBQU8sTUFBSyxhQUFZLFFBQU8sQ0FBQyxHQUcvQyxPQUdDLEdBZ0JFLE1BaEJGLENBQ0MsVUFBVyxFQUNWLGlCQUNBLEVBQ0EsR0FBVSxDQUFDLEdBQXNCLENBQUMsR0FBWSxZQUM5QyxHQUFvQixFQUFXLGlCQUFtQixpQkFDbEQsSUFBYSxHQUFpQixjQUFnQixHQUMvQyxFQUNBLGdCQUFlLEVBQVMsU0FBUyxFQUNqQyxjQUFhLEVBQ2IsWUFBVyxFQUNYLFFBQVMsRUFDVCxJQUFLLEVBQ0wsTUFBTyxFQWJSLFNBZUUsRUFDQSxxRUo3RUosSUFBTSxHQUFzQyxFQUMzQyxNQUNBLE9BQ0EsU0FDQSxZQUFZLEdBQ1osYUFDQSxXQUFXLE1BQ1gscUJBQXFCLEdBQ3JCLFNBQVMsR0FDVCxjQUFlLEVBQ2YsZ0JBQWdCLEdBQ2hCLGNBQ0ssQ0FDTCxJQUFNLEVBQXFCLEdBQU0sT0FJOUIsSUFBSSxHQUVOLGVBQWUsRUFDZix3QkFDQSxjQUNBLElBQ0EsdUJBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxtQkFDRyxFQUF3QixDQUFDLEtBQVcsQ0FDdkMsYUFBYyxFQUFNLGFBQ3BCLHNCQUF1QixFQUFNLHNCQUM3QixZQUFhLEVBQU0sWUFDbkIsZUFBZ0IsRUFBTSxlQUN0QixFQUFHLEVBQU0sRUFDVCxxQkFBc0IsRUFBTSxxQkFDNUIsY0FBZSxFQUFNLGNBQ3JCLGNBQWUsRUFBTSxjQUNyQixhQUFjLEVBQU0sYUFDcEIsZ0JBQWlCLEVBQU0sZUFDeEIsRUFBRSxFQUVJLEVBQWMsR0FBUSxJQUFNLENBQ2pDLEdBQUksQ0FBQyxFQUNKLE1BQU8sQ0FBQyxFQUdULElBQUksRUFBYyxFQUNqQixFQUFJLFFBQVEsQ0FBUSxFQUNwQixFQUFJLE1BQU0sQ0FBUSxDQUNuQixFQUVBLEdBQUksRUFDSCxFQUFjLEVBQVksT0FBTyxDQUFDLElBQU0sRUFBRSxNQUFNLEVBR2pELEdBQUksRUFBWSxDQUNmLElBQU0sRUFBaUIsRUFBcUIsQ0FBVSxHQUFLLENBQUMsRUFFNUQsT0FBTyxFQUFZLE9BQU8sQ0FBQyxLQUMxQixFQUFlLEtBQUssQ0FBQyxLQUFPLE9BQU8sR0FBRyxFQUFFLElBQU0sT0FBTyxHQUFNLEVBQUUsQ0FBQyxDQUMvRCxFQUdELE9BQU8sR0FDTCxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0QsQ0FBQyxFQUdLLEVBQWdCLENBQUMsRUFBa0IsSUFBNEIsQ0FDcEUsRUFBbUIsU0FBUyxxQkFBcUIsQ0FDaEQsTUFDQSxRQUNELENBQUMsRUFDRCxFQUFtQixTQUFTLEtBQUssR0FHNUIsRUFBaUIsRUFBSSxNQUFNLElBQU0sRUFBWSxNQUFNLEVBRW5ELEVBQW9CLEVBQVksT0FBUyxFQUN6QyxFQUFrQixFQUFvQixFQUd0QyxFQUF5QixHQUFRLElBQU0sQ0FDNUMsR0FBSSxHQUFjLEVBQWlCLENBQ2xDLElBQU0sRUFBVyxFQUFnQixDQUFVLEVBQzNDLEdBQUksR0FBVSxjQUNiLE9BQU8sRUFBUyxjQUdsQixPQUFPLEdBQ0wsQ0FBQyxFQUFZLEVBQWlCLENBQWEsQ0FBQyxFQUV6QyxFQUFhLEdBQWUsQ0FDakMsS0FBTSxFQUNOLEtBQU0sSUFBYSxPQUFTLEVBQUksS0FBSyxFQUFJLE9BQ3pDLGNBQWUsQ0FDaEIsQ0FBQyxFQUVLLEVBQVUsRUFBSSxPQUFPLElBQUksRUFDekIsRUFBSyxFQUFJLE9BQU8sSUFBSSxFQUNwQixFQUNMLElBQWEsT0FDVixZQUFZLEVBQUksT0FBTyxZQUFZLEtBQUssS0FBVyxJQUNuRCxZQUFZLEVBQUksT0FBTyxZQUFZLElBRXZDLE9BQ0MsZ0JBa0VFLENBakVELEdBNkRFLEdBN0RGLENBQ0MsT0FBUSxFQUNSLFVBQVcsRUFDVix5SEFDQSxDQUNELEVBQ0EsY0FBYSxHQUFjLEVBQzNCLEtBQU0sRUFDTixTQUFVLENBQUMsR0FBYyxDQUFDLEVBQzFCLEtBQU0sRUFDTixHQUFJLFlBQVksRUFBSSxZQUFZLElBQUksRUFBYSxhQUFhLElBQWUsS0FDN0UsT0FBUSxFQUNSLFdBQVksRUFDWixLQUFLLFdBYk4sU0FlQyxHQTZDRSxNQTdDRixDQUNDLFVBQVUsOEJBQ1YsY0FBWSxvQkFDWixNQUFPLENBQUUsSUFBSyxHQUFHLEtBQWlCLEVBSG5DLFNBNkNFLENBeENBLEdBQWlCLEdBQUMsR0FBRCxDQUFXLEtBQU0sRUFBSyxPQUFRLEVBQWUsRUFFOUQsR0FDQSxnQkFrQ0UsQ0FoQ0EsRUFBWSxNQUFNLEVBQUcsQ0FBWSxFQUFFLElBQUksQ0FBQyxFQUFPLElBQy9DLEdBQUMsTUFBRCxDQUNDLFVBQVUsa0JBQ1YsY0FBYSxHQUFPLE1BRXBCLE1BQU8sQ0FBRSxPQUFRLEdBQUcsTUFBcUIsR0FEcEMsU0FBUyxLQUFZLEVBQU0sSUFFakMsQ0FDQSxFQUdBLEdBQ0EsR0FtQkUsTUFuQkYsQ0FDQyxVQUFVLG9IQUNWLFFBQVMsQ0FBQyxJQUFNLENBQ2YsRUFBRSxnQkFBZ0IsRUFFbEIsRUFBYyxFQUFLLENBQVcsR0FFL0IsVUFBVyxDQUFDLElBQU0sQ0FDakIsR0FBSSxFQUFFLE1BQVEsU0FBVyxFQUFFLE1BQVEsSUFDbEMsRUFBRSxlQUFlLEVBQ2pCLEVBQUUsZ0JBQWdCLEVBQ2xCLEVBQWMsRUFBSyxDQUFXLEdBR2hDLEtBQUssU0FFTCxTQUFVLEVBaEJYLFNBbUJFLENBbkJGLElBa0JHLEVBbEJILElBa0J1QixFQUFFLE1BQU0sR0FDN0IsR0FFRixFQUVGLEdBQ0EsRUFDRCxFQUdGLEdBQUMsR0FBRCxDQUFnQixJQUFLLEVBQW9CLEdBQ3hDLEdBSVMsR0FBVyxHQUFLLEVBQWMsMkNLdk1wQyxJQUFNLEdBQTRDLEVBQ3hELFdBQ0EsWUFDQSxXQUNBLGNBQWUsS0FDVixDQUNMLElBQVEsa0JBQW1CLEVBQTJCLEVBRXRELE9BQ0MsR0FnQkUsTUFoQkYsQ0FDQyxVQUFXLEVBQ1YsZ0VBQ0EsQ0FDRCxFQUNBLGNBQWEsRUFDYixNQUFPLENBQ04sTUFBTyxFQUFTLE1BQ2hCLGdCQUFpQixFQUFTLGVBQzNCLEVBVEQsU0FXRSxFQUNFLEVBQWUsQ0FBUSxFQUN0QixHQUNELEdBQWdFLE1BQWhFLENBQUssVUFBVSwrQkFBZixTQUErQyxFQUFTLE1BQVEsRUFFbEUsR0NwQ0osZUFBUyxlQ0FULGtCQUFTLGVDMkJGLElBQU0sR0FBc0IsRUFDbEMsT0FDQSxTQUNBLGVBQ0Esa0JBQWtCLEdBQ2xCLFdBQVcsTUFDWCxlQUFlLE1BQ2dCLENBRy9CLElBQU0sRUFDTCxJQUFhLE9BQVMsRUFBSyxHQUFHLENBQUMsRUFBRSxRQUFRLE1BQU0sRUFBSSxFQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUN0RSxFQUNMLElBQWEsT0FBUyxFQUFLLEdBQUcsRUFBRSxFQUFFLE1BQU0sTUFBTSxFQUFJLEVBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQ3BFLEVBQVcsRUFBSyxPQUdoQixFQUFpQixFQUFPLE9BQU8sQ0FBQyxJQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTyxDQUFRLEVBQUksQ0FBQyxFQUN2RSxFQUFrQixFQUFPLE9BQzlCLENBQUMsSUFBTSxFQUFFLElBQUksS0FBSyxFQUFFLE1BQU8sQ0FBUSxJQUFNLENBQzFDLEVBR00sRUFBaUIsQ0FBQyxHQUFHLENBQWMsRUFBRSxLQUFLLENBQUMsRUFBRyxJQUFNLENBQ3pELElBQU0sRUFBWSxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFDdEMsR0FBSSxJQUFjLEVBQ2pCLE9BQU8sRUFFUixPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUMvQyxFQUdLLEVBQWtCLENBQUMsR0FBRyxDQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUcsSUFDckQsRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLENBQ3JCLEVBR00sRUFBNEQsQ0FBQyxFQUNuRSxRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFBTyxDQUM1QyxFQUFLLEdBQU8sQ0FBQyxFQUNiLFFBQVMsRUFBTSxFQUFHLEVBQU0sRUFBVSxJQUNqQyxFQUFLLEdBQUssR0FBTyxDQUFFLE1BQU8sR0FBTyxNQUFPLElBQUssRUFJL0MsSUFBTSxFQUFxQyxDQUFDLEVBRzVDLFFBQVcsS0FBUyxFQUFnQixDQUNuQyxJQUFNLEVBQWEsRUFBTSxJQUFJLEVBQU0sTUFBTSxRQUFRLENBQVEsRUFBRyxDQUFRLEVBQzlELEVBQ0wsSUFBYSxPQUFTLEVBQU0sSUFBSSxTQUFTLEVBQUcsUUFBUSxFQUFJLEVBQU0sSUFDekQsRUFBVyxFQUFNLElBQUksRUFBWSxRQUFRLENBQVEsRUFBRyxDQUFPLEVBQzNELEVBQVcsS0FBSyxJQUFJLEVBQUcsRUFBVyxLQUFLLEVBQVUsQ0FBUSxDQUFDLEVBQzFELEVBQVMsS0FBSyxJQUFJLEVBQVcsRUFBRyxFQUFTLEtBQUssRUFBVSxDQUFRLENBQUMsRUFHakUsRUFBbUIsRUFBTSxNQUFNLFFBQVEsQ0FBUSxFQUFFLFNBQVMsQ0FBUSxFQUNsRSxFQUFpQixFQUFNLElBQUksUUFBUSxDQUFRLEVBQUUsUUFBUSxDQUFPLEVBRzlELEVBQXFCLEdBR3JCLEVBQWMsR0FDbEIsUUFBUyxFQUFNLEVBQUcsRUFBTSxFQUFjLElBQU8sQ0FDNUMsSUFBSSxFQUFXLEdBQ2YsUUFBUyxFQUFNLEVBQVUsR0FBTyxFQUFRLElBQ3ZDLEdBQUksRUFBSyxHQUFLLEdBQUssTUFBTyxDQUN6QixFQUFXLEdBQ1gsTUFHRixHQUFJLEVBQVUsQ0FDYixFQUFjLEVBQ2QsT0FLRixHQUFJLElBQWdCLEdBQUksQ0FDdkIsUUFBUyxFQUFNLEVBQVUsR0FBTyxFQUFRLElBQ3ZDLEVBQUssR0FBYSxHQUFPLENBQUUsTUFBTyxHQUFNLE9BQU0sRUFJL0MsSUFBTSxFQUFXLEVBQVMsRUFBVyxFQUNyQyxFQUFnQixLQUFLLENBQ3BCLEtBQU8sRUFBVyxFQUFZLElBQzlCLE1BQVEsRUFBVyxFQUFZLElBQy9CLElBQ0MsRUFDQSxFQUNBLEdBQWUsR0FBbUIsR0FDbkMsT0FBUSxHQUNSLFNBQVUsS0FDUCxFQUNILG1CQUNBLGdCQUNELENBQW9CLEVBQ3BCLEVBQXFCLEdBSXRCLEdBQUksQ0FBQyxFQUNKLFFBQ0ssRUFBYyxFQUFXLEVBQzdCLEdBQWUsRUFDZixJQUNDLENBRUQsSUFBSSxFQUF1QixHQUMzQixRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFBTyxDQUM1QyxJQUFJLEVBQVcsR0FDZixRQUFTLEVBQU0sRUFBYSxHQUFPLEVBQVEsSUFDMUMsR0FBSSxFQUFLLEdBQUssR0FBSyxNQUFPLENBQ3pCLEVBQVcsR0FDWCxNQUdGLEdBQUksRUFBVSxDQUNiLEVBQXVCLEVBQ3ZCLE9BS0YsR0FBSSxJQUF5QixHQUFJLENBQ2hDLFFBQVMsRUFBTSxFQUFhLEdBQU8sRUFBUSxJQUMxQyxFQUFLLEdBQXNCLEdBQU8sQ0FBRSxNQUFPLEdBQU0sT0FBTSxFQUl4RCxJQUFNLEVBQW9CLEVBQVMsRUFBYyxFQUNqRCxFQUFnQixLQUFLLENBQ3BCLEtBQU8sRUFBYyxFQUFZLElBQ2pDLE1BQVEsRUFBb0IsRUFBWSxJQUN4QyxJQUNDLEVBQ0EsRUFDQSxHQUF3QixHQUFtQixHQUM1QyxPQUFRLEdBQ1IsU0FBVSxLQUNQLEVBQ0gsaUJBQWtCLEdBQ2xCLGdCQUNELENBQW9CLEVBQ3BCLEVBQXFCLEdBQ3JCLFFBT0osUUFBVyxLQUFTLEVBQWlCLENBQ3BDLElBQU0sRUFBYSxFQUFNLElBQUksRUFBTSxNQUFNLFFBQVEsQ0FBUSxFQUFHLENBQVEsRUFFOUQsRUFBTSxLQUFLLElBQ2hCLEVBQ0EsS0FBSyxJQUFJLEVBQVcsRUFBRyxFQUFXLEtBQUssRUFBVSxDQUFRLENBQUMsQ0FDM0QsRUFHTSxFQUFtQixHQUNuQixFQUFpQixHQUduQixFQUFjLEdBQ2xCLFFBQVMsRUFBTSxFQUFHLEVBQU0sRUFBYyxJQUNyQyxHQUFJLENBQUMsRUFBSyxHQUFLLEdBQUssTUFBTyxDQUMxQixFQUFjLEVBQ2QsTUFLRixHQUFJLElBQWdCLEdBQ25CLEVBQUssR0FBYSxHQUFPLENBQUUsTUFBTyxHQUFNLE9BQU0sRUFHOUMsRUFBZ0IsS0FBSyxDQUNwQixLQUFPLEVBQU0sRUFBWSxJQUN6QixNQUFRLEVBQUksRUFBWSxJQUN4QixJQUNDLEVBQ0EsRUFDQSxHQUFlLEdBQW1CLEdBQ25DLE9BQVEsR0FDUixTQUFVLEtBQ1AsRUFDSCxpQkEzQnVCLEdBNEJ2QixlQTNCcUIsRUE0QnRCLENBQW9CLEVBSXRCLE9BQU8sR0RuTkQsSUFBTSxHQUF5QixFQUNyQyxPQUNBLFNBQ0Esa0JBQ0EsYUFDQSxjQUNrQyxDQUNsQyxJQUNDLHdCQUNBLGVBQ0EsZUFDQSx3QkFDRyxFQUF3QixDQUFDLEtBQVcsQ0FDdkMsc0JBQXVCLEVBQU0sc0JBQzdCLGFBQWMsRUFBTSxhQUNwQixhQUFjLEVBQU0sYUFDcEIscUJBQXNCLEVBQU0sb0JBQzdCLEVBQUUsRUFFSSxFQUFZLEVBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQ3BDLEVBQVUsRUFBSyxHQUFHLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFFakMsRUFBUyxHQUFRLElBQU0sQ0FDNUIsSUFBSSxFQUFhLEVBQXNCLEVBQVcsQ0FBTyxFQUN6RCxHQUFJLEVBQVksQ0FDZixJQUFNLEVBQWlCLEVBQXFCLENBQVUsRUFDdEQsRUFBYSxFQUFXLE9BQU8sQ0FBQyxJQUMvQixFQUFlLEtBQUssQ0FBQyxJQUFNLE9BQU8sRUFBRSxFQUFFLElBQU0sT0FBTyxFQUFNLEVBQUUsQ0FBQyxDQUM3RCxFQUdELEdBQUksRUFDSCxFQUFhLEVBQVcsT0FBTyxDQUFDLElBQU0sQ0FBQyxDQUFDLEVBQUUsU0FBVyxDQUFNLEVBRzVELE9BQU8sR0FDTCxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNELENBQUMsRUFjRCxPQVh5QixHQUFRLElBQU0sQ0FDdEMsT0FBTyxHQUFvQixDQUMxQixPQUNBLFNBQ0EsZUFDQSxrQkFDQSxlQUNBLFVBQ0QsQ0FBQyxHQUNDLENBQUMsRUFBTSxFQUFjLEVBQWlCLEVBQWMsRUFBUSxDQUFRLENBQUMsNENEckR6RSxJQUFNLEdBRUYsRUFDSCxPQUNBLFdBQVcsTUFDWCxhQUNBLGtCQUNBLGNBQWUsRUFDZixZQUNLLENBQ0wsSUFBTSxFQUFZLEVBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBRXBDLEVBQXNCLEdBQXVCLENBQ2xELE9BQ0EsV0FDQSxhQUNBLGtCQUNBLFFBQ0QsQ0FBQyxFQUVELE9BQ0MsR0E4QkUsTUE5QkYsQ0FDQyxVQUFVLGdFQUNWLGNBQWEsRUFGZCxTQUlFLEVBQW9CLElBQUksQ0FBQyxJQUFVLENBQ25DLElBQU0sRUFBVyxHQUFHLEVBQU0sTUFBTSxFQUFNLFlBQVksRUFBVSxZQUFZLEtBQUssR0FBYyxnQkFFM0YsT0FDQyxHQW1CRSxNQW5CRixDQUNDLFVBQVUsa0RBQ1YsWUFBVyxFQUFNLEtBQ2pCLGNBQWEsb0JBQW9CLEVBQU0sS0FDdkMsV0FBVSxFQUFNLElBQ2hCLGFBQVksRUFBTSxNQUVsQixNQUFPLENBQ04sS0FBTSxRQUFRLEVBQU0saUNBQ3BCLE1BQU8sUUFBUSxFQUFNLCtCQUNyQixJQUFLLEdBQUcsRUFBTSxRQUNkLE9BQVEsR0FBRyxNQUNaLEVBWkQsU0FjQyxHQUFDLEdBQUQsQ0FDQyxVQUFVLHVCQUNWLFVBQVcsRUFDWCxNQUFPLEVBQ1IsR0FaSyxHQUFHLFdBYVAsRUFFSCxFQUNBLEdBSVMsR0FBNEIsR0FBSyxFQUErQixzRFB0QzdFLElBQU0sR0FBNEQsRUFDakUsS0FDQSxXQUNBLFdBQVcsTUFDWCxVQUFVLFdBQ1Ysa0JBQ0EsWUFDQSxVQUFVLENBQUMsRUFDWCxTQUNBLGdCQUFnQixHQUNoQixZQUFZLE1BQ1AsQ0FDTCxJQUFRLGtCQUFtQixFQUF3QixDQUFDLEtBQVcsQ0FDOUQsZUFBZ0IsRUFBTSxjQUN2QixFQUFFLEVBRUksRUFBcUIsSUFBWSxXQUNqQyxFQUFZLEVBQVEsS0FBSyxDQUFDLElBQVEsRUFBSSxJQUFJLEVBRTFDLEVBQW9CLEdBQ3pCLENBQUMsSUFBd0IsQ0FDeEIsT0FDQyxHQVNFLE1BVEYsQ0FBSyxVQUFVLDRDQUFmLFNBQ0MsR0FBQyxHQUFELENBQ0MsT0FBUSxFQUNSLGNBQWEscUJBQXFCLElBQ2xDLGdCQUFpQixFQUNqQixLQUFNLEVBQ04sU0FBVSxFQUNWLFdBQVksR0FBVSxHQUN2QixFQUNDLEdBR0osQ0FBQyxFQUFRLEVBQWlCLEVBQVUsRUFBSSxHQUFVLEVBQUUsQ0FDckQsRUFFQSxPQUNDLEdBeUVFLE1BekVGLENBQ0MsVUFBVyxFQUFHLHVCQUF3QixDQUFTLEVBQy9DLGNBQWEsa0JBQWtCLElBRmhDLFNBeUVFLENBckVBLEdBQ0EsR0FVRSxHQVZGLENBQ0MsVUFBVSx1REFDVixjQUFhLHdCQUF3QixHQUFVLEtBQy9DLFNBQVUsRUFIWCxTQUtFLEVBQ0EsRUFBZSxDQUFRLEVBRXZCLEdBQTRELE1BQTVELENBQUssVUFBVSwwQkFBZixTQUEwQyxHQUFVLE1BQVEsRUFFNUQsRUFFSCxHQXVERSxNQXZERixDQUFLLFVBQVUsdUJBQWYsU0F1REUsQ0F0REQsR0FpREUsTUFqREYsQ0FBSyxVQUFVLGNBQWYsU0FDRSxFQUFRLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDNUIsR0FBSSxFQUFJLElBQ1AsT0FDQyxHQUFDLEdBQUQsQ0FDQyxPQUFRLEVBQ1IsVUFBVyxFQUNWLGNBQ0EsR0FBYSxhQUNiLEVBQUksU0FDTCxFQUNBLElBQUssRUFBSSxJQUNULFNBQVUsRUFDVixLQUFNLElBQWEsT0FBUyxFQUFJLElBQUksS0FBSyxFQUFJLE9BRTdDLFdBQVksR0FBVSxHQUN0QixjQUFlLEdBRlYsRUFBSSxJQUFJLFlBQVksQ0FHMUIsRUFJRixJQUFNLEVBQVksSUFBVSxFQUFRLE9BQVMsRUFFN0MsT0FDQyxHQXNCRSxNQXRCRixDQUFLLFVBQVUsdUJBQWYsU0FzQkUsQ0FyQkQsR0FrQkUsTUFsQkYsQ0FBSyxVQUFVLGNBQWYsU0FDRSxFQUFJLE1BQU0sSUFBSSxDQUFDLElBQ2YsR0FBQyxHQUFELENBQ0MsT0FBUSxFQUNSLFVBQVcsRUFDVixjQUNBLEdBQWEsYUFDYixDQUFDLEdBQWEsWUFDZCxFQUFJLFNBQ0wsRUFDQSxJQUFLLEVBQ0wsU0FBVSxFQUNWLEtBQU0sSUFBYSxPQUFTLEVBQUksS0FBSyxFQUFJLE9BRXpDLFdBQVksR0FBVSxHQUN0QixjQUFlLEdBRlYsRUFBSSxZQUFZLENBR3RCLENBQ0EsRUFDQSxFQUVELEVBQWtCLEVBQUksSUFBSSxJQXJCZSxFQUFJLEVBc0I3QyxFQUVILEVBQ0EsRUFHRCxDQUFDLEdBQ0QsRUFBa0IsRUFBUSxJQUFJLENBQUMsSUFBUSxFQUFJLEdBQUcsRUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUMvRCxHQUNELEdBSVMsR0FBb0IsR0FBSyxFQUF1QixFVW5KN0QsZUFBUyx3REFRVCxJQUFNLEdBQThDLEVBQUcsZUFBZ0IsQ0FDdEUsSUFBUSxLQUFNLEVBQXdCLENBQUMsS0FBVyxDQUFFLEVBQUcsRUFBTSxDQUFFLEVBQUUsRUFDakUsT0FDQyxHQU9FLE1BUEYsQ0FDQyxVQUFXLEVBQ1YsNEhBQ0EsQ0FDRCxFQUpELFNBTUUsRUFBRSxRQUFRLEVBQ1YsR0FJUyxHQUFhLEdBQUssRUFBZ0Isc0RYUi9DLElBQU0sR0FBNEMsRUFDakQsT0FDQSxVQUNBLFdBQ0EsYUFBYSxNQUNSLENBQ0wsSUFBTSxFQUFVLEVBQUssSUFBSSxDQUFDLEVBQUssS0FBVyxDQUN6QyxHQUFJLGNBQWMsRUFBSSxZQUFZLEtBQUssSUFDdkMsTUFDQSxTQUFVLE1BQ1YsVUFBVyxFQUFHLDJDQUE0QyxHQUFTLElBQUksQ0FDeEUsRUFBRSxFQUVGLE9BQ0MsR0FnQkUsTUFoQkYsQ0FBSyxVQUFXLEVBQUcsY0FBZSxHQUFTLEdBQUcsRUFBRyxjQUFZLGNBQTdELFNBZ0JFLENBZEEsR0FBYyxHQUFDLEdBQUQsQ0FBWSxVQUFXLEdBQVMsT0FBUSxFQUd2RCxHQUFDLEdBQUQsQ0FDQyxPQUFNLEdBQ04sVUFBVSxtQkFDVixRQUFTLEVBQ1QsZ0JBQWlCLEVBQ2pCLFNBQVMsTUFDVCxHQUFJLGVBQWUsR0FBVSxJQUFNLFNBQ25DLFVBQVMsR0FDVCxTQUFVLEVBQ1YsUUFBUSxVQUNULEdBQ0MsR0FJUyxHQUFZLEdBQUssRUFBZSxFWS9DN0MsZUFBUyxlQ0RULGVBQVMsZUNBVCxzQkFDQSxlQUFTLHVFQW9CVCxJQUFNLEdBQTZCLEVBQ2xDLGFBQ0EsV0FDQSxJQUFLLEVBQ0wsY0FDZ0MsQ0FFaEMsSUFBUSw2QkFBNEIsUUFBUyxFQUM1QyxDQUFDLEtBQVcsQ0FDWCwyQkFBNEIsRUFBTSwyQkFDbEMsS0FBTSxFQUFNLElBQ2IsRUFDRCxFQUVNLEVBQU0sR0FBVyxHQUFNLEVBSzdCLEdBQUksRUFGa0IsRUFBSSxjQUFjLENBQVUsR0FBSyxFQUFJLFNBQVMsQ0FBUSxHQUczRSxPQUFPLEtBR1IsSUFBTSxFQUFnQixFQUFTLEtBQUssRUFBWSxRQUFRLEVBRWxELEVBRG1CLEVBQUksS0FBSyxFQUFZLFFBQVEsRUFDakIsRUFBaUIsSUFHdEQsR0FBSSxFQUNILE9BQ0MsZ0JBQ0UsRUFBMkIsQ0FDM0IsWUFBYSxFQUNiLGFBQ0EsV0FDQSxXQUNBLFdBQ0EsTUFDRCxDQUFDLEVBQ0EsRUFLSixPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVUsb0VBQ1YsY0FBWSx5QkFDWixNQUFPLENBQ04sSUFBSyxHQUFHLElBQ1QsRUFDRCxHQUlXLEdBQXVCLEdBQUssRUFBMEIsRUM1RW5FLGtCQUFTLGVDaUJGLElBQU0sR0FBeUIsRUFDckMsT0FDQSxXQUFXLE9BQ1gsWUFDc0QsQ0FFdEQsSUFBTSxFQUFlLEVBQ25CLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLEVBQ3ZCLFNBQVMsQ0FBQyxFQUFHLElBQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFFMUMsR0FBSSxFQUFhLFNBQVcsRUFDM0IsTUFBTyxDQUFDLEVBTVQsSUFBTSxFQUFZLEVBQUssR0FBRyxDQUFDLEdBQUssRUFBTSxFQUNoQyxFQUFhLEVBQUssT0FDbEIsRUFBYSxJQUFhLE1BRzFCLEVBQThCLENBQUMsRUFDakMsRUFBa0MsQ0FBQyxFQUNuQyxFQUFtQyxLQUN2QyxRQUFXLEtBQVMsRUFBYyxDQUNqQyxHQUFJLEdBQWdCLEVBQU0sTUFBTSxjQUFjLENBQVksRUFBRyxDQUM1RCxHQUFJLEVBQWUsT0FBUyxFQUMzQixFQUFTLEtBQUssQ0FBYyxFQUU3QixFQUFpQixDQUFDLEVBRW5CLEVBQWUsS0FBSyxDQUFLLEVBQ3pCLEVBQWUsRUFBZSxFQUFNLElBQUksRUFBYyxFQUFNLEdBQUcsRUFBSSxFQUFNLElBRTFFLEdBQUksRUFBZSxPQUFTLEVBQzNCLEVBQVMsS0FBSyxDQUFjLEVBSTdCLElBQU0sRUFBcUMsQ0FBQyxFQUM1QyxRQUFXLEtBQVcsRUFBVSxDQUMvQixHQUFJLEVBQVEsU0FBVyxFQUFHLENBRXpCLElBQU0sRUFBUSxFQUFRLEdBRWxCLEVBQVksRUFBTSxNQUFNLEtBQUssRUFBVyxFQUFVLEVBQUksRUFDdEQsRUFBVSxFQUFNLElBQUksS0FBSyxFQUFXLEVBQVUsRUFBSSxFQUV0RCxHQUFJLEdBSUgsR0FIQSxFQUFZLEtBQUssTUFBTSxDQUFTLEVBQ2hDLEVBQVUsS0FBSyxLQUFLLENBQU8sRUFFdkIsR0FBVyxFQUNkLEVBQVUsRUFBWSxFQUt4QixHQUFJLEVBQVksRUFBRyxFQUFZLEVBQy9CLEdBQUksRUFBVSxFQUFZLEVBQVUsRUFFcEMsSUFBTSxFQUFnQixLQUFLLElBQUksRUFBRyxFQUFVLENBQVMsRUFHckQsR0FBSSxJQUFrQixFQUFHLFNBRXpCLElBQU0sRUFBTyxFQUFZLEVBQWMsSUFDakMsRUFBVSxFQUFnQixFQUFjLElBRTlDLEVBQWdCLEtBQUssSUFBSyxFQUFPLEtBQU0sRUFBRyxNQUFPLElBQUssTUFBSyxRQUFPLENBQUMsRUFDbkUsU0FLRCxJQUFNLEVBQWdCLENBQUMsR0FBRyxDQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUcsSUFBTSxDQUNqRCxJQUFNLEVBQVksRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFPLFFBQVEsRUFDeEMsRUFBWSxFQUFFLElBQUksS0FBSyxFQUFFLE1BQU8sUUFBUSxFQUc5QyxHQUFJLElBQWMsRUFDakIsT0FBTyxFQUFZLEVBSXBCLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLEVBQzNCLEVBR0ssRUFBYyxFQUFjLE9BSTlCLEVBQ0osR0FBSSxJQUFnQixFQUNuQixFQUFZLEdBQ04sUUFBSSxJQUFnQixFQUMxQixFQUFZLEdBQ04sUUFBSSxJQUFnQixFQUMxQixFQUFZLEdBRVosT0FBWSxHQUdiLElBQU0sRUFBaUIsRUFBYyxFQUFJLEdBQWEsRUFBYyxHQUFLLEVBRXpFLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBYyxPQUFRLElBQUssQ0FDOUMsSUFBTSxFQUFRLEVBQWMsR0FFeEIsRUFBWSxFQUFNLE1BQU0sS0FBSyxFQUFXLEVBQVUsRUFBSSxFQUN0RCxFQUFVLEVBQU0sSUFBSSxLQUFLLEVBQVcsRUFBVSxFQUFJLEVBRXRELEdBQUksR0FHSCxHQUZBLEVBQVksS0FBSyxNQUFNLENBQVMsRUFDaEMsRUFBVSxLQUFLLEtBQUssQ0FBTyxFQUN2QixHQUFXLEVBQ2QsRUFBVSxFQUFZLEVBS3hCLEdBQUksRUFBWSxFQUFHLEVBQVksRUFDL0IsR0FBSSxFQUFVLEVBQVksRUFBVSxFQUVwQyxJQUFNLEVBQWdCLEtBQUssSUFBSSxFQUFHLEVBQVUsQ0FBUyxFQUVyRCxHQUFJLElBQWtCLEVBQUcsU0FFekIsSUFBTSxFQUFPLEVBQVksRUFBYyxJQUNqQyxFQUFVLEVBQWdCLEVBQWMsSUFHMUMsRUFDQSxFQUNBLEVBRUosR0FBSSxJQUFNLEVBRVQsRUFBTyxFQUNQLEVBQVEsSUFDUixFQUFTLEVBR1QsT0FBTyxFQUFpQixFQUN4QixFQUFRLElBQU0sRUFDZCxFQUFTLEVBQUksRUFHZCxFQUFnQixLQUFLLElBQ2pCLEVBQ0gsT0FDQSxRQUNBLE1BQ0EsU0FDQSxRQUNELENBQUMsR0FJSCxPQUFPLEdEbktELElBQU0sR0FBd0IsRUFDcEMsT0FDQSxXQUNBLGdCQUNpQyxDQUNqQyxJQUFRLHdCQUF1Qix3QkFDOUIsRUFBd0IsQ0FBQyxLQUFXLENBQ25DLHNCQUF1QixFQUFNLHNCQUM3QixxQkFBc0IsRUFBTSxvQkFDN0IsRUFBRSxFQUNHLEVBQVcsRUFBSyxHQUFHLENBQUMsRUFBRSxRQUFRLEtBQUssRUFDbkMsRUFBUyxFQUFLLEdBQUcsRUFBRSxFQUFFLE1BQU0sS0FBSyxFQUVoQyxFQUFTLEdBQVEsSUFBTSxDQUM1QixJQUFJLEVBQVksRUFBc0IsRUFBVSxDQUFNLEVBQ3RELEdBQUksRUFBWSxDQUNmLElBQU0sRUFBaUIsRUFBcUIsQ0FBVSxFQUN0RCxFQUFZLEVBQVUsT0FBTyxDQUFDLElBQzdCLEVBQWUsS0FBSyxDQUFDLElBQU8sT0FBTyxFQUFHLEVBQUUsSUFBTSxPQUFPLEVBQU0sRUFBRSxDQUFDLENBQy9ELEVBS0QsT0FBTyxFQUFVLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLEdBQ3RDLENBQ0YsRUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNELENBQUMsRUFVRCxPQVJvQixHQUEyQixJQUFNLENBQ3BELE9BQU8sR0FBdUIsQ0FDN0IsT0FDQSxTQUNBLFVBQ0QsQ0FBQyxHQUNDLENBQUMsRUFBTSxFQUFVLENBQU0sQ0FBQyx1REZyQzVCLElBQU0sR0FBd0UsRUFDN0UsT0FDQSxXQUFXLE9BQ1gsYUFDQSxXQUNBLGNBQWUsS0FDVixDQUNMLElBQU0sRUFBYyxHQUFzQixDQUFFLE9BQU0sV0FBVSxZQUFXLENBQUMsRUFDbEUsRUFBYSxFQUFLLEdBQUcsQ0FBQyxFQUN0QixFQUFXLEVBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFHLENBQVEsRUFFN0MsT0FDQyxHQW9DRSxNQXBDRixDQUNDLFVBQVUsZ0VBQ1YsY0FBYSxFQUZkLFNBb0NFLENBaENBLEdBQWMsR0FDZCxHQUFDLEdBQUQsQ0FDQyxTQUFVLEVBQ1YsV0FBWSxFQUNaLFNBQVUsRUFDWCxFQUVBLEVBQVksSUFBSSxDQUFDLEVBQU8sSUFBVSxDQUNsQyxJQUFNLEVBQVcsU0FBUyxFQUFNLE1BQU0sS0FBUyxFQUFLLEdBQUcsQ0FBQyxFQUFFLFlBQVksS0FBSyxHQUFjLGdCQUNuRixFQUFlLEVBQU0sSUFBSSxLQUFLLEVBQU0sTUFBTyxRQUFRLEdBQUssR0FFOUQsT0FDQyxHQWlCRSxNQWpCRixDQUNDLFVBQVUsV0FFVixNQUFPLENBQ04sS0FBTSxHQUFHLEVBQU0sUUFDZixNQUFPLFFBQVEsRUFBTSwrQkFDckIsSUFBSyxHQUFHLEVBQU0sT0FDZCxPQUFRLEdBQUcsRUFBTSxTQUNsQixFQVJELFNBVUMsR0FBQyxHQUFELENBQ0MsVUFBVyxFQUFHLCtCQUFnQyxDQUM3QywrQkFBZ0MsQ0FDakMsQ0FBQyxFQUNELFVBQVcsRUFDWCxNQUFPLEVBQ1IsR0FkSyxHQUFHLFdBZVAsRUFFSCxHQUNBLEdBSVMsR0FBMEIsR0FBSyxFQUE2QixzRER4Q3pFLElBQU0sR0FBd0QsRUFDN0QsS0FDQSxPQUNBLGFBQ0EsV0FDQSxjQUFlLEVBQ2YsV0FDQSxZQUNBLGFBQ0EsV0FDQSxZQUFZLENBQUMsRUFBRSxFQUNmLGtCQUNLLENBQ0wsT0FDQyxHQXdFRSxNQXhFRixDQUNDLFVBQVcsRUFDVixtRkFDQSxDQUNELEVBQ0EsY0FBYSxHQUFjLGdCQUFnQixJQUw1QyxTQVFDLEdBK0RFLE1BL0RGLENBQ0MsVUFBVSx1QkFDVixNQUFPLENBQ04saUJBQWtCLFVBQVUsRUFBSyx5QkFDbEMsRUFKRCxTQStERSxDQXpEQSxFQUFLLElBQUksQ0FBQyxJQUFRLENBQ2xCLElBQU0sRUFBVSxFQUFJLE9BQU8sSUFBSSxFQUN6QixFQUFVLEVBQUksT0FBTyxZQUFZLEVBRXZDLEdBQUksRUFBWSxDQUNmLElBQU0sRUFDTCxJQUFPLFdBQ0osaUJBQWlCLElBQ2pCLGlCQUFpQixLQUFXLE9BQWEsRUFBYSxJQUFJLElBQWUsS0FDN0UsT0FDQyxHQU1FLE1BTkYsQ0FDQyxVQUFVLDZCQUNWLGNBQWEsRUFGZCxTQUtFLEVBQVcsQ0FBRyxHQUZWLEdBQUcsS0FBVyxHQUdsQixFQUlKLE9BQU8sRUFBVSxJQUFJLENBQUMsSUFBVyxDQUNoQyxJQUFNLEVBQUksSUFBVyxHQUFLLE9BQVksRUFDaEMsRUFBSyxJQUFNLE9BQVksS0FBTyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUcsR0FBRyxFQUN2RCxFQUFTLGlCQUFpQixLQUFXLEtBQVcsSUFBSyxFQUFhLElBQUksSUFBZSxLQUUzRixPQUNDLEdBQUMsR0FBRCxDQUNDLFVBQVcsRUFDVixpRUFDQSxJQUFXLEdBQUssR0FBSyxzQ0FDckIsRUFBZSxhQUFlLFVBQy9CLEVBQ0EsY0FBYSxFQUNiLElBQUssRUFBSSxFQUFJLE9BQU8sQ0FBQyxFQUFJLEVBQ3pCLFNBQVUsRUFDVixLQUFNLEVBQUksS0FBSyxFQUVmLE9BQVEsRUFDUixXQUFZLEVBQ1osbUJBQW9CLElBSGYsR0FBRyxLQUFXLEtBQVcsS0FBTSxHQUFjLGVBSW5ELEVBRUQsRUFDRCxFQUdBLENBQUMsR0FDRCxHQVFFLE1BUkYsQ0FBSyxVQUFVLDRDQUFmLFNBQ0MsR0FBQyxHQUFELENBQ0MsY0FBYSxtQkFBbUIsSUFDaEMsS0FBTSxFQUNOLFNBQVUsRUFDVixTQUFVLEVBQ1YsV0FBWSxFQUNiLEVBQ0MsR0FFRixFQUNELEdBSVMsR0FBa0IsR0FDOUIsRUFDRCxFS3hIQSxlQUFTLG1FQVdULElBQU0sR0FFRixFQUFHLFdBQVUsVUFBUyxlQUFnQixDQUN6QyxJQUFRLG1CQUFrQix1QkFBd0IsRUFDakQsQ0FBQyxLQUFXLENBQ1gsaUJBQWtCLEVBQU0saUJBQ3hCLG9CQUFxQixFQUFNLG1CQUM1QixFQUNELEVBRUEsT0FDQyxHQXdCRSxNQXhCRixDQUNDLFVBQVcsRUFDVixHQUFvQixrQ0FDcEIsQ0FDRCxFQUpELFNBd0JFLENBbEJELEdBS0UsTUFMRixDQUNDLFVBQVcsRUFBRyxzQkFBdUIsR0FBUyxNQUFNLEVBQ3BELGNBQVksdUJBRmIsU0FJRSxFQUNBLEVBRUQsR0FDQSxHQVFFLE1BUkYsQ0FDQyxVQUFXLEVBQ1YsdUNBQ0EsR0FBUyxNQUNWLEVBQ0EsY0FBWSx3QkFMYixTQU9FLEVBQ0EsR0FFRixHQUlTLEdBQThCLEdBQzFDLEVBQ0Qsc0RDOUNBLElBQU0sR0FBYyxzQkFnQlAsR0FBNEMsRUFDeEQsVUFDQSxXQUNBLFdBQVcsTUFDWCxVQUFVLFdBQ1YsVUFDQSxZQUNBLGVBQ0ssQ0FDTCxJQUFNLEVBQXFCLElBQVksV0FDakMsRUFBb0IsQ0FBQyxFQUVyQixFQUFTLEdBQ2QsR0FLRSxHQUxGLENBQ0MsVUFBVyxFQUNYLFFBQVMsQ0FBRSxPQUFRLEdBQVMsT0FBUSxPQUFRLEdBQVMsTUFBTyxFQUY3RCxTQUlFLEVBQ0EsRUFHSCxPQUNDLEdBdUNFLE1BdkNGLENBQUssVUFBVSxTQUFTLGNBQVksMEJBQXBDLFNBdUNFLENBckNBLEdBQXFCLEVBRXRCLEdBa0NFLEdBbENGLENBQ0MsVUFBVyxFQUNWLFNBQ0EsR0FBcUIsZ0JBQ3JCLEdBQXFCLEVBQ3RCLEVBQ0EsY0FBWSx1QkFDWixjQUFlLENBQUUsVUFBVyxrQ0FBbUMsRUFQaEUsU0FrQ0UsQ0F4QkEsR0FBc0IsRUFFdkIsR0FrQkUsTUFsQkYsQ0FDQyxVQUFXLEVBQ1Ysb0JBQ0EsR0FBc0IsR0FDdEIsR0FBUyxJQUNWLEVBQ0EsY0FBWSxxQkFOYixTQVNFLEVBQVEsSUFBSSxDQUFDLEVBQVEsSUFDckIsR0FBQyxHQUFELElBRUssRUFDSixVQUFXLEVBQ1gsU0FBVSxFQUNWLGFBQWMsSUFBVSxFQUFRLE9BQVMsR0FKcEMsR0FBRyxFQUFPLE1BQU0sR0FLdEIsQ0FDQSxFQUNBLEVBQ0YsR0FBQyxHQUFELENBQVcsVUFBVSxPQUFPLEVBL0I3QixJQWdDQyxHQUFDLEdBQUQsQ0FBVyxVQUFVLE9BQU8sWUFBWSxhQUFhLEVBQUcsS0FFdkQsR0FDRCxHQ3pERyxTQUFTLEVBQVksRUFDM0IsZ0JBQ0EsZ0JBQ0EsdUJBQ0EsV0FBVyxDQUFDLENBQWEsRUFDekIsd0JBQXdCLENBQUMsR0FDYSxDQUN0QyxJQUFNLEVBQVcsR0FBWSxDQUFFLGVBQWMsQ0FBQyxFQUU5QyxHQUNDLENBQUMsR0FDQSxDQUFDLEdBQWlCLEVBQXNCLFNBQVcsRUFFcEQsT0FBTyxFQUdSLElBQVEsV0FBVSxTQUFRLG9CQUFxQixHQUE0QixDQUMxRSxXQUNBLGdCQUNBLHdCQUNBLHNCQUNELENBQUMsRUFFRCxHQUFJLENBQUMsRUFDSixPQUFPLEVBSVIsT0FBTyxFQUFTLE9BQU8sQ0FBQyxJQUFNLENBQzdCLElBQU0sRUFBTyxFQUFFLEtBQUssRUFDcEIsT0FBTyxHQUFRLEdBQVksRUFBTyxFQUNsQyxzRENqREYsSUFBTSxHQUFVLElBQU0sQ0FDckIsSUFDQyxjQUNBLGdCQUNBLGFBQ0EsSUFDQSxnQkFDQSx3QkFDRyxHQUFtQixFQUNqQixFQUFVLEVBQVksT0FBTyxFQUFNLEVBQUcsS0FBSyxFQUMzQyxFQUFRLEdBQWEsQ0FDMUIsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FBQyxDQUFXLENBQ3ZCLENBQUMsRUFFSyxFQUFXLENBQ2hCLEdBQUksV0FDSixJQUFLLE9BQ0wsS0FBTSxFQUNOLFVBQ0MsbUVBQ0QsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUtFLE1BTEYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0UsS0FBSyxlQUFlLEVBQWUsQ0FDbkMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN4QixDQUFDLEVBQUUsT0FBTyxFQUFLLE9BQU8sQ0FBQyxFQUN0QixDQUVKLEVBRU0sRUFBVSxDQUNmLEdBQUksV0FBVyxFQUFZLE9BQU8sWUFBWSxJQUM5QyxJQUFLLEVBQ0wsS0FBTSxFQUNOLFVBQVcsNkJBQ1gsU0FBVSxNQUNYLEVBRUEsT0FDQyxHQStCRSxHQS9CRixDQUNDLFVBQVcsR0FBQyxHQUFELENBQVcsS0FBTSxDQUFDLENBQVcsRUFBRyxFQUMzQyxVQUFXLENBQUMsRUFBRyxHQUFJLEdBQUksRUFBRSxFQUN6QixRQUFTLENBQUUsT0FBUSxTQUFVLEtBQU0sU0FBVSxPQUFRLFFBQVMsRUFDOUQsUUFBUyxDQUFDLEVBQVUsQ0FBTyxFQUMzQixTQUFTLE9BQ1QsUUFBUSxVQU5ULFNBU0MsR0FxQkUsTUFyQkYsQ0FDQyxVQUFXLGlEQUNYLGNBQVksa0JBRmIsU0FJQyxHQWdCRSxFQWhCRixDQUNDLFVBQVcsRUFDVixrRkFDQSxHQUFXLGNBQ1osRUFDQSxjQUFlLEVBQVksT0FBTyxZQUFZLEVBTC9DLFNBZ0JFLENBVEQsR0FFRSxPQUZGLENBQU0sVUFBVSxtQkFBaEIsU0FDRSxFQUFZLE9BQU8sUUFBUSxFQUMzQixFQUNELEVBQVksT0FBTyxjQUFjLEVBQ2pDLEdBQ0EsR0FFRSxPQUZGLENBQU0sVUFBVSw4RkFBaEIsU0FDRSxFQUFFLE9BQU8sRUFDVCxHQUVGLEVBQ0QsRUFDRCxHQUlXLE1DdEZmLGtCQUFTLGVDRFQsZUFBUyx3REFTVCxJQUFNLEdBQXNDLEVBQzNDLFdBQ0EsZUFDeUMsQ0FDekMsSUFBUSxtQkFBa0IsdUJBQXdCLEVBQ2pELENBQUMsS0FBVyxDQUNYLGlCQUFrQixFQUFNLGlCQUN4QixvQkFBcUIsRUFBTSxtQkFDNUIsRUFDRCxFQUNBLE9BQ0MsR0FVRSxNQVZGLENBQ0MsVUFBVyxFQUNWLGtCQUNBLEdBQW9CLGtDQUNwQixFQUNBLENBQ0QsRUFDQSxjQUFZLHlCQVBiLFNBU0UsRUFDQSxHQUlTLEdBQWdDLEdBQzVDLEVBQ0Qsc0RDMUJBLElBQU0sR0FBYyxzQkFZUCxHQUFnRCxFQUM1RCxPQUNBLFdBQ0EsVUFDQSxPQUFRLEVBQ1IsV0FDQSxVQUFVLFdBQ1YscUJBQ0ssQ0FDTCxJQUFRLGVBQWdCLEVBQXdCLENBQUMsS0FBVyxDQUMzRCxZQUFhLEVBQU0sV0FDcEIsRUFBRSxFQUVJLEVBQXFCLElBQVksV0FDakMsRUFBb0IsQ0FBQyxFQUVyQixFQUFTLEdBQ2QsR0FFRSxHQUZGLENBQStCLFVBQVcsR0FBUyxPQUFuRCxTQUNFLEVBQ0EsRUFHSCxPQUNDLEdBa0RFLE1BbERGLENBQUssVUFBVSxTQUFTLGNBQVksNEJBQXBDLFNBa0RFLENBOUNBLEdBQXFCLEVBRXRCLEdBMkNFLEdBM0NGLENBQ0MsVUFBVyxFQUNWLFNBQ0EsR0FBcUIsZ0JBQ3JCLEdBQXFCLEVBQ3RCLEVBQ0EsY0FBWSx5QkFDWixjQUFlLENBQUUsVUFBVyxrQ0FBbUMsRUFQaEUsU0EyQ0UsQ0EvQkEsR0FBc0IsRUFHdkIsR0F3QkUsTUF4QkYsQ0FDQyxVQUFXLEVBQ1Ysb0JBQ0EsR0FBc0IsR0FDdEIsR0FBUyxJQUNWLEVBQ0EsY0FBWSx1QkFOYixTQVFDLEdBZUUsTUFmRixDQUNDLFVBQVUsdUNBRFgsU0FJRSxFQUFLLElBQUksQ0FBQyxFQUFLLElBQ2YsR0FBQyxHQUFELENBQ0MsT0FBUSxFQUFJLFFBQVUsRUFDdEIsZ0JBQWlCLEVBQ2pCLFNBQVUsRUFDVixVQUFXLElBQVUsRUFBSyxPQUFTLEVBRW5DLFFBQVMsS0FDTCxHQUZDLEVBQUksRUFHVixDQUNBLEdBWkksRUFBWSxPQUFPLFNBQVMsQ0FhaEMsRUFDRCxFQUVGLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxFQUM1QixHQUFDLEdBQUQsQ0FBVyxVQUFVLE9BQU8sWUFBWSxhQUFhLEdBQ3BELEdBQ0QsNENDckZHLElBQU0sR0FBMEMsRUFBRyxlQUFnQixDQUN6RSxJQUFRLGlCQUFnQixtQkFBa0Isc0JBQXFCLGVBQzlELEdBQW1CLEVBR2QsRUFBVyxHQUFZLEVBQWEsQ0FBYyxFQUV4RCxPQUNDLEdBb0JFLE1BcEJGLENBQ0MsVUFBVyxFQUNWLGNBQ0EsR0FBb0Isb0JBQ3BCLEVBQ0EsQ0FDRCxFQUNBLGNBQVksZUFQYixTQVNFLEVBQVMsSUFBSSxDQUFDLEVBQVMsSUFDdkIsR0FRRSxFQVJGLENBQ0MsVUFBVSx3RUFDVixjQUFhLGtCQUFrQixFQUFRLE9BQU8sS0FBSyxFQUFFLFlBQVksSUFDakUsTUFBTyxFQUFRLEtBRWYsY0FBZSxFQUFRLFlBQVksRUFMcEMsU0FPQyxHQUE4RCxPQUE5RCxDQUFNLFVBQVUscUJBQWhCLFNBQXNDLEVBQVEsT0FBTyxLQUFLLEVBQUksR0FIekQsRUFBUSxZQUFZLENBSXhCLENBQ0YsRUFDQSw0Q0g5QkcsSUFBTSxHQUFzQyxJQUFNLENBQ3hELElBQVEsY0FBYSxrQkFBbUIsR0FBbUIsRUFPckQsRUFMUSxHQUNiLElBQU0sR0FBYyxFQUFhLENBQWMsRUFDL0MsQ0FBQyxFQUFhLENBQWMsQ0FDN0IsRUFFbUIsSUFBSSxDQUFDLEVBQU0sS0FBZSxDQUM1QyxHQUFJLFFBQVEsSUFDWixRQUFTLEVBQUssSUFBSSxDQUFDLEtBQVMsQ0FDM0IsR0FBSSxPQUFPLEVBQUksWUFBWSxJQUMzQixNQUNBLFVBQVcsU0FDWCxTQUFVLEtBQ1gsRUFBRSxFQUNGLFVBQVcsU0FDWCxjQUFlLEVBQ2hCLEVBQUUsRUFFRixPQUNDLEdBTUUsR0FORixDQUNDLFFBQVMsQ0FBRSxLQUFNLFNBQVUsT0FBUSxRQUFTLEVBQzVDLEtBQU0sRUFDTixRQUFRLFVBSFQsU0FLQyxHQUFDLEdBQUQsQ0FBYSxVQUFVLE9BQU8sRUFDN0IsR0lsQ0osa0JBQVMsbUVBVVQsSUFBTSxHQUFhLDZEQUNiLEdBQWlCLHlEQUVqQixHQUFxQixJQUFNLENBQ2hDLElBQ0MsSUFDQSxjQUNBLGlCQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsYUFDQSxnQkFDQSx3QkFDRyxHQUFtQixFQUVqQixFQUFXLEdBQ2hCLElBQU0sR0FBWSxFQUFhLENBQWMsRUFDN0MsQ0FBQyxFQUFhLENBQWMsQ0FDN0IsRUFFTSxFQUFRLEdBQ2IsSUFDQyxHQUFhLENBQ1osY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FDWCxDQUFDLEVBQ0YsQ0FBQyxFQUFhLEVBQWUsRUFBc0IsQ0FBUSxDQUM1RCxFQUVNLEVBQVcsQ0FDaEIsR0FBSSxXQUNKLEtBQU0sRUFDTixJQUFLLE9BQ0wsVUFBVyxZQUFZLHNDQUN2QixTQUFVLE9BQ1YsU0FBVSxHQUNWLFdBQVksQ0FBQyxJQUNaLEdBS0UsTUFMRixDQUFLLFVBQVUseUZBQWYsU0FDRSxLQUFLLGVBQWUsRUFBZSxDQUNuQyxLQUFNLFVBQ04sT0FBUSxJQUFlLFNBQ3hCLENBQUMsRUFBRSxPQUFPLEVBQUssT0FBTyxDQUFDLEVBQ3RCLENBRUosRUFHTSxFQUFVLEdBQVEsSUFBTSxDQUM3QixPQUFPLEVBQVMsSUFBSSxDQUFDLEtBQVMsQ0FDN0IsR0FBSSxXQUFXLEVBQUksT0FBTyxZQUFZLElBQ3RDLE1BQ0EsTUFBTyxFQUFJLE9BQU8sR0FBRyxFQUNyQixVQUFXLEdBQ1gsS0FBTSxFQUFNLElBQUksQ0FBQyxJQUNoQixFQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FDckQsRUFDQSxNQUFPLENBQ1IsRUFBRSxHQUNBLENBQUMsRUFBVSxDQUFLLENBQUMsRUFFcEIsT0FDQyxHQXdERSxHQXhERixDQUNDLFVBQ0MsR0FBQyxHQUFELENBQ0MsUUFBUyxDQUFFLEtBQU0sR0FBWSxPQUFRLEVBQWUsRUFDcEQsS0FBTSxFQUNQLEVBRUQsUUFBUyxDQUFFLE9BQVEsY0FBZSxLQUFNLDhCQUErQixFQUN2RSxRQUFTLENBQUMsRUFBVSxHQUFHLENBQU8sRUFDOUIsU0FBUyxPQUNULFFBQVEsVUFWVCxTQVlDLEdBMkNFLE1BM0NGLENBQUssVUFBVyxxQkFBc0IsY0FBWSxtQkFBbEQsU0EyQ0UsQ0F6Q0QsR0FLRSxNQUxGLENBQUssVUFBVSw2RUFBZixTQUNDLEdBR0UsTUFIRixDQUFLLFVBQVUsNENBQWYsU0FHRSxDQUZELEdBQTZELE9BQTdELENBQU0sVUFBVSxnQ0FBaEIsU0FBaUQsRUFBRSxNQUFNLEVBQUksRUFDN0QsR0FBb0QsT0FBcEQsQ0FBTSxVQUFVLGNBQWhCLFNBQStCLEVBQVksS0FBSyxFQUFJLEdBQ25ELEVBQ0QsRUFHRCxFQUFTLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDN0IsSUFBTSxFQUFVLEVBQUksT0FBTyxFQUFNLEVBQUcsS0FBSyxFQUNuQyxFQUFNLG1CQUFtQixFQUFJLFlBQVksSUFFL0MsT0FDQyxHQXlCRSxFQXpCRixDQUNDLFVBQVcsRUFDVixpSUFDQSxHQUFXLHlCQUNaLEVBQ0EsY0FBYSxtQkFBbUIsRUFBSSxPQUFPLE1BQU0sRUFBRSxZQUFZLElBQy9ELE1BQU8sRUFBUSxLQUVmLFFBQVMsSUFBTSxDQUNkLEVBQVcsQ0FBRyxFQUNkLEVBQWMsQ0FBRSxNQUFPLENBQUksQ0FBQyxHQUU3QixjQUFlLEVBWmhCLFNBeUJFLENBWEQsR0FBeUQsTUFBekQsQ0FBSyxVQUFVLHFCQUFmLFNBQXFDLEVBQUksT0FBTyxLQUFLLEVBQUksRUFDekQsR0FTRSxNQVRGLENBQ0MsVUFBVyxFQUNWLDZFQUNBLEdBQVcsb0NBQ1osRUFKRCxTQU1FLEtBQUssZUFBZSxFQUFlLENBQ25DLElBQUssU0FDTixDQUFDLEVBQUUsT0FBTyxFQUFJLE9BQU8sQ0FBQyxFQUNyQixJQWpCRyxDQWtCSixFQUVILEdBQ0EsRUFDRCxHQUlXLDBEQ2pJZixJQUFNLEdBQW1CLENBQUMsSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FBRyxFQUNyRCxHQUFtQixDQUFDLGFBQWMsY0FBZSxjQUFjLEVBQy9ELEdBQXdCLEdBRXhCLEdBQWdCLENBQUMsSUFBK0IsQ0FDckQsR0FBSSxJQUFlLEVBQ2xCLE1BQU8sR0FFUixJQUFNLEVBQVMsRUFBYSxFQUFJLElBQU0sR0FDdEMsTUFBTyxHQUFHLFVBQW1CLEtBbUJ4QixHQUFXLElBQU0sQ0FDdEIsSUFBUSxjQUFhLGFBQVksU0FBUSxVQUFTLHdCQUF1QixLQUN4RSxHQUFtQixFQUNkLEVBQWMsRUFBWSxLQUFLLEVBRS9CLEVBQXFCLElBQW1CLENBQzdDLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxFQUFHLEVBQUcsQ0FBQyxFQUFHLElBQWUsQ0FDcEQsSUFBTSxFQUFZLEVBQU0sRUFDdEIsS0FBSyxDQUFXLEVBQ2hCLE1BQU0sQ0FBVSxFQUNoQixRQUFRLE9BQU8sRUFDWCxFQUFnQixFQUFPLE9BQzVCLENBQUMsSUFDQSxFQUFNLE1BQU0sS0FBSyxJQUFNLEdBQ3ZCLEVBQU0sTUFBTSxNQUFNLElBQU0sQ0FDMUIsRUFFQSxNQUFPLENBQ04sS0FBTSxFQUNOLEtBQU0sRUFBVSxPQUFPLE1BQU0sRUFDN0IsV0FBWSxFQUFjLE9BQzFCLFNBQVUsRUFBVSxPQUFPLElBQUksQ0FDaEMsRUFDQSxHQUdJLEVBQXVCLENBQUMsSUFBc0MsQ0FDbkUsSUFBTSxFQUFxQixFQUFVLFFBQVEsT0FBTyxFQUFFLFFBQVEsTUFBTSxFQUVwRSxPQUFPLE1BQU0sS0FBSyxDQUFFLE9BQVEsRUFBc0IsRUFBRyxDQUFDLEVBQUcsSUFBYSxDQUNyRSxJQUFNLEVBQVUsRUFBbUIsSUFBSSxFQUFVLEtBQUssRUFDaEQsRUFBVyxFQUFRLFFBQVEsS0FBSyxFQUNoQyxFQUFTLEVBQVEsTUFBTSxLQUFLLEVBQzVCLEVBQWMsRUFBc0IsRUFBVSxDQUFNLEVBRTFELE1BQU8sQ0FDTixLQUFNLEVBQ04sT0FBUSxFQUFRLE9BQU8sWUFBWSxFQUNuQyxpQkFBa0IsRUFBUSxNQUFNLElBQU0sRUFBVSxNQUFNLEVBQ3RELFFBQVMsRUFBUSxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBQ3RDLFdBQVksRUFBUSxPQUFPLEVBQWEsS0FBSyxFQUM3QyxXQUFZLEVBQVksTUFDekIsRUFDQSxHQUdJLEVBQWlCLENBQ3RCLEVBQ0EsRUFDQSxJQUNJLENBQ0osR0FBTyxnQkFBZ0IsRUFDdkIsRUFBVyxDQUFJLEVBQ2YsRUFBUSxDQUFJLEdBR1AsRUFBcUIsQ0FBQyxJQUEwQixDQUNyRCxJQUFNLEVBQVksSUFBVSxFQUFJLEVBQUUsT0FBTyxFQUFJLEVBQUUsUUFBUSxFQUN2RCxNQUFPLEdBQUcsS0FBUyxLQUdkLEVBQWtCLENBQUMsSUFBeUIsQ0FHakQsSUFBTSxFQUFvQixFQUFJLGlCQUMzQixHQUNBLG1DQUNHLEVBQWEsRUFBSSxRQUNwQixrREFDQSxHQUNHLEVBQ0wsRUFBSSxZQUFjLENBQUMsRUFBSSxRQUFVLGtDQUFvQyxHQUNoRSxFQUNMLEVBQUksV0FBYSxHQUFLLENBQUMsRUFBSSxTQUFXLENBQUMsRUFBSSxXQUFhLGNBQWdCLEdBRXpFLE9BQU8sRUFaTixtSkFjQSxFQUNBLEVBQ0EsRUFDQSxDQUNELEdBR0ssRUFBdUIsQ0FBQyxFQUFlLElBQTZCLENBRXpFLE9BQU8sRUFBRywrQkFETyxFQUFVLHdCQUEwQixDQUNILEdBRzdDLEVBQWEsRUFBbUIsRUFFdEMsT0FDQyxHQXNHRSxHQXRHRixDQUFZLFVBQVUsU0FBUyxjQUFZLFlBQTNDLFNBc0dFLENBckdELEdBbUdFLE1BbkdGLENBQ0MsVUFBVSx3RUFDVixjQUFZLFlBRmIsU0FJRSxFQUFXLElBQUksQ0FBQyxFQUFPLElBQWUsQ0FDdEMsSUFBTSxFQUFjLEVBQXFCLEVBQU0sSUFBSSxFQUM3QyxFQUFpQixFQUFhLEtBRXBDLE9BQ0MsR0F1RkUsTUF2RkYsQ0FDQyxVQUFVLGlIQUNWLGNBQWEsY0FBYyxFQUFNLFdBRmxDLFNBdUZFLENBbEZELEdBdUJFLEVBdkJGLENBQ0MsVUFBVSx5Q0FDVixNQUFPLEVBRVAsY0FBZSxTQUFTLElBSnpCLFNBdUJFLENBakJELEdBT0UsU0FQRixDQUNDLFVBQVUscURBQ1YsY0FBYSxvQkFBb0IsRUFBTSxXQUN2QyxRQUFTLElBQU0sRUFBZSxFQUFNLEtBQU0sT0FBTyxFQUNqRCxLQUFLLFNBSk4sU0FNRSxFQUFNLEtBQ04sRUFFRCxFQUFNLFdBQWEsR0FDbkIsR0FLRSxPQUxGLENBQ0MsVUFBVSxvRUFDVixjQUFhLDBCQUEwQixFQUFNLFdBRjlDLFNBSUUsRUFBbUIsRUFBTSxVQUFVLEVBQ25DLElBbEJFLFNBQVMsR0FvQmIsRUFFRixHQXdERSxNQXhERixDQUNDLFVBQVUsMkNBQ1YsY0FBYSxzQkFBc0IsRUFBTSxXQUYxQyxTQXdERSxDQXBEQSxHQUFpQixJQUFJLENBQUMsRUFBUyxJQUMvQixHQUtFLE1BTEYsQ0FDQyxVQUFVLHdDQURYLFNBSUUsR0FGSSxVQUFVLEdBR2QsQ0FDRixFQUVBLEVBQVksSUFBSSxDQUFDLElBQVEsQ0FDekIsSUFBTSxFQUFZLFlBQVksRUFBTSxLQUFLLE9BQU8sU0FBUyxLQUFLLEVBQUksU0FDNUQsRUFBWSxFQUFJLFdBQWEsRUFDN0IsRUFBa0IsS0FBSyxJQUFJLEVBQUksV0FBWSxDQUFDLEVBQzVDLEVBQW1CLEdBQWlCLE1BQ3pDLEVBQ0EsQ0FDRCxFQUVBLE9BQ0MsR0E4QkUsU0E5QkYsQ0FDQyxVQUFXLEVBQWdCLENBQUcsRUFDOUIsY0FBYSxFQUViLFFBQVMsQ0FBQyxJQUFNLEVBQWUsRUFBSSxLQUFNLE1BQU8sQ0FBQyxFQUNqRCxNQUFPLEdBQWMsRUFBSSxVQUFVLEVBQ25DLEtBQUssU0FOTixTQThCRSxDQXRCRCxHQUVFLE9BRkYsQ0FBTSxVQUFVLDJCQUFoQixTQUNFLEVBQUksS0FBSyxLQUFLLEVBQ2QsRUFFRCxHQUNBLEdBZUUsTUFmRixDQUNDLFVBQVcsRUFDViw2REFDQSxFQUFJLFNBQVcsY0FDaEIsRUFKRCxTQU1FLEVBQWlCLElBQUksQ0FBQyxJQUN0QixHQUFDLE9BQUQsQ0FDQyxVQUFXLEVBQ1YsRUFDQSxFQUFJLE9BQ0wsR0FDSyxDQUNOLENBQ0EsRUFDQSxJQXpCRSxFQUFJLE1BMkJSLEVBRUgsR0FDQSxJQW5GRyxFQUFNLFFBb0ZWLEVBRUgsRUFDQSxFQUNGLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxHQUMzQixHQUlXLE1DdE9mLHNCQUFTLGNBQWEsd0RBcURmLElBQU0sR0FBb0QsRUFDaEUsV0FDQSxTQUFTLENBQUMsRUFDVixpQkFBaUIsRUFDakIsY0FBYyxRQUNkLGNBQ0EsY0FDQSxlQUNBLGNBQ0EsZUFDQSxhQUNBLGdCQUNBLGdCQUNBLGVBQ0EsU0FDQSxXQUNBLG1CQUNBLG9CQUNBLHFCQUNBLGVBQ0EsZUFBZSxHQUNmLG1CQUFtQixHQUNuQixzQkFBc0IsR0FDdEIsa0JBQ0Esa0JBQ0EsZ0JBQ0Esa0JBQ0EsZUFDQSxhQUNBLGFBQWEsVUFDYixrQkFDQSw2QkFDQSx1QkFBdUIsTUFDbEIsQ0FFTCxJQUFNLEVBQWlCLEdBQWtCLENBQ3hDLFNBQ0EsaUJBQ0EsY0FDQSxjQUNBLGdCQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxlQUNBLFNBQ0EsV0FDQSxlQUNBLFlBQ0QsQ0FBQyxFQUVLLEdBQVksR0FDakIsQ0FBQyxJQUF5QixDQUN6QixFQUFlLGlCQUFpQixDQUFLLEVBQ3JDLEVBQWUsbUJBQW1CLEVBQUksR0FFdkMsQ0FBQyxDQUFjLENBQ2hCLEVBR00sR0FBbUIsR0FDeEIsQ0FBQyxJQUF5QixDQUN6QixHQUFJLEVBQ0gsT0FFRCxHQUFJLEVBQ0gsRUFBYSxDQUFLLEVBRWxCLFFBQVUsQ0FBSyxHQUdqQixDQUFDLEVBQW1CLEVBQWMsRUFBUyxDQUM1QyxFQUVNLEdBQWtCLEdBQ3ZCLENBQUMsSUFBd0IsQ0FDeEIsR0FBSSxFQUNILE9BR0QsR0FBSSxFQUNILEVBQVksQ0FBSSxFQUVoQixPQUFlLGNBQWMsQ0FBSSxHQUduQyxDQUFDLEVBQWEsRUFBa0IsQ0FBYyxDQUMvQyxFQUdNLEdBQWUsR0FDcEIsS0FBTyxDQUNOLFlBQWEsRUFBZSxZQUM1QixLQUFNLEVBQWUsS0FDckIsT0FBUSxFQUFlLE9BQ3ZCLFVBQVcsRUFBZSxVQUMxQixjQUFlLEVBQWUsY0FDOUIsZ0JBQWlCLEVBQWUsZ0JBQ2hDLGNBQWUsRUFBZSxjQUM5QixhQUFjLEVBQWUsYUFDN0IsZUFBZ0IsRUFBZSxlQUMvQixlQUFnQixFQUFlLGVBQy9CLFdBQVksRUFBZSxXQUMzQixRQUFTLEVBQWUsUUFDeEIsV0FBWSxFQUFlLFdBQzNCLFdBQVksRUFBZSxXQUMzQixNQUFPLEVBQWUsTUFDdEIsU0FBVSxFQUFlLFNBQ3pCLFlBQWEsRUFBZSxZQUM1QixxQkFBc0IsRUFBZSxxQkFDckMsWUFBYSxFQUFlLFlBQzVCLHFCQUFzQixFQUFlLHFCQUNyQyxjQUFlLEVBQWUsY0FDOUIsZUFBZ0IsRUFBZSxlQUMvQixzQkFBdUIsRUFBZSxzQkFDdEMseUJBQTBCLEVBQWUseUJBQ3pDLGNBQ0EsYUFBYyxHQUNkLFlBQWEsR0FDYixTQUNBLFdBQ0EsbUJBQ0Esb0JBQ0EscUJBQ0EsZUFDQSxlQUNBLG1CQUNBLHNCQUNBLGtCQUNBLGtCQUNBLGdCQUNBLGtCQUNBLEVBQUcsRUFBZSxFQUNsQixhQUNBLGtCQUNBLDZCQUNBLHNCQUNELEdBQ0EsQ0FDQyxFQUNBLEVBQ0EsR0FDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDRCxDQUNELEVBRUEsT0FDQyxHQUVFLEdBQWdCLFNBRmxCLENBQTBCLE1BQU8sR0FBakMsU0FDRSxFQUNBLHVEQ3JNSixJQUFNLEdBQTRCLElBQU0sQ0FDdkMsSUFBUSxPQUFNLGdCQUFpQixHQUFtQixFQVNsRCxPQUNDLEdBZUUsTUFmRixDQUFLLFVBQVUsOEJBQThCLGNBQVksaUJBQXpELFNBZUUsQ0FkRCxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFFeEIsR0FVRSxHQVZGLFVBQ0MsR0FRRSxFQVJGLENBQ0MsVUFBVSwrQkFDVixVQUFVLGFBQ1YsY0FBZSxFQUhoQixTQUtDLEdBRUUsTUFGRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksZ0JBQWxELFNBakJZLENBQ2YsTUFBTyxHQUFDLEdBQUQsQ0FBVyxhQUFjLEdBQWtCLE9BQVEsRUFDMUQsS0FBTSxHQUFDLEdBQUQsR0FBYyxNQUFPLEVBQzNCLElBQUssR0FBQyxHQUFELEdBQWEsS0FBTSxFQUN4QixLQUFNLEdBQUMsR0FBRCxHQUFjLE1BQU8sQ0FDNUIsRUFhYyxHQUNSLEVBQ0QsRUFDRCxFQUNGLEdBQUMsR0FBRCxFQUFpQixHQUNoQixHQUlTLEdBQThDLEVBQzFELFNBQ0EsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLGVBQWUsR0FDZixlQUFlLEdBQ2YsbUJBQW1CLEdBQ25CLHNCQUFzQixHQUN0QixhQUFhLFVBQ2IsdUJBQXVCLE1BQ3BCLEtBQ0UsQ0FDTCxPQUNDLEdBY0UsR0FkRixDQUNDLGFBQWMsRUFDZCxhQUFjLEVBQ2QsT0FBUSxHQUF1RCxDQUFNLEVBQ3JFLGVBQWdCLEdBQXFCLEdBQ3JDLHFCQUFzQixFQUN0QixZQUFhLEdBQVMsQ0FBVyxFQUNqQyxZQUFhLEVBQ2IsaUJBQWtCLEVBQ2xCLFdBQVksRUFDWixvQkFBcUIsS0FDakIsRUFYTCxTQWFDLEdBQUMsR0FBRCxFQUFpQixFQUNoQiw0Q0M3REcsSUFBTSxHQUFzRCxFQUNsRSxPQUNBLFdBQVcsTUFDWCxXQUNBLGFBQ0ssQ0FDTCxJQUFRLHVCQUF3QixFQUEyQixFQUVyRCxFQUFtQixFQUFvQixFQUV2QyxFQUFVLEVBQUssSUFBSSxDQUFDLElBQVEsQ0FDakMsSUFBTSxFQUFVLE1BQU0sUUFBUSxDQUFHLEVBQ2pDLE1BQU8sQ0FDTixHQUFJLE9BQU8sRUFBVSxFQUFJLElBQUksT0FBTyxZQUFZLEVBQUksRUFBSSxZQUFZLElBQ3BFLElBQUssRUFBVSxPQUFZLEVBQzNCLEtBQU0sRUFBVSxFQUFNLE9BQ3RCLFVBQVcsR0FBUyxLQUNwQixVQUNELEVBQ0EsRUFFSyxFQUFPLEVBQWlCLElBQUksQ0FBQyxLQUFjLENBQ2hELEdBQUksRUFBUyxHQUNiLE1BQU8sRUFBUyxNQUNoQixTQUFVLEVBQ1YsU0FDRCxFQUFFLEVBRUYsT0FDQyxHQU9FLEdBUEYsQ0FDQyxRQUFTLEVBQ1QsZ0JBQWlCLEVBQ2pCLFNBQVUsRUFDVixLQUFNLEVBSlAsU0FNRSxFQUNBLHVEQ2pERyxJQUFNLEdBQWtDLElBQU0sQ0FDcEQsSUFDQyxjQUNBLElBQ0EsZ0JBQ0EsYUFDQSxnQkFDQSx1QkFDQSx1QkFDRyxFQUEyQixFQUV6QixFQUFZLEVBQW9CLEVBR2hDLEVBQVcsR0FBYSxDQUM3QixjQUFlLEVBQ2YsZ0JBQ0EsdUJBQ0EsU0FBVSxDQUFDLENBQVcsRUFDdEIsc0JBQXVCLEVBQ3JCLElBQUksQ0FBQyxJQUFNLEVBQUUsYUFBYSxFQUMxQixPQUFPLE9BQU8sQ0FDakIsQ0FBQyxFQUVELE9BQ0MsR0F3Q0UsR0F4Q0YsQ0FDQyxRQUFTLENBQ1IsT0FBUSxhQUNSLEtBQU0sYUFDTixLQUFNLGlCQUNQLEVBQ0EsS0FBTSxFQUNOLFNBQVMsT0FQVixTQXdDRSxDQS9CRCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtIQUFmLFNBQ0MsR0FBMkMsTUFBM0MsQ0FBSyxVQUFVLFVBQWYsU0FBMEIsRUFBRSxXQUFXLEVBQUksRUFDMUMsRUFFRixHQTBCRSxNQTFCRixDQUFLLFVBQVUsdUJBQWYsU0FFQyxHQXVCRSxNQXZCRixDQUFLLFVBQVUsWUFBZixTQUNFLEVBQVMsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM3QixJQUFNLEVBQVksRUFBSSxPQUFPLEVBQU0sRUFBRyxNQUFNLEVBQ3RDLEVBQU0sdUJBQXVCLEVBQUksWUFBWSxJQUVuRCxPQUNDLEdBY0UsRUFkRixDQUNDLFVBQVcsRUFDVixzR0FDQSxHQUFhLHNDQUNkLEVBQ0EsY0FBYSwyQkFBMkIsRUFBSSxPQUFPLElBQUksSUFDdkQsTUFBTyxFQUFRLEtBRWYsY0FBZSxHQUFHLFdBUm5CLFNBVUUsS0FBSyxlQUFlLEVBQWUsQ0FDbkMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN4QixDQUFDLEVBQUUsT0FBTyxFQUFJLE9BQU8sQ0FBQyxHQU5qQixHQUFHLFlBT1AsRUFFSCxFQUNBLEVBQ0QsR0FDRCx1RENqRUcsSUFBTSxHQUFnQyxJQUFNLENBQ2xELElBQ0MsY0FDQSxzQkFDQSxnQkFDQSxhQUNBLGdCQUNBLHdCQUNHLEVBQTJCLEVBRXpCLEVBQVksRUFBb0IsRUFDaEMsRUFBUSxHQUFhLENBQzFCLGNBQWUsRUFDZixnQkFDQSx1QkFDQSxTQUFVLENBQUMsQ0FBVyxFQUN0QixzQkFBdUIsRUFDckIsSUFBSSxDQUFDLElBQU0sRUFBRSxhQUFhLEVBQzFCLE9BQU8sT0FBTyxDQUNqQixDQUFDLEVBRUssRUFBVyxDQUNoQixHQUFJLFdBQ0osSUFBSyxPQUNMLEtBQU0sRUFDTixVQUNDLG1FQUNELFNBQVUsT0FDVixTQUFVLEdBQ1YsV0FBWSxDQUFDLElBQ1osR0FLRSxNQUxGLENBQUssVUFBVSx5RkFBZixTQUNFLEtBQUssZUFBZSxFQUFlLENBQ25DLEtBQU0sVUFDTixPQUFRLElBQWUsU0FDeEIsQ0FBQyxFQUFFLE9BQU8sRUFBSyxPQUFPLENBQUMsRUFDdEIsQ0FFSixFQUVNLEVBQVUsRUFBVSxJQUFJLENBQUMsS0FBYyxDQUM1QyxHQUFJLFdBQVcsRUFBWSxPQUFPLFlBQVksY0FBYyxFQUFTLEtBQ3JFLFdBQVksRUFBUyxHQUNyQixXQUNBLEtBQU0sRUFDTixJQUFLLEVBQ0wsU0FBVSxNQUNYLEVBQUUsRUFFRixPQUNDLEdBbUNFLEdBbkNGLENBQ0MsVUFDQyxHQVdFLE1BWEYsQ0FBSyxVQUFVLGNBQWYsU0FXRSxDQVZELEdBQUMsR0FBRCxFQUFZLEVBQ1gsRUFBVSxJQUFJLENBQUMsSUFDZixHQUFDLEdBQUQsQ0FDQyxRQUFTLENBQUUsS0FBTSxVQUFXLEVBQzVCLEtBQU0sQ0FBQyxDQUFXLEVBRWxCLFNBQVUsRUFDVixXQUFZLElBRlAsdUJBQXVCLEVBQVMsSUFHdEMsQ0FDQSxHQUNBLEVBRUgsVUFBVyxDQUFDLEVBQUcsR0FBSSxHQUFJLEVBQUUsRUFDekIsUUFBUyxDQUFFLEtBQU0sU0FBVSxPQUFRLFFBQVMsRUFDNUMsUUFBUyxDQUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLGNBQVksZUFDWixTQUFTLE9BbkJWLFNBc0JDLEdBWUUsTUFaRixDQUNDLFVBQVcsNEJBQ1gsY0FBWSx3QkFGYixTQVlFLENBUkQsR0FBQyxNQUFELENBQUssVUFBVSxnRUFBZ0UsRUFDOUUsRUFBVSxJQUFJLENBQUMsSUFDZixHQUFDLEdBQUQsQ0FDQyxVQUFVLGtCQUVWLFNBQVUsR0FETCxpQkFBaUIsRUFBUyxJQUVoQyxDQUNBLEdBQ0EsRUFDRCw0Q0N4RkcsSUFBTSxHQUE0QixJQUFNLENBQzlDLElBQVEsZUFBZ0IsRUFBMkIsRUFFbkQsR0FBSSxJQUFnQixXQUNuQixPQUFPLEdBQUMsR0FBRCxFQUFxQixFQUc3QixPQUFPLEdBQUMsR0FBRCxFQUF1QixHQ1gvQixrQkFBUyxtRUFPRixJQUFNLEdBQW9DLElBQU0sQ0FDdEQsSUFBUSxjQUFhLEtBQU0sRUFBMkIsRUFHaEQsRUFBWSxHQUF1QixJQUFNLENBQzlDLE9BQU8sR0FBYSxDQUFXLEdBQzdCLENBQUMsQ0FBVyxDQUFDLEVBRWhCLE9BQ0MsR0FzQkUsR0F0QkYsQ0FBbUIsS0FBTSxFQUF6QixTQXNCRSxDQXJCRCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtIQUFmLFNBQ0MsR0FBMkMsTUFBM0MsQ0FBSyxVQUFVLFVBQWYsU0FBMEIsRUFBRSxXQUFXLEVBQUksRUFDMUMsRUFFRCxFQUFVLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDOUIsSUFBTSxFQUFNLHlCQUF5QixFQUFJLFlBQVksSUFFckQsT0FDQyxHQVVFLEVBVkYsQ0FDQyxVQUFVLDRFQUNWLE1BQU8sRUFBUSxLQUVmLGNBQWUsR0FBRyxXQUpuQixTQVVFLENBSkQsR0FBd0QsTUFBeEQsQ0FBSyxVQUFVLHNCQUFmLFNBQXNDLEVBQUksT0FBTyxHQUFHLEVBQUksRUFDeEQsR0FFRSxNQUZGLENBQUssVUFBVSxnQ0FBZixTQUNFLEVBQUksT0FBTyxLQUFLLEVBQ2hCLElBTkcsR0FBRyxZQU9QLEVBRUgsR0FDQSx1RENqQ0csSUFBTSxHQUFrQyxJQUFNLENBQ3BELElBQVEsY0FBYSx1QkFBd0IsRUFBMkIsRUFFbEUsRUFBWSxFQUFvQixFQUNoQyxFQUFlLEVBQVksUUFBUSxPQUFPLEVBQzFDLEVBQWMsTUFBTSxLQUN6QixDQUFFLE9BQVEsRUFBWSxZQUFZLENBQUUsRUFDcEMsQ0FBQyxFQUFHLElBQU0sRUFBYSxJQUFJLEVBQUcsS0FBSyxDQUNwQyxFQUVNLEVBQVcsQ0FDaEIsR0FBSSxXQUNKLEtBQU0sRUFDTixJQUFLLE9BQ0wsVUFDQyxtRUFDRCxTQUFVLE1BQ1YsU0FBVSxHQUNWLFdBQVksQ0FBQyxJQUNaLEdBR0UsTUFIRixDQUFLLFVBQVUseUZBQWYsU0FHRSxDQUZELEdBQTBCLE9BQTFCLFVBQU8sRUFBSyxPQUFPLEdBQUcsRUFBSSxFQUMxQixHQUE0QixPQUE1QixVQUFPLEVBQUssT0FBTyxLQUFLLEVBQUksR0FDM0IsQ0FFSixFQUVNLEVBQVUsRUFBVSxJQUFJLENBQUMsS0FBYyxDQUM1QyxHQUFJLHNCQUFzQixFQUFTLEtBQ25DLElBQUssT0FDTCxXQUFZLEVBQVMsR0FDckIsS0FBTSxFQUNOLFNBQVUsS0FDWCxFQUFFLEVBRUYsT0FDQyxHQW1CRSxHQW5CRixDQUNDLFFBQVMsQ0FBRSxPQUFRLFNBQVUsS0FBTSxRQUFTLEVBQzVDLFFBQVMsQ0FBQyxFQUFVLEdBQUcsQ0FBTyxFQUM5QixjQUFZLCtCQUhiLFNBTUMsR0FZRSxNQVpGLENBQ0MsVUFBVyw0QkFDWCxjQUFZLHdCQUZiLFNBWUUsQ0FSRCxHQUFDLE1BQUQsQ0FBSyxVQUFVLGdFQUFnRSxFQUM5RSxFQUFVLElBQUksQ0FBQyxJQUNmLEdBQUMsR0FBRCxDQUNDLFVBQVUsa0JBRVYsU0FBVSxHQURMLGlCQUFpQixFQUFTLElBRWhDLENBQ0EsR0FDQSxFQUNELDRDQ3ZERyxJQUFNLEdBQThCLElBQU0sQ0FDaEQsSUFBUSxlQUFnQixFQUEyQixFQUVuRCxHQUFJLElBQWdCLFdBQ25CLE9BQU8sR0FBQyxHQUFELEVBQXVCLEVBRy9CLE9BQU8sR0FBQyxHQUFELEVBQXlCLEdDWGpDLGtCQUFTLG1FQVVGLElBQU0sR0FBbUMsSUFBTSxDQUNyRCxJQUNDLGNBQ0EsaUJBQ0EsSUFDQSxnQkFDQSxhQUNBLGdCQUNBLHVCQUNBLHVCQUNHLEVBQTJCLEVBRXpCLEVBQVksRUFBb0IsRUFHaEMsRUFBVyxHQUNoQixJQUFNLEdBQVksRUFBYSxDQUFjLEVBQzdDLENBQUMsRUFBYSxDQUFjLENBQzdCLEVBR00sRUFBd0IsR0FDN0IsSUFDQyxFQUFVLElBQUksQ0FBQyxJQUFNLEVBQUUsYUFBYSxFQUFFLE9BQU8sT0FBTyxFQUlyRCxDQUFDLENBQVMsQ0FDWCxFQUdNLEVBQVksR0FBUSxJQUFNLENBQy9CLE9BQU8sRUFBUyxJQUFJLENBQUMsSUFDcEIsR0FBYSxDQUNaLGNBQWUsRUFDZixnQkFDQSx1QkFDQSx1QkFDRCxDQUFDLENBQ0YsR0FDRSxDQUFDLEVBQVUsRUFBZSxFQUFzQixDQUFxQixDQUFDLEVBRXpFLE9BQ0MsR0FvRUUsR0FwRUYsQ0FDQyxRQUFTLENBQ1IsT0FBUSxrQkFDUixLQUFNLGFBQ04sS0FBTSxpQkFDUCxFQUNBLEtBQU0sRUFDTixTQUFTLE9BUFYsU0FvRUUsQ0EzREQsR0FFRSxNQUZGLENBQUssVUFBVSxrSEFBZixTQUNDLEdBQTJDLE1BQTNDLENBQUssVUFBVSxVQUFmLFNBQTBCLEVBQUUsV0FBVyxFQUFJLEVBQzFDLEVBRUYsR0FzREUsTUF0REYsQ0FBSyxVQUFVLHVCQUFmLFNBc0RFLENBcERELEdBeUJFLE1BekJGLENBQUssVUFBVSxZQUFmLFNBQ0UsRUFBUyxJQUFJLENBQUMsRUFBSyxJQUFVLENBQzdCLElBQU0sRUFBVSxFQUFJLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFDbkMsRUFBTSx3QkFBd0IsRUFBSSxZQUFZLFFBRXBELE9BQ0MsR0FnQkUsRUFoQkYsQ0FDQyxVQUFXLEVBQ1YsOEZBQ0EsR0FBVywwQkFDWixFQUNBLGNBQVksMkJBQ1osTUFBTyxFQUFRLEtBRWYsY0FBZSxHQUFHLFdBUm5CLFNBVUMsR0FLRSxNQUxGLENBQUssVUFBVSxrQkFBZixTQUtFLENBSkQsR0FBOEMsTUFBOUMsQ0FBSyxVQUFVLFVBQWYsU0FBMEIsRUFBSSxPQUFPLEtBQUssRUFBSSxFQUM5QyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBSSxPQUFPLEtBQUssRUFDaEIsR0FDRCxHQVJHLEdBQUcsWUFTUCxFQUVILEVBQ0EsRUFHRixHQXVCRSxNQXZCRixDQUFLLFVBQVUscUJBQWYsU0FDRSxFQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBSyxJQUFVLENBQ3JDLElBQU0sRUFBWSxFQUFJLE9BQU8sRUFBTSxFQUFHLE1BQU0sRUFDdEMsRUFBTSx3QkFBd0IsRUFBSSxZQUFZLFNBRXBELE9BQ0MsR0FjRSxFQWRGLENBQ0MsVUFBVyxFQUNWLDZFQUNBLEdBQWEsc0NBQ2QsRUFDQSxjQUFhLDRCQUE0QixFQUFJLE9BQU8sSUFBSSxJQUN4RCxNQUFPLEVBQVEsTUFFZixjQUFlLEdBQUcsV0FSbkIsU0FVRSxLQUFLLGVBQWUsRUFBZSxDQUNuQyxLQUFNLFVBQ04sT0FBUSxJQUFlLFNBQ3hCLENBQUMsRUFBRSxPQUFPLEVBQUksT0FBTyxDQUFDLEdBTmpCLEdBQUcsWUFPUCxFQUVILEVBQ0EsR0FDRCxHQUNELEdDekhKLGtCQUFTLG1FQWFGLElBQU0sR0FBaUMsSUFBTSxDQUNuRCxJQUNDLGNBQ0Esc0JBQ0EsaUJBQ0EsZ0JBQ0EsYUFDQSxJQUNBLGdCQUNBLHdCQUNHLEVBQTJCLEVBRXpCLEVBQVksRUFBb0IsRUFFaEMsRUFBVyxHQUNoQixJQUFNLEdBQVksRUFBYSxDQUFjLEVBQzdDLENBQUMsRUFBYSxDQUFjLENBQzdCLEVBRU0sRUFBUSxHQUNiLElBQ0MsR0FBYSxDQUNaLGNBQWUsRUFDZixnQkFDQSx1QkFDQSxTQUFVLEVBQ1Ysc0JBQXVCLEVBQ3JCLElBQUksQ0FBQyxJQUFNLEVBQUUsYUFBYSxFQUMxQixPQUFPLE9BQU8sQ0FDakIsQ0FBQyxFQUNGLENBQUMsRUFBYSxFQUFlLEVBQXNCLEVBQVUsQ0FBUyxDQUN2RSxFQUVNLEVBQVcsR0FDaEIsS0FBTyxDQUNOLEdBQUksV0FDSixLQUFNLEVBQ04sSUFBSyxPQUNMLFVBQ0MsbUVBQ0QsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUtFLE1BTEYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0UsS0FBSyxlQUFlLEVBQWUsQ0FDbkMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN4QixDQUFDLEVBQUUsT0FBTyxFQUFLLE9BQU8sQ0FBQyxFQUN0QixDQUVKLEdBQ0EsQ0FBQyxFQUFPLEVBQWUsQ0FBVSxDQUNsQyxFQUVNLEVBQVUsR0FDZixJQUNDLEVBQVUsUUFBUSxDQUFDLElBQ2xCLEVBQVMsSUFBSSxDQUFDLEtBQVMsQ0FDdEIsR0FBSSxXQUFXLEVBQUksT0FBTyxZQUFZLGNBQWMsRUFBUyxLQUM3RCxXQUFZLEVBQVMsR0FDckIsV0FDQSxNQUNBLEtBQU0sRUFBTSxJQUFJLENBQUMsSUFDaEIsRUFBSSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQ3JELEVBQ0EsU0FBVSxNQUNYLEVBQUUsQ0FDSCxFQUNELENBQUMsRUFBVyxFQUFVLENBQUssQ0FDNUIsRUFDQSxPQUNDLEdBbUZFLEdBbkZGLENBQ0MsVUFDQyxHQVdFLE1BWEYsQ0FBSyxVQUFVLE9BQWYsU0FXRSxDQVZELEdBQUMsR0FBRCxFQUFZLEVBQ1gsRUFBVSxJQUFJLENBQUMsSUFDZixHQUFDLEdBQUQsQ0FDQyxRQUFTLENBQUUsS0FBTSxVQUFXLEVBQzVCLEtBQU0sRUFFTixTQUFVLEVBQ1YsV0FBWSxJQUZQLDRCQUE0QixFQUFTLElBRzNDLENBQ0EsR0FDQSxFQUVILFFBQVMsQ0FBRSxPQUFRLE1BQU8sRUFDMUIsUUFBUyxDQUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLGNBQVksZ0JBQ1osU0FBUyxPQWxCVixTQW9CQyxHQThERSxNQTlERixDQUFLLFVBQVUsdUJBQWYsU0E4REUsQ0E1REQsR0E2QkUsTUE3QkYsQ0FBSyxVQUFVLFlBQWYsU0E2QkUsQ0E1QkQsR0FJRSxNQUpGLENBQUssVUFBVSwwREFBZixTQUNDLEdBRUUsT0FGRixDQUFNLFVBQVUsaUZBQWhCLFNBQ0UsRUFBRSxNQUFNLEVBQ1IsRUFDRCxFQUNELEVBQVUsSUFBSSxDQUFDLEVBQVUsSUFBVSxDQUNuQyxJQUFNLEVBQU0sd0JBQXdCLEVBQVMsU0FFN0MsT0FDQyxHQWdCRSxFQWhCRixDQUNDLFVBQVcsRUFDVixvSEFDRCxFQUNBLE1BQU8sRUFBUSxLQUVmLGNBQWUsR0FBRyxXQU5uQixTQVFDLEdBT0UsR0FQRixDQUNDLFVBQVUsdUJBQ1YsU0FBVSxFQUZYLFNBSUMsR0FFRSxNQUZGLENBQUssVUFBVSwrQ0FBZixTQUNFLEVBQVMsTUFDVCxFQUNELEdBVkcsR0FBRyxZQVdQLEVBRUgsR0FDQSxFQUdGLEdBMkJFLE1BM0JGLENBQUssVUFBVSxZQUFmLFNBMkJFLENBMUJELEdBSUUsTUFKRixDQUFLLFVBQVUsbUVBQWYsU0FDQyxHQUVFLE9BRkYsQ0FBTSxVQUFVLGlFQUFoQixTQUNFLEVBQVksS0FBSyxFQUNqQixFQUNELEVBQ0QsRUFBUSxJQUFJLENBQUMsRUFBSyxJQUFVLENBQzVCLElBQU0sRUFBTSxFQUFJLElBQ1YsRUFBTSx3QkFBd0IsRUFBSSxZQUFZLFVBQVUsRUFBSSxhQUVsRSxPQUNDLEdBYUUsRUFiRixDQUNDLFVBQVcsRUFDVixpSEFDRCxFQUNBLGNBQWEsNEJBQTRCLEVBQUksT0FBTyxJQUFJLElBQ3hELE1BQU8sRUFBUSxLQUVmLGNBQWUsR0FBRyxXQVBuQixTQWFFLENBSkQsR0FBOEMsTUFBOUMsQ0FBSyxVQUFVLFVBQWYsU0FBMEIsRUFBSSxPQUFPLEtBQUssRUFBSSxFQUM5QyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBSSxPQUFPLEtBQUssRUFDaEIsSUFORyxHQUFHLFlBT1AsRUFFSCxHQUNBLEdBQ0QsRUFDRCw0Q0NuS0csSUFBTSxHQUE2QixJQUFNLENBQy9DLElBQVEsZUFBZ0IsRUFBMkIsRUFFbkQsR0FBSSxJQUFnQixXQUNuQixPQUFPLEdBQUMsR0FBRCxFQUFzQixFQUc5QixPQUFPLEdBQUMsR0FBRCxFQUF3Qix1RENGekIsSUFBTSxHQUFpQyxJQUFNLENBQ25ELElBQVEsUUFBUyxFQUEyQixFQVE1QyxPQUNDLEdBcUJFLE1BckJGLENBQ0MsVUFBVSw4QkFDVixjQUFZLDBCQUZiLFNBcUJFLENBakJELEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUd4QixHQVVFLEdBVkYsVUFDQyxHQVFFLEVBUkYsQ0FDQyxVQUFVLHdEQUNWLFVBQVUsYUFDVixjQUFlLEVBSGhCLFNBS0MsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBdUIsY0FBWSxnQkFBbEQsU0FwQlksQ0FDZixNQUFPLEdBQUMsR0FBRCxHQUF1QixPQUFRLEVBQ3RDLEtBQU0sR0FBQyxHQUFELEdBQXNCLE1BQU8sRUFDbkMsSUFBSyxHQUFDLEdBQUQsR0FBcUIsS0FBTSxDQUNqQyxFQWlCYyxHQUNSLEVBQ0QsRUFDRCxFQUdGLEdBQUMsR0FBRCxFQUFpQixHQUNoQiw0Q0MxQkcsSUFBTSxHQUE4RCxFQUMxRSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EscUJBQXFCLEdBQ3JCLGVBQWUsR0FDZixhQUFhLFVBQ2IsZUFBZSxNQUNaLEtBQ0UsQ0FDTCxPQUNDLEdBZUUsR0FmRixDQUNDLGFBQWMsRUFDZCxtQkFBb0IsRUFDcEIsYUFBYyxFQUNkLE9BQVEsR0FDUCxDQUNELEVBQ0EsZUFBZ0IsR0FBcUIsR0FDckMsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLFVBQVcsRUFDWCxXQUFZLEtBQ1IsRUFaTCxTQWNDLEdBQUMsR0FBRCxFQUFzQixFQUNyQiIsCiAgImRlYnVnSWQiOiAiNjQ4NDdENkQxNTlDMjEwRTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
6
|
+
//# debugId=09A0A7E8DE9AE92464756E2164756E21
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9idXR0b24udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZG5kLXV0aWxzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvZXZlbnQtZHJhZy1vdmVybGF5LnRzeCIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0udHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NoZWNrYm94LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyLnRzeCIsICJzcmMvaG9va3MvdXNlLWF1dG9jb21wbGV0ZS10aW1lcGlja2VyLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcudHN4IiwgInNyYy9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQtaGVhZGVyLWNvbnRhaW5lci50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50c1xuXG4vLyBSZS1leHBvcnQgcnJ1bGUuanMgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEZyZXF1ZW5jeSwgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUge1xuXHRDZWxsQ2xpY2tJbmZvLFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuLy8gUHVibGljIGNhbGVuZGFyIGNvbnRleHQgaG9va3NcbmV4cG9ydCB7XG5cdHR5cGUgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG5cdHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0LFxufSBmcm9tICcuL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuZXhwb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuLy8gVHJhbnNsYXRpb24gc3lzdGVtXG5leHBvcnQgdHlwZSB7XG5cdFRyYW5zbGF0aW9uS2V5LFxuXHRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0b3JGdW5jdGlvbixcbn0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICcuL3R5cGVzJ1xuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IGRheWpzLkRheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBkYXlqcy5EYXlqcyk6IGRheWpzLkRheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcblx0ZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIERUU1RBUlQgYW5kIFNFQVJDSCBXSU5ET1cgVFJBTlNGT1JNQVRJT05cblx0XHQvLyBUcmFuc2Zvcm0gYWxsIGRhdGVzIHRvIFwiZmxvYXRpbmcgdGltZVwiIChVVEMgd2l0aCBsb2NhbCBjb21wb25lbnRzKVxuXHRcdC8vIFRoaXMgZW5zdXJlcyBSUnVsZSBldmFsdWF0ZXMgXCJXZWRuZXNkYXlcIiBhcyB0aGUgdXNlcidzIGxvY2FsIFdlZG5lc2RheVxuXHRcdGNvbnN0IGZsb2F0aW5nU3RhcnQgPSB0b0Zsb2F0aW5nRGF0ZShldmVudC5zdGFydClcblx0XHRjb25zdCBmbG9hdGluZ1VudGlsID0gZXZlbnQucnJ1bGUudW50aWxcblx0XHRcdD8gdG9GbG9hdGluZ0RhdGUoZGF5anMoZXZlbnQucnJ1bGUudW50aWwpKVxuXHRcdFx0OiB1bmRlZmluZWRcblxuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGZsb2F0aW5nU3RhcnQsXG5cdFx0XHR1bnRpbDogZmxvYXRpbmdVbnRpbCxcblx0XHR9XG5cdFx0Y29uc3QgcnVsZSA9IG5ldyBSUnVsZShydWxlT3B0aW9ucylcblxuXHRcdGNvbnN0IHBhcmVudFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKGV2ZW50KVxuXHRcdGNvbnN0IG92ZXJyaWRlcyA9IGN1cnJlbnRFdmVudHMuZmlsdGVyKFxuXHRcdFx0KGUpID0+IGUucmVjdXJyZW5jZUlkICYmIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSBwYXJlbnRVaWRcblx0XHQpXG5cblx0XHQvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gdG8gZXhwYW5kIHNlYXJjaCB3aW5kb3cgZm9yIGV2ZW50cyB0aGF0IHNwYW4gdGhlIHJhbmdlXG5cdFx0Y29uc3QgZXZlbnREdXJhdGlvbiA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0KVxuXG5cdFx0Ly8gRXhwYW5kIHNlYXJjaCB3aW5kb3cgYmFja3dhcmQgYnkgZXZlbnQgZHVyYXRpb24gdG8gY2F0Y2ggZXZlbnRzIHRoYXQgc3RhcnQgYmVmb3JlXG5cdFx0Ly8gdGhlIHJhbmdlIGJ1dCBzcGFuIGludG8gaXRcblx0XHRjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShcblx0XHRcdHN0YXJ0RGF0ZS5zdWJ0cmFjdChldmVudER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdClcblx0XHRjb25zdCBlbmREYXRlVGltZSA9IHRvRmxvYXRpbmdEYXRlKGVuZERhdGUpXG5cblx0XHQvLyBHZXQgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBleHBhbmRlZCByYW5nZVxuXHRcdGNvbnN0IG9jY3VycmVuY2VzID0gcnVsZS5iZXR3ZWVuKGV4cGFuZGVkU3RhcnREYXRlVGltZSwgZW5kRGF0ZVRpbWUsIHRydWUpXG5cblx0XHQvLyBDb252ZXJ0IG9jY3VycmVuY2VzIHRvIENhbGVuZGFyRXZlbnQgaW5zdGFuY2VzXG5cdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBvY2N1cnJlbmNlc1xuXHRcdFx0Lm1hcCgob2NjdXJyZW5jZSwgaW5kZXgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb2NjdXJyZW5jZURhdGUgPSBmcm9tRmxvYXRpbmdEYXRlKG9jY3VycmVuY2UsIGV2ZW50LnN0YXJ0KVxuXHRcdFx0XHRjb25zdCBleGlzdGluZ092ZXJyaWRlID0gb3ZlcnJpZGVzLmZpbmQoKGUpID0+XG5cdFx0XHRcdFx0c2FmZURhdGUoZS5yZWN1cnJlbmNlSWQpPy5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG5cdFx0XHRcdClcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcblx0XHRcdFx0aWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuXHRcdFx0XHRjb25zdCBwYXJlbnRVSUQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IHVwZGF0ZWRFdmVudHMuZmluZEluZGV4KChlKSA9PiB7XG5cdFx0cmV0dXJuIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGdldEV2ZW50UGFyZW50VUlEKGJhc2VFdmVudCksIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IHVwZGF0ZWRFdmVudHMuZmluZEluZGV4KChlKSA9PiB7XG5cdFx0cmV0dXJuIGdldEV2ZW50UGFyZW50VUlEKGUpID09PSB0YXJnZXRVaWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdFx0XHRjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChlKSA9PiBnZXRFdmVudFBhcmVudFVJRChlKSAhPT0gdGFyZ2V0VWlkXG5cdFx0XHQpXG5cdFx0XHRyZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuXHRcdH1cblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2Bcblx0XHRcdClcblx0fVxuXG5cdHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuXHRyZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShcblx0ZGF0ZTogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBkYXlqcy5EYXlqcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdH1cblx0aWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcblx0XHRyZXR1cm4gZGF0ZVxuXHR9XG5cdGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuXHRyZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG5cdG9iajogVCxcblx0a2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcblx0Y29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0ZGVsZXRlIHJlc3VsdFtrZXldXG5cdH1cblx0cmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgY2FsZW5kYXIgZXZlbnRzIGZyb20gcHVibGljLWZhY2luZyBmb3JtYXQgdG8gaW50ZXJuYWwgZm9ybWF0LlxuICogQ29udmVydHMgZmxleGlibGUgZGF0ZSB0eXBlcyAoZGF5anMsIERhdGUsIHN0cmluZykgdG8gc3RyaWN0IGRheWpzIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGV2ZW50cyAtIEFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGZsZXhpYmxlIGRhdGUgdHlwZXNcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgYXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZGF5anMgZGF0ZXNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVndWxhciBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IGV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICpcbiAqIC8vIFJlc291cmNlIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgcmVzb3VyY2VFdmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihwcm9wRXZlbnRzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzPFxuXHRUSW5wdXQgZXh0ZW5kcyB7XG5cdFx0c3RhcnQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuXHRcdGVuZDogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdH0sXG5cdFRPdXRwdXQsXG4+KGV2ZW50czogVElucHV0W10gfCB1bmRlZmluZWQpOiBUT3V0cHV0W10ge1xuXHRpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0cmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0c3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG5cdFx0XHRlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG5cdFx0fSBhcyBUT3V0cHV0XG5cdH0pXG59XG4iLAogICAgImltcG9ydCB7XG5cdEFuaW1hdGVQcmVzZW5jZSxcblx0dHlwZSBIVE1MTW90aW9uUHJvcHMsXG5cdG1vdGlvbixcblx0dHlwZSBWYXJpYW50cyxcbn0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbmltYXRlZFNlY3Rpb25Qcm9wc1xuXHRleHRlbmRzIE9taXQ8SFRNTE1vdGlvblByb3BzPCdkaXYnPiwgJ2NoaWxkcmVuJyB8ICdsYXlvdXQnIHwgJ2xheW91dElkJz4ge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG5cdHRyYW5zaXRpb25LZXk6IHN0cmluZ1xuXHRkZWxheT86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlyZWN0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXHRsYXlvdXQ/OiBib29sZWFuIHwgJ3Bvc2l0aW9uJyB8ICdzaXplJyB8ICdwcmVzZXJ2ZS1hc3BlY3QnXG5cdGxheW91dElkPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgdmFyaWFudHM6IFZhcmlhbnRzID0ge1xuXHRoaWRkZW46ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0fSksXG5cdHZpc2libGU6ICh7IGRlbGF5IH06IHsgZGVsYXk6IG51bWJlciB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDEsXG5cdFx0eDogMCxcblx0XHR5OiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMiwgZWFzZTogWzAuNCwgMCwgMC4yLCAxXSwgZGVsYXkgfSxcblx0fSksXG5cdGV4aXQ6ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAtMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4xNSB9LFxuXHR9KSxcbn1cblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVkU2VjdGlvbjogUmVhY3QuRkM8QW5pbWF0ZWRTZWN0aW9uUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdHRyYW5zaXRpb25LZXksXG5cdGRlbGF5ID0gMCxcblx0Y2xhc3NOYW1lLFxuXHRkaXJlY3Rpb24gPSAndmVydGljYWwnLFxuXHRsYXlvdXQsXG5cdGxheW91dElkLFxuXHQnZGF0YS10ZXN0aWQnOiB0ZXN0SWQsXG5cdHJlZixcblx0Li4ucHJvcHNcbn0pID0+IChcblx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRhbmltYXRlPVwidmlzaWJsZVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdpbmxpbmUtYmxvY2sgdy1mdWxsJywgY2xhc3NOYW1lKX1cblx0XHRcdGN1c3RvbT17eyBkZWxheSwgZGlyZWN0aW9uIH19XG5cdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0aW5pdGlhbD1cImhpZGRlblwiXG5cdFx0XHRrZXk9e3RyYW5zaXRpb25LZXl9XG5cdFx0XHRsYXlvdXQ9e2xheW91dH1cblx0XHRcdGxheW91dElkPXtsYXlvdXRJZH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0dmFyaWFudHM9e3ZhcmlhbnRzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L21vdGlvbi5kaXY+XG5cdDwvQW5pbWF0ZVByZXNlbmNlPlxuKVxuXG5BbmltYXRlZFNlY3Rpb24uZGlzcGxheU5hbWUgPSAnQW5pbWF0ZWRTZWN0aW9uJ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuXHRjb25zdCBhY3RpdmVFdmVudFJlZiA9IHVzZVJlZjxDYWxlbmRhckV2ZW50PihudWxsKVxuXHRjb25zdCBkcmFnT3ZlcmxheVJlZiA9IHVzZVJlZjx7XG5cdFx0c2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0Ly8gVmFsaWRhdGUgaW5wdXRzXG5cdFx0aWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuXHRcdFx0Ly8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcblx0XHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuXHRcdH1cblx0fVxuXG5cdC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuXHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cblx0XHQvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuXHRcdGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG5cdFx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuXHRcdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnRcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcblx0XHRjb25zdCB1cGRhdGVkRXZlbnQgPSBnZXRVcGRhdGVkRXZlbnQoZXZlbnQsIGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQpXG5cdFx0aWYgKHVwZGF0ZWRFdmVudCkge1xuXHRcdFx0Y29uc3QgeyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9ID0gdXBkYXRlZEV2ZW50XG5cdFx0XHRwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHVwZGF0ZXMpXG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgdGhlIGFjdGl2ZSBldmVudCByZWZlcmVuY2Vcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KG51bGwpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnQ2FuY2VsID0gKF9ldmVudDogRHJhZ0NhbmNlbEV2ZW50KSA9PiB7XG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdC8vIElmIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGNoaWxkcmVuIHdpdGhvdXQgRG5kQ29udGV4dFxuXHRpZiAoZGlzYWJsZURyYWdBbmREcm9wKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERuZENvbnRleHRcblx0XHRcdFx0Y29sbGlzaW9uRGV0ZWN0aW9uPXtwb2ludGVyV2l0aGlufVxuXHRcdFx0XHRvbkRyYWdDYW5jZWw9e2hhbmRsZURyYWdDYW5jZWx9XG5cdFx0XHRcdG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cblx0XHRcdFx0b25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cblx0XHRcdFx0c2Vuc29ycz17c2Vuc29yc31cblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8RXZlbnREcmFnT3ZlcmxheSByZWY9e2RyYWdPdmVybGF5UmVmfSAvPlxuXHRcdFx0PC9EbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIGV2ZW50IGVkaXQgZGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e3JlY3VycmluZ0RpYWxvZy5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17cmVjdXJyaW5nRGlhbG9nLmlzT3Blbn1cblx0XHRcdFx0b25DbG9zZT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZX1cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9XCJlZGl0XCJcblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBidXR0b25WYXJpYW50cyA9IGN2YShcblx0XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00IHNocmluay0wIFsmX3N2Z106c2hyaW5rLTAgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuXHR7XG5cdFx0dmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MCcsXG5cdFx0XHRcdGRlc3RydWN0aXZlOlxuXHRcdFx0XHRcdCdiZy1kZXN0cnVjdGl2ZSB0ZXh0LXdoaXRlIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcblx0XHRcdFx0b3V0bGluZTpcblx0XHRcdFx0XHQnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG5cdFx0XHRcdHNlY29uZGFyeTpcblx0XHRcdFx0XHQnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcblx0XHRcdFx0Z2hvc3Q6XG5cdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctYWNjZW50LzUwJyxcblx0XHRcdFx0bGluazogJ3RleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lJyxcblx0XHRcdH0sXG5cdFx0XHRzaXplOiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdoLTkgcHgtNCBweS0yIGhhcy1bPnN2Z106cHgtMycsXG5cdFx0XHRcdHNtOiAnaC04IHJvdW5kZWQtbWQgZ2FwLTEuNSBweC0zIGhhcy1bPnN2Z106cHgtMi41Jyxcblx0XHRcdFx0bGc6ICdoLTEwIHJvdW5kZWQtbWQgcHgtNiBoYXMtWz5zdmddOnB4LTQnLFxuXHRcdFx0XHRpY29uOiAnc2l6ZS05Jyxcblx0XHRcdFx0J2ljb24tc20nOiAnc2l6ZS04Jyxcblx0XHRcdFx0J2ljb24tbGcnOiAnc2l6ZS0xMCcsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0ZGVmYXVsdFZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiAnZGVmYXVsdCcsXG5cdFx0XHRzaXplOiAnZGVmYXVsdCcsXG5cdFx0fSxcblx0fVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdHZhcmlhbnQsXG5cdHNpemUsXG5cdGFzQ2hpbGQgPSBmYWxzZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG5cdFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuXHRcdGFzQ2hpbGQ/OiBib29sZWFuXG5cdH0pIHtcblx0Y29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuXHRyZXR1cm4gKFxuXHRcdDxDb21wXG5cdFx0XHRjbGFzc05hbWU9e2NuKGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudCwgc2l6ZSwgY2xhc3NOYW1lIH0pKX1cblx0XHRcdGRhdGEtc2xvdD1cImJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgRGlhbG9nUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1kaWFsb2cnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuXHRcdFx0PERpYWxvZ092ZXJsYXkgLz5cblx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG5cdFx0XHRcdFx0PFhJY29uIC8+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuXHRcdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cblx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9EaWFsb2dQb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbGcgbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLXRpdGxlXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDbG9zZSxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dPdmVybGF5LFxuXHREaWFsb2dQb3J0YWwsXG5cdERpYWxvZ1RpdGxlLFxuXHREaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5cbi8qKlxuICogRnVsbCBpbnRlcm5hbCBjb250ZXh0IHR5cGUgdXNlZCBieSBsaWJyYXJ5IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSA9IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZVxuXG4vKipcbiAqIFB1YmxpY2x5IGV4cG9zZWQgY2FsZW5kYXIgY29udGV4dCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBob29rIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjb250ZXh0LlxuICogVXNlZCBieSBpbnRlcm5hbCB2aWV3cywgaGVhZGVycywgYW5kIGdyaWQgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KCk6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3RvcjogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3Rvcj86IChjb250ZXh0OiBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUpID0+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSAvLyBVbnByb2Nlc3NlZCBldmVudHMgZm9yIGV4cG9ydFxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG5cdFx0c3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcblx0XHRlbmREYXRlOiBkYXlqcy5EYXlqc1xuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0Y3VycmVudExvY2FsZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRoaWRkZW5EYXlzPzogU2V0PG51bWJlcj5cbn1cblxuLy8gQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ID1cblx0Y3JlYXRlQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJDb250ZXh0VHlwZSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDZWxsQ2xpY2tJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSBleHRlbmRzIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRyZXNvdXJjZXM6IFJlc291cmNlW11cblx0dmlzaWJsZVJlc291cmNlczogU2V0PHN0cmluZyB8IG51bWJlcj5cblxuXHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRFdmVudHNGb3JSZXNvdXJjZXM6IChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldFJlc291cmNlQnlJZDogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gUmVzb3VyY2UgfCB1bmRlZmluZWRcblx0Z2V0VmlzaWJsZVJlc291cmNlczogKCkgPT4gUmVzb3VyY2VbXVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZTogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBib29sZWFuXG5cdGdldEV2ZW50UmVzb3VyY2VJZHM6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gKHN0cmluZyB8IG51bWJlcilbXVxuXG5cdC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyIGNvbnRleHRcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG59XG5cbi8vIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yPzogKFxuXHRcdHByb3BzOiBSZW5kZXJDdXJyZW50VGltZUluZGljYXRvclByb3BzXG5cdCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG5cdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxufSkgPT4ge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG5cdGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuXHRcdFNldDxzdHJpbmcgfCBudW1iZXI+XG5cdD4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZTogb25WaWV3Q2hhbmdlLFxuXHRcdGxvY2FsZSxcblx0XHR0aW1lem9uZSxcblx0XHR0cmFuc2xhdGlvbnMsXG5cdFx0dHJhbnNsYXRvcixcblx0fSlcblxuXHQvLyBSZXNvdXJjZSB2aXNpYmlsaXR5XG5cdGNvbnN0IHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuXHRcdFx0XHRpZiAobmV3U2V0LmhhcyhyZXNvdXJjZUlkKSkge1xuXHRcdFx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdTZXQuYWRkKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG5ld1NldFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtdXG5cdClcblxuXHRjb25zdCBzaG93UmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4gbmV3IFNldChwcmV2KS5hZGQocmVzb3VyY2VJZCkpXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhpZGVSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG5cdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG5cdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0fSlcblx0fSwgW10pXG5cblx0Y29uc3Qgc2hvd0FsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoY3VycmVudFJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXNdKVxuXG5cdGNvbnN0IGhpZGVBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KCkpXG5cdH0sIFtdKVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0cmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkcy5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkID09PSByZXNvdXJjZUlkXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlcyA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG5cdFx0XHRcdHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lLmV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuXHRcdChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG5cdFx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG5cdFx0fSxcblx0XHRbY3VycmVudFJlc291cmNlc11cblx0KVxuXG5cdGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cblx0XHRcdHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuXHRcdClcblx0fSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuXHRcdHJldHVybiBCb29sZWFuKGV2ZW50LnJlc291cmNlSWRzICYmIGV2ZW50LnJlc291cmNlSWRzLmxlbmd0aCA+IDEpXG5cdH0sIFtdKVxuXG5cdC8vIEN1c3RvbSBoYW5kbGVyc1xuXHRjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHR9LFxuXHRcdFtjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdGlmIChkaXNhYmxlRXZlbnRDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblx0XHRcdGlmIChvbkV2ZW50Q2xpY2spIHtcblx0XHRcdFx0b25FdmVudENsaWNrKGV2ZW50KVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWRpdEV2ZW50KGV2ZW50KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W2Rpc2FibGVFdmVudENsaWNrLCBvbkV2ZW50Q2xpY2ssIGVkaXRFdmVudF1cblx0KVxuXG5cdGNvbnN0IGhhbmRsZURhdGVDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYgKG9uQ2VsbENsaWNrKSB7XG5cdFx0XHRcdG9uQ2VsbENsaWNrKGluZm8pXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuZXdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHR0aXRsZTogY2FsZW5kYXJFbmdpbmUudCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0XHRzdGFydDogaW5mby5zdGFydCxcblx0XHRcdFx0XHRlbmQ6IGluZm8uZW5kLFxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0XHRhbGxEYXk6IGZhbHNlLFxuXHRcdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblxuXHRcdFx0XHRpZiAoaW5mby5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZUlkXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoaW5mby5zdGFydClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG5cdGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdC4uLmNhbGVuZGFyRW5naW5lLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG5cdFx0XHRldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcblx0XHRcdHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRcdFx0cmVzb3VyY2VzOiBjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblxuXHRcdFx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdFx0XHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50UmVzb3VyY2VJZHMsXG5cblx0XHRcdC8vIE92ZXJyaWRlIGhhbmRsZXJzXG5cdFx0XHRvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuXG5cdFx0XHQvLyBQYXNzIHRocm91Z2ggaGVhZGVyIHByb3BzXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBvdGhlciBwcm9wc1xuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGRlbkRheXMsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQge1xuXHRkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudCBhcyB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0TW9udGhXZWVrcywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVDb25maWcge1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcblx0dmlldzogQ2FsZW5kYXJWaWV3XG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0c2V0U2VsZWN0ZWRFdmVudDogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Q2FsZW5kYXJFdmVudCB8IG51bGw+PlxuXHRzZXRJc0V2ZW50Rm9ybU9wZW46IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGJvb2xlYW4+PlxuXHRzZXRTZWxlY3RlZERhdGU6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPGRheWpzLkRheWpzIHwgbnVsbD4+XG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuXHRcdHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG5cdFx0ZW5kRGF0ZTogZGF5anMuRGF5anNcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHQ6IChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gc3RyaW5nXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIGRheWpzLk1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2FsZW5kYXJFbmdpbmUgPSAoXG5cdGNvbmZpZzogQ2FsZW5kYXJFbmdpbmVDb25maWdcbik6IENhbGVuZGFyRW5naW5lUmV0dXJuID0+IHtcblx0Y29uc3Qge1xuXHRcdGV2ZW50cyA9IFtdLFxuXHRcdGZpcnN0RGF5T2ZXZWVrID0gMCxcblx0XHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdFx0aW5pdGlhbERhdGUgPSBkYXlqcygpLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0gPSBjb25maWdcblxuXHRjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzPihpbml0aWFsRGF0ZSlcblx0Y29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8Q2FsZW5kYXJWaWV3Pihpbml0aWFsVmlldylcblx0Y29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG5cdGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlKGxvY2FsZSB8fCAnZW4nKVxuXG5cdGNvbnN0IHQgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikge1xuXHRcdFx0cmV0dXJuIHRyYW5zbGF0b3Jcblx0XHR9XG5cdFx0aWYgKHRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gdHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdFx0fVxuXHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IGRlZmF1bHRUcmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcblx0fSwgW3RyYW5zbGF0aW9ucywgdHJhbnNsYXRvcl0pXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuXHRcdFx0Zm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG5cdFx0XHRcdGlmIChldmVudC5ycnVsZSkge1xuXHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0Li4uZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMoe1xuXHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhcnRzSW5SYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cdFx0XHRcdFx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuXHRcdFx0XHRcdFx0ZXZlbnQuZW5kLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cdFx0XHRcdFx0Y29uc3Qgc3BhbnNSYW5nZSA9XG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc0JlZm9yZShzdGFydERhdGUpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZERhdGUpXG5cdFx0XHRcdFx0aWYgKHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZSkge1xuXHRcdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goZXZlbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYWxsRXZlbnRzXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50c11cblx0KVxuXG5cdGNvbnN0IGdldEN1cnJlbnRWaWV3UmFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0aWYgKHZpZXcgPT09ICdkYXknKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG5cdFx0XHRcdGVuZDogY3VycmVudERhdGUuZW5kT2YoJ2RheScpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3llYXInKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCd5ZWFyJyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh2aWV3ID09PSAnd2VlaycpIHtcblx0XHRcdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IHdlZWtEYXlzWzBdLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IHdlZWtEYXlzWzZdLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gbW9udGggdmlld1xuXHRcdGNvbnN0IHdlZWtzID0gZ2V0TW9udGhXZWVrcyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0cmV0dXJuIHsgc3RhcnQ6IHdlZWtzWzBdWzBdLnN0YXJ0T2YoJ2RheScpLCBlbmQ6IHdlZWtzWzVdWzZdLmVuZE9mKCdkYXknKSB9XG5cdH0sIFtjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0Q3VycmVudFZpZXdSYW5nZSgpXG5cdFx0cmV0dXJuIGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydCwgZW5kKVxuXHR9LCBbZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRDdXJyZW50Vmlld1JhbmdlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChldmVudHMpIHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoZXZlbnRzKVxuXHRcdH1cblx0fSwgW2V2ZW50c10pXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0c2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG5cdFx0XHRkYXlqcy5sb2NhbGUobG9jYWxlKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXZEYXRlKSA9PiBwcmV2RGF0ZS5sb2NhbGUobG9jYWxlKSlcblx0XHR9XG5cdH0sIFtsb2NhbGVdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSkge1xuXHRcdFx0ZGF5anMudHouc2V0RGVmYXVsdCh0aW1lem9uZSlcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUoZGF0ZSlcblx0XHRcdG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRcdGRpcmVjdGlvbiA9PT0gMVxuXHRcdFx0XHRcdFx0PyBwcmV2LmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdFx0OiBwcmV2LnN1YnRyYWN0KDEsIFZJRVdfVU5JVFNbdmlld10pXG5cdFx0XHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdFx0XHRcdHJldHVybiBuZXdEYXRlXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3ZpZXcsIG9uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRjb25zdCBuZXdEYXRlID0gZGF5anMoKVxuXHRcdHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG5cdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcblx0fSwgW29uRGF0ZUNoYW5nZV0pXG5cblx0Y29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IFsuLi5wcmV2LCBldmVudF0pXG5cdFx0XHRvbkV2ZW50QWRkPy4oZXZlbnQpXG5cdFx0fSxcblx0XHRbb25FdmVudEFkZF1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmlkICE9PSBldmVudElkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZXZlbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgbmV3RXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH1cblx0XHRcdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0XHRcdFx0cmV0dXJuIG5ld0V2ZW50XG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRUb0RlbGV0ZSA9IHByZXYuZmluZCgoZSkgPT4gZS5pZCA9PT0gZXZlbnRJZClcblx0XHRcdFx0aWYgKGV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnRUb0RlbGV0ZSlcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcHJldi5maWx0ZXIoKGUpID0+IGUuaWQgIT09IGV2ZW50SWQpXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W29uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHR9LFxuXHRcdFtvblZpZXdDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcblx0Ly8gQ29tbW9uIGFjdGlvbnNcblx0dG9kYXk6ICdUb2RheScsXG5cdGNyZWF0ZTogJ0NyZWF0ZScsXG5cdG5ldzogJ05ldycsXG5cdHVwZGF0ZTogJ1VwZGF0ZScsXG5cdGRlbGV0ZTogJ0RlbGV0ZScsXG5cdGNhbmNlbDogJ0NhbmNlbCcsXG5cdGV4cG9ydDogJ0V4cG9ydCcsXG5cblx0Ly8gRXZlbnQgcmVsYXRlZFxuXHRldmVudDogJ0V2ZW50Jyxcblx0ZXZlbnRzOiAnRXZlbnRzJyxcblx0bmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuXHR0aXRsZTogJ1RpdGxlJyxcblx0ZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG5cdGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuXHRhbGxEYXk6ICdBbGwgZGF5Jyxcblx0c3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG5cdGVuZERhdGU6ICdFbmQgRGF0ZScsXG5cdHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuXHRlbmRUaW1lOiAnRW5kIFRpbWUnLFxuXHRjb2xvcjogJ0NvbG9yJyxcblxuXHQvLyBFdmVudCBmb3JtXG5cdGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50Jyxcblx0ZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG5cdGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuXHRlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuXHRldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG5cdGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuXHRldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuXHQvLyBSZWN1cnJlbmNlXG5cdHJlcGVhdDogJ1JlcGVhdCcsXG5cdHJlcGVhdHM6ICdSZXBlYXRzJyxcblx0Y3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcblx0ZGFpbHk6ICdEYWlseScsXG5cdHdlZWtseTogJ1dlZWtseScsXG5cdG1vbnRobHk6ICdNb250aGx5Jyxcblx0eWVhcmx5OiAnWWVhcmx5Jyxcblx0aW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG5cdHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcblx0bmV2ZXI6ICdOZXZlcicsXG5cdGNvdW50OiAnQ291bnQnLFxuXHRldmVyeTogJ0V2ZXJ5Jyxcblx0ZW5kczogJ0VuZHMnLFxuXHRhZnRlcjogJ0FmdGVyJyxcblx0b2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG5cdG9uOiAnT24nLFxuXG5cdC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcblx0ZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuXHRlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcblx0XHQnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG5cdHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuXHR0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcblx0dGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcblx0YWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG5cdGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXHRvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG5cdGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG5cdC8vIFZpZXcgdHlwZXNcblx0bW9udGg6ICdNb250aCcsXG5cdHdlZWs6ICdXZWVrJyxcblx0ZGF5OiAnRGF5Jyxcblx0eWVhcjogJ1llYXInLFxuXHRtb3JlOiAnbW9yZScsXG5cblx0Ly8gUmVzb3VyY2UgY2FsZW5kYXJcblx0cmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcblx0cmVzb3VyY2U6ICdSZXNvdXJjZScsXG5cdHRpbWU6ICdUaW1lJyxcblx0ZGF0ZTogJ0RhdGUnLFxuXHRub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG5cdGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG5cdC8vIERheXMgb2Ygd2Vla1xuXHRzdW5kYXk6ICdTdW5kYXknLFxuXHRtb25kYXk6ICdNb25kYXknLFxuXHR0dWVzZGF5OiAnVHVlc2RheScsXG5cdHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG5cdHRodXJzZGF5OiAnVGh1cnNkYXknLFxuXHRmcmlkYXk6ICdGcmlkYXknLFxuXHRzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuXHQvLyBEYXlzIHNob3J0XG5cdHN1bjogJ1N1bicsXG5cdG1vbjogJ01vbicsXG5cdHR1ZTogJ1R1ZScsXG5cdHdlZDogJ1dlZCcsXG5cdHRodTogJ1RodScsXG5cdGZyaTogJ0ZyaScsXG5cdHNhdDogJ1NhdCcsXG5cblx0Ly8gTW9udGhzXG5cdGphbnVhcnk6ICdKYW51YXJ5Jyxcblx0ZmVicnVhcnk6ICdGZWJydWFyeScsXG5cdG1hcmNoOiAnTWFyY2gnLFxuXHRhcHJpbDogJ0FwcmlsJyxcblx0bWF5OiAnTWF5Jyxcblx0anVuZTogJ0p1bmUnLFxuXHRqdWx5OiAnSnVseScsXG5cdGF1Z3VzdDogJ0F1Z3VzdCcsXG5cdHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG5cdG9jdG9iZXI6ICdPY3RvYmVyJyxcblx0bm92ZW1iZXI6ICdOb3ZlbWJlcicsXG5cdGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgd2VlayBkYXlzIGZvciBhIGdpdmVuIGRhdGUgYW5kIGZpcnN0IGRheSBvZiB3ZWVrIHNldHRpbmcuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIGN1cnJlbnQgZGF0ZSBpcyBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHdlZWssXG4gKiBldmVuIHdoZW4gdGhlIGZpcnN0IGRheSBvZiB3ZWVrIGlzIHNldCB0byBhIGRheSBhZnRlciB0aGUgY3VycmVudCBkYXRlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RGF0ZSAtIFRoZSByZWZlcmVuY2UgZGF0ZSBmb3IgY2FsY3VsYXRpbmcgdGhlIHdlZWtcbiAqIEBwYXJhbSBmaXJzdERheU9mV2VlayAtIFRoZSBkYXkgbnVtYmVyICgwLTYpIHJlcHJlc2VudGluZyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuKVxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgNyBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgd2VlayBkYXlzLCBzdGFydGluZyBmcm9tIGZpcnN0RGF5T2ZXZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gTW9uZGF5IGZvciBjdXJyZW50IGRhdGVcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMSlcbiAqIC8vIFJldHVybnM6IFtNb24gT2N0IDEzLCBUdWUgT2N0IDE0LCAuLi4sIFN1biBPY3QgMTldXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEdldCB3ZWVrIHN0YXJ0aW5nIGZyb20gV2VkbmVzZGF5IHdoZW4gY3VycmVudCBkYXRlIGlzIE1vbmRheVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAzKVxuICogLy8gUmV0dXJuczogW1dlZCBPY3QgOCwgVGh1IE9jdCA5LCAuLi4sIFR1ZSBPY3QgMTRdIChpbmNsdWRlcyBNb25kYXkgT2N0IDEzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2Vla0RheXMoXG5cdGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXSB7XG5cdGNvbnN0IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlID0gY3VycmVudERhdGVcblx0XHQuc3RhcnRPZignd2VlaycpXG5cdFx0LmRheShmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUpXG5cdFx0PyBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG5cdFx0OiBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBkYXlJbmRleCkgPT5cblx0XHRhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgNiB3ZWVrcyBvZiBkYXlzIGZvciBhIG1vbnRoIGNhbGVuZGFyIHZpZXcuXG4gKiBBbHdheXMgcmV0dXJucyA0MiBkYXlzICg2IHdlZWtzIMOXIDcgZGF5cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aFdlZWtzKFxuXHRtb250aERhdGU6IGRheWpzLkRheWpzLFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBkYXlqcy5EYXlqc1tdW10ge1xuXHRjb25zdCBmaXJzdFdlZWsgPSBnZXRXZWVrRGF5cyhtb250aERhdGUuc3RhcnRPZignbW9udGgnKSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDYgfSwgKF8sIHdlZWtJbmRleCkgPT4ge1xuXHRcdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0V2Vla1swXS5hZGQod2Vla0luZGV4LCAnd2VlaycpXG5cdFx0cmV0dXJuIGdldFdlZWtEYXlzKHdlZWtTdGFydCwgZmlyc3REYXlPZldlZWspXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aERheXMobW9udGhEYXRlOiBkYXlqcy5EYXlqcyk6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBkYXlzSW5Nb250aCA9IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cblx0XHRtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5hZGQoaSwgJ2RheScpXG5cdClcbn1cblxuaW50ZXJmYWNlIEdldERheUhvdXJzT3B0aW9ucyB7XG5cdHJlZmVyZW5jZURhdGU/OiBkYXlqcy5EYXlqc1xuXHRsZW5ndGg/OiBudW1iZXJcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYXJyYXkgb2YgMjQgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgaG91cmx5IHNsb3RzIGZvciBhIGRheS5cbiAqIFVzZXMgLmhvdXIoaSkgc28gZWFjaCByb3cgbWFwcyB0byBcInRoZSBob3VyIGxhYmVsZWQgaVwiIOKAlCBrZWVwaW5nIGdyaWQgcm93c1xuICogYWxpZ25lZCBhY3Jvc3MgY29sdW1ucyBpbiB3ZWVrIHZpZXdzLiBPbiBEU1Qgc3ByaW5nLWZvcndhcmQsIC5ob3VyKDIpIHJldHVybnNcbiAqIDMgQU0gKHRoZSBub24tZXhpc3RlbnQgaG91ciBpcyBjb2xsYXBzZWQpLCBidXQgdGhlIGdyaWQga2V5IGZpeCAoZGF5SW5kZXgpXG4gKiBhbmQgcGVyLWRheSBnZW5lcmF0aW9uIGluIHZpZXdzIGhhbmRsZSB0aGlzIGNvcnJlY3RseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERheUhvdXJzKHtcblx0cmVmZXJlbmNlRGF0ZSA9IGRheWpzKCksXG5cdGxlbmd0aCA9IDI0LFxufTogR2V0RGF5SG91cnNPcHRpb25zID0ge30pOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3Qgc3RhcnRPZkRheSA9IHJlZmVyZW5jZURhdGUuc3RhcnRPZignZGF5Jylcblx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZkRheS5ob3VyKGkpLm1pbnV0ZSgwKS5zZWNvbmQoMCkubWlsbGlzZWNvbmQoMClcblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgndGhpcycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0V2ZW50Jyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnb25seUNoYW5nZVRoaXMnKSA6IHQoJ29ubHlEZWxldGVUaGlzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdmb2xsb3dpbmcnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdjaGFuZ2VUaGlzQW5kRnV0dXJlJykgOiB0KCdkZWxldGVUaGlzQW5kRnV0dXJlJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCdhbGwnKX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ2FsbEV2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZUVudGlyZVNlcmllcycpIDogdCgnZGVsZXRlRW50aXJlU2VyaWVzJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXI+XG5cdFx0XHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbkNsb3NlfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IERyYWdFbmRFdmVudCB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZWRFdmVudCA9IChcblx0ZXZlbnQ6IERyYWdFbmRFdmVudCxcblx0YWN0aXZlRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4pID0+IHtcblx0Y29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cblx0aWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IGlzVGltZUNlbGwgPSBvdmVyLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ3RpbWUtY2VsbCdcblx0Y29uc3QgeyByZXNvdXJjZUlkLCBhbGxEYXkgfSA9IG92ZXIuZGF0YS5jdXJyZW50IHx8IHt9XG5cdGxldCBuZXdTdGFydFxuXG5cdGlmIChpc1RpbWVDZWxsKSB7XG5cdFx0Y29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSlcblx0fSBlbHNlIHtcblx0XHRjb25zdCB7IGRhdGUgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG5cblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpXG5cdH1cblxuXHRjb25zdCBldmVudER1cmF0aW9uID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoYWN0aXZlRXZlbnQuc3RhcnQsICdzZWNvbmQnKVxuXG5cdC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuXHRsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGV2ZW50RHVyYXRpb24sICdzZWNvbmQnKVxuXG5cdGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcblx0XHQvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcblx0XHRuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuXHR9XG5cblx0Ly8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lcyBhbmQgcmVzb3VyY2UgaWYgY2hhbmdlZFxuXHRjb25zdCB1cGRhdGVzID0ge1xuXHRcdHN0YXJ0OiBuZXdTdGFydCxcblx0XHRlbmQ6IG5ld0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheTogaXNUaW1lQ2VsbCA/IGZhbHNlIDogKGFsbERheSA/PyBhY3RpdmVFdmVudC5hbGxEYXkpLFxuXHR9XG5cdHJldHVybiB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50PihudWxsKVxuXG5cdHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuXHRcdHNldEFjdGl2ZUV2ZW50LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cblx0XHRcdHthY3RpdmVFdmVudCAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthY3RpdmVFdmVudD8udGl0bGV9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L0RyYWdPdmVybGF5PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IERpYWxvZ0Zvb3RlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXInXG5pbXBvcnQgeyBpc0J1c2luZXNzRGF5IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7XG5cdGJ1aWxkRGF0ZVRpbWUsXG5cdGJ1aWxkRW5kRGF0ZVRpbWUsXG5cdGdldFRpbWVDb25zdHJhaW50cyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXRvciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yJ1xuaW1wb3J0IHsgdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDT0xPUl9PUFRJT05TID0gW1xuXHR7XG5cdFx0dmFsdWU6IGBiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwYCxcblx0XHRsYWJlbDogJ0JsdWUnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDBgLFxuXHRcdGxhYmVsOiAnR3JlZW4nLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMGAsXG5cdFx0bGFiZWw6ICdQdXJwbGUnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1yZWQtMTAwIHRleHQtcmVkLTgwMGAsXG5cdFx0bGFiZWw6ICdSZWQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMGAsXG5cdFx0bGFiZWw6ICdZZWxsb3cnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwYCxcblx0XHRsYWJlbDogJ1BpbmsnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMGAsXG5cdFx0bGFiZWw6ICdJbmRpZ28nLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDBgLFxuXHRcdGxhYmVsOiAnQW1iZXInLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwYCxcblx0XHRsYWJlbDogJ0VtZXJhbGQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1za3ktMTAwIHRleHQtc2t5LTgwMGAsXG5cdFx0bGFiZWw6ICdTa3knLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMGAsXG5cdFx0bGFiZWw6ICdWaW9sZXQnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwYCxcblx0XHRsYWJlbDogJ1Jvc2UnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwYCxcblx0XHRsYWJlbDogJ1RlYWwnLFxuXHR9LFxuXHR7XG5cdFx0dmFsdWU6IGBiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMGAsXG5cdFx0bGFiZWw6ICdPcmFuZ2UnLFxuXHR9LFxuXVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Rm9ybVByb3BzIHtcblx0b3Blbj86IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudD86IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcblx0c2VsZWN0ZWRFdmVudCxcblx0b25DbG9zZSxcblx0b25VcGRhdGUsXG5cdG9uRGVsZXRlLFxuXHRvbkFkZCxcbn0pID0+IHtcblx0Y29uc3Qge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fSA9IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNsb3NlKVxuXG5cdGNvbnN0IHtcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHRnZXRSZXNvdXJjZUJ5SWQ6IGNvbnRleHQuZ2V0UmVzb3VyY2VCeUlkLFxuXHR9KSlcblxuXHRjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0ID8/IGRheWpzKClcblx0Y29uc3QgZW5kID0gc2VsZWN0ZWRFdmVudD8uZW5kID8/IGRheWpzKCkuYWRkKDEsICdob3VyJylcblxuXHQvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG5cdGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuXHRcdD8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG5cdFx0OiBudWxsXG5cblx0Ly8gRm9ybSBzdGF0ZVxuXHRjb25zdCBbc3RhcnREYXRlLCBzZXRTdGFydERhdGVdID0gdXNlU3RhdGUoc3RhcnQudG9EYXRlKCkpXG5cdGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZC50b0RhdGUoKSlcblx0Y29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IENPTE9SX09QVElPTlNbMF0udmFsdWVcblx0KVxuXG5cdC8vIFRpbWUgc3RhdGVcblx0Y29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKHN0YXJ0LmZvcm1hdCgnSEg6bW0nKSlcblx0Y29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoZW5kLmZvcm1hdCgnSEg6bW0nKSlcblxuXHQvLyBJbml0aWFsaXplIGZvcm0gdmFsdWVzIGZyb20gc2VsZWN0ZWQgZXZlbnQgb3IgZGVmYXVsdHNcblx0Y29uc3QgW2Zvcm1WYWx1ZXMsIHNldEZvcm1WYWx1ZXNdID0gdXNlU3RhdGUoe1xuXHRcdHRpdGxlOiBzZWxlY3RlZEV2ZW50Py50aXRsZSB8fCAnJyxcblx0XHRkZXNjcmlwdGlvbjogc2VsZWN0ZWRFdmVudD8uZGVzY3JpcHRpb24gfHwgJycsXG5cdFx0bG9jYXRpb246IHNlbGVjdGVkRXZlbnQ/LmxvY2F0aW9uIHx8ICcnLFxuXHR9KVxuXG5cdC8vIFJlY3VycmVuY2Ugc3RhdGUgLSBwdWxsIFJSVUxFIGZyb20gcGFyZW50IGlmIHRoaXMgaXMgYW4gaW5zdGFuY2Vcblx0Y29uc3QgW3JydWxlLCBzZXRScnVsZV0gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB7XG5cdFx0Y29uc3QgZXZlbnRScnVsZSA9IHNlbGVjdGVkRXZlbnQ/LnJydWxlIHx8IHBhcmVudEV2ZW50Py5ycnVsZVxuXHRcdHJldHVybiBldmVudFJydWxlIHx8IG51bGxcblx0fSlcblxuXHQvLyBDcmVhdGUgd3JhcHBlciBmdW5jdGlvbnMgdG8gZml4IFR5cGVTY3JpcHQgZXJyb3JzIHdpdGggRGF0ZVBpY2tlclxuXHRjb25zdCBoYW5kbGVTdGFydERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFN0YXJ0RGF0ZShkYXRlKVxuXHRcdGlmIChkYXRlICYmIGRheWpzKGRhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG5cdFx0XHRzZXRFbmREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0c2V0RW5kRGF0ZShkYXRlKVxuXHRcdGlmIChkYXRlICYmIGRheWpzKGRhdGUpLmlzQmVmb3JlKGRheWpzKHN0YXJ0RGF0ZSkpKSB7XG5cdFx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHQvLyBUaW1lIHZhbGlkYXRpb24gaGFuZGxlcnMgLSBvbmx5IHZhbGlkYXRlIHdoZW4gZGF0ZXMgYXJlIHRoZSBzYW1lXG5cdGNvbnN0IGhhbmRsZVN0YXJ0VGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRTdGFydFRpbWUodGltZSlcblx0XHQvLyBPbmx5IHZhbGlkYXRlIGlmIHNhbWUgZGF5XG5cdFx0aWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lKGRheWpzKGVuZERhdGUpLCAnZGF5JykgJiYgdGltZSA+IGVuZFRpbWUpIHtcblx0XHRcdHNldEVuZFRpbWUodGltZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmRUaW1lQ2hhbmdlID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdHNldEVuZFRpbWUodGltZSlcblx0XHQvLyBPbmx5IHZhbGlkYXRlIGlmIHNhbWUgZGF5XG5cdFx0aWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNTYW1lKGRheWpzKGVuZERhdGUpLCAnZGF5JykgJiYgdGltZSA8IHN0YXJ0VGltZSkge1xuXHRcdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVXBkYXRlIGZvcm0gdmFsdWVzIHdoZW4gaW5wdXQgY2hhbmdlc1xuXHRjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChcblx0XHRlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cblx0KSA9PiB7XG5cdFx0Y29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcblx0XHRzZXRGb3JtVmFsdWVzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKVxuXHR9XG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHQvLyBSZXNldCBlbmQgdGltZSB3aGVuIGFsbCBkYXkgaXMgdG9nZ2xlZCB0byBvblxuXHRcdGlmIChpc0FsbERheSkge1xuXHRcdFx0c2V0RW5kVGltZSgnMjM6NTknKVxuXHRcdH1cblx0fSwgW2lzQWxsRGF5XSlcblxuXHRjb25zdCBoYW5kbGVTdWJtaXQgPSAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpXG5cblx0XHRjb25zdCBzdGFydERhdGVUaW1lID0gYnVpbGREYXRlVGltZShzdGFydERhdGUsIHN0YXJ0VGltZSwgaXNBbGxEYXkpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSBidWlsZEVuZERhdGVUaW1lKGVuZERhdGUsIGVuZFRpbWUsIGlzQWxsRGF5KVxuXG5cdFx0Y29uc3QgZXZlbnREYXRhOiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0aWQ6IHNlbGVjdGVkRXZlbnQ/LmlkIHx8IGRheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpLFxuXHRcdFx0dGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG5cdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdGVuZDogZW5kRGF0ZVRpbWUsXG5cdFx0XHRyZXNvdXJjZUlkOiBzZWxlY3RlZEV2ZW50Py5yZXNvdXJjZUlkLFxuXHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcblx0XHRcdGFsbERheTogaXNBbGxEYXksXG5cdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG5cdFx0fVxuXG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkICYmIGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcblx0XHRcdG9wZW5FZGl0RGlhbG9nKHNlbGVjdGVkRXZlbnQsIHtcblx0XHRcdFx0dGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG5cdFx0XHRcdHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuXHRcdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0XHRkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcblx0XHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRcdGFsbERheTogaXNBbGxEYXksXG5cdFx0XHRcdGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuXHRcdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdFx0fSlcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuXHRcdFx0b25VcGRhdGU/LihldmVudERhdGEpXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uQWRkPy4oZXZlbnREYXRhKVxuXHRcdH1cblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHtcblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRcdC8vIFNob3cgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBkaWFsb2dcblx0XHRcdFx0b3BlbkRlbGV0ZURpYWxvZyhzZWxlY3RlZEV2ZW50KVxuXHRcdFx0XHRyZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcblx0XHRcdH1cblx0XHRcdG9uRGVsZXRlPy4oc2VsZWN0ZWRFdmVudClcblx0XHRcdG9uQ2xvc2UoKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZVJSdWxlQ2hhbmdlID0gKG5ld1JSdWxlOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB7XG5cdFx0aWYgKCFuZXdSUnVsZSkge1xuXHRcdFx0c2V0UnJ1bGUobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBzdGFydERhdGVUaW1lID0gYnVpbGREYXRlVGltZShzdGFydERhdGUsIHN0YXJ0VGltZSwgaXNBbGxEYXkpXG5cdFx0c2V0UnJ1bGUoeyAuLi5uZXdSUnVsZSwgZHRzdGFydDogc3RhcnREYXRlVGltZS50b0RhdGUoKSB9KVxuXHR9XG5cblx0Ly8gVXNlIHJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGdsb2JhbFxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgcmVzb3VyY2VJZCA9IHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0XHRpZiAocmVzb3VyY2VJZCAmJiBnZXRSZXNvdXJjZUJ5SWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2VCeUlkKHJlc291cmNlSWQpXG5cdFx0XHRpZiAocmVzb3VyY2U/LmJ1c2luZXNzSG91cnMpIHtcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlLmJ1c2luZXNzSG91cnNcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJ1c2luZXNzSG91cnNcblx0fSwgW3NlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWQsIGdldFJlc291cmNlQnlJZCwgYnVzaW5lc3NIb3Vyc10pXG5cblx0Y29uc3QgZGlzYWJsZWREYXRlTWF0Y2hlciA9IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnNcblx0XHQ/IChkYXRlOiBEYXRlKSA9PiAhaXNCdXNpbmVzc0RheShkYXlqcyhkYXRlKSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0XHQ6IHVuZGVmaW5lZFxuXG5cdGNvbnN0IHN0YXJ0Q29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoc3RhcnREYXRlLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXHRjb25zdCBlbmRDb25zdHJhaW50cyA9IGdldFRpbWVDb25zdHJhaW50cyhlbmREYXRlLCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzKVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxmb3JtIGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZmxleC0xIG1pbi1oLTBcIiBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTMgc206Z2FwLTQgcC0xXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJ0aXRsZVwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCd0aXRsZScpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJ0aXRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudFRpdGxlUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ2Rlc2NyaXB0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0aWQ9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0bmFtZT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmRlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydERhdGUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e3N0YXJ0RGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZVN0YXJ0RGF0ZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZERhdGUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e2VuZERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydFRpbWUnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtzdGFydENvbnN0cmFpbnRzLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17c3RhcnRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJzdGFydC10aW1lXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZVN0YXJ0VGltZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3N0YXJ0VGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kVGltZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e2VuZENvbnN0cmFpbnRzLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17ZW5kQ29uc3RyYWludHMubWlufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZW5kLXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlRW5kVGltZUNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2VuZFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdHtDT0xPUl9PUFRJT05TLm1hcCgoY29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkQ29sb3IgPT09IGNvbG9yLnZhbHVlICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbG9yLnZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZENvbG9yKGNvbG9yLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJsb2NhdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdHt0KCdsb2NhdGlvbicpfVxuXHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdGlkPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7LyogUmVjdXJyZW5jZSBTZWN0aW9uICovfVxuXHRcdFx0XHRcdFx0PFJlY3VycmVuY2VFZGl0b3Igb25DaGFuZ2U9e2hhbmRsZVJSdWxlQ2hhbmdlfSB2YWx1ZT17cnJ1bGV9IC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvU2Nyb2xsQXJlYT5cblxuXHRcdFx0XHQ8RGlhbG9nRm9vdGVyIGNsYXNzTmFtZT1cIm10LTQgc2hyaW5rLTAgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG5cdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkICYmIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17aGFuZGxlRGVsZXRlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlc3RydWN0aXZlXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3QoJ2RlbGV0ZScpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGdhcC0yIHNtOnctYXV0b1wiPlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCJcblx0XHRcdFx0XHRcdFx0b25DbGljaz17b25DbG9zZX1cblx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3QoJ2NhbmNlbCcpfVxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIiB0eXBlPVwic3VibWl0XCI+XG5cdFx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ3VwZGF0ZScpIDogdCgnY3JlYXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9EaWFsb2dGb290ZXI+XG5cdFx0XHQ8L2Zvcm0+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgRXZlbnQgRWRpdCBEaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cblx0XHRcdFx0b25DbG9zZT17Y2xvc2VEaWFsb2d9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3Jcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94LWluZGljYXRvclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuXHRcdFx0PC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG5cdFx0PC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgTWF0Y2hlciB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FsZW5kYXInXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERhdGVQaWNrZXJQcm9wcyB7XG5cdGRhdGU6IERhdGUgfCB1bmRlZmluZWRcblx0b25DaGFuZ2U/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRsYWJlbD86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2xvc2VPblNlbGVjdD86IGJvb2xlYW5cblx0ZGlzYWJsZWQ/OiBNYXRjaGVyIHwgTWF0Y2hlcltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRlUGlja2VyKHtcblx0ZGF0ZSxcblx0Y2xvc2VPblNlbGVjdCxcblx0b25DaGFuZ2UsXG5cdGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0Ly8gU3luYyBkYXRlIHN0YXRlIHdpdGggZGF0ZSBwcm9wXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdH0sIFtkYXRlXSlcblxuXHRjb25zdCBoYW5kbGVEYXRlU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0XHRpZiAoY2xvc2VPblNlbGVjdCkge1xuXHRcdFx0cG9wT3ZlclJlZi5jdXJyZW50Py5jbGljaygpXG5cdFx0fVxuXHRcdG9uQ2hhbmdlPy4oZGF0ZSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2RhdGEtW2VtcHR5PXRydWVdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3LWZ1bGwganVzdGlmeS1zdGFydCB0ZXh0LWxlZnQgZm9udC1ub3JtYWwnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS1lbXB0eT17IWRhdGV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PENhbGVuZGFySWNvbiAvPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF0ZSA/IChcblx0XHRcdFx0XHRcdFx0ZGF5anMoc2VsZWN0ZWREYXRlKS5mb3JtYXQoJ01NTSBELCBZWVlZJylcblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdDxzcGFuPntsYWJlbH08L3NwYW4+XG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJzdGFydFwiIGNsYXNzTmFtZT1cInctYXV0byBwLTBcIj5cblx0XHRcdFx0XHQ8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGNhcHRpb25MYXlvdXQ9XCJkcm9wZG93blwiXG5cdFx0XHRcdFx0XHRkZWZhdWx0TW9udGg9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdG1vZGU9XCJzaW5nbGVcIlxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0Q2hldnJvbkRvd25JY29uLFxuXHRDaGV2cm9uTGVmdEljb24sXG5cdENoZXZyb25SaWdodEljb24sXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhbGVuZGFyKHtcblx0Y2xhc3NOYW1lLFxuXHRjbGFzc05hbWVzLFxuXHRzaG93T3V0c2lkZURheXMgPSB0cnVlLFxuXHRjYXB0aW9uTGF5b3V0ID0gJ2xhYmVsJyxcblx0YnV0dG9uVmFyaWFudCA9ICdnaG9zdCcsXG5cdGZvcm1hdHRlcnMsXG5cdGNvbXBvbmVudHMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5UGlja2VyPiAmIHtcblx0YnV0dG9uVmFyaWFudD86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBCdXR0b24+Wyd2YXJpYW50J11cbn0pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0cmV0dXJuIChcblx0XHQ8RGF5UGlja2VyXG5cdFx0XHRjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0Y2xhc3NOYW1lcz17e1xuXHRcdFx0XHRyb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcblx0XHRcdFx0bW9udGhzOiBjbihcblx0XHRcdFx0XHQnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG5cdFx0XHRcdCksXG5cdFx0XHRcdG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG5cdFx0XHRcdG5hdjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcblx0XHRcdFx0KSxcblx0XHRcdFx0YnV0dG9uX3ByZXZpb3VzOiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcblx0XHRcdFx0KSxcblx0XHRcdFx0YnV0dG9uX25leHQ6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdG1vbnRoX2NhcHRpb246IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25zOiBjbihcblx0XHRcdFx0XHQndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bl9yb290OiBjbihcblx0XHRcdFx0XHQncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bjogY24oXG5cdFx0XHRcdFx0J2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG5cdFx0XHRcdCksXG5cdFx0XHRcdGNhcHRpb25fbGFiZWw6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0Y2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuXHRcdFx0XHRcdFx0PyAndGV4dC1zbSdcblx0XHRcdFx0XHRcdDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcblx0XHRcdFx0KSxcblx0XHRcdFx0dGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcblx0XHRcdFx0d2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuXHRcdFx0XHR3ZWVrZGF5OiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0d2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcblx0XHRcdFx0d2Vla19udW1iZXJfaGVhZGVyOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0d2Vla19udW1iZXI6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF5OiBjbihcblx0XHRcdFx0XHQncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6bGFzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1yLW1kIGdyb3VwL2RheSBhc3BlY3Qtc3F1YXJlIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRwcm9wcy5zaG93V2Vla051bWJlclxuXHRcdFx0XHRcdFx0PyAnWyY6bnRoLWNoaWxkKDIpW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnXG5cdFx0XHRcdFx0XHQ6ICdbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2Vfc3RhcnQ6IGNuKFxuXHRcdFx0XHRcdCdyb3VuZGVkLWwtbWQgYmctYWNjZW50Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9zdGFydFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9taWRkbGU6IGNuKCdyb3VuZGVkLW5vbmUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9taWRkbGUpLFxuXHRcdFx0XHRyYW5nZV9lbmQ6IGNuKCdyb3VuZGVkLXItbWQgYmctYWNjZW50JywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfZW5kKSxcblx0XHRcdFx0dG9kYXk6IGNuKFxuXHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGRhdGEtW3NlbGVjdGVkPXRydWVdOnJvdW5kZWQtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMudG9kYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0b3V0c2lkZTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBhcmlhLXNlbGVjdGVkOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMub3V0c2lkZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkaXNhYmxlZDogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kaXNhYmxlZFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRoaWRkZW46IGNuKCdpbnZpc2libGUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5oaWRkZW4pLFxuXHRcdFx0XHQuLi5jbGFzc05hbWVzLFxuXHRcdFx0fX1cblx0XHRcdGNvbXBvbmVudHM9e3tcblx0XHRcdFx0Um9vdDogKHsgY2xhc3NOYW1lLCByb290UmVmLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0XHRcdFx0XHRcdHJlZj17cm9vdFJlZn1cblx0XHRcdFx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENoZXZyb246ICh7IGNsYXNzTmFtZSwgb3JpZW50YXRpb24sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdsZWZ0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvblJpZ2h0SWNvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdERheUJ1dHRvbjogQ2FsZW5kYXJEYXlCdXR0b24sXG5cdFx0XHRcdFdlZWtOdW1iZXI6ICh7IGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDx0ZCB7Li4ucHJvcHN9PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS0oLS1jZWxsLXNpemUpIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Li4uY29tcG9uZW50cyxcblx0XHRcdH19XG5cdFx0XHRmb3JtYXR0ZXJzPXt7XG5cdFx0XHRcdGZvcm1hdE1vbnRoRHJvcGRvd246IChkYXRlKSA9PlxuXHRcdFx0XHRcdGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnc2hvcnQnIH0pLFxuXHRcdFx0XHQuLi5mb3JtYXR0ZXJzLFxuXHRcdFx0fX1cblx0XHRcdHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdGRheSxcblx0bW9kaWZpZXJzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0Y29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHR9XG5cdH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cblx0cmV0dXJuIChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpiZy1hY2NlbnQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6Ym9yZGVyLXJpbmcgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1yaW5nLzUwIGRhcms6aG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBmbGV4IGFzcGVjdC1zcXVhcmUgc2l6ZS1hdXRvIHctZnVsbCBtaW4tdy0oLS1jZWxsLXNpemUpIGZsZXgtY29sIGdhcC0xIGxlYWRpbmctbm9uZSBmb250LW5vcm1hbCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyZWxhdGl2ZSBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTp6LTEwIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctWzNweF0gZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtci1tZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06cm91bmRlZC1ub25lIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1sLW1kIFsmPnNwYW5dOnRleHQteHMgWyY+c3Bhbl06b3BhY2l0eS03MCcsXG5cdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuXHRcdFx0ZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG5cdFx0XHRkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cblx0XHRcdGRhdGEtcmFuZ2Utc3RhcnQ9e21vZGlmaWVycy5yYW5nZV9zdGFydH1cblx0XHRcdGRhdGEtc2VsZWN0ZWQtc2luZ2xlPXtcblx0XHRcdFx0bW9kaWZpZXJzLnNlbGVjdGVkICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2Vfc3RhcnQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9lbmQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9taWRkbGVcblx0XHRcdH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0c2l6ZT1cImljb25cIlxuXHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdHNpZGVPZmZzZXQgPSA0LFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG5cdFx0XHRcdHNpZGVPZmZzZXQ9e3NpZGVPZmZzZXR9XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdC8+XG5cdFx0PC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG5cdHJldHVybiAoXG5cdFx0PGlucHV0XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmlsZTp0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHNlbGVjdGlvbjpiZy1wcmltYXJ5IHNlbGVjdGlvbjp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGJvcmRlci1pbnB1dCBmbGV4IGgtOSB3LWZ1bGwgbWluLXctMCByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1iYXNlIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZmlsZTppbmxpbmUtZmxleCBmaWxlOmgtNyBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBtZDp0ZXh0LXNtJyxcblx0XHRcdFx0J2ZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdJyxcblx0XHRcdFx0J2FyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImlucHV0XCJcblx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgImltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PExhYmVsUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwibGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBTY3JvbGxBcmVhUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zY3JvbGwtYXJlYSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcblx0ZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG5cdHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHZpZXdQb3J0UHJvcHMsXG5cdC4uLnByb3BzXG59OiBTY3JvbGxBcmVhUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0ey4uLnZpZXdQb3J0UHJvcHN9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2ZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIHNpemUtZnVsbCByb3VuZGVkLVtpbmhlcml0XSB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS0xJyxcblx0XHRcdFx0XHR2aWV3UG9ydFByb3BzPy5jbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHQ8U2Nyb2xsQmFyIC8+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5mdW5jdGlvbiBTY3JvbGxCYXIoe1xuXHRjbGFzc05hbWUsXG5cdG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0b3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcblx0XHRcdFx0XHQnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0b3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuXHRcdFx0XHRcdCdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXNjcm9sbGJhclwiXG5cdFx0XHRvcmllbnRhdGlvbj17b3JpZW50YXRpb259XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iXG5cdFx0XHRcdGNsYXNzTmFtZT1cImJnLWJvcmRlciByZWxhdGl2ZSBmbGV4LTEgcm91bmRlZC1mdWxsXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuXHRcdFx0Lz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cblx0KVxufVxuXG5leHBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfVxuIiwKICAgICJpbXBvcnQgeyBDbG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyIH0gZnJvbSAnQC9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXInXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuY29uc3QgaGFuZGxlV2hlZWwgPSAoZTogUmVhY3QuV2hlZWxFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcblx0Ly8gUHJldmVudCBldmVudCBmcm9tIGJ1YmJsaW5nIHRvIHByZXZlbnQgUG9wb3ZlciBmcm9tIGNsb3Npbmdcblx0ZS5zdG9wUHJvcGFnYXRpb24oKVxufVxuXG5pbnRlcmZhY2UgVGltZVBpY2tlclByb3BzIHtcblx0dmFsdWU6IHN0cmluZ1xuXHRvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cblx0bmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZVBpY2tlcih7XG5cdHZhbHVlLFxuXHRvbkNoYW5nZSxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRwbGFjZWhvbGRlciA9ICdTZWxlY3QgdGltZS4uLicsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcblx0bmFtZSxcbn06IFRpbWVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKCcnKVxuXHRjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXHRjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRjb25zdCBbdHJpZ2dlcldpZHRoLCBzZXRUcmlnZ2VyV2lkdGhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuXG5cdGNvbnN0IHsgdGltZU9wdGlvbnMsIGZvcm1hdFRpbWUgfSA9IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHRcdHRpbWVGb3JtYXQsXG5cdFx0bWluVGltZSxcblx0XHRtYXhUaW1lLFxuXHR9KVxuXG5cdC8vIEZpbHRlciB0aW1lIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG5cdGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRpbWVPcHRpb25zLmZpbHRlcigodGltZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcblx0fSlcblxuXHRjb25zdCBoYW5kbGVTZWxlY3QgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0b25DaGFuZ2UodGltZSlcblx0XHRzZXRPcGVuKGZhbHNlKVxuXHRcdHNldFNlYXJjaCgnJylcblx0fVxuXG5cdC8vIE1lYXN1cmUgdHJpZ2dlciB3aWR0aCBhbmQgZm9jdXMgaW5wdXQgd2hlbiBwb3BvdmVyIG9wZW5zXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG9wZW4pIHtcblx0XHRcdGlmICh0cmlnZ2VyUmVmLmN1cnJlbnQpIHtcblx0XHRcdFx0c2V0VHJpZ2dlcldpZHRoKHRyaWdnZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aClcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0XHR9LCAwKVxuXHRcdH1cblx0fSwgW29wZW5dKVxuXG5cdGNvbnN0IGN1cnJlbnRUaW1lU3RyaW5nID0gdmFsdWUgPyBmb3JtYXRUaW1lKHZhbHVlKSA6IHBsYWNlaG9sZGVyXG5cblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE9wZW59IG9wZW49e29wZW59PlxuXHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRhcmlhLWNvbnRyb2xzPVwidGltZS1waWNrZXItbGlzdGJveFwiXG5cdFx0XHRcdFx0YXJpYS1leHBhbmRlZD17b3Blbn1cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCd3LWZ1bGwganVzdGlmeS1zdGFydCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B0aW1lLXBpY2tlci0ke25hbWV9YH1cblx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0cmVmPXt0cmlnZ2VyUmVmfVxuXHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENsb2NrIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0e2N1cnJlbnRUaW1lU3RyaW5nfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHQ8UG9wb3ZlckNvbnRlbnRcblx0XHRcdFx0YWxpZ249XCJzdGFydFwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInAtMFwiXG5cdFx0XHRcdHN0eWxlPXt7IHdpZHRoOiB0cmlnZ2VyV2lkdGggfX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaChlLnRhcmdldC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aW1lLi4uXCJcblx0XHRcdFx0XHRcdHJlZj17aW5wdXRSZWZ9XG5cdFx0XHRcdFx0XHR2YWx1ZT17c2VhcmNofVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLVsyMDBweF1cIiBvbldoZWVsPXtoYW5kbGVXaGVlbH0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTFcIj5cblx0XHRcdFx0XHRcdHtmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHROL0Fcblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJlZE9wdGlvbnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGltZSA9PT0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTZWxlY3RlZCAmJiAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KHRpbWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3RpbWVTdHJpbmd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdDwvUG9wb3Zlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5pbnRlcmZhY2UgVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzIHtcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxufTogVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzKSB7XG5cdC8vIEdlbmVyYXRlIHRpbWUgb3B0aW9ucyAoMTUtbWludXRlIGludGVydmFscykgd2l0aGluIG1pbi9tYXggcmFuZ2Vcblx0Y29uc3QgdGltZU9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB0aW1lczogc3RyaW5nW10gPSBbXVxuXHRcdGNvbnN0IFttaW5Ib3VyLCBtaW5NaW51dGVdID0gbWluVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgW21heEhvdXIsIG1heE1pbnV0ZV0gPSBtYXhUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblxuXHRcdGNvbnN0IG1pblRvdGFsTWludXRlcyA9IG1pbkhvdXIgKiA2MCArIG1pbk1pbnV0ZVxuXHRcdGNvbnN0IG1heFRvdGFsTWludXRlcyA9IG1heEhvdXIgKiA2MCArIG1heE1pbnV0ZVxuXG5cdFx0Zm9yIChcblx0XHRcdGxldCB0b3RhbE1pbnV0ZXMgPSBtaW5Ub3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgPD0gbWF4VG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzICs9IDE1XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApXG5cdFx0XHRjb25zdCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjBcblxuXHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0XHR0aW1lcy5wdXNoKHRpbWVTdHJpbmcpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVzXG5cdH0sIFttaW5UaW1lLCBtYXhUaW1lXSlcblxuXHRjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nXG5cdFx0Y29uc3QgZGlzcGxheUhvdXJzID0gaG91cnMgPT09IDAgPyAxMiA6IGhvdXJzID4gMTIgPyBob3VycyAtIDEyIDogaG91cnNcblxuXHRcdGlmICh0aW1lRm9ybWF0ID09PSAnMjQtaG91cicpIHtcblx0XHRcdHJldHVybiBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdH1cblxuXHRcdHJldHVybiBgJHtkaXNwbGF5SG91cnN9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7cGVyaW9kfWBcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGltZU9wdGlvbnMsXG5cdFx0Zm9ybWF0VGltZSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGRhdGUgaXMgYSBidXNpbmVzcyBkYXkuXG4gKlxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBidXNpbmVzc0hvdXJzIFRoZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIChzaW5nbGUgb3IgYXJyYXkpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NEYXkgPSAoXG5cdGRhdGU6IGRheWpzLkRheWpzLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKTogYm9vbGVhbiA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRsZXQgaGFzTWF0Y2ggPSBmYWxzZVxuXHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7XG5cdFx0ZGF0ZSxcblx0XHRvbk1hdGNoOiAoKSA9PiB7XG5cdFx0XHRoYXNNYXRjaCA9IHRydWVcblx0XHR9LFxuXHR9KVxuXG5cdHJldHVybiBoYXNNYXRjaFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElzQnVzaW5lc3NIb3VyT3B0aW9ucyB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgaG91ciBvbiBhIHNwZWNpZmljIGRhdGUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBjaGVja2luZyBidXNpbmVzcyBob3Vyc1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0hvdXIgPSAoe1xuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUgPSAwLFxuXHRidXNpbmVzc0hvdXJzLFxufTogSXNCdXNpbmVzc0hvdXJPcHRpb25zKTogYm9vbGVhbiA9PiB7XG5cdC8vIElmIGJ1c2luZXNzIGhvdXJzIGFyZSBub3QgY29uZmlndXJlZCwgY29uc2lkZXIgZXZlcnl0aGluZyBhcyBcImJ1c2luZXNzIGhvdXJzXCJcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdC8vIElmIGhvdXIgaXMgbm90IHByb3ZpZGVkLCB3ZSBhc3N1bWUgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCB0aGUgZGF5XG5cdGlmIChob3VyID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gaXNCdXNpbmVzc0RheShkYXRlLCBidXNpbmVzc0hvdXJzKVxuXHR9XG5cblx0bGV0IGlzSW5CdXNpbmVzc0hvdXIgPSBmYWxzZVxuXHRjb25zdCBjdXJyZW50TWludXRlcyA9IGhvdXIgKiA2MCArIG1pbnV0ZVxuXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6IChjb25maWcpID0+IHtcblx0XHRcdC8vIENoZWNrIHRpbWUgYWdhaW5zdCB0aGlzIHNwZWNpZmljIGNvbmZpZ1xuXHRcdFx0Ly8gc3RhcnRUaW1lIGFuZCBlbmRUaW1lIGFyZSBudW1iZXJzICgwLTI0KVxuXHRcdFx0Y29uc3Qgc3RhcnRIID0gY29uZmlnLnN0YXJ0VGltZSA/PyA5XG5cdFx0XHRjb25zdCBlbmRIID0gY29uZmlnLmVuZFRpbWUgPz8gMTdcblxuXHRcdFx0Y29uc3Qgc3RhcnRNaW51dGVzID0gc3RhcnRIICogNjBcblx0XHRcdGNvbnN0IGVuZE1pbnV0ZXMgPSBlbmRIICogNjBcblxuXHRcdFx0aWYgKGN1cnJlbnRNaW51dGVzID49IHN0YXJ0TWludXRlcyAmJiBjdXJyZW50TWludXRlcyA8IGVuZE1pbnV0ZXMpIHtcblx0XHRcdFx0aXNJbkJ1c2luZXNzSG91ciA9IHRydWVcblx0XHRcdH1cblx0XHR9LFxuXHR9KVxuXG5cdHJldHVybiBpc0luQnVzaW5lc3NIb3VyXG59XG5cbi8qKlxuICogSGVscGVyIHRvIHByb2Nlc3MgYSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIGFuZCB1cGRhdGUgdGhlIHJhbmdlLlxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0J1c2luZXNzSG91cnMgPSAoXG5cdGJoOiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdIHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7XG5cdFx0ZGF0ZT86IGRheWpzLkRheWpzXG5cdFx0b25NYXRjaDogKGNvbmZpZzogQnVzaW5lc3NIb3VycykgPT4gdm9pZFxuXHR9XG4pID0+IHtcblx0Y29uc3QgeyBkYXRlLCBvbk1hdGNoIH0gPSBvcHRpb25zXG5cdGlmICghYmgpIHJldHVyblxuXG5cdGNvbnN0IGNvbmZpZ3MgPSBBcnJheS5pc0FycmF5KGJoKSA/IGJoIDogW2JoXVxuXG5cdGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcblx0XHRpZiAoZGF0ZSAmJiBjb25maWcuZGF5c09mV2Vlaykge1xuXHRcdFx0Y29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5kYXkoKVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjb25maWcuZGF5c09mV2Vlay5zb21lKChkKSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkXSA9PT0gZGF5T2ZXZWVrKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbk1hdGNoKGNvbmZpZylcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdXNpbmVzc0hvdXJzUmFuZ2Uge1xuXHRtaW5TdGFydDogbnVtYmVyXG5cdG1heEVuZDogbnVtYmVyXG5cdGhhc0J1c2luZXNzSG91cnM6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB1bmlvbiBvZiBidXNpbmVzcyBob3VycyByYW5nZXMgYWNyb3NzIG11bHRpcGxlIGRhdGVzIGFuZC9vciByZXNvdXJjZSBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSA9IChvcHRpb25zOiB7XG5cdGFsbERhdGVzOiBkYXlqcy5EYXlqc1tdXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlc291cmNlQnVzaW5lc3NIb3Vycz86IChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxufSk6IEJ1c2luZXNzSG91cnNSYW5nZSA9PiB7XG5cdGNvbnN0IHtcblx0XHRhbGxEYXRlcyxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9ID0gb3B0aW9uc1xuXG5cdGxldCBtaW5TdGFydCA9IDI0XG5cdGxldCBtYXhFbmQgPSAwXG5cdGxldCBoYXNCdXNpbmVzc0hvdXJzID0gZmFsc2VcblxuXHRjb25zdCBvbk1hdGNoID0gKGNvbmZpZzogQnVzaW5lc3NIb3VycykgPT4ge1xuXHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0bWluU3RhcnQgPSBNYXRoLm1pbihtaW5TdGFydCwgY29uZmlnLnN0YXJ0VGltZSA/PyA5KVxuXHRcdG1heEVuZCA9IE1hdGgubWF4KG1heEVuZCwgY29uZmlnLmVuZFRpbWUgPz8gMTcpXG5cdH1cblxuXHQvLyBQcm9jZXNzIGdsb2JhbCBhbmQgcmVzb3VyY2UgYnVzaW5lc3MgaG91cnMgZm9yIGVhY2ggZGF0ZVxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHtcblx0XHRwcm9jZXNzQnVzaW5lc3NIb3VycyhidXNpbmVzc0hvdXJzLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHRmb3IgKGNvbnN0IHJiaCBvZiByZXNvdXJjZUJ1c2luZXNzSG91cnMpIHtcblx0XHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKHJiaCwgeyBkYXRlLCBvbk1hdGNoIH0pXG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFsbGJhY2sgbG9naWMgaWYgbm8gYnVzaW5lc3MgaG91cnMgZm91bmQgZm9yIHNwZWNpZmljIGRhdGVzXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycyAmJiBoaWRlTm9uQnVzaW5lc3NIb3Vycykge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IG9uTWF0Y2ggfSlcblx0XHR9XG5cblx0XHQvLyBGaW5hbCBmYWxsYmFjayB0byBkZWZhdWx0IDktMTcgaWYgc3RpbGwgbm90aGluZ1xuXHRcdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0bWluU3RhcnQgPSA5XG5cdFx0XHRtYXhFbmQgPSAxN1xuXHRcdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigwKS5taW51dGUoMCkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEVuZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBkYXlqcy5EYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lQ29uc3RyYWludHMgPSAoXG5cdGRhdGU6IERhdGUsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSByZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cblx0Y29uc3QgZGF5anNEYXRlID0gZGF5anMoZGF0ZSlcblxuXHRjb25zdCB7IG1pblN0YXJ0LCBtYXhFbmQsIGhhc0J1c2luZXNzSG91cnMgfSA9IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSh7XG5cdFx0YWxsRGF0ZXM6IFtkYXlqc0RhdGVdLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnM6IGZhbHNlLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bWluOiBgJHttaW5TdGFydC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjAwYCxcblx0XHRtYXg6IGAkeyhtYXhFbmQgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjQ1YCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBDYXJkLCBDYXJkQ29udGVudCwgQ2FyZEhlYWRlciwgQ2FyZFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhcmQnXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3NlbGVjdCdcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9e3RvZ2dsZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiZnJlcXVlbmN5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0b25WYWx1ZUNoYW5nZT17KGYpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJpbnRlcnZhbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRpZD1cImludGVydmFsXCJcblx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIiBrZXk9e2QubGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRodG1sRm9yPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICduZXZlcid9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmV2ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwibmV2ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ2NvdW50J31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhZnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnY291bnQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJhZnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnYWZ0ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNiB3LTE2IHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICd1bnRpbCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwib25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ3VudGlsJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwib25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ29uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICd1bnRpbCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17b3B0cz8udW50aWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhkKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGQgPyBkYXlqcyhkKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRGb290ZXIsXG5cdENhcmRUaXRsZSxcblx0Q2FyZEFjdGlvbixcblx0Q2FyZERlc2NyaXB0aW9uLFxuXHRDYXJkQ29udGVudCxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1bcGxhY2Vob2xkZXJdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNpemU9e3NpemV9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG5cdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHRwb3NpdGlvbiA9ICdwb3BwZXInLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy1bOHJlbV0gb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0yIHB5LTEuNSB0ZXh0LXhzJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWl0ZW1cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdDwvc3Bhbj5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3Jcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtZG93bi1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0R3JvdXAsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdExhYmVsLFxuXHRTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuXHRTZWxlY3RTY3JvbGxVcEJ1dHRvbixcblx0U2VsZWN0U2VwYXJhdG9yLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcblx0Y29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0XHRvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdGV2ZW50OiBudWxsLFxuXHR9KVxuXG5cdGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdGV2ZW50OiBudWxsLFxuXHRcdH0pXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuL2V2ZW50LWZvcm0nXG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm1EaWFsb2cgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm06IGNvbnRleHQucmVuZGVyRXZlbnRGb3JtLFxuXHR9KSlcblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdGlmIChyZW5kZXJFdmVudEZvcm0pIHtcblx0XHRyZXR1cm4gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17Y2xvc2VFdmVudEZvcm19IG9wZW49e2lzRXZlbnRGb3JtT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtWzkwdmhdIHctWzkwdnddIG1heC13LVs1MDBweF0gcC00IHNtOnAtNiBvdmVyZmxvdy1oaWRkZW4gZ2FwLTBcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG5cdFx0dmlldzogY3R4LnZpZXcsXG5cdFx0c2V0VmlldzogY3R4LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY3R4Lm5leHRQZXJpb2QsXG5cdFx0cHJldlBlcmlvZDogY3R4LnByZXZQZXJpb2QsXG5cdFx0dG9kYXk6IGN0eC50b2RheSxcblx0XHRvcGVuRXZlbnRGb3JtOiBjdHgub3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQ6IGN0eC5oZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lOiBjdHguaGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50czogY3R4LnJhd0V2ZW50cyxcblx0XHR0OiBjdHgudCxcblx0fSkpXG5cblx0Y29uc3QgW21vYmlsZU1lbnVPcGVuLCBzZXRNb2JpbGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuXHRjb25zdCBjbG9zZU1vYmlsZU1lbnUgPSAoKSA9PiBzZXRNb2JpbGVNZW51T3BlbihmYWxzZSlcblxuXHRjb25zdCBoYW5kbGVFeHBvcnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlsZW5hbWUgPSBgaWxhbXktY2FsZW5kYXItJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXX0uaWNzYFxuXHRcdGRvd25sb2FkSUNhbGVuZGFyKHJhd0V2ZW50cywgZmlsZW5hbWUsICdpbGFteSBDYWxlbmRhcicpXG5cdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0fVxuXG5cdGNvbnN0IE5ld0V2ZW50QnV0dG9uID0gKCkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcblx0XHRcdG9uQ2xpY2s9eygpID0+IG9wZW5FdmVudEZvcm0oKX1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwiZGVmYXVsdFwiXG5cdFx0PlxuXHRcdFx0PFBsdXMgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gQDR4bDppbmxpbmVcIj57dCgnbmV3Jyl9PC9zcGFuPlxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0Y29uc3QgRXhwb3J0QnV0dG9uID0gKHsgZnVsbFdpZHRoID0gZmFsc2UgfTogeyBmdWxsV2lkdGg/OiBib29sZWFuIH0pID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMScsIGZ1bGxXaWR0aCAmJiAndy1mdWxsIGdhcC0yJyl9XG5cdFx0XHRvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdD5cblx0XHRcdDxEb3dubG9hZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdHtmdWxsV2lkdGggPyAoXG5cdFx0XHRcdGAke3QoJ2V4cG9ydCcpfSBDYWxlbmRhciAoLmljcylgXG5cdFx0XHQpIDogKFxuXHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gQDR4bC9iYXNlLWhlYWRlcjppbmxpbmVcIj57dCgnZXhwb3J0Jyl9PC9zcGFuPlxuXHRcdFx0KX1cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGlmIChoZWFkZXJDb21wb25lbnQpIHtcblx0XHRyZXR1cm4gaGVhZGVyQ29tcG9uZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWJldHdlZW4gZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRcdGhlYWRlckNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktc3RhcnRcIj5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuXHRcdFx0XHRcdDxUaXRsZUNvbnRlbnQgLz5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LXN0YXJ0IEB4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWNlbnRlciBnYXAtMSBANHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktZW5kIG92ZXJmbG93LXgtYXV0b1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIEBtZC9iYXNlLWhlYWRlcjpmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGdhcC0xXCI+XG5cdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImp1c3RpZnktZW5kXCJcblx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtzZXRWaWV3fVxuXHRcdFx0XHRcdFx0XHRvbk5leHQ9e25leHRQZXJpb2R9XG5cdFx0XHRcdFx0XHRcdG9uUHJldmlvdXM9e3ByZXZQZXJpb2R9XG5cdFx0XHRcdFx0XHRcdG9uVG9kYXk9e3RvZGF5fVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVmYXVsdFwiXG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8RXhwb3J0QnV0dG9uIC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIEBtZC9iYXNlLWhlYWRlcjpoaWRkZW5cIj5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0gb3Blbj17bW9iaWxlTWVudU9wZW59PlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJzbVwiIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TWVudSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwiZW5kXCIgY2xhc3NOYW1lPVwidy1bMjQwcHhdIHAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KHYpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRWaWV3KHYpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25OZXh0PXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV4dFBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXZQZXJpb2QoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uVG9kYXk9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b2RheSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdyaWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicHQtMiBib3JkZXItdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXhwb3J0QnV0dG9uIGZ1bGxXaWR0aCAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IENSTEYgPSAnXFxyXFxuJ1xuXG5jb25zdCBVVENfVlRJTUVaT05FID0gW1xuXHQnQkVHSU46VlRJTUVaT05FJyxcblx0J1RaSUQ6VVRDJyxcblx0J0JFR0lOOlNUQU5EQVJEJyxcblx0J0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJyxcblx0J1RaTkFNRTpVVEMnLFxuXHQnVFpPRkZTRVRGUk9NOiswMDAwJyxcblx0J1RaT0ZGU0VUVE86KzAwMDAnLFxuXHQnRU5EOlNUQU5EQVJEJyxcblx0J0VORDpWVElNRVpPTkUnLFxuXS5qb2luKENSTEYpXG5cbmNvbnN0IGVzY2FwZVRleHQgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIHRleHRcblx0XHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpXG5cdFx0LnJlcGxhY2VBbGwoJzsnLCAnXFxcXDsnKVxuXHRcdC5yZXBsYWNlQWxsKCcsJywgJ1xcXFwsJylcblx0XHQucmVwbGFjZUFsbCgnXFxuJywgJ1xcXFxuJylcblx0XHQucmVwbGFjZUFsbCgnXFxyJywgJycpXG59XG5cbmNvbnN0IGZvcm1hdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMsIGlzQWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gaXNBbGxEYXlcblx0XHQ/IGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG5cdFx0OiBkYXRlLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxufVxuXG5jb25zdCBnZXRVSUQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcbn1cblxuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCBycnVsZVN0cmluZyA9IG5ldyBSUnVsZShcblx0XHRcdHJydWxlT3B0aW9ucyBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIFJSdWxlPlswXVxuXHRcdCkudG9TdHJpbmcoKVxuXHRcdHJldHVybiAoXG5cdFx0XHRycnVsZVN0cmluZy5zcGxpdCgnXFxuJykuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSkgfHwgJydcblx0XHQpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiAnJ1xuXHR9XG59XG5cbmNvbnN0IGNvbnZlcnRFdmVudFRvVkV2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0Y29uc3QgdGltZXN0YW1wID0gZGF5anMoKS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcblx0Y29uc3QgZGF0ZVBhcmFtID0gZXZlbnQuYWxsRGF5ID8gJztWQUxVRT1EQVRFJyA6ICcnXG5cdGNvbnN0IHJydWxlID0gZXZlbnQucnJ1bGUgPyBmb3JtYXRSUnVsZShldmVudC5ycnVsZSkgOiAnJ1xuXG5cdGNvbnN0IGV4ZGF0ZXMgPSBldmVudC5leGRhdGVzPy5sZW5ndGhcblx0XHQ/IGV2ZW50LmV4ZGF0ZXMubWFwKChkKSA9PiBmb3JtYXREYXRlKGRheWpzKGQpLCBldmVudC5hbGxEYXkpKS5qb2luKCcsJylcblx0XHQ6IG51bGxcblxuXHRjb25zdCByZWN1cnJlbmNlSWQgPSBldmVudC5yZWN1cnJlbmNlSWRcblx0XHQ/IGZvcm1hdERhdGUoZGF5anMoZXZlbnQucmVjdXJyZW5jZUlkKSwgZXZlbnQuYWxsRGF5KVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IGxpbmVzID0gW1xuXHRcdCdCRUdJTjpWRVZFTlQnLFxuXHRcdGBVSUQ6JHtnZXRVSUQoZXZlbnQpfWAsXG5cdFx0YERUU1RBUlQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LnN0YXJ0LCBldmVudC5hbGxEYXkpfWAsXG5cdFx0YERURU5EJHtkYXRlUGFyYW19OiR7Zm9ybWF0RGF0ZShldmVudC5lbmQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgU1VNTUFSWToke2VzY2FwZVRleHQoZXZlbnQudGl0bGUpfWAsXG5cdFx0ZXZlbnQuZGVzY3JpcHRpb24gJiYgYERFU0NSSVBUSU9OOiR7ZXNjYXBlVGV4dChldmVudC5kZXNjcmlwdGlvbil9YCxcblx0XHRldmVudC5sb2NhdGlvbiAmJiBgTE9DQVRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmxvY2F0aW9uKX1gLFxuXHRcdHJydWxlLFxuXHRcdGV4ZGF0ZXMgJiYgYEVYREFURToke2V4ZGF0ZXN9YCxcblx0XHRyZWN1cnJlbmNlSWQgJiYgYFJFQ1VSUkVOQ0UtSUQ6JHtyZWN1cnJlbmNlSWR9YCxcblx0XHRgRFRTVEFNUDoke3RpbWVzdGFtcH1gLFxuXHRcdGBDUkVBVEVEOiR7dGltZXN0YW1wfWAsXG5cdFx0YExBU1QtTU9ESUZJRUQ6JHt0aW1lc3RhbXB9YCxcblx0XHQnU1RBVFVTOkNPTkZJUk1FRCcsXG5cdFx0J1NFUVVFTkNFOjAnLFxuXHRcdCdUUkFOU1A6T1BBUVVFJyxcblx0XHQnRU5EOlZFVkVOVCcsXG5cdF1cblxuXHRyZXR1cm4gbGluZXMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oQ1JMRilcbn1cblxuY29uc3QgZmlsdGVyRXZlbnRzID0gKGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3Qgc2VlblVJRHMgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG5cdHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHVpZCA9IGdldFVJRChldmVudClcblx0XHRjb25zdCBpc0Jhc2VSZWN1cnJpbmcgPSBldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkXG5cdFx0Y29uc3QgaXNNb2RpZmllZEluc3RhbmNlID0gZXZlbnQucmVjdXJyZW5jZUlkICYmICFldmVudC5ycnVsZVxuXG5cdFx0aWYgKGlzQmFzZVJlY3VycmluZykge1xuXHRcdFx0c2VlblVJRHMuYWRkKHVpZClcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdGlmIChpc01vZGlmaWVkSW5zdGFuY2UpIHtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXHRcdHJldHVybiAhZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCAmJiAhc2VlblVJRHMuaGFzKHVpZClcblx0fSlcbn1cblxuZXhwb3J0IGNvbnN0IGV4cG9ydFRvSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogc3RyaW5nID0+IHtcblx0Y29uc3QgbmFtZSA9IGVzY2FwZVRleHQoY2FsZW5kYXJOYW1lKVxuXHRjb25zdCB2ZXZlbnRTdHJpbmdzID0gZmlsdGVyRXZlbnRzKGV2ZW50cykubWFwKGNvbnZlcnRFdmVudFRvVkV2ZW50KVxuXG5cdHJldHVybiBbXG5cdFx0J0JFR0lOOlZDQUxFTkRBUicsXG5cdFx0J1ZFUlNJT046Mi4wJyxcblx0XHQnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nLFxuXHRcdCdDQUxTQ0FMRTpHUkVHT1JJQU4nLFxuXHRcdCdNRVRIT0Q6UFVCTElTSCcsXG5cdFx0YFgtV1ItQ0FMTkFNRToke25hbWV9YCxcblx0XHRgWC1XUi1DQUxERVNDOkV4cG9ydGVkIGZyb20gJHtuYW1lfWAsXG5cdFx0VVRDX1ZUSU1FWk9ORSxcblx0XHQuLi52ZXZlbnRTdHJpbmdzLFxuXHRcdCdFTkQ6VkNBTEVOREFSJyxcblx0XS5qb2luKENSTEYpXG59XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG5cdGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuXHRjb25zdCBibG9iID0gbmV3IEJsb2IoW2V4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKV0sIHtcblx0XHR0eXBlOiAndGV4dC9jYWxlbmRhcjtjaGFyc2V0PXV0Zi04Jyxcblx0fSlcblx0Y29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuXHRjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBmaWxlbmFtZS5lbmRzV2l0aCgnLmljcycpXG5cdFx0PyBmaWxlbmFtZVxuXHRcdDogYCR7ZmlsZW5hbWV9Lmljc2BcblxuXHRjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG5cdGxpbmsuaHJlZiA9IHVybFxuXHRsaW5rLmRvd25sb2FkID0gbm9ybWFsaXplZEZpbGVuYW1lXG5cblx0ZG9jdW1lbnQuYm9keS5hcHBlbmQobGluaylcblx0bGluay5jbGljaygpXG5cdGxpbmsucmVtb3ZlKClcblx0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZXRDdXJyZW50RGF0ZSwgdCwgZmlyc3REYXlPZldlZWsgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHRcdGN1cnJlbnREYXRlOiBjdHguY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjdHguc2V0Q3VycmVudERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oKCkgPT4gTU9OVEhfS0VZUy5tYXAoKGtleSkgPT4gdChrZXkpKSwgW3RdKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXHRjb25zdCB5ZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDExIH0sIChfLCBpKSA9PiBjdXJyZW50WWVhciAtIDUgKyBpKVxuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRjb25zdCBzZWxlY3REYXRlID0gKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG5cdFx0c2V0Q3VycmVudERhdGUoZGF0ZSlcblx0XHRzZXRPcGVuUG9wb3ZlcihudWxsKVxuXHR9XG5cblx0Y29uc3QgcmVuZGVyTW9udGhDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7bW9udGhzLm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRrZXk9e21vbnRofVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoY3VycmVudERhdGUubW9udGgoaW5kZXgpKX1cblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e21vbnRofVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyWWVhckNvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHt5ZWFycy5tYXAoKHllYXIpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRrZXk9e3llYXJ9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS55ZWFyKHllYXIpKX1cblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3llYXJ9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJXZWVrQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcblx0XHRcdFx0Y29uc3Qgd2Vla0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgzLCAnd2VlaycpLmFkZChpLCAnd2VlaycpXG5cdFx0XHRcdGNvbnN0IGRheXMgPSBnZXRXZWVrRGF5cyh3ZWVrRGF0ZSwgZmlyc3REYXlPZldlZWspXG5cdFx0XHRcdGNvbnN0IHN0YXJ0ID0gZGF5c1swXVxuXHRcdFx0XHRjb25zdCBlbmQgPSBkYXlzWzZdXG5cdFx0XHRcdGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgY3Jvc3Nlc01vbnRoID0gc3RhcnQubW9udGgoKSAhPT0gZW5kLm1vbnRoKClcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0aXNDdXJyZW50V2VlayAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRrZXk9e3N0YXJ0LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57YCR7c3RhcnQuZm9ybWF0KCdNTU0gRCcpfSAtICR7ZW5kLmZvcm1hdCgnRCcpfWB9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHR7Y3Jvc3Nlc01vbnRoICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJtbC0wLjUgdGV4dC14cyBvcGFjaXR5LTcwXCI+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NJyl9LSR7ZW5kLmZvcm1hdCgnTU1NJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJEYXlDb250ZW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpcnN0RGF5ID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRcdGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheSA9IGZpcnN0RGF5LmRhdGUoaSArIDEpXG5cdFx0XHRcdFx0Y29uc3QgaXNDdXJyZW50RGF5ID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdFx0XHRpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7aXNUb2RheSAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHRjb25zdCBwb3BvdmVycyA9IFtcblx0XHR7XG5cdFx0XHRpZDogJ21vbnRoJyxcblx0XHRcdGhpZGRlbjogdmlldyA9PT0gJ3llYXInLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJNb250aENvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3llYXInLFxuXHRcdFx0aGlkZGVuOiBmYWxzZSxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVknKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyWWVhckNvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ3dlZWsnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnd2VlaycsXG5cdFx0XHR0aXRsZTogYCR7d2Vla0RheXNbMF0uZm9ybWF0KCdNTU0gRCcpfSAtICR7d2Vla0RheXNbNl0uZm9ybWF0KCdNTU0gRCcpfWAsXG5cdFx0XHRyZW5kZXI6IHJlbmRlcldlZWtDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICdkYXknLFxuXHRcdFx0aGlkZGVuOiB2aWV3ICE9PSAnZGF5Jyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyRGF5Q29udGVudCxcblx0XHR9LFxuXHRdXG5cblx0cmV0dXJuIHBvcG92ZXJzXG5cdFx0LmZpbHRlcigocCkgPT4gIXAuaGlkZGVuKVxuXHRcdC5tYXAoKHBvcG92ZXIpID0+IChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGtleT17cG9wb3Zlci5pZH1cblx0XHRcdFx0b25PcGVuQ2hhbmdlPXsob3BlbikgPT4gc2V0T3BlblBvcG92ZXIob3BlbiA/IHBvcG92ZXIuaWQgOiBudWxsKX1cblx0XHRcdFx0b3Blbj17b3BlblBvcG92ZXIgPT09IHBvcG92ZXIuaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake3BvcG92ZXIuaWR9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3BvcG92ZXIudGl0bGV9XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNDAgcC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cblx0XHRcdFx0XHRcdHtwb3BvdmVyLnJlbmRlcigpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxudHlwZSBWaWV3VHlwZSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuY29uc3QgQVZBSUxBQkxFX1ZJRVdTOiBWaWV3VHlwZVtdID0gWydkYXknLCAnd2VlaycsICdtb250aCcsICd5ZWFyJ11cblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcblx0Y3VycmVudFZpZXc6IFZpZXdUeXBlXG5cdG9uQ2hhbmdlOiAodmlldzogVmlld1R5cGUpID0+IHZvaWRcblx0b25Ub2RheT86ICgpID0+IHZvaWRcblx0b25OZXh0PzogKCkgPT4gdm9pZFxuXHRvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuXHR2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG5cdHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG5cdGN1cnJlbnRWaWV3LFxuXHRvbkNoYW5nZSxcblx0dmFyaWFudCA9ICdkZWZhdWx0Jyxcblx0c2l6ZSA9ICdzbScsXG5cdGNsYXNzTmFtZSxcblx0b25Ub2RheSxcblx0b25OZXh0LFxuXHRvblByZXZpb3VzLFxufSkgPT4ge1xuXHRjb25zdCB7IHQsIHJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0dDogY29udGV4dC50LFxuXHRcdHJlc291cmNlczogY29udGV4dC5yZXNvdXJjZXMsXG5cdH0pKVxuXHRjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gcmVzb3VyY2VzICYmIHJlc291cmNlcy5sZW5ndGggPiAwXG5cblx0Ly8gRXh0cmFjdCBjb21tb24gYnV0dG9uIGNsYXNzTmFtZSBsb2dpYyB0byBhIGZ1bmN0aW9uXG5cdGNvbnN0IGdldEJ1dHRvbkNsYXNzTmFtZSA9ICh2aWV3VHlwZTogVmlld1R5cGUpID0+IHtcblx0XHRyZXR1cm4gY24oXG5cdFx0XHQvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuXHRcdFx0aXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcblx0XHRcdC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcblx0XHRcdGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0aXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25OZXh0fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHQ8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PC9CdXR0b24+XG5cblx0XHRcdHtBVkFJTEFCTEVfVklFV1MubWFwKCh0eXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdFx0XHRpZiAoaXNSZXNvdXJjZUNhbGVuZGFyICYmIHR5cGUgPT09ICd5ZWFyJykge1xuXHRcdFx0XHRcdHJldHVybiBudWxsXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKHR5cGUpfVxuXHRcdFx0XHRcdFx0a2V5PXt0eXBlfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gb25DaGFuZ2UodHlwZSl9XG5cdFx0XHRcdFx0XHRzaXplPXtzaXplfVxuXHRcdFx0XHRcdFx0dmFyaWFudD17Z2V0QnRuVmFyaWFudCh0eXBlKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7dCh0eXBlKX1cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cblx0XHRcdDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gc2l6ZT17c2l6ZX0gdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDogYGFsbGRheS1jb2wtJHtkYXkudG9JU09TdHJpbmcoKX0tJHtpbmRleH1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwnLCBjbGFzc2VzPy5yb3cpfSBkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCI+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdFwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17YGFsbC1kYXktcm93LSR7cmVzb3VyY2U/LmlkID8/ICdtYWluJ31gfVxuXHRcdFx0XHRpc0xhc3RSb3dcblx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlSb3cgPSBtZW1vKE5vTWVtb0FsbERheVJvdylcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJy4uL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtZXZlbnRzLWxheWVyJ1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRDb2x1bW4ge1xuXHRpZDogc3RyaW5nXG5cdGRheT86IGRheWpzLkRheWpzXG5cdGRheXM/OiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlOiAnZGF5JyB8ICdob3VyJ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0cmVuZGVyQ2VsbD86IChyb3c6IEhvcml6b250YWxHcmlkUm93UHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkUm93UHJvcHMge1xuXHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNvbHVtbnM/OiBIb3Jpem9udGFsR3JpZENvbHVtbltdXG5cdGFsbERheT86IGJvb2xlYW5cblx0c2hvd0RheU51bWJlcj86IGJvb2xlYW5cblx0aXNMYXN0Um93PzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9Ib3Jpem9udGFsR3JpZFJvdzogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRSb3dQcm9wcz4gPSAoe1xuXHRpZCxcblx0cmVzb3VyY2UsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdGNsYXNzTmFtZSxcblx0Y29sdW1ucyA9IFtdLFxuXHRhbGxEYXksXG5cdHNob3dEYXlOdW1iZXIgPSBmYWxzZSxcblx0aXNMYXN0Um93ID0gZmFsc2UsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzR3JvdXBlZCA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wuZGF5cylcblxuXHRjb25zdCByZW5kZXJFdmVudHNMYXllciA9IHVzZUNhbGxiYWNrKFxuXHRcdChkYXlzOiBkYXlqcy5EYXlqc1tdKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpXG5cdFx0fSxcblx0XHRbYWxsRGF5LCBkYXlOdW1iZXJIZWlnaHQsIGdyaWRUeXBlLCBpZCwgcmVzb3VyY2U/LmlkXVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSByZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17YGhvcml6b250YWwtcm93LSR7aWR9YH1cblx0XHQ+XG5cdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIChcblx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgc206dy00MCBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBoLWZ1bGxcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZT8uaWR9YH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7cmVuZGVyUmVzb3VyY2UgPyAoXG5cdFx0XHRcdFx0XHRyZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3cmFwLWJyZWFrLXdvcmQgdGV4dC1zbVwiPntyZXNvdXJjZT8udGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHQpfVxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LTEgZmxleFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoY29sLmRheSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcmlkQ2VsbFxuXHRcdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnZmxleC0xIHctMjAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5PXtjb2wuZGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cj17Z3JpZFR5cGUgPT09ICdob3VyJyA/IGNvbC5kYXkuaG91cigpIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuZGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNMYXN0Q29sID0gaW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggcmVsYXRpdmUgdy1mdWxsXCIga2V5PXtjb2wuaWR9PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHtjb2wuZGF5cz8ubWFwKChkYXkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdmbGV4LTEgdy0yMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IWlzTGFzdENvbCAmJiAnYm9yZGVyLXIhJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbC5jbGFzc05hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheT17ZGF5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdFx0XHR7cmVuZGVyRXZlbnRzTGF5ZXIoY29sLmRheXMpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJlxuXHRcdFx0XHRcdHJlbmRlckV2ZW50c0xheWVyKGNvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kYXkpLmZpbHRlcihCb29sZWFuKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRSb3cgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkUm93KVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRGF5TnVtYmVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2RheS1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnLi9kcm9wcGFibGUtY2VsbCdcblxuaW50ZXJmYWNlIEdyaWRQcm9wcyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0aG91cj86IG51bWJlciAvLyBPcHRpb25hbCBob3VyIGZvciBob3VyLWJhc2VkIGdyaWRzXG5cdG1pbnV0ZT86IG51bWJlciAvLyBPcHRpb25hbCBtaW51dGUgZm9yIG1vcmUgZ3JhbnVsYXIgdGltZSBzbG90c1xuXHRkYXlNYXhFdmVudHM/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciAvLyBPcHRpb25hbCByZXNvdXJjZSBJRCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgZGF5IGNlbGxzXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcblx0c2hvdWxkUmVuZGVyRXZlbnRzPzogYm9vbGVhbiAvLyBGbGFnIHRvIGRldGVybWluZSBpZiBldmVudHMgc2hvdWxkIGJlIHJlbmRlcmVkXG5cdGFsbERheT86IGJvb2xlYW4gLy8gRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGlzIGlzIGFuIGFsbC1kYXkgY2VsbFxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhbiAvLyBGbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgZGF5IG51bWJlclxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0dyaWRDZWxsOiBSZWFjdC5GQzxHcmlkUHJvcHM+ID0gKHtcblx0ZGF5LFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdGNsYXNzTmFtZSA9ICcnLFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRzaG91bGRSZW5kZXJFdmVudHMgPSB0cnVlLFxuXHRhbGxEYXkgPSBmYWxzZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0bGV0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuXHRcdFx0ZGF5LnN0YXJ0T2YoZ3JpZFR5cGUpLFxuXHRcdFx0ZGF5LmVuZE9mKGdyaWRUeXBlKVxuXHRcdClcblxuXHRcdGlmIChhbGxEYXkpIHtcblx0XHRcdHRvZGF5RXZlbnRzID0gdG9kYXlFdmVudHMuZmlsdGVyKChlKSA9PiBlLmFsbERheSlcblx0XHR9XG5cblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKSA/PyBbXVxuXG5cdFx0XHRyZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Ly8gVXNlIHJlc291cmNlLXNwZWNpZmljIGJ1c2luZXNzIGhvdXJzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGdsb2JhbFxuXHRjb25zdCBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHJlc291cmNlSWQgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnM6IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGJhc2VUZXN0SWQgPSBgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YFxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBgJHtiYXNlVGVzdElkfS0ke2hvdXJTdHJ9LSR7bW19YCA6IGJhc2VUZXN0SWRcblx0Ly8gRHJvcHBhYmxlIElEIG11c3QgdXNlIHRvSVNPU3RyaW5nKCkgKG5vdCBZWVlZLU1NLUREKSBzbyBlYWNoIHRpbWUgc2xvdFxuXHQvLyBnZXRzIGEgdW5pcXVlIElEIGluIEBkbmQta2l0J3MgcmVnaXN0cnkuIFlZWVktTU0tREQgc3RyaXBzIHRoZSB0aW1lLFxuXHQvLyBjYXVzaW5nIGFsbCBjZWxscyBvbiB0aGUgc2FtZSBkYXkgdG8gY29sbGlkZS5cblx0Y29uc3QgZHJvcHBhYmxlSWQgPSBgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke2FsbERheSA/ICctYWxsZGF5JyA6ICcnfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gXG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERyb3BwYWJsZUNlbGxcblx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0gcmVsYXRpdmUgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIG9ubHk6Ym9yZGVyLXIgYm9yZGVyLWInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgZW1wdHktJHtyb3dJbmRleH0tJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCB9fVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXG5cdFx0XHRcdFx0XHRcdHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuXHRcdFx0XHRcdFx0XHR7aGFzSGlkZGVuRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L3VzZVNlbWFudGljRWxlbWVudHM6IFVzaW5nIGRpdiBhcyBidXR0b25cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgc2hyaW5rLTAgbXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdG9uS2V5RG93bj17KGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJJbmRleD17MH1cblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9Ecm9wcGFibGVDZWxsPlxuXG5cdFx0XHR7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG5cdFx0XHQ8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG5cdFx0PC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsID0gbWVtbyhOb01lbW9HcmlkQ2VsbCkgYXMgdHlwZW9mIE5vTWVtb0dyaWRDZWxsXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHtcblx0ZGF0ZSxcblx0bG9jYWxlID0gJ2VuJyxcblx0Y2xhc3NOYW1lLFxufSkgPT4ge1xuXHRjb25zdCBpc1RvZGF5ID0gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17XG5cdFx0XHRcdGlzVG9kYXkgPyAnZGF5LW51bWJlci10b2RheScgOiBgZGF5LW51bWJlci0ke2RhdGUuZm9ybWF0KCdEJyl9YFxuXHRcdFx0fVxuXHRcdD5cblx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7XG5cdERpYWxvZyxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG5cdGRheTogZGF5anMuRGF5anNcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7XG5cdFx0b3BlbjogKCkgPT4gdm9pZFxuXHRcdGNsb3NlOiAoKSA9PiB2b2lkXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG5cdH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuXHRcdHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0aXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuXHRpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuXHRcdHJldHVybiAncm91bmRlZC1ub25lJ1xuXHR9XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG5cdH1cblx0cmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuXHRlbGVtZW50SWQsXG5cdGV2ZW50LFxuXHRjbGFzc05hbWUsXG5cdHN0eWxlLFxuXHRkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuXHRlbGVtZW50SWQ6IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuXHRjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhpc1RydW5jYXRlZFN0YXJ0LCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG5cdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdD8gZGlzYWJsZUV2ZW50Q2xpY2tcblx0XHRcdFx0XHRcdD8gJ2N1cnNvci1kZWZhdWx0J1xuXHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0OiAnY3Vyc29yLWdyYWInLFxuXHRcdFx0XHRpc0RyYWdnaW5nICYmXG5cdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0J2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRsYXlvdXQ9e3RydWV9XG5cdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0b25DbGljaz17KGUpID0+IHtcblx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9fVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdFx0dHJhbnNpdGlvbktleT17ZWxlbWVudElkfVxuXHRcdFx0ey4uLmF0dHJpYnV0ZXN9XG5cdFx0XHR7Li4ubGlzdGVuZXJzfVxuXHRcdD5cblx0XHRcdHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cblx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHR2aWV3LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHtcblx0XHRcdHR5cGUsXG5cdFx0XHRkYXRlLFxuXHRcdFx0aG91cixcblx0XHRcdG1pbnV0ZSxcblx0XHRcdHJlc291cmNlSWQsXG5cdFx0XHRhbGxEYXksXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGRpc2FibGVkLFxuXHR9KVxuXG5cdGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXG5cdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXJ0ID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuXHRcdGxldCBlbmQgPSBzdGFydC5jbG9uZSgpXG5cdFx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG5cdFx0fSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG5cdFx0fVxuXG5cdFx0b25DZWxsQ2xpY2soeyBzdGFydCwgZW5kLCByZXNvdXJjZUlkLCBhbGxEYXkgfSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub1N0YXRpY0VsZW1lbnRJbnRlcmFjdGlvbnM6IFRoZSBjZWxsIGlzIGludGVyYWN0aXZlIGZvciBldmVudCBjcmVhdGlvblxuXHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlS2V5V2l0aENsaWNrRXZlbnRzOiBLZXkgZXZlbnRzIGFyZSBoYW5kbGVkIGJ5IHBhcmVudCBjb21wb25lbnRzXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2Ryb3BwYWJsZS1jZWxsJyxcblx0XHRcdFx0Y2xhc3NOYW1lLFxuXHRcdFx0XHRpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG5cdFx0XHRcdGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0ZGlzYWJsZWQgJiYgKGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FKVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtZGlzYWJsZWQ9e2Rpc2FibGVkLnRvU3RyaW5nKCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdGRhdGEtdmlldz17dmlld31cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVyUmVzb3VyY2UgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7cmVuZGVyUmVzb3VyY2Vcblx0XHRcdFx0PyByZW5kZXJSZXNvdXJjZShyZXNvdXJjZSlcblx0XHRcdFx0OiAoY2hpbGRyZW4gPz8gKFxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHJlc291cmNlSWQsXG5cdGRheU51bWJlckhlaWdodCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0YWxsRGF5LFxufSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cblx0Y29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtbGVmdD17ZXZlbnQubGVmdH1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRkYXRhLXRvcD17ZXZlbnQudG9wfVxuXHRcdFx0XHRcdFx0ZGF0YS13aWR0aD17ZXZlbnQud2lkdGh9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla1N0YXJ0ID0gZGF5cy5hdCgwKS5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuXHRcdFx0XHRyZXNvdXJjZUV2ZW50cy5zb21lKChlKSA9PiBTdHJpbmcoZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0d2Vla0V2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChlKSA9PiAhIWUuYWxsRGF5ID09PSBhbGxEYXkpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdlZWtFdmVudHNcblx0fSwgW1xuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHR3ZWVrU3RhcnQsXG5cdFx0d2Vla0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBHZXQgYWxsIGV2ZW50cyB0aGF0IGludGVyc2VjdCB3aXRoIHRoaXMgd2Vla1xuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtkYXlzLCBkYXlNYXhFdmVudHMsIGRheU51bWJlckhlaWdodCwgZXZlbnRTcGFjaW5nLCBldmVudHMsIGdyaWRUeXBlXSlcblxuXHRyZXR1cm4gcG9zaXRpb25lZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQge1xuXHREQVlfTlVNQkVSX0hFSUdIVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuXHRsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuXHR0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHRoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuXHRwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG5cdGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBzdGFydFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGVuZFxufVxuXG5pbnRlcmZhY2UgR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRldmVudFNwYWNpbmc/OiBudW1iZXIgLy8gQ3VzdG9tIHZlcnRpY2FsIHNwYWNpbmcgYmV0d2VlbiBldmVudHMgKGRlZmF1bHRzIHRvIEdBUF9CRVRXRUVOX0VMRU1FTlRTKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59OiBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMpID0+IHtcblx0Ly8gRm9yIGhvdXItYmFzZWQgZ3JpZHMsIHVzZSBhY3R1YWwgZmlyc3QvbGFzdCBob3VycyBmcm9tIGRheXMgYXJyYXlcblx0Ly8gRm9yIGRheS1iYXNlZCBncmlkcywgdXNlIHN0YXJ0L2VuZCBvZiBkYXkgdG8gY2FwdHVyZSBhbGwgZXZlbnRzXG5cdGNvbnN0IGZpcnN0RGF5ID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5cy5hdCgwKS5zdGFydE9mKCdob3VyJykgOiBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBkYXlzLmF0KC0xKS5lbmRPZignaG91cicpIDogZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cdGNvbnN0IGRheUNvdW50ID0gZGF5cy5sZW5ndGhcblxuXHQvLyBTZXBhcmF0ZSBtdWx0aS1kYXkgYW5kIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGNvbnN0IG11bHRpRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPiAwKVxuXHRjb25zdCBzaW5nbGVEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuXHRcdChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA9PT0gMFxuXHQpXG5cblx0Ly8gU29ydCBtdWx0aS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUsIHRoZW4gYnkgZHVyYXRpb25cblx0Y29uc3Qgc29ydGVkTXVsdGlEYXkgPSBbLi4ubXVsdGlEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcblx0XHRjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0XHRpZiAoc3RhcnREaWZmICE9PSAwKSB7XG5cdFx0XHRyZXR1cm4gc3RhcnREaWZmXG5cdFx0fVxuXHRcdHJldHVybiBiLmVuZC5kaWZmKGIuc3RhcnQpIC0gYS5lbmQuZGlmZihhLnN0YXJ0KSAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG5cdH0pXG5cblx0Ly8gU29ydCBzaW5nbGUtZGF5IGV2ZW50cyBieSBzdGFydCB0aW1lXG5cdGNvbnN0IHNvcnRlZFNpbmdsZURheSA9IFsuLi5zaW5nbGVEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+XG5cdFx0YS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdClcblxuXHQvLyBDcmVhdGUgZGF5Q291bnQgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG5cdGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG5cdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRncmlkW3Jvd10gPSBbXVxuXHRcdGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGRheUNvdW50OyBjb2wrKykge1xuXHRcdFx0Z3JpZFtyb3ddW2NvbF0gPSB7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXG5cdC8vIFN0ZXAgMTogQXNzaWduIHBvc2l0aW9ucyB0byBtdWx0aS1kYXkgZXZlbnRzIGZpcnN0XG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkTXVsdGlEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHRjb25zdCBhZGp1c3RlZEVuZCA9XG5cdFx0XHRncmlkVHlwZSA9PT0gJ2hvdXInID8gZXZlbnQuZW5kLnN1YnRyYWN0KDEsICdtaW51dGUnKSA6IGV2ZW50LmVuZFxuXHRcdGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGFkanVzdGVkRW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLCBsYXN0RGF5KVxuXHRcdGNvbnN0IHN0YXJ0Q29sID0gTWF0aC5tYXgoMCwgZXZlbnRTdGFydC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cdFx0Y29uc3QgZW5kQ29sID0gTWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudEVuZC5kaWZmKGZpcnN0RGF5LCBncmlkVHlwZSkpXG5cblx0XHQvLyBEZXRlY3QgaWYgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBib3VuZGFyaWVzXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQmVmb3JlKGZpcnN0RGF5KVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZXZlbnQuZW5kLnN0YXJ0T2YoZ3JpZFR5cGUpLmlzQWZ0ZXIobGFzdERheSlcblxuXHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgZXZlbnQgc3RhcnRpbmcgZnJvbSBpdHMgb3JpZ2luYWwgc3RhcnQgY29sdW1uXG5cdFx0bGV0IHBsYWNlZFN1Y2Nlc3NmdWxseSA9IGZhbHNlXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRsZXQgYXNzaWduZWRSb3cgPSAtMVxuXHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGNhblBsYWNlKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnQgdG8gYWxsIGl0cyBjb2x1bW5zXG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Zm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdGdyaWRbYXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcblx0XHRcdGNvbnN0IHNwYW5EYXlzID0gZW5kQ29sIC0gc3RhcnRDb2wgKyAxXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0d2lkdGg6IChzcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdH1cblxuXHRcdC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuXHRcdGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG5cdFx0XHRmb3IgKFxuXHRcdFx0XHRsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcblx0XHRcdFx0dHJ5U3RhcnRDb2wrK1xuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cblx0XHRcdFx0bGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcblx0XHRcdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0XHRcdGxldCBjYW5QbGFjZSA9IHRydWVcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRcdFx0XHRjYW5QbGFjZSA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRcdFx0dHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcblx0XHRcdFx0aWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0XHRcdGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRcdFx0Z3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcblx0XHRcdFx0XHRjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuXHRcdFx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGxlZnQ6ICh0cnlTdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0XHRcdHdpZHRoOiAodHJ1bmNhdGVkU3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR0b3A6XG5cdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBldmVudFNwYWNpbmcpLFxuXHRcdFx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRcdFx0cG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuXHRcdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHRcdFx0fSBhcyBQb3NpdGlvbmVkRXZlbnQpXG5cdFx0XHRcdFx0cGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuXHRcdFx0XHRcdGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdC8vIENsYW1wIGNvbCB0byB2YWxpZCBncmlkIGJvdW5kcyB0byBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgZ3JpZCBwb3NpdGlvbnNcblx0XHRjb25zdCBjb2wgPSBNYXRoLm1heChcblx0XHRcdDAsXG5cdFx0XHRNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdClcblxuXHRcdC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2Vcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cblx0XHQvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdGFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcblx0XHRpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG5cdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdGxlZnQ6IChjb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoMSAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdGRheU51bWJlckhlaWdodCArXG5cdFx0XHRcdFx0ZXZlbnRTcGFjaW5nICtcblx0XHRcdFx0XHRhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0aGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuXHRcdFx0XHRwb3NpdGlvbjogYXNzaWduZWRSb3csXG5cdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0LFxuXHRcdFx0XHRpc1RydW5jYXRlZEVuZCxcblx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFsbERheUNlbGxQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9BbGxEYXlDZWxsOiBSZWFjdC5GQzxBbGxEYXlDZWxsUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3ctMTYgYm9yZGVyLXIgc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc206dGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlDZWxsID0gbWVtbyhOb01lbW9BbGxEYXlDZWxsKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICcuLi9ncmlkLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVydGljYWxHcmlkQ29sUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdGRheTogZGF5anMuRGF5anNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRncmlkVHlwZSxcblx0Y2xhc3NOYW1lLFxuXHRyZW5kZXJDZWxsLFxuXHRub0V2ZW50cyxcblx0Y2VsbFNsb3RzID0gWzYwXSwgLy8gRGVmYXVsdCB0byBmdWxsIGhvdXIgc2xvdHNcblx0aXNMYXN0Q29sdW1uLFxufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctNTAgYmctYmFja2dyb3VuZCByZWxhdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGB2ZXJ0aWNhbC1jb2wtJHtpZH1gfVxuXHRcdD5cblx0XHRcdHsvKiBUaW1lIHNsb3RzICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgcmVsYXRpdmUgZ3JpZFwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0Z3JpZFRlbXBsYXRlUm93czogYHJlcGVhdCgke2RheXMubGVuZ3RofSwgbWlubWF4KDAsIDFmcikpYCxcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRjb25zdCBkYXRlU3RyID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cblx0XHRcdFx0XHRpZiAocmVuZGVyQ2VsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID1cblx0XHRcdFx0XHRcdFx0aWQgPT09ICd0aW1lLWNvbCdcblx0XHRcdFx0XHRcdFx0XHQ/IGB2ZXJ0aWNhbC10aW1lLSR7aG91clN0cn1gXG5cdFx0XHRcdFx0XHRcdFx0OiBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tMDAke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7aWR9LSR7ZGF5SW5kZXh9LSR7aG91clN0cn1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGNlbGxTbG90cy5tYXAoKG1pbnV0ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbSA9IG1pbnV0ZSA9PT0gNjAgPyB1bmRlZmluZWQgOiBtaW51dGVcblx0XHRcdFx0XHRcdGNvbnN0IG1tID0gbSA9PT0gdW5kZWZpbmVkID8gJzAwJyA6IFN0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0ke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJyxcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSA9PT0gNjAgPyAnJyA6ICdib3JkZXItZGFzaGVkIGgtWzE1cHhdIG1pbi1oLVsxNXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2RheS5ob3VyKCl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtpZH0tJHtkYXlJbmRleH0tJHttbX1gfVxuXHRcdFx0XHRcdFx0XHRcdG1pbnV0ZT17bX1cblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfSAvLyBFdmVudHMgYXJlIHJlbmRlcmVkIGluIGEgc2VwYXJhdGUgbGF5ZXJcblx0XHRcdFx0XHRcdFx0XHRzaG91bGRSZW5kZXJFdmVudHM9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0pfVxuXG5cdFx0XHRcdHsvKiBFdmVudCBibG9ja3MgbGF5ZXIgKi99XG5cdFx0XHRcdHshbm9FdmVudHMgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHZlcnRpY2FsLWV2ZW50cy0ke2lkfWB9XG5cdFx0XHRcdFx0XHRcdGRheXM9e2RheXN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRDb2wgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRDb2xcbikgYXMgdHlwZW9mIE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZERheUV2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzIHtcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBsYXllciByZXByZXNlbnRzXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZEV2ZW50c0xheWVyOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRFdmVudHNMYXllclByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRyZXNvdXJjZUlkLFxuXHRyZXNvdXJjZSxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VQcm9jZXNzZWREYXlFdmVudHMoeyBkYXlzLCBncmlkVHlwZSwgcmVzb3VyY2VJZCB9KVxuXHRjb25zdCByYW5nZVN0YXJ0ID0gZGF5cy5hdCgwKVxuXHRjb25zdCByYW5nZUVuZCA9IGRheXMuYXQoLTEpPy5hZGQoMSwgZ3JpZFR5cGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdD5cblx0XHRcdHtyYW5nZVN0YXJ0ICYmIHJhbmdlRW5kICYmIChcblx0XHRcdFx0PEN1cnJlbnRUaW1lSW5kaWNhdG9yXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHt0b2RheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudEtleSA9IGBldmVudC0ke2V2ZW50LmlkfS0ke2luZGV4fS0ke2RheXMuYXQoMCkudG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IGRheWpzLkRheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogZGF5anMuRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IGRheWpzLkRheWpzXG5cdC8qKiBUaGUgcmVzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29sdW1uIChvcHRpb25hbCkgKi9cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBob3Jpem9udGFsIHJlZCBsaW5lIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSByZWxhdGl2ZSB0byBhIHZlcnRpY2FsIGNvbnRhaW5lcidzIHRpbWVsaW5lLlxuICogVGhlIGluZGljYXRvciBoYW5kbGVzIGl0cyBvd24gdmlzaWJpbGl0eSBiYXNlZCBvbiB3aGV0aGVyICdub3cnIGZhbGxzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gKiBTdXBwb3J0cyBjdXN0b20gcmVuZGVyaW5nIHZpYSByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciBmcm9tIGNvbnRleHQuXG4gKi9cbmNvbnN0IE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yID0gKHtcblx0cmFuZ2VTdGFydCxcblx0cmFuZ2VFbmQsXG5cdG5vdzogcHJvcE5vdyxcblx0cmVzb3VyY2UsXG59OiBDdXJyZW50VGltZUluZGljYXRvclByb3BzKSA9PiB7XG5cdC8vIEdldCByZW5kZXIgZnVuY3Rpb24gYW5kIGN1cnJlbnQgdmlldyBmcm9tIGNvbnRleHRcblx0Y29uc3QgeyByZW5kZXJDdXJyZW50VGltZUluZGljYXRvciwgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I6IHN0YXRlLnJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0dmlldzogc3RhdGUudmlldyxcblx0XHR9KVxuXHQpXG5cblx0Y29uc3Qgbm93ID0gcHJvcE5vdyA/PyBkYXlqcygpXG5cblx0Ly8gQ2hlY2sgaWYgY3VycmVudCB0aW1lIGZhbGxzIHdpdGhpbiB0aGlzIHJhbmdlXG5cdGNvbnN0IGlzV2l0aGluUmFuZ2UgPSBub3cuaXNTYW1lT3JBZnRlcihyYW5nZVN0YXJ0KSAmJiBub3cuaXNCZWZvcmUocmFuZ2VFbmQpXG5cblx0aWYgKCFpc1dpdGhpblJhbmdlKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IHRvdGFsRHVyYXRpb24gPSByYW5nZUVuZC5kaWZmKHJhbmdlU3RhcnQsICdtaW51dGUnKVxuXHRjb25zdCBtaW51dGVzRnJvbVN0YXJ0ID0gbm93LmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IHByb2dyZXNzID0gKG1pbnV0ZXNGcm9tU3RhcnQgLyB0b3RhbER1cmF0aW9uKSAqIDEwMFxuXG5cdC8vIElmIGN1c3RvbSByZW5kZXIgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdmlhIGNvbnRleHQsIHVzZSBpdFxuXHRpZiAocmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e3JlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yKHtcblx0XHRcdFx0XHRjdXJyZW50VGltZTogbm93LFxuXHRcdFx0XHRcdHJhbmdlU3RhcnQsXG5cdFx0XHRcdFx0cmFuZ2VFbmQsXG5cdFx0XHRcdFx0cHJvZ3Jlc3MsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0fSl9XG5cdFx0XHQ8Lz5cblx0XHQpXG5cdH1cblxuXHQvLyBEZWZhdWx0IGluZGljYXRvciByZW5kZXJpbmdcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgcmlnaHQtMCBoLTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0dG9wOiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdH19XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFRpbWVJbmRpY2F0b3IgPSBtZW1vKE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZGF5U3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGRheUVuZCA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXG5cdGNvbnN0IGV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGxldCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblx0XHRpZiAocmVzb3VyY2VJZCkge1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VFdmVudHMgPSBnZXRFdmVudHNGb3JSZXNvdXJjZShyZXNvdXJjZUlkKVxuXHRcdFx0ZGF5RXZlbnRzID0gZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdC8vIFZlcnRpY2FsIGdyaWRzIChEYXkvV2Vlay9SZXNvdXJjZSBWZXJ0aWNhbCkgbmV2ZXIgcmVuZGVyIGFsbC1kYXkgZXZlbnRzXG5cdFx0Ly8gYXMgdGhvc2UgYXJlIGhhbmRsZWQgYnkgdGhlIGFsbC1kYXktcm93IG9yIGFyZSBub3QgYXBwcm9wcmlhdGUgZm9yIHRoZSB0aW1lIGdyaWQuXG5cdFx0cmV0dXJuIGRheUV2ZW50cy5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcblx0fSwgW1xuXHRcdGRheVN0YXJ0LFxuXHRcdGRheUVuZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XSlcblxuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZERheUV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGdyaWRUeXBlLCBldmVudHNdKVxuXG5cdHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0Ly8gRW5zdXJlIGF0IGxlYXN0IDEgdW5pdCBkdXJhdGlvbiBmb3IgZGlzY3JldGUgZXZlbnRzXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0Ly8gU2tpcCBldmVudHMgdGhhdCBhcmUgY29tcGxldGVseSBvdXRzaWRlIHRoZSBncmlkXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG5cdFx0Ly8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpXG5cblx0XHRcdC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0XHRcdGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYkR1cmF0aW9uIC0gYUR1cmF0aW9uXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuXHRcdFx0cmV0dXJuIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHQvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcblx0XHRjb25zdCB0b3RhbEV2ZW50cyA9IHNvcnRlZENsdXN0ZXIubGVuZ3RoXG5cblx0XHQvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRcdC8vIEZld2VyIGV2ZW50cyA9IGxhcmdlciBpbmRpdmlkdWFsIG9mZnNldHMsIG1vcmUgZXZlbnRzID0gc21hbGxlciBvZmZzZXRzXG5cdFx0bGV0IG1heE9mZnNldDogbnVtYmVyXG5cdFx0aWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSAyNSAvLyAyNSUgb2Zmc2V0IGZvciAyIGV2ZW50c1xuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcblx0XHRcdG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDQpIHtcblx0XHRcdG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA3MCAvLyA3MCUgdG90YWwgZm9yIDUrIGV2ZW50c1xuXHRcdH1cblxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENsdXN0ZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gc29ydGVkQ2x1c3RlcltpXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcblx0XHRcdGxldCBsZWZ0OiBudW1iZXJcblx0XHRcdGxldCB3aWR0aDogbnVtYmVyXG5cdFx0XHRsZXQgekluZGV4OiBudW1iZXJcblxuXHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0Ly8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG5cdFx0XHRcdGxlZnQgPSAwXG5cdFx0XHRcdHdpZHRoID0gMTAwXG5cdFx0XHRcdHpJbmRleCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFN1YnNlcXVlbnQgZXZlbnRzIGFyZSBvZmZzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gdG90YWwgZXZlbnQgY291bnRcblx0XHRcdFx0bGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0XHR3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG5cdFx0XHRcdHpJbmRleCA9IGkgKyAxIC8vIEhpZ2hlciB6LWluZGV4IGZvciBldmVudHMgb24gdG9wXG5cdFx0XHR9XG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGxlZnQsXG5cdFx0XHRcdHdpZHRoLFxuXHRcdFx0XHR0b3AsXG5cdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0ekluZGV4LFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93IH0pID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLTEyIGJvcmRlci1iIHctZml0JywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IHctZnVsbCBib3JkZXItYiBtaW4taC0xMicsIGNsYXNzZXM/LmFsbERheSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWFsbC1kYXlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FsbERheVJvd31cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkQ29sLCB0eXBlIFZlcnRpY2FsR3JpZENvbFByb3BzIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWNvbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkUHJvcHMge1xuXHRjb2x1bW5zOiBWZXJ0aWNhbEdyaWRDb2xQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcblx0LyoqXG5cdCAqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcblx0c3R5bGUsXG59KSA9PiB7XG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcblx0XHRcdGFsbERheVJvdz17YWxsRGF5Um93fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6IGNsYXNzZXM/LmhlYWRlciwgYWxsRGF5OiBjbGFzc2VzPy5hbGxEYXkgfX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXI+XG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWEgKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0ey8qIERheSBjb2x1bW5zIHdpdGggdGltZSBzbG90cyAqL31cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdDxWZXJ0aWNhbEdyaWRDb2xcblx0XHRcdFx0XHRcdFx0a2V5PXtgJHtjb2x1bW4uaWR9LSR7aW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0ey4uLmNvbHVtbn1cblx0XHRcdFx0XHRcdFx0Y2VsbFNsb3RzPXtjZWxsU2xvdHN9XG5cdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0aXNMYXN0Q29sdW1uPXtpbmRleCA9PT0gY29sdW1ucy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+IHsvKiB2ZXJ0aWNhbCBzY3JvbGxiYXIgKi99XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+eycgJ31cblx0XHRcdFx0ey8qIGhvcml6b250YWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBkYXlqcy5EYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogZGF5anMuRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgRGF5VmlldyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6ICd3LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAndy1mdWxsJyxcblx0XHRcdFx0YWxsRGF5OiAndy1mdWxsJyxcblx0XHRcdH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIGNvbHVtbnNdfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGZsZXgtMSBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgbWluLWgtMTInfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cImRheS12aWV3LWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuXHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG5cdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0e2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBgd2Vlay0ke3dlZWtJbmRleH1gLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDogYGNvbC0ke2RheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5pbXBvcnQge1xuXHRIb3Jpem9udGFsR3JpZFJvdyxcblx0dHlwZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzLFxufSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1yb3cnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZFByb3BzIHtcblx0cm93czogSG9yaXpvbnRhbEdyaWRSb3dQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZyB9XG5cdGFsbERheT86IGJvb2xlYW5cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkOiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFByb3BzPiA9ICh7XG5cdHJvd3MsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXk6IHRvcExldmVsQWxsRGF5LFxuXHRncmlkVHlwZSxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cblx0Y29uc3QgaGVhZGVyID0gY2hpbGRyZW4gJiYgKFxuXHRcdDxIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciBjbGFzc05hbWU9e2NsYXNzZXM/LmhlYWRlcn0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2xcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtY29udGFpbmVyXCJcblx0XHQ+XG5cdFx0XHR7LyoqXG5cdFx0XHQgKiBoZWFkZXIgcm93IGlzIHJlbmRlcmVkIG91dHNpZGUgc2Nyb2xsIGFyZWEgZm9yIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdCAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2gtZnVsbCcsIGlzUmVndWxhckNhbGVuZGFyICYmICdvdmVyZmxvdy1hdXRvJyl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3sgY2xhc3NOYW1lOiAnKjpmbGV4ISAqOmZsZXgtY29sISAqOm1pbi1oLWZ1bGwnIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKipcblx0XHRcdFx0ICogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhXG5cdFx0XHRcdCAqICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0XHR7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC0xIHctZml0JywgY2xhc3Nlcz8uYm9keSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtYm9keVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7cm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkUm93XG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXtyb3cuYWxsRGF5ID8/IHRvcExldmVsQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGRheU51bWJlckhlaWdodD17ZGF5TnVtYmVySGVpZ2h0fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2luZGV4ID09PSByb3dzLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtyb3cuaWR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFudD17dmFyaWFudH1cblx0XHRcdFx0XHRcdFx0XHR7Li4ucm93fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIG9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIC8+XG5cdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgZmlyc3REYXlPZldlZWssIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUsIGN1cnJlbnREYXRlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTFcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0a2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17d2Vla0RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXkuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IENFTExfQ0xBU1MgPVxuXHQndy1bY2FsYygoMTAwJS00cmVtKS92YXIoLS12aXNpYmxlLWRheXMpKV0gbWluLXctW2NhbGMoKDEwMCUtNHJlbSkvdmFyKC0tdmlzaWJsZS1kYXlzKSldIGZsZXgtMSdcbmNvbnN0IExFRlRfQ09MX1dJRFRIID0gJ3ctMTAgc206dy0xNiBtaW4tdy0xMCBzbTptaW4tdy0xNiBtYXgtdy0xMCBzbTptYXgtdy0xNidcblxuZXhwb3J0IGNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDogJ3RpbWUtY29sJyxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6IGBzaHJpbmstMCAke0xFRlRfQ09MX1dJRFRIfSBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMGAsXG5cdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdGhvdXI6ICdudW1lcmljJyxcblx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KSxcblx0fVxuXG5cdC8vIEdlbmVyYXRlIHdlZWsgZGF5cyDigJQgZWFjaCBjb2x1bW4gZ2V0cyBpdHMgb3duIGhvdXJzIG9uIHRoZSBjb3JyZWN0IGRhdGVcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgdmlzaWJsZURheXMubWFwXSlcblxuXHRjb25zdCBjc3NWYXJzID0ge1xuXHRcdCctLXZpc2libGUtZGF5cyc6IHZpc2libGVEYXlzLmxlbmd0aCxcblx0fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e1xuXHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0Y2xhc3Nlcz17eyBjZWxsOiBDRUxMX0NMQVNTLCBzcGFjZXI6IExFRlRfQ09MX1dJRFRIIH19XG5cdFx0XHRcdFx0ZGF5cz17dmlzaWJsZURheXN9XG5cdFx0XHRcdC8+XG5cdFx0XHR9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCBoLTE4JywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c3R5bGU9e2Nzc1ZhcnN9XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9eydmbGV4IGgtZnVsbCBmbGV4LTEnfSBkYXRhLXRlc3RpZD1cIndlZWstdmlldy1oZWFkZXJcIj5cblx0XHRcdFx0ey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0xMCBzbTp3LTE2IGgtZnVsbCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXIgcC0yIGZsZXhcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14c1wiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57Y3VycmVudERhdGUud2VlaygpfTwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgY2VsbHMgKi99XG5cdFx0XHRcdHt2aXNpYmxlRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBgd2Vlay1kYXktaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIHctNTAgaC1mdWxsJyxcblx0XHRcdFx0XHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1oZWFkZXItJHtkYXkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdERhdGUoZGF5KVxuXHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J214LWF1dG8gbXQtMSBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRheTogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChkYXkudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgREFZX0hFQURFUl9OQU1FUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdGlmIChldmVudENvdW50ID09PSAwKSB7XG5cdFx0cmV0dXJuICcnXG5cdH1cblx0Y29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuXHRyZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRuYW1lOiBzdHJpbmdcblx0ZXZlbnRDb3VudDogbnVtYmVyXG5cdG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRkYXlLZXk6IHN0cmluZ1xuXHRpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG5cdGlzVG9kYXk6IGJvb2xlYW5cblx0aXNTZWxlY3RlZDogYm9vbGVhblxuXHRldmVudENvdW50OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IGRheWpzLkRheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG5cdFx0XHRcdGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG5cdFx0XHRcdGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBkYXlqcy5EYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdGtleT17bW9udGgubW9udGhLZXl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG5cdFx0XHRcdFx0XHRcdFx0ZGVsYXk9e2FuaW1hdGlvbkRlbGF5fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YG1vbnRoLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLXRpdGxlLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlVG9EYXRlKG1vbnRoLmRhdGUsICdtb250aCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e21vbnRoLm5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHRcdFx0XHR7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1bMXB4XSB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7REFZX0hFQURFUl9OQU1FUy5tYXAoKGRheU5hbWUpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGhlYWRlci0ke2RheU5hbWV9YH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheU5hbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpKX1cblxuXHRcdFx0XHRcdFx0XHRcdHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZURvdENvdW50XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldERheUNsYXNzTmFtZShkYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXlUZXN0SWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZGF5S2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiBuYXZpZ2F0ZVRvRGF0ZShkYXkuZGF0ZSwgJ2RheScsIGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXtnZXREYXlUb29sdGlwKGRheS5ldmVudENvdW50KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5kYXRlLmRhdGUoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7aGFzRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2dldEV2ZW50RG90Q2xhc3NOYW1lKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkb3RDb2xvcixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF5LmlzVG9kYXlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RvdENvbG9yfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvZGl2PlxuXHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHQ8L1Njcm9sbEFyZWE+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbENsaWNrSW5mbyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBHQVBfQkVUV0VFTl9FTEVNRU5UUyB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0Tm9kZVxuXHRldmVudHM/OiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0aW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcblx0aW5pdGlhbERhdGU/OiBkYXlqcy5EYXlqc1xuXHRyZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG5cdG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljaz86IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdG9uVmlld0NoYW5nZT86ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0b25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc/OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cblx0dmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZGVuRGF5cyxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmIChvbkNlbGxDbGljaykge1xuXHRcdFx0XHRvbkNlbGxDbGljayhpbmZvKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShpbmZvKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHRjdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudERhdGUsXG5cdFx0XHR2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuXHRcdFx0ZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG5cdFx0XHRyYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblx0XHRcdGN1cnJlbnRMb2NhbGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnRMb2NhbGUsXG5cdFx0XHRpc0V2ZW50Rm9ybU9wZW46IGNhbGVuZGFyRW5naW5lLmlzRXZlbnRGb3JtT3Blbixcblx0XHRcdHNlbGVjdGVkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRXZlbnQsXG5cdFx0XHRzZWxlY3RlZERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRGF0ZSxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjYWxlbmRhckVuZ2luZS5maXJzdERheU9mV2Vlayxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHNlbGVjdERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdERhdGUsXG5cdFx0XHRzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuXHRcdFx0bmV4dFBlcmlvZDogY2FsZW5kYXJFbmdpbmUubmV4dFBlcmlvZCxcblx0XHRcdHByZXZQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLnByZXZQZXJpb2QsXG5cdFx0XHR0b2RheTogY2FsZW5kYXJFbmdpbmUudG9kYXksXG5cdFx0XHRhZGRFdmVudDogY2FsZW5kYXJFbmdpbmUuYWRkRXZlbnQsXG5cdFx0XHR1cGRhdGVFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlRXZlbnQsXG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRvcGVuRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtLFxuXHRcdFx0Y2xvc2VFdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLmNsb3NlRXZlbnRGb3JtLFxuXHRcdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBjYWxlbmRhckVuZ2luZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0b25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0b25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dDogY2FsZW5kYXJFbmdpbmUudCxcblx0XHRcdHRpbWVGb3JtYXQsXG5cdFx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHR9KSxcblx0XHRbXG5cdFx0XHRjYWxlbmRhckVuZ2luZSxcblx0XHRcdHJlbmRlckV2ZW50LFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IERheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IHsgV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCB7IFllYXJWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMsXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogZGF5anMuRGF5anNbXSB8IGRheWpzLkRheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHRjb25zdCBjb2x1bW5zID0gZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRheSlcblx0XHRyZXR1cm4ge1xuXHRcdFx0aWQ6IGBjb2wtJHtpc0FycmF5ID8gZGF5WzBdPy5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IGRheS50b0lTT1N0cmluZygpfWAsXG5cdFx0XHRkYXk6IGlzQXJyYXkgPyB1bmRlZmluZWQgOiBkYXksXG5cdFx0XHRkYXlzOiBpc0FycmF5ID8gZGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzPy5jZWxsLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fVxuXHR9KVxuXG5cdGNvbnN0IHJvd3MgPSB2aXNpYmxlUmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IHJlc291cmNlLmlkLFxuXHRcdHRpdGxlOiByZXNvdXJjZS50aXRsZSxcblx0XHRyZXNvdXJjZTogcmVzb3VyY2UsXG5cdFx0Y29sdW1ucyxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8SG9yaXpvbnRhbEdyaWRcblx0XHRcdGNsYXNzZXM9e2NsYXNzZXN9XG5cdFx0XHRkYXlOdW1iZXJIZWlnaHQ9ezB9XG5cdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHR0aW1lRm9ybWF0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuXHQvLyBHZW5lcmF0ZSB0aW1lIGNvbHVtbnMgKGhvdXJseSBzbG90cylcblx0Y29uc3QgZGF5SG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGJvZHk6ICdtaW4tdy1mdWxsJyxcblx0XHRcdFx0Y2VsbDogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHR9fVxuXHRcdFx0ZGF5cz17ZGF5SG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0e2RheUhvdXJzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNOb3dIb3VyID0gY29sLmlzU2FtZShkYXlqcygpLCAnaG91cicpXG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtZGF5LWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnbWluLXctMjAgZmxleC0xIGJvcmRlci1iIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS1kYXktdGltZS1sYWJlbC0ke2NvbC5mb3JtYXQoJ0hIJyl9YH1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Z2V0VmlzaWJsZVJlc291cmNlcyxcblx0XHRjdXJyZW50TG9jYWxlLFxuXHRcdHRpbWVGb3JtYXQsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3QgaG91cnMgPSBnZXRWaWV3SG91cnMoe1xuXHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0YWxsRGF0ZXM6IFtjdXJyZW50RGF0ZV0sXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdC5maWx0ZXIoQm9vbGVhbikgYXMgKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW10sXG5cdH0pXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGBkYXktY29sLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtbY3VycmVudERhdGVdfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2ByZXNvdXJjZS1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2VsbFNsb3RzPXtbMCwgMTUsIDMwLCA0NV19XG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1kYXlcIlxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy01MCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlRGF5SG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtZGF5LWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZURheVZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZURheVZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlRGF5SG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aEhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG5cdGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88ZGF5anMuRGF5anNbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNb250aERheXMoY3VycmVudERhdGUpXG5cdH0sIFtjdXJyZW50RGF0ZV0pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0VmlzaWJsZVJlc291cmNlcyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdGNvbnN0IGRheXNJbk1vbnRoID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogY3VycmVudERhdGUuZGF5c0luTW9udGgoKSB9LFxuXHRcdChfLCBpKSA9PiBzdGFydE9mTW9udGguYWRkKGksICdkYXknKVxuXHQpXG5cblx0Y29uc3QgZmlyc3RDb2wgPSB7XG5cdFx0aWQ6ICdkYXRlLWNvbCcsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOlxuXHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRyZW5kZXJDZWxsOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0gcmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0aWQ6IGBtb250aC1jb2wtcmVzb3VyY2UtJHtyZXNvdXJjZS5pZH1gLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogJ3ctZnVsbCcsIGJvZHk6ICd3LWZ1bGwnIH19XG5cdFx0XHRjb2x1bW5zPXtbZmlyc3RDb2wsIC4uLmNvbHVtbnNdfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC12ZXJ0aWNhbC1ncmlkXCJcblx0XHQ+XG5cdFx0XHR7LyogSGVhZGVyICovfVxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9eydmbGV4IGJvcmRlci1iIGgtMTIgZmxleC0xJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS1tb250aC1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIGJvcmRlci1yIHctMTYgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIiAvPlxuXHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy01MCBmbGV4LTFcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlTW9udGhIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VNb250aFZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlTW9udGhIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHR0LFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGdldFZpc2libGVSZXNvdXJjZXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBidXNpbmVzcyBob3VycyBjb21iaW5lZFxuXHRjb25zdCByZXNvdXJjZUJ1c2luZXNzSG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRyZXNvdXJjZXMubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpLmZpbHRlcihCb29sZWFuKSBhcyAoXG5cdFx0XHRcdHwgQnVzaW5lc3NIb3Vyc1xuXHRcdFx0XHR8IEJ1c2luZXNzSG91cnNbXVxuXHRcdFx0KVtdLFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHQvLyBHZW5lcmF0ZSB0aW1lIGNvbHVtbnMgKGhvdXJseSBzbG90cylcblx0Y29uc3Qgd2Vla0hvdXJzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIHdlZWtEYXlzLm1hcCgoZGF5KSA9PlxuXHRcdFx0Z2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF5LFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHQpXG5cdH0sIFt3ZWVrRGF5cywgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHJlc291cmNlQnVzaW5lc3NIb3Vyc10pXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAnaC0yNCBtaW4tdy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXt3ZWVrSG91cnN9XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5Jylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1kYXlgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4LTEgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJyZXNvdXJjZS13ZWVrLWRheS1oZWFkZXJcIlxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInN0aWNreSBsZWZ0LTEvMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0e3dlZWtIb3Vycy5mbGF0KCkubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfS1ob3VyYFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0XHRcdFx0fSkuZm9ybWF0KGNvbC50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgaG91cnMgPSB1c2VNZW1vKFxuXHRcdCgpID0+XG5cdFx0XHRnZXRWaWV3SG91cnMoe1xuXHRcdFx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzOiByZXNvdXJjZXNcblx0XHRcdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdH0pLFxuXHRcdFtjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHdlZWtEYXlzLCByZXNvdXJjZXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHVzZU1lbW8oXG5cdFx0KCkgPT4gKHtcblx0XHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdFx0ZGF5czogaG91cnMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAnLFxuXHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHAtMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHMgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXJcIj5cblx0XHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KSxcblx0XHR9KSxcblx0XHRbaG91cnMsIGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXRdXG5cdClcblxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDogYGRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9LXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRcdFx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHRkYXksXG5cdFx0XHRcdFx0ZGF5czogZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHRcdFx0XHRcdC5tYXAoKHIpID0+IHIuYnVzaW5lc3NIb3Vycylcblx0XHRcdFx0XHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdFx0XHR9KSlcblx0XHRcdCksXG5cdFx0W3Jlc291cmNlcywgd2Vla0RheXMsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCB2aXNpYmxlRGF5cy5tYXBdXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1hbmltYXRlZGB9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke3Zpc2libGVEYXlzLmxlbmd0aH0gKiB2YXIoLS1zcGFjaW5nKSAqIDUwKWAsXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7cmVzb3VyY2UudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXRlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIGJvcmRlci1iIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBmb250LW1lZGl1bVwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGF5ID0gY29sLmRheVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWhvdXItJHtjb2wucmVzb3VyY2VJZH1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7ZGF5LmZvcm1hdCgnSEgnKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LWFuaW1hdGVkYH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlV2Vla1ZlcnRpY2FsIC8+XG5cdH1cblxuXHRyZXR1cm4gPFJlc291cmNlV2Vla0hvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm1EaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLWRpYWxvZydcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZURheVZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgdmlldyB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHZpZXdNYXAgPSB7XG5cdFx0bW9udGg6IDxSZXNvdXJjZU1vbnRoVmlldyBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxSZXNvdXJjZVdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcblx0XHRkYXk6IDxSZXNvdXJjZURheVZpZXcga2V5PVwiZGF5XCIgLz4sXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImlsYW15LXJlc291cmNlLWNhbGVuZGFyXCJcblx0XHQ+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZWRTZWN0aW9uIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV0gQGNvbnRhaW5lci9jYWxlbmRhci1ib2R5XCJcblx0XHRcdFx0XHRkaXJlY3Rpb249XCJob3Jpem9udGFsXCJcblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt2aWV3fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJib3JkZXIgaC1mdWxsIHctZnVsbFwiIGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItYm9keVwiPlxuXHRcdFx0XHRcdFx0e3ZpZXdNYXBbdmlld119XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdDxFdmVudEZvcm1EaWFsb2cgLz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQge1xuXHREQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0V0VFS19EQVlTX05VTUJFUl9NQVAsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5jb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoaGlkZGVuRGF5cz86IFdlZWtEYXlzW10pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGhpZGRlbkRheXMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGhpZGRlbkRheXM9e3RvSGlkZGVuRGF5c1NldChoaWRkZW5EYXlzKX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUlBLGdCQUFTLGVDSlQsZ0JBQVMsZUNBVCxzQkFDQSwwQ0FDQSw4Q0FDQSwrQ0FDQSwyQ0FDQSx1Q0FDQSx5Q0FDQSxvQ0FDQSx3Q0FDQSwyQ0FHQSxHQUFNLE9BQU8sRUFBTyxFQUNwQixHQUFNLE9BQU8sRUFBVSxFQUN2QixHQUFNLE9BQU8sRUFBYSxFQUMxQixHQUFNLE9BQU8sRUFBYyxFQUMzQixHQUFNLE9BQU8sRUFBUyxFQUN0QixHQUFNLE9BQU8sRUFBTSxFQUNuQixHQUFNLE9BQU8sRUFBUSxFQUNyQixHQUFNLE9BQU8sRUFBRyxFQUNoQixHQUFNLE9BQU8sRUFBVSxFQUV2QixJQUFlLEtDckJmLGVBQVMsY0FDVCxrQkFBUyx3QkFHRixTQUFTLENBQUUsSUFBSSxFQUFzQixDQUMzQyxPQUFPLEdBQVEsR0FBSyxDQUFNLENBQUMsRUFHckIsU0FBUyxFQUFRLENBQ3ZCLEVBQzBCLENBQzFCLEdBQUksSUFBUyxPQUNaLE9BRUQsR0FBSSxFQUFNLFFBQVEsQ0FBSSxFQUNyQixPQUFPLEVBRVIsSUFBTSxFQUFhLEVBQU0sQ0FBSSxFQUM3QixPQUFPLEVBQVcsUUFBUSxFQUFJLEVBQWEsT0FHckMsSUFBTSxHQUFXLENBQ3ZCLEVBQ0EsSUFDZ0IsQ0FDaEIsSUFBTSxFQUFTLElBQUssQ0FBSSxFQUN4QixRQUFXLEtBQU8sRUFDakIsT0FBTyxFQUFPLEdBRWYsT0FBTyxHQWlCRCxTQUFTLEVBTWYsQ0FBQyxFQUF5QyxDQUMxQyxHQUFJLENBQUMsR0FBVSxDQUFDLEVBQU8sT0FDdEIsTUFBTyxDQUFDLEVBR1QsT0FBTyxFQUFPLElBQUksQ0FBQyxJQUFVLENBQzVCLE1BQU8sSUFDSCxFQUNILE1BQU8sRUFBTSxRQUFRLEVBQU0sS0FBSyxFQUFJLEVBQU0sTUFBUSxFQUFNLEVBQU0sS0FBSyxFQUNuRSxJQUFLLEVBQU0sUUFBUSxFQUFNLEdBQUcsRUFBSSxFQUFNLElBQU0sRUFBTSxFQUFNLEdBQUcsQ0FDNUQsRUFDQSxFRmpERixJQUFNLEdBQWlCLENBQUMsSUFBeUIsQ0FDaEQsT0FBTyxJQUFJLEtBQ1YsS0FBSyxJQUNKLEVBQUUsS0FBSyxFQUNQLEVBQUUsTUFBTSxFQUNSLEVBQUUsS0FBSyxFQUNQLEVBQUUsS0FBSyxFQUNQLEVBQUUsT0FBTyxFQUNULEVBQUUsT0FBTyxFQUNULEVBQUUsWUFBWSxDQUNmLENBQ0QsR0FRSyxHQUFtQixDQUFDLEVBQVksSUFBd0MsQ0FDN0UsT0FBTyxFQUNMLEtBQUssRUFBSyxlQUFlLENBQUMsRUFDMUIsTUFBTSxFQUFLLFlBQVksQ0FBQyxFQUN4QixLQUFLLEVBQUssV0FBVyxDQUFDLEVBQ3RCLEtBQUssRUFBSyxZQUFZLENBQUMsRUFDdkIsT0FBTyxFQUFLLGNBQWMsQ0FBQyxFQUMzQixPQUFPLEVBQUssY0FBYyxDQUFDLEVBQzNCLFlBQVksRUFBSyxtQkFBbUIsQ0FBQyxHQUczQixHQUFtQixDQUFDLElBQWtDLENBQ2xFLE9BQU8sUUFBUSxFQUFNLE9BQVMsRUFBTSxjQUFnQixFQUFNLEdBQUcsR0FPeEQsR0FBb0IsQ0FBQyxJQUFpQyxDQUMzRCxPQUFPLEVBQU0sS0FBTyxHQUFHLEVBQU0scUJBVWpCLEdBQTBCLEVBQ3RDLFFBQ0EsZ0JBQ0EsWUFDQSxhQUNvRCxDQUVwRCxHQUFJLENBQUMsRUFBTSxNQUNWLE1BQU8sQ0FBQyxFQUdULEdBQUksQ0FJSCxJQUFNLEVBQWdCLEdBQWUsRUFBTSxLQUFLLEVBQzFDLEVBQWdCLEVBQU0sTUFBTSxNQUMvQixHQUFlLEVBQU0sRUFBTSxNQUFNLEtBQUssQ0FBQyxFQUN2QyxPQUVHLEVBQTRCLElBQzlCLEVBQU0sTUFDVCxRQUFTLEVBQ1QsTUFBTyxDQUNSLEVBQ00sRUFBTyxJQUFJLEdBQU0sQ0FBVyxFQUU1QixFQUFZLEdBQWtCLENBQUssRUFDbkMsRUFBWSxFQUFjLE9BQy9CLENBQUMsSUFBTSxFQUFFLGNBQWdCLEdBQWtCLENBQUMsSUFBTSxDQUNuRCxFQUdNLEVBQWdCLEVBQU0sSUFBSSxLQUFLLEVBQU0sS0FBSyxFQUkxQyxFQUF3QixHQUM3QixFQUFVLFNBQVMsRUFBZSxhQUFhLENBQ2hELEVBQ00sRUFBYyxHQUFlLENBQU8sRUF5RDFDLE9BdERvQixFQUFLLFFBQVEsRUFBdUIsRUFBYSxFQUFJLEVBSXZFLElBQUksQ0FBQyxFQUFZLElBQVUsQ0FDM0IsSUFBTSxFQUFpQixHQUFpQixFQUFZLEVBQU0sS0FBSyxFQUN6RCxFQUFtQixFQUFVLEtBQUssQ0FBQyxJQUN4QyxHQUFTLEVBQUUsWUFBWSxHQUFHLE9BQU8sQ0FBYyxDQUNoRCxFQUdBLEdBQUksRUFDSCxNQUFPLElBQUssS0FBVSxDQUFpQixFQUl4QyxJQUFNLEVBQW1CLEVBQU0sSUFBSSxLQUFLLEVBQU0sS0FBSyxFQUM3QyxFQUFhLEVBQWUsSUFBSSxFQUFrQixhQUFhLEVBQy9ELEVBQW1CLEdBQUcsRUFBTSxNQUFNLElBQ2xDLEVBQVksR0FBa0IsQ0FBSyxFQVl6QyxNQVRzQyxJQUNsQyxFQUNILEdBQUksRUFDSixNQUFPLEVBQ1AsSUFBSyxFQUNMLElBQUssRUFDTCxNQUFPLE1BQ1IsRUFHQSxFQUNBLE9BQU8sQ0FBQyxJQUFtQixDQUczQixHQURtQixFQUFNLFNBQVcsRUFBTSxRQUFRLE9BQVMsRUFDM0MsQ0FDZixJQUFNLEVBQWdCLEVBQWUsTUFBTSxZQUFZLEVBRXZELEdBRG1CLEVBQU0sUUFBUSxTQUFTLENBQWEsRUFFdEQsTUFBTyxHQVdULE9BSEMsRUFBZSxNQUFNLGVBQWUsQ0FBTyxHQUMzQyxFQUFlLElBQUksY0FBYyxDQUFTLEVBRzNDLEVBR0QsTUFBTyxFQUFPLENBRWYsTUFBVSxNQUNULDBCQUEwQixLQUFLLFVBQVUsRUFBTSxLQUFLLGFBQWEsYUFBaUIsTUFBUSxFQUFNLFFBQVUsaUJBQzNHLElBV1csR0FBdUIsRUFDbkMsY0FDQSxVQUNBLGdCQUNBLFdBQ2lELENBQ2pELElBQU0sRUFBZ0IsQ0FBQyxHQUFHLENBQWEsRUFHakMsRUFBWSxHQUFrQixDQUFXLEVBQ3pDLEVBQWlCLEVBQWMsVUFBVSxDQUFDLElBQU0sQ0FDckQsT0FBTyxHQUFrQixDQUFDLElBQU0sR0FBYSxFQUFFLE9BQVMsQ0FBQyxFQUFFLGFBQzNELEVBRUQsR0FBSSxJQUFtQixHQUN0QixNQUFVLE1BQU0sZ0NBQWdDLEVBR2pELElBQU0sRUFBWSxFQUFjLEdBRWhDLE9BQVEsT0FDRixPQUFRLENBRVosSUFBTSxFQUFzQixFQUFZLE1BQU0sWUFBWSxFQUVwRCxFQUFpQixDQUFDLEdBREEsRUFBVSxTQUFXLENBQUMsRUFDRixDQUFtQixFQUV6RCxFQUFtQixJQUNyQixFQUNILFFBQVMsQ0FDVixFQUNBLEVBQWMsR0FBa0IsRUFHaEMsSUFBTSxFQUFrQixHQUFHLEVBQVksZUFBZSxLQUFLLElBQUksSUFDekQsRUFBK0IsSUFFakMsR0FBUyxFQUFhLENBQUMsUUFBUyxTQUFVLE1BQU8sT0FBUSxPQUFPLENBQUMsS0FDakUsRUFDSCxHQUFJLEVBQ0osYUFBYyxFQUNkLElBQUssR0FBa0IsQ0FBUyxFQUNoQyxNQUFPLE1BQ1IsRUFDQSxFQUFjLEtBQUssQ0FBYSxFQUNoQyxLQUNELEtBRUssWUFBYSxDQU1qQixJQUFNLEVBRGtCLEVBQVksTUFBTSxTQUFTLEVBQUcsS0FBSyxFQUNuQixNQUFNLEtBQUssRUFBRSxPQUFPLEVBR3RELEVBQWtCLElBQ3BCLEVBQ0gsTUFBTyxJQUNILEVBQVUsTUFDYixNQUFPLENBQ1IsQ0FDRCxFQUNBLEVBQWMsR0FBa0IsRUFHaEMsSUFBTSxFQUFtQixFQUFVLElBQUksS0FBSyxFQUFVLEtBQUssRUFDckQsRUFBcUIsRUFBUSxPQUFTLEVBQVksTUFDbEQsRUFDTCxFQUFRLEtBQU8sRUFBbUIsSUFBSSxDQUFnQixFQUNqRCxFQUFjLEdBQUcsRUFBVSxlQUMzQixFQUFlLEdBQUcsbUJBRWxCLEVBQWdDLElBQ2xDLEtBQ0EsRUFDSCxNQUFPLElBQ0gsRUFBVSxTQUNWLEVBQVEsTUFDWCxRQUFTLEVBQW1CLE9BQU8sQ0FDcEMsRUFDQSxHQUFJLEVBQ0osSUFBSyxFQUNMLE1BQU8sRUFDUCxJQUFLLEVBQ0wsYUFBYyxNQUNmLEVBQ0EsRUFBYyxLQUFLLENBQWMsRUFDakMsS0FDRCxLQUVLLE1BQU8sQ0FFWCxJQUFNLEVBQW1CLElBQ3JCLEtBQ0EsQ0FDSixFQUNBLEVBQWMsR0FBa0IsRUFDaEMsS0FDRCxTQUdDLE1BQVUsTUFDVCxrQkFBa0IsMENBQ25CLEVBR0YsT0FBTyxHQVNLLEdBQXVCLEVBQ25DLGNBQ0EsZ0JBQ0EsV0FDaUQsQ0FDakQsSUFBTSxFQUFnQixDQUFDLEdBQUcsQ0FBYSxFQUdqQyxFQUFZLEdBQWtCLENBQVcsRUFDekMsRUFBaUIsRUFBYyxVQUFVLENBQUMsSUFBTSxDQUNyRCxPQUFPLEdBQWtCLENBQUMsSUFBTSxHQUFhLEVBQUUsT0FBUyxDQUFDLEVBQUUsYUFDM0QsRUFFRCxHQUFJLElBQW1CLEdBQ3RCLE1BQVUsTUFBTSxnQ0FBZ0MsRUFHakQsSUFBTSxFQUFZLEVBQWMsR0FFaEMsT0FBUSxPQUNGLE9BQVEsQ0FFWixJQUFNLEVBQXNCLEVBQVksTUFBTSxZQUFZLEVBRXBELEVBQWlCLENBQUMsR0FEQSxFQUFVLFNBQVcsQ0FBQyxFQUNGLENBQW1CLEVBRXpELEVBQW1CLElBQUssRUFBVyxRQUFTLENBQWUsRUFDakUsRUFBYyxHQUFrQixFQUNoQyxLQUNELEtBRUssWUFBYSxDQU1qQixJQUFNLEVBRGtCLEVBQVksTUFBTSxTQUFTLEVBQUcsS0FBSyxFQUNuQixNQUFNLEtBQUssRUFBRSxPQUFPLEVBRXRELEVBQWtCLElBQ3BCLEVBQ0gsTUFBTyxJQUNILEVBQVUsTUFDYixNQUFPLENBQ1IsQ0FDRCxFQUNBLEVBQWMsR0FBa0IsRUFDaEMsS0FDRCxLQUVLLE1BQU8sQ0FFWCxJQUFNLEVBQVksR0FBa0IsQ0FBVyxFQUkvQyxPQUhrQyxFQUFjLE9BQy9DLENBQUMsSUFBTSxHQUFrQixDQUFDLElBQU0sQ0FDakMsQ0FFRCxTQUdDLE1BQVUsTUFDVCxrQkFBa0IsMENBQ25CLEVBR0YsT0FBTyxHR3ZXUiwwQkFDQyxhQUVBLCtEQWtCRCxJQUFNLEdBQXFCLENBQzFCLE9BQVEsRUFBRyxnQkFBMkQsQ0FDckUsUUFBUyxFQUNULEVBQUcsSUFBYyxhQUFlLEdBQUssRUFDckMsRUFBRyxJQUFjLFdBQWEsSUFBTSxDQUNyQyxHQUNBLFFBQVMsRUFBRyxZQUFnQyxDQUMzQyxRQUFTLEVBQ1QsRUFBRyxFQUNILEVBQUcsRUFDSCxXQUFZLENBQUUsU0FBVSxJQUFLLEtBQU0sQ0FBQyxJQUFLLEVBQUcsSUFBSyxDQUFDLEVBQUcsT0FBTSxDQUM1RCxHQUNBLEtBQU0sRUFBRyxnQkFBMkQsQ0FDbkUsUUFBUyxFQUNULEVBQUcsSUFBYyxhQUFlLElBQU0sRUFDdEMsRUFBRyxJQUFjLFdBQWEsSUFBTSxFQUNwQyxXQUFZLENBQUUsU0FBVSxJQUFLLENBQzlCLEVBQ0QsRUFFYSxFQUFrRCxFQUM5RCxXQUNBLGdCQUNBLFFBQVEsRUFDUixZQUNBLFlBQVksV0FDWixTQUNBLFdBQ0EsY0FBZSxFQUNmLFNBQ0csS0FFSCxHQWlCRSxHQWpCRixDQUFpQixLQUFLLE9BQXRCLFNBQ0MsR0FlRSxHQUFPLElBZlQsQ0FDQyxRQUFRLFVBQ1IsVUFBVyxFQUFHLHNCQUF1QixDQUFTLEVBQzlDLE9BQVEsQ0FBRSxRQUFPLFdBQVUsRUFDM0IsY0FBYSxFQUNiLEtBQUssT0FDTCxRQUFRLFNBRVIsT0FBUSxFQUNSLFNBQVUsRUFDVixJQUFLLEVBQ0wsU0FBVSxNQUNOLEVBWkwsU0FjRSxHQVBJLENBUUosRUFDRCxFQUdILEVBQWdCLFlBQWMsa0JDcEU5QixxQkFDQyxrQkFDQSxvQkFDQSxrQkFDQSxnQkFDQSxpQkFDQSx1QkFHRCxpQkFBUyxlQUFRLGVDZGpCLGVBQVMsOEJBRVQsY0FBUywyRUFLVCxJQUFNLEdBQWlCLEdBQ3RCLDhiQUNBLENBQ0MsU0FBVSxDQUNULFFBQVMsQ0FDUixRQUFTLHlEQUNULFlBQ0Msb0pBQ0QsUUFDQyx3SUFDRCxVQUNDLCtEQUNELE1BQ0MsdUVBQ0QsS0FBTSxpREFDUCxFQUNBLEtBQU0sQ0FDTCxRQUFTLGdDQUNULEdBQUksZ0RBQ0osR0FBSSx1Q0FDSixLQUFNLFNBQ04sVUFBVyxTQUNYLFVBQVcsU0FDWixDQUNELEVBQ0EsZ0JBQWlCLENBQ2hCLFFBQVMsVUFDVCxLQUFNLFNBQ1AsQ0FDRCxDQUNELEVBRUEsU0FBUyxDQUFNLEVBQ2QsWUFDQSxVQUNBLE9BQ0EsVUFBVSxNQUNQLEdBSUEsQ0FHSCxPQUNDLEdBSFksRUFBVSxHQUFPLFNBRzdCLENBQ0MsVUFBVyxFQUFHLEdBQWUsQ0FBRSxVQUFTLE9BQU0sV0FBVSxDQUFDLENBQUMsRUFDMUQsWUFBVSxZQUNOLEVBQ0wsRUN4REYsMENBQ0EsZ0JBQVMsMEVBS1QsU0FBUyxFQUFNLEtBQ1gsR0FDa0QsQ0FDckQsT0FBTyxHQUFpQixRQUFqQixDQUFzQixZQUFVLFlBQWEsRUFBTyxFQVM1RCxTQUFTLEVBQVksS0FDakIsR0FDb0QsQ0FDdkQsT0FBTyxHQUFpQixVQUFqQixDQUF3QixZQUFVLG1CQUFvQixFQUFPLEVBU3JFLFNBQVMsRUFBYSxFQUNyQixlQUNHLEdBQ3FELENBQ3hELE9BQ0MsR0FBaUIsV0FBakIsQ0FDQyxVQUFXLEVBQ1YseUpBQ0EsQ0FDRCxFQUNBLFlBQVUsb0JBQ04sRUFDTCxFQUlGLFNBQVMsRUFBYSxFQUNyQixZQUNBLGNBQ0csR0FDcUQsQ0FDeEQsT0FDQyxHQWdCRSxHQWhCRixDQUFjLFlBQVUsZ0JBQXhCLFNBZ0JFLENBZkQsR0FBQyxHQUFELEVBQWUsRUFDZixHQWFrQixXQWJsQixDQUNDLFVBQVcsRUFDViwwWEFDQSxDQUNELEVBQ0EsWUFBVSxvQkFDTixFQU5MLFNBYUUsQ0FMQSxFQUNELEdBR2tCLFNBSGxCLENBQXVCLFVBQVUsb1dBQWpDLFNBR0UsQ0FGRCxHQUFDLEdBQUQsRUFBTyxFQUNQLEdBQWlDLE9BQWpDLENBQU0sVUFBVSxVQUFoQixpQkFBaUMsR0FDaEMsR0FDRCxHQUNELEVBSUosU0FBUyxFQUFZLEVBQUcsZUFBYyxHQUFzQyxDQUMzRSxPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVcsRUFBRywrQ0FBZ0QsQ0FBUyxFQUN2RSxZQUFVLG1CQUNOLEVBQ0wsRUFJRixTQUFTLEVBQVksRUFBRyxlQUFjLEdBQXNDLENBQzNFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUNWLHlEQUNBLENBQ0QsRUFDQSxZQUFVLG1CQUNOLEVBQ0wsRUFJRixTQUFTLEVBQVcsRUFDbkIsZUFDRyxHQUNtRCxDQUN0RCxPQUNDLEdBQWlCLFNBQWpCLENBQ0MsVUFBVyxFQUFHLHFDQUFzQyxDQUFTLEVBQzdELFlBQVUsa0JBQ04sRUFDTCxFQUlGLFNBQVMsRUFBaUIsRUFDekIsZUFDRyxHQUN5RCxDQUM1RCxPQUNDLEdBQWlCLGVBQWpCLENBQ0MsVUFBVyxFQUFHLGdDQUFpQyxDQUFTLEVBQ3hELFlBQVUsd0JBQ04sRUFDTCxFQ3JIRixxQkFBUyxlQ0FULHdCQUFTLGVBMEVGLElBQU0sR0FDWixHQUErQyxNQUFTLEVDM0V6RCx3QkFBUyxlQTZCRixJQUFNLEdBRVQsR0FBdUQsTUFBUyxFQzlCcEUsc0JBQVMsY0FBYSxlQUFTLGVDRC9CLHNCQUFTLGdCQUFhLGNBQVcsZUFBUyxlQ0VuQyxJQUFNLEdBQW9DLENBRWhELE1BQU8sUUFDUCxPQUFRLFNBQ1IsSUFBSyxNQUNMLE9BQVEsU0FDUixPQUFRLFNBQ1IsT0FBUSxTQUNSLE9BQVEsU0FHUixNQUFPLFFBQ1AsT0FBUSxTQUNSLFNBQVUsWUFDVixNQUFPLFFBQ1AsWUFBYSxjQUNiLFNBQVUsV0FDVixPQUFRLFVBQ1IsVUFBVyxhQUNYLFFBQVMsV0FDVCxVQUFXLGFBQ1gsUUFBUyxXQUNULE1BQU8sUUFHUCxZQUFhLGVBQ2IsVUFBVyxhQUNYLFlBQWEsbUNBQ2IsaUJBQWtCLDBCQUNsQixzQkFBdUIsY0FDdkIsNEJBQTZCLCtCQUM3Qix5QkFBMEIsNEJBRzFCLE9BQVEsU0FDUixRQUFTLFVBQ1QsaUJBQWtCLG9CQUNsQixNQUFPLFFBQ1AsT0FBUSxTQUNSLFFBQVMsVUFDVCxPQUFRLFNBQ1IsU0FBVSxXQUNWLFNBQVUsWUFDVixNQUFPLFFBQ1AsTUFBTyxRQUNQLE1BQU8sUUFDUCxLQUFNLE9BQ04sTUFBTyxRQUNQLFlBQWEsY0FDYixHQUFJLEtBR0osbUJBQW9CLHVCQUNwQixxQkFBc0IseUJBQ3RCLDJCQUNDLHVEQUNELDZCQUNDLHlEQUNELFVBQVcsYUFDWCxxQkFBc0IsdUNBQ3RCLHVCQUF3Qiw0QkFDeEIsa0NBQW1DLHVDQUNuQyxVQUFXLGFBQ1gscUJBQXNCLG1DQUN0QixlQUFnQix1Q0FDaEIsb0JBQXFCLHlDQUNyQixtQkFBb0IscUNBQ3BCLGVBQWdCLHVDQUNoQixvQkFBcUIseUNBQ3JCLG1CQUFvQixxQ0FHcEIsTUFBTyxRQUNQLEtBQU0sT0FDTixJQUFLLE1BQ0wsS0FBTSxPQUNOLEtBQU0sT0FHTixVQUFXLFlBQ1gsU0FBVSxXQUNWLEtBQU0sT0FDTixLQUFNLE9BQ04sbUJBQW9CLHVCQUNwQiwyQkFBNEIsc0NBRzVCLE9BQVEsU0FDUixPQUFRLFNBQ1IsUUFBUyxVQUNULFVBQVcsWUFDWCxTQUFVLFdBQ1YsT0FBUSxTQUNSLFNBQVUsV0FHVixJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BR0wsUUFBUyxVQUNULFNBQVUsV0FDVixNQUFPLFFBQ1AsTUFBTyxRQUNQLElBQUssTUFDTCxLQUFNLE9BQ04sS0FBTSxPQUNOLE9BQVEsU0FDUixVQUFXLFlBQ1gsUUFBUyxVQUNULFNBQVUsV0FDVixTQUFVLFVBQ1gsRUNqR08sU0FBUyxFQUFXLENBQzFCLEVBQ0EsRUFDZ0IsQ0FDaEIsSUFBTSxFQUE2QixFQUNqQyxRQUFRLE1BQU0sRUFDZCxJQUFJLENBQWMsRUFFZCxFQUFzQixFQUFZLFNBQVMsQ0FBMEIsRUFDeEUsRUFBMkIsU0FBUyxFQUFHLE1BQU0sRUFDN0MsRUFFSCxPQUFPLE1BQU0sS0FBSyxDQUFFLE9BQVEsQ0FBRSxFQUFHLENBQUMsRUFBRyxJQUNwQyxFQUFvQixJQUFJLEVBQVUsS0FBSyxDQUN4QyxFQU9NLFNBQVMsRUFBYSxDQUM1QixFQUNBLEVBQ2tCLENBQ2xCLElBQU0sRUFBWSxHQUFZLEVBQVUsUUFBUSxPQUFPLEVBQUcsQ0FBYyxFQUV4RSxPQUFPLE1BQU0sS0FBSyxDQUFFLE9BQVEsQ0FBRSxFQUFHLENBQUMsRUFBRyxJQUFjLENBQ2xELElBQU0sRUFBWSxFQUFVLEdBQUcsSUFBSSxFQUFXLE1BQU0sRUFDcEQsT0FBTyxHQUFZLEVBQVcsQ0FBYyxFQUM1QyxFQUdLLFNBQVMsRUFBWSxDQUFDLEVBQXVDLENBQ25FLElBQU0sRUFBYyxFQUFVLFlBQVksRUFDMUMsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQVksRUFBRyxDQUFDLEVBQUcsSUFDOUMsRUFBVSxRQUFRLE9BQU8sRUFBRSxJQUFJLEVBQUcsS0FBSyxDQUN4QyxFQWVNLFNBQVMsRUFBVyxFQUMxQixnQkFBZ0IsRUFBTSxFQUN0QixTQUFTLElBQ2MsQ0FBQyxFQUFrQixDQUMxQyxJQUFNLEVBQWEsRUFBYyxRQUFRLEtBQUssRUFDOUMsT0FBTyxNQUFNLEtBQUssQ0FBRSxRQUFPLEVBQUcsQ0FBQyxFQUFHLElBQ2pDLEVBQVcsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQ3JELEVDL0VNLElBQU0sR0FBdUIsRUFDdkIsR0FBb0IsR0FDcEIsR0FBbUIsR0FDbkIsR0FBeUIsRUFDekIsR0FDWix5REFFWSxHQUFpRCxDQUM3RCxPQUFRLEVBQ1IsT0FBUSxFQUNSLFFBQVMsRUFDVCxVQUFXLEVBQ1gsU0FBVSxFQUNWLE9BQVEsRUFDUixTQUFVLENBQ1gsRUgwREEsSUFBTSxHQUF5RCxDQUM5RCxJQUFLLE1BQ0wsS0FBTSxPQUNOLE1BQU8sUUFDUCxLQUFNLE1BQ1AsRUFFYSxHQUFvQixDQUNoQyxJQUMwQixDQUMxQixJQUNDLFNBQVMsQ0FBQyxFQUNWLGlCQUFpQixFQUNqQixjQUFjLFFBQ2QsY0FBYyxFQUFNLEVBQ3BCLGdCQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxlQUNBLFNBQ0EsV0FDQSxlQUNBLGNBQ0csR0FFRyxFQUFhLEdBQWtCLEdBQXNCLENBQVcsR0FDaEUsRUFBTSxHQUFXLEdBQXVCLENBQVcsR0FDbkQsRUFBZSxHQUFvQixHQUEwQixDQUFNLEdBQ25FLEVBQWlCLEdBQXNCLEdBQVMsRUFBSyxHQUNyRCxFQUFlLEdBQW9CLEdBQStCLElBQUksR0FDdEUsRUFBYyxHQUFtQixHQUE2QixJQUFJLEdBQ2xFLEVBQWUsR0FBb0IsR0FBUyxHQUFVLElBQUksRUFFM0QsRUFBSSxHQUFRLElBQU0sQ0FDdkIsR0FBSSxFQUNILE9BQU8sRUFFUixHQUFJLEVBQ0gsTUFBTyxDQUFDLElBQTRCLEVBQWEsSUFBUSxFQUUxRCxNQUFPLENBQUMsSUFBNEIsR0FBb0IsSUFBUSxHQUM5RCxDQUFDLEVBQWMsQ0FBVSxDQUFDLEVBRXZCLEVBQXdCLEdBQzdCLENBQUMsRUFBd0IsSUFBMEMsQ0FDbEUsSUFBTSxFQUE2QixDQUFDLEVBRXBDLFFBQVcsS0FBUyxFQUNuQixHQUFJLEVBQU0sTUFDVCxFQUFVLEtBQ1QsR0FBRyxHQUF3QixDQUMxQixRQUNBLGdCQUNBLFlBQ0EsU0FDRCxDQUFDLENBQ0YsRUFDTSxLQUNOLElBQU0sR0FDTCxFQUFNLE1BQU0sY0FBYyxDQUFTLEdBQ25DLEVBQU0sTUFBTSxlQUFlLENBQU8sRUFDN0IsR0FDTCxFQUFNLElBQUksY0FBYyxDQUFTLEdBQ2pDLEVBQU0sSUFBSSxlQUFlLENBQU8sRUFDM0IsR0FDTCxFQUFNLE1BQU0sU0FBUyxDQUFTLEdBQUssRUFBTSxJQUFJLFFBQVEsQ0FBTyxFQUM3RCxHQUFJLElBQWlCLElBQWUsR0FDbkMsRUFBVSxLQUFLLENBQUssRUFJdkIsT0FBTyxHQUVSLENBQUMsQ0FBYSxDQUNmLEVBRU0sR0FBc0IsR0FBWSxJQUFNLENBQzdDLEdBQUksSUFBUyxNQUNaLE1BQU8sQ0FDTixNQUFPLEVBQVksUUFBUSxLQUFLLEVBQ2hDLElBQUssRUFBWSxNQUFNLEtBQUssQ0FDN0IsRUFFRCxHQUFJLElBQVMsT0FDWixNQUFPLENBQ04sTUFBTyxFQUFZLFFBQVEsTUFBTSxFQUNqQyxJQUFLLEVBQVksTUFBTSxNQUFNLENBQzlCLEVBRUQsR0FBSSxJQUFTLE9BQVEsQ0FDcEIsSUFBTSxFQUFXLEdBQVksRUFBYSxDQUFjLEVBQ3hELE1BQU8sQ0FDTixNQUFPLEVBQVMsR0FBRyxRQUFRLEtBQUssRUFDaEMsSUFBSyxFQUFTLEdBQUcsTUFBTSxLQUFLLENBQzdCLEVBR0QsSUFBTSxFQUFRLEdBQWMsRUFBYSxDQUFjLEVBQ3ZELE1BQU8sQ0FBRSxNQUFPLEVBQU0sR0FBRyxHQUFHLFFBQVEsS0FBSyxFQUFHLElBQUssRUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUUsR0FDeEUsQ0FBQyxFQUFhLEVBQU0sQ0FBYyxDQUFDLEVBRWhDLEdBQWtCLEdBQVEsSUFBTSxDQUNyQyxJQUFRLFFBQU8sT0FBUSxHQUFvQixFQUMzQyxPQUFPLEVBQXNCLEVBQU8sQ0FBRyxHQUNyQyxDQUFDLEVBQXVCLEVBQW1CLENBQUMsRUFFL0MsR0FBVSxJQUFNLENBQ2YsR0FBSSxFQUNILEVBQWlCLENBQU0sR0FFdEIsQ0FBQyxDQUFNLENBQUMsRUFDWCxHQUFVLElBQU0sQ0FDZixHQUFJLEVBQ0gsRUFBaUIsQ0FBTSxFQUN2QixFQUFNLE9BQU8sQ0FBTSxFQUNuQixFQUFlLENBQUMsSUFBYSxFQUFTLE9BQU8sQ0FBTSxDQUFDLEdBRW5ELENBQUMsQ0FBTSxDQUFDLEVBQ1gsR0FBVSxJQUFNLENBQ2YsR0FBSSxFQUNILEVBQU0sR0FBRyxXQUFXLENBQVEsR0FFM0IsQ0FBQyxDQUFRLENBQUMsRUFFYixJQUFNLEVBQWEsR0FDbEIsQ0FBQyxJQUFzQixDQUN0QixFQUFlLENBQUksRUFDbkIsSUFBZSxDQUFJLEdBRXBCLENBQUMsQ0FBWSxDQUNkLEVBRU0sRUFBaUIsR0FDdEIsQ0FBQyxJQUFzQixDQUN0QixFQUFlLENBQUMsSUFBUyxDQUN4QixJQUFNLEVBQ0wsSUFBYyxFQUNYLEVBQUssSUFBSSxFQUFHLEdBQVcsRUFBSyxFQUM1QixFQUFLLFNBQVMsRUFBRyxHQUFXLEVBQUssRUFFckMsT0FEQSxJQUFlLENBQU8sRUFDZixFQUNQLEdBRUYsQ0FBQyxFQUFNLENBQVksQ0FDcEIsRUFFTSxHQUFhLEdBQVksSUFBTSxFQUFlLENBQUMsRUFBRyxDQUFDLENBQWMsQ0FBQyxFQUNsRSxFQUFhLEdBQVksSUFBTSxFQUFlLEVBQUUsRUFBRyxDQUFDLENBQWMsQ0FBQyxFQUVuRSxHQUFRLEdBQVksSUFBTSxDQUMvQixJQUFNLEVBQVUsRUFBTSxFQUN0QixFQUFlLENBQU8sRUFDdEIsSUFBZSxDQUFPLEdBQ3BCLENBQUMsQ0FBWSxDQUFDLEVBRVgsRUFBVyxHQUNoQixDQUFDLElBQXlCLENBQ3pCLEVBQWlCLENBQUMsSUFBUyxDQUFDLEdBQUcsRUFBTSxDQUFLLENBQUMsRUFDM0MsSUFBYSxDQUFLLEdBRW5CLENBQUMsQ0FBVSxDQUNaLEVBRU0sRUFBYyxHQUNuQixDQUFDLEVBQTBCLElBQW9DLENBQzlELEVBQWlCLENBQUMsSUFDakIsRUFBSyxJQUFJLENBQUMsSUFBVSxDQUNuQixHQUFJLEVBQU0sS0FBTyxFQUNoQixPQUFPLEVBRVIsSUFBTSxHQUFXLElBQUssS0FBVSxDQUFRLEVBRXhDLE9BREEsSUFBZ0IsRUFBUSxFQUNqQixHQUNQLENBQ0YsR0FFRCxDQUFDLENBQWEsQ0FDZixFQUVNLEdBQXVCLEdBQzVCLENBQ0MsRUFDQSxFQUNBLElBQ0ksQ0FDSixJQUFnQixJQUFLLEtBQVUsQ0FBUSxDQUFDLEVBQ3hDLEVBQ0MsR0FBeUIsQ0FDeEIsWUFBYSxFQUNiLFVBQ0EsZ0JBQ0EsTUFBTyxFQUFRLEtBQ2hCLENBQUMsQ0FDRixHQUVELENBQUMsRUFBZSxDQUFhLENBQzlCLEVBRU0sR0FBdUIsR0FDNUIsQ0FBQyxFQUFzQixJQUFtQyxDQUN6RCxJQUFnQixDQUFLLEVBQ3JCLEVBQ0MsR0FBeUIsQ0FDeEIsWUFBYSxFQUNiLGdCQUNBLE1BQU8sRUFBUSxLQUNoQixDQUFDLENBQ0YsR0FFRCxDQUFDLEVBQWUsQ0FBYSxDQUM5QixFQUVNLEdBQWMsR0FDbkIsQ0FBQyxJQUE2QixDQUM3QixFQUFpQixDQUFDLElBQVMsQ0FDMUIsSUFBTSxFQUFnQixFQUFLLEtBQUssQ0FBQyxJQUFNLEVBQUUsS0FBTyxDQUFPLEVBQ3ZELEdBQUksRUFDSCxJQUFnQixDQUFhLEVBRTlCLE9BQU8sRUFBSyxPQUFPLENBQUMsSUFBTSxFQUFFLEtBQU8sQ0FBTyxFQUMxQyxHQUVGLENBQUMsQ0FBYSxDQUNmLEVBRU0sR0FBZ0IsR0FDckIsQ0FBQyxJQUF1QyxDQUN2QyxHQUFJLEdBQVcsTUFDZCxFQUFnQixFQUFVLEtBQUssRUFFaEMsSUFBTSxFQUFRLEdBQVcsT0FBUyxFQUNsQyxFQUFpQixDQUNoQixNQUFPLEVBQUUsVUFBVSxFQUNuQixRQUNBLElBQUssR0FBVyxLQUFPLEVBQU0sSUFBSSxFQUFHLE1BQU0sRUFDMUMsV0FBWSxHQUFXLFdBQ3ZCLFlBQWEsR0FDYixPQUFRLEdBQVcsUUFBVSxFQUM5QixDQUFrQixFQUNsQixFQUFtQixFQUFJLEdBRXhCLENBQUMsRUFBYSxDQUFDLENBQ2hCLEVBRU0sR0FBaUIsR0FBWSxJQUFNLENBQ3hDLEVBQWdCLElBQUksRUFDcEIsRUFBaUIsSUFBSSxFQUNyQixFQUFtQixFQUFLLEdBQ3RCLENBQUMsQ0FBQyxFQUVDLEdBQW1CLEdBQ3hCLENBQUMsSUFBMEIsQ0FDMUIsRUFBUSxDQUFPLEVBQ2YsSUFBZSxDQUFPLEdBRXZCLENBQUMsQ0FBWSxDQUNkLEVBRU0sRUFBMkIsR0FDaEMsQ0FBQyxJQUErQyxDQUMvQyxJQUFNLEVBQVksRUFBTSxJQUN4QixPQUNDLEVBQWMsS0FDYixDQUFDLEtBQU8sRUFBRSxLQUFPLEdBQUcsRUFBRSx1QkFBeUIsR0FBYSxFQUFFLEtBQy9ELEdBQUssTUFHUCxDQUFDLENBQWEsQ0FDZixFQUVBLE1BQU8sQ0FDTixjQUNBLE9BQ0EsT0FBUSxHQUNSLFVBQVcsRUFDWCxrQkFDQSxnQkFDQSxlQUNBLGlCQUNBLGFBQWMsR0FDZCxnQkFDQSxnQkFDQSxpQkFDQSxhQUNBLFFBQVMsR0FDVCxjQUNBLGFBQ0EsU0FDQSxXQUNBLGNBQ0Esd0JBQ0EsZUFDQSx3QkFDQSxpQkFDQSxrQkFDQSxtQkFDQSxxQkFDQSxrQkFDQSx3QkFDQSwyQkFDQSxHQUNELDRDRDdXRCxJQUFNLEdBQXNCLENBQUMsSUFBOEMsQ0FDMUUsR0FBSSxFQUFNLFlBQ1QsT0FBTyxFQUFNLFlBRWQsR0FBSSxFQUFNLGFBQWUsT0FDeEIsTUFBTyxDQUFDLEVBQU0sVUFBVSxFQUV6QixNQUFPLENBQUMsR0FlSSxHQUVULEVBQ0gsV0FDQSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxRQUNkLGNBQ0EsY0FDQSxlQUNBLGNBQ0EsZUFDQSxhQUNBLGdCQUNBLGdCQUNBLGVBQ0EsU0FDQSxXQUNBLG1CQUNBLG9CQUNBLHFCQUNBLGVBQ0EsZUFDQSxtQkFBbUIsR0FDbkIsc0JBQXNCLEdBQ3RCLGtCQUNBLGtCQUNBLGVBQ0EsYUFDQSxpQkFDQSxrQkFDQSxnQkFDQSxhQUFhLFVBQ2IsbUJBQ0EsZUFBYyxhQUNkLDZCQUNBLHVCQUF1QixHQUN2QixpQkFDSyxDQUVMLElBQU8sR0FBb0IsR0FBcUIsQ0FBUyxHQUNsRCxHQUFrQixHQUF1QixHQUU5QyxJQUFJLElBQUksRUFBVSxJQUFJLENBQUMsSUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBRy9CLEVBQWlCLEdBQWtCLENBQ3hDLFNBQ0EsaUJBQ0EsY0FDQSxjQUNBLGdCQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxhQUFjLEVBQ2QsU0FDQSxXQUNBLGVBQ0EsWUFDRCxDQUFDLEVBR0ssR0FBMkIsR0FDaEMsQ0FBQyxJQUFnQyxDQUNoQyxFQUFvQixDQUFDLElBQVMsQ0FDN0IsSUFBTSxHQUFTLElBQUksSUFBSSxDQUFJLEVBQzNCLEdBQUksR0FBTyxJQUFJLENBQVUsRUFDeEIsR0FBTyxPQUFPLENBQVUsRUFFeEIsUUFBTyxJQUFJLENBQVUsRUFFdEIsT0FBTyxHQUNQLEdBRUYsQ0FBQyxDQUNGLEVBRU0sR0FBZSxHQUFZLENBQUMsSUFBZ0MsQ0FDakUsRUFBb0IsQ0FBQyxJQUFTLElBQUksSUFBSSxDQUFJLEVBQUUsSUFBSSxDQUFVLENBQUMsR0FDekQsQ0FBQyxDQUFDLEVBRUMsR0FBZSxHQUFZLENBQUMsSUFBZ0MsQ0FDakUsRUFBb0IsQ0FBQyxJQUFTLENBQzdCLElBQU0sR0FBUyxJQUFJLElBQUksQ0FBSSxFQUUzQixPQURBLEdBQU8sT0FBTyxDQUFVLEVBQ2pCLEdBQ1AsR0FDQyxDQUFDLENBQUMsRUFFQyxHQUFtQixHQUFZLElBQU0sQ0FDMUMsRUFBb0IsSUFBSSxJQUFJLEVBQWlCLElBQUksQ0FBQyxJQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FDNUQsQ0FBQyxDQUFnQixDQUFDLEVBRWYsR0FBbUIsR0FBWSxJQUFNLENBQzFDLEVBQW9CLElBQUksR0FBSyxHQUMzQixDQUFDLENBQUMsRUFHQyxHQUF1QixHQUM1QixDQUFDLElBQWlELENBQ2pELE9BQU8sRUFBZSxPQUFPLE9BQU8sQ0FBQyxJQUF5QixDQUM3RCxHQUFJLEVBQU0sWUFDVCxPQUFPLEVBQU0sWUFBWSxTQUFTLENBQVUsRUFFN0MsT0FBTyxFQUFNLGFBQWUsRUFDNUIsR0FFRixDQUFDLEVBQWUsTUFBTSxDQUN2QixFQUVNLEVBQXdCLEdBQzdCLENBQUMsSUFBc0QsQ0FDdEQsT0FBTyxFQUFlLE9BQU8sT0FBTyxDQUFDLElBQXlCLENBRTdELE9BRHlCLEdBQW9CLENBQUssRUFDMUIsS0FBSyxDQUFDLEtBQU8sRUFBWSxTQUFTLEVBQUUsQ0FBQyxFQUM3RCxHQUVGLENBQUMsRUFBZSxNQUFNLENBQ3ZCLEVBRU0sRUFBa0IsR0FDdkIsQ0FBQyxJQUFzRCxDQUN0RCxPQUFPLEVBQWlCLEtBQUssQ0FBQyxJQUFhLEVBQVMsS0FBTyxDQUFVLEdBRXRFLENBQUMsQ0FBZ0IsQ0FDbEIsRUFFTSxFQUFzQixHQUFZLElBQWtCLENBQ3pELE9BQU8sRUFBaUIsT0FBTyxDQUFDLElBQy9CLEdBQWlCLElBQUksRUFBUyxFQUFFLENBQ2pDLEdBQ0UsQ0FBQyxFQUFrQixFQUFnQixDQUFDLEVBR2pDLEVBQXVCLEdBQVksQ0FBQyxJQUFrQyxDQUMzRSxPQUFPLFFBQVEsRUFBTSxhQUFlLEVBQU0sWUFBWSxPQUFTLENBQUMsR0FDOUQsQ0FBQyxDQUFDLEVBR0MsRUFBWSxHQUNqQixDQUFDLElBQXlCLENBQ3pCLEVBQWUsaUJBQWlCLENBQUssRUFDckMsRUFBZSxtQkFBbUIsRUFBSSxHQUV2QyxDQUFDLENBQWMsQ0FDaEIsRUFFTSxHQUFtQixHQUN4QixDQUFDLElBQXlCLENBQ3pCLEdBQUksRUFDSCxPQUVELEdBQUksRUFDSCxFQUFhLENBQUssRUFFbEIsT0FBVSxDQUFLLEdBR2pCLENBQUMsRUFBbUIsRUFBYyxDQUFTLENBQzVDLEVBRU0sR0FBa0IsR0FDdkIsQ0FBQyxJQUF3QixDQUN4QixHQUFJLEVBQ0gsT0FHRCxHQUFJLEVBQ0gsRUFBWSxDQUFJLEVBQ1YsS0FDTixJQUFNLEVBQTBCLENBQy9CLE1BQU8sRUFBZSxFQUFFLFVBQVUsRUFDbEMsTUFBTyxFQUFLLE1BQ1osSUFBSyxFQUFLLElBQ1YsWUFBYSxHQUNiLE9BQVEsRUFDVCxFQUVBLEdBQUksRUFBSyxhQUFlLE9BQ3ZCLEVBQVMsV0FBYSxFQUFLLFdBRzVCLEVBQWUsaUJBQWlCLENBQVEsRUFDeEMsRUFBZSxnQkFBZ0IsRUFBSyxLQUFLLEVBQ3pDLEVBQWUsbUJBQW1CLEVBQUksSUFHeEMsQ0FBQyxFQUFhLEVBQWtCLENBQWMsQ0FDL0MsRUFHTSxHQUFlLEdBQ3BCLEtBQU8sSUFDSCxFQUNILEtBQU0sRUFBZSxLQUNyQixRQUFTLEVBQWUsUUFDeEIsT0FBUSxFQUFlLE9BQ3ZCLFVBQVcsRUFBZSxVQUcxQixVQUFXLEVBQ1gsb0JBQ0EsNEJBQ0EsZ0JBQ0EsZ0JBQ0Esb0JBQ0Esb0JBR0Esd0JBQ0Esd0JBQ0Esa0JBQ0Esc0JBR0EsdUJBQ0EsdUJBR0EsYUFBYyxHQUNkLFlBQWEsR0FHYixrQkFDQSxrQkFHQSxjQUNBLGlCQUNBLGtCQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLGVBQ0EsbUJBQ0Esc0JBQ0EsZ0JBQ0EsYUFDQSxtQkFDQSxlQUNBLDZCQUNBLHVCQUNBLGFBQ0QsR0FDQSxDQUNDLEVBQ0EsRUFDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsR0FDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsR0FDQSxHQUNBLEVBQ0EsRUFDQSxFQUNELENBQ0QsRUFFQSxPQUNDLEdBRUUsR0FBd0IsU0FGMUIsQ0FBa0MsTUFBTyxHQUF6QyxTQUNFLEVBQ0EsR0hsUkcsU0FBUyxDQUEwQixDQUN6QyxFQUMrQixDQUMvQixJQUFNLEVBQWtCLEdBQVcsRUFBdUIsRUFDcEQsRUFBaUIsR0FBVyxFQUFlLEVBRzNDLEVBQVcsR0FDaEIsRUFFRCxHQUFJLENBQUMsRUFDSixNQUFVLE1BQ1QsNEZBQ0QsRUFHRCxPQUFPLEVBQVcsRUFBUyxDQUFPLEVBQUksRUFPaEMsU0FBUyxFQUF1QixFQUFrQyxDQUN4RSxJQUFNLEVBQVUsRUFBd0IsRUFFeEMsTUFBTyxDQUNOLFlBQWEsRUFBUSxZQUNyQixLQUFNLEVBQVEsS0FDZCxPQUFRLEVBQVEsT0FDaEIsZ0JBQWlCLEVBQVEsZ0JBQ3pCLGNBQWUsRUFBUSxjQUN2QixhQUFjLEVBQVEsYUFDdEIsZUFBZ0IsRUFBUSxlQUN4QixVQUFXLEVBQVEsV0FBYSxDQUFDLEVBQ2pDLGVBQWdCLEVBQVEsZUFDeEIsV0FBWSxFQUFRLFdBQ3BCLFFBQVMsRUFBUSxRQUNqQixXQUFZLEVBQVEsV0FDcEIsV0FBWSxFQUFRLFdBQ3BCLE1BQU8sRUFBUSxNQUNmLFNBQVUsRUFBUSxTQUNsQixZQUFhLEVBQVEsWUFDckIsWUFBYSxFQUFRLFlBQ3JCLGNBQWUsRUFBUSxjQUN2QixlQUFnQixFQUFRLGVBQ3hCLHFCQUFzQixFQUFRLHFCQUM5QixjQUFlLEVBQVEsYUFDeEIsc0RRbEZNLFNBQVMsRUFBb0IsRUFDbkMsU0FDQSxVQUNBLFlBQ0EsZ0JBQ0EsY0FDNkIsQ0FDN0IsSUFBUSxLQUFNLEVBQXdCLENBQUMsS0FBYSxDQUFFLEVBQUcsRUFBUSxDQUFFLEVBQUUsRUFFL0QsRUFBb0IsQ0FBQyxJQUErQixDQUN6RCxFQUFVLENBQUssRUFDZixFQUFRLEdBR0gsRUFBUyxJQUFrQixPQUVqQyxPQUNDLEdBNkRFLEdBN0RGLENBQVEsYUFBYyxFQUFTLEtBQU0sRUFBckMsU0FDQyxHQTJERSxHQTNERixDQUFlLFVBQVUsV0FBekIsU0EyREUsQ0ExREQsR0FVRSxHQVZGLFVBVUUsQ0FURCxHQUVFLEdBRkYsVUFDRSxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxzQkFBc0IsRUFDM0QsRUFDRixHQUtFLEdBTEYsVUFLRSxDQUxGLElBQ0csRUFESCxJQUNnQixJQUNkLEVBQ0UsRUFBRSw0QkFBNEIsRUFDOUIsRUFBRSw4QkFBOEIsR0FDbEMsR0FDRCxFQUVGLEdBdUNFLE1BdkNGLENBQUssVUFBVSxZQUFmLFNBdUNFLENBdENELEdBV0UsRUFYRixDQUNDLFVBQVUsa0NBQ1YsUUFBUyxJQUFNLEVBQWtCLE1BQU0sRUFDdkMsUUFBUSxVQUhULFNBS0MsR0FLRSxNQUxGLENBQUssVUFBVSxZQUFmLFNBS0UsQ0FKRCxHQUErQyxNQUEvQyxDQUFLLFVBQVUsY0FBZixTQUE4QixFQUFFLFdBQVcsRUFBSSxFQUMvQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBUyxFQUFFLGdCQUFnQixFQUFJLEVBQUUsZ0JBQWdCLEVBQ2pELEdBQ0QsRUFDRCxFQUVGLEdBV0UsRUFYRixDQUNDLFVBQVUsa0NBQ1YsUUFBUyxJQUFNLEVBQWtCLFdBQVcsRUFDNUMsUUFBUSxVQUhULFNBS0MsR0FLRSxNQUxGLENBQUssVUFBVSxZQUFmLFNBS0UsQ0FKRCxHQUE0RCxNQUE1RCxDQUFLLFVBQVUsY0FBZixTQUE4QixFQUFFLHdCQUF3QixFQUFJLEVBQzVELEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFTLEVBQUUscUJBQXFCLEVBQUksRUFBRSxxQkFBcUIsRUFDM0QsR0FDRCxFQUNELEVBRUYsR0FXRSxFQVhGLENBQ0MsVUFBVSxrQ0FDVixRQUFTLElBQU0sRUFBa0IsS0FBSyxFQUN0QyxRQUFRLFVBSFQsU0FLQyxHQUtFLE1BTEYsQ0FBSyxVQUFVLFlBQWYsU0FLRSxDQUpELEdBQStDLE1BQS9DLENBQUssVUFBVSxjQUFmLFNBQThCLEVBQUUsV0FBVyxFQUFJLEVBQy9DLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxvQkFBb0IsRUFDekQsR0FDRCxFQUNELEdBQ0QsRUFFRixHQUlFLEdBSkYsVUFDQyxHQUVFLEVBRkYsQ0FBUSxRQUFTLEVBQVMsUUFBUSxVQUFsQyxTQUNFLEVBQUUsUUFBUSxFQUNWLEVBQ0QsR0FDRCxFQUNELEVDOUZHLElBQU0sR0FBa0IsQ0FDOUIsRUFDQSxJQUNJLENBQ0osSUFBUSxTQUFRLFFBQVMsRUFFekIsR0FBSSxDQUFDLEdBQVUsQ0FBQyxHQUFRLENBQUMsRUFDeEIsT0FBTyxLQUdSLElBQU0sRUFBYSxFQUFLLEtBQUssU0FBUyxPQUFTLGFBQ3ZDLGFBQVksVUFBVyxFQUFLLEtBQUssU0FBVyxDQUFDLEVBQ2pELEVBRUosR0FBSSxFQUFZLENBQ2YsSUFBUSxPQUFNLE9BQU8sRUFBRyxTQUFTLEdBQU0sRUFBSyxLQUFLLFFBR2pELEVBQVcsRUFBTSxDQUFJLEVBQUUsS0FBSyxDQUFJLEVBQUUsT0FBTyxDQUFNLEVBQ3pDLEtBQ04sSUFBUSxRQUFTLEVBQUssS0FBSyxRQUUzQixFQUFXLEVBQU0sQ0FBSSxFQUd0QixJQUFNLEVBQWdCLEVBQVksSUFBSSxLQUFLLEVBQVksTUFBTyxRQUFRLEVBR2xFLEVBQVMsRUFBUyxJQUFJLEVBQWUsUUFBUSxFQUVqRCxHQUFJLEVBQU8sT0FBTyxFQUFPLFFBQVEsS0FBSyxDQUFDLEVBRXRDLEVBQVMsRUFBTyxTQUFTLEVBQUcsS0FBSyxFQUFFLE1BQU0sS0FBSyxFQUkvQyxJQUFNLEVBQVUsQ0FDZixNQUFPLEVBQ1AsSUFBSyxFQUNMLGFBQ0EsT0FBUSxFQUFhLEdBQVMsR0FBVSxFQUFZLE1BQ3JELEVBQ0EsTUFBTyxDQUFFLGNBQWEsU0FBUSxHQzlDL0Isc0JBQVMsdUJBQ1QsNkJBQVMsNEJBRVQsOEJBQVMsZUFBcUIsd0RBUXZCLElBQU0sR0FBb0QsRUFBRyxTQUFVLENBQzdFLElBQU8sRUFBYSxHQUFrQixHQUF3QixJQUFJLEVBTWxFLE9BSkEsR0FBb0IsRUFBSyxLQUFPLENBQy9CLGdCQUNELEVBQUUsRUFHRCxHQVlFLEdBWkYsQ0FBYSxVQUFXLENBQUMsRUFBa0IsRUFBM0MsU0FDRSxHQUNBLEdBUUUsTUFSRixDQUNDLFVBQVcsRUFDVixzRkFDQSxFQUFZLGlCQUFtQixjQUMvQixFQUFZLE9BQVMsWUFDdEIsRUFMRCxTQU9FLEdBQWEsTUFDYixFQUVGLHNFYkpHLFNBQVMsRUFBa0IsRUFBRyxZQUFxQyxDQUN6RSxJQUFNLEVBQWlCLEdBQXNCLElBQUksRUFDM0MsRUFBaUIsR0FFcEIsSUFBSSxHQUVDLGNBQWEsdUJBQXNCLHNCQUMxQyxFQUF3QixDQUFDLEtBQWEsQ0FDckMsWUFBYSxFQUFRLFlBQ3JCLHFCQUFzQixFQUFRLHFCQUM5QixtQkFBb0IsRUFBUSxrQkFDN0IsRUFBRSxHQUdJLEVBQWlCLEdBQXNCLEdBSTNDLENBQ0YsT0FBUSxHQUNSLE1BQU8sS0FDUCxRQUFTLElBQ1YsQ0FBQyxFQUdLLEVBQWMsR0FBVSxHQUFhLENBRTFDLHFCQUFzQixDQUNyQixTQUFVLENBQ1gsQ0FDRCxDQUFDLEVBRUssRUFBYyxHQUFVLEdBQWEsQ0FFMUMscUJBQXNCLENBQ3JCLE1BQU8sSUFDUCxVQUFXLENBQ1osQ0FDRCxDQUFDLEVBRUssRUFBVSxHQUFXLEVBQWEsQ0FBVyxFQUc3QyxFQUFxQixDQUMxQixFQUNBLElBQ0ksQ0FFSixHQUFJLENBQUMsR0FBUyxDQUFDLEVBQU0sR0FDcEIsT0FHRCxHQUFJLENBQUMsR0FBVyxPQUFPLEtBQUssQ0FBTyxFQUFFLFNBQVcsRUFDL0MsT0FHRCxHQUFJLEdBQWlCLENBQUssRUFFekIsRUFBbUIsQ0FDbEIsT0FBUSxHQUNSLFFBQ0EsU0FDRCxDQUFDLEVBR0QsT0FBWSxFQUFNLEdBQUksQ0FBTyxHQUt6QixFQUE4QixDQUFDLElBQStCLENBQ25FLEdBQUksQ0FBQyxFQUFnQixPQUFTLENBQUMsRUFBZ0IsUUFBUyxDQUN2RCxFQUFtQixDQUFFLE9BQVEsR0FBTyxNQUFPLEtBQU0sUUFBUyxJQUFLLENBQUMsRUFDaEUsT0FHRCxHQUFJLENBQ0gsRUFBcUIsRUFBZ0IsTUFBTyxFQUFnQixRQUFTLENBQ3BFLFFBQ0EsVUFBVyxFQUFnQixNQUFNLEtBQ2xDLENBQUMsRUFDQSxLQUFNLFNBRU4sQ0FDRCxFQUFtQixDQUFFLE9BQVEsR0FBTyxNQUFPLEtBQU0sUUFBUyxJQUFLLENBQUMsSUFLNUQsRUFBNEIsSUFBTSxDQUN2QyxFQUFtQixDQUFFLE9BQVEsR0FBTyxNQUFPLEtBQU0sUUFBUyxJQUFLLENBQUMsR0FHM0QsRUFBa0IsQ0FBQyxJQUEwQixDQUNsRCxJQUFRLFVBQVcsRUFHbkIsR0FBSSxFQUFPLEtBQUssU0FBUyxPQUFTLGlCQUNqQyxFQUFlLFNBQVMsZUFBZSxFQUFPLEtBQUssUUFBUSxLQUFLLEVBQ2hFLEVBQWUsUUFBVSxFQUFPLEtBQUssUUFBUSxPQUl6QyxFQUFnQixDQUFDLElBQXdCLENBQzlDLElBQU0sRUFBZSxHQUFnQixFQUFPLEVBQWUsT0FBTyxFQUNsRSxHQUFJLEVBQWMsQ0FDakIsSUFBUSxjQUFhLFdBQVksRUFDakMsRUFBbUIsRUFBYSxDQUFPLEVBSXhDLEVBQWUsUUFBVSxLQUN6QixFQUFlLFNBQVMsZUFBZSxJQUFJLEdBR3RDLEVBQW1CLENBQUMsSUFBNEIsQ0FDckQsRUFBZSxRQUFVLE1BSTFCLEdBQUksRUFDSCxPQUFPLEVBR1IsT0FDQyxnQkFvQkUsQ0FuQkQsR0FTRSxHQVRGLENBQ0MsbUJBQW9CLEdBQ3BCLGFBQWMsRUFDZCxVQUFXLEVBQ1gsWUFBYSxFQUNiLFFBQVMsRUFMVixTQVNFLENBRkEsRUFDRCxHQUFDLEdBQUQsQ0FBa0IsSUFBSyxFQUFnQixHQUN0QyxFQUdGLEdBQUMsR0FBRCxDQUNDLFdBQVksRUFBZ0IsT0FBTyxPQUFTLEdBQzVDLE9BQVEsRUFBZ0IsT0FDeEIsUUFBUyxFQUNULFVBQVcsRUFDWCxjQUFjLE9BQ2YsR0FDQyxFYzNLSixvQkFBUyxjQUFXLGVBQVMsZUNEN0IsNENBQ0Esb0JBQVMsK0RBS1QsU0FBUyxFQUFRLEVBQ2hCLGVBQ0csR0FDb0QsQ0FDdkQsT0FDQyxHQWNvQixRQWRwQixDQUNDLFVBQVcsRUFDViw4ZUFDQSxDQUNELEVBQ0EsWUFBVSxjQUNOLEVBTkwsU0FRQyxHQUtvQixhQUxwQixDQUNDLFVBQVUsZ0VBQ1YsWUFBVSxxQkFGWCxTQUlDLEdBQUMsR0FBRCxDQUFXLFVBQVUsV0FBVyxFQUMvQixFQUNELEVDekJKLHVCQUFTLGlDQUNULG1CQUFTLHNCQUNULG9CQUFTLGFBQVcsZUFBUSxlQ0Y1QiwwQkFDQyxzQkFDQSx1QkFDQSxzQkFFRCx5QkFFQSxvQkFBUywyQkFBVyxtRUFJcEIsU0FBUyxFQUFRLEVBQ2hCLFlBQ0EsYUFDQSxrQkFBa0IsR0FDbEIsZ0JBQWdCLFFBQ2hCLGdCQUFnQixRQUNoQixhQUNBLGdCQUNHLEdBR0QsQ0FDRixJQUFNLEVBQW9CLEdBQXFCLEVBRS9DLE9BQ0MsR0FBQyxHQUFELENBQ0MsY0FBZSxFQUNmLFVBQVcsRUFDVix5SkFDQSxPQUFPLCtDQUNQLE9BQU8sbURBQ1AsQ0FDRCxFQUNBLFdBQVksQ0FDWCxLQUFNLEVBQUcsUUFBUyxFQUFrQixJQUFJLEVBQ3hDLE9BQVEsRUFDUCwyQ0FDQSxFQUFrQixNQUNuQixFQUNBLE1BQU8sRUFBRyw2QkFBOEIsRUFBa0IsS0FBSyxFQUMvRCxJQUFLLEVBQ0osMEVBQ0EsRUFBa0IsR0FDbkIsRUFDQSxnQkFBaUIsRUFDaEIsR0FBZSxDQUFFLFFBQVMsQ0FBYyxDQUFDLEVBQ3pDLDhEQUNBLEVBQWtCLGVBQ25CLEVBQ0EsWUFBYSxFQUNaLEdBQWUsQ0FBRSxRQUFTLENBQWMsQ0FBQyxFQUN6Qyw4REFDQSxFQUFrQixXQUNuQixFQUNBLGNBQWUsRUFDZCwyRUFDQSxFQUFrQixhQUNuQixFQUNBLFVBQVcsRUFDVixzRkFDQSxFQUFrQixTQUNuQixFQUNBLGNBQWUsRUFDZCxzSEFDQSxFQUFrQixhQUNuQixFQUNBLFNBQVUsRUFDVCx3Q0FDQSxFQUFrQixRQUNuQixFQUNBLGNBQWUsRUFDZCwwQkFDQSxJQUFrQixRQUNmLFVBQ0EsMEdBQ0gsRUFBa0IsYUFDbkIsRUFDQSxNQUFPLHlCQUNQLFNBQVUsRUFBRyxPQUFRLEVBQWtCLFFBQVEsRUFDL0MsUUFBUyxFQUNSLGdGQUNBLEVBQWtCLE9BQ25CLEVBQ0EsS0FBTSxFQUFHLG1CQUFvQixFQUFrQixJQUFJLEVBQ25ELG1CQUFvQixFQUNuQiw4QkFDQSxFQUFrQixrQkFDbkIsRUFDQSxZQUFhLEVBQ1osa0RBQ0EsRUFBa0IsV0FDbkIsRUFDQSxJQUFLLEVBQ0osb0lBQ0EsRUFBTSxlQUNILDJEQUNBLDBEQUNILEVBQWtCLEdBQ25CLEVBQ0EsWUFBYSxFQUNaLHlCQUNBLEVBQWtCLFdBQ25CLEVBQ0EsYUFBYyxFQUFHLGVBQWdCLEVBQWtCLFlBQVksRUFDL0QsVUFBVyxFQUFHLHlCQUEwQixFQUFrQixTQUFTLEVBQ25FLE1BQU8sRUFDTixnRkFDQSxFQUFrQixLQUNuQixFQUNBLFFBQVMsRUFDUiw0REFDQSxFQUFrQixPQUNuQixFQUNBLFNBQVUsRUFDVCxtQ0FDQSxFQUFrQixRQUNuQixFQUNBLE9BQVEsRUFBRyxZQUFhLEVBQWtCLE1BQU0sS0FDN0MsQ0FDSixFQUNBLFdBQVksQ0FDWCxLQUFNLEVBQUcsWUFBVyxhQUFZLEtBQVksQ0FDM0MsT0FDQyxHQUFDLE1BQUQsQ0FDQyxVQUFXLEVBQUcsQ0FBUyxFQUN2QixZQUFVLFdBQ1YsSUFBSyxLQUNELEVBQ0wsR0FHRixRQUFTLEVBQUcsWUFBVyxpQkFBZ0IsS0FBWSxDQUNsRCxHQUFJLElBQWdCLE9BQ25CLE9BQ0MsR0FBQyxHQUFELENBQWlCLFVBQVcsRUFBRyxTQUFVLENBQVMsS0FBTyxFQUFPLEVBSWxFLEdBQUksSUFBZ0IsUUFDbkIsT0FDQyxHQUFDLEdBQUQsQ0FDQyxVQUFXLEVBQUcsU0FBVSxDQUFTLEtBQzdCLEVBQ0wsRUFJRixPQUNDLEdBQUMsR0FBRCxDQUFpQixVQUFXLEVBQUcsU0FBVSxDQUFTLEtBQU8sRUFBTyxHQUdsRSxVQUFXLEdBQ1gsV0FBWSxFQUFHLGNBQWEsS0FBWSxDQUN2QyxPQUNDLEdBSUUsS0FKRixJQUFRLEVBQVIsU0FDQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtFQUFmLFNBQ0UsRUFDQSxFQUNELE1BR0QsQ0FDSixFQUNBLFdBQVksQ0FDWCxvQkFBcUIsQ0FBQyxJQUNyQixFQUFLLGVBQWUsVUFBVyxDQUFFLE1BQU8sT0FBUSxDQUFDLEtBQy9DLENBQ0osRUFDQSxnQkFBaUIsS0FDYixFQUNMLEVBSUYsU0FBUyxFQUFpQixFQUN6QixZQUNBLE1BQ0EsZUFDRyxHQUN1QyxDQUMxQyxJQUFNLEVBQW9CLEdBQXFCLEVBRXpDLEVBQVksVUFBMEIsSUFBSSxFQU9oRCxPQU5NLGFBQVUsSUFBTSxDQUNyQixHQUFJLEVBQVUsUUFDYixFQUFJLFNBQVMsTUFBTSxHQUVsQixDQUFDLEVBQVUsT0FBTyxDQUFDLEVBR3JCLEdBQUMsRUFBRCxDQUNDLFVBQVcsRUFDVixtM0JBQ0EsRUFBa0IsSUFDbEIsQ0FDRCxFQUNBLFdBQVUsRUFBSSxLQUFLLG1CQUFtQixFQUN0QyxpQkFBZ0IsRUFBVSxVQUMxQixvQkFBbUIsRUFBVSxhQUM3QixtQkFBa0IsRUFBVSxZQUM1Qix1QkFDQyxFQUFVLFVBQ1YsQ0FBQyxFQUFVLGFBQ1gsQ0FBQyxFQUFVLFdBQ1gsQ0FBQyxFQUFVLGFBRVosSUFBSyxFQUNMLEtBQUssT0FDTCxRQUFRLFdBQ0osRUFDTCxFQ25ORixvRkFLQSxTQUFTLEVBQU8sS0FDWixHQUNtRCxDQUN0RCxPQUFPLEdBQWtCLFFBQWxCLENBQXVCLFlBQVUsYUFBYyxFQUFPLEVBRzlELFNBQVMsRUFBYyxLQUNuQixHQUNzRCxDQUN6RCxPQUFPLEdBQWtCLFdBQWxCLENBQTBCLFlBQVUscUJBQXNCLEVBQU8sRUFHekUsU0FBUyxFQUFjLEVBQ3RCLFlBQ0EsUUFBUSxTQUNSLGFBQWEsS0FDVixHQUNzRCxDQUN6RCxPQUNDLEdBV21CLFVBWG5CLFVBQ0MsR0FBa0IsV0FBbEIsQ0FDQyxNQUFPLEVBQ1AsVUFBVyxFQUNWLGllQUNBLENBQ0QsRUFDQSxZQUFVLGtCQUNWLFdBQVksS0FDUixFQUNMLEVBQ0Msc0RGWkcsU0FBUyxFQUFVLEVBQ3pCLE9BQ0EsZ0JBQ0EsV0FDQSxRQUFRLGNBQ1IsWUFDQSxZQUNtQixDQUNuQixJQUFNLEVBQWEsR0FBaUMsSUFBSSxHQUNqRCxFQUFjLEdBQW1CLEdBQTJCLENBQUksRUFHdkUsR0FBVSxJQUFNLENBQ2YsRUFBZ0IsQ0FBSSxHQUNsQixDQUFDLENBQUksQ0FBQyxFQUVULElBQU0sRUFBbUIsQ0FBQyxJQUEyQixDQUVwRCxHQURBLEVBQWdCLENBQUksRUFDaEIsRUFDSCxFQUFXLFNBQVMsTUFBTSxFQUUzQixJQUFXLENBQUksR0FHaEIsT0FDQyxHQThCRSxNQTlCRixDQUFLLFVBQVcsRUFBaEIsU0FDQyxHQTRCRSxHQTVCRixVQTRCRSxDQTNCRCxHQWVFLEdBZkYsQ0FBZ0IsUUFBTyxHQUF2QixTQUNDLEdBYUUsRUFiRixDQUNDLFVBQVcsRUFDVixvRkFDRCxFQUNBLGFBQVksQ0FBQyxFQUNiLFFBQVEsVUFMVCxTQWFFLENBTkQsR0FBQyxHQUFELEVBQWMsRUFDYixFQUNBLEVBQU0sQ0FBWSxFQUFFLE9BQU8sYUFBYSxFQUV4QyxHQUFlLE9BQWYsVUFBTyxFQUFRLEdBRWYsRUFDRCxFQUNGLEdBVUUsR0FWRixDQUFnQixNQUFNLFFBQVEsVUFBVSxhQUF4QyxTQVVFLENBVEQsR0FBQyxHQUFELENBQWMsSUFBSyxFQUFZLEVBQy9CLEdBQUMsR0FBRCxDQUNDLGNBQWMsV0FDZCxhQUFjLEVBQ2QsU0FBVSxFQUNWLEtBQUssU0FDTCxTQUFVLEVBQ1YsU0FBVSxFQUNYLEdBQ0MsR0FDRCxFQUNELDJDRzFFSixTQUFTLEVBQUssRUFBRyxZQUFXLFVBQVMsR0FBd0MsQ0FDNUUsT0FDQyxHQUFDLFFBQUQsQ0FDQyxVQUFXLEVBQ1Ysa2NBQ0EsZ0ZBQ0EseUdBQ0EsQ0FDRCxFQUNBLFlBQVUsUUFDVixLQUFNLEtBQ0YsRUFDTCxFQ2hCRixrRkFLQSxTQUFTLENBQUssRUFDYixlQUNHLEdBQ2lELENBQ3BELE9BQ0MsR0FBZ0IsUUFBaEIsQ0FDQyxVQUFXLEVBQ1Ysc05BQ0EsQ0FDRCxFQUNBLFlBQVUsV0FDTixFQUNMLEVDakJGLG1HQVVBLFNBQVMsRUFBVSxFQUNsQixZQUNBLFdBQ0EsbUJBQ0csR0FDZ0IsQ0FDbkIsT0FDQyxHQWlCc0IsUUFqQnRCLENBQ0MsVUFBVyxFQUFHLFdBQVksQ0FBUyxFQUNuQyxZQUFVLGlCQUNOLEVBSEwsU0FpQkUsQ0FaRCxHQVNzQixZQVR0QixJQUNLLEVBQ0osVUFBVyxFQUNWLHFKQUNBLEdBQWUsU0FDaEIsRUFDQSxZQUFVLHVCQU5YLFNBUUUsRUFDQSxFQUNGLEdBQUMsR0FBRCxFQUFXLEVBQ1gsR0FBcUIsVUFBckIsRUFBNEIsR0FDM0IsRUFJSixTQUFTLEVBQVMsRUFDakIsWUFDQSxjQUFjLGNBQ1gsR0FDcUUsQ0FDeEUsT0FDQyxHQWlCc0IsdUJBakJ0QixDQUNDLFVBQVcsRUFDVixxREFDQSxJQUFnQixZQUNmLDZDQUNELElBQWdCLGNBQ2YsK0NBQ0QsQ0FDRCxFQUNBLFlBQVUsd0JBQ1YsWUFBYSxLQUNULEVBWEwsU0FhQyxHQUFxQixtQkFBckIsQ0FDQyxVQUFVLHlDQUNWLFlBQVUsb0JBQ1gsRUFDQyxFQzdESixnQkFBUyxzQkFDVCxvQkFBUyxhQUFXLGVBQVEsZUNENUIsa0JBQVMsZUFTRixTQUFTLEVBQXlCLEVBQ3hDLGFBQWEsVUFDYixVQUFVLFFBQ1YsVUFBVSxTQUN3QixDQXFDbEMsTUFBTyxDQUNOLFlBcENtQixHQUFRLElBQU0sQ0FDakMsSUFBTSxFQUFrQixDQUFDLEdBQ2xCLEVBQVMsR0FBYSxFQUFRLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxHQUNuRCxFQUFTLEdBQWEsRUFBUSxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFFcEQsRUFBa0IsRUFBVSxHQUFLLEVBQ2pDLEVBQWtCLEVBQVUsR0FBSyxFQUV2QyxRQUNLLEVBQWUsRUFDbkIsR0FBZ0IsRUFDaEIsR0FBZ0IsR0FDZixDQUNELElBQU0sRUFBUSxLQUFLLE1BQU0sRUFBZSxFQUFFLEVBQ3BDLEVBQVUsRUFBZSxHQUV6QixFQUFhLEdBQUcsRUFBTSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsS0FBSyxFQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxJQUM3RixFQUFNLEtBQUssQ0FBVSxFQUd0QixPQUFPLEdBQ0wsQ0FBQyxFQUFTLENBQU8sQ0FBQyxFQWdCcEIsV0Fka0IsQ0FBQyxJQUFpQixDQUNwQyxJQUFPLEVBQU8sR0FBVyxFQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxFQUM3QyxFQUFTLEdBQVMsR0FBSyxLQUFPLEtBQzlCLEVBQWUsSUFBVSxFQUFJLEdBQUssRUFBUSxHQUFLLEVBQVEsR0FBSyxFQUVsRSxHQUFJLElBQWUsVUFDbEIsTUFBTyxHQUFHLEVBQU0sU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEtBQUssRUFBUSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsSUFHbEYsTUFBTyxHQUFHLEtBQWdCLEVBQVEsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEtBQUssSUFNbEUsc0REdkNELElBQU0sR0FBYyxDQUFDLElBQXdDLENBRTVELEVBQUUsZ0JBQWdCLEdBZVosU0FBUyxFQUFVLEVBQ3pCLFFBQ0EsV0FDQSxVQUFVLFFBQ1YsVUFBVSxRQUNWLGFBQWEsVUFDYixjQUFjLGlCQUNkLFlBQ0EsV0FBVyxHQUNYLFFBQ21CLENBQ25CLElBQU8sRUFBTSxHQUFXLEdBQVMsRUFBSyxHQUMvQixFQUFRLEdBQWEsR0FBUyxFQUFFLEVBQ2pDLEVBQVcsR0FBeUIsSUFBSSxFQUN4QyxFQUFhLEdBQTBCLElBQUksR0FDMUMsRUFBYyxHQUFtQixHQUFpQixDQUFDLEdBRWxELGNBQWEsY0FBZSxHQUEwQixDQUM3RCxhQUNBLFVBQ0EsU0FDRCxDQUFDLEVBR0ssRUFBa0IsRUFBWSxPQUFPLENBQUMsSUFBUyxDQUVwRCxPQURzQixFQUFXLENBQUksRUFDaEIsWUFBWSxFQUFFLFNBQVMsRUFBTyxZQUFZLENBQUMsRUFDaEUsRUFFSyxFQUFlLENBQUMsSUFBaUIsQ0FDdEMsRUFBUyxDQUFJLEVBQ2IsRUFBUSxFQUFLLEVBQ2IsRUFBVSxFQUFFLEdBSWIsR0FBVSxJQUFNLENBQ2YsR0FBSSxFQUFNLENBQ1QsR0FBSSxFQUFXLFFBQ2QsRUFBZ0IsRUFBVyxRQUFRLFdBQVcsRUFFL0MsV0FBVyxJQUFNLENBQ2hCLEVBQVMsU0FBUyxNQUFNLEdBQ3RCLENBQUMsSUFFSCxDQUFDLENBQUksQ0FBQyxFQUVULElBQU0sRUFBb0IsRUFBUSxFQUFXLENBQUssRUFBSSxFQUV0RCxPQUNDLEdBMERFLEdBMURGLENBQVMsYUFBYyxFQUFTLEtBQU0sRUFBdEMsU0EwREUsQ0F6REQsR0FjRSxHQWRGLENBQWdCLFFBQU8sR0FBdkIsU0FDQyxHQVlFLEVBWkYsQ0FDQyxnQkFBYyxzQkFDZCxnQkFBZSxFQUNmLFVBQVcsRUFBRyx1QkFBd0IsQ0FBUyxFQUMvQyxjQUFhLGVBQWUsSUFDNUIsU0FBVSxFQUNWLElBQUssRUFDTCxLQUFLLFdBQ0wsUUFBUSxVQVJULFNBWUUsQ0FGRCxHQUFDLEdBQUQsQ0FBTyxVQUFVLGVBQWUsRUFDL0IsR0FDQSxFQUNELEVBQ0YsR0F5Q0UsR0F6Q0YsQ0FDQyxNQUFNLFFBQ04sVUFBVSxNQUNWLE1BQU8sQ0FBRSxNQUFPLENBQWEsRUFIOUIsU0F5Q0UsQ0FwQ0QsR0FRRSxNQVJGLENBQUssVUFBVSxlQUFmLFNBQ0MsR0FBQyxHQUFELENBQ0MsVUFBVSxNQUNWLFNBQVUsQ0FBQyxJQUFNLEVBQVUsRUFBRSxPQUFPLEtBQUssRUFDekMsWUFBWSxpQkFDWixJQUFLLEVBQ0wsTUFBTyxFQUNSLEVBQ0MsRUFDRixHQTBCRSxHQTFCRixDQUFZLFVBQVUsWUFBWSxRQUFTLEdBQTNDLFNBQ0MsR0F3QkUsTUF4QkYsQ0FBSyxVQUFVLE1BQWYsU0FDRSxFQUFnQixTQUFXLEVBQzNCLEdBRUUsTUFGRixDQUFLLFVBQVUsaURBQWYsZUFFRSxFQUVGLEVBQWdCLElBQUksQ0FBQyxJQUFTLENBQzdCLElBQU0sRUFBYSxFQUFXLENBQUksRUFFbEMsT0FDQyxHQVVFLFNBVkYsQ0FDQyxVQUFXLEVBQ1YsMEtBSmdCLElBQVMsR0FLWCxrQ0FDZixFQUVBLFFBQVMsSUFBTSxFQUFhLENBQUksRUFDaEMsS0FBSyxTQVBOLFNBU0UsR0FKSSxDQUtKLEVBRUgsRUFFRCxFQUNELEdBQ0QsR0FDRCxFRWhJRyxJQUFNLEdBQWdCLENBQzVCLEVBQ0EsSUFDYSxDQUNiLEdBQUksQ0FBQyxFQUNKLE1BQU8sR0FHUixJQUFJLEVBQVcsR0FRZixPQVBBLEdBQXFCLEVBQWUsQ0FDbkMsT0FDQSxRQUFTLElBQU0sQ0FDZCxFQUFXLEdBRWIsQ0FBQyxFQUVNLEdBZ0JLLEdBQWlCLEVBQzdCLE9BQ0EsT0FDQSxTQUFTLEVBQ1QsbUJBQ3FDLENBRXJDLEdBQUksQ0FBQyxFQUNKLE1BQU8sR0FJUixHQUFJLElBQVMsT0FDWixPQUFPLEdBQWMsRUFBTSxDQUFhLEVBR3pDLElBQUksRUFBbUIsR0FDakIsRUFBaUIsRUFBTyxHQUFLLEVBbUJuQyxPQWpCQSxHQUFxQixFQUFlLENBQ25DLE9BQ0EsUUFBUyxDQUFDLElBQVcsQ0FHcEIsSUFBTSxFQUFTLEVBQU8sV0FBYSxFQUM3QixFQUFPLEVBQU8sU0FBVyxHQUV6QixFQUFlLEVBQVMsR0FDeEIsRUFBYSxFQUFPLEdBRTFCLEdBQUksR0FBa0IsR0FBZ0IsRUFBaUIsRUFDdEQsRUFBbUIsR0FHdEIsQ0FBQyxFQUVNLEdBTUssR0FBdUIsQ0FDbkMsRUFDQSxJQUlJLENBQ0osSUFBUSxPQUFNLFdBQVksRUFDMUIsR0FBSSxDQUFDLEVBQUksT0FFVCxJQUFNLEVBQVUsTUFBTSxRQUFRLENBQUUsRUFBSSxFQUFLLENBQUMsQ0FBRSxFQUU1QyxRQUFXLEtBQVUsRUFDcEIsR0FBSSxHQUFRLEVBQU8sV0FBWSxDQUM5QixJQUFNLEVBQVksRUFBSyxJQUFJLEVBQzNCLEdBQ0MsRUFBTyxXQUFXLEtBQUssQ0FBQyxJQUFNLEdBQXFCLEtBQU8sQ0FBUyxFQUVuRSxFQUFRLENBQU0sRUFHZixPQUFRLENBQU0sR0FjSixHQUE4QixDQUFDLElBS2xCLENBQ3pCLElBQ0MsV0FDQSxnQkFDQSx3QkFBd0IsQ0FBQyxFQUN6Qix3QkFDRyxFQUVBLEVBQVcsR0FDWCxFQUFTLEVBQ1QsRUFBbUIsR0FFakIsRUFBVSxDQUFDLElBQTBCLENBQzFDLEVBQW1CLEdBQ25CLEVBQVcsS0FBSyxJQUFJLEVBQVUsRUFBTyxXQUFhLENBQUMsRUFDbkQsRUFBUyxLQUFLLElBQUksRUFBUSxFQUFPLFNBQVcsRUFBRSxHQUkvQyxRQUFXLEtBQVEsRUFBVSxDQUM1QixHQUFxQixFQUFlLENBQUUsT0FBTSxTQUFRLENBQUMsRUFDckQsUUFBVyxLQUFPLEVBQ2pCLEdBQXFCLEVBQUssQ0FBRSxPQUFNLFNBQVEsQ0FBQyxFQUs3QyxHQUFJLENBQUMsR0FBb0IsRUFBc0IsQ0FDOUMsR0FBcUIsRUFBZSxDQUFFLFNBQVEsQ0FBQyxFQUMvQyxRQUFXLEtBQU8sRUFDakIsR0FBcUIsRUFBSyxDQUFFLFNBQVEsQ0FBQyxFQUl0QyxHQUFJLENBQUMsRUFDSixFQUFXLEVBQ1gsRUFBUyxHQUNULEVBQW1CLEdBSXJCLE1BQU8sQ0FBRSxXQUFVLFNBQVEsa0JBQWlCLEdDbEt0QyxJQUFNLEdBQWdCLENBQzVCLEVBQ0EsRUFDQSxJQUNpQixDQUNqQixJQUFPLEVBQU8sR0FBVyxFQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxFQUM3QyxFQUFPLEVBQU0sQ0FBSSxFQUFFLEtBQUssQ0FBSyxFQUFFLE9BQU8sQ0FBTyxFQUNuRCxPQUFPLEVBQVcsRUFBSyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBSSxHQUcvQixHQUFtQixDQUMvQixFQUNBLEVBQ0EsSUFDaUIsQ0FDakIsSUFBTyxFQUFPLEdBQVcsRUFBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFDN0MsRUFBTyxFQUFNLENBQUksRUFBRSxLQUFLLENBQUssRUFBRSxPQUFPLENBQU8sRUFDbkQsT0FBTyxFQUFXLEVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUksR0FHakMsR0FBcUIsQ0FDakMsRUFDQSxJQUNJLENBQ0osR0FBSSxDQUFDLEVBQWUsTUFBTyxDQUFFLElBQUssUUFBUyxJQUFLLE9BQVEsRUFFeEQsSUFBTSxFQUFZLEVBQU0sQ0FBSSxHQUVwQixXQUFVLFNBQVEsb0JBQXFCLEdBQTRCLENBQzFFLFNBQVUsQ0FBQyxDQUFTLEVBQ3BCLGdCQUNBLHFCQUFzQixFQUN2QixDQUFDLEVBRUQsR0FBSSxDQUFDLEVBQ0osTUFBTyxDQUFFLElBQUssUUFBUyxJQUFLLE9BQVEsRUFHckMsTUFBTyxDQUNOLElBQUssR0FBRyxFQUFTLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxPQUMzQyxJQUFLLElBQUksRUFBUyxHQUFHLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxNQUNoRCxHQzdDRCxvQkFBUyxjQUFXLGVBQVMsZUFFN0IsZ0JBQVMsd0RDRVQsU0FBUyxFQUFJLEVBQUcsZUFBYyxHQUFzQyxDQUNuRSxPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVcsRUFDVix1RUFDQSxDQUNELEVBQ0EsWUFBVSxVQUNOLEVBQ0wsRUFJRixTQUFTLEVBQVUsRUFBRyxlQUFjLEdBQXNDLENBQ3pFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUNWLGdKQUNBLENBQ0QsRUFDQSxZQUFVLGlCQUNOLEVBQ0wsRUFJRixTQUFTLEVBQVMsRUFBRyxlQUFjLEdBQXNDLENBQ3hFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUFHLDZCQUE4QixDQUFTLEVBQ3JELFlBQVUsZ0JBQ04sRUFDTCxFQTJCRixTQUFTLEVBQVcsRUFBRyxlQUFjLEdBQXNDLENBQzFFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUFHLFdBQVksQ0FBUyxFQUNuQyxZQUFVLGtCQUNOLEVBQ0wsRUNyRUYseUNBQ0Esb0JBQVMsc0JBQVcsb0JBQWlCLDBFQUtyQyxTQUFTLEVBQU0sS0FDWCxHQUNrRCxDQUNyRCxPQUFPLEdBQWlCLE9BQWpCLENBQXNCLFlBQVUsWUFBYSxFQUFPLEVBUzVELFNBQVMsRUFBVyxLQUNoQixHQUNtRCxDQUN0RCxPQUFPLEdBQWlCLFFBQWpCLENBQXVCLFlBQVUsa0JBQW1CLEVBQU8sRUFHbkUsU0FBUyxFQUFhLEVBQ3JCLFlBQ0EsT0FBTyxVQUNQLGNBQ0csR0FHRCxDQUNGLE9BQ0MsR0Fha0IsVUFibEIsQ0FDQyxVQUFXLEVBQ1YsK3lCQUNBLENBQ0QsRUFDQSxZQUFXLEVBQ1gsWUFBVSxvQkFDTixFQVBMLFNBYUUsQ0FKQSxFQUNELEdBRWtCLE9BRmxCLENBQXNCLFFBQU8sR0FBN0IsU0FDQyxHQUFDLEdBQUQsQ0FBaUIsVUFBVSxvQkFBb0IsRUFDOUMsR0FDRCxFQUlKLFNBQVMsRUFBYSxFQUNyQixZQUNBLFdBQ0EsV0FBVyxTQUNYLFFBQVEsWUFDTCxHQUNxRCxDQUN4RCxPQUNDLEdBeUJrQixTQXpCbEIsVUFDQyxHQXVCa0IsVUF2QmxCLENBQ0MsTUFBTyxFQUNQLFVBQVcsRUFDVixnakJBQ0EsSUFBYSxVQUNaLGtJQUNELENBQ0QsRUFDQSxZQUFVLGlCQUNWLFNBQVUsS0FDTixFQVZMLFNBdUJFLENBWEQsR0FBQyxHQUFELEVBQXNCLEVBQ3RCLEdBUWtCLFdBUmxCLENBQ0MsVUFBVyxFQUNWLE1BQ0EsSUFBYSxVQUNaLHFHQUNGLEVBTEQsU0FPRSxFQUNBLEVBQ0YsR0FBQyxHQUFELEVBQXdCLEdBQ3ZCLEVBQ0QsRUFpQkosU0FBUyxFQUFVLEVBQ2xCLFlBQ0EsY0FDRyxHQUNrRCxDQUNyRCxPQUNDLEdBY2tCLE9BZGxCLENBQ0MsVUFBVyxFQUNWLDRhQUNBLENBQ0QsRUFDQSxZQUFVLGlCQUNOLEVBTkwsU0FjRSxDQU5ELEdBSUUsT0FKRixDQUFNLFVBQVUsNkRBQWhCLFNBQ0MsR0FFa0IsZ0JBRmxCLFVBQ0MsR0FBQyxHQUFELENBQVcsVUFBVSxTQUFTLEVBQzdCLEVBQ0QsRUFDRixHQUFzRCxXQUF0RCxVQUEyQixFQUFXLEdBQ3JDLEVBaUJKLFNBQVMsRUFBb0IsRUFDNUIsZUFDRyxHQUM0RCxDQUMvRCxPQUNDLEdBU2tCLGlCQVRsQixDQUNDLFVBQVcsRUFDVix1REFDQSxDQUNELEVBQ0EsWUFBVSw2QkFDTixFQU5MLFNBUUMsR0FBQyxHQUFELENBQWUsVUFBVSxTQUFTLEVBQ2pDLEVBSUosU0FBUyxFQUFzQixFQUM5QixlQUNHLEdBQzhELENBQ2pFLE9BQ0MsR0FTa0IsbUJBVGxCLENBQ0MsVUFBVyxFQUNWLHVEQUNBLENBQ0QsRUFDQSxZQUFVLCtCQUNOLEVBTkwsU0FRQyxHQUFDLEdBQUQsQ0FBaUIsVUFBVSxTQUFTLEVBQ25DLHFERnRKSixJQUFNLEdBQVcsQ0FDaEIsTUFBTyxHQUFNLE1BQ2IsT0FBUSxHQUFNLE9BQ2QsUUFBUyxHQUFNLFFBQ2YsT0FBUSxHQUFNLE1BQ2YsRUFDTSxHQUFjLE9BQU8sWUFDMUIsT0FBTyxRQUFRLEVBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRyxLQUFPLENBQUMsRUFBRyxDQUFDLENBQUMsQ0FDaEQsRUFDTSxHQUFXLENBQ2hCLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sRUFDUCxFQUNNLEdBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxLQUFLLEVBQzNELEdBQVcsQ0FBQyxJQUFjLEtBQUssSUFBSSxFQUFHLE9BQU8sU0FBUyxFQUFHLEVBQUUsR0FBSyxDQUFDLEVBRWpFLEdBQWlCLENBQ3RCLEVBQ0EsSUFDSSxDQUNKLEdBQUksQ0FBQyxFQUNKLE9BQU8sRUFBRSxrQkFBa0IsRUFFNUIsR0FBSSxDQUNILElBQU0sRUFBTyxJQUFJLEdBQU0sQ0FBSSxFQUFFLE9BQU8sRUFDcEMsT0FBTyxHQUFRLENBQUMsRUFBSyxZQUFZLEVBQUUsU0FBUyxPQUFPLEVBQ2hELEVBQUssT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUFJLEVBQUssTUFBTSxDQUFDLEVBQzNDLEVBQUUsa0JBQWtCLEVBQ3RCLEtBQU0sQ0FDUCxPQUFPLEVBQUUsa0JBQWtCLElBU2hCLEdBQW9DLEVBQUcsUUFBTyxjQUFlLENBQ3pFLElBQVEsS0FBTSxFQUF3QixDQUFDLEtBQVMsQ0FBRSxFQUFHLEVBQUksQ0FBRSxFQUFFLEdBQ3RELEVBQU0sR0FBVyxHQUFTLENBQUMsQ0FBQyxDQUFLLEdBQ2pDLEVBQU0sR0FBVyxHQUE4QixJQUFNLEdBQVMsSUFBSSxFQUVuRSxFQUFXLEdBQ2hCLElBQU0sR0FBUyxJQUFJLENBQUMsRUFBRyxLQUFPLENBQUUsTUFBTyxHQUFTLEdBQUksTUFBTyxFQUFFLENBQUMsQ0FBRSxFQUFFLEVBQ2xFLENBQUMsQ0FBQyxDQUNILEVBRUEsR0FBVSxJQUFNLENBRWYsR0FEQSxFQUFRLENBQUMsQ0FBQyxDQUFLLEVBQ1gsRUFDSCxFQUFRLENBQUssR0FFWixDQUFDLENBQUssQ0FBQyxFQUVWLElBQU0sRUFBUyxDQUFDLElBQTZCLENBQzVDLEdBQUksQ0FBQyxFQUNKLE9BRUQsSUFBTSxFQUFPLElBQUssS0FBUyxDQUFFLEVBQzdCLEVBQVEsQ0FBSSxFQUNaLEVBQVMsRUFBTyxFQUFPLElBQUksR0FHdEIsRUFBUyxDQUFDLElBQXFCLENBRXBDLEdBREEsRUFBUSxDQUFPLEVBQ1gsQ0FBQyxFQUFTLENBQ2IsRUFBUyxJQUFJLEVBQ2IsT0FFRCxHQUFJLEVBQU0sQ0FDVCxFQUFTLENBQUksRUFDYixPQUVELElBQU0sRUFBTSxDQUFFLEtBQU0sR0FBTSxNQUFPLFNBQVUsQ0FBRSxFQUM3QyxFQUFRLENBQUcsRUFDWCxFQUFTLENBQUcsR0FHUCxFQUFZLENBQUMsSUFBYyxDQUNoQyxJQUFNLEVBQVEsR0FBTSxXQUEyQixDQUFDLEVBQzFDLEVBQU0sR0FBUyxHQUNmLEVBQU8sRUFBSyxTQUFTLENBQUcsRUFDM0IsRUFBSyxPQUFPLENBQUMsSUFBTSxJQUFNLENBQUcsRUFDNUIsQ0FBQyxHQUFHLEVBQU0sQ0FBRyxFQUNoQixFQUFPLENBQUUsVUFBVyxFQUFLLE9BQVMsRUFBTyxNQUFVLENBQUMsR0FHL0MsRUFBYSxDQUFDLElBQXNDLENBQ3pELElBQU0sRUFBMkIsQ0FBRSxNQUFPLE9BQVcsTUFBTyxNQUFVLEVBQ3RFLEdBQUksSUFBUyxRQUNaLEVBQUUsTUFBUSxHQUFNLE9BQVMsRUFFMUIsR0FBSSxJQUFTLFFBQ1osRUFBRSxNQUFRLEdBQU0sT0FBUyxFQUFNLEVBQUUsSUFBSSxFQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFBRSxPQUFPLEVBRXRFLEVBQU8sQ0FBQyxHQUdILEVBQVUsR0FBTSxNQUFRLFFBQVUsR0FBTSxNQUFRLFFBQVUsUUFDMUQsRUFBTyxHQUFZLEdBQU0sTUFBUSxHQUFNLFFBQVUsUUFDakQsRUFBWSxNQUFNLFFBQVEsR0FBTSxTQUFTLEVBQzVDLEVBQUssVUFDTCxHQUFNLFVBQ0wsQ0FBQyxFQUFLLFNBQVMsRUFDZixDQUFDLEVBRUwsT0FDQyxHQXNKRSxHQXRKRixDQUFNLGNBQVksb0JBQWxCLFNBc0pFLENBckpELEdBZUUsR0FmRixDQUFZLFVBQVUsT0FBdEIsU0FlRSxDQWRELEdBUUUsTUFSRixDQUFLLFVBQVUsOEJBQWYsU0FRRSxDQVBELEVBQUMsR0FBRCxDQUNDLFFBQVMsRUFDVCxjQUFZLG9CQUNaLEdBQUcsWUFDSCxnQkFBaUIsRUFDbEIsRUFDQSxFQUE4QyxHQUE5QyxDQUFXLFVBQVUsVUFBckIsU0FBZ0MsRUFBRSxRQUFRLEVBQUksR0FDN0MsRUFDRCxHQUFRLEdBQ1IsRUFFRSxJQUZGLENBQUcsVUFBVSxnQ0FBYixTQUNFLEdBQWUsRUFBTyxDQUFDLEVBQ3ZCLEdBRUYsRUFFRCxHQUNBLEVBaUlFLEdBaklGLENBQWEsVUFBVSxPQUF2QixTQUNDLEdBK0hFLE1BL0hGLENBQUssVUFBVSxZQUFmLFNBK0hFLENBOUhELEdBMENFLE1BMUNGLENBQUssVUFBVSx5QkFBZixTQTBDRSxDQXpDRCxHQXlCRSxNQXpCRixVQXlCRSxDQXhCRCxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxZQUFuQyxTQUNFLEVBQUUsU0FBUyxFQUNYLEVBQ0YsR0FvQkUsR0FwQkYsQ0FDQyxjQUFlLENBQUMsSUFDZixFQUFPLENBQUUsS0FBTSxHQUFTLEVBQTRCLENBQUMsRUFFdEQsTUFBTyxFQUpSLFNBb0JFLENBZEQsRUFNRSxHQU5GLENBQ0MsVUFBVSxNQUNWLGNBQVksbUJBQ1osR0FBRyxZQUhKLFNBS0MsRUFBQyxHQUFELEVBQWEsRUFDWixFQUNGLEVBTUUsR0FORixVQUNFLE9BQU8sS0FBSyxFQUFRLEVBQUUsSUFBSSxDQUFDLElBQzNCLEVBRUUsR0FGRixDQUFvQixNQUFPLEVBQTNCLFNBQ0UsRUFBRSxFQUFFLFlBQVksQ0FBQyxHQURGLENBRWYsQ0FDRixFQUNBLEdBQ0QsR0FDRCxFQUNGLEdBY0UsTUFkRixVQWNFLENBYkQsRUFFRSxFQUZGLENBQU8sVUFBVSxVQUFVLFFBQVEsV0FBbkMsU0FDRSxFQUFFLE9BQU8sRUFDVCxFQUNGLEVBQUMsR0FBRCxDQUNDLFVBQVUsTUFDVixHQUFHLFdBQ0gsSUFBSSxJQUNKLFNBQVUsQ0FBQyxJQUNWLEVBQU8sQ0FBRSxTQUFVLEdBQVMsRUFBRSxPQUFPLEtBQUssQ0FBRSxDQUFDLEVBRTlDLEtBQUssU0FDTCxNQUFPLEdBQU0sVUFBWSxFQUMxQixHQUNDLEdBQ0QsRUFFRCxHQUFNLE9BQVMsR0FBTSxRQUNyQixHQW1CRSxNQW5CRixVQW1CRSxDQWxCRCxFQUE0QyxFQUE1QyxDQUFPLFVBQVUsVUFBakIsU0FBNEIsRUFBRSxVQUFVLEVBQUksRUFDNUMsRUFnQkUsTUFoQkYsQ0FBSyxVQUFVLDRCQUFmLFNBQ0UsRUFBUyxJQUFJLENBQUMsRUFBRyxJQUNqQixHQVlFLE1BWkYsQ0FBSyxVQUFVLDhCQUFmLFNBWUUsQ0FYRCxFQUFDLEdBQUQsQ0FDQyxRQUFTLEVBQVUsU0FBUyxFQUFFLEtBQUssRUFDbkMsR0FBSSxPQUFPLElBQ1gsZ0JBQWlCLElBQU0sRUFBVSxDQUFDLEVBQ25DLEVBQ0EsRUFLRSxFQUxGLENBQ0MsVUFBVSx5QkFDVixRQUFTLE9BQU8sSUFGakIsU0FJRSxFQUFFLE1BQ0YsSUFYK0MsRUFBRSxLQVlsRCxDQUNGLEVBQ0EsR0FDRCxFQUdILEdBMERFLE1BMURGLFVBMERFLENBekRELEVBQXdDLEVBQXhDLENBQU8sVUFBVSxVQUFqQixTQUE0QixFQUFFLE1BQU0sRUFBSSxFQUN4QyxHQXVERSxNQXZERixDQUFLLFVBQVUsaUJBQWYsU0F1REUsQ0F0REQsR0FTRSxNQVRGLENBQUssVUFBVSw4QkFBZixTQVNFLENBUkQsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLFFBQ3JCLEdBQUcsUUFDSCxnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDMUMsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxRQUFuQyxTQUNFLEVBQUUsT0FBTyxFQUNULEdBQ0QsRUFDRixHQXNCRSxNQXRCRixDQUFLLFVBQVUsOEJBQWYsU0FzQkUsQ0FyQkQsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLFFBQ3JCLEdBQUcsUUFDSCxnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDMUMsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxRQUFuQyxTQUNFLEVBQUUsT0FBTyxFQUNULEVBQ0QsSUFBWSxTQUNaLEVBQUMsR0FBRCxDQUNDLFVBQVUsbUJBQ1YsY0FBWSxjQUNaLElBQUksSUFDSixTQUFVLENBQUMsSUFDVixFQUFPLENBQUUsTUFBTyxHQUFTLEVBQUUsT0FBTyxLQUFLLENBQUUsQ0FBQyxFQUUzQyxLQUFLLFNBQ0wsTUFBTyxHQUFNLE9BQVMsRUFDdkIsRUFFRCxFQUE4QyxPQUE5QyxDQUFNLFVBQVUsVUFBaEIsU0FBMkIsRUFBRSxhQUFhLEVBQUksR0FDN0MsRUFDRixHQW9CRSxNQXBCRixDQUFLLFVBQVUsOEJBQWYsU0FvQkUsQ0FuQkQsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLFFBQ3JCLEdBQUcsS0FDSCxnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDMUMsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxLQUFuQyxTQUNFLEVBQUUsSUFBSSxFQUNOLEVBQ0QsSUFBWSxTQUNaLEVBQUMsR0FBRCxDQUNDLFVBQVUsTUFDVixLQUFNLEdBQU0sTUFDWixTQUFVLENBQUMsSUFDVixFQUFPLENBQ04sTUFBTyxFQUFJLEVBQU0sQ0FBQyxFQUFFLE1BQU0sS0FBSyxFQUFFLE9BQU8sRUFBSSxNQUM3QyxDQUFDLEVBRUgsR0FFQSxHQUNELEdBQ0QsR0FDRCxFQUNELEdBRUYsR0cxUkosc0JBQVMsZUFBYSxlQUtmLFNBQVMsRUFBd0IsQ0FBQyxFQUF5QixDQUNqRSxJQUFRLHVCQUFzQix3QkFDN0IsRUFBd0IsQ0FBQyxLQUFhLENBQ3JDLHFCQUFzQixFQUFRLHFCQUM5QixxQkFBc0IsRUFBUSxvQkFDL0IsRUFBRSxHQUVJLEVBQWEsR0FBa0IsR0FNbkMsQ0FDRixPQUFRLEdBQ1IsY0FBZSxPQUNmLE1BQU8sSUFDUixDQUFDLEVBRUssRUFBaUIsR0FDdEIsQ0FBQyxFQUFzQixJQUFvQyxDQUMxRCxFQUFlLENBQ2QsT0FBUSxHQUNSLGNBQWUsT0FDZixRQUNBLFVBQ0EsVUFBVyxDQUFDLElBQStCLENBQzFDLEVBQXFCLEVBQU8sRUFBUyxDQUNwQyxRQUNBLFVBQVcsRUFBTSxLQUNsQixDQUFDLEVBRUgsQ0FBQyxHQUVGLENBQUMsQ0FBb0IsQ0FDdEIsRUFFTSxFQUFtQixHQUN4QixDQUFDLElBQXlCLENBQ3pCLEVBQWUsQ0FDZCxPQUFRLEdBQ1IsY0FBZSxTQUNmLFFBQ0EsVUFBVyxDQUFDLElBQStCLENBQzFDLEVBQXFCLEVBQU8sQ0FDM0IsUUFDQSxVQUFXLEVBQU0sS0FDbEIsQ0FBQyxFQUVILENBQUMsR0FFRixDQUFDLENBQW9CLENBQ3RCLEVBRU0sRUFBYyxHQUFZLElBQU0sQ0FDckMsRUFBZSxDQUNkLE9BQVEsR0FDUixjQUFlLE9BQ2YsTUFBTyxJQUNSLENBQUMsR0FDQyxDQUFDLENBQUMsRUFFQyxFQUFnQixHQUNyQixDQUFDLElBQStCLENBQy9CLEdBQUksRUFBWSxVQUNmLEVBQVksVUFBVSxDQUFLLEVBRTVCLEVBQVksRUFFWixJQUFhLEdBRWQsQ0FBQyxFQUFhLEVBQWEsQ0FBVSxDQUN0QyxFQUVBLE1BQU8sQ0FDTixjQUNBLGlCQUNBLG1CQUNBLGNBQ0EsZUFDRCxvRWYzREQsSUFBTSxHQUFnQixDQUNyQixDQUNDLE1BQU8sNEJBQ1AsTUFBTyxNQUNSLEVBQ0EsQ0FDQyxNQUFPLDhCQUNQLE1BQU8sT0FDUixFQUNBLENBQ0MsTUFBTyxnQ0FDUCxNQUFPLFFBQ1IsRUFDQSxDQUNDLE1BQU8sMEJBQ1AsTUFBTyxLQUNSLEVBQ0EsQ0FDQyxNQUFPLGdDQUNQLE1BQU8sUUFDUixFQUNBLENBQ0MsTUFBTyw0QkFDUCxNQUFPLE1BQ1IsRUFDQSxDQUNDLE1BQU8sZ0NBQ1AsTUFBTyxRQUNSLEVBQ0EsQ0FDQyxNQUFPLDhCQUNQLE1BQU8sT0FDUixFQUNBLENBQ0MsTUFBTyxrQ0FDUCxNQUFPLFNBQ1IsRUFDQSxDQUNDLE1BQU8sMEJBQ1AsTUFBTyxLQUNSLEVBQ0EsQ0FDQyxNQUFPLGdDQUNQLE1BQU8sUUFDUixFQUNBLENBQ0MsTUFBTyw0QkFDUCxNQUFPLE1BQ1IsRUFDQSxDQUNDLE1BQU8sNEJBQ1AsTUFBTyxNQUNSLEVBQ0EsQ0FDQyxNQUFPLGdDQUNQLE1BQU8sUUFDUixDQUNELEVBV2EsR0FBc0MsRUFDbEQsZ0JBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDSyxDQUNMLElBQ0MsY0FDQSxpQkFDQSxtQkFDQSxjQUNBLGlCQUNHLEdBQXlCLENBQU8sR0FHbkMsMkJBQ0EsSUFDQSxnQkFDQSxhQUNBLG1CQUNHLEVBQXdCLENBQUMsS0FBYSxDQUN6Qyx5QkFBMEIsRUFBUSx5QkFDbEMsRUFBRyxFQUFRLEVBQ1gsY0FBZSxFQUFRLGNBQ3ZCLFdBQVksRUFBUSxXQUNwQixnQkFBaUIsRUFBUSxlQUMxQixFQUFFLEVBRUksRUFBUSxHQUFlLE9BQVMsRUFBTSxFQUN0QyxFQUFNLEdBQWUsS0FBTyxFQUFNLEVBQUUsSUFBSSxFQUFHLE1BQU0sRUFHakQsRUFBYyxFQUNqQixFQUF5QixDQUFhLEVBQ3RDLE1BR0ksRUFBVyxHQUFnQixHQUFTLEVBQU0sT0FBTyxDQUFDLEdBQ2xELEVBQVMsR0FBYyxHQUFTLEVBQUksT0FBTyxDQUFDLEdBQzVDLEVBQVUsR0FBZSxHQUFTLEdBQWUsUUFBVSxFQUFLLEdBQ2hFLEVBQWUsR0FBb0IsR0FDekMsR0FBZSxPQUFTLEdBQWMsR0FBRyxLQUMxQyxHQUdPLEVBQVcsR0FBZ0IsR0FBUyxFQUFNLE9BQU8sT0FBTyxDQUFDLEdBQ3pELEVBQVMsR0FBYyxHQUFTLEVBQUksT0FBTyxPQUFPLENBQUMsR0FHbkQsRUFBWSxJQUFpQixHQUFTLENBQzVDLE1BQU8sR0FBZSxPQUFTLEdBQy9CLFlBQWEsR0FBZSxhQUFlLEdBQzNDLFNBQVUsR0FBZSxVQUFZLEVBQ3RDLENBQUMsR0FHTSxHQUFPLEdBQVksR0FBOEIsSUFBTSxDQUU3RCxPQURtQixHQUFlLE9BQVMsR0FBYSxPQUNuQyxLQUNyQixFQUdLLEVBQXdCLENBQUMsSUFBMkIsQ0FFekQsR0FEQSxFQUFhLENBQUksRUFDYixHQUFRLEVBQU0sQ0FBSSxFQUFFLFFBQVEsRUFBTSxDQUFPLENBQUMsRUFDN0MsRUFBVyxDQUFJLEdBSVgsR0FBc0IsQ0FBQyxJQUEyQixDQUV2RCxHQURBLEVBQVcsQ0FBSSxFQUNYLEdBQVEsRUFBTSxDQUFJLEVBQUUsU0FBUyxFQUFNLENBQVMsQ0FBQyxFQUNoRCxFQUFhLENBQUksR0FLYixFQUF3QixDQUFDLElBQWlCLENBRy9DLEdBRkEsRUFBYSxDQUFJLEVBRWIsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUM1RCxFQUFXLENBQUksR0FJWCxHQUFzQixDQUFDLElBQWlCLENBRzdDLEdBRkEsRUFBVyxDQUFJLEVBRVgsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUM1RCxFQUFhLENBQUksR0FLYixFQUFvQixDQUN6QixJQUNJLENBQ0osSUFBUSxPQUFNLFNBQVUsRUFBRSxPQUMxQixHQUFjLENBQUMsS0FBVSxJQUFLLEdBQU8sR0FBTyxDQUFNLEVBQUUsR0FHckQsR0FBVSxJQUFNLENBRWYsR0FBSSxFQUNILEVBQVcsT0FBTyxHQUVqQixDQUFDLENBQVEsQ0FBQyxFQUViLElBQU0sRUFBZSxDQUFDLElBQXVCLENBQzVDLEVBQUUsZUFBZSxFQUVqQixJQUFNLEVBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDNUQsRUFBYyxHQUFpQixFQUFTLEVBQVMsQ0FBUSxFQUV6RCxFQUEyQixDQUNoQyxHQUFJLEdBQWUsSUFBTSxFQUFNLEVBQUUsT0FBTyxnQkFBZ0IsRUFDeEQsTUFBTyxFQUFXLE1BQ2xCLE1BQU8sRUFDUCxJQUFLLEVBQ0wsV0FBWSxHQUFlLFdBQzNCLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLElBQVMsTUFDakIsRUFFQSxHQUFJLEdBQWUsSUFBTSxHQUFpQixDQUFhLEVBQUcsQ0FDekQsRUFBZSxFQUFlLENBQzdCLE1BQU8sRUFBVyxNQUNsQixNQUFPLEVBQ1AsSUFBSyxFQUNMLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLElBQVMsTUFDakIsQ0FBQyxFQUNELE9BR0QsR0FBSSxHQUFlLEdBQ2xCLElBQVcsQ0FBUyxFQUVwQixTQUFRLENBQVMsRUFFbEIsRUFBUSxHQUdILEdBQWUsSUFBTSxDQUMxQixHQUFJLEdBQWUsR0FBSSxDQUV0QixHQUFJLEdBQWlCLENBQWEsRUFBRyxDQUVwQyxFQUFpQixDQUFhLEVBQzlCLE9BRUQsSUFBVyxDQUFhLEVBQ3hCLEVBQVEsSUFJSixHQUFvQixDQUFDLElBQWtDLENBQzVELEdBQUksQ0FBQyxFQUFVLENBQ2QsRUFBUyxJQUFJLEVBQ2IsT0FFRCxJQUFNLEVBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDbEUsRUFBUyxJQUFLLEVBQVUsUUFBUyxFQUFjLE9BQU8sQ0FBRSxDQUFDLEdBSXBELEdBQXlCLEdBQVEsSUFBTSxDQUM1QyxJQUFNLEVBQWEsR0FBZSxXQUNsQyxHQUFJLEdBQWMsRUFBaUIsQ0FDbEMsSUFBTSxFQUFXLEVBQWdCLENBQVUsRUFDM0MsR0FBSSxHQUFVLGNBQ2IsT0FBTyxFQUFTLGNBR2xCLE9BQU8sR0FDTCxDQUFDLEdBQWUsV0FBWSxFQUFpQixDQUFhLENBQUMsRUFFeEQsR0FBc0IsR0FDekIsQ0FBQyxJQUFlLENBQUMsR0FBYyxFQUFNLENBQUksRUFBRyxFQUFzQixFQUNsRSxPQUVHLEdBQW1CLEdBQW1CLEVBQVcsRUFBc0IsRUFDdkUsR0FBaUIsR0FBbUIsRUFBUyxFQUFzQixFQUV6RSxPQUNDLGdCQTRLRSxDQTNLRCxHQWlLRSxPQWpLRixDQUFNLFVBQVUsK0JBQStCLFNBQVUsRUFBekQsU0FpS0UsQ0FoS0QsRUFtSUUsR0FuSUYsQ0FBWSxVQUFVLGlCQUF0QixTQUNDLEdBaUlFLE1BaklGLENBQUssVUFBVSwwQkFBZixTQWlJRSxDQWhJRCxHQWFFLE1BYkYsQ0FBSyxVQUFVLGFBQWYsU0FhRSxDQVpELEVBRUUsRUFGRixDQUFPLFVBQVUscUJBQXFCLFFBQVEsUUFBOUMsU0FDRSxFQUFFLE9BQU8sRUFDVCxFQUNGLEVBQUMsR0FBRCxDQUNDLFVBQVUscUJBQ1YsR0FBRyxRQUNILEtBQUssUUFDTCxTQUFVLEVBQ1YsWUFBYSxFQUFFLHVCQUF1QixFQUN0QyxTQUFRLEdBQ1IsTUFBTyxFQUFXLE1BQ25CLEdBQ0MsRUFFRixHQVlFLE1BWkYsQ0FBSyxVQUFVLHNCQUFmLFNBWUUsQ0FYRCxFQUVFLEVBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLGNBQTlDLFNBQ0UsRUFBRSxhQUFhLEVBQ2YsRUFDRixFQUFDLEdBQUQsQ0FDQyxVQUFVLHFCQUNWLEdBQUcsY0FDSCxLQUFLLGNBQ0wsU0FBVSxFQUNWLFlBQWEsRUFBRSw2QkFBNkIsRUFDNUMsTUFBTyxFQUFXLFlBQ25CLEdBQ0MsRUFFRixHQVNFLE1BVEYsQ0FBSyxVQUFVLDhCQUFmLFNBU0UsQ0FSRCxFQUFDLEdBQUQsQ0FDQyxRQUFTLEVBQ1QsR0FBRyxTQUNILGdCQUFpQixDQUFDLElBQVksRUFBWSxJQUFZLEVBQUksRUFDM0QsRUFDQSxFQUVFLEVBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLFNBQTlDLFNBQ0UsRUFBRSxRQUFRLEVBQ1YsR0FDRCxFQUVGLEdBcUJFLE1BckJGLENBQUssVUFBVSxrQ0FBZixTQXFCRSxDQXBCRCxHQVNFLE1BVEYsVUFTRSxDQVJELEVBQXdELEVBQXhELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxXQUFXLEVBQUksRUFDeEQsRUFBQyxHQUFELENBQ0MsVUFBVSxPQUNWLGNBQWEsR0FDYixLQUFNLEVBQ04sU0FBVSxHQUNWLFNBQVUsRUFDWCxHQUNDLEVBQ0YsR0FTRSxNQVRGLFVBU0UsQ0FSRCxFQUFzRCxFQUF0RCxDQUFPLFVBQVUscUJBQWpCLFNBQXVDLEVBQUUsU0FBUyxFQUFJLEVBQ3RELEVBQUMsR0FBRCxDQUNDLFVBQVUsT0FDVixjQUFhLEdBQ2IsS0FBTSxFQUNOLFNBQVUsR0FDVixTQUFVLEdBQ1gsR0FDQyxHQUNELEVBRUQsQ0FBQyxHQUNELEdBeUJFLE1BekJGLENBQUssVUFBVSxrQ0FBZixTQXlCRSxDQXhCRCxHQVdFLE1BWEYsVUFXRSxDQVZELEVBQXdELEVBQXhELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxXQUFXLEVBQUksRUFDeEQsRUFBQyxHQUFELENBQ0MsVUFBVSwwQkFDVixRQUFTLEdBQWlCLElBQzFCLFFBQVMsR0FBaUIsSUFDMUIsS0FBSyxhQUNMLFNBQVUsRUFDVixXQUFZLEVBQ1osTUFBTyxFQUNSLEdBQ0MsRUFDRixHQVdFLE1BWEYsVUFXRSxDQVZELEVBQXNELEVBQXRELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxTQUFTLEVBQUksRUFDdEQsRUFBQyxHQUFELENBQ0MsVUFBVSwwQkFDVixRQUFTLEdBQWUsSUFDeEIsUUFBUyxHQUFlLElBQ3hCLEtBQUssV0FDTCxTQUFVLEdBQ1YsV0FBWSxFQUNaLE1BQU8sRUFDUixHQUNDLEdBQ0QsRUFHSCxHQWtCRSxNQWxCRixDQUFLLFVBQVUsc0JBQWYsU0FrQkUsQ0FqQkQsRUFBb0QsRUFBcEQsQ0FBTyxVQUFVLHFCQUFqQixTQUF1QyxFQUFFLE9BQU8sRUFBSSxFQUNwRCxFQWVFLE1BZkYsQ0FBSyxVQUFVLHVCQUFmLFNBQ0UsR0FBYyxJQUFJLENBQUMsSUFDbkIsRUFBQyxFQUFELENBQ0MsYUFBWSxFQUFNLE1BQ2xCLFVBQVcsRUFDVixHQUFHLEVBQU0sMkNBQ1QsSUFBa0IsRUFBTSxPQUN2QixrREFDRixFQUVBLFFBQVMsSUFBTSxFQUFpQixFQUFNLEtBQUssRUFDM0MsS0FBSyxTQUNMLFFBQVEsU0FISCxFQUFNLEtBSVosQ0FDQSxFQUNBLEdBQ0QsRUFFRixHQVlFLE1BWkYsQ0FBSyxVQUFVLHNCQUFmLFNBWUUsQ0FYRCxFQUVFLEVBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLFdBQTlDLFNBQ0UsRUFBRSxVQUFVLEVBQ1osRUFDRixFQUFDLEdBQUQsQ0FDQyxVQUFVLHFCQUNWLEdBQUcsV0FDSCxLQUFLLFdBQ0wsU0FBVSxFQUNWLFlBQWEsRUFBRSwwQkFBMEIsRUFDekMsTUFBTyxFQUFXLFNBQ25CLEdBQ0MsRUFHRixFQUFDLEdBQUQsQ0FBa0IsU0FBVSxHQUFtQixNQUFPLEdBQU8sR0FDNUQsRUFDRCxFQUVGLEdBMEJFLEdBMUJGLENBQWMsVUFBVSxpRUFBeEIsU0EwQkUsQ0F6QkEsR0FBZSxJQUNmLEVBUUUsRUFSRixDQUNDLFVBQVUsOEJBQ1YsUUFBUyxHQUNULEtBQUssS0FDTCxLQUFLLFNBQ0wsUUFBUSxjQUxULFNBT0UsRUFBRSxRQUFRLEVBQ1YsRUFFSCxHQWFFLE1BYkYsQ0FBSyxVQUFVLDhCQUFmLFNBYUUsQ0FaRCxFQVFFLEVBUkYsQ0FDQyxVQUFVLHNCQUNWLFFBQVMsRUFDVCxLQUFLLEtBQ0wsS0FBSyxTQUNMLFFBQVEsVUFMVCxTQU9FLEVBQUUsUUFBUSxFQUNWLEVBQ0YsRUFFRSxFQUZGLENBQVEsVUFBVSxzQkFBc0IsS0FBSyxLQUFLLEtBQUssU0FBdkQsU0FDRSxHQUFlLEdBQUssRUFBRSxRQUFRLEVBQUksRUFBRSxRQUFRLEVBQzVDLEdBQ0QsR0FDRCxHQUNELEVBR0YsRUFBQyxHQUFELENBQ0MsV0FBWSxFQUFZLE9BQU8sT0FBUyxHQUN4QyxPQUFRLEVBQVksT0FDcEIsUUFBUyxFQUNULFVBQVcsRUFDWCxjQUFlLEVBQVksY0FDNUIsR0FDQyx1RGdCL2JHLElBQU0sR0FBa0IsSUFBTSxDQUNwQyxJQUNDLElBQ0EsZ0JBQ0Esa0JBQ0EsaUJBQ0EsV0FDQSxjQUNBLGNBQ0EsbUJBQ0csRUFBd0IsQ0FBQyxLQUFhLENBQ3pDLEVBQUcsRUFBUSxFQUNYLGNBQWUsRUFBUSxjQUN2QixnQkFBaUIsRUFBUSxnQkFDekIsZUFBZ0IsRUFBUSxlQUN4QixTQUFVLEVBQVEsU0FDbEIsWUFBYSxFQUFRLFlBQ3JCLFlBQWEsRUFBUSxZQUNyQixnQkFBaUIsRUFBUSxlQUMxQixFQUFFLEVBVUksRUFBaUIsQ0FDdEIsS0FBTSxFQUNOLFFBQVMsRUFDVCxnQkFDQSxNQUFPLEVBQ1AsU0Fic0IsQ0FBQyxJQUF5QixDQUNoRCxFQUFZLEVBQU0sR0FBSSxDQUFLLEdBYTNCLFNBVnNCLENBQUMsSUFBeUIsQ0FDaEQsRUFBWSxFQUFNLEVBQUUsRUFVckIsRUFFQSxHQUFJLEVBQ0gsT0FBTyxFQUFnQixDQUFjLEVBR3RDLE9BQ0MsR0FhRSxHQWJGLENBQVEsYUFBYyxFQUFnQixLQUFNLEVBQTVDLFNBQ0MsR0FXRSxHQVhGLENBQWUsVUFBVSxpRkFBekIsU0FXRSxDQVZELEdBT0UsR0FQRixDQUFjLFVBQVUsd0JBQXhCLFNBT0UsQ0FORCxHQUVFLEdBRkYsQ0FBYSxVQUFVLHVCQUF2QixTQUNFLEdBQWUsR0FBSyxFQUFFLFdBQVcsRUFBSSxFQUFFLGFBQWEsRUFDcEQsRUFDRixHQUVFLEdBRkYsQ0FBbUIsVUFBVSxxQkFBN0IsU0FDRSxHQUFlLEdBQUssRUFBRSxrQkFBa0IsRUFBSSxFQUFFLGFBQWEsRUFDM0QsR0FDRCxFQUVGLEdBQUMsR0FBRCxJQUFlLEVBQWdCLEdBQzlCLEVBQ0QsR0NuRUosbUJBQVMsZUFBMEIsV0FBVSxXQUFNLHNCQUVuRCxtQkFBUyxlQ0ZULGdCQUFTLGVBSVQsSUFBTSxHQUFPO0FBQUEsRUFFUCxHQUFnQixDQUNyQixrQkFDQSxXQUNBLGlCQUNBLDBCQUNBLGFBQ0EscUJBQ0EsbUJBQ0EsZUFDQSxlQUNELEVBQUUsS0FBSyxFQUFJLEVBRUwsR0FBYSxDQUFDLElBQXlCLENBQzVDLE9BQU8sRUFDTCxXQUFXLEtBQU0sTUFBTSxFQUN2QixXQUFXLElBQUssS0FBSyxFQUNyQixXQUFXLElBQUssS0FBSyxFQUNyQixXQUFXO0FBQUEsRUFBTSxLQUFLLEVBQ3RCLFdBQVcsS0FBTSxFQUFFLEdBR2hCLEdBQWEsQ0FBQyxFQUFtQixFQUFXLEtBQWtCLENBQ25FLE9BQU8sRUFDSixFQUFLLE9BQU8sVUFBVSxFQUN0QixFQUFLLElBQUksRUFBRSxPQUFPLHNCQUFzQixHQUd0QyxHQUFTLENBQUMsSUFBaUMsQ0FDaEQsT0FBTyxFQUFNLEtBQU8sR0FBRyxFQUFNLHFCQUd4QixHQUFjLENBQUMsSUFBa0MsQ0FDdEQsR0FBSSxDQUlILE9BSG9CLElBQUksR0FDdkIsQ0FDRCxFQUFFLFNBQVMsRUFFRSxNQUFNO0FBQUEsQ0FBSSxFQUFFLEtBQUssQ0FBQyxJQUFTLEVBQUssV0FBVyxRQUFRLENBQUMsR0FBSyxHQUVyRSxLQUFNLENBQ1AsTUFBTyxLQUlILEdBQXVCLENBQUMsSUFBaUMsQ0FDOUQsSUFBTSxFQUFZLEVBQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxzQkFBc0IsRUFDdkQsRUFBWSxFQUFNLE9BQVMsY0FBZ0IsR0FDM0MsRUFBUSxFQUFNLE1BQVEsR0FBWSxFQUFNLEtBQUssRUFBSSxHQUVqRCxFQUFVLEVBQU0sU0FBUyxPQUM1QixFQUFNLFFBQVEsSUFBSSxDQUFDLElBQU0sR0FBVyxFQUFNLENBQUMsRUFBRyxFQUFNLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUNyRSxLQUVHLEVBQWUsRUFBTSxhQUN4QixHQUFXLEVBQU0sRUFBTSxZQUFZLEVBQUcsRUFBTSxNQUFNLEVBQ2xELEtBc0JILE1BcEJjLENBQ2IsZUFDQSxPQUFPLEdBQU8sQ0FBSyxJQUNuQixVQUFVLEtBQWEsR0FBVyxFQUFNLE1BQU8sRUFBTSxNQUFNLElBQzNELFFBQVEsS0FBYSxHQUFXLEVBQU0sSUFBSyxFQUFNLE1BQU0sSUFDdkQsV0FBVyxHQUFXLEVBQU0sS0FBSyxJQUNqQyxFQUFNLGFBQWUsZUFBZSxHQUFXLEVBQU0sV0FBVyxJQUNoRSxFQUFNLFVBQVksWUFBWSxHQUFXLEVBQU0sUUFBUSxJQUN2RCxFQUNBLEdBQVcsVUFBVSxJQUNyQixHQUFnQixpQkFBaUIsSUFDakMsV0FBVyxJQUNYLFdBQVcsSUFDWCxpQkFBaUIsSUFDakIsbUJBQ0EsYUFDQSxnQkFDQSxZQUNELEVBRWEsT0FBTyxPQUFPLEVBQUUsS0FBSyxFQUFJLEdBR2pDLEdBQWUsQ0FBQyxJQUE2QyxDQUNsRSxJQUFNLEVBQVcsSUFBSSxJQUVyQixPQUFPLEVBQU8sT0FBTyxDQUFDLElBQVUsQ0FDL0IsSUFBTSxFQUFNLEdBQU8sQ0FBSyxFQUNsQixFQUFrQixFQUFNLE9BQVMsQ0FBQyxFQUFNLGFBQ3hDLEVBQXFCLEVBQU0sY0FBZ0IsQ0FBQyxFQUFNLE1BRXhELEdBQUksRUFFSCxPQURBLEVBQVMsSUFBSSxDQUFHLEVBQ1QsR0FFUixHQUFJLEVBQ0gsTUFBTyxHQUVSLE1BQU8sQ0FBQyxFQUFNLE9BQVMsQ0FBQyxFQUFNLGNBQWdCLENBQUMsRUFBUyxJQUFJLENBQUcsRUFDL0QsR0FHVyxHQUFvQixDQUNoQyxFQUNBLEVBQWUsbUJBQ0gsQ0FDWixJQUFNLEVBQU8sR0FBVyxDQUFZLEVBQzlCLEVBQWdCLEdBQWEsQ0FBTSxFQUFFLElBQUksRUFBb0IsRUFFbkUsTUFBTyxDQUNOLGtCQUNBLGNBQ0Esc0NBQ0EscUJBQ0EsaUJBQ0EsZ0JBQWdCLElBQ2hCLDhCQUE4QixJQUM5QixHQUNBLEdBQUcsRUFDSCxlQUNELEVBQUUsS0FBSyxFQUFJLEdBR0MsR0FBb0IsQ0FDaEMsRUFDQSxFQUFXLGVBQ1gsRUFBZSxtQkFDTCxDQUNWLElBQU0sRUFBTyxJQUFJLEtBQUssQ0FBQyxHQUFrQixFQUFRLENBQVksQ0FBQyxFQUFHLENBQ2hFLEtBQU0sNkJBQ1AsQ0FBQyxFQUNLLEVBQU0sSUFBSSxnQkFBZ0IsQ0FBSSxFQUM5QixFQUFxQixFQUFTLFNBQVMsTUFBTSxFQUNoRCxFQUNBLEdBQUcsUUFFQSxFQUFPLFNBQVMsY0FBYyxHQUFHLEVBQ3ZDLEVBQUssS0FBTyxFQUNaLEVBQUssU0FBVyxFQUVoQixTQUFTLEtBQUssT0FBTyxDQUFJLEVBQ3pCLEVBQUssTUFBTSxFQUNYLEVBQUssT0FBTyxFQUNaLElBQUksZ0JBQWdCLENBQUcsR0NsSnhCLHNCQUFTLHNCQUNULGtCQUFTLGVBQVMsaUZBYWxCLElBQU0sR0FBYSxDQUNsQixVQUNBLFdBQ0EsUUFDQSxRQUNBLE1BQ0EsT0FDQSxPQUNBLFNBQ0EsWUFDQSxVQUNBLFdBQ0EsVUFDRCxFQUVNLEdBQWUsSUFBTSxDQUMxQixJQUFRLGNBQWEsT0FBTSxpQkFBZ0IsSUFBRyxrQkFDN0MsRUFBd0IsQ0FBQyxLQUFTLENBQ2pDLFlBQWEsRUFBSSxZQUNqQixLQUFNLEVBQUksS0FDVixlQUFnQixFQUFJLGVBQ3BCLEVBQUcsRUFBSSxFQUNQLGVBQWdCLEVBQUksY0FDckIsRUFBRSxHQUVJLEVBQWEsR0FBa0IsR0FBd0IsSUFBSSxFQUU1RCxFQUFTLEdBQVEsSUFBTSxHQUFXLElBQUksQ0FBQyxJQUFRLEVBQUUsQ0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsRUFDM0QsRUFBYyxFQUFZLEtBQUssRUFDL0IsRUFBUSxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBTSxFQUFjLEVBQUksQ0FBQyxFQUNoRSxFQUFXLEdBQVksRUFBYSxDQUFjLEVBRWxELEVBQWEsQ0FBQyxJQUFzQixDQUN6QyxFQUFlLENBQUksRUFDbkIsRUFBZSxJQUFJLEdBR2QsRUFBcUIsSUFDMUIsZUFDRSxFQUFPLElBQUksQ0FBQyxFQUFPLElBQ25CLEVBVUUsRUFWRixDQUNDLFVBQVcsRUFDViw0QkFDQSxFQUFZLE1BQU0sSUFBTSxHQUFTLGVBQ2xDLEVBRUEsUUFBUyxJQUFNLEVBQVcsRUFBWSxNQUFNLENBQUssQ0FBQyxFQUNsRCxRQUFRLFFBUFQsU0FTRSxHQUpJLENBS0osQ0FDRixFQUNBLEVBR0csRUFBb0IsSUFDekIsZUFDRSxFQUFNLElBQUksQ0FBQyxJQUNYLEVBVUUsRUFWRixDQUNDLFVBQVcsRUFDViw0QkFDQSxFQUFZLEtBQUssSUFBTSxHQUFRLGVBQ2hDLEVBRUEsUUFBUyxJQUFNLEVBQVcsRUFBWSxLQUFLLENBQUksQ0FBQyxFQUNoRCxRQUFRLFFBUFQsU0FTRSxHQUpJLENBS0osQ0FDRixFQUNBLEVBR0csRUFBb0IsSUFDekIsZUFDRSxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQUUsRUFBRyxDQUFDLEVBQUcsSUFBTSxDQUNwQyxJQUFNLEVBQVcsRUFBWSxTQUFTLEVBQUcsTUFBTSxFQUFFLElBQUksRUFBRyxNQUFNLEVBQ3hELEVBQU8sR0FBWSxFQUFVLENBQWMsRUFDM0MsRUFBUSxFQUFLLEdBQ2IsRUFBTSxFQUFLLEdBQ1gsRUFBZ0IsRUFBUyxPQUFPLEVBQWEsTUFBTSxFQUNuRCxFQUFlLEVBQU0sTUFBTSxJQUFNLEVBQUksTUFBTSxFQUVqRCxPQUNDLEVBZUUsRUFmRixDQUNDLFVBQVcsRUFDViw0QkFDQSxHQUFpQixlQUNsQixFQUVBLFFBQVMsSUFBTSxFQUFXLENBQUssRUFDL0IsUUFBUSxRQVBULFNBU0MsR0FLRSxNQUxGLENBQUssVUFBVSwyQ0FBZixTQUtFLENBSkQsRUFBeUQsT0FBekQsVUFBTyxHQUFHLEVBQU0sT0FBTyxPQUFPLE9BQU8sRUFBSSxPQUFPLEdBQUcsSUFBTSxFQUN4RCxHQUNBLEVBQTZGLE9BQTdGLENBQU0sVUFBVSw0QkFBaEIsU0FBNkMsR0FBRyxFQUFNLE9BQU8sS0FBSyxLQUFLLEVBQUksT0FBTyxLQUFLLElBQU0sR0FFN0YsR0FURyxFQUFNLE9BQU8sWUFBWSxDQVU3QixFQUVILEVBQ0EsRUFHRyxFQUFtQixJQUFNLENBQzlCLElBQU0sRUFBVyxFQUFZLFFBQVEsT0FBTyxFQUN0QyxFQUFjLEVBQVksWUFBWSxFQUU1QyxPQUNDLGVBQ0UsTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFZLEVBQUcsQ0FBQyxFQUFHLElBQU0sQ0FDOUMsSUFBTSxFQUFNLEVBQVMsS0FBSyxFQUFJLENBQUMsRUFDekIsRUFBZSxFQUFJLE9BQU8sRUFBYSxLQUFLLEVBQzVDLEVBQVUsRUFBSSxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBRXpDLE9BQ0MsRUFpQkUsRUFqQkYsQ0FDQyxVQUFXLEVBQ1YsNEJBQ0EsR0FBZ0IsZUFDakIsRUFFQSxRQUFTLElBQU0sRUFBVyxDQUFHLEVBQzdCLFFBQVEsUUFQVCxTQVNDLEdBT0UsTUFQRixDQUFLLFVBQVUsMkNBQWYsU0FPRSxDQU5ELEVBQW1DLE9BQW5DLFVBQU8sRUFBSSxPQUFPLGFBQWEsRUFBSSxFQUNsQyxHQUNBLEVBRUUsT0FGRixDQUFNLFVBQVUsOERBQWhCLFNBQ0UsRUFBRSxPQUFPLEVBQ1QsR0FFRixHQVhHLEVBQUksT0FBTyxZQUFZLENBWTNCLEVBRUgsRUFDQSxHQStCSixNQTNCaUIsQ0FDaEIsQ0FDQyxHQUFJLFFBQ0osT0FBUSxJQUFTLE9BQ2pCLE1BQU8sRUFBWSxPQUFPLE1BQU0sRUFDaEMsT0FBUSxDQUNULEVBQ0EsQ0FDQyxHQUFJLE9BQ0osT0FBUSxHQUNSLE1BQU8sRUFBWSxPQUFPLE1BQU0sRUFDaEMsT0FBUSxDQUNULEVBQ0EsQ0FDQyxHQUFJLE9BQ0osT0FBUSxJQUFTLE9BQ2pCLE1BQU8sR0FBRyxFQUFTLEdBQUcsT0FBTyxPQUFPLE9BQU8sRUFBUyxHQUFHLE9BQU8sT0FBTyxJQUNyRSxPQUFRLENBQ1QsRUFDQSxDQUNDLEdBQUksTUFDSixPQUFRLElBQVMsTUFDakIsTUFBTyxFQUFZLE9BQU8sU0FBUyxFQUNuQyxPQUFRLENBQ1QsQ0FDRCxFQUdFLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLEVBQ3ZCLElBQUksQ0FBQyxJQUNMLEdBMEJFLEdBMUJGLENBRUMsYUFBYyxDQUFDLElBQVMsRUFBZSxFQUFPLEVBQVEsR0FBSyxJQUFJLEVBQy9ELEtBQU0sSUFBZ0IsRUFBUSxHQUgvQixTQTBCRSxDQXJCRCxFQWVFLEdBZkYsQ0FBZ0IsUUFBTyxHQUF2QixTQUNDLEdBYUUsRUFiRixDQUNDLFVBQVUsOENBQ1YsY0FBWSx3QkFDWixRQUFRLFFBSFQsU0FhRSxDQVJELEVBTUUsRUFORixDQUNDLFVBQVUsOENBQ1YsY0FBWSx3QkFDWixjQUFlLEdBQUcsRUFBUSxNQUFNLEVBQVksT0FBTyxZQUFZLElBSGhFLFNBS0UsRUFBUSxNQUNSLEVBQ0YsRUFBQyxHQUFELENBQWEsVUFBVSxVQUFVLEdBQ2hDLEVBQ0QsRUFDRixFQUlFLEdBSkYsQ0FBZ0IsVUFBVSxXQUExQixTQUNDLEVBRUUsTUFGRixDQUFLLFVBQVUsdUNBQWYsU0FDRSxFQUFRLE9BQU8sRUFDZixFQUNELElBeEJHLEVBQVEsRUF5QlosQ0FDRixHQUdZLE1Ddk5mLHNCQUFTLG1CQUFhLDBFQU90QixJQUFNLEdBQThCLENBQUMsTUFBTyxPQUFRLFFBQVMsTUFBTSxFQWE3RCxHQUE0QyxFQUNqRCxjQUNBLFdBQ0EsVUFBVSxVQUNWLE9BQU8sS0FDUCxZQUNBLFVBQ0EsU0FDQSxnQkFDSyxDQUNMLElBQVEsSUFBRyxhQUFjLEVBQXdCLENBQUMsS0FBYSxDQUM5RCxFQUFHLEVBQVEsRUFDWCxVQUFXLEVBQVEsU0FDcEIsRUFBRSxFQUNJLEVBQVMsSUFBWSxPQUNyQixFQUFxQixHQUFhLEVBQVUsT0FBUyxFQUdyRCxFQUFxQixDQUFDLElBQXVCLENBQ2xELE9BQU8sRUFFTixFQUFTLFNBQVcsR0FFcEIsSUFBZ0IsR0FBWSxlQUM3QixHQUdLLEVBQWdCLENBQUMsSUFBdUIsQ0FDN0MsT0FBTyxJQUFnQixFQUFXLFVBQVksV0FHL0MsT0FDQyxHQWtDRSxNQWxDRixDQUNDLFVBQVcsRUFDVixFQUFTLHlCQUEyQixhQUNwQyxDQUNELEVBSkQsU0FrQ0UsQ0E1QkQsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFZLEtBQU0sRUFBTSxRQUFRLFVBQWpELFNBQ0MsR0FBQyxHQUFELENBQWEsVUFBVSxVQUFVLEVBQ2hDLEVBQ0YsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFRLEtBQU0sRUFBTSxRQUFRLFVBQTdDLFNBQ0MsR0FBQyxHQUFELENBQWMsVUFBVSxVQUFVLEVBQ2pDLEVBRUQsR0FBZ0IsSUFBSSxDQUFDLElBQW1CLENBQ3hDLEdBQUksR0FBc0IsSUFBUyxPQUNsQyxPQUFPLEtBR1IsT0FDQyxHQVFFLEVBUkYsQ0FDQyxVQUFXLEVBQW1CLENBQUksRUFFbEMsUUFBUyxJQUFNLEVBQVMsQ0FBSSxFQUM1QixLQUFNLEVBQ04sUUFBUyxFQUFjLENBQUksRUFMNUIsU0FPRSxFQUFFLENBQUksR0FMRixDQU1KLEVBRUgsRUFFRCxHQUVFLEVBRkYsQ0FBUSxRQUFTLEVBQVMsS0FBTSxFQUFNLFFBQVEsVUFBOUMsU0FDRSxFQUFFLE9BQU8sRUFDVCxHQUNELEdBSVcseURIdkVmLElBQU0sR0FBZ0MsRUFBRyxZQUFZLE1BQVMsQ0FDN0QsSUFDQyxPQUNBLFVBQ0EsYUFDQSxhQUNBLFFBQ0EsZ0JBQ0Esa0JBQ0Esa0JBQ0EsWUFDQSxLQUNHLEVBQXdCLENBQUMsS0FBUyxDQUNyQyxLQUFNLEVBQUksS0FDVixRQUFTLEVBQUksUUFDYixXQUFZLEVBQUksV0FDaEIsV0FBWSxFQUFJLFdBQ2hCLE1BQU8sRUFBSSxNQUNYLGNBQWUsRUFBSSxjQUNuQixnQkFBaUIsRUFBSSxnQkFDckIsZ0JBQWlCLEVBQUksZ0JBQ3JCLFVBQVcsRUFBSSxVQUNmLEVBQUcsRUFBSSxDQUNSLEVBQUUsR0FFSyxFQUFnQixHQUFxQixHQUFTLEVBQUssRUFFcEQsRUFBa0IsSUFBTSxFQUFrQixFQUFLLEVBRS9DLEVBQWUsSUFBTSxDQUMxQixJQUFNLEVBQVcsa0JBQWtCLElBQUksS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsRUFBRSxTQUN2RSxHQUFrQixFQUFXLEVBQVUsZ0JBQWdCLEVBQ3ZELEVBQWdCLEdBR1gsRUFBaUIsSUFDdEIsR0FRRSxFQVJGLENBQ0MsVUFBVSwwQkFDVixRQUFTLElBQU0sRUFBYyxFQUM3QixLQUFLLEtBQ0wsUUFBUSxVQUpULFNBUUUsQ0FGRCxFQUFDLEdBQUQsQ0FBTSxVQUFVLFVBQVUsRUFDMUIsRUFBaUQsT0FBakQsQ0FBTSxVQUFVLHFCQUFoQixTQUFzQyxFQUFFLEtBQUssRUFBSSxHQUNoRCxFQUdHLEVBQWUsRUFBRyxZQUFZLE1BQ25DLEdBWUUsRUFaRixDQUNDLFVBQVcsRUFBRywwQkFBMkIsR0FBYSxjQUFjLEVBQ3BFLFFBQVMsRUFDVCxLQUFLLEtBQ0wsUUFBUSxVQUpULFNBWUUsQ0FORCxFQUFDLEdBQUQsQ0FBVSxVQUFVLFVBQVUsRUFDN0IsRUFDQSxHQUFHLEVBQUUsUUFBUSxvQkFFYixFQUFnRSxPQUFoRSxDQUFNLFVBQVUsaUNBQWhCLFNBQWtELEVBQUUsUUFBUSxFQUFJLEdBRWhFLEVBR0gsR0FBSSxFQUNILE9BQU8sRUFHUixPQUNDLEVBc0VFLE1BdEVGLENBQ0MsVUFBVSxnQ0FDVixjQUFZLGtCQUZiLFNBSUMsR0FpRUUsTUFqRUYsQ0FDQyxVQUFXLEVBQ1Ysb0ZBQ0EsRUFDQSxDQUNELEVBTEQsU0FpRUUsQ0ExREQsR0FHRSxNQUhGLENBQUssVUFBVSxrRkFBZixTQUdFLENBRkQsRUFBQyxHQUFELENBQWMsVUFBVSxVQUFVLEVBQ2xDLEVBQUMsR0FBRCxFQUFjLEdBQ2IsRUFFRixHQW9ERSxNQXBERixDQUFLLFVBQVUsaUhBQWYsU0FvREUsQ0FuREQsR0FZRSxNQVpGLENBQUssVUFBVSwrREFBZixTQVlFLENBWEQsRUFBQyxHQUFELENBQ0MsVUFBVSxjQUNWLFlBQWEsRUFDYixTQUFVLEVBQ1YsT0FBUSxFQUNSLFdBQVksRUFDWixRQUFTLEVBQ1QsUUFBUSxVQUNULEVBQ0EsRUFBQyxFQUFELEVBQWdCLEVBQ2hCLEVBQUMsRUFBRCxFQUFjLEdBQ2IsRUFFRixHQW9DRSxNQXBDRixDQUFLLFVBQVUsNkRBQWYsU0FvQ0UsQ0FuQ0QsRUFBQyxFQUFELEVBQWdCLEVBQ2hCLEdBaUNFLEdBakNGLENBQVMsYUFBYyxFQUFtQixLQUFNLEVBQWhELFNBaUNFLENBaENELEVBSUUsR0FKRixDQUFnQixRQUFPLEdBQXZCLFNBQ0MsRUFFRSxFQUZGLENBQVEsS0FBSyxLQUFLLFFBQVEsVUFBMUIsU0FDQyxFQUFDLEdBQUQsQ0FBTSxVQUFVLFVBQVUsRUFDekIsRUFDRCxFQUNGLEVBMEJFLEdBMUJGLENBQWdCLE1BQU0sTUFBTSxVQUFVLGdCQUF0QyxTQUNDLEdBd0JFLE1BeEJGLENBQUssVUFBVSxZQUFmLFNBd0JFLENBdkJELEVBQUMsR0FBRCxDQUNDLFlBQWEsRUFDYixTQUFVLENBQUMsSUFBTSxDQUNoQixFQUFRLENBQUMsRUFDVCxFQUFnQixHQUVqQixPQUFRLElBQU0sQ0FDYixFQUFXLEVBQ1gsRUFBZ0IsR0FFakIsV0FBWSxJQUFNLENBQ2pCLEVBQVcsRUFDWCxFQUFnQixHQUVqQixRQUFTLElBQU0sQ0FDZCxFQUFNLEVBQ04sRUFBZ0IsR0FFakIsUUFBUSxPQUNULEVBQ0EsRUFFRSxNQUZGLENBQUssVUFBVSxnQkFBZixTQUNDLEVBQUMsRUFBRCxDQUFjLFVBQVMsR0FBQyxFQUN2QixHQUNELEVBQ0QsR0FDRCxHQUNELEdBQ0QsR0FDRCxFQUNELEdBSVcsTUloS2YsZUFBUyxlQ0FULGVBQVMsa0JBQU0sZUNEZixtQkFBZ0IsY0FBTSx3RENhZixJQUFNLEdBQXNDLEVBQ2xELE9BQ0EsU0FBUyxLQUNULGVBQ0ssQ0FDTCxJQUFNLEVBQVUsRUFBSyxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBRTFDLE9BQ0MsR0FXRSxNQVhGLENBQ0MsVUFBVyxFQUNWLHlFQUNBLEdBQVcsaURBQ1gsQ0FDRCxFQUNBLGNBQ0MsRUFBVSxtQkFBcUIsY0FBYyxFQUFLLE9BQU8sR0FBRyxJQVA5RCxTQVVFLEtBQUssZUFBZSxFQUFRLENBQUUsSUFBSyxTQUFVLENBQUMsRUFBRSxPQUFPLEVBQUssT0FBTyxDQUFDLEVBQ3BFLEdDL0JKLDhCQUFTLGVBQXFCLGVDRDlCLHVCQUFTLHVCQUVULGVBQVMsbUVBTVQsSUFBTSxHQUF1QixDQUM1QixFQUNBLElBQ0ksQ0FDSixHQUFJLEdBQW9CLEVBQ3ZCLE1BQU8sZUFFUixHQUFJLEVBQ0gsTUFBTyw4QkFFUixHQUFJLEVBQ0gsTUFBTyw4QkFFUixNQUFPLGNBR1IsU0FBUyxFQUF3QixFQUNoQyxZQUNBLFFBQ0EsWUFDQSxRQUNBLGNBQWMsSUFPWixDQUNGLElBQVEsZUFBYyxjQUFhLG9CQUFtQixzQkFDckQsRUFBd0IsR0FFakIsYUFBWSxZQUFXLGFBQVksY0FBZSxHQUFhLENBQ3RFLEdBQUksRUFDSixLQUFNLENBQ0wsUUFDQSxLQUFNLGdCQUNQLEVBQ0EsU0FBVSxHQUFlLENBQzFCLENBQUMsRUFHSyxFQUFzQixJQUFNLENBRWpDLElBQU0sRUFBZ0IsRUFJaEIsRUFBbUIsRUFBYyxpQkFDakMsRUFBaUIsRUFBYyxlQUVyQyxPQUNDLEdBOEJFLE1BOUJGLENBQ0MsVUFBVyxFQUNWLEVBQU0saUJBQW1CLGNBQ3pCLEVBQU0sT0FBUyxhQUNmLGlGQUNBLEdBQXFCLEVBQWtCLENBQWMsQ0FDdEQsRUFDQSxNQUFPLENBQUUsZ0JBQWlCLEVBQU0sZ0JBQWlCLE1BQU8sRUFBTSxLQUFNLEVBUHJFLFNBOEJFLENBcEJBLEdBQ0EsR0FBeUUsTUFBekUsQ0FBSyxVQUFVLHdEQUEwRCxFQUkxRSxHQVNFLElBVEYsQ0FDQyxVQUFXLEVBQ1YsOENBRUEsR0FBb0IsT0FDcEIsR0FBa0IsTUFDbkIsRUFORCxTQVFFLEVBQU0sTUFDTixFQUdELEdBQ0EsR0FBMEUsTUFBMUUsQ0FBSyxVQUFVLHlEQUEyRCxHQUUxRSxHQUlKLE9BQ0MsR0EyQkUsRUEzQkYsQ0FDQyxVQUFXLEVBQ1YseUJBQ0EsR0FBZSxFQUNaLEVBQ0MsaUJBQ0EsaUJBQ0QsY0FDSCxHQUNDLEVBQUUsR0FBZSxJQUNqQiw0QkFDRCxDQUNELEVBQ0EsT0FBUSxHQUNSLFNBQVUsRUFDVixRQUFTLENBQUMsSUFBTSxDQUNmLEVBQUUsZ0JBQWdCLEVBQ2xCLEVBQWEsQ0FBSyxHQUVuQixJQUFLLEVBQ0wsTUFBTyxFQUNQLGNBQWUsS0FDWCxLQUNBLEVBdkJMLFNBMEJFLEVBQWMsRUFBWSxDQUFLLEVBQUksR0FBQyxFQUFELEVBQXFCLEVBQ3hELEVBSUcsSUFBTSxHQUFpQixHQUM3QixHQUNBLENBQUMsRUFBVyxJQUFjLENBRXpCLE9BQ0MsRUFBVSxZQUFjLEVBQVUsV0FDbEMsRUFBVSxjQUFnQixFQUFVLGFBQ3BDLEVBQVUsWUFBYyxFQUFVLFdBQ2xDLEVBQVUsUUFBVSxFQUFVLE1BR2pDLHNERGhITyxJQUFNLEdBQWdELEVBQUcsU0FBVSxDQUN6RSxJQUFPLEVBQVksR0FBaUIsR0FBUyxFQUFLLEdBQzNDLEVBQW1CLEdBQ3pCLEdBQW1DLElBQUksR0FDaEMsY0FBYSxrQkFBbUIsRUFBd0IsRUFFaEUsR0FBb0IsRUFBSyxLQUFPLENBQy9CLEtBQU0sSUFBTSxFQUFjLEVBQUksRUFDOUIsTUFBTyxJQUFNLEVBQWMsRUFBSyxFQUNoQyxxQkFBc0IsQ0FBQyxJQUN0QixFQUFxQixDQUFTLENBQ2hDLEVBQUUsRUFPRixJQUFJLEVBSm9CLEVBQVksUUFBUSxPQUFPLEVBSUYsTUFBTSxFQUN2RCxNQUFPLEVBQTJCLElBQUksSUFBTSxFQUMzQyxFQUE2QixFQUEyQixTQUFTLEVBQUcsS0FBSyxFQUcxRSxPQUNDLEdBb0JFLEdBcEJGLENBQVEsYUFBYyxFQUFlLEtBQU0sRUFBM0MsU0FDQyxHQWtCRSxHQWxCRixDQUFlLFVBQVUsd0NBQXpCLFNBa0JFLENBakJELEdBSUUsR0FKRixVQUNDLEdBRUUsR0FGRixVQUNFLEdBQW1CLElBQUksT0FBTyxjQUFjLEVBQzVDLEVBQ0QsRUFDRixHQVdFLE1BWEYsQ0FBSyxVQUFVLGlCQUFmLFNBQ0UsR0FBbUIsT0FBTyxJQUFJLENBQUMsSUFBVSxDQUN6QyxPQUNDLEdBQUMsR0FBRCxDQUNDLFVBQVUseUJBQ1YsVUFBVyw0QkFBNEIsRUFBTSxLQUM3QyxNQUFPLEdBQ0YsRUFBTSxFQUNaLEVBRUQsRUFDQSxHQUNELEVBQ0QsR0VuRUosdUJBQVMsZ0VBc0JGLFNBQVMsRUFBYSxFQUM1QixLQUNBLE9BQ0EsT0FDQSxPQUNBLFNBQ0EsYUFDQSxTQUNBLFdBQ0EsWUFDQSxRQUNBLGNBQWUsRUFDZixXQUFXLElBQ1csQ0FDdEIsSUFDQyxjQUNBLHFCQUNBLG1CQUNBLGtCQUNBLFFBQ0csRUFBd0IsR0FFcEIsU0FBUSxjQUFlLEdBQWEsQ0FDM0MsS0FDQSxLQUFNLENBQ0wsT0FDQSxPQUNBLE9BQ0EsU0FDQSxhQUNBLFFBQ0QsRUFDQSxTQUFVLEdBQXNCLENBQ2pDLENBQUMsRUFFSyxFQUFrQixDQUFDLElBQXdCLENBR2hELEdBRkEsRUFBRSxnQkFBZ0IsRUFFZCxHQUFvQixFQUN2QixPQUdELElBQU0sRUFBUSxFQUFLLEtBQUssR0FBUSxDQUFDLEVBQUUsT0FBTyxHQUFVLENBQUMsRUFDakQsRUFBTSxFQUFNLE1BQU0sRUFDdEIsR0FBSSxJQUFTLFFBQWEsSUFBVyxPQUNwQyxFQUFNLEVBQUksS0FBSyxDQUFJLEVBQUUsT0FBTyxFQUFTLEVBQUUsRUFDakMsUUFBSSxJQUFTLE9BQ25CLEVBQU0sRUFBSSxLQUFLLEVBQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUVqQyxPQUFNLEVBQUksS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBRzdCLEVBQVksQ0FBRSxRQUFPLE1BQUssYUFBWSxRQUFPLENBQUMsR0FHL0MsT0FHQyxHQWdCRSxNQWhCRixDQUNDLFVBQVcsRUFDVixpQkFDQSxFQUNBLEdBQVUsQ0FBQyxHQUFzQixDQUFDLEdBQVksWUFDOUMsR0FBb0IsRUFBVyxpQkFBbUIsaUJBQ2xELElBQWEsR0FBaUIsY0FBZ0IsR0FDL0MsRUFDQSxnQkFBZSxFQUFTLFNBQVMsRUFDakMsY0FBYSxFQUNiLFlBQVcsRUFDWCxRQUFTLEVBQ1QsSUFBSyxFQUNMLE1BQU8sRUFiUixTQWVFLEVBQ0EscUVKdkVKLElBQU0sR0FBc0MsRUFDM0MsTUFDQSxPQUNBLFNBQ0EsWUFBWSxHQUNaLGFBQ0EsV0FBVyxNQUNYLHFCQUFxQixHQUNyQixTQUFTLEdBQ1QsY0FBZSxFQUNmLGdCQUFnQixHQUNoQixjQUNLLENBQ0wsSUFBTSxFQUFxQixHQUFNLE9BSTlCLElBQUksR0FFTixlQUFlLEVBQ2Ysd0JBQ0EsY0FDQSxJQUNBLHVCQUNBLGdCQUNBLGdCQUNBLGVBQ0EsbUJBQ0csRUFBd0IsRUFFdEIsRUFBYyxHQUFRLElBQU0sQ0FDakMsR0FBSSxDQUFDLEVBQ0osTUFBTyxDQUFDLEVBR1QsSUFBSSxFQUFjLEVBQ2pCLEVBQUksUUFBUSxDQUFRLEVBQ3BCLEVBQUksTUFBTSxDQUFRLENBQ25CLEVBRUEsR0FBSSxFQUNILEVBQWMsRUFBWSxPQUFPLENBQUMsSUFBTSxFQUFFLE1BQU0sRUFHakQsR0FBSSxFQUFZLENBQ2YsSUFBTSxFQUFpQixFQUFxQixDQUFVLEdBQUssQ0FBQyxFQUU1RCxPQUFPLEVBQVksT0FBTyxDQUFDLEtBQzFCLEVBQWUsS0FBSyxDQUFDLElBQU8sT0FBTyxFQUFHLEVBQUUsSUFBTSxPQUFPLEdBQU0sRUFBRSxDQUFDLENBQy9ELEVBR0QsT0FBTyxHQUNMLENBQ0YsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDRCxDQUFDLEVBR0ssRUFBZ0IsQ0FBQyxFQUFrQixJQUE0QixDQUNwRSxFQUFtQixTQUFTLHFCQUFxQixDQUNoRCxNQUNBLFFBQ0QsQ0FBQyxFQUNELEVBQW1CLFNBQVMsS0FBSyxHQUc1QixFQUFpQixFQUFJLE1BQU0sSUFBTSxFQUFZLE1BQU0sRUFFbkQsRUFBb0IsRUFBWSxPQUFTLEVBQ3pDLEVBQWtCLEVBQW9CLEVBR3RDLEVBQXlCLEdBQVEsSUFBTSxDQUM1QyxHQUFJLEdBQWMsRUFBaUIsQ0FDbEMsSUFBTSxFQUFXLEVBQWdCLENBQVUsRUFDM0MsR0FBSSxHQUFVLGNBQ2IsT0FBTyxFQUFTLGNBR2xCLE9BQU8sR0FDTCxDQUFDLEVBQVksRUFBaUIsQ0FBYSxDQUFDLEVBRXpDLEVBQWEsR0FBZSxDQUNqQyxLQUFNLEVBQ04sS0FBTSxJQUFhLE9BQVMsRUFBSSxLQUFLLEVBQUksT0FDekMsY0FBZSxDQUNoQixDQUFDLEVBRUssRUFBVSxFQUFJLE9BQU8sSUFBSSxFQUN6QixFQUFLLEVBQUksT0FBTyxJQUFJLEVBQ3BCLEVBQWEsWUFBWSxFQUFJLE9BQU8sWUFBWSxJQUNoRCxHQUNMLElBQWEsT0FBUyxHQUFHLEtBQWMsS0FBVyxJQUFPLEVBSXBELEdBQWMsWUFBWSxFQUFJLFlBQVksSUFBSSxFQUFTLFVBQVksS0FBSyxFQUFhLGFBQWEsSUFBZSxLQUV2SCxPQUNDLGdCQWtFRSxDQWpFRCxHQTZERSxHQTdERixDQUNDLE9BQVEsRUFDUixVQUFXLEVBQ1YseUhBQ0EsQ0FDRCxFQUNBLGNBQWEsR0FBYyxHQUMzQixLQUFNLEVBQ04sU0FBVSxDQUFDLEdBQWMsQ0FBQyxFQUMxQixLQUFNLEVBQ04sR0FBSSxHQUNKLE9BQVEsRUFDUixXQUFZLEVBQ1osS0FBSyxXQWJOLFNBZUMsR0E2Q0UsTUE3Q0YsQ0FDQyxVQUFVLDhCQUNWLGNBQVksb0JBQ1osTUFBTyxDQUFFLElBQUssR0FBRyxLQUFpQixFQUhuQyxTQTZDRSxDQXhDQSxHQUFpQixHQUFDLEdBQUQsQ0FBVyxLQUFNLEVBQUssT0FBUSxFQUFlLEVBRTlELEdBQ0EsZ0JBa0NFLENBaENBLEVBQVksTUFBTSxFQUFHLENBQVksRUFBRSxJQUFJLENBQUMsRUFBTyxJQUMvQyxHQUFDLE1BQUQsQ0FDQyxVQUFVLGtCQUNWLGNBQWEsR0FBTyxNQUVwQixNQUFPLENBQUUsT0FBUSxHQUFHLE1BQXFCLEdBRHBDLFNBQVMsS0FBWSxFQUFNLElBRWpDLENBQ0EsRUFHQSxHQUVBLEdBa0JFLE1BbEJGLENBQ0MsVUFBVSxvSEFDVixRQUFTLENBQUMsSUFBTSxDQUNmLEVBQUUsZ0JBQWdCLEVBRWxCLEVBQWMsRUFBSyxDQUFXLEdBRS9CLFVBQVcsQ0FBQyxJQUFNLENBQ2pCLEdBQUksRUFBRSxNQUFRLFNBQVcsRUFBRSxNQUFRLElBQ2xDLEVBQUUsZUFBZSxFQUNqQixFQUFFLGdCQUFnQixFQUNsQixFQUFjLEVBQUssQ0FBVyxHQUdoQyxLQUFLLFNBQ0wsU0FBVSxFQWZYLFNBa0JFLENBbEJGLElBaUJHLEVBakJILElBaUJ1QixFQUFFLE1BQU0sR0FDN0IsR0FFRixFQUVGLEdBQ0EsRUFDRCxFQUdGLEdBQUMsR0FBRCxDQUFnQixJQUFLLEVBQW9CLEdBQ3hDLEdBSVMsR0FBVyxHQUFLLEVBQWMsMkNLL0xwQyxJQUFNLEdBQTRDLEVBQ3hELFdBQ0EsWUFDQSxXQUNBLGNBQWUsS0FDVixDQUNMLElBQVEsa0JBQW1CLEVBQXdCLEVBRW5ELE9BQ0MsR0FnQkUsTUFoQkYsQ0FDQyxVQUFXLEVBQ1YsZ0VBQ0EsQ0FDRCxFQUNBLGNBQWEsRUFDYixNQUFPLENBQ04sTUFBTyxFQUFTLE1BQ2hCLGdCQUFpQixFQUFTLGVBQzNCLEVBVEQsU0FXRSxFQUNFLEVBQWUsQ0FBUSxFQUN0QixHQUNELEdBQWdFLE1BQWhFLENBQUssVUFBVSwrQkFBZixTQUErQyxFQUFTLE1BQVEsRUFFbEUsR0NwQ0osZUFBUyxlQ0FULGtCQUFTLGVDMkJGLElBQU0sR0FBc0IsRUFDbEMsT0FDQSxTQUNBLGVBQ0Esa0JBQWtCLEdBQ2xCLFdBQVcsTUFDWCxlQUFlLE1BQ2dCLENBRy9CLElBQU0sRUFDTCxJQUFhLE9BQVMsRUFBSyxHQUFHLENBQUMsRUFBRSxRQUFRLE1BQU0sRUFBSSxFQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUN0RSxFQUNMLElBQWEsT0FBUyxFQUFLLEdBQUcsRUFBRSxFQUFFLE1BQU0sTUFBTSxFQUFJLEVBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQ3BFLEVBQVcsRUFBSyxPQUdoQixFQUFpQixFQUFPLE9BQU8sQ0FBQyxJQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTyxDQUFRLEVBQUksQ0FBQyxFQUN2RSxFQUFrQixFQUFPLE9BQzlCLENBQUMsSUFBTSxFQUFFLElBQUksS0FBSyxFQUFFLE1BQU8sQ0FBUSxJQUFNLENBQzFDLEVBR00sRUFBaUIsQ0FBQyxHQUFHLENBQWMsRUFBRSxLQUFLLENBQUMsRUFBRyxJQUFNLENBQ3pELElBQU0sRUFBWSxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFDdEMsR0FBSSxJQUFjLEVBQ2pCLE9BQU8sRUFFUixPQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUMvQyxFQUdLLEVBQWtCLENBQUMsR0FBRyxDQUFlLEVBQUUsS0FBSyxDQUFDLEVBQUcsSUFDckQsRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLENBQ3JCLEVBR00sRUFBNEQsQ0FBQyxFQUNuRSxRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFBTyxDQUM1QyxFQUFLLEdBQU8sQ0FBQyxFQUNiLFFBQVMsRUFBTSxFQUFHLEVBQU0sRUFBVSxJQUNqQyxFQUFLLEdBQUssR0FBTyxDQUFFLE1BQU8sR0FBTyxNQUFPLElBQUssRUFJL0MsSUFBTSxFQUFxQyxDQUFDLEVBRzVDLFFBQVcsS0FBUyxFQUFnQixDQUNuQyxJQUFNLEVBQWEsRUFBTSxJQUFJLEVBQU0sTUFBTSxRQUFRLENBQVEsRUFBRyxDQUFRLEVBQzlELEVBQ0wsSUFBYSxPQUFTLEVBQU0sSUFBSSxTQUFTLEVBQUcsUUFBUSxFQUFJLEVBQU0sSUFDekQsRUFBVyxFQUFNLElBQUksRUFBWSxRQUFRLENBQVEsRUFBRyxDQUFPLEVBQzNELEVBQVcsS0FBSyxJQUFJLEVBQUcsRUFBVyxLQUFLLEVBQVUsQ0FBUSxDQUFDLEVBQzFELEVBQVMsS0FBSyxJQUFJLEVBQVcsRUFBRyxFQUFTLEtBQUssRUFBVSxDQUFRLENBQUMsRUFHakUsRUFBbUIsRUFBTSxNQUFNLFFBQVEsQ0FBUSxFQUFFLFNBQVMsQ0FBUSxFQUNsRSxFQUFpQixFQUFNLElBQUksUUFBUSxDQUFRLEVBQUUsUUFBUSxDQUFPLEVBRzlELEVBQXFCLEdBR3JCLEVBQWMsR0FDbEIsUUFBUyxFQUFNLEVBQUcsRUFBTSxFQUFjLElBQU8sQ0FDNUMsSUFBSSxFQUFXLEdBQ2YsUUFBUyxFQUFNLEVBQVUsR0FBTyxFQUFRLElBQ3ZDLEdBQUksRUFBSyxHQUFLLEdBQUssTUFBTyxDQUN6QixFQUFXLEdBQ1gsTUFHRixHQUFJLEVBQVUsQ0FDYixFQUFjLEVBQ2QsT0FLRixHQUFJLElBQWdCLEdBQUksQ0FDdkIsUUFBUyxFQUFNLEVBQVUsR0FBTyxFQUFRLElBQ3ZDLEVBQUssR0FBYSxHQUFPLENBQUUsTUFBTyxHQUFNLE9BQU0sRUFJL0MsSUFBTSxFQUFXLEVBQVMsRUFBVyxFQUNyQyxFQUFnQixLQUFLLENBQ3BCLEtBQU8sRUFBVyxFQUFZLElBQzlCLE1BQVEsRUFBVyxFQUFZLElBQy9CLElBQ0MsRUFDQSxFQUNBLEdBQWUsR0FBbUIsR0FDbkMsT0FBUSxHQUNSLFNBQVUsS0FDUCxFQUNILG1CQUNBLGdCQUNELENBQW9CLEVBQ3BCLEVBQXFCLEdBSXRCLEdBQUksQ0FBQyxFQUNKLFFBQ0ssRUFBYyxFQUFXLEVBQzdCLEdBQWUsRUFDZixJQUNDLENBRUQsSUFBSSxFQUF1QixHQUMzQixRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFBTyxDQUM1QyxJQUFJLEVBQVcsR0FDZixRQUFTLEVBQU0sRUFBYSxHQUFPLEVBQVEsSUFDMUMsR0FBSSxFQUFLLEdBQUssR0FBSyxNQUFPLENBQ3pCLEVBQVcsR0FDWCxNQUdGLEdBQUksRUFBVSxDQUNiLEVBQXVCLEVBQ3ZCLE9BS0YsR0FBSSxJQUF5QixHQUFJLENBQ2hDLFFBQVMsRUFBTSxFQUFhLEdBQU8sRUFBUSxJQUMxQyxFQUFLLEdBQXNCLEdBQU8sQ0FBRSxNQUFPLEdBQU0sT0FBTSxFQUl4RCxJQUFNLEVBQW9CLEVBQVMsRUFBYyxFQUNqRCxFQUFnQixLQUFLLENBQ3BCLEtBQU8sRUFBYyxFQUFZLElBQ2pDLE1BQVEsRUFBb0IsRUFBWSxJQUN4QyxJQUNDLEVBQ0EsRUFDQSxHQUF3QixHQUFtQixHQUM1QyxPQUFRLEdBQ1IsU0FBVSxLQUNQLEVBQ0gsaUJBQWtCLEdBQ2xCLGdCQUNELENBQW9CLEVBQ3BCLEVBQXFCLEdBQ3JCLFFBT0osUUFBVyxLQUFTLEVBQWlCLENBQ3BDLElBQU0sRUFBYSxFQUFNLElBQUksRUFBTSxNQUFNLFFBQVEsQ0FBUSxFQUFHLENBQVEsRUFFOUQsRUFBTSxLQUFLLElBQ2hCLEVBQ0EsS0FBSyxJQUFJLEVBQVcsRUFBRyxFQUFXLEtBQUssRUFBVSxDQUFRLENBQUMsQ0FDM0QsRUFHTSxFQUFtQixHQUNuQixFQUFpQixHQUduQixFQUFjLEdBQ2xCLFFBQVMsRUFBTSxFQUFHLEVBQU0sRUFBYyxJQUNyQyxHQUFJLENBQUMsRUFBSyxHQUFLLEdBQUssTUFBTyxDQUMxQixFQUFjLEVBQ2QsTUFLRixHQUFJLElBQWdCLEdBQ25CLEVBQUssR0FBYSxHQUFPLENBQUUsTUFBTyxHQUFNLE9BQU0sRUFHOUMsRUFBZ0IsS0FBSyxDQUNwQixLQUFPLEVBQU0sRUFBWSxJQUN6QixNQUFRLEVBQUksRUFBWSxJQUN4QixJQUNDLEVBQ0EsRUFDQSxHQUFlLEdBQW1CLEdBQ25DLE9BQVEsR0FDUixTQUFVLEtBQ1AsRUFDSCxpQkEzQnVCLEdBNEJ2QixlQTNCcUIsRUE0QnRCLENBQW9CLEVBSXRCLE9BQU8sR0RuTkQsSUFBTSxHQUF5QixFQUNyQyxPQUNBLFNBQ0Esa0JBQ0EsYUFDQSxjQUNrQyxDQUNsQyxJQUNDLHdCQUNBLGVBQ0EsZUFDQSx3QkFDRyxFQUF3QixFQUV0QixFQUFZLEVBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBQ3BDLEVBQVUsRUFBSyxHQUFHLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFFakMsRUFBUyxHQUFRLElBQU0sQ0FDNUIsSUFBSSxFQUFhLEVBQXNCLEVBQVcsQ0FBTyxFQUN6RCxHQUFJLEVBQVksQ0FDZixJQUFNLEVBQWlCLEVBQXFCLENBQVUsRUFDdEQsRUFBYSxFQUFXLE9BQU8sQ0FBQyxJQUMvQixFQUFlLEtBQUssQ0FBQyxJQUFNLE9BQU8sRUFBRSxFQUFFLElBQU0sT0FBTyxFQUFNLEVBQUUsQ0FBQyxDQUM3RCxFQUdELEdBQUksRUFDSCxFQUFhLEVBQVcsT0FBTyxDQUFDLElBQU0sQ0FBQyxDQUFDLEVBQUUsU0FBVyxDQUFNLEVBRzVELE9BQU8sR0FDTCxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNELENBQUMsRUFjRCxPQVh5QixHQUFRLElBQU0sQ0FDdEMsT0FBTyxHQUFvQixDQUMxQixPQUNBLFNBQ0EsZUFDQSxrQkFDQSxlQUNBLFVBQ0QsQ0FBQyxHQUNDLENBQUMsRUFBTSxFQUFjLEVBQWlCLEVBQWMsRUFBUSxDQUFRLENBQUMsNENEaER6RSxJQUFNLEdBRUYsRUFDSCxPQUNBLFdBQVcsTUFDWCxhQUNBLGtCQUNBLGNBQWUsRUFDZixZQUNLLENBQ0wsSUFBTSxFQUFZLEVBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxLQUFLLEVBRXBDLEVBQXNCLEdBQXVCLENBQ2xELE9BQ0EsV0FDQSxhQUNBLGtCQUNBLFFBQ0QsQ0FBQyxFQUVELE9BQ0MsR0E4QkUsTUE5QkYsQ0FDQyxVQUFVLGdFQUNWLGNBQWEsRUFGZCxTQUlFLEVBQW9CLElBQUksQ0FBQyxJQUFVLENBQ25DLElBQU0sRUFBVyxHQUFHLEVBQU0sTUFBTSxFQUFNLFlBQVksRUFBVSxZQUFZLEtBQUssR0FBYyxnQkFFM0YsT0FDQyxHQW1CRSxNQW5CRixDQUNDLFVBQVUsa0RBQ1YsWUFBVyxFQUFNLEtBQ2pCLGNBQWEsb0JBQW9CLEVBQU0sS0FDdkMsV0FBVSxFQUFNLElBQ2hCLGFBQVksRUFBTSxNQUVsQixNQUFPLENBQ04sS0FBTSxRQUFRLEVBQU0saUNBQ3BCLE1BQU8sUUFBUSxFQUFNLCtCQUNyQixJQUFLLEdBQUcsRUFBTSxRQUNkLE9BQVEsR0FBRyxNQUNaLEVBWkQsU0FjQyxHQUFDLEdBQUQsQ0FDQyxVQUFVLHVCQUNWLFVBQVcsRUFDWCxNQUFPLEVBQ1IsR0FaSyxHQUFHLFdBYVAsRUFFSCxFQUNBLEdBSVMsR0FBNEIsR0FBSyxFQUErQixzRFB0QzdFLElBQU0sR0FBNEQsRUFDakUsS0FDQSxXQUNBLFdBQVcsTUFDWCxVQUFVLFdBQ1Ysa0JBQ0EsWUFDQSxVQUFVLENBQUMsRUFDWCxTQUNBLGdCQUFnQixHQUNoQixZQUFZLE1BQ1AsQ0FDTCxJQUFRLGtCQUFtQixFQUF3QixFQUU3QyxFQUFxQixJQUFZLFdBQ2pDLEVBQVksRUFBUSxLQUFLLENBQUMsSUFBUSxFQUFJLElBQUksRUFFMUMsRUFBb0IsR0FDekIsQ0FBQyxJQUF3QixDQUN4QixPQUNDLEdBU0UsTUFURixDQUFLLFVBQVUsNENBQWYsU0FDQyxHQUFDLEdBQUQsQ0FDQyxPQUFRLEVBQ1IsY0FBYSxxQkFBcUIsSUFDbEMsZ0JBQWlCLEVBQ2pCLEtBQU0sRUFDTixTQUFVLEVBQ1YsV0FBWSxHQUFVLEdBQ3ZCLEVBQ0MsR0FHSixDQUFDLEVBQVEsRUFBaUIsRUFBVSxFQUFJLEdBQVUsRUFBRSxDQUNyRCxFQUVBLE9BQ0MsR0F5RUUsTUF6RUYsQ0FDQyxVQUFXLEVBQUcsdUJBQXdCLENBQVMsRUFDL0MsY0FBYSxrQkFBa0IsSUFGaEMsU0F5RUUsQ0FyRUEsR0FDQSxHQVVFLEdBVkYsQ0FDQyxVQUFVLHVEQUNWLGNBQWEsd0JBQXdCLEdBQVUsS0FDL0MsU0FBVSxFQUhYLFNBS0UsRUFDQSxFQUFlLENBQVEsRUFFdkIsR0FBNEQsTUFBNUQsQ0FBSyxVQUFVLDBCQUFmLFNBQTBDLEdBQVUsTUFBUSxFQUU1RCxFQUVILEdBdURFLE1BdkRGLENBQUssVUFBVSx1QkFBZixTQXVERSxDQXRERCxHQWlERSxNQWpERixDQUFLLFVBQVUsY0FBZixTQUNFLEVBQVEsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM1QixHQUFJLEVBQUksSUFDUCxPQUNDLEdBQUMsR0FBRCxDQUNDLE9BQVEsRUFDUixVQUFXLEVBQ1YsY0FDQSxHQUFhLGFBQ2IsRUFBSSxTQUNMLEVBQ0EsSUFBSyxFQUFJLElBQ1QsU0FBVSxFQUNWLEtBQU0sSUFBYSxPQUFTLEVBQUksSUFBSSxLQUFLLEVBQUksT0FFN0MsV0FBWSxHQUFVLEdBQ3RCLGNBQWUsR0FGVixFQUFJLElBQUksWUFBWSxDQUcxQixFQUlGLElBQU0sRUFBWSxJQUFVLEVBQVEsT0FBUyxFQUU3QyxPQUNDLEdBc0JFLE1BdEJGLENBQUssVUFBVSx1QkFBZixTQXNCRSxDQXJCRCxHQWtCRSxNQWxCRixDQUFLLFVBQVUsY0FBZixTQUNFLEVBQUksTUFBTSxJQUFJLENBQUMsSUFDZixHQUFDLEdBQUQsQ0FDQyxPQUFRLEVBQ1IsVUFBVyxFQUNWLGNBQ0EsR0FBYSxhQUNiLENBQUMsR0FBYSxZQUNkLEVBQUksU0FDTCxFQUNBLElBQUssRUFDTCxTQUFVLEVBQ1YsS0FBTSxJQUFhLE9BQVMsRUFBSSxLQUFLLEVBQUksT0FFekMsV0FBWSxHQUFVLEdBQ3RCLGNBQWUsR0FGVixFQUFJLFlBQVksQ0FHdEIsQ0FDQSxFQUNBLEVBRUQsRUFBa0IsRUFBSSxJQUFJLElBckJlLEVBQUksRUFzQjdDLEVBRUgsRUFDQSxFQUdELENBQUMsR0FDRCxFQUFrQixFQUFRLElBQUksQ0FBQyxJQUFRLEVBQUksR0FBRyxFQUFFLE9BQU8sT0FBTyxDQUFDLEdBQy9ELEdBQ0QsR0FJUyxHQUFvQixHQUFLLEVBQXVCLEVVako3RCxlQUFTLHdEQVFULElBQU0sR0FBOEMsRUFBRyxlQUFnQixDQUN0RSxJQUFRLEtBQU0sRUFBd0IsRUFDdEMsT0FDQyxHQU9FLE1BUEYsQ0FDQyxVQUFXLEVBQ1YsNEhBQ0EsQ0FDRCxFQUpELFNBTUUsRUFBRSxRQUFRLEVBQ1YsR0FJUyxHQUFhLEdBQUssRUFBZ0Isc0RYUi9DLElBQU0sR0FBNEMsRUFDakQsT0FDQSxVQUNBLFdBQ0EsYUFBYSxNQUNSLENBQ0wsSUFBTSxFQUFVLEVBQUssSUFBSSxDQUFDLEVBQUssS0FBVyxDQUN6QyxHQUFJLGNBQWMsRUFBSSxZQUFZLEtBQUssSUFDdkMsTUFDQSxTQUFVLE1BQ1YsVUFBVyxFQUFHLDJDQUE0QyxHQUFTLElBQUksQ0FDeEUsRUFBRSxFQUVGLE9BQ0MsR0FnQkUsTUFoQkYsQ0FBSyxVQUFXLEVBQUcsY0FBZSxHQUFTLEdBQUcsRUFBRyxjQUFZLGNBQTdELFNBZ0JFLENBZEEsR0FBYyxHQUFDLEdBQUQsQ0FBWSxVQUFXLEdBQVMsT0FBUSxFQUd2RCxHQUFDLEdBQUQsQ0FDQyxPQUFNLEdBQ04sVUFBVSxtQkFDVixRQUFTLEVBQ1QsZ0JBQWlCLEVBQ2pCLFNBQVMsTUFDVCxHQUFJLGVBQWUsR0FBVSxJQUFNLFNBQ25DLFVBQVMsR0FDVCxTQUFVLEVBQ1YsUUFBUSxVQUNULEdBQ0MsR0FJUyxHQUFZLEdBQUssRUFBZSxFWS9DN0MsZUFBUyxlQ0RULGVBQVMsZUNBVCxzQkFDQSxlQUFTLHVFQW9CVCxJQUFNLEdBQTZCLEVBQ2xDLGFBQ0EsV0FDQSxJQUFLLEVBQ0wsY0FDZ0MsQ0FFaEMsSUFBUSw2QkFBNEIsUUFBUyxFQUM1QyxDQUFDLEtBQVcsQ0FDWCwyQkFBNEIsRUFBTSwyQkFDbEMsS0FBTSxFQUFNLElBQ2IsRUFDRCxFQUVNLEVBQU0sR0FBVyxHQUFNLEVBSzdCLEdBQUksRUFGa0IsRUFBSSxjQUFjLENBQVUsR0FBSyxFQUFJLFNBQVMsQ0FBUSxHQUczRSxPQUFPLEtBR1IsSUFBTSxFQUFnQixFQUFTLEtBQUssRUFBWSxRQUFRLEVBRWxELEVBRG1CLEVBQUksS0FBSyxFQUFZLFFBQVEsRUFDakIsRUFBaUIsSUFHdEQsR0FBSSxFQUNILE9BQ0MsZ0JBQ0UsRUFBMkIsQ0FDM0IsWUFBYSxFQUNiLGFBQ0EsV0FDQSxXQUNBLFdBQ0EsTUFDRCxDQUFDLEVBQ0EsRUFLSixPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVUsb0VBQ1YsY0FBWSx5QkFDWixNQUFPLENBQ04sSUFBSyxHQUFHLElBQ1QsRUFDRCxHQUlXLEdBQXVCLEdBQUssRUFBMEIsRUM1RW5FLGtCQUFTLGVDaUJGLElBQU0sR0FBeUIsRUFDckMsT0FDQSxXQUFXLE9BQ1gsWUFDc0QsQ0FFdEQsSUFBTSxFQUFlLEVBQ25CLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLEVBQ3ZCLFNBQVMsQ0FBQyxFQUFHLElBQU0sRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLENBQUMsRUFFMUMsR0FBSSxFQUFhLFNBQVcsRUFDM0IsTUFBTyxDQUFDLEVBTVQsSUFBTSxFQUFZLEVBQUssR0FBRyxDQUFDLEdBQUssRUFBTSxFQUNoQyxFQUFhLEVBQUssT0FDbEIsRUFBYSxJQUFhLE1BRzFCLEVBQThCLENBQUMsRUFDakMsRUFBa0MsQ0FBQyxFQUNuQyxFQUFtQyxLQUN2QyxRQUFXLEtBQVMsRUFBYyxDQUNqQyxHQUFJLEdBQWdCLEVBQU0sTUFBTSxjQUFjLENBQVksRUFBRyxDQUM1RCxHQUFJLEVBQWUsT0FBUyxFQUMzQixFQUFTLEtBQUssQ0FBYyxFQUU3QixFQUFpQixDQUFDLEVBRW5CLEVBQWUsS0FBSyxDQUFLLEVBQ3pCLEVBQWUsRUFBZSxFQUFNLElBQUksRUFBYyxFQUFNLEdBQUcsRUFBSSxFQUFNLElBRTFFLEdBQUksRUFBZSxPQUFTLEVBQzNCLEVBQVMsS0FBSyxDQUFjLEVBSTdCLElBQU0sRUFBcUMsQ0FBQyxFQUM1QyxRQUFXLEtBQVcsRUFBVSxDQUMvQixHQUFJLEVBQVEsU0FBVyxFQUFHLENBRXpCLElBQU0sRUFBUSxFQUFRLEdBRWxCLEVBQVksRUFBTSxNQUFNLEtBQUssRUFBVyxFQUFVLEVBQUksRUFDdEQsRUFBVSxFQUFNLElBQUksS0FBSyxFQUFXLEVBQVUsRUFBSSxFQUV0RCxHQUFJLEdBSUgsR0FIQSxFQUFZLEtBQUssTUFBTSxDQUFTLEVBQ2hDLEVBQVUsS0FBSyxLQUFLLENBQU8sRUFFdkIsR0FBVyxFQUNkLEVBQVUsRUFBWSxFQUt4QixHQUFJLEVBQVksRUFBRyxFQUFZLEVBQy9CLEdBQUksRUFBVSxFQUFZLEVBQVUsRUFFcEMsSUFBTSxFQUFnQixLQUFLLElBQUksRUFBRyxFQUFVLENBQVMsRUFHckQsR0FBSSxJQUFrQixFQUFHLFNBRXpCLElBQU0sRUFBTyxFQUFZLEVBQWMsSUFDakMsRUFBVSxFQUFnQixFQUFjLElBRTlDLEVBQWdCLEtBQUssSUFBSyxFQUFPLEtBQU0sRUFBRyxNQUFPLElBQUssTUFBSyxRQUFPLENBQUMsRUFDbkUsU0FLRCxJQUFNLEVBQWdCLENBQUMsR0FBRyxDQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUcsSUFBTSxDQUNqRCxJQUFNLEVBQVksRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFPLFFBQVEsRUFDeEMsRUFBWSxFQUFFLElBQUksS0FBSyxFQUFFLE1BQU8sUUFBUSxFQUc5QyxHQUFJLElBQWMsRUFDakIsT0FBTyxFQUFZLEVBSXBCLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLEVBQzNCLEVBR0ssRUFBYyxFQUFjLE9BSTlCLEVBQ0osR0FBSSxJQUFnQixFQUNuQixFQUFZLEdBQ04sUUFBSSxJQUFnQixFQUMxQixFQUFZLEdBQ04sUUFBSSxJQUFnQixFQUMxQixFQUFZLEdBRVosT0FBWSxHQUdiLElBQU0sRUFBaUIsRUFBYyxFQUFJLEdBQWEsRUFBYyxHQUFLLEVBRXpFLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBYyxPQUFRLElBQUssQ0FDOUMsSUFBTSxFQUFRLEVBQWMsR0FFeEIsRUFBWSxFQUFNLE1BQU0sS0FBSyxFQUFXLEVBQVUsRUFBSSxFQUN0RCxFQUFVLEVBQU0sSUFBSSxLQUFLLEVBQVcsRUFBVSxFQUFJLEVBRXRELEdBQUksR0FHSCxHQUZBLEVBQVksS0FBSyxNQUFNLENBQVMsRUFDaEMsRUFBVSxLQUFLLEtBQUssQ0FBTyxFQUN2QixHQUFXLEVBQ2QsRUFBVSxFQUFZLEVBS3hCLEdBQUksRUFBWSxFQUFHLEVBQVksRUFDL0IsR0FBSSxFQUFVLEVBQVksRUFBVSxFQUVwQyxJQUFNLEVBQWdCLEtBQUssSUFBSSxFQUFHLEVBQVUsQ0FBUyxFQUVyRCxHQUFJLElBQWtCLEVBQUcsU0FFekIsSUFBTSxFQUFPLEVBQVksRUFBYyxJQUNqQyxFQUFVLEVBQWdCLEVBQWMsSUFHMUMsRUFDQSxFQUNBLEVBRUosR0FBSSxJQUFNLEVBRVQsRUFBTyxFQUNQLEVBQVEsSUFDUixFQUFTLEVBR1QsT0FBTyxFQUFpQixFQUN4QixFQUFRLElBQU0sRUFDZCxFQUFTLEVBQUksRUFHZCxFQUFnQixLQUFLLElBQ2pCLEVBQ0gsT0FDQSxRQUNBLE1BQ0EsU0FDQSxRQUNELENBQUMsR0FJSCxPQUFPLEdEbktELElBQU0sR0FBd0IsRUFDcEMsT0FDQSxXQUNBLGdCQUNpQyxDQUNqQyxJQUFRLHdCQUF1Qix3QkFDOUIsRUFBd0IsRUFDbkIsRUFBVyxFQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsS0FBSyxFQUNuQyxFQUFTLEVBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBRWhDLEVBQVMsR0FBUSxJQUFNLENBQzVCLElBQUksRUFBWSxFQUFzQixFQUFVLENBQU0sRUFDdEQsR0FBSSxFQUFZLENBQ2YsSUFBTSxFQUFpQixFQUFxQixDQUFVLEVBQ3RELEVBQVksRUFBVSxPQUFPLENBQUMsSUFDN0IsRUFBZSxLQUFLLENBQUMsSUFBTyxPQUFPLEVBQUcsRUFBRSxJQUFNLE9BQU8sRUFBTSxFQUFFLENBQUMsQ0FDL0QsRUFLRCxPQUFPLEVBQVUsT0FBTyxDQUFDLElBQU0sQ0FBQyxFQUFFLE1BQU0sR0FDdEMsQ0FDRixFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0QsQ0FBQyxFQVVELE9BUm9CLEdBQTJCLElBQU0sQ0FDcEQsT0FBTyxHQUF1QixDQUM3QixPQUNBLFNBQ0EsVUFDRCxDQUFDLEdBQ0MsQ0FBQyxFQUFNLEVBQVUsQ0FBTSxDQUFDLHVERmxDNUIsSUFBTSxHQUF3RSxFQUM3RSxPQUNBLFdBQVcsT0FDWCxhQUNBLFdBQ0EsY0FBZSxLQUNWLENBQ0wsSUFBTSxFQUFjLEdBQXNCLENBQUUsT0FBTSxXQUFVLFlBQVcsQ0FBQyxFQUNsRSxFQUFhLEVBQUssR0FBRyxDQUFDLEVBQ3RCLEVBQVcsRUFBSyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUcsQ0FBUSxFQUU3QyxPQUNDLEdBb0NFLE1BcENGLENBQ0MsVUFBVSxnRUFDVixjQUFhLEVBRmQsU0FvQ0UsQ0FoQ0EsR0FBYyxHQUNkLEdBQUMsR0FBRCxDQUNDLFNBQVUsRUFDVixXQUFZLEVBQ1osU0FBVSxFQUNYLEVBRUEsRUFBWSxJQUFJLENBQUMsRUFBTyxJQUFVLENBQ2xDLElBQU0sRUFBVyxTQUFTLEVBQU0sTUFBTSxLQUFTLEVBQUssR0FBRyxDQUFDLEVBQUUsWUFBWSxLQUFLLEdBQWMsZ0JBQ25GLEVBQWUsRUFBTSxJQUFJLEtBQUssRUFBTSxNQUFPLFFBQVEsR0FBSyxHQUU5RCxPQUNDLEdBaUJFLE1BakJGLENBQ0MsVUFBVSxXQUVWLE1BQU8sQ0FDTixLQUFNLEdBQUcsRUFBTSxRQUNmLE1BQU8sUUFBUSxFQUFNLCtCQUNyQixJQUFLLEdBQUcsRUFBTSxPQUNkLE9BQVEsR0FBRyxFQUFNLFNBQ2xCLEVBUkQsU0FVQyxHQUFDLEdBQUQsQ0FDQyxVQUFXLEVBQUcsc0JBQXVCLENBQ3BDLCtCQUFnQyxDQUNqQyxDQUFDLEVBQ0QsVUFBVyxFQUNYLE1BQU8sRUFDUixHQWRLLEdBQUcsV0FlUCxFQUVILEdBQ0EsR0FJUyxHQUEwQixHQUFLLEVBQTZCLHNERHhDekUsSUFBTSxHQUF3RCxFQUM3RCxLQUNBLE9BQ0EsYUFDQSxXQUNBLGNBQWUsRUFDZixXQUNBLFlBQ0EsYUFDQSxXQUNBLFlBQVksQ0FBQyxFQUFFLEVBQ2Ysa0JBQ0ssQ0FDTCxPQUNDLEdBd0VFLE1BeEVGLENBQ0MsVUFBVyxFQUNWLG1GQUNBLENBQ0QsRUFDQSxjQUFhLEdBQWMsZ0JBQWdCLElBTDVDLFNBUUMsR0ErREUsTUEvREYsQ0FDQyxVQUFVLHVCQUNWLE1BQU8sQ0FDTixpQkFBa0IsVUFBVSxFQUFLLHlCQUNsQyxFQUpELFNBK0RFLENBekRBLEVBQUssSUFBSSxDQUFDLEVBQUssSUFBYSxDQUM1QixJQUFNLEVBQVUsRUFBSSxPQUFPLElBQUksRUFDekIsRUFBVSxFQUFJLE9BQU8sWUFBWSxFQUV2QyxHQUFJLEVBQVksQ0FDZixJQUFNLEVBQ0wsSUFBTyxXQUNKLGlCQUFpQixJQUNqQixpQkFBaUIsS0FBVyxPQUFhLEVBQWEsSUFBSSxJQUFlLEtBQzdFLE9BQ0MsR0FNRSxNQU5GLENBQ0MsVUFBVSw2QkFDVixjQUFhLEVBRmQsU0FLRSxFQUFXLENBQUcsR0FGVixHQUFHLEtBQU0sS0FBWSxHQUd6QixFQUlKLE9BQU8sRUFBVSxJQUFJLENBQUMsSUFBVyxDQUNoQyxJQUFNLEVBQUksSUFBVyxHQUFLLE9BQVksRUFDaEMsRUFBSyxJQUFNLE9BQVksS0FBTyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUcsR0FBRyxFQUN2RCxFQUFTLGlCQUFpQixLQUFXLEtBQVcsSUFBSyxFQUFhLElBQUksSUFBZSxLQUUzRixPQUNDLEdBQUMsR0FBRCxDQUNDLFVBQVcsRUFDVixpRUFDQSxJQUFXLEdBQUssR0FBSyxzQ0FDckIsRUFBZSxhQUFlLFVBQy9CLEVBQ0EsY0FBYSxFQUNiLElBQUssRUFBSSxFQUFJLE9BQU8sQ0FBQyxFQUFJLEVBQ3pCLFNBQVUsRUFDVixLQUFNLEVBQUksS0FBSyxFQUVmLE9BQVEsRUFDUixXQUFZLEVBQ1osbUJBQW9CLElBSGYsR0FBRyxLQUFNLEtBQVksR0FJM0IsRUFFRCxFQUNELEVBR0EsQ0FBQyxHQUNELEdBUUUsTUFSRixDQUFLLFVBQVUsNENBQWYsU0FDQyxHQUFDLEdBQUQsQ0FDQyxjQUFhLG1CQUFtQixJQUNoQyxLQUFNLEVBQ04sU0FBVSxFQUNWLFNBQVUsRUFDVixXQUFZLEVBQ2IsRUFDQyxHQUVGLEVBQ0QsR0FJUyxHQUFrQixHQUM5QixFQUNELEVLeEhBLGVBQVMsbUVBV1QsSUFBTSxHQUVGLEVBQUcsV0FBVSxVQUFTLGVBQWdCLENBQ3pDLElBQVEsbUJBQWtCLHVCQUF3QixFQUNqRCxDQUFDLEtBQVcsQ0FDWCxpQkFBa0IsRUFBTSxpQkFDeEIsb0JBQXFCLEVBQU0sbUJBQzVCLEVBQ0QsRUFFQSxPQUNDLEdBcUJFLE1BckJGLENBQ0MsVUFBVyxFQUNWLEdBQW9CLGtDQUNwQixDQUNELEVBSkQsU0FxQkUsQ0FmRCxHQUtFLE1BTEYsQ0FDQyxVQUFXLEVBQUcsc0JBQXVCLEdBQVMsTUFBTSxFQUNwRCxjQUFZLHVCQUZiLFNBSUUsRUFDQSxFQUVELEdBQ0EsR0FLRSxNQUxGLENBQ0MsVUFBVyxFQUFHLGdDQUFpQyxHQUFTLE1BQU0sRUFDOUQsY0FBWSx3QkFGYixTQUlFLEVBQ0EsR0FFRixHQUlTLEdBQThCLEdBQzFDLEVBQ0Qsc0RDNUJPLElBQU0sR0FBNEMsRUFDeEQsVUFDQSxXQUNBLFdBQVcsTUFDWCxVQUFVLFdBQ1YsVUFDQSxZQUNBLFlBQ0EsV0FDSyxDQUNMLElBQU0sRUFBcUIsSUFBWSxXQUNqQyxFQUFvQixDQUFDLEVBRXJCLEVBQVMsR0FDZCxHQUtFLEdBTEYsQ0FDQyxVQUFXLEVBQ1gsUUFBUyxDQUFFLE9BQVEsR0FBUyxPQUFRLE9BQVEsR0FBUyxNQUFPLEVBRjdELFNBSUUsRUFDQSxFQUdILE9BQ0MsR0FtQ0UsTUFuQ0YsQ0FDQyxVQUFVLHVCQUNWLGNBQVksMEJBQ1osTUFBTyxFQUhSLFNBbUNFLENBN0JBLEdBQXFCLEVBRXRCLEdBMEJFLEdBMUJGLENBQ0MsVUFBVyxFQUFHLFNBQVUsR0FBcUIsZUFBZSxFQUM1RCxjQUFZLHVCQUNaLGNBQWUsQ0FBRSxVQUFXLGtDQUFtQyxFQUhoRSxTQTBCRSxDQXBCQSxHQUFzQixFQUV2QixHQWNFLE1BZEYsQ0FDQyxVQUFXLEVBQUcsb0JBQXFCLEdBQVMsSUFBSSxFQUNoRCxjQUFZLHFCQUZiLFNBS0UsRUFBUSxJQUFJLENBQUMsRUFBUSxJQUNyQixHQUFDLEdBQUQsSUFFSyxFQUNKLFVBQVcsRUFDWCxTQUFVLEVBQ1YsYUFBYyxJQUFVLEVBQVEsT0FBUyxHQUpwQyxHQUFHLEVBQU8sTUFBTSxHQUt0QixDQUNBLEVBQ0EsRUFDRixHQUFDLEdBQUQsQ0FBVyxVQUFVLE9BQU8sRUF2QjdCLElBd0JDLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxZQUFZLGFBQWEsRUFBRyxLQUV2RCxHQUNELEdDckRHLFNBQVMsRUFBWSxFQUMzQixnQkFDQSxnQkFDQSx1QkFDQSxXQUFXLENBQUMsQ0FBYSxFQUN6Qix3QkFBd0IsQ0FBQyxHQUNhLENBQ3RDLElBQU0sRUFBUSxHQUFZLENBQUUsZUFBYyxDQUFDLEVBRXJDLEVBQ0wsQ0FBQyxDQUFDLEdBQWlCLEVBQXNCLE9BQVMsRUFJbkQsR0FBSSxFQUZILEdBQXdCLEdBRVMsT0FBTyxFQUV6QyxJQUFRLFdBQVUsU0FBUSxvQkFBcUIsR0FBNEIsQ0FDMUUsV0FDQSxnQkFDQSx3QkFDQSxzQkFDRCxDQUFDLEVBRUQsR0FBSSxDQUFDLEVBQWtCLE9BQU8sRUFFOUIsT0FBTyxFQUFNLE9BQU8sQ0FBQyxJQUFNLENBQzFCLElBQU0sRUFBTyxFQUFFLEtBQUssRUFDcEIsT0FBTyxHQUFRLEdBQVksRUFBTyxFQUNsQyxzREM5Q0ssSUFBTSxHQUFVLElBQU0sQ0FDNUIsSUFDQyxjQUNBLGdCQUNBLGFBQ0EsSUFDQSxnQkFDQSx3QkFDRyxFQUF3QixFQUN0QixFQUFVLEVBQVksT0FBTyxFQUFNLEVBQUcsS0FBSyxFQUMzQyxFQUFRLEdBQWEsQ0FDMUIsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FBQyxDQUFXLENBQ3ZCLENBQUMsRUFFSyxFQUFXLENBQ2hCLEdBQUksV0FDSixJQUFLLE9BQ0wsS0FBTSxFQUNOLFVBQ0MsbUVBQ0QsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUtFLE1BTEYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0UsS0FBSyxlQUFlLEVBQWUsQ0FDbkMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN4QixDQUFDLEVBQUUsT0FBTyxFQUFLLE9BQU8sQ0FBQyxFQUN0QixDQUVKLEVBRU0sRUFBVSxDQUNmLEdBQUksV0FBVyxFQUFZLE9BQU8sWUFBWSxJQUM5QyxJQUFLLEVBQ0wsS0FBTSxFQUNOLFVBQVcsNkJBQ1gsU0FBVSxNQUNYLEVBRUEsT0FDQyxHQW1DRSxHQW5DRixDQUNDLFVBQVcsR0FBQyxHQUFELENBQVcsS0FBTSxDQUFDLENBQVcsRUFBRyxFQUMzQyxVQUFXLENBQUMsRUFBRyxHQUFJLEdBQUksRUFBRSxFQUN6QixRQUFTLENBQ1IsT0FBUSxTQUNSLEtBQU0sU0FDTixPQUFRLFFBQ1QsRUFDQSxRQUFTLENBQUMsRUFBVSxDQUFPLEVBQzNCLFNBQVMsT0FDVCxRQUFRLFVBVlQsU0FhQyxHQXFCRSxNQXJCRixDQUNDLFVBQVcsbURBQ1gsY0FBWSxrQkFGYixTQUlDLEdBZ0JFLEVBaEJGLENBQ0MsVUFBVyxFQUNWLGtGQUNBLEdBQVcsY0FDWixFQUNBLGNBQWUsRUFBWSxPQUFPLFlBQVksRUFML0MsU0FnQkUsQ0FURCxHQUVFLE9BRkYsQ0FBTSxVQUFVLG1CQUFoQixTQUNFLEVBQVksT0FBTyxRQUFRLEVBQzNCLEVBQ0QsRUFBWSxPQUFPLGNBQWMsRUFDakMsR0FDQSxHQUVFLE9BRkYsQ0FBTSxVQUFVLDhGQUFoQixTQUNFLEVBQUUsT0FBTyxFQUNULEdBRUYsRUFDRCxFQUNELEdDdEZKLGtCQUFTLGVDRFQsZUFBUyx3REFTVCxJQUFNLEdBQXNDLEVBQzNDLFdBQ0EsZUFDeUMsQ0FDekMsSUFBUSxtQkFBa0IsdUJBQXdCLEVBQ2pELENBQUMsS0FBVyxDQUNYLGlCQUFrQixFQUFNLGlCQUN4QixvQkFBcUIsRUFBTSxtQkFDNUIsRUFDRCxFQUNBLE9BQ0MsR0FVRSxNQVZGLENBQ0MsVUFBVyxFQUNWLGtCQUNBLEdBQW9CLGtDQUNwQixFQUNBLENBQ0QsRUFDQSxjQUFZLHlCQVBiLFNBU0UsRUFDQSxHQUlTLEdBQWdDLEdBQzVDLEVBQ0Qsc0RDaEJPLElBQU0sR0FBZ0QsRUFDNUQsT0FDQSxXQUNBLFVBQ0EsT0FBUSxFQUNSLFdBQ0EsVUFBVSxXQUNWLHFCQUNLLENBQ0wsSUFBUSxlQUFnQixFQUF3QixFQUUxQyxFQUFxQixJQUFZLFdBQ2pDLEVBQW9CLENBQUMsRUFFckIsRUFBUyxHQUNkLEdBRUUsR0FGRixDQUErQixVQUFXLEdBQVMsT0FBbkQsU0FDRSxFQUNBLEVBR0gsT0FDQyxHQTZDRSxNQTdDRixDQUNDLFVBQVUsdUJBQ1YsY0FBWSw0QkFGYixTQTZDRSxDQXRDQSxHQUFxQixFQUV0QixHQW1DRSxHQW5DRixDQUNDLFVBQVcsRUFBRyxTQUFVLEdBQXFCLGVBQWUsRUFDNUQsY0FBWSx5QkFDWixjQUFlLENBQUUsVUFBVyxrQ0FBbUMsRUFIaEUsU0FtQ0UsQ0EzQkEsR0FBc0IsRUFHdkIsR0FvQkUsTUFwQkYsQ0FDQyxVQUFXLEVBQUcsb0JBQXFCLEdBQVMsSUFBSSxFQUNoRCxjQUFZLHVCQUZiLFNBSUMsR0FlRSxNQWZGLENBQ0MsVUFBVSx1Q0FEWCxTQUlFLEVBQUssSUFBSSxDQUFDLEVBQUssSUFDZixHQUFDLEdBQUQsQ0FDQyxPQUFRLEVBQUksUUFBVSxFQUN0QixnQkFBaUIsRUFDakIsU0FBVSxFQUNWLFVBQVcsSUFBVSxFQUFLLE9BQVMsRUFFbkMsUUFBUyxLQUNMLEdBRkMsRUFBSSxFQUdWLENBQ0EsR0FaSSxFQUFZLE9BQU8sU0FBUyxDQWFoQyxFQUNELEVBRUYsR0FBQyxHQUFELENBQVcsVUFBVSxPQUFPLEVBQzVCLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxZQUFZLGFBQWEsR0FDcEQsR0FDRCw0Q0M1RUcsSUFBTSxHQUEwQyxFQUFHLGVBQWdCLENBQ3pFLElBQVEsaUJBQWdCLG1CQUFrQixzQkFBcUIsZUFDOUQsRUFBd0IsRUFHbkIsRUFBVyxHQUFZLEVBQWEsQ0FBYyxFQUV4RCxPQUNDLEdBb0JFLE1BcEJGLENBQ0MsVUFBVyxFQUNWLGNBQ0EsR0FBb0Isb0JBQ3BCLEVBQ0EsQ0FDRCxFQUNBLGNBQVksZUFQYixTQVNFLEVBQVMsSUFBSSxDQUFDLEVBQVMsSUFDdkIsR0FRRSxFQVJGLENBQ0MsVUFBVSx3RUFDVixjQUFhLGtCQUFrQixFQUFRLE9BQU8sS0FBSyxFQUFFLFlBQVksSUFDakUsTUFBTyxFQUFRLEtBRWYsY0FBZSxFQUFRLFlBQVksRUFMcEMsU0FPQyxHQUE4RCxPQUE5RCxDQUFNLFVBQVUscUJBQWhCLFNBQXNDLEVBQVEsT0FBTyxLQUFLLEVBQUksR0FIekQsRUFBUSxZQUFZLENBSXhCLENBQ0YsRUFDQSw0Q0g5QkcsSUFBTSxHQUFzQyxJQUFNLENBQ3hELElBQVEsY0FBYSxrQkFBbUIsRUFBd0IsRUFPMUQsRUFMUSxHQUNiLElBQU0sR0FBYyxFQUFhLENBQWMsRUFDL0MsQ0FBQyxFQUFhLENBQWMsQ0FDN0IsRUFFbUIsSUFBSSxDQUFDLEVBQU0sS0FBZSxDQUM1QyxHQUFJLFFBQVEsSUFDWixRQUFTLEVBQUssSUFBSSxDQUFDLEtBQVMsQ0FDM0IsR0FBSSxPQUFPLEVBQUksWUFBWSxJQUMzQixNQUNBLFVBQVcsU0FDWCxTQUFVLEtBQ1gsRUFBRSxFQUNGLFVBQVcsU0FDWCxjQUFlLEVBQ2hCLEVBQUUsRUFFRixPQUNDLEdBTUUsR0FORixDQUNDLFFBQVMsQ0FBRSxLQUFNLFNBQVUsT0FBUSxRQUFTLEVBQzVDLEtBQU0sRUFDTixRQUFRLFVBSFQsU0FLQyxHQUFDLEdBQUQsQ0FBYSxVQUFVLE9BQU8sRUFDN0IsR0lsQ0osa0JBQVMsbUVBVVQsSUFBTSxHQUNMLGlHQUNLLEdBQWlCLHlEQUVWLEdBQXFCLElBQU0sQ0FDdkMsSUFDQyxJQUNBLGNBQ0EsaUJBQ0EsYUFDQSxnQkFDQSxnQkFDQSxhQUNBLGdCQUNBLHVCQUNBLGNBQ0csRUFBd0IsRUFFdEIsRUFBVyxHQUNoQixJQUFNLEdBQVksRUFBYSxDQUFjLEVBQzdDLENBQUMsRUFBYSxDQUFjLENBQzdCLEVBRU0sRUFBYyxHQUNuQixJQUNDLEVBQ0csRUFBUyxPQUFPLENBQUMsSUFBUSxDQUFDLEVBQVcsSUFBSSxFQUFJLElBQUksQ0FBQyxDQUFDLEVBQ25ELEVBQ0osQ0FBQyxFQUFVLENBQVUsQ0FDdEIsRUFhTSxFQUFXLENBQ2hCLEdBQUksV0FDSixLQWJhLEdBQ2IsSUFDQyxHQUFhLENBQ1osY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FDWCxDQUFDLEVBQ0YsQ0FBQyxFQUFhLEVBQWUsRUFBc0IsQ0FBUSxDQUM1RCxFQUtDLElBQUssT0FDTCxVQUFXLFlBQVksc0NBQ3ZCLFNBQVUsT0FDVixTQUFVLEdBQ1YsV0FBWSxDQUFDLElBQ1osR0FLRSxNQUxGLENBQUssVUFBVSx5RkFBZixTQUNFLEtBQUssZUFBZSxFQUFlLENBQ25DLEtBQU0sVUFDTixPQUFRLElBQWUsU0FDeEIsQ0FBQyxFQUFFLE9BQU8sRUFBSyxPQUFPLENBQUMsRUFDdEIsQ0FFSixFQUdNLEVBQVUsR0FBUSxJQUFNLENBQzdCLE9BQU8sRUFBWSxJQUFJLENBQUMsS0FBUyxDQUNoQyxHQUFJLFdBQVcsRUFBSSxPQUFPLFlBQVksSUFDdEMsTUFDQSxNQUFPLEVBQUksT0FBTyxHQUFHLEVBQ3JCLFVBQVcsR0FDWCxLQUFNLEdBQWEsQ0FDbEIsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FDWCxDQUFDLEVBQ0QsTUFBTyxDQUNSLEVBQUUsR0FDQSxDQUFDLEVBQVUsRUFBZSxFQUFzQixFQUFZLEdBQUcsQ0FBQyxFQUU3RCxFQUFVLENBQ2YsaUJBQWtCLEVBQVksTUFDL0IsRUFFQSxPQUNDLEdBeURFLEdBekRGLENBQ0MsVUFDQyxHQUFDLEdBQUQsQ0FDQyxRQUFTLENBQUUsS0FBTSxHQUFZLE9BQVEsRUFBZSxFQUNwRCxLQUFNLEVBQ1AsRUFFRCxRQUFTLENBQUUsT0FBUSxjQUFlLEtBQU0sUUFBUyxFQUNqRCxRQUFTLENBQUMsRUFBVSxHQUFHLENBQU8sRUFDOUIsU0FBUyxPQUNULE1BQU8sRUFDUCxRQUFRLFVBWFQsU0FhQyxHQTJDRSxNQTNDRixDQUFLLFVBQVcscUJBQXNCLGNBQVksbUJBQWxELFNBMkNFLENBekNELEdBS0UsTUFMRixDQUFLLFVBQVUsNkVBQWYsU0FDQyxHQUdFLE1BSEYsQ0FBSyxVQUFVLDRDQUFmLFNBR0UsQ0FGRCxHQUE2RCxPQUE3RCxDQUFNLFVBQVUsZ0NBQWhCLFNBQWlELEVBQUUsTUFBTSxFQUFJLEVBQzdELEdBQW9ELE9BQXBELENBQU0sVUFBVSxjQUFoQixTQUErQixFQUFZLEtBQUssRUFBSSxHQUNuRCxFQUNELEVBR0QsRUFBWSxJQUFJLENBQUMsRUFBSyxJQUFVLENBQ2hDLElBQU0sRUFBVSxFQUFJLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFDbkMsRUFBTSxtQkFBbUIsRUFBSSxZQUFZLElBRS9DLE9BQ0MsR0F5QkUsRUF6QkYsQ0FDQyxVQUFXLEVBQ1YsaUlBQ0EsR0FBVyx5QkFDWixFQUNBLGNBQWEsbUJBQW1CLEVBQUksT0FBTyxNQUFNLEVBQUUsWUFBWSxJQUMvRCxNQUFPLEVBQVEsS0FFZixRQUFTLElBQU0sQ0FDZCxFQUFXLENBQUcsRUFDZCxFQUFjLENBQUUsTUFBTyxDQUFJLENBQUMsR0FFN0IsY0FBZSxFQVpoQixTQXlCRSxDQVhELEdBQXlELE1BQXpELENBQUssVUFBVSxxQkFBZixTQUFxQyxFQUFJLE9BQU8sS0FBSyxFQUFJLEVBQ3pELEdBU0UsTUFURixDQUNDLFVBQVcsRUFDViw2RUFDQSxHQUFXLG9DQUNaLEVBSkQsU0FNRSxLQUFLLGVBQWUsRUFBZSxDQUNuQyxJQUFLLFNBQ04sQ0FBQyxFQUFFLE9BQU8sRUFBSSxPQUFPLENBQUMsRUFDckIsSUFqQkcsQ0FrQkosRUFFSCxHQUNBLEVBQ0QsdURDL0lKLElBQU0sR0FBbUIsQ0FBQyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFHLEVBQ3JELEdBQW1CLENBQUMsYUFBYyxjQUFlLGNBQWMsRUFDL0QsR0FBd0IsR0FFeEIsR0FBZ0IsQ0FBQyxJQUErQixDQUNyRCxHQUFJLElBQWUsRUFDbEIsTUFBTyxHQUVSLElBQU0sRUFBUyxFQUFhLEVBQUksSUFBTSxHQUN0QyxNQUFPLEdBQUcsVUFBbUIsS0FtQmpCLEdBQVcsSUFBTSxDQUM3QixJQUFRLGNBQWEsYUFBWSxTQUFRLFVBQVMsd0JBQXVCLEtBQ3hFLEVBQXdCLEVBQ25CLEVBQWMsRUFBWSxLQUFLLEVBRS9CLEVBQXFCLElBQW1CLENBQzdDLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxFQUFHLEVBQUcsQ0FBQyxFQUFHLElBQWUsQ0FDcEQsSUFBTSxFQUFZLEVBQU0sRUFDdEIsS0FBSyxDQUFXLEVBQ2hCLE1BQU0sQ0FBVSxFQUNoQixRQUFRLE9BQU8sRUFDWCxFQUFnQixFQUFPLE9BQzVCLENBQUMsSUFDQSxFQUFNLE1BQU0sS0FBSyxJQUFNLEdBQ3ZCLEVBQU0sTUFBTSxNQUFNLElBQU0sQ0FDMUIsRUFFQSxNQUFPLENBQ04sS0FBTSxFQUNOLEtBQU0sRUFBVSxPQUFPLE1BQU0sRUFDN0IsV0FBWSxFQUFjLE9BQzFCLFNBQVUsRUFBVSxPQUFPLElBQUksQ0FDaEMsRUFDQSxHQUdJLEVBQXVCLENBQUMsSUFBc0MsQ0FDbkUsSUFBTSxFQUFxQixFQUFVLFFBQVEsT0FBTyxFQUFFLFFBQVEsTUFBTSxFQUVwRSxPQUFPLE1BQU0sS0FBSyxDQUFFLE9BQVEsRUFBc0IsRUFBRyxDQUFDLEVBQUcsSUFBYSxDQUNyRSxJQUFNLEVBQVUsRUFBbUIsSUFBSSxFQUFVLEtBQUssRUFDaEQsRUFBVyxFQUFRLFFBQVEsS0FBSyxFQUNoQyxFQUFTLEVBQVEsTUFBTSxLQUFLLEVBQzVCLEVBQWMsRUFBc0IsRUFBVSxDQUFNLEVBRTFELE1BQU8sQ0FDTixLQUFNLEVBQ04sT0FBUSxFQUFRLE9BQU8sWUFBWSxFQUNuQyxpQkFBa0IsRUFBUSxNQUFNLElBQU0sRUFBVSxNQUFNLEVBQ3RELFFBQVMsRUFBUSxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBQ3RDLFdBQVksRUFBUSxPQUFPLEVBQWEsS0FBSyxFQUM3QyxXQUFZLEVBQVksTUFDekIsRUFDQSxHQUdJLEVBQWlCLENBQ3RCLEVBQ0EsRUFDQSxJQUNJLENBQ0osR0FBTyxnQkFBZ0IsRUFDdkIsRUFBVyxDQUFJLEVBQ2YsRUFBUSxDQUFJLEdBR1AsRUFBcUIsQ0FBQyxJQUEwQixDQUNyRCxJQUFNLEVBQVksSUFBVSxFQUFJLEVBQUUsT0FBTyxFQUFJLEVBQUUsUUFBUSxFQUN2RCxNQUFPLEdBQUcsS0FBUyxLQUdkLEVBQWtCLENBQUMsSUFBeUIsQ0FHakQsSUFBTSxFQUFvQixFQUFJLGlCQUMzQixHQUNBLG1DQUNHLEVBQWEsRUFBSSxRQUNwQixrREFDQSxHQUNHLEVBQ0wsRUFBSSxZQUFjLENBQUMsRUFBSSxRQUFVLGtDQUFvQyxHQUNoRSxFQUNMLEVBQUksV0FBYSxHQUFLLENBQUMsRUFBSSxTQUFXLENBQUMsRUFBSSxXQUFhLGNBQWdCLEdBRXpFLE9BQU8sRUFaTixtSkFjQSxFQUNBLEVBQ0EsRUFDQSxDQUNELEdBR0ssRUFBdUIsQ0FBQyxFQUFlLElBQTZCLENBRXpFLE9BQU8sRUFBRywrQkFETyxFQUFVLHdCQUEwQixDQUNILEdBRzdDLEVBQWEsRUFBbUIsRUFFdEMsT0FDQyxHQXNHRSxHQXRHRixDQUFZLFVBQVUsU0FBUyxjQUFZLFlBQTNDLFNBc0dFLENBckdELEdBbUdFLE1BbkdGLENBQ0MsVUFBVSx3RUFDVixjQUFZLFlBRmIsU0FJRSxFQUFXLElBQUksQ0FBQyxFQUFPLElBQWUsQ0FDdEMsSUFBTSxFQUFjLEVBQXFCLEVBQU0sSUFBSSxFQUM3QyxFQUFpQixFQUFhLEtBRXBDLE9BQ0MsR0F1RkUsTUF2RkYsQ0FDQyxVQUFVLGlIQUNWLGNBQWEsY0FBYyxFQUFNLFdBRmxDLFNBdUZFLENBbEZELEdBdUJFLEVBdkJGLENBQ0MsVUFBVSx5Q0FDVixNQUFPLEVBRVAsY0FBZSxTQUFTLEVBQU0sV0FKL0IsU0F1QkUsQ0FqQkQsR0FPRSxTQVBGLENBQ0MsVUFBVSxxREFDVixjQUFhLG9CQUFvQixFQUFNLFdBQ3ZDLFFBQVMsSUFBTSxFQUFlLEVBQU0sS0FBTSxPQUFPLEVBQ2pELEtBQUssU0FKTixTQU1FLEVBQU0sS0FDTixFQUVELEVBQU0sV0FBYSxHQUNuQixHQUtFLE9BTEYsQ0FDQyxVQUFVLG9FQUNWLGNBQWEsMEJBQTBCLEVBQU0sV0FGOUMsU0FJRSxFQUFtQixFQUFNLFVBQVUsRUFDbkMsSUFsQkUsU0FBUyxFQUFNLFVBb0JuQixFQUVGLEdBd0RFLE1BeERGLENBQ0MsVUFBVSwyQ0FDVixjQUFhLHNCQUFzQixFQUFNLFdBRjFDLFNBd0RFLENBcERBLEdBQWlCLElBQUksQ0FBQyxJQUN0QixHQUtFLE1BTEYsQ0FDQyxVQUFVLHdDQURYLFNBSUUsR0FGSSxVQUFVLEdBR2QsQ0FDRixFQUVBLEVBQVksSUFBSSxDQUFDLElBQVEsQ0FDekIsSUFBTSxFQUFZLFlBQVksRUFBTSxLQUFLLE9BQU8sU0FBUyxLQUFLLEVBQUksU0FDNUQsRUFBWSxFQUFJLFdBQWEsRUFDN0IsRUFBa0IsS0FBSyxJQUFJLEVBQUksV0FBWSxDQUFDLEVBQzVDLEVBQW1CLEdBQWlCLE1BQ3pDLEVBQ0EsQ0FDRCxFQUVBLE9BQ0MsR0E4QkUsU0E5QkYsQ0FDQyxVQUFXLEVBQWdCLENBQUcsRUFDOUIsY0FBYSxFQUViLFFBQVMsQ0FBQyxJQUFNLEVBQWUsRUFBSSxLQUFNLE1BQU8sQ0FBQyxFQUNqRCxNQUFPLEdBQWMsRUFBSSxVQUFVLEVBQ25DLEtBQUssU0FOTixTQThCRSxDQXRCRCxHQUVFLE9BRkYsQ0FBTSxVQUFVLDJCQUFoQixTQUNFLEVBQUksS0FBSyxLQUFLLEVBQ2QsRUFFRCxHQUNBLEdBZUUsTUFmRixDQUNDLFVBQVcsRUFDViw2REFDQSxFQUFJLFNBQVcsY0FDaEIsRUFKRCxTQU1FLEVBQWlCLElBQUksQ0FBQyxJQUN0QixHQUFDLE9BQUQsQ0FDQyxVQUFXLEVBQ1YsRUFDQSxFQUFJLE9BQ0wsR0FDSyxDQUNOLENBQ0EsRUFDQSxJQXpCRSxFQUFJLE1BMkJSLEVBRUgsR0FDQSxJQW5GRyxFQUFNLFFBb0ZWLEVBRUgsRUFDQSxFQUNGLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxHQUMzQixHQ2xPSixzQkFBUyxjQUFhLHdEQXNEZixJQUFNLEdBQW9ELEVBQ2hFLFdBQ0EsU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUNBLGNBQ0EsZUFDQSxjQUNBLGVBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLGVBQWUsR0FDZixtQkFBbUIsR0FDbkIsc0JBQXNCLEdBQ3RCLGtCQUNBLGtCQUNBLGdCQUNBLGtCQUNBLGVBQ0EsYUFDQSxhQUFhLFVBQ2Isa0JBQ0EsNkJBQ0Esd0JBQXVCLEdBQ3ZCLGlCQUNLLENBRUwsSUFBTSxFQUFpQixHQUFrQixDQUN4QyxTQUNBLGlCQUNBLGNBQ0EsY0FDQSxnQkFDQSxhQUNBLGdCQUNBLGdCQUNBLGVBQ0EsZUFDQSxTQUNBLFdBQ0EsZUFDQSxZQUNELENBQUMsRUFFSyxFQUFZLEdBQ2pCLENBQUMsSUFBeUIsQ0FDekIsRUFBZSxpQkFBaUIsQ0FBSyxFQUNyQyxFQUFlLG1CQUFtQixFQUFJLEdBRXZDLENBQUMsQ0FBYyxDQUNoQixFQUdNLEdBQW1CLEdBQ3hCLENBQUMsSUFBeUIsQ0FDekIsR0FBSSxFQUNILE9BRUQsR0FBSSxFQUNILEVBQWEsQ0FBSyxFQUVsQixPQUFVLENBQUssR0FHakIsQ0FBQyxFQUFtQixFQUFjLENBQVMsQ0FDNUMsRUFFTSxFQUFrQixHQUN2QixDQUFDLElBQXdCLENBQ3hCLEdBQUksRUFDSCxPQUdELEdBQUksRUFDSCxFQUFZLENBQUksRUFFaEIsT0FBZSxjQUFjLENBQUksR0FHbkMsQ0FBQyxFQUFhLEVBQWtCLENBQWMsQ0FDL0MsRUFHTSxHQUFlLEdBQ3BCLEtBQU8sQ0FDTixZQUFhLEVBQWUsWUFDNUIsS0FBTSxFQUFlLEtBQ3JCLE9BQVEsRUFBZSxPQUN2QixVQUFXLEVBQWUsVUFDMUIsY0FBZSxFQUFlLGNBQzlCLGdCQUFpQixFQUFlLGdCQUNoQyxjQUFlLEVBQWUsY0FDOUIsYUFBYyxFQUFlLGFBQzdCLGVBQWdCLEVBQWUsZUFDL0IsZUFBZ0IsRUFBZSxlQUMvQixXQUFZLEVBQWUsV0FDM0IsUUFBUyxFQUFlLFFBQ3hCLFdBQVksRUFBZSxXQUMzQixXQUFZLEVBQWUsV0FDM0IsTUFBTyxFQUFlLE1BQ3RCLFNBQVUsRUFBZSxTQUN6QixZQUFhLEVBQWUsWUFDNUIscUJBQXNCLEVBQWUscUJBQ3JDLFlBQWEsRUFBZSxZQUM1QixxQkFBc0IsRUFBZSxxQkFDckMsY0FBZSxFQUFlLGNBQzlCLGVBQWdCLEVBQWUsZUFDL0Isc0JBQXVCLEVBQWUsc0JBQ3RDLHlCQUEwQixFQUFlLHlCQUN6QyxjQUNBLGFBQWMsR0FDZCxZQUFhLEVBQ2IsU0FDQSxXQUNBLG1CQUNBLG9CQUNBLHFCQUNBLGVBQ0EsZUFDQSxtQkFDQSxzQkFDQSxrQkFDQSxrQkFDQSxnQkFDQSxrQkFDQSxFQUFHLEVBQWUsRUFDbEIsYUFDQSxrQkFDQSw2QkFDQSx3QkFDQSxhQUNELEdBQ0EsQ0FDQyxFQUNBLEVBQ0EsR0FDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsR0FDQSxFQUNELENBQ0QsRUFFQSxPQUNDLEdBRUUsR0FBZ0IsU0FGbEIsQ0FBMEIsTUFBTyxHQUFqQyxTQUNFLEVBQ0EsdURDeE1KLElBQU0sR0FBNEIsSUFBTSxDQUN2QyxJQUFRLE9BQU0sZ0JBQWlCLEVBQXdCLEVBU3ZELE9BQ0MsR0FlRSxNQWZGLENBQUssVUFBVSw4QkFBOEIsY0FBWSxpQkFBekQsU0FlRSxDQWRELEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUV4QixHQVVFLEdBVkYsVUFDQyxHQVFFLEVBUkYsQ0FDQyxVQUFVLCtCQUNWLFVBQVUsYUFDVixjQUFlLEVBSGhCLFNBS0MsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBdUIsY0FBWSxnQkFBbEQsU0FqQlksQ0FDZixNQUFPLEdBQUMsR0FBRCxDQUFXLGFBQWMsR0FBa0IsT0FBUSxFQUMxRCxLQUFNLEdBQUMsR0FBRCxHQUFjLE1BQU8sRUFDM0IsSUFBSyxHQUFDLEdBQUQsR0FBYSxLQUFNLEVBQ3hCLEtBQU0sR0FBQyxHQUFELEdBQWMsTUFBTyxDQUM1QixFQWFjLEdBQ1IsRUFDRCxFQUNELEVBQ0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLEdBSUUsR0FBa0IsQ0FBQyxJQUFxRCxDQUM3RSxHQUFJLENBQUMsR0FBYyxFQUFXLFNBQVcsRUFBRyxPQUM1QyxPQUFPLElBQUksSUFBSSxFQUFXLElBQUksQ0FBQyxJQUFRLEdBQXFCLEVBQUksQ0FBQyxHQUdyRCxHQUE4QyxFQUMxRCxTQUNBLGlCQUFpQixTQUNqQixjQUFjLFFBQ2QsY0FDQSxlQUFlLEdBQ2YsZUFBZSxHQUNmLG1CQUFtQixHQUNuQixzQkFBc0IsR0FDdEIsYUFBYSxVQUNiLHVCQUF1QixHQUN2QixnQkFDRyxLQUNFLENBQ0wsT0FDQyxHQWVFLEdBZkYsQ0FDQyxhQUFjLEVBQ2QsYUFBYyxFQUNkLE9BQVEsR0FBdUQsQ0FBTSxFQUNyRSxlQUFnQixHQUFxQixHQUNyQyxXQUFZLEdBQWdCLENBQVUsRUFDdEMscUJBQXNCLEVBQ3RCLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixpQkFBa0IsRUFDbEIsV0FBWSxFQUNaLG9CQUFxQixLQUNqQixFQVpMLFNBY0MsR0FBQyxHQUFELEVBQWlCLEVBQ2hCLDRDQ3JFRyxJQUFNLEdBQXNELEVBQ2xFLE9BQ0EsV0FBVyxNQUNYLFdBQ0EsYUFDSyxDQUNMLElBQVEsdUJBQXdCLEVBQXdCLEVBRWxELEVBQW1CLEVBQW9CLEVBRXZDLEVBQVUsRUFBSyxJQUFJLENBQUMsSUFBUSxDQUNqQyxJQUFNLEVBQVUsTUFBTSxRQUFRLENBQUcsRUFDakMsTUFBTyxDQUNOLEdBQUksT0FBTyxFQUFVLEVBQUksSUFBSSxPQUFPLFlBQVksRUFBSSxFQUFJLFlBQVksSUFDcEUsSUFBSyxFQUFVLE9BQVksRUFDM0IsS0FBTSxFQUFVLEVBQU0sT0FDdEIsVUFBVyxHQUFTLEtBQ3BCLFVBQ0QsRUFDQSxFQUVLLEVBQU8sRUFBaUIsSUFBSSxDQUFDLEtBQWMsQ0FDaEQsR0FBSSxFQUFTLEdBQ2IsTUFBTyxFQUFTLE1BQ2hCLFNBQVUsRUFDVixTQUNELEVBQUUsRUFFRixPQUNDLEdBT0UsR0FQRixDQUNDLFFBQVMsRUFDVCxnQkFBaUIsRUFDakIsU0FBVSxFQUNWLEtBQU0sRUFKUCxTQU1FLEVBQ0EsdURDakRHLElBQU0sR0FBa0MsSUFBTSxDQUNwRCxJQUNDLGNBQ0EsSUFDQSxnQkFDQSxhQUNBLGdCQUNBLHVCQUNBLHVCQUNHLEVBQXdCLEVBRXRCLEVBQVksRUFBb0IsRUFHaEMsRUFBVyxHQUFhLENBQzdCLGNBQWUsRUFDZixnQkFDQSx1QkFDQSxTQUFVLENBQUMsQ0FBVyxFQUN0QixzQkFBdUIsRUFDckIsSUFBSSxDQUFDLElBQU0sRUFBRSxhQUFhLEVBQzFCLE9BQU8sT0FBTyxDQUNqQixDQUFDLEVBRUQsT0FDQyxHQXdDRSxHQXhDRixDQUNDLFFBQVMsQ0FDUixPQUFRLGFBQ1IsS0FBTSxhQUNOLEtBQU0saUJBQ1AsRUFDQSxLQUFNLEVBQ04sU0FBUyxPQVBWLFNBd0NFLENBL0JELEdBRUUsTUFGRixDQUFLLFVBQVUsa0hBQWYsU0FDQyxHQUEyQyxNQUEzQyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFFLFdBQVcsRUFBSSxFQUMxQyxFQUVGLEdBMEJFLE1BMUJGLENBQUssVUFBVSx1QkFBZixTQUVDLEdBdUJFLE1BdkJGLENBQUssVUFBVSxZQUFmLFNBQ0UsRUFBUyxJQUFJLENBQUMsRUFBSyxJQUFVLENBQzdCLElBQU0sRUFBWSxFQUFJLE9BQU8sRUFBTSxFQUFHLE1BQU0sRUFDdEMsRUFBTSx1QkFBdUIsRUFBSSxZQUFZLElBRW5ELE9BQ0MsR0FjRSxFQWRGLENBQ0MsVUFBVyxFQUNWLHNHQUNBLEdBQWEsc0NBQ2QsRUFDQSxjQUFhLDJCQUEyQixFQUFJLE9BQU8sSUFBSSxJQUN2RCxNQUFPLEVBQVEsS0FFZixjQUFlLEdBQUcsV0FSbkIsU0FVRSxLQUFLLGVBQWUsRUFBZSxDQUNuQyxLQUFNLFVBQ04sT0FBUSxJQUFlLFNBQ3hCLENBQUMsRUFBRSxPQUFPLEVBQUksT0FBTyxDQUFDLEdBTmpCLEdBQUcsWUFPUCxFQUVILEVBQ0EsRUFDRCxHQUNELHVEQ2pFRyxJQUFNLEdBQWdDLElBQU0sQ0FDbEQsSUFDQyxjQUNBLHNCQUNBLGdCQUNBLGFBQ0EsZ0JBQ0Esd0JBQ0csRUFBd0IsRUFFdEIsRUFBWSxFQUFvQixFQUNoQyxFQUFRLEdBQWEsQ0FDMUIsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FBQyxDQUFXLEVBQ3RCLHNCQUF1QixFQUNyQixJQUFJLENBQUMsSUFBTSxFQUFFLGFBQWEsRUFDMUIsT0FBTyxPQUFPLENBQ2pCLENBQUMsRUFFSyxFQUFXLENBQ2hCLEdBQUksV0FDSixJQUFLLE9BQ0wsS0FBTSxFQUNOLFVBQ0MsbUVBQ0QsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUtFLE1BTEYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0UsS0FBSyxlQUFlLEVBQWUsQ0FDbkMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN4QixDQUFDLEVBQUUsT0FBTyxFQUFLLE9BQU8sQ0FBQyxFQUN0QixDQUVKLEVBRU0sRUFBVSxFQUFVLElBQUksQ0FBQyxLQUFjLENBQzVDLEdBQUksV0FBVyxFQUFZLE9BQU8sWUFBWSxjQUFjLEVBQVMsS0FDckUsV0FBWSxFQUFTLEdBQ3JCLFdBQ0EsS0FBTSxFQUNOLElBQUssRUFDTCxTQUFVLE1BQ1gsRUFBRSxFQUVGLE9BQ0MsR0FtQ0UsR0FuQ0YsQ0FDQyxVQUNDLEdBV0UsTUFYRixDQUFLLFVBQVUsY0FBZixTQVdFLENBVkQsR0FBQyxHQUFELEVBQVksRUFDWCxFQUFVLElBQUksQ0FBQyxJQUNmLEdBQUMsR0FBRCxDQUNDLFFBQVMsQ0FBRSxLQUFNLFVBQVcsRUFDNUIsS0FBTSxDQUFDLENBQVcsRUFFbEIsU0FBVSxFQUNWLFdBQVksSUFGUCx1QkFBdUIsRUFBUyxJQUd0QyxDQUNBLEdBQ0EsRUFFSCxVQUFXLENBQUMsRUFBRyxHQUFJLEdBQUksRUFBRSxFQUN6QixRQUFTLENBQUUsS0FBTSxTQUFVLE9BQVEsUUFBUyxFQUM1QyxRQUFTLENBQUMsRUFBVSxHQUFHLENBQU8sRUFDOUIsY0FBWSxlQUNaLFNBQVMsT0FuQlYsU0FzQkMsR0FZRSxNQVpGLENBQ0MsVUFBVyw0QkFDWCxjQUFZLHdCQUZiLFNBWUUsQ0FSRCxHQUFDLE1BQUQsQ0FBSyxVQUFVLGdFQUFnRSxFQUM5RSxFQUFVLElBQUksQ0FBQyxJQUNmLEdBQUMsR0FBRCxDQUNDLFVBQVUsa0JBRVYsU0FBVSxHQURMLGlCQUFpQixFQUFTLElBRWhDLENBQ0EsR0FDQSxFQUNELDRDQ3hGRyxJQUFNLEdBQTRCLElBQU0sQ0FDOUMsSUFBUSxlQUFnQixFQUF3QixFQUVoRCxHQUFJLElBQWdCLFdBQ25CLE9BQU8sR0FBQyxHQUFELEVBQXFCLEVBRzdCLE9BQU8sR0FBQyxHQUFELEVBQXVCLEdDWC9CLGtCQUFTLG1FQU9GLElBQU0sR0FBb0MsSUFBTSxDQUN0RCxJQUFRLGNBQWEsS0FBTSxFQUF3QixFQUc3QyxFQUFZLEdBQXVCLElBQU0sQ0FDOUMsT0FBTyxHQUFhLENBQVcsR0FDN0IsQ0FBQyxDQUFXLENBQUMsRUFFaEIsT0FDQyxHQXNCRSxHQXRCRixDQUFtQixLQUFNLEVBQXpCLFNBc0JFLENBckJELEdBRUUsTUFGRixDQUFLLFVBQVUsa0hBQWYsU0FDQyxHQUEyQyxNQUEzQyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFFLFdBQVcsRUFBSSxFQUMxQyxFQUVELEVBQVUsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM5QixJQUFNLEVBQU0seUJBQXlCLEVBQUksWUFBWSxJQUVyRCxPQUNDLEdBVUUsRUFWRixDQUNDLFVBQVUsNEVBQ1YsTUFBTyxFQUFRLEtBRWYsY0FBZSxHQUFHLFdBSm5CLFNBVUUsQ0FKRCxHQUF3RCxNQUF4RCxDQUFLLFVBQVUsc0JBQWYsU0FBc0MsRUFBSSxPQUFPLEdBQUcsRUFBSSxFQUN4RCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBSSxPQUFPLEtBQUssRUFDaEIsSUFORyxHQUFHLFlBT1AsRUFFSCxHQUNBLHVEQ2pDRyxJQUFNLEdBQWtDLElBQU0sQ0FDcEQsSUFBUSxjQUFhLHVCQUF3QixFQUF3QixFQUUvRCxFQUFZLEVBQW9CLEVBQ2hDLEVBQWUsRUFBWSxRQUFRLE9BQU8sRUFDMUMsRUFBYyxNQUFNLEtBQ3pCLENBQUUsT0FBUSxFQUFZLFlBQVksQ0FBRSxFQUNwQyxDQUFDLEVBQUcsSUFBTSxFQUFhLElBQUksRUFBRyxLQUFLLENBQ3BDLEVBRU0sRUFBVyxDQUNoQixHQUFJLFdBQ0osS0FBTSxFQUNOLElBQUssT0FDTCxVQUNDLG1FQUNELFNBQVUsTUFDVixTQUFVLEdBQ1YsV0FBWSxDQUFDLElBQ1osR0FHRSxNQUhGLENBQUssVUFBVSx5RkFBZixTQUdFLENBRkQsR0FBMEIsT0FBMUIsVUFBTyxFQUFLLE9BQU8sR0FBRyxFQUFJLEVBQzFCLEdBQTRCLE9BQTVCLFVBQU8sRUFBSyxPQUFPLEtBQUssRUFBSSxHQUMzQixDQUVKLEVBRU0sRUFBVSxFQUFVLElBQUksQ0FBQyxLQUFjLENBQzVDLEdBQUksc0JBQXNCLEVBQVMsS0FDbkMsSUFBSyxPQUNMLFdBQVksRUFBUyxHQUNyQixLQUFNLEVBQ04sU0FBVSxLQUNYLEVBQUUsRUFFRixPQUNDLEdBbUJFLEdBbkJGLENBQ0MsUUFBUyxDQUFFLE9BQVEsU0FBVSxLQUFNLFFBQVMsRUFDNUMsUUFBUyxDQUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLGNBQVksK0JBSGIsU0FNQyxHQVlFLE1BWkYsQ0FDQyxVQUFXLDRCQUNYLGNBQVksd0JBRmIsU0FZRSxDQVJELEdBQUMsTUFBRCxDQUFLLFVBQVUsZ0VBQWdFLEVBQzlFLEVBQVUsSUFBSSxDQUFDLElBQ2YsR0FBQyxHQUFELENBQ0MsVUFBVSxrQkFFVixTQUFVLEdBREwsaUJBQWlCLEVBQVMsSUFFaEMsQ0FDQSxHQUNBLEVBQ0QsNENDdkRHLElBQU0sR0FBOEIsSUFBTSxDQUNoRCxJQUFRLGVBQWdCLEVBQXdCLEVBRWhELEdBQUksSUFBZ0IsV0FDbkIsT0FBTyxHQUFDLEdBQUQsRUFBdUIsRUFHL0IsT0FBTyxHQUFDLEdBQUQsRUFBeUIsR0NYakMsa0JBQVMsbUVBVUYsSUFBTSxHQUFtQyxJQUFNLENBQ3JELElBQ0MsY0FDQSxpQkFDQSxJQUNBLGdCQUNBLGFBQ0EsZ0JBQ0EsdUJBQ0EsdUJBQ0csRUFBd0IsRUFFdEIsRUFBWSxFQUFvQixFQUdoQyxFQUFXLEdBQ2hCLElBQU0sR0FBWSxFQUFhLENBQWMsRUFDN0MsQ0FBQyxFQUFhLENBQWMsQ0FDN0IsRUFHTSxFQUF3QixHQUM3QixJQUNDLEVBQVUsSUFBSSxDQUFDLElBQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxPQUFPLEVBSXJELENBQUMsQ0FBUyxDQUNYLEVBR00sRUFBWSxHQUFRLElBQU0sQ0FDL0IsT0FBTyxFQUFTLElBQUksQ0FBQyxJQUNwQixHQUFhLENBQ1osY0FBZSxFQUNmLGdCQUNBLHVCQUNBLHVCQUNELENBQUMsQ0FDRixHQUNFLENBQUMsRUFBVSxFQUFlLEVBQXNCLENBQXFCLENBQUMsRUFFekUsT0FDQyxHQW9FRSxHQXBFRixDQUNDLFFBQVMsQ0FDUixPQUFRLGtCQUNSLEtBQU0sYUFDTixLQUFNLGlCQUNQLEVBQ0EsS0FBTSxFQUNOLFNBQVMsT0FQVixTQW9FRSxDQTNERCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtIQUFmLFNBQ0MsR0FBMkMsTUFBM0MsQ0FBSyxVQUFVLFVBQWYsU0FBMEIsRUFBRSxXQUFXLEVBQUksRUFDMUMsRUFFRixHQXNERSxNQXRERixDQUFLLFVBQVUsdUJBQWYsU0FzREUsQ0FwREQsR0F5QkUsTUF6QkYsQ0FBSyxVQUFVLFlBQWYsU0FDRSxFQUFTLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDN0IsSUFBTSxFQUFVLEVBQUksT0FBTyxFQUFNLEVBQUcsS0FBSyxFQUNuQyxFQUFNLHdCQUF3QixFQUFJLFlBQVksUUFFcEQsT0FDQyxHQWdCRSxFQWhCRixDQUNDLFVBQVcsRUFDViw4RkFDQSxHQUFXLDBCQUNaLEVBQ0EsY0FBWSwyQkFDWixNQUFPLEVBQVEsS0FFZixjQUFlLEdBQUcsV0FSbkIsU0FVQyxHQUtFLE1BTEYsQ0FBSyxVQUFVLGtCQUFmLFNBS0UsQ0FKRCxHQUE4QyxNQUE5QyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFJLE9BQU8sS0FBSyxFQUFJLEVBQzlDLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFJLE9BQU8sS0FBSyxFQUNoQixHQUNELEdBUkcsR0FBRyxZQVNQLEVBRUgsRUFDQSxFQUdGLEdBdUJFLE1BdkJGLENBQUssVUFBVSxxQkFBZixTQUNFLEVBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDckMsSUFBTSxFQUFZLEVBQUksT0FBTyxFQUFNLEVBQUcsTUFBTSxFQUN0QyxFQUFNLHdCQUF3QixFQUFJLFlBQVksU0FFcEQsT0FDQyxHQWNFLEVBZEYsQ0FDQyxVQUFXLEVBQ1YsNkVBQ0EsR0FBYSxzQ0FDZCxFQUNBLGNBQWEsNEJBQTRCLEVBQUksT0FBTyxJQUFJLElBQ3hELE1BQU8sRUFBUSxNQUVmLGNBQWUsR0FBRyxXQVJuQixTQVVFLEtBQUssZUFBZSxFQUFlLENBQ25DLEtBQU0sVUFDTixPQUFRLElBQWUsU0FDeEIsQ0FBQyxFQUFFLE9BQU8sRUFBSSxPQUFPLENBQUMsR0FOakIsR0FBRyxZQU9QLEVBRUgsRUFDQSxHQUNELEdBQ0QsR0N6SEosa0JBQVMsbUVBYUYsSUFBTSxHQUFpQyxJQUFNLENBQ25ELElBQ0MsY0FDQSxzQkFDQSxpQkFDQSxnQkFDQSxhQUNBLElBQ0EsZ0JBQ0EsdUJBQ0EsY0FDRyxFQUF3QixFQUV0QixFQUFZLEVBQW9CLEVBRWhDLEVBQVcsR0FDaEIsSUFBTSxHQUFZLEVBQWEsQ0FBYyxFQUM3QyxDQUFDLEVBQWEsQ0FBYyxDQUM3QixFQUVNLEVBQWMsR0FDbkIsSUFDQyxFQUNHLEVBQVMsT0FBTyxDQUFDLElBQVEsQ0FBQyxFQUFXLElBQUksRUFBSSxJQUFJLENBQUMsQ0FBQyxFQUNuRCxFQUNKLENBQUMsRUFBVSxDQUFVLENBQ3RCLEVBRU0sRUFBUSxHQUNiLElBQ0MsR0FBYSxDQUNaLGNBQWUsRUFDZixnQkFDQSx1QkFDQSxTQUFVLEVBQ1Ysc0JBQXVCLEVBQ3JCLElBQUksQ0FBQyxJQUFNLEVBQUUsYUFBYSxFQUMxQixPQUFPLE9BQU8sQ0FDakIsQ0FBQyxFQUNGLENBQUMsRUFBYSxFQUFlLEVBQXNCLEVBQVUsQ0FBUyxDQUN2RSxFQUVNLEVBQVcsR0FDaEIsS0FBTyxDQUNOLEdBQUksV0FDSixLQUFNLEVBQ04sSUFBSyxPQUNMLFVBQ0MsbUVBQ0QsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUtFLE1BTEYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0UsS0FBSyxlQUFlLEVBQWUsQ0FDbkMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN4QixDQUFDLEVBQUUsT0FBTyxFQUFLLE9BQU8sQ0FBQyxFQUN0QixDQUVKLEdBQ0EsQ0FBQyxFQUFPLEVBQWUsQ0FBVSxDQUNsQyxFQUVNLEVBQVUsR0FDZixJQUNDLEVBQVUsUUFBUSxDQUFDLElBQ2xCLEVBQVksSUFBSSxDQUFDLEtBQVMsQ0FDekIsR0FBSSxXQUFXLEVBQUksT0FBTyxZQUFZLGNBQWMsRUFBUyxLQUM3RCxXQUFZLEVBQVMsR0FDckIsV0FDQSxNQUNBLEtBQU0sR0FBYSxDQUNsQixjQUFlLEVBQ2YsZ0JBQ0EsdUJBQ0EsU0FBVSxFQUNWLHNCQUF1QixFQUNyQixJQUFJLENBQUMsSUFBTSxFQUFFLGFBQWEsRUFDMUIsT0FBTyxPQUFPLENBQ2pCLENBQUMsRUFDRCxTQUFVLE1BQ1gsRUFBRSxDQUNILEVBQ0QsQ0FBQyxFQUFXLEVBQVUsRUFBZSxFQUFzQixFQUFZLEdBQUcsQ0FDM0UsRUFFQSxPQUNDLEdBc0ZFLEdBdEZGLENBQ0MsVUFDQyxHQVdFLE1BWEYsQ0FBSyxVQUFVLE9BQWYsU0FXRSxDQVZELEdBQUMsR0FBRCxFQUFZLEVBQ1gsRUFBVSxJQUFJLENBQUMsSUFDZixHQUFDLEdBQUQsQ0FDQyxRQUFTLENBQUUsS0FBTSxVQUFXLEVBQzVCLEtBQU0sRUFFTixTQUFVLEVBQ1YsV0FBWSxJQUZQLDRCQUE0QixFQUFTLElBRzNDLENBQ0EsR0FDQSxFQUVILFFBQVMsQ0FBRSxPQUFRLE1BQU8sRUFDMUIsUUFBUyxDQUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLGNBQVksZ0JBQ1osU0FBUyxPQWxCVixTQW9CQyxHQWlFRSxNQWpFRixDQUFLLFVBQVUsdUJBQWYsU0FpRUUsQ0EvREQsR0FnQ0UsTUFoQ0YsQ0FBSyxVQUFVLFlBQWYsU0FnQ0UsQ0EvQkQsR0FJRSxNQUpGLENBQUssVUFBVSwwREFBZixTQUNDLEdBRUUsT0FGRixDQUFNLFVBQVUsaUZBQWhCLFNBQ0UsRUFBRSxNQUFNLEVBQ1IsRUFDRCxFQUNELEVBQVUsSUFBSSxDQUFDLEVBQVUsSUFBVSxDQUNuQyxJQUFNLEVBQU0sd0JBQXdCLEVBQVMsU0FFN0MsT0FDQyxHQW1CRSxFQW5CRixDQUNDLFVBQVcsRUFDVixzRkFDRCxFQUNBLE1BQU8sRUFBUSxLQUVmLE1BQU8sQ0FDTixNQUFPLFFBQVEsRUFBWSwrQkFDNUIsRUFDQSxjQUFlLEdBQUcsV0FUbkIsU0FXQyxHQU9FLEdBUEYsQ0FDQyxVQUFVLHVCQUNWLFNBQVUsRUFGWCxTQUlDLEdBRUUsTUFGRixDQUFLLFVBQVUsK0NBQWYsU0FDRSxFQUFTLE1BQ1QsRUFDRCxHQWJHLEdBQUcsWUFjUCxFQUVILEdBQ0EsRUFHRixHQTJCRSxNQTNCRixDQUFLLFVBQVUsWUFBZixTQTJCRSxDQTFCRCxHQUlFLE1BSkYsQ0FBSyxVQUFVLG1FQUFmLFNBQ0MsR0FFRSxPQUZGLENBQU0sVUFBVSxpRUFBaEIsU0FDRSxFQUFZLEtBQUssRUFDakIsRUFDRCxFQUNELEVBQVEsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM1QixJQUFNLEVBQU0sRUFBSSxJQUNWLEVBQU0sd0JBQXdCLEVBQUksWUFBWSxVQUFVLEVBQUksYUFFbEUsT0FDQyxHQWFFLEVBYkYsQ0FDQyxVQUFXLEVBQ1YsaUhBQ0QsRUFDQSxjQUFhLDRCQUE0QixFQUFJLE9BQU8sSUFBSSxJQUN4RCxNQUFPLEVBQVEsS0FFZixjQUFlLEdBQUcsV0FQbkIsU0FhRSxDQUpELEdBQThDLE1BQTlDLENBQUssVUFBVSxVQUFmLFNBQTBCLEVBQUksT0FBTyxLQUFLLEVBQUksRUFDOUMsR0FFRSxNQUZGLENBQUssVUFBVSxnQ0FBZixTQUNFLEVBQUksT0FBTyxLQUFLLEVBQ2hCLElBTkcsR0FBRyxZQU9QLEVBRUgsR0FDQSxHQUNELEVBQ0QsNENDdExHLElBQU0sR0FBNkIsSUFBTSxDQUMvQyxJQUFRLGVBQWdCLEVBQXdCLEVBRWhELEdBQUksSUFBZ0IsV0FDbkIsT0FBTyxHQUFDLEdBQUQsRUFBc0IsRUFHOUIsT0FBTyxHQUFDLEdBQUQsRUFBd0IsdURDRnpCLElBQU0sR0FBaUMsSUFBTSxDQUNuRCxJQUFRLFFBQVMsRUFBd0IsRUFRekMsT0FDQyxHQXFCRSxNQXJCRixDQUNDLFVBQVUsOEJBQ1YsY0FBWSwwQkFGYixTQXFCRSxDQWpCRCxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFHeEIsR0FVRSxHQVZGLFVBQ0MsR0FRRSxFQVJGLENBQ0MsVUFBVSx3REFDVixVQUFVLGFBQ1YsY0FBZSxFQUhoQixTQUtDLEdBRUUsTUFGRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksZ0JBQWxELFNBcEJZLENBQ2YsTUFBTyxHQUFDLEdBQUQsR0FBdUIsT0FBUSxFQUN0QyxLQUFNLEdBQUMsR0FBRCxHQUFzQixNQUFPLEVBQ25DLElBQUssR0FBQyxHQUFELEdBQXFCLEtBQU0sQ0FDakMsRUFpQmMsR0FDUixFQUNELEVBQ0QsRUFHRixHQUFDLEdBQUQsRUFBaUIsR0FDaEIsNENDMUJKLElBQU0sR0FBa0IsQ0FBQyxJQUFxRCxDQUM3RSxHQUFJLENBQUMsR0FBYyxFQUFXLFNBQVcsRUFBRyxPQUM1QyxPQUFPLElBQUksSUFBSSxFQUFXLElBQUksQ0FBQyxJQUFRLEdBQXFCLEVBQUksQ0FBQyxHQUdyRCxHQUE4RCxFQUMxRSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EscUJBQXFCLEdBQ3JCLGVBQWUsR0FDZixhQUFhLFVBQ2IsZUFBZSxHQUNmLGdCQUNHLEtBQ0UsQ0FDTCxPQUNDLEdBZ0JFLEdBaEJGLENBQ0MsYUFBYyxFQUNkLG1CQUFvQixFQUNwQixhQUFjLEVBQ2QsT0FBUSxHQUNQLENBQ0QsRUFDQSxlQUFnQixHQUFxQixHQUNyQyxXQUFZLEdBQWdCLENBQVUsRUFDdEMsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLFVBQVcsRUFDWCxXQUFZLEtBQ1IsRUFiTCxTQWVDLEdBQUMsR0FBRCxFQUFzQixFQUNyQiIsCiAgImRlYnVnSWQiOiAiMDlBMEE3RThERTlBRTkyNDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|