@spinnaker/core 0.16.0 β 0.16.1
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/CHANGELOG.md +11 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/pipeline/details/StageFailureMessage.tsx +25 -10
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import*as e from"angular";import t,{module as n,element as a,noop as i,copy as r,toJson as s,isDefined as o}from"angular";import*as l from"lodash";import c,{cloneDeep as p,merge as d,isNil as u,get as m,set as g,intersection as h,uniq as f,zipObject as v,chain as A,isEqual as E,padStart as b,isNumber as y,isString as w,isPlainObject as x,isArray as C,isNull as k,isUndefined as B,forIn as S,without as M,startCase as N,isBoolean as D,values as I,map as F,flatten as T,xor as Q,isFunction as P,truncate as R,defaults as U,toPath as z,throttle as G,isObject as j,findLast as L,maxBy as O,sortBy as Y,has as H,find as V,cloneDeepWith as J,pick as W,size as K,some as q,reduce as X,includes as Z,forOwn as ee,pickBy as te,filter as ne,identity as ae,groupBy as ie,isEmpty as re,every as se,each as oe,extend as le,compact as ce,noop as pe,head as de,partition as ue,memoize as me,fromPairs as ge,omit as he,omitBy as fe,isDate as ve,uniqBy as Ae,kebabCase as Ee,union as be,keyBy as ye,flatMap as we,debounce as xe,reverse as Ce,orderBy as ke,toNumber as Be,keys as Se,unset as Me,capitalize as Ne,flow as De,clone as Ie,bindAll as Fe,template as Te,trim as Qe,join as Pe,last as Re,max as Ue,sumBy as ze,sum as Ge,assign as je,toPairs as Le,defaultsDeep as Oe,upperFirst as Ye,forEach as $e,first as He,countBy as Ve,range as Je}from"lodash";import{$http as We,$location as Ke,$rootScope as qe,$log as Xe,$q as Ze,$timeout as _e,$templateRequest as et,$compile as tt,$controller as nt,$window as at,$interpolate as it,$templateCache as rt}from"ngimport";import*as st from"react";import ot,{useEffect as lt,useRef as ct,useMemo as pt,useState as dt,useCallback as ut,memo as mt}from"react";import*as gt from"rxjs";import{fromEvent as ht,defer as ft,from as vt,Subject as At,of as Et,merge as bt,timer as yt,BehaviorSubject as wt,empty as xt,ReplaySubject as Ct,combineLatest as kt,forkJoin as Bt}from"rxjs";import{map as St,publishReplay as Mt,refCount as Nt,switchMap as Dt,takeUntil as It,delay as Ft,filter as Tt,debounceTime as Qt,tap as Pt,mergeMap as Rt,catchError as Ut,finalize as zt,toArray as Gt,skip as jt,take as Lt,startWith as Ot,withLatestFrom as Yt,distinctUntilChanged as $t,merge as Ht,first as Vt,bufferCount as Jt,concatMap as Wt,scan as Kt}from"rxjs/operators";import{Modal as qt,OverlayTrigger as Xt,Tooltip as Zt,Overlay as _t,Popover as en,Dropdown as tn,Glyphicon as nn,MenuItem as an,Button as rn,Pagination as sn}from"react-bootstrap";import*as on from"react-dom";import ln from"react-dom";import cn,{Creatable as pn}from"react-select";import dn from"react-virtualized-select";import un from"memoize-one";import mn from"react-tether";import gn from"diff-match-patch";import hn from"jquery";import{formatDistanceToNow as fn,formatDistance as vn,format as An}from"date-fns";import{DateTime as En,Duration as bn}from"luxon";import{react2angular as yn}from"react2angular";import wn from"classnames";import{Parser as xn,HtmlRenderer as Cn}from"commonmark";import kn from"dompurify";import{Icon as Bn,Illustration as Sn}from"@spinnaker/presentation";export{Icon,Illustration}from"@spinnaker/presentation";import{CacheFactory as Mn}from"cachefactory";import*as Nn from"@uirouter/react";import{UISref as Dn,useSref as In,useIsActive as Fn,useCurrentStateAndParams as Tn,UIView as Qn,useSrefActive as Pn,useRouter as Rn,useParentView as Un,UISrefActive as zn,useOnStateChanged as Gn}from"@uirouter/react";import{connect as jn,Formik as Ln,FormikConsumer as On,FastField as Yn,Field as $n,getIn as Hn,Form as Vn,FieldArray as Jn}from"formik";import Wn from"root/version.json";import{toast as Kn,ToastContainer as qn}from"react-toastify";import{SpelExpressionEvaluator as Xn}from"spel2js";import Zn from"react-day-picker/DayPickerInput";import"react-day-picker/lib/style.css";import _n from"react-ace";import"brace/mode/json";import"brace/ext/searchbox";import{CSSTransition as ea}from"react-transition-group";import{UIRouterContextComponent as ta,UIRouterContext as na,UI_ROUTER_REACT_HYBRID as aa}from"@uirouter/react-hybrid";import{dump as ia,loadAll as ra,YAMLException as sa,load as oa}from"js-yaml";import{angular2react as la}from"angular2react";import"jquery-textcomplete";import ca from"@uirouter/angularjs";import{hri as pa}from"human-readable-ids";import{Debounce as da,Throttle as ua}from"lodash-decorators";import*as ma from"@apollo/client";import{ApolloClient as ga,InMemoryCache as ha,HttpLink as fa,ApolloProvider as va,gql as Aa,useApolloClient as Ea}from"@apollo/client";import{atom as ba,useRecoilValue as ya,useRecoilState as wa,RecoilRoot as xa}from"recoil";import Ca from"lodash/isEqual";import ka from"react-content-loader";import Ba from"ansi_up";import*as Sa from"@uirouter/core";import{RejectType as Ma,Category as Na,Glob as Da}from"@uirouter/core";import{SortableHandle as Ia,arrayMove as Fa,SortableElement as Ta,SortableContainer as Qa}from"react-sortable-hoc";import*as Pa from"@uirouter/rx";import{UIRouterRxPlugin as Ra}from"@uirouter/rx";import*as Ua from"prop-types";import"brace/mode/yaml";import"brace/theme/textmate";import"bootstrap/dist/css/bootstrap.css";import"bootstrap/dist/js/bootstrap";import"@fortawesome/fontawesome-free/css/solid.css";import"@fortawesome/fontawesome-free/css/regular.css";import"@fortawesome/fontawesome-free/css/fontawesome.css";import"react-select/dist/react-select.css";import"react-virtualized/styles.css";import"react-virtualized-select/styles.css";import"ui-select/dist/select.css";import"@spinnaker/styleguide/public/styleguide.min.css";import"select2/select2.css";import"select2-bootstrap-css/select2-bootstrap.css";import"source-sans/source-sans-3.css";import"@uirouter/angularjs/release/stateEvents";import za from"angulartics";import Ga from"angulartics-google-analytics";import"react-toastify/dist/ReactToastify.min.css";import{createUltimatePagination as ja,ITEM_TYPES as La}from"react-ultimate-pagination";import Oa from"angular-ui-bootstrap";import{CellMeasurer as Ya,CellMeasurerCache as $a,AutoSizer as Ha,List as Va,SortDirection as Ja,Table as Wa,Column as Ka}from"react-virtualized";import qa from"js-worker-search";import"angular-ui-sortable";import Xa from"react-ga";import Za from"ui-select";import _a from"angular-messages";import ei from"angular-sanitize";import{angularSpinner as ti}from"angular-spinner";var ni=Object.freeze({__proto__:null,get AccountSelectInput(){return _r},get AccountService(){return Di},get AccountTag(){return ts},get InvalidAPIResponse(){return Ei},get RequestBuilder(){return wi},get DeprecatedRequestBuilder(){return xi},get invalidContentMessage(){return Ci},get makeRequestBuilderConfig(){return ki},get API(){return Bi},get REST(){return Si},get ApplicationContext(){return ns},get ApplicationContextProvider(){return as},get ApplicationIcon(){return Cs},get Application(){return Fh},get ApplicationStateProvider(){return Df},get APPLICATION_STATE_PROVIDER(){return If},get ApplicationModelBuilder(){return Mf},get ConfigSectionFooter(){return Ff},get ConfigSectionFooterController(){return Qf},get CONFIG_SECTION_FOOTER(){return Rf},get AppListExtractor(){return zf},get PlatformHealthOverride(){return Bc},get PlatformHealthOverrideInput(){return Sc},get ApplicationNameValidator(){return Gf},get INFRASTRUCTURE_KEY(){return jf},get DELIVERY_KEY(){return Lf},get verticalNavExpandedAtom(){return uf},get NavigationCategoryRegistry(){return ff},get navigationCategoryRegistry(){return vf},get ApplicationDataSourceRegistry(){return Yg},get ApplicationReader(){return Hg},get ApplicationWriter(){return Tf},get ApplicationDataSource(){return Ih},get ArtifactIconService(){return im},get ArtifactReferenceService(){return rm},get EXECUTION_ARTIFACT_TAB(){return lm},get ExpectedArtifactService(){return cm},get IMAGE_SOURCE_SELECTOR_COMPONENT(){return dm},get ExecutionArtifactTab(){return om},get ArtifactIconList(){return sm},get ArtifactTypePatterns(){return fp},get excludeAllTypesExcept(){return vp},get ExpectedArtifactSelectorViewController(){return um},get defaultExcludedArtifactTypes(){return gm},get NgGenericArtifactDelegate(){return hm},get NgGCEImageArtifactDelegate(){return vm},get NgAppEngineDeployArtifactDelegate(){return Am},get NgBakeManifestArtifactDelegate(){return Em},get NgAppengineConfigArtifactDelegate(){return bm},get ArtifactAccountSelector(){return wm},get ARTIFACT_ACCOUNT_SELECTOR_COMPONENT_REACT(){return xm},get ArtifactIcon(){return ym},get ExpectedArtifactSelector(){return Sm},get EXPECTED_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Mm},get ExpectedArtifactEditor(){return Nm},get EXPECTED_ARTIFACT_EDITOR_COMPONENT_REACT(){return Dm},get ExpectedArtifactSourceSelector(){return km},get EXPECTED_ARTIFACT_SOURCE_SELECTOR_COMPONENT_REACT(){return Bm},get ExpectedArtifactModal(){return Tm},get StageArtifactSelector(){return Qm},get STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Pm},get StageArtifactSelectorDelegate(){return Rm},get AuthenticationService(){return ri},get AuthenticationInitializer(){return Ai},get UserMenu(){return Of},get BannerContainer(){return Vf},get BannerContainerContent(){return Jf},get CacheInitializerService(){return Ad},get CACHE_INITIALIZER_SERVICE(){return Ed},get CollapsibleSectionStateCacheInternal(){return Bs},get CollapsibleSectionStateCache(){return Ss},get DeckCacheFactory(){return Hp},get InfrastructureCachesInternal(){return ld},get InfrastructureCaches(){return cd},get INFRASTRUCTURE_CACHE_CONFIG(){return sd},get ViewStateCacheInternal(){return Wp},get ViewStateCache(){return Kp},get CertificateReader(){return Wf},get BuildServiceType(){return Lu},get IgorService(){return Yu},get CloudProviderRegistry(){return Ni},get ProviderSelectionService(){return pp},get CloudProviderLabel(){return dp},get CloudProviderLogo(){return up},get ProviderServiceDelegate(){return mp},get PROVIDER_SERVICE_DELEGATE(){return gp},get ClusterPodTitleWrapper(){return oy},get DefaultClusterMatcher(){return ly},get ClusterMatcher(){return cy},get ClusterService(){return vy},get CLUSTER_SERVICE(){return Ay},get TaskMatcher(){return py},get taskMatcher(){return fy},get ClusterFilterService(){return Nd},get FilterSearch(){return Ey},get FilterSection(){return by},get SETTINGS(){return di},get VersionChecker(){return to},get ConfirmationModalService(){return op},get CoreRedBlackAdditionalFields(){return Cy},get DeploymentStrategySelector(){return xy},get DeploymentStrategyRegistrar(){return yy},get DeploymentStrategyRegistry(){return wy},get Key(){return Jg},get ManagedResourceStatus(){return Zf},get AddEntityTagLinks(){return ky},get EntitySource(){return Sy},get EntityTagEditor(){return of},get ClusterTargetBuilder(){return My},get EntityTagsReader(){return pd},get EntityTagWriter(){return rf},get CategorizedNotifications(){return af},get EntityName(){return Kh},get GroupedNotificationList(){return qh},get NotificationCategory(){return Zh},get NotificationList(){return _h},get NotificationCategories(){return nf},get ExecutionMarkerIcon(){return Rp},get EntityNotifications(){return qf},get VIEW_CHANGES_LINK(){return Py},get ViewChangesLink(){return Qy},get DIFF_MODULE(){return Ry},get EventBus(){return yp},get FilterModelService(){return ad},get FilterCheckbox(){return id},get FilterCollapse(){return rd},get FilterTags(){return bd},get digestDependentFilters(){return wd},get MapEditor(){return zy},get MapEditorInput(){return jy},get MapPair(){return Uy},get NumberList(){return Oy},get HealthCounts(){return Og},get HelpField(){return Zs},get HelpMenu(){return so},get HelpTextExpandedContext(){return Hs},get HelpContentsRegistry(){return Ws},get RecentHistoryService(){return Ag},get RECENT_HISTORY_SERVICE(){return Eg},get ImageReader(){return Yy},get IMAGE_READER(){return $y},get InstanceReader(){return Hy},get ConsoleOutputLink(){return Jy},get InstanceActions(){return Wy},get InstanceDetails(){return Zy},get InstanceDetailsCmp(){return _y},get InstanceDetailsHeader(){return ew},get InstanceDetailsPane(){return Ky},get InstanceInsights(){return tw},get InstanceLinks(){return nw},get InstanceWriter(){return iw},get InstanceTypeService(){return rw},get INSTANCE_TYPE_SERVICE(){return sw},get InstanceLoadBalancerHealth(){return ow},get LoadBalancerDataUtils(){return lw},get LoadBalancerReader(){return cw},get LOAD_BALANCER_READ_SERVICE(){return pw},get LoadBalancerWriter(){return dw},get CreateLoadBalancerButton(){return uw},get LoadBalancerClusterContainer(){return Aw},get LoadBalancerInstances(){return fw},get LoadBalancerServerGroup(){return vw},get LoadBalancersTagWrapper(){return ww},get FunctionDetails(){return kw},get FunctionReader(){return Bw},get FUNCTION_READ_SERVICE(){return Sw},get FunctionWriter(){return Mw},get CreateFunctionButton(){return Nw},get V2_MODAL_WIZARD_COMPONENT(){return Hc},get V2ModalWizard(){return Yc},get ModalClose(){return Mc},get SubmitButton(){return Nc},get ModalWizard(){return Dc},get WizardModal(){return jc},get WizardPage(){return Ic},get WizardStepLabel(){return Fc},get DeployingIntoManagedClusterWarning(){return ov},get ManagedMenuItem(){return lv},get addManagedResourceMetadataToServerGroups(){return vv},get addManagedResourceMetadataToLoadBalancers(){return Av},get addManagedResourceMetadataToSecurityGroups(){return Ev},get ManagedResourceDetailsIndicator(){return Gv},get MANAGED_RESOURCE_DETAILS_INDICATOR(){return jv},get ManagedResourceStatusIndicator(){return Hv},get confirmNotManaged(){return av},get toggleResourcePause(){return iv},get MANAGED_RESOURCES_DATA_SOURCE(){return Vv},get CORE_MANAGED_MANAGED_MODULE(){return iy},get getKindName(){return uv},get getResourceKindForLoadBalancerType(){return mv},get ManagedReader(){return gv},get ManagedWriter(){return Xf},get registerManagedDeliveryPlugin(){return ry},get resourceManager(){return pv},get ManifestWriter(){return Dw},get ManifestReader(){return Iw},get JobStageExecutionLogs(){return Tw},get JobManifestPodLogs(){return Fw},get ManifestYaml(){return Qw},get DefaultPodNameProvider(){return Pw},get JobEventBasedPodNameProvider(){return Rw},get NameUtils(){return ud},get StateConfigProvider(){return Mg},get trueKeyObjectParamType(){return Ng},get inverseBooleanParamType(){return Dg},get booleanParamType(){return Ig},get sortKeyParamType(){return Fg},get STATE_CONFIG_PROVIDER(){return Tg},get UrlBuilderRegistry(){return lp},get UrlBuilder(){return Pg},get UrlParser(){return Rg},get NetworkReader(){return Uw},get NotificationDetails(){return Vw},get EditNotificationModal(){return Jw},get NotificationTransformer(){return Lw},get NotificationSelector(){return Ow},get NOTIFICATION_LIST(){return qw},get NotificationsList(){return Kw},get OrchestratedItemTransformer(){return Jc},get OverrideRegistry(){return $h},get OVERRIDE_REGISTRY(){return Hh},get Overridable(){return bs},get overridableComponent(){return ys},get RegistrationQueue(){return jh},get overrideRegistrationQueue(){return Lh},get Overrides(){return Oh},get overridesComponent(){return Yh},get PageTitleService(){return Xw},get PAGE_TITLE_SERVICE(){return Zw},get PagerDutyReader(){return Af},get PagerDutyWriter(){return Ef},get PagerDutyTagComponentController(){return bf},get PAGER_DUTY_TAG_COMPONENT(){return wf},get PagerDutySelectFieldController(){return xf},get PAGER_DUTY_SELECT_FIELD_COMPONENT(){return kf},get PipelineRegistry(){return Gm},get PipelineConfigService(){return nd},get FormikStageConfig(){return ex},get BakeExecutionLabel(){return tx},get BakeryReader(){return nx},get AsgActionExecutionDetailsSection(){return Bp},get ExecutionDetailsSection(){return Ep},get ExecutionBarLabel(){return Ip},get ExecutionDetailsTasks(){return Pp},get StageConfigField(){return Up},get applySuspendedStatuses(){return zp},get ExecutionStepDetails(){return Qp},get PipelineStageExecutionDetails(){return lx},get TitusExecutionLogs(){return cx},get PreconfiguredJobExecutionDetails(){return px},get PreconfiguredJobStageConfig(){return dx},get PreconfiguredJobReader(){return hp},get makePreconfiguredJobStage(){return ux},get PRECONFIGUREDJOB_STAGE(){return mx},get StageConstants(){return hx},get PipelineTemplates(){return fx},get PipelineTemplateV2Service(){return td},get PipelineTemplateReader(){return vx},get RunAsUserInput(){return Ex},get Triggers(){return $x},get BaseBuildTriggerTemplate(){return Vx},get PipelineConfigValidator(){return Lx},get CreatePipelineModal(){return Zx},get ExecutionDetailsSectionService(){return ax},get EXECUTION_DETAILS_SECTION_SERVICE(){return ix},get ExecutionDetailsSectionNav(){return rx},get StageExecutionLogs(){return bp},get StageFailureMessages(){return wp},get StageFailureMessage(){return kp},get StageSummary(){return ox},get Execution(){return IC},get filterModelConfig(){return Ld},get ExecutionFilterModel(){return Od},get ManualExecutionModal(){return YC},get TriggerTemplate(){return zC},get ExecutionsTransformer(){return Op},get ExecutionService(){return nu},get EXECUTION_SERVICE(){return au},get ArtifactList(){return LC},get registerPluginExtensions(){return $C},get PLUGINS_MODULE(){return JC},get PluginRegistry(){return HC},get Icon(){return Bn},get Illustration(){return Sn},get CollapsibleElement(){return ks},get CollapsibleSection(){return Ns},get CustomLabels(){return Ds},get Details(){return Ts},get SpInput(){return Ps},get spelNumberCheck(){return Rs},get FormikForm(){return Us},get SpinFormik(){return zs},get FormField(){return Nl},get FormikExpressionField(){return Il},get FormikExpressionRegexField(){return Fl},get createFieldValidator(){return xl},get FormikFormField(){return Cl},get renderContent(){return po},get useSaveRestoreMutuallyExclusiveFields(){return Tl},get useFormInputValueMapper(){return Ql},get CheckboxInput(){return xo},get ChecklistInput(){return ko},get DayPickerInput(){return Bo},get JsonEditor(){return So},get NumberInput(){return Io},get RadioButtonInput(){return Fo},get reactSelectValidationErrorStyle(){return Vr},get reactSelectOnChangeAdapter(){return Jr},get reactSelectOnBlurAdapter(){return Wr},get ReactSelectInput(){return Kr},get SelectInput(){return Xr},get StringsAsOptions(){return Fi},get TextAreaInput(){return Qo},get TextInput(){return mo},get ExpressionError(){return uo},get ExpressionInput(){return Eo},get ExpressionPreview(){return bo},get evaluateExpression(){return Ao},get parseSpelExpressions(){return vo},get useInternalValidator(){return No},get orEmptyString(){return gr},get validationClassName(){return hr},get createFakeReactSyntheticEvent(){return fr},get isStringArray(){return vr},get StandardFieldLayout(){return Ls},get LayoutContext(){return Os},get LayoutProvider(){return Ys},get LayoutConsumer(){return $s},get ResponsiveFieldLayout(){return co},get FormValidator(){return kr},get FormValidatorField(){return Ar},get ValidationMessage(){return Dr},get categoryLabels(){return Ir},get asyncMessage(){return Rr},get errorMessage(){return Ur},get infoMessage(){return zr},get messageMessage(){return Gr},get successMessage(){return jr},get warningMessage(){return Lr},get categorizeValidationMessage(){return Yr},get categorizeValidationMessages(){return $r},get useValidationData(){return Hr},get FORM_VALIDATION_VALIDATABLE_FIELD_IS_VALID_SHORT_CIRCUIT(){return Er},get composeValidators(){return br},get Validators(){return Cr},get useApplicationContext(){return Po},get useApplicationContextSafe(){return Ro},get useContainerClassNames(){return Yo},get useData(){return Vo},get useDataSource(){return Zo},get useDebouncedValue(){return _o},get useDeepObjectDiff(){return tl},get useEscapeKeyPressed(){return il},get useEventListener(){return al},get useForceUpdate(){return rl},get useInterval(){return sl},get useIsMobile(){return ll},get useIsMountedRef(){return Mo},get useLatestCallback(){return Ko},get useLatestPromise(){return Ho},get useMountStatusRef(){return js},get useObservable(){return qo},get useObservableValue(){return Xo},get usePollingData(){return cl},get usePrevious(){return Go},get HoverablePopover(){return Ks},get LabelComponent(){return Pl},get LabeledValue(){return Rl},get LabeledValueList(){return Ul},get LinkWithClipboard(){return zl},get LINK_WITH_CLIPBOARD(){return Ol},get Markdown(){return Br},get toMarkdown(){return Sr},get Modal(){return Hl},get ModalHeader(){return Jl},get ModalBody(){return Wl},get ModalFooter(){return Kl},get showModal(){return ql},get PageNavigator(){return Xl},get PageSection(){return Zl},get ReactModal(){return si},get RenderOutputFile(){return _l},get robotToHuman(){return yr},get robotToHumanFilter(){return wr},get ROBOT_TO_HUMAN_FILTER(){return xr},get SortToggle(){return ec},get SpanDropdownTrigger(){return tc},get SpelInput(){return pl},get SimpleSpelInput(){return dl},get SpelService(){return yo},get FormikSpelContext(){return ul},get FormikSpelContextProvider(){return ml},get SpelAwareInputMode(){return gl},get SpelToggle(){return fl},get withErrorBoundary(){return Gl},get SpinErrorBoundary(){return jl},get UI_ROUTER_REACT_ERROR_BOUNDARY(){return Ll},get TabBoundary(){return $l},get Table(){return rc},get TableRow(){return cc},get TableCell(){return dc},get minimalNativeTableLayout(){return uc},get getGridColumnsStyle(){return mc},get standardGridTableLayout(){return vc},get TetheredCreatable(){return Ac},get TetheredSelect(){return Ti},get BreakString(){return Ec},get SingleLineString(){return bc},get ToggleSize(){return yc},get ToggleButtonGroup(){return xc},get Tooltip(){return Qs},get WatchValue(){return Gs},get IconTooltip(){return Cc},get Applications(){return WC},get Clusters(){return KC},get ConfigureProjectModal(){return nk},get Pipelines(){return XC},get ProjectAttributes(){return ZC},get ProjectHeader(){return rk},get ProjectReader(){return _C},get ProjectWriter(){return ek},get PubsubSubscriptionReader(){return sk},get AngularJSAdapter(){return is},get CoreModalInject(){return fi},get ModalInjector(){return vi},get NgReactInjector(){return Zm},get NgReact(){return _m},get ReactInject(){return mi},get CoreReactInject(){return gi},get ReactInjector(){return hi},get REACT_MODULE(){return ng},get StateEvents(){return eg},get STATE_EVENTS(){return tg},get arePropsEqual(){return ag},get RegionSelectField(){return lk},get RegionSelectInput(){return ok},get Registry(){return Om},get RetryService(){return ck},get SchedulerFactory(){return _s},get GlobalSearch(){return kg},get InfrastructureSearcher(){return xh},get InfrastructureSearchService(){return Ch},get INFRASTRUCTURE_SEARCH_SERVICE(){return kh},get SearchService(){return md},get SearchTableHeader(){return nh},get SearchTableRow(){return ah},get SearchTableBody(){return ih},get HeaderCell(){return sh},get BasicCell(){return oh},get HrefCell(){return lh},get AccountCell(){return ch},get HealthCountsCell(){return ph},get DefaultSearchResultTab(){return dh},get SearchResultType(){return uh},get SearchResultTypeRegistry(){return Gg},get searchResultTypeRegistry(){return jg},get SearchResults(){return wh},get SearchStatus(){return Ug},get Filter(){return Bh},get Filters(){return Sh},get Search(){return Dh},get FilterTypeRegistry(){return Mh},get SearchFilterTypeRegistry(){return Nh},get SecurityGroupWriter(){return ig},get FirewallLabels(){return Vs},get SecurityGroupReader(){return fd},get SECURITY_GROUP_READER(){return vd},get ServerGroup(){return Sk},get LoadBalancers(){return fk},get MultiSelectCheckbox(){return vk},get CloudProviderIcon(){return Ak},get ImageList(){return Ek},get SequenceAndBuildAndImages(){return bk},get Alerts(){return yk},get Health(){return wk},get RunningTasks(){return xk},get ServerGroupHeader(){return Ck},get DeployInitializer(){return Mk},get DeployInitializerController(){return Nk},get DEPLOY_INITIALIZER_COMPONENT(){return Ik},get setMatchingResourceSummary(){return Fk},get ServerGroupCommandBuilderService(){return Tk},get SERVER_GROUP_COMMAND_BUILDER_SERVICE(){return Qk},get ServerGroupCommandRegistry(){return Pk},get SERVER_GROUP_COMMAND_REGISTRY_PROVIDER(){return Rk},get ServerGroupConfigurationService(){return Uk},get SERVER_GROUP_CONFIGURATION_SERVICE(){return zk},get ServerGroupNamePreview(){return Lk},get ServerGroupDetailsField(){return $k},get ServerGroupDetails(){return Kk},get ServerGroupDetailsWrapper(){return qk},get ShowUserData(){return Xk},get CapacityDetailsSection(){return eB},get CurrentCapacity(){return Zk},get DesiredCapacity(){return _k},get ViewScalingActivitiesLink(){return nB},get ServerGroupWarningMessageService(){return aB},get CloudMetricsReader(){return iB},get MinMaxDesiredChanges(){return rB},get ServerGroupReader(){return aw},get ServerGroupWriter(){return sB},get SERVER_GROUP_WRITER(){return oB},get ServerGroupTemplates(){return lB},get SERVER_GROUP_MANAGER_DATA_SOURCE(){return pB},get SERVER_GROUP_MANAGER_STATES(){return gB},get ServerGroupManagerReader(){return cB},get ServerGroupManagerTag(){return hB},get ServiceAccountReader(){return Ax},get ServicesReader(){return fB},get SLACK_COMPONENT(){return AB},get SlackReader(){return vB},get ClusterState(){return Vd},get ExecutionState(){return Jd},get LoadBalancerState(){return Wd},get SecurityGroupState(){return Kd},get FunctionState(){return qd},get initialize(){return Xd},get StorageAccountReader(){return EB},get SubnetReader(){return bB},get SubnetTag(){return yB},get PlatformHealthOverrideMessage(){return Vc},get TaskMonitor(){return Kc},get TaskMonitorWrapper(){return Gc},get TaskReason(){return qc},get TaskMonitorModal(){return tp},get TaskReader(){return Wc},get TaskExecutor(){return ep},get UserVerification(){return ip},get RenderWhenVisible(){return Qi},get CopyToClipboard(){return zi},get now(){return Gi},get DebugTiming(){return Oi},get DebugTimingCumulative(){return Yi},get firstDefined(){return $i},get JsonUtils(){return Hi},get DiffView(){return Vi},get traverseObject(){return Ji},get noop(){return qi},get toIPromise(){return Xi},get RENDER_IF_FEATURE(){return _i},get ScrollToService(){return er},get duration(){return ar},get timeDiffToString(){return ir},get timestamp(){return rr},get relativeTime(){return sr},get timePickerTime(){return or},get TIME_FORMATTERS(){return lr},get decodeUnicodeBase64(){return cr},get UUIDGenerator(){return pr},get WorkerPool(){return ur},get filterObjectValues(){return mr},get logger(){return Ui},get ApplicationsPickerInput(){return Vg},get ScopeClusterSelector(){return Wg},get ClusterMatches(){return Kg},get CLUSTER_MATCHES_COMPONENT(){return qg},get NotifierService(){return eo},get SpelNumberInput(){return Xg},get SpelText(){return iu},get Spinner(){return Es},get DeleteType(){return Zg},get Tag(){return eh},get TagList(){return th},get YAML_EDITOR_COMPONENT(){return kB},get yamlStringToDocuments(){return wB},get yamlDocumentsToString(){return xB},get YamlEditor(){return CB},get CORE_MODULE(){return sQ}});const ai=t.module;t.module=function(e,t,n){if(t&&t.some((e=>!e))){const n=t.map((e=>"string"==typeof e?`'${e}'`:`${e}`)).join(", ");throw new Error(`Got falsey dependency whilst registering angular module '${e}': [${n}]`)}return ai(e,t,n)};const ii={name:"[anonymous]",roles:[],authenticated:!1};class ri{static getAuthenticatedUser(){return{...this.user}}static setAuthenticatedUser(e){e&&e.name&&(this.user.name=e.name,this.user.authenticated=!0,this.user.lastAuthenticated=(new Date).getTime(),this.user.roles=e.roles),this.authEvents.forEach((e=>e()))}static onAuthentication(e){this.authEvents.push(e)}static authenticationExpired(){this.user.authenticated=!1}static reset(){this.user={...ii}}}ri.user={...ii},ri.authEvents=[];class si{static show(e,t,n){const a=new Promise(((a,i)=>{let r=document.createElement("div"),s=!0;function o(){r&&(ln.unmountComponentAtNode(r),r=null)}const l=e=>t=>{r&&(e(t),s=!1,d())},c=l(a),p=l(i);function d(){ln.render(ot.createElement(qt,{show:s,...n,onExited:o},ot.createElement(e,{...t,dismissModal:p,closeModal:c})),r)}d()}));return a.catch((()=>{})),a}}function oi(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var li,ci;oi(".modal-logged-out {\n text-align: center;\n padding: 30px 60px !important;\n}\n.modal-logged-out h3 {\n margin: 30px 0 !important;\n}\n.modal-logged-out p {\n margin-bottom: 30px;\n}\n.modal-logged-out .fa-hourglass {\n position: absolute;\n display: block;\n top: 95px;\n left: 278px;\n height: 0;\n font-size: 62px;\n}\n");class pi extends ot.Component{static show(){return si.show(pi,{})}render(){return ot.createElement(qt.Body,{className:"modal-logged-out"},ot.createElement("svg",{width:"162px",height:"143px",viewBox:"0 0 162 143"},ot.createElement("g",{id:"Page-1",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},ot.createElement("g",{transform:"translate(3.000000, 3.000000)"},ot.createElement("polygon",{id:"Fill-1",fill:"#E8AE2F",points:"0 138 81 0 156 138"}),ot.createElement("polygon",{id:"Stroke-3",stroke:"#000000",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",points:"0 138 81 0 156 138"})))),ot.createElement("i",{className:"far fa-hourglass"}),ot.createElement("h3",null,"You have been logged out."),ot.createElement("p",null,"Please click below or refresh your browser to log back in."),ot.createElement("p",null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>window.location.reload()},"Refresh and log me back in")))}}const di=window.spinnakerSettings||{};di.feature=di.feature||{},di.feature.roscoMode=null==(li=di.feature.roscoMode)||li,di.kubernetesAdHocInfraWritesEnabled=null==(ci=di.kubernetesAdHocInfraWritesEnabled)||ci,di.analytics=di.analytics||{},di.providers=di.providers||{},di.defaultTimeZone=di.defaultTimeZone||"America/Los_Angeles",di.dockerInsights=di.dockerInsights||{enabled:!1,url:""},di.changelogUrl=di.changelogUrl||"https://www.spinnaker.io/community/releases/versions/:version-changelog",di.managedDelivery=di.managedDelivery||{defaultManifest:"spinnaker.yml",manifestBasePath:".spinnaker"};const ui=p(di);di.resetToOriginal=()=>{Object.keys(di).filter((e=>"function"!=typeof di[e])).forEach((e=>delete di[e])),d(di,ui)},di.resetProvider=e=>()=>{const t=di.providers[e];Object.keys(t).filter((e=>"function"!=typeof t[e])).forEach((e=>delete t[e])),d(t,ui.providers[e])};class mi{}class gi extends mi{get $state(){return this.wrappedState||(this.wrappedState=this.createStateService()),this.wrappedState}get $q(){return this.$injector.get("$q")}get $rootScope(){return this.$injector.get("$rootScope")}get $stateParams(){return this.$injector.get("$stateParams")}get $uiRouter(){return this.$injector.get("$uiRouter")}get cacheInitializer(){return this.$injector.get("cacheInitializer")}get clusterService(){return this.$injector.get("clusterService")}get executionDetailsSectionService(){return this.$injector.get("executionDetailsSectionService")}get executionService(){return this.$injector.get("executionService")}get imageReader(){return this.$injector.get("imageReader")}get infrastructureSearchService(){return this.$injector.get("infrastructureSearchService")}get insightFilterStateModel(){return this.$injector.get("insightFilterStateModel")}get instanceTypeService(){return this.$injector.get("instanceTypeService")}get instanceWriter(){return this.$injector.get("instanceWriter")}get manualJudgmentService(){return this.$injector.get("manualJudgmentService")}get overrideRegistry(){return this.$injector.get("overrideRegistry")}get pageTitleService(){return this.$injector.get("pageTitleService")}get providerServiceDelegate(){return this.$injector.get("providerServiceDelegate")}get securityGroupReader(){return this.$injector.get("securityGroupReader")}get serverGroupWriter(){return this.$injector.get("serverGroupWriter")}get stateEvents(){return this.$injector.get("stateEvents")}createStateService(){const e=Object.create(this.$injector.get("$state")),t=this.$injector.get("$rootScope"),n=this.$injector.get("$q"),a=e.go;return e.go=function(){const e=arguments,i=Object.create(n.defer()),{promise:r}=i;return r.transition=null,r.catch((()=>{})),t.$applyAsync((()=>{const t=a.apply(this,e);r.transition=t.transition,t.then(i.resolve,i.reject)})),r},e}initialize(e){this.$injector=e}}const hi=new gi;class fi extends mi{get modalService(){return this.$injector.get("$uibModal")}get modalStackService(){return this.$injector.get("$uibModalStack")}initialize(e){this.$injector=e}}const vi=new fi;class Ai{static checkForReauthentication(){We.get(di.authEndpoint).then((e=>{e.data.username&&(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),vi.modalStackService.dismissAll(),this.visibilityWatch.unsubscribe())})).catch((()=>{}))}static loginNotification(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal(),this.visibilityWatch=ht(document,"visibilitychange").subscribe((()=>{"visible"===document.visibilityState&&this.checkForReauthentication()}))}static openLoggedOutModal(){pi.show()}static loginRedirect(){const e=encodeURIComponent(Ke.absUrl());window.location.href=`${di.gateUrl}/auth/redirect?to=${e}`}static authenticateUser(){qe.authenticating=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1):this.loginRedirect()})).catch((()=>this.loginRedirect()))}static reauthenticateUser(){this.userLoggedOut||(this.userLoggedOut=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1,this.userLoggedOut=!1):this.loginNotification()})).catch((()=>this.loginNotification())))}static logOut(){if(!this.userLoggedOut){const e={headers:{"Content-Type":"text/plain"},transformResponse:e=>e};We.get(`${di.gateUrl}/auth/logout`,e).then((()=>this.loggedOutSequence()),(()=>this.loggedOutSequence()))}}static loggedOutSequence(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal()}}Ai.userLoggedOut=!1,Ai.visibilityWatch=null;class Ei extends Error{constructor(e,t){super(e),this.originalResult=t,this.data={message:e}}}function bi(...e){return e.filter((e=>!u(e)&&""!==e)).map((e=>e.toString())).map((e=>e.replace(/^\/+/,""))).map((e=>e.replace(/\/+$/,""))).join("/")}const yi=class{constructor(e=ki(),t,n){this.config=e,this._httpClient=t,this._baseUrl=n}builder(e){return new yi(e,this.httpClient,this._baseUrl)}get httpClient(){var e;return null!=(e=this._httpClient)?e:yi.defaultHttpClient}get baseUrl(){var e;return bi(null!=(e=this._baseUrl)?e:di.gateUrl)}path(...e){const t=bi(this.config.url,...e.map((e=>encodeURIComponent(e))));return this.builder({...this.config,url:t})}headers(e){return this.builder({...this.config,headers:{...this.config.headers,...e}})}get(e={}){const t={...this.config.params,...e},n=bi(this.baseUrl,this.config.url);return this.httpClient.get({...this.config,url:n,params:t})}post(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.post({...this.config,url:n,data:t})}put(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.put({...this.config,url:n,data:t})}patch(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.patch({...this.config,url:n,data:t})}delete(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.delete({...this.config,url:n,data:t})}useCache(e=!0){return this.builder({...this.config,cache:e})}query(e){const t={...this.config.params,...e};return this.builder({...this.config,params:t})}};let wi=yi;wi.defaultHttpClient=new class{constructor(){this.delete=e=>this.request("DELETE",e),this.get=e=>this.request("GET",e),this.post=e=>this.request("POST",e),this.put=e=>this.request("PUT",e),this.patch=e=>this.request("PATCH",e)}request(e,t){return We({...t,method:e}).then((e=>{const t=e.headers("content-type");if(t){const n=t.match(/application\/(.+\+)?json/),a=t.match(/application\/(.+-)?yaml/),i=t.includes("text/html")&&""===e.data,r=t.includes("text/plain")&&""===e.data;if(!(n||a||i||r))throw Ai.reauthenticateUser(),new Ei(Ci,e)}return e.data}))}};class xi extends wi{constructor(){super(...arguments),this.builder=e=>new xi(e,this._httpClient,this._baseUrl),this.getList=this.get.bind(this),this.one=this.path.bind(this),this.all=this.path.bind(this),this.remove=this.delete.bind(this).bind(this),this.data=e=>this.builder({...this.config,data:e}),this.withParams=this.query.bind(this),this.useCache=(e=!0)=>this.builder({...this.config,cache:e})}get baseUrl(){return super.baseUrl}}const Ci="API response was neither JSON nor zero-length html or text";function ki(e){return{url:bi(e),cache:!1,data:void 0,params:{},timeout:2*(di.apiTimeoutMs||di.pollSchedule||3e4)+5e3,headers:{"X-RateLimit-App":"deck"}}}const Bi=new class extends xi{constructor(){super(...arguments),this.one=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})},this.all=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})}}}(ki()),Si=e=>new wi(ki(e)),Mi=class{static registerProvider(e,t){di.providers[e]&&this.providers.set(e,t)}static getProvider(e){return this.providers.has(e)?p(this.providers.get(e)):null}static listRegisteredProviders(){return Array.from(this.providers.keys())}static overrideValue(e,t,n){this.providers.has(e)?g(this.providers.get(e),t,n):console.warn(`Cannot override "${t}" for provider "${e}" (provider not registered)`)}static hasValue(e,t){return this.providers.has(e)&&null!==this.getValue(e,t)}static getValue(e,t){var n;return null!=(n=m(this.getProvider(e),t))?n:null}static isDisabled(e){return!u(Mi.getValue(e,"adHocInfrastructureWritesEnabled"))&&!1===Mi.getValue(e,"adHocInfrastructureWritesEnabled")}};let Ni=Mi;Ni.providers=new Map;class Di{static initialize(){this.accounts$=ft((()=>{const e=Si("/credentials").useCache().query({expand:!0}).get();return vt(e)})).pipe(Mt(1),Nt()),this.providers$=Di.accounts$.pipe(St((e=>{const t=f(e.map((e=>e.type)));return h(t,Ni.listRegisteredProviders())})))}static challengeDestructiveActions(e){return Ze((t=>{e?this.getAccountDetails(e).then((e=>{t(!!e&&e.challengeDestructiveActions)})).catch((()=>t(!1))):t(!1)}))}static getArtifactAccounts(){return Si("/artifacts/credentials").useCache().get()}static getAccountDetails(e){return this.listAllAccounts().then((t=>t.find((t=>t.name===e))))}static getAllAccountDetailsForProvider(e){return this.listAccounts(e).catch((t=>(Xe.warn(`Failed to load accounts for provider "${e}"; exception:`,t),[])))}static getAvailabilityZonesForAccountAndRegion(e,t,n){return this.getPreferredZonesByAccount(e).then((e=>e[t]&&e[t][n]||[]))}static getCredentialsKeyedByAccount(e=null){return this.listAllAccounts(e).then((e=>{const t=e.map((e=>e.name));return v(t,e)}))}static getPreferredZonesByAccount(e){const t={};return this.getAllAccountDetailsForProvider(e).then((e=>(e.forEach((e=>{t[e.name]={},e.regions.forEach((n=>{let a=n.availabilityZones;n.preferredZones&&(a=h(n.preferredZones,n.availabilityZones)),t[e.name][n.name]=a}))})),t)))}static getRegionsForAccount(e){return this.getAccountDetails(e).then((e=>e?e.regions:[]))}static getUniqueAttributeForAllAccounts(e,t){return this.getCredentialsKeyedByAccount(e).then((e=>A(e).map(t).flatten().compact().map((e=>e.name||e)).uniq().value()))}static listAllAccounts(e=null){return Ze.when(this.accounts$.toPromise()).then((t=>t.filter((t=>!e||t.type===e))))}static listAccounts(e=null){return this.listAllAccounts(e).then((e=>e.filter((e=>!1!==e.authorized))))}static applicationAccounts(e=null){return Ze.all([this.listProviders(e),this.listAccounts()]).then((([e,t])=>e.reduce(((e,n)=>e.concat(t.filter((e=>e.cloudProvider===n)))),[])))}static listProviders$(e=null){return this.providers$.pipe(St((t=>e?e.attributes.cloudProviders.length?h(t,e.attributes.cloudProviders):di.defaultProviders?h(t,di.defaultProviders):t:t)),St((e=>e.sort())))}static listProviders(e=null){return Ze.when(this.listProviders$(e).toPromise())}static getAccountForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.account}))}}Di.initialize();const Ii=e=>(e=e||[]).map((e=>({label:e,value:e})));class Fi extends ot.Component{constructor(){super(...arguments),this.memoizedMakeOptions=un(Ii,E)}render(){const e=this.memoizedMakeOptions(this.props.strings);return(this.props.render||this.props.children)(e)}}class Ti extends cn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.renderOuter.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-critical"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const Qi=({bufferHeight:e=0,initiallyVisible:t,placeholderHeight:n,render:a,container:i,disableHide:r})=>{const[s,o]=ot.useState(!!t),[l,c]=ot.useState(n);let p;const d=ot.useRef();return ot.useEffect((()=>{let t=s;return p=new IntersectionObserver((e=>{const n=e[0].isIntersecting;n&&!t&&(t=!0,o(!0)),n||!t||r||(t=!1,c(e[0].boundingClientRect.height),o(!1))}),{root:i,threshold:[0],rootMargin:e&&i?`${e}px 0px`:"0px"}),p.observe(d.current),()=>{p.disconnect()}}),[]),ot.createElement("div",{ref:d,className:"render-when-visible"},s&&a(),!s&&ot.createElement("div",{style:{height:l+"px"}}))},Pi={DEBUG:1,INFO:2,WARN:3,ERROR:4},Ri=e=>Pi[e||"INFO"];const Ui=new class{constructor(){this.loggers=[],this.ignoredErrors=["ResizeObserver loop limit exceeded","ResizeObserver loop completed with undelivered notifications."]}subscribe(e){return this.loggers.push(e),()=>this.loggers.filter((t=>t!==e))}unsubscribe(e){this.loggers.filter((t=>t.key!==e))}log(e){var t;(null==(t=e.error)?void 0:t.message)&&this.ignoredErrors.includes(e.error.message)||this.loggers.forEach((t=>{Ri(e.level)>=Ri(t.level)&&t.onEvent(e)}))}};oi(".clipboard-btn {\n background-color: transparent !important;\n border-width: 0 !important;\n color: var(--color-dovegray) !important;\n display: inline-block !important;\n margin-left: 2px !important;\n}\n.clipboard-btn:hover {\n background-color: transparent;\n}\n.copy-to-clipboard-sm .clipboard-btn {\n margin-bottom: 3px;\n}\n");class zi extends ot.Component{constructor(e){super(e),this.inputRef=ot.createRef(),this.mounted=!1,this.handleClick=e=>{e.preventDefault(),this.props.stopPropagation&&e.stopPropagation();const{analyticsLabel:t,text:n}=this.props;Ui.log({category:"Copy to Clipboard",action:"copy",data:{label:t||n}});const a=this.inputRef.current;a.focus(),a.select();try{document.execCommand("copy"),a.blur(),this.setState({tooltipCopy:"Copied!",shouldUpdatePosition:!0}),window.setTimeout(this.resetToolTip,3e3)}catch(e){a.blur(),this.setState({tooltipCopy:"Couldn't copy!",shouldUpdatePosition:!0})}},this.resetToolTip=()=>{this.mounted&&this.setState({tooltipCopy:!1,shouldUpdatePosition:!0})},this.state={tooltipCopy:!1,shouldUpdatePosition:!1}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}renderTooltip(e){const{toolTip:t,text:n=""}=this.props,{tooltipCopy:a,shouldUpdatePosition:i}=this.state,r=Boolean(a),s=a||t,o=`clipboardValue-${n.toString().replace(" ","-")}`,l=ot.createElement(Zt,{id:o},s),c={shouldUpdatePosition:i};return s?ot.createElement(Xt,{defaultOverlayShown:r,placement:"top",overlay:l,delayHide:250,...c},e):e}render(){const{buttonInnerNode:e,text:t="",className:n="btn btn-xs btn-default clipboard-btn"}=this.props,a=ot.createElement("button",{onClick:this.handleClick,className:n,"aria-label":"Copy to clipboard"},e||ot.createElement("span",{className:"glyphicon glyphicon-copy"}));return ot.createElement(ot.Fragment,null,ot.createElement("textarea",{onChange:e=>e,ref:this.inputRef,value:t,tabIndex:-1,style:{zIndex:-1,position:"fixed",opacity:0,top:0,left:0}}),this.renderTooltip(a))}}zi.defaultProps={displayText:!1};const Gi=performance?performance.now.bind(performance):Date.now.bind(Date),ji=console.log.bind(console),Li=(e,t)=>"object"==typeof e&&e.constructor&&e.constructor.name?`${e.constructor.name}.${t}():`:`${t}():`,Oi=e=>(t,n,a)=>{const i=a.value;e=b(e||Li(t,n),50),a.value=function(){const t=Gi(),n=i.apply(this,arguments),a=Gi()-t;return ji(`${e} ${a} ms`),n}},Yi=(e,t=5e3)=>(n,a,i)=>{const r=i.value;let s=0;e=b(e||Li(n,a),50);let o=0;setInterval((()=>ji(`${e} ${b(""+s,10)} calls in ${o} ms`)),t),i.value=function(){s++;const e=Gi(),t=r.apply(this,arguments);return o+=Gi()-e,t}};function $i(...e){return e.find((e=>!u(e)))}class Hi{static generateDiff(e,t){const n=new gn,a=n.diff_linesToChars_(e,t),i=n.diff_main(a.chars1,a.chars2,!1);return n.diff_charsToLines_(i,a.lineArray),i}static sortObject(e){return!e||y(e)||w(e)?e:Object.keys(e).sort().reduce(((t,n)=>(x(e[n])?t[n]=this.sortObject(e[n]):C(e[n])?t[n]=e[n].map((e=>this.sortObject(e))):t[n]=e[n],t)),{})}static makeSortedString(e){return this.makeSortedStringFromObject(JSON.parse(e))}static makeSortedStringFromObject(e){return this.makeStringFromObject(this.sortObject(e))}static makeStringFromObject(e,t=2){return JSON.stringify(e,null,t)}static makeSortedStringFromAngularObject(e,t=[]){return JSON.stringify(this.sortObject(e),((e,n)=>{let a=n;return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(a=void 0),t.includes(e)&&(a=void 0),a}))}static diff(e,t,n=!1){n&&(e=this.makeSortedString(e),t=this.makeSortedString(t));const a=this.generateDiff(e,t),i=[];let r=0,s=0,o=0,l=0;const c=[];return a.forEach((e=>{const t=e[1].split("\n");""===t[t.length-1]&&t.pop();let n="match";1===e[0]&&(n="add",r+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),-1===e[0]&&(n="remove",s+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),0===e[0]&&(o+=t.length),t.forEach((e=>i.push({type:n,text:e}))),l+=t.length})),c.forEach((e=>{e.height=100*e.lines/l,e.top=100*e.start/l})),{details:i,summary:{additions:r,removals:s,unchanged:o,total:l},changeBlocks:c}}}function Vi(e){const{diff:t}=e,n=ot.useRef();return ot.createElement(ot.Fragment,null,ot.createElement("pre",{ref:n,className:"form-control flex-fill diff"},t.details.map(((e,t)=>ot.createElement("div",{"data-attr-line":t,className:e.type,key:t},e.text)))),ot.createElement("div",{className:"summary-nav flex-fill",onClick:function(e){var a;let i;const r=e.target,s=e.currentTarget,o=n.current.firstChild.clientHeight;i=r.getAttribute("data-attr-block-line")?Number(r.getAttribute("data-attr-block-line")):(null==(a=e.nativeEvent)?void 0:a.offsetY)/s.clientHeight*t.summary.total,n.current.scroll({top:(i-3)*o,behavior:"smooth"})}},t.changeBlocks.map(((e,t)=>ot.createElement("div",{"data-attr-block-line":e.start,key:t,style:{height:e.height+"%",top:e.top+"%"},className:"delta "+e.type})))))}oi(".diff-view {\n width: 100%;\n display: block;\n position: relative;\n}\n.diff-view .diff {\n color: var(--color-black);\n font-size: 80%;\n overflow-x: visible;\n margin: 0;\n padding-bottom: 0;\n}\n.diff-view .diff .match,\n.diff-view .diff .add,\n.diff-view .diff .remove {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n.diff-view .diff .match::before,\n.diff-view .diff .add::before,\n.diff-view .diff .remove::before {\n position: relative;\n left: 0;\n}\n.diff-view .diff .match {\n color: var(--color-dovegray);\n}\n.diff-view .diff .match::before {\n content: ' ';\n}\n.diff-view .diff .add {\n background-color: var(--color-github-history-add);\n}\n.diff-view .diff .add::before {\n content: '+';\n}\n.diff-view .diff .remove {\n background-color: var(--color-github-history-remove);\n}\n.diff-view .diff .remove::before {\n content: '-';\n}\n.diff-view .diff .form-group {\n margin-bottom: 0;\n}\n.diff-view .diff::-webkit-scrollbar {\n height: 8px;\n}\n.diff-view .summary-nav {\n cursor: pointer;\n z-index: 2;\n width: 12px;\n position: absolute;\n top: 0;\n right: 7px;\n height: calc(100% - 8px);\n}\n.diff-view .summary-nav .delta {\n width: 100%;\n position: absolute;\n min-height: 3px;\n}\n.diff-view .summary-nav .delta.add {\n background: var(--color-success);\n}\n.diff-view .summary-nav .delta.remove {\n background: var(--color-danger);\n}\n");const Ji=(e,t,n=!1)=>Ki(null,e,t,n);function Wi(e,t){const n=y(t)?`[${t}]`:t.includes(".")?`["${t}"]`:t,a=n.includes("["),i=e?a?e:`${e}.`:"";if(a&&!i)throw new Error(`Cannot construct path from '${n}' using array syntax because the parent path is undefined.`);return`${i}${n}`}const Ki=(e,t,n,a)=>{function i(i){null===e||!i&&a||n(e,t)}k(t)||B(t)?i(!0):x(t)?(i(!1),S(t,((t,i)=>Ki(Wi(e,i),t,n,a)))):Array.isArray(t)?(i(!1),t.forEach(((t,i)=>Ki(Wi(e,i),t,n,a)))):i(!0)};const qi=function(){};function Xi(e){return Ze(((t,n)=>{let a;e.subscribe((e=>a=e),(e=>n(e)),(()=>t(a)))}))}const Zi={bindings:{feature:"@"},controller:class{constructor(){this.featureEnabled=!1}$onInit(){this.featureEnabled=this.feature&&di.feature[this.feature]}},transclude:!0,template:'<ng-transclude ng-if="$ctrl.featureEnabled"></ng-transclude>'},_i="spinnaker.core.renderIfFeature.directive";n(_i,[]).component("renderIfFeature",Zi);class er{static toDomId(e){return e.replace(/[\W]/g,"-")}static scrollTo(e,t,n=0,a=0){_e((()=>{const a=hn(e);if(a.length){const e=t?a.closest(t):hn("body");if(e.length){const t=e.scrollTop()+a.offset().top-n;e.animate({scrollTop:t+"px"},200)}}}),a)}}const tr=()=>{const e=di.defaultTimeZone,t=En.local().setZone(e);return ot.createElement("span",null,t.offsetNameShort)},nr=e=>!(!e||isNaN(e)||e<0||e>864e13);function ar(e){if(!nr(e))return"-";const t=bn.fromMillis(e),n=Math.floor(t.as("days")),a=t.minus({days:Math.floor(t.as("days"))}),i=a.days||Math.floor(a.as("hours"))?"hh:mm:ss":"mm:ss";let r="";return a.isValid&&n>0&&(r=n+"d"),a.isValid?r+a.toFormat(i):"-"}function ir(e,t){const n=t.diff(e).shiftTo("days","hours","minutes","seconds"),a=[];let i=!1;const r=(e,t)=>{(n[e]||i)&&(a.push(t),i=!0)};return r("days","d'd'"),r("hours","h'h'"),r("minutes","m'm'"),a.push("s's'"),n.toFormat(a.join(" "))}function rr(e){if(!nr(e))return"-";const t=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,n=En.fromMillis(parseInt(e,10),{zone:t});return n.isValid?n.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"):"-"}function sr(e){if(!nr(e))return"-";const t=e>Date.now(),n=En.fromMillis(e),a=fn(n.toJSDate(),{includeSeconds:!0});return n.isValid?`${t?"in ":""}${a}${t?"":" ago"}`:"-"}function or(e){if(e&&!isNaN(e.hours)&&!isNaN(e.minutes)){const t=parseInt(e.hours,10),n=parseInt(e.minutes,10);let a="";return t<10&&(a+="0"),a+=t+":",n<10&&(a+="0"),a+=n,a}return"-"}const lr="spinnaker.core.utils.timeFormatters";n(lr,[]).filter("timestamp",(()=>rr)).filter("relativeTime",(()=>sr)).filter("duration",(()=>ar)).filter("timePickerTime",(()=>or)).component("systemTimezone",yn(tr));const cr=e=>decodeURIComponent(atob(e).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));class pr{static getRandom(e){return Math.random()*e}static generateUuid(){let e="";for(let t=0;t<36;t++)switch(t){case 14:e+="4";break;case 19:e+="89ab".charAt(pr.getRandom(4));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+="0123456789abcdef".charAt(pr.getRandom(16))}return e}}class dr{constructor(e){this.task=e,this.workerPromise=new Promise(((e,t)=>Object.assign(this,{resolve:e,reject:t})))}run(){const e=this.task();return e.then(this.resolve,this.reject),e}cancel(e){this.reject(B(e)?"Cancelled":e)}}class ur{constructor(e){this.concurrency=e,this.queuedTasks=[],this.runningTasks=[]}task(e){const t=new dr(e);return this.queuedTasks.push(t),this.flush(),t.workerPromise}cancelAll(e){[].concat(this.runningTasks).concat(this.queuedTasks).forEach((t=>t.cancel(e))),this.runningTasks=[],this.queuedTasks=[]}flush(){const{queuedTasks:e,runningTasks:t}=this;e.length&&t.length<this.concurrency&&this.runTask(e.shift())}completeTask(e){this.runningTasks=M(this.runningTasks,e),this.flush()}runTask(e){this.runningTasks.push(e);const t=()=>this.completeTask(e);e.run().then(t,t)}}function mr(e,t,n={leafNodesOnly:!0}){const a={};return Ji(e,((e,n)=>{t(n,e)&&g(a,e,n)}),n.leafNodesOnly),a}const gr=e=>u(e)?"":e,hr=(e={})=>wn({"ng-dirty":!!e.touched,"ng-invalid":"error"===e.category,"ng-warning":"warning"===e.category}),fr=e=>({persist:qi,stopPropagation:qi,preventDefault:qi,target:e}),vr=e=>e&&e.length&&e.every(w);class Ar{constructor(e,t){this.name=e,this.label=t,this.validators=[]}required(e){return this.isRequired=!0,this.isRequiredMessage=e,this}optional(){return this.isRequired=!1,this.isRequiredMessage=void 0,this}spelAware(e=!0){return this.isSpelAware=e,this}withValidators(...e){return this.validators=this.validators.concat(e),this}}const Er="__FIELD_IS_VALID_SHORT_CIRCUIT__",br=e=>{const t=e.filter((e=>!!e));if(!t.length)return null;if(1===t.length)return t[0];return(e,n)=>t.map((t=>t(e,n))).find((e=>!!e))};function yr(e){if(!e)return"";let t=e.charAt(0).toUpperCase()+e.substr(1);return/\s/g.test(t)||(t=t.replace(/[A-Z]/g," $&"),t=t.replace(/_[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/-[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/([A-Z])\s([A-Z])\s/g,"$1$2")),t}function wr(){return yr}const xr="spinnaker.core.presentation.robotToHuman.filter";n(xr,[]).filter("robotToHuman",wr);const Cr={arrayNotEmpty:e=>function(t,n="This field"){return e=e||`${n} must contain at least one entry`,t&&t.length<1&&e},checkBetween:(e,t,n)=>function(a){const i=Number.parseInt(a,10);if(!Number.isNaN(i)){return Cr.minValue(t)(i,yr(e))||Cr.maxValue(n)(i,yr(e))}return null},emailValue:e=>function(t,n="This field"){return e=e||`${n} is not a valid email address.`,t&&!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(t)&&e},isNum:e=>function(t){return y(t)?null:e||"Must be a number"},isRequired:e=>function(t,n="This field"){return e=e||`${n} is required.`,(null==t||""===t)&&e},isValidJson:e=>function(t,n="this field"){try{JSON.parse(t)}catch(t){return e=e||`${n} must be valid JSON: ${t.message}`}},isValidXml:e=>function(t,n="this field"){const a=(new DOMParser).parseFromString(t,"text/xml").getElementsByTagName("parsererror");if(a&&a.length>0)return e=e||`${n} must be valid XML`},maxValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n>e){const n=`cannot be greater than ${e}`;return t||`${a} ${n}`}return null},minValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n<e){const n=0===e?"cannot be negative":`cannot be less than ${e}`;return t||`${a} ${n}`}return null},oneOf:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be one of (${e.join(", ")})`,!e.includes(n)&&t},skipIfUndefined:e=>function(t,n="This field"){return void 0!==t&&e(t,n)},skipIfSpel:e=>function(t,n="This field"){return"string"==typeof t&&t.includes("${")?void 0:e(t,n)},valueUnique:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be not be included in (${e.join(", ")})`,e.includes(n)&&t}};class kr{constructor(e){this.values=e,this.fields=[],this.isSpelAwareDefault=!1}field(e,t){t=t||N(e);const n=new Ar(e,t);return this.fields.push(n),n}spelAware(e=!0){return this.isSpelAwareDefault=e,this}getFieldValidators(e,t){const n=D(e.isSpelAware)?e.isSpelAware:t;return[e.isRequired?Cr.isRequired(e.isRequiredMessage):null,e.isRequired?null:e=>null==e||""===e?Er:null,n?e=>"string"==typeof e&&e.includes("${")?Er:null:null,...e.validators].filter((e=>!!e))}validateForm(){return((e,t)=>e.reduce(((e,t)=>g(e,t.name,t.error)),t?[]:{}))(this.fields.map((e=>{const{name:t,label:n}=e,a=m(this.values,t);return{name:t,error:((e,t,n)=>e.reduce(((e,a)=>e||a(t,n)),""))(this.getFieldValidators(e,this.isSpelAwareDefault),a,n)}})).filter((e=>{return!(!(t=e.error)||t===Er||"string"!=typeof t&&(Array.isArray(t)?!t.length:"object"==typeof t?!Object.keys(t).length:!t));var t})),Array.isArray(this.values))}arrayForEach(e){return((e,t)=>(n,a)=>{if(!Array.isArray(n))return!1;const i=e(n);return n.forEach(((e,r)=>{const s=((e,t)=>({item:n=>e.field(`[${t}]`,n),field:(n,a)=>e.field(`[${t}].${n}`,a),validateForm:e.validateForm,arrayForEach:e.arrayForEach}))(i,r);t&&t(s,e,r,n,a)})),i.validateForm()})((e=>new kr(e)),e)}}function Br(e){const{message:t,tag:n,className:a,trim:i,tag:r="div",...s}=e,o=ot.useMemo((()=>new xn),[]),l=ot.useMemo((()=>new Cn),[]),c=`Markdown ${a||""}`;if(null==t)return null;const p=i?t.trim():t,d=s,u=o.parse(p.toString()),m=l.render(u);return d.dangerouslySetInnerHTML={__html:kn.sanitize(m,e.options)},ot.createElement(r,{...d,className:c})}oi(".Markdown p {\n margin: 0;\n}\n.Markdown p + p {\n margin-top: 4px;\n}\nspan.Markdown p {\n display: contents;\n}\n");const Sr=(e,t={},n=!1)=>ot.createElement(Br,{message:e,tag:n?"span":"div",options:t});oi(".ValidationMessage {\n min-height: 40px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-bottom: 2px;\n}\n.ValidationMessage.errorMessage {\n color: var(--color-validation-error);\n background-color: var(--color-validation-error-light);\n}\n.ValidationMessage.infoMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.previewMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.successMessage {\n color: var(--color-validation-success);\n background-color: var(--color-validation-success-light);\n}\n.ValidationMessage.warningMessage {\n color: var(--color-validation-black);\n background-color: var(--color-validation-warning-light);\n}\n.ValidationMessage i {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 40px;\n flex: 0 0 40px;\n height: 40px;\n font-size: 24px;\n padding: 7px;\n}\n.ValidationMessage .message {\n margin: 8px 8px 8px 0;\n -ms-flex-item-align: center;\n align-self: center;\n}\n");const Mr={async:"infoMessage",error:"errorMessage",info:"infoMessage",message:"infoMessage",success:"successMessage",warning:"warningMessage"},Nr={async:"fa fa-spinner fa-spin",error:"fa fa-exclamation-circle",info:"fa fa-info-circle",message:"icon-view-1",success:"far fa-check-circle",warning:"fa icon-alert-triangle"},Dr=e=>{const{type:t,message:n,iconClassName:a,containerClassName:i}=e,r=!1!==a;return ot.createElement("div",{className:`ValidationMessage ${i||Mr[t]||""}`},r&&ot.createElement("i",{className:a||Nr[t]||""}),ot.createElement("div",{className:"message"},w(n)?ot.createElement(Br,{message:n}):n))},Ir={async:"Async",error:"Error",info:"Info",message:"Message",success:"Success",warning:"Warning"},Fr=I(Ir),Tr=Object.keys(Ir),Qr=Object.keys(Ir).reduce(((e,t)=>({...e,[Ir[t]]:t})),{}),Pr=e=>t=>t?`${Ir[e]}: ${t}`:null,Rr=Pr("async"),Ur=Pr("error"),zr=Pr("info"),Gr=Pr("message"),jr=Pr("success"),Lr=Pr("warning"),Or=new RegExp(`^(${Fr.join("|")}): ((?:[\r\n]|.)*)$`,"m"),Yr=e=>{if(!e)return[null,null];const t=Or.exec(e);if(!t)return["error",e];const[n,a]=t.slice(1);return[Qr[n],a]},$r=e=>{const t=Tr.reduce(((e,t)=>({...e,[t]:{}})),{});return Ji(e,((e,n)=>{const[a,i]=Yr(n);i&&g(t[a],e,i)}),!0),t};function Hr(e,t){return ot.useMemo((()=>{if(!e)return{category:null,messageNode:null,hidden:!0};if(ot.isValidElement(e))return{category:null,messageNode:e,hidden:!1};if(w(e)){const[n,a]=Yr(e),i="error"===n||"warning"===n;return{category:n,messageNode:a,hidden:!t&&i}}return{category:null,messageNode:e,hidden:!0}}),[e,t])}const Vr={borderColor:"var(--color-danger)",WebkitBoxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)",boxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)"},Jr=(e,t)=>n=>{const a=n?Array.isArray(n)?n.map((e=>e.value)):n.value:null,i=fr({name:e,value:a});return(t||qi)(i)},Wr=(e,t,n)=>()=>{const a=fr({name:e,value:t});return(n||qi)(a)};function Kr(e){const{name:t,onChange:n,onBlur:a,value:i,validation:r={},stringOptions:s,options:o,ignoreAccents:l,inputClassName:c,...p}=e,d=!u(l)&&l,m=e.mode||"TETHERED",g=gr(c),{category:h}=Hr(r.messageNode,r.touched),f={className:g,style:"error"===h?Vr:{},ignoreAccents:d,...{name:t,value:e.multi?u(i)?[]:i:gr(i),onBlur:Wr(t,i,a),onChange:Jr(t,n)},...p},v=({options:e})=>"TETHERED"===m?ot.createElement(Ti,{...f,options:e}):"VIRTUALIZED"===m?ot.createElement(dn,{...f,options:e,optionRenderer:null}):"CREATABLE"===m?ot.createElement(qr,{...f,options:e}):ot.createElement(cn,{...f,options:e});return vr(s)?ot.createElement(Fi,{strings:s},(e=>ot.createElement(v,{options:e}))):ot.createElement(v,{options:o})}function qr(e){const t=ot.useMemo((()=>{var t,n;const a=null!=(t=e.options)?t:[],i=a.map((e=>e.value)),r=(null!=(n=e.value)?n:[]).filter((e=>!i.includes(e))).map((e=>({label:e,value:e})));return a.concat(r)}),[e.options,e.value]);return ot.createElement(pn,{...e,options:t})}function Xr(e){const{value:t,defaultValue:n,validation:a,options:i,inputClassName:r,...s}=e,o=`SelectInput form-control ${gr(r)} ${hr(a)}`;lt((()=>{if(!u(n)){(vr(i)?i:i.map((e=>e.value))).includes(t)||e.onChange(fr({name:e.name,value:n}))}}),[t,n,i]);const l=({opts:e})=>ot.createElement("select",{className:o,value:gr(t),...s},e.map((e=>ot.createElement("option",{key:e.value,value:e.value,disabled:e.disabled},e.label))));return vr(i)?ot.createElement(Fi,{strings:i},(e=>ot.createElement(l,{opts:e}))):ot.createElement(l,{opts:i})}const Zr=e=>!!e&&e.includes("${");class _r extends ot.Component{constructor(){super(...arguments),this.state={mergedAccounts:[],primaryAccounts:[],secondaryAccounts:[]},this.groupAccounts=e=>{const{name:t,value:n,onChange:a,provider:i}=this.props;if(!e||!e.length)return;if(Zr(n))return;const r=Boolean(e[0].name);let s=Ze.when([]);if(i&&(s=Di.getAllAccountDetailsForProvider(i)),!i&&r){const t=f(F(e,"type"));s=Ze.all(t.map((e=>Di.getAllAccountDetailsForProvider(e)))).then((e=>T(e)))}s.then((i=>{const s=r?F(e,"name"):e;let o=s,l=[],c=[];s&&(l=s.sort()),s&&s.length&&i.length&&(l=s.filter((e=>i.some((t=>t.name===e&&t.primaryAccount)))).sort(),c=Q(s,l).sort(),o=T([l,c])),o.includes(n)||a(fr({value:"",name:t})),this.setState({mergedAccounts:o,primaryAccounts:l,secondaryAccounts:c})}))}}componentDidMount(){this.groupAccounts(this.props.accounts)}componentWillReceiveProps(e){E(e.accounts,this.props.accounts)||this.groupAccounts(e.accounts)}render(){const{value:e,readOnly:t}=this.props,{mergedAccounts:n}=this.state,{primaryAccounts:a,secondaryAccounts:i}=this.state,r=a.length>0&&i.length>0,s=[{label:"Select...",value:"",disabled:!0}];if(s.push(...a.map((e=>({label:e,value:e})))),r&&s.push({label:"---------------",value:"-",disabled:!0}),s.push(...i.map((e=>({label:e,value:e})))),Zr(e))return ot.createElement("div",{className:"sm-control-field"},ot.createElement("span",null,"Resolved at runtime from expression: ",ot.createElement("code",null,e)));if(t)return ot.createElement("div",null,ot.createElement("p",{className:"form-control-static"},e));const{renderFilterableSelectThreshold:o,...l}=this.props;if(n.length<o){const e=e=>{e.persist(),this.props.onChange(e)};return ot.createElement(Xr,{...l,inputClassName:"form-control input-sm",onChange:e,required:!0,options:s})}return ot.createElement(Kr,{...l,clearable:!1,required:!0,options:s,mode:"PLAIN",menuContainerStyle:{minWidth:"150px"}})}}_r.defaultProps={renderFilterableSelectThreshold:6};const es=class extends ot.Component{constructor(){super(...arguments),this.state={isProdAccount:!1},this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidMount(){this.updateAccount(this.props.account)}componentWillReceiveProps(e){this.updateAccount(e.account)}updateAccount(e){const{cache:t}=es;t.hasOwnProperty(e)||(t[e]=Di.challengeDestructiveActions(e).then((n=>t[e]=!!n)));const n=t[e];"boolean"==typeof n?this.setState({isProdAccount:n}):n.then((e=>this.mounted&&this.setState({isProdAccount:e})))}render(){const{account:e,className:t}=this.props,{isProdAccount:n}=this.state,a="account-tag-wrapper"===t;return ot.createElement("span",{className:`account-tag account-tag-${n?"prod":"notprod"} ${t||""}`},ot.createElement("span",{className:"account-tag-name",title:a?e:null},e))}};let ts=es;ts.cache={};const ns=ot.createContext(void 0),as=({app:e,children:t})=>ot.createElement(ns.Provider,{value:e},t);class is extends ot.Component{constructor(e){super(e)}componentWillReceiveProps(e){this.$scope&&(this.$scope.props=e)}refCallback(e){if(!e)return;const{controller:t,controllerAs:n,locals:a}=this.props,i=this.props.template,r=this.props.templateUrl,s={...this.props,...a};r?et(r).then((a=>{this.renderAngularTemplateAndController(e,a,t,n,s)})):this.renderAngularTemplateAndController(e,i,t,n,s)}renderAngularTemplateAndController(e,t,n,i,r){const s=a(e),o=s.scope(),l=this.$scope=o.$new();if(l.props=this.props,s.html(t),tt(e)(l),n){const e=nt(i?`${n} as ${i}`:n,{$scope:l,$element:s,...r});s.data("$ngControllerController",e)}}componentWillUnmount(){this.$scope.$destroy()}render(){return ot.createElement("div",{className:"AngularJSAdapter",ref:e=>this.refCallback(e)})}}var rs,ss,os,ls,cs,ps,ds,us,ms,gs,hs,fs;function vs(){return(vs=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}function As(e){return st.createElement("svg",vs({xmlns:"http://www.w3.org/2000/svg",style:{margin:"auto",background:"0 0"},preserveAspectRatio:"xMidYMid",viewBox:"24 24 52 52",display:"block"},e),rs||(rs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.9166666666666666s",repeatCount:"indefinite"}))),ss||(ss=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(30 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.8333333333333334s",repeatCount:"indefinite"}))),os||(os=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(60 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.75s",repeatCount:"indefinite"}))),ls||(ls=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(90 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.6666666666666666s",repeatCount:"indefinite"}))),cs||(cs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(120 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5833333333333334s",repeatCount:"indefinite"}))),ps||(ps=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(150 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5s",repeatCount:"indefinite"}))),ds||(ds=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(180 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.4166666666666667s",repeatCount:"indefinite"}))),us||(us=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(210 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.3333333333333333s",repeatCount:"indefinite"}))),ms||(ms=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(240 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.25s",repeatCount:"indefinite"}))),gs||(gs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(270 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.16666666666666666s",repeatCount:"indefinite"}))),hs||(hs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(300 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.08333333333333333s",repeatCount:"indefinite"}))),fs||(fs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(330 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"0s",repeatCount:"indefinite"}))))}is.defaultProps={locals:{}};const Es=({color:e="#ffffff",fullWidth:t,message:n,className:a,mode:i="horizontal",size:r="small"})=>{if("circular"===i){const t={nano:12,small:16,medium:24,large:32};return ot.createElement(As,{className:a,style:{height:t[r],fill:e}})}const s=()=>{let e=3;r&&("nano"===r?e=1:"large"===r&&(e=5));const t=[];let n;for(n=0;n<e;n++)t.push(ot.createElement("div",{key:n,className:"bar"}));return t},o="message color-text-accent "+("medium"===r?"heading-4":"heading-2"),l=["medium","large"].includes(r)&&ot.createElement("div",{className:o},n||"Loading ..."),c=["medium","large"].includes(r)?ot.createElement("div",{className:"bars"},s()):s();return ot.createElement("div",{className:wn("load",r||"small",a,{"full-width":t})},l,c)};function bs(e){return function(t){return ys(t,e)}}function ys(e,t){class n extends ot.Component{constructor(e){super(e),this.account$=new At,this.destroy$=new At;let t=!0;this.account$.pipe(Dt((e=>e?Di.accounts$.pipe(St((t=>t.find((t=>t.name===e))))):Et(null))),St((e=>this.getComponent(e))),It(this.destroy$)).subscribe((e=>{t?this.state={Component:e}:this.setState({Component:e})})),this.account$.next(this.props.accountId),t=!1}componentWillUnmount(){this.destroy$.next()}componentWillReceiveProps(e){const{accountId:t}=e;this.props.accountId!==t&&this.account$.next(t)}getComponentFromCloudProvider(e){const{cloudProvider:n}=e;if(!n)return null;const a=Ni.getValue(n,t);if(a)return a;const i=Ni.getValue(n,t+"TemplateUrl");if(i){const e=Ni.getValue(n,t+"Controller"),a=e&&e.includes(" as ")?void 0:"ctrl";return t=>ot.createElement(is,{...t,templateUrl:i,controller:e,controllerAs:a})}return null}getComponentFromOverrideRegistry(){const{overrideRegistry:e}=hi,n=e.getComponent(t);if(n)return n;const a=e.getTemplate(t,null);if(a){const n=e.getController(t,null),i=n&&n.includes(" as ")?void 0:"ctrl";return e=>ot.createElement(is,{...e,templateUrl:a,controller:n,controllerAs:i})}return null}getComponent(t){return this.getComponentFromCloudProvider(t||{})||this.getComponentFromOverrideRegistry()||e}render(){const t=this.state&&this.state.Component,n=t&&t!==e,a={...this.props,...n?{OriginalComponent:e}:{}};if(!t)return ot.createElement(Es,null);return["render","prototype.render"].some((e=>"function"==typeof m(t,e)))?ot.createElement(t,{...a,ref:this.props.forwardedRef}):ot.createElement(t,{...a})}}n.OriginalComponent=e;const a=ot.forwardRef(((e,t)=>ot.createElement(n,{...e,forwardedRef:t})));return Object.getOwnPropertyNames(e).filter((e=>"constructor"!==e&&!n.hasOwnProperty(e))).forEach((t=>a[t]=e[t])),a}var ws=Object.defineProperty,xs=Object.getOwnPropertyDescriptor;let Cs=class extends ot.Component{render(){return ot.createElement("i",{className:"application-header-icon far fa-window-maximize"})}};Cs=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?xs(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&ws(t,n,r),r})([bs("applicationIcon")],Cs);oi(".collapsible-element {\n position: relative;\n}\n.collapsible-element .content {\n position: relative;\n overflow: hidden;\n}\n.collapsible-element .content.collapsed:after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n bottom: 0;\n background: linear-gradient(0deg, var(--color-white) 0px, transparent 40px);\n}\n.collapsible-element .expand-button {\n display: none;\n position: absolute;\n bottom: 0;\n text-align: center;\n padding-top: 2px;\n border: none;\n border-top: 2px solid #009cb8;\n color: #009cb8;\n width: 100%;\n background-color: var(--color-white);\n outline: none;\n}\n.collapsible-element .expand-button:hover {\n text-decoration: underline;\n}\n.collapsible-element:hover .expand-button {\n display: block;\n}\n");const ks=({children:e,maxHeight:t})=>{const[n,a]=ot.useState(!0),[i,r]=ot.useState(!1),s=ot.useRef(null),o=ot.useCallback((()=>{s.current&&r(s.current.offsetHeight<s.current.scrollHeight)}),[]);return ot.useEffect((()=>{o()}),[e,o]),ot.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o))),[]),ot.createElement("div",{className:"collapsible-element"},ot.createElement("div",{style:{maxHeight:n?t:void 0},className:wn(["content",{collapsed:n&&i}]),ref:s},e),(i||!n)&&ot.createElement("button",{className:"expand-button",onClick:()=>a((e=>!e))},n?"Read more":"Read less"))};class Bs{constructor(){this.cacheFactory=new Mn,this.cacheId="collapsibleSectionStateCache";try{this.cacheFactory.createCache(this.cacheId,{maxAge:6048e5,deleteOnExpire:"aggressive",storageMode:"localStorage"})}catch(e){}this.stateCache=this.cacheFactory.get(this.cacheId)}isSet(e){return!!e&&void 0!==this.stateCache.get(e)}isExpanded(e){return!!e&&!0===this.stateCache.get(e)}setExpanded(e,t){e&&this.stateCache.put(e,!!t)}}const Ss=new Bs,Ms={left:{expanded:"rotate-0",collapsed:"rotate-m90"},right:{expanded:"rotate-p180",collapsed:"rotate-p270"}},Ns=({outerDivClassName:e="collapsible-section",toggleClassName:t="section-heading",headingClassName:n="collapsible-heading",bodyClassName:a="content-body",enableCaching:i=!0,cacheKey:r,defaultExpanded:s,heading:o,expandIconPosition:l="left",expandIconType:c="arrow",expandIconSize:p,onToggle:d,children:u})=>{const m=ot.useMemo((()=>r||("string"==typeof o?o:void 0)),[r,o]),[g,h]=ot.useState(i&&Ss.isSet(m)?Ss.isExpanded(m):s),f={size:p||"16px",color:"concrete"},v=u?ot.createElement("span",{className:wn("section-heading-chevron",l)},"arrow"===c?ot.createElement(Bn,{name:"accordionCollapse",className:Ms[l][g?"expanded":"collapsed"],...f}):"plus"===c?ot.createElement(Bn,{name:g?"minus":"plus",...f}):ot.createElement(Bn,{name:g?"closeSmall":"accordionCollapse",...f})):void 0,A="string"==typeof o?ot.createElement("h4",{className:n},"left"===l?ot.createElement(ot.Fragment,null,v," ",o):ot.createElement(ot.Fragment,null,o," ",v)):ot.createElement(ot.Fragment,null,o({chevron:v}));return ot.createElement("div",{className:e},u?ot.createElement("div",{className:wn(t,"clickable","as-link"),onClick:()=>{h(!g),i&&Ss.setExpanded(m,!g),null==d||d(!g)}},A):A,g&&u&&ot.createElement("div",{className:a},u))};class Ds{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}Ds.labels=new Map;const Is=ot.createElement("div",{className:"close-button"},ot.createElement(Dn,{to:"^"},ot.createElement("a",{className:"btn btn-link"},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),Fs=ot.createElement("div",{className:"header"},ot.createElement("div",{className:"horizontal center middle spinner-container"},ot.createElement(Es,null))),Ts=e=>ot.createElement("div",{className:"details-panel"},e.loading?Fs:e.children);Ts.Header=e=>ot.createElement("div",{className:"header"},Is,ot.createElement("div",{className:"header-text horizontal middle"},e.icon,ot.createElement("h3",{className:"horizontal middle space-between flex-1"},e.name)),ot.createElement("div",null,e.children));class Qs extends ot.Component{constructor(){super(...arguments),this.handleRef=e=>{e&&(this.popover=e)}}componentWillReceiveProps(e){this.popover&&(this.props.value&&!e.value&&this.popover.hide(),!this.props.value&&e.value&&this.popover.show())}render(){const{delayShow:e,id:t,placement:n,template:a,value:i}=this.props,r=t||i||"tooltip";let s=ot.createElement(Zt,{id:r},ot.createElement(Br,{message:i}));a&&(s=ot.createElement(Zt,{id:r},a));const o=i&&i.length>0||a?["hover","focus"]:[];return ot.createElement(Xt,{ref:this.handleRef,delayShow:e,placement:n,overlay:s,trigger:o},this.props.children)}}Qs.defaultProps={placement:"top",value:""};const Ps=e=>{const{error:t,...n}=e;return t&&(n.className=`${n.className||""} invalid`),n.type=n.type||"text",ot.createElement(Qs,{id:n.name,value:e.error,placement:"right"},ot.createElement("input",{...n}))},Rs=(e,t)=>{const n=`Value must be a${t?" ":" positive "}number or a SpEL expression.`,a=Number(e);if(Number.isNaN(a)){const t=String(e),a=t?t.indexOf("${"):-1;return-1!==a&&t.includes("}",a)?null:n}return!t&&a<0?n:null},Us=jn((({render:e,formik:t})=>e(t)));const zs=ot.forwardRef((function(e,t){const n=ot.useRef(),a=t||n,[i,r]=ot.useState(!1),[s,o]=ot.useState(!1);return ot.useEffect((()=>{if(i){const t=a.current,n={};Ji(e.initialValues,(e=>g(n,e,!0)),!0),t.setTouched(n),t.getFormikActions().validateForm(),o(!0)}}),[i]),ot.createElement(Ln,{ref:function(e){a.current=e,i||r(!0)},...e,isInitialValid:e.isInitialValid||(()=>a.current&&0===Object.keys(a.current.state.errors).length),render:t=>s&&e.render&&e.render(t)})}));class Gs extends ot.Component{constructor(e){super(e);const{value:t}=e;this.state={value:t}}componentDidUpdate(){if(!this.props.onChange)return;const{value:e,isEqual:t}=this.props,{value:n}=this.state;t(e,n)||(this.setState({value:e}),this.props.onChange(e,n))}render(){return this.props.children||null}}function js(){const e=ct("FIRST_RENDER");return lt((()=>(e.current="MOUNTED",()=>{e.current="UNMOUNTED"}))),e}Gs.defaultProps={isEqual:(e,t)=>e===t};function Ls(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!B(t)||!B(n);return ot.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},c&&ot.createElement("div",{className:"StandardFieldLayout_Label sm-label-right"},t," ",n),ot.createElement("div",{className:"flex-grow"},ot.createElement("div",{className:"flex-container-v margin-between-md"},ot.createElement("div",{className:"flex-container-h baseline space-between margin-between-lg StandardFieldLayout_Contents"},a," ",i),!s&&ot.createElement(Dr,{message:o,type:l}))))}oi(".StandardFieldLayout + .StandardFieldLayout {\n margin-top: 6px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 120px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Contents > *:first-child {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n");const Os=ot.createContext(Ls),{Provider:Ys,Consumer:$s}=Os,Hs=ot.createContext(!1);class Vs{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}function Js(e){return ot.createElement("span",null,Vs.get(e.label))}Vs.labels=new Map,di.useClassicFirewallLabels&&(Vs.register("firewall","security group"),Vs.register("firewalls","security groups"),Vs.register("Firewall","Security Group"),Vs.register("Firewalls","Security Groups"));class Ws{static getHelpField(e){let t=this.helpFields.get(e);return t&&(t=t.replace(/{{(.+?)}}/g,((e,t)=>Vs.get(t)))),t||null}static register(e,t){this.overrides.has(e)||this.helpFields.set(e,t)}static registerOverride(e,t){this.register(e,t),this.overrides.add(e)}}Ws.helpFields=new Map,Ws.overrides=new Set;oi(".HoverablePopover {\n display: inline;\n -webkit-text-decoration: dotted underline var(--color-dovegray);\n text-decoration: dotted underline var(--color-dovegray);\n}\n");class Ks extends ot.Component{constructor(e){super(e),this.mouseEvents$=new At,this.hidePopoverEvents$=new At,this.destroy$=new At,this.targetRef=ot.createRef(),this.handleMouseEvent=e=>{this.mouseEvents$.next(e)},this.rendererRefCallback=e=>{if(e){const{clientWidth:t,clientHeight:n}=ln.findDOMNode(e),a=this.targetRef.current.getBoundingClientRect(),i=window.innerHeight-a.bottom,r=window.innerWidth-a.right;let s;switch(this.props.placement){case"top":s=n>a.top&&a.top<i?"bottom":void 0;break;case"bottom":s=n>i&&i<a.top?"top":void 0;break;case"left":s=t>a.left&&a.left<r?"right":void 0;break;case"right":s=t>r&&r<a.left?"left":void 0}this.setState({placementOverride:s})}},this.Wrapper=({children:e,...t})=>{const{svgMode:n}=this.props;return n?ot.createElement("g",{...t,ref:this.targetRef},e):ot.createElement("div",{...t,ref:this.targetRef},e)},this.state={popoverIsOpen:!1,animation:!0}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=["mouseenter","mouseover"],t=this.mouseEvents$.pipe(St((t=>{const n=e.includes(t.type);return{shouldOpen:n,eventDelay:n?this.props.delayShow:this.props.delayHide,animation:!0}}))),n=this.hidePopoverEvents$.pipe(St((()=>({shouldOpen:!1,eventDelay:0,animation:!1}))));bt(t,n).pipe(St((({shouldOpen:e,eventDelay:t,animation:n})=>Et({shouldOpen:e,animation:n}).pipe(Ft(t)))),Dt((e=>e)),Tt((({shouldOpen:e})=>e!==this.state.popoverIsOpen)),It(this.destroy$)).subscribe((({shouldOpen:e,animation:t})=>this.setPopoverOpen(e,t)))}setPopoverOpen(e,t=!0){this.setState({animation:t,popoverIsOpen:e});const n=e?this.props.onShow:this.props.onHide;n&&n()}render(){const{Component:e,template:t,placement:n,container:a,hOffsetPercent:i,id:r,title:s,className:o}=this.props,{popoverIsOpen:l,animation:c,placementOverride:p}=this.state,{Wrapper:d}=this,u=e?ot.createElement(e,{...this.props,hidePopover:()=>this.hidePopoverEvents$.next()}):t;return ot.createElement(d,{className:wn("HoverablePopover",this.props.wrapperClassName),onMouseEnter:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent},this.props.children,ot.createElement(_t,{show:l,animation:c,placement:p||n,target:this.targetRef.current,container:a,shouldUpdatePosition:!0},ot.createElement(qs,{ref:this.rendererRefCallback,onMouseOver:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent,offsetPercent:i,id:r,title:s,className:o},u)))}}Ks.defaultProps={placement:"top",id:pr.generateUuid(),delayShow:0,delayHide:300};class qs extends ot.Component{constructor(){super(...arguments),this.state={}}componentDidMount(){this.setState(this.getState(this.props))}componentWillReceiveProps(e){this.setState(this.getState(e))}getState(e){const{offsetPercent:t}=e,n=e=>{const t=/(\d+(?:\.\d+)?)%/.exec(e);return t?parseFloat(t[1])/100:.5},a=n(t)-n(e.arrowOffsetLeft);return{offset:0-ln.findDOMNode(this).clientWidth*a}}render(){const{offsetPercent:e,...t}=this.props,{offset:n}=this.state;if(n){const{style:a}=this.props,i=parseInt(`${a.left}`,10)+n,r={...a,left:i};return ot.createElement(en,{...t,style:r,arrowOffsetLeft:e})}return ot.createElement(en,{...t})}}function Xs(e){const{id:t,fallback:n,content:a}=e;let i=a;t&&!i&&(i=Ws.getHelpField(t)||n);return ot.createElement(Br,{message:i,options:{ADD_ATTR:["target"]},trim:!0})}function Zs(e){const{content:t,expand:n,fallback:a,id:i,label:r,placement:s}=e,[o,l]=ot.useState(),c=ot.createElement("i",{className:"small glyphicon glyphicon-question-sign"}),p=ot.useContext(Hs),d=B(n)?p:n;if(!i&&!t)return null;const u=ot.createElement(Xs,{content:t,fallback:a,id:i}),m=ot.createElement(Ks,{placement:s||"top",template:u,onShow:()=>l(Date.now()),onHide:()=>{Date.now()-o>500&&Ui.log({action:"Help contents viewed",category:"Help",data:{label:e.id||e.content}})}},ot.createElement("span",{className:"clickable help-field"}," ",r||c," "));if(r)return ot.createElement("div",{className:"text-only"},!d&&u&&m);{const e=ot.createElement("div",{className:"help-contents small"}," ",u," ");return ot.createElement("div",{style:{display:"inline-block"}},!d&&u&&m,d&&u&&e)}}class _s{static createScheduler(e=di.pollSchedule||3e4){let t=new At,n=(new Date).getTime(),a=null,i=!1,r=yt(e,e);const s=()=>{i||(_e.cancel(a),n=(new Date).getTime(),t.next(!0),a=null)};r.subscribe(s);const o=()=>{Xe.debug("auto refresh suspended"),i=!0},l=e=>{i=!1,a=a||_e(s,e)},c=()=>{i=!1;const t=(new Date).getTime();Xe.debug("auto refresh resumed"),t-n>e?s():l(e-(t-n))},p=()=>{Xe.debug("document visibilityState changed to: ",document.visibilityState),"visible"===document.visibilityState?c():o()};return document.addEventListener("visibilitychange",p),at.addEventListener("offline",o),at.addEventListener("online",c),t.next(!0),{subscribe:t.subscribe.bind(t),scheduleImmediate:()=>{s(),i=!0,l(e)},unsubscribe:()=>{i=!0,t&&t.unsubscribe(),t=null,r=null,_e.cancel(a),document.removeEventListener("visibilitychange",p),at.removeEventListener("offline",o),at.removeEventListener("online",c)}}}}class eo{static publish(e){Kn.isActive(e.key)?Kn.update(e.key,{render:e.content,...e.options}):Kn(e.content,{toastId:e.key,...e.options})}static clear(e){Kn.dismiss(e)}}class to{static initialize(){Xe.debug("Deck version",this.currentVersion.version,"created",rr(this.currentVersion.created)),this.scheduler=_s.createScheduler(),this.scheduler.subscribe((()=>this.checkVersion()))}static checkVersion(){const e=`/version.json?_=${Date.now()}`;We.get(e).then((e=>this.versionRetrieved(e))).catch((()=>{}))}static versionRetrieved(e){const t=e.data;t.version===this.currentVersion.version?this.newVersionSeenCount=0:(this.newVersionSeenCount++,this.newVersionSeenCount>5&&(Xe.debug("New Deck version:",t.version,"created",rr(t.created)),eo.publish({key:"newVersion",action:"create",content:ot.createElement("div",null,"A new version of Spinnaker is available"," ",ot.createElement("a",{role:"button",className:"action",onClick:()=>document.location.reload(!0)},"Refresh"))}),this.scheduler.unsubscribe()))}}to.currentVersion=Wn,to.newVersionSeenCount=0;oi(".help-menu {\n border: 0;\n}\n.help-menu .dropdown-toggle,\n.help-menu .dropdown-toggle:active {\n font-size: 14px;\n font-weight: 200;\n margin: 0;\n border: 0;\n background: transparent;\n border-radius: 0;\n color: var(--color-white);\n}\n.help-menu .dropdown-toggle .caret,\n.help-menu .dropdown-toggle:active .caret {\n margin-left: 3px;\n}\n.help-menu .dropdown.open .dropdown-toggle {\n background-color: transparent;\n text-decoration: none;\n color: var(--color-white);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.help-menu .dropdown-menu {\n border: 0;\n}\n");const no="https://spinnaker.io/docs",ao=()=>di.feedback&&di.feedback.url?ot.createElement(an,{href:di.feedback.url,target:"_blank"},ot.createElement("i",{className:di.feedback.icon||"fa fa-envelope"}),"Β ",di.feedback.text||"Send feedback"):null,io=()=>di.additionalHelpLinks&&di.additionalHelpLinks.length?ot.createElement(ot.Fragment,null,di.additionalHelpLinks.map(((e,t)=>ot.createElement(an,{href:e.url,key:t,target:"_blank"},e.icon?ot.createElement("span",null,ot.createElement("i",{className:e.icon})," Β "):null,e.text||"Additional Help")))):null,ro=()=>{if(!di.version)return null;const e=di.version.replace(/\./g,"-"),t=di.changelogUrl.replace(":version",e);return ot.createElement(an,{href:t,target:"_blank"},"Spinnaker ",di.version)},so=()=>ot.createElement("li",{className:"help-menu"},ot.createElement(tn,{id:"help-menu-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-lg",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})),ot.createElement(tn.Menu,null,ot.createElement(ao,null),ot.createElement(io,null),ot.createElement(an,{href:no,target:"_blank"},"Docs"),ot.createElement(an,{divider:!0}),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(ro,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))),ot.createElement(tn,{id:"help-menu-dropdown-large",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-xs hidden-sm hidden-md",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})," Help"),ot.createElement(tn.Menu,null,ot.createElement(ao,null),ot.createElement(io,null),ot.createElement(an,{href:no,target:"_blank"},"Docs"),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(ro,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))));var oo;const lo={"core.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables in naming a cluster.","core.serverGroup.strategy":"The deployment strategy tells Spinnaker what to do with the previous version of the server group.","cluster.search":'\n Quickly filter the displayed server groups by the following fields:\n <ul>\n <li>Build # (e.g. <samp>#337</samp>)</li>\n <li>Jenkins host</li>\n <li>Jenkins job name</li>\n <li>Cluster (prefixed, e.g. <samp>cluster:myapp-int</samp>)\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Clusters (comma-separated list, e.g. <samp>clusters:myapp-int, myapp-test</samp>)\n <li>Server Group Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Load Balancer Name</li>\n <li>Instance ID</li>\n <li>Labels (comma-separated list of key-value pairs that must all apply to entity, e.g. <samp>labels:app=spinnaker, source=prod</samp>)</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all server groups in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>\n <p>To find a particular instance, enter the instance ID. Only the containing server group will be displayed, and the instance\n will be highlighted for you.</p>',"loadBalancer.search":'\n Quickly filter the displayed load balancers by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Instance ID</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all load balancers in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>',"securityGroup.search":"\n Filter by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Name</li>\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n </ul>","executions.search":"\n Quickly filter the displayed executions by the following fields:\n <ul>\n <li>Name</li>\n <li>Trigger</li>\n </ul>","pipeline.config.triggers.respectQuietPeriod":"\n <p>The quiet period is a system operator designated period of time when automated pipelines and deploys should not run.</p>","pipeline.config.expectedArtifact":"Artifacts required for trigger to execute. Only one of the artifacts needs to be present for the trigger to execute.","pipeline.config.artifact.help":"\n <p>There are certain types of triggers (e.g. Pub/Sub triggers) that can produce artifacts and inject them into the execution context for a pipeline.</p>\n <p>You can specify artifacts that your pipeline expects to be present in the execution context in this section.</p>","pipeline.config.artifact.missingPolicy":"\n <p>The behavior of the pipeline if the Artifact is missing from the pipeline execution.</p>","pipeline.config.artifact.name":"\n <p>The name of the Artifact.</p>","pipeline.config.artifact.type":"\n <p>The type of the Artifact, e.g. 'gcs/object' or 'rpm'.</p>","pipeline.config.lock.allowUnlockUi":"\n <p><strong>Checked</strong> - the pipeline can be unlocked via the Spinnaker UI.</p>\n <p><strong>Unchecked</strong> - the pipeline can only be unlocked via the Spinnaker API.</p>","pipeline.config.lock.description":"\n <p>Friendly description of why this pipeline is locked.</p>\n <p>Please include an email address or slack channel as appropriate.</p>","pipeline.config.optionalStage":"\n <p>When this option is enabled, stage will only execute when the supplied expression evaluates true.</p>\n <p>The expression <em>does not</em> need to be wrapped in ${ and }.</p>\n <p>If this expression evaluates to false, the stages following this stage will still execute.</p>","pipeline.config.checkPreconditions.failPipeline":"\n <p><strong>Checked</strong> - the overall pipeline will fail whenever this precondition is false.</p>\n <p><strong>Unchecked</strong> - the overall pipeline will continue executing but this particular branch will stop.</p>","pipeline.config.checkPreconditions.failureMessage":"\n <p> This failure message will be shown to the user if the precondition evaluates to false. </p>","pipeline.config.checkPreconditions.expectedSize":"Number of server groups in the selected cluster","pipeline.config.checkPreconditions.expression":'\n <p>Value must evaluate to "true".</p>\n <p>Use of the <b>Spring Expression Language</b> allows for complex evaluations.</p>',"pipeline.config.deploy.template":"\n <p>Select an existing cluster to use as a template for this deployment, and we'll pre-fill\n the configuration based on the newest server group in the cluster.</p>\n <p>If you want to start from scratch, select \"None\".</p>\n <p>You can always edit the cluster configuration after you've created it.</p>","pipeline.config.expectedArtifact.matchArtifact":'\n <p>\n This specifies which fields in your incoming artifact to match against. Every field that\n you supply will be used to match against all incoming artifacts. If all specified fields\n match, the incoming artifact is bound to your pipeline context.\n </p>\n <p>\n The field comparisons are done against the incoming artifact. Example: if you are parsing\n artifacts from pub/sub messages via a Jinja template, the comparison will be done after\n the pub/sub -> Spinnaker artifact translation.\n </p>\n <p>For example, if you want to match against any GCS object, only supply <b>type</b> = gcs/object. If you also want to restrict the matches by other fields, include those as well.</p>\n <p>Regex is accepted, so you could for example match on a filepath like so <b>name</b> = .*\\.yaml to match all incoming YAML files.</p>\n <p>See the <a href="https://www.spinnaker.io/reference/artifacts/in-pipelines/#expected-artifacts">reference</a> for more information.</p>',"pipeline.config.expectedArtifact.ifMissing":"\n <p>If no artifact was supplied by your trigger to match against this expected artifact, you have a few options:\n <ol>\n <li>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</li>\n <li>If option 1 fails, or isn't specified, you can provide a default artifact with the required fields to use instead.</li>\n <li>Fail the pipeline if options 1 or 2 fail or aren't selected.</li>\n </ol>\n </p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.usePriorExecution":"\n <p>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</p>","pipeline.config.expectedArtifact.defaultArtifact":"\n <p>If your artifact either wasn't supplied from a trigger, or it wasn't found in a prior execution, the artifact specified below will end up in your pipeline's execution context.</p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.gcs.name":"\n <p>The GCS object name, in the form <code>gs://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultGcs.reference":"\n <p>The GCS object name, <i>optionally</i> appending the version. An example: <code>gs://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.s3.name":"\n <p>The S3 object name, in the form <code>s3://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultS3.reference":"\n <p>The S3 object name, <i>optionally</i> appending the version. An example: <code>s3://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.oracle.name":"\n <p>The Oracle object artifact name, in the form <code>oci://bucket/path/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultOracle.reference":"\n <p>The Oracle object artifact name, <i>optionally</i> appending the version. An example: <code>oci://bucket/file.yml#9ce463aa-d843-4438-b206-5365cd643e2e</code></p>","pipeline.config.expectedArtifact.docker.name":"\n <p>The Docker image name you want to trigger on changes to. By default, this does <i>not</i> include the image tag or digest, only the registry and image repository.</p>","pipeline.config.expectedArtifact.defaultDocker.reference":"\n <p>The fully-qualified docker image to deploy. An example: <code>gcr.io/project/image@sha256:59bb771c86</code></p>","pipeline.config.expectedArtifact.git.name":"\n <p>The file's path from the git root, in the form 'path/to/file.json'</p>","pipeline.config.expectedArtifact.defaultGithub.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGithub.reference":'\n <p>The GitHub API content url the artifact lives under. The domain name may change if you\'re running GHE.</p>\n <p>An example for GitHub.com is <code>https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH</code>. An example for GitHub Enterprise is <code>https://github.domain.com/api/v3/repos/$ORG/$REPO/contents/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/github-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultGitlab.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGitlab.reference":'\n <p>The Gitlab API file url the artifact lives under. The domain name may change if you\'re running your own Gitlab server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/gitlab-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.gitrepo.url":"<p>The location of your Git repository.</p>","pipeline.config.expectedArtifact.gitrepo.branch":"<p>The branch of the repository you want to use.</p>","pipeline.config.expectedArtifact.gitrepo.checkoutSubpath":"<p>Check this if you want to specify a subpath; doing so will reduce the size of the generated artifact.</p>","pipeline.config.expectedArtifact.gitrepo.subpath":"\n <p>The subpath within the Git repository you desire to checkout.</p>\n <p>e.g.: <b>examples/wordpress/mysql/</b></p>","pipeline.config.expectedArtifact.helm.account":"\n <p>The account contains url the charts can be found</p>","pipeline.config.expectedArtifact.helm.name":"\n <p>The name of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.helm.version":"\n <p>The version of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.defaultBitbucket.reference":'\n <p>The Bitbucket API file url the artifact lives under. The domain name may change if you\'re running your own Bitbucket server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://api.bitbucket.org/1.0/repositories/$ORG/$REPO/raw/$VERSION/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/bitbucket-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultBitbucket.filepath":"\n <p>The file path within your repo. path/to/file.yml is an example.</p>","pipeline.config.trigger.helm.chart":"The Helm chart name.","pipeline.config.trigger.helm.version":"The Helm chart version, as semver.","pipeline.config.trigger.helm.version.manual":"The Helm chart version, as an exact version.","pipeline.config.trigger.webhook.source":"\n <p>Determines the target URL required to trigger this pipeline, as well as how the payload can be transformed into artifacts.</p>\n ","pipeline.config.trigger.webhook.payloadConstraints":'\n <p>When provided, only a webhook with a payload containing at least the specified key/value pairs will be allowed to trigger this pipeline. For example, if you wanted to lock down the systems/users that can trigger this pipeline via this webhook, you could require the key "secret" and value "something-secret" as a constraint.</p>\n <p>The constraint values may be supplied as regex.</p>\n ',"pipeline.config.trigger.pubsub.attributeConstraints":"\n <p>Pubsub messages can have system-specific metadata accompanying the payload called <b>attributes</b>.</p>\n <p>When provided, only a pubsub message with attributes containing at least the specified key/value pairs will be allowed to trigger this pipeline.</p>\n <p>The constraint value is a java regex string.</p>\n ","pipeline.config.trigger.pubsub.payloadConstraints":'\n <p>\n When provided, only a pubsub message with a payload containing at least the specified\n key/value pairs will be allowed to trigger this pipeline. For example, if you wanted\n to restrict the systems/users that can trigger this pipeline via this pubsub\n subscription, you could require the key "secret" and value "something-secret" as a constraint.\n </p>\n <p>\n The key/value pairs are matched against the unprocessed payload body, prior to any\n transformation using, for example, a Jinja template in a pubsub subscription configuration.\n </p>\n <p>The constraint value is a java regex string.</p>\n ',"pipeline.config.findArtifactFromExecution.considerExecutions":'\n <p>Select the types of executions to consider. When no selection is made, the default is "any execution".</p>\n <p>This will always evaluate to the most recent execution matching your provided criteria.</p>\n ',"pipeline.config.tags":"<p>Pipeline tags let you filter pipelines/executions by addition dimensions in the executions page</p>","loadBalancer.advancedSettings.healthTimeout":"<p>Configures the timeout, in seconds, for reaching the healthCheck target. Must be less than the interval.</p><p> Default: <b>5</b></p>","loadBalancer.advancedSettings.idleTimeout":"<p>Configures the idle timeout, in seconds. If no data has been sent or received by the time that the idle timeout period elapses, the load balancer closes the connection. </p><p> Default: <b>60</b></p>","loadBalancer.advancedSettings.deletionProtection":"<p>To prevent your load balancer from being deleted accidentally, you can enable deletion protection.</p><p> Default: <b>false</b></p>","loadBalancer.advancedSettings.healthInterval":"<p>Configures the interval, in seconds, between ELB health checks. Must be greater than the timeout.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.healthyThreshold":"<p>Configures the number of healthy observations before reinstituting an instance into the ELBβs traffic rotation.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.unhealthyThreshold":"<p>Configures the number of unhealthy observations before deservicing an instance from the ELB.</p><p>Default: <b>2</b></p>","loadBalancer.advancedSettings.loadBalancingCrossZone":"<p>Cross-zone load balancing distributes traffic evenly across all targets in the Availability Zones enabled for the load balancer.</p><p> Default: <b>True</b></p>","loadBalancer.advancedSettings.albIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"loadBalancer.advancedSettings.nlbIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. This option is only valid for NLBs which are external and only have Ip targets (not instance targets). If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"pipeline.config.resizeAsg.action":"\n <p>Configures the resize action for the target server group.\n <ul>\n <li><b>Scale Up</b> increases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale Down</b> decreases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale to Cluster Size</b> increases the size of the target server group to match the largest server group in the cluster, optionally with an incremental or percentage additional capacity. Additional capacity will not exceed the existing maximum size.</li>\n <li><b>Scale to Exact Size</b> adjusts the size of the target server group to match the provided capacity</li>\n </ul></p>","pipeline.config.resizeAsg.cluster":"<p>Configures the cluster upon which this resize operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.modifyScalingProcess.cluster":"<p>Configures the cluster upon which this modify scaling process operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.enableAsg.cluster":"<p>Configures the cluster upon which this enable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.disableAsg.cluster":"<p>Configures the cluster upon which this disable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.destroyAsg.cluster":"<p>Configures the cluster upon which this destroy operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.jenkins.trigger.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.jenkins.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.jenkins.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.job.isFiltered":"<p>Note that for performance reasons, not all jobs are displayed. Please use the search field to limit the number of jobs.</p>","pipeline.config.travis.trigger.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.travis.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.bake.skipRegionDetection":"\n <p>By default, Spinnaker will detect regions to bake in from downstream deploy stages.</p>\n <p>To prevent failed deploys from accidentally missed regions during the bake process.</p>\n <p>This setting will disable this detection mechanism.</p>","pipeline.config.bake.package":'\n <p>The name of the package you want installed (without any version identifiers).</p>\n <p>If your build produces a deb file named "myapp_1.27-h343", you would want to enter "myapp" here.</p>\n <p>If there are multiple packages (space separated), then they will be installed in the order they are entered.</p>',"pipeline.config.bake.packageArtifacts":"\n <p>Artifacts representing packages you want installed.</p>\n <p>These artifacts must be either deb or rpm packages, whichever applies to the operating system on your base image.</p>\n <p>Package artifacts are installed in order, after any packages in the 'Packages' field are installed.</p>","pipeline.config.docker.bake.targetImage":"<p>The name of the resulting docker image.</p>","pipeline.config.docker.bake.targetImageTag":"<p>The tag of the resulting docker image, defaults to commit hash if available.</p>","pipeline.config.docker.bake.organization":"<p>The name of the organization or repo to use for the resulting docker image.</p>","pipeline.config.bake.baseAmi":"<p>(Optional) If Base AMI is specified, this will be used instead of the Base OS provided","pipeline.config.bake.amiSuffix":"<p>(Optional) String of date in format YYYYMMDDHHmm, default is calculated from timestamp,</p>","pipeline.config.bake.amiName":"<p>(Optional) Default = $package-$arch-$ami_suffix-$store_type</p>","pipeline.config.bake.templateFileName":"<p>(Optional) The explicit packer template to use, instead of resolving one from rosco's configuration.</p>","pipeline.config.bake.varFileName":"<p>(Optional) The name of a json file containing key/value pairs to add to the packer command.</p>","pipeline.config.bake.extendedAttributes":"<p>(Optional) Any additional attributes that you want to pass onto rosco, which will be injected into your packer runtime variables.</p>","pipeline.config.cf.createservice.updatable":"<p>If checked, this will try to update the existing service. If not, if the service exists this stage will succeed and not try to update.</p>","pipeline.config.cf.createservice.versioned":"<p>If checked, this stage should always deploy a new service with an incremented version number (mysql-v001).</p>","pipeline.config.manualJudgment.instructions":"<p>(Optional) Instructions are shown to the user when making a manual judgment.</p><p>May contain HTML.</p>","pipeline.config.manualJudgment.propagateAuthentication":"\n <p><strong>Checked</strong> - the pipeline will continue with the permissions of the approver.</p>\n <p><strong>Unchecked</strong> - the pipeline will continue with its current permissions.</p>","pipeline.config.manualJudgment.judgmentInputs":'\n <p>(Optional) Entries populate a dropdown displayed when performing a manual judgment.</p>\n <p>The selected value can be used in a subsequent <strong>Check Preconditions</strong> stage to determine branching.</p>\n <p>For example, if the user selects "rollback" from this list of options, that branch can be activated by using the expression:\n <samp class="small">execution.stages[n].context.judgmentInput=="rollback"</samp></p>',"pipeline.config.bake.manifest.expectedArtifact":"<p>This is the template you want to render.</p>","pipeline.config.bake.manifest.overrideExpressionEvaluation":'<p>Explicitly evaluate SpEL expressions in overrides just prior to manifest baking. Can be paired with the "Skip SpEL evaluation" option in the Deploy Manifest stage when baking a third-party manifest artifact with expressions not meant for Spinnaker to evaluate as SpEL.</p>',"pipeline.config.bake.manifest.templateRenderer":"<p>This is the engine used for rendering your manifest.</p>","pipeline.config.bake.manifest.helm.chartFilePath":"\n <p>This is the relative path to the Chart.yaml file within your Git repo.</p>\n <p>e.g.: <b>helm/my-chart/Chart.yaml</b></p>","pipeline.config.bake.manifest.helm.rawOverrides":"Use <i>--set</i> instead of <i>--set-string</i> when injecting override values. Values injected using <i>--set</i> will be converted to primitive types by Helm.","pipeline.config.bake.manifest.kustomize.filePath":"\n <p>This is the relative path to the kustomization.yaml file within your Git repo.</p>\n <p>e.g.: <b>examples/wordpress/mysql/kustomization.yaml</b></p>","pipeline.config.bake.cf.manifest.name":"<p> Name should be the same as the expected artifact in the Produces Artifact section. </p>","pipeline.config.bake.cf.manifest.templateArtifact":"\n <p> This is the manifest template needing resolution. Variables in this template should use double parentheses notation.</p>\n <p>e.g.: </p>\n <p>---</p>\n <p>buildpack: ((javabuildpack)) </p>\n <p>foo: ((some.nestedKey)) </p>","pipeline.config.bake.cf.manifest.varsArtifact":'\n <p> These are the variables that will be substituted in the manifest template. These should be yaml files and follow standard convention. </p>\n <p>e.g.: </p>\n <p>---</p>\n <p>javabuildpack: java_buildpack_offline </p>\n <p>some: </p>\n <p style="padding-left: 1em">nestedKey: bar </p>',"pipeline.config.haltPipelineOnFailure":"Immediately halts execution of all running stages and fails the entire execution.","pipeline.config.haltBranchOnFailure":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run.","pipeline.config.haltBranchOnFailureFailPipeline":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run. The pipeline will be marked as failed once complete.","pipeline.config.ignoreFailure":"Continues execution of downstream stages, marking this stage as failed/continuing.","pipeline.config.jenkins.markUnstableAsSuccessful.true":"If Jenkins reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.jenkins.markUnstableAsSuccessful.false":"\n If Jenkins reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.travis.markUnstableAsSuccessful.true":"If Travis reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.travis.markUnstableAsSuccessful.false":"\n If Travis reports the build status as UNSTABLE,\n Spinnaker will mark the stage as TERMINAL; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.wercker.markUnstableAsSuccessful.true":"If Wercker reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.wercker.markUnstableAsSuccessful.false":"\n If Wercker reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.cron.expression":'<strong>Format (Year is optional)</strong><p><samp>Seconds Minutes Hour DayOfMonth Month DayOfWeek (Year)</samp></p><p><strong>Example: every 30 minutes</strong></p><samp>0 0/30 * * * ?</samp><p><strong>Example: every Monday at 10 am</strong></p><samp>0 0 10 ? * 2</samp><p><strong>Note:</strong> values for "DayOfWeek" are 1-7, where Sunday is 1, Monday is 2, etc. You can also use MON,TUE,WED, etc.',"cluster.rollback.explicit":"\n <p>A server group running the previous build will be enabled and appropriately resized.</p>\n <p>The current server group will be disabled after the resize completes.</p>\n ","cluster.rollback.previous_image":"\n <p>The current server group will be cloned with the previous build.</p>\n ","pipeline.config.findAmi.cluster":"The cluster to look at when selecting the image to use in this pipeline.","pipeline.config.findAmi.imageNamePattern":"A regex used to match the name of the image. Must result in exactly one match to succeed. Empty is treated as match any.","pipeline.config.dependsOn":"Declares which stages must be run <em>before</em> this stage begins.","pipeline.config.parallel.cancel.queue":"<p>If concurrent pipeline execution is disabled, then the pipelines that are in the waiting queue will get canceled when the next execution starts. <br><br>Check this box if you want to keep them in the queue.</p>","pipeline.config.timeout":"\n <p>Allows you to force the stage to fail if its running time exceeds a specific length.</p>\n <p><b>Note:</b> By default, Spinnaker will use sensible timeouts that depend on the stage type and the operations the stage needs to perform at runtime. These defaults can vary based on chosen configuration and other external factors.\n </p>","pipeline.config.trigger.runAsUser":"The current user must have access to the specified service account, and the service account must have access to the current application. Otherwise, you'll receive an 'Access is denied' error.","pipeline.config.trigger.authorizedUser":"The current user must have the permission to approve the manual judgment stage. Otherwise, you'll not be able continue to the next pipeline stage.","pipeline.config.script.repoUrl":"<p>Path to the repo hosting the scripts in Stash. (e.g. <samp>CDL/mimir-scripts</samp>). Leave empty to use the default.</p>","pipeline.config.script.repoBranch":"<p>Git Branch. (e.g. <samp>master</samp>). Leave empty to use the master branch.</p>","pipeline.config.script.path":"<p>Path to the folder hosting the scripts in Stash. (e.g. <samp>groovy</samp>, <samp>python</samp> or <samp>shell</samp>)</p>","pipeline.config.script.command":"<p>Executable script and parameters. (e.g. <samp>script.py --ami-id ${deploymentDetails[0].ami}</samp> ) </p>","pipeline.config.script.image":"<p>(Optional) image passed down to script execution as IMAGE_ID</p>","pipeline.config.script.account":"<p>(Optional) account passed down to script execution as ENV_PARAM</p>","pipeline.config.script.region":"<p>(Optional) region passed down to script execution as REGION_PARAM</p>","pipeline.config.script.cluster":"<p>(Optional) cluster passed down to script execution as CLUSTER_PARAM</p>","pipeline.config.script.cmc":"<p>(Optional) cmc passed down to script execution as CMC</p>","pipeline.config.script.propertyFile":"<p>(Optional) The name to the properties file produced by the script execution to be used by later stages of the Spinnaker pipeline. </p>","pipeline.config.docker.trigger.tag":"<p>(Optional) If specified, only the tags that match this Java Regular Expression will be triggered. Leave empty to trigger builds on any tag pushed.</p><p>Builds will not be triggered off the latest tag or updates to existing tags.</p>","pipeline.config.docker.trigger.digest":"<p>The SHA256 hash of the image.</p>","pipeline.config.git.trigger.branch":"<p>(Optional) If specified, only pushes to the branches that match this Java Regular Expression will be triggered. Leave empty to trigger builds for every branch.</p>","pipeline.config.git.trigger.githubSecret":'<p>(Optional, but recommended) If specified, verifies GitHub as the sender of this trigger. See <a target="_blank" href="https://developer.github.com/webhooks/securing/">GitHub docs</a> for more information.</p>',"serverGroup.ipv6":"<p>Associating an IPv6 address to nodes allows for ingress and egress communication over IPv6. Most modern software supports IPv6 and enablement is transparent. This is an incremental addition to IPv4 and will not remove the ability for connectivity over IPv4.</p>","serverGroupCapacity.useSourceCapacityTrue":"\n <p>Spinnaker will use the current capacity of the existing server group when deploying a new server group.</p>\n <p>This setting is intended to support a server group with auto-scaling enabled, where the bounds and desired capacity are controlled by an external process.</p>\n <p>In the event that there is no existing server group, the deploy will fail.</p>","serverGroupCapacity.useSourceCapacityFalse":"<p>The specified capacity is used regardless of the presence or size of an existing server group.</p>","strategy.redblack.scaleDown":"\n <p>Resizes the target server group to zero instances before disabling it.</p>\n <p>Select this if you wish to retain the launch configuration for the old server group without running any instances.</p>","strategy.redblack.maxRemainingAsgs":'\n <p><b>Optional</b>: indicates the maximum number of server groups that will remain in this cluster - including the newly created one.</p>\n <p>If you wish to destroy all server groups except the newly created one, select "Highlander" as the strategy.</p>\n <p><strong>Minimum value:</strong> 2</p>',"strategy.redblack.rollback":"\n <p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>\n <p>The rollback <strong>will only be</strong> initiated if instances in the new server group fail to launch and become healthy.</p>\n <p>Should an error occur disabling or destroying other server groups in the cluster, the new server group <strong>will not be</strong> rolled back.</p>\n ","strategy.rollingPush.relaunchAll":"<p>Incrementally terminates each instance in the server group, waiting for a new one to come up before terminating the next one.</p>","strategy.rollingPush.totalRelaunches":"<p>Total number of instances to terminate and relaunch.</p>","strategy.rollingPush.concurrentRelaunches":"<p>Number of instances to terminate and relaunch at a time.</p>","strategy.rollingPush.concurrentRelaunches.migration":"\n <p>Number of instances to terminate and relaunch at a time.</p>\n <p>Can be expressed as an explicit instance count or as a percentage of instances in server group being migrated.</p>\n ","strategy.rollingPush.order":"\n <p>Determines the order in which instances will be terminated.\n <ul><li><b>Oldest</b> will terminate the oldest instances first</li>\n <li><b>Newest</b> will terminate those most recently launched.</li></ul></p>","strategy.rollingRedBlack.targetPercentages":"<p>Rolling red black will slowly scale up the new server group. It will resize the new server group by each percentage defined.</p>","strategy.rollingRedBlack.rollback":"<p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>","strategy.monitored.deploySteps":"<p>Monitored Deploy will scale up the new server group as specified by these per cent steps. After each step, the health of the new server group will be evaluated by the specified deployment monitor.</p>","strategy.monitored.rollback":"<p>If deploy fails, disable the new server group and ensure that the previous server group is active and restored to its original capacity.</p>","strategy.monitored.destroyFailedAsg":"<p>If deploy fails and rollback succeeds destroys the server group that failed the deploy instead of just disabling it.</p>","loadBalancers.filter.serverGroups":"\n <p>Displays all server groups configured to use the load balancer.</p>\n <p>If the server group is configured to <em>not</em> add new instances to the load balancer, it will be grayed out.</p>","loadBalancers.filter.instances":"\n <p>Displays all instances in the context of their parent server group. The color of the instance icon\n indicates <em>only its health in relation to the load balancer</em>. That is, if the load balancer health check reports the instance\n as healthy, the instance will appear green - even if other health indicators (Discovery, other load balancers, etc.) report the instance\n as unhealthy.</p>\n <p>A red icon indicates the instance is failing the health check for the load balancer.</p>\n <p>A gray icon indicates the instance is currently detached from the load balancer.</p>","loadBalancers.filter.onlyUnhealthy":"\n <p>Filters the list of load balancers and server groups (if enabled)\n to only show load balancers with instances failing the health check for the load balancer.</p>","project.cluster.stack":"<p>(Optional field)</p><p>Filters displayed clusters by stack.</p><p>Enter <samp>*</samp> to include all stacks; leave blank to omit any clusters with a stack.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","project.cluster.detail":"<p>(Optional field)</p><p>Filters displayed clusters by detail.</p><p>Enter <samp>*</samp> to include all details; leave blank to omit any clusters with a detail.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","instanceType.storageOverridden":"<p>These storage settings have been cloned from the base server group and differ from the default settings for this instance type.</p>","instanceType.unavailable":"<p>This instance type is not available for the selected configuration.</p>","execution.forceRebake":"\n <p>By default, the bakery will <b>not</b> create a new image if the contents of the package and base image have not changed.\n Instead, it will return the previously baked image, though this behavior is not guaranteed.</p>\n <p>Select this option to force the bakery to create a new image, regardless of whether or not a matching image exists.</p>","execution.dryRun":"\n <p>Select this option to run the pipeline without <em>really</em> executing anything.</p>\n <p>This is a good way to test parameter-driven behavior, expressions, optional stages, etc.</p>","user.verification":'\n Typing into this verification field is annoying! But it serves as a reminder that you are\n changing something in an account deemed important, and prevents you from accidentally changing something\n when you meant to click on the "Cancel" button.',"pipeline.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the pipeline to complete","jenkins.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Jenkins job to complete","travis.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Travis job to complete","wercker.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Wercker job to complete","script.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the script to complete","markdown.examples":"\n Some examples of markdown syntax: <br/> `*italic*` <br/> `**bold**` <br/> `[link text](http://url-goes-here)`\n ","pipeline.config.webhook.payload":"JSON payload to be added to the webhook call.","pipeline.config.webhook.cancelPayload":"JSON payload to be added to the webhook call when it is called in response to a cancellation.","pipeline.config.webhook.waitForCompletion":"If not checked, we consider the stage succeeded if the webhook returns an HTTP status code 2xx, otherwise it will be failed. If checked, it will poll a status url (defined below) to determine the progress of the stage.","pipeline.config.webhook.statusUrlResolutionIsGetMethod":"Use the webhook's URL with GET method as status endpoint.","pipeline.config.webhook.statusUrlResolutionIsLocationHeader":"Pick the status url from the Location header of the webhook's response call.","pipeline.config.webhook.statusUrlResolutionIsWebhookResponse":"Pick the status url from the JSON returned by the webhook's response call.","pipeline.config.webhook.statusUrlJsonPath":"JSON path to the status url in the webhook's response JSON. (i.e. <samp>$.buildInfo.url</samp>)","pipeline.config.webhook.retryStatusCodes":"Normally, webhook stages only retry on 429 and 5xx status codes. <br>You can specify additional status codes here that will cause the monitor to retry (e.g. <samp>404, 418</samp>)","pipeline.config.webhook.waitBeforeMonitor":"Optional delay (in seconds) to wait before starting to poll the endpoint for monitoring status","pipeline.config.webhook.statusJsonPath":"JSON path to the status information in the webhook's response JSON (e.g. <samp>$.buildInfo.status</samp>). <br>If left empty, a 200 response from the status endpoint will be treated as a success.","pipeline.config.webhook.progressJsonPath":"JSON path to a descriptive message about the progress in the webhook's response JSON. (e.g. <samp>$.buildInfo.progress</samp>)","pipeline.config.webhook.successStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as SUCCESS status.","pipeline.config.webhook.canceledStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as CANCELED status.","pipeline.config.webhook.terminalStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as TERMINAL status.","pipeline.config.webhook.customHeaders":"Key-value pairs to be sent as additional headers to the service.","pipeline.config.webhook.failFastCodes":"Comma-separated HTTP status codes (4xx or 5xx) that will cause this webhook stage to fail without retrying.","pipeline.config.webhook.signalCancellation":"Trigger a specific webhook if this stage is cancelled by user or due to pipeline failure","pipeline.config.parameter.label":"(Optional): a label to display when users are triggering the pipeline manually","pipeline.config.parameter.description":"(Optional): if supplied, will be displayed to users as a tooltip\n when triggering the pipeline manually. You can include HTML in this field.","pipeline.config.parameter.pinned":"(Optional): if checked, this parameter will be always shown in a pipeline execution view, otherwise it'll be collapsed by default.","pipeline.config.parameter.pinAll":"(Optional): if checked, all parameters will be shown in a pipeline execution view.","pipeline.config.failOnFailedExpressions":"When this option is enabled, the stage will be marked as failed if it contains any failed expressions","pipeline.config.roles.help":"\n <p> When the pipeline is triggered using an automated trigger, these roles will be used to decide if the pipeline has permissions to access a protected application or account.</p>\n <ul>\n <li>\n To read from a protected application or account, the pipeline must have at least one role that has read access to the application or account.\n </li>\n <li>\n To write to a protected application or account, the pipeline must have at least one role that has write access to the application or account.\n </li>\n </ul>\n <p><strong>Note:</strong> To prevent privilege escalation vulnerabilities, a user must be a member of <strong>all</strong> of the groups specified here in order to modify, and execute the pipeline.</p>","pipeline.config.entitytags.namespace":"All tags have an associated namespace (<strong>default</strong> will be used if unspecified) that provides a means of grouping tags by a logical owner.","pipeline.config.entitytags.value":"Value can either be a string or an object. If you want to use an object, input a valid JSON string.","pipeline.config.entitytags.region":"(Optional) Target a specific region, use * if you want to apply to all regions.","pipeline.config.deliveryConfig.manifest":`(Optional) Name of the file with your Delivery Config manifest. Leave blank to use the default name (<strong><i>${null==(oo=di.managedDelivery)?void 0:oo.defaultManifest}</i></strong>).`,"pipeline.config.codebuild.source":"(Optional) Source of the build. It will be overridden to Spinnaker artifact if checked. If not checked, source configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceType":"(Optional) Type of the source. It can be specified explicitly; otherwise, it will be inferred from source artifact.","pipeline.config.codebuild.sourceVersion":'(Optional) Source version of the build. If not specified, the artifact version will be used. If artifact doesn\'t have a version, the latest version will be used. See the <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#CodeBuild-StartBuild-request-sourceVersion">CodeBuild reference</a> for more information.',"pipeline.config.codebuild.buildspec":"(Optional) Inline buildspec definition of the build. If not specified, buildspec configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySources":"(Optional) Secondary sources of the build. It can be overridden by adding Spinnaker Artifacts. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySourcesVersionOverride":"(Optional) Existing secondary sources version overrides. Pre-defined secondary source's version can be overriden by specifying the source identifier and version. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceIdentifier":"(Optional) Name of a pre-defined secondary source.","pipeline.config.codebuild.secondarySourceVersion":"Version of secondary source identifier to use. Required if specifying a source identifier.","pipeline.config.codebuild.image":"(Optional) Image in which the build will run. It can be overridden by specifying the name of the image. If not specified, image configured in CodeBuild project will be used.","pipeline.config.codebuild.envVar":"(Optional) Environment variables that will be propagated into the build."};Object.keys(lo).forEach((e=>Ws.register(e,lo[e])));function co(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!!t||!!n;return ot.createElement(Hs.Provider,{value:false},ot.createElement("div",{className:"sp-formItem"},ot.createElement("div",{className:"sp-formItem__left"},c&&ot.createElement("div",{className:"sp-formLabel"},t," ",n)),ot.createElement("div",{className:"sp-formItem__right"},ot.createElement("div",{className:"sp-form"},ot.createElement("span",{className:"flex-container-h margin-between-lg field"},ot.createElement("span",{className:"input"},a),i)),false,!s&&ot.createElement(Dr,{message:o,type:l}))))}function po(e,t){if(P(e)){return e(t)}return e}oi(".sp-formSection {\n border: 1px solid var(--color-concrete);\n border-radius: 16px;\n max-width: 800px;\n overflow: hidden;\n margin-bottom: 16px;\n -webkit-box-shadow: 0 4px 0 0 var(--color-concrete);\n box-shadow: 0 4px 0 0 var(--color-concrete);\n background-color: var(--color-white);\n padding-bottom: 8px;\n}\n.sp-formSection__header {\n font-size: 18px;\n font-weight: 600;\n border-bottom: 1px solid var(--color-concrete);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n background-color: rgba(0, 0, 0, 0.06);\n padding: 8px 16px;\n margin-bottom: 8px;\n}\n.sp-formSection__header .title {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-height: 48px;\n}\n.sp-formGroup {\n border: 1px solid var(--color-titanium);\n border-radius: 8px;\n -webkit-box-shadow: 0 2px 0 0 var(--color-titanium);\n box-shadow: 0 2px 0 0 var(--color-titanium);\n max-width: 800px;\n margin-bottom: 16px;\n overflow: visible;\n}\n.sp-formItem {\n font-size: 14px;\n padding: 0 0 8px 16px;\n max-width: 800px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n }\n}\n.sp-formItem .help-contents {\n font-style: italic;\n}\n.groupHeader {\n background-color: rgba(0, 0, 0, 0.025);\n border-bottom: 1px dotted var(--color-concrete);\n padding-bottom: 0;\n margin-bottom: 7px;\n padding-top: 8px;\n}\n.sp-formItem__left {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__left {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 32%;\n flex: 0 0 32%;\n }\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__right {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 68%;\n flex: 0 0 68%;\n padding: 0 14px;\n }\n}\n.sp-formLabel {\n -ms-flex-item-align: end;\n align-self: flex-end;\n margin-left: 8px;\n margin-bottom: 4px;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n font-size: 13px;\n font-weight: 700;\n}\n@media only screen and (min-width: 640px) {\n .sp-formLabel {\n -ms-flex-item-align: start;\n align-self: flex-start;\n text-align: right;\n margin: 6px 0 8px 0;\n }\n}\n.sp-formLabel .optional {\n font-weight: 600;\n font-style: italic;\n font-size: 12px;\n}\n.sp-formActions {\n white-space: nowrap;\n}\n.sp-formActions .action {\n display: inline-block;\n width: 32px;\n height: 32px;\n padding: 3px 4px;\n border: 1px solid var(--color-concrete);\n cursor: pointer;\n border-radius: 2px;\n margin-left: 4px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions .action {\n margin-left: 2px;\n }\n}\n.sp-formActions .action [class^='icon-'],\n.sp-formActions .action [class*=' icon-'] {\n font-size: 24px;\n}\n.sp-formActions--mobile {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 1px;\n flex: 1 0 1px;\n margin-bottom: 8px;\n -ms-flex-item-align: end;\n align-self: flex-end;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--mobile {\n display: none;\n }\n}\n.sp-formActions--web {\n display: none;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--web {\n display: block;\n }\n}\n.sp-form {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n margin-bottom: 8px;\n}\n.sp-form .prefix,\n.sp-form .suffix {\n -webkit-box-flex: 0;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n margin: 8px 4px 8px 0;\n -ms-flex-item-align: center;\n align-self: center;\n word-break: break-all;\n}\n.sp-form .suffix {\n margin-left: 4px;\n margin-right: 6px;\n}\n.sp-form .field {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-width: 100px;\n}\n.sp-form .field .input {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.sp-form .Select-input input {\n border: none !important;\n padding: 8px 0 12px;\n}\n.sp-form .is-open .Select-value-label {\n opacity: 0.6;\n}\n.sp-form input[type='text'] {\n border: 1px solid var(--color-concrete);\n border-radius: 2px;\n width: 100%;\n height: 32px;\n padding: 0 8px;\n background-color: transparent;\n font-size: 14px;\n}\n.sp-form input[type='checkbox'] {\n background-color: var(--color-danger);\n}\n");class uo extends ot.Component{constructor(){super(...arguments),this.state={showContextModal:!1}}render(){const{spelError:e}=this.props;if(!e||!e.message)return null;const t=()=>this.setState((e=>({showContextModal:!e.showContextModal})));return ot.createElement("div",null,ot.createElement(qt,{show:this.state.showContextModal,onHide:t},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.message)),ot.createElement(qt.Body,null,ot.createElement("pre",null,e.context)),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"primary passive",type:"button",onClick:t},"Close"))),ot.createElement(Dr,{type:"error",message:e.message}),ot.createElement("button",{className:"link",type:"button",onClick:t},"Show expression context where the error occurred"))}}class mo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,prefix:a,...i}=this.props,r=`TextInput form-control ${gr(n)} ${hr(t)}`,s=ot.createElement("input",{className:r,type:"text",autoComplete:"off",value:gr(e),...i});return a?ot.createElement("div",{className:"flex-container-h middle"},ot.createElement("div",{className:"sp-padding-xs-right body-regular"},a),s):s}}const go=e=>Xn.compile(`'${e.replace(/'/g,"''")}'`);class ho{constructor(e,t){this.bracket=e,this.pos=t}static theOpenBracketFor(e){return"}"===e?"{":"]"===e?"[":"("}static theCloseBracketFor(e){return"{"===e?"}":"["===e?"]":")"}compatibleWithCloseBracket(e){return"{"===this.bracket?"}"===e:"["===this.bracket?"]"===e:")"===e}}class fo{parseExpressions(e){const t=[],n="${",a="}";let i=0;for(;i<e.length;){const r=e.indexOf(n,i);if(r>=i){r>i&&t.push(go(e.substring(i,r)));const s=r+n.length,o=this.skipToCorrectEndSuffix(a,e,s);if(-1===o)throw new Error("No ending suffix '}' for expression starting at character "+r+": "+e.substring(r));if(o===s)throw new Error("No expression defined within delimiter '${}' at character "+r);const l=e.substring(r+n.length,o).trim();if(!l)throw new Error("No expression defined within delimiter '${}' at character "+r);t.push(Xn.compile(l)),i=o+a.length}else t.push(go(e.substring(i))),i=e.length}return t}isSuffixHere(e,t,n){let a=0;for(let i=0;i<n.length&&t<e.length;i++)if(e.charAt(t++)!==n.charAt(a++))return!1;return a===n.length}skipToCorrectEndSuffix(e,t,n){let a=n;const i=t.length;if(-1===t.indexOf(e,n))return-1;const r=[];for(;a<i&&(!this.isSuffixHere(t,a,e)||r.length);){const e=t.charAt(a);switch(e){case"{":case"[":case"(":r.push(new ho(e,a));break;case"}":case"]":case")":{if(!r.length)throw new Error(`Found closing '${e}' at position ${a} without an opening '${ho.theOpenBracketFor(e)}'`);const t=r.pop();if(!t.compatibleWithCloseBracket(e))throw new Error("Found closing '"+e+"' at position "+a+" but most recent opening is '"+t.bracket+"' at position "+t.pos);break}case"'":case'"':{const n=t.indexOf(e,a+1);if(-1===n)throw new Error("Found non terminating string literal starting at position "+a);a=n;break}}a++}if(r.length){const e=r.pop();throw new Error("Missing closing '"+ho.theCloseBracketFor(e.bracket)+"' for '"+e.bracket+"' at position "+e.pos)}return this.isSuffixHere(t,a,e)?a:-1}}function vo(e){const t=(new fo).parseExpressions(e);return t.forEach((e=>{const t=e._compiledExpression.getValue;e._compiledExpression.getValue=function(){const n=arguments[0];try{return t.apply(e._compiledExpression,arguments)}catch(e){throw e.state=n,e}}})),t}const Ao=(e,t)=>{if(!t)return{value:t,spelError:null,spelPreview:""};try{const n=vo(t);return{value:t,spelError:null,spelPreview:n.map((t=>t.eval(e))).join("")}}catch(e){const a={message:null,context:null,contextTruncated:null};if(e.name&&e.message)"NullPointerException"===e.name&&e.state&&e.state.activeContext&&(a.context=null===(n=e.state.activeContext.peek())?"null":void 0===n?"undefined":JSON.stringify(n,null,2),a.contextTruncated=R(a.context,{length:200})),a.message=`${e.name}: ${e.message}`;else try{a.message=JSON.stringify(e)}catch(t){a.message=e.toString()}return{value:t,spelError:a,spelPreview:null}}var n};class Eo extends ot.Component{componentDidUpdate(e){const{context:t,value:n}=this.props;if(n!==e.value||!E(t,e.context)){const e=Ao(t,n);this.props.onExpressionChange(e)}}render(){return ot.createElement(mo,{autoComplete:"off",...this.props})}}Eo.defaultProps={context:{},placeholder:""};const bo=({spelPreview:e,markdown:t})=>ot.createElement("div",{className:"flex-container-h baseline margin-between-lg"},ot.createElement("span",{className:"no-grow"},"Preview:")," ",t?ot.createElement(Br,{message:e}):ot.createElement("span",null,e));class yo{static evaluateExpression(e,t,n){return Si("/pipelines").path(t,n,"evaluateExpression").query({expression:e}).get().then((e=>{const t=e.detail||{},n=t[Object.keys(t)[0]];if(n&&n.length)throw new Error(`${n[0].exceptionType}: ${n[0].description}`);return e.result}))}static parseExpressionString(e){vo(e)}static includesSpel(e){return w(e)&&e.includes("${")}}const wo=()=>ot.createElement(ot.Fragment,null,"Β ");class xo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,text:a,wrapperClassName:i,...r}=this.props,s=`${gr(n)} ${hr(t)}`;return ot.createElement("div",{className:wn("checkbox",i)},ot.createElement("label",null,ot.createElement("input",{className:s,type:"checkbox",checked:!!e,...r}),a||ot.createElement(wo,null)))}}oi(".ChecklistInput ul {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-flow: column wrap;\n flex-flow: column wrap;\n list-style: none;\n padding: 0;\n}\n.ChecklistInput.ChecklistInput_inline ul {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n}\n.ChecklistInput.ChecklistInput_inline a.btn {\n margin: 8px 0 0 10px;\n}\n.ChecklistInput.ChecklistInput_inline li {\n white-space: nowrap;\n margin-right: 16px;\n}\n.ChecklistInput.ChecklistInput_inline li.last-of-type {\n margin-right: 0;\n}\n");const{useEffect:Co}=ot;function ko(e){const{inline:t,showSelectAll:n,value:a,validation:i,inputClassName:r,options:s,stringOptions:o,onChange:l}=e;Co((function(){e.onBlur&&e.onBlur(fr({name:e.name,value:a}))}),[]);const c=vr(o)?o.map((e=>({label:e,value:e}))):s||[],p=a||[],d=t=>{l(fr({value:t,name:e.name}))},u=e=>p.includes(e),m=c.every((e=>u(e.value))),g=`${"ChecklistInput "+(t?"ChecklistInput_inline":"")} }${gr(r)} ${hr(i)}`;return ot.createElement("div",{className:g},ot.createElement("ul",{className:"checklist"},c.map((t=>ot.createElement("li",{key:t.label},ot.createElement(xo,{text:t.label,value:t.value,onChange:()=>(t=>{const n=u(t)?p.filter((e=>e!==t)):p.concat(t);l(fr({value:n,name:e.name}))})(t.value),checked:u(t.value)})))),n&&c.length>1&&ot.createElement("li",{key:"select_all_button"},ot.createElement("a",{type:"button",onClick:m?()=>d([]):()=>d(c.map((e=>e.value)))},m?"Deselect All":"Select All"))))}function Bo(e){const{validation:t,inputClassName:n,classNames:a,onChange:i,onBlur:r,name:s,...o}=e,l=`${gr(n)} ${hr(t)}`;ot.useEffect((()=>r(fr({name:s,value:e.value}))),[]);const c=U({},a,{container:"",overlayWrapper:"",overlay:""});return c.container=`DayPickerInput ${gr(c.container)} ${l}`,ot.createElement(Zn,{...o,classNames:c,onDayChange:t=>{const n=t&&t.toISOString().slice(0,10);e.onChange(fr({name:s,value:n}))}})}oi("/* Kludge while we figure out how to add the form-control ng-invalid classes directly to the nested day-picker input */\n.DayPickerInput.ng-invalid > input {\n border-color: var(--color-danger);\n}\n");oi(".ace-editor div,\n.ace-editor span {\n font-family: monospace !important;\n}\n.ace-editor > div.ace_gutter {\n z-index: 0;\n}\n");class So extends ot.Component{constructor(){super(...arguments),this.editorRef=ot.createRef(),this.validate=e=>{const{onValidation:t}=this.props;if(!t)return;e&&e.length||t(null);t(e.map((e=>`Line ${e.row+1}, column ${e.column+1}: ${e.text}`)).join("; "))}}componentDidMount(){if(this.props.autofocus){const{editor:e}=this.editorRef.current;e.focus(),e.navigateFileStart()}}render(){return ot.createElement(_n,{...this.props,ref:this.editorRef,onValidate:this.validate,editorProps:{$blockScrolling:1/0}})}}function Mo(){const e=ct(!1);return lt((()=>(e.current=!0,()=>{e.current=!1})),[]),e}function No(e,t,n=[]){const a=Mo().current,i=ot.useRef(t);i.current=t;const r=ot.useCallback(((e,t)=>i.current(e,t)),[]);ot.useEffect((()=>(e&&e.addValidator&&e.addValidator(r),()=>e&&e.removeValidator&&e.removeValidator(r))),[]),ot.useEffect((()=>{a&&e&&e.revalidate&&e.revalidate()}),n)}So.defaultProps={mode:"json",theme:"textmate",style:{width:"100%",border:"1px solid var(--color-concrete)"},fontSize:11,showGutter:!0,showPrintMargin:!0,highlightActiveLine:!0,className:"ace-editor flex-fill",autofocus:!0};oi("input.NumberInput {\n max-width: 200px;\n}\n");const Do=e=>"number"==typeof e;function Io(e){const{value:t,validation:n,inputClassName:a,...i}=e;No(n,((t,n)=>{const a=Do(e.min)?Cr.minValue(e.min):void 0,i=Do(e.max)?Cr.maxValue(e.max):void 0,r=br([a,i]);return r?r(t,n):null}));const r=`NumberInput form-control ${gr(a)} ${hr(n)}`;return ot.createElement("input",{className:r,type:"number",value:gr(t),...i})}const Fo=e=>{const{inline:t,validation:n,value:a,defaultValue:i,inputClassName:r,options:s,stringOptions:o,...l}=e,c=pt((()=>vr(o)?o.map((e=>({value:e,label:e}))):s),[s]);lt((()=>{u(i)||c.map((e=>e.value)).includes(a)||e.onChange(fr({name:e.name,value:i}))}),[a,i,c]);const p=`RadioButtonInput radio ${gr(r)} ${hr(n)} ${t?"flex-container-h margin-between-md":"flex-container-v margin-between-sm"}`;return ot.createElement("div",{className:p},c.map((e=>ot.createElement(To,{key:e.label,value:a,option:e,...l}))))},To=({option:e,value:t,...n})=>ot.createElement("label",{className:"clickable"},ot.createElement("input",{type:"radio",...n,value:e.value,checked:e.value===t}),ot.createElement(Br,{message:e.label,style:e.help&&{display:"inline-block"}}),e.help&&ot.createElement(ot.Fragment,null,e.help));class Qo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,...a}=this.props,i=`TextAreaInput form-control ${gr(n)} ${hr(t)}`;return ot.createElement("textarea",{className:i,autoComplete:"off",value:gr(e),...a})}}const Po=()=>{const e=ot.useContext(ns);return void 0===e&&console.warn("Application context provider is missing"),e},Ro=()=>{const e=ot.useContext(ns);if(void 0===e)throw new Error("Application context provider is missing");return e},{useEffect:Uo,useRef:zo}=ot,Go=e=>{const t=zo();return Uo((()=>{t.current=e})),t.current},{useEffect:jo,useRef:Lo}=ot,Oo=()=>document.querySelector(".spinnaker-container"),Yo=e=>{const t=Go(e);jo((()=>{const n=Oo();if(n){if(t){const a=t.filter((t=>!e.includes(t)));n.classList.remove(...a)}n.classList.add(...e)}}),[e.sort().join()]);const n=Lo(e);n.current=e,jo((()=>()=>{const e=Oo();e&&e.classList.remove(...n.current)}),[])},$o={error:void 0,requestId:0,result:void 0,status:"NONE"};function Ho(e,t){const n=Mo(),a=!n.current,i=ct(),[r,s]=dt(0),[o,l]=dt($o),{result:c,error:p,status:d,requestId:u}=o,m=()=>s((e=>e+1));return lt((()=>{!a&&m()}),t),lt((()=>{const t=e(),a=()=>n.current&&t===i.current;if(!t)return;l({status:"PENDING",error:p,result:c,requestId:r}),i.current=t;t.then((e=>{a()&&l({status:"RESOLVED",result:e,error:void 0,requestId:r})}),(e=>{a()&&l({status:"REJECTED",result:void 0,error:e,requestId:r})}))}),[r]),{result:c,status:d,error:p,refresh:m,requestId:u}}function Vo(e,t,n){const a=pt((()=>t),[]),i=Ho(n.some((e=>u(e)))?()=>null:e,n),r=ct(!1);return"RESOLVED"===i.status&&(r.current=!0),r.current?i:{...i,result:a}}const{useRef:Jo,useCallback:Wo}=ot,Ko=e=>{const t=Jo(e);return t.current=e,Wo(((...e)=>t.current&&t.current.apply(null,e)),[])},qo=(e,t)=>{lt((()=>{if(!e)return;const n=e.subscribe(t);return()=>n.unsubscribe()}),[e])},Xo=(e,t)=>{const[n,a]=dt(t);return qo(e,a),n},Zo=e=>({...Xo(e.status$,e.status$.value),refresh:Ko((()=>{e.refresh()}))});function _o(e,t){const[n,a]=dt(e),i=e!==n;return lt((()=>{const n=setTimeout((()=>a(e)),t);return()=>clearTimeout(n)}),[e,t]),[n,i]}const{useRef:el}=ot;function tl(e){const t=el(e),n=el(1),a=e===t.current||E(e,t.current);return t.current=e,a||n.current++,n.current}const{useEffect:nl}=ot,al=(e,t,n,a)=>{const i=Ko(n);nl((()=>{if(n)return e.addEventListener(t,i,a),()=>{e.removeEventListener(t,i,a)}}),[e,t,!!n,Object.values(a||{}).sort().join()])};function il(e){al(document.body,"keyup",(t=>"Escape"===t.key&&e()))}const rl=()=>{const[,e]=dt(!0);return ut((()=>{e((e=>!e))}),[])};function sl(e,t){const n=Ko(e);lt((()=>{const a=!!e&&t&&setInterval(n,t);return()=>a&&clearInterval(a)}),[!!e,t])}const{useState:ol}=st,ll=()=>{const[e,t]=ol(window.innerWidth<=1024);return al(window,"resize",(()=>{const n=window.innerWidth<=1024;n!==e&&t(n)})),e};function cl(e,t,n,a){const i=Vo(e,t,a),r=Ko(i.refresh);return lt((()=>{const{subscribe:e,unsubscribe:t}=_s.createScheduler(n);return e(r),t}),a),i}function pl(e){const{previewStage:t,...n}=e,[a,i]=_o(e.value,300),r=!Mo().current;No(e.validation,(function(){const{status:e,error:n,result:a}=s;if("NONE"===e)return null;if("PENDING"===e||i)return Rr(a?"Updating preview...\n\n\n```\n"+JSON.stringify(a,null,2)+"\n```":"Updating preview...");if("RESOLVED"===e){const e=`Preview - based on previous execution: ${t.executionLabel}\n\n\n\`\`\`\n`+JSON.stringify(a,null,2)+"\n```";return Gr(e)}return"REJECTED"===e?Lr(n):null}));const s=Vo((()=>yo.evaluateExpression(a,t.executionId,t.stageId)),null,[a,t.executionId,t.stageId]);return ot.useEffect((()=>{!r&&e.validation&&e.validation.revalidate&&e.validation.revalidate()}),[s.status,i]),ot.createElement(dl,{...n})}function dl(e){const t=!!/\n/.exec(e.value);return ot.createElement(Qo,{inputClassName:"SpelInput",rows:t?3:1,placeholder:e.placeholder||"Variable value, e.g. ${trigger.buildInfo.number}",...e})}oi(".SpelInput {\n font-family: monospace;\n}\n");const ul=st.createContext(!1),{Provider:ml}=ul;var gl,hl;function fl(e){return st.createElement(Qs,{value:e.inputMode===gl.FREEFORM?"Return to default input":"Enter SpEL in freeform input"},st.createElement("button",{className:wn("btn btn-sm btn-default",{active:e.inputMode===gl.FREEFORM}),onClick:e.onClick},st.createElement("span",{className:"fa icon-spel"})))}(hl=gl||(gl={})).DEFAULT="DEFAULT",hl.FREEFORM="FREEFORM";const{useCallback:vl,useContext:Al,useState:El}=ot,bl=new Map;function yl(e,t,n){let a=0;const i=z(t);for(;e&&a<i.length;)e="string"==typeof e?void 0:e[i[a++]];return void 0===e?n:e}function wl(e){const{formik:t}=e,{name:n,onChange:a,fastField:i}=e,{input:r,layout:s,label:o,help:l,required:c,actions:p,validate:d,validationMessage:u,touched:m}=e,g=Al(Os),h=Al(ul),f=yl(t.touched,n),v=yl(t.errors,e.name),A=$i(i,!1),E=$i(m,f),b=$i(u,v),{hidden:y,category:w,messageNode:x}=Hr(b,E),[C,k]=El([]),B=vl((e=>k((t=>t.concat(e)))),[]),S=vl((e=>k((t=>t.filter((t=>t!==e))))),[]),M=()=>function(e){bl.has(e)||(bl.set(e,!0),setTimeout((()=>(bl.delete(e),e.validateForm()))))}(t),N=js();ot.useEffect((()=>{"FIRST_RENDER"===N.current&&0===C.length||M()}),[C]);const D={touched:E,revalidate:M,addValidator:B,removeValidator:S,hidden:y,category:w,messageNode:x},I=$i(e.spelAware,h,!1),F=ot.useMemo((()=>{const t=yl(e.formik.values,n,"");return I&&yo.includesSpel(t)?gl.FREEFORM:gl.DEFAULT}),[]),[T,Q]=ot.useState(F),P=()=>{t.setFieldValue(n,null),Q(T===gl.DEFAULT?gl.FREEFORM:gl.DEFAULT)},R=({field:e})=>{const t=T===gl.DEFAULT?r:dl,n=$i(s,(e=>ot.createElement(g,{...e}))),i=po(t,{...e,validation:D}),d=ot.createElement(ot.Fragment,null,p,I&&ot.createElement(fl,{inputMode:T,onClick:P})),u={label:o,help:l,required:c,actions:d,input:i,validation:D};return ot.createElement(Gs,{onChange:a,value:e.value},po(n,u))},U=xl(o,c,[].concat(d).concat(C));return A?ot.createElement(Yn,{name:n,validate:U,render:R}):ot.createElement($n,{name:n,validate:U,render:R})}function xl(e,t,n){const a=[!!t&&Cr.isRequired()].concat(n),i=br(a);if(!i)return null;const r=w(e)?e:void 0;return e=>i(e,r)}function Cl(e){return ot.createElement(On,null,(t=>ot.createElement(wl,{...e,formik:t})))}const{useState:kl,useCallback:Bl,useContext:Sl,useMemo:Ml}=ot;function Nl(e){const{input:t,layout:n,label:a,help:i,required:r,actions:s}=e,{value:o}=e,[l,c]=kl([]),[p,d]=kl(0),u=Bl((e=>c((t=>t.concat(e)))),[]),m=Bl((e=>c((t=>t.filter((t=>t!==e))))),[]),g=Ml((()=>e.validate),[]),h=Ml((()=>xl(a,r,[].concat(g||qi).concat(l))),[a,r,g,l.length]),f=Sl(Os),v=$i(t,qi),A=$i(n,(e=>ot.createElement(f,{...e}))),[E,b]=kl(!1),y=$i(e.touched,E),w=Ml((()=>h(o)),[h,o,p]),x={touched:y,addValidator:u,removeValidator:m,revalidate:()=>d((e=>e+1)),...Hr($i(e.validationMessage,w||void 0),y)},C=po(v,{...{value:e.value,name:e.name||"",onChange:e.onChange||qi,onBlur:t=>{b(!0),e.onBlur&&e.onBlur(t)}},validation:x}),k={label:a,help:i,required:r,actions:s,validation:x,input:C};return ot.createElement(ot.Fragment,null,po(A,k))}const Dl={value:null,spelError:null,spelPreview:null};function Il(e){const{context:t,name:n,label:a,help:i,actions:r,validationMessage:s}=e,[o,l]=ot.useState(Dl),c=$i(e.markdown,!1),p=Hr(s,!0).messageNode||o.spelError&&t&&ot.createElement(uo,{spelError:o.spelError})||o.spelPreview&&ot.createElement(bo,{spelPreview:o.spelPreview,markdown:c});return ot.createElement(Cl,{name:n,input:e=>ot.createElement(Eo,{onExpressionChange:e=>l(e),context:t,...e}),label:a,help:i,actions:r,validationMessage:p})}class Fl extends ot.Component{constructor(){super(...arguments),this.state={spelPreview:null,spelError:null}}renderRegexFields(e,t){const{RegexHelp:n,regexName:a,replaceName:i}=e,r=({input:e})=>ot.createElement("div",{style:{flex:"1 1 40%"}}," ",e," ");return ot.createElement(Ns,{heading:({chevron:e})=>ot.createElement("span",null," ",e," Regex ",n," "),outerDivClassName:"",toggleClassName:"",defaultExpanded:t},ot.createElement("div",{className:"flex-container-h baseline"},ot.createElement("code",null,"s/"),ot.createElement(Cl,{name:a,validate:e=>{try{return RegExp(e),""}catch(e){return e.message}},layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(mo,{...e}),touched:!0}),ot.createElement("code",null,"/"),ot.createElement(Cl,{name:i,layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(mo,{...e})}),ot.createElement("code",null,"/g")))}renderPreview(e,t,n,a){const{markdown:i}=e;if(!n)return ot.createElement(bo,{spelPreview:t,markdown:i});try{const e=t.replace(new RegExp(n,"g"),a);return!!e&&ot.createElement(bo,{spelPreview:e,markdown:i})}catch(e){return ot.createElement(bo,{spelPreview:t,markdown:i})}}renderFormField(e,t){const{context:n,placeholder:a,help:i,label:r,actions:s}=this.props;return ot.createElement(Cl,{name:this.props.name,input:e=>ot.createElement("div",{className:"flex-container-v flex-grow"},ot.createElement(Eo,{onExpressionChange:e=>this.setState(e),context:n,placeholder:a,...e}),this.renderRegexFields(this.props,!!t)),help:i,label:r,actions:s,validationMessage:e,touched:!0})}render(){const{spelPreview:e,spelError:t}=this.state,{regexName:n,replaceName:a}=this.props;return ot.createElement(Us,{render:i=>{const r=Hn(i.values,n),s=Hn(i.values,a),o=Hn(i.errors,n)||Hn(i.errors,a);if(o)return this.renderFormField(Ur(o),r);if(t)return this.renderFormField(ot.createElement(uo,{spelError:t}),r);if(e){const t=this.renderPreview(this.props,e,r,s);return this.renderFormField(t,r)}return this.renderFormField(Gr(null),r)}})}}function Tl(e,t,n){const a=Go(t),[i,r]=dt({}),[s,o]=dt({});lt((()=>{var l,c;if(a&&t!==a){const p=null!=(l=n[a])?l:[],d=null!=(c=n[t])?c:[],u=p.reduce(((t,n)=>(t[n]=m(e.values,n),t)),{});r({...i,[a]:u});const g=p.reduce(((t,n)=>(t[n]=m(e.touched,n),t)),{});o({...s,[a]:g}),p.forEach((t=>{e.setFieldValue(t,void 0),e.setFieldTouched(t,null)}));const h=i[t]||{},f=s[t]||{};d.forEach((n=>{h.hasOwnProperty(n)&&e.setFieldValue(n,i[t][n]),f.hasOwnProperty(n)&&e.setFieldTouched(n,s[t][n])}))}}),[t])}function Ql(e,t,n){const a=t(e.value),i=st.useCallback((t=>{e.onChange(fr({name:t.target.name,value:n(t.target.value,t)}))}),[e.onChange,n]);return{...e,value:a,onChange:i}}Fl.defaultProps={markdown:!1};class Pl extends ot.Component{render(){const e=this.props.stage.labelComponent;return ot.createElement("div",{className:"label-component"},ot.createElement(e,{stage:this.props.stage}))}}function Rl(e){return ot.createElement(ot.Fragment,null,ot.createElement("dt",null,e.label," ",e.helpFieldId&&ot.createElement(Zs,{id:e.helpFieldId})),ot.createElement("dd",null,e.value))}function Ul(e){const{children:t,...n}=e;return ot.createElement("dl",{...n},t)}const zl=({url:e,text:t})=>ot.createElement(ot.Fragment,null,ot.createElement("a",{href:e,target:"_blank"},t),ot.createElement(zi,{text:t,toolTip:"'Copy to clipboard'"}));function Gl(e,t){return ot.forwardRef(((n,a)=>ot.createElement(jl,{category:t},ot.createElement(e,{...n,ref:a}))))}class jl extends ot.Component{constructor(e){super(e),this.state={error:null,retrying:!1}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){Ui.log({level:"ERROR",category:`SpinErrorBoundary - ${this.props.category}`,action:e.message,error:e,data:{label:e.message,componentStack:null==t?void 0:t.componentStack}})}retry(){this.setState({retrying:!0}),setTimeout((()=>this.setState({retrying:!1,error:null})),250)}render(){var e;if(!(null==(e=this.state)?void 0:e.error))return this.props.children;const{message:t,stack:n}=this.state.error,{retrying:a}=this.state;return ot.createElement("div",{className:"flex-container-v sp-margin-l"},ot.createElement("h3",null,"Oh dear, something has gone wrong."),ot.createElement("div",{className:"sp-margin-l-bottom"},ot.createElement("h4",null,"Spinnaker has encountered an unexpected UI error."),ot.createElement("button",{disabled:a,onClick:()=>this.retry()},a?"Retrying...":"Try again")),t&&ot.createElement(Dr,{message:t,type:"error"}),n&&ot.createElement(Ns,{defaultExpanded:!1,heading:"Stacktrace"},ot.createElement("pre",{style:{overflow:"scroll"}},n)))}}const Ll="ui.router.react.error.boundary";n(Ll,["ui.router"]).config(["$uiRouterProvider",e=>{e.stateRegistry.decorator("views",((e,t)=>{const n=t(e);return Object.values(n).filter((e=>"react"===e.$type)).forEach((t=>{const n=t,a=n.component;n.component=t=>ot.createElement(jl,{category:e.name},ot.createElement(a,{...t}))})),n}))}]);const Ol="spinnaker.core.presentation.linkWithClipboard.component";n(Ol,[]).component("linkWithClipboard",yn(Gl(zl,"linkWithClipboard"),["url","text"]));const Yl=ot.createContext(null),$l=({children:e})=>{const t=ot.createRef();return al(document,"keydown",(e=>{var n,a;const{keyCode:i,shiftKey:r,target:s}=e;if(9===i){let i=null;const o=Array.from(null!=(a=null==(n=t.current)?void 0:n.querySelectorAll('\n input:not([tabindex^="-"]):not([disabled]),\n select:not([tabindex^="-"]):not([disabled]),\n textarea:not([tabindex^="-"]):not([disabled]),\n button:not([tabindex^="-"]):not([disabled]),\n a[href]:not([tabindex^="-"]):not([disabled]),\n [tabindex]:not([tabindex^="-"]):not([disabled])\n '))?a:[]).filter((e=>null!==e.offsetParent));if(!o.length)return;const l=o[0],c=o[o.length-1];l===s&&r&&(i=c),c!==s||r||(i=l),o.includes(s)||(i=r?c:l),i&&(i.focus(),e.preventDefault())}})),ot.createElement("div",{ref:t},e)};oi("@-webkit-keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@-webkit-keyframes dialogEnter {\n from {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@keyframes dialogEnter {\n from {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@-webkit-keyframes dialogLeave {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n@keyframes dialogLeave {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n/********************************************************\n Shared set of properties for both the tinted backdrop\n and the full screen container that holds a dialog\n********************************************************/\n/**********************************\n Tinted backdrop (behind dialog)\n***********************************/\n.sp-modal-backdrop {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n background-color: rgba(0, 0, 0, 0.7);\n will-change: opacity;\n}\n.sp-modal-backdrop.enter {\n -webkit-animation-name: backdropEnter;\n animation-name: backdropEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.sp-modal-backdrop.exit {\n -webkit-animation-name: backdropLeave;\n animation-name: backdropLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.sp-modal-backdrop.enter-active,\n.sp-modal-backdrop.enter-done {\n opacity: 1;\n}\n.sp-modal-backdrop.exit-active,\n.sp-modal-backdrop.exit-done {\n opacity: 0;\n}\n.sp-modal-backdrop-blur-effect {\n -webkit-transition: -webkit-filter 300ms cubic-bezier(0.4, 0, 0, 1);\n transition: -webkit-filter 300ms cubic-bezier(0.4, 0, 0, 1);\n transition: filter 300ms cubic-bezier(0.4, 0, 0, 1);\n transition: filter 300ms cubic-bezier(0.4, 0, 0, 1), -webkit-filter 300ms cubic-bezier(0.4, 0, 0, 1);\n -webkit-filter: saturate(1.3) blur(5px);\n filter: saturate(1.3) blur(5px);\n}\n/************************************************\n Modal dialog and associated layout container\n************************************************/\n.Modal {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* for large screens, place an eventual cap on the height of a modal */\n}\n.Modal .sp-dialog-sizer {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n max-height: calc(100vh - 64px);\n min-height: 320px;\n width: calc(100vw - 128px);\n margin: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .Modal .sp-dialog-sizer {\n max-height: calc(100vh - 32px);\n width: calc(100vw - 48px);\n margin: 0 24px;\n }\n}\n@media screen and (min-height: 1164px) {\n .Modal .sp-dialog-sizer {\n max-height: 1100px;\n }\n}\n.Modal .sp-dialog-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: relative;\n grid-column: 1 / -1;\n grid-row: 1 / -1;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n overflow: hidden;\n border-radius: 8px;\n -webkit-box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n will-change: transform, opacity;\n}\n.Modal.enter .sp-dialog-content {\n -webkit-animation-name: dialogEnter;\n animation-name: dialogEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.Modal.exit .sp-dialog-content {\n -webkit-animation-name: dialogLeave;\n animation-name: dialogLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.Modal.enter-active .sp-dialog-content,\n.Modal.enter-done .sp-dialog-content {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n}\n.Modal.exit-active .sp-dialog-content,\n.Modal.exit-done .sp-dialog-content {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n}\n");const Hl=({isOpen:e,maxWidth:t,onRequestClose:n,onAfterClose:a,children:i})=>{var r;Yo(e?["sp-modal-backdrop-blur-effect"]:[]);al(document,"keydown",e?({keyCode:e})=>{27===e&&n()}:null);const s=Ko(n),o=pt((()=>({onRequestClose:s})),[]);return ot.createElement(Yl.Provider,{value:o},ln.createPortal(ot.createElement($l,null,ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0},ot.createElement("div",{className:"sp-modal-backdrop"})),ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0,onExited:a},ot.createElement("div",{className:"Modal"},ot.createElement("div",{className:"sp-dialog-sizer",style:{maxWidth:null!=(r=y(t)?`${t}px`:t)?r:"1400px"}},ot.createElement("div",{className:"sp-dialog-content"},i))))),document.body))};oi(".ModalHeader {\n -webkit-box-flex: 0;\n -ms-flex: none;\n flex: none;\n background-color: var(--color-blumine);\n color: var(--color-white);\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.ModalHeader .sp-modal-title {\n margin: 10px 16px;\n font-size: 22px;\n font-weight: 500;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n word-break: break-all;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-title {\n margin: 4px 12px;\n font-size: 18px;\n }\n}\n.ModalHeader .sp-modal-close {\n border: none;\n background-color: transparent;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 56px;\n flex: 0 0 56px;\n height: 56px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n cursor: pointer;\n -ms-flex-item-align: start;\n align-self: flex-start;\n -webkit-transition: all 150ms ease-out;\n transition: all 150ms ease-out;\n}\n.ModalHeader .sp-modal-close:hover,\n.ModalHeader .sp-modal-close:focus {\n background-color: rgba(160, 180, 220, 0.15);\n outline: none;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-close {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 48px;\n flex: 0 0 48px;\n height: 48px;\n }\n}\n");const{useContext:Vl}=ot,Jl=({className:e,children:t})=>{const{onRequestClose:n}=Vl(Yl);return ot.createElement("div",{className:"ModalHeader"},ot.createElement("div",{className:wn("sp-modal-title",e)},t),ot.createElement("button",{className:"sp-modal-close",onClick:()=>n&&n()},ot.createElement("i",{className:"ico icon-close"})))};oi(".ModalBody {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow: auto;\n overscroll-behavior: contain;\n --webkit-overflow-scrolling: touch;\n background-color: var(--color-smoke);\n padding: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .ModalBody {\n padding: 0 8px;\n }\n}\n");const Wl=({children:e})=>ot.createElement("div",{className:"ModalBody"},e);oi(".ModalFooter {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n min-height: 64px;\n background-color: var(--color-white);\n color: var(--color-white);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n position: relative;\n -webkit-box-shadow: 0 4px 4px 4px rgba(0, 0, 0, 0.12), 0 6px 12px 8px rgba(0, 0, 0, 0.1);\n box-shadow: 0 4px 4px 4px rgba(0, 0, 0, 0.12), 0 6px 12px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n padding: 16px;\n}\n.ModalFooter .sp-modal-footer-left {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n margin-right: 16px;\n}\n.ModalFooter .sp-modal-footer-right {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n}\n@media screen and (max-width: 1024px) {\n .ModalFooter .ModalFooter {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n }\n .ModalFooter .sp-modal-footer-left {\n margin: 8px 0;\n }\n}\n");const Kl=({primaryActions:e,secondaryActions:t})=>ot.createElement("div",{className:"ModalFooter"},t&&ot.createElement("div",{className:"sp-modal-footer-left"},t),e&&ot.createElement("div",{className:"sp-modal-footer-right"},e)),ql=(e,t,n)=>new Promise((a=>{let i=document.createElement("div"),r=!1;function s(){i&&(ln.unmountComponentAtNode(i),i=null)}const o=e=>t=>{i&&(a(e(t)),r=!1,d())},l=o((e=>({status:"CLOSED",closeResult:e}))),c=o((e=>({status:"DISMISSED",dismissResult:e}))),p=()=>c(null);function d(){ln.render(ot.createElement(Hl,{isOpen:r,onRequestClose:p,onAfterClose:s,...n},ot.createElement(ta,null,ot.createElement(e,{...t,dismissModal:c,closeModal:l}))),i)}d(),setTimeout((()=>{i&&(r=!0,d())}))}));class Xl extends ot.Component{constructor(e){super(e),this.refCallback=e=>{e&&(this.element=$(e))},this.state={id:pr.generateUuid(),currentPageKey:null,pages:[]}}componentDidMount(){const{children:e,deepLinkParam:t,hideNavigation:n,scrollableContainer:a}=this.props;this.container=this.element.closest(a),P(this.container.bind)&&!n&&this.container.bind(this.getEventKey(),G((()=>this.handleScroll()),20)),this.navigator=this.element.find(".page-navigation"),t&&this.props.reactInjector.$stateParams[t]&&this.setCurrentSection(this.props.reactInjector.$stateParams[t]);const i=ot.Children.map(e,(e=>e.props.pageKey&&e.props.label?{key:e.props.pageKey,label:e.props.label,visible:!1!==e.props.visible,badge:e.props.badge}:null));this.setState({pages:i,currentPageKey:i.length>0?i[0].key:null})}componentWillUnmount(){P(this.container.unbind)&&!this.props.hideNavigation&&this.container.unbind(this.getEventKey())}setCurrentSection(e){this.setState({currentPageKey:e}),this.syncLocation(e),er.scrollTo(`[data-page-id=${e}]`,this.props.scrollableContainer,this.container.offset().top),this.container.find(".highlighted").removeClass("highlighted"),this.container.find(`[data-page-id=${e}]`).addClass("highlighted")}getEventKey(){return`scroll.pageNavigation.${this.state.id}`}handleScroll(){const e=this.element.get(0).getBoundingClientRect(),t=this.container.get(0).getBoundingClientRect().top,n=this.state.pages.find((e=>{const n=this.container.find(`[data-page-content=${e.key}]`);return!!n.length&&n.get(0).getBoundingClientRect().bottom>t}));n&&(this.setState({currentPageKey:n.key}),this.syncLocation(n.key),this.navigator.find("li").removeClass("current"),this.navigator.find(`[data-page-navigation-link=${n.key}]`).addClass("current")),e.top<t?this.navigator.css({position:"fixed",width:this.navigator.get(0).getBoundingClientRect().width,top:t}):this.navigator.css({position:"relative",top:0,width:"100%"})}syncLocation(e){const{deepLinkParam:t}=this.props;t&&this.props.reactInjector.$state.go(".",{[t]:e},{notify:!1,location:"replace"})}updatePagesConfig(e){const t=[...this.state.pages],n=t.find((t=>t.key===e.key));n&&(n.badge=e.badge,n.label=e.label,n.visible=e.visible,this.setState({pages:t}))}render(){const{children:e,hideNavigation:t}=this.props,{currentPageKey:n,pages:a}=this.state,i=ot.Children.map(e,(e=>ot.cloneElement(e,{updatePagesConfig:e=>this.updatePagesConfig(e)})));return ot.createElement("div",{className:"page-navigator"},ot.createElement("div",{className:"row flex-1",ref:this.refCallback},!t&&ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"page-navigation"},a.map(((e,t)=>e.visible&&ot.createElement("li",{key:t,"data-page-navigation-link":e.key,className:n===e.key?"current":""},ot.createElement("a",{onClick:()=>this.setCurrentSection(e.key)},e.label,e.badge&&ot.createElement("span",null," ","("+e.badge+")"))))))),ot.createElement("div",{className:"col-md-"+(t?"12":"9")+" col-sm-12"},ot.createElement("div",{className:"sections"},i))))}}class Zl extends ot.Component{constructor(e){super(e)}componentDidUpdate(e){const{badge:t,pageKey:n,label:a,updatePagesConfig:i,visible:r}=this.props;e.visible===this.props.visible&&e.badge===this.props.badge&&e.label===this.props.label||i&&i({key:n,label:a,visible:!1!==r,badge:t})}render(){const{children:e,pageKey:t,label:n,noWrapper:a,visible:i}=this.props;return!1!==i?ot.createElement("div",{className:"page-section"},ot.createElement("div",{className:"page-subheading flex-1","data-page-id":t},ot.createElement("h4",{className:"sticky-header"},n),ot.createElement("div",{className:a?"no-wrapper":"section-body","data-page-content":t},e))):ot.createElement(ot.Fragment,null)}}const _l=ot.memo((({outputFileObject:e})=>{const t=/(https?:\/\/[^$\s'"]+)/,n=ia(e);let a=0;const i=n.split(t);return ot.createElement("pre",{style:{overflow:"scroll",maxHeight:"400px"}},i.map((e=>{return`'${e}'`.match(t)?(n=e,ot.createElement("a",{key:""+a++,href:n,target:"_blank"},n)):e;var n})))}));class ec extends ot.Component{constructor(){super(...arguments),this.setSortKey=e=>{const{sortKey:t,onChange:n}=this.props;e.preventDefault();n((this.isSortKey()&&this.isReverse()?"":"-")+t)}}isSortKey(){const{currentSort:e,sortKey:t}=this.props;return e===t||e==="-"+t}isReverse(){return this.props.currentSort&&this.props.currentSort.startsWith("-")}render(){const e=this.isSortKey(),t=wn({"inactive-sort-key":!e,"sort-toggle":!0,clickable:!0});return ot.createElement("span",{className:t,onClick:this.setSortKey},this.props.label,ot.createElement("a",null,(!this.isReverse()||!e)&&ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle"}),this.isReverse()&&e&&ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle"})))}}ec.defaultProps={onChange:qi};class tc extends ot.Component{render(){const{className:e,onClick:t,children:n}=this.props;return ot.createElement("span",{className:e,onClick:t}," ",n," ")}}const nc=st.createContext(null),{useState:ac,useMemo:ic}=st,rc=e=>{const t=ll(),[n,a]=ac(!1),{layout:i,...r}=e,s=e.columns.map((e=>"string"==typeof e?{name:e}:e)),o=ic((()=>({layout:i,isMobile:t,allExpanded:n,setAllExpanded:()=>a(!1),expandable:e.expandable,columns:s})),[i,t,e.expandable,n,tl(e.columns)]),{TableLayout:l}=i;return st.createElement(nc.Provider,{value:o},st.createElement(l,{...r,isMobile:t,columns:s,expandAll:()=>a(!0)}))},{useState:sc,useContext:oc,useEffect:lc}=st,cc=({defaultExpanded:e,renderExpandedContent:t,children:n})=>{const{layout:a,expandable:i,allExpanded:r,setAllExpanded:s,isMobile:o,columns:l}=oc(nc),[c,p]=sc(e||!1);lc((()=>{r&&t&&p(!0)}),[r]),i||null==e||console.error(new Error("You used the defaultExpanded prop on a row inside a <Table/> that's not expandable.\n Either remove the defaultExpanded prop or make the <Table/> expandable."));const d=st.Children.map(n,((e,t)=>st.cloneElement(e,{index:t})));d.length>l.length&&(()=>{throw new Error("A <TableCell/> was added that didn't match any of the columns defined on its parent <Table/>.\n Check if there are an equal number of <TableCell/> elements to the number of columns provided to the <Table/>.\n ")})();const{TableRowLayout:u}=a;return st.createElement(u,{tableExpandable:i,rowExpandable:i&&!!t,expanded:c,setExpanded:e=>{p(e),r&&!e&&s(!1)},renderExpandedContent:t,isMobile:o,columns:l,children:d})},{useContext:pc}=st,dc=e=>{const{layout:t,expandable:n,isMobile:a,columns:i}=pc(nc),{TableCellLayout:r}=t;return st.createElement(r,{...e,expandable:n,isMobile:a,columns:i})};oi(".MinimalNativeTableLayout {\n text-align: left;\n font-size: 13px;\n overflow: hidden;\n}\n.MinimalNativeTableLayout .header-row {\n height: 24px;\n}\n.MinimalNativeTableLayout .header-cell {\n color: var(--color-charcoal);\n font-weight: 400;\n padding: 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n}\n.MinimalNativeTableLayout .header-cell:first-child {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-black);\n}\n.MinimalNativeTableLayout .cell {\n color: var(--color-charcoal);\n padding: 6px 16px;\n vertical-align: top;\n min-width: 80px;\n}\n.MinimalNativeTableLayout .cell:first-child {\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n");const uc={TableLayout:({columns:e,children:t})=>st.createElement("table",{className:"MinimalNativeTableLayout",cellSpacing:"0",cellPadding:"0"},st.createElement("thead",null,st.createElement("tr",{className:"header-row"},e.map((({name:e})=>st.createElement("th",{key:e,className:"header-cell"},e))))),st.createElement("tbody",null,t)),TableRowLayout:({children:e})=>st.createElement("tr",null,e),TableCellLayout:({children:e,indent:t})=>st.createElement("td",{className:"cell",style:{paddingLeft:t?16+20*t+"px":void 0}},e)};oi(".StandardGridTableLayout {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-header {\n display: grid;\n position: sticky;\n top: 0;\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n font-size: 13px;\n z-index: 100;\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n min-height: 48px;\n grid-column: 1 / -1;\n background-color: var(--color-smoke);\n border-bottom: 2px solid var(--color-blumine);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell {\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n padding-bottom: 6px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable {\n border-radius: 16px 16px 0 0;\n cursor: pointer;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator {\n border-radius: 16px;\n background-color: var(--color-blumine);\n width: 16px;\n height: 16px;\n margin-left: 6px;\n margin-bottom: 1px;\n position: relative;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0;\n height: 0;\n margin-left: -4px;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.ascending:after {\n margin-top: -2px;\n border-bottom: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.descending:after {\n margin-top: -1px;\n border-top: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n cursor: pointer;\n padding-left: 0;\n border-radius: 16px 16px 0 0;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle > i {\n font-size: 24px;\n margin-bottom: -4px;\n}\n.StandardGridTableLayout .standard-grid-table-row-container {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-row {\n display: grid;\n min-height: 40px;\n overflow: hidden;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n font-size: 13px;\n padding: 8px 0;\n grid-column: 1 / -1;\n grid-row: 1;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable {\n cursor: pointer;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable:hover {\n /*\n Since this becomes a sticky header when rows are expanded\n and the color we want is semi-transparent, let's use a gradient\n that grabs the right color but puts a white backdrop behind it\n so the things scrolling below it don't come through.\n */\n background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(160, 180, 220, 0.15)), to(rgba(160, 180, 220, 0.15)));\n background-image: linear-gradient(180deg, rgba(160, 180, 220, 0.15), rgba(160, 180, 220, 0.15));\n}\n.StandardGridTableLayout .standard-grid-table-row.expanded {\n background-color: var(--color-white);\n position: sticky;\n top: 48px;\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle {\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n color: var(--color-nobel);\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle > i {\n font-size: 24px;\n}\n.StandardGridTableLayout .expanded-row-content {\n /* stretch across entire table width */\n grid-column: 1 / -1;\n grid-row: 2;\n background-color: var(--color-white);\n padding: 16px;\n overflow-x: scroll;\n}\n.StandardGridTableLayout .standard-grid-table-cell,\n.StandardGridTableLayout .cell-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.StandardGridTableLayout .standard-grid-table-cell {\n padding-left: 16px;\n}\n@media screen and (max-width: 1024px) {\n .StandardGridTableLayout .standard-grid-table-row-container:first-child {\n margin-top: 16px;\n }\n .StandardGridTableLayout .standard-grid-table-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0 8px 16px;\n margin: 0 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded {\n position: static;\n margin-bottom: 0;\n padding-left: 6px;\n /*for border */\n border-left: 2px solid var(--color-regal);\n border-bottom: none;\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded:hover {\n background-color: var(--color-white);\n }\n .StandardGridTableLayout .expanded-row-content {\n border-left: 2px solid var(--color-regal);\n }\n .StandardGridTableLayout .standard-grid-table-cell {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n }\n .StandardGridTableLayout .mobile-cell-header {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n margin-top: 9px;\n }\n .StandardGridTableLayout .cell-content {\n margin-top: 4px;\n margin-left: 4px;\n }\n}\n");const mc=(e,t,n)=>{if(n)return;const a=e.map((e=>{if("number"==typeof e)return`${e}fr`;if(Array.isArray(e)&&2===e.length){const[t,n]=e;return`minmax(${t.size+t.unit}, ${n.size+n.unit})`}return!Array.isArray(e)&&e.size&&e.unit?`${e.size}${e.unit}`:(e=>{throw new Error(`Invalid table sizing configuration.\n Expected either a sizing object with 'size' and 'unit' fields or an array of two sizing objects.\n Actual value was ${JSON.stringify(e)}`)})(e)}));return t&&a.push("48px"),a.join(" ")},gc=({columns:e,expandable:t,expandAll:n,isMobile:a,children:i,sizes:r})=>{const s=mc(r,t,a);return st.createElement("div",{className:"StandardGridTableLayout"},!a&&st.createElement("div",{className:"standard-grid-table-header",style:{gridTemplateColumns:s}},e.map((({name:e,sortDirection:t,onSort:n})=>st.createElement("div",{key:e,className:wn("standard-grid-table-cell",{sortable:!!n}),onClick:n||null},e,t?st.createElement("span",{className:wn("sort-indicator",t)}):null))),t&&st.createElement("div",{className:"standard-grid-table-cell header-expand-toggle",onClick:n},st.createElement("i",{className:"ico icon-expand-all"}))),i)},hc=({tableExpandable:e,rowExpandable:t,expanded:n,setExpanded:a,isMobile:i,sizes:r,children:s,renderExpandedContent:o})=>{const l=mc(r,e,i);return st.createElement("div",{className:wn("standard-grid-table-row-container",{"sp-margin-l-bottom":t&&n})},st.createElement("div",{className:wn("standard-grid-table-row",{expandable:t,expanded:n}),style:{gridTemplateColumns:l},onClick:t?()=>a(!n):null},s,e&&!i&&st.createElement("div",{className:"standard-grid-table-cell row-expand-toggle"},t&&st.createElement("i",{className:wn("ico",{"icon-expand":!n,"icon-collapse":n})}))),t&&n&&st.createElement("div",{className:"expanded-row-content"},o()))},fc=({children:e,indent:t,index:n,columns:a,isMobile:i})=>{const r=a[n].name,s=t&&i?16+20*t+"px":void 0;return st.createElement("div",{className:"standard-grid-table-cell",style:{paddingLeft:s}},i&&st.createElement("div",{className:"mobile-cell-header"},r),st.createElement("div",{className:"cell-content"},e))},vc=e=>({TableLayout:t=>st.createElement(gc,{...t,sizes:e}),TableRowLayout:t=>st.createElement(hc,{...t,sizes:e}),TableCellLayout:e=>st.createElement(fc,{...e})});class Ac extends pn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.render.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-high"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const Ec=({className:e,children:t})=>ot.createElement("span",{className:e,style:{wordBreak:"break-all",overflowWrap:"break-word",hyphens:"none"}},t),bc=({className:e,children:t})=>ot.createElement("span",{className:e,style:{whiteSpace:"nowrap"}},t);var yc,wc;function xc(e){return ot.createElement("div",null,ot.createElement("div",{className:"col-md-4 sm-label-left"},ot.createElement("b",null,e.propLabel),e.propHelpFieldId&&ot.createElement(Zs,{id:e.propHelpFieldId})),ot.createElement("div",{className:"col-md-8 sm-label-left"},ot.createElement("span",{className:"btn-group btn-group-"+e.toggleSize},ot.createElement("button",{name:"prop-off",type:"button",className:"btn btn-default "+(e.isPropertyActive?"disabled":"active btn-primary"),onClick:()=>e.onClick(!1)},ot.createElement(Qs,{value:e.tooltipPropOffBtn},ot.createElement("span",null,e.displayTextPropOffBtn))),ot.createElement("button",{name:"prop-on",type:"button",className:"btn btn-default "+(e.isPropertyActive?"active btn-primary":"disabled"),onClick:()=>e.onClick(!0)},ot.createElement(Qs,{value:e.tooltipPropOnBtn},ot.createElement("span",null,e.displayTextPropOnBtn))))))}(wc=yc||(yc={})).XSMALL="xs",wc.SMALL="sm",wc.MEDIUM="m",wc.LARGE="lg",xc.defaultProps={toggleSize:yc.XSMALL,displayTextPropOffBtn:"Off",tooltipPropOffBtn:"Toggle to turn OFF",displayTextPropOnBtn:"On",tooltipPropOnBtn:"Toggle to turn ON",isPropertyActive:!1};const Cc=({tooltip:e,placement:t,delayShow:n,wrapperClassName:a,...i})=>ot.createElement(Qs,{value:e,placement:t,delayShow:n},ot.createElement("div",{className:a},ot.createElement(Bn,{...i}))),kc={bindings:{options:"=",model:"=",onChange:"<?"},templateUrl:"core/src/pipeline/config/targetSelect.html"};n("spinnaker.pipeline.targetSelect.component",[]).component("targetSelect",kc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/targetSelect.html",'<ui-select ng-model="$ctrl.model.target" on-select="$ctrl.onChange($ctrl.model.target)" class="form-control input-sm">\n <ui-select-match placeholder="None">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="r.val as r in $ctrl.options ">\n <strong ng-bind-html="r.label | highlight: $select.search"></strong>\n <div ng-bind-html="r.description"></div>\n </ui-select-choices>\n</ui-select>\n')}]);class Bc extends ot.Component{constructor(){super(...arguments),this.clicked=e=>{const t=e.target.checked?[this.props.platformHealthType]:null;this.props.onChange(t)}}render(){return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:E(this.props.interestingHealthProviderNames,[this.props.platformHealthType]),onChange:this.clicked}),"Consider only ",this.props.platformHealthType," health")," ",ot.createElement(Zs,{id:"application.platformHealthOnly",expand:this.props.showHelpDetails}))}}function Sc(e){const{value:t,onChange:n,platformHealthType:a,showHelpDetails:i,...r}=e;return ot.createElement(Bc,{...r,interestingHealthProviderNames:t,platformHealthType:a,showHelpDetails:i,onChange:e=>{n(fr({name:r.name,value:e}))}})}const Mc=({dismiss:e})=>ot.createElement("div",{className:"modal-close close-button pull-right"},ot.createElement("button",{className:"link",type:"button",onClick:e},ot.createElement("span",{className:"glyphicon glyphicon-remove"})));class Nc extends ot.Component{render(){const{className:e,isDisabled:t,isFormSubmit:n,isNew:a,label:i,onClick:r,submitting:s}=this.props,o=n?"submit":"button";return ot.createElement("button",{className:e,disabled:t,onClick:r,type:o},ot.createElement("div",{className:"flex-container-h horizontal middle"},!s&&ot.createElement("i",{className:"far fa-check-circle"})||ot.createElement(Es,{mode:"circular"}),ot.createElement("span",{className:"sp-margin-xs-left"},i||(a?"Create":"Update"))))}}Nc.defaultProps={className:"btn btn-primary",onClick:qi,isDisabled:!1,isFormSubmit:!1,isNew:!1};class Dc{static setHeading(e){this.heading=e}static getPage(e){return this.pageRegistry.find((t=>t.key===e))}static markDirty(e){this.getPage(e).state.dirty=!0}static markClean(e){this.getPage(e).state.dirty=!1}static markComplete(e){this.getPage(e).state.done=!0}static markIncomplete(e){this.getPage(e).state.done=!1}static setCurrentPage(e,t){this.pageRegistry.forEach((t=>t.state.current=t===e)),this.currentPage=e,e.state.markCleanOnView&&this.markClean(e.key),e.state.markCompleteOnView&&this.markComplete(e.key),t||er.scrollTo(`[waypoint="${e.key}"]`,"[waypoint-container]",143)}static registerPage(e,t,n){n=n||{done:!1,blocked:!0,rendered:!0,current:!1,dirty:!1,markCleanOnView:!0,markCompleteOnView:!1,required:!1},this.pageRegistry.push({key:e,label:t,state:n}),this.renderPages()}static renderPages(){const e=this.pageRegistry.filter((e=>e.state.rendered));this.renderedPages=e,1===e.length&&this.setCurrentPage(e[0])}static isComplete(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done&&!e.dirty))}static allPagesVisited(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done))}static setRendered(e,t){this.pageRegistry.filter((t=>t.key===e)).forEach((e=>e.state.rendered=t)),this.renderPages()}static includePage(e){this.setRendered(e,!0)}static excludePage(e){this.setRendered(e,!1)}static resetWizard(){this.renderedPages.length=0,this.pageRegistry.length=0,this.currentPage=null,this.heading=null}}Dc.renderedPages=[],Dc.pageRegistry=[];class Ic extends ot.Component{constructor(){super(...arguments),this.state={errors:{},order:0,isLoading:!1,status:"default"},this.ref=ot.createRef(),this.innerRef=ot.createRef(),this.onLoadingChanged=e=>{const t=this.computeStatus(this.state.errors,e);return this.setState({isLoading:e,status:t},this.onWizardPageStateChanged)},this.validate=e=>{const t=this.innerRef.current,n=t&&P(t.validate)&&t.validate(e)||{};if(!E(n,this.state.errors)){const e=this.computeStatus(n,this.state.isLoading);this.setState({errors:n,status:e},this.onWizardPageStateChanged)}return n}}static getStatusClass(e){const t={error:"dirty",loading:"waiting",default:"done"};return t[e]||t.default}computeStatus(e,t){return Object.keys(e).length?"error":t?"loading":"default"}componentDidMount(){this.props.wizard.onWizardPageAdded(this)}componentWillUnmount(){this.props.wizard.onWizardPageRemoved(this)}componentDidUpdate(e){this.props.order!==e.order&&this.setState({order:this.props.order},this.onWizardPageStateChanged)}onWizardPageStateChanged(){this.props.wizard.onWizardPageStateChanged(this)}render(){const{note:e,label:t,render:n}=this.props,{status:a}=this.state,{innerRef:i,onLoadingChanged:r}=this,s=n({innerRef:i,onLoadingChanged:r}),o=Ic.getStatusClass(a);return ot.createElement("div",{className:"modal-page",ref:this.ref},t&&ot.createElement("div",{className:"wizard-subheading sticky-header"},ot.createElement("h4",{className:o},t)),ot.createElement("div",{className:"wizard-page-body"},s,e&&ot.createElement("div",{className:"row"},e)))}}class Fc extends ot.Component{render(){const{current:e,page:t,onClick:n}=this.props,{errors:a,status:i}=t.state,{label:r}=t.props,s=(e=>{const t=(e,n,a)=>(C(e)?e.forEach(((e,i)=>t(e,`${n}[${i}]`,a))):w(e)?a[n]=e:j(e)&&Object.keys(e).forEach((i=>t(e[i],`${n}.${i}`,a))),a);return t(e,"errors",{})})(a),o=!!Object.keys(s).length,l=`${Ic.getStatusClass(i)} ${e?"current":""}`,c=ot.createElement("li",{className:l},ot.createElement("a",{className:"clickable",onClick:()=>n(t)},r));if(!o)return c;const p=ot.createElement("span",null,Object.keys(s).map((e=>ot.createElement("span",{key:e},s[e]," ",ot.createElement("br",null)))));return ot.createElement(Qs,{template:p},c)}}class Tc extends ot.Component{render(){const{errorMessage:e}=this.props;if(!e.includes("has traffic guards enabled"))return null;const{$state:t,$stateParams:n}=hi,{project:a,application:i}=n,r=`home.${a?"project":"applications"}.application.config`,s={project:a,application:i,section:"traffic-guards"},o=t.href(r,s);return ot.createElement("p",null,ot.createElement("a",{href:o},"Configure Traffic Guards for this application"))}}class Qc extends ot.Component{getBaseState(){const{$stateParams:e}=hi;return`home.${e.project?"project":"applications"}.application`}getParams(e){const{project:t,application:n}=hi.$stateParams;return{project:t,application:n,...e}}render(){const{errorMessage:e,task:t}=this.props,{$state:n}=hi;if(!e)return null;const a=t.id?n.href(this.getBaseState()+".tasks.taskDetails",this.getParams({taskId:t.id})):null;return ot.createElement("div",{className:"col-md-12 overlay-modal-error"},ot.createElement("div",{className:"alert"},ot.createElement("h4",null,ot.createElement("i",{className:"fa fa-exclamation-triangle"})," Error:"),ot.createElement("p",null,ot.createElement(Br,{message:e})),ot.createElement(Tc,{errorMessage:e})),a&&ot.createElement("p",null,ot.createElement("a",{href:a},"View this failed task in the tasks pane.")))}}class Pc extends ot.Component{render(){const{item:e}=this.props,t=wn(["glyphicon","status-glyph",{"glyphicon-time":e.hasNotStarted,"glyphicon-play":e.isRunning,"fa fa-check":e.isCompleted,"fa fa-exclamation-triangle":e.isFailed||"TERMINATED"===e.status,"glyphicon-stop":e.isCanceled,"glyphicon-pause":e.isSuspended||e.isPaused}]);return ot.createElement("span",{className:t})}}function Rc(e){const t=["stageStart","stageEnd","determineTargetServerGroup"];let n=[];return e&&(n=e.filter((e=>!t.includes(e.name)||"TERMINAL"===e.status))),n}const Uc="spinnaker.pipelines.stages.common.displayableTasks.filter";n(Uc,[]).filter("displayableTasks",(function(){return Rc}));const zc=({monitor:e})=>{const t=rl();return qo(e.statusUpdatedStream,(()=>t())),e.task?ot.createElement(ot.Fragment,null,ot.createElement("ul",{className:"task task-progress"},Rc(e.task.steps).map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(Pc,{item:e})," ",yr(e.name)," ",e.startTime&&ar(e.runningTimeInMs))))),e.task.isRunning&&ot.createElement("ul",{className:"task task-progress task-progress-running"},ot.createElement("li",null,ot.createElement(Es,{size:"small"}))),e.task.isCompleted&&ot.createElement("ul",{className:"task task-progress task-progress-refresh"},ot.createElement("li",null,ot.createElement("span",{className:"far fa-check-circle"})," ",ot.createElement("strong",null,"Operation succeeded!"))),e.task.id&&!e.error&&e.application&&ot.createElement("p",null,"You can"," ",ot.createElement("a",{href:hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.application.name,taskId:e.task.id})},"monitor this task from the Tasks view"),".")):ot.createElement("ul",{className:"task"},"submitting task...")},Gc=({monitor:e})=>{const t=rl();return lt((()=>{var n;const a=null==(n=null==e?void 0:e.statusUpdatedStream)?void 0:n.subscribe((()=>t()));return()=>null==a?void 0:a.unsubscribe()}),[e]),e&&(e.submitting||e.error)?ot.createElement(ea,{appear:!0,classNames:"overlay-modal",timeout:0,in:!0},ot.createElement("div",{className:"overlay overlay-modal vertical"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.title)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.task&&ot.createElement("div",{className:"col-md-8 col-md-offset-2 overlay-modal-status"},ot.createElement(zc,{monitor:e})),ot.createElement(Qc,{errorMessage:e.errorMessage,task:e.task}))),!e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:e.closeModal},"Close")),e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>e.tryToFix()},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:e.closeModal},"Cancel")))):null};class jc extends ot.Component{constructor(){super(...arguments),this.stepsElement=ot.createRef(),this.formikRef=ot.createRef(),this.state={pages:[],initialized:!1,currentPage:null},this.onWizardPageAdded=e=>{this.setState((t=>{const n=t.pages.concat(e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.onWizardPageRemoved=e=>{this.setState((t=>{const n=M(t.pages,e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.setCurrentPage=e=>{e&&this.stepsElement.current&&e.ref.current&&(this.stepsElement.current.scrollTop=e.ref.current.offsetTop),this.setState({currentPage:e})},this.handleStepsScroll=e=>{const t=this.state.pages.map((e=>e.ref.current.offsetTop)),n=e.currentTarget.scrollTop;let a=t.reverse().findIndex((e=>n>=e));void 0===a&&(a=t.length-1);const i=t.length-(a+1),r=this.state.pages[i];r!==this.state.currentPage&&this.setState({currentPage:r})},this.validate=e=>{const t=this.props.validate||(()=>({}));return this.state.pages.map((t=>t.validate(e))).concat(t(e)).reduce(((e,t)=>d(e,t)),{})},this.revalidate=()=>this.formik&&this.formik.validateForm()}static incrementer(){let e=0;return()=>++e}get formik(){return this.formikRef.current&&this.formikRef.current.getFormikBag()}componentDidMount(){this.setState({initialized:!0})}onWizardPageStateChanged(e){this.forceUpdate()}render(){const{formClassName:e,heading:t,initialValues:n,loading:a,submitButtonLabel:i,taskMonitor:r,closeModal:s,dismissModal:o}=this.props,{currentPage:l,initialized:c,pages:p}=this.state,d=ot.createElement("div",{className:"row"},ot.createElement(Es,{size:"large"})),u=p.sort(((e,t)=>e.state.order-t.state.order)).map((e=>ot.createElement(Fc,{key:e.props.label,current:e===l,onClick:this.setCurrentPage,page:e}))),m=()=>{const e=this.formik,t=jc.incrementer();return e?this.props.render({formik:e,nextIdx:t,wizard:this}):null},g=r&&r.submitting,h=p.some((e=>"loading"===e.state.status));return ot.createElement(ot.Fragment,null,r&&ot.createElement(Gc,{monitor:r}),ot.createElement(zs,{ref:this.formikRef,initialValues:n,onSubmit:s,validate:this.validate,render:n=>ot.createElement(Vn,{className:`form-horizontal ${e}`},ot.createElement(Mc,{dismiss:o}),ot.createElement(qt.Header,null,t&&ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,a||!c?d:ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"steps-indicator wizard-navigation"},u)),ot.createElement("div",{className:"col-md-9 col-sm-12"},ot.createElement("div",{className:"steps",ref:this.stepsElement,onScroll:this.handleStepsScroll},m())))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:g,onClick:o,type:"button"},"Cancel"),ot.createElement(Nc,{isDisabled:!n.isValid||g||h||a,submitting:g,isFormSubmit:!0,label:i})))}))}}class Lc{constructor(e){this.$scope=e}$onInit(){this.render=!1!==this.render,this.markCleanOnView=!1!==this.markCleanOnView,this.markCompleteOnView=!1!==this.markCompleteOnView,this.state={blocked:!1,current:!1,rendered:this.render,done:this.done||!this.mandatory,dirty:!1,required:this.mandatory,markCleanOnView:this.markCleanOnView,markCompleteOnView:this.markCompleteOnView},Dc.registerPage(this.key,this.label,this.state),this.$scope.$on("$destroy",(()=>Dc.setRendered(this.key,!1)))}}Lc.$inject=["$scope"];const Oc={bindings:{mandatory:"<",done:"<",markCleanOnView:"<",markCompleteOnView:"<",key:"@",label:"@",render:"<"},transclude:!0,templateUrl:"core/src/modal/wizard/v2wizardPage.component.html",controller:Lc};n("spinnaker.core.modal.wizard.wizardPage.component",[]).component("v2WizardPage",Oc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2wizardPage.component.html",'<div class="modal-page" ng-if="$ctrl.state.rendered" waypoint="{{ $ctrl.key }}">\n <div class="wizard-subheading sticky-header">\n <h4\n ng-class="{\n default: !$ctrl.state.done,\n current: $ctrl.state.current,\n done: $ctrl.state.done,\n dirty: $ctrl.state.dirty\n }"\n >\n {{ $ctrl.label }}\n </h4>\n </div>\n <div class="wizard-page-body" ng-transclude></div>\n</div>\n')}]);oi("v2-modal-wizard .modal-header,\n.wizard-modal .modal-header {\n /* Set to keep sticky section headings beneath modal header*/\n position: relative;\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation,\n.wizard-modal ul.wizard-navigation {\n margin: 0;\n padding: 0;\n list-style-type: none;\n height: auto;\n position: relative;\n background-color: var(--color-white);\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation:before,\n.wizard-modal ul.wizard-navigation:before,\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n display: table;\n content: \" \";\n}\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n clear: both;\n}\nv2-modal-wizard ul.wizard-navigation li,\n.wizard-modal ul.wizard-navigation li {\n display: block;\n width: 100%;\n text-align: left;\n padding: 0;\n position: relative;\n}\nv2-modal-wizard ul.wizard-navigation li a,\n.wizard-modal ul.wizard-navigation li a {\n color: var(--color-dovegray);\n display: block;\n line-height: 15px;\n text-decoration: none;\n text-transform: uppercase;\n -webkit-transition: 0.25s;\n transition: 0.25s;\n width: 100%;\n font-weight: normal;\n padding: 10px 5px 10px 32px;\n}\nv2-modal-wizard ul.wizard-navigation li a:before,\n.wizard-modal ul.wizard-navigation li a:before {\n position: absolute;\n left: 10px;\n top: 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: transparent;\n content: '';\n -webkit-transition: 0.25s;\n transition: 0.25s;\n font-size: 110%;\n font-family: 'Glyphicons Halflings';\n}\nv2-modal-wizard ul.wizard-navigation li.done a:before,\n.wizard-modal ul.wizard-navigation li.done a:before {\n background-color: var(--color-success);\n}\nv2-modal-wizard ul.wizard-navigation li.default,\n.wizard-modal ul.wizard-navigation li.default {\n pointer-events: auto;\n}\nv2-modal-wizard ul.wizard-navigation li.default a:before,\n.wizard-modal ul.wizard-navigation li.default a:before {\n background-color: var(--color-dovegray);\n}\nv2-modal-wizard ul.wizard-navigation li.current,\n.wizard-modal ul.wizard-navigation li.current,\nv2-modal-wizard ul.wizard-navigation li:hover,\n.wizard-modal ul.wizard-navigation li:hover,\nv2-modal-wizard ul.wizard-navigation li:active,\n.wizard-modal ul.wizard-navigation li:active {\n -webkit-transition: 0.25s;\n transition: 0.25s;\n background-color: var(--color-cirrus);\n}\nv2-modal-wizard ul.wizard-navigation li.current a,\n.wizard-modal ul.wizard-navigation li.current a,\nv2-modal-wizard ul.wizard-navigation li:hover a,\n.wizard-modal ul.wizard-navigation li:hover a,\nv2-modal-wizard ul.wizard-navigation li:active a,\n.wizard-modal ul.wizard-navigation li:active a {\n color: var(--color-mineshaft);\n font-weight: 600;\n}\nv2-modal-wizard ul.wizard-navigation li.current a:before,\n.wizard-modal ul.wizard-navigation li.current a:before,\nv2-modal-wizard ul.wizard-navigation li:hover a:before,\n.wizard-modal ul.wizard-navigation li:hover a:before,\nv2-modal-wizard ul.wizard-navigation li:active a:before,\n.wizard-modal ul.wizard-navigation li:active a:before {\n background-color: var(--color-accent);\n content: '';\n}\nv2-modal-wizard ul.wizard-navigation li.dirty a:before,\n.wizard-modal ul.wizard-navigation li.dirty a:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n}\nv2-modal-wizard ul.wizard-navigation li.waiting a:before,\n.wizard-modal ul.wizard-navigation li.waiting a:before {\n background-color: var(--color-seashell);\n}\nv2-modal-wizard .steps,\n.wizard-modal .steps {\n overflow-y: auto;\n overflow-x: hidden;\n clear: both;\n max-height: calc(100vh - 215px);\n}\nv2-modal-wizard .steps .wizard-subheading,\n.wizard-modal .steps .wizard-subheading {\n padding: 0;\n margin-bottom: 10px;\n}\nv2-modal-wizard .steps .wizard-subheading h4,\n.wizard-modal .steps .wizard-subheading h4 {\n padding: 10px;\n margin-bottom: 0;\n color: var(--color-primary);\n background-color: var(--color-accent-g2);\n}\n@media (max-width: 992px) {\n v2-modal-wizard .steps .wizard-subheading h4,\n .wizard-modal .steps .wizard-subheading h4 {\n padding-left: 0;\n }\n v2-modal-wizard .steps .wizard-subheading h4:before,\n .wizard-modal .steps .wizard-subheading h4:before {\n display: inline-block;\n margin: 0 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: var(--color-dovegray);\n content: '';\n -webkit-transition: 0.25s;\n transition: 0.25s;\n font-size: 15px;\n }\n v2-modal-wizard .steps .wizard-subheading h4.done:before,\n .wizard-modal .steps .wizard-subheading h4.done:before {\n background-color: var(--color-success);\n }\n v2-modal-wizard .steps .wizard-subheading h4.dirty:before,\n .wizard-modal .steps .wizard-subheading h4.dirty:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n font-family: 'Glyphicons Halflings';\n }\n v2-modal-wizard .steps .wizard-subheading h4.waiting:before,\n .wizard-modal .steps .wizard-subheading h4.waiting:before {\n background-color: var(--color-seashell);\n }\n}\nv2-modal-wizard .steps .wizard-page-body,\n.wizard-modal .steps .wizard-page-body {\n padding: 10px 0 20px;\n}\n");class Yc{constructor(e){this.$scope=e,this.wizard=Dc}$onInit(){this.$scope.$on("waypoints-changed",((e,t)=>{t.lastWindow.map((e=>e.elem)).filter((e=>Dc.getPage(e))).reverse().forEach((e=>{Dc.setCurrentPage(Dc.getPage(e),!0)}))})),Dc.setHeading(this.heading)}$onDestroy(){Dc.resetWizard()}}Yc.$inject=["$scope"];const $c={bindings:{heading:"@",taskMonitor:"<",dismiss:"&"},transclude:!0,templateUrl:"core/src/modal/wizard/v2modalWizard.component.html",controller:Yc},Hc="spinnaker.core.modal.wizard.wizard.component";n(Hc,["spinnaker.core.modal.wizard.wizardPage.component"]).component("v2ModalWizard",$c),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2modalWizard.component.html",'<div modal-page>\n <task-monitor ng-if="$ctrl.taskMonitor" monitor="$ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$ctrl.dismiss()"></modal-close>\n <div class="modal-header" ng-if="$ctrl.wizard.heading">\n <h4 class="modal-title">{{ $ctrl.wizard.heading }}</h4>\n </div>\n <div ng-class="{ \'modal-body\': !$ctrl.notReallyModal }">\n <div class="row">\n <div class="col-md-3 hidden-sm hidden-xs">\n <ul class="steps-indicator wizard-navigation">\n <li\n ng-repeat="page in $ctrl.wizard.renderedPages"\n ng-class="{\n default: !page.state.done,\n current: page.state.current,\n done: page.state.done,\n dirty: page.state.dirty\n }"\n >\n <a href ng-click="$ctrl.wizard.setCurrentPage(page)">{{ page.label }}</a>\n </li>\n </ul>\n </div>\n <div class="col-md-9 col-sm-12">\n <div\n class="steps"\n ng-transclude\n sticky-headers\n waypoint-container\n waypoint-offset="120"\n waypoint-container-key="#modal-wizard"\n ></div>\n </div>\n </div>\n </div>\n</div>\n')}]);class Vc extends ot.Component{constructor(e){super(e),this.tooltipTemplate=ot.createElement("span",null,ot.createElement("p",null,"Task not completing?"),ot.createElement("p",null,"By default, Spinnaker does not consider cloud provider health (i.e. whether your instances have launched and are running) as a reliable indicator of instance health."),ot.createElement("p",null,"If your instances do not provide a health indicator known to Spinnaker (e.g. a discovery service or load balancers), you should configure your application to consider only cloud provider health when executing tasks. This option is available under Application Attributes in the ",ot.createElement("b",null,"Config tab"),"."));let t=!1;const n=e.task.getValueFor("lastCapacityCheck");if(n){const a=n.up+n.down+n.outOfService+n.unknown+n.succeeded+n.failed;t=e.task.execution.stages.some((t=>("cloneServerGroup"===t.type||"createServerGroup"===t.type)&&t.tasks.some((t=>t.startTime===e.step.startTime))))&&"waitForUpInstances"===e.step.name&&e.step.runningTimeInMs>bn.fromObject({minutes:5}).as("milliseconds")&&n.unknown>0&&n.unknown===a&&!m(e.application,"attributes.platformHealthOnly")}this.state={showMessage:t}}render(){return this.state.showMessage?ot.createElement(Qs,{template:this.tooltipTemplate},ot.createElement("i",{className:"fa fa-exclamation-circle",style:{fontSize:"smaller"}})):null}}class Jc{static addRunningTime(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||Object.defineProperties(e,{runningTimeInMs:{get:this.calculateRunningTime(e)}})}static shouldReplace(e,t){return(u(e)||""===e)&&!(u(t)||""===t)}static defineProperties(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||(e.getValueFor=t=>{var n;if(e.context)return e.context[t];if(!e.variables)return null;const a=e.variables.find((e=>e.key===t));if(a)return a.value;const i=null==(n=e.execution)?void 0:n.stages;if(i&&Array.isArray(i)&&i.length>0){const n=i.map((e=>e.context&&m(e.context,t))).reduce(((e,t)=>Jc.shouldReplace(e,t)?t:e),null);if(!u(n)&&""!==n)return e.variables.push({key:t,value:n}),n}return a?a.value:null},e.getDisplayUser=()=>{var t,n,a;const i=null!=(a=null==(n=null==(t=e.execution)?void 0:t.authentication)?void 0:n.user)?a:"unknown user",r=e.getValueFor("user");return null===r||r===i?i:`${r} (${i})`},e.originalStatus=e.status,Object.defineProperties(e,{failureMessage:{get:()=>this.mergeExceptions(e)},isCompleted:{get:()=>["SUCCEEDED","SKIPPED"].includes(e.status)},isRunning:{get:()=>"RUNNING"===e.status},isFailed:{get:()=>["TERMINAL","FAILED_CONTINUE","STOPPED"].includes(e.status)},isStopped:{get:()=>"STOPPED"===e.status},isActive:{get:()=>["RUNNING","SUSPENDED","NOT_STARTED","PAUSED"].includes(e.status)},hasNotStarted:{get:()=>["NOT_STARTED","BUFFERED"].includes(e.status)},isBuffered:{get:()=>"BUFFERED"===e.status},isCanceled:{get:()=>"CANCELED"===e.status},isSuspended:{get:()=>"SUSPENDED"===e.status},isPaused:{get:()=>"PAUSED"===e.status},status:{get:()=>this.normalizeStatus(e),set:t=>{e.originalStatus=t,this.normalizeStatus(e)}},runningTime:{get:()=>{const t=Date.now(),n=new Date(t-this.calculateRunningTime(e)());return vn(n,t,{includeSeconds:!0})},configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(e),configurable:!0}}))}static mergeExceptions(e){const t=[this.getCustomException(e),this.getGeneralException(e),this.getOrchestrationException(e)].filter((e=>!!e));return 0===t.length?null:t.join("\n\n")}static getOrchestrationException(e){const t=e.getValueFor("kato.tasks");if(t&&t.length){const e=t.find((e=>e.status&&e.status.failed));if(!e)return null;const n=e.history,a=e.exception;if(a)return a.message;if(n&&n.length)return n[n.length-1].status}return null}static getLockFailureException(e){const t=e.getValueFor("exception");if(t){const e=t.details;if(e&&e.currentLockValue){let t,n;return"orchestration"===e.currentLockValue.type?(t="task",n=hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.currentLockValue.application,taskId:e.currentLockValue.id})):(t="pipeline",n=hi.$state.href("home.applications.application.pipelines.executionDetails.execution",{application:e.currentLockValue.application,executionId:e.currentLockValue.id})),`Failed to acquire lock. An <a href="${n}">existing ${t}</a> is currently operating on the cluster.`}}return null}static getCustomException(e){const t=e.getValueFor("exception");return t&&t.exceptionType&&"LockFailureException"===t.exceptionType?this.getLockFailureException(e):null}static getGeneralException(e){var t,n,a,i;const r=e.getValueFor("exception");if(r){const e=(null!=(n=null==(t=r.details)?void 0:t.errors)?n:[]).filter((e=>!!e));return e.length?e.join("\n\n"):null!=(i=null==(a=r.details)?void 0:a.error)?i:null}return null}static calculateRunningTime(e){return()=>{if(!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static normalizeStatus(e){switch(e.originalStatus){case"SKIPPED":return"SKIPPED";case"COMPLETED":case"SUCCEEDED":return"SUCCEEDED";case"STARTED":case"EXECUTING":case"RUNNING":return"RUNNING";case"FAILED":case"TERMINAL":return"TERMINAL";case"STOPPED":return"STOPPED";case"SUSPENDED":case"DISABLED":return"SUSPENDED";case"NOT_STARTED":return"NOT_STARTED";case"CANCELED":return"CANCELED";case"UNKNOWN":return"UNKNOWN";case"TERMINATED":return"TERMINATED";case"PAUSED":return"PAUSED";case"FAILED_CONTINUE":return"FAILED_CONTINUE";case"BUFFERED":return"BUFFERED";default:return e.originalStatus&&Xe.warn("Unrecognized status:",e.originalStatus),e.originalStatus}}}class Wc{static getTasks(e,t=[]){return Si("/applications").path(e,"tasks").query({statuses:t.join(",")}).get().then((e=>(e.forEach((e=>this.setTaskProperties(e))),e.filter((e=>!e.getValueFor("dryRun"))))))}static getRunningTasks(e){return this.getTasks(e,this.activeStatuses)}static getTask(e){return Si("/tasks").path(e).get().then((e=>(this.setTaskProperties(e),e.execution&&(Jc.defineProperties(e.execution),e.execution.stages&&e.execution.stages.forEach((e=>Jc.defineProperties(e)))),e))).catch((t=>{Xe.warn("There was an issue retrieving taskId: ",e,t)}))}static waitUntilTaskMatches(e,t,n,a=1e3,i){const r=Ze.defer();return e?t(e)?r.resolve(e):n&&n(e)?r.reject(e):e.poller=_e((()=>{this.getTask(e.id).then((s=>{this.updateTask(e,s),null==i||i.next(),this.waitUntilTaskMatches(e,t,n,a,i).then(r.resolve,r.reject)}))}),a):r.reject(null),r.promise}static waitUntilTaskCompletes(e,t=1e3,n){return this.waitUntilTaskMatches(e,(e=>e.isCompleted),(e=>e.isFailed),t,n)}static updateTask(e,t){t&&(e.status=t.status,e.variables=t.variables,e.steps=t.steps,e.endTime=t.endTime,e.execution=t.execution,e.history=t.history)}static setTaskProperties(e){Jc.defineProperties(e),e.steps&&e.steps.length&&e.steps.forEach((e=>Jc.defineProperties(e)))}}Wc.activeStatuses=["RUNNING","SUSPENDED","NOT_STARTED"];class Kc{constructor(e){this.config=e,this.statusUpdatedStream=new At,this.closeModal=e=>{try{e&&e.stopPropagation(),this.modalInstance.dismiss()}catch(e){}},this.tryToFix=()=>{this.error=null,this.onTaskRetry&&this.onTaskRetry(),this.statusUpdatedStream.next()},this.submit=e=>{this.startSubmit(),(e||this.submitMethod)().then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))},this.title=e.title,this.application=e.application,this.modalInstance=e.modalInstance,this.onTaskComplete=e.onTaskComplete,this.onTaskRetry=e.onTaskRetry,this.monitorInterval=e.monitorInterval||1e3,this.submitMethod=e.submitMethod,this.modalInstance&&this.modalInstance.result.then((()=>this.onModalClose()),(()=>this.onModalClose()))}static modalInstanceEmulation(e,t){const n=Ze.defer();return n.promise.catch((()=>{})),{deferred:n,result:n.promise,close:t=>(n.resolve(t),e(t)),dismiss:a=>(n.reject(a),(t||e)(a))}}onModalClose(){this.task&&this.task.poller&&_e.cancel(this.task.poller)}startSubmit(){this.submitting=!0,this.task=null,this.error=!1,this.errorMessage=null,document.activeElement&&document.activeElement.blur(),this.statusUpdatedStream.next()}setError(e){e?(this.task=e,this.errorMessage=e.failureMessage||"There was an unknown server error."):this.errorMessage="There was an unknown server error.",this.submitting=!1,this.error=!0,this.statusUpdatedStream.next()}handleTaskComplete(){var e;null==(e=this.onTaskComplete)||e.call(this),this.statusUpdatedStream.next()}handleTaskSuccess(e){this.task=e,this.application&&this.application.getDataSource("runningTasks")&&this.application.getDataSource("runningTasks").refresh(),Wc.waitUntilTaskCompletes(e,this.monitorInterval,this.statusUpdatedStream).then((()=>this.handleTaskComplete())).catch((()=>this.setError(e))),this.statusUpdatedStream.next()}callPreconfiguredSubmit(e){this.startSubmit(),this.submitMethod(e).then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))}}class qc extends ot.Component{render(){return ot.createElement("div",{className:"row",style:{marginTop:"10px",marginBottom:"10px"}},ot.createElement("div",{className:"col-md-3 sm-label-right"},"Reason"),ot.createElement("div",{className:"col-md-7"},ot.createElement("textarea",{className:"form-control",value:this.props.reason,onChange:e=>this.props.onChange(e.target.value),"ng-model":"vm.command.reason",rows:3,placeholder:"(Optional) anything that might be helpful to explain the reason for this change; HTML is okay"})))}}const Xc=[];const Zc=new class{constructor(){this.api=Si,this.plugins={sharedLibraries:{}}}addInjectable(e){Xc.push(e)}};window&&(window.spinnaker=Zc),window.spinnaker=Zc;n("spinnaker.core.utils.consoleDebug",[]).run(["$injector",e=>{Zc.$injector=e,Xc.forEach((t=>Zc[t]=e.get(t)))}]);class _c{static postTaskCommand(e){return Si("/tasks").post(e)}static cancelTask(e){return Si("/tasks").path(e,"cancel").put().then((()=>Wc.getTask(e).then((e=>Wc.waitUntilTaskMatches(e,(e=>"CANCELED"===e.status))))))}}Zc.TaskWriter=_c;class ep{static executeTask(e){const t=e.application||e.project||{name:"ad-hoc"};return e.application&&e.application.name&&(e.application=e.application.name),e.project&&e.project.name&&(e.project=e.project.name),"aws"===e.job[0].providerType&&delete e.job[0].providerType,e.job.forEach((e=>e.user=ri.getAuthenticatedUser().name)),_c.postTaskCommand(e).then((e=>{const n=e.ref.split("/").pop();return t.runningTasks&&t.runningTasks.refresh&&t.runningTasks.refresh(),Wc.getTask(n)}),(e=>{var t;const n=(null==(t=e.data)?void 0:t.message)||"Sorry, no more information.",a={status:e.status,message:e.statusText,log:n,failureMessage:n};return Ze.reject(a)}))}}class tp extends ot.Component{constructor(e){super(e),this.close=()=>{this.props.dismissModal()},this.submitTask=e=>{const{application:t,description:n}=this.props,a=Kc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),i=new Kc({application:t,modalInstance:a,title:n,onTaskComplete:()=>t.serverGroups.refresh()}),r=this.props.mapValuesToTask(e);r.description=this.props.description;i.submit((()=>{const e=ep.executeTask(r),t=()=>this.setState({isSubmitting:!1});return e.then(t,t),e})),this.setState({taskMonitor:i,isSubmitting:!0})},this.state={taskMonitor:null,isSubmitting:!1}}render(){const{isSubmitting:e}=this.state;return ot.createElement("div",null,ot.createElement(Gc,{monitor:this.state.taskMonitor}),ot.createElement(zs,{initialValues:this.props.initialValues,onSubmit:this.submitTask,render:t=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Mc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,this.props.title)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement(Ys,{value:co},this.props.render(t))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:e,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Nc,{isDisabled:!t.isValid||e,submitting:e,isFormSubmit:!0,label:"Submit"})))}))}}const{useEffect:np,useState:ap}=ot;function ip(e){const{label:t,account:n}=e,[a,i]=ap("");if(e.account&&e.expectedValue)throw new Error("Supply either the 'account' or the 'expectedValue' prop, but not both");const r=e.expectedValue||n,s=a===r,[o,l]=ap(!0);np((()=>{n&&Di.challengeDestructiveActions(n).then(l)}),[n]);const c=n&&!o;np((()=>e.onValidChange(c||s)),[s,c]);const p=ot.createElement(ot.Fragment,null,"Type the name of the account (",ot.createElement("span",{className:"verification-text"},r),") to continue"),d="form-control input-sm highlight-pristine "+(s?"":"ng-invalid");return c?null:ot.createElement("div",{className:"row verification user-verification"},ot.createElement("div",{className:"col-sm-12"},ot.createElement("div",{className:"form-inline"},ot.createElement("div",{className:"form-group"},ot.createElement("div",{className:"form-control-static"},t?ot.createElement(Br,{tag:"span",message:t}):p)," ",ot.createElement(Zs,{id:"user.verification"}),ot.createElement("input",{type:"text",className:d,value:a,onChange:e=>i(e.target.value)})))))}oi(".multi-task-monitor .overlay-modal-status {\n font-size: 90%;\n}\n.multi-task-monitor ul.task-progress {\n padding-left: 0;\n}\n");const rp=({monitors:e=[],title:t,closeModal:n})=>{const[a,i]=ot.useState(e.some((e=>e.error)));return e.some((e=>e.submitting||e.error))?ot.createElement("div",{className:"overlay overlay-modal multi-task-monitor"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.map(((e,t)=>{var n,a;return ot.createElement("div",{className:"col-md-6 overlay-modal-status",key:`${null!=(a=null==(n=e.task)?void 0:n.id)?a:t}`},ot.createElement("h4",null,e.title),ot.createElement(zc,{monitor:e}),ot.createElement(Qc,{task:e.task,errorMessage:e.errorMessage}))})))),ot.createElement(qt.Footer,null,!a&&ot.createElement("button",{className:"btn btn-primary",onClick:n},"Close"),a&&ot.createElement(ot.Fragment,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>{e.forEach((e=>e.error=null)),i(!1)}},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:n},"Cancel")))):null},sp=e=>{const{account:t,verificationLabel:n,textToVerify:a,taskMonitor:i,taskMonitors:r,closeModal:s,dismissModal:o}=e,{useState:l,useEffect:c}=ot,[p,d]=l(!1),[u,m]=l(!1),[g,h]=l(!t&&!n&&!a),[f,v]=l({isError:!1}),[A,E]=l(),[b,y]=l();il((()=>o())),c((()=>{if(i&&!i.modalInstance&&(i.modalInstance=Kc.modalInstanceEmulation(s,o)),null==i?void 0:i.onTaskRetry){const{onTaskRetry:e}=i;i.onTaskRetry=()=>{m(!0),d(!1),e()}}}),[i]);const w=t||n&&a,x=p||!g,C=e=>{v({isError:!0,message:e}),d(!1)},k=(i||r)&&e.askForReason||e.submitJustWithReason,B=u&&e.retryBody||e.bodyContent||f.isError||e.platformHealthOnlyShowOverride||e.askForReason||e.submitJustWithReason;return ot.createElement("div",null,ot.createElement(Gc,{monitor:i}),ot.createElement(rp,{monitors:r,title:e.multiTaskTitle,closeModal:()=>o({source:"taskmonitor"})}),ot.createElement(Mc,{dismiss:()=>o({source:"header"})}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.header)),B&&ot.createElement(qt.Body,null,e.bodyContent,e.platformHealthOnlyShowOverride&&ot.createElement(Bc,{interestingHealthProviderNames:b,showHelpDetails:!0,platformHealthType:e.platformHealthType,onChange:y}),f.isError&&ot.createElement("div",{className:"alert alert-danger"},ot.createElement("h4",null,"An error occurred:"),ot.createElement("p",null,f.message||"No details provided.")),u&&e.retryBody&&ot.createElement(Br,{message:e.retryBody}),k&&ot.createElement(qc,{reason:A,onChange:E})),ot.createElement(qt.Footer,null,!p&&w&&ot.createElement(ip,{onValidChange:h,account:t,expectedValue:a,label:n}),ot.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>o({source:"footer"})},e.cancelButtonText),ot.createElement("button",{className:"btn btn-primary",type:"button",onClick:()=>{const{submitMethod:t,submitJustWithReason:n}=e;x||(d(!0),r?r.forEach((e=>e.callPreconfiguredSubmit({reason:A}))):i?i.submit((()=>t({interestingHealthProviderNames:b,reason:A}))):n?t({reason:A}).then(s,C):t?t().then(s,C):s())},disabled:x},p&&ot.createElement(Es,{mode:"circular"}),e.buttonText)))};class op{static confirm(e){const t={...this.defaults,...e};e.body&&(t.bodyContent=Sr(e.body));const{taskMonitorConfig:n,taskMonitorConfigs:a}=e;n&&(t.taskMonitor=new Kc(n)),a&&(t.taskMonitors=a.map((e=>new Kc(e))));const{promise:i,resolve:r,reject:s}=Ze.defer();return si.show(sp,t).then(r,s),i.catch((()=>{})),i}}op.defaults={buttonText:"Confirm",cancelButtonText:"Cancel"};class lp{constructor(){this.builders={}}register(e,t){this.builders[e]=t}getBuilder(e){return this.builders[e]}}class cp extends ot.Component{constructor(e){super(e),this.cancel=()=>{this.props.dismissModal()},this.selectProvider=()=>{this.props.closeModal(this.state.selectedProvider)},this.state={}}static show(e){return si.show(cp,e,{})}setProvider(e){this.setState({selectedProvider:e})}render(){const{selectedProvider:e}=this.state,{providerOptions:t}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(Mc,{dismiss:this.cancel}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,"Select Your Provider")),ot.createElement(qt.Body,null,ot.createElement("div",{className:"card-choices"},t.map((t=>ot.createElement("div",{className:`card vertical center middle ${e===t&&"active"}`,key:t,onClick:()=>this.setProvider(t)},Ni.hasValue(t,"logo.path")&&ot.createElement("img",{src:Ni.getValue(t,"logo.path"),alt:t,width:"100%",height:"auto"}),!Ni.hasValue(t,"logo.path")&&ot.createElement("h3",{className:"card-label"},t)))))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",onClick:this.cancel},"Cancel"),ot.createElement("button",{className:"btn btn-primary",onClick:this.selectProvider,disabled:!e},"Next")))}}class pp{static selectProvider(e,t,n){return Di.applicationAccounts(e).then((a=>{let i=[];t&&(i=a.filter((e=>Ni.hasValue(e.cloudProvider,t)))),n&&(i=i.filter((t=>n(e,t,Ni.getProvider(t.cloudProvider)))));const r=f(i.filter((e=>!Ni.isDisabled(e.cloudProvider))).map((e=>(Ni.getProvider(e.cloudProvider)[t]||{}).useProvider||e.cloudProvider)));let s;return r.length>1?cp.show({providerOptions:r}):(s=1===r.length?Ze.when(r[0]):Ze.when(di.defaultProvider||"aws"),s)}))}static isDisabled(e){return Di.applicationAccounts(e).then((e=>{let t=!1;return 0===e.filter((e=>!Ni.isDisabled(e.cloudProvider))).length&&(t=!0),t}))}}class dp extends ot.Component{constructor(e){super(e),this.state={label:this.getProviderLabel(e.provider)}}getProviderLabel(e){return Ni.getValue(e,"name")||e}componentWillReceiveProps(e){this.setState({label:this.getProviderLabel(e.provider)})}render(){return ot.createElement("span",null,this.state.label)}}oi(".cloud-provider-logo {\n display: inline-block;\n margin-right: 3px;\n}\n.cloud-provider-logo .icon {\n display: inline-block;\n vertical-align: sub;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: 50% 50%;\n mask-position: 50% 50%;\n -webkit-mask-size: cover;\n mask-size: cover;\n background-color: var(--color-success);\n}\n.cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.disabled .cloud-provider-logo .icon {\n background-color: var(--color-dovegray);\n}\n.disabled .cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.header-text .cloud-provider-logo {\n margin-right: 10px;\n}\n");const up=({height:e,provider:t,showTooltip:n,width:a})=>{const[i,r]=ot.useState(void 0),s=Ni.getValue(t,"cloudProviderLogo");ot.useEffect((()=>{n&&r(Ni.getValue(t,"name")||t)}),[n]);const o=s?ot.createElement(s,{height:e,width:a}):ot.createElement("span",{className:`icon icon-${t}`,style:{height:e,width:a}});return i?ot.createElement(Qs,{value:i},o):ot.createElement("span",{className:"cloud-provider-logo"},o)};class mp{constructor(e,t){this.$injector=e,this.$q=t}hasDelegate(e,t){const n=Ni.getValue(e,t);return P(n)||w(n)&&this.$injector.has(n)}getDelegate(e,t){const n=Ni.getValue(e,t);if(w(n)&&this.$injector.has(n))return this.$injector.get(n,"providerDelegate");if(P(n))return new n(this.$q);throw new Error('No "'+t+'" service found for provider "'+e+'"')}}mp.$inject=["$injector","$q"];const gp="spinnaker.core.cloudProvider.service.delegate";n(gp,[]).service("providerServiceDelegate",mp);const hp={list:()=>Si("/jobs/preconfigured").useCache().get()},fp={BITBUCKET_FILE:/bitbucket\/file/,CUSTOM_OBJECT:/custom\/object/,DOCKER_IMAGE:/docker\/image/,EMBEDDED_BASE64:/embedded\/base64/,GCS_OBJECT:/gcs\/object/,GITHUB_FILE:/github\/file/,GIT_REPO:/git\/repo/,GITLAB_FILE:/gitlab\/file/,GCE_MACHINE_IMAGE:/gce\/image/,JENKINS_FILE:/jenkins\/file/,KUBERNETES:/kubernetes\/(.*)/,S3_OBJECT:/s3\/object/,HELM_CHART:/helm\/chart/,IVY_FILE:/ivy\/file/,MAVEN_FILE:/maven\/file/,HTTP_FILE:/http\/file/,FRONT50_PIPELINE_TEMPLATE:/front50\/pipelineTemplate/,ORACLE_OBJECT:/oracle\/object/},vp=(...e)=>Object.keys(fp).map((e=>fp[e])).filter((t=>!e.includes(t)));class Ap extends ot.Component{constructor(e,t){if(super(e),this.onVersionChange=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},e.artifact.type!==t&&"custom-artifact"!==e.artifact.artifactAccount){const n=p(e.artifact);n.type=t,n.customKind=!1,e.onChange(n)}}}const Ep=e=>e.current===e.name?ot.createElement("div",{className:"step-section-details"},e.children):null;class bp extends ot.Component{render(){const e=m(this.props.stage,"context.execution.logs");return e?ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("a",{target:"_blank",href:e},"View Execution Logs")))):null}}class yp{static observe(e){return this.message$.pipe(Tt((t=>t.key===e)),St((e=>e.payload)))}static publish(e,t){this.message$.next({key:e,payload:t})}}yp.message$=new At;var wp,xp=Object.defineProperty,Cp=Object.getOwnPropertyDescriptor;(wp||(wp={})).NO_REASON_PROVIDED="No reason provided.";let kp=class extends ot.Component{constructor(e){super(e),this.state=this.getState(e)}getState(e){const{stage:t}=e;if(t&&(t.isFailed||t.isStopped)){const n=(t.tasks||[]).find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));let a,i,r=t.name;if(!n||!e.message&&0===e.messages.length){const e=m(t.context,"exception.source");if(e)r=e.stageName,a=e.executionId,i=e.stageId;else if(t.after){const e=t.after.find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));e&&(r=yr(e.name),i=e.id)}}return{isFailed:!0,failedTask:n,failedExecutionId:a,failedStageName:r,failedStageId:i}}return{failedTask:void 0,isFailed:!1}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{message:e,messages:t}=this.props,{isFailed:n,failedTask:a,failedExecutionId:i,failedStageName:r,failedStageId:s}=this.state;if(n||a||e||t.length){const o=n?t.length?"Exceptions":"Exception":"Warning",l=e||!t.length?ot.createElement(Br,{message:e||wp.NO_REASON_PROVIDED,className:"break-word"}):t.map(((e,t)=>ot.createElement(Br,{key:t,message:e||wp.NO_REASON_PROVIDED,className:"break-word"})));if(l)return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert "+("Warning"===o?"alert-warning":"alert-danger")},ot.createElement("div",null,ot.createElement("h5",null,o," ",a&&ot.createElement("span",null,"( ",yr(a.name)," )")),l,ot.createElement(Tc,{errorMessage:e||t.join(",")})))));if(void 0!==s){const e=hi.$state.current,t={stageId:s};return void 0!==i&&(t.executionId=i),ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert alert-danger"},ot.createElement("div",null,"Stage"," ",ot.createElement(Dn,{to:e.name,params:t},ot.createElement("a",null,r))," ","failed."))))}yp.publish("stage-failure-message:no-reason",{params:{...hi.$state.params}})}return null}};function Bp(e){const{action:t,stage:n}=e;return ot.createElement(Ep,{name:e.name,current:e.current},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("dl",{className:"dl-narrow dl-horizontal"},ot.createElement("dt",null,"Account"),ot.createElement("dd",null,ot.createElement(ts,{account:n.context.credentials})),ot.createElement("dt",null,"Region"),ot.createElement("dd",null,n.context.region),ot.createElement("dt",null,"Server Group"),ot.createElement("dd",null,n.context.serverGroupName)))),ot.createElement(kp,{stage:n,message:n.failureMessage}),n.isCompleted&&n.context.serverGroupName&&ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("strong",null,t,": "),n.context.serverGroupName))),ot.createElement(bp,{stage:n}))}kp.defaultProps={messages:[]},kp=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Cp(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&xp(t,n,r),r})([na],kp);const Sp=[{key:"sunday",label:"Sun",ordinal:1},{key:"monday",label:"Mon",ordinal:2},{key:"tuesday",label:"Tue",ordinal:3},{key:"wednesday",label:"Wed",ordinal:4},{key:"thursday",label:"Thu",ordinal:5},{key:"friday",label:"Fri",ordinal:6},{key:"saturday",label:"Sat",ordinal:7}],Mp="The pipeline will proceed immediately, continuing to the next step in the stage.";class Np extends ot.Component{constructor(e){var t;super(e),this.finishWaiting=e=>{const{executionService:t}=hi;e.target.blur();const{application:n,execution:a,stage:i}=this.props,r=e=>"RUNNING"!==e.stages.find((e=>e.id===i.id)).status,s={skipRemainingWait:!0};op.confirm({header:"Really skip execution window?",buttonText:"Skip",body:i.context.skipWindowText||`<p>${Mp}</p>`,submitMethod:()=>t.patchExecution(a.id,i.id,s).then((()=>t.waitUntilExecutionMatches(a.id,r))).then((e=>t.updateExecution(n,e)))})};const n=null==(t=e.stage.context.restrictedExecutionWindow)?void 0:t.days;let a="Everyday";n&&n.length>0&&(a=this.replaceDays(n).join(", ")),this.state={dayText:a}}replaceDays(e){const t=new Set(e);return Sp.filter((e=>t.has(e.ordinal))).map((e=>e.label))}render(){const{stage:e}=this.props;return ot.createElement("div",null,ot.createElement("h5",null,"Execution Windows Configuration"),ot.createElement("strong",null,"Stage execution can only run:"),ot.createElement("dl",{className:"dl-narrow dl-horizontal"},m(e,"context.restrictedExecutionWindow.whitelist",[]).map(((e,t)=>ot.createElement("div",{key:t},ot.createElement("dt",null,"From"),ot.createElement("dd",null,or({hours:e.startHour,minutes:e.startMin}),ot.createElement("strong",{style:{display:"inline-block",margin:"0 5px"}}," to "),or({hours:e.endHour,minutes:e.endMin}),ot.createElement("strong",null," ",ot.createElement(tr,null)," "))))),ot.createElement("dt",null,"On"),ot.createElement("dd",null,this.state.dayText)),e.context.skipRemainingWait&&ot.createElement("div",null,ot.createElement("span",null,"(skipped "),e.context.lastModifiedBy&&ot.createElement("span",null," by ",e.context.lastModifiedBy),")"),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:this.finishWaiting},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining window")))}}const Dp=({stage:e,execution:t,application:n})=>{const{conditions:a}=e.outputs;return ot.createElement("div",null,ot.createElement("div",null,a&&a.length>0&&ot.createElement("ul",{className:"nostyle",style:{marginBottom:"10px"}},a.map((({name:e,description:t},n)=>ot.createElement("li",{key:e+n},ot.createElement("b",null,e),": ",t)))),"SKIPPED"===e.context.status&&ot.createElement("span",null,"(skipped after ",ar(e.runningTimeInMs),")")),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:a=>((e,t,n,a)=>{const{executionService:i}=hi;e.target.blur();const r=({stages:e})=>"RUNNING"!==e.find((e=>e.id===t.id)).status,s={status:"SKIPPED"};op.confirm({header:"Really skip wait?",buttonText:"Skip",body:t.context.skipWaitText||"The pipeline will proceed immediately, marking this stage completed.",submitMethod:()=>i.patchExecution(n.id,t.id,s).then((()=>i.waitUntilExecutionMatches(n.id,r))).then((e=>i.updateExecution(a,e)))})})(a,e,t,n)},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining wait")))};class Ip extends ot.Component{constructor(e){super(e),this.mounted=!1,this.hydrate=()=>{const{application:e,execution:t}=this.props;this.requiresHydration()&&t&&hi.executionService.hydrate(e,t).then((()=>{this.mounted&&!this.state.hydrated&&this.setState({hydrated:!0})}))},this.requiresHydration=()=>{const{stage:e}=this.props,{suspendedStageTypes:t}=e;return e.labelComponent!==Ip||["restrictExecutionDuringTimeWindow","waitForCondition"].some((e=>t.has(e)))},this.DefaultLabel=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.labelComponent,i=ot.createElement(Zt,{id:e.id},ot.createElement(a,{application:t,execution:n,stage:e}));return ot.createElement(Xt,{placement:"top",overlay:i},this.props.children)},this.getExecutionWindowTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"restrictExecutionDuringTimeWindow"===e.type));return ot.createElement("div",null,ot.createElement("div",null,ot.createElement("b",null,e.name)," (waiting for execution window)"),ot.createElement(Np,{application:t,execution:n,stage:a}))},this.getWaitForConditionTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"waitForCondition"===e.type));return ot.createElement("div",null,ot.createElement("p",null,ot.createElement("b",null,e.name)," (waiting until conditions are met)"),"Conditions:",ot.createElement(Dp,{application:t,execution:n,stage:a}))},this.state={hydrated:e.execution&&e.execution.hydrated}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}getRenderableStageName(){const{stage:e}=this.props;let t=e.name?e.name:e.type;const n=hi.$uiRouter.globals.params;if("group"===e.type&&e.groupStages&&e.index===Number(n.stage)){const a=Number(n.subStage);if(!Number.isNaN(a)){const n=e.groupStages[a];n&&(t+=`: ${n.name}`)}}return t}render(){const{stage:e,executionMarker:t}=this.props,{suspendedStageTypes:n}=e,{getExecutionWindowTemplate:a,getWaitForConditionTemplate:i,DefaultLabel:r}=this;if(t){let e=null;return this.requiresHydration()&&!this.state.hydrated?e=ot.createElement(Es,{size:"small"}):n.has("restrictExecutionDuringTimeWindow")?e=a():n.has("waitForCondition")&&(e=i()),e?ot.createElement("span",{onMouseEnter:this.hydrate},ot.createElement(Ks,{template:e},this.props.children)):ot.createElement(r,null)}return ot.createElement("span",null,this.getRenderableStageName())}}const Fp=["RUNNING","SUSPENDED"];class Tp{constructor(e,t){this.item=e,this.updateCallback=t,this.checkStatus()}checkStatus(e=this.item){e&&e!==this.item&&(this.item=e),Fp.includes(this.item.status)||(this.reset(),this.updateCallback(this.item.runningTimeInMs)),Fp.includes(this.item.status)&&!this.updateInterval&&(this.updateInterval=setInterval((()=>this.updateCallback(Date.now()-this.item.startTime)),1e3),this.updateCallback(Date.now()-this.item.startTime))}reset(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=void 0)}}class Qp extends ot.Component{componentWillUnmount(){this.runningTime&&this.runningTime.reset()}componentDidMount(){const{item:e}=this.props,t=(e.tasks||[]).find((e=>"RUNNING"===e.status));t&&(this.runningTime=new Tp(t,(e=>this.setState({runningTimeInMs:e}))))}render(){const{item:e}=this.props;return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("strong",null,"Task")),ot.createElement("div",{className:"col-md-3 text-right"},ot.createElement("strong",null,"Duration"))),Rc(e.tasks||[]).map(((e,t)=>ot.createElement("div",{key:t,className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("span",{className:"small"},ot.createElement(Pc,{item:e}))," ",yr(e.name)),ot.createElement("div",{className:"col-md-3 text-right"},ar(e.runningTimeInMs)))))))}}function Pp(e){return ot.createElement(Ep,{name:e.name,current:e.current},ot.createElement(Qp,{item:e.stage}))}(Pp||(Pp={})).title="taskStatus";const Rp=({stage:e})=>e.isSuspended||e.suspendedStageTypes.size>0?ot.createElement("span",{className:"far fa-clock sp-margin-xs-right"}):null,Up=e=>ot.createElement("div",{className:null!=e.groupClassName?e.groupClassName:"form-group"},ot.createElement("label",{className:`col-md-${e.labelColumns||3} sm-label-right`},ot.createElement("span",{className:"label-text"},e.label," "),e.helpKey&&ot.createElement(Zs,{id:e.helpKey})),ot.createElement("div",{className:`col-md-${e.fieldColumns||8}`},e.children)),zp=(e,t)=>{const n=e.stages.filter((e=>e.type===t&&"RUNNING"===e.status));if(n.forEach((e=>{e.status="SUSPENDED",e.tasks.forEach((function(e){e.status="SUSPENDED"}))})),n.length>0&&"RUNNING"===e.status){e.stages.some((e=>"RUNNING"===e.status))||(e.status="SUSPENDED")}};class Gp{static convertJsonKeysToBracketedList(e,t=[]){const n=[],a=[],i=[];for(n.push(e);0!==n.length;){const e=n.pop(),r=Object.keys(e),s=i.pop()||"";this.processKeys(r,e,i,s,n,a,t)}return a}static escapeForRegEx(e){return e?e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"):null}static processKeys(e,t,n,a,i,r,s){e.forEach((e=>{const o=isFinite(parseInt(e,10))?`${a}[${parseInt(e,10)}]`:`${a}['${e}']`,l=t[e];j(l)||Array.isArray(l)||s.some((e=>{const t=`['${e}`;return o.substr(0,t.length)===t}))||r.push({leaf:o,value:l}),j(t[e])&&(n.push(o),i.push(t[e]))}))}}class jp{constructor(e,t){this.$q=e,this.executionService=t,this.executionCache={},this.brackets=[{open:"(",close:")"},{open:"[",close:"]"}],this.quotes=[{open:"'",close:"'"},{open:'"',close:'"'}],this.helperFunctions=["alphanumerical","readJson","fromUrl","propertiesFromUrl","jsonFromUrl","judgment","stage","toBoolean","toFloat","toInt","toJson","toBase64","fromBase64","cfServiceKey"],this.helperParams=["execution","parameters","trigger","scmInfo","scmInfo.sha1","scmInfo.branch","deployedServerGroups"],this.codedHelperParams=this.helperParams.map((e=>({name:e,type:"param"}))),this.textcompleteConfig=[{id:"SpEL wrapper",match:/\$(\w*)$/,search:function(e,t){t(["${...}"])},index:1,replace:function(){return["${ "," }"]}},{id:"match quotes",match:/(["'])(\w*)$/,index:1,search:(e,t)=>{t(this.quotes.filter((t=>0===t.open.indexOf(e))))},template:function(){return"'...'"},replace:function(){return["'","'"]}},{id:"match brackets",match:/([[('])(\w*)$/,index:1,search:(e,t)=>{t(this.brackets.filter((t=>0===t.open.indexOf(e))))},template:e=>`${e.open}...${e.close}`,replace:e=>[`${e.open} `,` ${e.close}`]}]}paramInList(e){return t=>e.name===t.name}addToTextcompleteConfig(e,t){const n=t.slice(0);for(const a of e)0===t.filter((e=>e.id===a.id)).length&&n.push(a);return n}listSearchFn(e){return(t,n)=>{n(e.filter((e=>{if(e.leaf.includes(t))return e})))}}leafTemplateFn(e){return`${e.leaf} <span class="glyphicon glyphicon-triangle-right spel-value-separator"/> <span class="marker value"\n title="${e.value}">${e.value.length>90?`${e.value.slice(0,90)}...`:e.value}</span>`}addExecutionForAutocomplete(e,t){if(e){const n=Gp.convertJsonKeysToBracketedList(e,["task"]),a=[{id:`execution: ${e.id}`,match:/execution(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`execution${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addDeployedServerGroupsForAutoComplete(e,t){if(e&&e.context&&e.context.deploymentDetails){const n=Gp.convertJsonKeysToBracketedList(e.context.deploymentDetails),a=[{id:`deploymentServerGroups: ${e.id}`,match:/deployedServerGroups(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`deployedServerGroups${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addStageDataForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.map((e=>{const t=Gp.convertJsonKeysToBracketedList(e,["task"]);return{id:`stage config for ${e.name}`,match:new RegExp(`#stage\\(\\s*'${Gp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#stage('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addManualJudgementConfigForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.filter((e=>"manualJudgment"===e.type)).map((e=>{const t=Gp.convertJsonKeysToBracketedList(e);return{id:`judgement config for ${e.name}`,match:new RegExp(`#judgment\\(\\s*'\\s*${Gp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#judgement('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addTriggerConfigForAutocomplete(e,t){if(e&&e.trigger){const n=[e.trigger].map((e=>{const t=Gp.convertJsonKeysToBracketedList(e);return{id:`trigger config: ${e.type}`,match:/trigger(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`trigger${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addParameterConfigForAutocomplete(e,t){if(e&&e.parameterConfig){const n=[e.parameterConfig].map((e=>{const t=Gp.convertJsonKeysToBracketedList(e);return{id:`parameter config: ${Object.keys(e).join(",")}`,match:/parameters(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`parameters${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}hasBuildTriggerOrStage(e,...t){return t.some((t=>e.triggers&&e.triggers.some((e=>e.type===t))||e.stages.some((e=>e.type===t))))}addStageNamesToCodeHelperList(e,t){if(e&&e.stages){let n=this.codedHelperParams.slice(0);const a=e.parameterConfig&&e.parameterConfig.length;n=a?n:n.filter((e=>"parameters"!==e.name)),n=this.hasBuildTriggerOrStage(e,"jenkins","concourse")?n:n.filter((e=>!e.name.includes("scmInfo"))),e.stages.forEach((e=>{const t={name:e.name,type:e.type};0===n.filter(this.paramInList(t)).length&&n.push({name:e.name,type:"stage"})}));const i=[{id:"params",match:/(\s*|\w*)\?(\s*|\w*|')$/,index:2,search:(e,t)=>{t(n.filter((t=>t.name.includes(e)||t.type.includes(e))))},template:e=>`<span class="marker ${e.type}"/> ${e.name}`,replace:e=>`${e.name}`}];return this.addToTextcompleteConfig(i,t)}return t}addHelperFunctionsBasedOnStages(e,t){if(e&&e.stages){let n=this.helperFunctions.slice(0);e.stages.some((e=>"manualJudgment"===e.type))||(n=this.helperFunctions.filter((e=>"judgment"!==e)));e.stages.some((e=>"createServiceKey"===e.type))||(n=this.helperFunctions.filter((e=>"cfServiceKey"!==e)));const a=[{id:"helper functions",match:/#([\w.]*)$/,index:1,search:(e,t)=>{t(n.filter((t=>t.startsWith(e))))},template:e=>`<span class="marker function"/> #${e}`,replace:e=>"toJson"===e?[`#${e}(`,")"]:[`#${e}( '`,"' )"]}];return this.addToTextcompleteConfig(a,t)}return t}getLastExecutionByPipelineConfig(e){return this.executionCache[e.id]?this.$q.when(this.executionCache[e.id]):this.executionService.getLastExecutionForApplicationByConfigId(e.application,e.id).then((t=>t?(this.executionCache[e.id]=t,t):null))}buildTextCompleteConfig(e){return this.addStageNamesToCodeHelperList(e,this.addStageDataForAutocomplete(e,this.addManualJudgementConfigForAutocomplete(e,this.addTriggerConfigForAutocomplete(e,this.addParameterConfigForAutocomplete(e,this.addHelperFunctionsBasedOnStages(e,this.addExecutionForAutocomplete(e,this.addDeployedServerGroupsForAutoComplete(e,this.textcompleteConfig.slice(0)))))))))}addPipelineInfo(e){return e&&e.id?this.getLastExecutionByPipelineConfig(e).then((t=>t||e)).then((e=>this.buildTextCompleteConfig(e))):this.$q.when(this.textcompleteConfig)}}const Lp=class{static addDeploymentTargets(e){const t=[];e.stages.forEach((e=>{const n=Om.pipeline.getStageConfig(e);n&&n.accountExtractor&&t.push(...n.accountExtractor(e))})),e.deploymentTargets=f(t).filter((e=>!!e)).sort()}static siblingStageSorter(e,t){return e.startTime||t.startTime?e.startTime?t.startTime?e.startTime-t.startTime:-1:1:0}static flattenStages(e,t){const n=t;return n.groupStages?(n.groupStages.forEach((t=>this.flattenStages(e,t))),e):(t.before&&t.before.length&&(t.before.sort(((e,t)=>this.siblingStageSorter(e,t))),t.before.forEach((t=>this.flattenStages(e,t)))),t.masterStage?e.push(t.masterStage):e.push(t),t.after&&t.after.length&&(t.after.sort(((e,t)=>this.siblingStageSorter(e,t))),t.after.forEach((t=>this.flattenStages(e,t)))),e)}static flattenAndFilter(e){return this.flattenStages([],e).filter((e=>e.isFailed||!this.hiddenStageTypes.includes(e.type)&&!0!==e.initializationStage))}static getCurrentStages(e){const t=e.stageSummaries.filter((e=>e.isRunning));if(!t.length){const n=e.stageSummaries.find((e=>e.hasNotStarted));n&&t.push(n)}return t}static setMasterStageStartTime(e,t){const n=e.filter((e=>e.startTime)).map((e=>e.startTime));n.length&&(t.startTime=Math.min(...n))}static getCurrentStage(e){const t=e[e.length-1],n=L(e,(e=>e.hasNotStarted)),a=L(e,(e=>e.isFailed)),i=L(e,(e=>e.isRunning)),r=L(e,(e=>e.isCanceled)),s=L(e,(e=>e.isStopped));return i||a||s||r||n||t}static cleanupLockStages(e){const t=(e,t)=>{let n=!1;return t.filter((t=>{if(t.type===e){if(n)return!1;n=!0}return!0}))};return t("releaseLock",t("acquireLock",e).reverse()).reverse()}static transformStage(e){const t=this.cleanupLockStages(this.flattenAndFilter(e));if(t.length){if(e.masterStage){this.setMasterStageStartTime(t,e);const n=this.getCurrentStage(t);e.status=n.status,n.endTime||delete e.endTime;const a=O(t,"endTime");n.endTime&&a.endTime&&(e.endTime=Math.max(n.endTime,a.endTime,e.endTime))}e.stages=t}}static cleanRequisiteStageRefIds(e,t){const{stages:n}=e;n.forEach((e=>{e.context&&e.context.requisiteIds&&(e.context.requisiteIds=f(e.context.requisiteIds)),e.requisiteStageRefIds=f(e.requisiteStageRefIds||[]),e.requisiteStageRefIds=e.requisiteStageRefIds.filter((e=>!!t[e]))}))}static getStagesMappedByRefId(e){const t={};return e.stages.forEach((e=>t[e.refId]=e)),t}static applyPhasesAndLink(e,t){const n=e.stages;let a=!0;n.forEach((e=>{let n=!0,i=0;void 0!==e.phase||e.requisiteStageRefIds.length?(e.requisiteStageRefIds.forEach((e=>{const a=t[e];a&&void 0!==a.phase?i=Math.max(i,a.phase):n=!1})),n?e.phase=i+1:a=!1):e.phase=i})),e.stages=Y(n,"phase","refId"),a||this.applyPhasesAndLink(e,t)}static addStageWidths(e){e.stageWidth=100/e.stageSummaries.length+"%"}static styleStage(e,t){t=t||e;const n=Om.pipeline.getStageConfig(t);n&&(e.labelComponent=n.executionLabelComponent||Ip,e.markerIcon=n.markerIcon||Rp,e.useCustomTooltip=!!n.useCustomTooltip,e.extraLabelLines=n.extraLabelLines)}static findNearestBuildInfo(e){return H(e,"trigger.buildInfo.number")?e.trigger.buildInfo:H(e,"trigger.parentExecution")?this.findNearestBuildInfo(e.trigger.parentExecution):null}static addBuildInfo(e){e.buildInfo=this.findNearestBuildInfo(e),H(e,"trigger.buildInfo.lastBuild.number")&&(e.buildInfo=e.trigger.buildInfo.lastBuild);const t=e.stages.find((e=>"deploy"===e.type)),n=m(t,"context.deploymentDetails")||m(e,"context.deploymentDetails");if(n&&n.length&&n[0].jenkins){const t=n[0].jenkins;e.buildInfo={number:t.number,url:n[0].buildInfoUrl||`${t.host}job/${t.name}/${t.number}`}}}static transformStageSummary(e,t){e.index=t,e.stages=this.flattenAndFilter(e),e.stages.forEach((e=>delete e.stages)),e.masterStageIndex=e.stages.includes(e.masterStage)?e.stages.indexOf(e.masterStage):0,this.filterStages(e),this.setFirstActiveStage(e),this.setSuspendedStageTypes(e),this.transformStage(e),this.styleStage(e),Jc.defineProperties(e),"group"===e.type&&e.groupStages.forEach(((e,t)=>this.transformStageSummary(e,t)))}static filterStages(e){const t=Om.pipeline.getStageConfig(e.masterStage);t&&t.stageFilter&&(e.stages=e.stages.filter((e=>t.stageFilter(e))))}static setSuspendedStageTypes(e){e.suspendedStageTypes=new Set(e.stages.filter((({isSuspended:e})=>e)).map((({type:e})=>e)))}static setFirstActiveStage(e){e.firstActiveStage=0;const t=e.stages||[];t.find((e=>e.isRunning))&&(e.firstActiveStage=t.findIndex((e=>e.isRunning))),t.find((e=>e.isFailed))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed))),t.find((e=>e.isFailed&&!!e.failureMessage))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed&&!!e.failureMessage)))}static transformExecution(e,t){t.trigger&&(t.isStrategy=!1===t.trigger.isPipeline&&"pipeline"===t.trigger.type);const n=this.getStagesMappedByRefId(t);this.cleanRequisiteStageRefIds(t,n),this.applyPhasesAndLink(t,n),Om.pipeline.getExecutionTransformers().forEach((n=>{n.transform(e,t)})),t.context=t.context||{},t.stages.forEach(((e,t)=>{e.before=e.before||[],e.after=e.after||[],e.index=t,Jc.defineProperties(e),e.tasks&&e.tasks.length&&e.tasks.forEach((e=>Jc.addRunningTime(e)))})),t.stages.forEach((e=>{const n=V(t.stages,{id:e.parentStageId});n&&("STAGE_BEFORE"===e.syntheticStageOwner&&n.before.push(e),"STAGE_AFTER"===e.syntheticStageOwner&&n.after.push(e));const a=e.context||{};e.cloudProvider=a.cloudProvider||a.cloudProviderType,a.alias&&(e.alias=a.alias)})),Jc.defineProperties(t),this.processStageSummaries(t),t.graphStatusHash=Lp.calculateGraphStatusHash(t)}static calculateGraphStatusHash(e){return(e.stageSummaries||[]).map((e=>{const t=Om.pipeline.getStageConfig(e);return t&&t.extraLabelLines?[t.extraLabelLines(e),e.status].join("-"):e.status})).join(":")}static calculateRunningTime(e){return()=>{if(e.groupStages.forEach((t=>{t.startTime&&t.startTime<e.startTime&&(e.startTime=t.startTime),t.endTime&&t.endTime>e.endTime&&(e.endTime=t.endTime)})),!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static processStageSummaries(e){let t=[];e.stages.forEach((e=>{if(!e.syntheticStageOwner&&!this.hiddenStageTypes.includes(e.type)){"RUNNING"===e.status&&e.after.some((e=>"STOPPED"===e.status))&&(e.status="STOPPED");const n=e.context||{},a={after:e.after,before:e.before,cloudProvider:e.cloudProvider,comments:n.comments||null,endTime:e.endTime,group:n.group,id:e.id,index:void 0,graphRowOverride:n.graphRowOverride||0,masterStage:e,name:e.name,refId:e.refId,requisiteStageRefIds:e.requisiteStageRefIds&&"*"===e.requisiteStageRefIds[0]?[]:e.requisiteStageRefIds||[],stages:[],startTime:e.startTime,status:e.status,type:e.type};t.push(a)}}));const n={};t=t.reduce(((e,t)=>{if(!t.group)return e.push(t),e;let a=e.find((e=>"group"===e.type&&e.name===t.group));return a||(a={activeStageType:void 0,after:void 0,before:t.before,cloudProvider:t.cloudProvider,comments:"",endTime:t.endTime,groupStages:[],id:t.group,index:void 0,masterStage:void 0,name:t.group,refId:t.group,requisiteStageRefIds:t.requisiteStageRefIds&&"*"===t.requisiteStageRefIds[0]?[]:t.requisiteStageRefIds||[],stages:[],startTime:t.startTime,status:void 0,type:"group"},e.push(a)),Jc.defineProperties(t),Object.defineProperties(a,{runningTime:{get:()=>ar(this.calculateRunningTime(a)()),configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(a),configurable:!0}}),n[t.refId]=a.refId,a.groupStages.push(t),e}),[]),t.forEach(((e,a)=>{if("group"!==e.type||e.groupStages||(e.groupStages=[]),"group"===e.type)if(1===e.groupStages.length){const i=e.groupStages[0];e=i,t[a]=i,delete n[i.refId]}else if(e.groupStages.length>1){const t=[];e.groupStages.forEach((e=>{e.comments&&t.push(e.comments)})),e.after=e.groupStages[e.groupStages.length-1].after;const n=this.getCurrentStage(e.groupStages);e.activeStageType=n.type,e.status=n.status,this.styleStage(e,n),e.comments=t.join(", ")}e.requisiteStageRefIds=f(e.requisiteStageRefIds.map((e=>n[e]||e)))})),t.forEach(((e,t)=>this.transformStageSummary(e,t))),e.stageSummaries=t,e.currentStages=this.getCurrentStages(e),this.addStageWidths(e),this.addBuildInfo(e),this.addDeploymentTargets(e)}};let Op=Lp;Op.hiddenStageTypes=["initialization","pipelineInitialization","waitForRequisiteCompletion","determineTargetServerGroup"];class Yp{constructor(e){this.cacheProxy=e}setItem(e,t){try{if(e.includes(di.gateUrl)){const e=JSON.parse(t);if(e.value&&Array.isArray(e.value)&&e.value.length>2&&e.value[2]["content-type"]){const t=e.value[2]["content-type"];if(t&&!t.includes("application/json"))return}}window.localStorage.setItem(e,t),this.cacheProxy[e]=t}catch(n){console.warn("Local Storage Error! Clearing caches and trying again.\nException:",n),this.cacheProxy=Object.create(null),window.localStorage.clear(),window.localStorage.setItem(e,t)}}getItem(e){let t;return t=void 0!==this.cacheProxy[e]?this.cacheProxy[e]:window.localStorage.getItem(e),t}removeItem(e){delete this.cacheProxy[e],window.localStorage.removeItem(e)}}const $p=class{static getStoragePrefix(e,t){return`angular-cache.caches.${e}:${t}.`}static buildCacheKey(e,t){let n;return n=e&&t?`${e}:${t}`:e||t,n}static bombCorruptedCache(e,t,n){const a=$p.buildCacheKey(e,t),i=`${$p.getStoragePrefix(a,n)}${a}`;window.localStorage[`${i}.keys`]&&"[]"!==window.localStorage[`${i}.keys`]||Object.keys(window.localStorage).filter((e=>e.includes(i))).forEach((e=>window.localStorage.removeItem(e)))}static clearPreviousVersions(e,t,n,a){if(n){$p.bombCorruptedCache(e,t,n);for(let i=0;i<n;i++){const n=$p.buildCacheKey(e,t);a.exists(n)&&a.get(n).destroy(),a.createCache(n,{storageMode:"localStorage",storagePrefix:$p.getStoragePrefix(n,i)}),a.get(n).removeAll(),a.get(n).destroy()}}}static getStats(e){const t=e.keys();let n=Date.now(),a=0;return t.forEach((t=>{const i=e.info(t)||{};n=Math.min(n,i.created),a=Math.max(a,i.created)})),{ageMax:a||null,ageMin:n||null,keys:t.length}}static createCache(e,t,n){var a;const i=$p.buildCacheKey(e,t),r=n.cacheFactory||this.cacheFactory,s=n.version||1;$p.clearPreviousVersions(e,t,s,r);const o=null!=(a=n.storageMode)?a:"localStorage";r.createCache(i,{deleteOnExpire:"aggressive",maxAge:n.maxAge||bn.fromObject({days:2}).as("milliseconds"),recycleFreq:bn.fromObject({seconds:5}).as("milliseconds"),storageMode:o,storageImpl:"localStorage"===o?new Yp(this.cacheProxy):null,storagePrefix:$p.getStoragePrefix(i,s)});const l=r.get(i);return this.caches[i]=l,l.getStats=$p.getStats.bind(null,this.caches[i]),l.config=n,l}static clearCache(e,t){this.caches[t]&&this.caches[t].destroy&&(this.caches[t].destroy(),this.createCache(e,t,this.caches[t].config))}static getCache(e=null,t=null){return this.caches[$p.buildCacheKey(e,t)]}};let Hp=$p;Hp.cacheFactory=new Mn,Hp.caches=Object.create(null),Hp.cacheProxy=Object.create(null);class Vp{constructor(){this.caches=Object.create(null)}createCache(e,t){return Hp.createCache(this.getNamespace(),e,t),this.caches[e]=Hp.getCache(this.getNamespace(),e),this.caches[e]}get(e){return this.caches[e]}clearCaches(){Object.keys(this.caches).forEach((e=>this.clearCache(e)))}destroyCaches(){this.caches=Object.create(null)}}const Jp=class extends Vp{getNamespace(){return Jp.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.destroy&&(t.destroy(),this.createCache(e,t.config))}};let Wp=Jp;Wp.NAMESPACE="viewStateCache";const Kp=new Wp,qp=class{static removeImmutableFields(e){qp.immutableFields.forEach((t=>delete e[t]))}static clone(e){const t=J(e,(e=>{e&&e.$$hashKey&&delete e.$$hashKey}));return qp.removeImmutableFields(t),t}};let Xp=qp;var Zp,_p;Xp.immutableFields=new Set(["name","application","index","id","$$hashKey"]),(_p=Zp||(Zp={})).Triggers="triggers",_p.Notifications="notifications",_p.ParameterConfig="parameterConfig",_p.ExpectedArtifacts="expectedArtifacts";const ed=class{static createPipelineTemplate(e,t){return{id:pr.generateUuid(),metadata:{description:`A pipeline template derived from pipeline "${e.name}" in application "${e.application}"`,name:pa.random(),owner:t,scopes:["global"]},pipeline:Xp.clone(e),protect:!1,schema:ed.schema,variables:[]}}static isV2PipelineConfig(e){return e.schema===ed.schema}static idForTemplate(e){const{id:t,digest:n=""}=e;return`${t}:${n}`}static getTemplateVersion({digest:e,tag:t,id:n}){return e?`${n}@sha256:${e}`:t?`${n}:${t}`:n}static convertTemplateVersionToId(e){const t=e.split("@");return t.length>1?t[0]:t[0].split(":")[0]}static getPipelineTemplateConfigV2(e){return{schema:ed.schema,template:{artifactAccount:"front50ArtifactCredentials",reference:this.prefixSource(e),type:"front50/pipelineTemplate"},type:"templatedPipeline"}}static prefixSource(e=""){const t="spinnaker://";return e.startsWith(t)?e:`spinnaker://${e}`}static filterInheritedConfig(e){return ed.inheritedKeys.forEach((t=>{if(Array.isArray(e[t])){const n=e[t];e[t]=n.filter((e=>!e.inherited))}})),e}};let td=ed;td.schema="v2",td.inheritedKeys=new Set([Zp.Triggers,Zp.Notifications,Zp.ParameterConfig,Zp.ExpectedArtifacts]);class nd{static buildViewStateCacheKey(e,t){return`${e}:${t}`}static getPipelinesForApplication(e){return Si("/applications").path(e,"pipelineConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getStrategiesForApplication(e){return Si("/applications").path(e,"strategyConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getHistory(e,t,n=20){return Si(t?"strategyConfigs":"pipelineConfigs").path(e,"history").query({limit:n}).get()}static deletePipeline(e,t,n){const a=t.strategy?"strategies":"pipelines";return Si(a).path(e,n.trim()).delete()}static savePipeline(e){let t=p(e);delete t.isNew,t.name=t.name.trim(),Array.isArray(t.stages)&&t.stages.forEach((function(e){delete e.isNew,e.name||delete e.name})),td.isV2PipelineConfig(t)&&(t=td.filterInheritedConfig(t));const n=t.strategy?"strategies":"pipelines";return Si(n).query({staleCheck:!0}).post(t)}static reorderPipelines(e,t,n=!1){const a=n?"strategies":"pipelines";return Si("/actions").path(a,"reorder").post({application:e,idsToIndices:t})}static renamePipeline(e,t,n,a){this.configViewStateCache.remove(this.buildViewStateCacheKey(e,n)),t.name=a.trim();const i=t.strategy?"strategies":"pipelines";return Si(i).path(t.id).put(t)}static triggerPipeline(e,t,n={}){return n.user=ri.getAuthenticatedUser().name,Si("/pipelines/v2").path(e,t).post(n).then((e=>e.ref.split("/").pop()))}static getDownstreamStageIds(e,t){let n=[];const a=e.stages.filter((e=>e.requisiteStageRefIds&&e.requisiteStageRefIds.includes(t.refId)));return a.length&&(n=a.map((e=>e.refId)),a.forEach((t=>{n=n.concat(this.getDownstreamStageIds(e,t))}))),f(n)}static getDependencyCandidateStages(e,t){const n=this.getDownstreamStageIds(e,t);return e.stages.filter((e=>t!==e&&e.requisiteStageRefIds&&!n.includes(e.refId)&&t.requisiteStageRefIds&&!t.requisiteStageRefIds.includes(e.refId)))}static getAllUpstreamDependencies(e,t){if(!e||!t)return[];let n=[];return t.requisiteStageRefIds&&t.requisiteStageRefIds.length&&e.stages.forEach((a=>{t.requisiteStageRefIds.includes(a.refId)&&(n.push(a),n=n.concat(this.getAllUpstreamDependencies(e,a)))})),f(n)}static sortPipelines(e){const t=Y(e,["index","name"]),n=[];return t&&t.length&&(t.forEach(((e,t)=>{e.index!==t&&(e.index=t,n.push(this.savePipeline(e)))})),n.length)?Ze.all(n).then((()=>t)):Ze.resolve(t)}}nd.configViewStateCache=Kp.createCache("pipelineConfig",{version:2});class ad{static configureFilterModel(e,t){return t.forEach((e=>e.param=e.param||e.model)),e.config=t,e.groups=[],e.tags=[],e.displayOptions={},e.sortFilter=ad.mapRouterParamsToSortFilter(e,{}),e.addTags=()=>{e.tags=[],t.filter((e=>!e.displayOption)).forEach((t=>this.addTagsForSection(e,t)))},e.clearFilters=()=>{t.forEach((function(t){t.displayOption||(e.sortFilter[t.model]=t.clearValue)}))},e.activate=()=>{},e.applyParamsToUrl=()=>{const t=ad.mapSortFilterToRouterParams(e);hi.$state.go(".",t,{location:"replace"})},e}static mapSortFilterToRouterParams(e){const{sortFilter:t,config:n}=e;return n.reduce(((e,n)=>({...e,[n.param]:t[n.model]})),{})}static mapRouterParamsToSortFilter(e,t){const n={trueKeyObject:{},string:"",boolean:!1,"inverse-boolean":!0};return e.config.reduce(((e,a)=>{const i=n[a.type],r=t[a.param],s=u(r)?i:r;return{...e,[a.model]:p(s)}}),{})}static registerRouterHooks(e,t){const{transitionService:n}=hi.$uiRouter,a=e.config.map((e=>e.param));let i={};n.onSuccess({exiting:t,retained:"**.application"},(e=>{const t=e.params("from");i=W(t,a)})),n.onBefore({entering:t,retained:"**.application"},(e=>{const t=e.params(),n=a.some((e=>!u(t[e]))),r=i,s=a.some((e=>!u(r[e])));return!n&&s?e.targetState().withParams(r):null})),n.onStart({exiting:"**.application"},(()=>{i={}})),n.onBefore({to:t},(t=>{const n=t.params();Object.assign(e.sortFilter,ad.mapRouterParamsToSortFilter(e,n))}))}static isFilterable(e){return K(e)>0&&q(e)}static getCheckValues(e){return X(e,(function(e,t,n){return t&&e.push(n),e}),[]).sort()}static checkAccountFilters(e){return t=>{if(this.isFilterable(e.sortFilter.account)){const n=this.getCheckValues(e.sortFilter.account);return Z(n,t.account)}return!0}}static checkRegionFilters(e){return t=>{if(this.isFilterable(e.sortFilter.region)){const n=this.getCheckValues(e.sortFilter.region);return Z(n,t.region)}return!0}}static checkStackFilters(e){return t=>{if(this.isFilterable(e.sortFilter.stack)){const n=this.getCheckValues(e.sortFilter.stack);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.stack)}return!0}}static checkDetailFilters(e){return t=>{if(this.isFilterable(e.sortFilter.detail)){const n=this.getCheckValues(e.sortFilter.detail);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.detail)}return!0}}static checkStatusFilters(e){return t=>{if(this.isFilterable(e.sortFilter.status)){const n=this.getCheckValues(e.sortFilter.status);return Z(n,"Up")&&0===t.instanceCounts.down||Z(n,"Down")&&t.instanceCounts.down>0||Z(n,"OutOfService")&&t.instanceCounts.outOfService>0||Z(n,"Starting")&&t.instanceCounts.starting>0||Z(n,"Disabled")&&t.isDisabled||Z(n,"Unknown")&&t.instanceCounts.unknown>0}return!0}}static checkProviderFilters(e){return t=>{if(this.isFilterable(e.sortFilter.providerType)){const n=this.getCheckValues(e.sortFilter.providerType);return Z(n,t.type)||Z(n,t.provider)}return!0}}static addTagsForSection(e,t){const n=t.model,a=t.filterLabel||t.model,i=t.filterTranslator||{},r=t.clearValue,s=e.tags,o=e.sortFilter[n];return"trueKeyObject"===t.type?ee(o,((t,r)=>{t&&s.push({key:n,label:a,value:i[r]||r,clear(){delete e.sortFilter[n][r],e.applyParamsToUrl()}})})):null!=o&&""!==o&&!1!==o&&s.push({key:n,label:a,value:i[o]||o,clear(){e.sortFilter[n]=r,e.applyParamsToUrl()}}),s}}const id=e=>{const{heading:t,isCloudProvider:n,name:a,onChange:i,onChangeEvent:r,sortFilterType:s}=e;return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:Boolean(s&&s[t]),onChange:r||(e=>{const n=e.target,a="checkbox"===n.type?n.checked:n.value;s[t]=Boolean(a),i()}),name:a}),n?ot.createElement(ot.Fragment,null,ot.createElement(up,{provider:"heading",height:"'14px'",width:"'14px'"}),ot.createElement(dp,{provider:t})):t))};oi(".filters-toggle {\n position: absolute;\n}\n.filters-toggle .filters-hidden {\n margin-top: 11px;\n}\n.filters-toggle .filters-open {\n background-color: var(--color-accent-g2);\n height: 32px;\n font-size: 16px;\n margin-top: 6px;\n}\n@media (min-width: 768px) and (max-width: 992px) {\n .filters-toggle .filters-open {\n width: 104px;\n }\n}\n@media (min-width: 992px) {\n .filters-toggle .filters-open {\n width: 124px;\n }\n}\n@media (min-width: 1200px) {\n .filters-toggle .filters-open {\n width: 154px;\n }\n}\n@media (min-width: 1400px) {\n .filters-toggle .filters-open {\n width: 184px;\n }\n}\n@media (min-width: 1600px) {\n .filters-toggle .filters-open {\n width: 214px;\n }\n}\n@media (min-width: 1800px) {\n .filters-toggle .filters-open {\n width: 224px;\n }\n}\n@media (min-width: 2000px) {\n .filters-toggle .filters-open {\n width: 254px;\n }\n}\n.filters-toggle button {\n height: 22px;\n line-height: 12px;\n}\n.filters-toggle .show-filter-text {\n border-left: 1px solid var(--color-accessory-light);\n}\n");class rd extends ot.Component{constructor(){super(...arguments),this.onClick=e=>{hi.insightFilterStateModel.pinFilters(e),qe.$apply(),this.setState({})}}render(){const{filtersExpanded:e}=hi.insightFilterStateModel;return ot.createElement("div",{className:"filters-toggle layer-medium"},!e&&ot.createElement("div",{className:"filters-placeholder filters-hidden"},ot.createElement(Qs,{value:"Show filters"},ot.createElement("button",{className:"btn btn-xs btn-default pin clickable sp-padding-xs",onClick:()=>this.onClick(!0),style:{display:e?"none":"inherit"}},ot.createElement("i",{className:"fa fa-forward"}),ot.createElement("span",{className:"show-filter-text"}," Show filters")))),e&&ot.createElement("div",{className:"filters-placeholder filters-open horizontal middle"},ot.createElement(Qs,{value:"Hide filters"},ot.createElement("button",{className:"btn btn-xs btn-default unpin clickable sp-margin-s-xaxis sp-margin-2xs-yaxis sp-padding-xs",onClick:()=>this.onClick(!1),style:{display:e?"inherit":"none"}},ot.createElement("i",{className:"fa fa-backward"}))),ot.createElement("div",{className:"horizontal center flex-1 sp-margin-xl-right"},"Filters")))}}const sd={securityGroups:{version:4,storageMode:"memory"},healthChecks:{version:2},certificates:{version:2},backendServices:{version:2},addresses:{version:2}},od=class extends Vp{getNamespace(){return od.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.removeAll&&(t.keys()&&t.keys().forEach((e=>t.remove(e))),t.onReset&&t.onReset.forEach((e=>e())))}createCache(e,t){const n=super.createCache(e,t);return n.onReset=t.onReset,n}};let ld=od;ld.NAMESPACE="infrastructure";const cd=new ld;class pd{static getAllEntityTagsForApplication(e){return Si("/tags").query({maxResults:di.entityTags.maxResults||5e3,application:e}).get().then((e=>this.flattenTagsAndAddMetadata(e)))}static addTagsToServerGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data,n=t.filter((({entityRef:e})=>"servergroup"===e.entityType)),a=t.filter((({entityRef:e})=>"cluster"===e.entityType));e.serverGroups.data.forEach((e=>{e.entityTags=n.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region)),e.clusterEntityTags=a.filter((({entityRef:t})=>!(t.entityId!==e.cluster||"*"!==t.account&&t.account!==e.account||"*"!==t.region&&t.region!==e.region)))}))}static addTagsToServerGroupManagers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"servergroupmanager"===e.entityType));e.serverGroupManagers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToLoadBalancers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"loadbalancer"===e.entityType));e.loadBalancers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToFunctions(e){if(!di.feature.entityTags||!di.feature.functions)return;const t=e.entityTags.data.filter((({entityRef:e})=>"function"===e.entityType));e.functions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.functionName&&t.account===e.account&&t.region===e.region))}))}static addTagsToSecurityGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"securitygroup"===e.entityType));e.securityGroups.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToExecutions(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"execution"===e.entityType));e.executions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static addTagsToPipelines(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"pipeline"===e.entityType));e.pipelineConfigs.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static getEntityTagsForId(e,t){return t?Si("/tags").query({entityType:e.toLowerCase(),entityId:t}).get().then((e=>this.flattenTagsAndAddMetadata(e))).catch((()=>Ze.when([]))):Ze.when([])}static flattenTagsAndAddMetadata(e){const t=[];return e.forEach((e=>{e.tags.forEach((t=>this.addTagMetadata(e,t))),e.alerts=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_alert:"))),e.notices=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_notice:"))),e.creationMetadata=e.tags.find((e=>"spinnaker:metadata"===e.name)),t.push(e)})),t}static addTagMetadata(e,t){const n=e.tagsMetadata.find((e=>e.name===t.name));n&&(t.created=n.created,t.createdBy=n.createdBy,t.lastModified=n.lastModified,t.lastModifiedBy=n.lastModifiedBy)}}const dd=class{static parseServerGroupName(e){const t={application:"",stack:"",freeFormDetails:"",cluster:""};if(!e)return t;const n=e.split("-"),a=dd.VERSION_PATTERN.test(n[n.length-1]);return t.application=n[0],a&&n.pop(),n.length>1&&(t.stack=n[1]),n.length>2&&(t.freeFormDetails=n.slice(2,n.length).join("-")),t.cluster=dd.getClusterNameFromServerGroupName(e),t}static parseClusterName(e){return dd.parseServerGroupName(e)}static getClusterName(e,t,n){let a=e;return t&&(a+=`-${t}`),!t&&n&&(a+="-"),n&&(a+=`-${n}`),a}static getClusterNameFromServerGroupName(e){const t=e.split("-");return dd.VERSION_PATTERN.test(t[t.length-1])&&t.pop(),t.join("-")}static getSequence(e){return u(e)?null:`v${b(e.toString(),3,"0")}`}static parseLoadBalancerName(e){const t=e.split("-"),n={application:t[0],stack:"",freeFormDetails:"",cluster:""};return t.length>1&&(n.stack=t[1]),t.length>2&&(n.freeFormDetails=t.slice(2,t.length).join("-")),n.cluster=dd.getClusterName(n.application,n.stack,n.freeFormDetails),n}static parseSecurityGroupName(e){return dd.parseLoadBalancerName(e)}static getMoniker(e,t,n){return te({app:e,stack:t,detail:n})}static getMonikerForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.moniker}))}};let ud=dd;ud.VERSION_PATTERN=/(v\d{3})/;class md{static get DEFAULT_PAGE_SIZE(){return 500}static search(e,t=null){const n={...e,...{pageSize:md.DEFAULT_PAGE_SIZE}};let a=Bi.one("search").query(n);return t&&(a=a.useCache(t)),a.get().then((e=>e[0]||{results:[]})).catch((e=>(Xe.error(e.data,e),{results:[]})))}}class gd{constructor(e){this.providerServiceDelegate=e}normalizeSecurityGroup(e){return this.providerServiceDelegate.getDelegate(e.provider||e.type,"securityGroup.transformer").normalizeSecurityGroup(e)}}gd.$inject=["providerServiceDelegate"];n("spinnaker.core.securityGroup.transformer.service",[gp]).service("securityGroupTransformer",gd);const hd=class{constructor(e,t,n,a){this.$log=e,this.$q=t,this.securityGroupTransformer=n,this.providerServiceDelegate=a}static indexSecurityGroups(e){const t={};return e.forEach((e=>{const n=e.account;t[n]={};const a=t[n];ee(e.securityGroups,((e,t)=>{const i={};a[t]=i,e.forEach((e=>{e.accountName=n,e.region=t,i[e.id]=e,i[e.name]=e}))}))})),t}static attachUsageFields(e){e.usages||(e.usages={loadBalancers:[],serverGroups:[]})}static sortUsages(e){e.usages&&(e.usages.serverGroups.sort(((e,t)=>t.name.localeCompare(e.name))),e.usages.loadBalancers.sort(((e,t)=>t.name.localeCompare(e.name))))}resolve(e,t,n){return this.providerServiceDelegate.getDelegate(t.provider||t.type||t.cloudProvider,"securityGroup.reader").resolveIndexedSecurityGroup(e,t,n)}addLoadBalancerSecurityGroups(e){let t=!1;const n=[];return e.getDataSource("loadBalancers").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);hd.attachUsageFields(t),t.usages.loadBalancers.some((e=>e.name===a.name))||t.usages.loadBalancers.push({name:a.name}),n.push(t)}catch(e){this.$log.warn("could not attach firewall to load balancer:",a.name,i,e),t=!0}}))})),n.forEach(hd.sortUsages),{notFoundCaught:t,securityGroups:n}}addNameBasedSecurityGroups(e,t){let n=!1;const a=[];return t.forEach((t=>{try{const n=this.resolve(e.securityGroupsIndex,t,t.id);hd.attachUsageFields(n),a.push(n)}catch(e){this.$log.warn("could not initialize application firewall:",t),n=!0}})),{notFoundCaught:n,securityGroups:a}}addServerGroupSecurityGroups(e){let t=!1;const n=new Set;e.getDataSource("serverGroups").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);if(hd.attachUsageFields(t),!t.usages.serverGroups.some((e=>e.name===a.name))){const{account:e,isDisabled:n,name:i,cloudProvider:r,region:s}=a;t.usages.serverGroups.push({account:e,isDisabled:n,name:i,cloudProvider:r,region:s})}n.add(t)}catch(e){this.$log.warn("could not attach firewall to server group:",a.name,i),t=!0}}))}));const a=Array.from(n);return a.forEach(hd.sortUsages),{notFoundCaught:t,securityGroups:a}}clearCacheAndRetryAttachingSecurityGroups(e,t){return cd.clearCache("securityGroups"),this.loadSecurityGroups().then((n=>(e.securityGroupsIndex=n,this.attachSecurityGroups(e,t,!1))))}addNamePartsToSecurityGroup(e){const t=ud.parseSecurityGroupName(e.name);e.stack=t.stack,e.detail=t.freeFormDetails,e.moniker=ud.getMoniker(t.application,t.stack,t.freeFormDetails)}attachSecurityGroups(e,t,n){let a=[],i=!1;if(t){e.getDataSource("securityGroups").data=[];const n=this.addNameBasedSecurityGroups(e,t);i=n.notFoundCaught,n.notFoundCaught||(a=n.securityGroups)}else a=e.getDataSource("securityGroups").data.filter((e=>!e.usages.serverGroups.length&&!e.usages.loadBalancers.length));if(!i){const t=this.addLoadBalancerSecurityGroups(e);if(i=t.notFoundCaught,!i){a=a.concat(t.securityGroups.filter((e=>!a.includes(e))));const n=this.addServerGroupSecurityGroups(e);i=n.notFoundCaught,i||(a=a.concat(n.securityGroups.filter((e=>!a.includes(e)))))}}return a=f(a),i&&n?(this.$log.warn("Clearing firewall cache and trying again..."),this.clearCacheAndRetryAttachingSecurityGroups(e,t)):(a.forEach((e=>this.addNamePartsToSecurityGroup(e))),this.$q.all(a.map((e=>this.securityGroupTransformer.normalizeSecurityGroup(e)))).then((()=>a)))}getAllSecurityGroups(){const e=cd.get("securityGroups"),t=e?e.get("allGroups"):null;return t?this.$q.resolve(this.decompress(p(t))):(this.getAllSecurityGroupsPromise||(this.getAllSecurityGroupsPromise=Si("/securityGroups").get().then((t=>(e&&e.put("allGroups",this.compress(t)),t))).finally((()=>{delete this.getAllSecurityGroupsPromise}))),this.getAllSecurityGroupsPromise)}compress(e){const t={};return Object.keys(e).forEach((n=>{t[n]={},Object.keys(e[n]).forEach((a=>{if(t[n][a]={},Object.keys(e[n][a]).forEach((t=>{e[n][a][t].forEach((e=>delete e.moniker))})),this.providerServiceDelegate.hasDelegate(a,"securityGroup.transformer")){const i=this.providerServiceDelegate.getDelegate(a,"securityGroup.transformer");i.supportsCompression?Object.keys(e[n][a]).forEach((r=>{t[n][a][r]=i.compress(e[n][a][r])})):t[n][a]=e[n][a]}else t[n][a]=e[n][a]}))})),t}decompress(e){return Object.keys(e).forEach((t=>{Object.keys(e[t]).forEach((n=>{if(this.providerServiceDelegate.hasDelegate(n,"securityGroup.transformer")){const a=this.providerServiceDelegate.getDelegate(n,"securityGroup.transformer");a&&a.supportsCompression&&Object.keys(e[t][n]).forEach((i=>{e[t][n][i]=a.decompress(e[t][n][i])}))}}))})),e}getApplicationSecurityGroup(e,t,n,a){let i=null;return H(e.securityGroupsIndex,[t,n,a])&&(i=e.securityGroupsIndex[t][n][a]),i}getApplicationSecurityGroups(e,t){return this.loadSecurityGroups().then((t=>{e.securityGroupsIndex=t})).then((()=>this.$q.all([e.getDataSource("serverGroups").ready(),e.getDataSource("loadBalancers").ready()]).then((()=>this.attachSecurityGroups(e,t,!0)))))}getSecurityGroupDetails(e,t,n,a,i,r){return Si("/securityGroups").path(t,a,r).query({provider:n,vpcId:i}).get().then((n=>(n&&n.inboundRules&&(n.ipRangeRules=n.inboundRules.filter((e=>e.range)),n.securityGroupRules=n.inboundRules.filter((e=>e.securityGroup)),n.securityGroupRules.forEach((t=>{const a=t.securityGroup;if(!a.name){const t=this.getApplicationSecurityGroup(e,a.accountName,n.region,a.id);t?a.name=t.name:(a.name=a.id,a.inferredName=!0)}}))),di.feature.entityTags&&e.isStandalone?pd.getEntityTagsForId("securitygroup",n.name).then((e=>(n.entityTags=e.find((e=>e.entityRef.entityId===n.name&&e.entityRef.account===t&&e.entityRef.region===a)),n))):n)))}loadSecurityGroups(){return this.getAllSecurityGroups().then((e=>{const t=[];return ee(e,((e,n)=>ee(e,((a,i)=>{ee(a,(e=>{e.forEach((e=>{e.provider=i,e.account=n}))})),t.push({account:n,provider:i,securityGroups:e[i]})})))),hd.indexSecurityGroups(t)}))}loadSecurityGroupsByApplicationName(e){return md.search({q:e,type:"securityGroups",pageSize:1e3}).then((t=>{let n=[];return t&&t.results?n=ne(t.results,{application:e}):this.$log.warn("WARNING: Gate firewall endpoint appears to be down."),n}))}};let fd=hd;fd.$inject=["$log","$q","securityGroupTransformer","providerServiceDelegate"];const vd="spinnaker.core.securityGroup.read.service";n(vd,["spinnaker.core.securityGroup.transformer.service",gp]).service("securityGroupReader",fd);class Ad{constructor(e,t,n){this.$q=e,this.securityGroupReader=t,this.providerServiceDelegate=n,this.cacheConfig=p(sd),this.initializers={securityGroups:[()=>this.securityGroupReader.getAllSecurityGroups()]}}setConfigDefaults(e,t){t.version=t.version||1,t.maxAge=t.maxAge||bn.fromObject({days:2}).as("milliseconds"),t.initializers=t.initializers||this.initializers[e]||[],t.onReset=t.onReset||[i]}extendConfig(){return Object.keys(this.cacheConfig).forEach((e=>{this.setConfigDefaults(e,this.cacheConfig[e])})),Di.listProviders().then((e=>Ni.listRegisteredProviders().forEach((t=>{if(e.includes(t)&&this.providerServiceDelegate.hasDelegate(t,"cache.configurer")){const e=this.providerServiceDelegate.getDelegate(t,"cache.configurer");Object.keys(e).forEach((t=>{this.setConfigDefaults(t,e[t]),this.cacheConfig[t]||(this.cacheConfig[t]=e[t]),this.cacheConfig[t].initializers=f(this.cacheConfig[t].initializers.concat(e[t].initializers)),this.cacheConfig[t].onReset=f(this.cacheConfig[t].onReset.concat(e[t].onReset)),this.cacheConfig[t].version=Math.max(this.cacheConfig[t].version,e[t].version),this.cacheConfig[t].maxAge=Math.min(this.cacheConfig[t].maxAge,e[t].maxAge)}))}}))))}initializeCache(e){if(cd.createCache(e,this.cacheConfig[e]),this.cacheConfig[e].initializers){const t=this.cacheConfig[e].initializers,n=[];return t.forEach((e=>{n.push(e())})),this.$q.all(n)}return this.$q.resolve(void 0)}initialize(){return this.extendConfig().then((()=>{const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.initializeCache(t))})),this.$q.all(e)}))}refreshCache(e){return cd.clearCache(e),this.initializeCache(e)}refreshCaches(){const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.refreshCache(t))})),this.$q.all(e)}}Ad.$inject=["$q","securityGroupReader","providerServiceDelegate"];const Ed="spinnaker.core.cache.initializer";n(Ed,[vd]).service("cacheInitializer",Ad);const bd=({clearFilters:e,tags:t,tagCleared:n})=>{const a=(null==t?void 0:t.length)>5,[i,r]=ot.useState(a&&Ss.isExpanded("filterTags")),s=!a||i?t:t.slice(0,5);return ot.createElement("div",{className:"col-md-12 filter-tags"},s&&s.length>0&&ot.createElement("span",null,ot.createElement("span",null,"Filtered by: "),s.map((e=>ot.createElement("span",{className:"filter-tag",key:[e.label,e.value].join(":")},ot.createElement("strong",null,e.label),": ",e.value,ot.createElement("a",{className:"clickable clear-filters",onClick:()=>(e=>{e.clear(),n(),Ui.log({category:"Filter Tags",action:"Individual tag removed"})})(e)},ot.createElement("span",{className:"glyphicon glyphicon-remove-sign"}))))),a&&ot.createElement("span",{className:"filter-toggle",onClick:()=>{Ss.setExpanded("filterTags",!i),r(!i)}},i?"Hide List":`See all ${t.length} current filters`),s.length>1&&ot.createElement("a",{className:"clickable clear-filters",onClick:()=>{e&&e(),Ui.log({category:"Filter Tags",action:"Clear All clicked"})}},"Clear All")))};function yd(e){return function(t,n){const{headings:a,pool:i}=t;return a[n]=A(i).map(n).uniq().compact().value().sort(),function(e,t){if(!t)return;const n=new Set(e);Object.keys(t).forEach((e=>{n.has(e)||delete t[e]}))}(a[n],e[n]),t.pool=function(e,t,n){const a=n[t];if(!Object.keys(te(a,ae)).length)return e;return e.filter((e=>a[e[t]]))}(i,n,e),t}}function wd({pool:e,dependencyOrder:t,sortFilter:n}){return t.reduce(yd(n),{pool:e,headings:{}}).headings}const xd=[{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"account",param:"acct",type:"trueKeyObject"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"category",param:"category",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"instanceType",type:"trueKeyObject",filterLabel:"instance type"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"minInstances",type:"int",filterLabel:"instance count (min)"},{model:"maxInstances",type:"int",filterLabel:"instance count (max)"},{model:"showAllInstances",param:"hideInstances",displayOption:!0,type:"inverse-boolean"},{model:"listInstances",displayOption:!0,type:"boolean"},{model:"instanceSort",displayOption:!0,type:"string",defaultValue:"launchTime"},{model:"multiselect",displayOption:!0,type:"boolean"},{model:"clusters",type:"trueKeyObject"},{model:"labels",type:"trueKeyObject",filterLabel:"label",clearValue:{}}];class Cd{constructor(){this.asFilterModel=ad.configureFilterModel(this,xd),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.clusters.**"),this.asFilterModel.activate()}}function kd(e){return e?X(e,((e,t)=>(e[`${t.key}:${t.value}`]=!0,e)),{}):{}}function Bd(e){return e?X(e,((e,t,n)=>{let[a,i]=n.split(":");return"null"===a&&(a=null),"null"===i&&(i=null),e.concat([{key:a,value:i}])}),[]):[]}var Sd=Object.defineProperty,Md=Object.getOwnPropertyDescriptor;class Nd{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=ad.isFilterable}updateClusterGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterServerGroupsForDisplay(e.getDataSource("serverGroups").data),a=ie(n,"account");ee(a,((n,a)=>{const i=ie(n,"category"),r=[];ee(i,((t,n)=>{const i=ie(t,"cluster");ee(i,((t,i)=>{const s=ie(t,"region"),o=[];ee(s,((e,t)=>{o.push({heading:t,category:n,serverGroups:e,key:`${t}:${n}`,entityTags:(e[0].clusterEntityTags||[]).find((e=>e.entityRef.region===t)),isManaged:!!e[0].isManaged,managedResourceSummary:e[0].managedResourceSummary})}));const l=(e.clusters||[]).find((e=>e.account===a&&e.name===i&&e.category===n));if(l){const e=o.every((({isManaged:e})=>e));r.push({heading:i,category:n,key:`${i}:${n}`,cluster:l,subgroups:Y(o,"heading"),entityTags:(t[0].clusterEntityTags||[]).find((e=>"*"===e.entityRef.region||void 0===e.entityRef.region)),isManaged:e,managedResourceSummary:e?o[0].managedResourceSummary:void 0})}}))})),t.push({heading:a,key:a,subgroups:Y(r,["heading","category"])})})),this.sortGroupsByHeading(t),Vd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.addHealthFlags(),this.groupsUpdatedStream.next(Vd.filterModel.asFilterModel.groups)}clearFilters(){Vd.filterModel.asFilterModel.clearFilters(),Vd.filterModel.asFilterModel.applyParamsToUrl()}shouldShowInstance(e){const t=Vd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!ad.getCheckValues(t.availabilityZone).includes(e.availabilityZone))return!1}if(this.isFilterable(t.status)){const n=ad.getCheckValues(t.status).filter((e=>"Disabled"!==e));return!n.length||(!!t.status.Disabled||n.includes(e.healthState))}return!0}overrideFiltersForUrl(e){if(e.href.includes("/clusters")){Vd.filterModel.asFilterModel.clearFilters();const t=Vd.filterModel.asFilterModel.sortFilter;if(t.filter=e.serverGroup?e.serverGroup:e.cluster?"cluster:"+e.cluster:"",e.account){const n={};n[e.account]=!0,t.account=n}if(e.region){const n={};n[e.region]=!0,t.region=n}if(e.stack){const n={};n[e.stack]=!0,t.stack=n}if(e.detail){const n={};n[e.detail]=!0,t.detail=n}if(e.category){const n={};n[e.category]=!0,t.category=n}hi.$stateParams.application===e.application&&this.updateClusterGroups()}}filterServerGroupsForDisplay(e){const t=e.filter((e=>this.textFilter(e))).filter((e=>this.instanceCountFilter(e))).filter((e=>ad.checkAccountFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkRegionFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStackFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkDetailFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStatusFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkProviderFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>this.instanceTypeFilters(e))).filter((e=>this.instanceFilters(e))).filter((e=>this.labelFilters(e)));return this.updateMultiselectInstanceGroups(t),this.updateMultiselectServerGroups(t),t}updateMultiselectInstanceGroups(e){const t=Vd.filterModel.asFilterModel.sortFilter;t.listInstances&&t.multiselect?(Vd.multiselectModel.instanceGroups.forEach((t=>{const n=e.find((e=>e.name===t.serverGroup&&e.region===t.region&&e.account===t.account&&e.type===t.cloudProvider));if(n){const e=n.instances.filter((e=>this.shouldShowInstance(e)));t.selectAll?t.instanceIds=e.map((e=>e.id)):t.instanceIds=e.filter((e=>t.instanceIds.includes(e.id))).map((e=>e.id))}else t.instanceIds.length=0})),Vd.multiselectModel.instancesStream.next(),Vd.multiselectModel.syncNavigation()):Vd.multiselectModel.instanceGroups.length=0}updateMultiselectServerGroups(e){if(Vd.filterModel.asFilterModel.sortFilter.multiselect){if(Vd.multiselectModel.serverGroups.length){const t=e.map((e=>Vd.multiselectModel.makeServerGroupKey(e))),n=[];Vd.multiselectModel.serverGroups.forEach(((e,a)=>{t.includes(e.key)||n.push(a)})),n.reverse().forEach((e=>Vd.multiselectModel.serverGroups.splice(e,1)))}Vd.multiselectModel.serverGroupsStream.next(),Vd.multiselectModel.syncNavigation()}}instanceTypeFilters(e){const t=Vd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.instanceType)){return ad.getCheckValues(t.instanceType).includes(e.instanceType)}return!0}instanceFilters(e){return!this.shouldFilterInstances()||e.instances.some((e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=Vd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.availabilityZone)||this.isFilterable(e.status)&&!e.status.hasOwnProperty("Disabled")}instanceCountFilter(e){let t=!0;const n=Vd.filterModel.asFilterModel.sortFilter;return n.minInstances&&!isNaN(n.minInstances)&&(t=e.instances.length>=n.minInstances),t&&null!==n.maxInstances&&!isNaN(n.maxInstances)&&(t=e.instances.length<=n.maxInstances),t}labelFilters(e){const t=Bd(Vd.filterModel.asFilterModel.sortFilter.labels);return!!re(t)||se(t,(({key:t,value:n})=>null===t||null===n||q(e.labels||{},((e,a)=>t&&t===a&&(n&&n===e)))))}textFilter(e){const t=Vd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();if(!t)return!0;if(t.includes("clusters:")){return t.split("clusters:")[1].replace(/\s/g,"").split(",").includes(e.cluster)}if(t.includes("vpc:")){const n=t.split("vpc:")[1];return e.vpcName.toLowerCase()===n.toLowerCase()}if(t.includes("tag:")){let n=!1;const[,a]=t.split("tag:");let i=null,r=null;return a.includes("=")&&([i,r]=a.split("=")),oe(e.tags||{},((e,t)=>{i?i.toLowerCase()===t.toLowerCase()&&e.toLowerCase().includes(r.toLowerCase())&&(n=!0):e.toLowerCase().includes(a.toLowerCase())&&(n=!0)})),n}if(t.includes("detail:")){const n=t.split("detail:")[1];return e.detail===n.toLowerCase()}if(t.includes("cluster:")){const n=t.split("cluster:")[1];return e.cluster===n}if(t.includes("labels:")){const t=Vd.filterModel.asFilterModel.sortFilter.filter.split("labels:")[1].split(",").map((e=>e.trim()));return se(t,(t=>{let n,a;return t.includes("=")&&([n,a]=t.split("=")),!(!n||!a)&&q(e.labels||{},((e,t)=>n===t&&e===a))}))}return this.addSearchField(e),t.split(" ").every((t=>e.searchField.includes(t)))}addSearchField(e){if(e.searchField)return;let t="";e.buildInfo&&e.buildInfo.jenkins&&(t=["#"+e.buildInfo.jenkins.number,e.buildInfo.jenkins.host,e.buildInfo.jenkins.name].join(" ").toLowerCase()),e.searchField||(e.searchField=[e.region.toLowerCase(),e.name.toLowerCase(),e.account.toLowerCase(),t,(e.loadBalancers||[]).join(" "),(e.instances||[]).map((e=>e.id)).join(" ")].join(" "))}sortGroupsByHeading(e){this.diffSubgroups(Vd.filterModel.asFilterModel.groups,e),Vd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}addHealthFlags(){Vd.filterModel.asFilterModel.groups.forEach((e=>{e.subgroups.forEach((e=>{e.hasDiscovery=e.subgroups.some((e=>this.hasDiscovery(e))),e.hasLoadBalancers=e.subgroups.some((e=>this.hasLoadBalancers(e)))}))}))}hasDiscovery(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"Discovery"===e.type))))))}hasLoadBalancers(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"LoadBalancer"===e.type))))))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.key===e.key));if(i){if(i.hasOwnProperty("subgroups")&&this.diffSubgroups(e.subgroups,i.subgroups),i.hasOwnProperty("cluster")&&(e.cluster=i.cluster,this.diffSubgroups(e.subgroups,i.subgroups)),i.hasOwnProperty("serverGroups")&&this.diffServerGroups(e,i),(e.entityTags||i.entityTags)&&(e.entityTags=i.entityTags),e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged")){const t=e,n=i;t.isManaged=n.isManaged,t.managedResourceSummary=n.managedResourceSummary}}else n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{e.find((e=>e.key===t.key))||e.push(t)}))}diffServerGroups(e,t){if(e.category!==t.category)return;const n=[];e.serverGroups.forEach(((a,i)=>{const r=t.serverGroups.find((e=>e.name===a.name&&e.account===a.account&&e.region===a.region));r?(a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region,a.category),e.serverGroups[i]=r),(a.runningExecutions||r.runningExecutions)&&(a.runningExecutions=r.runningExecutions),(a.runningTasks||r.runningTasks)&&(a.runningTasks=r.runningTasks)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region,a.category),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{e.serverGroups.find((e=>e.name===t.name&&e.account===t.account&&e.region===t.region))||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Md(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Sd(t,n,r)})([da(25)],Nd.prototype,"updateClusterGroups",1);class Dd{constructor(){this.instanceGroups=[],this.instancesStream=new At,this.serverGroups=[],this.serverGroupsStream=new At}syncNavigation(){const{$state:e}=hi;if(!Vd.filterModel.asFilterModel.sortFilter.multiselect&&e.params.multiselect&&e.go(".",{multiselect:null},{inherit:!0}),Vd.filterModel.asFilterModel.sortFilter.multiselect&&!e.params.multiselect&&e.go(".",{multiselect:!0},{inherit:!0}),e.includes("**.multipleInstances")&&!Vd.filterModel.asFilterModel.sortFilter.multiselect)return this.deselectAllInstances(),void e.go("^");if(e.includes("**.multipleServerGroups")&&!Vd.filterModel.asFilterModel.sortFilter.multiselect)return this.clearAllServerGroups(),void e.go("^");const t=this.instanceGroups.reduce(((e,t)=>e+t.instanceIds.length),0);e.includes("**.multipleInstances")&&!t&&e.go("^"),!e.includes("**.multipleInstances")&&t&&(this.isClusterChildState()?e.go("^.multipleInstances"):e.go(".multipleInstances")),!e.includes("**.multipleServerGroups")||this.serverGroups.length?!e.includes("**.multipleServerGroups")&&this.serverGroups.length&&(this.isClusterChildState()?e.go("^.multipleServerGroups"):e.go(".multipleServerGroups")):e.go("^")}deselectAllInstances(){this.instanceGroups.forEach((e=>{e.instanceIds.length=0,e.selectAll=!1}))}clearAllInstanceGroups(){this.instanceGroups.length=0,this.instancesStream.next()}clearAllServerGroups(){this.serverGroups.length=0,this.serverGroupsStream.next()}clearAll(){this.clearAllInstanceGroups(),this.clearAllServerGroups()}getOrCreateInstanceGroup(e){const t=e.name,n=e.account,a=e.region,i=e.type;let r=this.instanceGroups.find((e=>e.serverGroup===t&&e.account===n&&e.region===a&&e.cloudProvider===i));if(!r){const s=hi.$state.params,o=(e.instances||[]).filter((e=>e.provider===s.provider&&e.id===s.instanceId)).map((e=>e.id));r={serverGroup:t,account:n,region:a,cloudProvider:i,instanceIds:o,instances:[],selectAll:!1},this.instanceGroups.push(r)}return r}makeServerGroupKey(e){return[e.type,e.account,e.region,e.name,e.category].join(":")}serverGroupIsSelected(e){if(!this.serverGroups.length)return!1;const t=this.makeServerGroupKey(e);return this.serverGroups.filter((e=>e.key===t)).length>0}toggleServerGroup(e){const{$state:t}=hi;if(!Vd.filterModel.asFilterModel.sortFilter.multiselect){const n={provider:e.type,accountId:e.account,region:e.region,serverGroup:e.name,job:e.name};if(this.isClusterChildState()){if(t.includes("**.serverGroup",n))return;t.go("^."+e.category,n)}else t.go("."+e.category,n);return}this.deselectAllInstances();const n=this.makeServerGroupKey(e),a=this.serverGroups.find((e=>e.key===n));a?this.serverGroups.splice(this.serverGroups.indexOf(a),1):this.serverGroups.push({key:n,account:e.account,region:e.region,provider:e.type,name:e.name,moniker:e.moniker}),this.serverGroupsStream.next(),this.syncNavigation()}toggleInstance(e,t){const{$state:n}=hi;if(!Vd.filterModel.asFilterModel.sortFilter.multiselect){const a={provider:e.type,instanceId:t};if(this.isClusterChildState()){if(n.includes("**.instanceDetails",a))return;n.go("^.instanceDetails",a)}else n.go(".instanceDetails",a);return}this.clearAllServerGroups();const a=this.getOrCreateInstanceGroup(e);a.instanceIds.includes(t)?(a.instanceIds.splice(a.instanceIds.indexOf(t),1),a.selectAll=!1):a.instanceIds.push(t),this.instancesStream.next(),this.syncNavigation()}toggleSelectAll(e,t){const n=this.getOrCreateInstanceGroup(e);n.selectAll=!n.selectAll,n.instanceIds=n.selectAll?t:[],n.selectAll&&this.clearAllServerGroups(),this.instancesStream.next(),this.syncNavigation()}instanceIsSelected(e,t){return this.getOrCreateInstanceGroup(e).instanceIds.includes(t)}isClusterChildState(){return"clusters"!==hi.$state.$current.name.split(".").pop()}}const Id=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"}];class Fd{constructor(){this.asFilterModel=ad.configureFilterModel(this,Id),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.functions.**"),this.asFilterModel.activate()}}var Td=Object.defineProperty,Qd=Object.getOwnPropertyDescriptor;class Pd{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.functionName,e.region.toLowerCase(),e.account].join(" "))}checkSearchTextFilter(e){const t=qd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}filterFunctionsForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>ad.checkAccountFilters(qd.filterModel.asFilterModel)(e))).filter((e=>ad.checkRegionFilters(qd.filterModel.asFilterModel)(e))).filter((e=>ad.checkProviderFilters(qd.filterModel.asFilterModel)(e))).value()}sortGroupsByHeading(){qd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}clearFilters(){qd.filterModel.asFilterModel.clearFilters(),qd.filterModel.asFilterModel.applyParamsToUrl()}getFunctionGroups(e){const t=[];return ee(e,((e,n)=>{const a=I(ie(e,"region")).map((e=>e.map((e=>e.functionName)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.functionName}:${e.region}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,functionDef:e})}));const o=`${n}${i[n]&&a?` (${a})`:""}`;s.push({heading:o,subgroups:Y(r,"heading")})})),t.push({heading:n,subgroups:Y(s,"heading")})})),t}updateFunctionGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=this.filterFunctionsForDisplay(e.functions.data),n=ie(t,"account"),a=this.getFunctionGroups(n);qd.filterModel.asFilterModel.groups=a,this.sortGroupsByHeading(),qd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(a)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Qd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Td(t,n,r)})([da(25)],Pd.prototype,"updateFunctionGroups",1);const Rd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"loadBalancerType",param:"loadBalancerType",filterLabel:"type",type:"trueKeyObject"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showInstances",displayOption:!0,type:"boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}}];class Ud{constructor(){this.asFilterModel=ad.configureFilterModel(this,Rd),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.loadBalancers.**"),this.asFilterModel.activate()}}var zd=Object.defineProperty,Gd=Object.getOwnPropertyDescriptor;class jd{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=ad.isFilterable,this.getCheckValues=ad.getCheckValues}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.region.toLowerCase(),e.account,F(e.serverGroups,"name").join(" "),F(e.instances,"id").join(" ")].join(" "))}checkSearchTextFilter(e){const t=Wd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}checkLoadBalancerTypeFilters(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.loadBalancerType)){return!!this.getCheckValues(t.loadBalancerType).includes(e.loadBalancerType)}return!0}filterLoadBalancersForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>this.checkLoadBalancerTypeFilters(e))).filter((e=>ad.checkAccountFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkRegionFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStackFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkDetailFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStatusFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkProviderFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>this.instanceFilters(e))).value()}instanceFilters(e){return!this.shouldFilterInstances()||q(e.instances,(e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=Wd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.status)||this.isFilterable(e.availabilityZone)}shouldShowInstance(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!this.getCheckValues(t.availabilityZone).includes(e.zone))return!1}if(this.isFilterable(t.status)){const n=this.getCheckValues(t.status),a=M(n,"Disabled");return!a.length||Z(a,e.healthState)}return!0}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=V(t,{heading:e.heading});i?(i.loadBalancer&&(e.loadBalancer=i.loadBalancer),i.serverGroups&&this.diffServerGroups(e,i),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}diffServerGroups(e,t){const n=[];e.serverGroups.forEach(((a,i)=>{a.stringVal=a.stringVal||JSON.stringify(a,this.jsonReplacer);const r=V(t.serverGroups,{name:a.name,account:a.account,region:a.region});r?(r.stringVal=r.stringVal||JSON.stringify(r,this.jsonReplacer),a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region),e.serverGroups[i]=r)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{V(e.serverGroups,{name:t.name,account:t.account,region:t.region})||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}sortGroupsByHeading(e){this.diffSubgroups(Wd.filterModel.asFilterModel.groups,e),Wd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}clearFilters(){Wd.filterModel.asFilterModel.clearFilters(),Wd.filterModel.asFilterModel.applyParamsToUrl()}filterServerGroups(e){return this.shouldFilterInstances()?e.serverGroups.filter((e=>e.instances.some((e=>this.shouldShowInstance(e))))):e.serverGroups}jsonReplacer(e,t){return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(t=void 0),t}updateLoadBalancerGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterLoadBalancersForDisplay(e.loadBalancers.data),a=ie(n,"account");ee(a,((e,n)=>{const a=I(ie(e,"loadBalancerType")).map((e=>e.map((e=>e.name)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.name}:${e.loadBalancerType}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,loadBalancer:e,serverGroups:this.filterServerGroups(e),isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const o=`${n}${i[n]&&a?` (${a})`:""}`,l=r.every((({isManaged:e})=>e));s.push({heading:o,subgroups:Y(r,"heading"),isManaged:l,managedResourceSummary:l?r[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(s,"heading")})})),this.sortGroupsByHeading(t),Wd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Gd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&zd(t,n,r)})([da(25)],jd.prototype,"updateLoadBalancerGroups",1);const Ld=[{model:"awaitingJudgement",type:"boolean",clearValue:!1},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"pipeline",param:"pipeline",type:"trueKeyObject",clearValue:{}},{model:"status",type:"trueKeyObject",clearValue:{}},{model:"tags",type:"trueKeyObject",clearValue:{}}];class Od{constructor(){this.expandSubject=new At;const{transitionService:e}=hi.$uiRouter;this.configViewStateCache=Kp.createCache("executionFilters",{version:2,maxAge:24*di.maxPipelineAgeDays*60*60*1e3}),this.asFilterModel=ad.configureFilterModel(this,Ld),ad.registerRouterHooks(this.asFilterModel,"**.application.pipelines.executions.**"),this.asFilterModel.activate(),e.onBefore({entering:e=>!(!e.self.name.match(".application.pipelines.executions$")&&!e.self.name.match(".application.pipelines.executionDetails.execution$"))},(e=>{this.mostRecentApplication=e.params().application,this.assignViewStateFromCache()})),Object.defineProperty(this.asFilterModel.sortFilter,"count",{get:()=>this.groupCount,set:e=>{this.groupCount=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"groupBy",{get:()=>this.groupBy,set:e=>{this.groupBy=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"showDurations",{get:()=>this.showDurations,set:e=>{this.showDurations=e,this.cacheConfigViewState()}}),this.asFilterModel.activate()}assignViewStateFromCache(){const e=this.getCachedViewState();this.groupCount=e.count,this.groupBy=e.groupBy,this.showDurations=e.showDurations}getCachedViewState(e){e=e||this.mostRecentApplication||"#global";const t=this.configViewStateCache.get(e)||{},n=this.configViewStateCache.get("#global")||{};return this.configViewStateCache.touch(e),le({count:2,groupBy:"name",showDurations:!0},t,null!=n.showDurations?{showDurations:n.showDurations}:void 0)}cacheConfigViewState(){const e=this.getCachedViewState();e.showDurations=this.showDurations,Object.keys(this.asFilterModel.sortFilter.pipeline).length||(e.count=this.groupCount,e.groupBy=this.groupBy);const t=this.mostRecentApplication||"#global";if(this.configViewStateCache.put(t,e),"#global"!==t){const e=this.getCachedViewState("#global");e.showDurations=this.showDurations,this.configViewStateCache.put("#global",e)}}}const Yd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showLoadBalancers",param:"hideLoadBalancers",displayOption:!0,type:"inverse-boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"}];class $d{constructor(){this.asFilterModel=ad.configureFilterModel(this,Yd),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.firewalls.**"),this.asFilterModel.activate()}}n("spinnaker.core.securityGroup.filter.model",[]).service("securityGroupFilterModel",$d);class Hd{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.id,e.accountName,e.region,e.vpcName,e.vpcId,F(e.usages.serverGroups,"name").join(" "),F(e.usages.loadBalancers,"name").join(" ")].join(" "))}checkSearchTextFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}clearFilters(){Kd.filterModel.asFilterModel.clearFilters(),Kd.filterModel.asFilterModel.applyParamsToUrl()}filterSecurityGroupsForDisplay(e){const t=ad,n=Kd.filterModel.asFilterModel;return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>t.checkAccountFilters(n)(e))).filter((e=>t.checkRegionFilters(n)(e))).filter((e=>t.checkStackFilters(n)(e))).filter((e=>t.checkDetailFilters(n)(e))).filter((e=>t.checkProviderFilters(n)(e))).value()}sortGroupsByHeading(e){const t=Kd.filterModel.asFilterModel.groups;this.diffSubgroups(t,e),t.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.heading===e.heading&&t.vpcName===e.vpcName));i?(i.securityGroup&&(e.securityGroup=i.securityGroup),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}updateSecurityGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterSecurityGroupsForDisplay(e.securityGroups.data),a=ie(n,"account");ee(a,((e,n)=>{const a=ie(e,"name"),i=[];ee(a,((e,t)=>{const n=[];e.forEach((e=>{const t=e.vpcName?`${e.region} (${e.vpcName})`:e.region;n.push({heading:t,vpcName:e.vpcName,securityGroup:e,isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const a=n.every((({isManaged:e})=>e));i.push({heading:t,subgroups:Y(n,["heading","vpcName"]),isManaged:a,managedResourceSummary:a?n[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(i,"heading")})})),this.sortGroupsByHeading(t),Kd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}const Vd={},Jd={},Wd={},Kd={},qd={};function Xd(){Vd.filterModel=new Cd,Vd.filterService=new Nd,Vd.multiselectModel=new Dd,Jd.filterModel=new Od,Wd.filterModel=new Ud,Wd.filterService=new jd,qd.filterModel=new Fd,qd.filterService=new Pd,Kd.filterModel=new $d,Kd.filterService=new Hd,di.checkForUpdates&&to.initialize()}var Zd=Object.defineProperty,_d=Object.getOwnPropertyDescriptor;const eu=[{name:"Today",after:()=>En.local().startOf("day").toMillis()},{name:"Yesterday",after:()=>En.local().startOf("day").minus(bn.fromObject({days:1})).toMillis()},{name:"This Week",after:()=>En.local().startOf("week").toMillis()},{name:"Last Week",after:()=>En.local().startOf("week").minus(bn.fromObject({weeks:1})).toMillis()},{name:"Last Month",after:()=>En.local().startOf("month").toMillis()},{name:"This Year",after:()=>En.local().startOf("year").toMillis()},{name:"Prior Years",after:()=>0}];class tu{static groupByTimeBoundary(e){return ie(e,(e=>eu.find((t=>(e.startTime||e.buildTime)>t.after())).name))}static updateExecutionGroups(e=this.lastApplication){if(!e)return null;(e.executions.data||[]).forEach((t=>this.fixName(t,e)));const t=this.filterExecutionsForDisplay(e.executions.data,e),n=this.groupExecutions(t,e);this.applyGroupsToModel(n),Jd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(n)}static doesPipelineMatchCheckedTags(e,t){if(0===t.length||!e.tags||0===e.tags.length)return!1;const n=t.map((e=>e.split(":").map(decodeURIComponent))).map((([e,t])=>({name:e,value:t}))),a=ie(n,"name");return Object.keys(a).every((t=>{const n=a[t].map((e=>e.value)),i=(e.tags||[]).filter((e=>e.name===t)).map((e=>e.value));return n.some((e=>i.includes(e)))}))}static tagsFilter(e,t){const n=Jd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(n.tags)){const a=t.pipelineConfigs.data.filter((e=>this.doesPipelineMatchCheckedTags(e,ad.getCheckValues(n.tags))));return Z(a.map((e=>e.id)),e.pipelineConfigId)}return!0}static pipelineNameFilter(e){const t=Jd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.pipeline)){const n=ad.getCheckValues(t.pipeline);return Z(n,e.name)}return!0}static getValuesAsString(e,t=[]){return"string"==typeof e?e:"number"==typeof e?""+e:e instanceof Array?e.map((e=>this.getValuesAsString(e,t))).join(" "):e instanceof Object?Object.keys(e).map((n=>t.includes(n)?"":this.getValuesAsString(e[n],t))).join(" "):""}static addSearchText(e){if(e.searchField)return;const t=[e.name];t.push(e.id),t.push(this.getValuesAsString(e.trigger,["parentExecution"])),e.searchField=t.join(" ").toLowerCase()}static textFilter(e){const t=Jd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();return!t||(this.addSearchText(e),e.searchField.includes(t))}static statusFilter(e){const t=Jd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.status)){const n=ad.getCheckValues(t.status);return Z(n,e.status)}return!0}static awaitingJudgementFilter(e){return!Jd.filterModel.asFilterModel.sortFilter.awaitingJudgement||e.stages.some((({type:e,status:t})=>"manualJudgment"===e&&"RUNNING"===t))}static filterExecutionsForDisplay(e,t){return A(e).filter((e=>this.textFilter(e))).filter((e=>this.tagsFilter(e,t))).filter((e=>this.pipelineNameFilter(e))).filter((e=>this.statusFilter(e))).filter((e=>this.awaitingJudgementFilter(e))).value()}static addEmptyPipelines(e,t){const n=(t.pipelineConfigs.data||[]).concat(t.strategyConfigs.data||[]),a=Jd.filterModel.asFilterModel.sortFilter,i={};e.forEach((e=>i[e.heading]=!0));let r=[];r=this.isFilterable(a.pipeline)||this.isFilterable(a.status)||a.filter||this.isFilterable(a.tags)?n.filter((e=>{const t=(a.filter||"").toLowerCase().includes(e.name.toLowerCase()),n=this.doesPipelineMatchCheckedTags(e,ad.getCheckValues(a.tags));return!i[e.name]&&(a.pipeline[e.name]||t||n)})):n.filter((e=>!i[e.name])),r.forEach((t=>{e.push({heading:t.name,config:t,executions:[],targetAccounts:this.extractAccounts(t),fromTemplate:t&&"templatedPipeline"===t.type||!1})}))}static extractAccounts(e){if(!e)return[];const t=[];return(e.stages||[]).forEach((e=>{const n=Om.pipeline.getStageConfig(e);n&&n.configAccountExtractor&&t.push(...n.configAccountExtractor(e))})),f(ce(t)).filter((e=>!e.includes("${")))}static fixName(e,t){const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));n&&(e.name=n.name)}static groupExecutions(e,t){const n=[];let a=[];ee(ie(e,"name"),(e=>{a=a.concat(e.sort(((e,t)=>this.executionSorter(e,t))))})),a.forEach((e=>{const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));null!=n&&"templatedPipeline"===n.type&&(e.fromTemplate=!0)}));const i=Jd.filterModel.asFilterModel.sortFilter;if("name"===i.groupBy){const e=ie(a,"name");ee(e,((e,a)=>{var i,r;const s=t.pipelineConfigs.data.concat(null!=(r=null==(i=t.strategyConfigs)?void 0:i.data)?r:[]).find((t=>t.id===e[0].pipelineConfigId));e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:a,config:s||null,executions:e,runningExecutions:e.filter((e=>e.isActive)),targetAccounts:this.extractAccounts(s),fromTemplate:s&&"templatedPipeline"===s.type||!1})})),this.addEmptyPipelines(n,t)}if("timeBoundary"===i.groupBy){const e=this.groupByTimeBoundary(a);ee(e,((e,t)=>{e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:t,config:null,executions:e,runningExecutions:e.filter((e=>e.isActive))})}))}return"none"===i.groupBy&&(a.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:"",executions:a,runningExecutions:[]})),n}static diffExecutionGroups(e,t){const n=[];return t.forEach((t=>{const a=e.find((e=>e.heading===t.heading));a?this.executionsAreDifferent(a,t)?n.push(t):n.push(a):n.push(t)})),e.forEach((e=>e.executions.sort(((e,t)=>this.executionSorter(e,t))))),n}static executionsAreDifferent(e,t){let n=!1;return e.executions.forEach((e=>{const a=t.executions.find((t=>t.id===e.id));a?e.stringVal!==a.stringVal&&(n=!0,Xe.debug("change detected, updating execution:",e.id)):(n=!0,Xe.debug("execution no longer found, removing:",e.id))})),t.executions.forEach((t=>{e.executions.find((e=>e.id===t.id))||(n=!0,Xe.debug("new execution found, adding",t.id),e.executions.push(t))})),n}static applyGroupsToModel(e){const t=Jd.filterModel.asFilterModel;t.groups=this.diffExecutionGroups(t.groups,e).sort(((e,t)=>this.executionGroupSorter(e,t)))}static executionGroupSorter(e,t){return"timeBoundary"===Jd.filterModel.asFilterModel.sortFilter.groupBy?(t.executions[0].startTime||t.executions[0].buildTime)-(e.executions[0].startTime||e.executions[0].buildTime):e.config&&t.config?e.config.strategy===t.config.strategy?e.config.index-t.config.index:e.config.strategy?1:-1:e.config?-1:t.config?1:e.heading<t.heading?-1:e.heading>t.heading?1:0}static executionSorter(e,t){return e.isActive&&t.isActive?t.startTime-e.startTime:e.isActive?-1:t.isActive?1:e.endTime||t.endTime?e.endTime?t.endTime?t.startTime-e.startTime:1:-1:t.buildTime-e.buildTime}static clearFilters(){Jd.filterModel.asFilterModel.clearFilters(),Jd.filterModel.asFilterModel.applyParamsToUrl()}}tu.groupsUpdatedStream=new At,tu.lastApplication=null,tu.isFilterable=ad.isFilterable,((e,t,n,a)=>{for(var i,r=a>1?void 0:a?_d(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Zd(t,n,r)})([da(25)],tu,"updateExecutionGroups",1);class nu{constructor(e,t,n){this.$q=e,this.$state=t,this.$timeout=n,this.runningLimit=di.maxRunningExecutionsToRetrieve||30,this.ignoredStringValFields=["asg","commits","history","hydrator","hydrated","instances","requisiteIds","requisiteStageRefIds","$$hashKey"]}get activeStatuses(){return["RUNNING","SUSPENDED","PAUSED","NOT_STARTED"]}getRunningExecutions(e){return this.getFilteredExecutions(e,this.activeStatuses,this.runningLimit,null,!0)}getFilteredExecutions(e,t,n,a=null,i=!1){const r=t.map((e=>e.toUpperCase())).join(",")||null;return(a?Si("/executions").query({limit:n,pipelineConfigIds:a,statuses:t}).get():Si("/applications").path(e,"pipelines").query({limit:n,statuses:r,pipelineConfigIds:a,expand:i}).get()).then((e=>e?(e.forEach((e=>(e.hydrated=i,this.cleanExecutionForDiffing(e)))),e):[]))}getExecutions(e,t=null,n=!1){const a=Jd.filterModel.asFilterModel.sortFilter,i=ad.getCheckValues(a.tags),r=Object.keys(a.pipeline),s=Object.keys(te(a.status||{},ae)),o=a.count;return t&&(r.length||i.length)?this.getConfigIdsFromFilterModel(t).then((e=>this.getFilteredExecutions(t.name,s,o,e,n))):this.getFilteredExecutions(e,s,o,null,n)}getExecution(e,t=[]){return Si("/pipelines").path(e).get().then((e=>{const{application:n,name:a}=e;if(e.hydrated=!0,this.cleanExecutionForDiffing(e),n&&a){const i=t.find((t=>t.id===e.pipelineConfigId));return i?(e.pipelineConfig=i,Promise.resolve(e)):Si("/applications").path(n,"pipelineConfigs",a).get().then((t=>(e.pipelineConfig=t,e))).catch((()=>e))}return e}))}transformExecutions(e,t,n=[]){t&&t.length&&t.forEach((t=>{const a=this.stringifyExecution(t),i=n.find((e=>e.id===t.id));i&&i.stringVal&&i.stringVal===a||(t.stringVal=a,Op.transformExecution(e,t))}))}getConfigIdsFromFilterModel(e){const t=Jd.filterModel.asFilterModel.sortFilter,n=ad.getCheckValues(t.tags),a=Object.keys(t.pipeline);return e.pipelineConfigs.activate(),e.pipelineConfigs.ready().then((()=>{const t=e.pipelineConfigs.data.concat(e.strategyConfigs.data),i=a.map((e=>{const n=t.find((t=>t.name===e));return n?n.id:null})).filter((e=>!!e)),r=t.filter((e=>tu.doesPipelineMatchCheckedTags(e,n))).map((e=>e.id));return i.concat(f(r))}))}cleanExecutionForDiffing(e){(e.stages||[]).forEach((e=>this.removeInstances(e)))}toggleDetails(e,t,n){const a=this.$state.current.name.endsWith(".executionDetails.execution");if(e.id===this.$state.params.executionId&&this.$state.current.name.includes(".execution")&&void 0===t)return void this.$state.go("^");const i=t||0;let r=m(e,["stageSummaries",i]);if(r&&"group"===r.type){if(void 0===n)return;r=m(r,["groupStages",n])}r=r||{firstActiveStage:0};const s={executionId:e.id,stage:i,subStage:n,step:r.firstActiveStage};if(void 0===n&&"group"===r.type)return s.stage=null,void(s.step=null);this.$state.includes("**.execution",s)?a||this.$state.go("^"):this.$state.current.name.endsWith(".execution")||a?this.$state.go(".",s):this.$state.go(".execution",s)}removeInstances(e){e.context&&(delete e.context.instances,delete e.context.asg,e.context.targetReferences&&e.context.targetReferences.forEach((e=>{delete e.instances,delete e.asg})))}startAndMonitorPipeline(e,t,n){const{executionService:a}=hi;return nd.triggerPipeline(e.name,t,n).then((t=>a.waitUntilTriggeredPipelineAppears(e,t)))}waitUntilTriggeredPipelineAppears(e,t){return((e,t=1e3,n=0)=>{let a,i=0;const r=()=>(i++,0===n||i<=n?e().catch((()=>(a=_e(r,t),a))):e());return{promise:r(),cancel:()=>{a&&_e.cancel(a)}}})((()=>this.getExecution(t).then((()=>e.executions.refresh()))),1e3,10)}waitUntilPipelineIsCancelled(e,t){return this.waitUntilExecutionMatches(t,(e=>"CANCELED"===e.status)).then((()=>e.executions.refresh()))}waitUntilPipelineIsDeleted(e,t){const n=this.$q.defer();return this.getExecution(t).then((()=>this.$timeout((()=>this.waitUntilPipelineIsDeleted(e,t).then(n.resolve)),1e3)),(()=>n.resolve())),n.promise.then((()=>e.executions.refresh())),n.promise}cancelExecution(e,t,n,a){return Si("/pipelines").path(t,"cancel").query({force:n,reason:a}).put().then((()=>this.waitUntilPipelineIsCancelled(e,t))).catch((e=>{throw e&&e.data?e.message:null}))}pauseExecution(e,t){return Si("/pipelines").path(t,"pause").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"PAUSED"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}resumeExecution(e,t){return Si("/pipelines").path(t,"resume").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"RUNNING"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}deleteExecution(e,t){return Si("/pipelines").path(t).delete().then((()=>this.waitUntilPipelineIsDeleted(e,t))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}waitUntilExecutionMatches(e,t){return this.getExecution(e).then((n=>t(n)?n:this.$timeout((()=>this.waitUntilExecutionMatches(e,t)),1e3)))}getSectionCacheKey(e,t,n){return["pipeline",e,t,n].join("#")}getProjectExecutions(e,t=1){return Si("/projects").path(e,"pipelines").query({limit:t}).get().then((e=>e&&e.length?(e.forEach((e=>Op.transformExecution({},e))),e.sort(((e,t)=>t.startTime-(e.startTime||Date.now())))):[]))}addExecutionsToApplication(e,t=[]){if(e.executions.data&&e.executions.data.length&&t.length){const n=e.executions.data,a=e.runningExecutions.data,i=[];return n.forEach(((n,r)=>{const s=t.find((e=>e.id===n.id)),o=a.find((e=>e.id===n.id));s&&n.stringVal&&s.stringVal&&n.stringVal!==s.stringVal&&(n.status!==s.status||n.hydrated===s.hydrated)&&(e.executions.data[r]=s),s||o||i.push(r)})),i.reverse().forEach((e=>n.splice(e,1))),t.forEach((e=>{n.filter((t=>t.id===e.id)).length||n.push(e)})),[...n]}return t}mergeRunningExecutionsIntoExecutions(e){let t=!1;e.runningExecutions.data.forEach((n=>{const a=e.executions.data.findIndex((e=>e.id===n.id));if(-1!==a){const i=e.executions.data[a].stringVal;n.stringVal!==i&&(t=!0,e.executions.data[a]=n)}else t=!0,e.executions.data.push(n)})),e.executions.data.forEach((t=>{var n;t.isActive&&e.runningExecutions.data.every((e=>e.id!==t.id))&&this.getExecution(t.id,null==(n=e.pipelineConfigs)?void 0:n.data).then((t=>{this.updateExecution(e,t)}))})),t&&!e.executions.reloadingForFilters&&e.executions.dataUpdated()}removeCompletedExecutionsFromRunningData(e){const t=e.executions.data,n=e.runningExecutions.data;t.forEach((e=>{const t=n.findIndex((t=>e.id===t.id));-1===t||e.isActive||n.splice(t,1)})),e.runningExecutions.dataUpdated()}updateExecution(e,t,n=e.executions){n.data&&n.data.length&&n.data.forEach(((a,i)=>{t.id===a.id&&(t.stringVal=this.stringifyExecution(t),t.status===a.status&&a.stringVal===t.stringVal||(Op.transformExecution(e,t),n.data[i]=t,n.dataUpdated()))}))}hydrate(e,t){if(t.hydrator)return t.hydrator;if(t.hydrated)return Promise.resolve(t);const n=this.getExecution(t.id).then((n=>(Op.transformExecution(e,n),t.stages.forEach(((e,a)=>{const i=n.stages.length===t.stages.length&&n.stages[a].id===e.id?n.stages[a]:n.stages.find((t=>e.id===t.id));i&&(e.context=i.context,e.outputs=i.outputs,e.tasks=i.tasks)})),t.hydrated=!0,t.graphStatusHash=n.graphStatusHash,t.stageSummaries=n.stageSummaries,t)));return t.hydrator=Promise.resolve(n),t.hydrator}getLastExecutionForApplicationByConfigId(e,t){return this.getFilteredExecutions(e,[],1).then((e=>e.filter((e=>e.pipelineConfigId===t)))).then((e=>e[0]))}getExecutionsForConfigIds(e,t={}){const{limit:n,statuses:a,transform:i,application:r}=t;return Si("/executions").query({limit:n,pipelineConfigIds:(e||[]).join(","),statuses:a}).get().then((e=>e?(i&&r&&e.forEach((e=>Op.transformExecution(r,e))),e.sort(((e,t)=>(t.buildTime||0)-(e.buildTime||0)))):[])).catch((()=>[]))}patchExecution(e,t,n){return Si("/pipelines").path(e,"stages",t).patch(n)}stringifyExecution(e){const t={...e};return t.stages=t.stages.filter((e=>"SUCCEEDED"!==e.status&&"NOT_STARTED"!==e.status)),this.stringify(t)}stringify(e){return Hi.makeSortedStringFromAngularObject({...e},this.ignoredStringValFields)}}const au="spinnaker.core.pipeline.executions.service";n(au,[ca]).factory("executionService",["$q","$state","$timeout",(e,t,n)=>new nu(e,t,n)]),Zc.addInjectable("executionService");oi("a.spelLink {\n margin-left: 10px;\n -webkit-animation: fadein 1s;\n animation: fadein 1s;\n}\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\ninput.borderless,\n.borderless select {\n border: none;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.button-input {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n border: 1px var(--color-alto) solid;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n background: var(--color-white);\n}\n.button-input .input {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.button-input.invalid {\n border-color: var(--color-danger);\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px var(--color-danger-light);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px var(--color-danger-light);\n}\n.button-input.focus {\n border-color: var(--color-accent);\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .input select,\n.button-input input {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.button-input.number {\n width: 245px;\n}\n.button-input:focus {\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .btn-group {\n margin-left: 5px;\n}\n.button-input .btn-group button.active {\n font-weight: 700;\n}\n.button-input .btn-group button:focus {\n outline: none;\n}\n.button-input .form-control:focus {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.button-input .select2-container .select2-choice,\n.button-input .select2-dropdown-open .select2-choice,\n.button-input .select2-container-active {\n border: none;\n background-image: none;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\nspan.marker {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: var(--color-white);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\nspan.marker.param {\n background-color: var(--color-alert);\n color: var(--color-dovegray);\n}\nspan.marker.stage {\n background-color: var(--color-accessory-light);\n color: var(--color-mineshaft);\n}\nspan.marker.function {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.value {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.param:before {\n content: 'p';\n}\nspan.marker.stage:before {\n content: 'stage';\n}\nspan.marker.function:before {\n content: 'fn';\n}\n.spel-dropdown {\n max-height: 400px;\n overflow-y: scroll;\n}\n.spel-value-separator {\n font-size: 70%;\n color: var(--color-primary);\n}\n.textcomplete-item.active .spel-value-separator {\n color: var(--color-white);\n}\n.monospace {\n font-family: monospace;\n}\n");class iu extends ot.Component{constructor(e){super(e),this.destroy$=new At,this.onChange=e=>{this.props.onChange(e.target.value)},this.state={textcompleteConfig:[]},this.autocompleteService=new jp(Ze,new nu(Ze,{},_e)),vt(this.autocompleteService.addPipelineInfo(this.props.pipeline)).pipe(It(this.destroy$)).subscribe((e=>{this.setState({textcompleteConfig:e})})),this.spelInputRef=ot.createRef()}componentWillUnmount(){this.$input.off("change",this.onChange),this.destroy$.next()}componentDidMount(){this.$input=hn(this.spelInputRef.current),this.renderSuggestions(),this.$input.on("change",this.onChange)}componentDidUpdate(e,t){t.textcompleteConfig!==this.state.textcompleteConfig&&this.renderSuggestions()}renderSuggestions(){this.$input.attr("contenteditable","true"),this.$input.textcomplete(this.state.textcompleteConfig,{maxCount:1e3,zIndex:9e3,dropdownClassName:"dropdown-menu textcomplete-dropdown spel-dropdown"})}render(){return ot.createElement("input",{type:"text",placeholder:this.props.placeholder,className:wn({"form-control":!0,"no-doc-link":!this.props.docLink}),value:this.props.value||"",onChange:this.onChange,ref:this.spelInputRef})}}iu.defaultProps={placeholder:""};const ru=(e,t,n,a,i)=>class extends Ap{constructor(e){super(e,t)}render(){return ot.createElement(Up,{label:n,helpKey:i},ot.createElement(iu,{placeholder:a,value:this.props.artifact[e]||"",onChange:n=>{const a=p(this.props.artifact);a[e]=n,a.type=t,this.props.onChange(a)},pipeline:this.props.pipeline,docLink:!0}))}},su=class extends ot.Component{constructor(e){if(super(e),this.convert=(e,t)=>{if(!t||0===t.length)return[t,""];try{return[e(t),""]}catch(e){return H(su.DOMBase64Errors,e.code)?["",su.DOMBase64Errors[e.code]]:["",e.message]}},this.onNameChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)},this.onContentChanged=e=>{const[t,n]=this.convert(btoa,e.target.value);if(!n){const e=p(this.props.artifact);e.reference=t,this.props.onChange(e)}this.setState({decoded:e.target.value,encodeDecodeError:n})},"embedded/base64"!==e.artifact.type){const t=p(e.artifact);t.type="embedded/base64",e.onChange(t)}const[t,n]=this.convert(atob,e.artifact.reference);this.state={decoded:t,encodeDecodeError:n}}render(){const{pipeline:e}=this.props,{name:t,reference:n}=this.props.artifact,{decoded:a,encodeDecodeError:i}=this.state;return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Name"},ot.createElement(iu,{placeholder:"base64-artifact",value:t,pipeline:e,onChange:this.onNameChanged,docLink:!1})),ot.createElement(Up,{label:"Contents"},ot.createElement("textarea",{autoCapitalize:"none",autoComplete:"off",rows:16,className:"form-control code",value:a,onChange:this.onContentChanged}),ot.createElement(zi,{text:n,toolTip:"Copy base64-encoded content to clipboard",analyticsLabel:"Copy Base64 Artifact Content"})),i&&ot.createElement("div",{className:"form-group row"},ot.createElement("div",{className:"col-md-12 error-message"},"Error encoding/decoding artifact content: ",i)))}};let ou=su;ou.DOMBase64Errors={5:"The string to encode contains characters outside the latin1 range."};const lu={label:"Base64",typePattern:fp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"base64",isDefault:!1,isMatch:!0,editCmp:ru("name","embedded/base64","Name","base64-artifact","")},cu={label:"Base64",typePattern:fp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"default.base64",isDefault:!0,isMatch:!1,editCmp:ou},pu="bitbucket/file",du={label:"Bitbucket",typePattern:fp.BITBUCKET_FILE,type:pu,description:"A file stored in git, hosted by Bitbucket.",key:"bitbucket",isDefault:!1,isMatch:!0,editCmp:ru("name",pu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},uu={label:"Bitbucket",typePattern:fp.BITBUCKET_FILE,type:pu,description:"A file stored in git, hosted by Bitbucket.",key:"default.bitbucket",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,pu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onFilePathChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.reference"},ot.createElement(iu,{placeholder:"https://api.bitbucket.com/rest/api/1.0/$PROJECTS/$PROJECTKEY/repos/$REPONAME/raw/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"File Path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.filepath"},ot.createElement(iu,{placeholder:"path/to/file.yml",onChange:this.onFilePathChanged,value:this.props.artifact.name,pipeline:this.props.pipeline,docLink:!0})))}}},mu="custom/object";class gu extends Ap{constructor(e){super(e,mu),this.onTypeChanged=e=>{this.updateArtifact({type:e})},this.onNameChanged=e=>{this.updateArtifact({name:e})},this.onVersionChanged=e=>{this.updateArtifact({version:e})},this.onLocationChanged=e=>{this.updateArtifact({location:e})},this.onReferenceChanged=e=>{this.updateArtifact({reference:e})},this.updateArtifact=e=>{const t=p(this.props.artifact);le(t,e),this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Type"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.type,onChange:this.onTypeChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Name"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.name,onChange:this.onNameChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Version"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Location"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.location,onChange:this.onLocationChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Reference"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})))}}const hu={label:"Custom",typePattern:fp.CUSTOM_OBJECT,type:mu,description:"A custom-defined artifact.",key:"custom",isDefault:!1,isMatch:!0,editCmp:gu},fu={label:"Custom",typePattern:fp.CUSTOM_OBJECT,type:mu,description:"A custom-defined artifact.",key:"default.custom",isDefault:!0,isMatch:!1,editCmp:gu},vu="docker/image",Au={label:"Docker",typePattern:fp.DOCKER_IMAGE,type:vu,isDefault:!1,isMatch:!0,description:"A Docker image to be deployed.",key:"docker",editCmp:ru("name",vu,"Docker image","gcr.io/project/image","pipeline.config.expectedArtifact.docker.name")},Eu={label:"Docker",typePattern:fp.DOCKER_IMAGE,type:vu,isDefault:!0,isMatch:!1,description:"A Docker image to be deployed.",key:"default.docker",editCmp:class extends Ap{constructor(e){super(e,vu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange((e=>{const t=e.reference;if(u(t))return e;const n=t.indexOf("@"),a=t.lastIndexOf(":");if(n>=0){const n=t.split("@");e.name=n[0],e.version=n[1]}else a>0?(e.name=t.substring(0,a),e.version=t.substring(a+1)):e.name=t;return e})(t))}}render(){return ot.createElement(Up,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultDocker.reference"},ot.createElement(iu,{placeholder:"gcr.io/project/image@sha256:9efcc2818c9...",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0}))}}},bu="gcs/object",yu={label:"GCS",typePattern:fp.GCS_OBJECT,type:bu,description:"A GCS object.",key:"gcs",isDefault:!1,isMatch:!0,editCmp:ru("name",bu,"Object path","gs://bucket/path/to/file","pipeline.config.expectedArtifact.gcs.name")},wu={label:"GCS",typePattern:fp.GCS_OBJECT,type:bu,description:"A GCS object.",key:"default.gcs",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,bu),this.onReferenceChange=e=>{if(u(e))return;const t=p(this.props.artifact);if(t.reference=e,e.indexOf("#")>=0){const n=e.split("#");t.name=n[0],t.version=n[1]}else t.name=e;this.props.onChange(t)}}render(){return ot.createElement(Up,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultGcs.reference"},ot.createElement(iu,{placeholder:"gs://bucket/path/to/file",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0}))}}},xu="github/file",Cu={label:"GitHub",description:"A file stored in git, hosted by GitHub.",key:"github",typePattern:fp.GITHUB_FILE,type:xu,isDefault:!1,isMatch:!0,editCmp:ru("name",xu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},ku={label:"GitHub",typePattern:fp.GITHUB_FILE,type:xu,description:"A file stored in git, hosted by GitHub.",key:"default.github",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,xu),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGithub.reference"},ot.createElement(iu,{placeholder:"https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(Up,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGithub.version"},ot.createElement(iu,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}},Bu="gitlab/file",Su={label:"Gitlab",typePattern:fp.GITLAB_FILE,type:Bu,description:"A file stored in git, hosted by Gitlab.",key:"gitlab",isDefault:!1,isMatch:!0,editCmp:ru("name",Bu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},Mu={label:"Gitlab",typePattern:fp.GITLAB_FILE,type:Bu,description:"A file stored in git, hosted by Gitlab.",key:"default.gitlab",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,Bu),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.reference"},ot.createElement(iu,{placeholder:"https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(Up,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.version"},ot.createElement(iu,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Nu extends ot.Component{constructor(e){var t,n;super(e),this.onIncludesSubPathChange=e=>{this.setState({includesSubPath:e.target.checked})},this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onVersionChanged=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},this.onSubPathChanged=e=>{const t=p(this.props.artifact);t.location=e,this.props.onChange(t)};const{artifact:a}=this.props;this.state={includesSubPath:void 0!==(null!=(n=a.location)?n:null==(t=a.metadata)?void 0:t.subPath)}}render(){var e,t;const{artifact:n}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"URL",helpKey:"pipeline.config.expectedArtifact.gitrepo.url"},ot.createElement(iu,{placeholder:"https or ssh to your git repo",value:n.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Branch",helpKey:"pipeline.config.expectedArtifact.gitrepo.branch"},ot.createElement(iu,{placeholder:"master",value:n.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Checkout subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.checkoutSubpath"},ot.createElement(xo,{checked:this.state.includesSubPath,onChange:this.onIncludesSubPathChange})),this.state.includesSubPath&&ot.createElement(Up,{label:"Subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.subpath"},ot.createElement(iu,{placeholder:"path/to/subdirectory",value:null!=(t=n.location)?t:null==(e=n.metadata)?void 0:e.subPath,onChange:this.onSubPathChanged,pipeline:this.props.pipeline,docLink:!0})))}}const Du={label:"GitRepo",description:"A Git repository.",key:"gitrepo",typePattern:fp.GIT_REPO,type:"git/repo",isDefault:!1,isMatch:!0,editCmp:Nu},Iu={label:"GitRepo",typePattern:fp.GIT_REPO,type:"git/repo",description:"A Git repository.",key:"default.gitrepo",isDefault:!0,isMatch:!1,editCmp:Nu};class Fu{static getArtifactNames(e,t){return Si("/artifacts/account").path(t,"names").query({type:e}).get()}static getArtifactVersions(e,t,n){return Si("/artifacts/account").path(t,"versions").query({type:e,artifactName:n}).get()}}const Tu="helm/chart";class Qu extends ot.Component{constructor(e){super(e),this.state={names:[],versions:[],versionsLoading:!0,namesLoading:!0},this.SEMVER=new RegExp(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/),this.onChange=(e,t)=>{const n=p(this.props.artifact);n[t]=e.value.toString(),this.props.onChange(n)};const{artifact:t}=this.props;if(t.type!==Tu){const n=p(t);n.type=Tu,e.onChange(n)}Fu.getArtifactNames(Tu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1})}),(()=>{this.setState({names:[],namesLoading:!1,versionsLoading:!1,versions:[]})}))}componentDidMount(){const{artifact:e}=this.props;e.name&&this.getChartVersionOptions(e.name)}componentDidUpdate(e){this.props.account.name!==e.account.name&&Fu.getArtifactNames(Tu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1,versions:[]})}),(()=>{this.setState({names:[],namesLoading:!1,versions:[]})}))}render(){const{artifact:e}=this.props,t=this.state.names.map((e=>({value:e,label:e})));return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Name"},!this.state.namesLoading&&ot.createElement(Ti,{options:t,value:e.name||"",onChange:e=>{this.onChange(e,"name"),this.getChartVersionOptions(e.value.toString())},clearable:!1}),this.state.namesLoading&&ot.createElement(Es,null)),ot.createElement(Up,{label:"Version"},!this.state.versionsLoading&&ot.createElement(Ac,{options:this.state.versions,value:e.version||"",onChange:e=>{this.onChange(e,"version")},clearable:!1}),this.state.versionsLoading&&ot.createElement(Es,null)))}getChartVersionOptions(e){const{artifact:t,account:n}=this.props;this.setState({versionsLoading:!0}),Fu.getArtifactVersions(Tu,n.name,e).then((e=>{t.version&&!this.SEMVER.test(t.version)&&(e=e.concat(t.version)),this.setState({versions:e.map((e=>({label:e,value:e}))),versionsLoading:!1})}))}}const Pu={label:"Helm",typePattern:fp.HELM_CHART,type:Tu,isDefault:!1,isMatch:!0,description:"A helm chart to be deployed",key:"helm",editCmp:Qu},Ru={label:"Helm",typePattern:fp.HELM_CHART,type:Tu,isDefault:!0,isMatch:!1,description:"A helm chart to be deployed",key:"default.helm",editCmp:Qu},Uu={label:"HTTP",typePattern:fp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"http",isDefault:!1,isMatch:!0,editCmp:ru("reference","http/file","URL","path/file.ext","")},zu={label:"HTTP",typePattern:fp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"default.http",isDefault:!0,isMatch:!1,editCmp:ru("reference","http/file","URL","http://host/path/file.ext","")},Gu={label:"Ivy",typePattern:fp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!1,isMatch:!0,editCmp:ru("reference","ivy/file","Ivy Coordinate","group:artifact:version","")},ju={label:"Ivy",typePattern:fp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!0,isMatch:!1,editCmp:ru("reference","ivy/file","Ivy Coordinate","group:artifact:version","")};var Lu,Ou;(Ou=Lu||(Lu={})).Jenkins="jenkins",Ou.Travis="travis",Ou.Wercker="wercker",Ou.Concourse="concourse";class Yu{static listMasters(e=null){const t=Si("/v2/builds").query({type:e}).get();if(!t)return Ze.reject("An error occurred when retrieving build masters");switch(e){case Lu.Jenkins:return t.then((e=>e.filter((e=>!/^travis-/.test(e)))));case Lu.Travis:return t.then((e=>e.filter((e=>/^travis-/.test(e)))));case Lu.Concourse:return t.then((e=>e.filter((e=>/^concourse-/.test(e)))));default:return t}}static listJobsForMaster(e){return Si("/v3/builds").path(e,"jobs").get()}static listBuildsForJob(e,t){return Si("/v3/builds").path(e,"builds").query({job:t}).get()}static getJobConfig(e,t){return Si("/v3/builds").path(e,"job").query({job:t}).get()}static getGcbAccounts(){return Si("/gcb/accounts").get()}static getGcbTriggers(e){return Si("/gcb/triggers").path(e).get()}static getCodeBuildAccounts(){return Si("/codebuild/accounts").get()}static getCodeBuildProjects(e){return Si("/codebuild/projects").path(e).get()}}const $u="jenkins/file",Hu={label:"Jenkins",typePattern:fp.JENKINS_FILE,type:$u,isDefault:!1,isMatch:!0,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:ru("reference",$u,"Relative path","pathFromWorkspaceRoot/file.ext","")},Vu={label:"Jenkins",typePattern:fp.JENKINS_FILE,type:$u,isDefault:!0,isMatch:!1,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:class extends Ap{constructor(e){super(e,$u),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onNameChange=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t),Yu.listBuildsForJob(this.props.account.name,e).then((e=>{const t=e.filter((e=>!e.building&&"SUCCESS"===e.result)).sort(((e,t)=>t.number-e.number)).map((e=>e.number));this.setState({buildNumbers:t})}),(()=>{this.setState({buildNumbers:[]})}))},this.state={jobs:[],buildNumbers:[]}}componentDidMount(){Yu.listJobsForMaster(this.props.account.name).then((e=>{this.setState({jobs:e})}))}render(){const{buildNumbers:e,jobs:t}=this.state,{artifact:n}=this.props,a=e.map((e=>({label:e,value:e})));a.splice(0,0,{label:"lastSuccessfulBuild",value:"lastSuccessfulBuild"});const i=t.map((e=>({label:e,value:e})));return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Job"},ot.createElement(Ti,{options:i,onChange:e=>this.onNameChange(e.value),value:n.name,clearable:!1})),ot.createElement(Up,{label:"Build Number"},ot.createElement(Ti,{options:a,onChange:e=>this.onVersionChange(e.value),value:n.version,clearable:!1})),ot.createElement(Up,{label:"Relative path"},ot.createElement(iu,{placeholder:"pathFromWorkspaceRoot/file.ext",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Ju extends Ap{constructor(e){super(e,e.artifact.type||"kubernetes/configMap"),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onTypeChange=e=>{const t=p(this.props.artifact);t.type=e.value,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Resource Type"},ot.createElement(cn,{options:[{label:"ConfigMap",value:"kubernetes/configMap"},{label:"Deployment",value:"kubernetes/deployment"},{label:"ReplicaSet",value:"kubernetes/replicaSet"},{label:"Secret",value:"kubernetes/secret"}],clearable:!1,value:this.props.artifact.type,onChange:this.onTypeChange})),ot.createElement(Up,{label:"Reference"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0})))}}const Wu={label:"Kubernetes",typePattern:fp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"kubernetes",isDefault:!1,isMatch:!0,editCmp:Ju},Ku={label:"Kubernetes",typePattern:fp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"default.kubernetes",isDefault:!0,isMatch:!1,editCmp:Ju},qu={label:"Maven",typePattern:fp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!1,isMatch:!0,editCmp:ru("reference","maven/file","Maven Coordinate","group:artifact:version","")},Xu={label:"Maven",typePattern:fp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!0,isMatch:!1,editCmp:ru("reference","maven/file","Maven Coordinate","group:artifact:version","")},Zu={label:"Oracle",typePattern:fp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!1,isMatch:!0,editCmp:ru("name","oracle/object","reference","oci://bucket/file-path","pipeline.config.expectedArtifact.oracle.name")},_u={label:"Oracle",typePattern:fp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!0,isMatch:!1,editCmp:ru("reference","oracle/object","Reference","oci://bucket/file-path","pipeline.config.expectedArtifact.defaultOracle.reference")},em={label:"S3",typePattern:fp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!1,isMatch:!0,editCmp:ru("name","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.s3.name")},tm={label:"S3",typePattern:fp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!0,isMatch:!1,editCmp:ru("reference","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.defaultS3.reference")};var nm="data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20transform%3D%22matrix%28.56848%200%200%20.56848%2034.64%2080.686%29%22%20aria-label%3D%22%3F%22%3E%20%20%20%3Cpath%20d%3D%22m96.688%20198.91h19.031v23.812h-19.031zm18.469-13.781h-17.906v-14.438q0-9.4688%202.625-15.562t11.062-14.156l8.4375-8.3438q5.3438-4.9688%207.6875-9.375%202.4375-4.4062%202.4375-9%200-8.3438-6.1875-13.5-6.0938-5.1563-16.219-5.1563-7.4062%200-15.844%203.2812-8.3438%203.2813-17.438%209.5625v-17.625q8.8125-5.3438%2017.812-7.9688%209.0938-2.625%2018.75-2.625%2017.25%200%2027.656%209.0938%2010.5%209.0938%2010.5%2024%200%207.125-3.375%2013.594-3.375%206.375-11.812%2014.438l-8.25%208.0625q-4.4062%204.4062-6.2812%206.9375-1.7812%202.4375-2.5312%204.7812-0.5625%201.9688-0.84375%204.7812t-0.28125%207.6875z%22%20fill%3D%22%23fff%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E";const am=class{static registerType(e,t){am.icons.push({type:e,path:t})}static getPath(e){if(null==e)return nm;const t=am.icons.find((t=>t.type.test(e)));return void 0===t?null:t.path}};let im=am;im.icons=[],im.registerType(fp.CUSTOM_OBJECT,nm),im.registerType(fp.DOCKER_IMAGE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20viewBox%3D%220%200%20482%20439%22%20%20%20height%3D%22439%22%20%20%20width%3D%22482%22%20%20%20xml%3Aspace%3D%22preserve%22%20%20%20id%3D%22svg3718%22%20%20%20version%3D%221.1%22%3E%3Cmetadata%20%20%20%20%20id%3D%22metadata3724%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%20%20%20%20%20id%3D%22defs3722%22%3E%3CclipPath%20%20%20%20%20%20%20id%3D%22clipPath3734%22%20%20%20%20%20%20%20clipPathUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20%20%20%20%20%20%20%20%20id%3D%22path3732%22%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C329.25%20H%20361.5%20V%200%20H%200%20Z%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3Cg%20%20%20%20%20transform%3D%22matrix%281.3333333%2C0%2C0%2C-1.3333333%2C0%2C439%29%22%20%20%20%20%20id%3D%22g3726%22%3E%3Cg%20%20%20%20%20%20%20id%3D%22g3728%22%3E%3Cg%20%20%20%20%20%20%20%20%20clip-path%3D%22url%28%23clipPath3734%29%22%20%20%20%20%20%20%20%20%20id%3D%22g3730%22%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28344.626%2C78.6162%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3736%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3738%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22m%200%2C0%20c%20-0.915%2C0.881%20-2.067%2C1.574%20-3.455%2C2.083%20-1.39%2C0.505%20-2.909%2C0.858%20-4.559%2C1.055%20-1.652%2C0.196%20-3.197%2C0.292%20-4.634%2C0.292%20-3.268%2C0%20-6.342%2C-0.523%20-9.217%2C-1.568%20-2.876%2C-1.048%20-5.539%2C-2.549%20-7.992%2C-4.511%20v%200.981%20c%200%2C1.403%20-0.497%2C2.605%20-1.495%2C3.604%20-0.995%2C0.997%20-2.2%2C1.494%20-3.603%2C1.494%20-1.44%2C0%20-2.656%2C-0.497%20-3.653%2C-1.494%20-0.996%2C-0.999%20-1.496%2C-2.201%20-1.496%2C-3.604%20v%20-44.713%20c%200%2C-1.406%200.5%2C-2.606%201.496%2C-3.603%200.997%2C-0.997%202.213%2C-1.495%203.653%2C-1.495%201.403%2C0%202.608%2C0.498%203.603%2C1.495%200.998%2C0.997%201.495%2C2.197%201.495%2C3.603%20v%2022.357%20c%200%2C2.384%200.452%2C4.625%201.348%2C6.717%200.9%2C2.091%202.125%2C3.911%203.677%2C5.466%201.554%2C1.552%203.375%2C2.777%205.468%2C3.676%202.09%2C0.899%204.329%2C1.349%206.716%2C1.349%202.419%2C0%204.657%2C-0.409%206.717%2C-1.226%200.815%2C-0.36%201.536%2C-0.538%202.157%2C-0.538%200.716%2C0%201.387%2C0.128%202.01%2C0.392%200.618%2C0.26%201.16%2C0.627%201.618%2C1.102%200.457%2C0.473%200.824%2C1.021%201.102%2C1.644%200.278%2C0.618%200.418%2C1.289%200.418%2C2.009%20C%201.374%2C-2.028%200.915%2C-0.883%200%2C0%20m%20-88.54%2C-18.925%20c%200.52%2C1.796%201.323%2C3.437%202.4%2C4.927%201.079%2C1.486%202.353%2C2.762%203.825%2C3.825%201.472%2C1.059%203.089%2C1.887%204.854%2C2.476%201.764%2C0.587%203.578%2C0.881%205.442%2C0.881%201.863%2C0%203.667%2C-0.294%205.415%2C-0.881%201.749%2C-0.589%203.352%2C-1.417%204.804%2C-2.476%201.456%2C-1.063%202.732%2C-2.339%203.824%2C-3.825%201.098%2C-1.49%201.922%2C-3.131%202.479%2C-4.927%20z%20m%2035.936%2C14.316%20c%20-5.428%2C5.36%20-11.9%2C8.039%20-19.415%2C8.039%20-7.585%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.83%2C-8.04%2019.415%2C-8.04%206.894%2C0%2012.875%2C2.222%2017.944%2C6.667%200.98%2C1.012%201.471%2C2.237%201.471%2C3.677%200%2C1.472%20-0.484%2C2.689%20-1.449%2C3.654%20-0.963%2C0.962%20-2.179%2C1.446%20-3.651%2C1.446%20-1.274%2C-0.034%20-2.402%2C-0.461%20-3.382%2C-1.276%20-1.538%2C-1.307%20-3.206%2C-2.289%20-5.002%2C-2.941%20-1.801%2C-0.654%20-3.774%2C-0.981%20-5.931%2C-0.981%20-1.898%2C0%20-3.719%2C0.295%20-5.469%2C0.883%20-1.746%2C0.589%20-3.351%2C1.412%20-4.804%2C2.476%20-1.454%2C1.061%20-2.721%2C2.335%20-3.798%2C3.824%20-1.079%2C1.487%20-1.898%2C3.129%20-2.45%2C4.927%20h%2038.827%20c%201.436%2C0%202.654%2C0.482%203.651%2C1.447%200.998%2C0.963%201.498%2C2.182%201.498%2C3.652%200%2C3.79%20-0.673%2C7.311%20-2.011%2C10.565%20-1.342%2C3.252%20-3.352%2C6.202%20-6.029%2C8.85%20m%20-51.511%2C2.941%20c%200%2C0.687%20-0.137%2C1.339%20-0.415%2C1.96%20-0.279%2C0.621%20-0.646%2C1.168%20-1.105%2C1.644%20-0.458%2C0.471%20-0.997%2C0.838%20-1.618%2C1.103%20-0.62%2C0.261%20-1.291%2C0.391%20-2.01%2C0.391%20-1.013%2C0%20-1.928%2C-0.263%20-2.745%2C-0.783%20l%20-29.316%2C-19.073%20v%2038.241%20c%200%2C1.438%20-0.5%2C2.655%20-1.497%2C3.654%20-0.995%2C0.995%20-2.199%2C1.495%20-3.604%2C1.495%20-1.44%2C0%20-2.656%2C-0.5%20-3.651%2C-1.495%20-0.997%2C-0.999%20-1.497%2C-2.216%20-1.497%2C-3.654%20v%20-68.146%20c%200%2C-1.405%200.5%2C-2.617%201.497%2C-3.628%200.995%2C-1.014%202.211%2C-1.52%203.651%2C-1.52%201.405%2C0%202.609%2C0.506%203.604%2C1.52%200.997%2C1.011%201.497%2C2.223%201.497%2C3.628%20v%2017.699%20l%205.98%2C3.92%2022.652%2C-25.443%20c%200.912%2C-0.884%202.057%2C-1.324%203.429%2C-1.324%200.719%2C0%201.39%2C0.13%202.01%2C0.392%200.621%2C0.261%201.16%2C0.628%201.618%2C1.103%200.459%2C0.472%200.826%2C1.022%201.105%2C1.642%200.278%2C0.619%200.415%2C1.277%200.415%2C1.961%200%2C1.339%20-0.475%2C2.532%20-1.421%2C3.58%20l%20-21.081%2C23.728%2020.542%2C13.336%20c%201.305%2C0.883%201.96%2C2.236%201.96%2C4.069%20m%20-84.207%2C-10.173%20c%201.568%2C1.552%203.398%2C2.777%205.49%2C3.676%202.093%2C0.899%204.332%2C1.349%206.719%2C1.349%202.156%2C0%204.148%2C-0.361%205.981%2C-1.078%201.828%2C-0.72%203.578%2C-1.784%205.244%2C-3.187%200.981%2C-0.785%202.092%2C-1.178%203.334%2C-1.178%201.471%2C0%202.688%2C0.49%203.653%2C1.472%200.964%2C0.981%201.447%2C2.207%201.447%2C3.677%200%2C1.535%20-0.589%2C2.827%20-1.766%2C3.874%20-5.034%2C4.443%20-10.997%2C6.666%20-17.893%2C6.666%20-7.586%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.361%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.681%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.829%2C-8.04%2019.415%2C-8.04%206.862%2C0%2012.827%2C2.222%2017.893%2C6.667%201.079%2C1.081%201.617%2C2.335%201.617%2C3.775%200%2C1.473%20-0.483%2C2.688%20-1.444%2C3.653%20-0.965%2C0.964%20-2.184%2C1.447%20-3.653%2C1.447%20-1.242%2C-0.034%20-2.321%2C-0.392%20-3.236%2C-1.079%20-1.634%2C-1.406%20-3.368%2C-2.46%20-5.196%2C-3.163%20-1.833%2C-0.703%20-3.825%2C-1.054%20-5.981%2C-1.054%20-2.387%2C0%20-4.626%2C0.45%20-6.719%2C1.348%20-2.092%2C0.9%20-3.922%2C2.125%20-5.49%2C3.677%20-1.57%2C1.552%20-2.804%2C3.375%20-3.701%2C5.468%20-0.899%2C2.09%20-1.349%2C4.329%20-1.349%2C6.716%200%2C2.384%200.45%2C4.625%201.349%2C6.717%200.897%2C2.091%202.131%2C3.911%203.701%2C5.466%20m%20-31.676%2C-18.827%20c%20-0.899%2C-2.076%20-2.127%2C-3.897%20-3.678%2C-5.465%20-1.552%2C-1.57%20-3.376%2C-2.813%20-5.466%2C-3.726%20-2.092%2C-0.917%20-4.331%2C-1.374%20-6.718%2C-1.374%20-2.419%2C0%20-4.673%2C0.457%20-6.764%2C1.374%20-2.092%2C0.913%20-3.906%2C2.147%20-5.442%2C3.701%20-1.538%2C1.552%20-2.755%2C3.373%20-3.654%2C5.466%20-0.899%2C2.089%20-1.348%2C4.315%20-1.348%2C6.668%200%2C2.352%200.449%2C4.575%201.348%2C6.668%200.899%2C2.089%202.116%2C3.913%203.654%2C5.467%201.536%2C1.549%203.35%2C2.784%205.442%2C3.701%202.091%2C0.913%204.345%2C1.372%206.764%2C1.372%202.387%2C0%204.626%2C-0.459%206.718%2C-1.372%202.09%2C-0.917%203.914%2C-2.159%205.466%2C-3.726%201.551%2C-1.57%202.779%2C-3.392%203.678%2C-5.468%200.897%2C-2.076%201.347%2C-4.29%201.347%2C-6.642%200%2C-2.353%20-0.45%2C-4.569%20-1.347%2C-6.644%20m%203.553%2C26.059%20c%20-5.427%2C5.36%20-11.898%2C8.039%20-19.415%2C8.039%20-7.583%2C0%20-14.055%2C-2.679%20-19.412%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.357%2C-5.361%2011.829%2C-8.04%2019.412%2C-8.04%207.517%2C0%2013.988%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.042%2C11.767%208.042%2C19.415%20-0.034%2C3.79%20-0.712%2C7.304%20-2.036%2C10.54%20-1.323%2C3.236%20-3.325%2C6.193%20-6.006%2C8.875%20m%20-63.398%2C-26.059%20c%20-0.899%2C-2.076%20-2.124%2C-3.897%20-3.676%2C-5.465%20-1.552%2C-1.57%20-3.375%2C-2.813%20-5.465%2C-3.726%20-2.093%2C-0.917%20-4.331%2C-1.374%20-6.719%2C-1.374%20-2.418%2C0%20-4.673%2C0.457%20-6.765%2C1.374%20-2.093%2C0.913%20-3.907%2C2.147%20-5.441%2C3.701%20-1.538%2C1.552%20-2.754%2C3.373%20-3.653%2C5.466%20-0.899%2C2.089%20-1.349%2C4.315%20-1.349%2C6.668%200%2C2.352%200.45%2C4.575%201.349%2C6.668%200.899%2C2.089%202.115%2C3.913%203.653%2C5.467%201.534%2C1.549%203.348%2C2.784%205.441%2C3.701%202.092%2C0.913%204.347%2C1.372%206.765%2C1.372%202.388%2C0%204.626%2C-0.459%206.719%2C-1.372%202.09%2C-0.917%203.913%2C-2.159%205.465%2C-3.726%201.552%2C-1.57%202.777%2C-3.392%203.676%2C-5.468%200.9%2C-2.076%201.349%2C-4.29%201.349%2C-6.642%200%2C-2.353%20-0.449%2C-4.569%20-1.349%2C-6.644%20m%206.449%2C57.632%20c%20-1.472%2C0%20-2.69%2C-0.485%20-3.653%2C-1.447%20-0.966%2C-0.965%20-1.447%2C-2.182%20-1.447%2C-3.651%20V%20-2.6%20c%20-4.968%2C4.022%20-10.705%2C6.03%20-17.209%2C6.03%20-7.583%2C0%20-14.054%2C-2.679%20-19.415%2C-8.039%20-5.36%2C-5.364%20-8.039%2C-11.832%20-8.039%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.039%2C-19.415%205.361%2C-5.361%2011.832%2C-8.04%2019.415%2C-8.04%207.517%2C0%2013.989%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.04%2C11.767%208.04%2C19.415%20v%2045.89%20c%200%2C1.469%20-0.498%2C2.686%20-1.495%2C3.651%20-0.997%2C0.962%20-2.213%2C1.447%20-3.651%2C1.447%20m%20142.279%2C113.243%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C27.383%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%200%2C27.384%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20135.273%2C-44.843%20-5.068%2C3.382%20c%20-5.484%2C3.667%20-18.077%2C5.011%20-27.772%2C3.183%20-1.248%2C9.13%20-6.337%2C17.047%20-15.592%2C24.203%20l%20-5.322%2C3.548%20-3.551%2C-5.326%20c%20-4.545%2C-6.855%20-6.816%2C-16.352%20-6.072%2C-25.46%200.335%2C-3.203%201.388%2C-8.934%204.685%2C-13.973%20-3.295%2C-1.77%20-9.808%2C-4.209%20-18.391%2C-4.045%20h%20-165.087%20l%20-0.323%2C-1.901%20c%20-1.552%2C-9.153%20-1.518%2C-37.714%2017.025%2C-59.667%2014.096%2C-16.686%2035.229%2C-25.147%2062.811%2C-25.147%2059.795%2C0%20104.033%2C27.525%20124.749%2C77.557%208.146%2C-0.162%2025.687%2C-0.047%2034.697%2C17.167%200.234%2C0.395%200.775%2C1.429%202.349%2C4.69%20z%22%20%2F%3E%3C%2Fg%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28323.4053%2C29.5137%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3740%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3742%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Anonzero%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C0%20H%200.233%20C%200.507%2C0%200.728%2C0.091%200.728%2C0.312%200.728%2C0.507%200.585%2C0.638%200.272%2C0.638%200.143%2C0.638%200.052%2C0.624%200%2C0.61%20Z%20m%20-0.013%2C-1.209%20h%20-0.494%20v%202.132%20c%200.195%2C0.039%200.468%2C0.065%200.819%2C0.065%200.403%2C0%200.584%2C-0.065%200.741%2C-0.156%20C%201.17%2C0.741%201.261%2C0.572%201.261%2C0.364%201.261%2C0.13%201.079%2C-0.052%200.819%2C-0.13%20v%20-0.026%20c%200.207%2C-0.077%200.325%2C-0.234%200.39%2C-0.52%200.064%2C-0.325%200.103%2C-0.455%200.156%2C-0.533%20H%200.832%20c%20-0.065%2C0.078%20-0.104%2C0.272%20-0.169%2C0.521%20-0.039%2C0.233%20-0.169%2C0.337%20-0.442%2C0.337%20h%20-0.234%20z%20m%20-1.313%2C1.118%20c%200%2C-0.949%200.702%2C-1.703%201.664%2C-1.703%200.935%2C0%201.625%2C0.754%201.625%2C1.69%200%2C0.949%20-0.69%2C1.716%20-1.638%2C1.716%20-0.949%2C0%20-1.651%2C-0.767%20-1.651%2C-1.703%20m%203.835%2C0%20c%200%2C-1.209%20-0.949%2C-2.158%20-2.184%2C-2.158%20-1.222%2C0%20-2.197%2C0.949%20-2.197%2C2.158%200%2C1.183%200.975%2C2.132%202.197%2C2.132%201.235%2C0%202.184%2C-0.949%202.184%2C-2.132%22%20%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.KUBERNETES,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%20%20%20xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%20%20%20width%3D%22722.8457%22%20%20%20height%3D%22701.96637%22%20%20%20id%3D%22svg2%22%20%20%20version%3D%221.1%22%20%20%20inkscape%3Aversion%3D%220.48.4%20r9939%22%20%20%20sodipodi%3Adocname%3D%22logo.svg%22%20%20%20inkscape%3Aexport-filename%3D%22%2Fhome%2Fthockin%2Fsrc%2Fkubernetes%2Fnew.png%22%20%20%20inkscape%3Aexport-xdpi%3D%22460.95001%22%20%20%20inkscape%3Aexport-ydpi%3D%22460.95001%22%3E%20%20%3Cdefs%20%20%20%20%20id%3D%22defs4%22%20%2F%3E%20%20%3Csodipodi%3Anamedview%20%20%20%20%20id%3D%22base%22%20%20%20%20%20pagecolor%3D%22%23ffffff%22%20%20%20%20%20bordercolor%3D%22%23666666%22%20%20%20%20%20borderopacity%3D%221.0%22%20%20%20%20%20inkscape%3Apageopacity%3D%220.0%22%20%20%20%20%20inkscape%3Apageshadow%3D%222%22%20%20%20%20%20inkscape%3Azoom%3D%2216.190509%22%20%20%20%20%20inkscape%3Acx%3D%22277.56851%22%20%20%20%20%20inkscape%3Acy%3D%22157.54494%22%20%20%20%20%20inkscape%3Adocument-units%3D%22px%22%20%20%20%20%20inkscape%3Acurrent-layer%3D%22g3052%22%20%20%20%20%20showgrid%3D%22false%22%20%20%20%20%20inkscape%3Awindow-width%3D%221519%22%20%20%20%20%20inkscape%3Awindow-height%3D%22822%22%20%20%20%20%20inkscape%3Awindow-x%3D%2251%22%20%20%20%20%20inkscape%3Awindow-y%3D%2225%22%20%20%20%20%20inkscape%3Awindow-maximized%3D%220%22%20%20%20%20%20inkscape%3Asnap-global%3D%22false%22%20%20%20%20%20fit-margin-top%3D%2210%22%20%20%20%20%20fit-margin-left%3D%2210%22%20%20%20%20%20fit-margin-right%3D%2210%22%20%20%20%20%20fit-margin-bottom%3D%2210%22%20%2F%3E%20%20%3Cmetadata%20%20%20%20%20id%3D%22metadata7%22%3E%20%20%20%20%3Crdf%3ARDF%3E%20%20%20%20%20%20%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%20%20%20%20%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%20%20%20%20%20%20%20%20%3Cdc%3Atitle%20%2F%3E%20%20%20%20%20%20%3C%2Fcc%3AWork%3E%20%20%20%20%3C%2Frdf%3ARDF%3E%20%20%3C%2Fmetadata%3E%20%20%3Cg%20%20%20%20%20inkscape%3Alabel%3D%22Layer%201%22%20%20%20%20%20inkscape%3Agroupmode%3D%22layer%22%20%20%20%20%20id%3D%22layer1%22%20%20%20%20%20transform%3D%22translate%28-6.3260942%2C-174.7524%29%22%3E%20%20%20%20%3Cg%20%20%20%20%20%20%20id%3D%22g3052%22%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23326ce5%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%22%20%20%20%20%20%20%20%20%20d%3D%22m%20365.3125%2C184.8125%20a%2046.724621%2C46.342246%200%200%200%20-17.90625%2C4.53125%20l%20-244.34375%2C116.75%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C31.4375%20L%2017.5%2C599.78125%20A%2046.724621%2C46.342246%200%200%200%2023.84375%2C635.3125%2046.724621%2C46.342246%200%200%200%2026.5%2C639%20l%20169.125%2C210.28125%20a%2046.724621%2C46.342246%200%200%200%2036.53125%2C17.4375%20L%20503.375%2C866.65625%20A%2046.724621%2C46.342246%200%200%200%20539.90625%2C849.25%20L%20708.96875%2C638.9375%20A%2046.724621%2C46.342246%200%200%200%20718%2C599.71875%20l%20-60.375%2C-262.25%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C-31.4375%20l%20-244.375%2C-116.6875%20A%2046.724621%2C46.342246%200%200%200%20365.3125%2C184.8125%20z%22%20%20%20%20%20%20%20%20%20id%3D%22path3055%22%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22new.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20id%3D%22path3059%22%20%20%20%20%20%20%20%20%20d%3D%22m%20367.73366%2C274.05962%20c%20-8.07696%2C8.2e-4%20-14.62596%2C7.27591%20-14.625%2C16.25%201e-5%2C0.13773%200.0282%2C0.26934%200.0312%2C0.40625%20-0.0119%2C1.21936%20-0.0708%2C2.68836%20-0.0312%2C3.75%200.19262%2C5.176%201.3209%2C9.13749%202%2C13.90625%201.23028%2C10.20666%202.26117%2C18.66736%201.625%2C26.53125%20-0.61869%2C2.9654%20-2.80288%2C5.67741%20-4.75%2C7.5625%20l%20-0.34375%2C6.1875%20c%20-8.77682%2C0.72717%20-17.61235%2C2.05874%20-26.4375%2C4.0625%20-37.97461%2C8.62218%20-70.67008%2C28.18307%20-95.5625%2C54.59375%20-1.61522%2C-1.10193%20-4.44103%2C-3.12914%20-5.2813%2C-3.75%20-2.61117%2C0.35262%20-5.25021%2C1.15829%20-8.6875%2C-0.84375%20-6.54491%2C-4.40563%20-12.50587%2C-10.48693%20-19.71875%2C-17.8125%20-3.30498%2C-3.50419%20-5.69832%2C-6.84101%20-9.625%2C-10.21875%20-0.89172%2C-0.76707%20-2.25258%2C-1.80455%20-3.25%2C-2.59375%20-3.06988%2C-2.44757%20-6.6907%2C-3.72402%20-10.1875%2C-3.84375%20-4.49589%2C-0.15394%20-8.82394%2C1.60385%20-11.65625%2C5.15625%20-5.03521%2C6.31538%20-3.42312%2C15.96805%203.59375%2C21.5625%200.0712%2C0.0567%200.14702%2C0.10078%200.21875%2C0.15625%200.96422%2C0.78162%202.14496%2C1.78313%203.03125%2C2.4375%204.16687%2C3.07655%207.9732%2C4.65145%2012.125%2C7.09375%208.747%2C5.40181%2015.99837%2C9.88086%2021.75%2C15.28125%202.24602%2C2.39417%202.63858%2C6.61292%202.9375%2C8.4375%20l%204.6875%2C4.1875%20c%20-25.09342%2C37.76368%20-36.70686%2C84.40946%20-29.8437%2C131.9375%20l%20-6.125%2C1.78125%20c%20-1.6143%2C2.08461%20-3.89541%2C5.36474%20-6.2813%2C6.34375%20-7.52513%2C2.37021%20-15.99424%2C3.24059%20-26.21875%2C4.3125%20-4.80031%2C0.39915%20-8.94218%2C0.16095%20-14.03125%2C1.125%20-1.12008%2C0.21218%20-2.68072%2C0.61877%20-3.90625%2C0.90625%20-0.0426%2C0.009%20-0.0824%2C0.0216%20-0.125%2C0.0312%20-0.0668%2C0.0155%20-0.15456%2C0.0479%20-0.21875%2C0.0625%20-8.62014%2C2.08279%20-14.15774%2C10.006%20-12.375%2C17.8125%201.78316%2C7.80833%2010.20314%2C12.55677%2018.875%2C10.6875%200.0626%2C-0.0143%200.1535%2C-0.0167%200.21875%2C-0.0312%200.0979%2C-0.0224%200.18409%2C-0.0699%200.28125%2C-0.0937%201.20885%2C-0.26536%202.72377%2C-0.5606%203.78125%2C-0.84375%205.00334%2C-1.33963%208.62694%2C-3.30796%2013.125%2C-5.03125%209.67694%2C-3.47077%2017.69173%2C-6.37022%2025.5%2C-7.5%203.26118%2C-0.25542%206.69711%2C2.01216%208.40625%2C2.96875%20l%206.375%2C-1.09375%20c%2014.67018%2C45.48282%2045.41416%2C82.24502%2084.34375%2C105.3125%20l%20-2.65625%2C6.375%20c%200.95742%2C2.47542%202.01341%2C5.8247%201.30022%2C8.26932%20-2.83868%2C7.3612%20-7.70097%2C15.13097%20-13.23772%2C23.79318%20-2.68085%2C4.00192%20-5.42453%2C7.10761%20-7.84375%2C11.6875%20-0.5789%2C1.09589%20-1.31618%2C2.77932%20-1.875%2C3.9375%20-3.75884%2C8.04236%20-1.00164%2C17.3052%206.21875%2C20.78125%207.26575%2C3.49788%2016.28447%2C-0.19134%2020.1875%2C-8.25%200.006%2C-0.0114%200.0257%2C-0.0198%200.0312%2C-0.0312%200.004%2C-0.009%20-0.004%2C-0.0225%200%2C-0.0312%200.55593%2C-1.14255%201.34353%2C-2.64437%201.8125%2C-3.71875%202.07213%2C-4.74702%202.76161%2C-8.81506%204.21875%2C-13.40625%203.86962%2C-9.72014%205.99567%2C-19.91903%2011.32258%2C-26.27411%201.45868%2C-1.74023%203.83681%2C-2.4095%206.30242%2C-3.06964%20l%203.3125%2C-6%20c%2033.93824%2C13.0268%2071.92666%2C16.52246%20109.875%2C7.90625%208.65697%2C-1.96557%2017.01444%2C-4.50945%2025.09375%2C-7.5625%200.93098%2C1.65133%202.66113%2C4.8257%203.125%2C5.625%202.50559%2C0.81518%205.24044%2C1.23614%207.46875%2C4.53125%203.98539%2C6.80898%206.7109%2C14.86416%2010.03125%2C24.59375%201.45738%2C4.59111%202.17762%2C8.65933%204.25%2C13.40625%200.47234%2C1.08195%201.256%2C2.60486%201.8125%2C3.75%203.89482%2C8.08484%2012.94212%2C11.78667%2020.21875%2C8.28125%207.2195%2C-3.4779%209.97974%2C-12.7399%206.21875%2C-20.78125%20-0.55889%2C-1.15814%20-1.3273%2C-2.84164%20-1.90625%2C-3.9375%20-2.41946%2C-4.57976%20-5.1627%2C-7.65448%20-7.84375%2C-11.65625%20-5.53721%2C-8.66192%20-10.12968%2C-15.8577%20-12.96875%2C-23.21875%20-1.18711%2C-3.79657%200.20028%2C-6.15774%201.125%2C-8.625%20-0.55378%2C-0.63477%20-1.73881%2C-4.22009%20-2.4375%2C-5.90625%2040.4574%2C-23.88816%2070.29856%2C-62.02129%2084.3125%2C-106.0625%201.8924%2C0.29742%205.18154%2C0.87936%206.25%2C1.09375%202.19954%2C-1.4507%204.22194%2C-3.34352%208.1875%2C-3.03125%207.80832%2C1.12937%2015.82288%2C4.02973%2025.5%2C7.5%204.49815%2C1.72306%208.1216%2C3.72313%2013.125%2C5.0625%201.05749%2C0.28309%202.57238%2C0.5472%203.78125%2C0.8125%200.0972%2C0.0238%200.1833%2C0.0714%200.28125%2C0.0937%200.0653%2C0.0146%200.15615%2C0.0169%200.21875%2C0.0312%208.67236%2C1.86695%2017.09384%2C-2.87871%2018.875%2C-10.6875%201.78074%2C-7.80696%20-3.7543%2C-15.73201%20-12.375%2C-17.8125%20-1.25393%2C-0.28513%20-3.03225%2C-0.76938%20-4.25%2C-1%20-5.08912%2C-0.96378%20-9.23092%2C-0.7261%20-14.03125%2C-1.125%20-10.22456%2C-1.07138%20-18.6935%2C-1.94269%20-26.21875%2C-4.3125%20-3.06826%2C-1.19028%20-5.25103%2C-4.84124%20-6.31255%2C-6.34375%20l%20-5.90625%2C-1.71875%20c%203.06226%2C-22.15442%202.23655%2C-45.21134%20-3.0625%2C-68.28125%20-5.34839%2C-23.28471%20-14.80037%2C-44.58084%20-27.40625%2C-63.34375%201.51505%2C-1.37729%204.37619%2C-3.91091%205.1875%2C-4.65625%200.23716%2C-2.62417%200.0334%2C-5.37553%202.75%2C-8.28125%205.75134%2C-5.40069%2013.00329%2C-9.87898%2021.75%2C-15.28125%204.15167%2C-2.44252%207.98954%2C-4.01698%2012.15625%2C-7.09375%200.94225%2C-0.69576%202.2289%2C-1.79759%203.21875%2C-2.59375%207.01538%2C-5.59633%208.63058%2C-15.24842%203.59375%2C-21.5625%20-5.03683%2C-6.31408%20-14.79712%2C-6.90883%20-21.8125%2C-1.3125%20-0.99856%2C0.79085%20-2.35353%2C1.82252%20-3.25%2C2.59375%20-3.9265%2C3.37796%20-6.35145%2C6.71439%20-9.65625%2C10.21875%20-7.21249%2C7.32595%20-13.17407%2C13.43777%20-19.71875%2C17.84375%20-2.83601%2C1.65106%20-6.98996%2C1.07978%20-8.87505%2C0.96875%20l%20-5.5625%2C3.96875%20c%20-31.7188%2C-33.26057%20-74.90466%2C-54.52546%20-121.40605%2C-58.6563%20-0.13006%2C-1.94872%20-0.30045%2C-5.47117%20-0.34375%2C-6.53125%20-1.90371%2C-1.82165%20-4.20342%2C-3.37686%20-4.78125%2C-7.3125%20-0.63617%2C-7.86389%200.42597%2C-16.32459%201.65625%2C-26.53125%200.6791%2C-4.76876%201.80738%2C-8.73025%202%2C-13.90625%200.0438%2C-1.17663%20-0.0265%2C-2.88401%20-0.0312%2C-4.15625%20-9.6e-4%2C-8.97409%20-6.54804%2C-16.25082%20-14.625%2C-16.25%20z%20m%20-18.3125%2C113.4375%20-4.34375%2C76.71875%20-0.3125%2C0.15625%20c%20-0.29134%2C6.86335%20-5.93996%2C12.34375%20-12.875%2C12.34375%20-2.84081%2C0%20-5.46294%2C-0.91229%20-7.59375%2C-2.46875%20l%20-0.125%2C0.0625%20-62.90625%2C-44.59375%20c%2019.33365%2C-19.01115%2044.06291%2C-33.06039%2072.5625%2C-39.53125%205.20599%2C-1.18203%2010.40966%2C-2.0591%2015.59375%2C-2.6875%20z%20m%2036.65625%2C0%20c%2033.27347%2C4.09232%2064.04501%2C19.15882%2087.625%2C42.25%20l%20-62.5%2C44.3125%20-0.21875%2C-0.0937%20c%20-5.54745%2C4.05169%20-13.36343%2C3.04639%20-17.6875%2C-2.375%20-1.77132%2C-2.22096%20-2.70072%2C-4.83239%20-2.8125%2C-7.46875%20l%20-0.0625%2C-0.0312%20z%20m%20-147.625%2C70.875%2057.4375%2C51.375%20-0.0625%2C0.3125%20c%205.18437%2C4.50697%205.94888%2C12.32794%201.625%2C17.75%20-1.7712%2C2.22105%20-4.14208%2C3.71074%20-6.6875%2C4.40625%20l%20-0.0625%2C0.25%20-73.625%2C21.25%20c%20-3.74728%2C-34.26517%204.32855%2C-67.57364%2021.375%2C-95.34375%20z%20m%20258.15625%2C0.0312%20c%208.5341%2C13.83256%2014.99655%2C29.28214%2018.84375%2C46.03125%203.80106%2C16.54828%204.75499%2C33.06697%203.1875%2C49.03125%20l%20-74%2C-21.3125%20-0.0625%2C-0.3125%20c%20-6.6265%2C-1.81104%20-10.69893%2C-8.55162%20-9.15625%2C-15.3125%200.63203%2C-2.76962%202.10222%2C-5.11264%204.09375%2C-6.84375%20l%20-0.0312%2C-0.15625%2057.125%2C-51.125%20z%20m%20-140.65625%2C55.3125%2023.53125%2C0%2014.625%2C18.28125%20-5.25%2C22.8125%20-21.125%2C10.15625%20-21.1875%2C-10.1875%20-5.25%2C-22.8125%20z%20m%2075.4375%2C62.5625%20c%200.99997%2C-0.0505%201.99558%2C0.0396%202.96875%2C0.21875%20l%200.125%2C-0.15625%2076.15625%2C12.875%20c%20-11.1455%2C31.3131%20-32.47281%2C58.44018%20-60.96875%2C76.59375%20l%20-29.5625%2C-71.40625%200.0937%2C-0.125%20c%20-2.71561%2C-6.30999%200.002%2C-13.70956%206.25%2C-16.71875%201.59965%2C-0.77041%203.27089%2C-1.19701%204.9375%2C-1.28125%20z%20m%20-127.90625%2C0.3125%20c%205.81174%2C0.0815%2011.02462%2C4.11525%2012.375%2C10.03125%200.63219%2C2.76958%200.3245%2C5.51375%20-0.71875%2C7.9375%20l%200.21875%2C0.28125%20-29.25%2C70.6875%20c%20-27.34716%2C-17.5486%20-49.12927%2C-43.82403%20-60.78125%2C-76.06245%20l%2075.5%2C-12.8125%200.125%2C0.15625%20c%200.84451%2C-0.15541%201.701%2C-0.2304%202.53125%2C-0.21875%20z%20m%2063.78125%2C30.9688%20c%202.02445%2C-0.0744%204.07865%2C0.34098%206.03125%2C1.28125%202.55951%2C1.23253%204.53673%2C3.17319%205.78125%2C5.5%20l%200.28125%2C0%2037.21875%2C67.25%20c%20-4.83029%2C1.61923%20-9.79609%2C3.00308%20-14.875%2C4.15625%20-28.46453%2C6.4629%20-56.83862%2C4.50467%20-82.53125%2C-4.25%20l%2037.125%2C-67.125%200.0625%2C0%20c%202.22767%2C-4.16441%206.45247%2C-6.64887%2010.90625%2C-6.8125%20z%22%20%20%20%20%20%20%20%20%20style%3D%22font-size%3Amedium%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3Anormal%3Bfont-stretch%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Bline-height%3Anormal%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bdirection%3Altr%3Bblock-progression%3Atb%3Bwriting-mode%3Alr-tb%3Btext-anchor%3Astart%3Bbaseline-shift%3Abaseline%3Bcolor%3A%23000000%3Bfill%3A%23ffffff%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0.25%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%3Bmarker%3Anone%3Bvisibility%3Avisible%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Benable-background%3Aaccumulate%3Bfont-family%3ASans%3B-inkscape-font-specification%3ASans%22%20%20%20%20%20%20%20%20%20sodipodi%3Anodetypes%3D%22ccccccccsccccscssccsccccccccscccsccccccccccccccscccscsccsccccscscsccccccccscccscsccccsccccscscscccccccccccccccscccsccccccccccccscccccscccccccccccccccccccccccscccscccccccccscccscccc%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22.%2Fpath3059.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.EMBEDDED_BASE64,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20fill%3D%22%23fff%22%3E%20%20%20%3Cpath%20d%3D%22m70.081%20171.06q0-6.0035-2.3648-9.4046-2.3366-3.4306-6.4468-3.4306t-6.475%203.4306q-2.3366%203.401-2.3366%209.4046t2.3366%209.4341q2.3648%203.401%206.475%203.401t6.4468-3.401q2.3648-3.4306%202.3648-9.4341zm-17.623-11.563q1.6328-2.9574%204.1102-4.377%202.5055-1.4491%205.9683-1.4491%205.743%200%209.3184%204.791%203.6035%204.791%203.6035%2012.599%200%207.8076-3.6035%2012.599-3.5753%204.791-9.3184%204.791-3.4627%200-5.9683-1.4196-2.4774-1.4491-4.1102-4.4066v4.9685h-5.2081v-46.017h5.2081z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m97.744%20163.14q-3.8287%200-6.0809%202.7504-2.224%202.7504-2.224%207.5414%200%204.7614%202.224%207.5414%202.2522%202.7504%206.0809%202.7504%203.8287%200%206.0528-2.7504%202.2522-2.78%202.2522-7.5414%200-4.791-2.2522-7.5414-2.224-2.7504-6.0528-2.7504zm11.289-18.72v5.4416q-2.1396-1.0647-4.3355-1.6266-2.1677-0.5619-4.3073-0.5619-5.6304%200-8.6146%203.9925-2.956%203.9925-3.3783%2012.066%201.661-2.573%204.1665-3.9334%202.5055-1.39%205.5178-1.39%206.3343%200%209.9941%204.0517%203.6879%204.0221%203.6879%2010.972%200%206.802-3.8287%2010.913-3.8287%204.1108-10.191%204.1108-7.2914%200-11.148-5.8557-3.8568-5.8853-3.8568-17.035%200-10.469%204.7296-16.68%204.7296-6.2401%2012.697-6.2401%202.1396%200%204.3073%200.44361%202.1959%200.44361%204.5607%201.3308z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m137.32%20148.64-14.358%2023.571h14.358zm-1.4921-5.205h7.1506v28.776h5.9964v4.9684h-5.9964v10.41h-5.6586v-10.41h-18.975v-5.7669z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GCS_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22128%22%20height%3D%22128%22%20viewBox%3D%220%200%20128%20128%22%3E%20%20%3Ctitle%3ECloud%20Storage%3C%2Ftitle%3E%20%20%3Cpath%20d%3D%22M126.47%2C58.12l-26.3-45.74A11.56%2C11.56%2C0%2C0%2C0%2C90.31%2C6.5H37.7a11.55%2C11.55%2C0%2C0%2C0-9.86%2C5.88L1.53%2C58a11.48%2C11.48%2C0%2C0%2C0%2C0%2C11.44l26.3%2C46a11.77%2C11.77%2C0%2C0%2C0%2C9.86%2C6.09H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06l26.3-45.74A11.73%2C11.73%2C0%2C0%2C0%2C126.47%2C58.12Z%22%20style%3D%22fill%3A%20%234285f4%22%2F%3E%20%20%3Cpath%20d%3D%22M85.49%2C50.55%2C49.31%2C53.88l-7%2C7%2C6%2C6L42.36%2C77.3l44.2%2C44.2H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06L118.5%2C83.56Z%22%20style%3D%22opacity%3A%200.070000000298023%3Bisolation%3A%20isolate%22%2F%3E%20%20%3Cg%20id%3D%22art%22%3E%20%20%20%20%3Cg%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C50.27H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C51.48v8.57a1.21%2C1.21%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V51.48a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C66.74H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C68v8.57a1.22%2C1.22%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V67.95a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GITHUB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22161.03%22%20height%3D%22157.06%22%20version%3D%221.1%22%20viewBox%3D%220%200%20161.03467%20157.05798%22%20xml%3Aspace%3D%22preserve%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%3Cmetadata%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%3Cdc%3Atitle%2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cg%20transform%3D%22matrix%281.3333%200%200%20-1.3333%20-386.96%20658.07%29%22%3E%3Cg%20transform%3D%22translate%28350.61%20493.55%29%22%3E%3Cpath%20d%3D%22m0%200c-33.347%200-60.388-27.035-60.388-60.388%200-26.68%2017.303-49.316%2041.297-57.301%203.018-0.559%204.126%201.31%204.126%202.905%200%201.439-0.056%206.197-0.082%2011.243-16.8-3.653-20.345%207.125-20.345%207.125-2.747%206.979-6.705%208.836-6.705%208.836-5.479%203.748%200.413%203.671%200.413%203.671%206.064-0.426%209.257-6.224%209.257-6.224%205.386-9.231%2014.127-6.562%2017.573-5.019%200.543%203.902%202.107%206.567%203.834%208.075-13.413%201.526-27.513%206.705-27.513%2029.844%200%206.592%202.359%2011.98%206.222%2016.209-0.627%201.521-2.694%207.663%200.586%2015.981%200%200%205.071%201.622%2016.61-6.191%204.817%201.338%209.983%202.009%2015.115%202.033%205.132-0.024%2010.302-0.695%2015.128-2.033%2011.526%207.813%2016.59%206.191%2016.59%206.191%203.287-8.318%201.22-14.46%200.593-15.981%203.872-4.229%206.214-9.617%206.214-16.209%200-23.195-14.127-28.301-27.574-29.796%202.166-1.874%204.096-5.549%204.096-11.183%200-8.08-0.069-14.583-0.069-16.572%200-1.608%201.086-3.49%204.147-2.898%2023.982%207.994%2041.263%2030.622%2041.263%2057.294%200%2033.353-27.037%2060.388-60.388%2060.388%22%20fill%3D%22%231b1817%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GIT_REPO,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2297px%22%20height%3D%2297px%22%20viewBox%3D%220%200%2097%2097%22%20enable-background%3D%22new%200%200%2097%2097%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cpath%20fill%3D%22%23F05133%22%20d%3D%22M92.71%2C44.408L52.591%2C4.291c-2.31-2.311-6.057-2.311-8.369%2C0l-8.33%2C8.332L46.459%2C23.19%20%20c2.456-0.83%2C5.272-0.273%2C7.229%2C1.685c1.969%2C1.97%2C2.521%2C4.81%2C1.67%2C7.275l10.186%2C10.185c2.465-0.85%2C5.307-0.3%2C7.275%2C1.671%20%20c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.958c-2.752%2C2.751-7.208%2C2.751-9.961%2C0c-2.068-2.07-2.58-5.11-1.531-7.658l-9.5-9.499v24.997%20%20c0.67%2C0.332%2C1.303%2C0.774%2C1.861%2C1.332c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.959c-2.75%2C2.749-7.209%2C2.749-9.957%2C0c-2.75-2.754-2.75-7.21%2C0-9.959%20%20c0.68-0.679%2C1.467-1.193%2C2.307-1.537V36.369c-0.84-0.344-1.625-0.853-2.307-1.537c-2.083-2.082-2.584-5.14-1.516-7.698%20%20L31.798%2C16.715L4.288%2C44.222c-2.311%2C2.313-2.311%2C6.06%2C0%2C8.371l40.121%2C40.118c2.31%2C2.311%2C6.056%2C2.311%2C8.369%2C0L92.71%2C52.779%20%20C95.021%2C50.468%2C95.021%2C46.719%2C92.71%2C44.408z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GITLAB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20width%3D%22494px%22%20height%3D%22455px%22%20viewBox%3D%220%200%20494%20455%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E%20%20%20%20%20%20%20%20%3Ctitle%3Elogo%3C%2Ftitle%3E%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%20%20%20%20%3Cdefs%3E%20%20%20%20%20%20%20%20%3Cpath%20id%3D%22path-1%22%20d%3D%22M0%2C1173.3333%20L1999.99995%2C1173.3333%20L1999.99995%2C0%20L0%2C0%20L0%2C1173.3333%20L0%2C1173.3333%20Z%22%3E%3C%2Fpath%3E%20%20%20%20%3C%2Fdefs%3E%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%20sketch%3Atype%3D%22MSPage%22%3E%20%20%20%20%20%20%20%20%3Cg%20id%3D%22gitlab_logo%22%20sketch%3Atype%3D%22MSLayerGroup%22%20transform%3D%22translate%28-359.000000%2C%20-360.000000%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g10%22%20transform%3D%22translate%28999.999975%2C%20587.666648%29%20scale%281%2C%20-1%29%20translate%28-999.999975%2C%20-587.666648%29%20translate%280.000000%2C%200.999996%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g16%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18-Clipped%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cmask%20id%3D%22mask-2%22%20sketch%3Aname%3D%22path22%22%20fill%3D%22white%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23path-1%22%3E%3C%2Fuse%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fmask%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path22%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18%22%20mask%3D%22url%28%23mask-2%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20transform%3D%22translate%28358.666658%2C%20358.666658%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g44%22%20transform%3D%22translate%280.532000%2C%200.774933%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M491.999988%2C194.666662%20L464.441322%2C279.481326%20L409.82399%2C447.578655%20C407.014656%2C456.226655%20394.778657%2C456.226655%20391.96799%2C447.578655%20L337.349325%2C279.481326%20L155.982663%2C279.481326%20L101.362664%2C447.578655%20C98.5533309%2C456.226655%2086.3173312%2C456.226655%2083.5066646%2C447.578655%20L28.8893326%2C279.481326%20L1.33199997%2C194.666662%20C-1.18266664%2C186.930662%201.57199996%2C178.455996%208.1519998%2C173.674662%20L246.665327%2C0.385333324%20L485.179988%2C173.674662%20C491.759988%2C178.455996%20494.513321%2C186.930662%20491.999988%2C194.666662%22%20id%3D%22path46%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g48%22%20transform%3D%22translate%28155.197863%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M91.9999977%2C0%20L91.9999977%2C0%20L182.683995%2C279.095993%20L1.31599997%2C279.095993%20L91.9999977%2C0%20L91.9999977%2C0%20Z%22%20id%3D%22path50%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g52%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path54%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g56%22%20transform%3D%22translate%2828.531199%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C0%20L127.982663%2C279.09466%20L0.890666644%2C279.09466%20L218.666661%2C0%20L218.666661%2C0%20Z%22%20id%3D%22path58%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g60%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path62%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g64%22%20transform%3D%22translate%280.088533%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M29.3333326%2C279.999993%20L29.3333326%2C279.999993%20L1.77466662%2C195.185328%20C-0.738666648%2C187.449329%202.01466662%2C178.974662%208.59599979%2C174.194662%20L247.109327%2C0.905333311%20L29.3333326%2C279.999993%20L29.3333326%2C279.999993%20Z%22%20id%3D%22path66%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g68%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path70%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g72%22%20transform%3D%22translate%2829.421866%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L127.091997%2C0%20L72.4733315%2C168.097329%20C69.6626649%2C176.746662%2057.4266652%2C176.746662%2054.617332%2C168.097329%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path74%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g76%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L90.6839977%2C279.09466%20L217.775995%2C279.09466%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path78%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g80%22%20transform%3D%22translate%28246.307061%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C279.999993%20L218.666661%2C279.999993%20L246.225327%2C195.185328%20C248.73866%2C187.449329%20245.985327%2C178.974662%20239.403994%2C174.194662%20L0.890666644%2C0.905333311%20L218.666661%2C279.999993%20L218.666661%2C279.999993%20Z%22%20id%3D%22path82%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g84%22%20transform%3D%22translate%28336.973725%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M127.999997%2C0%20L0.907999977%2C0%20L55.5266653%2C168.097329%20C58.3373319%2C176.746662%2070.5733316%2C176.746662%2073.3826648%2C168.097329%20L127.999997%2C0%20L127.999997%2C0%20Z%22%20id%3D%22path86%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.BITBUCKET_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2065%2063.27%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E.cls-2%7Bfill%3Anone%3B%7D.cls-3%7Bfill%3A%232684ff%3B%7D.cls-4%7Bfill%3Aurl%28%23New_Gradient_Swatch_1%29%3B%7D%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22New_Gradient_Swatch_1%22%20x1%3D%2264.01%22%20y1%3D%2230.27%22%20x2%3D%2232.99%22%20y2%3D%2254.48%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.18%22%20stop-color%3D%22%230052cc%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232684ff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Ctitle%3EBitbucket-blue%3C%2Ftitle%3E%20%20%3Cg%20id%3D%22Layer_2%22%20data-name%3D%22Layer%202%22%3E%20%20%20%20%3Cg%20id%3D%22Blue%22%3E%20%20%20%20%20%20%3Cpolygon%20class%3D%22cls-2%22%20points%3D%2224.7%2043.51%2037.75%2043.51%2040.9%2025.12%2021.23%2025.12%2024.7%2043.51%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-3%22%20d%3D%22M2%2C6.26A2%2C2%2C0%2C0%2C0%2C0%2C8.58L8.49%2C60.12a2.72%2C2.72%2C0%2C0%2C0%2C2.66%2C2.27H51.88a2%2C2%2C0%2C0%2C0%2C2-1.68L62.37%2C8.59a2%2C2%2C0%2C0%2C0-2-2.32ZM37.75%2C43.51h-13L21.23%2C25.12H40.9Z%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-4%22%20d%3D%22M59.67%2C25.12H40.9L37.75%2C43.51h-13L9.4%2C61.73a2.71%2C2.71%2C0%2C0%2C0%2C1.75.66H51.89a2%2C2%2C0%2C0%2C0%2C2-1.68Z%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.S3_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3EStorage%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2221.54%2023.23%2016.08%2025.96%2016.08%2073.93%2021.54%2076.66%2034.94%2049.94%2021.54%2023.23%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2021.54%2076.65%2021.54%2023.23%2050%2030.12%2063.45%2050.02%2050%2069.76%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2078.45%2076.65%2083.37%2050.62%2078.45%2023.23%2050%2030.12%2050%2069.76%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.45%2023.23%2083.92%2025.96%2083.92%2073.93%2078.45%2076.66%2078.45%2023.23%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2058.78%2050%2060.37%2059.84%2050.02%2050%2039.68%2037.59%2041.24%2037.59%2058.78%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2035.01%2037.59%2032.75%2050%209%2062.41%2032.75%22%20fill%3D%22%235e1f18%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2067.25%2050%2064.97%2037.59%2067.25%2050%2091%2062.41%2067.25%22%20fill%3D%22%23f2b0a9%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2029.68%2050%209%2062.41%2015.2%2062.41%2032.75%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2032.75%2050%2029.68%2050%209%2037.59%2015.2%2037.59%2032.75%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2062.41%2084.8%2062.41%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2037.59%2084.8%2037.59%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2058.78%2050%2060.37%2050%2039.68%2062.41%2041.24%2062.41%2058.78%22%20fill%3D%22%23e05243%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.HELM_CHART,"helm-chart-artifact2320ab55b431ba0a.svg"),im.registerType(fp.IVY_FILE,"ivy-artifact537f2ce5956f4038.svg"),im.registerType(fp.JENKINS_FILE,"jenkins-file-artifactffa863534b26f298.svg"),im.registerType(fp.MAVEN_FILE,"data:image/svg+xml,%3Csvg%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2232mm%22%20width%3D%2232mm%22%20version%3D%221.1%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20viewBox%3D%220%200%20113.38583%20113.38582%22%3E%20%3Cg%20transform%3D%22translate%28-212.06%20-472.38%29%22%3E%20%20%3Cg%20transform%3D%22translate%288.4853%20-1.4142%29%22%3E%20%20%20%3Cpath%20fill%3D%22%23e8a1a2%22%20d%3D%22m240.91%20580.01c-1.4824-4.2852-3.0745-9.2894-3.538-11.12-1.1372-4.4931-1.6472-4.8098-4.1569-2.5813-2.1418%201.9018-2.1462%201.9003-0.97095-0.33946%201.0077-1.9204%200.9278-2.25-0.54562-2.25-1.5731%200-1.5619-0.12023%200.12599-1.3544%201.7365-1.2698%201.6088-1.5199-2.041-4-2.4685-1.6774-3.2594-2.6456-2.1612-2.6456%202.1818%200%202.2506%200.42403-1.1547-7.1117-6.3934-14.148-9.1638-31.223-8.7054-53.655%200.26565-13%200.57841-15.561%202.1071-17.25%202.169-2.3967%202.745-2.4287%207.0398-0.39064%202.1654%201.0275%204.0683%203.0685%205.3612%205.75%202.5118%205.2098%204.2463%2018.35%202.7926%2021.157-0.92374%201.7835-0.85705%201.8525%200.61602%200.63738%202.0383-1.6814%202.7958-0.21965%203.0241%205.835%200.0833%202.209%200.54518%204.0188%201.0264%204.0219%200.48125%200.003%200.605%201.3557%200.275%203.0057s-0.19352%203%200.30328%203c2.6941%200%203.7428%2017.64%201.4808%2024.906-1.6203%205.2051%201.6784%200.7327%205.5919-7.5816%207.4605-15.85%2018.983-31.543%2033.937-46.223%2010.047-9.862%2014.218-12.61%2016.932-11.158%207.3999%203.9603%204.4295%2017.155-6.47%2028.741-2.791%202.9668-4.4785%205.1654-3.75%204.8858%202.3126-0.88743%201.4341%201.8404-1.8925%205.8761-1.7694%202.1466-3.3115%204.5462-3.4269%205.3325s-1.1503%202.0883-2.2997%202.8934c-1.1494%200.80509-1.8715%201.8172-1.6045%202.2491%200.64529%201.0441-4.8466%209.7279-8.8005%2013.915-3.6411%203.8562-9.5531%207.1556-12.862%207.1777-1.6096%200.0108-1.8993%200.26298-0.97519%200.84897%201.5334%200.97236%206.1197%200.31492%207.9595-1.141%200.70079-0.55456%201.5178-0.76462%201.8157-0.46679%200.68106%200.68106-5.8716%205.7435-7.4342%205.7435-0.63559%200-1.1556%200.43588-1.1556%200.96861%200%200.53274%200.74882%200.68127%201.664%200.33007%201.1573-0.44408%201.4322-0.26346%200.90287%200.59306-1.0808%201.7487-5.096%203.1042-9.7336%203.2859-3.501%200.13718-3.9164%200.40636-3.456%202.2391%200.50216%201.9991%200.4667%202.0075-0.87842%200.20849-1.2384-1.6564-1.0516-2.5682%201.604-7.8289%202.721-5.3903%2013.868-24.641%2017.811-30.758%200.8725-1.3537%201.0905-2.1559%200.4845-1.7825-1.7197%201.0594-17.765%2028.347-24.189%2041.136l-2.5006%204.9786%202.7335%208.3935c3.4677%2010.648%202.7166%2011.942-0.88644%201.5269zm-0.10056-17.041c0.42418-1.404%200.25625-2.25-0.44662-2.25-0.61952%200-0.86751%200.41891-0.55108%200.9309%200.31644%200.512%200.16515%201.1844-0.33619%201.4943-0.50134%200.30984-1.1943-0.17347-1.5398-1.074-0.34558-0.90056-0.85533-1.4104-1.1328-1.133-0.27744%200.27744-0.0251%201.7651%200.5607%203.306%201.1274%202.9652%202.2955%202.5332%203.4458-1.2742zm-5.5256-9.9968c-1.0612-3.7108-1.9294-7.1608-1.9294-7.6667%200-0.50592-0.25022-0.66963-0.55604-0.36381-0.52233%200.52233%202.1863%2012.37%203.2048%2014.018%201.2636%202.0446%201.0362%200.15112-0.71935-5.9875zm-4.4557-17.727c-0.93421-4.1991-1.9183-7.415-2.1869-7.1464-0.26861%200.2686%200.31288%203.8871%201.2922%208.0411%200.97931%204.154%201.9634%207.3699%202.1869%207.1464%200.2235-0.22351-0.35799-3.842-1.2922-8.0411zm-3.0737-14.426c-0.36648-2.2918-0.87608-3.9572-1.1324-3.7009-0.25636%200.25637-0.15176%202.3268%200.23245%204.6009s0.89381%203.9395%201.1324%203.7009c0.23863-0.23864%200.13403-2.309-0.23245-4.6009zm45.009-6.1437c3.0475-4.424%205.0948-7.768%204.5497-7.4311-1.1721%200.72439-11.233%2015.475-10.555%2015.475%200.25562%200%202.9582-3.6196%206.0056-8.0437zm-46.726-1.1438c-0.31922-0.79773-0.55618-0.56078-0.60416%200.60417-0.0434%201.0542%200.19292%201.6448%200.52522%201.3125%200.33229-0.3323%200.36781-1.1948%200.0789-1.9167zm-0.99378-9.5625c-0.25153-0.9625-0.45733-0.175-0.45733%201.75s0.2058%202.7125%200.45733%201.75c0.25152-0.9625%200.25152-2.5375%200-3.5zm55.438%200c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-1.6658%201.3064-2.1955%202.1276-1.3724%202.1276%200.20765%200%200.99515-0.7875%201.75-1.75zm-50.173%2080.37c1.8714-4.922%206.1906-12.808%206.7233-12.275%200.64112%200.64113-5.4132%2013.374-6.7529%2014.202-0.54189%200.33491-0.52977-0.45565%200.0295-1.9267z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23f8a52a%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.3539%203.9511-11.385-39.693-14.286-62.157l-1.368-10.593%200.37967%2010c0.51206%2013.487%205.5806%2038.798%2012.514%2062.493%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143%200.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.5314-16.99-11.952-33.628-11.87-57.739%200.0614-18.043%200.65624-20.888%204.4601-21.335%207.1233-0.83622%2011.788%207.2931%2011.99%2020.896%200.0995%206.7048%200.41125%208.5089%201.3385%207.7456%201.6189-1.3328%202.7298%203.0911%201.9629%207.8168-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%206.6604-13.266%2015.19-25.095%2027.19-37.705%2015.39-16.173%2021.504-19.166%2024.479-11.986%201.047%202.5278%201.06%204.0393%200.0665%207.7627-2.0495%207.6813-10.5%2019.159-15.205%2020.653-2.5932%200.82304-1.4824%202.4338%201.1954%201.7336%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-3.4249%200-4.6564%200.34222-4.1544%201.1545%200.43457%200.70315%200.2751%200.88354-0.40791%200.46142-2.661-1.6446%2023.158-44.042%2037.881-62.204%209.6668-11.925%2010.352-13.178%202.9574-5.4121-11.195%2011.758-25.777%2033.509-40.138%2059.871-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23ee8a2e%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4444%204.2152-12.641-45.572-14.224-63.25l-0.67174-7.5%203.9696-3.8462%203.9696-3.8462%201.2942%203.8462c0.71181%202.1154%201.3235%207.2934%201.3593%2011.507%200.0499%205.8679%200.34798%207.4268%201.2739%206.6618%201.6189-1.3376%202.7301%203.0854%201.9629%207.8133-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%203.1212-6.217%208.5466-15.168%2012.056-19.89%206.4511-8.6802%2022.123-25.914%2023.566-25.914%200.4305%200%201.0767%201.1712%201.4359%202.6026%200.51967%202.0705-0.0742%203.4504-2.9048%206.75-10.644%2012.407-25.113%2034.515-37.644%2057.518-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.9594-17.843-12.488-36.385-11.898-62.524l0.10773-4.7731%202.3532%201.5419c2.083%201.3648%202.42%202.5444%202.9354%2010.273%200.87913%2013.184%206.336%2039.513%2012.689%2061.225%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.8279-1.8279%2024.6-44.87%2037.239-60.65l6.2075-7.75h5.9103c7.0286%200%207.2251%200.58116%202.5402%207.5134-4.0552%206.0005-8.1478%2010.199-10.746%2011.023-2.5763%200.81769-1.4423%202.422%201.2199%201.7258%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23a0579b%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4255%204.1602-13.738-50.443-13.738-60.925%200-3.9763%200.2069-4.3251%202.5657-4.3251%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%205.815-11.583%2014.544-24.164%2023.356-33.663%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9171%2010.904c-9.8621%2013.583-20.076%2029.991-29.524%2047.428-5.6996%2010.52-7.063%2013.813-6.3051%2015.229%200.53191%200.99388%200.93859%202.3991%200.90372%203.1228-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-7.5974-15.13-11.778-32.994-11.786-50.362-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.4438%2013.019%207.1395%2039.22%2012.532%2057.649%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.6524-1.6524%2024.342-44.54%2035.278-58.204%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d9555d%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.53192-2.7675-1.9493-5.3828-5.633-10.394-9.7349-29.495-9.7423-45.366-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.3157%2011.864%207.161%2039.457%2012.161%2057.406%200.38001%201.3642%200.18716%202.25-0.48987%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.085-1.4621c-1.1463-0.75519-0.12074-3.2717%205.4085-13.271%207.5732-13.696%2020.99-34.488%2027.517-42.643%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.7488%209.343-14.425%2016.094-20.764%2016.156-1.2375%200.0121-2.25%200.52921-2.25%201.1492%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.5006%201.4641-8.4104%202.1624-9.9146%201.1714zm-10.35-2.8605c-0.27024-1.5125-1.9027-7.925-3.6276-14.25-3.8171-13.997-8.108-36.524-8.108-42.567%200-4.0926%200.19724-4.4334%202.5657-4.4334%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.6176%207.6223%200.76802%2014.931-2.3929%2020.587-1.3565%202.4271-2.0831%204.4129-1.6147%204.4129%201.1318%200%208.0075-8.072%208.0075-9.4007%200-0.57236%202.0354-5.1039%204.5232-10.07%204.7721-9.5263%2013.911-22.441%2022.211-31.388%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9327%2010.926c-7.9323%2010.925-20.408%2030.492-27.181%2042.63-1.9776%203.5442-4.045%206.3369-4.5942%206.206-0.54923-0.13091-0.74165%200.43159-0.4276%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.4798%200-3.0778-0.47187-3.4848-2.75zm8.3919-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23e56636%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.2127-2.1932-1.903-2.5029c0.30969-0.30968-0.82795-3.4069-2.5281-6.8828-5.2654-10.765-9.0932-30.085-9.1-45.931-0.003-6.4246%200.0644-6.5985%202.3772-6.1564%202.1594%200.4128%202.4441%201.1183%203.0718%207.6113%201.2154%2012.574%205.1314%2030.731%2012.165%2056.406%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.104-1.4505c-1.1331-0.7471-0.60134-2.3678%202.8256-8.6118%2010.132-18.462%2019.444-33.053%2029.884-46.83%204.3859-5.7876%204.4216-5.8091%206.5482-3.9544%201.176%201.0257%203.3498%202.469%204.8307%203.2075%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.155%203.1099-4.9424%204.0892-3.581%201.9619-4.4062%203.8275-1.25%202.8258%202.4434-0.77549%202.495-0.14656%200.29394%203.5796-0.93834%201.5885-3.3008%203.6544-5.25%204.591-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4882%201.4568-8.4073%202.1645-9.8958%201.183zm-10.397-2.8721c-0.28577-1.5125-2.0781-8.8284-3.9828-16.257-3.797-14.809-7.7246-35.885-7.7246-41.451%200-3.1933%200.27052-3.5432%202.75-3.557%201.5125-0.008%203.4131-0.43467%204.2236-0.94722%203.1162-1.9707%204.1457%204.8974%201.5007%2010.012-1.7991%203.479-1.3116%203.7654%201.4196%200.83387l1.9718-2.1165%200.7143%203.8075c0.41102%202.191%200.25033%205.0367-0.37849%206.7026-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%203.177-8.9807%2016.825-29.501%2026.607-40.005%204.0422-4.3404%204.3511-4.4839%206.8431-3.1782l2.6098%201.3674-5.7565%207.4853c-5.5704%207.2434-16.25%2022.982-18.921%2027.883-0.71861%201.3188-2.8308%204.9188-4.6938%208s-4.7645%208.0772-6.4478%2011.102c-1.6833%203.025-3.51%205.3929-4.0594%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.473%200-3.0838-0.47816-3.5131-2.75zm8.4202-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23953a8a%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.52619-2.7675-1.9366-5.3828-4.3364-8.041-6.7059-17.289-9.1878-35.861-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0403%203.5253%206.5198%2031.436%2011.619%2050.051%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.16-1.4157c-1.0904-0.72083-0.96415-1.6213%200.67868-4.8416%203.6946-7.2419%2015.279-26.709%2020.784-34.927l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4503%201.4347-8.398%202.1708-9.8395%201.2178zm-10.808-4.4068c-3.9503-15.231-8.4522-35.009-8.9341-39.25-0.55928-4.9215-0.50815-5.0392%203.2567-7.4996%202.1037-1.3748%204.347-3.1691%204.9851-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%202.7833-7.8678%2019.916-34.345%2022.223-34.345%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.14937-1.9826%203.55-4.4059%207.557-2.4232%204.007-5.7825%209.7605-7.4651%2012.785-1.6826%203.025-3.5088%205.3929-4.0581%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42404%201.105-0.17012%201.488-2.3086%201.488-2.5482%200-3.0065-0.48911-3.9819-4.25zm8.7751-5.5c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23b93368%22%20d%3D%22m229.62%20550.73c-4.5614-2.7739-7.6998-13.229-10.692-35.62-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0207%201.8074%204.784%2024.184%206.6332%2031.161%201.3645%205.1484%202.3225%209.5192%202.1287%209.713-0.19376%200.19375-1.7671-0.50814-3.4964-1.5598zm3.3618-8.7222c-3.6221-15.214-5.6262-25.062-5.6183-27.607%200.004-1.4075%201.3383-3.0738%203.75-4.6842%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%202.2862-1.8974%204.3241%2011.23%202.7275%2017.571-1.3475%205.3514-3.3184%209.43-5.3861%2011.146-1.2562%201.0426-1.8405-0.3426-4.038-9.5728zm18.076%2010.076c-0.64872-0.64871%2010.414-19.771%2017.923-30.98l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-4.225%204.198-16.251%209.0958-18.011%207.3356zm-3.7203-5.4144c-1.6525-3.9895-0.58695-7.2754%206.0354-18.612%205.1782-8.8643%2014.889-22.341%2016.097-22.341%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.41204-9.2079%2015.725-10.011%2016.648-0.38541%200.4431-1.2894-0.61555-2.0089-2.3526z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d0334d%22%20d%3D%22m268.92%20543.41c0.39936-1.0407%200.16314-1.6939-0.61257-1.6939-0.69443%200-2.7035-1.099-4.4647-2.4423-2.5028-1.909-3.4785-2.182-4.4679-1.25-1.964%201.8499%203.5846-7.9204%209.6087-16.92l5.4301-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%202.1429-0.82232%201.8896%200.0794-1.5114%205.3794-3.4044%205.3054-7.5528%209.6161-6.4246%206.6761zm-46.308-7.299c-1.065-3.6153-2.3791-11.094-3.6902-21.001-0.53331-4.0299-0.48805-4.104%202.4446-4%202.6018%200.0922%203.0678%200.55823%203.6051%203.6059%200.33938%201.925%201.4647%207.712%202.5008%2012.86%201.036%205.148%201.8837%209.5355%201.8837%209.75%200%200.21446-1.0875%200.38992-2.4167%200.38992s-2.5884%200.5152-2.7983%201.1449c-0.20989%200.62969-0.89795-0.60781-1.529-2.75zm6.8793-9.4428c-2.8681-13.469-2.8186-13.987%201.6215-16.952%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60089%203.203-0.4943%203.5356%200.79119%202.4688%201.2587-1.0446%201.5813-0.65346%202.1116%202.5604%201.4575%208.8336%201.4278%209.864-0.28538%209.8878-0.90753%200.0126-3.5016%200.32963-5.7647%200.70445l-4.1146%200.68151-2.1354-10.028zm25.578%206.8509c-0.98257-1.0318-2.2201-1.608-2.75-1.2804-0.52994%200.32752-0.96237%200.23144-0.96096-0.21352%200.008-2.4071%2016.461-26.309%2018.111-26.309%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.751-6.898%2011.128%200%202.0224-2.63%202.4718-4.2865%200.73246z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.HTTP_FILE,"data:image/svg+xml,%3Csvg%20id%3D%22svg2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%22145mm%22%20width%3D%22145mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20513.77953%20513.77951%22%3E%20%3Cg%20id%3D%22layer1%22%20transform%3D%22translate%28-87.403%20-17.44%29%22%3E%20%20%3Cg%20id%3D%22text3336%22%3E%20%20%20%3Cpath%20id%3D%22path3372%22%20d%3D%22m145.34%20318.08v-51.12q0-10.98-3.06-15.84t-11.16-4.86q-5.94%200-10.98%204.14-4.86%203.96-6.48%2010.26v57.42h-23.4v-126h23.4v46.08h0.72q4.32-5.76%2010.62-9.18t16.02-3.42q6.84%200%2012.06%201.8t8.64%205.94q3.6%204.14%205.22%2011.34%201.8%207.02%201.8%2017.46v55.98h-23.4z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3374%22%20d%3D%22m178.99%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3376%22%20d%3D%22m240.51%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3378%22%20d%3D%22m312.8%20228.08h17.1l2.7%2010.8h0.72q4.68-6.84%2010.98-10.08%206.48-3.24%2015.66-3.24%2016.92%200%2025.38%2010.8%208.46%2010.62%208.46%2034.38%200%2011.52-2.7%2020.88-2.7%209.18-8.1%2015.66-5.22%206.48-12.96%209.9-7.56%203.42-17.46%203.42-5.58%200-9.18-0.9-3.6-0.72-7.2-2.52v36.9h-23.4v-126zm40.14%2017.28q-6.84%200-10.8%203.42-3.78%203.42-5.94%2010.26v37.44q2.52%201.98%205.4%203.24%203.06%201.08%207.92%201.08%2010.08%200%2015.12-7.02%205.04-7.2%205.04-23.58%200-11.88-3.96-18.36t-12.78-6.48z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3380%22%20d%3D%22m416.66%20241.04q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08zm0%2065.16q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3382%22%20d%3D%22m508.38%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3384%22%20d%3D%22m581.85%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Ctext%20id%3D%22text3340%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20y%3D%2292.362206%22%20x%3D%22-511.42856%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3Ctspan%20id%3D%22tspan3342%22%20x%3D%22-511.42856%22%20y%3D%2292.362206%22%2F%3E%3C%2Ftext%3E%20%20%3CflowRoot%20id%3D%22flowRoot3344%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3CflowRegion%20id%3D%22flowRegion3346%22%3E%3Crect%20id%3D%22rect3348%22%20height%3D%2257.143%22%20width%3D%22225.71%22%20y%3D%22489.51%22%20x%3D%2274.286%22%2F%3E%3C%2FflowRegion%3E%3CflowPara%20id%3D%22flowPara3350%22%2F%3E%3C%2FflowRoot%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.ORACLE_OBJECT,"data:image/svg+xml,%3Csvg%20width%3D%2236%22%20height%3D%2236%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%200h36v36H0V0z%22%20fill%3D%22%23C74634%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.541%2022.139c2.277%200%204.126-1.855%204.126-4.143a4.134%204.134%200%2000-4.126-4.139H14.46a4.134%204.134%200%2000-4.128%204.139%204.135%204.135%200%20004.128%204.143h7.082zm-7.245%202.257c-3.52%200-6.376-2.865-6.376-6.4%200-3.534%202.855-6.393%206.376-6.393h7.408c3.52%200%206.373%202.86%206.373%206.393%200%203.54-2.853%206.403-6.373%206.403l-7.409-.003z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E");class rm{static removeReferenceFromStages(e,t){(t||[]).forEach((t=>{const n=Om.pipeline.getStageConfig(t);m(n,["artifactRemover"],pe)(t,e)}))}static removeReferencesFromStages(e,t){e.forEach((e=>rm.removeReferenceFromStages(e,t)))}static removeArtifactFromField(e,t,n){const a=m(t,e);Array.isArray(a)?g(t,e,a.filter((e=>e!==n))):a===n&&g(t,e,null)}static removeArtifactFromFields(e){return(t,n)=>e.forEach((e=>this.removeArtifactFromField(e,t,n)))}}const sm=e=>e.artifacts.map(((e,t)=>{const{location:n,reference:a,type:i}=e;let{name:r}=e;const s=im.getPath(i),o=`${n||""}${i||""}${a||""}`||String(t);let l=i;if(w(i)&&i.length>0){const e=i.match(fp.KUBERNETES);if(null!=e&&e[1].length>0){r=`${e[1].substr(0,1).toUpperCase()+e[1].substr(1)} ${r}`,l=r}}return ot.createElement("div",{key:o,className:"artifact-list-item",title:l},s&&ot.createElement("img",{className:"artifact-list-item-icon",width:"20",height:"20",src:s}),ot.createElement("span",{className:"artifact-list-item-name"},r,e.version&&ot.createElement("span",null," - ",e.version)))}));oi(".execution-artifacts {\n background: var(--color-alabaster);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-right: 0;\n padding: 6px;\n}\n.artifact-list-container {\n background: var(--color-white);\n padding: 8px 6px 6px;\n}\n.artifact-list-container > h5 {\n margin-top: 0;\n}\n.artifact-list-item {\n height: 28px;\n position: relative;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-bottom: 0.1em;\n}\n.artifact-list-item-icon {\n position: absolute;\n top: 4px;\n}\n.artifact-list-item-name {\n padding-left: 24px;\n}\n");class om extends ot.Component{extractBoundArtifactsFromExecution(e){const t=m(e,["trigger","resolvedExpectedArtifacts"],[]),n=m(e,"stages",[]).reduce(((e,t)=>{const n=m(t,["outputs","resolvedExpectedArtifacts"],[]);return e.concat(n)}),[]);return t.concat(n).filter((e=>H(e,"boundArtifact")))}artifactLists(){const{stage:e,execution:t}=this.props,n=Om.pipeline.getStageConfig(e),a=m(e,["context"],{}),i=new Set(n&&n.artifactExtractor?n.artifactExtractor(a):[]);return{consumedArtifacts:this.extractBoundArtifactsFromExecution(t).filter((e=>i.has(e.id))).map((e=>e.boundArtifact)).filter((({name:e,type:t})=>e&&t)),producedArtifacts:m(e,["outputs","artifacts"],[]).slice()}}render(){const{consumedArtifacts:e,producedArtifacts:t}=this.artifactLists();return ot.createElement(Ep,{name:this.props.name,current:this.props.current},ot.createElement("div",{className:"row execution-artifacts"},ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Consumed Artifacts"),ot.createElement("div",null,ot.createElement(sm,{artifacts:e}))),ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Produced Artifacts"),ot.createElement("div",null,ot.createElement(sm,{artifacts:t})))))}}om.title="artifactStatus";const lm="spinnaker.core.artifact.artifactTab.component";n(lm,[]).component("executionArtifactTab",yn(Gl(om,"executionArtifactTab"),["config","stage","execution"]));class cm{static getExpectedArtifactsAvailableToStage(e,t){if(!e||!t)return[];let n=t.expectedArtifacts||[];return nd.getAllUpstreamDependencies(t,e).forEach((e=>{const t=e.expectedArtifact;t&&(n=n.concat(t));const a=e.expectedArtifacts;a&&(n=n.concat(a))})),n}static accumulateArtifacts(e){return t=>e.map((e=>m(t,e))).filter((e=>e)).reduce(((e,t)=>e.concat(t)),[])}static createEmptyArtifact(){return{id:pr.generateUuid(),usePriorArtifact:!1,useDefaultArtifact:!1,matchArtifact:{id:pr.generateUuid(),customKind:!0},defaultArtifact:{id:pr.generateUuid(),customKind:!0},displayName:pa.random()}}static addArtifactTo(e,t){return null==t.expectedArtifacts&&(t.expectedArtifacts=[]),t.expectedArtifacts.push(e),e}static addNewArtifactTo(e){return cm.addArtifactTo(cm.createEmptyArtifact(),e)}static artifactFromExpected(e){return e&&e.matchArtifact?e.matchArtifact:null}static sourcesForPipelineStage(e,t){const n=[{get source(){return e()},label:"Pipeline Trigger"}];return nd.getAllUpstreamDependencies(e(),t).filter((e=>Om.pipeline.getStageConfig(e).producesArtifacts)).map((e=>({source:e,label:"Stage ("+e.name+")"}))).forEach((e=>n.push(e))),n}static getKindConfig(e,t){if(null==e||e.customKind||"custom"===e.kind)return Om.pipeline.getCustomArtifactKind();const n=(t?Om.pipeline.getDefaultArtifactKinds():Om.pipeline.getMatchArtifactKinds()).find((t=>t.type===e.type));return void 0!==n?n:Om.pipeline.getCustomArtifactKind()}}const pm={bindings:{command:"=",imageSources:"<",helpFieldKey:"@",idField:"@",imageSourceText:"<"},controllerAs:"ctrl",template:'\n <div class="form-group" ng-if="ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n </div>\n <div class="col-md-7" style="margin-top: 5px;">\n <span ng-bind-html="ctrl.imageSourceText"></span>\n </div>\n </div>\n <div class="form-group" ng-if="!ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n <help-field key="{{ ctrl.helpFieldKey }}"></help-field>\n </div>\n <div class="col-md-7">\n <div class="radio" ng-repeat="imageSource in ctrl.imageSources">\n <label>\n <input type="radio" ng-model="ctrl.command[ctrl.idField]" value="{{ imageSource }}">\n {{ imageSource | robotToHuman }}\n </label>\n </div>\n </div>\n </div>\n '},dm="spinnaker.core.artifacts.expected.image.selector";n(dm,[]).component("imageSourceSelector",pm);class um{constructor(e){this.delegate=e,this.accountsForArtifact=[],this.updateAccounts=e=>{if(null==e)this.accountsForArtifact=[];else{const t=cm.artifactFromExpected(e),n=this.delegate.getExpectedArtifactAccounts();this.accountsForArtifact="helm/chart"===t.type?n.filter((e=>e.types.includes(t.type)&&e.name===t.artifactAccount)):n.filter((e=>e.types.includes(t.type)));const a=this.delegate.getSelectedAccount();a&&this.accountsForArtifact.find((e=>e.name===a.name))||(this.accountsForArtifact.length?this.delegate.setSelectedArtifactAccount(this.accountsForArtifact[0]):this.delegate.setSelectedArtifactAccount(null))}},this.onArtifactChange=e=>{this.delegate.setSelectedExpectedArtifact(e),this.updateAccounts(e)},this.onArtifactCreated=e=>{cm.addArtifactTo(e.expectedArtifact,e.source.source),this.delegate.refreshExpectedArtifacts(),this.updateAccounts(e.expectedArtifact),this.delegate.setSelectedExpectedArtifact(e.expectedArtifact),this.delegate.setSelectedArtifactAccount(e.account)},this.onRequestCreate=()=>{this.delegate.createArtifact()},this.onAccountChange=e=>{this.delegate.setSelectedArtifactAccount(e)}}}um.$inject=["delegate"];class mm{constructor(e){this.$scope=e,this.sources=[],this.kinds=[],this.accounts=[],this.setAccounts=e=>{this.accounts=[...e]}}getExpectedArtifactSources(){return this.sources}getSupportedArtifactKinds(){return this.kinds}getExpectedArtifactAccounts(){return this.accounts}scopeApply(){this.$scope.$evalAsync()}}const gm=[fp.KUBERNETES,fp.DOCKER_IMAGE];class hm extends mm{constructor(e,t,n=gm){super(e),this.$scope=e,this.tag=t,this.excludedArtifactTypes=n,this.getExcludedArtifactTypes=()=>this.excludedArtifactTypes,this.getExpectedArtifacts=()=>cm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline),this.getSelectedExpectedArtifact=()=>{const e=this.$scope.stage[`${this.tag}ArtifactId`];return null==e?null:this.getExpectedArtifacts().find((t=>t.id===e))},this.getSelectedAccount=()=>{const e=this.$scope.stage[`${this.tag}ArtifactAccount`];return null==e?null:this.getExpectedArtifactAccounts().find((t=>t.name===e))},this.setSelectedExpectedArtifact=e=>{this.$scope.showCreateArtifactForm=!1,this.$scope.stage[`${this.tag}ArtifactId`]=e.id,this.scopeApply()},this.sources=cm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=Om.pipeline.getMatchArtifactKinds().filter((e=>!this.getExcludedArtifactTypes().find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}setSelectedArtifactAccount(e){this.$scope.stage[`${this.tag}ArtifactAccount`]=e?e.name:"",this.scopeApply()}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.expectedArtifacts=this.getExpectedArtifacts()}}const fm=[fp.GCE_MACHINE_IMAGE];class vm extends mm{constructor(e){super(e),this.$scope=e,this.kinds=[Om.pipeline.getCustomArtifactKind()];const{viewState:t}=e.command;this.sources=cm.sourcesForPipelineStage((()=>t.pipeline),t.stage),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return cm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.imageArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return fm}setSelectedExpectedArtifact(e){this.$scope.command.imageArtifactId=e.id,this.$scope.gceImageArtifact.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.gceImageArtifact.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.viewState.expectedArtifacts=this.getExpectedArtifacts()}}class Am extends mm{constructor(e,t=null){super(e),this.$scope=e,this.offeredArtifactTypes=t;const{viewState:n}=e.command;this.sources=cm.sourcesForPipelineStage((()=>n.pipeline),n.stage),this.kinds=Om.pipeline.getMatchArtifactKinds().filter((e=>e.customKind||t.find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return cm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.expectedArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return this.offeredArtifactTypes}setSelectedExpectedArtifact(e){this.$scope.command.expectedArtifactId=e.id,this.$scope.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.backingData.expectedArtifacts=this.getExpectedArtifacts()}}class Em extends mm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=cm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=Om.pipeline.getMatchArtifactKinds()}getExpectedArtifacts(){return cm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline)}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}class bm extends mm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=cm.sourcesForPipelineStage((()=>this.getPipeline()),this.getStage()),this.kinds=Om.pipeline.getMatchArtifactKinds()}getStage(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.stage}getPipeline(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.pipeline}getExpectedArtifacts(){return cm.getExpectedArtifactsAvailableToStage(this.getStage(),this.getPipeline())}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}const ym=e=>{let t;return e.type?t=e.type:e.artifact?t=e.artifact.type:e.kind?t=e.kind.type:e.expectedArtifact&&(t=cm.artifactFromExpected(e.expectedArtifact).type),ot.createElement("img",{style:{verticalAlign:"text-top",marginRight:"4px"},src:im.getPath(t),width:e.width,height:e.height})};class wm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,ot.createElement(ym,{type:e.types[0],width:"16",height:"16"}),e.name)}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.props.accounts,value:this.props.selected,onChange:this.props.onChange,optionRenderer:this.renderOption,valueRenderer:this.renderOption,clearable:!1,valueKey:"name"})}}const xm="spinnaker.core.artifacts.account.selector.react";n(xm,[]).component("artifactAccountSelectorReact",yn(Gl(wm,"artifactAccountSelectorReact"),["accounts","className","onChange","selected"]));class Cm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,this.props.showIcons&&ot.createElement(ym,{type:e.type,width:"16",height:"16"}),e.label," - ",e.description),this.onChange=e=>{const t=this.props.kinds.find((t=>t.key===e.value));this.setState({selected:e}),this.props.onChange(t)},this.optionFromKindConfig=e=>e?{label:e.label,description:e.description,type:e.type,value:e.key}:null,this.state={selected:this.optionFromKindConfig(e.selected)}}render(){const e=this.props.kinds.map(this.optionFromKindConfig),t=this.state.selected;return ot.createElement(Ti,{className:this.props.className||"",options:e,value:t,optionRenderer:this.renderOption,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Cm.defaultProps={showIcons:!0};n("spinnaker.core.artifacts.expected.kind.selector.react",[]).component("expectedArtifactKindSelectorReact",yn(Gl(Cm,"expectedArtifactKindSelectorReact"),["kinds","selected","onChange","showIcons","className"]));class km extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,e.label),this.onChange=e=>{const t=this.props.sources.find((t=>t.source===e.source));this.props.onChange(t)},this.state={options:e.sources.map((e=>e.value?e:{...e,value:pr.generateUuid()}))}}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.state.options,optionRenderer:this.renderOption,value:this.props.selected,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}const Bm="spinnaker.core.artifacts.expected.source.selector.react";n(Bm,[]).component("expectedArtifactSourceSelectorReact",yn(Gl(km,"expectedArtifactSourceSelectorReact"),["sources","className","onChange","selected"]));class Sm extends ot.Component{constructor(){super(...arguments),this.renderOption=e=>e.expectedArtifact||e.requestingNew?e.requestingNew?ot.createElement("span",null,"Create new..."):ot.createElement("span",null,this.props.showIcons&&ot.createElement(ym,{expectedArtifact:e.expectedArtifact,width:"16",height:"16"}),e.expectedArtifact.displayName):ot.createElement("span",null),this.onChange=e=>{e.requestingNew?this.props.onRequestCreate():this.props.onChange(e.expectedArtifact)}}filterExpectedArtifacts(e){return(this.props.expectedArtifacts||[]).filter((t=>{const n=cm.artifactFromExpected(t);return!!n&&e(t,n)}))}getExpectedArtifacts(){return this.filterExpectedArtifacts(((e,t)=>{const{offeredArtifactTypes:n,excludedArtifactTypes:a}=this.props;let i=!0,r=!1;return n&&n.length>0&&(i=!!n.find((e=>e.test(t.type)))),a&&a.length>0&&(r=!!a.find((e=>e.test(t.type)))),i&&!r}))}render(){const e=this.getExpectedArtifacts().map((e=>({value:e.id,expectedArtifact:e,requestingNew:!1})));this.props.onRequestCreate&&e.push({value:"",expectedArtifact:null,requestingNew:!0});const t={value:this.props.selected?this.props.selected.id:"",expectedArtifact:this.props.selected,requestingNew:this.props.requestingNew};return ot.createElement(Ti,{className:this.props.className||"",options:e,optionRenderer:this.renderOption,value:t,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Sm.defaultProps={requestingNew:!1,showIcons:!0};const Mm="spinnaker.core.artifacts.expected.selector.react";n(Mm,["spinnaker.core.artifacts.expected.kind.selector.react",Bm,xm]).component("expectedArtifactSelectorReact",yn(Gl(Sm,"expectedArtifactSelectorReact"),["expectedArtifacts","selected","requestingNew","onRequestCreate","onChange","showIcons","className","offeredArtifactTypes","excludedArtifactTypes"]));class Nm extends ot.Component{constructor(e){super(e),this.onSave=()=>{this.props.onSave({expectedArtifact:this.state.expectedArtifact,source:this.state.source,account:this.state.account})},this.onSourceChange=e=>{this.setState({source:e})},this.onKindChange=e=>{const t=p(this.state.expectedArtifact);t.matchArtifact.type=e.type,delete t.matchArtifact.kind,t.matchArtifact.customKind=e.customKind;const n=this.accountsForExpectedArtifact(t);this.setState({expectedArtifact:t,account:n[0]})},this.onAccountChange=e=>{const{expectedArtifact:t}=this.state;this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:e.name,id:t.matchArtifact.id,reference:t.matchArtifact.name,type:t.matchArtifact.type}),this.setState({account:e})},this.onArtifactEdit=e=>{const t={...this.state.expectedArtifact,matchArtifact:{...e}};let n=this.state.account;if(this.state.expectedArtifact.matchArtifact.type!==e.type){n=this.accountsForExpectedArtifact(t)[0]}this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:n?n.name:"",id:e.id,reference:e.name,type:e.type}),this.setState({expectedArtifact:t,account:n})},this.availableKinds=()=>{const e=this.props.kinds||[],t=this.props.accounts||[];return this.props.showAccounts?e.filter((e=>e.customKind||t.find((t=>t.types.includes(e.type))))):e.slice(0)},this.onArtifactDisplayNameEdit=e=>{const t=e.target.value,{expectedArtifact:n}=this.state,a={...n,displayName:t};this.setState({expectedArtifact:a})};const t=e.default?p(e.default):cm.createEmptyArtifact();this.state={expectedArtifact:t,source:e.sources[0],account:this.accountsForExpectedArtifact(t)[0]}}accountsForExpectedArtifact(e){const t=cm.artifactFromExpected(e);return t&&this.props.accounts?this.props.accounts.filter((e=>e.types.includes(t.type))):[]}render(){const{sources:e,showIcons:t,showAccounts:n,hidePipelineFields:a}=this.props,{expectedArtifact:i,source:r,account:s}=this.state,o=this.accountsForExpectedArtifact(i),l=cm.artifactFromExpected(i),c=this.availableKinds().sort(((e,t)=>e.label.localeCompare(t.label))),p=cm.getKindConfig(l,!1),d=p&&p.editCmp;return ot.createElement(ot.Fragment,null,!a&&ot.createElement(Up,{label:"Display Name"},ot.createElement("input",{className:"form-control",value:i.displayName,onChange:this.onArtifactDisplayNameEdit})),e.length>1&&ot.createElement(Up,{label:"Artifact Source"},ot.createElement(km,{sources:e,selected:r,onChange:this.onSourceChange})),ot.createElement(Up,{label:"Artifact Kind"},ot.createElement(Cm,{kinds:c,selected:p,onChange:this.onKindChange,showIcons:t})),n&&ot.createElement(Up,{label:"Artifact Account"},ot.createElement(wm,{accounts:o,selected:s,onChange:this.onAccountChange})),d&&ot.createElement(d,{account:s,artifact:l,onChange:this.onArtifactEdit,pipeline:this.props.pipeline}),!a&&ot.createElement(Up,{label:""},ot.createElement("button",{onClick:this.onSave,type:"button",className:"btn btn-block btn-primary btn-sm"},"Confirm")))}}Nm.defaultProps={showIcons:!0,showAccounts:!0,fieldColumns:8,singleColumn:!1};const Dm="spinnaker.core.artifacts.expected.editor.react";n(Dm,["spinnaker.core.artifacts.expected.kind.selector.react",Bm]).component("expectedArtifactEditorReact",yn(Gl(Nm,"expectedArtifactEditorReact"),["default","kinds","sources","accounts","onSave","showIcons","showAccounts","className","pipeline"]));class Im extends ot.Component{constructor(){super(...arguments),this.onArtifactAccountChanged=e=>{const t=!this.props.artifact||this.props.artifact.type&&!e.types.includes(this.props.artifact.type)&&"custom-artifact"!==e.name?{id:pr.generateUuid()}:p(this.props.artifact);t.artifactAccount=e.name,t.type&&"custom-artifact"===e.name||(t.type=e.types&&e.types.length>0?e.types[0]:""),this.props.onArtifactEdit(t)}}defaultArtifactAccountIfNecessary(){const{artifact:e,artifactAccounts:t}=this.props;!e.artifactAccount&&t.length>0&&this.onArtifactAccountChanged(de(t.filter((t=>t.types.includes(e.type))))||de(t.filter((e=>e.types.includes(mu))))||de(t))}componentDidMount(){this.defaultArtifactAccountIfNecessary()}componentDidUpdate(){this.defaultArtifactAccountIfNecessary()}render(){const{pipeline:e,artifact:t,artifactAccounts:n,onArtifactEdit:a,isDefault:i}=this.props,r=n.find((e=>e.name===t.artifactAccount))||n[0],s=r?r.types:void 0,o=i?Om.pipeline.getDefaultArtifactKinds():Om.pipeline.getMatchArtifactKinds(),l=s?o.find((e=>s.some((t=>e.typePattern.test(t))))):void 0,c=l&&l.editCmp;return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Account",fieldColumns:8},ot.createElement(wm,{accounts:n,selected:r,onChange:this.onArtifactAccountChanged})),c&&ot.createElement(c,{account:r,artifact:t,onChange:a,pipeline:e}))}}const Fm=class extends ot.Component{constructor(e){super(e),this.editArtifact=(e,t,n)=>{e.setFieldValue(t,n),e.setFieldValue(`${t}.artifactAccount`,n.artifactAccount)},this.state={matchArtifactAccounts:[],defaultArtifactAccounts:[],taskMonitor:new Kc({title:"I'm never used"})}}componentDidMount(){const{excludedArtifactTypePatterns:e,excludedDefaultArtifactTypePatterns:t}=this.props;Di.getArtifactAccounts().then((n=>{this.setState({matchArtifactAccounts:e?n.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):n,defaultArtifactAccounts:t?n.filter((e=>!e.types.some((e=>t.some((t=>t.test(e))))))):n})}))}static show(e){return si.show(Fm,e,{dialogClassName:"wizard-modal modal-lg"})}render(){const{matchArtifactAccounts:e,defaultArtifactAccounts:t}=this.state;return ot.createElement(jc,{heading:"Expected Artifact",initialValues:this.props.expectedArtifact||cm.createEmptyArtifact(),taskMonitor:this.state.taskMonitor,dismissModal:this.props.dismissModal,closeModal:this.props.closeModal,submitButtonLabel:"Save Artifact",render:({formik:n,nextIdx:a,wizard:i})=>ot.createElement(ot.Fragment,null,ot.createElement(Ic,{label:"General",wizard:i,order:a(),render:()=>ot.createElement(Cl,{name:"displayName",label:"Display Name",input:e=>ot.createElement(mo,{...e}),required:!0})}),ot.createElement(Ic,{label:"Match Artifact",wizard:i,order:a(),render:()=>ot.createElement(Im,{pipeline:this.props.pipeline,artifact:n.values.matchArtifact,artifactAccounts:e,onArtifactEdit:e=>this.editArtifact(n,"matchArtifact",e),isDefault:!1})}),ot.createElement(Ic,{label:"If Missing",wizard:i,order:a(),render:()=>ot.createElement(ot.Fragment,null,ot.createElement(Cl,{name:"usePriorArtifact",label:"Use prior execution",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(Zs,{id:"pipeline.config.expectedArtifact.usePriorExecution"})}),ot.createElement(Cl,{name:"useDefaultArtifact",label:"Use default artifact",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(Zs,{id:"pipeline.config.expectedArtifact.defaultArtifact"})}),n.values.useDefaultArtifact&&ot.createElement(Im,{pipeline:this.props.pipeline,artifact:n.values.defaultArtifact,artifactAccounts:t,onArtifactEdit:e=>this.editArtifact(n,"defaultArtifact",e),isDefault:!0}))}))})}};let Tm=Fm;Tm.defaultProps={closeModal:qi,dismissModal:qi};class Qm extends ot.Component{constructor(e){super(e),this.defineNewArtifactOption={...cm.createEmptyArtifact(),displayName:"Define a new artifact...",id:"__inline.artifact__"},this.destroy$=new At,this.renderArtifact=e=>ot.createElement("span",null,"__inline.artifact__"!==e.id&&ot.createElement(ym,{type:e.matchArtifact&&e.matchArtifact.type||e.defaultArtifact&&e.defaultArtifact.type,width:"16",height:"16"}),e&&e.displayName),this.onExpectedArtifactSelected=e=>{"__inline.artifact__"!==e.id?this.props.onExpectedArtifactSelected(e):this.props.onArtifactEdited(e.defaultArtifact)},this.onInlineArtifactChanged=e=>{this.props.onArtifactEdited(e)},this.state={artifactAccounts:[]}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=this.props.excludedArtifactTypePatterns;vt(Di.getArtifactAccounts()).pipe(It(this.destroy$)).subscribe((t=>{this.setState({artifactAccounts:e?t.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):t})}))}render(){const{pipeline:e,stage:t,expectedArtifactId:n,artifact:a,excludedArtifactIds:i,renderLabel:r}=this.props,s=cm.getExpectedArtifactsAvailableToStage(t,e),o=n?s.find((e=>e.id===n)):a?{id:"__inline.artifact__",displayName:"Artifact from execution context",defaultArtifact:a}:void 0,l=[this.defineNewArtifactOption,...s.filter((e=>!i||!i.includes(e.id)))],c=ot.createElement(cn,{clearable:!1,options:l,value:o,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,onChange:this.onExpectedArtifactSelected,placeholder:"Select an artifact..."});return ot.createElement(ot.Fragment,null,ot.createElement("div",{className:"sp-margin-m-bottom","data-test-id":"Stage.artifactSelector"},r?r(c):c),!!a&&ot.createElement(Im,{pipeline:e,artifact:a,artifactAccounts:this.state.artifactAccounts,onArtifactEdit:e=>this.onInlineArtifactChanged(e),isDefault:!0}))}}const Pm="spinnaker.core.artifacts.stage.artifact.selector.react";n(Pm,[]).component("stageArtifactSelectorReact",yn(Gl(Qm,"stageArtifactSelectorReact"),["pipeline","stage","expectedArtifactId","artifact","onExpectedArtifactSelected","onArtifactEdited","excludedArtifactIds","excludedArtifactTypePatterns"]));const Rm=e=>ot.createElement(Up,{label:e.label,helpKey:e.helpKey,fieldColumns:e.fieldColumns},ot.createElement(Qm,{...e}));oi(".TriggerArtifactConstraintSelector_Selects > * + * {\n margin-top: 4px;\n}\n");class Um extends ot.Component{constructor(){super(...arguments),this.defaultExcludedArtifactTypePatterns=[fp.KUBERNETES,fp.FRONT50_PIPELINE_TEMPLATE],this.excludedArtifactTypes=()=>{const e=Om.pipeline.getTriggerConfig(this.props.triggerType);return this.defaultExcludedArtifactTypePatterns.concat(e&&e.excludedArtifactTypePatterns||[])},this.handleChange=(e,t)=>{if("__create.new.artifact"===t.id)return void Tm.show({pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>{this.props.addExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:(this.props.value||[]).concat([e.id])}))}),(()=>null));const n=(this.props.value||[]).slice(0);n[e]=t.id,this.props.onChange(fr({name:this.props.name,value:n}))},this.removeExpectedArtifact=e=>{const t=(this.props.value||[]).slice();this.props.removeExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:t.filter((t=>t!==e.id))}))},this.editExpectedArtifact=e=>{Tm.show({expectedArtifact:e,pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>this.props.updateExpectedArtifact(e)),(()=>null))},this.renderArtifact=e=>ot.createElement("span",null,e&&e.displayName)}render(){const{pipeline:e}=this.props,t=this.props.value||[],n=e.expectedArtifacts||[],[a,i]=ue(n,(e=>t.includes(e.id))),r=cm.createEmptyArtifact();r.id="__create.new.artifact",r.displayName="Define a new artifact...",i.push(r);const s=(e,t)=>{const n=ot.createElement(ot.Fragment,null,ot.createElement("a",{className:"clickable glyphicon glyphicon-edit",onClick:()=>this.editExpectedArtifact(t)}),ot.createElement("a",{className:"clickable glyphicon glyphicon-trash",onClick:()=>this.removeExpectedArtifact(t)}));return ot.createElement("div",{key:t&&t.id||"new",className:"flex-container-h baseline margin-between-md"},ot.createElement(cn,{className:"flex-grow",clearable:!1,value:t,onChange:t=>this.handleChange(e,t),options:i,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,placeholder:"Select or define an artifact..."}),ot.createElement("div",{style:{minWidth:"50px"},className:"flex-container-h baseline margin-between-md"},t&&n))};return ot.createElement("div",{className:"TriggerArtifactConstraintSelector_Selects flex-container-v margin-between-md"},a.map(((e,t)=>s(t,e))),s(t.length))}}const zm=[lu,cu,du,uu,hu,fu,Au,Eu,yu,wu,Cu,ku,Du,Iu,Su,Mu,Pu,Ru,Uu,zu,Gu,ju,Hu,Vu,qu,Xu,em,tm,Zu,_u,Wu,Ku];class Gm{constructor(){this.triggerTypes=[],this.stageTypes=[],this.transformers=[],this.notificationTypes=[],this.artifactKinds=zm,this.getStageConfig=me(this.getStageConfig.bind(this),(e=>[e?e.type:"",e?Gm.resolveCloudProvider(e):""].join(":")))}normalizeStageTypes(){this.stageTypes.filter((e=>e.provides)).forEach((e=>{const t=this.stageTypes.find((t=>t.key===e.provides&&!t.provides));t&&(e.label=e.label||t.label,e.description=e.description||t.description,e.key=e.key||t.key,e.manualExecutionComponent=e.manualExecutionComponent||t.manualExecutionComponent,t.executionDetailsUrl&&!e.executionDetailsUrl&&(e.executionDetailsUrl=t.executionDetailsUrl),t.executionConfigSections&&!e.executionConfigSections&&(e.executionConfigSections=t.executionConfigSections),t.executionDetailsSections&&!e.executionDetailsSections&&(e.executionDetailsSections=t.executionDetailsSections))}))}registerNotification(e){this.notificationTypes.push(e)}registerTrigger(e){di.triggerTypes?di.triggerTypes.indexOf(e.key)>=0&&this.triggerTypes.push(e):this.triggerTypes.push(e)}registerTransformer(e){this.transformers.push(e)}registerStage(e){(di.hiddenStages||[]).includes(e.key)||(this.stageTypes.push(e),this.normalizeStageTypes())}async registerPreconfiguredJobStage(e){var t;const n=(await hp.list()).find((t=>t.type===e.key));if(!n)throw new Error(`Preconfigured Job of type '${e.key}' not found in /jobs/preconfigured from gate. Is the preconfigured job registered in orca?`);const a=null!=(t=null==n?void 0:n.parameters)?t:[],i=a.filter((e=>!u(e.defaultValue))),r=ge(i.map((e=>[e.name,e.defaultValue]))),{label:s,description:o,waitForCompletion:l,producesArtifacts:c}=n,p={...e,configuration:{...e.configuration,parameters:a,waitForCompletion:l},defaults:{parameters:r},description:o,label:s,producesArtifacts:c};return this.registerStage(p),p}registerArtifactKind(e){return this.artifactKinds.push(e),e.editCmp}getExecutionTransformers(){return this.transformers}getNotificationTypes(){return p(this.notificationTypes)}getTriggerTypes(){return p(this.triggerTypes)}getStageTypes(){return p(this.stageTypes)}getMatchArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isMatch)))}getDefaultArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isDefault)))}getCustomArtifactKind(){return p(this.artifactKinds.find((e=>"custom"===e.key)))}getCloudProvidersForStage(e,t,n){const a=f(n.map((e=>e.cloudProvider)));let i=[];if(e.providesFor)i=e.providesFor;else if(e.cloudProvider)i=[e.cloudProvider];else if(e.useBaseProvider){t.filter((t=>t.provides===e.key)).forEach((e=>{e.providesFor?i=i.concat(e.providesFor):i.push(e.cloudProvider)}))}else i=a.slice(0);return i=i.filter((t=>!!n.filter((e=>e.cloudProvider===t)).find((t=>{const n=Ni.getProvider(t.cloudProvider);return!jm(e,n)})))),di.feature.dockerBake&&"bake"===e.key&&a.push("docker"),h(a,i)}getConfigurableStageTypes(e){const t=u(e)?[]:Array.from(new Set(e.map((e=>e.cloudProvider)))),n=this.getStageTypes();let a=n.filter((e=>!e.synthetic&&!e.provides));return 0===t.length?a:(a.forEach((t=>t.cloudProviders=this.getCloudProvidersForStage(t,n,e))),a=a.filter((t=>!e.every((e=>{const n=Ni.getProvider(e.cloudProvider);return jm(t,n)})))),a.filter((e=>e.cloudProviders.length)).sort(((e,t)=>e.label.localeCompare(t.label))))}getProvidersFor(e){let t=e;const n=this.getStageTypes().filter((t=>t.provides&&(t.provides===e||t.key===e||t.alias===e)));return n.length&&(t=n[0].provides),this.getStageTypes().filter((e=>e.provides&&e.provides===t))}getNotificationConfig(e){return this.getNotificationTypes().find((t=>t.key===e))}getTriggerConfig(e){return this.getTriggerTypes().find((t=>t.key===e))}overrideManualExecutionComponent(e,t){const n=this.triggerTypes.find((t=>t.key===e));n&&(n.manualExecutionComponent=t)}checkAliasedStageTypes(e){const t=this.getStageTypes().filter((t=>t.alias===e.type));return 1===t.length?t[0]:null}checkAliasFallback(e){if(e.alias){const t=this.getStageTypes().filter((t=>t.key===e.alias));if(1===t.length)return t[0]}return null}getStageConfig(e){var t;if(!e||!e.type)return null;const n=this.getStageTypes().filter((t=>t.key===e.type||t.provides===e.type));switch(n.length){case 0:{const t=this.checkAliasedStageTypes(e)||this.checkAliasFallback(e),n=this.getStageTypes().find((e=>"unmatched"===e.key));return null!=t?t:n}case 1:return n[0];default:{const a=Gm.resolveCloudProvider(e),i=n.find((e=>e.cloudProvider===a)),r=n.find((e=>!!e.cloudProvider));return null!=(t=null!=i?i:r)?t:n[0]}}}static resolveCloudProvider(e){var t,n,a,i,r,s;return null!=(s=null!=(r=null!=(a=null!=(t=e.cloudProvider)?t:e.cloudProviderType)?a:null==(n=e.context)?void 0:n.cloudProvider)?r:null==(i=e.context)?void 0:i.cloudProviderType)?s:"aws"}getManualExecutionComponent(e){return e&&e.manualExecutionComponent?e.manualExecutionComponent:null}getManualExecutionComponentForTriggerType(e){return this.getManualExecutionComponent(this.getTriggerConfig(e))}hasManualExecutionComponentForTriggerType(e){return null!==this.getManualExecutionComponent(this.getTriggerConfig(e))}getManualExecutionComponentForStage(e){return this.getStageConfig(e).manualExecutionComponent}}function jm(e,t){return!(!t||!t.unsupportedStageTypes)&&t.unsupportedStageTypes.indexOf(e.key)>-1}const Lm=class{};let Om=Lm;Om.pipeline=new Gm,Om.urlBuilder=new lp,Om.reinitialize=()=>{Lm.pipeline=new Gm,Lm.urlBuilder=new lp},Zc.Registry=Om;class Ym{constructor(e,t,n,a){this.$scope=e,this.$stateParams=t,this.$state=n,this.executionService=a,this.parser=new xn,this.renderer=new Cn}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.execution=this.execution,this.$scope.stage=this.stage,this.$scope.stageSummary=this.stageSummary}getStepLabel(e){const t=Om.pipeline.getStageConfig(e);return t&&t.executionStepLabelUrl?t.executionStepLabelUrl:"core/src/pipeline/config/stages/common/stepLabel.html"}getComments(){const e=this.parser.parse(this.stageSummary.comments+"");return this.renderer.render(e)}getCurrentStep(){return parseInt(this.$stateParams.step,10)}isStepCurrent(e){return e===this.getCurrentStep()}isRestartable(e){if(e.isRunning||e.isCompleted)return!1;const t=Om.pipeline.getStageConfig(e);if(!t||!0===e.isRestarting)return!1;const n=this.application.attributes.enableRestartRunningExecutions||!1;return!(this.execution.isRunning&&!n)&&(t.restartable||!1)}canManuallySkip(){const e=this.getTopLevelStage();return this.stage.isRunning&&e&&e.context.canManuallySkip}getTopLevelStage(){let e=this.stage.parentStageId,t=this.stage;for(;e;)t=this.execution.stages.find((t=>t.id===e)),e=t.parentStageId;return t}openManualSkipStageModal(){const e=this.getTopLevelStage();op.confirm({header:"Really skip this stage?",buttonText:"Skip",askForReason:!0,submitJustWithReason:!0,body:'<div class="alert alert-warning">\n <b>Warning:</b> Skipping this stage may have unpredictable results.\n <ul>\n <li>Mutating changes initiated by this stage will continue and will need to be cleaned up manually.</li>\n <li>Downstream stages that depend on the outputs of this stage may fail or behave unexpectedly.</li>\n </ul>\n </div>\n ',submitMethod:t=>this.executionService.patchExecution(this.execution.id,e.id,{manualSkip:!0,reason:t}).then((()=>this.executionService.waitUntilExecutionMatches(this.execution.id,(t=>{const n=t.stages.find((t=>t.id===e.id));return n&&"SKIPPED"===n.status})))).then((e=>this.executionService.updateExecution(this.application,e)))})}toggleDetails(e){const t=this.getCurrentStep()===e?null:e;if(null!==t){const e={step:t},n=parseInt(this.$stateParams.stage,10);n&&(e.stage=n);const a=parseInt(this.$stateParams.subStage,10);a&&(e.subStage=a),this.$state.go(".",e)}}}Ym.$inject=["$scope","$stateParams","$state","executionService"];const $m={bindings:{application:"<",execution:"<",sourceUrl:"<",stage:"<",stageSummary:"<"},controller:Ym,template:'<div className="stage-summary-wrapper" ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stageSummary.component",[]).component("stageSummary",$m),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/stages/common/stepLabel.html",'<span class="task-label">{{ step.name | robotToHuman }}</span>\n')}]);class Hm{constructor(e){this.$scope=e}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.config=this.config,this.$scope.configSections=this.configSections,this.$scope.execution=this.execution,this.$scope.stage=this.stage}}Hm.$inject=["$scope"];const Vm={bindings:{application:"<",config:"<",configSections:"<",execution:"<",sourceUrl:"<",stage:"<"},controller:Hm,template:'<div ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stepExecutionDetails.component",[]).component("stepExecutionDetails",Vm);oi("instance-type-selector tr.unavailable {\n opacity: 0.5;\n}\n");class Jm{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{e.unavailable||(this.command.instanceType=e.name,this.command.viewState.dirty&&this.command.viewState.dirty.instanceType&&delete this.command.viewState.dirty.instanceType,this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,e.name).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType))},this.getStorageDescription=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?this.command.viewState.overriddenStorageDescription:e.storage.count+"x"+e.storage.size,this.getStorageDescriptionHelpKey=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?"instanceType.storageOverridden":null}$onInit(){this.instanceProfile=this.command.viewState.instanceProfile,this.instanceTypes=this.command.backingData&&this.command.backingData.filtered?this.command.backingData.filtered.instanceTypes:[],this.updateFamilies()}$doCheck(){let e=!1;this.command.viewState.instanceProfile!==this.instanceProfile&&(this.instanceProfile=this.command.viewState.instanceProfile,e=!0);this.command.backingData&&this.command.backingData.filtered&&this.command.backingData.filtered.instanceTypes!==this.instanceTypes&&(this.instanceTypes=this.command.backingData.filtered.instanceTypes,e=!0),e&&this.updateFamilies()}updateFamilies(){let e=[];this.command.backingData&&this.command.backingData.filtered&&(e=this.command.backingData.filtered.instanceTypes||[]),this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{t.forEach((t=>{t.type===this.command.viewState.instanceProfile&&(this.command.viewState.disableImageSelection||t.families.forEach((t=>{t.instanceTypes.forEach((t=>{t.unavailable=e.every((e=>e!==t.name))}))})),this.$scope.selectedInstanceProfile=t)}))}))}}Jm.$inject=["$scope","instanceTypeService"];const Wm={bindings:{command:"<",onTypeChanged:"="},controller:Jm,controllerAs:"instanceTypeCtrl",templateUrl:"core/src/serverGroup/configure/common/instanceTypeDirective.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceTypeSelector",[]).component("v2InstanceTypeSelector",Wm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/instanceTypeDirective.html",'<dirty-instance-type-notification command="command"></dirty-instance-type-notification>\n<div class="row" ng-repeat="family in selectedInstanceProfile.families">\n <div class="col-md-12">\n <h4>{{selectedInstanceProfile.label}}: {{family.type}}</h4>\n <p>{{family.description}}</p>\n <table class="table table-hover">\n <thead>\n <tr>\n <th></th>\n <th>Size</th>\n <th>vCPU</th>\n <th>Mem (GiB)</th>\n <th>\n {{family.storageType || \'SSD\'}} Storage (GB)\n <help-field ng-if="family.storageHelpFieldKey" key="{{family.storageHelpFieldKey}}"></help-field>\n </th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat="instanceType in family.instanceTypes"\n ng-class="{info: instanceTypeCtrl.command.instanceType === instanceType.name, clickable: !instanceType.unavailable, unavailable: instanceType.unavailable}"\n ng-click="instanceTypeCtrl.selectInstanceType(instanceType)"\n >\n <td>\n <help-field ng-if="instanceType.unavailable" key="instanceType.unavailable"></help-field>\n <help-field ng-if="instanceType.helpFieldKey" key="{{instanceType.helpFieldKey}}"></help-field>\n <input\n type="radio"\n ng-value="instanceType.name"\n ng-model="instanceTypeCtrl.command.instanceType"\n ng-disabled="instanceType.unavailable"\n />\n </td>\n <td>{{instanceType.label}}</td>\n <td>{{instanceType.cpu}}</td>\n <td>{{instanceType.memory}}</td>\n <td ng-if="instanceType.storage.type === \'EBS\'">EBS Only</td>\n <td ng-if="instanceType.storage.type === \'SSD\' || family.storageType">\n <help-field\n ng-if="instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)"\n key="{{instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)}}"\n ></help-field>\n {{instanceTypeCtrl.getStorageDescription(instanceType)}}\n </td>\n <td><cost-factor factor="instanceType.costFactor"></cost-factor></td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n')}]);n("spinnaker.core.serverGroup.configure.common.costFactor",[]).directive("costFactor",(function(){return{restrict:"E",scope:{factor:"=",range:"="},templateUrl:"core/src/serverGroup/configure/common/costFactor.html",link:function(e){function t(e){return{used:new Array(e+1).join("$"),unused:new Array(5-e).join("$")}}function n(){if(e.range)e.min=t(e.range.min),e.max=t(e.range.max);else{const n=t(e.factor);e.used=n.used,e.unused=n.unused}}n(),e.$watch("range",n)}}})),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/costFactor.html",'<span class="cost-factor" ng-if="!range"> <span class="cost">{{used}}</span>{{unused}} </span>\n<span class="cost-factor" ng-if="range">\n <span class="cost">{{min.used}}</span>{{min.unused}} – <span class="cost">{{max.used}}</span>{{max.unused}}\n</span>\n')}]);n("spinnaker.core.presentation.isVisible.directive",[]).directive("isVisible",(function(){return function(e,t,n){e.$watch(n.isVisible,(function(e){t.css("visibility",e?"visible":"hidden")}))}}));class Km{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{const{$scope:t}=this;t.selectedInstanceProfile&&t.selectedInstanceProfile.type===e&&(e=null,t.selectedInstanceProfile=null),this.command.viewState.instanceProfile=e,t.instanceProfiles.forEach((n=>{if(n.type===e){t.selectedInstanceProfile=n;const e=this.command.instanceType;if(e&&!Z(["custom","buildCustom"],n.type)){n.families.some((t=>t.instanceTypes.some((t=>t.name===e&&!t.unavailable))))||(this.command.instanceType=null)}}})),this.onProfileChanged&&this.onProfileChanged(e)},this.updateInstanceType=()=>{Dc.renderedPages.length>0&&(this.command.instanceType?Dc.markComplete("instance-type"):Dc.markIncomplete("instance-type"))},this.updateInstanceTypeDetails=()=>{this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,this.command.instanceType).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType)}}$onInit(){const{$scope:e}=this;this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{e.instanceProfiles=t,e.instanceProfiles.length%3==0&&(e.columns=3),e.instanceProfiles.length%4==0&&(e.columns=4),e.instanceProfiles.length%5!=0&&7!==e.instanceProfiles.length||(e.columns=5),this.selectInstanceType(this.command.viewState.instanceProfile)})),this.command.region&&this.command.instanceType&&!this.command.viewState.instanceProfile&&this.selectInstanceType("custom"),this.getInstanceBuilderTemplate=Ni.getValue.bind(Ni,this.command.cloudProvider,"instance.customInstanceBuilderTemplateUrl"),e.$watch("$ctrl.command.instanceType",(()=>this.updateInstanceType()))}}Km.$inject=["$scope","instanceTypeService"];const qm={bindings:{command:"<",onProfileChanged:"=",onTypeChanged:"="},controller:Km,controllerAs:"instanceArchetypeCtrl",templateUrl:"core/src/serverGroup/configure/common/v2instanceArchetype.directive.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceArchetypeSelector",["spinnaker.core.serverGroup.configure.common.costFactor","spinnaker.core.presentation.isVisible.directive"]).component("v2InstanceArchetypeSelector",qm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/v2instanceArchetype.directive.html",'<h4 class="col-md-12" style="margin-top: 10px">This application is:</h4>\n<div class="archetype-columns archetype-columns-{{columns}}" ng-repeat="instanceProfile in instanceProfiles">\n <button\n class="instance-profile"\n type="button"\n ng-class="{active: instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type}"\n ng-click="instanceArchetypeCtrl.selectInstanceType(instanceProfile.type)"\n >\n <span\n is-visible="instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type"\n class="far fa-check-circle selected-indicator"\n ></span>\n <div class="panel-heading">\n <h4>\n <span class="glyphicon glyphicon-{{instanceProfile.icon}}"></span>\n <div>{{instanceProfile.label}}</div>\n </h4>\n </div>\n </button>\n</div>\n<div class="clearfix" ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'custom\'">\n <dirty-instance-type-notification command="instanceArchetypeCtrl.command"></dirty-instance-type-notification>\n <div class="col-md-8">\n <select\n class="form-control input-sm"\n ng-model="instanceArchetypeCtrl.command.instanceType"\n ng-options="customType for customType in instanceArchetypeCtrl.command.backingData.filtered.instanceTypes"\n ng-change="instanceArchetypeCtrl.updateInstanceTypeDetails()"\n required\n >\n <option value="">Select an instance type...</option>\n </select>\n </div>\n</div>\n<ng-include\n src="instanceArchetypeCtrl.getInstanceBuilderTemplate()"\n ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'buildCustom\'"\n>\n</ng-include>\n')}]);const Xm={bindings:{application:"<",component:"<",accounts:"<",clusterField:"<",singleRegion:"<",showAllRegions:"<?",onAccountUpdate:"<?",disableRegionSelect:"<?"},template:'\n <account-region-cluster-selector\n application="$ctrl.application"\n component="$ctrl.component"\n accounts="$ctrl.accounts"\n cluster-field="{{::$ctrl.clusterField}}"\n single-region="$ctrl.singleRegion"\n show-all-regions="$ctrl.showAllRegions"\n on-account-update="$ctrl.onAccountUpdate"\n disable-region-select="$ctrl.disableRegionSelect">\n </account-region-cluster-selector>\n '};n("spinnaker.core.accountRegionClusterSelectorWrapper.component",[]).component("accountRegionClusterSelectorWrapper",Xm);class Zm extends mi{constructor(){super(...arguments),this.$injectorProxy={},this.AccountRegionClusterSelector=la("accountRegionClusterSelectorWrapper",Xm,this.$injectorProxy),this.InstanceArchetypeSelector=la("v2InstanceArchetypeSelector",qm,this.$injectorProxy),this.InstanceTypeSelector=la("v2InstanceTypeSelector",Wm,this.$injectorProxy),this.StageSummaryWrapper=la("stageSummary",$m,this.$injectorProxy),this.StepExecutionDetailsWrapper=la("stepExecutionDetails",Vm,this.$injectorProxy),this.TargetSelect=la("targetSelect",kc,this.$injectorProxy)}initialize(e){const t=e,n=this.$injectorProxy;Object.keys(e).filter((e=>"function"==typeof t[e])).forEach((e=>n[e]=t[e].bind(t)))}}const _m=new Zm;class eg{constructor(e){this.$rootScope=e,this.stateChangeSuccess=new At,this.locationChangeSuccess=new At;this.$rootScope.$on("$stateChangeSuccess",((e,t,n,a,i)=>{this.stateChangeSuccess.next({to:t,toParams:n,from:a,fromParams:i})})),this.$rootScope.$on("$locationChangeSuccess",((e,t)=>this.locationChangeSuccess.next(t)))}}eg.$inject=["$rootScope"];const tg="spinnaker.core.state.events";n(tg,[]).service("stateEvents",eg);oi("react-ui-view-adapter {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n height: 100%;\n}\n");const ng="spinnaker.core.react";function ag(e,t,n,a=((e,t)=>e===t)){return n.every((n=>a(e[n],t[n])))}n(ng,["bcherny/ngimport","ui.router",tg]).run(["$injector",function(e){hi.initialize(e),vi.initialize(e),_m.initialize(e)}]);class ig{static deleteSecurityGroup(e,t,n){n.type="deleteSecurityGroup",n.securityGroupName=e.name,n.regions=[e.region],n.credentials=e.accountId;const a=ep.executeTask({job:[n],application:t,description:`Delete ${Vs.get("Firewall")}: ${e.name}`});return cd.clearCache("securityGroups"),a}static upsertSecurityGroup(e,t,n,a={}){a.type="upsertSecurityGroup",a.securityGroupName=e.name,a.credentials=e.credentials||e.accountName;const i={...e,...a},r=ep.executeTask({job:[i],application:t,description:`${n} ${Vs.get("Firewall")}: ${e.name}`});return cd.clearCache("securityGroups"),r}}oi(".search-result {\n display: inline-block;\n width: calc(100% - 20px);\n}\n.search-result > span + span {\n margin-left: 6px;\n}\n");class rg extends ot.Component{render(){const{displayName:e,account:t}=this.props;return ot.createElement("span",{className:"search-result"},t&&ot.createElement(ts,{account:t}),ot.createElement(Br,{tag:"span",message:e}))}}const sg=({categories:e,onItemKeyDown:t,onResultClick:n,resultRef:a})=>e.length?ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,i)=>[ot.createElement("li",{key:e.category,className:"category-heading"},ot.createElement("div",{className:"category-heading"},"Recent ",e.category)),...e.results.map(((r,s)=>{const o=r.params||{},l=r.account||o.account||o.accountId||o.accountName;return ot.createElement("li",{key:r.id,className:"result",onClick:()=>n(e.category)},ot.createElement(Dn,{to:r.state,params:r.params},ot.createElement("a",{ref:e=>a(i,s,e),onKeyDown:t},ot.createElement(rg,{displayName:r.displayName,account:l}))))}))]))):null,og=(e,t)=>{if(e)for(const n of e)if("applications"===n.type.id){const e=n.results.find((e=>e.application.toLowerCase()===t.toLowerCase()));if(e)return{category:n,result:e}}},lg=(e,t)=>2===di.searchVersion?{key:e,tab:t}:{q:e},cg=({categories:e,query:t,onItemKeyDown:n,onResultClick:a,onSeeMoreClick:i,resultRef:r})=>{if(!e.length)return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"result"},ot.createElement("a",null,"No matches")));const s=og(e,t);return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,o)=>{const l=lg(t,e.type.id);return[ot.createElement("li",{key:e.type.id,className:"category-heading flex-container-h no-wrap space-between baseline"},ot.createElement("span",null,e.type.displayName),ot.createElement(Dn,{to:"home.search",params:l},ot.createElement("a",{target:"_self",className:"expand-results",ref:e=>r(o,0,e),onClick:i,onKeyDown:n},"show all"))),e.results.map(((e,t)=>ot.createElement("li",{key:e.href,className:"result"},ot.createElement("a",{onKeyDown:n,onClick:()=>a(e),ref:e=>r(o,t+1,e),href:e.href,className:e===(null==s?void 0:s.result)?"query-match":void 0},ot.createElement(rg,{displayName:e.displayName,account:e.account})))))]})))};oi(".infrastructure-project {\n display: block;\n border: 1px solid var(--color-mineshaft);\n background-color: var(--color-white);\n margin-bottom: 15px;\n}\n.infrastructure-project a {\n color: var(--color-mineshaft);\n display: block;\n}\n.infrastructure-project a:active,\n.infrastructure-project a:hover {\n font-weight: 600;\n}\n.infrastructure-project .project-summary {\n padding: 10px;\n background-color: var(--color-primary);\n color: var(--color-alabaster);\n}\n.infrastructure-project .project-summary .remove-result-link {\n opacity: 0;\n}\n.infrastructure-project .project-summary:hover .remove-result-link {\n opacity: 1;\n -webkit-transition: opacity 0.25s ease-in;\n transition: opacity 0.25s ease-in;\n color: var(--color-concrete);\n}\n.infrastructure-project .project-summary:hover .remove-result-link:hover,\n.infrastructure-project .project-summary:hover .remove-result-link:active {\n color: var(--color-accent);\n}\n.infrastructure-project .project-summary .project-name {\n text-transform: uppercase;\n font-weight: 600;\n font-size: 120%;\n}\n.infrastructure-project .project-summary .project-name a {\n color: var(--color-accessory-light);\n display: inline-block;\n width: calc(100% - 20px);\n}\n.infrastructure-project .application-list {\n padding: 10px 15px;\n margin-bottom: 0;\n border-top: 1px solid var(--color-mineshaft);\n background-color: var(--color-cirrus);\n}\n.infrastructure-project .application-list li {\n list-style-type: none;\n}\n.infrastructure-project .application-list li a {\n color: var(--color-mineshaft);\n}\n");var pg=Object.defineProperty,dg=Object.getOwnPropertyDescriptor;let ug=class extends ot.Component{constructor(){super(...arguments),this.handleRemoveClicked=e=>{e.preventDefault(),this.props.onRemoveProject(this.props.id)},this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick("projects")}}render(){const{projectName:e,applications:t,onRemoveProject:n}=this.props,a=!!n;return ot.createElement("div",{className:"infrastructure-project",onClick:this.handleResultClick},ot.createElement("div",{className:"project-summary"},ot.createElement("div",{className:"project-name"},ot.createElement(Dn,{to:"home.project.dashboard",params:{project:e}},ot.createElement("a",null,e)),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:this.handleRemoveClicked},ot.createElement(Qs,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),ot.createElement("div",{className:"application-count"},t.length||0," Application",1!==t.length?"s":"")),ot.createElement("ul",{className:"application-list"},t.map((t=>ot.createElement("li",{key:t},ot.createElement(Dn,{to:"home.project.application.insight.clusters",params:{project:e,application:t}},ot.createElement("a",null,t)))))))}};ug=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?dg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&pg(t,n,r),r})([na],ug);var mg=Object.defineProperty,gg=Object.getOwnPropertyDescriptor;let hg=class extends ot.Component{constructor(){super(...arguments),this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick(this.props.categoryName)}}handleRemoveClicked(e,t,n){e.preventDefault(),this.props.onRemoveItem(t,n)}render(){const{categoryName:e,result:t,onRemoveItem:n}=this.props,a=!!n,i=t.params||{},r=t.account||i.account||i.accountId||i.accountName;return ot.createElement(Dn,{to:t.state,params:t.params},ot.createElement("a",{target:"_self",className:"list-group-item"},ot.createElement("span",{onClick:this.handleResultClick},ot.createElement(rg,{displayName:t.displayName,account:r}),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:n=>this.handleRemoveClicked(n,e,t.id)},ot.createElement(Qs,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"}))))))}};hg=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?gg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&mg(t,n,r),r})([na],hg);class fg extends ot.Component{render(){const{podData:e}=this.props,{category:t}=e;return ot.createElement("div",{className:"col-md-4 category-container",key:t},ot.createElement("div",{className:"panel category row"},ot.createElement("div",{className:"summary"},ot.createElement("span",{className:"category-icon"},e.config.iconClass&&ot.createElement("span",{className:e.config.iconClass})),yr(t)," (",e.results.length,")"),ot.createElement("div",{className:"details-container list-group"},e.results.map((e=>ot.createElement(hg,{key:e.id,categoryName:t,result:e,onResultClick:this.props.onResultClick,onRemoveItem:this.props.onRemoveItem}))))))}}class vg extends ot.Component{render(){const{results:e}=this.props;if(!e.length)return null;const t=e.find((e=>"projects"===e.category)),n=e.filter((e=>"projects"!==e.category)).sort(((e,t)=>e.category.localeCompare(t.category)));return ot.createElement("div",{className:"infrastructure-section container"},ot.createElement("div",{className:"recent-items"},ot.createElement("h3",null,"Recently viewed"),ot.createElement("div",{className:"row"},t&&ot.createElement("div",{className:"col-md-3"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},t.results.map((e=>ot.createElement(ug,{key:e.id,id:e.id,projectName:m(e,"params.project"),applications:m(e,"extraData.config.applications",[]),onRemoveProject:this.props.onRemoveProject,onResultClick:this.props.onResultClick})))))),ot.createElement("div",{className:"col-md-"+(t?9:12)},ot.createElement("div",{className:"row"},n.map((e=>ot.createElement(fg,{key:e.category,podData:e,onRemoveItem:this.props.onRemoveItem,onResultClick:()=>this.props.onResultClick(e.category)}))))))))}}class Ag{static getItems(e){const t=[{state:"securityGroup",replacement:"firewall"},{state:"securityGroupDetails",replacement:"firewallDetails"}],n=this.cache.get(e)||[];return n.forEach((e=>{t.forEach((t=>{e.state&&e.state.includes(t.state)&&(e.state=e.state.replace(t.state,t.replacement))}))})),Y(n,"accessTime").reverse()}static addItem(e,t,n,a=[]){const i=this.getItems(e).slice(0,5),r=this.getExisting(i,n,a),s={params:n,state:t,accessTime:(new Date).getTime(),extraData:{},id:pr.generateUuid()};r&&i.splice(i.indexOf(r),1),5===i.length&&i.pop(),i.push(s),this.cache.put(e,i)}static removeItem(e,t){const n=this.getItems(e),a=n.find((e=>e.id===t));a&&(n.splice(n.indexOf(a),1),this.cache.put(e,n))}static removeLastItem(e){const t=this.getItems(e);t.length&&(t.splice(0,1),this.cache.put(e,t))}static addExtraDataToLatest(e,t){const n=this.getItems(e);n.length&&(n[0].extraData=t,this.cache.put(e,n))}static removeByAppName(e){const t="applications",n=this.getItems(t).filter((t=>t.params.application!==e));n&&this.cache.put(t,n)}static getExisting(e,t,n){return n&&n.length?e.find((e=>n.every((n=>e.params[n]===t[n])))):V(e,{params:fe(t,B)})}}Ag.cache=Hp.createCache("history","user",{version:3,maxAge:bn.fromObject({days:90}).as("milliseconds")});const Eg="spinnaker.core.history.recentHistory.service";function bg(e){const{Component:t}=e,n=["projects","applications","loadBalancers","serverGroups","instances","securityGroups"],a=ot.useMemo((()=>hi.infrastructureSearchService.getSearcher()),[]);const{result:i,refresh:r}=Vo((async()=>{const e=async e=>{const t=a.getCategoryConfig(e),n=Ag.getItems(e),i=await Promise.all(n.map((t=>function(e,t){const n={...t.params,...t.extraData};return a.formatRouteResult(e,n).then((e=>({...t,displayName:e})))}(e,t))));return{category:e,config:t,results:i}};return(await Promise.all(n.map((t=>e(t))))).filter((e=>e.results.length))}),[],[]),s=(e,t)=>{Ag.removeItem(e,t),r()},o=e=>{Ui.log({category:"Primary Search",action:`Recent item selected from ${e}`})};return t?ot.createElement(t,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o}):ot.createElement(vg,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o})}n(Eg,[]).run(["$rootScope",e=>{e.$on("$stateChangeSuccess",((e,t,n)=>{var a;const i=null==(a=t.data)?void 0:a.history;if(i){const e=he(n||{},["debug","vis","trace"]),a=i.state||t.name;Ag.addItem(i.type,a,e,i.keyParams)}}))}]);const yg=(e,t="")=>{if(!e||!e.length)return[];const n=t.toLowerCase();return e.slice().sort(((e,t)=>{if(e.displayName&&t.displayName){const a=e.displayName.toLowerCase().indexOf(n),i=t.displayName.toLowerCase().indexOf(n);return a===i?e.displayName.localeCompare(t.displayName):a-i}return 0}))};n("spinnaker.core.search.searchResult.searchRank.filter",[]).filter("searchRank",(()=>yg));var wg=Object.defineProperty,xg=Object.getOwnPropertyDescriptor,Cg=(e,t,n,a)=>{for(var i,r=a>1?void 0:a?xg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&wg(t,n,r),r};let kg=class extends ot.Component{constructor(e){super(e),this.query$=new At,this.destroy$=new At,this.handleWindowKeyup=e=>{const{target:t,key:n}=e;t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||(({key:e,shiftKey:t})=>"/"===e&&t)(e)||"/"!==n||this.searchField.focus()},this.handleWindowClick=e=>{this.container.contains(e.target)||this.hideDropdown()},this.searchFieldBlurred=({relatedTarget:e})=>{this.container.contains(e)||this.hideDropdown()},this.searchFieldKeyUp=e=>{if(!this.state.showDropdown)return;const{key:t,shiftKey:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from input)"}}),this.searchField.blur();else if("ArrowDown"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow down (from input)"}}),e.preventDefault(),this.focusFirstSearchResult();else if("ArrowUp"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow up (from input)"}}),e.preventDefault(),this.focusLastSearchResult();else if("Tab"===t)n||(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from input)"}}),e.preventDefault(),this.focusFirstSearchResult());else if("Enter"===t){const{$state:t}=hi;if(this.state.categories){const e=og(this.state.categories,this.state.query);e?(t.go("home.applications.application",{application:e.result.application}),this.hideDropdown()):t.go("home.search",lg(this.state.query))}e.preventDefault()}},this.focusFirstSearchResult=()=>{const e=this.resultRefs[0]&&this.resultRefs[0][0];e&&e.focus()},this.focusLastSearchResult=()=>{const e=T(this.resultRefs),t=e[e.length-1];t&&t.focus()},this.navigateResult=e=>{const{key:t,target:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from result)"}}),this.setState({showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null});else if("Tab"===t){const e=T(this.resultRefs);if(n===e[e.length-1])return Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from result)"}}),void this.hideDropdown()}else if("ArrowDown"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"down (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a+1];i&&i.focus(),e.preventDefault()}else if("ArrowUp"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"up (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a-1];i&&i.focus(),e.preventDefault()}else"Enter"===t&&(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"enter (from result)"}}),setTimeout((()=>this.hideDropdown()),100))},this.queryChanged=({target:e})=>{const t=e.value,{showMinLengthWarning:n}=this.state,a=!!t&&t.length<3&&n;this.setState({query:t,querying:!1,showMinLengthWarning:a,categories:null},(()=>{t.length>=3?this.query$.next(t.trim()):a||this.considerMinLengthWarning()}))},this.showDropdown=()=>{this.setState({showDropdown:!0})},this.hideDropdown=()=>{this.setState({showDropdown:!1})},this.clearFilters=e=>{Vd.filterService.overrideFiltersForUrl(e)},this.SpinnerDropdown=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement(Es,{size:"small"}))),this.MinLengthWarning=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement("span",{className:"error-message"},"Please enter at least ",3," characters"))),this.RecentlyViewed=()=>ot.createElement(bg,{limit:5,Component:({results:e})=>(this.resultRefs=e.map((()=>[])),ot.createElement(sg,{categories:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{this.hideDropdown(),Ui.log({category:"Global Search",action:`Recent item selected from ${e}`})},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}}))}),this.SearchResults=()=>{const{query:e,categories:t}=this.state;return ot.createElement(cg,{categories:t,query:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{Ui.log({category:"Global Search",action:"Result Selected"}),this.hideDropdown(),this.clearFilters(e)},onSeeMoreClick:()=>{Ui.log({category:"Global Search",action:"See all results selected"}),this.hideDropdown()},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}})},this.state={showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null}}componentDidMount(){window.addEventListener("keyup",this.handleWindowKeyup),window.addEventListener("click",this.handleWindowClick);const{infrastructureSearchService:e}=hi,t=e.getSearcher();this.query$.pipe(Qt(300),Pt((e=>{Ui.log({category:"Global Search",action:"Query",data:{label:e}}),this.setState({querying:!0})})),Dt((e=>vt(t.query(e)))),St((e=>e.filter((({results:e})=>e.length)).map((e=>({...e,results:yg(e.results,e.query).slice(0,5)}))).sort(((e,t)=>e.type.order-t.type.order)))),It(this.destroy$)).subscribe((e=>{this.resultRefs=e.map((()=>[])),this.setState({querying:!1,categories:e})}))}componentWillUnmount(){window.removeEventListener("keyup",this.handleWindowKeyup),window.removeEventListener("click",this.handleWindowClick),this.destroy$.next()}considerMinLengthWarning(){const{query:e}=this.state;this.setState({showMinLengthWarning:!!e&&e.length<3})}renderDropdown(){const{query:e,querying:t,showMinLengthWarning:n,categories:a}=this.state,{SpinnerDropdown:i,MinLengthWarning:r,SearchResults:s,RecentlyViewed:o}=this;return e?t?ot.createElement(i,null):e.length<3&&n?ot.createElement(r,null):a?ot.createElement(s,null):null:ot.createElement(o,null)}render(){const{showDropdown:e,query:t}=this.state;return ot.createElement("li",{ref:e=>this.container=e,className:"global-search open"},ot.createElement("form",{className:"right global-search",onSubmit:e=>e.preventDefault()},ot.createElement("div",{className:"form-group has-feedback"},ot.createElement("div",{className:"input-group"},ot.createElement("input",{ref:e=>this.searchField=e,type:"search",className:"form-control flat input-sm no-border",placeholder:"Search",value:t,onBlur:this.searchFieldBlurred,onFocus:this.showDropdown,onChange:this.queryChanged,onKeyUp:this.searchFieldKeyUp}),ot.createElement(Qs,{placement:"right",template:ot.createElement("span",null,"Keyboard shortcut: ",ot.createElement("span",{className:"keyboard-key"},"/"))},ot.createElement("i",{className:"glyphicon glyphicon-search form-control-feedback"}))))),e&&this.renderDropdown())}};Cg([da(300)],kg.prototype,"considerMinLengthWarning",1),kg=Cg([na],kg);class Bg{constructor(e){this.$stateRegistryProvider=e,this.registeredStates=[]}setNestedState(e,t=!1){const n=r(e);t||(this.fixStateName(n),this.fixStateViews(n),n.parent=null),this.registeredStates.includes(n.name)||(this.registeredStates.push(n.name),this.$stateRegistryProvider.register(n)),n.children&&n.children.length&&n.children.forEach((e=>{e.parent=n.name,this.setNestedState(e,t)}))}fixStateName(e){e.parent&&(e.name=`${e.parent}.${e.name}`)}fixStateViews(e){const t=e.views||{},n=[];Object.keys(t).forEach((a=>{const i=a.match("../");if(i&&i.length&&"string"==typeof e.parent){const r=e.parent.split(".").slice(0,-1-i.length).join(".")+".";t[a.replace(/(..\/)+/,r)]=t[a],n.push(a)}})),n.forEach((e=>delete t[e]))}$get(){return this}}Bg.$inject=["$stateRegistryProvider"];const Sg="spinnaker.core.navigation.stateHelper.provider";n(Sg,[]).provider("stateHelper",Bg);oi(".secondary-panel > div {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.secondary-panel .nav {\n margin: 52px 24px 32px 4px;\n}\n.secondary-panel .nav h3 {\n margin-right: 10px;\n font-weight: 600;\n}\n.secondary-panel .nav h4 {\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 0;\n font-size: 16px;\n}\n.secondary-panel .nav .list-group-item.active {\n font-weight: 700;\n}\n.secondary-panel .nav .nav-search {\n margin-top: 10px;\n}\n.secondary-panel .nav-content .header {\n border-bottom: none;\n padding: 0;\n position: relative;\n z-index: 10;\n background-color: var(--color-alabaster);\n}\n.secondary-panel .nav-content .header h3 {\n display: inline-block;\n font-weight: 600;\n}\n.secondary-panel .nav-content .header .actions {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters label {\n font-weight: normal;\n margin-bottom: 0;\n margin-left: 10px;\n}\n.secondary-panel .nav-content .header.header-clusters {\n padding-top: 0;\n}\n.secondary-panel .nav-content .header.header-clusters h3 {\n padding-bottom: 5px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .header.header-clusters h3 {\n font-size: 110%;\n }\n}\n.secondary-panel .nav-content .header.header-clusters .filters {\n height: 40px;\n line-height: 40px;\n vertical-align: top;\n font-size: 90%;\n}\n.secondary-panel .nav-content .content {\n padding: 0 0 10px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .content {\n padding: 0 5px;\n }\n}\n.nav.navbar-nav .remove-border-top:hover,\n.nav.navbar-nav .remove-border-top:active {\n border-top-color: transparent;\n -webkit-transition: none;\n transition: none;\n}\n.nav.navbar-nav .glyphicon {\n padding-right: 4px;\n}\n");class Mg{constructor(e,t){this.$urlRouterProvider=e,this.stateHelperProvider=t,this.root={name:"home",abstract:!0,params:{allowModalToStayOpen:{dynamic:!0,value:null}},url:"?{debug:boolean}&{vis:query}&{trace:query}",dynamic:!0,children:[]}}addToRootState(e){this.root.children.find((t=>t.name===e.name))||this.root.children.push(e),this.setStates()}setStates(){this.stateHelperProvider.setNestedState(this.root)}addRewriteRule(e,t){this.$urlRouterProvider.when(e,t)}buildDynamicParams(e){return e.reduce(((e,t)=>{const n=t.param||t.model;return e[n]={type:t.type||"string",dynamic:!0},t.array&&(e[n].array=!0),e}),{})}paramsToQuery(e){return e.map((e=>e.param||e.model)).join("&")}$get(){return this}}Mg.$inject=["$urlRouterProvider","stateHelperProvider"];const Ng={decode:e=>{if(e){const t={};return e.split(",").map((e=>e.replace(/%2c/g,","))).forEach((e=>t[e]=!0)),t}return{}},encode:e=>{if(e){const t=Object.keys(e).filter((t=>e[t]));return t.length?t.sort().map((e=>e.replace(/,/g,"%2c"))).join(","):null}return null},equals:(e,t)=>E(e,t),is:e=>x(e)},Dg={decode:e=>!e||"true"!==e,encode:e=>e?null:"true",equals:(e,t)=>e===t,is:()=>!0},Ig={decode:e=>!!e&&"true"===e,encode:e=>e?"true":null,equals:(e,t)=>e===t,is:()=>!0},Fg={decode:e=>({key:e}),encode:e=>e?e.key:null,equals:(e,t)=>E(e,t),is:e=>x(e)},Tg="spinnaker.core.navigation.state.config.provider";n(Tg,[ca,Sg]).provider("stateConfig",Mg).config(["$urlRouterProvider",e=>{e.otherwise("/"),e.when("/{path:.*}/",["$match",e=>"/"+e.path])}]).config(["$urlServiceProvider",e=>{e.config.type("trueKeyObject",Ng),e.config.type("inverse-boolean",Dg),e.config.type("boolean",Ig),e.config.type("sortKey",Fg)}]);class Qg{static forEachSorted(e,t,n){Object.keys(e).sort().forEach((a=>{t.call(n,e[a],a)}))}static encodeUriQuery(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}static buildUrl(e,t={}){if(!t)return e;const n=[];return Qg.forEachSorted(t,((e,t)=>{if(null===e||B(e))return;let a;a=Array.isArray(e)?e:[e],a.forEach((e=>{j(e)&&(e=ve(e)?e.toISOString():JSON.stringify(e)),n.push(`${Qg.encodeUriQuery(t)}=${Qg.encodeUriQuery(e)}`)}))})),n.length>0&&(e+=(e.includes("?")?"&":"?")+n.join("&")),e}}class Pg{constructor(e){this.$state=e}createCloneTask(e){const t=e.getValueFor("deploy.server.groups"),n=e.getValueFor("deploy.account.name");let a;if(t&&Object.keys(t)[0]){const e=Object.keys(t),i=t[e[0]][0];a=!!i&&(!!i.match(ud.VERSION_PATTERN)&&this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:i.split("-")[0],cluster:i.replace(ud.VERSION_PATTERN,""),account:n,accountId:n,region:e,serverGroup:i,q:i}))}else a=!1;return a}asgTask(e){const t=e.getValueFor("asgName"),n=e.getValueFor("credentials");let a;return a=!!t&&(t.match(ud.VERSION_PATTERN)?this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:t.split("-")[0],cluster:t.replace(ud.VERSION_PATTERN,""),account:n,accountId:n,region:e.getValueFor("regions")[0],serverGroup:t}):"/"),a}static buildFromMetadata(e){const t=Om.urlBuilder.getBuilder(e.type);let n;return n=t?t.build(e,hi.$state):"/",n}buildFromTask(e){const t=e.name||"";function n(e){return t.includes(e)}let a;switch(!0){case n("Destroy Server Group"):a=!1;break;case n("Disable Server Group"):case n("Enable Server Group"):case n("Resize Server Group"):a=this.asgTask(e);break;case n("Create Cloned Server Group"):case n("Create New Server Group"):a=this.createCloneTask(e);break;default:a=!1}return a}}Om.urlBuilder.register("applications",new class{build(e,t){let n;return n=e.project?t.href("home.project.application",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application",{application:e.application},{inherit:!1}),n}}),Om.urlBuilder.register("clusters",new class{build(e,t){const n={acct:e.account};let a;return e.cluster&&(n.q=`cluster:${e.cluster}`),e.stack&&(n.stack=e.stack),e.detail&&(n.q=`detail:${e.detail}`),e.region&&(n.reg=e.region),a=e.project?t.href("home.project.application.insight.clusters",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application.insight.clusters",{application:e.application},{inherit:!1}),Qg.buildUrl(a,n)}}),Om.urlBuilder.register("instances",new class{build(e,t){let n;if(e.application){const a=t.href("home.applications.application.insight.clusters.instanceDetails",{application:e.application,instanceId:e.instanceId,provider:e.provider},{inherit:!1});n=Qg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}else n=t.href("home.instanceDetails",{account:e.account,region:e.region,instanceId:e.instanceId,provider:e.provider});return n}}),Om.urlBuilder.register("loadBalancers",new class{build(e,t){const n=t.href("home.applications.application.insight.loadBalancers.loadBalancerDetails",{application:e.application,name:e.loadBalancer,region:e.region||e.namespace,accountId:e.account,vpcId:e.vpcId,provider:e.provider},{inherit:!1});return Qg.buildUrl(n,{q:e.loadBalancer,reg:e.region,acct:e.account})}}),Om.urlBuilder.register("projects",new class{build(e,t){return t.href("home.project.dashboard",{project:e.name},{inherit:!1})}}),Om.urlBuilder.register("securityGroups",new class{build(e,t){const n=t.href("home.firewallDetails",{accountId:e.account,region:e.region,name:e.name,vpcId:e.vpcId,provider:e.provider});return Qg.buildUrl(n)}}),Om.urlBuilder.register("serverGroups",new class{build(e,t){const n=e.project?"project":"applications",a=t.href(`home.${n}.application.insight.clusters.serverGroup`,{application:e.application,accountId:e.account,region:e.region,serverGroup:e.serverGroup,provider:e.provider,project:e.project},{inherit:!1});return Qg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}}),Om.urlBuilder.register("task",new class{build(e,t){return t.href("home.applications.application.tasks.taskDetails",{application:e.application,taskId:e.taskId},{inherit:!1})}}),Om.urlBuilder.register("tasks",new class{build(e,t){return t.href("home.applications.application.tasks",{application:e.application},{inherit:!1})}});class Rg{static parseQueryString(e=""){const t={};return e.split("&").forEach((e=>{let n,a,i;e&&(a=e=e.replace(/\+/g,"%20"),n=e.indexOf("="),-1!==n&&(a=e.substring(0,n),i=e.substring(n+1)),a=this.tryDecodeURIComponent(a),null!==a&&(i=!(i&&i.length>0)||this.tryDecodeURIComponent(i),void 0===t[a]?t[a]=i:Array.isArray(t[a])?t[a].push(i):t[a]=[t[a],i]))})),t}static tryDecodeURIComponent(e){try{return decodeURIComponent(e)}catch(e){return null}}}var Ug,zg;(zg=Ug||(Ug={}))[zg.INITIAL=0]="INITIAL",zg[zg.SEARCHING=1]="SEARCHING",zg[zg.FINISHED=2]="FINISHED",zg[zg.NO_RESULTS=3]="NO_RESULTS",zg[zg.ERROR=4]="ERROR";class Gg{constructor(){this.types=[]}register(e){this.types.push(e)}get(e){return this.types.find((t=>t.id===e))}getAll(){return this.types.slice().sort(((e,t)=>e.order-t.order))}getSearchCategories(){return this.types.map((e=>e.id))}}const jg=new Gg;class Lg{static search(e){if(re(e))return vt(this.EMPTY_RESULTS);const t={...e},n=jg.getAll(),a=new At,i=(t,n)=>{const a=Ae(t.results.map((e=>((e,t)=>({...e,href:Pg.buildFromMetadata(e),displayName:t.displayFormatter(e)}))(e,n))),(e=>e.href)),i=e.key;return{type:n,results:a,status:Ug.FINISHED,query:i}};return vt(n).pipe(Rt((e=>e.search(t,a).pipe(St((t=>i(t,e))),Ut((t=>((e,t)=>Et({error:e,type:t,results:[],status:Ug.ERROR}))(t,e)))))),Pt((e=>a.next(e))),zt((()=>a.complete())))}}Lg.EMPTY_RESULTS=jg.getAll().map((e=>({type:e,results:[],status:Ug.FINISHED})));oi(".glyphicon.healthy,\n.fa.healthy {\n color: var(--color-success);\n}\n.glyphicon.unhealthy,\n.fa.unhealthy {\n color: var(--color-danger);\n}\n.glyphicon.unknown,\n.fa.unknown {\n color: var(--color-dovegray);\n}\nhealth-counts {\n display: inherit;\n}\n.health-counts .instance-health-counts .glyphicon {\n top: 0;\n}\n.health-counts .instance-health-counts .healthy {\n color: var(--color-success);\n}\n.health-counts .instance-health-counts .unhealthy {\n color: var(--color-alert);\n}\n.health-counts .instance-health-counts .dead {\n color: var(--color-danger);\n}\n");class Og extends ot.Component{constructor(e){super(e),this.state=this.calculatePercent(e.container)}calculatePercent(e){const t=(e=e||{}).up||0,n=e.down||0,a=e.succeeded||0,i=e.failed||0,r=e.unknown||0,s=e.starting||0,o=e.total||t+n+r+s+a+i,l=o?Math.floor(100*(t+a)/o):void 0;return{percentLabel:void 0===l?"n/a":l+"%",statusClass:void 0===l?"disabled":100===l?"healthy":l<100&&l>0?"unhealthy":0===l?"dead":"disabled",total:o}}componentWillReceiveProps(e){E(e.container,this.props.container)||this.setState(this.calculatePercent(e.container))}render(){const e=ot.createElement("span",null,ot.createElement("table",{className:"tooltip-table"},ot.createElement("tbody",null,ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"})),ot.createElement("td",null,"Up")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"})),ot.createElement("td",null,"Down")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"})),ot.createElement("td",null,"In transition or no status reported")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"})),ot.createElement("td",null,"Out of Service")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle small"})),ot.createElement("td",null,"Terminated successfully")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle small"})),ot.createElement("td",null,"Terminated unsuccessfully")))),ot.createElement("span",null,this.props.additionalLegendText)),t=this.props.container,n=this.state.percentLabel;let a=!1;const i=[];t.up&&(i.push(ot.createElement("span",{key:"up"}," ",t.up," ",ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"}))),a=!0),t.down&&t.down!==t.missingHealthCount&&(a&&i.push(ot.createElement("span",{key:"downslash"}," / ")),i.push(ot.createElement("span",{key:"down"}," ",t.down," ",ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"}))),a=!0),(t.unknown||t.starting)&&(a&&i.push(ot.createElement("span",{key:"unknownslash"}," / ")),i.push(ot.createElement("span",{key:"unknown"}," ",t.unknown+t.starting," ",ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"}))),a=!0),t.outOfService&&(a&&i.push(ot.createElement("span",{key:"outOfServiceslash"}," / ")),i.push(ot.createElement("span",{key:"outOfService"}," ",t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-OutOfService-triangle disabled small"}))),a=!0),t.succeeded&&(a&&i.push(ot.createElement("span",{key:"succeededslash"}," / ")),i.push(ot.createElement("span",{key:"succeeded"}," ",t.succeeded," ",ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle disabled small"}))),a=!0),t.failed&&(a&&i.push(ot.createElement("span",{key:"failedslash"}," / ")),i.push(ot.createElement("span",{key:"failed"}," ",t.failed," ",ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle disabled small"}))));const r=this.props.className||"";return"n/a"!==n?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Qs,{template:e,placement:this.props.legendPlacement},ot.createElement("span",{className:"counter instance-health-counts"},i,t.unknown!==this.state.total&&ot.createElement("span",null," ",": ",ot.createElement("span",{className:this.state.statusClass},n))))):t.outOfService?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Qs,{template:e},ot.createElement("span",{className:"counter instance-health-counts"},ot.createElement("span",null,t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"}))))):null}}Og.defaultProps={legendPlacement:"top",container:{}};class Yg{static setDataSourceOrder(e){this.dataSourceOrder=e,this.sortDataSources()}static sortDataSources(){let e=this.defaultDataSourceOrder;this.dataSourceOrder.length&&(e=this.dataSourceOrder),this.dataSources.forEach((t=>{e.includes(t.key)||e.push(t.key)})),this.dataSources.sort(((t,n)=>e.indexOf(t.key)-e.indexOf(n.key)))}static registerDataSource(e){this.dataSources.push(e),this.sortDataSources()}static getDataSources(){return p(this.dataSources)}static removeDataSource(e){this.dataSources=this.dataSources.filter((t=>t.key!==e))}static clearDataSources(){this.dataSources.length=0}}Yg.defaultDataSourceOrder=["environments","serverGroups","executions","loadBalancers","securityGroups","tasks","config"],Yg.dataSources=[],Yg.dataSourceOrder=[];class $g{static resetViewedApplications(){this.viewedApplications.length=0}static isInferredApplication(e){return!e.attributes||!e.attributes.email}static checkIfInferredAndWarn(e){this.check(e)&&this.warn(e.name)}static check(e){const{name:t}=e,n=this.viewedApplications.includes(t);return this.viewedApplications.push(t),!n&&this.isInferredApplication(e)}static warn(e){eo.publish({key:"inferredApplicationWarning",action:"create",content:ot.createElement("div",null,"The application ",ot.createElement("b",null,e)," has not been ",ot.createElement("a",{href:`#/applications/${e}/config`},"configured"),".")})}}$g.viewedApplications=[];class Hg{static listApplications(){return Si("/applications").useCache().get()}static getApplicationAttributes(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>(this.splitAttributes(e.attributes,["accounts","cloudProviders"]),e.attributes)))}static getApplicationPermissions(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>e.attributes.permissions))}static getApplication(e,t=!0){return Si("/applications").path(e).query({expand:t}).get().then((e=>{const t=Yg.getDataSources(),n=new Fh(e.name,_s.createScheduler(),t);return n.attributes=e.attributes,this.splitAttributes(n.attributes,["accounts","cloudProviders"]),this.setDisabledDataSources(n),n.refresh(),n}))}static splitAttributes(e,t){t.forEach((t=>{e[t]?Array.isArray(e[t])||(e[t]=e[t].split(",").map((e=>e.trim()))):e[t]=[]}))}static setDisabledDataSources(e){const t=e.dataSources,n=e.attributes.dataSources;n?t.forEach((t=>{t.optional&&(t.optIn?this.setDataSourceDisabled(t,e,!n.enabled.includes(t.key)):this.setDataSourceDisabled(t,e,n.disabled.includes(t.key)))})):(t.filter((e=>e.optIn)).forEach((t=>this.setDataSourceDisabled(t,e,!0))),$g.isInferredApplication(e)&&t.filter((e=>e.requireConfiguredApp)).forEach((t=>this.setDataSourceDisabled(t,e,!0)))),t.filter((e=>e.requiresDataSource)).forEach((n=>{const a=t.find((e=>e.key===n.requiresDataSource));a&&this.setDataSourceDisabled(n,e,a.disabled)}))}static setDataSourceDisabled(e,t,n){e.disabled=n,e.badge&&(t.dataSources.find((t=>t.key===e.badge)).disabled=n)}}function Vg(e){const{result:t,status:n}=Vo((()=>Hg.listApplications().then((e=>e.map((e=>e.name)).sort()))),[],[]),a=pt((()=>t.map((e=>({label:e,value:e})))),[t]),i=Ko((e=>{if("PENDING"===n)return Rr("Loading apps...");const a=(e?"string"==typeof e?[e]:e:[]).find((e=>!t.includes(e)));return a?Ur(`Application ${a} does not exist.`):void 0}));return No(e.validation,i,[t,n]),ot.createElement(Kr,{...e,mode:"VIRTUALIZED",options:a,isLoading:"PENDING"===n})}class Jg{static get BACKSPACE(){return"Backspace"}static get DOWN_ARROW(){return"ArrowDown"}static get DELETE(){return"Delete"}static get ENTER(){return"Enter"}static get ESCAPE(){return"Escape"}static get LEFT_ARROW(){return"ArrowLeft"}static get RIGHT_ARROW(){return"ArrowRight"}static get UP_ARROW(){return"ArrowUp"}}class Wg extends ot.Component{constructor(e){super(e),this.handleClusterChange=e=>{this.props.onChange&&this.props.onChange({clusterName:e.currentTarget.value})},this.toggleFreeFormClusterField=()=>this.setState({freeFormClusterField:!this.state.freeFormClusterField});const{clusters:t,model:n}=this.props,a=!(Array.isArray(t)&&t.some((e=>e===n))),i=null!=n||""!==(n||"").trim();this.state={freeFormClusterField:!!i&&a}}render(){return ot.createElement("div",null,ot.createElement("div",null,!this.state.freeFormClusterField&&ot.createElement("select",{className:"form-control input-sm",onChange:this.handleClusterChange,required:this.props.required,value:this.props.model||""},ot.createElement("option",{value:""},"-- select cluster --"),(this.props.clusters||[]).map((e=>ot.createElement("option",{key:e,value:e},e)))),this.state.freeFormClusterField&&ot.createElement("input",{type:"text",className:"form-control input-sm",required:this.props.required,value:this.props.model||"",onChange:this.handleClusterChange,onBlur:this.handleClusterChange})),ot.createElement("div",{className:"pull-right"},!this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for text input"),this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for list of existing clusters")))}}class Kg extends ot.Component{render(){const{matches:e}=this.props;return e&&e.length?ot.createElement("ul",{className:"nostyle"},e.map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(ts,{account:e.account}),ot.createElement("span",{className:"break-word"},e.name),e.regions&&e.regions.length&&ot.createElement("i",null," in ",e.regions.join(", ")))))):ot.createElement("div",null,"(no matches)")}}const qg="spinnaker.core.widget.cluster.clusterMatches.component";n(qg,[]).component("clusterMatches",yn(Gl(Kg,"clusterMatches"),["matches"]));class Xg extends ot.Component{constructor(e){super(e),this.valueChanged=({target:{value:e}})=>{const t=parseInt(e,10);this.props.onChange(isNaN(t)?e:t)},this.state={expressionActive:w(e.value),glowing:!1}}componentWillReceiveProps(e){const t=w(e.value);this.state.expressionActive!==t&&this.setState({expressionActive:t})}setExpressionActive(e){this.setState({expressionActive:e})}setGlow(e){this.setState({glowing:e})}render(){const{expressionActive:e,glowing:t}=this.state,{value:n,min:a,max:i,required:r=!1,error:s,disabled:o}=this.props;return ot.createElement("div",{className:"navbar-form",style:{padding:0,margin:0,display:"inline-block"}},ot.createElement(Qs,{value:s,placement:"right"},ot.createElement("div",{className:`button-input${t&&!s?" focus":""}${s?" invalid":""}`},ot.createElement("span",{className:"btn-group btn-group-xs",role:"group"},ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"":"active"),onClick:()=>this.setExpressionActive(!1),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Qs,{value:"Toggle to enter number"},ot.createElement("span",null,"Num"))),ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"active":""),onClick:()=>this.setExpressionActive(!0),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Qs,{value:"Toggle to enter expression"},ot.createElement("span",null,"${","β¦","}")))),ot.createElement("input",{type:e?"text":"number",disabled:o,className:"form-control borderless inline-"+(e?"text":"number"),value:n,min:a,max:i,onChange:this.valueChanged,onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1),required:r}))))}}var Zg,_g;(_g=Zg||(Zg={}))[_g.BACKSPACE=0]="BACKSPACE",_g[_g.REMOVE=1]="REMOVE";class eh extends ot.Component{constructor(){super(...arguments),this.refCallback=e=>{e&&this.props.onCreate(e)},this.handleFocus=()=>{this.props.onFocus()},this.handleBlur=()=>{this.props.onBlur()},this.handleKeyUp=e=>{switch(e.key){case Jg.BACKSPACE:case Jg.DELETE:this.props.onDelete(this.props.tag,0);break;case Jg.LEFT_ARROW:case Jg.RIGHT_ARROW:this.props.onKeyUp(this.props.tag,e.key)}},this.handleRemoveClick=()=>{this.props.onDelete(this.props.tag,1)}}render(){const{key:e,text:t}=this.props.tag;return ot.createElement("div",{ref:this.refCallback,className:"tag",onBlur:this.handleBlur,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp,tabIndex:-1},ot.createElement("div",{className:"tag__category"},e.toLocaleUpperCase()),ot.createElement("div",{className:"tag__label"},t),ot.createElement("div",{className:"tag__remove"},ot.createElement("i",{className:"fa fa-times-circle",onClick:this.handleRemoveClick})))}}eh.defaultProps={onBlur:()=>{},onCreate:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{}};oi(".tag-list {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.tag-list .tag {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n cursor: default;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n font-size: 14px;\n margin-right: 10px;\n}\n.tag-list .tag .tag__category {\n background-color: var(--color-primary);\n border-radius: 4px 0 0 4px;\n color: var(--color-white);\n padding: 8px;\n}\n.tag-list .tag .tag__label {\n background-color: var(--color-accent-g2);\n color: var(--color-primary);\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n padding: 8px;\n}\n.tag-list .tag .tag__remove {\n background-color: var(--color-accent-g2);\n border-radius: 0 4px 4px 0;\n color: var(--color-primary);\n padding: 8px;\n}\n.tag-list .tag .tag__remove .fa.fa-times-circle {\n cursor: pointer;\n}\n");class th extends ot.Component{constructor(){super(...arguments),this.tagElements=[],this.handleBlur=()=>{this.props.onBlur()},this.handleCreate=e=>{this.tagElements.push(e),this.props.onUpdate(this.tagElements)},this.handleDelete=(e,t)=>{const n=this.findIndex(e);switch(this.tagElements.splice(n,1),this.props.onUpdate(this.tagElements),t){case Zg.BACKSPACE:this.tagElements.length?(0===n?this.tagElements[0].focus():n<=this.tagElements.length-1?this.tagElements[n].focus():this.tagElements[n-1].focus(),this.props.onDelete(e,!1)):this.props.onDelete(e,!0);break;case Zg.REMOVE:this.props.onDelete(e,!0)}Ui.log({category:"Infrastructure Search Tags",action:"Individual tag removed"})},this.handleFocus=()=>{this.props.onFocus()},this.handleKeyUp=(e,t)=>{const n=this.findIndex(e);switch(t){case Jg.LEFT_ARROW:0===n?this.props.onKeyUp():this.tagElements[n-1].focus();break;case Jg.RIGHT_ARROW:n===this.tagElements.length-1?this.props.onKeyUp():this.tagElements[n+1].focus()}}}findIndex(e){return this.props.tags.findIndex((t=>e===t))}render(){const e=this.props.tags||[];return ot.createElement("div",{className:"tag-list"},e.map((e=>ot.createElement(eh,{key:[e.key,e.text].join("|"),tag:e,onBlur:this.handleBlur,onCreate:this.handleCreate,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp}))))}}th.defaultProps={onBlur:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{},onUpdate:()=>{}};class nh extends ot.Component{render(){return ot.createElement("div",{className:"table-header"},this.props.children)}}class ah extends ot.Component{render(){return ot.createElement("div",{className:"table-row small"},this.props.children)}}class ih extends ot.Component{render(){return ot.createElement("div",{className:"table-contents flex-fill"},this.props.children)}}const rh=e=>`col-${Ee(e)}`;class sh extends ot.Component{render(){const{col:e}=this.props;return ot.createElement("div",{className:rh(e.key)},e.label||N(e.key))}}class oh extends ot.Component{render(){const{item:e,col:t,defaultValue:n,children:a}=this.props;return ot.createElement("div",{className:rh(t.key)},a||e[t.key]||n)}}class lh extends ot.Component{render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:rh(t.key)},ot.createElement("a",{href:e.href},e[t.key]))}}class ch extends ot.Component{render(){const{item:e,col:t}=this.props,n=e[t.key];if(!n)return ot.createElement("div",{className:rh(t.key)},"-");const a=(Array.isArray(n)?n:n.split(",")).sort();return ot.createElement("div",{className:rh(t.key)},a.map((e=>ot.createElement(ts,{key:e,account:e}))))}}class ph extends ot.Component{cellContent(e){switch(e){case void 0:return ot.createElement(Es,{size:"small"});case null:return ot.createElement("span",null,"?");default:return ot.createElement(Og,{container:e})}}render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:rh(t.key)},this.cellContent(e[t.key]))}}class dh extends ot.Component{render(){const{isActive:e,resultSet:t}=this.props,{type:n,results:a,status:i,error:r}=t,s=n.iconClass,o=a.length,l=o<md.DEFAULT_PAGE_SIZE?`${o}`:`${o}+`,c=()=>{switch(i){case Ug.SEARCHING:return ot.createElement(Es,{size:"small"});case Ug.ERROR:return ot.createElement(Qs,{value:r&&r.toString()},ot.createElement("i",{className:"fa fa-exclamation-triangle"}));default:return a.length?ot.createElement("div",{className:"badge"},l):ot.createElement("div",{className:"badge faded"},l)}},p=e?"search-group--focus":"search-group--blur";return ot.createElement("div",{className:`flex-container-h baseline search-group ${p}`},ot.createElement("span",{className:`flex-nogrow search-group-icon ${s}`}),ot.createElement("div",{className:"flex-grow search-group-name"},n.displayName),ot.createElement("div",{className:"flex-nogrow"},ot.createElement(c,null)))}}class uh{constructor(){this.fieldsRequired=[],this.TabComponent=dh}search(e,t){const{cloudProvider:n,key:a,...i}=e,r={...i,q:a,cloudProvider:n,type:this.id};return Object.keys(i).length>0&&(r.allowShortQuery="true"),vt(md.search(r))}}const mh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement(Es,{size:"large",message:"Fetching search results ..."})),gh=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No ",e.type.displayName," found for the specified search query")),hh=({resultSet:e})=>{const{type:t}=e,{HeaderComponent:n,DataComponent:a}=t;return ot.createElement("div",{className:"search-result-grid flex-fill",style:{height:"initial"}},ot.createElement("div",{className:`table table-search-results table-search-results-${Ee(t.id)}`},ot.createElement(n,{resultSet:e}),ot.createElement(a,{resultSet:e})))},fh=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h4",{className:"error-message"},"Could not fetch ",e.type.displayName),ot.createElement("div",{className:"error-message"},e&&e.error&&e.error.toString()));class vh extends ot.Component{render(){const e=this.props.resultSet||{},{status:t,results:n}=e;switch(t){case Ug.INITIAL:case void 0:return null;case Ug.ERROR:return ot.createElement(fh,{resultSet:e});case Ug.SEARCHING:return ot.createElement(mh,null);case Ug.FINISHED:return n.length?ot.createElement(hh,{resultSet:e}):ot.createElement(gh,{resultSet:e});default:return null}}}var Ah=Object.defineProperty,Eh=Object.getOwnPropertyDescriptor;let bh=class extends ot.Component{render(){const{activeSearchResultType:e}=this.props,t=this.props.resultSets.slice().sort(((e,t)=>e.type.order-t.type.order));return ot.createElement("ul",{className:"search-groups nostyle"},t.map((t=>{const{type:n}=t,{TabComponent:a}=n,i=n===e;return ot.createElement(Dn,{key:n.id,to:".",params:{tab:n.id}},ot.createElement("li",null,ot.createElement(a,{resultSet:t,isActive:i})))})))}};bh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Eh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Ah(t,n,r),r})([na],bh);oi(".table-search-results {\n width: auto;\n overflow-x: auto;\n white-space: nowrap;\n word-break: break-all;\n}\n.table-search-results .table-header {\n position: sticky;\n top: 0;\n font-weight: 600;\n background-color: var(--color-alabaster);\n z-index: 2;\n}\n.table-search-results .table-header .fa {\n padding-left: 2px;\n}\n.table-search-results .table-header .fa.disabled {\n color: var(--color-alto);\n}\n.table-search-results .table-header .table-header {\n background-color: var(--color-alabaster);\n}\n.table-search-results .table-header,\n.table-search-results .table-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.table-search-results .table-header > div,\n.table-search-results .table-row > div {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 10px;\n display: inline-block;\n width: 150px;\n word-break: break-all;\n white-space: normal;\n border-bottom: 1px solid var(--color-alto);\n}\n.table-search-results .table-row > div {\n background-color: var(--color-alabaster);\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.table-search-results .table-row:nth-child(even) > div {\n background-color: var(--color-white);\n}\n.table-search-results .table-row:hover > div {\n background-color: var(--color-cirrus);\n}\n.table-search-results .table-row.active > div {\n background-color: var(--color-accent-g2);\n}\n.search-results {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-top: 10px;\n height: 100%;\n overflow: hidden;\n}\n.search-results .faded {\n opacity: 0.2;\n}\n.search-results .search-groups {\n background-color: var(--color-alabaster);\n cursor: default;\n min-width: 275px;\n width: 275px;\n}\n.search-results .search-groups .search-group {\n cursor: pointer;\n padding: 10px;\n margin-bottom: 1px;\n}\n.search-results .search-groups .search-group .search-group-icon {\n background-color: var(--color-primary);\n border: 2px solid var(--color-white);\n border-radius: 50%;\n color: var(--color-white);\n display: inline-block;\n height: 32px;\n line-height: 29px;\n margin-right: 10px;\n text-align: center;\n width: 32px;\n}\n.search-results .search-groups .search-group .search-group-name {\n color: var(--color-primary);\n font-size: 110%;\n font-weight: 600;\n text-transform: uppercase;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.search-results .search-groups .search-group .badge {\n background-color: var(--color-primary);\n border-radius: 3px;\n}\n.search-results .search-groups .search-group.search-group--focus {\n background-color: var(--color-accent-g2);\n}\n.search-results .search-groups .search-group.search-group--blur {\n background-color: var(--color-alabaster);\n}\n.search-results .search-groups .search-group:hover {\n background-color: var(--color-accent-g2);\n -webkit-transition: all 0.15s ease-in-out;\n transition: all 0.15s ease-in-out;\n}\n.search-results .search-groups .search-group:hover.faded {\n background-color: var(--color-alabaster);\n}\n.search-results .search-result-grid {\n padding-left: 15px;\n}\n.search-results .search-result-grid .small {\n font-size: 90%;\n}\n.search-results .search-result-grid .table-contents.flex-fill {\n height: inherit;\n}\n");const yh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No results found for the specified search query"));class wh extends ot.Component{constructor(){super(...arguments),this.state={active:null}}componentWillReceiveProps(e){const{resultSets:t,selectedTab:n}=e,a=t.map((e=>e.type)).find((e=>e.id===n));this.setState({active:a})}render(){const{resultSets:e,isSearching:t}=this.props,{active:n}=this.state,a=n&&e.find((e=>e.type===n)),i=e.every((e=>e.status===Ug.FINISHED&&0===e.results.length));return ot.createElement("div",{className:"search-results"},ot.createElement(bh,{resultSets:e,activeSearchResultType:n}),a&&ot.createElement(vh,{resultSet:a}),!a&&t&&ot.createElement(mh,null),i&&!n&&ot.createElement(yh,null))}}class xh{constructor(e,t){this.$q=e,this.providerServiceDelegate=t,this.querySubject=new At,this.querySubject.pipe(Dt((e=>{if(!e||""===e.trim()){const e=jg.getAll().map((e=>({type:e,results:[],status:Ug.INITIAL})));return Et(e)}return Lg.search({key:e}).pipe(Gt())}))).subscribe((e=>{this.deferred.resolve(e)}))}query(e){return this.deferred=this.$q.defer(),this.querySubject.next(e),this.deferred.promise}getCategoryConfig(e){return jg.get(e)}formatRouteResult(e,t){return this.formatResult(e,t,!0)}formatResult(e,t,n=!1){const a=jg.get(e);if(!a)return this.$q.when("");let i=a.displayFormatter;if(this.providerServiceDelegate.hasDelegate(t.provider,"search.resultFormatter")){const n=this.providerServiceDelegate.getDelegate(t.provider,"search.resultFormatter");n[e]&&(i=n[e])}return this.$q.when(i(t,n))}}class Ch{constructor(e,t){this.$q=e,this.providerServiceDelegate=t}getSearcher(){return new xh(this.$q,this.providerServiceDelegate)}}Ch.$inject=["$q","providerServiceDelegate"];const kh="spinnaker.infrastructure.search.service";n(kh,[gp]).service("infrastructureSearchService",Ch);class Bh extends ot.Component{constructor(){super(...arguments),this.handleClick=()=>{const{filterType:e,onClick:t}=this.props,{name:n,key:a}=e;t([n,a].join("|"))},this.handleKeyUp=e=>{this.props.onKeyUp(e)},this.handleMouseDown=e=>{this.props.onMouseDown(e)}}render(){const{isActive:e}=this.props,t=wn({filter:!0,"filter--focus":e,"filter--blur":!e}),{key:n,name:a}=this.props.filterType;return ot.createElement("div",{role:"option",className:t,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown},ot.createElement("div",{className:"filter__text"},a),ot.createElement("div",{className:"filter__modifier"},"[",n.toLocaleUpperCase(),":]"))}}Bh.defaultProps={onClick:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};oi(".filter-list {\n background-color: var(--color-white);\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n cursor: default;\n margin-top: 40px;\n position: absolute;\n white-space: pre;\n width: 200px;\n z-index: 1000;\n}\n.filter-list.filter-list__open {\n display: block;\n}\n.filter-list.filter-list__closed {\n display: none;\n}\n.filter-list .filter-list__header {\n color: var(--color-concrete);\n margin-left: 5px;\n margin-top: 10px;\n margin-left: 10px;\n}\n.filter-list .filter {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n cursor: pointer;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 5px 5px 5px 10px;\n}\n.filter-list .filter .filter__text {\n font-size: 14px;\n color: var(--color-mineshaft);\n}\n.filter-list .filter .filter__modifier {\n font-size: 14px;\n color: var(--color-concrete);\n margin-left: 5px;\n}\n.filter-list .filter.filter--focus {\n border-color: var(--color-accent-g1);\n background-color: var(--color-accent-g2);\n}\n.filter-list .filter.filter--blur {\n background-color: var(--color-white);\n}\n.filter-list .filter:hover {\n background-color: var(--color-accent-g2);\n border-color: var(--color-accent-g1);\n}\n");class Sh extends ot.Component{constructor(){super(...arguments),this.filters=[],this.refCallback=e=>{this.filters.push(e)},this.handleClick=e=>{const t=this.filters.find((t=>{const{name:n,key:a}=t.props.filterType;return e===[n,a].join("|")}));this.props.filterClicked(t)},this.handleKeyUp=e=>{switch(e.key){case Jg.UP_ARROW:case Jg.DOWN_ARROW:this.props.onKeyUp(e.key)}},this.handleMouseDown=()=>{this.props.onMouseDown()}}generateFilterElement(e){const{name:t,key:n}=e;return ot.createElement(Bh,{key:[t,n].join("|"),ref:this.refCallback,filterType:e,isActive:this.props.activeFilter.key===n,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown})}renderFilterLayout(e){const{header:t,filterTypes:n}=e,a=(n||[]).map((e=>this.generateFilterElement(e)));return ot.createElement("div",{key:[t,n.length].join("|")},ot.createElement("div",{className:"filter-list__header"},t),ot.createElement("div",{role:"listbox"},a))}render(){const{layouts:e,isOpen:t}=this.props,n=wn({"filter-list":!0,"filter-list__open":t,"filter-list__closed":!t}),a=(e||[]).map((e=>this.renderFilterLayout(e)));return ot.createElement("div",{className:n},a)}}Sh.defaultProps={filterClicked:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};class Mh{constructor(){this.KEYWORD_FILTER=Object.freeze({key:"key",name:"Keyword"}),this.NAME_FILTER=Object.freeze({key:"name",name:"Name"}),this.registry=new Map,this.register(this.KEYWORD_FILTER),this.register(this.NAME_FILTER)}register(e){this.registry.set(e.key,e)}getFilterType(e){return this.registry.get(e)}getFilterByModifier(e){return[...this.registry.values()].find((t=>e===t.key))}getRegisteredFilterKeys(){return[...this.registry.keys()]}getValues(){const e=Array.from(this.registry.values());return e.sort(((e,t)=>e.name.localeCompare(t.name))),e}}const Nh=new Mh;oi(".search {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.search .search__icon {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n}\n.search .search__input {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n color: var(--color-mineshaft);\n background: var(--color-white) none;\n border: 1px solid;\n border-radius: 4px;\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.search .search__input .search__input-wrapper {\n -webkit-box-align: baseline;\n -ms-flex-align: baseline;\n align-items: baseline;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1 1;\n flex: 1 1;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control {\n border: none;\n max-width: 100%;\n outline: 0;\n padding-right: 10px;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control::-moz-placeholder {\n color: var(--color-concrete);\n opacity: 1;\n}\n.search .search__input .search__input-wrapper .search__input-control:-ms-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .search__input-control::-webkit-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .fa.fa-times {\n cursor: pointer;\n}\n.search .search__input.search__input--focus {\n border-color: var(--color-accent);\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px -2px var(--color-accent);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px -2px var(--color-accent);\n}\n.search .search__input.search__input--blur {\n border-color: var(--color-alto);\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n");class Dh extends ot.Component{constructor(e){super(e),this.filterTypes=[],this.tagElements=[],this.mouseDownFired=!1,this.handleTagListUpdate=e=>{this.tagElements=e},this.refCallback=e=>{this.inputElement=e},this.handleBlur=()=>{this.mouseDownFired||this.setState({isFocused:!1,isOpen:!1})},this.handleChange=()=>{let e;const t=this.inputElement.value.trim();if(this.hasModifier(t)){const n=this.getModifier(t);e={activeFilter:this.filterTypes.find((e=>e.key===n)),isOpen:!0}}else e={isOpen:!!t};this.setState(e)},this.handleDelete=(e,t)=>{const n=this.state.tags.filter((t=>e!==t));this.setState({isFocused:!0,tags:n}),this.props.onChange(n),t&&this.inputElement.focus()},this.handleFocus=()=>{this.setState({isFocused:!0})},this.handleKeyUpFromInput=e=>{const t=this.tagElements.length;switch(e.key){case Jg.LEFT_ARROW:!this.inputElement.value&&t>=1&&this.tagElements[t-1].focus();break;case Jg.RIGHT_ARROW:this.inputElement.value||0===t||this.tagElements[0].focus();break;case Jg.UP_ARROW:this.navigateUp();break;case Jg.DOWN_ARROW:this.navigateDown();break;case Jg.ENTER:this.handleFilterSelection();break;case Jg.ESCAPE:{const e=this.inputElement.value;this.hasModifier(e)&&!this.getSearchText(e)&&(this.inputElement.value=""),this.setState({activeFilter:Nh.KEYWORD_FILTER,isOpen:!1});break}}},this.handleKeyUpFromTag=()=>{this.inputElement.focus()},this.filterClicked=e=>{this.handleFilterSelection(e.props.filterType),this.mouseDownFired=!1},this.handleKeyUp=e=>{switch(e){case Jg.UP_ARROW:this.navigateUp();break;case Jg.DOWN_ARROW:this.navigateDown()}},this.handleMouseDown=()=>{this.mouseDownFired=!0},this.handleClearClick=()=>{this.setState({isOpen:!1,tags:[]}),this.inputElement.value="",this.inputElement.focus(),this.props.onChange([])};const t=[];t.push({header:"SEARCH",filterTypes:[Nh.KEYWORD_FILTER]}),this.filterTypes=this.reorderFilterTypesForSearch(Nh.getValues()),t.push({header:"FILTER ON",filterTypes:this.filterTypes.filter((e=>e.key!==Nh.KEYWORD_FILTER.key))}),this.keys=new Set(Nh.getValues().map((e=>e.key))),this.state={activeFilter:Nh.KEYWORD_FILTER,isFocused:!0,isOpen:!1,layouts:t,tags:this.buildTagsFromParams(e.params,[])}}componentWillReceiveProps(e){const t=this.buildTagsFromParams(e.params,this.state.tags);this.setState({tags:t})}reorderFilterTypesForSearch(e){const t=new Set([Nh.KEYWORD_FILTER.key,Nh.NAME_FILTER.key]),n=e.filter((e=>!t.has(e.key)));return n.unshift(Nh.NAME_FILTER),n.unshift(Nh.KEYWORD_FILTER),n}buildTagsFromParams(e,t){const n=t.filter((t=>e[t.key])).map((t=>({key:t.key,text:e[t.key]}))),a=Object.keys(e).filter((t=>!!e[t]&&!n.some((e=>e.key===t)))).map((t=>({key:t,text:e[t]})));return n.concat(a)}isLongEnoughIfKeyword(e){return e.key!==Nh.KEYWORD_FILTER.key||e.key===Nh.KEYWORD_FILTER.key&&e.text.length>2}hasModifier(e){const t=e.indexOf(":");return this.keys.has(e.substring(0,t).toLocaleLowerCase())&&t!==e.length}getModifier(e){return e.substring(0,e.indexOf(":")).toLocaleLowerCase()}getSearchText(e){const t=e.trim(),n=t.split(":")[1]||"";return this.hasModifier(t)?n.trim():t}buildTagFromInputString(e=this.state.activeFilter){const t=this.inputElement.value.trim(),n=this.getSearchText(t).trim();if(!t||!n)return null;return{key:this.hasModifier(t)?this.getModifier(t):e.key,text:n}}getActiveFilterIndex(){return this.filterTypes.findIndex((e=>e===this.state.activeFilter))}getActiveFilterText(e){let t;const n=this.inputElement.value.trim();if(this.hasModifier(n)){const a=this.getModifier(n),i=new RegExp(a,"i");t=`${n.replace(i,e.key)}`}else t=`${e.key}:${n}`;return t}navigateUp(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=0===t?e[e.length-1]:e[t-1];this.navigate(n)}navigateDown(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=t===e.length-1?e[0]:e[t+1];this.navigate(n)}navigate(e){const t=this.state.isOpen?e:Nh.KEYWORD_FILTER,n={activeFilter:t};this.inputElement.value=this.getActiveFilterText(t),this.setState({...n,isOpen:!0})}handleFilterSelection(e){const t=this.buildTagFromInputString(e);if(t&&this.isLongEnoughIfKeyword(t)){const e=this.state.tags.filter((e=>e.key!==t.key)).concat(t);this.setState({activeFilter:Nh.KEYWORD_FILTER,isOpen:!1,tags:e}),this.inputElement.value="",this.props.onChange(e)}}render(){const{activeFilter:e,isFocused:t,isOpen:n,layouts:a,tags:i}=this.state,r=wn({search__input:!0,"search__input--focus":t,"search__input--blur":!t});return ot.createElement("div",{className:"search"},ot.createElement("i",{className:"fa fa-search search__icon"}),ot.createElement("span",{className:"search-label"},"Search"),ot.createElement("div",{className:r},ot.createElement(th,{tags:i,onBlur:this.handleBlur,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromTag,onUpdate:this.handleTagListUpdate}),ot.createElement("div",{className:"search__input-wrapper"},ot.createElement("input",{type:"text",ref:this.refCallback,autoFocus:!0,className:"search__input-control",placeholder:`projects, applications, clusters, load balancers, server groups, ${Vs.get("firewalls")}`,onBlur:this.handleBlur,onChange:this.handleChange,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromInput}),ot.createElement("i",{className:"fa fa-times",onClick:this.handleClearClick}),ot.createElement(Sh,{activeFilter:e,isOpen:n,layouts:a,filterClicked:this.filterClicked,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown}))))}}jg.register(new class extends uh{constructor(){super(...arguments),this.id="securityGroups",this.order=6,this.displayName=Vs.get("Firewalls"),this.iconClass="fa fa-exchange-alt",this.cols={NAME:{key:"name"},ACCOUNT:{key:"account"},REGION:{key:"region"}},this.TabComponent=dh,this.HeaderComponent=()=>ot.createElement(nh,null,ot.createElement(sh,{col:this.cols.NAME}),ot.createElement(sh,{col:this.cols.ACCOUNT}),ot.createElement(sh,{col:this.cols.REGION})),this.DataComponent=({resultSet:e})=>{const t=e=>[e.id,e.name,e.account,e.region].join("|"),n=(e,t)=>{const n=e.name.localeCompare(t.name);return 0!==n?n:e.region.localeCompare(t.region)},a=e.results.slice().sort(n);return ot.createElement(ih,null,a.slice().sort(n).map((e=>ot.createElement(ah,{key:t(e)},ot.createElement(lh,{item:e,col:this.cols.NAME}),ot.createElement(ch,{item:e,col:this.cols.ACCOUNT}),ot.createElement(oh,{item:e,col:this.cols.REGION})))))}}displayFormatter(e){return`${e.name} (${e.region})`}});class Ih{constructor(e,t){if(this.application=t,this.autoActivate=!1,this.lazy=!1,this.optIn=!1,this.optional=!1,this.primary=!1,this.requireConfiguredApp=!1,this.visible=!0,this.hidden=!1,this.loaded=!1,this.loading=!1,this.disabled=!1,this.loadFailure=!1,this.active=!1,this.debugEnabled=!1,Object.assign(this,e),!e.hasOwnProperty("defaultData"))throw new Error("The defaultData field is required when registering a data source.\n\ndefaultData accepts the initial default value that will be used before data has been fetched.\nFor example, if your data source holds an array of objects, you should set defaultData to an empty array.");this.data=this.data||this.defaultData,this.label=Vs.get(e.label||yr(e.key)),!e.activeState&&this.sref&&(this.activeState="**"+this.sref+".**"),e.autoActivate&&(hi.$uiRouter.transitionService.onSuccess({entering:this.activeState},(()=>this.activate())),hi.$uiRouter.transitionService.onSuccess({exiting:this.activeState},(()=>this.deactivate()))),this.destroy$=new At,this.fetchRequest$=new At,this.status$=new wt({status:"NOT_INITIALIZED",loaded:this.loaded,lastRefresh:0,error:null,data:this.data}),this.data$=new wt(this.data),this.refresh$=this.data$.pipe(jt(1)),this.refreshFailure$=this.status$.pipe(jt(1),Tt((({status:e})=>"ERROR"===e))),this.throwFailures$=this.refreshFailure$.pipe(St((({error:e})=>{throw e}))),this.nextRefresh$=bt(this.data$.pipe(jt(1)),this.throwFailures$).pipe(Lt(1));const n=this.fetchRequest$.pipe(Pt((()=>this.debug("fetch requested..."))),Dt((()=>vt(this.loader(this.application)).pipe(Rt((e=>this.onLoad(this.application,e))),St((e=>({status:"FETCHED",lastRefresh:Date.now(),data:e}))),Ut((e=>Et({status:"ERROR",lastRefresh:this.lastRefresh,data:this.data,error:e}))),Ot({status:"FETCHING",lastRefresh:this.lastRefresh,data:this.data})))),Ot(this.status$.value),It(this.destroy$)),a=vt(Ze.resolve());n.pipe(Yt(a)).subscribe((([e,t])=>{this.statusUpdated(e),e.loaded=this.loaded,"FETCHED"===e.status&&(this.updateData(e.data),this.afterLoad&&this.afterLoad(this.application),this.addAlerts()),this.status$.next(e)}))}dataUpdated(e){if(this.loaded){this.updateData(void 0!==e?e:this.data);const t={data:this.data,...this.status$.value};this.status$.next(t)}}statusUpdated(e){const{status:t}=e;this.status=e,this.loaded="FETCHED"===t||this.loaded,this.loading="FETCHING"===t,this.loadFailure="ERROR"===t,this.lastRefresh=e.lastRefresh,this.debug(`status: ${e.status}`)}destroy(){this.destroy$.next()}onNextRefresh(e,t,n){const a=this.nextRefresh$.subscribe((e=>t(e)),(e=>n&&n(e)));return e&&e.$on("$destroy",(()=>a.unsubscribe())),()=>a.unsubscribe()}onRefresh(e,t,n){const a=this.refreshFailure$.pipe(Rt((({error:e})=>(n&&n(e),xt())))),i=bt(this.data$.pipe(jt(1)),a).subscribe((e=>t(e)));return e&&e.$on("$destroy",(()=>i.unsubscribe())),()=>i.unsubscribe()}ready(){return this.disabled||this.loaded||this.lazy&&!this.active?Ze.resolve(this.data):Xi(this.nextRefresh$)}activate(){this.active||(this.active=!0,this.loaded||this.refresh())}deactivate(){this.active=!1}updateData(e){this.data=e||this.defaultData,this.data$.next(this.data),this.debug("this.data:",this.data)}refresh(e){if(this.debug(`refresh(${e})`),!this.loader||this.disabled||this.lazy&&!this.active)return this.loaded=!1,this.updateData(this.defaultData),Ze.resolve(this.data);const t=Xi(this.data$.pipe(jt(1),Lt(1)));return this.loading&&!e?Xe.info(`${this.key} still loading, skipping refresh`):this.fetchRequest$.next(),t}addAlerts(){this.alerts=[],Array.isArray(this.data)&&this.data.length&&(this.alerts=this.data.filter((e=>{var t,n,a;return null!=(a=null==(n=null==(t=e.entityTags)?void 0:t.alerts)?void 0:n.length)?a:0})).map((e=>e.entityTags)))}debug(e,t){this.debugEnabled&&console.log(`DEBUG ${this.application.name}.${this.key}: ${e}`,t)}}class Fh{constructor(e,t,n){this.applicationName=e,this.scheduler=t,this.dataSources=[],this.accounts=[],this.clusters=[],this.defaultCredentials={},this.defaultRegions={},this.attributes={},this.notFound=!1,this.hasError=!1,this.isStandalone=!1,this.isManagementPaused=!1,this.activeState=null,this.refreshListeners=[],this.activeDataSource$=new Ct(1),this.activeStateChangeStream=new At,this.refreshStream=new At,this.refreshFailureStream=new At,n.forEach((e=>this.addDataSource(e))),this.status$=kt(this.dataSources.map((e=>e.status$))).pipe(St((e=>this.getDerivedApplicationStatus(e))))}get name(){return this.applicationName}getDerivedApplicationStatus(e){const t=e.some((({status:e})=>"ERROR"===e))?"ERROR":void 0,n=e.some((({status:e})=>"FETCHING"===e))?"FETCHING":void 0,a=e.some((({status:e})=>"FETCHED"===e))?"FETCHED":void 0,i=t||n||a||"NOT_INITIALIZED",r=e.every((({status:e})=>["FETCHED","NOT_INITIALIZED"].includes(e))),s=e.reduce(((e,t)=>Math.max(e,t.lastRefresh||0)),0),o=e.every((({loaded:e})=>e));return{status:i,lastRefresh:r?s:this.lastRefresh,loaded:o,data:void 0}}addDataSource(e){const t=new Ih(e,this);this.dataSources.push(t),this[e.key]=t}getDataSource(e){return this.dataSources.find((t=>t.key===e))}refresh(e){return this.dataSources.filter((e=>!e.visible)).forEach((t=>t.refresh(e))),this.refreshListeners.forEach((e=>e())),Ze.all(this.dataSources.filter((e=>e.visible)).map((t=>t.refresh(e)))).then((()=>this.applicationLoadSuccess()),(e=>this.applicationLoadError(e)))}ready(){return Ze.all(this.dataSources.filter((e=>void 0!==e.onLoad&&e.visible)).map((e=>e.ready())))}onRefresh(e,t,n){const a=this.refreshStream.subscribe(t);let i=null;n&&(i=this.refreshFailureStream.subscribe(n));const r=()=>{a.unsubscribe(),i&&i.unsubscribe()};return e&&e.$on("$destroy",(()=>r())),r}enableAutoRefresh(){this.dataLoader=this.scheduler.subscribe((()=>this.refresh()))}disableAutoRefresh(){this.dataLoader&&this.dataLoader.unsubscribe(),this.scheduler.unsubscribe()}setActiveState(e=null){this.activeState!==e&&(this.activeState=e,this.activeDataSource$.next(e),this.activeStateChangeStream.next(null))}applicationLoadError(e){Xe.error(e,"Failed to load application, will retry on next scheduler execution."),this.refreshFailureStream.next(e)}applicationLoadSuccess(){this.setApplicationAccounts(),this.setDefaults(),this.lastRefresh=(new Date).getTime(),this.refreshStream.next(null)}setApplicationAccounts(){let e=this.accounts.concat(this.attributes.accounts||[]);this.dataSources.filter((e=>Array.isArray(e.data)&&void 0!==e.credentialsField)).forEach((t=>e=e.concat(t.data.map((e=>e[t.credentialsField]))))),this.accounts=f(e)}extractProviderDefault(e){const t=new Map,n=this.dataSources.filter((t=>void 0!==t[e]&&Array.isArray(t.data)&&void 0!==t.providerField)),a=n.map((e=>e.data.map((t=>t[e.providerField])))).filter((e=>e.length>0));return be(...a).forEach((a=>{const i=n.map((t=>F(t.data.filter((e=>"object"==typeof e&&e[t.providerField]===a)),t[e]))).filter((e=>e.length>0)),r=be(...i);1===r.length&&(t[a]=r[0])})),t}setDefaults(){this.defaultCredentials=this.extractProviderDefault("credentialsField"),this.defaultRegions=this.extractProviderDefault("regionField")}subscribeToRefresh(e){this.refreshListeners.push(e);return()=>{this.refreshListeners.filter((t=>t!==e))}}}const Th=(e,t)=>new Promise(((n,a)=>{Si(e).post(null==t?void 0:t.body).then((e=>{n({ok:!0,status:200,text:()=>new Promise((t=>{t(JSON.stringify(e))}))})})).catch((e=>a(e)))})),Qh=()=>{const e=new ga({cache:new ha}),t=new fa({uri:"/managed/graphql",fetch:Th});e.setLink(t);return{client:e,onRefresh:()=>e.reFetchObservableQueries()}};var Ph=Object.defineProperty,Rh=Object.getOwnPropertyDescriptor;let Uh=class extends ot.Component{render(){return ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appSynced"})}};Uh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Rh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Ph(t,n,r),r})([bs("applicationIcon")],Uh);const zh=({appName:e,lastRefresh:t,refresh:n,refreshing:a})=>{const i=_s.createScheduler(2e3),[r,s]=ot.useState(sr(t)),[o,l]=ot.useState(!1);ot.useEffect((()=>(i.subscribe((()=>{s(sr(t))})),()=>i.unsubscribe())),[t]);const c=(new Date).getTime()-t>12e4,p=ot.createElement("span",null,ot.createElement("p",null,ot.createElement("strong",null,e)),ot.createElement("p",null,"app data is "+(a?"refreshing":"up to date (click to refresh)")),ot.createElement("p",null,"Last refresh: ",rr(t)," ",ot.createElement("br",null)," ",r),ot.createElement("p",null,"Note: Due to caching, data may be delayed up to 2 minutes")),d=o||a;return ot.createElement(Qs,{template:p,placement:at.innerWidth<1100?"bottom":"right"},ot.createElement("div",{className:"application-header-icon"+(d?" header-icon-pulsing":""),onClick:()=>{l(!0),setTimeout((()=>{l(!1)}),3e3),n()}},!c&&!d&&ot.createElement(Uh,null),(c||d)&&ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appUnsynced"})))},Gh=({app:e})=>{const[t,n]=ot.useState(!1),[a,i]=ot.useState(0);qo(e.status$,(e=>{"FETCHING"===e.status?n(!0):"FETCHED"===e.status?(n(!1),i(e.lastRefresh)):n(!1)}));return ot.createElement(zh,{appName:e.name,lastRefresh:a,refreshing:t,refresh:()=>{e.refresh(!0)}})};class jh{constructor(){this.queue=[]}setRegistries(e){this.overrideRegistry=e,this.flush()}register(e,t,n){this.queue.push((()=>{n?Ni.overrideValue(n,t,e):this.overrideRegistry.overrideComponent(t,e)})),this.flush()}flush(){if(this.overrideRegistry&&Ni)for(;this.queue.length;)this.queue.splice(0,1)[0]()}}const Lh=new jh;function Oh(e,t){return function(n){Lh.register(n,e,t)}}const Yh=(e,t,n)=>{Lh.register(e,t,n)};class $h{constructor(){this.templateOverrides=new Map,this.componentOverrides=new Map,this.controllerOverrides=new Map}overrideTemplate(e,t){this.templateOverrides.set(e,t)}overrideComponent(e,t){this.componentOverrides.set(e,t)}overrideController(e,t){this.controllerOverrides.set(e,t)}getTemplate(e,t){return this.templateOverrides.get(e)||t}getComponent(e){return this.componentOverrides.get(e)}getController(e,t=e){return this.controllerOverrides.get(e)||t}}const Hh="spinnaker.core.override.registry";n(Hh,[]).service("overrideRegistry",$h).run(["overrideRegistry",e=>{Lh.setRegistries(e)}]);var Vh=Object.defineProperty,Jh=Object.getOwnPropertyDescriptor;let Wh=class extends ot.Component{render(){return null}};Wh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Jh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Vh(t,n,r),r})([bs("core.nav.bottom")],Wh);class Kh extends ot.Component{render(){const e=this.props.tag.entityRef;return e.account||e.region?ot.createElement("div",{className:"entityname"},ot.createElement("span",{className:"entityref"},ot.createElement("strong",null,e.entityId)),ot.createElement("span",{className:"account-region"}," ( ",e.account&&ot.createElement(ts,{account:e.account})," ",ot.createElement("span",null,e.region)," ) ")):null}}class qh extends ot.Component{constructor(e){super(e),this.state={collapsed:!0,alertsByMessage:this.getAlertsByMessage(e.notifications)}}componentWillReceiveProps(e){this.setState({alertsByMessage:this.getAlertsByMessage(e.notifications)})}getAlertsByMessage(e){const t=ie(e,"entityTag.value.message");return Object.keys(t).map((e=>({message:e,tagline:t[e][0].entityTag.value.tagline,title:t[e][0].entityTag.value.title,notifications:t[e]})))}render(){return ot.createElement("div",{className:"notification-list"},this.state.alertsByMessage.map((e=>ot.createElement(Xh,{key:e.message,alertsForMessage:e}))))}}qh.defaultProps={notifications:[]};class Xh extends ot.Component{constructor(){super(...arguments),this.state={collapsed:!0},this.toggleCollapsed=()=>{this.setState({collapsed:!this.state.collapsed})},this.renderServerGroupName=e=>{const{entityTags:t}=e,{entityRef:{region:n,entityId:a}}=t,i=`${n}+${a}`;return ot.createElement(Kh,{key:i,tag:t})}}renderServerGroupNames(e){return 1===e.length?this.renderServerGroupName(e[0]):ot.createElement("div",null,ot.createElement("a",{className:"clickable",onClick:this.toggleCollapsed},ot.createElement("strong",null,ot.createElement("span",null," ",this.state.collapsed?"Show":"Hide"," ",e.length," entities"))),ot.createElement("div",{className:"server-group-list"},!this.state.collapsed&&e.map(this.renderServerGroupName)))}render(){const{alertsForMessage:{notifications:e,title:t,message:n,tagline:a}}=this.props;return ot.createElement("div",{className:"notification-message"},t&&ot.createElement("div",{className:"notification-title"},ot.createElement(Br,{message:t})),this.renderServerGroupNames(e),ot.createElement(Br,{message:n}),ot.createElement(Br,{className:"small",message:a}))}}class Zh extends ot.Component{constructor(){super(...arguments),this.selectCategory=()=>{this.props.onCategorySelected(this.props.category)}}render(){const{category:e,notifications:t}=this.props,n=`clickable list-group-item flex-container-h baseline alerts-severity-${e.severity} `+(this.props.isSelected?"selected ":" ");return ot.createElement("li",{className:n,onClick:this.selectCategory,key:e.id},ot.createElement("i",{className:`notification-category-icon fa ${e.icon}`}),ot.createElement("span",{className:"notification-category-label flex-grow"},e.label),ot.createElement("span",{className:"badge"},t.length))}}class _h extends ot.Component{render(){const{notifications:e,onEditTag:t,onDeleteTag:n}=this.props;return ot.createElement("div",{className:"notification-list"},e.map(((e,a)=>{const{entityTag:{lastModified:i,value:{title:r,message:s,tagline:o}}}=e;return ot.createElement("div",{className:"notification-message",key:a},r&&ot.createElement("div",{className:"notification-title"},ot.createElement(Br,{message:r})),ot.createElement(Br,{message:s}),ot.createElement("div",{className:"notification-tagline flex-container-h baseline"},ot.createElement(Br,{className:"small",message:o}),ot.createElement("div",{className:"small flex-grow",title:rr(i)},sr(i)),ot.createElement(ef,{notification:e,onEditTag:t,onDeleteTag:n})))})))}}class ef extends ot.Component{constructor(){super(...arguments),this.editTag=()=>{this.props.onEditTag(this.props.notification)},this.deleteTag=()=>{this.props.onDeleteTag(this.props.notification)}}render(){return ot.createElement("div",{className:"flex-nogrow actions actions-popover",style:{position:"relative"}},ot.createElement("a",{onClick:this.editTag},ot.createElement("span",{className:"glyphicon glyphicon-cog clickable"})),ot.createElement("a",{onClick:this.deleteTag},ot.createElement("span",{className:"glyphicon glyphicon-trash clickable"})))}}const tf=ye([{id:"urgentissues",label:"Urgent Issues",icon:"fa-exclamation",severity:2},{id:"deprecation",label:"Deprecations",icon:"fa-wrench",severity:1},{id:"default",label:"Uncategorized",icon:"fa-exclamation-circle",severity:0}],"id");class nf{static defineCategory(e,t=e,n=0,a="fa-exclamation-circle"){return tf[e]={id:e,label:t,severity:n,icon:a}}static getCategory(e){return e?tf[e="blacklist"===e?"urgentissues":e]||nf.defineCategory(e):tf.default}}class af extends ot.Component{constructor(e){super(e),this.handleCategorySelected=e=>{this.setState({selectedCategory:e})};const t=this.categorizeNotifications(e.notifications);this.state={categorizedAlerts:t,selectedCategory:t[0].category}}componentWillReceiveProps(e){const t=this.categorizeNotifications(e.notifications);this.setState({categorizedAlerts:t})}categorizeNotifications(e){const t=e=>nf.getCategory(e.entityTag.category).id;return f(e.map(t)).map((n=>({category:nf.getCategory(n),notifications:e.filter((e=>t(e)===n))}))).sort(((e,t)=>t.category.severity-e.category.severity))}render(){const{categorizedAlerts:e,selectedCategory:t}=this.state,{onEditTag:n,onDeleteTag:a}=this.props;if(!e||!t)return null;const i=e.find((e=>e.category===t)).notifications;return ot.createElement("div",{className:"flex-container-h"},ot.createElement("ul",{className:"list-group notification-categories"},e.map((({category:e,notifications:n})=>ot.createElement(Zh,{isSelected:e===t,key:e.id,category:e,notifications:n,onCategorySelected:this.handleCategorySelected})))),this.props.grouped?ot.createElement(qh,{notifications:i}):ot.createElement(_h,{notifications:i,onEditTag:n,onDeleteTag:a}))}}class rf{static upsertEntityTag(e,t,n,a){return ep.executeTask({application:e,description:`${a?"Create":"Update"} entity tag on ${n.entityId}`,job:[{type:"upsertEntityTags",application:e.name,entityId:n.entityId,entityRef:n,tags:[t],isPartial:!0}]})}static deleteEntityTag(e,t,n,a){return ep.executeTask({application:e,description:`Delete entity tag on ${t.name}`,job:[{type:"deleteEntityTags",application:e.name,id:n.id,tags:[a]}]})}}oi(".entity-tag-editor-modal .preview {\n background-color: var(--color-accent-g2);\n}\n.entity-tag-editor-modal .preview .marked,\n.entity-tag-editor-modal .preview [marked] {\n padding-top: 5px;\n}\n.entity-tag-editor-modal label .marked p,\n.entity-tag-editor-modal label [marked] p {\n margin-bottom: 0;\n}\n");const sf=class extends ot.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal.apply(null,e)},this.upsertTag=e=>{const{application:t,isNew:n,tag:a,onUpdate:i}=this.props,r=e.ownerOption?e.ownerOption.owner:this.props.owner,s=e.ownerOption?e.ownerOption.type:this.props.entityType,o=this.props.entityRef||class{static buildServerGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroup",entityId:e.name,account:e.account,region:e.region}}static buildServerGroupManagerRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroupmanager",entityId:e.name,account:e.account,region:e.region}}static buildLoadBalancerRef(e){return{cloudProvider:e.cloudProvider,entityType:"loadbalancer",entityId:e.name,account:e.account,region:e.region}}static buildApplicationRef(e){return{cloudProvider:"*",entityType:"application",entityId:e.name}}static buildRegionalClusterRef(e){return{cloudProvider:e.cloudProvider,entityType:"cluster",entityId:e.name,account:e.account,region:e.region}}static buildSecurityGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"securitygroup",entityId:e.name,account:e.accountName,region:e.region,vpcId:e.vpcId}}static getBuilder(e){switch(e){case"application":return this.buildApplicationRef;case"serverGroup":return this.buildServerGroupRef;case"serverGroupManager":return this.buildServerGroupManagerRef;case"loadBalancer":return this.buildLoadBalancerRef;case"cluster":return this.buildRegionalClusterRef;case"securityGroup":return this.buildSecurityGroupRef;default:return null}}}.getBuilder(s)(r);o.application||(o.application=t.name),a.value.message=e.message;const l=Kc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),c=new Kc({application:t,modalInstance:l,title:`${n?"Create":"Update"} ${this.props.tag.value.type} for ${o.entityId}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>i()))});c.submit((()=>{const e=rf.upsertEntityTag(t,a,o,n),i=()=>this.setState({isSubmitting:!1});return e.then(i,i),e})),this.setState({taskMonitor:c,isSubmitting:!0})};const{tag:t}=this.props,n=this.props.ownerOptions||[],a=n.find((e=>e.isDefault))||n[0];t.name=t.name||`spinnaker_ui_${t.value.type}:${pr.generateUuid()}`,this.state={taskMonitor:null,initialValues:{message:t.value&&t.value.message||"",ownerOption:a},isSubmitting:!1}}static show(e){return si.show(sf,e)}render(){const{isNew:e,tag:t,ownerOptions:n}=this.props,{initialValues:a,isSubmitting:i}=this.state,r=n||[],s=`${e?" Create":" Update"} ${t.value.type}`;return ot.createElement("div",null,ot.createElement(Gc,{monitor:this.state.taskMonitor}),ot.createElement(zs,{initialValues:a,onSubmit:this.upsertTag,render:({isValid:n,values:a,setFieldValue:o})=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Mc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e?"Create":"Update"," ",t.value.type)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement("div",{className:""},ot.createElement(Cl,{label:"Message",name:"message",required:!0,input:e=>ot.createElement(Qo,{...e,rows:5,required:!0})}),ot.createElement("div",{className:"small text-right"},"Markdown is okay ",ot.createElement(Zs,{id:"markdown.examples"})),a.message&&ot.createElement("div",{className:"form-group preview"},ot.createElement("div",{className:"col-md-3 sm-label-right"},ot.createElement("strong",null,"Preview")),ot.createElement("div",{className:"col-md-9"},ot.createElement(Br,{message:a.message})))),!!r.length&&ot.createElement(Nl,{name:"ownerOption",label:"Applies To",required:!0,value:a.ownerOption.label,onChange:e=>{const t=r.find((t=>t.label===e.target.value));o("ownerOption",t)},input:e=>ot.createElement(Fo,{...e,stringOptions:r.map((e=>e.label))})})),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:i,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Nc,{isDisabled:!n||i,submitting:i,isFormSubmit:!0,label:s})))}))}};let of=sf;of.defaultProps={onUpdate:qi,ownerOptions:[]};oi(".notices-severity-0,\n.notices-severity-1,\n.notices-severity-2 {\n --color-notice: var(--color-accent);\n --color-notice-light: var(--color-accent-g2);\n}\n.alerts-severity-0 {\n --color-notice: var(--color-warning);\n --color-notice-light: var(--color-warning-light);\n}\n.alerts-severity-1 {\n --color-notice: var(--color-alert);\n --color-notice-light: var(--color-alert-light);\n}\n.alerts-severity-2 {\n --color-notice: var(--color-danger);\n --color-notice-light: var(--color-danger-light);\n}\n.notification.fa,\n.notifications-popover.fa {\n color: var(--color-notice);\n}\n.notification .popover-title,\n.notifications-popover .popover-title,\n.notification.inverse .notification.fa,\n.notifications-popover.inverse .notification.fa {\n background-color: var(--color-notice);\n color: var(--color-white);\n}\n.notification.bottom > div.arrow:after,\n.notifications-popover.bottom > div.arrow:after {\n border-bottom-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li {\n color: var(--color-notice);\n}\n.notifications-popover .notification-categories li .notification-category-label {\n color: var(--color-black);\n}\n.notifications-popover .notification-categories li .badge {\n background-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li.selected {\n background-color: var(--color-notice-light);\n}\n.notifications-popover .notification-categories li:hover {\n background-color: var(--color-notice-light);\n}\n.alert-severity-2 .notification-category-label {\n color: var(--color-danger);\n}\n.notification-category-icon {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 1em;\n flex: 0 0 1em;\n text-align: center;\n}\n.entity-notifications {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.entity-notifications .tag-marker {\n display: inline-block;\n margin-left: 5px;\n font-size: 15px;\n}\n.entity-notifications .tag-marker.inverse .fa {\n border-radius: 3px;\n padding: 2px;\n font-size: 90%;\n}\n.ephemeral.fa,\n.ephemeral-popover.fa {\n color: var(--color-mineshaft);\n}\n.ephemeral .popover-title,\n.ephemeral-popover .popover-title {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n");oi("@-webkit-keyframes animate-glow {\n 0% {\n opacity: 0.9;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 0.9;\n }\n}\n@-webkit-keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes spin {\n from {\n -webkit-transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes spin {\n from {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n/* Common mixins extracted from Bootstrap */\n@-webkit-keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n@keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n.popover.notifications-popover {\n padding: 0;\n min-width: 200px;\n max-width: 500px;\n text-align: left;\n}\n.popover.notifications-popover .popover-title {\n padding: 0.6em 0.8em;\n margin: 0;\n border-bottom: none;\n}\n.popover.notifications-popover .list-group-item {\n padding: 0.333em 1em;\n border-radius: 0;\n background-color: var(--color-alabaster);\n border-left: none;\n border-right: none;\n}\n.popover.notifications-popover .notification-categories {\n margin: 0;\n background-color: var(--color-alabaster);\n border-right: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-categories .notification-category-label {\n padding: 0 1em;\n}\n.popover.notifications-popover .notification-categories .badge {\n border-radius: 3px;\n padding: 3px 6px;\n}\n.popover.notifications-popover .notification-list {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow-y: auto;\n max-height: 15em;\n padding: 1em;\n}\n.popover.notifications-popover .server-group-list {\n margin: 0.75em 0;\n}\n.popover.notifications-popover .entityname {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.popover.notifications-popover .entityname .account-region {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: end;\n}\n.popover.notifications-popover .entityname span {\n white-space: nowrap;\n}\n.popover.notifications-popover .notification-message {\n min-width: 150px;\n}\n.popover.notifications-popover .notification-message .notification-title {\n font-weight: bold;\n margin-bottom: 0.25em;\n}\n.popover.notifications-popover .notification-message:not(:first-child) {\n padding-top: 10px;\n margin-top: 5px;\n border-top: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-message .notification-tagline > *:not(:first-child) {\n margin-left: 0.5em;\n}\n");const lf={alerts:{title:"Alerts",icon:"fa-exclamation-triangle"},notices:{title:"Notices",icon:"fa-flag"}};class cf extends ot.Component{constructor(e){super(e),this.fireGAEvent=()=>{const e=this.props.gaLabelFn(this.props);Ui.log({action:"SPAN",category:"Alerts hovered",data:{label:e}})},this.PopoverContent=({hidePopover:e})=>{const{type:t,categorized:n,grouped:a}=this.props,{notifications:i}=this.state;return ot.createElement(pf,{type:t,categorized:n,grouped:a,notifications:i,hidePopover:e,handleEditNotification:t=>{e(),this.handleEditNotification(t)},handleDeleteNotification:t=>{e(),this.handleDeleteNotification(t)}})},this.state=this.getState(e)}getState(e){const{tags:t,type:n}=e,a=t.filter((e=>!!e)).reduce(((e,t)=>e.concat(t[n].map((e=>({entityTags:t,entityTag:e}))))),[]),i=a.length,r=f(a.map((e=>e.entityTag.category))).map((e=>nf.getCategory(e))).reduce(((e,t)=>Math.max(e,t.severity)),0);return{notifications:a,count:i,severity:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}handleEditNotification(e){const{entity:t,application:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=W(r,"name","namespace","category");s.value={...r.value};const o={tag:s,isNew:!1,owner:t,entityType:i.entityRef.entityType,application:n,onUpdate:a,ownerOptions:null,entityRef:i.entityRef};of.show(o)}handleDeleteNotification(e){const{application:t,entity:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=r.value.type,o={application:t,title:`Deleting ${s} on ${n.name}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>a()))};op.confirm({header:`Really delete ${s}?`,buttonText:`Delete ${s}`,account:n.account,taskMonitorConfig:o,submitMethod:()=>rf.deleteEntityTag(t,n,i,r.name)})}render(){const{type:e,className:t,placement:n,hOffsetPercent:a}=this.props,{count:i,severity:r}=this.state,{title:s,icon:o}=lf[e];if(i<1)return null;const l=`${e}-severity-${Math.min(Math.max(r,0),2)}`;return ot.createElement("span",{className:`tag-marker small ${t||""}`,onMouseEnter:this.fireGAEvent},ot.createElement(Ks,{delayShow:100,placement:n,hOffsetPercent:a,Component:this.PopoverContent,title:s,className:`no-padding notifications-popover ${l}`},ot.createElement("i",{className:`notification fa ${o} ${l}`})))}}cf.defaultProps={tags:[],categorized:!0,className:"",entity:null,grouped:!1,onUpdate:qi,placement:"bottom",type:"alerts"};const pf=e=>{const{type:t,grouped:n,categorized:a,notifications:i,handleEditNotification:r,handleDeleteNotification:s}=e,{title:o}=lf[t];return a?ot.createElement(af,{notifications:i,onEditTag:r,onDeleteTag:s,grouped:n,title:o}):n?ot.createElement(qh,{notifications:i}):ot.createElement(_h,{notifications:i,onEditTag:r,onDeleteTag:s})};class df extends ot.Component{constructor(){super(...arguments),this.getDataSourceAnalyticsLabel=()=>{const{tabName:e,application:t,tags:n}=this.props,a=n.map((e=>e.alerts.map((e=>e.name)).join(",")));return[e,t.name,a].join(":")}}render(){const{application:e,tags:t}=this.props;return ot.createElement(cf,{tags:t,application:e,type:"alerts",gaLabelFn:this.getDataSourceAnalyticsLabel,grouped:!0,categorized:!0,placement:"right"})}}n("spinnaker.core.entityTag.alerts.datasourcenotifications",[]).component("dataSourceNotifications",yn(Gl(df,"dataSourceNotifications"),["tags","application","tabName"]));const uf=ba({key:"verticalNavExpanded",default:!Ss.isSet("verticalNav")||Ss.isExpanded("verticalNav")}),mf=({app:e,dataSource:t,isActive:n})=>{const a=ya(uf),{alerts:i,badge:r,iconName:s,key:o,label:l}=t,{data:c}=Zo(e.getDataSource(r||o)),p=r?c.length:0;Zo(t);const d=i||[],u=p?"badge-running-count":"badge-none";return ot.createElement(ot.Fragment,null,ot.createElement("span",{className:u},p>0?p:""),ot.createElement("span",{className:"nav-row-item"},s&&(a?ot.createElement(Bn,{className:"nav-icon",name:s||"config",size:"medium",color:n?"primary":"accent"}):ot.createElement(Qs,{value:t.label,placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-icon",name:s,size:"medium",color:n?"primary":"accent"}))))),ot.createElement("span",{className:"nav-row-item nav-name"}," "+t.label),ot.createElement(df,{tags:d,application:e,tabName:l}))},gf=({app:e,dataSource:t})=>{const n=In(t.sref),a=Fn(t.activeState);return ot.createElement("a",{...n,className:"nav-category flex-container-h middle sp-padding-s-yaxis"+(a?" active":"")},ot.createElement(mf,{app:e,dataSource:t,isActive:a}))},hf=({app:e,dataSources:t})=>ot.createElement("div",{className:"nav-section sp-padding-s-yaxis text-semibold"},t.map((t=>ot.createElement(gf,{key:t.label,dataSource:t,app:e}))));class ff{constructor(){this.categories=[],this.orderOverrides=new Map}register(e){this.categories.push(e)}get(e){return p(this.categories.find((t=>t.key===e)))}has(e){return this.categories.some((t=>t.key===e))}getAll(){return this.categories.slice().sort(((e,t)=>this.getOrder(e)-this.getOrder(t)))}overrideCategoryOrder(e,t){this.orderOverrides.set(e,t)}getHighestOrder(){return Math.max(...this.categories.map((e=>e.order)).concat(Array.from(this.orderOverrides.values())))}getOrder(e){const{key:t,order:n}=e;return this.orderOverrides.has(t)?this.orderOverrides.get(t):n}}const vf=new ff;class Af{static listServices(){return vt(Si("/pagerDuty/services").get())}static listOnCalls(){return vt(Si("/pagerDuty/oncalls").get())}}class Ef{static pageApplicationOwnerModal(e){vi.modalService.open({templateUrl:"core/src/pagerDuty/pageApplicationOwner.html",controller:"PageModalCtrl as ctrl",resolve:{application:()=>e}}).result.catch((()=>{}))}static sendPage(e,t,n,a,i){const r={type:"pageApplicationOwner",message:n,details:i};e&&e.length>0&&(r.applications=e.map((e=>e.name))),t&&t.length>0&&(r.keys=t);const s={application:a,job:[r],description:"Send Page"};return ep.executeTask(s)}static pageApplicationOwner(e,t,n){return this.sendPage([e],void 0,t,e,{details:n})}}window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pagerDuty/pageApplicationOwner.html",'<div modal-page>\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Page {{ctrl.application.name}} Owner</h4>\n </div>\n\n <form role="form" class="container-fluid" novalidate name="pageApplicationOwnerForm">\n <div class="modal-body">\n <div class="row" style="margin-top: 10px; margin-bottom: 10px">\n <div class="col-md-3 sm-label-right">Reason</div>\n <div class="col-md-7">\n <textarea\n class="form-control required"\n ng-model="ctrl.reason"\n rows="3"\n placeholder="Brief description of incident, severity and expected action."\n ></textarea>\n </div>\n </div>\n </div>\n\n <div class="modal-footer">\n <a href class="btn btn-default" ng-click="$dismiss()">Cancel</a>\n <button type="submit" class="btn btn-primary" ng-click="ctrl.submit()" ng-disabled="!ctrl.reason">\n Page Now\n </button>\n </div>\n </form>\n</div>\n')}]);class bf{constructor(){this.servicesLoaded=!1}setCurrentService(){this.servicesLoaded=!1,Af.listServices().subscribe((e=>{this.currentService=e.find((e=>e.integration_key===this.apiKey)),this.servicesLoaded=!0}))}$onInit(){this.setCurrentService()}$onChanges(){this.setCurrentService()}}const yf={bindings:{apiKey:"<"},controller:bf,template:'\n <span>\n <span ng-if="!$ctrl.servicesLoaded">\n <i class="fa fa-asterisk fa-spin fa-fw"></i> Loading...\n </span>\n <span ng-if="$ctrl.servicesLoaded && $ctrl.currentService">\n {{ $ctrl.currentService.name }} ({{ $ctrl.currentService.integration_key }})\n </span>\n <span ng-if="$ctrl.servicesLoaded && !$ctrl.currentService">\n Unable to locate PagerDuty key ({{ $ctrl.apiKey }})\n </span>\n </span>\n '},wf="spinnaker.core.pagerDuty.pagerDutyTag.component";n(wf,[]).component("pagerDutyTag",yf);class xf{constructor(){this.helpContents='<p>Make sure your service exists in Pager Duty and includes the "Generic API"\n integration.</p>\n <h5><b>Setting up a new integration</b></h5>\n <ol>\n <li>Find your service in Pager Duty</li>\n <li>Click "New Integration"</li>\n <li>Select "Use our API directly"</li>\n <li>Make sure to select "Events API v1" (Spinnaker is not compatible with v2)</li>\n </ol>\n <p><b>Note:</b> it can take up to five minutes for the service to appear in Spinnaker</p>',this.required=di.pagerDuty&&di.pagerDuty.required||!1,this.label="PagerDuty"+(this.required?" *":"")}$onInit(){this.scheduler=_s.createScheduler(1e4),this.scheduler.subscribe((()=>this.loadPagerDutyServices())),this.loadPagerDutyServices()}$onDestroy(){this.scheduler.unsubscribe()}loadPagerDutyServices(){Af.listServices().subscribe((e=>{this.pagerDutyServices=e.filter((e=>e.integration_key)),this.servicesLoaded=!0}))}}const Cf={bindings:{component:"="},controller:xf,template:'\n <div class="form-group row">\n <div class="col-sm-3 sm-label-right">{{$ctrl.label}} <help-field content="{{$ctrl.helpContents}}"></help-field></div>\n <div class="col-sm-9">\n <ui-select ng-if="$ctrl.servicesLoaded" ng-model="$ctrl.component.pdApiKey" class="form-control input-sm" ng-required="$ctrl.required">\n <ui-select-match placeholder="Select a PagerDuty Service">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="pagerDuty.integration_key as pagerDuty in $ctrl.pagerDutyServices | filter: $select.search">\n {{pagerDuty.name}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n'},kf="spinnaker.core.pagerDuty.pagerDutySelectField.component";n(kf,[]).component("pagerDutySelectField",Cf);oi(".vertical-navigation {\n background-color: var(--color-accent-g2);\n -webkit-box-shadow: 2px 0 3px 1px var(--color-alto);\n box-shadow: 2px 0 3px 1px var(--color-alto);\n min-width: 226px;\n max-width: 300px;\n display: grid;\n height: 100%;\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n grid-template-areas: 'nav-header' 'nav-content' 'nav-bottom';\n}\n@media (max-width: 1640px) {\n .vertical-navigation {\n max-width: 226px;\n }\n}\n.vertical-navigation .nav-header {\n grid-area: nav-header;\n color: var(--color-primary);\n margin-bottom: unset;\n}\n.vertical-navigation .nav-header .application-header-icon {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: var(--color-white);\n text-align: center;\n width: 36px;\n height: 36px;\n font-size: 15px;\n cursor: pointer;\n}\n.vertical-navigation .nav-header .app-fresh-icon {\n width: 20px;\n}\n.vertical-navigation .nav-header .header-icon-pulsing {\n -webkit-animation: pulse 4s steps(48) infinite;\n animation: pulse 4s steps(48) infinite;\n}\n.vertical-navigation .nav-header .application-name {\n word-break: break-word;\n}\n.vertical-navigation .nav-content {\n grid-area: nav-content;\n overflow: auto;\n}\n.vertical-navigation .nav-content .nav-section {\n font-size: 16px;\n text-transform: uppercase;\n}\n.vertical-navigation .nav-content .nav-section .nav-category {\n color: var(--color-accent);\n padding-left: 12px;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-running-count {\n min-width: 16px;\n height: 16px;\n margin-right: -12px;\n margin-top: 18px;\n border-radius: 3px;\n color: var(--color-white);\n background-color: var(--color-primary);\n line-height: 16px;\n text-align: center;\n font-size: 12px;\n z-index: 100;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-none {\n min-width: 16px;\n margin-right: -12px;\n margin-top: 18px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item {\n min-width: 16px;\n margin-right: 8px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item .bs-tooltip-right {\n display: none;\n}\n.vertical-navigation .nav-content .nav-section a {\n text-decoration: none;\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category {\n background: #bbdee8;\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-icon {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-name {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .page-category {\n color: var(--color-accent);\n padding-left: 16px;\n margin-top: -4px;\n}\n.vertical-navigation .nav-content .nav-section .page-category .nav-row-item {\n min-width: 16px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section:not(:first-of-type) {\n border-top: 1px solid var(--color-white);\n}\n.vertical-navigation .nav-bottom {\n max-height: 100px;\n grid-area: nav-bottom;\n overflow: auto;\n}\n.vertical-nav-collapsed {\n min-width: 60px;\n max-width: 60px;\n}\n.vertical-nav-collapsed .nav-header {\n margin-left: 12px;\n margin-right: 12px;\n}\n.vertical-nav-collapsed .application-name {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .nav-name,\n.vertical-nav-collapsed .nav-section .page-category .nav-name,\n.vertical-nav-collapsed .nav-section .nav-category .HoverablePopover,\n.vertical-nav-collapsed .nav-section .page-category .HoverablePopover {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .tooltip,\n.vertical-nav-collapsed .nav-section .page-category .tooltip {\n color: red;\n}\n");const Bf=({app:e})=>{const t=Go(e.attributes.dataSources);Tn();const n=ll(),a=ya(uf),i=e=>{const t=e.filter((e=>!1!==e.visible&&!e.disabled&&e.sref)),n=vf.getAll(),a=n.map((e=>t.filter((t=>t.category===e.key)))),i=t.filter((e=>!e.category||!V(n,(t=>t.key==e.category))));return a.push(i),a},r=i(e.dataSources),[s,o]=ot.useState(r),l=e.onRefresh(null,(()=>{if(!E(e.attributes.dataSources,t)){const t=i(e.dataSources);o(t)}}));ot.useEffect((()=>l()),[]);return!a&&n?null:ot.createElement("div",{className:wn(["vertical-navigation","layer-high",{"vertical-nav-collapsed":!a}])},ot.createElement("h3",{className:"heading-2 horizontal middle nav-header sp-margin-m-xaxis sp-margin-l-top"},ot.createElement(Gh,{app:e}),ot.createElement("span",{className:"application-name text-semibold heading-2 sp-margin-m-left"},e.name)),ot.createElement("div",{className:"nav-content"},s.filter((e=>e.length)).map(((t,n)=>ot.createElement(hf,{key:`section-${n}`,dataSources:t,app:e}))),di.feature.pagerDuty&&e.attributes.pdApiKey&&ot.createElement("div",{className:"nav-section sp-padding-s-yaxis"},ot.createElement("div",{className:"page-category flex-container-h middle text-semibold sp-padding-s-yaxis clickable",onClick:()=>{Ef.pageApplicationOwnerModal(e)}},ot.createElement("div",{className:"nav-row-item sp-margin-s-right"},a?ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"}):ot.createElement(Qs,{value:"Page App Owner",placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"})))),ot.createElement("span",{className:"nav-name"}," Page App Owner")))),ot.createElement("div",{className:"nav-bottom"},ot.createElement(Wh,{app:e})))};oi(".application {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow-y: hidden;\n}\n.glyphicon-cloud {\n top: 4px;\n}\n.application-actions {\n margin-bottom: 10px;\n padding-top: 5px;\n display: inline-block;\n float: right !important;\n}\n.filter-tags {\n padding: 5px 15px 0;\n}\n.filter-tags .filter-tag {\n border-radius: 2px;\n display: inline-block;\n padding: 3px 5px;\n margin-right: 10px;\n margin-bottom: 5px;\n background-color: var(--color-cirrus);\n font-size: 90%;\n}\n.filter-tags .filter-tag strong {\n font-weight: 600;\n text-transform: uppercase;\n}\n.filter-tags .filter-tag a {\n font-size: 90%;\n color: var(--color-dovegray);\n}\n.filter-tags .filter-toggle {\n background-color: var(--color-accent);\n border-radius: 2px;\n color: var(--color-white);\n cursor: pointer;\n display: inline-block;\n font-size: 90%;\n font-weight: 600;\n margin-bottom: 5px;\n margin-right: 10px;\n padding: 3px 5px;\n text-transform: uppercase;\n}\n.filter-tags .clear-filters {\n display: inline-block;\n margin-left: 5px;\n color: var(--color-mineshaft);\n font-size: 90%;\n}\n.select2-highlighted .icon {\n color: inherit;\n}\n.glyphicon-none:before {\n content: '\\e113';\n color: transparent !important;\n}\ninput[type='checkbox'],\ninput[type='radio'] {\n cursor: pointer;\n}\n.table-search-results-application .table-header .col-application,\n.table-search-results-application .table-row .col-application {\n width: 200px;\n}\n.table-search-results-application .table-header .col-account,\n.table-search-results-application .table-row .col-account,\n.table-search-results-application .table-header .col-accounts,\n.table-search-results-application .table-row .col-accounts {\n width: 250px;\n}\n.table-search-results-application .table-header .col-email,\n.table-search-results-application .table-row .col-email {\n width: 250px;\n}\n");class Sf extends ot.Component{constructor(e){super(e),this.apolloClient=Qh(),this.mountApplication(e.app)}componentWillUnmount(){this.unmountApplication(this.props.app)}componentWillReceiveProps(e){this.unmountApplication(this.props.app),this.mountApplication(e.app)}mountApplication(e){var t;e.notFound||e.hasError?Ag.removeLastItem("applications"):(Zc.application=e,(null==(t=e.attributes)?void 0:t.disableAutoRefresh)||(this.unsubscribeAppRefresh=this.props.app.subscribeToRefresh(this.apolloClient.onRefresh),e.enableAutoRefresh()))}unmountApplication(e){var t;e.notFound||e.hasError||(Zc.application=void 0,null==(t=this.unsubscribeAppRefresh)||t.call(this),this.unsubscribeAppRefresh=void 0,e.disableAutoRefresh())}render(){const{app:e}=this.props;return ot.createElement("div",{className:"application"},!e.notFound&&!e.hasError&&ot.createElement(Bf,{app:e}),e.notFound&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Application Not Found"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"Please check your URL - we can't find any data for ",ot.createElement("em",null,e.name),".")),e.hasError&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Something went wrong"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"There was a problem loading ",ot.createElement("em",null,e.name),". Try checking your browser console for errors.")),ot.createElement(as,{app:e},ot.createElement(va,{client:this.apolloClient.client},ot.createElement("div",{className:"container scrollable-columns"},ot.createElement(Qn,{className:"secondary-panel",name:"insight"})))))}}class Mf{static createApplicationForTests(e,...t){return new Fh(e,_s.createScheduler(),t)}static createStandaloneApplication(e){const t=new Fh(e,_s.createScheduler(),[]);return t.isStandalone=!0,t}static createNotFoundApplication(e){const t=new Fh(e,_s.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.notFound=!0,t}static createApplicationWithError(e){const t=new Fh(e,_s.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.hasError=!0,t}}const Nf=({app:e})=>{const[t,n]=ot.useState(hi.insightFilterStateModel.filtersExpanded),{filtersHidden:a}=hi.insightFilterStateModel,i=t?"filters-expanded":"filters-collapsed",r=ya(uf)?"nav-expanded":"nav-collapsed",{state:s}=Tn(),o=Boolean(Object.keys(s.views).find((e=>-1!==e.indexOf("detail@")))),l=o?"details-open":"details-closed";return e.notFound||e.hasError?null:ot.createElement("div",{className:`insight ${i} ${r} ${l}`},!a&&ot.createElement("div",{onClick:()=>{hi.insightFilterStateModel.pinFilters(!t),n(!t)}},ot.createElement(rd,null)),!a&&t&&ot.createElement("div",null,ot.createElement(Qn,{name:"nav",className:"nav ng-scope"})),ot.createElement("div",{className:"flex-1"},ot.createElement(Qn,{name:"master",className:"nav-content ng-scope","data-scroll-id":"nav-content"}),o&&ot.createElement("div",null,ot.createElement(Qn,{name:"detail",className:"detail-content"}))))};class Df{constructor(e){this.stateConfigProvider=e,this.childStates=[],this.detailStates=[],this.insightStates=[],this.insightState={name:"insight",abstract:!0,views:{insight:{component:Nf,$type:"react"}},resolve:{app:["app",e=>e]},children:this.insightStates},this.childStates.push(this.insightState)}addChildState(e){this.childStates.push(e),this.stateConfigProvider.setStates()}addInsightState(e){this.insightStates.push(e),e.children=this.detailStates,this.stateConfigProvider.setStates()}addInsightDetailState(e){this.detailStates.push(e),this.insightState.children.forEach((t=>{t.children=t.children||[],t.children.some((t=>t.name===e.name))||t.children.push(e)})),this.stateConfigProvider.setStates()}addParentState(e,t,n=""){const a={name:"application",url:`${n}/:application`,redirectTo:e=>e.injector().getAsync("app").then((t=>{var n;const a=null==(n=t.dataSources.find((e=>e.sref&&!e.disabled)))?void 0:n.sref,i=e.params(),r={relative:a?e.to().name:void 0};return e.router.stateService.target(a||"home.search",i,r)})),resolve:{app:["$stateParams",e=>Hg.getApplication(e.application,!1).then((t=>($g.checkIfInferredAndWarn(t),t||Mf.createNotFoundApplication(e.application)))).catch((t=>t.status&&404===t.status?Mf.createNotFoundApplication(e.application):(console.error(t),Mf.createApplicationWithError(e.application))))]},data:{pageTitleMain:{field:"application"},history:{type:"applications",state:"home.applications.application",keyParams:["application"]}},children:this.childStates,views:{}};a.views[t]={component:Sf,$type:"react"},e.children.push(a),this.stateConfigProvider.setStates()}$get(){return this}}Df.$inject=["stateConfigProvider"];const If="spinnaker.core.application.state.provider";n(If,[Tg]).provider("applicationState",Df);class Ff extends ot.Component{render(){const{isValid:e,isDirty:t,isSaving:n,saveError:a,onRevertClicked:i,onSaveClicked:r}=this.props;if(!t)return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-12 text-right"},ot.createElement("span",{className:"btn btn-link disabled"},ot.createElement("span",{className:"far fa-check-circle"})," In sync with server")));const s=ot.createElement("button",{className:"btn btn-primary "+(e?"":"disabled"),onClick:r},ot.createElement("span",null,ot.createElement("span",{className:"far fa-check-circle"})," Save Changes")),o=ot.createElement("button",{className:"btn btn-primary",disabled:!0},ot.createElement("span",{className:"pulsing"},ot.createElement(Es,{size:"nano"})," Savingβ¦"));return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-3"},ot.createElement("button",{className:"btn btn-default",onClick:i,style:{visibility:"visible"}},ot.createElement("span",{className:"glyphicon glyphicon-flash"})," Revert")),ot.createElement("div",{className:"col-md-9 text-right"},n?o:s,!!a&&ot.createElement("div",{className:"error-message"},"There was an error saving your changes. Please try again.")))}}class Tf{static createApplication(e){const t=this.buildJobs(e,"createApplication",p);return ep.executeTask({job:t,application:e,description:"Create Application: "+e.name})}static updateApplication(e){const t=this.buildJobs(e,"updateApplication",p);return ep.executeTask({job:t,application:e,description:"Update Application: "+e.name})}static deleteApplication(e){const t=this.buildJobs(e,"deleteApplication",(e=>({name:e.name})));return ep.executeTask({job:t,application:e,description:"Deleting Application: "+e.name}).then((t=>(Ag.removeByAppName(e.name),t))).catch((e=>e))}static buildJobs(e,t,n){const a=[],i=n(e);return e.cloudProviders&&(i.cloudProviders=e.cloudProviders.join(",")),delete i.accounts,a.push({type:t,application:i}),a}}class Qf{revert(){r(this.viewState.originalConfig,this.config),this.viewState.isDirty=!1}saveSuccess(){this.viewState.originalConfig=p(this.config),this.viewState.originalStringVal=s(this.config),this.viewState.isDirty=!1,this.viewState.saving=!1,this.application.attributes[this.configField]=this.config}saveError(){this.viewState.saving=!1,this.viewState.saveError=!0}save(){this.viewState.saving=!0,this.viewState.saveError=!1;const e={name:this.application.name,accounts:this.application.attributes.accounts};e[this.configField]=this.config,Tf.updateApplication(e).then((()=>this.saveSuccess()),(()=>this.saveError()))}}const Pf={bindings:{application:"=",config:"=",viewState:"=",configField:"@",revert:"&?",afterSave:"&?",saveDisabled:"<"},controller:Qf,templateUrl:"core/src/application/config/footer/configSectionFooter.component.html"},Rf="spinnaker.core.application.config.section.footer.component";n(Rf,[]).component("configSectionFooter",Pf),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/application/config/footer/configSectionFooter.component.html",'<div class="row footer">\n <div class="col-md-3">\n <button\n class="btn btn-default"\n ng-click="$ctrl.revert()"\n ng-if="$ctrl.viewState.isDirty"\n style="visibility: visible"\n >\n <span class="glyphicon glyphicon-flash"></span> Revert\n </button>\n </div>\n <div class="col-md-9 text-right">\n <button\n class="btn btn-primary"\n ng-if="$ctrl.viewState.isDirty"\n ng-click="$ctrl.save()"\n ng-disabled="$ctrl.saveDisabled"\n >\n <span ng-if="!$ctrl.viewState.saving"> <span class="far fa-check-circle"></span> Save Changes </span>\n <span ng-if="$ctrl.viewState.saving" class="pulsing">\n <span class="fa fa-cog fa-spin"></span> Saving…\n </span>\n </button>\n <div class="error-message" ng-if="$ctrl.viewState.saveError">\n There was an error saving your changes. Please try again.\n </div>\n <span ng-if="!$ctrl.viewState.isDirty" class="btn btn-link disabled"\n ><span class="far fa-check-circle"></span> In sync with server</span\n >\n </div>\n</div>\n')}]);const Uf=()=>!0;class zf{static getMonikers(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.moniker))));return ce(T(n))}static getRegions(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.region))));return f(ce(T(n))).sort()}static getStacks(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.stack))));return f(ce(T(n))).sort()}static getClusters(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.cluster))));return f(ce(T(n))).sort()}static getAsgs(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.name))));return f(ce(T(n))).sort()}static getZones(e,t=Uf,n=Uf,a=Uf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).filter(a).map((e=>e.instances)))),r=T(T(i)).map((e=>e.availabilityZone));return f(ce(r)).sort()}static getInstances(e,t=Uf,n=Uf,a=Uf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).map((e=>e.instances))));return f(ce(T(T(i)).filter(a)))}static clusterFilterForCredentials(e){return t=>!e||t.account===e}static monikerClusterNameFilter(e){return t=>t.moniker.cluster===e}static clusterFilterForCredentialsAndRegion(e,t){return n=>{const a=!e||n.account===e,i=n&&Array.isArray(t)&&t.length?t.includes(n.region):!t||n.region===t;return a&&i}}}class Gf{static registerValidator(e,t){this.providerMap.has(e)||this.providerMap.set(e,[]),this.providerMap.get(e).push(t)}static setValidators(e,t){this.providerMap.set(e,t)}static validate(e,t){return Di.listProviders().then((n=>{const a=t&&t.length?t:n,i=[],r=[];return a.forEach((t=>{this.providerMap.has(t)&&this.providerMap.get(t).forEach((n=>{const a=n.validate(e);a.warnings.forEach((e=>r.push({cloudProvider:t,message:e}))),a.errors.forEach((e=>i.push({cloudProvider:t,message:e})))}))})),{errors:i,warnings:r}}))}}Gf.providerMap=new Map;const jf="infrastructure",Lf="delivery";vf.register({key:Lf,label:"Delivery",icon:"fa fa-fw fa-xs fa-tasks",primary:!0,order:100}),vf.register({key:jf,label:"Infrastructure",icon:"fa fa-fw fa-xs fa-cloud",primary:!0,order:200});oi(".user-menu .dropdown-toggle {\n background-color: var(--color-primary);\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: var(--color-white);\n font-weight: 200;\n padding: var(--padd);\n}\n.user-menu .dropdown-menu {\n top: 80%;\n min-width: 125px;\n border: 0;\n}\n@media (max-width: 480px) {\n .user-menu .dropdown-menu {\n position: static;\n }\n}\n");const Of=()=>{const e=ri.getAuthenticatedUser(),t=e.authenticated;return di.authEnabled?st.createElement("div",{className:"user-menu"},st.createElement(tn,{id:"user-menu-dropdown"},st.createElement(tn.Toggle,null,st.createElement("i",{className:"hidden-lg glyphicon glyphicon-user"}),st.createElement("span",{className:"hidden-xs hidden-sm hidden-md"},e.name)),t&&st.createElement(tn.Menu,null,st.createElement("li",{className:"sp-padding-xs",onClick:()=>Ai.logOut()},"Log Out")))):null},Yf={};var $f=Object.defineProperty,Hf=Object.getOwnPropertyDescriptor;let Vf=class extends ot.Component{render(){return ot.createElement(ta,null,ot.createElement(Jf,{app:this.props.app}))}};Vf=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Hf(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&$f(t,n,r),r})([bs("core.insight.banners")],Vf);const Jf=({app:e})=>{const{state:t}=Tn(),n=(di.banners||[]).filter((e=>{const n=e.routes.some((e=>t.name.includes(e)));return e.active&&n&&Boolean(Yf[e.key])})).map((t=>{const n=Yf[t.key];return ot.createElement(n,{key:`banner-${t.key}`,app:e})}));return n.length?ot.createElement("div",{className:"sp-margin-sm vertical"},n):null};class Wf{static listCertificates(){return Si("/certificates").get()}static listCertificatesByProvider(e){return Si("/certificates").path(e).get()}}class Kf extends ot.Component{constructor(e){super(e),this.PopoverContent=()=>{const{ttl:e}=this.state,t=!!e&&Date.now()>e,n=sr(e);return ot.createElement("div",null,"This server group ",t?"was scheduled to be":"will be"," automatically destroyed"," ",ot.createElement("strong",null,n),".")},this.state=this.getState(e)}getState(e){const t=e.entity&&e.entity.entityTags;if(t){const e=t.tags.filter((e=>"spinnaker:ttl"===e.name))[0];if(e)return{ttl:e.value.expiry}}return{}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{ttl:e}=this.state;return e?ot.createElement("span",{className:"tag-marker small"},ot.createElement(Ks,{Component:this.PopoverContent,title:"Ephemeral Server Group",className:"ephemeral-popover"},ot.createElement("i",{className:"ephemeral fa fa-clock"}))):null}}class qf extends ot.Component{constructor(){super(...arguments),this.getAlertAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,r,a.alerts.map((e=>e.name)).join(",")].join(":")},this.getNoticeAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,a.notices.map((e=>e.name)).join(",")].join(":")}}render(){const{entity:e,application:t,placement:n,hOffsetPercent:a,className:i,onUpdate:r}=this.props,s=e&&e.entityTags,o=s?[s]:[];return ot.createElement("div",{className:"entity-notifications"},ot.createElement(cf,{entity:e,tags:o,application:t,type:"alerts",gaLabelFn:this.getAlertAnalyticsLabel,grouped:!1,categorized:!0,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(cf,{entity:e,tags:o,application:t,type:"notices",gaLabelFn:this.getNoticeAnalyticsLabel,grouped:!1,categorized:!1,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(Kf,{entity:e}))}}qf.defaultProps={placement:"bottom",hOffsetPercent:"50%",className:"",onUpdate:qi};class Xf{static pauseResourceManagement(e){return Si("/managed/resources").path(e,"pause").post()}static resumeResourceManagement(e){return Si("/managed/resources").path(e,"pause").delete()}}var Zf,_f;(_f=Zf||(Zf={})).ACTUATING="ACTUATING",_f.CREATED="CREATED",_f.DIFF="DIFF",_f.DIFF_NOT_ACTIONABLE="DIFF_NOT_ACTIONABLE",_f.CURRENTLY_UNRESOLVABLE="CURRENTLY_UNRESOLVABLE",_f.MISSING_DEPENDENCY="MISSING_DEPENDENCY",_f.ERROR="ERROR",_f.HAPPY="HAPPY",_f.PAUSED="PAUSED",_f.RESUMED="RESUMED",_f.UNHAPPY="UNHAPPY",_f.UNKNOWN="UNKNOWN",_f.WAITING="WAITING",_f.DELETING="DELETING";const ev=()=>ot.createElement("p",null,ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,"Pausing management will not interrupt the action Spinnaker is currently performing to resolve the difference from desired state."))),tv=({isPaused:e,isActuating:t,regions:n})=>e?ot.createElement(ot.Fragment,null,ot.createElement("p",null,"Spinnaker will resume taking action to correct differences from the desired state."),ot.createElement(nv,{isPaused:!0,regions:n})):ot.createElement(ot.Fragment,null,ot.createElement("p",null,"While a resource is paused, Spinnaker will not take action to correct differences from the desired state."),t&&ot.createElement(ev,null),ot.createElement(nv,{isPaused:!0,regions:n})),nv=({isPaused:e,regions:t})=>t.length<2?null:ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,e?"Resuming":"Pausing"," management of this resource will affect the following regions:"," ",ot.createElement("b",null,t.join(", ")),"."));oi(".ManagedResourceStatusIndicator .HoverablePopover {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.ManagedResourceStatusIndicator .info {\n background-color: var(--color-status-info);\n}\n.ManagedResourceStatusIndicator .warning {\n background-color: var(--color-status-warning);\n}\n.ManagedResourceStatusIndicator .error {\n background-color: var(--color-status-error);\n}\n.ManagedResourceStatusIndicator .square {\n padding: 0 8px;\n font-size: 20px;\n}\n.ManagedResourceStatusIndicator .circle {\n padding: 4px;\n font-size: 14px;\n border-radius: 50%;\n}\n");const av=(e,t)=>{const{managedResourceSummary:n,isManaged:a}=e;if(!a||!n||n.isPaused)return Ze.when(!0);return op.confirm({header:"Pause Management?",bodyContent:ot.createElement(sv,{resourceSummary:n}),account:n.locations.account,buttonText:"Pause management",submitMethod:()=>Xf.pauseResourceManagement(n.id).then((()=>t.managedResources.refresh(!0)))}).then((()=>!0),(()=>!1))},iv=(e,t,n)=>{null==n||n();const{id:a,isPaused:i}=e;return op.confirm({header:`Really ${i?"resume":"pause"} resource management?`,bodyContent:ot.createElement(tv,{isActuating:e.status===Zf.ACTUATING,isPaused:i,regions:rv(e)}),account:e.locations.account,buttonText:(i?"Resume":"Pause")+" management",submitMethod:()=>(i?Xf.resumeResourceManagement(a):Xf.pauseResourceManagement(a)).then((()=>t.managedResources.refresh(!0)))})},rv=e=>e.locations.regions.map((e=>e.name)).sort(),sv=({resourceSummary:e})=>{const{status:t}=e;return ot.createElement(ot.Fragment,null,ot.createElement("p",null,"π ",ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If you need to temporarily stop Spinnaker from managing this resource β for example, if something is wrong and manual intervention is required β you can pause management and resume it later."),t===Zf.ACTUATING&&ot.createElement(ev,null),ot.createElement(nv,{isPaused:!0,regions:rv(e)}))},ov=({app:e,formik:t})=>{const[n,a]=ot.useState(!1),i=t.values,r=ot.useCallback((()=>{const{resourceSummary:n,backingData:i}=t.values;n&&iv(n,e).then((()=>{var n,r;i.managedResources=null==(r=null==(n=e.getDataSource("managedResources"))?void 0:n.data)?void 0:r.resources,a(!0),t.setFieldValue("resourceSummary",null)}),(()=>{}))}),[e,t]);return i.resourceSummary||n?n?ot.createElement("div",{className:"alert alert-info"},ot.createElement("div",{className:"horizontal top"},ot.createElement("div",null,ot.createElement("i",{className:"fa fa-check-circle"})),ot.createElement("div",{className:"sp-margin-m-left"},"Resource management has been paused."))):ot.createElement("div",{className:"alert alert-danger"},ot.createElement("p",null,ot.createElement("b",null,"π Spinnaker is managing this resource.")),ot.createElement("p",null,"Any changes you make to this cluster will be overridden in favor of the desired state."),ot.createElement("p",null,"If you need to manually deploy a new version of this server group, you should pause management."),ot.createElement("div",{className:"sp-margin-m-top"},ot.createElement("button",{className:"passive",onClick:r},ot.createElement("i",{className:"fa fa-pause"})," Pause management"))):null},lv=({resource:e,application:t,onClick:n,children:a})=>{if(!e)return null;const i=e.isManaged&&(!e.managedResourceSummary||e.managedResourceSummary.isPaused),r=t.isManagementPaused,s=e.isManaged&&!i&&!r;return ot.createElement(an,{onClick:()=>(s?av(e,t):Ze.when(!0)).then((e=>{e&&(null==n||n())}))},a)};class cv{constructor(e){this.handlers={};for(const t of e)this.registerHandler(t)}normalizeKind(e){return e.split("@")[0]}getHandler(e){return this.handlers[e]||this.handlers[this.normalizeKind(e)]}isSupported(e){return Boolean(this.getHandler(e))}registerHandler(e){this.handlers[e.kind]=e,this.handlers[this.normalizeKind(e.kind)]=e}}const pv=new class extends cv{getIcon(e){var t,n;return null!=(n=null==(t=this.getHandler(e))?void 0:t.iconName)?n:"placeholder"}getExperimentalDisplayLink(e){var t,n;return null==(n=null==(t=this.getHandler(e.kind))?void 0:t.experimentalDisplayLink)?void 0:n.call(t,e)}getSpinnakerType(e){var t;const n=this.normalizeKind(e);return(null==(t=n.split("/"))?void 0:t[1])||n}getNativeResourceRoutingInfo({kind:e,account:t,stack:n,detail:a,displayName:i}){const r={acct:t,stack:n,detail:a,q:i};switch(this.getSpinnakerType(e)){case"cluster":return{state:"home.applications.application.insight.clusters",params:r};case"security-group":return{state:"home.applications.application.insight.firewalls",params:r};case"classic-load-balancer":case"application-load-balancer":return{state:"home.applications.application.insight.loadBalancers",params:r}}}}([{kind:"titus/cluster",iconName:"cluster"},{kind:"ec2/cluster",iconName:"cluster"},{kind:"ec2/security-group",iconName:"securityGroup"},{kind:"ec2/classic-load-balancer",iconName:"loadBalancer"},{kind:"ec2/application-load-balancer",iconName:"loadBalancer"}]),dv=/^(.*)\[(.*)\]$/i,uv=e=>pv.getSpinnakerType(e),mv=e=>{switch(e){case"classic":return"classic-load-balancer";case"application":return"application-load-balancer";default:return null}};class gv{static decorateResources(e){return e.applicationPaused&&e.resources.forEach((e=>e.status=Zf.PAUSED)),e.resources.forEach((e=>e.isPaused=e.status===Zf.PAUSED)),e}static getApplicationSummary(e){return Si("/managed/application").path(e).query({entities:"resources"}).get().then(this.decorateResources)}static getResourceHistory(e){return Si("/history").path(e).query({limit:100}).get().then((e=>(e.forEach((e=>{var t;e.delta&&(e.delta=(t=e.delta)?Object.keys(t).reduce(((e,n)=>{const a=t[n],i=`["${we(n.split("/").filter(Boolean),(e=>{if(e.startsWith("{")&&e.endsWith("}"))return e.substring(1,e.length-1);const t=e.match(dv);return t?[t[1],t[2]]:e})).join('"]["fields"]["')}"]`,r=m(e,i);return g(e,i,{...r,key:n,diffType:a.state,actual:a.current,desired:a.desired}),e}),{}):{})})),e)))}}const hv=(e,t)=>e&&t&&e.app===t.app&&e.stack===t.stack&&e.detail===t.detail,fv=(e,t)=>e.managedResources.data.resources.filter((({kind:e})=>t.includes(uv(e)))),vv=e=>{if(!di.feature.managedResources)return;const t=fv(e,["cluster"]);e.serverGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>hv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.serverGroups.dataUpdated()},Av=e=>{if(!di.feature.managedResources)return;const t=fv(e,["classic-load-balancer","application-load-balancer"]);e.loadBalancers.data.forEach((e=>{const n=t.find((({kind:t,moniker:n,locations:{account:a,regions:i}})=>e.loadBalancerType&&uv(t)===mv(e.loadBalancerType)&&hv(n,e.moniker)&&a===e.account&&i.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.loadBalancers.dataUpdated()},Ev=e=>{if(!di.feature.managedResources)return;const t=fv(e,["security-group"]);e.securityGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>hv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.securityGroups.dataUpdated()};const{memo:bv}=ot,yv=(e,t,n)=>(Object.keys(e).sort(((e,t)=>e.localeCompare(t))).forEach((a=>{const{key:i,diffType:r,actual:s,desired:o,fields:l}=e[a];n.push({key:i,name:a,depth:t,actual:s,desired:o,type:r,isLeafNode:!l}),l&&yv(l,t+1,n)})),n),wv=bv((({diff:e})=>{const t=(e=>yv(e,0,[]))(e);return ot.createElement(rc,{layout:uc,columns:["configuration","change","actual","desired"]},t.map((({key:e,name:t,depth:n,isLeafNode:a,type:i,actual:r,desired:s})=>ot.createElement(cc,{key:e},ot.createElement(dc,{indent:n},ot.createElement(bc,null,t)),ot.createElement(dc,null,a&&ot.createElement(bc,{className:"text-italic"},i.toLowerCase())),ot.createElement(dc,null,ot.createElement(Ec,null,r)),ot.createElement(dc,null,ot.createElement(Ec,null,s))))))})),xv={delayShow:400,delayHide:100},Cv={size:"medium",fullWidth:!0},kv={root:"https://www.spinnaker.io/guides/user/managed-delivery",pinning:"https://www.spinnaker.io/guides/user/managed-delivery/pinning/",gettingStarted:"https://www.spinnaker.io/guides/user/managed-delivery/getting-started/",markAsBad:"https://www.spinnaker.io/guides/user/managed-delivery/marking-as-bad/",resourceStatus:"https://www.spinnaker.io/guides/user/managed-delivery/resource-status/"},Bv=e=>{var t,n;return(null==(n=null==(t=di.managedDelivery)?void 0:t.urls)?void 0:n[e])||kv[e]},Sv=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,Mv=({startedAt:e,completedAt:t})=>{const[,n]=ot.useState(!1);sl((()=>{t||n((e=>!e))}),t?0:1e3);const a=En.fromISO(e),i=t?En.fromISO(t):En.utc();return ot.createElement(ot.Fragment,null,ir(a,i))},Nv=(e,t)=>{const n=Dv(e),a=t?" ago":"";if(n.years||n.months){let t=En.local();return Sv&&(t=t.setZone(Sv)),e.year===t.year?e.toFormat("MMM d"):e.toFormat("MMM d, y")}return n.days?n.toFormat("d")+"d"+a:n.hours?n.toFormat("h")+"h"+a:n.minutes?n.toFormat("m")+"m"+a:n.seconds?n.toFormat("s")+"s"+a:null},Dv=e=>e.diffNow().negate().shiftTo("years","months","days","hours","minutes","seconds"),Iv=mt((({timestamp:e,clickToCopy:t,delayShow:n,removeStyles:a,withSuffix:i=!1})=>{const r=(e=>"number"==typeof e?En.fromMillis(e):"string"==typeof e?En.fromISO(e):e)(e),s=Sv?r.setZone(Sv):r,[o,l]=dt(Nv(s,i)),c=()=>{l(Nv(s,i))};if(sl(c,1e3),lt(c,[s]),!o)return null;const p=s.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"),d=ot.createElement("span",{className:a?void 0:"text-regular text-italic",style:a?void 0:{fontSize:13,lineHeight:1}},o);return t?ot.createElement(zi,{buttonInnerNode:d,text:p,toolTip:`${p} (click to copy)`}):ot.createElement(Qs,{value:p,delayShow:n},d)})),Fv={WARNING:"event-warning",ERROR:"event-error",SUCCESS:"event-success"},Tv=({level:e,diff:t,tasks:n,dismissModal:a,message:i})=>ot.createElement("div",{className:"flex-container-v left"},i&&ot.createElement("div",{className:wn("sp-padding-xs-yaxis",Fv[e])},i),n&&ot.createElement("div",{className:"flex-container-v"},n.map((({id:e,name:t})=>ot.createElement(Dn,{key:e,to:"home.applications.application.tasks.taskDetails",params:{taskId:e}},ot.createElement("a",{className:"sp-padding-xs-yaxis",onClick:()=>null==a?void 0:a()},t))))),t&&ot.createElement(wv,{diff:t})),Qv=ot.memo((({event:e,dismissModal:t})=>{const{timestamp:n,delta:a,tasks:i,message:r,reason:s,exceptionMessage:o,level:l}=e,c=ot.useMemo((()=>En.fromISO(n)),[n]),p=a||i||r||s||o;return ot.createElement(cc,{renderExpandedContent:p?()=>ot.createElement(Tv,{level:e.level,diff:a,tasks:i,message:r||s||o,dismissModal:t}):void 0},ot.createElement(dc,null,ot.createElement("span",{className:wn(Fv[l]||"event-info","event-level")},e.level)),ot.createElement(dc,null,ot.createElement("span",{className:"event-type"},e.displayName)),ot.createElement(dc,null,ot.createElement("div",{className:"flex-container-h middle wrap"},ot.createElement(Iv,{timestamp:c,clickToCopy:!0}))))}),Ca);oi(".ManagedResourceHistoryModal {\n width: 100%;\n}\n.ManagedResourceHistoryModal .event-type {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-level {\n font-size: 12px;\n line-height: 1;\n}\n.ManagedResourceHistoryModal .event-type-icon {\n font-size: 18px;\n}\n.ManagedResourceHistoryModal .event-time {\n white-space: nowrap;\n}\n.ManagedResourceHistoryModal .event-info {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-success {\n color: var(--color-success);\n}\n.ManagedResourceHistoryModal .event-warning {\n color: var(--color-alert);\n}\n.ManagedResourceHistoryModal .event-error {\n color: var(--color-danger);\n}\n.ManagedResourceHistoryModal .loading-error-message {\n color: var(--color-danger);\n}\n");const Pv=e=>ql(Uv,e),Rv=vc([{unit:"px",size:70},8,1.5]),Uv=({id:e,displayName:t,dismissModal:n})=>{const{status:a,result:i,refresh:r}=cl((()=>gv.getResourceHistory(e)),null,1e4,[]),s=!i&&["NONE","PENDING"].includes(a),o=!s&&"REJECTED"!==a;return ot.createElement(ot.Fragment,null,ot.createElement(Jl,null,"Resource history - ",t),ot.createElement(Wl,null,ot.createElement("div",{className:wn("ManagedResourceHistoryModal",{"flex-container-h middle center flex-grow":!o})},s&&ot.createElement(Es,{size:"medium"}),"REJECTED"===a&&ot.createElement("div",{className:"flex-container-v middle center"},ot.createElement("div",{className:"loading-error-message text-semibold sp-margin-m-bottom"},"Something went wrong."),ot.createElement("button",{className:"btn btn-default",onClick:r},ot.createElement("i",{className:"fa fa-xs fa-sync-alt sp-margin-xs-right"})," Try again")),o&&ot.createElement("div",{className:"sp-margin-xl-bottom"},ot.createElement(rc,{layout:Rv,columns:["Level","Event","Time"],expandable:null==i?void 0:i.some((({delta:e,tasks:t,message:n,reason:a,exceptionMessage:i})=>e||t||n||a||i))},(i||[]).map((e=>ot.createElement(Qv,{key:e.type+e.timestamp,event:e,dismissModal:n}))))))))};oi(".ManagedResourceDetailsIndicator {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n\n.ManagedResourceDetailsIndicator .md-logo {\n background-color: var(--color-black);\n padding: 18px;\n}\n\n.ManagedResourceDetailsIndicator .summary-message {\n font-size: 12px;\n font-weight: 300;\n}\n\n.ManagedResourceDetailsIndicator .resource-actions > .dropdown-toggle {\n color: var(--color-white);\n background-color: transparent;\n padding: 3px 10px;\n}\n");const zv=(e,t)=>Ui.log({category:"Managed Resource Menu",action:`${e} clicked`,data:{label:t}}),Gv=({resourceSummary:e,application:t})=>{if(!e)return null;const{id:n,isPaused:a}=e,i=ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement("a",{target:"_blank",onClick:()=>zv("Learn More",n),href:Bv("root")},"Learn More"))),r=`\n <p>Resource management is currently disabled for the entire application.\n <a\n href=${hi.$state.href("home.applications.application.config",{section:"managed-resources"})}\n >\n Resume application management\n </a>\n</p>`;return ot.createElement("div",{className:"flex-container-h middle ManagedResourceDetailsIndicator"},ot.createElement(Ks,{template:i,placement:"left"},ot.createElement("div",{className:"md-logo flex-container-h middle"},ot.createElement("img",{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2014.37557%2015.52748%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E%20%20%20%20%20%20.a%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23de4d53%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.b%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23eeac3c%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.c%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2396c25e%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.d%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2349a9df%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.e%20%7B%20%20%20%20%20%20%20%20fill%3A%20%238f429b%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.f%20%7B%20%20%20%20%20%20%20%20opacity%3A%200.25%3B%20%20%20%20%20%20%20%20fill%3A%20url%28%23a%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.g%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23b%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.h%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23c%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.i%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23fff%3B%20%20%20%20%20%20%7D%20%20%20%20%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22a%22%20x1%3D%225.51119%22%20y1%3D%229.27236%22%20x2%3D%225.9233%22%20y2%3D%229.32662%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.26839%22%20stop-color%3D%22%23441b19%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.73261%22%20stop-color%3D%22%23441b19%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22b%22%20x1%3D%225.00789%22%20y1%3D%227.58774%22%20x2%3D%227.13963%22%20y2%3D%226.85373%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.21861%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220.6%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22c%22%20x1%3D%224.24719%22%20y1%3D%2215.7319%22%20x2%3D%226.15272%22%20y2%3D%220.21263%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.35048%22%20stop-color%3D%22%23ff0%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.40939%22%20stop-color%3D%22%23ffff1c%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.53687%22%20stop-color%3D%22%23ffff64%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.72174%22%20stop-color%3D%22%23ffffd5%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.7878%22%20stop-color%3D%22%23fff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Cpath%20class%3D%22a%22%20d%3D%22M5.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H6.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.91827%2C6.45482%2C7.198%2C4.30693Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22b%22%20d%3D%22M6.58716%2C1.48546%2C4.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H5.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.3075%2C3.63335Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22c%22%20d%3D%22M3.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C5.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C3.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22d%22%20d%3D%22M2.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C4.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C2.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22e%22%20d%3D%22M1.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C3.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C1.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22f%22%20d%3D%22M6.6712%2C3.77776%2C6.397%2C2.95122l-1.68982%2C12.242a.49324.49324%2C0%2C0%2C0%2C.21478.43933.51145.51145%2C0%2C0%2C0%2C.16754-.31134Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpolygon%20class%3D%22g%22%20points%3D%225.692%202.719%205.02%207.591%206.46%2011.721%207.11%207.005%205.692%202.719%22%2F%3E%20%20%3Cpath%20class%3D%22h%22%20d%3D%22M4.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C6.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C4.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22i%22%20d%3D%22M13.07062.66277A.55391.55391%2C0%2C0%2C0%2C12.59216.2a.5261.5261%2C0%2C0%2C0-.53333.4549l-2.513%2C8.61346L6.68512.6278a.48865.48865%2C0%2C0%2C1%2C.00995.16266L6.37059%2C2.86276%2C9.101%2C11.10332a.49483.49483%2C0%2C0%2C0%2C.4834.34277.50023.50023%2C0%2C0%2C0%2C.47119-.35937l2.34375-8.00879%2C1.68115%2C12.18652a.49939.49939%2C0%2C0%2C0%2C.49463.43164.47593.47593%2C0%2C0%2C0%2C.06885-.00488.4995.4995%2C0%2C0%2C0%2C.42676-.56348Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%3C%2Fsvg%3E",width:"36px"}))),ot.createElement("div",{className:"flex-container-v middle flex-1 sp-margin-l-left"},ot.createElement("span",{className:"summary-message sp-margin-s-bottom"},"Managed by Spinnaker"),ot.createElement(tn,{className:"resource-actions sp-margin-xs-bottom flex-pull-left",id:"server-group-managed-resource-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"btn btn-sm btn-default dropdown-toggle"},"Resource Actions"),ot.createElement(tn.Menu,{className:"dropdown-menu"},!t.isManagementPaused&&ot.createElement(an,{onClick:()=>iv(e,t)},a?"Resume ":"Pause "," Management"),t.isManagementPaused&&ot.createElement(an,{disabled:!0,onClick:e=>{const t=e.target,n=null==t?void 0:t.getAttribute("href");n&&(window.location.href=n)}},"Resume Management ",ot.createElement(Zs,{content:r})),ot.createElement("li",null,ot.createElement("a",{onClick:()=>{Pv(e),zv("History",n)}},"History")),ot.createElement("li",null,ot.createElement("a",{target:"_blank",onClick:()=>zv("Raw Source",n),href:`${di.gateUrl}/managed/resources/${n}`},"Raw Source"))))))},jv="spinnaker.core.managed.resourceDetailsIndicator.component";n(jv,[]).component("managedResourceDetailsIndicator",yn(Gl(Gv,"managedResourceDetailsIndicator"),["resourceSummary","application"]));const Lv=({resourceSummary:e})=>ot.createElement("a",{target:"_blank",onClick:()=>((e,t,n)=>Ui.log({category:"Managed Resource Status Indicator",action:`${e} clicked`,data:{label:`${t},${n}`}}))("Status docs link",e.id,e.status),href:`${Bv("resourceStatus")}#${e.status.toLowerCase().replace("_","-")}`},"Learn more"),Ov={DELETING:{appearance:"warning",iconName:"mdActuating",popoverContents:()=>ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is deleting this temporary managed resource"))},ACTUATING:{appearance:"info",iconName:"mdActuating",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is taking action to resolve a difference from this resource's desired state.")),ot.createElement("p",null,"You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},CREATED:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker has started managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Lv,{resourceSummary:e})))},DIFF:{appearance:"info",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state.")),ot.createElement("p",null,"In a moment, Spinnaker will take action to bring this resource back to its desired state. You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},DIFF_NOT_ACTIONABLE:{appearance:"warning",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but can't take action to resolve it.")),ot.createElement("p",null,"Spinnaker doesn't have a way of resolving this kind of difference. Manual action might be required. You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},CURRENTLY_UNRESOLVABLE:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a temporary issue to pass.")),ot.createElement("p",null,"Something required for management is temporarily experiencing issues. Spinnaker can't take action right now, but should be able to soon. You can click History to see more."," ",ot.createElement(Lv,{resourceSummary:e})))},MISSING_DEPENDENCY:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a missing dependency to become available.")),ot.createElement("p",null,"Something required for management isn't ready yet. Spinnaker can't take action right now, but will resume once the missing dependencies exist. You can click History to see more."," ",ot.createElement(Lv,{resourceSummary:e})))},ERROR:{appearance:"error",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Something went wrong.")),ot.createElement("p",null,"Something went wrong while trying to check this resource's current state. Spinnaker can't take action right now, and manual intervention might be required. You can click History to see more."," ",ot.createElement(Lv,{resourceSummary:e})))},HAPPY:{appearance:"info",iconName:"md",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Lv,{resourceSummary:e})))},PAUSED:{appearance:"warning",iconName:"mdPaused",popoverContents:(e,t)=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management is paused.")),t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management for the entire application is temporarily paused. ",ot.createElement(Lv,{resourceSummary:e})),!t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management has been temporarily paused."," ",ot.createElement(Lv,{resourceSummary:e})))},RESUMED:{appearance:"info",iconName:"mdResumed",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management was just resumed.")),ot.createElement("p",null,"Management was resumed after being temporarily paused. If Spinnaker detects that a difference from the desired state occurred while paused, it will act to correct it. ",ot.createElement(Lv,{resourceSummary:e})))},UNHAPPY:{appearance:"error",iconName:"mdUnhappy",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but hasn't been able to correct it.")),ot.createElement("p",null,"Spinnaker has been trying to correct a difference, but taking action hasn't helped. Manual intervention might be required. You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},UNKNOWN:{appearance:"warning",iconName:"mdUnknown",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Unable to determine resource status.")),ot.createElement("p",null,"Spinnaker is configured to manage this resource, but can't calculate its current status."," ",ot.createElement(Lv,{resourceSummary:e})))},WAITING:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for information.")),ot.createElement("p",null,"This resource is part of a brand new environment. Spinnaker is waiting for an artifact to become available to deploy. It normally takes less than 5 minutes for a newly created artifact to be seen, and after that all constraints need to pass in order for it to start deploying. You can click History to see a more detailed message. ",ot.createElement(Lv,{resourceSummary:e})))}},Yv=({resourceSummary:e,application:t,hidePopover:n})=>{const a=ot.createElement("button",{className:"passive flex-none",onClick:()=>{null==n||n(),Pv(e)}},ot.createElement("i",{className:"fa fa-history"})," History");return ot.createElement("div",{className:"horizontal right"},ot.createElement("p",{className:"flex-container-h middle sp-margin-m-top sp-margin-xs-bottom sp-group-margin-s-xaxis"},a,!e.isPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>iv(e,t,n)},ot.createElement("i",{className:"fa fa-pause"})," Pause management of this resource"),e.isPaused&&!t.isManagementPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>iv(e,t,n)},ot.createElement("i",{className:"fa fa-play"})," Resume management of this resource"),t.isManagementPaused&&ot.createElement(Dn,{to:"home.applications.application.config",params:{section:"managed-resources"}},ot.createElement("a",null,"Resume application management"))))},$v=({application:e,children:t,placement:n,resourceSummary:a})=>{const{status:i}=a;return ot.createElement(Ks,{Component:({hidePopover:t})=>ot.createElement(ot.Fragment,null,Ov[i].popoverContents(a,e),ot.createElement(Yv,{resourceSummary:a,application:e,hidePopover:t})),delayHide:200,delayShow:200,placement:n},t)},Hv=({shape:e,resourceSummary:t,application:n})=>{const{status:a}=t;return ot.createElement("div",{className:"flex-container-h stretch ManagedResourceStatusIndicator"},ot.createElement($v,{application:n,placement:"left",resourceSummary:t},ot.createElement("div",{className:wn("flex-container-h middle",e,Ov[a].appearance)},ot.createElement(Bn,{appearance:"light",name:Ov[a].iconName,size:"small"}))))},Vv="spinnaker.core.managed.dataSource";n(Vv,[]).run(["$q",e=>{if(!di.feature.managedResources)return;Yg.registerDataSource({key:"managedResources",visible:!1,loader:e=>gv.getApplicationSummary(e.name),onLoad:(t,n)=>(t.isManagementPaused=n.applicationPaused,e.when(n)),afterLoad:e=>{e.serverGroups.ready().then((()=>vv(e)),qi),e.loadBalancers.ready().then((()=>Av(e)),qi),e.securityGroups.ready().then((()=>Ev(e)),qi)},defaultData:{applicationPaused:!1,hasManagedResources:!1,resources:[]}}),Yg.registerDataSource({key:"environments",sref:".environments",category:Lf,optional:!0,optIn:!0,label:"Environments",icon:"fa fa-fw fa-xs fa-code-branch",iconName:"spEnvironments",description:"Artifacts and environments managed by Spinnaker",defaultData:{applicationPaused:!1,hasManagedResources:!1,environments:[],artifacts:[],resources:[]}})}]);const Jv=e=>e.current?{width:e.current.offsetWidth,height:e.current.offsetHeight}:{width:0,height:0},Wv=(e,t)=>{const n=Po();return ot.useCallback((a=>{Ui.log({...a,category:`MD__${e}`,action:(null==a?void 0:a.action)||t||"",data:{label:null==a?void 0:a.label,application:null==n?void 0:n.name,...null==a?void 0:a.data}})}),[null==n?void 0:n.name,e,t])},Kv=["listView","gridView"],qv=localStorage.getItem("MD_environmentsDirection"),Xv=ba({key:"environmentsDisplay",default:(Zv=qv,Boolean(Zv&&Kv.includes(Zv))?qv:"gridView")});var Zv;const _v=()=>{const[e,t]=wa(Xv);return ot.useEffect((()=>{localStorage.setItem("MD_environmentsDirection",e)}),[e]),{direction:e,setDirection:t}},eA=()=>{const{direction:e,setDirection:t}=_v(),n=Wv("environmentsDirection");return ot.useEffect((()=>{n({action:e})}),[e]),ot.createElement("button",{type:"button",className:"btn env-direction-btn",onClick:()=>t((e=>"listView"===e?"gridView":"listView"))},"listView"===e?"Grid view":"List view",ot.createElement("i",{className:wn("listView"===e?"fas fa-columns":"far fa-list-alt","sp-margin-xs-left")}))},tA=(e,t)=>{const{direction:n}=_v(),{width:a}=((e,{delay:t=100,isActive:n=!0})=>{const[a,i]=ot.useState(Jv(e));return ot.useLayoutEffect((()=>{const a=xe((()=>{i(Jv(e))}),t,{leading:!0});if(n&&e.current){const t=new ResizeObserver(a);return t.observe(e.current),()=>t.disconnect()}return()=>{}}),[t,n,e.current]),a})(e,{isActive:"gridView"===n}),i=Math.min(Math.round(a/500),t.length);return{environments:"gridView"===n?Ce(t):t,style:"gridView"===n?{gridTemplateColumns:`repeat(${i}, 1fr)`}:{},className:"gridView"===n?"grid-view":void 0}},nA=ot.forwardRef((({className:e,style:t,children:n},a)=>ot.createElement("div",{ref:a,className:wn(e,"environments-list"),style:t},n)));oi(".HorizontalTabs {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid var(--color-alto);\n margin-bottom: var(--xl-spacing);\n}\n.HorizontalTabs .tab {\n background: none;\n border: none;\n padding: 0;\n min-width: 150px;\n max-width: 33%;\n padding: var(--xs-spacing) var(--m-spacing);\n font-weight: 600;\n letter-spacing: 0.2px;\n border-bottom: 3px solid transparent;\n color: var(--color-concrete);\n text-align: center;\n}\n@media (max-width: 768px) {\n .HorizontalTabs .tab {\n min-width: 80px;\n }\n}\n.HorizontalTabs .tab:focus:active {\n text-decoration: none;\n}\n.HorizontalTabs .tab:hover {\n text-decoration: none;\n color: var(--color-dovegray);\n border-bottom: 3px solid var(--color-accent-g2);\n}\n.HorizontalTabs .tab.selected-tab {\n border-bottom: 3px solid var(--color-accent);\n color: var(--color-black);\n}\n.HorizontalTabs .right-element {\n margin-left: auto;\n -ms-flex-item-align: center;\n align-self: center;\n}\n");const aA=({tabs:e,className:t,onClick:n,rightElement:a})=>ot.createElement("div",{className:wn(t,"HorizontalTabs")},e.map((e=>ot.createElement(iA,{key:e.path,data:e,onClick:n}))),a&&ot.createElement("div",{className:"right-element"},a)),iA=({data:e,onClick:t})=>{const n=Pn(e.path,{},"selected-tab");return ot.createElement("a",{href:n.href,className:wn("tab",n.className),onClick:a=>{n.onClick(a),null==t||t(e)}},e.title)},rA="MD_debug",sA="1",oA=()=>localStorage.getItem(rA)===sA,lA=e=>{e?localStorage.setItem(rA,sA):localStorage.removeItem(rA)};oi(".Environments {\n width: 100%;\n padding: 0 var(--l-spacing);\n --base-horizontal-padding: 20px;\n}\n@media (max-width: 768px) {\n .Environments {\n padding: 0;\n --base-horizontal-padding: var(--m-spacing);\n }\n}\n.Environments a,\n.Environments .btn-link {\n color: var(--color-text-link-g1);\n}\n.Environments a:focus,\n.Environments .btn-link:focus,\n.Environments a:active,\n.Environments .btn-link:active {\n outline: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.Environments a:focus:active,\n.Environments .btn-link:focus:active {\n outline: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.Environments .env-direction-btn {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n line-height: 1;\n padding: var(--xs-spacing);\n background-color: transparent;\n color: var(--color-dovegray);\n}\n.Environments .env-direction-btn > i {\n margin-top: 1px;\n font-size: 16px;\n}\n.Environments .env-direction-btn:focus,\n.Environments .env-direction-btn:active:focus {\n outline: none;\n}\n@media (max-width: 768px) {\n .Environments .env-direction-btn {\n display: none;\n }\n}\n.Environments .environments-list {\n width: 100%;\n display: grid;\n gap: var(--m-spacing);\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n --row-element-icon-width: 32px;\n}\n.Environments .environments-list.grid-view {\n gap: var(--xl-spacing) var(--m-spacing);\n --row-element-icon-width: 26px;\n}\n.ui-switcher {\n background-color: var(--color-white);\n padding: var(--xs-spacing) var(--s-spacing);\n position: absolute;\n border-radius: 4px;\n border: 1px solid var(--color-alto);\n bottom: 4px;\n right: 30px;\n}\n@media (max-width: 768px) {\n .ui-switcher {\n right: 8px;\n }\n}\n");oi(".Environments .environment-row-element,\n.ActionModal .environment-row-element {\n display: grid;\n grid-template-columns: [icon] var(--row-element-icon-width) [details] 1fr;\n position: relative;\n}\n.Environments .environment-row-element.with-padding,\n.ActionModal .environment-row-element.with-padding {\n padding: var(--l-spacing) var(--base-horizontal-padding) var(--s-spacing) var(--base-horizontal-padding);\n}\n@media (max-width: 768px) {\n .Environments .environment-row-element,\n .ActionModal .environment-row-element {\n grid-template-columns: [icon] 30px [details] 1fr;\n }\n}\n.Environments .environment-row-element .no-items-message,\n.ActionModal .environment-row-element .no-items-message {\n grid-column: 1 / 3;\n}\n.Environments .environment-row-element .row-details,\n.ActionModal .environment-row-element .row-details {\n grid-column: details;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n}\n.Environments .environment-row-element .row-icon,\n.ActionModal .environment-row-element .row-icon {\n grid-column: icon;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-item-align: start;\n align-self: flex-start;\n padding-top: var(--2xs-spacing);\n}\n.Environments .environment-row-element .row-icon.small,\n.ActionModal .environment-row-element .row-icon.small {\n padding-top: var(--3xs-spacing);\n}\n.Environments .environment-row-element .row-title,\n.ActionModal .environment-row-element .row-title {\n font-size: 18px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--color-charcoal);\n display: grid;\n grid-template-columns: 1fr auto;\n}\n.Environments .environment-row-element .row-title.small,\n.ActionModal .environment-row-element .row-title.small {\n font-size: 14px;\n}\n.Environments .environment-row-element .row-title > a,\n.ActionModal .environment-row-element .row-title > a {\n color: inherit;\n}\n.Environments .md-icon-success,\n.ActionModal .md-icon-success {\n color: var(--color-status-success);\n}\n.Environments .md-icon-pending,\n.ActionModal .md-icon-pending {\n color: var(--color-titanium);\n}\n.Environments .md-icon-fail,\n.ActionModal .md-icon-fail {\n color: var(--color-status-error);\n}\n.Environments .delimited-element:not(:last-child),\n.ActionModal .delimited-element:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-element:not(:first-child)::before,\n.ActionModal .delimited-element:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:last-child),\n.ActionModal .delimited-elements > *:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:first-child)::before,\n.ActionModal .delimited-elements > *:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .truncate,\n.ActionModal .truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.Environments button.md-btn,\n.ActionModal button.md-btn {\n background-color: transparent;\n -webkit-box-shadow: 1px 2px 2px 0px rgba(0, 0, 0, 0.06), 0px 1px 3px 0px rgba(0, 0, 0, 0.03);\n box-shadow: 1px 2px 2px 0px rgba(0, 0, 0, 0.06), 0px 1px 3px 0px rgba(0, 0, 0, 0.03);\n}\n.Environments button.md-btn:hover,\n.ActionModal button.md-btn:hover {\n background-color: var(--color-cirrus);\n}\n.Environments button.md-btn:active,\n.ActionModal button.md-btn:active,\n.Environments button.md-btn:focus,\n.ActionModal button.md-btn:focus {\n outline: none;\n}\n.Environments button.md-btn-accent,\n.ActionModal button.md-btn-accent,\n.Environments button.md-btn-accent:hover,\n.ActionModal button.md-btn-accent:hover {\n color: var(--color-accent);\n border-color: var(--color-accent);\n}\n.Environments button.md-btn-success,\n.ActionModal button.md-btn-success,\n.Environments button.md-btn-success:hover,\n.ActionModal button.md-btn-success:hover {\n color: var(--color-validation-success);\n border-color: var(--color-validation-success);\n}\n.Environments button.md-btn-danger,\n.ActionModal button.md-btn-danger,\n.Environments button.md-btn-danger:hover,\n.ActionModal button.md-btn-danger:hover {\n color: var(--color-danger);\n border: 1px solid var(--color-danger);\n}\n.Environments .md-action-button,\n.ActionModal .md-action-button {\n padding: 0 var(--xs-spacing);\n text-transform: uppercase;\n color: inherit;\n font-size: 12px;\n font-weight: 500;\n padding: 2px var(--s-spacing);\n color: var(--color-primary-g1);\n letter-spacing: 0.2px;\n}\n.Environments .md-action-button:hover,\n.ActionModal .md-action-button:hover {\n background-color: var(--color-alabaster);\n}\n.Environments .no-underline,\n.ActionModal .no-underline {\n text-decoration: none;\n}\n.Environments .md-actions-gap,\n.ActionModal .md-actions-gap {\n gap: var(--s-spacing);\n}\n.Environments .in-progress-dot,\n.ActionModal .in-progress-dot {\n height: 8px;\n width: 8px;\n border-radius: 999px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-animation: deployingAnimation 2s infinite;\n animation: deployingAnimation 2s infinite;\n}\n@-webkit-keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@-webkit-keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n@keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n");const cA=Object.entries({overview:"Overview",history:"History",config:"Configuration"}).map((([e,t])=>({title:t,path:`.${e}`}))),pA=()=>{var e;const t=Wv("EnvironmentsTab"),{state:n,params:a}=Tn();return ot.useEffect((()=>{"enabled"===a.md_debug?lA(!0):"disabled"===a.md_debug&&lA(!1)}),[a]),ot.createElement("div",{className:"vertical Environments"},ot.createElement(aA,{tabs:cA,rightElement:(null==(e=n.name)?void 0:e.endsWith(".config"))?void 0:ot.createElement(eA,null),onClick:({title:e,path:n})=>{t({action:`Open_${e}`,data:{path:n}})}}),ot.createElement(Qn,null),ot.createElement("div",{style:{minHeight:32,minWidth:32}}))},dA=()=>{const e=Bv("gettingStarted");return ot.createElement("div",{style:{width:"100%"}},"Welcome! This application does not have any environments or artifacts. Check out the"," ",ot.createElement("a",{href:e,target:"_blank"},"getting started guide")," ","to set some up!")},uA=({hasApplicationData:e,error:t})=>{const n=Wv("Error","AppQuery");return ot.useEffect((()=>{t&&e&&n({level:"ERROR",error:t})}),[t,n,e]),e?ot.createElement("div",{style:{width:"100%"}},"Failed to load application data, please refresh and try again.",ot.createElement("p",null,t.message)):ot.createElement(dA,null)},mA={},gA=Aa`
|
|
1
|
+
import*as e from"angular";import t,{module as n,element as a,noop as i,copy as r,toJson as s,isDefined as o}from"angular";import*as l from"lodash";import c,{cloneDeep as p,merge as d,isNil as u,get as m,set as g,intersection as h,uniq as f,zipObject as v,chain as A,isEqual as E,padStart as b,isNumber as y,isString as w,isPlainObject as x,isArray as C,isNull as k,isUndefined as B,forIn as S,without as M,startCase as N,isBoolean as D,values as I,map as F,flatten as T,xor as Q,isFunction as P,truncate as R,defaults as U,toPath as z,throttle as G,isObject as j,findLast as L,maxBy as O,sortBy as Y,has as H,find as V,cloneDeepWith as J,pick as W,size as K,some as q,reduce as X,includes as Z,forOwn as ee,pickBy as te,filter as ne,identity as ae,groupBy as ie,isEmpty as re,every as se,each as oe,extend as le,compact as ce,noop as pe,head as de,partition as ue,memoize as me,fromPairs as ge,omit as he,omitBy as fe,isDate as ve,uniqBy as Ae,kebabCase as Ee,union as be,keyBy as ye,flatMap as we,debounce as xe,reverse as Ce,orderBy as ke,toNumber as Be,keys as Se,unset as Me,capitalize as Ne,flow as De,clone as Ie,bindAll as Fe,template as Te,trim as Qe,join as Pe,last as Re,max as Ue,sumBy as ze,sum as Ge,assign as je,toPairs as Le,defaultsDeep as Oe,upperFirst as Ye,forEach as $e,first as He,countBy as Ve,range as Je}from"lodash";import{$http as We,$location as Ke,$rootScope as qe,$log as Xe,$q as Ze,$timeout as _e,$templateRequest as et,$compile as tt,$controller as nt,$window as at,$interpolate as it,$templateCache as rt}from"ngimport";import*as st from"react";import ot,{useEffect as lt,useRef as ct,useMemo as pt,useState as dt,useCallback as ut,memo as mt}from"react";import*as gt from"rxjs";import{fromEvent as ht,defer as ft,from as vt,Subject as At,of as Et,merge as bt,timer as yt,BehaviorSubject as wt,empty as xt,ReplaySubject as Ct,combineLatest as kt,forkJoin as Bt}from"rxjs";import{map as St,publishReplay as Mt,refCount as Nt,switchMap as Dt,takeUntil as It,delay as Ft,filter as Tt,debounceTime as Qt,tap as Pt,mergeMap as Rt,catchError as Ut,finalize as zt,toArray as Gt,skip as jt,take as Lt,startWith as Ot,withLatestFrom as Yt,distinctUntilChanged as $t,merge as Ht,first as Vt,bufferCount as Jt,concatMap as Wt,scan as Kt}from"rxjs/operators";import{Modal as qt,OverlayTrigger as Xt,Tooltip as Zt,Overlay as _t,Popover as en,Dropdown as tn,Glyphicon as nn,MenuItem as an,Button as rn,Pagination as sn}from"react-bootstrap";import*as on from"react-dom";import ln from"react-dom";import cn,{Creatable as pn}from"react-select";import dn from"react-virtualized-select";import un from"memoize-one";import mn from"react-tether";import gn from"diff-match-patch";import hn from"jquery";import{formatDistanceToNow as fn,formatDistance as vn,format as An}from"date-fns";import{DateTime as En,Duration as bn}from"luxon";import{react2angular as yn}from"react2angular";import wn from"classnames";import{Parser as xn,HtmlRenderer as Cn}from"commonmark";import kn from"dompurify";import{Icon as Bn,Illustration as Sn}from"@spinnaker/presentation";export{Icon,Illustration}from"@spinnaker/presentation";import{CacheFactory as Mn}from"cachefactory";import*as Nn from"@uirouter/react";import{UISref as Dn,useSref as In,useIsActive as Fn,useCurrentStateAndParams as Tn,UIView as Qn,useSrefActive as Pn,useRouter as Rn,useParentView as Un,UISrefActive as zn,useOnStateChanged as Gn}from"@uirouter/react";import{connect as jn,Formik as Ln,FormikConsumer as On,FastField as Yn,Field as $n,getIn as Hn,Form as Vn,FieldArray as Jn}from"formik";import Wn from"root/version.json";import{toast as Kn,ToastContainer as qn}from"react-toastify";import{SpelExpressionEvaluator as Xn}from"spel2js";import Zn from"react-day-picker/DayPickerInput";import"react-day-picker/lib/style.css";import _n from"react-ace";import"brace/mode/json";import"brace/ext/searchbox";import{CSSTransition as ea}from"react-transition-group";import{UIRouterContextComponent as ta,UIRouterContext as na,UI_ROUTER_REACT_HYBRID as aa}from"@uirouter/react-hybrid";import{dump as ia,loadAll as ra,YAMLException as sa,load as oa}from"js-yaml";import{angular2react as la}from"angular2react";import"jquery-textcomplete";import ca from"@uirouter/angularjs";import{hri as pa}from"human-readable-ids";import{Debounce as da,Throttle as ua}from"lodash-decorators";import*as ma from"@apollo/client";import{ApolloClient as ga,InMemoryCache as ha,HttpLink as fa,ApolloProvider as va,gql as Aa,useApolloClient as Ea}from"@apollo/client";import{atom as ba,useRecoilValue as ya,useRecoilState as wa,RecoilRoot as xa}from"recoil";import Ca from"lodash/isEqual";import ka from"react-content-loader";import Ba from"ansi_up";import*as Sa from"@uirouter/core";import{RejectType as Ma,Category as Na,Glob as Da}from"@uirouter/core";import{SortableHandle as Ia,arrayMove as Fa,SortableElement as Ta,SortableContainer as Qa}from"react-sortable-hoc";import*as Pa from"@uirouter/rx";import{UIRouterRxPlugin as Ra}from"@uirouter/rx";import*as Ua from"prop-types";import"brace/mode/yaml";import"brace/theme/textmate";import"bootstrap/dist/css/bootstrap.css";import"bootstrap/dist/js/bootstrap";import"@fortawesome/fontawesome-free/css/solid.css";import"@fortawesome/fontawesome-free/css/regular.css";import"@fortawesome/fontawesome-free/css/fontawesome.css";import"react-select/dist/react-select.css";import"react-virtualized/styles.css";import"react-virtualized-select/styles.css";import"ui-select/dist/select.css";import"@spinnaker/styleguide/public/styleguide.min.css";import"select2/select2.css";import"select2-bootstrap-css/select2-bootstrap.css";import"source-sans/source-sans-3.css";import"@uirouter/angularjs/release/stateEvents";import za from"angulartics";import Ga from"angulartics-google-analytics";import"react-toastify/dist/ReactToastify.min.css";import{createUltimatePagination as ja,ITEM_TYPES as La}from"react-ultimate-pagination";import Oa from"angular-ui-bootstrap";import{CellMeasurer as Ya,CellMeasurerCache as $a,AutoSizer as Ha,List as Va,SortDirection as Ja,Table as Wa,Column as Ka}from"react-virtualized";import qa from"js-worker-search";import"angular-ui-sortable";import Xa from"react-ga";import Za from"ui-select";import _a from"angular-messages";import ei from"angular-sanitize";import{angularSpinner as ti}from"angular-spinner";var ni=Object.freeze({__proto__:null,get AccountSelectInput(){return _r},get AccountService(){return Di},get AccountTag(){return ts},get InvalidAPIResponse(){return Ei},get RequestBuilder(){return wi},get DeprecatedRequestBuilder(){return xi},get invalidContentMessage(){return Ci},get makeRequestBuilderConfig(){return ki},get API(){return Bi},get REST(){return Si},get ApplicationContext(){return ns},get ApplicationContextProvider(){return as},get ApplicationIcon(){return Cs},get Application(){return Fh},get ApplicationStateProvider(){return Df},get APPLICATION_STATE_PROVIDER(){return If},get ApplicationModelBuilder(){return Mf},get ConfigSectionFooter(){return Ff},get ConfigSectionFooterController(){return Qf},get CONFIG_SECTION_FOOTER(){return Rf},get AppListExtractor(){return zf},get PlatformHealthOverride(){return Bc},get PlatformHealthOverrideInput(){return Sc},get ApplicationNameValidator(){return Gf},get INFRASTRUCTURE_KEY(){return jf},get DELIVERY_KEY(){return Lf},get verticalNavExpandedAtom(){return uf},get NavigationCategoryRegistry(){return ff},get navigationCategoryRegistry(){return vf},get ApplicationDataSourceRegistry(){return Yg},get ApplicationReader(){return Hg},get ApplicationWriter(){return Tf},get ApplicationDataSource(){return Ih},get ArtifactIconService(){return im},get ArtifactReferenceService(){return rm},get EXECUTION_ARTIFACT_TAB(){return lm},get ExpectedArtifactService(){return cm},get IMAGE_SOURCE_SELECTOR_COMPONENT(){return dm},get ExecutionArtifactTab(){return om},get ArtifactIconList(){return sm},get ArtifactTypePatterns(){return fp},get excludeAllTypesExcept(){return vp},get ExpectedArtifactSelectorViewController(){return um},get defaultExcludedArtifactTypes(){return gm},get NgGenericArtifactDelegate(){return hm},get NgGCEImageArtifactDelegate(){return vm},get NgAppEngineDeployArtifactDelegate(){return Am},get NgBakeManifestArtifactDelegate(){return Em},get NgAppengineConfigArtifactDelegate(){return bm},get ArtifactAccountSelector(){return wm},get ARTIFACT_ACCOUNT_SELECTOR_COMPONENT_REACT(){return xm},get ArtifactIcon(){return ym},get ExpectedArtifactSelector(){return Sm},get EXPECTED_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Mm},get ExpectedArtifactEditor(){return Nm},get EXPECTED_ARTIFACT_EDITOR_COMPONENT_REACT(){return Dm},get ExpectedArtifactSourceSelector(){return km},get EXPECTED_ARTIFACT_SOURCE_SELECTOR_COMPONENT_REACT(){return Bm},get ExpectedArtifactModal(){return Tm},get StageArtifactSelector(){return Qm},get STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT(){return Pm},get StageArtifactSelectorDelegate(){return Rm},get AuthenticationService(){return ri},get AuthenticationInitializer(){return Ai},get UserMenu(){return Of},get BannerContainer(){return Vf},get BannerContainerContent(){return Jf},get CacheInitializerService(){return Ad},get CACHE_INITIALIZER_SERVICE(){return Ed},get CollapsibleSectionStateCacheInternal(){return Bs},get CollapsibleSectionStateCache(){return Ss},get DeckCacheFactory(){return Hp},get InfrastructureCachesInternal(){return ld},get InfrastructureCaches(){return cd},get INFRASTRUCTURE_CACHE_CONFIG(){return sd},get ViewStateCacheInternal(){return Wp},get ViewStateCache(){return Kp},get CertificateReader(){return Wf},get BuildServiceType(){return Lu},get IgorService(){return Yu},get CloudProviderRegistry(){return Ni},get ProviderSelectionService(){return pp},get CloudProviderLabel(){return dp},get CloudProviderLogo(){return up},get ProviderServiceDelegate(){return mp},get PROVIDER_SERVICE_DELEGATE(){return gp},get ClusterPodTitleWrapper(){return oy},get DefaultClusterMatcher(){return ly},get ClusterMatcher(){return cy},get ClusterService(){return vy},get CLUSTER_SERVICE(){return Ay},get TaskMatcher(){return py},get taskMatcher(){return fy},get ClusterFilterService(){return Nd},get FilterSearch(){return Ey},get FilterSection(){return by},get SETTINGS(){return di},get VersionChecker(){return to},get ConfirmationModalService(){return op},get CoreRedBlackAdditionalFields(){return Cy},get DeploymentStrategySelector(){return xy},get DeploymentStrategyRegistrar(){return yy},get DeploymentStrategyRegistry(){return wy},get Key(){return Jg},get ManagedResourceStatus(){return Zf},get AddEntityTagLinks(){return ky},get EntitySource(){return Sy},get EntityTagEditor(){return of},get ClusterTargetBuilder(){return My},get EntityTagsReader(){return pd},get EntityTagWriter(){return rf},get CategorizedNotifications(){return af},get EntityName(){return Kh},get GroupedNotificationList(){return qh},get NotificationCategory(){return Zh},get NotificationList(){return _h},get NotificationCategories(){return nf},get ExecutionMarkerIcon(){return Rp},get EntityNotifications(){return qf},get VIEW_CHANGES_LINK(){return Py},get ViewChangesLink(){return Qy},get DIFF_MODULE(){return Ry},get EventBus(){return yp},get FilterModelService(){return ad},get FilterCheckbox(){return id},get FilterCollapse(){return rd},get FilterTags(){return bd},get digestDependentFilters(){return wd},get MapEditor(){return zy},get MapEditorInput(){return jy},get MapPair(){return Uy},get NumberList(){return Oy},get HealthCounts(){return Og},get HelpField(){return Zs},get HelpMenu(){return so},get HelpTextExpandedContext(){return Hs},get HelpContentsRegistry(){return Ws},get RecentHistoryService(){return Ag},get RECENT_HISTORY_SERVICE(){return Eg},get ImageReader(){return Yy},get IMAGE_READER(){return $y},get InstanceReader(){return Hy},get ConsoleOutputLink(){return Jy},get InstanceActions(){return Wy},get InstanceDetails(){return Zy},get InstanceDetailsCmp(){return _y},get InstanceDetailsHeader(){return ew},get InstanceDetailsPane(){return Ky},get InstanceInsights(){return tw},get InstanceLinks(){return nw},get InstanceWriter(){return iw},get InstanceTypeService(){return rw},get INSTANCE_TYPE_SERVICE(){return sw},get InstanceLoadBalancerHealth(){return ow},get LoadBalancerDataUtils(){return lw},get LoadBalancerReader(){return cw},get LOAD_BALANCER_READ_SERVICE(){return pw},get LoadBalancerWriter(){return dw},get CreateLoadBalancerButton(){return uw},get LoadBalancerClusterContainer(){return Aw},get LoadBalancerInstances(){return fw},get LoadBalancerServerGroup(){return vw},get LoadBalancersTagWrapper(){return ww},get FunctionDetails(){return kw},get FunctionReader(){return Bw},get FUNCTION_READ_SERVICE(){return Sw},get FunctionWriter(){return Mw},get CreateFunctionButton(){return Nw},get V2_MODAL_WIZARD_COMPONENT(){return Hc},get V2ModalWizard(){return Yc},get ModalClose(){return Mc},get SubmitButton(){return Nc},get ModalWizard(){return Dc},get WizardModal(){return jc},get WizardPage(){return Ic},get WizardStepLabel(){return Fc},get DeployingIntoManagedClusterWarning(){return ov},get ManagedMenuItem(){return lv},get addManagedResourceMetadataToServerGroups(){return vv},get addManagedResourceMetadataToLoadBalancers(){return Av},get addManagedResourceMetadataToSecurityGroups(){return Ev},get ManagedResourceDetailsIndicator(){return Gv},get MANAGED_RESOURCE_DETAILS_INDICATOR(){return jv},get ManagedResourceStatusIndicator(){return Hv},get confirmNotManaged(){return av},get toggleResourcePause(){return iv},get MANAGED_RESOURCES_DATA_SOURCE(){return Vv},get CORE_MANAGED_MANAGED_MODULE(){return iy},get getKindName(){return uv},get getResourceKindForLoadBalancerType(){return mv},get ManagedReader(){return gv},get ManagedWriter(){return Xf},get registerManagedDeliveryPlugin(){return ry},get resourceManager(){return pv},get ManifestWriter(){return Dw},get ManifestReader(){return Iw},get JobStageExecutionLogs(){return Tw},get JobManifestPodLogs(){return Fw},get ManifestYaml(){return Qw},get DefaultPodNameProvider(){return Pw},get JobEventBasedPodNameProvider(){return Rw},get NameUtils(){return ud},get StateConfigProvider(){return Mg},get trueKeyObjectParamType(){return Ng},get inverseBooleanParamType(){return Dg},get booleanParamType(){return Ig},get sortKeyParamType(){return Fg},get STATE_CONFIG_PROVIDER(){return Tg},get UrlBuilderRegistry(){return lp},get UrlBuilder(){return Pg},get UrlParser(){return Rg},get NetworkReader(){return Uw},get NotificationDetails(){return Vw},get EditNotificationModal(){return Jw},get NotificationTransformer(){return Lw},get NotificationSelector(){return Ow},get NOTIFICATION_LIST(){return qw},get NotificationsList(){return Kw},get OrchestratedItemTransformer(){return Jc},get OverrideRegistry(){return $h},get OVERRIDE_REGISTRY(){return Hh},get Overridable(){return bs},get overridableComponent(){return ys},get RegistrationQueue(){return jh},get overrideRegistrationQueue(){return Lh},get Overrides(){return Oh},get overridesComponent(){return Yh},get PageTitleService(){return Xw},get PAGE_TITLE_SERVICE(){return Zw},get PagerDutyReader(){return Af},get PagerDutyWriter(){return Ef},get PagerDutyTagComponentController(){return bf},get PAGER_DUTY_TAG_COMPONENT(){return wf},get PagerDutySelectFieldController(){return xf},get PAGER_DUTY_SELECT_FIELD_COMPONENT(){return kf},get PipelineRegistry(){return Gm},get PipelineConfigService(){return nd},get FormikStageConfig(){return ex},get BakeExecutionLabel(){return tx},get BakeryReader(){return nx},get AsgActionExecutionDetailsSection(){return Bp},get ExecutionDetailsSection(){return Ep},get ExecutionBarLabel(){return Ip},get ExecutionDetailsTasks(){return Pp},get StageConfigField(){return Up},get applySuspendedStatuses(){return zp},get ExecutionStepDetails(){return Qp},get PipelineStageExecutionDetails(){return lx},get TitusExecutionLogs(){return cx},get PreconfiguredJobExecutionDetails(){return px},get PreconfiguredJobStageConfig(){return dx},get PreconfiguredJobReader(){return hp},get makePreconfiguredJobStage(){return ux},get PRECONFIGUREDJOB_STAGE(){return mx},get StageConstants(){return hx},get PipelineTemplates(){return fx},get PipelineTemplateV2Service(){return td},get PipelineTemplateReader(){return vx},get RunAsUserInput(){return Ex},get Triggers(){return $x},get BaseBuildTriggerTemplate(){return Vx},get PipelineConfigValidator(){return Lx},get CreatePipelineModal(){return Zx},get ExecutionDetailsSectionService(){return ax},get EXECUTION_DETAILS_SECTION_SERVICE(){return ix},get ExecutionDetailsSectionNav(){return rx},get StageExecutionLogs(){return bp},get StageFailureMessages(){return wp},get StageFailureMessage(){return kp},get StageSummary(){return ox},get Execution(){return IC},get filterModelConfig(){return Ld},get ExecutionFilterModel(){return Od},get ManualExecutionModal(){return YC},get TriggerTemplate(){return zC},get ExecutionsTransformer(){return Op},get ExecutionService(){return nu},get EXECUTION_SERVICE(){return au},get ArtifactList(){return LC},get registerPluginExtensions(){return $C},get PLUGINS_MODULE(){return JC},get PluginRegistry(){return HC},get Icon(){return Bn},get Illustration(){return Sn},get CollapsibleElement(){return ks},get CollapsibleSection(){return Ns},get CustomLabels(){return Ds},get Details(){return Ts},get SpInput(){return Ps},get spelNumberCheck(){return Rs},get FormikForm(){return Us},get SpinFormik(){return zs},get FormField(){return Nl},get FormikExpressionField(){return Il},get FormikExpressionRegexField(){return Fl},get createFieldValidator(){return xl},get FormikFormField(){return Cl},get renderContent(){return po},get useSaveRestoreMutuallyExclusiveFields(){return Tl},get useFormInputValueMapper(){return Ql},get CheckboxInput(){return xo},get ChecklistInput(){return ko},get DayPickerInput(){return Bo},get JsonEditor(){return So},get NumberInput(){return Io},get RadioButtonInput(){return Fo},get reactSelectValidationErrorStyle(){return Vr},get reactSelectOnChangeAdapter(){return Jr},get reactSelectOnBlurAdapter(){return Wr},get ReactSelectInput(){return Kr},get SelectInput(){return Xr},get StringsAsOptions(){return Fi},get TextAreaInput(){return Qo},get TextInput(){return mo},get ExpressionError(){return uo},get ExpressionInput(){return Eo},get ExpressionPreview(){return bo},get evaluateExpression(){return Ao},get parseSpelExpressions(){return vo},get useInternalValidator(){return No},get orEmptyString(){return gr},get validationClassName(){return hr},get createFakeReactSyntheticEvent(){return fr},get isStringArray(){return vr},get StandardFieldLayout(){return Ls},get LayoutContext(){return Os},get LayoutProvider(){return Ys},get LayoutConsumer(){return $s},get ResponsiveFieldLayout(){return co},get FormValidator(){return kr},get FormValidatorField(){return Ar},get ValidationMessage(){return Dr},get categoryLabels(){return Ir},get asyncMessage(){return Rr},get errorMessage(){return Ur},get infoMessage(){return zr},get messageMessage(){return Gr},get successMessage(){return jr},get warningMessage(){return Lr},get categorizeValidationMessage(){return Yr},get categorizeValidationMessages(){return $r},get useValidationData(){return Hr},get FORM_VALIDATION_VALIDATABLE_FIELD_IS_VALID_SHORT_CIRCUIT(){return Er},get composeValidators(){return br},get Validators(){return Cr},get useApplicationContext(){return Po},get useApplicationContextSafe(){return Ro},get useContainerClassNames(){return Yo},get useData(){return Vo},get useDataSource(){return Zo},get useDebouncedValue(){return _o},get useDeepObjectDiff(){return tl},get useEscapeKeyPressed(){return il},get useEventListener(){return al},get useForceUpdate(){return rl},get useInterval(){return sl},get useIsMobile(){return ll},get useIsMountedRef(){return Mo},get useLatestCallback(){return Ko},get useLatestPromise(){return Ho},get useMountStatusRef(){return js},get useObservable(){return qo},get useObservableValue(){return Xo},get usePollingData(){return cl},get usePrevious(){return Go},get HoverablePopover(){return Ks},get LabelComponent(){return Pl},get LabeledValue(){return Rl},get LabeledValueList(){return Ul},get LinkWithClipboard(){return zl},get LINK_WITH_CLIPBOARD(){return Ol},get Markdown(){return Br},get toMarkdown(){return Sr},get Modal(){return Hl},get ModalHeader(){return Jl},get ModalBody(){return Wl},get ModalFooter(){return Kl},get showModal(){return ql},get PageNavigator(){return Xl},get PageSection(){return Zl},get ReactModal(){return si},get RenderOutputFile(){return _l},get robotToHuman(){return yr},get robotToHumanFilter(){return wr},get ROBOT_TO_HUMAN_FILTER(){return xr},get SortToggle(){return ec},get SpanDropdownTrigger(){return tc},get SpelInput(){return pl},get SimpleSpelInput(){return dl},get SpelService(){return yo},get FormikSpelContext(){return ul},get FormikSpelContextProvider(){return ml},get SpelAwareInputMode(){return gl},get SpelToggle(){return fl},get withErrorBoundary(){return Gl},get SpinErrorBoundary(){return jl},get UI_ROUTER_REACT_ERROR_BOUNDARY(){return Ll},get TabBoundary(){return $l},get Table(){return rc},get TableRow(){return cc},get TableCell(){return dc},get minimalNativeTableLayout(){return uc},get getGridColumnsStyle(){return mc},get standardGridTableLayout(){return vc},get TetheredCreatable(){return Ac},get TetheredSelect(){return Ti},get BreakString(){return Ec},get SingleLineString(){return bc},get ToggleSize(){return yc},get ToggleButtonGroup(){return xc},get Tooltip(){return Qs},get WatchValue(){return Gs},get IconTooltip(){return Cc},get Applications(){return WC},get Clusters(){return KC},get ConfigureProjectModal(){return nk},get Pipelines(){return XC},get ProjectAttributes(){return ZC},get ProjectHeader(){return rk},get ProjectReader(){return _C},get ProjectWriter(){return ek},get PubsubSubscriptionReader(){return sk},get AngularJSAdapter(){return is},get CoreModalInject(){return fi},get ModalInjector(){return vi},get NgReactInjector(){return Zm},get NgReact(){return _m},get ReactInject(){return mi},get CoreReactInject(){return gi},get ReactInjector(){return hi},get REACT_MODULE(){return ng},get StateEvents(){return eg},get STATE_EVENTS(){return tg},get arePropsEqual(){return ag},get RegionSelectField(){return lk},get RegionSelectInput(){return ok},get Registry(){return Om},get RetryService(){return ck},get SchedulerFactory(){return _s},get GlobalSearch(){return kg},get InfrastructureSearcher(){return xh},get InfrastructureSearchService(){return Ch},get INFRASTRUCTURE_SEARCH_SERVICE(){return kh},get SearchService(){return md},get SearchTableHeader(){return nh},get SearchTableRow(){return ah},get SearchTableBody(){return ih},get HeaderCell(){return sh},get BasicCell(){return oh},get HrefCell(){return lh},get AccountCell(){return ch},get HealthCountsCell(){return ph},get DefaultSearchResultTab(){return dh},get SearchResultType(){return uh},get SearchResultTypeRegistry(){return Gg},get searchResultTypeRegistry(){return jg},get SearchResults(){return wh},get SearchStatus(){return Ug},get Filter(){return Bh},get Filters(){return Sh},get Search(){return Dh},get FilterTypeRegistry(){return Mh},get SearchFilterTypeRegistry(){return Nh},get SecurityGroupWriter(){return ig},get FirewallLabels(){return Vs},get SecurityGroupReader(){return fd},get SECURITY_GROUP_READER(){return vd},get ServerGroup(){return Sk},get LoadBalancers(){return fk},get MultiSelectCheckbox(){return vk},get CloudProviderIcon(){return Ak},get ImageList(){return Ek},get SequenceAndBuildAndImages(){return bk},get Alerts(){return yk},get Health(){return wk},get RunningTasks(){return xk},get ServerGroupHeader(){return Ck},get DeployInitializer(){return Mk},get DeployInitializerController(){return Nk},get DEPLOY_INITIALIZER_COMPONENT(){return Ik},get setMatchingResourceSummary(){return Fk},get ServerGroupCommandBuilderService(){return Tk},get SERVER_GROUP_COMMAND_BUILDER_SERVICE(){return Qk},get ServerGroupCommandRegistry(){return Pk},get SERVER_GROUP_COMMAND_REGISTRY_PROVIDER(){return Rk},get ServerGroupConfigurationService(){return Uk},get SERVER_GROUP_CONFIGURATION_SERVICE(){return zk},get ServerGroupNamePreview(){return Lk},get ServerGroupDetailsField(){return $k},get ServerGroupDetails(){return Kk},get ServerGroupDetailsWrapper(){return qk},get ShowUserData(){return Xk},get CapacityDetailsSection(){return eB},get CurrentCapacity(){return Zk},get DesiredCapacity(){return _k},get ViewScalingActivitiesLink(){return nB},get ServerGroupWarningMessageService(){return aB},get CloudMetricsReader(){return iB},get MinMaxDesiredChanges(){return rB},get ServerGroupReader(){return aw},get ServerGroupWriter(){return sB},get SERVER_GROUP_WRITER(){return oB},get ServerGroupTemplates(){return lB},get SERVER_GROUP_MANAGER_DATA_SOURCE(){return pB},get SERVER_GROUP_MANAGER_STATES(){return gB},get ServerGroupManagerReader(){return cB},get ServerGroupManagerTag(){return hB},get ServiceAccountReader(){return Ax},get ServicesReader(){return fB},get SLACK_COMPONENT(){return AB},get SlackReader(){return vB},get ClusterState(){return Vd},get ExecutionState(){return Jd},get LoadBalancerState(){return Wd},get SecurityGroupState(){return Kd},get FunctionState(){return qd},get initialize(){return Xd},get StorageAccountReader(){return EB},get SubnetReader(){return bB},get SubnetTag(){return yB},get PlatformHealthOverrideMessage(){return Vc},get TaskMonitor(){return Kc},get TaskMonitorWrapper(){return Gc},get TaskReason(){return qc},get TaskMonitorModal(){return tp},get TaskReader(){return Wc},get TaskExecutor(){return ep},get UserVerification(){return ip},get RenderWhenVisible(){return Qi},get CopyToClipboard(){return zi},get now(){return Gi},get DebugTiming(){return Oi},get DebugTimingCumulative(){return Yi},get firstDefined(){return $i},get JsonUtils(){return Hi},get DiffView(){return Vi},get traverseObject(){return Ji},get noop(){return qi},get toIPromise(){return Xi},get RENDER_IF_FEATURE(){return _i},get ScrollToService(){return er},get duration(){return ar},get timeDiffToString(){return ir},get timestamp(){return rr},get relativeTime(){return sr},get timePickerTime(){return or},get TIME_FORMATTERS(){return lr},get decodeUnicodeBase64(){return cr},get UUIDGenerator(){return pr},get WorkerPool(){return ur},get filterObjectValues(){return mr},get logger(){return Ui},get ApplicationsPickerInput(){return Vg},get ScopeClusterSelector(){return Wg},get ClusterMatches(){return Kg},get CLUSTER_MATCHES_COMPONENT(){return qg},get NotifierService(){return eo},get SpelNumberInput(){return Xg},get SpelText(){return iu},get Spinner(){return Es},get DeleteType(){return Zg},get Tag(){return eh},get TagList(){return th},get YAML_EDITOR_COMPONENT(){return kB},get yamlStringToDocuments(){return wB},get yamlDocumentsToString(){return xB},get YamlEditor(){return CB},get CORE_MODULE(){return sQ}});const ai=t.module;t.module=function(e,t,n){if(t&&t.some((e=>!e))){const n=t.map((e=>"string"==typeof e?`'${e}'`:`${e}`)).join(", ");throw new Error(`Got falsey dependency whilst registering angular module '${e}': [${n}]`)}return ai(e,t,n)};const ii={name:"[anonymous]",roles:[],authenticated:!1};class ri{static getAuthenticatedUser(){return{...this.user}}static setAuthenticatedUser(e){e&&e.name&&(this.user.name=e.name,this.user.authenticated=!0,this.user.lastAuthenticated=(new Date).getTime(),this.user.roles=e.roles),this.authEvents.forEach((e=>e()))}static onAuthentication(e){this.authEvents.push(e)}static authenticationExpired(){this.user.authenticated=!1}static reset(){this.user={...ii}}}ri.user={...ii},ri.authEvents=[];class si{static show(e,t,n){const a=new Promise(((a,i)=>{let r=document.createElement("div"),s=!0;function o(){r&&(ln.unmountComponentAtNode(r),r=null)}const l=e=>t=>{r&&(e(t),s=!1,d())},c=l(a),p=l(i);function d(){ln.render(ot.createElement(qt,{show:s,...n,onExited:o},ot.createElement(e,{...t,dismissModal:p,closeModal:c})),r)}d()}));return a.catch((()=>{})),a}}function oi(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var li,ci;oi(".modal-logged-out {\n text-align: center;\n padding: 30px 60px !important;\n}\n.modal-logged-out h3 {\n margin: 30px 0 !important;\n}\n.modal-logged-out p {\n margin-bottom: 30px;\n}\n.modal-logged-out .fa-hourglass {\n position: absolute;\n display: block;\n top: 95px;\n left: 278px;\n height: 0;\n font-size: 62px;\n}\n");class pi extends ot.Component{static show(){return si.show(pi,{})}render(){return ot.createElement(qt.Body,{className:"modal-logged-out"},ot.createElement("svg",{width:"162px",height:"143px",viewBox:"0 0 162 143"},ot.createElement("g",{id:"Page-1",stroke:"none",strokeWidth:"1",fill:"none",fillRule:"evenodd"},ot.createElement("g",{transform:"translate(3.000000, 3.000000)"},ot.createElement("polygon",{id:"Fill-1",fill:"#E8AE2F",points:"0 138 81 0 156 138"}),ot.createElement("polygon",{id:"Stroke-3",stroke:"#000000",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",points:"0 138 81 0 156 138"})))),ot.createElement("i",{className:"far fa-hourglass"}),ot.createElement("h3",null,"You have been logged out."),ot.createElement("p",null,"Please click below or refresh your browser to log back in."),ot.createElement("p",null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>window.location.reload()},"Refresh and log me back in")))}}const di=window.spinnakerSettings||{};di.feature=di.feature||{},di.feature.roscoMode=null==(li=di.feature.roscoMode)||li,di.kubernetesAdHocInfraWritesEnabled=null==(ci=di.kubernetesAdHocInfraWritesEnabled)||ci,di.analytics=di.analytics||{},di.providers=di.providers||{},di.defaultTimeZone=di.defaultTimeZone||"America/Los_Angeles",di.dockerInsights=di.dockerInsights||{enabled:!1,url:""},di.changelogUrl=di.changelogUrl||"https://www.spinnaker.io/community/releases/versions/:version-changelog",di.managedDelivery=di.managedDelivery||{defaultManifest:"spinnaker.yml",manifestBasePath:".spinnaker"};const ui=p(di);di.resetToOriginal=()=>{Object.keys(di).filter((e=>"function"!=typeof di[e])).forEach((e=>delete di[e])),d(di,ui)},di.resetProvider=e=>()=>{const t=di.providers[e];Object.keys(t).filter((e=>"function"!=typeof t[e])).forEach((e=>delete t[e])),d(t,ui.providers[e])};class mi{}class gi extends mi{get $state(){return this.wrappedState||(this.wrappedState=this.createStateService()),this.wrappedState}get $q(){return this.$injector.get("$q")}get $rootScope(){return this.$injector.get("$rootScope")}get $stateParams(){return this.$injector.get("$stateParams")}get $uiRouter(){return this.$injector.get("$uiRouter")}get cacheInitializer(){return this.$injector.get("cacheInitializer")}get clusterService(){return this.$injector.get("clusterService")}get executionDetailsSectionService(){return this.$injector.get("executionDetailsSectionService")}get executionService(){return this.$injector.get("executionService")}get imageReader(){return this.$injector.get("imageReader")}get infrastructureSearchService(){return this.$injector.get("infrastructureSearchService")}get insightFilterStateModel(){return this.$injector.get("insightFilterStateModel")}get instanceTypeService(){return this.$injector.get("instanceTypeService")}get instanceWriter(){return this.$injector.get("instanceWriter")}get manualJudgmentService(){return this.$injector.get("manualJudgmentService")}get overrideRegistry(){return this.$injector.get("overrideRegistry")}get pageTitleService(){return this.$injector.get("pageTitleService")}get providerServiceDelegate(){return this.$injector.get("providerServiceDelegate")}get securityGroupReader(){return this.$injector.get("securityGroupReader")}get serverGroupWriter(){return this.$injector.get("serverGroupWriter")}get stateEvents(){return this.$injector.get("stateEvents")}createStateService(){const e=Object.create(this.$injector.get("$state")),t=this.$injector.get("$rootScope"),n=this.$injector.get("$q"),a=e.go;return e.go=function(){const e=arguments,i=Object.create(n.defer()),{promise:r}=i;return r.transition=null,r.catch((()=>{})),t.$applyAsync((()=>{const t=a.apply(this,e);r.transition=t.transition,t.then(i.resolve,i.reject)})),r},e}initialize(e){this.$injector=e}}const hi=new gi;class fi extends mi{get modalService(){return this.$injector.get("$uibModal")}get modalStackService(){return this.$injector.get("$uibModalStack")}initialize(e){this.$injector=e}}const vi=new fi;class Ai{static checkForReauthentication(){We.get(di.authEndpoint).then((e=>{e.data.username&&(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),vi.modalStackService.dismissAll(),this.visibilityWatch.unsubscribe())})).catch((()=>{}))}static loginNotification(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal(),this.visibilityWatch=ht(document,"visibilitychange").subscribe((()=>{"visible"===document.visibilityState&&this.checkForReauthentication()}))}static openLoggedOutModal(){pi.show()}static loginRedirect(){const e=encodeURIComponent(Ke.absUrl());window.location.href=`${di.gateUrl}/auth/redirect?to=${e}`}static authenticateUser(){qe.authenticating=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1):this.loginRedirect()})).catch((()=>this.loginRedirect()))}static reauthenticateUser(){this.userLoggedOut||(this.userLoggedOut=!0,We.get(di.authEndpoint).then((e=>{e.data.username?(ri.setAuthenticatedUser({name:e.data.username,authenticated:!1,roles:e.data.roles}),qe.authenticating=!1,this.userLoggedOut=!1):this.loginNotification()})).catch((()=>this.loginNotification())))}static logOut(){if(!this.userLoggedOut){const e={headers:{"Content-Type":"text/plain"},transformResponse:e=>e};We.get(`${di.gateUrl}/auth/logout`,e).then((()=>this.loggedOutSequence()),(()=>this.loggedOutSequence()))}}static loggedOutSequence(){ri.authenticationExpired(),this.userLoggedOut=!0,this.openLoggedOutModal()}}Ai.userLoggedOut=!1,Ai.visibilityWatch=null;class Ei extends Error{constructor(e,t){super(e),this.originalResult=t,this.data={message:e}}}function bi(...e){return e.filter((e=>!u(e)&&""!==e)).map((e=>e.toString())).map((e=>e.replace(/^\/+/,""))).map((e=>e.replace(/\/+$/,""))).join("/")}const yi=class{constructor(e=ki(),t,n){this.config=e,this._httpClient=t,this._baseUrl=n}builder(e){return new yi(e,this.httpClient,this._baseUrl)}get httpClient(){var e;return null!=(e=this._httpClient)?e:yi.defaultHttpClient}get baseUrl(){var e;return bi(null!=(e=this._baseUrl)?e:di.gateUrl)}path(...e){const t=bi(this.config.url,...e.map((e=>encodeURIComponent(e))));return this.builder({...this.config,url:t})}headers(e){return this.builder({...this.config,headers:{...this.config.headers,...e}})}get(e={}){const t={...this.config.params,...e},n=bi(this.baseUrl,this.config.url);return this.httpClient.get({...this.config,url:n,params:t})}post(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.post({...this.config,url:n,data:t})}put(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.put({...this.config,url:n,data:t})}patch(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.patch({...this.config,url:n,data:t})}delete(e){const t=null!=e?e:this.config.data,n=bi(this.baseUrl,this.config.url);return this.httpClient.delete({...this.config,url:n,data:t})}useCache(e=!0){return this.builder({...this.config,cache:e})}query(e){const t={...this.config.params,...e};return this.builder({...this.config,params:t})}};let wi=yi;wi.defaultHttpClient=new class{constructor(){this.delete=e=>this.request("DELETE",e),this.get=e=>this.request("GET",e),this.post=e=>this.request("POST",e),this.put=e=>this.request("PUT",e),this.patch=e=>this.request("PATCH",e)}request(e,t){return We({...t,method:e}).then((e=>{const t=e.headers("content-type");if(t){const n=t.match(/application\/(.+\+)?json/),a=t.match(/application\/(.+-)?yaml/),i=t.includes("text/html")&&""===e.data,r=t.includes("text/plain")&&""===e.data;if(!(n||a||i||r))throw Ai.reauthenticateUser(),new Ei(Ci,e)}return e.data}))}};class xi extends wi{constructor(){super(...arguments),this.builder=e=>new xi(e,this._httpClient,this._baseUrl),this.getList=this.get.bind(this),this.one=this.path.bind(this),this.all=this.path.bind(this),this.remove=this.delete.bind(this).bind(this),this.data=e=>this.builder({...this.config,data:e}),this.withParams=this.query.bind(this),this.useCache=(e=!0)=>this.builder({...this.config,cache:e})}get baseUrl(){return super.baseUrl}}const Ci="API response was neither JSON nor zero-length html or text";function ki(e){return{url:bi(e),cache:!1,data:void 0,params:{},timeout:2*(di.apiTimeoutMs||di.pollSchedule||3e4)+5e3,headers:{"X-RateLimit-App":"deck"}}}const Bi=new class extends xi{constructor(){super(...arguments),this.one=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})},this.all=(...e)=>{const t=bi(this.config.url,...e);return this.builder({...this.config,url:t})}}}(ki()),Si=e=>new wi(ki(e)),Mi=class{static registerProvider(e,t){di.providers[e]&&this.providers.set(e,t)}static getProvider(e){return this.providers.has(e)?p(this.providers.get(e)):null}static listRegisteredProviders(){return Array.from(this.providers.keys())}static overrideValue(e,t,n){this.providers.has(e)?g(this.providers.get(e),t,n):console.warn(`Cannot override "${t}" for provider "${e}" (provider not registered)`)}static hasValue(e,t){return this.providers.has(e)&&null!==this.getValue(e,t)}static getValue(e,t){var n;return null!=(n=m(this.getProvider(e),t))?n:null}static isDisabled(e){return!u(Mi.getValue(e,"adHocInfrastructureWritesEnabled"))&&!1===Mi.getValue(e,"adHocInfrastructureWritesEnabled")}};let Ni=Mi;Ni.providers=new Map;class Di{static initialize(){this.accounts$=ft((()=>{const e=Si("/credentials").useCache().query({expand:!0}).get();return vt(e)})).pipe(Mt(1),Nt()),this.providers$=Di.accounts$.pipe(St((e=>{const t=f(e.map((e=>e.type)));return h(t,Ni.listRegisteredProviders())})))}static challengeDestructiveActions(e){return Ze((t=>{e?this.getAccountDetails(e).then((e=>{t(!!e&&e.challengeDestructiveActions)})).catch((()=>t(!1))):t(!1)}))}static getArtifactAccounts(){return Si("/artifacts/credentials").useCache().get()}static getAccountDetails(e){return this.listAllAccounts().then((t=>t.find((t=>t.name===e))))}static getAllAccountDetailsForProvider(e){return this.listAccounts(e).catch((t=>(Xe.warn(`Failed to load accounts for provider "${e}"; exception:`,t),[])))}static getAvailabilityZonesForAccountAndRegion(e,t,n){return this.getPreferredZonesByAccount(e).then((e=>e[t]&&e[t][n]||[]))}static getCredentialsKeyedByAccount(e=null){return this.listAllAccounts(e).then((e=>{const t=e.map((e=>e.name));return v(t,e)}))}static getPreferredZonesByAccount(e){const t={};return this.getAllAccountDetailsForProvider(e).then((e=>(e.forEach((e=>{t[e.name]={},e.regions.forEach((n=>{let a=n.availabilityZones;n.preferredZones&&(a=h(n.preferredZones,n.availabilityZones)),t[e.name][n.name]=a}))})),t)))}static getRegionsForAccount(e){return this.getAccountDetails(e).then((e=>e?e.regions:[]))}static getUniqueAttributeForAllAccounts(e,t){return this.getCredentialsKeyedByAccount(e).then((e=>A(e).map(t).flatten().compact().map((e=>e.name||e)).uniq().value()))}static listAllAccounts(e=null){return Ze.when(this.accounts$.toPromise()).then((t=>t.filter((t=>!e||t.type===e))))}static listAccounts(e=null){return this.listAllAccounts(e).then((e=>e.filter((e=>!1!==e.authorized))))}static applicationAccounts(e=null){return Ze.all([this.listProviders(e),this.listAccounts()]).then((([e,t])=>e.reduce(((e,n)=>e.concat(t.filter((e=>e.cloudProvider===n)))),[])))}static listProviders$(e=null){return this.providers$.pipe(St((t=>e?e.attributes.cloudProviders.length?h(t,e.attributes.cloudProviders):di.defaultProviders?h(t,di.defaultProviders):t:t)),St((e=>e.sort())))}static listProviders(e=null){return Ze.when(this.listProviders$(e).toPromise())}static getAccountForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.account}))}}Di.initialize();const Ii=e=>(e=e||[]).map((e=>({label:e,value:e})));class Fi extends ot.Component{constructor(){super(...arguments),this.memoizedMakeOptions=un(Ii,E)}render(){const e=this.memoizedMakeOptions(this.props.strings);return(this.props.render||this.props.children)(e)}}class Ti extends cn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.renderOuter.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-critical"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const Qi=({bufferHeight:e=0,initiallyVisible:t,placeholderHeight:n,render:a,container:i,disableHide:r})=>{const[s,o]=ot.useState(!!t),[l,c]=ot.useState(n);let p;const d=ot.useRef();return ot.useEffect((()=>{let t=s;return p=new IntersectionObserver((e=>{const n=e[0].isIntersecting;n&&!t&&(t=!0,o(!0)),n||!t||r||(t=!1,c(e[0].boundingClientRect.height),o(!1))}),{root:i,threshold:[0],rootMargin:e&&i?`${e}px 0px`:"0px"}),p.observe(d.current),()=>{p.disconnect()}}),[]),ot.createElement("div",{ref:d,className:"render-when-visible"},s&&a(),!s&&ot.createElement("div",{style:{height:l+"px"}}))},Pi={DEBUG:1,INFO:2,WARN:3,ERROR:4},Ri=e=>Pi[e||"INFO"];const Ui=new class{constructor(){this.loggers=[],this.ignoredErrors=["ResizeObserver loop limit exceeded","ResizeObserver loop completed with undelivered notifications."]}subscribe(e){return this.loggers.push(e),()=>this.loggers.filter((t=>t!==e))}unsubscribe(e){this.loggers.filter((t=>t.key!==e))}log(e){var t;(null==(t=e.error)?void 0:t.message)&&this.ignoredErrors.includes(e.error.message)||this.loggers.forEach((t=>{Ri(e.level)>=Ri(t.level)&&t.onEvent(e)}))}};oi(".clipboard-btn {\n background-color: transparent !important;\n border-width: 0 !important;\n color: var(--color-dovegray) !important;\n display: inline-block !important;\n margin-left: 2px !important;\n}\n.clipboard-btn:hover {\n background-color: transparent;\n}\n.copy-to-clipboard-sm .clipboard-btn {\n margin-bottom: 3px;\n}\n");class zi extends ot.Component{constructor(e){super(e),this.inputRef=ot.createRef(),this.mounted=!1,this.handleClick=e=>{e.preventDefault(),this.props.stopPropagation&&e.stopPropagation();const{analyticsLabel:t,text:n}=this.props;Ui.log({category:"Copy to Clipboard",action:"copy",data:{label:t||n}});const a=this.inputRef.current;a.focus(),a.select();try{document.execCommand("copy"),a.blur(),this.setState({tooltipCopy:"Copied!",shouldUpdatePosition:!0}),window.setTimeout(this.resetToolTip,3e3)}catch(e){a.blur(),this.setState({tooltipCopy:"Couldn't copy!",shouldUpdatePosition:!0})}},this.resetToolTip=()=>{this.mounted&&this.setState({tooltipCopy:!1,shouldUpdatePosition:!0})},this.state={tooltipCopy:!1,shouldUpdatePosition:!1}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}renderTooltip(e){const{toolTip:t,text:n=""}=this.props,{tooltipCopy:a,shouldUpdatePosition:i}=this.state,r=Boolean(a),s=a||t,o=`clipboardValue-${n.toString().replace(" ","-")}`,l=ot.createElement(Zt,{id:o},s),c={shouldUpdatePosition:i};return s?ot.createElement(Xt,{defaultOverlayShown:r,placement:"top",overlay:l,delayHide:250,...c},e):e}render(){const{buttonInnerNode:e,text:t="",className:n="btn btn-xs btn-default clipboard-btn"}=this.props,a=ot.createElement("button",{onClick:this.handleClick,className:n,"aria-label":"Copy to clipboard"},e||ot.createElement("span",{className:"glyphicon glyphicon-copy"}));return ot.createElement(ot.Fragment,null,ot.createElement("textarea",{onChange:e=>e,ref:this.inputRef,value:t,tabIndex:-1,style:{zIndex:-1,position:"fixed",opacity:0,top:0,left:0}}),this.renderTooltip(a))}}zi.defaultProps={displayText:!1};const Gi=performance?performance.now.bind(performance):Date.now.bind(Date),ji=console.log.bind(console),Li=(e,t)=>"object"==typeof e&&e.constructor&&e.constructor.name?`${e.constructor.name}.${t}():`:`${t}():`,Oi=e=>(t,n,a)=>{const i=a.value;e=b(e||Li(t,n),50),a.value=function(){const t=Gi(),n=i.apply(this,arguments),a=Gi()-t;return ji(`${e} ${a} ms`),n}},Yi=(e,t=5e3)=>(n,a,i)=>{const r=i.value;let s=0;e=b(e||Li(n,a),50);let o=0;setInterval((()=>ji(`${e} ${b(""+s,10)} calls in ${o} ms`)),t),i.value=function(){s++;const e=Gi(),t=r.apply(this,arguments);return o+=Gi()-e,t}};function $i(...e){return e.find((e=>!u(e)))}class Hi{static generateDiff(e,t){const n=new gn,a=n.diff_linesToChars_(e,t),i=n.diff_main(a.chars1,a.chars2,!1);return n.diff_charsToLines_(i,a.lineArray),i}static sortObject(e){return!e||y(e)||w(e)?e:Object.keys(e).sort().reduce(((t,n)=>(x(e[n])?t[n]=this.sortObject(e[n]):C(e[n])?t[n]=e[n].map((e=>this.sortObject(e))):t[n]=e[n],t)),{})}static makeSortedString(e){return this.makeSortedStringFromObject(JSON.parse(e))}static makeSortedStringFromObject(e){return this.makeStringFromObject(this.sortObject(e))}static makeStringFromObject(e,t=2){return JSON.stringify(e,null,t)}static makeSortedStringFromAngularObject(e,t=[]){return JSON.stringify(this.sortObject(e),((e,n)=>{let a=n;return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(a=void 0),t.includes(e)&&(a=void 0),a}))}static diff(e,t,n=!1){n&&(e=this.makeSortedString(e),t=this.makeSortedString(t));const a=this.generateDiff(e,t),i=[];let r=0,s=0,o=0,l=0;const c=[];return a.forEach((e=>{const t=e[1].split("\n");""===t[t.length-1]&&t.pop();let n="match";1===e[0]&&(n="add",r+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),-1===e[0]&&(n="remove",s+=t.length,c.push({type:n,lines:t.length,start:l,height:null,top:null})),0===e[0]&&(o+=t.length),t.forEach((e=>i.push({type:n,text:e}))),l+=t.length})),c.forEach((e=>{e.height=100*e.lines/l,e.top=100*e.start/l})),{details:i,summary:{additions:r,removals:s,unchanged:o,total:l},changeBlocks:c}}}function Vi(e){const{diff:t}=e,n=ot.useRef();return ot.createElement(ot.Fragment,null,ot.createElement("pre",{ref:n,className:"form-control flex-fill diff"},t.details.map(((e,t)=>ot.createElement("div",{"data-attr-line":t,className:e.type,key:t},e.text)))),ot.createElement("div",{className:"summary-nav flex-fill",onClick:function(e){var a;let i;const r=e.target,s=e.currentTarget,o=n.current.firstChild.clientHeight;i=r.getAttribute("data-attr-block-line")?Number(r.getAttribute("data-attr-block-line")):(null==(a=e.nativeEvent)?void 0:a.offsetY)/s.clientHeight*t.summary.total,n.current.scroll({top:(i-3)*o,behavior:"smooth"})}},t.changeBlocks.map(((e,t)=>ot.createElement("div",{"data-attr-block-line":e.start,key:t,style:{height:e.height+"%",top:e.top+"%"},className:"delta "+e.type})))))}oi(".diff-view {\n width: 100%;\n display: block;\n position: relative;\n}\n.diff-view .diff {\n color: var(--color-black);\n font-size: 80%;\n overflow-x: visible;\n margin: 0;\n padding-bottom: 0;\n}\n.diff-view .diff .match,\n.diff-view .diff .add,\n.diff-view .diff .remove {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\n.diff-view .diff .match::before,\n.diff-view .diff .add::before,\n.diff-view .diff .remove::before {\n position: relative;\n left: 0;\n}\n.diff-view .diff .match {\n color: var(--color-dovegray);\n}\n.diff-view .diff .match::before {\n content: ' ';\n}\n.diff-view .diff .add {\n background-color: var(--color-github-history-add);\n}\n.diff-view .diff .add::before {\n content: '+';\n}\n.diff-view .diff .remove {\n background-color: var(--color-github-history-remove);\n}\n.diff-view .diff .remove::before {\n content: '-';\n}\n.diff-view .diff .form-group {\n margin-bottom: 0;\n}\n.diff-view .diff::-webkit-scrollbar {\n height: 8px;\n}\n.diff-view .summary-nav {\n cursor: pointer;\n z-index: 2;\n width: 12px;\n position: absolute;\n top: 0;\n right: 7px;\n height: calc(100% - 8px);\n}\n.diff-view .summary-nav .delta {\n width: 100%;\n position: absolute;\n min-height: 3px;\n}\n.diff-view .summary-nav .delta.add {\n background: var(--color-success);\n}\n.diff-view .summary-nav .delta.remove {\n background: var(--color-danger);\n}\n");const Ji=(e,t,n=!1)=>Ki(null,e,t,n);function Wi(e,t){const n=y(t)?`[${t}]`:t.includes(".")?`["${t}"]`:t,a=n.includes("["),i=e?a?e:`${e}.`:"";if(a&&!i)throw new Error(`Cannot construct path from '${n}' using array syntax because the parent path is undefined.`);return`${i}${n}`}const Ki=(e,t,n,a)=>{function i(i){null===e||!i&&a||n(e,t)}k(t)||B(t)?i(!0):x(t)?(i(!1),S(t,((t,i)=>Ki(Wi(e,i),t,n,a)))):Array.isArray(t)?(i(!1),t.forEach(((t,i)=>Ki(Wi(e,i),t,n,a)))):i(!0)};const qi=function(){};function Xi(e){return Ze(((t,n)=>{let a;e.subscribe((e=>a=e),(e=>n(e)),(()=>t(a)))}))}const Zi={bindings:{feature:"@"},controller:class{constructor(){this.featureEnabled=!1}$onInit(){this.featureEnabled=this.feature&&di.feature[this.feature]}},transclude:!0,template:'<ng-transclude ng-if="$ctrl.featureEnabled"></ng-transclude>'},_i="spinnaker.core.renderIfFeature.directive";n(_i,[]).component("renderIfFeature",Zi);class er{static toDomId(e){return e.replace(/[\W]/g,"-")}static scrollTo(e,t,n=0,a=0){_e((()=>{const a=hn(e);if(a.length){const e=t?a.closest(t):hn("body");if(e.length){const t=e.scrollTop()+a.offset().top-n;e.animate({scrollTop:t+"px"},200)}}}),a)}}const tr=()=>{const e=di.defaultTimeZone,t=En.local().setZone(e);return ot.createElement("span",null,t.offsetNameShort)},nr=e=>!(!e||isNaN(e)||e<0||e>864e13);function ar(e){if(!nr(e))return"-";const t=bn.fromMillis(e),n=Math.floor(t.as("days")),a=t.minus({days:Math.floor(t.as("days"))}),i=a.days||Math.floor(a.as("hours"))?"hh:mm:ss":"mm:ss";let r="";return a.isValid&&n>0&&(r=n+"d"),a.isValid?r+a.toFormat(i):"-"}function ir(e,t){const n=t.diff(e).shiftTo("days","hours","minutes","seconds"),a=[];let i=!1;const r=(e,t)=>{(n[e]||i)&&(a.push(t),i=!0)};return r("days","d'd'"),r("hours","h'h'"),r("minutes","m'm'"),a.push("s's'"),n.toFormat(a.join(" "))}function rr(e){if(!nr(e))return"-";const t=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,n=En.fromMillis(parseInt(e,10),{zone:t});return n.isValid?n.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"):"-"}function sr(e){if(!nr(e))return"-";const t=e>Date.now(),n=En.fromMillis(e),a=fn(n.toJSDate(),{includeSeconds:!0});return n.isValid?`${t?"in ":""}${a}${t?"":" ago"}`:"-"}function or(e){if(e&&!isNaN(e.hours)&&!isNaN(e.minutes)){const t=parseInt(e.hours,10),n=parseInt(e.minutes,10);let a="";return t<10&&(a+="0"),a+=t+":",n<10&&(a+="0"),a+=n,a}return"-"}const lr="spinnaker.core.utils.timeFormatters";n(lr,[]).filter("timestamp",(()=>rr)).filter("relativeTime",(()=>sr)).filter("duration",(()=>ar)).filter("timePickerTime",(()=>or)).component("systemTimezone",yn(tr));const cr=e=>decodeURIComponent(atob(e).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));class pr{static getRandom(e){return Math.random()*e}static generateUuid(){let e="";for(let t=0;t<36;t++)switch(t){case 14:e+="4";break;case 19:e+="89ab".charAt(pr.getRandom(4));break;case 8:case 13:case 18:case 23:e+="-";break;default:e+="0123456789abcdef".charAt(pr.getRandom(16))}return e}}class dr{constructor(e){this.task=e,this.workerPromise=new Promise(((e,t)=>Object.assign(this,{resolve:e,reject:t})))}run(){const e=this.task();return e.then(this.resolve,this.reject),e}cancel(e){this.reject(B(e)?"Cancelled":e)}}class ur{constructor(e){this.concurrency=e,this.queuedTasks=[],this.runningTasks=[]}task(e){const t=new dr(e);return this.queuedTasks.push(t),this.flush(),t.workerPromise}cancelAll(e){[].concat(this.runningTasks).concat(this.queuedTasks).forEach((t=>t.cancel(e))),this.runningTasks=[],this.queuedTasks=[]}flush(){const{queuedTasks:e,runningTasks:t}=this;e.length&&t.length<this.concurrency&&this.runTask(e.shift())}completeTask(e){this.runningTasks=M(this.runningTasks,e),this.flush()}runTask(e){this.runningTasks.push(e);const t=()=>this.completeTask(e);e.run().then(t,t)}}function mr(e,t,n={leafNodesOnly:!0}){const a={};return Ji(e,((e,n)=>{t(n,e)&&g(a,e,n)}),n.leafNodesOnly),a}const gr=e=>u(e)?"":e,hr=(e={})=>wn({"ng-dirty":!!e.touched,"ng-invalid":"error"===e.category,"ng-warning":"warning"===e.category}),fr=e=>({persist:qi,stopPropagation:qi,preventDefault:qi,target:e}),vr=e=>e&&e.length&&e.every(w);class Ar{constructor(e,t){this.name=e,this.label=t,this.validators=[]}required(e){return this.isRequired=!0,this.isRequiredMessage=e,this}optional(){return this.isRequired=!1,this.isRequiredMessage=void 0,this}spelAware(e=!0){return this.isSpelAware=e,this}withValidators(...e){return this.validators=this.validators.concat(e),this}}const Er="__FIELD_IS_VALID_SHORT_CIRCUIT__",br=e=>{const t=e.filter((e=>!!e));if(!t.length)return null;if(1===t.length)return t[0];return(e,n)=>t.map((t=>t(e,n))).find((e=>!!e))};function yr(e){if(!e)return"";let t=e.charAt(0).toUpperCase()+e.substr(1);return/\s/g.test(t)||(t=t.replace(/[A-Z]/g," $&"),t=t.replace(/_[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/-[a-z]/g,(function(e){return" "+e.charAt(1).toUpperCase()+e.substr(2)})),t=t.replace(/([A-Z])\s([A-Z])\s/g,"$1$2")),t}function wr(){return yr}const xr="spinnaker.core.presentation.robotToHuman.filter";n(xr,[]).filter("robotToHuman",wr);const Cr={arrayNotEmpty:e=>function(t,n="This field"){return e=e||`${n} must contain at least one entry`,t&&t.length<1&&e},checkBetween:(e,t,n)=>function(a){const i=Number.parseInt(a,10);if(!Number.isNaN(i)){return Cr.minValue(t)(i,yr(e))||Cr.maxValue(n)(i,yr(e))}return null},emailValue:e=>function(t,n="This field"){return e=e||`${n} is not a valid email address.`,t&&!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(t)&&e},isNum:e=>function(t){return y(t)?null:e||"Must be a number"},isRequired:e=>function(t,n="This field"){return e=e||`${n} is required.`,(null==t||""===t)&&e},isValidJson:e=>function(t,n="this field"){try{JSON.parse(t)}catch(t){return e=e||`${n} must be valid JSON: ${t.message}`}},isValidXml:e=>function(t,n="this field"){const a=(new DOMParser).parseFromString(t,"text/xml").getElementsByTagName("parsererror");if(a&&a.length>0)return e=e||`${n} must be valid XML`},maxValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n>e){const n=`cannot be greater than ${e}`;return t||`${a} ${n}`}return null},minValue:(e,t)=>function(n,a="This field"){if(!y(n))return t||`${a} must be a number`;if(n<e){const n=0===e?"cannot be negative":`cannot be less than ${e}`;return t||`${a} ${n}`}return null},oneOf:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be one of (${e.join(", ")})`,!e.includes(n)&&t},skipIfUndefined:e=>function(t,n="This field"){return void 0!==t&&e(t,n)},skipIfSpel:e=>function(t,n="This field"){return"string"==typeof t&&t.includes("${")?void 0:e(t,n)},valueUnique:(e,t)=>function(n,a="This field"){return e=e||[],t=t||`${a} must be not be included in (${e.join(", ")})`,e.includes(n)&&t}};class kr{constructor(e){this.values=e,this.fields=[],this.isSpelAwareDefault=!1}field(e,t){t=t||N(e);const n=new Ar(e,t);return this.fields.push(n),n}spelAware(e=!0){return this.isSpelAwareDefault=e,this}getFieldValidators(e,t){const n=D(e.isSpelAware)?e.isSpelAware:t;return[e.isRequired?Cr.isRequired(e.isRequiredMessage):null,e.isRequired?null:e=>null==e||""===e?Er:null,n?e=>"string"==typeof e&&e.includes("${")?Er:null:null,...e.validators].filter((e=>!!e))}validateForm(){return((e,t)=>e.reduce(((e,t)=>g(e,t.name,t.error)),t?[]:{}))(this.fields.map((e=>{const{name:t,label:n}=e,a=m(this.values,t);return{name:t,error:((e,t,n)=>e.reduce(((e,a)=>e||a(t,n)),""))(this.getFieldValidators(e,this.isSpelAwareDefault),a,n)}})).filter((e=>{return!(!(t=e.error)||t===Er||"string"!=typeof t&&(Array.isArray(t)?!t.length:"object"==typeof t?!Object.keys(t).length:!t));var t})),Array.isArray(this.values))}arrayForEach(e){return((e,t)=>(n,a)=>{if(!Array.isArray(n))return!1;const i=e(n);return n.forEach(((e,r)=>{const s=((e,t)=>({item:n=>e.field(`[${t}]`,n),field:(n,a)=>e.field(`[${t}].${n}`,a),validateForm:e.validateForm,arrayForEach:e.arrayForEach}))(i,r);t&&t(s,e,r,n,a)})),i.validateForm()})((e=>new kr(e)),e)}}function Br(e){const{message:t,tag:n,className:a,trim:i,tag:r="div",...s}=e,o=ot.useMemo((()=>new xn),[]),l=ot.useMemo((()=>new Cn),[]),c=`Markdown ${a||""}`;if(null==t)return null;const p=i?t.trim():t,d=s,u=o.parse(p.toString()),m=l.render(u);return d.dangerouslySetInnerHTML={__html:kn.sanitize(m,e.options)},ot.createElement(r,{...d,className:c})}oi(".Markdown p {\n margin: 0;\n}\n.Markdown p + p {\n margin-top: 4px;\n}\nspan.Markdown p {\n display: contents;\n}\n");const Sr=(e,t={},n=!1)=>ot.createElement(Br,{message:e,tag:n?"span":"div",options:t});oi(".ValidationMessage {\n min-height: 40px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-bottom: 2px;\n}\n.ValidationMessage.errorMessage {\n color: var(--color-validation-error);\n background-color: var(--color-validation-error-light);\n}\n.ValidationMessage.infoMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.previewMessage {\n color: var(--color-validation-info);\n background-color: var(--color-validation-info-light);\n}\n.ValidationMessage.successMessage {\n color: var(--color-validation-success);\n background-color: var(--color-validation-success-light);\n}\n.ValidationMessage.warningMessage {\n color: var(--color-validation-black);\n background-color: var(--color-validation-warning-light);\n}\n.ValidationMessage i {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 40px;\n flex: 0 0 40px;\n height: 40px;\n font-size: 24px;\n padding: 7px;\n}\n.ValidationMessage .message {\n margin: 8px 8px 8px 0;\n -ms-flex-item-align: center;\n align-self: center;\n}\n");const Mr={async:"infoMessage",error:"errorMessage",info:"infoMessage",message:"infoMessage",success:"successMessage",warning:"warningMessage"},Nr={async:"fa fa-spinner fa-spin",error:"fa fa-exclamation-circle",info:"fa fa-info-circle",message:"icon-view-1",success:"far fa-check-circle",warning:"fa icon-alert-triangle"},Dr=e=>{const{type:t,message:n,iconClassName:a,containerClassName:i}=e,r=!1!==a;return ot.createElement("div",{className:`ValidationMessage ${i||Mr[t]||""}`},r&&ot.createElement("i",{className:a||Nr[t]||""}),ot.createElement("div",{className:"message"},w(n)?ot.createElement(Br,{message:n}):n))},Ir={async:"Async",error:"Error",info:"Info",message:"Message",success:"Success",warning:"Warning"},Fr=I(Ir),Tr=Object.keys(Ir),Qr=Object.keys(Ir).reduce(((e,t)=>({...e,[Ir[t]]:t})),{}),Pr=e=>t=>t?`${Ir[e]}: ${t}`:null,Rr=Pr("async"),Ur=Pr("error"),zr=Pr("info"),Gr=Pr("message"),jr=Pr("success"),Lr=Pr("warning"),Or=new RegExp(`^(${Fr.join("|")}): ((?:[\r\n]|.)*)$`,"m"),Yr=e=>{if(!e)return[null,null];const t=Or.exec(e);if(!t)return["error",e];const[n,a]=t.slice(1);return[Qr[n],a]},$r=e=>{const t=Tr.reduce(((e,t)=>({...e,[t]:{}})),{});return Ji(e,((e,n)=>{const[a,i]=Yr(n);i&&g(t[a],e,i)}),!0),t};function Hr(e,t){return ot.useMemo((()=>{if(!e)return{category:null,messageNode:null,hidden:!0};if(ot.isValidElement(e))return{category:null,messageNode:e,hidden:!1};if(w(e)){const[n,a]=Yr(e),i="error"===n||"warning"===n;return{category:n,messageNode:a,hidden:!t&&i}}return{category:null,messageNode:e,hidden:!0}}),[e,t])}const Vr={borderColor:"var(--color-danger)",WebkitBoxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)",boxShadow:"inset 0 1px 1px rgba(0, 0, 0, 0.075)"},Jr=(e,t)=>n=>{const a=n?Array.isArray(n)?n.map((e=>e.value)):n.value:null,i=fr({name:e,value:a});return(t||qi)(i)},Wr=(e,t,n)=>()=>{const a=fr({name:e,value:t});return(n||qi)(a)};function Kr(e){const{name:t,onChange:n,onBlur:a,value:i,validation:r={},stringOptions:s,options:o,ignoreAccents:l,inputClassName:c,...p}=e,d=!u(l)&&l,m=e.mode||"TETHERED",g=gr(c),{category:h}=Hr(r.messageNode,r.touched),f={className:g,style:"error"===h?Vr:{},ignoreAccents:d,...{name:t,value:e.multi?u(i)?[]:i:gr(i),onBlur:Wr(t,i,a),onChange:Jr(t,n)},...p},v=({options:e})=>"TETHERED"===m?ot.createElement(Ti,{...f,options:e}):"VIRTUALIZED"===m?ot.createElement(dn,{...f,options:e,optionRenderer:null}):"CREATABLE"===m?ot.createElement(qr,{...f,options:e}):ot.createElement(cn,{...f,options:e});return vr(s)?ot.createElement(Fi,{strings:s},(e=>ot.createElement(v,{options:e}))):ot.createElement(v,{options:o})}function qr(e){const t=ot.useMemo((()=>{var t,n;const a=null!=(t=e.options)?t:[],i=a.map((e=>e.value)),r=(null!=(n=e.value)?n:[]).filter((e=>!i.includes(e))).map((e=>({label:e,value:e})));return a.concat(r)}),[e.options,e.value]);return ot.createElement(pn,{...e,options:t})}function Xr(e){const{value:t,defaultValue:n,validation:a,options:i,inputClassName:r,...s}=e,o=`SelectInput form-control ${gr(r)} ${hr(a)}`;lt((()=>{if(!u(n)){(vr(i)?i:i.map((e=>e.value))).includes(t)||e.onChange(fr({name:e.name,value:n}))}}),[t,n,i]);const l=({opts:e})=>ot.createElement("select",{className:o,value:gr(t),...s},e.map((e=>ot.createElement("option",{key:e.value,value:e.value,disabled:e.disabled},e.label))));return vr(i)?ot.createElement(Fi,{strings:i},(e=>ot.createElement(l,{opts:e}))):ot.createElement(l,{opts:i})}const Zr=e=>!!e&&e.includes("${");class _r extends ot.Component{constructor(){super(...arguments),this.state={mergedAccounts:[],primaryAccounts:[],secondaryAccounts:[]},this.groupAccounts=e=>{const{name:t,value:n,onChange:a,provider:i}=this.props;if(!e||!e.length)return;if(Zr(n))return;const r=Boolean(e[0].name);let s=Ze.when([]);if(i&&(s=Di.getAllAccountDetailsForProvider(i)),!i&&r){const t=f(F(e,"type"));s=Ze.all(t.map((e=>Di.getAllAccountDetailsForProvider(e)))).then((e=>T(e)))}s.then((i=>{const s=r?F(e,"name"):e;let o=s,l=[],c=[];s&&(l=s.sort()),s&&s.length&&i.length&&(l=s.filter((e=>i.some((t=>t.name===e&&t.primaryAccount)))).sort(),c=Q(s,l).sort(),o=T([l,c])),o.includes(n)||a(fr({value:"",name:t})),this.setState({mergedAccounts:o,primaryAccounts:l,secondaryAccounts:c})}))}}componentDidMount(){this.groupAccounts(this.props.accounts)}componentWillReceiveProps(e){E(e.accounts,this.props.accounts)||this.groupAccounts(e.accounts)}render(){const{value:e,readOnly:t}=this.props,{mergedAccounts:n}=this.state,{primaryAccounts:a,secondaryAccounts:i}=this.state,r=a.length>0&&i.length>0,s=[{label:"Select...",value:"",disabled:!0}];if(s.push(...a.map((e=>({label:e,value:e})))),r&&s.push({label:"---------------",value:"-",disabled:!0}),s.push(...i.map((e=>({label:e,value:e})))),Zr(e))return ot.createElement("div",{className:"sm-control-field"},ot.createElement("span",null,"Resolved at runtime from expression: ",ot.createElement("code",null,e)));if(t)return ot.createElement("div",null,ot.createElement("p",{className:"form-control-static"},e));const{renderFilterableSelectThreshold:o,...l}=this.props;if(n.length<o){const e=e=>{e.persist(),this.props.onChange(e)};return ot.createElement(Xr,{...l,inputClassName:"form-control input-sm",onChange:e,required:!0,options:s})}return ot.createElement(Kr,{...l,clearable:!1,required:!0,options:s,mode:"PLAIN",menuContainerStyle:{minWidth:"150px"}})}}_r.defaultProps={renderFilterableSelectThreshold:6};const es=class extends ot.Component{constructor(){super(...arguments),this.state={isProdAccount:!1},this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidMount(){this.updateAccount(this.props.account)}componentWillReceiveProps(e){this.updateAccount(e.account)}updateAccount(e){const{cache:t}=es;t.hasOwnProperty(e)||(t[e]=Di.challengeDestructiveActions(e).then((n=>t[e]=!!n)));const n=t[e];"boolean"==typeof n?this.setState({isProdAccount:n}):n.then((e=>this.mounted&&this.setState({isProdAccount:e})))}render(){const{account:e,className:t}=this.props,{isProdAccount:n}=this.state,a="account-tag-wrapper"===t;return ot.createElement("span",{className:`account-tag account-tag-${n?"prod":"notprod"} ${t||""}`},ot.createElement("span",{className:"account-tag-name",title:a?e:null},e))}};let ts=es;ts.cache={};const ns=ot.createContext(void 0),as=({app:e,children:t})=>ot.createElement(ns.Provider,{value:e},t);class is extends ot.Component{constructor(e){super(e)}componentWillReceiveProps(e){this.$scope&&(this.$scope.props=e)}refCallback(e){if(!e)return;const{controller:t,controllerAs:n,locals:a}=this.props,i=this.props.template,r=this.props.templateUrl,s={...this.props,...a};r?et(r).then((a=>{this.renderAngularTemplateAndController(e,a,t,n,s)})):this.renderAngularTemplateAndController(e,i,t,n,s)}renderAngularTemplateAndController(e,t,n,i,r){const s=a(e),o=s.scope(),l=this.$scope=o.$new();if(l.props=this.props,s.html(t),tt(e)(l),n){const e=nt(i?`${n} as ${i}`:n,{$scope:l,$element:s,...r});s.data("$ngControllerController",e)}}componentWillUnmount(){this.$scope.$destroy()}render(){return ot.createElement("div",{className:"AngularJSAdapter",ref:e=>this.refCallback(e)})}}var rs,ss,os,ls,cs,ps,ds,us,ms,gs,hs,fs;function vs(){return(vs=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e}).apply(this,arguments)}function As(e){return st.createElement("svg",vs({xmlns:"http://www.w3.org/2000/svg",style:{margin:"auto",background:"0 0"},preserveAspectRatio:"xMidYMid",viewBox:"24 24 52 52",display:"block"},e),rs||(rs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.9166666666666666s",repeatCount:"indefinite"}))),ss||(ss=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(30 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.8333333333333334s",repeatCount:"indefinite"}))),os||(os=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(60 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.75s",repeatCount:"indefinite"}))),ls||(ls=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(90 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.6666666666666666s",repeatCount:"indefinite"}))),cs||(cs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(120 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5833333333333334s",repeatCount:"indefinite"}))),ps||(ps=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(150 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.5s",repeatCount:"indefinite"}))),ds||(ds=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(180 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.4166666666666667s",repeatCount:"indefinite"}))),us||(us=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(210 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.3333333333333333s",repeatCount:"indefinite"}))),ms||(ms=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(240 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.25s",repeatCount:"indefinite"}))),gs||(gs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(270 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.16666666666666666s",repeatCount:"indefinite"}))),hs||(hs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(300 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"-0.08333333333333333s",repeatCount:"indefinite"}))),fs||(fs=st.createElement("rect",{x:47,y:24,rx:3,ry:6,width:6,height:12,fill:"current",transform:"rotate(330 50 50)"},st.createElement("animate",{attributeName:"opacity",values:"1;0",keyTimes:"0;1",dur:"1s",begin:"0s",repeatCount:"indefinite"}))))}is.defaultProps={locals:{}};const Es=({color:e="#ffffff",fullWidth:t,message:n,className:a,mode:i="horizontal",size:r="small"})=>{if("circular"===i){const t={nano:12,small:16,medium:24,large:32};return ot.createElement(As,{className:a,style:{height:t[r],fill:e}})}const s=()=>{let e=3;r&&("nano"===r?e=1:"large"===r&&(e=5));const t=[];let n;for(n=0;n<e;n++)t.push(ot.createElement("div",{key:n,className:"bar"}));return t},o="message color-text-accent "+("medium"===r?"heading-4":"heading-2"),l=["medium","large"].includes(r)&&ot.createElement("div",{className:o},n||"Loading ..."),c=["medium","large"].includes(r)?ot.createElement("div",{className:"bars"},s()):s();return ot.createElement("div",{className:wn("load",r||"small",a,{"full-width":t})},l,c)};function bs(e){return function(t){return ys(t,e)}}function ys(e,t){class n extends ot.Component{constructor(e){super(e),this.account$=new At,this.destroy$=new At;let t=!0;this.account$.pipe(Dt((e=>e?Di.accounts$.pipe(St((t=>t.find((t=>t.name===e))))):Et(null))),St((e=>this.getComponent(e))),It(this.destroy$)).subscribe((e=>{t?this.state={Component:e}:this.setState({Component:e})})),this.account$.next(this.props.accountId),t=!1}componentWillUnmount(){this.destroy$.next()}componentWillReceiveProps(e){const{accountId:t}=e;this.props.accountId!==t&&this.account$.next(t)}getComponentFromCloudProvider(e){const{cloudProvider:n}=e;if(!n)return null;const a=Ni.getValue(n,t);if(a)return a;const i=Ni.getValue(n,t+"TemplateUrl");if(i){const e=Ni.getValue(n,t+"Controller"),a=e&&e.includes(" as ")?void 0:"ctrl";return t=>ot.createElement(is,{...t,templateUrl:i,controller:e,controllerAs:a})}return null}getComponentFromOverrideRegistry(){const{overrideRegistry:e}=hi,n=e.getComponent(t);if(n)return n;const a=e.getTemplate(t,null);if(a){const n=e.getController(t,null),i=n&&n.includes(" as ")?void 0:"ctrl";return e=>ot.createElement(is,{...e,templateUrl:a,controller:n,controllerAs:i})}return null}getComponent(t){return this.getComponentFromCloudProvider(t||{})||this.getComponentFromOverrideRegistry()||e}render(){const t=this.state&&this.state.Component,n=t&&t!==e,a={...this.props,...n?{OriginalComponent:e}:{}};if(!t)return ot.createElement(Es,null);return["render","prototype.render"].some((e=>"function"==typeof m(t,e)))?ot.createElement(t,{...a,ref:this.props.forwardedRef}):ot.createElement(t,{...a})}}n.OriginalComponent=e;const a=ot.forwardRef(((e,t)=>ot.createElement(n,{...e,forwardedRef:t})));return Object.getOwnPropertyNames(e).filter((e=>"constructor"!==e&&!n.hasOwnProperty(e))).forEach((t=>a[t]=e[t])),a}var ws=Object.defineProperty,xs=Object.getOwnPropertyDescriptor;let Cs=class extends ot.Component{render(){return ot.createElement("i",{className:"application-header-icon far fa-window-maximize"})}};Cs=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?xs(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&ws(t,n,r),r})([bs("applicationIcon")],Cs);oi(".collapsible-element {\n position: relative;\n}\n.collapsible-element .content {\n position: relative;\n overflow: hidden;\n}\n.collapsible-element .content.collapsed:after {\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n left: 0;\n bottom: 0;\n background: linear-gradient(0deg, var(--color-white) 0px, transparent 40px);\n}\n.collapsible-element .expand-button {\n display: none;\n position: absolute;\n bottom: 0;\n text-align: center;\n padding-top: 2px;\n border: none;\n border-top: 2px solid #009cb8;\n color: #009cb8;\n width: 100%;\n background-color: var(--color-white);\n outline: none;\n}\n.collapsible-element .expand-button:hover {\n text-decoration: underline;\n}\n.collapsible-element:hover .expand-button {\n display: block;\n}\n");const ks=({children:e,maxHeight:t})=>{const[n,a]=ot.useState(!0),[i,r]=ot.useState(!1),s=ot.useRef(null),o=ot.useCallback((()=>{s.current&&r(s.current.offsetHeight<s.current.scrollHeight)}),[]);return ot.useEffect((()=>{o()}),[e,o]),ot.useEffect((()=>(window.addEventListener("resize",o),()=>window.removeEventListener("resize",o))),[]),ot.createElement("div",{className:"collapsible-element"},ot.createElement("div",{style:{maxHeight:n?t:void 0},className:wn(["content",{collapsed:n&&i}]),ref:s},e),(i||!n)&&ot.createElement("button",{className:"expand-button",onClick:()=>a((e=>!e))},n?"Read more":"Read less"))};class Bs{constructor(){this.cacheFactory=new Mn,this.cacheId="collapsibleSectionStateCache";try{this.cacheFactory.createCache(this.cacheId,{maxAge:6048e5,deleteOnExpire:"aggressive",storageMode:"localStorage"})}catch(e){}this.stateCache=this.cacheFactory.get(this.cacheId)}isSet(e){return!!e&&void 0!==this.stateCache.get(e)}isExpanded(e){return!!e&&!0===this.stateCache.get(e)}setExpanded(e,t){e&&this.stateCache.put(e,!!t)}}const Ss=new Bs,Ms={left:{expanded:"rotate-0",collapsed:"rotate-m90"},right:{expanded:"rotate-p180",collapsed:"rotate-p270"}},Ns=({outerDivClassName:e="collapsible-section",toggleClassName:t="section-heading",headingClassName:n="collapsible-heading",bodyClassName:a="content-body",enableCaching:i=!0,cacheKey:r,defaultExpanded:s,heading:o,expandIconPosition:l="left",expandIconType:c="arrow",expandIconSize:p,onToggle:d,children:u})=>{const m=ot.useMemo((()=>r||("string"==typeof o?o:void 0)),[r,o]),[g,h]=ot.useState(i&&Ss.isSet(m)?Ss.isExpanded(m):s),f={size:p||"16px",color:"concrete"},v=u?ot.createElement("span",{className:wn("section-heading-chevron",l)},"arrow"===c?ot.createElement(Bn,{name:"accordionCollapse",className:Ms[l][g?"expanded":"collapsed"],...f}):"plus"===c?ot.createElement(Bn,{name:g?"minus":"plus",...f}):ot.createElement(Bn,{name:g?"closeSmall":"accordionCollapse",...f})):void 0,A="string"==typeof o?ot.createElement("h4",{className:n},"left"===l?ot.createElement(ot.Fragment,null,v," ",o):ot.createElement(ot.Fragment,null,o," ",v)):ot.createElement(ot.Fragment,null,o({chevron:v}));return ot.createElement("div",{className:e},u?ot.createElement("div",{className:wn(t,"clickable","as-link"),onClick:()=>{h(!g),i&&Ss.setExpanded(m,!g),null==d||d(!g)}},A):A,g&&u&&ot.createElement("div",{className:a},u))};class Ds{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}Ds.labels=new Map;const Is=ot.createElement("div",{className:"close-button"},ot.createElement(Dn,{to:"^"},ot.createElement("a",{className:"btn btn-link"},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),Fs=ot.createElement("div",{className:"header"},ot.createElement("div",{className:"horizontal center middle spinner-container"},ot.createElement(Es,null))),Ts=e=>ot.createElement("div",{className:"details-panel"},e.loading?Fs:e.children);Ts.Header=e=>ot.createElement("div",{className:"header"},Is,ot.createElement("div",{className:"header-text horizontal middle"},e.icon,ot.createElement("h3",{className:"horizontal middle space-between flex-1"},e.name)),ot.createElement("div",null,e.children));class Qs extends ot.Component{constructor(){super(...arguments),this.handleRef=e=>{e&&(this.popover=e)}}componentWillReceiveProps(e){this.popover&&(this.props.value&&!e.value&&this.popover.hide(),!this.props.value&&e.value&&this.popover.show())}render(){const{delayShow:e,id:t,placement:n,template:a,value:i}=this.props,r=t||i||"tooltip";let s=ot.createElement(Zt,{id:r},ot.createElement(Br,{message:i}));a&&(s=ot.createElement(Zt,{id:r},a));const o=i&&i.length>0||a?["hover","focus"]:[];return ot.createElement(Xt,{ref:this.handleRef,delayShow:e,placement:n,overlay:s,trigger:o},this.props.children)}}Qs.defaultProps={placement:"top",value:""};const Ps=e=>{const{error:t,...n}=e;return t&&(n.className=`${n.className||""} invalid`),n.type=n.type||"text",ot.createElement(Qs,{id:n.name,value:e.error,placement:"right"},ot.createElement("input",{...n}))},Rs=(e,t)=>{const n=`Value must be a${t?" ":" positive "}number or a SpEL expression.`,a=Number(e);if(Number.isNaN(a)){const t=String(e),a=t?t.indexOf("${"):-1;return-1!==a&&t.includes("}",a)?null:n}return!t&&a<0?n:null},Us=jn((({render:e,formik:t})=>e(t)));const zs=ot.forwardRef((function(e,t){const n=ot.useRef(),a=t||n,[i,r]=ot.useState(!1),[s,o]=ot.useState(!1);return ot.useEffect((()=>{if(i){const t=a.current,n={};Ji(e.initialValues,(e=>g(n,e,!0)),!0),t.setTouched(n),t.getFormikActions().validateForm(),o(!0)}}),[i]),ot.createElement(Ln,{ref:function(e){a.current=e,i||r(!0)},...e,isInitialValid:e.isInitialValid||(()=>a.current&&0===Object.keys(a.current.state.errors).length),render:t=>s&&e.render&&e.render(t)})}));class Gs extends ot.Component{constructor(e){super(e);const{value:t}=e;this.state={value:t}}componentDidUpdate(){if(!this.props.onChange)return;const{value:e,isEqual:t}=this.props,{value:n}=this.state;t(e,n)||(this.setState({value:e}),this.props.onChange(e,n))}render(){return this.props.children||null}}function js(){const e=ct("FIRST_RENDER");return lt((()=>(e.current="MOUNTED",()=>{e.current="UNMOUNTED"}))),e}Gs.defaultProps={isEqual:(e,t)=>e===t};function Ls(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!B(t)||!B(n);return ot.createElement("div",{className:"StandardFieldLayout flex-container-h baseline margin-between-lg"},c&&ot.createElement("div",{className:"StandardFieldLayout_Label sm-label-right"},t," ",n),ot.createElement("div",{className:"flex-grow"},ot.createElement("div",{className:"flex-container-v margin-between-md"},ot.createElement("div",{className:"flex-container-h baseline space-between margin-between-lg StandardFieldLayout_Contents"},a," ",i),!s&&ot.createElement(Dr,{message:o,type:l}))))}oi(".StandardFieldLayout + .StandardFieldLayout {\n margin-top: 6px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Label {\n min-width: 120px;\n}\n\n.StandardFieldLayout .StandardFieldLayout_Contents > *:first-child {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n");const Os=ot.createContext(Ls),{Provider:Ys,Consumer:$s}=Os,Hs=ot.createContext(!1);class Vs{static get(e){return this.labels.get(e)||e}static register(e,t){this.labels.set(e,t)}}function Js(e){return ot.createElement("span",null,Vs.get(e.label))}Vs.labels=new Map,di.useClassicFirewallLabels&&(Vs.register("firewall","security group"),Vs.register("firewalls","security groups"),Vs.register("Firewall","Security Group"),Vs.register("Firewalls","Security Groups"));class Ws{static getHelpField(e){let t=this.helpFields.get(e);return t&&(t=t.replace(/{{(.+?)}}/g,((e,t)=>Vs.get(t)))),t||null}static register(e,t){this.overrides.has(e)||this.helpFields.set(e,t)}static registerOverride(e,t){this.register(e,t),this.overrides.add(e)}}Ws.helpFields=new Map,Ws.overrides=new Set;oi(".HoverablePopover {\n display: inline;\n -webkit-text-decoration: dotted underline var(--color-dovegray);\n text-decoration: dotted underline var(--color-dovegray);\n}\n");class Ks extends ot.Component{constructor(e){super(e),this.mouseEvents$=new At,this.hidePopoverEvents$=new At,this.destroy$=new At,this.targetRef=ot.createRef(),this.handleMouseEvent=e=>{this.mouseEvents$.next(e)},this.rendererRefCallback=e=>{if(e){const{clientWidth:t,clientHeight:n}=ln.findDOMNode(e),a=this.targetRef.current.getBoundingClientRect(),i=window.innerHeight-a.bottom,r=window.innerWidth-a.right;let s;switch(this.props.placement){case"top":s=n>a.top&&a.top<i?"bottom":void 0;break;case"bottom":s=n>i&&i<a.top?"top":void 0;break;case"left":s=t>a.left&&a.left<r?"right":void 0;break;case"right":s=t>r&&r<a.left?"left":void 0}this.setState({placementOverride:s})}},this.Wrapper=({children:e,...t})=>{const{svgMode:n}=this.props;return n?ot.createElement("g",{...t,ref:this.targetRef},e):ot.createElement("div",{...t,ref:this.targetRef},e)},this.state={popoverIsOpen:!1,animation:!0}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=["mouseenter","mouseover"],t=this.mouseEvents$.pipe(St((t=>{const n=e.includes(t.type);return{shouldOpen:n,eventDelay:n?this.props.delayShow:this.props.delayHide,animation:!0}}))),n=this.hidePopoverEvents$.pipe(St((()=>({shouldOpen:!1,eventDelay:0,animation:!1}))));bt(t,n).pipe(St((({shouldOpen:e,eventDelay:t,animation:n})=>Et({shouldOpen:e,animation:n}).pipe(Ft(t)))),Dt((e=>e)),Tt((({shouldOpen:e})=>e!==this.state.popoverIsOpen)),It(this.destroy$)).subscribe((({shouldOpen:e,animation:t})=>this.setPopoverOpen(e,t)))}setPopoverOpen(e,t=!0){this.setState({animation:t,popoverIsOpen:e});const n=e?this.props.onShow:this.props.onHide;n&&n()}render(){const{Component:e,template:t,placement:n,container:a,hOffsetPercent:i,id:r,title:s,className:o}=this.props,{popoverIsOpen:l,animation:c,placementOverride:p}=this.state,{Wrapper:d}=this,u=e?ot.createElement(e,{...this.props,hidePopover:()=>this.hidePopoverEvents$.next()}):t;return ot.createElement(d,{className:wn("HoverablePopover",this.props.wrapperClassName),onMouseEnter:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent},this.props.children,ot.createElement(_t,{show:l,animation:c,placement:p||n,target:this.targetRef.current,container:a,shouldUpdatePosition:!0},ot.createElement(qs,{ref:this.rendererRefCallback,onMouseOver:this.handleMouseEvent,onMouseLeave:this.handleMouseEvent,offsetPercent:i,id:r,title:s,className:o},u)))}}Ks.defaultProps={placement:"top",id:pr.generateUuid(),delayShow:0,delayHide:300};class qs extends ot.Component{constructor(){super(...arguments),this.state={}}componentDidMount(){this.setState(this.getState(this.props))}componentWillReceiveProps(e){this.setState(this.getState(e))}getState(e){const{offsetPercent:t}=e,n=e=>{const t=/(\d+(?:\.\d+)?)%/.exec(e);return t?parseFloat(t[1])/100:.5},a=n(t)-n(e.arrowOffsetLeft);return{offset:0-ln.findDOMNode(this).clientWidth*a}}render(){const{offsetPercent:e,...t}=this.props,{offset:n}=this.state;if(n){const{style:a}=this.props,i=parseInt(`${a.left}`,10)+n,r={...a,left:i};return ot.createElement(en,{...t,style:r,arrowOffsetLeft:e})}return ot.createElement(en,{...t})}}function Xs(e){const{id:t,fallback:n,content:a}=e;let i=a;t&&!i&&(i=Ws.getHelpField(t)||n);return ot.createElement(Br,{message:i,options:{ADD_ATTR:["target"]},trim:!0})}function Zs(e){const{content:t,expand:n,fallback:a,id:i,label:r,placement:s}=e,[o,l]=ot.useState(),c=ot.createElement("i",{className:"small glyphicon glyphicon-question-sign"}),p=ot.useContext(Hs),d=B(n)?p:n;if(!i&&!t)return null;const u=ot.createElement(Xs,{content:t,fallback:a,id:i}),m=ot.createElement(Ks,{placement:s||"top",template:u,onShow:()=>l(Date.now()),onHide:()=>{Date.now()-o>500&&Ui.log({action:"Help contents viewed",category:"Help",data:{label:e.id||e.content}})}},ot.createElement("span",{className:"clickable help-field"}," ",r||c," "));if(r)return ot.createElement("div",{className:"text-only"},!d&&u&&m);{const e=ot.createElement("div",{className:"help-contents small"}," ",u," ");return ot.createElement("div",{style:{display:"inline-block"}},!d&&u&&m,d&&u&&e)}}class _s{static createScheduler(e=di.pollSchedule||3e4){let t=new At,n=(new Date).getTime(),a=null,i=!1,r=yt(e,e);const s=()=>{i||(_e.cancel(a),n=(new Date).getTime(),t.next(!0),a=null)};r.subscribe(s);const o=()=>{Xe.debug("auto refresh suspended"),i=!0},l=e=>{i=!1,a=a||_e(s,e)},c=()=>{i=!1;const t=(new Date).getTime();Xe.debug("auto refresh resumed"),t-n>e?s():l(e-(t-n))},p=()=>{Xe.debug("document visibilityState changed to: ",document.visibilityState),"visible"===document.visibilityState?c():o()};return document.addEventListener("visibilitychange",p),at.addEventListener("offline",o),at.addEventListener("online",c),t.next(!0),{subscribe:t.subscribe.bind(t),scheduleImmediate:()=>{s(),i=!0,l(e)},unsubscribe:()=>{i=!0,t&&t.unsubscribe(),t=null,r=null,_e.cancel(a),document.removeEventListener("visibilitychange",p),at.removeEventListener("offline",o),at.removeEventListener("online",c)}}}}class eo{static publish(e){Kn.isActive(e.key)?Kn.update(e.key,{render:e.content,...e.options}):Kn(e.content,{toastId:e.key,...e.options})}static clear(e){Kn.dismiss(e)}}class to{static initialize(){Xe.debug("Deck version",this.currentVersion.version,"created",rr(this.currentVersion.created)),this.scheduler=_s.createScheduler(),this.scheduler.subscribe((()=>this.checkVersion()))}static checkVersion(){const e=`/version.json?_=${Date.now()}`;We.get(e).then((e=>this.versionRetrieved(e))).catch((()=>{}))}static versionRetrieved(e){const t=e.data;t.version===this.currentVersion.version?this.newVersionSeenCount=0:(this.newVersionSeenCount++,this.newVersionSeenCount>5&&(Xe.debug("New Deck version:",t.version,"created",rr(t.created)),eo.publish({key:"newVersion",action:"create",content:ot.createElement("div",null,"A new version of Spinnaker is available"," ",ot.createElement("a",{role:"button",className:"action",onClick:()=>document.location.reload(!0)},"Refresh"))}),this.scheduler.unsubscribe()))}}to.currentVersion=Wn,to.newVersionSeenCount=0;oi(".help-menu {\n border: 0;\n}\n.help-menu .dropdown-toggle,\n.help-menu .dropdown-toggle:active {\n font-size: 14px;\n font-weight: 200;\n margin: 0;\n border: 0;\n background: transparent;\n border-radius: 0;\n color: var(--color-white);\n}\n.help-menu .dropdown-toggle .caret,\n.help-menu .dropdown-toggle:active .caret {\n margin-left: 3px;\n}\n.help-menu .dropdown.open .dropdown-toggle {\n background-color: transparent;\n text-decoration: none;\n color: var(--color-white);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.help-menu .dropdown-menu {\n border: 0;\n}\n");const no="https://spinnaker.io/docs",ao=()=>di.feedback&&di.feedback.url?ot.createElement(an,{href:di.feedback.url,target:"_blank"},ot.createElement("i",{className:di.feedback.icon||"fa fa-envelope"}),"Β ",di.feedback.text||"Send feedback"):null,io=()=>di.additionalHelpLinks&&di.additionalHelpLinks.length?ot.createElement(ot.Fragment,null,di.additionalHelpLinks.map(((e,t)=>ot.createElement(an,{href:e.url,key:t,target:"_blank"},e.icon?ot.createElement("span",null,ot.createElement("i",{className:e.icon})," Β "):null,e.text||"Additional Help")))):null,ro=()=>{if(!di.version)return null;const e=di.version.replace(/\./g,"-"),t=di.changelogUrl.replace(":version",e);return ot.createElement(an,{href:t,target:"_blank"},"Spinnaker ",di.version)},so=()=>ot.createElement("li",{className:"help-menu"},ot.createElement(tn,{id:"help-menu-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-lg",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})),ot.createElement(tn.Menu,null,ot.createElement(ao,null),ot.createElement(io,null),ot.createElement(an,{href:no,target:"_blank"},"Docs"),ot.createElement(an,{divider:!0}),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(ro,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))),ot.createElement(tn,{id:"help-menu-dropdown-large",pullRight:!0},ot.createElement(tn.Toggle,{className:"hidden-xs hidden-sm hidden-md",noCaret:!0},ot.createElement(nn,{glyph:"question-sign"})," Help"),ot.createElement(tn.Menu,null,ot.createElement(ao,null),ot.createElement(io,null),ot.createElement(an,{href:no,target:"_blank"},"Docs"),ot.createElement(an,{href:"https://spinnaker.io/community",target:"_blank"},"Community Resources"),ot.createElement(ro,null),di.feature.pagerDuty&&ot.createElement("li",{role:"presentation"},ot.createElement(Dn,{to:"home.page"},ot.createElement("a",{className:"clickable"},ot.createElement("span",{className:"feedback-item-label"},"Send a Page")))))));var oo;const lo={"core.serverGroup.detail":"(Optional) <b>Detail</b> is a string of free-form alphanumeric characters and hyphens to describe any other variables in naming a cluster.","core.serverGroup.strategy":"The deployment strategy tells Spinnaker what to do with the previous version of the server group.","cluster.search":'\n Quickly filter the displayed server groups by the following fields:\n <ul>\n <li>Build # (e.g. <samp>#337</samp>)</li>\n <li>Jenkins host</li>\n <li>Jenkins job name</li>\n <li>Cluster (prefixed, e.g. <samp>cluster:myapp-int</samp>)\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Clusters (comma-separated list, e.g. <samp>clusters:myapp-int, myapp-test</samp>)\n <li>Server Group Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Load Balancer Name</li>\n <li>Instance ID</li>\n <li>Labels (comma-separated list of key-value pairs that must all apply to entity, e.g. <samp>labels:app=spinnaker, source=prod</samp>)</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all server groups in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>\n <p>To find a particular instance, enter the instance ID. Only the containing server group will be displayed, and the instance\n will be highlighted for you.</p>',"loadBalancer.search":'\n Quickly filter the displayed load balancers by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n <li>Instance ID</li>\n </ul>\n <p>You can search for multiple words or word fragments. For instance, to find all load balancers in a prod stack with "canary" in the details, enter <samp>prod canary</samp>.</p>',"securityGroup.search":"\n Filter by the following fields:\n <ul>\n <li>VPC (prefixed, e.g. <samp>vpc:main</samp>)\n <li>Name</li>\n <li>Server Group Name</li>\n <li>Load Balancer Name</li>\n <li>Region</li>\n <li>Account</li>\n </ul>","executions.search":"\n Quickly filter the displayed executions by the following fields:\n <ul>\n <li>Name</li>\n <li>Trigger</li>\n </ul>","pipeline.config.triggers.respectQuietPeriod":"\n <p>The quiet period is a system operator designated period of time when automated pipelines and deploys should not run.</p>","pipeline.config.expectedArtifact":"Artifacts required for trigger to execute. Only one of the artifacts needs to be present for the trigger to execute.","pipeline.config.artifact.help":"\n <p>There are certain types of triggers (e.g. Pub/Sub triggers) that can produce artifacts and inject them into the execution context for a pipeline.</p>\n <p>You can specify artifacts that your pipeline expects to be present in the execution context in this section.</p>","pipeline.config.artifact.missingPolicy":"\n <p>The behavior of the pipeline if the Artifact is missing from the pipeline execution.</p>","pipeline.config.artifact.name":"\n <p>The name of the Artifact.</p>","pipeline.config.artifact.type":"\n <p>The type of the Artifact, e.g. 'gcs/object' or 'rpm'.</p>","pipeline.config.lock.allowUnlockUi":"\n <p><strong>Checked</strong> - the pipeline can be unlocked via the Spinnaker UI.</p>\n <p><strong>Unchecked</strong> - the pipeline can only be unlocked via the Spinnaker API.</p>","pipeline.config.lock.description":"\n <p>Friendly description of why this pipeline is locked.</p>\n <p>Please include an email address or slack channel as appropriate.</p>","pipeline.config.optionalStage":"\n <p>When this option is enabled, stage will only execute when the supplied expression evaluates true.</p>\n <p>The expression <em>does not</em> need to be wrapped in ${ and }.</p>\n <p>If this expression evaluates to false, the stages following this stage will still execute.</p>","pipeline.config.checkPreconditions.failPipeline":"\n <p><strong>Checked</strong> - the overall pipeline will fail whenever this precondition is false.</p>\n <p><strong>Unchecked</strong> - the overall pipeline will continue executing but this particular branch will stop.</p>","pipeline.config.checkPreconditions.failureMessage":"\n <p> This failure message will be shown to the user if the precondition evaluates to false. </p>","pipeline.config.checkPreconditions.expectedSize":"Number of server groups in the selected cluster","pipeline.config.checkPreconditions.expression":'\n <p>Value must evaluate to "true".</p>\n <p>Use of the <b>Spring Expression Language</b> allows for complex evaluations.</p>',"pipeline.config.deploy.template":"\n <p>Select an existing cluster to use as a template for this deployment, and we'll pre-fill\n the configuration based on the newest server group in the cluster.</p>\n <p>If you want to start from scratch, select \"None\".</p>\n <p>You can always edit the cluster configuration after you've created it.</p>","pipeline.config.expectedArtifact.matchArtifact":'\n <p>\n This specifies which fields in your incoming artifact to match against. Every field that\n you supply will be used to match against all incoming artifacts. If all specified fields\n match, the incoming artifact is bound to your pipeline context.\n </p>\n <p>\n The field comparisons are done against the incoming artifact. Example: if you are parsing\n artifacts from pub/sub messages via a Jinja template, the comparison will be done after\n the pub/sub -> Spinnaker artifact translation.\n </p>\n <p>For example, if you want to match against any GCS object, only supply <b>type</b> = gcs/object. If you also want to restrict the matches by other fields, include those as well.</p>\n <p>Regex is accepted, so you could for example match on a filepath like so <b>name</b> = .*\\.yaml to match all incoming YAML files.</p>\n <p>See the <a href="https://www.spinnaker.io/reference/artifacts/in-pipelines/#expected-artifacts">reference</a> for more information.</p>',"pipeline.config.expectedArtifact.ifMissing":"\n <p>If no artifact was supplied by your trigger to match against this expected artifact, you have a few options:\n <ol>\n <li>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</li>\n <li>If option 1 fails, or isn't specified, you can provide a default artifact with the required fields to use instead.</li>\n <li>Fail the pipeline if options 1 or 2 fail or aren't selected.</li>\n </ol>\n </p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.usePriorExecution":"\n <p>Attempt to match against an artifact in the prior pipeline execution's context. This ensures that you will always be using the most recently supplied artifact to this pipeline, and is generally a safe choice.</p>","pipeline.config.expectedArtifact.defaultArtifact":"\n <p>If your artifact either wasn't supplied from a trigger, or it wasn't found in a prior execution, the artifact specified below will end up in your pipeline's execution context.</p>\n <p>See the <a href=\"https://www.spinnaker.io/reference/artifacts/in-pipelines\">reference</a> for more information.</p>","pipeline.config.expectedArtifact.gcs.name":"\n <p>The GCS object name, in the form <code>gs://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultGcs.reference":"\n <p>The GCS object name, <i>optionally</i> appending the version. An example: <code>gs://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.s3.name":"\n <p>The S3 object name, in the form <code>s3://bucket/path/to/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultS3.reference":"\n <p>The S3 object name, <i>optionally</i> appending the version. An example: <code>s3://bucket/file.yml#123948581</code></p>","pipeline.config.expectedArtifact.oracle.name":"\n <p>The Oracle object artifact name, in the form <code>oci://bucket/path/file.yml</code>.</p>","pipeline.config.expectedArtifact.defaultOracle.reference":"\n <p>The Oracle object artifact name, <i>optionally</i> appending the version. An example: <code>oci://bucket/file.yml#9ce463aa-d843-4438-b206-5365cd643e2e</code></p>","pipeline.config.expectedArtifact.docker.name":"\n <p>The Docker image name you want to trigger on changes to. By default, this does <i>not</i> include the image tag or digest, only the registry and image repository.</p>","pipeline.config.expectedArtifact.defaultDocker.reference":"\n <p>The fully-qualified docker image to deploy. An example: <code>gcr.io/project/image@sha256:59bb771c86</code></p>","pipeline.config.expectedArtifact.git.name":"\n <p>The file's path from the git root, in the form 'path/to/file.json'</p>","pipeline.config.expectedArtifact.defaultGithub.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGithub.reference":'\n <p>The GitHub API content url the artifact lives under. The domain name may change if you\'re running GHE.</p>\n <p>An example for GitHub.com is <code>https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH</code>. An example for GitHub Enterprise is <code>https://github.domain.com/api/v3/repos/$ORG/$REPO/contents/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/github-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultGitlab.version":"\n <p>Either the commit or branch to checkout.</p>","pipeline.config.expectedArtifact.defaultGitlab.reference":'\n <p>The Gitlab API file url the artifact lives under. The domain name may change if you\'re running your own Gitlab server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/gitlab-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.gitrepo.url":"<p>The location of your Git repository.</p>","pipeline.config.expectedArtifact.gitrepo.branch":"<p>The branch of the repository you want to use.</p>","pipeline.config.expectedArtifact.gitrepo.checkoutSubpath":"<p>Check this if you want to specify a subpath; doing so will reduce the size of the generated artifact.</p>","pipeline.config.expectedArtifact.gitrepo.subpath":"\n <p>The subpath within the Git repository you desire to checkout.</p>\n <p>e.g.: <b>examples/wordpress/mysql/</b></p>","pipeline.config.expectedArtifact.helm.account":"\n <p>The account contains url the charts can be found</p>","pipeline.config.expectedArtifact.helm.name":"\n <p>The name of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.helm.version":"\n <p>The version of chart you want to trigger on changes to</p>","pipeline.config.expectedArtifact.defaultBitbucket.reference":'\n <p>The Bitbucket API file url the artifact lives under. The domain name may change if you\'re running your own Bitbucket server. The repository and path to files must be URL encoded.</p>\n <p>An example is <code>https://api.bitbucket.org/1.0/repositories/$ORG/$REPO/raw/$VERSION/$FILEPATH</code>. See <a href="https://www.spinnaker.io/reference/artifacts/types/bitbucket-file/#fields">our docs</a> for more info.</p>',"pipeline.config.expectedArtifact.defaultBitbucket.filepath":"\n <p>The file path within your repo. path/to/file.yml is an example.</p>","pipeline.config.trigger.helm.chart":"The Helm chart name.","pipeline.config.trigger.helm.version":"The Helm chart version, as semver.","pipeline.config.trigger.helm.version.manual":"The Helm chart version, as an exact version.","pipeline.config.trigger.webhook.source":"\n <p>Determines the target URL required to trigger this pipeline, as well as how the payload can be transformed into artifacts.</p>\n ","pipeline.config.trigger.webhook.payloadConstraints":'\n <p>When provided, only a webhook with a payload containing at least the specified key/value pairs will be allowed to trigger this pipeline. For example, if you wanted to lock down the systems/users that can trigger this pipeline via this webhook, you could require the key "secret" and value "something-secret" as a constraint.</p>\n <p>The constraint values may be supplied as regex.</p>\n ',"pipeline.config.trigger.pubsub.attributeConstraints":"\n <p>Pubsub messages can have system-specific metadata accompanying the payload called <b>attributes</b>.</p>\n <p>When provided, only a pubsub message with attributes containing at least the specified key/value pairs will be allowed to trigger this pipeline.</p>\n <p>The constraint value is a java regex string.</p>\n ","pipeline.config.trigger.pubsub.payloadConstraints":'\n <p>\n When provided, only a pubsub message with a payload containing at least the specified\n key/value pairs will be allowed to trigger this pipeline. For example, if you wanted\n to restrict the systems/users that can trigger this pipeline via this pubsub\n subscription, you could require the key "secret" and value "something-secret" as a constraint.\n </p>\n <p>\n The key/value pairs are matched against the unprocessed payload body, prior to any\n transformation using, for example, a Jinja template in a pubsub subscription configuration.\n </p>\n <p>The constraint value is a java regex string.</p>\n ',"pipeline.config.findArtifactFromExecution.considerExecutions":'\n <p>Select the types of executions to consider. When no selection is made, the default is "any execution".</p>\n <p>This will always evaluate to the most recent execution matching your provided criteria.</p>\n ',"pipeline.config.tags":"<p>Pipeline tags let you filter pipelines/executions by addition dimensions in the executions page</p>","loadBalancer.advancedSettings.healthTimeout":"<p>Configures the timeout, in seconds, for reaching the healthCheck target. Must be less than the interval.</p><p> Default: <b>5</b></p>","loadBalancer.advancedSettings.idleTimeout":"<p>Configures the idle timeout, in seconds. If no data has been sent or received by the time that the idle timeout period elapses, the load balancer closes the connection. </p><p> Default: <b>60</b></p>","loadBalancer.advancedSettings.deletionProtection":"<p>To prevent your load balancer from being deleted accidentally, you can enable deletion protection.</p><p> Default: <b>false</b></p>","loadBalancer.advancedSettings.healthInterval":"<p>Configures the interval, in seconds, between ELB health checks. Must be greater than the timeout.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.healthyThreshold":"<p>Configures the number of healthy observations before reinstituting an instance into the ELBβs traffic rotation.</p><p>Default: <b>10</b></p>","loadBalancer.advancedSettings.unhealthyThreshold":"<p>Configures the number of unhealthy observations before deservicing an instance from the ELB.</p><p>Default: <b>2</b></p>","loadBalancer.advancedSettings.loadBalancingCrossZone":"<p>Cross-zone load balancing distributes traffic evenly across all targets in the Availability Zones enabled for the load balancer.</p><p> Default: <b>True</b></p>","loadBalancer.advancedSettings.albIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"loadBalancer.advancedSettings.nlbIpAddressType":'<p>Assigns both a v4 and v6 IP address to the load balancer. This option is only valid for NLBs which are external and only have Ip targets (not instance targets). If left unchecked, this value will default to <b>"ipv4"</b>.</p>',"pipeline.config.resizeAsg.action":"\n <p>Configures the resize action for the target server group.\n <ul>\n <li><b>Scale Up</b> increases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale Down</b> decreases the size of the target server group by an incremental or percentage amount</li>\n <li><b>Scale to Cluster Size</b> increases the size of the target server group to match the largest server group in the cluster, optionally with an incremental or percentage additional capacity. Additional capacity will not exceed the existing maximum size.</li>\n <li><b>Scale to Exact Size</b> adjusts the size of the target server group to match the provided capacity</li>\n </ul></p>","pipeline.config.resizeAsg.cluster":"<p>Configures the cluster upon which this resize operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.modifyScalingProcess.cluster":"<p>Configures the cluster upon which this modify scaling process operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.enableAsg.cluster":"<p>Configures the cluster upon which this enable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.disableAsg.cluster":"<p>Configures the cluster upon which this disable operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.destroyAsg.cluster":"<p>Configures the cluster upon which this destroy operation will act. The <em>target</em> specifies what server group to resolve for the operation.</p>","pipeline.config.jenkins.trigger.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.jenkins.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.jenkins.propertyFile":'<p>(Optional) Configures the name to the Jenkins artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.job.isFiltered":"<p>Note that for performance reasons, not all jobs are displayed. Please use the search field to limit the number of jobs.</p>","pipeline.config.travis.trigger.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the trigger and accessible via <em>trigger.properties</em>. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.travis.trigger.payloadConstraints":'<p>(Optional, Requires Property File) When provided, only a build that contains a Property File with correct constraints will trigger this pipeline. For example, you could restrict the trigger to certain branches by placing the branch name in your Property File and adding a constraint with a key like "branch" and value "master".</p>\n <p>The constraint values may be supplied as regex.</p>',"pipeline.config.travis.propertyFile":'<p>(Optional) Configures the name to the Travis artifact file used to pass in properties to later stages in the Spinnaker pipeline. The contents of this file will now be available as a map under the stage context. See <a target="_blank" href="https://www.spinnaker.io/guides/user/pipeline-expressions/">Pipeline Expressions docs</a> for more information.</p>',"pipeline.config.bake.skipRegionDetection":"\n <p>By default, Spinnaker will detect regions to bake in from downstream deploy stages.</p>\n <p>To prevent failed deploys from accidentally missed regions during the bake process.</p>\n <p>This setting will disable this detection mechanism.</p>","pipeline.config.bake.package":'\n <p>The name of the package you want installed (without any version identifiers).</p>\n <p>If your build produces a deb file named "myapp_1.27-h343", you would want to enter "myapp" here.</p>\n <p>If there are multiple packages (space separated), then they will be installed in the order they are entered.</p>',"pipeline.config.bake.packageArtifacts":"\n <p>Artifacts representing packages you want installed.</p>\n <p>These artifacts must be either deb or rpm packages, whichever applies to the operating system on your base image.</p>\n <p>Package artifacts are installed in order, after any packages in the 'Packages' field are installed.</p>","pipeline.config.docker.bake.targetImage":"<p>The name of the resulting docker image.</p>","pipeline.config.docker.bake.targetImageTag":"<p>The tag of the resulting docker image, defaults to commit hash if available.</p>","pipeline.config.docker.bake.organization":"<p>The name of the organization or repo to use for the resulting docker image.</p>","pipeline.config.bake.baseAmi":"<p>(Optional) If Base AMI is specified, this will be used instead of the Base OS provided","pipeline.config.bake.amiSuffix":"<p>(Optional) String of date in format YYYYMMDDHHmm, default is calculated from timestamp,</p>","pipeline.config.bake.amiName":"<p>(Optional) Default = $package-$arch-$ami_suffix-$store_type</p>","pipeline.config.bake.templateFileName":"<p>(Optional) The explicit packer template to use, instead of resolving one from rosco's configuration.</p>","pipeline.config.bake.varFileName":"<p>(Optional) The name of a json file containing key/value pairs to add to the packer command.</p>","pipeline.config.bake.extendedAttributes":"<p>(Optional) Any additional attributes that you want to pass onto rosco, which will be injected into your packer runtime variables.</p>","pipeline.config.cf.createservice.updatable":"<p>If checked, this will try to update the existing service. If not, if the service exists this stage will succeed and not try to update.</p>","pipeline.config.cf.createservice.versioned":"<p>If checked, this stage should always deploy a new service with an incremented version number (mysql-v001).</p>","pipeline.config.manualJudgment.instructions":"<p>(Optional) Instructions are shown to the user when making a manual judgment.</p><p>May contain HTML.</p>","pipeline.config.manualJudgment.propagateAuthentication":"\n <p><strong>Checked</strong> - the pipeline will continue with the permissions of the approver.</p>\n <p><strong>Unchecked</strong> - the pipeline will continue with its current permissions.</p>","pipeline.config.manualJudgment.judgmentInputs":'\n <p>(Optional) Entries populate a dropdown displayed when performing a manual judgment.</p>\n <p>The selected value can be used in a subsequent <strong>Check Preconditions</strong> stage to determine branching.</p>\n <p>For example, if the user selects "rollback" from this list of options, that branch can be activated by using the expression:\n <samp class="small">execution.stages[n].context.judgmentInput=="rollback"</samp></p>',"pipeline.config.bake.manifest.expectedArtifact":"<p>This is the template you want to render.</p>","pipeline.config.bake.manifest.overrideExpressionEvaluation":'<p>Explicitly evaluate SpEL expressions in overrides just prior to manifest baking. Can be paired with the "Skip SpEL evaluation" option in the Deploy Manifest stage when baking a third-party manifest artifact with expressions not meant for Spinnaker to evaluate as SpEL.</p>',"pipeline.config.bake.manifest.templateRenderer":"<p>This is the engine used for rendering your manifest.</p>","pipeline.config.bake.manifest.helm.chartFilePath":"\n <p>This is the relative path to the Chart.yaml file within your Git repo.</p>\n <p>e.g.: <b>helm/my-chart/Chart.yaml</b></p>","pipeline.config.bake.manifest.helm.rawOverrides":"Use <i>--set</i> instead of <i>--set-string</i> when injecting override values. Values injected using <i>--set</i> will be converted to primitive types by Helm.","pipeline.config.bake.manifest.kustomize.filePath":"\n <p>This is the relative path to the kustomization.yaml file within your Git repo.</p>\n <p>e.g.: <b>examples/wordpress/mysql/kustomization.yaml</b></p>","pipeline.config.bake.cf.manifest.name":"<p> Name should be the same as the expected artifact in the Produces Artifact section. </p>","pipeline.config.bake.cf.manifest.templateArtifact":"\n <p> This is the manifest template needing resolution. Variables in this template should use double parentheses notation.</p>\n <p>e.g.: </p>\n <p>---</p>\n <p>buildpack: ((javabuildpack)) </p>\n <p>foo: ((some.nestedKey)) </p>","pipeline.config.bake.cf.manifest.varsArtifact":'\n <p> These are the variables that will be substituted in the manifest template. These should be yaml files and follow standard convention. </p>\n <p>e.g.: </p>\n <p>---</p>\n <p>javabuildpack: java_buildpack_offline </p>\n <p>some: </p>\n <p style="padding-left: 1em">nestedKey: bar </p>',"pipeline.config.haltPipelineOnFailure":"Immediately halts execution of all running stages and fails the entire execution.","pipeline.config.haltBranchOnFailure":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run.","pipeline.config.haltBranchOnFailureFailPipeline":"Prevents any stages that depend on this stage from running, but allows other branches of the pipeline to run. The pipeline will be marked as failed once complete.","pipeline.config.ignoreFailure":"Continues execution of downstream stages, marking this stage as failed/continuing.","pipeline.config.jenkins.markUnstableAsSuccessful.true":"If Jenkins reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.jenkins.markUnstableAsSuccessful.false":"\n If Jenkins reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.travis.markUnstableAsSuccessful.true":"If Travis reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.travis.markUnstableAsSuccessful.false":"\n If Travis reports the build status as UNSTABLE,\n Spinnaker will mark the stage as TERMINAL; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.wercker.markUnstableAsSuccessful.true":"If Wercker reports the build status as UNSTABLE, Spinnaker will mark the stage as SUCCEEDED and continue execution of the pipeline.","pipeline.config.wercker.markUnstableAsSuccessful.false":"\n If Wercker reports the build status as UNSTABLE,\n Spinnaker will mark the stage as FAILED; subsequent execution will be determined based on the configuration of the\n <b>If build fails</b> option for this stage.","pipeline.config.cron.expression":'<strong>Format (Year is optional)</strong><p><samp>Seconds Minutes Hour DayOfMonth Month DayOfWeek (Year)</samp></p><p><strong>Example: every 30 minutes</strong></p><samp>0 0/30 * * * ?</samp><p><strong>Example: every Monday at 10 am</strong></p><samp>0 0 10 ? * 2</samp><p><strong>Note:</strong> values for "DayOfWeek" are 1-7, where Sunday is 1, Monday is 2, etc. You can also use MON,TUE,WED, etc.',"cluster.rollback.explicit":"\n <p>A server group running the previous build will be enabled and appropriately resized.</p>\n <p>The current server group will be disabled after the resize completes.</p>\n ","cluster.rollback.previous_image":"\n <p>The current server group will be cloned with the previous build.</p>\n ","pipeline.config.findAmi.cluster":"The cluster to look at when selecting the image to use in this pipeline.","pipeline.config.findAmi.imageNamePattern":"A regex used to match the name of the image. Must result in exactly one match to succeed. Empty is treated as match any.","pipeline.config.dependsOn":"Declares which stages must be run <em>before</em> this stage begins.","pipeline.config.parallel.cancel.queue":"<p>If concurrent pipeline execution is disabled, then the pipelines that are in the waiting queue will get canceled when the next execution starts. <br><br>Check this box if you want to keep them in the queue.</p>","pipeline.config.timeout":"\n <p>Allows you to force the stage to fail if its running time exceeds a specific length.</p>\n <p><b>Note:</b> By default, Spinnaker will use sensible timeouts that depend on the stage type and the operations the stage needs to perform at runtime. These defaults can vary based on chosen configuration and other external factors.\n </p>","pipeline.config.trigger.runAsUser":"The current user must have access to the specified service account, and the service account must have access to the current application. Otherwise, you'll receive an 'Access is denied' error.","pipeline.config.trigger.authorizedUser":"The current user must have the permission to approve the manual judgment stage. Otherwise, you'll not be able continue to the next pipeline stage.","pipeline.config.script.repoUrl":"<p>Path to the repo hosting the scripts in Stash. (e.g. <samp>CDL/mimir-scripts</samp>). Leave empty to use the default.</p>","pipeline.config.script.repoBranch":"<p>Git Branch. (e.g. <samp>master</samp>). Leave empty to use the master branch.</p>","pipeline.config.script.path":"<p>Path to the folder hosting the scripts in Stash. (e.g. <samp>groovy</samp>, <samp>python</samp> or <samp>shell</samp>)</p>","pipeline.config.script.command":"<p>Executable script and parameters. (e.g. <samp>script.py --ami-id ${deploymentDetails[0].ami}</samp> ) </p>","pipeline.config.script.image":"<p>(Optional) image passed down to script execution as IMAGE_ID</p>","pipeline.config.script.account":"<p>(Optional) account passed down to script execution as ENV_PARAM</p>","pipeline.config.script.region":"<p>(Optional) region passed down to script execution as REGION_PARAM</p>","pipeline.config.script.cluster":"<p>(Optional) cluster passed down to script execution as CLUSTER_PARAM</p>","pipeline.config.script.cmc":"<p>(Optional) cmc passed down to script execution as CMC</p>","pipeline.config.script.propertyFile":"<p>(Optional) The name to the properties file produced by the script execution to be used by later stages of the Spinnaker pipeline. </p>","pipeline.config.docker.trigger.tag":"<p>(Optional) If specified, only the tags that match this Java Regular Expression will be triggered. Leave empty to trigger builds on any tag pushed.</p><p>Builds will not be triggered off the latest tag or updates to existing tags.</p>","pipeline.config.docker.trigger.digest":"<p>The SHA256 hash of the image.</p>","pipeline.config.git.trigger.branch":"<p>(Optional) If specified, only pushes to the branches that match this Java Regular Expression will be triggered. Leave empty to trigger builds for every branch.</p>","pipeline.config.git.trigger.githubSecret":'<p>(Optional, but recommended) If specified, verifies GitHub as the sender of this trigger. See <a target="_blank" href="https://developer.github.com/webhooks/securing/">GitHub docs</a> for more information.</p>',"serverGroup.ipv6":"<p>Associating an IPv6 address to nodes allows for ingress and egress communication over IPv6. Most modern software supports IPv6 and enablement is transparent. This is an incremental addition to IPv4 and will not remove the ability for connectivity over IPv4.</p>","serverGroupCapacity.useSourceCapacityTrue":"\n <p>Spinnaker will use the current capacity of the existing server group when deploying a new server group.</p>\n <p>This setting is intended to support a server group with auto-scaling enabled, where the bounds and desired capacity are controlled by an external process.</p>\n <p>In the event that there is no existing server group, the deploy will fail.</p>","serverGroupCapacity.useSourceCapacityFalse":"<p>The specified capacity is used regardless of the presence or size of an existing server group.</p>","strategy.redblack.scaleDown":"\n <p>Resizes the target server group to zero instances before disabling it.</p>\n <p>Select this if you wish to retain the launch configuration for the old server group without running any instances.</p>","strategy.redblack.maxRemainingAsgs":'\n <p><b>Optional</b>: indicates the maximum number of server groups that will remain in this cluster - including the newly created one.</p>\n <p>If you wish to destroy all server groups except the newly created one, select "Highlander" as the strategy.</p>\n <p><strong>Minimum value:</strong> 2</p>',"strategy.redblack.rollback":"\n <p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>\n <p>The rollback <strong>will only be</strong> initiated if instances in the new server group fail to launch and become healthy.</p>\n <p>Should an error occur disabling or destroying other server groups in the cluster, the new server group <strong>will not be</strong> rolled back.</p>\n ","strategy.rollingPush.relaunchAll":"<p>Incrementally terminates each instance in the server group, waiting for a new one to come up before terminating the next one.</p>","strategy.rollingPush.totalRelaunches":"<p>Total number of instances to terminate and relaunch.</p>","strategy.rollingPush.concurrentRelaunches":"<p>Number of instances to terminate and relaunch at a time.</p>","strategy.rollingPush.concurrentRelaunches.migration":"\n <p>Number of instances to terminate and relaunch at a time.</p>\n <p>Can be expressed as an explicit instance count or as a percentage of instances in server group being migrated.</p>\n ","strategy.rollingPush.order":"\n <p>Determines the order in which instances will be terminated.\n <ul><li><b>Oldest</b> will terminate the oldest instances first</li>\n <li><b>Newest</b> will terminate those most recently launched.</li></ul></p>","strategy.rollingRedBlack.targetPercentages":"<p>Rolling red black will slowly scale up the new server group. It will resize the new server group by each percentage defined.</p>","strategy.rollingRedBlack.rollback":"<p>Disable the new server group and ensure that the previous server group is restored to its original capacity.</p>","strategy.monitored.deploySteps":"<p>Monitored Deploy will scale up the new server group as specified by these per cent steps. After each step, the health of the new server group will be evaluated by the specified deployment monitor.</p>","strategy.monitored.rollback":"<p>If deploy fails, disable the new server group and ensure that the previous server group is active and restored to its original capacity.</p>","strategy.monitored.destroyFailedAsg":"<p>If deploy fails and rollback succeeds destroys the server group that failed the deploy instead of just disabling it.</p>","loadBalancers.filter.serverGroups":"\n <p>Displays all server groups configured to use the load balancer.</p>\n <p>If the server group is configured to <em>not</em> add new instances to the load balancer, it will be grayed out.</p>","loadBalancers.filter.instances":"\n <p>Displays all instances in the context of their parent server group. The color of the instance icon\n indicates <em>only its health in relation to the load balancer</em>. That is, if the load balancer health check reports the instance\n as healthy, the instance will appear green - even if other health indicators (Discovery, other load balancers, etc.) report the instance\n as unhealthy.</p>\n <p>A red icon indicates the instance is failing the health check for the load balancer.</p>\n <p>A gray icon indicates the instance is currently detached from the load balancer.</p>","loadBalancers.filter.onlyUnhealthy":"\n <p>Filters the list of load balancers and server groups (if enabled)\n to only show load balancers with instances failing the health check for the load balancer.</p>","project.cluster.stack":"<p>(Optional field)</p><p>Filters displayed clusters by stack.</p><p>Enter <samp>*</samp> to include all stacks; leave blank to omit any clusters with a stack.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","project.cluster.detail":"<p>(Optional field)</p><p>Filters displayed clusters by detail.</p><p>Enter <samp>*</samp> to include all details; leave blank to omit any clusters with a detail.</p><p>Only <samp>*</samp> is valid for Kubernetes V2 accounts.</p>","instanceType.storageOverridden":"<p>These storage settings have been cloned from the base server group and differ from the default settings for this instance type.</p>","instanceType.unavailable":"<p>This instance type is not available for the selected configuration.</p>","execution.forceRebake":"\n <p>By default, the bakery will <b>not</b> create a new image if the contents of the package and base image have not changed.\n Instead, it will return the previously baked image, though this behavior is not guaranteed.</p>\n <p>Select this option to force the bakery to create a new image, regardless of whether or not a matching image exists.</p>","execution.dryRun":"\n <p>Select this option to run the pipeline without <em>really</em> executing anything.</p>\n <p>This is a good way to test parameter-driven behavior, expressions, optional stages, etc.</p>","user.verification":'\n Typing into this verification field is annoying! But it serves as a reminder that you are\n changing something in an account deemed important, and prevents you from accidentally changing something\n when you meant to click on the "Cancel" button.',"pipeline.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the pipeline to complete","jenkins.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Jenkins job to complete","travis.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Travis job to complete","wercker.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the Wercker job to complete","script.waitForCompletion":"if unchecked, marks the stage as successful right away without waiting for the script to complete","markdown.examples":"\n Some examples of markdown syntax: <br/> `*italic*` <br/> `**bold**` <br/> `[link text](http://url-goes-here)`\n ","pipeline.config.webhook.payload":"JSON payload to be added to the webhook call.","pipeline.config.webhook.cancelPayload":"JSON payload to be added to the webhook call when it is called in response to a cancellation.","pipeline.config.webhook.waitForCompletion":"If not checked, we consider the stage succeeded if the webhook returns an HTTP status code 2xx, otherwise it will be failed. If checked, it will poll a status url (defined below) to determine the progress of the stage.","pipeline.config.webhook.statusUrlResolutionIsGetMethod":"Use the webhook's URL with GET method as status endpoint.","pipeline.config.webhook.statusUrlResolutionIsLocationHeader":"Pick the status url from the Location header of the webhook's response call.","pipeline.config.webhook.statusUrlResolutionIsWebhookResponse":"Pick the status url from the JSON returned by the webhook's response call.","pipeline.config.webhook.statusUrlJsonPath":"JSON path to the status url in the webhook's response JSON. (i.e. <samp>$.buildInfo.url</samp>)","pipeline.config.webhook.retryStatusCodes":"Normally, webhook stages only retry on 429 and 5xx status codes. <br>You can specify additional status codes here that will cause the monitor to retry (e.g. <samp>404, 418</samp>)","pipeline.config.webhook.waitBeforeMonitor":"Optional delay (in seconds) to wait before starting to poll the endpoint for monitoring status","pipeline.config.webhook.statusJsonPath":"JSON path to the status information in the webhook's response JSON (e.g. <samp>$.buildInfo.status</samp>). <br>If left empty, a 200 response from the status endpoint will be treated as a success.","pipeline.config.webhook.progressJsonPath":"JSON path to a descriptive message about the progress in the webhook's response JSON. (e.g. <samp>$.buildInfo.progress</samp>)","pipeline.config.webhook.successStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as SUCCESS status.","pipeline.config.webhook.canceledStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as CANCELED status.","pipeline.config.webhook.terminalStatuses":"Comma-separated list of strings (that will be returned in the response body in the previously defined `statusJsonPath` field) that will be considered as TERMINAL status.","pipeline.config.webhook.customHeaders":"Key-value pairs to be sent as additional headers to the service.","pipeline.config.webhook.failFastCodes":"Comma-separated HTTP status codes (4xx or 5xx) that will cause this webhook stage to fail without retrying.","pipeline.config.webhook.signalCancellation":"Trigger a specific webhook if this stage is cancelled by user or due to pipeline failure","pipeline.config.parameter.label":"(Optional): a label to display when users are triggering the pipeline manually","pipeline.config.parameter.description":"(Optional): if supplied, will be displayed to users as a tooltip\n when triggering the pipeline manually. You can include HTML in this field.","pipeline.config.parameter.pinned":"(Optional): if checked, this parameter will be always shown in a pipeline execution view, otherwise it'll be collapsed by default.","pipeline.config.parameter.pinAll":"(Optional): if checked, all parameters will be shown in a pipeline execution view.","pipeline.config.failOnFailedExpressions":"When this option is enabled, the stage will be marked as failed if it contains any failed expressions","pipeline.config.roles.help":"\n <p> When the pipeline is triggered using an automated trigger, these roles will be used to decide if the pipeline has permissions to access a protected application or account.</p>\n <ul>\n <li>\n To read from a protected application or account, the pipeline must have at least one role that has read access to the application or account.\n </li>\n <li>\n To write to a protected application or account, the pipeline must have at least one role that has write access to the application or account.\n </li>\n </ul>\n <p><strong>Note:</strong> To prevent privilege escalation vulnerabilities, a user must be a member of <strong>all</strong> of the groups specified here in order to modify, and execute the pipeline.</p>","pipeline.config.entitytags.namespace":"All tags have an associated namespace (<strong>default</strong> will be used if unspecified) that provides a means of grouping tags by a logical owner.","pipeline.config.entitytags.value":"Value can either be a string or an object. If you want to use an object, input a valid JSON string.","pipeline.config.entitytags.region":"(Optional) Target a specific region, use * if you want to apply to all regions.","pipeline.config.deliveryConfig.manifest":`(Optional) Name of the file with your Delivery Config manifest. Leave blank to use the default name (<strong><i>${null==(oo=di.managedDelivery)?void 0:oo.defaultManifest}</i></strong>).`,"pipeline.config.codebuild.source":"(Optional) Source of the build. It will be overridden to Spinnaker artifact if checked. If not checked, source configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceType":"(Optional) Type of the source. It can be specified explicitly; otherwise, it will be inferred from source artifact.","pipeline.config.codebuild.sourceVersion":'(Optional) Source version of the build. If not specified, the artifact version will be used. If artifact doesn\'t have a version, the latest version will be used. See the <a href="https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#CodeBuild-StartBuild-request-sourceVersion">CodeBuild reference</a> for more information.',"pipeline.config.codebuild.buildspec":"(Optional) Inline buildspec definition of the build. If not specified, buildspec configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySources":"(Optional) Secondary sources of the build. It can be overridden by adding Spinnaker Artifacts. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.secondarySourcesVersionOverride":"(Optional) Existing secondary sources version overrides. Pre-defined secondary source's version can be overriden by specifying the source identifier and version. If not specified, secondary sources configured in CodeBuild project will be used.","pipeline.config.codebuild.sourceIdentifier":"(Optional) Name of a pre-defined secondary source.","pipeline.config.codebuild.secondarySourceVersion":"Version of secondary source identifier to use. Required if specifying a source identifier.","pipeline.config.codebuild.image":"(Optional) Image in which the build will run. It can be overridden by specifying the name of the image. If not specified, image configured in CodeBuild project will be used.","pipeline.config.codebuild.envVar":"(Optional) Environment variables that will be propagated into the build."};Object.keys(lo).forEach((e=>Ws.register(e,lo[e])));function co(e){const{label:t,help:n,input:a,actions:i,validation:r={}}=e,{hidden:s,messageNode:o,category:l}=r,c=!!t||!!n;return ot.createElement(Hs.Provider,{value:false},ot.createElement("div",{className:"sp-formItem"},ot.createElement("div",{className:"sp-formItem__left"},c&&ot.createElement("div",{className:"sp-formLabel"},t," ",n)),ot.createElement("div",{className:"sp-formItem__right"},ot.createElement("div",{className:"sp-form"},ot.createElement("span",{className:"flex-container-h margin-between-lg field"},ot.createElement("span",{className:"input"},a),i)),false,!s&&ot.createElement(Dr,{message:o,type:l}))))}function po(e,t){if(P(e)){return e(t)}return e}oi(".sp-formSection {\n border: 1px solid var(--color-concrete);\n border-radius: 16px;\n max-width: 800px;\n overflow: hidden;\n margin-bottom: 16px;\n -webkit-box-shadow: 0 4px 0 0 var(--color-concrete);\n box-shadow: 0 4px 0 0 var(--color-concrete);\n background-color: var(--color-white);\n padding-bottom: 8px;\n}\n.sp-formSection__header {\n font-size: 18px;\n font-weight: 600;\n border-bottom: 1px solid var(--color-concrete);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n background-color: rgba(0, 0, 0, 0.06);\n padding: 8px 16px;\n margin-bottom: 8px;\n}\n.sp-formSection__header .title {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-height: 48px;\n}\n.sp-formGroup {\n border: 1px solid var(--color-titanium);\n border-radius: 8px;\n -webkit-box-shadow: 0 2px 0 0 var(--color-titanium);\n box-shadow: 0 2px 0 0 var(--color-titanium);\n max-width: 800px;\n margin-bottom: 16px;\n overflow: visible;\n}\n.sp-formItem {\n font-size: 14px;\n padding: 0 0 8px 16px;\n max-width: 800px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n }\n}\n.sp-formItem .help-contents {\n font-style: italic;\n}\n.groupHeader {\n background-color: rgba(0, 0, 0, 0.025);\n border-bottom: 1px dotted var(--color-concrete);\n padding-bottom: 0;\n margin-bottom: 7px;\n padding-top: 8px;\n}\n.sp-formItem__left {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__left {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 32%;\n flex: 0 0 32%;\n }\n}\n@media only screen and (min-width: 640px) {\n .sp-formItem__right {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 68%;\n flex: 0 0 68%;\n padding: 0 14px;\n }\n}\n.sp-formLabel {\n -ms-flex-item-align: end;\n align-self: flex-end;\n margin-left: 8px;\n margin-bottom: 4px;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n font-size: 13px;\n font-weight: 700;\n}\n@media only screen and (min-width: 640px) {\n .sp-formLabel {\n -ms-flex-item-align: start;\n align-self: flex-start;\n text-align: right;\n margin: 6px 0 8px 0;\n }\n}\n.sp-formLabel .optional {\n font-weight: 600;\n font-style: italic;\n font-size: 12px;\n}\n.sp-formActions {\n white-space: nowrap;\n}\n.sp-formActions .action {\n display: inline-block;\n width: 32px;\n height: 32px;\n padding: 3px 4px;\n border: 1px solid var(--color-concrete);\n cursor: pointer;\n border-radius: 2px;\n margin-left: 4px;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions .action {\n margin-left: 2px;\n }\n}\n.sp-formActions .action [class^='icon-'],\n.sp-formActions .action [class*=' icon-'] {\n font-size: 24px;\n}\n.sp-formActions--mobile {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 1px;\n flex: 1 0 1px;\n margin-bottom: 8px;\n -ms-flex-item-align: end;\n align-self: flex-end;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--mobile {\n display: none;\n }\n}\n.sp-formActions--web {\n display: none;\n}\n@media only screen and (min-width: 640px) {\n .sp-formActions--web {\n display: block;\n }\n}\n.sp-form {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n width: 100%;\n margin-bottom: 8px;\n}\n.sp-form .prefix,\n.sp-form .suffix {\n -webkit-box-flex: 0;\n -ms-flex: 0 1 auto;\n flex: 0 1 auto;\n margin: 8px 4px 8px 0;\n -ms-flex-item-align: center;\n align-self: center;\n word-break: break-all;\n}\n.sp-form .suffix {\n margin-left: 4px;\n margin-right: 6px;\n}\n.sp-form .field {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n min-width: 100px;\n}\n.sp-form .field .input {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.sp-form .Select-input input {\n border: none !important;\n padding: 8px 0 12px;\n}\n.sp-form .is-open .Select-value-label {\n opacity: 0.6;\n}\n.sp-form input[type='text'] {\n border: 1px solid var(--color-concrete);\n border-radius: 2px;\n width: 100%;\n height: 32px;\n padding: 0 8px;\n background-color: transparent;\n font-size: 14px;\n}\n.sp-form input[type='checkbox'] {\n background-color: var(--color-danger);\n}\n");class uo extends ot.Component{constructor(){super(...arguments),this.state={showContextModal:!1}}render(){const{spelError:e}=this.props;if(!e||!e.message)return null;const t=()=>this.setState((e=>({showContextModal:!e.showContextModal})));return ot.createElement("div",null,ot.createElement(qt,{show:this.state.showContextModal,onHide:t},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.message)),ot.createElement(qt.Body,null,ot.createElement("pre",null,e.context)),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"primary passive",type:"button",onClick:t},"Close"))),ot.createElement(Dr,{type:"error",message:e.message}),ot.createElement("button",{className:"link",type:"button",onClick:t},"Show expression context where the error occurred"))}}class mo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,prefix:a,...i}=this.props,r=`TextInput form-control ${gr(n)} ${hr(t)}`,s=ot.createElement("input",{className:r,type:"text",autoComplete:"off",value:gr(e),...i});return a?ot.createElement("div",{className:"flex-container-h middle"},ot.createElement("div",{className:"sp-padding-xs-right body-regular"},a),s):s}}const go=e=>Xn.compile(`'${e.replace(/'/g,"''")}'`);class ho{constructor(e,t){this.bracket=e,this.pos=t}static theOpenBracketFor(e){return"}"===e?"{":"]"===e?"[":"("}static theCloseBracketFor(e){return"{"===e?"}":"["===e?"]":")"}compatibleWithCloseBracket(e){return"{"===this.bracket?"}"===e:"["===this.bracket?"]"===e:")"===e}}class fo{parseExpressions(e){const t=[],n="${",a="}";let i=0;for(;i<e.length;){const r=e.indexOf(n,i);if(r>=i){r>i&&t.push(go(e.substring(i,r)));const s=r+n.length,o=this.skipToCorrectEndSuffix(a,e,s);if(-1===o)throw new Error("No ending suffix '}' for expression starting at character "+r+": "+e.substring(r));if(o===s)throw new Error("No expression defined within delimiter '${}' at character "+r);const l=e.substring(r+n.length,o).trim();if(!l)throw new Error("No expression defined within delimiter '${}' at character "+r);t.push(Xn.compile(l)),i=o+a.length}else t.push(go(e.substring(i))),i=e.length}return t}isSuffixHere(e,t,n){let a=0;for(let i=0;i<n.length&&t<e.length;i++)if(e.charAt(t++)!==n.charAt(a++))return!1;return a===n.length}skipToCorrectEndSuffix(e,t,n){let a=n;const i=t.length;if(-1===t.indexOf(e,n))return-1;const r=[];for(;a<i&&(!this.isSuffixHere(t,a,e)||r.length);){const e=t.charAt(a);switch(e){case"{":case"[":case"(":r.push(new ho(e,a));break;case"}":case"]":case")":{if(!r.length)throw new Error(`Found closing '${e}' at position ${a} without an opening '${ho.theOpenBracketFor(e)}'`);const t=r.pop();if(!t.compatibleWithCloseBracket(e))throw new Error("Found closing '"+e+"' at position "+a+" but most recent opening is '"+t.bracket+"' at position "+t.pos);break}case"'":case'"':{const n=t.indexOf(e,a+1);if(-1===n)throw new Error("Found non terminating string literal starting at position "+a);a=n;break}}a++}if(r.length){const e=r.pop();throw new Error("Missing closing '"+ho.theCloseBracketFor(e.bracket)+"' for '"+e.bracket+"' at position "+e.pos)}return this.isSuffixHere(t,a,e)?a:-1}}function vo(e){const t=(new fo).parseExpressions(e);return t.forEach((e=>{const t=e._compiledExpression.getValue;e._compiledExpression.getValue=function(){const n=arguments[0];try{return t.apply(e._compiledExpression,arguments)}catch(e){throw e.state=n,e}}})),t}const Ao=(e,t)=>{if(!t)return{value:t,spelError:null,spelPreview:""};try{const n=vo(t);return{value:t,spelError:null,spelPreview:n.map((t=>t.eval(e))).join("")}}catch(e){const a={message:null,context:null,contextTruncated:null};if(e.name&&e.message)"NullPointerException"===e.name&&e.state&&e.state.activeContext&&(a.context=null===(n=e.state.activeContext.peek())?"null":void 0===n?"undefined":JSON.stringify(n,null,2),a.contextTruncated=R(a.context,{length:200})),a.message=`${e.name}: ${e.message}`;else try{a.message=JSON.stringify(e)}catch(t){a.message=e.toString()}return{value:t,spelError:a,spelPreview:null}}var n};class Eo extends ot.Component{componentDidUpdate(e){const{context:t,value:n}=this.props;if(n!==e.value||!E(t,e.context)){const e=Ao(t,n);this.props.onExpressionChange(e)}}render(){return ot.createElement(mo,{autoComplete:"off",...this.props})}}Eo.defaultProps={context:{},placeholder:""};const bo=({spelPreview:e,markdown:t})=>ot.createElement("div",{className:"flex-container-h baseline margin-between-lg"},ot.createElement("span",{className:"no-grow"},"Preview:")," ",t?ot.createElement(Br,{message:e}):ot.createElement("span",null,e));class yo{static evaluateExpression(e,t,n){return Si("/pipelines").path(t,n,"evaluateExpression").query({expression:e}).get().then((e=>{const t=e.detail||{},n=t[Object.keys(t)[0]];if(n&&n.length)throw new Error(`${n[0].exceptionType}: ${n[0].description}`);return e.result}))}static parseExpressionString(e){vo(e)}static includesSpel(e){return w(e)&&e.includes("${")}}const wo=()=>ot.createElement(ot.Fragment,null,"Β ");class xo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,text:a,wrapperClassName:i,...r}=this.props,s=`${gr(n)} ${hr(t)}`;return ot.createElement("div",{className:wn("checkbox",i)},ot.createElement("label",null,ot.createElement("input",{className:s,type:"checkbox",checked:!!e,...r}),a||ot.createElement(wo,null)))}}oi(".ChecklistInput ul {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-flow: column wrap;\n flex-flow: column wrap;\n list-style: none;\n padding: 0;\n}\n.ChecklistInput.ChecklistInput_inline ul {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n}\n.ChecklistInput.ChecklistInput_inline a.btn {\n margin: 8px 0 0 10px;\n}\n.ChecklistInput.ChecklistInput_inline li {\n white-space: nowrap;\n margin-right: 16px;\n}\n.ChecklistInput.ChecklistInput_inline li.last-of-type {\n margin-right: 0;\n}\n");const{useEffect:Co}=ot;function ko(e){const{inline:t,showSelectAll:n,value:a,validation:i,inputClassName:r,options:s,stringOptions:o,onChange:l}=e;Co((function(){e.onBlur&&e.onBlur(fr({name:e.name,value:a}))}),[]);const c=vr(o)?o.map((e=>({label:e,value:e}))):s||[],p=a||[],d=t=>{l(fr({value:t,name:e.name}))},u=e=>p.includes(e),m=c.every((e=>u(e.value))),g=`${"ChecklistInput "+(t?"ChecklistInput_inline":"")} }${gr(r)} ${hr(i)}`;return ot.createElement("div",{className:g},ot.createElement("ul",{className:"checklist"},c.map((t=>ot.createElement("li",{key:t.label},ot.createElement(xo,{text:t.label,value:t.value,onChange:()=>(t=>{const n=u(t)?p.filter((e=>e!==t)):p.concat(t);l(fr({value:n,name:e.name}))})(t.value),checked:u(t.value)})))),n&&c.length>1&&ot.createElement("li",{key:"select_all_button"},ot.createElement("a",{type:"button",onClick:m?()=>d([]):()=>d(c.map((e=>e.value)))},m?"Deselect All":"Select All"))))}function Bo(e){const{validation:t,inputClassName:n,classNames:a,onChange:i,onBlur:r,name:s,...o}=e,l=`${gr(n)} ${hr(t)}`;ot.useEffect((()=>r(fr({name:s,value:e.value}))),[]);const c=U({},a,{container:"",overlayWrapper:"",overlay:""});return c.container=`DayPickerInput ${gr(c.container)} ${l}`,ot.createElement(Zn,{...o,classNames:c,onDayChange:t=>{const n=t&&t.toISOString().slice(0,10);e.onChange(fr({name:s,value:n}))}})}oi("/* Kludge while we figure out how to add the form-control ng-invalid classes directly to the nested day-picker input */\n.DayPickerInput.ng-invalid > input {\n border-color: var(--color-danger);\n}\n");oi(".ace-editor div,\n.ace-editor span {\n font-family: monospace !important;\n}\n.ace-editor > div.ace_gutter {\n z-index: 0;\n}\n");class So extends ot.Component{constructor(){super(...arguments),this.editorRef=ot.createRef(),this.validate=e=>{const{onValidation:t}=this.props;if(!t)return;e&&e.length||t(null);t(e.map((e=>`Line ${e.row+1}, column ${e.column+1}: ${e.text}`)).join("; "))}}componentDidMount(){if(this.props.autofocus){const{editor:e}=this.editorRef.current;e.focus(),e.navigateFileStart()}}render(){return ot.createElement(_n,{...this.props,ref:this.editorRef,onValidate:this.validate,editorProps:{$blockScrolling:1/0}})}}function Mo(){const e=ct(!1);return lt((()=>(e.current=!0,()=>{e.current=!1})),[]),e}function No(e,t,n=[]){const a=Mo().current,i=ot.useRef(t);i.current=t;const r=ot.useCallback(((e,t)=>i.current(e,t)),[]);ot.useEffect((()=>(e&&e.addValidator&&e.addValidator(r),()=>e&&e.removeValidator&&e.removeValidator(r))),[]),ot.useEffect((()=>{a&&e&&e.revalidate&&e.revalidate()}),n)}So.defaultProps={mode:"json",theme:"textmate",style:{width:"100%",border:"1px solid var(--color-concrete)"},fontSize:11,showGutter:!0,showPrintMargin:!0,highlightActiveLine:!0,className:"ace-editor flex-fill",autofocus:!0};oi("input.NumberInput {\n max-width: 200px;\n}\n");const Do=e=>"number"==typeof e;function Io(e){const{value:t,validation:n,inputClassName:a,...i}=e;No(n,((t,n)=>{const a=Do(e.min)?Cr.minValue(e.min):void 0,i=Do(e.max)?Cr.maxValue(e.max):void 0,r=br([a,i]);return r?r(t,n):null}));const r=`NumberInput form-control ${gr(a)} ${hr(n)}`;return ot.createElement("input",{className:r,type:"number",value:gr(t),...i})}const Fo=e=>{const{inline:t,validation:n,value:a,defaultValue:i,inputClassName:r,options:s,stringOptions:o,...l}=e,c=pt((()=>vr(o)?o.map((e=>({value:e,label:e}))):s),[s]);lt((()=>{u(i)||c.map((e=>e.value)).includes(a)||e.onChange(fr({name:e.name,value:i}))}),[a,i,c]);const p=`RadioButtonInput radio ${gr(r)} ${hr(n)} ${t?"flex-container-h margin-between-md":"flex-container-v margin-between-sm"}`;return ot.createElement("div",{className:p},c.map((e=>ot.createElement(To,{key:e.label,value:a,option:e,...l}))))},To=({option:e,value:t,...n})=>ot.createElement("label",{className:"clickable"},ot.createElement("input",{type:"radio",...n,value:e.value,checked:e.value===t}),ot.createElement(Br,{message:e.label,style:e.help&&{display:"inline-block"}}),e.help&&ot.createElement(ot.Fragment,null,e.help));class Qo extends ot.Component{render(){const{value:e,validation:t,inputClassName:n,...a}=this.props,i=`TextAreaInput form-control ${gr(n)} ${hr(t)}`;return ot.createElement("textarea",{className:i,autoComplete:"off",value:gr(e),...a})}}const Po=()=>{const e=ot.useContext(ns);return void 0===e&&console.warn("Application context provider is missing"),e},Ro=()=>{const e=ot.useContext(ns);if(void 0===e)throw new Error("Application context provider is missing");return e},{useEffect:Uo,useRef:zo}=ot,Go=e=>{const t=zo();return Uo((()=>{t.current=e})),t.current},{useEffect:jo,useRef:Lo}=ot,Oo=()=>document.querySelector(".spinnaker-container"),Yo=e=>{const t=Go(e);jo((()=>{const n=Oo();if(n){if(t){const a=t.filter((t=>!e.includes(t)));n.classList.remove(...a)}n.classList.add(...e)}}),[e.sort().join()]);const n=Lo(e);n.current=e,jo((()=>()=>{const e=Oo();e&&e.classList.remove(...n.current)}),[])},$o={error:void 0,requestId:0,result:void 0,status:"NONE"};function Ho(e,t){const n=Mo(),a=!n.current,i=ct(),[r,s]=dt(0),[o,l]=dt($o),{result:c,error:p,status:d,requestId:u}=o,m=()=>s((e=>e+1));return lt((()=>{!a&&m()}),t),lt((()=>{const t=e(),a=()=>n.current&&t===i.current;if(!t)return;l({status:"PENDING",error:p,result:c,requestId:r}),i.current=t;t.then((e=>{a()&&l({status:"RESOLVED",result:e,error:void 0,requestId:r})}),(e=>{a()&&l({status:"REJECTED",result:void 0,error:e,requestId:r})}))}),[r]),{result:c,status:d,error:p,refresh:m,requestId:u}}function Vo(e,t,n){const a=pt((()=>t),[]),i=Ho(n.some((e=>u(e)))?()=>null:e,n),r=ct(!1);return"RESOLVED"===i.status&&(r.current=!0),r.current?i:{...i,result:a}}const{useRef:Jo,useCallback:Wo}=ot,Ko=e=>{const t=Jo(e);return t.current=e,Wo(((...e)=>t.current&&t.current.apply(null,e)),[])},qo=(e,t)=>{lt((()=>{if(!e)return;const n=e.subscribe(t);return()=>n.unsubscribe()}),[e])},Xo=(e,t)=>{const[n,a]=dt(t);return qo(e,a),n},Zo=e=>({...Xo(e.status$,e.status$.value),refresh:Ko((()=>{e.refresh()}))});function _o(e,t){const[n,a]=dt(e),i=e!==n;return lt((()=>{const n=setTimeout((()=>a(e)),t);return()=>clearTimeout(n)}),[e,t]),[n,i]}const{useRef:el}=ot;function tl(e){const t=el(e),n=el(1),a=e===t.current||E(e,t.current);return t.current=e,a||n.current++,n.current}const{useEffect:nl}=ot,al=(e,t,n,a)=>{const i=Ko(n);nl((()=>{if(n)return e.addEventListener(t,i,a),()=>{e.removeEventListener(t,i,a)}}),[e,t,!!n,Object.values(a||{}).sort().join()])};function il(e){al(document.body,"keyup",(t=>"Escape"===t.key&&e()))}const rl=()=>{const[,e]=dt(!0);return ut((()=>{e((e=>!e))}),[])};function sl(e,t){const n=Ko(e);lt((()=>{const a=!!e&&t&&setInterval(n,t);return()=>a&&clearInterval(a)}),[!!e,t])}const{useState:ol}=st,ll=()=>{const[e,t]=ol(window.innerWidth<=1024);return al(window,"resize",(()=>{const n=window.innerWidth<=1024;n!==e&&t(n)})),e};function cl(e,t,n,a){const i=Vo(e,t,a),r=Ko(i.refresh);return lt((()=>{const{subscribe:e,unsubscribe:t}=_s.createScheduler(n);return e(r),t}),a),i}function pl(e){const{previewStage:t,...n}=e,[a,i]=_o(e.value,300),r=!Mo().current;No(e.validation,(function(){const{status:e,error:n,result:a}=s;if("NONE"===e)return null;if("PENDING"===e||i)return Rr(a?"Updating preview...\n\n\n```\n"+JSON.stringify(a,null,2)+"\n```":"Updating preview...");if("RESOLVED"===e){const e=`Preview - based on previous execution: ${t.executionLabel}\n\n\n\`\`\`\n`+JSON.stringify(a,null,2)+"\n```";return Gr(e)}return"REJECTED"===e?Lr(n):null}));const s=Vo((()=>yo.evaluateExpression(a,t.executionId,t.stageId)),null,[a,t.executionId,t.stageId]);return ot.useEffect((()=>{!r&&e.validation&&e.validation.revalidate&&e.validation.revalidate()}),[s.status,i]),ot.createElement(dl,{...n})}function dl(e){const t=!!/\n/.exec(e.value);return ot.createElement(Qo,{inputClassName:"SpelInput",rows:t?3:1,placeholder:e.placeholder||"Variable value, e.g. ${trigger.buildInfo.number}",...e})}oi(".SpelInput {\n font-family: monospace;\n}\n");const ul=st.createContext(!1),{Provider:ml}=ul;var gl,hl;function fl(e){return st.createElement(Qs,{value:e.inputMode===gl.FREEFORM?"Return to default input":"Enter SpEL in freeform input"},st.createElement("button",{className:wn("btn btn-sm btn-default",{active:e.inputMode===gl.FREEFORM}),onClick:e.onClick},st.createElement("span",{className:"fa icon-spel"})))}(hl=gl||(gl={})).DEFAULT="DEFAULT",hl.FREEFORM="FREEFORM";const{useCallback:vl,useContext:Al,useState:El}=ot,bl=new Map;function yl(e,t,n){let a=0;const i=z(t);for(;e&&a<i.length;)e="string"==typeof e?void 0:e[i[a++]];return void 0===e?n:e}function wl(e){const{formik:t}=e,{name:n,onChange:a,fastField:i}=e,{input:r,layout:s,label:o,help:l,required:c,actions:p,validate:d,validationMessage:u,touched:m}=e,g=Al(Os),h=Al(ul),f=yl(t.touched,n),v=yl(t.errors,e.name),A=$i(i,!1),E=$i(m,f),b=$i(u,v),{hidden:y,category:w,messageNode:x}=Hr(b,E),[C,k]=El([]),B=vl((e=>k((t=>t.concat(e)))),[]),S=vl((e=>k((t=>t.filter((t=>t!==e))))),[]),M=()=>function(e){bl.has(e)||(bl.set(e,!0),setTimeout((()=>(bl.delete(e),e.validateForm()))))}(t),N=js();ot.useEffect((()=>{"FIRST_RENDER"===N.current&&0===C.length||M()}),[C]);const D={touched:E,revalidate:M,addValidator:B,removeValidator:S,hidden:y,category:w,messageNode:x},I=$i(e.spelAware,h,!1),F=ot.useMemo((()=>{const t=yl(e.formik.values,n,"");return I&&yo.includesSpel(t)?gl.FREEFORM:gl.DEFAULT}),[]),[T,Q]=ot.useState(F),P=()=>{t.setFieldValue(n,null),Q(T===gl.DEFAULT?gl.FREEFORM:gl.DEFAULT)},R=({field:e})=>{const t=T===gl.DEFAULT?r:dl,n=$i(s,(e=>ot.createElement(g,{...e}))),i=po(t,{...e,validation:D}),d=ot.createElement(ot.Fragment,null,p,I&&ot.createElement(fl,{inputMode:T,onClick:P})),u={label:o,help:l,required:c,actions:d,input:i,validation:D};return ot.createElement(Gs,{onChange:a,value:e.value},po(n,u))},U=xl(o,c,[].concat(d).concat(C));return A?ot.createElement(Yn,{name:n,validate:U,render:R}):ot.createElement($n,{name:n,validate:U,render:R})}function xl(e,t,n){const a=[!!t&&Cr.isRequired()].concat(n),i=br(a);if(!i)return null;const r=w(e)?e:void 0;return e=>i(e,r)}function Cl(e){return ot.createElement(On,null,(t=>ot.createElement(wl,{...e,formik:t})))}const{useState:kl,useCallback:Bl,useContext:Sl,useMemo:Ml}=ot;function Nl(e){const{input:t,layout:n,label:a,help:i,required:r,actions:s}=e,{value:o}=e,[l,c]=kl([]),[p,d]=kl(0),u=Bl((e=>c((t=>t.concat(e)))),[]),m=Bl((e=>c((t=>t.filter((t=>t!==e))))),[]),g=Ml((()=>e.validate),[]),h=Ml((()=>xl(a,r,[].concat(g||qi).concat(l))),[a,r,g,l.length]),f=Sl(Os),v=$i(t,qi),A=$i(n,(e=>ot.createElement(f,{...e}))),[E,b]=kl(!1),y=$i(e.touched,E),w=Ml((()=>h(o)),[h,o,p]),x={touched:y,addValidator:u,removeValidator:m,revalidate:()=>d((e=>e+1)),...Hr($i(e.validationMessage,w||void 0),y)},C=po(v,{...{value:e.value,name:e.name||"",onChange:e.onChange||qi,onBlur:t=>{b(!0),e.onBlur&&e.onBlur(t)}},validation:x}),k={label:a,help:i,required:r,actions:s,validation:x,input:C};return ot.createElement(ot.Fragment,null,po(A,k))}const Dl={value:null,spelError:null,spelPreview:null};function Il(e){const{context:t,name:n,label:a,help:i,actions:r,validationMessage:s}=e,[o,l]=ot.useState(Dl),c=$i(e.markdown,!1),p=Hr(s,!0).messageNode||o.spelError&&t&&ot.createElement(uo,{spelError:o.spelError})||o.spelPreview&&ot.createElement(bo,{spelPreview:o.spelPreview,markdown:c});return ot.createElement(Cl,{name:n,input:e=>ot.createElement(Eo,{onExpressionChange:e=>l(e),context:t,...e}),label:a,help:i,actions:r,validationMessage:p})}class Fl extends ot.Component{constructor(){super(...arguments),this.state={spelPreview:null,spelError:null}}renderRegexFields(e,t){const{RegexHelp:n,regexName:a,replaceName:i}=e,r=({input:e})=>ot.createElement("div",{style:{flex:"1 1 40%"}}," ",e," ");return ot.createElement(Ns,{heading:({chevron:e})=>ot.createElement("span",null," ",e," Regex ",n," "),outerDivClassName:"",toggleClassName:"",defaultExpanded:t},ot.createElement("div",{className:"flex-container-h baseline"},ot.createElement("code",null,"s/"),ot.createElement(Cl,{name:a,validate:e=>{try{return RegExp(e),""}catch(e){return e.message}},layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(mo,{...e}),touched:!0}),ot.createElement("code",null,"/"),ot.createElement(Cl,{name:i,layout:e=>ot.createElement(r,{...e}),input:e=>ot.createElement(mo,{...e})}),ot.createElement("code",null,"/g")))}renderPreview(e,t,n,a){const{markdown:i}=e;if(!n)return ot.createElement(bo,{spelPreview:t,markdown:i});try{const e=t.replace(new RegExp(n,"g"),a);return!!e&&ot.createElement(bo,{spelPreview:e,markdown:i})}catch(e){return ot.createElement(bo,{spelPreview:t,markdown:i})}}renderFormField(e,t){const{context:n,placeholder:a,help:i,label:r,actions:s}=this.props;return ot.createElement(Cl,{name:this.props.name,input:e=>ot.createElement("div",{className:"flex-container-v flex-grow"},ot.createElement(Eo,{onExpressionChange:e=>this.setState(e),context:n,placeholder:a,...e}),this.renderRegexFields(this.props,!!t)),help:i,label:r,actions:s,validationMessage:e,touched:!0})}render(){const{spelPreview:e,spelError:t}=this.state,{regexName:n,replaceName:a}=this.props;return ot.createElement(Us,{render:i=>{const r=Hn(i.values,n),s=Hn(i.values,a),o=Hn(i.errors,n)||Hn(i.errors,a);if(o)return this.renderFormField(Ur(o),r);if(t)return this.renderFormField(ot.createElement(uo,{spelError:t}),r);if(e){const t=this.renderPreview(this.props,e,r,s);return this.renderFormField(t,r)}return this.renderFormField(Gr(null),r)}})}}function Tl(e,t,n){const a=Go(t),[i,r]=dt({}),[s,o]=dt({});lt((()=>{var l,c;if(a&&t!==a){const p=null!=(l=n[a])?l:[],d=null!=(c=n[t])?c:[],u=p.reduce(((t,n)=>(t[n]=m(e.values,n),t)),{});r({...i,[a]:u});const g=p.reduce(((t,n)=>(t[n]=m(e.touched,n),t)),{});o({...s,[a]:g}),p.forEach((t=>{e.setFieldValue(t,void 0),e.setFieldTouched(t,null)}));const h=i[t]||{},f=s[t]||{};d.forEach((n=>{h.hasOwnProperty(n)&&e.setFieldValue(n,i[t][n]),f.hasOwnProperty(n)&&e.setFieldTouched(n,s[t][n])}))}}),[t])}function Ql(e,t,n){const a=t(e.value),i=st.useCallback((t=>{e.onChange(fr({name:t.target.name,value:n(t.target.value,t)}))}),[e.onChange,n]);return{...e,value:a,onChange:i}}Fl.defaultProps={markdown:!1};class Pl extends ot.Component{render(){const e=this.props.stage.labelComponent;return ot.createElement("div",{className:"label-component"},ot.createElement(e,{stage:this.props.stage}))}}function Rl(e){return ot.createElement(ot.Fragment,null,ot.createElement("dt",null,e.label," ",e.helpFieldId&&ot.createElement(Zs,{id:e.helpFieldId})),ot.createElement("dd",null,e.value))}function Ul(e){const{children:t,...n}=e;return ot.createElement("dl",{...n},t)}const zl=({url:e,text:t})=>ot.createElement(ot.Fragment,null,ot.createElement("a",{href:e,target:"_blank"},t),ot.createElement(zi,{text:t,toolTip:"'Copy to clipboard'"}));function Gl(e,t){return ot.forwardRef(((n,a)=>ot.createElement(jl,{category:t},ot.createElement(e,{...n,ref:a}))))}class jl extends ot.Component{constructor(e){super(e),this.state={error:null,retrying:!1}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){Ui.log({level:"ERROR",category:`SpinErrorBoundary - ${this.props.category}`,action:e.message,error:e,data:{label:e.message,componentStack:null==t?void 0:t.componentStack}})}retry(){this.setState({retrying:!0}),setTimeout((()=>this.setState({retrying:!1,error:null})),250)}render(){var e;if(!(null==(e=this.state)?void 0:e.error))return this.props.children;const{message:t,stack:n}=this.state.error,{retrying:a}=this.state;return ot.createElement("div",{className:"flex-container-v sp-margin-l"},ot.createElement("h3",null,"Oh dear, something has gone wrong."),ot.createElement("div",{className:"sp-margin-l-bottom"},ot.createElement("h4",null,"Spinnaker has encountered an unexpected UI error."),ot.createElement("button",{disabled:a,onClick:()=>this.retry()},a?"Retrying...":"Try again")),t&&ot.createElement(Dr,{message:t,type:"error"}),n&&ot.createElement(Ns,{defaultExpanded:!1,heading:"Stacktrace"},ot.createElement("pre",{style:{overflow:"scroll"}},n)))}}const Ll="ui.router.react.error.boundary";n(Ll,["ui.router"]).config(["$uiRouterProvider",e=>{e.stateRegistry.decorator("views",((e,t)=>{const n=t(e);return Object.values(n).filter((e=>"react"===e.$type)).forEach((t=>{const n=t,a=n.component;n.component=t=>ot.createElement(jl,{category:e.name},ot.createElement(a,{...t}))})),n}))}]);const Ol="spinnaker.core.presentation.linkWithClipboard.component";n(Ol,[]).component("linkWithClipboard",yn(Gl(zl,"linkWithClipboard"),["url","text"]));const Yl=ot.createContext(null),$l=({children:e})=>{const t=ot.createRef();return al(document,"keydown",(e=>{var n,a;const{keyCode:i,shiftKey:r,target:s}=e;if(9===i){let i=null;const o=Array.from(null!=(a=null==(n=t.current)?void 0:n.querySelectorAll('\n input:not([tabindex^="-"]):not([disabled]),\n select:not([tabindex^="-"]):not([disabled]),\n textarea:not([tabindex^="-"]):not([disabled]),\n button:not([tabindex^="-"]):not([disabled]),\n a[href]:not([tabindex^="-"]):not([disabled]),\n [tabindex]:not([tabindex^="-"]):not([disabled])\n '))?a:[]).filter((e=>null!==e.offsetParent));if(!o.length)return;const l=o[0],c=o[o.length-1];l===s&&r&&(i=c),c!==s||r||(i=l),o.includes(s)||(i=r?c:l),i&&(i.focus(),e.preventDefault())}})),ot.createElement("div",{ref:t},e)};oi("@-webkit-keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes backdropEnter {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes backdropLeave {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@-webkit-keyframes dialogEnter {\n from {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@keyframes dialogEnter {\n from {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n to {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n}\n@-webkit-keyframes dialogLeave {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n@keyframes dialogLeave {\n from {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n }\n to {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n }\n}\n/********************************************************\n Shared set of properties for both the tinted backdrop\n and the full screen container that holds a dialog\n********************************************************/\n/**********************************\n Tinted backdrop (behind dialog)\n***********************************/\n.sp-modal-backdrop {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n background-color: rgba(0, 0, 0, 0.7);\n will-change: opacity;\n}\n.sp-modal-backdrop.enter {\n -webkit-animation-name: backdropEnter;\n animation-name: backdropEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.sp-modal-backdrop.exit {\n -webkit-animation-name: backdropLeave;\n animation-name: backdropLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.sp-modal-backdrop.enter-active,\n.sp-modal-backdrop.enter-done {\n opacity: 1;\n}\n.sp-modal-backdrop.exit-active,\n.sp-modal-backdrop.exit-done {\n opacity: 0;\n}\n.sp-modal-backdrop-blur-effect {\n -webkit-transition: -webkit-filter 300ms cubic-bezier(0.4, 0, 0, 1);\n transition: -webkit-filter 300ms cubic-bezier(0.4, 0, 0, 1);\n transition: filter 300ms cubic-bezier(0.4, 0, 0, 1);\n transition: filter 300ms cubic-bezier(0.4, 0, 0, 1), -webkit-filter 300ms cubic-bezier(0.4, 0, 0, 1);\n -webkit-filter: saturate(1.3) blur(5px);\n filter: saturate(1.3) blur(5px);\n}\n/************************************************\n Modal dialog and associated layout container\n************************************************/\n.Modal {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: var(--layer-critical);\n overflow: hidden;\n overscroll-behavior: none;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n /* for large screens, place an eventual cap on the height of a modal */\n}\n.Modal .sp-dialog-sizer {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: 1fr;\n max-height: calc(100vh - 64px);\n min-height: 320px;\n width: calc(100vw - 128px);\n margin: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .Modal .sp-dialog-sizer {\n max-height: calc(100vh - 32px);\n width: calc(100vw - 48px);\n margin: 0 24px;\n }\n}\n@media screen and (min-height: 1164px) {\n .Modal .sp-dialog-sizer {\n max-height: 1100px;\n }\n}\n.Modal .sp-dialog-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: relative;\n grid-column: 1 / -1;\n grid-row: 1 / -1;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n overflow: hidden;\n border-radius: 8px;\n -webkit-box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);\n will-change: transform, opacity;\n}\n.Modal.enter .sp-dialog-content {\n -webkit-animation-name: dialogEnter;\n animation-name: dialogEnter;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n animation-timing-function: cubic-bezier(0.4, 0, 0, 1);\n}\n.Modal.exit .sp-dialog-content {\n -webkit-animation-name: dialogLeave;\n animation-name: dialogLeave;\n -webkit-animation-duration: 300ms;\n animation-duration: 300ms;\n -webkit-animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n animation-timing-function: cubic-bezier(0.76, 0.18, 0.4, 0.92);\n}\n.Modal.enter-active .sp-dialog-content,\n.Modal.enter-done .sp-dialog-content {\n -webkit-transform: scale3d(1, 1, 1);\n transform: scale3d(1, 1, 1);\n opacity: 1;\n}\n.Modal.exit-active .sp-dialog-content,\n.Modal.exit-done .sp-dialog-content {\n -webkit-transform: scale3d(0.8, 0.8, 0.8);\n transform: scale3d(0.8, 0.8, 0.8);\n opacity: 0;\n}\n");const Hl=({isOpen:e,maxWidth:t,onRequestClose:n,onAfterClose:a,children:i})=>{var r;Yo(e?["sp-modal-backdrop-blur-effect"]:[]);al(document,"keydown",e?({keyCode:e})=>{27===e&&n()}:null);const s=Ko(n),o=pt((()=>({onRequestClose:s})),[]);return ot.createElement(Yl.Provider,{value:o},ln.createPortal(ot.createElement($l,null,ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0},ot.createElement("div",{className:"sp-modal-backdrop"})),ot.createElement(ea,{in:e,timeout:300,mountOnEnter:!0,unmountOnExit:!0,onExited:a},ot.createElement("div",{className:"Modal"},ot.createElement("div",{className:"sp-dialog-sizer",style:{maxWidth:null!=(r=y(t)?`${t}px`:t)?r:"1400px"}},ot.createElement("div",{className:"sp-dialog-content"},i))))),document.body))};oi(".ModalHeader {\n -webkit-box-flex: 0;\n -ms-flex: none;\n flex: none;\n background-color: var(--color-blumine);\n color: var(--color-white);\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.ModalHeader .sp-modal-title {\n margin: 10px 16px;\n font-size: 22px;\n font-weight: 500;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n word-break: break-all;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-title {\n margin: 4px 12px;\n font-size: 18px;\n }\n}\n.ModalHeader .sp-modal-close {\n border: none;\n background-color: transparent;\n -webkit-box-flex: 0;\n -ms-flex: 0 0 56px;\n flex: 0 0 56px;\n height: 56px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n cursor: pointer;\n -ms-flex-item-align: start;\n align-self: flex-start;\n -webkit-transition: all 150ms ease-out;\n transition: all 150ms ease-out;\n}\n.ModalHeader .sp-modal-close:hover,\n.ModalHeader .sp-modal-close:focus {\n background-color: rgba(160, 180, 220, 0.15);\n outline: none;\n}\n@media screen and (max-width: 1024px) {\n .ModalHeader .sp-modal-close {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 48px;\n flex: 0 0 48px;\n height: 48px;\n }\n}\n");const{useContext:Vl}=ot,Jl=({className:e,children:t})=>{const{onRequestClose:n}=Vl(Yl);return ot.createElement("div",{className:"ModalHeader"},ot.createElement("div",{className:wn("sp-modal-title",e)},t),ot.createElement("button",{className:"sp-modal-close",onClick:()=>n&&n()},ot.createElement("i",{className:"ico icon-close"})))};oi(".ModalBody {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow: auto;\n overscroll-behavior: contain;\n --webkit-overflow-scrolling: touch;\n background-color: var(--color-smoke);\n padding: 0 64px;\n}\n@media screen and (max-width: 1024px) {\n .ModalBody {\n padding: 0 8px;\n }\n}\n");const Wl=({children:e})=>ot.createElement("div",{className:"ModalBody"},e);oi(".ModalFooter {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n min-height: 64px;\n background-color: var(--color-white);\n color: var(--color-white);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n position: relative;\n -webkit-box-shadow: 0 4px 4px 4px rgba(0, 0, 0, 0.12), 0 6px 12px 8px rgba(0, 0, 0, 0.1);\n box-shadow: 0 4px 4px 4px rgba(0, 0, 0, 0.12), 0 6px 12px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n padding: 16px;\n}\n.ModalFooter .sp-modal-footer-left {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 100%;\n flex: 1 1 100%;\n margin-right: 16px;\n}\n.ModalFooter .sp-modal-footer-right {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: end;\n -ms-flex-pack: end;\n justify-content: flex-end;\n}\n@media screen and (max-width: 1024px) {\n .ModalFooter .ModalFooter {\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n }\n .ModalFooter .sp-modal-footer-left {\n margin: 8px 0;\n }\n}\n");const Kl=({primaryActions:e,secondaryActions:t})=>ot.createElement("div",{className:"ModalFooter"},t&&ot.createElement("div",{className:"sp-modal-footer-left"},t),e&&ot.createElement("div",{className:"sp-modal-footer-right"},e)),ql=(e,t,n)=>new Promise((a=>{let i=document.createElement("div"),r=!1;function s(){i&&(ln.unmountComponentAtNode(i),i=null)}const o=e=>t=>{i&&(a(e(t)),r=!1,d())},l=o((e=>({status:"CLOSED",closeResult:e}))),c=o((e=>({status:"DISMISSED",dismissResult:e}))),p=()=>c(null);function d(){ln.render(ot.createElement(Hl,{isOpen:r,onRequestClose:p,onAfterClose:s,...n},ot.createElement(ta,null,ot.createElement(e,{...t,dismissModal:c,closeModal:l}))),i)}d(),setTimeout((()=>{i&&(r=!0,d())}))}));class Xl extends ot.Component{constructor(e){super(e),this.refCallback=e=>{e&&(this.element=$(e))},this.state={id:pr.generateUuid(),currentPageKey:null,pages:[]}}componentDidMount(){const{children:e,deepLinkParam:t,hideNavigation:n,scrollableContainer:a}=this.props;this.container=this.element.closest(a),P(this.container.bind)&&!n&&this.container.bind(this.getEventKey(),G((()=>this.handleScroll()),20)),this.navigator=this.element.find(".page-navigation"),t&&this.props.reactInjector.$stateParams[t]&&this.setCurrentSection(this.props.reactInjector.$stateParams[t]);const i=ot.Children.map(e,(e=>e.props.pageKey&&e.props.label?{key:e.props.pageKey,label:e.props.label,visible:!1!==e.props.visible,badge:e.props.badge}:null));this.setState({pages:i,currentPageKey:i.length>0?i[0].key:null})}componentWillUnmount(){P(this.container.unbind)&&!this.props.hideNavigation&&this.container.unbind(this.getEventKey())}setCurrentSection(e){this.setState({currentPageKey:e}),this.syncLocation(e),er.scrollTo(`[data-page-id=${e}]`,this.props.scrollableContainer,this.container.offset().top),this.container.find(".highlighted").removeClass("highlighted"),this.container.find(`[data-page-id=${e}]`).addClass("highlighted")}getEventKey(){return`scroll.pageNavigation.${this.state.id}`}handleScroll(){const e=this.element.get(0).getBoundingClientRect(),t=this.container.get(0).getBoundingClientRect().top,n=this.state.pages.find((e=>{const n=this.container.find(`[data-page-content=${e.key}]`);return!!n.length&&n.get(0).getBoundingClientRect().bottom>t}));n&&(this.setState({currentPageKey:n.key}),this.syncLocation(n.key),this.navigator.find("li").removeClass("current"),this.navigator.find(`[data-page-navigation-link=${n.key}]`).addClass("current")),e.top<t?this.navigator.css({position:"fixed",width:this.navigator.get(0).getBoundingClientRect().width,top:t}):this.navigator.css({position:"relative",top:0,width:"100%"})}syncLocation(e){const{deepLinkParam:t}=this.props;t&&this.props.reactInjector.$state.go(".",{[t]:e},{notify:!1,location:"replace"})}updatePagesConfig(e){const t=[...this.state.pages],n=t.find((t=>t.key===e.key));n&&(n.badge=e.badge,n.label=e.label,n.visible=e.visible,this.setState({pages:t}))}render(){const{children:e,hideNavigation:t}=this.props,{currentPageKey:n,pages:a}=this.state,i=ot.Children.map(e,(e=>ot.cloneElement(e,{updatePagesConfig:e=>this.updatePagesConfig(e)})));return ot.createElement("div",{className:"page-navigator"},ot.createElement("div",{className:"row flex-1",ref:this.refCallback},!t&&ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"page-navigation"},a.map(((e,t)=>e.visible&&ot.createElement("li",{key:t,"data-page-navigation-link":e.key,className:n===e.key?"current":""},ot.createElement("a",{onClick:()=>this.setCurrentSection(e.key)},e.label,e.badge&&ot.createElement("span",null," ","("+e.badge+")"))))))),ot.createElement("div",{className:"col-md-"+(t?"12":"9")+" col-sm-12"},ot.createElement("div",{className:"sections"},i))))}}class Zl extends ot.Component{constructor(e){super(e)}componentDidUpdate(e){const{badge:t,pageKey:n,label:a,updatePagesConfig:i,visible:r}=this.props;e.visible===this.props.visible&&e.badge===this.props.badge&&e.label===this.props.label||i&&i({key:n,label:a,visible:!1!==r,badge:t})}render(){const{children:e,pageKey:t,label:n,noWrapper:a,visible:i}=this.props;return!1!==i?ot.createElement("div",{className:"page-section"},ot.createElement("div",{className:"page-subheading flex-1","data-page-id":t},ot.createElement("h4",{className:"sticky-header"},n),ot.createElement("div",{className:a?"no-wrapper":"section-body","data-page-content":t},e))):ot.createElement(ot.Fragment,null)}}const _l=ot.memo((({outputFileObject:e})=>{const t=/(https?:\/\/[^$\s'"]+)/,n=ia(e);let a=0;const i=n.split(t);return ot.createElement("pre",{style:{overflow:"scroll",maxHeight:"400px"}},i.map((e=>{return`'${e}'`.match(t)?(n=e,ot.createElement("a",{key:""+a++,href:n,target:"_blank"},n)):e;var n})))}));class ec extends ot.Component{constructor(){super(...arguments),this.setSortKey=e=>{const{sortKey:t,onChange:n}=this.props;e.preventDefault();n((this.isSortKey()&&this.isReverse()?"":"-")+t)}}isSortKey(){const{currentSort:e,sortKey:t}=this.props;return e===t||e==="-"+t}isReverse(){return this.props.currentSort&&this.props.currentSort.startsWith("-")}render(){const e=this.isSortKey(),t=wn({"inactive-sort-key":!e,"sort-toggle":!0,clickable:!0});return ot.createElement("span",{className:t,onClick:this.setSortKey},this.props.label,ot.createElement("a",null,(!this.isReverse()||!e)&&ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle"}),this.isReverse()&&e&&ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle"})))}}ec.defaultProps={onChange:qi};class tc extends ot.Component{render(){const{className:e,onClick:t,children:n}=this.props;return ot.createElement("span",{className:e,onClick:t}," ",n," ")}}const nc=st.createContext(null),{useState:ac,useMemo:ic}=st,rc=e=>{const t=ll(),[n,a]=ac(!1),{layout:i,...r}=e,s=e.columns.map((e=>"string"==typeof e?{name:e}:e)),o=ic((()=>({layout:i,isMobile:t,allExpanded:n,setAllExpanded:()=>a(!1),expandable:e.expandable,columns:s})),[i,t,e.expandable,n,tl(e.columns)]),{TableLayout:l}=i;return st.createElement(nc.Provider,{value:o},st.createElement(l,{...r,isMobile:t,columns:s,expandAll:()=>a(!0)}))},{useState:sc,useContext:oc,useEffect:lc}=st,cc=({defaultExpanded:e,renderExpandedContent:t,children:n})=>{const{layout:a,expandable:i,allExpanded:r,setAllExpanded:s,isMobile:o,columns:l}=oc(nc),[c,p]=sc(e||!1);lc((()=>{r&&t&&p(!0)}),[r]),i||null==e||console.error(new Error("You used the defaultExpanded prop on a row inside a <Table/> that's not expandable.\n Either remove the defaultExpanded prop or make the <Table/> expandable."));const d=st.Children.map(n,((e,t)=>st.cloneElement(e,{index:t})));d.length>l.length&&(()=>{throw new Error("A <TableCell/> was added that didn't match any of the columns defined on its parent <Table/>.\n Check if there are an equal number of <TableCell/> elements to the number of columns provided to the <Table/>.\n ")})();const{TableRowLayout:u}=a;return st.createElement(u,{tableExpandable:i,rowExpandable:i&&!!t,expanded:c,setExpanded:e=>{p(e),r&&!e&&s(!1)},renderExpandedContent:t,isMobile:o,columns:l,children:d})},{useContext:pc}=st,dc=e=>{const{layout:t,expandable:n,isMobile:a,columns:i}=pc(nc),{TableCellLayout:r}=t;return st.createElement(r,{...e,expandable:n,isMobile:a,columns:i})};oi(".MinimalNativeTableLayout {\n text-align: left;\n font-size: 13px;\n overflow: hidden;\n}\n.MinimalNativeTableLayout .header-row {\n height: 24px;\n}\n.MinimalNativeTableLayout .header-cell {\n color: var(--color-charcoal);\n font-weight: 400;\n padding: 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n}\n.MinimalNativeTableLayout .header-cell:first-child {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-black);\n}\n.MinimalNativeTableLayout .cell {\n color: var(--color-charcoal);\n padding: 6px 16px;\n vertical-align: top;\n min-width: 80px;\n}\n.MinimalNativeTableLayout .cell:first-child {\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n");const uc={TableLayout:({columns:e,children:t})=>st.createElement("table",{className:"MinimalNativeTableLayout",cellSpacing:"0",cellPadding:"0"},st.createElement("thead",null,st.createElement("tr",{className:"header-row"},e.map((({name:e})=>st.createElement("th",{key:e,className:"header-cell"},e))))),st.createElement("tbody",null,t)),TableRowLayout:({children:e})=>st.createElement("tr",null,e),TableCellLayout:({children:e,indent:t})=>st.createElement("td",{className:"cell",style:{paddingLeft:t?16+20*t+"px":void 0}},e)};oi(".StandardGridTableLayout {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-header {\n display: grid;\n position: sticky;\n top: 0;\n font-weight: 600;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n font-size: 13px;\n z-index: 100;\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n min-height: 48px;\n grid-column: 1 / -1;\n background-color: var(--color-smoke);\n border-bottom: 2px solid var(--color-blumine);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell {\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n padding-bottom: 6px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable {\n border-radius: 16px 16px 0 0;\n cursor: pointer;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator {\n border-radius: 16px;\n background-color: var(--color-blumine);\n width: 16px;\n height: 16px;\n margin-left: 6px;\n margin-bottom: 1px;\n position: relative;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0;\n height: 0;\n margin-left: -4px;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.ascending:after {\n margin-top: -2px;\n border-bottom: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.sortable > .sort-indicator.descending:after {\n margin-top: -1px;\n border-top: 4px solid var(--color-smoke);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n -webkit-box-align: end;\n -ms-flex-align: end;\n align-items: flex-end;\n cursor: pointer;\n padding-left: 0;\n border-radius: 16px 16px 0 0;\n height: 32px;\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle:hover {\n background-color: rgba(160, 180, 220, 0.15);\n}\n.StandardGridTableLayout .standard-grid-table-header .standard-grid-table-cell.header-expand-toggle > i {\n font-size: 24px;\n margin-bottom: -4px;\n}\n.StandardGridTableLayout .standard-grid-table-row-container {\n display: grid;\n}\n.StandardGridTableLayout .standard-grid-table-row {\n display: grid;\n min-height: 40px;\n overflow: hidden;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n font-size: 13px;\n padding: 8px 0;\n grid-column: 1 / -1;\n grid-row: 1;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable {\n cursor: pointer;\n}\n.StandardGridTableLayout .standard-grid-table-row.expandable:hover {\n /*\n Since this becomes a sticky header when rows are expanded\n and the color we want is semi-transparent, let's use a gradient\n that grabs the right color but puts a white backdrop behind it\n so the things scrolling below it don't come through.\n */\n background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(160, 180, 220, 0.15)), to(rgba(160, 180, 220, 0.15)));\n background-image: linear-gradient(180deg, rgba(160, 180, 220, 0.15), rgba(160, 180, 220, 0.15));\n}\n.StandardGridTableLayout .standard-grid-table-row.expanded {\n background-color: var(--color-white);\n position: sticky;\n top: 48px;\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle {\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n padding-left: 0;\n color: var(--color-nobel);\n}\n.StandardGridTableLayout .standard-grid-table-row .row-expand-toggle > i {\n font-size: 24px;\n}\n.StandardGridTableLayout .expanded-row-content {\n /* stretch across entire table width */\n grid-column: 1 / -1;\n grid-row: 2;\n background-color: var(--color-white);\n padding: 16px;\n overflow-x: scroll;\n}\n.StandardGridTableLayout .standard-grid-table-cell,\n.StandardGridTableLayout .cell-content {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.StandardGridTableLayout .standard-grid-table-cell {\n padding-left: 16px;\n}\n@media screen and (max-width: 1024px) {\n .StandardGridTableLayout .standard-grid-table-row-container:first-child {\n margin-top: 16px;\n }\n .StandardGridTableLayout .standard-grid-table-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n padding: 0 8px 16px;\n margin: 0 0 16px;\n border-bottom: 1px solid var(--color-porcelain);\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded {\n position: static;\n margin-bottom: 0;\n padding-left: 6px;\n /*for border */\n border-left: 2px solid var(--color-regal);\n border-bottom: none;\n }\n .StandardGridTableLayout .standard-grid-table-row.expanded:hover {\n background-color: var(--color-white);\n }\n .StandardGridTableLayout .expanded-row-content {\n border-left: 2px solid var(--color-regal);\n }\n .StandardGridTableLayout .standard-grid-table-cell {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n }\n .StandardGridTableLayout .mobile-cell-header {\n font-weight: 900;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: var(--color-regal);\n margin-top: 9px;\n }\n .StandardGridTableLayout .cell-content {\n margin-top: 4px;\n margin-left: 4px;\n }\n}\n");const mc=(e,t,n)=>{if(n)return;const a=e.map((e=>{if("number"==typeof e)return`${e}fr`;if(Array.isArray(e)&&2===e.length){const[t,n]=e;return`minmax(${t.size+t.unit}, ${n.size+n.unit})`}return!Array.isArray(e)&&e.size&&e.unit?`${e.size}${e.unit}`:(e=>{throw new Error(`Invalid table sizing configuration.\n Expected either a sizing object with 'size' and 'unit' fields or an array of two sizing objects.\n Actual value was ${JSON.stringify(e)}`)})(e)}));return t&&a.push("48px"),a.join(" ")},gc=({columns:e,expandable:t,expandAll:n,isMobile:a,children:i,sizes:r})=>{const s=mc(r,t,a);return st.createElement("div",{className:"StandardGridTableLayout"},!a&&st.createElement("div",{className:"standard-grid-table-header",style:{gridTemplateColumns:s}},e.map((({name:e,sortDirection:t,onSort:n})=>st.createElement("div",{key:e,className:wn("standard-grid-table-cell",{sortable:!!n}),onClick:n||null},e,t?st.createElement("span",{className:wn("sort-indicator",t)}):null))),t&&st.createElement("div",{className:"standard-grid-table-cell header-expand-toggle",onClick:n},st.createElement("i",{className:"ico icon-expand-all"}))),i)},hc=({tableExpandable:e,rowExpandable:t,expanded:n,setExpanded:a,isMobile:i,sizes:r,children:s,renderExpandedContent:o})=>{const l=mc(r,e,i);return st.createElement("div",{className:wn("standard-grid-table-row-container",{"sp-margin-l-bottom":t&&n})},st.createElement("div",{className:wn("standard-grid-table-row",{expandable:t,expanded:n}),style:{gridTemplateColumns:l},onClick:t?()=>a(!n):null},s,e&&!i&&st.createElement("div",{className:"standard-grid-table-cell row-expand-toggle"},t&&st.createElement("i",{className:wn("ico",{"icon-expand":!n,"icon-collapse":n})}))),t&&n&&st.createElement("div",{className:"expanded-row-content"},o()))},fc=({children:e,indent:t,index:n,columns:a,isMobile:i})=>{const r=a[n].name,s=t&&i?16+20*t+"px":void 0;return st.createElement("div",{className:"standard-grid-table-cell",style:{paddingLeft:s}},i&&st.createElement("div",{className:"mobile-cell-header"},r),st.createElement("div",{className:"cell-content"},e))},vc=e=>({TableLayout:t=>st.createElement(gc,{...t,sizes:e}),TableRowLayout:t=>st.createElement(hc,{...t,sizes:e}),TableCellLayout:e=>st.createElement(fc,{...e})});class Ac extends pn{constructor(e){super(e),this.renderOuter=this._renderOuter}_renderOuter(){const e=super.render.apply(this,arguments);if(!e)return null;const t=this.wrapper?this.wrapper.offsetWidth:null;return ot.createElement(mn,{classes:{element:"layer-high"},attachment:"top left",targetAttachment:"top left",constraints:[{to:"window",attachment:"together",pin:["top"]}]},ot.createElement("div",null),ot.cloneElement(e,{style:{position:"static",width:t}}))}}const Ec=({className:e,children:t})=>ot.createElement("span",{className:e,style:{wordBreak:"break-all",overflowWrap:"break-word",hyphens:"none"}},t),bc=({className:e,children:t})=>ot.createElement("span",{className:e,style:{whiteSpace:"nowrap"}},t);var yc,wc;function xc(e){return ot.createElement("div",null,ot.createElement("div",{className:"col-md-4 sm-label-left"},ot.createElement("b",null,e.propLabel),e.propHelpFieldId&&ot.createElement(Zs,{id:e.propHelpFieldId})),ot.createElement("div",{className:"col-md-8 sm-label-left"},ot.createElement("span",{className:"btn-group btn-group-"+e.toggleSize},ot.createElement("button",{name:"prop-off",type:"button",className:"btn btn-default "+(e.isPropertyActive?"disabled":"active btn-primary"),onClick:()=>e.onClick(!1)},ot.createElement(Qs,{value:e.tooltipPropOffBtn},ot.createElement("span",null,e.displayTextPropOffBtn))),ot.createElement("button",{name:"prop-on",type:"button",className:"btn btn-default "+(e.isPropertyActive?"active btn-primary":"disabled"),onClick:()=>e.onClick(!0)},ot.createElement(Qs,{value:e.tooltipPropOnBtn},ot.createElement("span",null,e.displayTextPropOnBtn))))))}(wc=yc||(yc={})).XSMALL="xs",wc.SMALL="sm",wc.MEDIUM="m",wc.LARGE="lg",xc.defaultProps={toggleSize:yc.XSMALL,displayTextPropOffBtn:"Off",tooltipPropOffBtn:"Toggle to turn OFF",displayTextPropOnBtn:"On",tooltipPropOnBtn:"Toggle to turn ON",isPropertyActive:!1};const Cc=({tooltip:e,placement:t,delayShow:n,wrapperClassName:a,...i})=>ot.createElement(Qs,{value:e,placement:t,delayShow:n},ot.createElement("div",{className:a},ot.createElement(Bn,{...i}))),kc={bindings:{options:"=",model:"=",onChange:"<?"},templateUrl:"core/src/pipeline/config/targetSelect.html"};n("spinnaker.pipeline.targetSelect.component",[]).component("targetSelect",kc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/targetSelect.html",'<ui-select ng-model="$ctrl.model.target" on-select="$ctrl.onChange($ctrl.model.target)" class="form-control input-sm">\n <ui-select-match placeholder="None">{{$select.selected.label}}</ui-select-match>\n <ui-select-choices repeat="r.val as r in $ctrl.options ">\n <strong ng-bind-html="r.label | highlight: $select.search"></strong>\n <div ng-bind-html="r.description"></div>\n </ui-select-choices>\n</ui-select>\n')}]);class Bc extends ot.Component{constructor(){super(...arguments),this.clicked=e=>{const t=e.target.checked?[this.props.platformHealthType]:null;this.props.onChange(t)}}render(){return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:E(this.props.interestingHealthProviderNames,[this.props.platformHealthType]),onChange:this.clicked}),"Consider only ",this.props.platformHealthType," health")," ",ot.createElement(Zs,{id:"application.platformHealthOnly",expand:this.props.showHelpDetails}))}}function Sc(e){const{value:t,onChange:n,platformHealthType:a,showHelpDetails:i,...r}=e;return ot.createElement(Bc,{...r,interestingHealthProviderNames:t,platformHealthType:a,showHelpDetails:i,onChange:e=>{n(fr({name:r.name,value:e}))}})}const Mc=({dismiss:e})=>ot.createElement("div",{className:"modal-close close-button pull-right"},ot.createElement("button",{className:"link",type:"button",onClick:e},ot.createElement("span",{className:"glyphicon glyphicon-remove"})));class Nc extends ot.Component{render(){const{className:e,isDisabled:t,isFormSubmit:n,isNew:a,label:i,onClick:r,submitting:s}=this.props,o=n?"submit":"button";return ot.createElement("button",{className:e,disabled:t,onClick:r,type:o},ot.createElement("div",{className:"flex-container-h horizontal middle"},!s&&ot.createElement("i",{className:"far fa-check-circle"})||ot.createElement(Es,{mode:"circular"}),ot.createElement("span",{className:"sp-margin-xs-left"},i||(a?"Create":"Update"))))}}Nc.defaultProps={className:"btn btn-primary",onClick:qi,isDisabled:!1,isFormSubmit:!1,isNew:!1};class Dc{static setHeading(e){this.heading=e}static getPage(e){return this.pageRegistry.find((t=>t.key===e))}static markDirty(e){this.getPage(e).state.dirty=!0}static markClean(e){this.getPage(e).state.dirty=!1}static markComplete(e){this.getPage(e).state.done=!0}static markIncomplete(e){this.getPage(e).state.done=!1}static setCurrentPage(e,t){this.pageRegistry.forEach((t=>t.state.current=t===e)),this.currentPage=e,e.state.markCleanOnView&&this.markClean(e.key),e.state.markCompleteOnView&&this.markComplete(e.key),t||er.scrollTo(`[waypoint="${e.key}"]`,"[waypoint-container]",143)}static registerPage(e,t,n){n=n||{done:!1,blocked:!0,rendered:!0,current:!1,dirty:!1,markCleanOnView:!0,markCompleteOnView:!1,required:!1},this.pageRegistry.push({key:e,label:t,state:n}),this.renderPages()}static renderPages(){const e=this.pageRegistry.filter((e=>e.state.rendered));this.renderedPages=e,1===e.length&&this.setCurrentPage(e[0])}static isComplete(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done&&!e.dirty))}static allPagesVisited(){return this.renderedPages.map((e=>e.state)).filter((e=>e.rendered&&e.required)).every((e=>e.done))}static setRendered(e,t){this.pageRegistry.filter((t=>t.key===e)).forEach((e=>e.state.rendered=t)),this.renderPages()}static includePage(e){this.setRendered(e,!0)}static excludePage(e){this.setRendered(e,!1)}static resetWizard(){this.renderedPages.length=0,this.pageRegistry.length=0,this.currentPage=null,this.heading=null}}Dc.renderedPages=[],Dc.pageRegistry=[];class Ic extends ot.Component{constructor(){super(...arguments),this.state={errors:{},order:0,isLoading:!1,status:"default"},this.ref=ot.createRef(),this.innerRef=ot.createRef(),this.onLoadingChanged=e=>{const t=this.computeStatus(this.state.errors,e);return this.setState({isLoading:e,status:t},this.onWizardPageStateChanged)},this.validate=e=>{const t=this.innerRef.current,n=t&&P(t.validate)&&t.validate(e)||{};if(!E(n,this.state.errors)){const e=this.computeStatus(n,this.state.isLoading);this.setState({errors:n,status:e},this.onWizardPageStateChanged)}return n}}static getStatusClass(e){const t={error:"dirty",loading:"waiting",default:"done"};return t[e]||t.default}computeStatus(e,t){return Object.keys(e).length?"error":t?"loading":"default"}componentDidMount(){this.props.wizard.onWizardPageAdded(this)}componentWillUnmount(){this.props.wizard.onWizardPageRemoved(this)}componentDidUpdate(e){this.props.order!==e.order&&this.setState({order:this.props.order},this.onWizardPageStateChanged)}onWizardPageStateChanged(){this.props.wizard.onWizardPageStateChanged(this)}render(){const{note:e,label:t,render:n}=this.props,{status:a}=this.state,{innerRef:i,onLoadingChanged:r}=this,s=n({innerRef:i,onLoadingChanged:r}),o=Ic.getStatusClass(a);return ot.createElement("div",{className:"modal-page",ref:this.ref},t&&ot.createElement("div",{className:"wizard-subheading sticky-header"},ot.createElement("h4",{className:o},t)),ot.createElement("div",{className:"wizard-page-body"},s,e&&ot.createElement("div",{className:"row"},e)))}}class Fc extends ot.Component{render(){const{current:e,page:t,onClick:n}=this.props,{errors:a,status:i}=t.state,{label:r}=t.props,s=(e=>{const t=(e,n,a)=>(C(e)?e.forEach(((e,i)=>t(e,`${n}[${i}]`,a))):w(e)?a[n]=e:j(e)&&Object.keys(e).forEach((i=>t(e[i],`${n}.${i}`,a))),a);return t(e,"errors",{})})(a),o=!!Object.keys(s).length,l=`${Ic.getStatusClass(i)} ${e?"current":""}`,c=ot.createElement("li",{className:l},ot.createElement("a",{className:"clickable",onClick:()=>n(t)},r));if(!o)return c;const p=ot.createElement("span",null,Object.keys(s).map((e=>ot.createElement("span",{key:e},s[e]," ",ot.createElement("br",null)))));return ot.createElement(Qs,{template:p},c)}}class Tc extends ot.Component{render(){const{errorMessage:e}=this.props;if(!e.includes("has traffic guards enabled"))return null;const{$state:t,$stateParams:n}=hi,{project:a,application:i}=n,r=`home.${a?"project":"applications"}.application.config`,s={project:a,application:i,section:"traffic-guards"},o=t.href(r,s);return ot.createElement("p",null,ot.createElement("a",{href:o},"Configure Traffic Guards for this application"))}}class Qc extends ot.Component{getBaseState(){const{$stateParams:e}=hi;return`home.${e.project?"project":"applications"}.application`}getParams(e){const{project:t,application:n}=hi.$stateParams;return{project:t,application:n,...e}}render(){const{errorMessage:e,task:t}=this.props,{$state:n}=hi;if(!e)return null;const a=t.id?n.href(this.getBaseState()+".tasks.taskDetails",this.getParams({taskId:t.id})):null;return ot.createElement("div",{className:"col-md-12 overlay-modal-error"},ot.createElement("div",{className:"alert"},ot.createElement("h4",null,ot.createElement("i",{className:"fa fa-exclamation-triangle"})," Error:"),ot.createElement("p",null,ot.createElement(Br,{message:e})),ot.createElement(Tc,{errorMessage:e})),a&&ot.createElement("p",null,ot.createElement("a",{href:a},"View this failed task in the tasks pane.")))}}class Pc extends ot.Component{render(){const{item:e}=this.props,t=wn(["glyphicon","status-glyph",{"glyphicon-time":e.hasNotStarted,"glyphicon-play":e.isRunning,"fa fa-check":e.isCompleted,"fa fa-exclamation-triangle":e.isFailed||"TERMINATED"===e.status,"glyphicon-stop":e.isCanceled,"glyphicon-pause":e.isSuspended||e.isPaused}]);return ot.createElement("span",{className:t})}}function Rc(e){const t=["stageStart","stageEnd","determineTargetServerGroup"];let n=[];return e&&(n=e.filter((e=>!t.includes(e.name)||"TERMINAL"===e.status))),n}const Uc="spinnaker.pipelines.stages.common.displayableTasks.filter";n(Uc,[]).filter("displayableTasks",(function(){return Rc}));const zc=({monitor:e})=>{const t=rl();return qo(e.statusUpdatedStream,(()=>t())),e.task?ot.createElement(ot.Fragment,null,ot.createElement("ul",{className:"task task-progress"},Rc(e.task.steps).map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(Pc,{item:e})," ",yr(e.name)," ",e.startTime&&ar(e.runningTimeInMs))))),e.task.isRunning&&ot.createElement("ul",{className:"task task-progress task-progress-running"},ot.createElement("li",null,ot.createElement(Es,{size:"small"}))),e.task.isCompleted&&ot.createElement("ul",{className:"task task-progress task-progress-refresh"},ot.createElement("li",null,ot.createElement("span",{className:"far fa-check-circle"})," ",ot.createElement("strong",null,"Operation succeeded!"))),e.task.id&&!e.error&&e.application&&ot.createElement("p",null,"You can"," ",ot.createElement("a",{href:hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.application.name,taskId:e.task.id})},"monitor this task from the Tasks view"),".")):ot.createElement("ul",{className:"task"},"submitting task...")},Gc=({monitor:e})=>{const t=rl();return lt((()=>{var n;const a=null==(n=null==e?void 0:e.statusUpdatedStream)?void 0:n.subscribe((()=>t()));return()=>null==a?void 0:a.unsubscribe()}),[e]),e&&(e.submitting||e.error)?ot.createElement(ea,{appear:!0,classNames:"overlay-modal",timeout:0,in:!0},ot.createElement("div",{className:"overlay overlay-modal vertical"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.title)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.task&&ot.createElement("div",{className:"col-md-8 col-md-offset-2 overlay-modal-status"},ot.createElement(zc,{monitor:e})),ot.createElement(Qc,{errorMessage:e.errorMessage,task:e.task}))),!e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:e.closeModal},"Close")),e.error&&ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>e.tryToFix()},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:e.closeModal},"Cancel")))):null};class jc extends ot.Component{constructor(){super(...arguments),this.stepsElement=ot.createRef(),this.formikRef=ot.createRef(),this.state={pages:[],initialized:!1,currentPage:null},this.onWizardPageAdded=e=>{this.setState((t=>{const n=t.pages.concat(e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.onWizardPageRemoved=e=>{this.setState((t=>{const n=M(t.pages,e);return{pages:n,currentPage:t.currentPage||n[0]}}),this.revalidate)},this.setCurrentPage=e=>{e&&this.stepsElement.current&&e.ref.current&&(this.stepsElement.current.scrollTop=e.ref.current.offsetTop),this.setState({currentPage:e})},this.handleStepsScroll=e=>{const t=this.state.pages.map((e=>e.ref.current.offsetTop)),n=e.currentTarget.scrollTop;let a=t.reverse().findIndex((e=>n>=e));void 0===a&&(a=t.length-1);const i=t.length-(a+1),r=this.state.pages[i];r!==this.state.currentPage&&this.setState({currentPage:r})},this.validate=e=>{const t=this.props.validate||(()=>({}));return this.state.pages.map((t=>t.validate(e))).concat(t(e)).reduce(((e,t)=>d(e,t)),{})},this.revalidate=()=>this.formik&&this.formik.validateForm()}static incrementer(){let e=0;return()=>++e}get formik(){return this.formikRef.current&&this.formikRef.current.getFormikBag()}componentDidMount(){this.setState({initialized:!0})}onWizardPageStateChanged(e){this.forceUpdate()}render(){const{formClassName:e,heading:t,initialValues:n,loading:a,submitButtonLabel:i,taskMonitor:r,closeModal:s,dismissModal:o}=this.props,{currentPage:l,initialized:c,pages:p}=this.state,d=ot.createElement("div",{className:"row"},ot.createElement(Es,{size:"large"})),u=p.sort(((e,t)=>e.state.order-t.state.order)).map((e=>ot.createElement(Fc,{key:e.props.label,current:e===l,onClick:this.setCurrentPage,page:e}))),m=()=>{const e=this.formik,t=jc.incrementer();return e?this.props.render({formik:e,nextIdx:t,wizard:this}):null},g=r&&r.submitting,h=p.some((e=>"loading"===e.state.status));return ot.createElement(ot.Fragment,null,r&&ot.createElement(Gc,{monitor:r}),ot.createElement(zs,{ref:this.formikRef,initialValues:n,onSubmit:s,validate:this.validate,render:n=>ot.createElement(Vn,{className:`form-horizontal ${e}`},ot.createElement(Mc,{dismiss:o}),ot.createElement(qt.Header,null,t&&ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,a||!c?d:ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-3 hidden-sm hidden-xs"},ot.createElement("ul",{className:"steps-indicator wizard-navigation"},u)),ot.createElement("div",{className:"col-md-9 col-sm-12"},ot.createElement("div",{className:"steps",ref:this.stepsElement,onScroll:this.handleStepsScroll},m())))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:g,onClick:o,type:"button"},"Cancel"),ot.createElement(Nc,{isDisabled:!n.isValid||g||h||a,submitting:g,isFormSubmit:!0,label:i})))}))}}class Lc{constructor(e){this.$scope=e}$onInit(){this.render=!1!==this.render,this.markCleanOnView=!1!==this.markCleanOnView,this.markCompleteOnView=!1!==this.markCompleteOnView,this.state={blocked:!1,current:!1,rendered:this.render,done:this.done||!this.mandatory,dirty:!1,required:this.mandatory,markCleanOnView:this.markCleanOnView,markCompleteOnView:this.markCompleteOnView},Dc.registerPage(this.key,this.label,this.state),this.$scope.$on("$destroy",(()=>Dc.setRendered(this.key,!1)))}}Lc.$inject=["$scope"];const Oc={bindings:{mandatory:"<",done:"<",markCleanOnView:"<",markCompleteOnView:"<",key:"@",label:"@",render:"<"},transclude:!0,templateUrl:"core/src/modal/wizard/v2wizardPage.component.html",controller:Lc};n("spinnaker.core.modal.wizard.wizardPage.component",[]).component("v2WizardPage",Oc),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2wizardPage.component.html",'<div class="modal-page" ng-if="$ctrl.state.rendered" waypoint="{{ $ctrl.key }}">\n <div class="wizard-subheading sticky-header">\n <h4\n ng-class="{\n default: !$ctrl.state.done,\n current: $ctrl.state.current,\n done: $ctrl.state.done,\n dirty: $ctrl.state.dirty\n }"\n >\n {{ $ctrl.label }}\n </h4>\n </div>\n <div class="wizard-page-body" ng-transclude></div>\n</div>\n')}]);oi("v2-modal-wizard .modal-header,\n.wizard-modal .modal-header {\n /* Set to keep sticky section headings beneath modal header*/\n position: relative;\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation,\n.wizard-modal ul.wizard-navigation {\n margin: 0;\n padding: 0;\n list-style-type: none;\n height: auto;\n position: relative;\n background-color: var(--color-white);\n z-index: 5;\n}\nv2-modal-wizard ul.wizard-navigation:before,\n.wizard-modal ul.wizard-navigation:before,\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n display: table;\n content: \" \";\n}\nv2-modal-wizard ul.wizard-navigation:after,\n.wizard-modal ul.wizard-navigation:after {\n clear: both;\n}\nv2-modal-wizard ul.wizard-navigation li,\n.wizard-modal ul.wizard-navigation li {\n display: block;\n width: 100%;\n text-align: left;\n padding: 0;\n position: relative;\n}\nv2-modal-wizard ul.wizard-navigation li a,\n.wizard-modal ul.wizard-navigation li a {\n color: var(--color-dovegray);\n display: block;\n line-height: 15px;\n text-decoration: none;\n text-transform: uppercase;\n -webkit-transition: 0.25s;\n transition: 0.25s;\n width: 100%;\n font-weight: normal;\n padding: 10px 5px 10px 32px;\n}\nv2-modal-wizard ul.wizard-navigation li a:before,\n.wizard-modal ul.wizard-navigation li a:before {\n position: absolute;\n left: 10px;\n top: 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: transparent;\n content: '';\n -webkit-transition: 0.25s;\n transition: 0.25s;\n font-size: 110%;\n font-family: 'Glyphicons Halflings';\n}\nv2-modal-wizard ul.wizard-navigation li.done a:before,\n.wizard-modal ul.wizard-navigation li.done a:before {\n background-color: var(--color-success);\n}\nv2-modal-wizard ul.wizard-navigation li.default,\n.wizard-modal ul.wizard-navigation li.default {\n pointer-events: auto;\n}\nv2-modal-wizard ul.wizard-navigation li.default a:before,\n.wizard-modal ul.wizard-navigation li.default a:before {\n background-color: var(--color-dovegray);\n}\nv2-modal-wizard ul.wizard-navigation li.current,\n.wizard-modal ul.wizard-navigation li.current,\nv2-modal-wizard ul.wizard-navigation li:hover,\n.wizard-modal ul.wizard-navigation li:hover,\nv2-modal-wizard ul.wizard-navigation li:active,\n.wizard-modal ul.wizard-navigation li:active {\n -webkit-transition: 0.25s;\n transition: 0.25s;\n background-color: var(--color-cirrus);\n}\nv2-modal-wizard ul.wizard-navigation li.current a,\n.wizard-modal ul.wizard-navigation li.current a,\nv2-modal-wizard ul.wizard-navigation li:hover a,\n.wizard-modal ul.wizard-navigation li:hover a,\nv2-modal-wizard ul.wizard-navigation li:active a,\n.wizard-modal ul.wizard-navigation li:active a {\n color: var(--color-mineshaft);\n font-weight: 600;\n}\nv2-modal-wizard ul.wizard-navigation li.current a:before,\n.wizard-modal ul.wizard-navigation li.current a:before,\nv2-modal-wizard ul.wizard-navigation li:hover a:before,\n.wizard-modal ul.wizard-navigation li:hover a:before,\nv2-modal-wizard ul.wizard-navigation li:active a:before,\n.wizard-modal ul.wizard-navigation li:active a:before {\n background-color: var(--color-accent);\n content: '';\n}\nv2-modal-wizard ul.wizard-navigation li.dirty a:before,\n.wizard-modal ul.wizard-navigation li.dirty a:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n}\nv2-modal-wizard ul.wizard-navigation li.waiting a:before,\n.wizard-modal ul.wizard-navigation li.waiting a:before {\n background-color: var(--color-seashell);\n}\nv2-modal-wizard .steps,\n.wizard-modal .steps {\n overflow-y: auto;\n overflow-x: hidden;\n clear: both;\n max-height: calc(100vh - 215px);\n}\nv2-modal-wizard .steps .wizard-subheading,\n.wizard-modal .steps .wizard-subheading {\n padding: 0;\n margin-bottom: 10px;\n}\nv2-modal-wizard .steps .wizard-subheading h4,\n.wizard-modal .steps .wizard-subheading h4 {\n padding: 10px;\n margin-bottom: 0;\n color: var(--color-primary);\n background-color: var(--color-accent-g2);\n}\n@media (max-width: 992px) {\n v2-modal-wizard .steps .wizard-subheading h4,\n .wizard-modal .steps .wizard-subheading h4 {\n padding-left: 0;\n }\n v2-modal-wizard .steps .wizard-subheading h4:before,\n .wizard-modal .steps .wizard-subheading h4:before {\n display: inline-block;\n margin: 0 10px;\n width: 14px;\n height: 14px;\n border-radius: 100%;\n background-color: var(--color-dovegray);\n content: '';\n -webkit-transition: 0.25s;\n transition: 0.25s;\n font-size: 15px;\n }\n v2-modal-wizard .steps .wizard-subheading h4.done:before,\n .wizard-modal .steps .wizard-subheading h4.done:before {\n background-color: var(--color-success);\n }\n v2-modal-wizard .steps .wizard-subheading h4.dirty:before,\n .wizard-modal .steps .wizard-subheading h4.dirty:before {\n color: var(--color-danger);\n background-color: transparent;\n content: '\\e088';\n font-family: 'Glyphicons Halflings';\n }\n v2-modal-wizard .steps .wizard-subheading h4.waiting:before,\n .wizard-modal .steps .wizard-subheading h4.waiting:before {\n background-color: var(--color-seashell);\n }\n}\nv2-modal-wizard .steps .wizard-page-body,\n.wizard-modal .steps .wizard-page-body {\n padding: 10px 0 20px;\n}\n");class Yc{constructor(e){this.$scope=e,this.wizard=Dc}$onInit(){this.$scope.$on("waypoints-changed",((e,t)=>{t.lastWindow.map((e=>e.elem)).filter((e=>Dc.getPage(e))).reverse().forEach((e=>{Dc.setCurrentPage(Dc.getPage(e),!0)}))})),Dc.setHeading(this.heading)}$onDestroy(){Dc.resetWizard()}}Yc.$inject=["$scope"];const $c={bindings:{heading:"@",taskMonitor:"<",dismiss:"&"},transclude:!0,templateUrl:"core/src/modal/wizard/v2modalWizard.component.html",controller:Yc},Hc="spinnaker.core.modal.wizard.wizard.component";n(Hc,["spinnaker.core.modal.wizard.wizardPage.component"]).component("v2ModalWizard",$c),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/modal/wizard/v2modalWizard.component.html",'<div modal-page>\n <task-monitor ng-if="$ctrl.taskMonitor" monitor="$ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$ctrl.dismiss()"></modal-close>\n <div class="modal-header" ng-if="$ctrl.wizard.heading">\n <h4 class="modal-title">{{ $ctrl.wizard.heading }}</h4>\n </div>\n <div ng-class="{ \'modal-body\': !$ctrl.notReallyModal }">\n <div class="row">\n <div class="col-md-3 hidden-sm hidden-xs">\n <ul class="steps-indicator wizard-navigation">\n <li\n ng-repeat="page in $ctrl.wizard.renderedPages"\n ng-class="{\n default: !page.state.done,\n current: page.state.current,\n done: page.state.done,\n dirty: page.state.dirty\n }"\n >\n <a href ng-click="$ctrl.wizard.setCurrentPage(page)">{{ page.label }}</a>\n </li>\n </ul>\n </div>\n <div class="col-md-9 col-sm-12">\n <div\n class="steps"\n ng-transclude\n sticky-headers\n waypoint-container\n waypoint-offset="120"\n waypoint-container-key="#modal-wizard"\n ></div>\n </div>\n </div>\n </div>\n</div>\n')}]);class Vc extends ot.Component{constructor(e){super(e),this.tooltipTemplate=ot.createElement("span",null,ot.createElement("p",null,"Task not completing?"),ot.createElement("p",null,"By default, Spinnaker does not consider cloud provider health (i.e. whether your instances have launched and are running) as a reliable indicator of instance health."),ot.createElement("p",null,"If your instances do not provide a health indicator known to Spinnaker (e.g. a discovery service or load balancers), you should configure your application to consider only cloud provider health when executing tasks. This option is available under Application Attributes in the ",ot.createElement("b",null,"Config tab"),"."));let t=!1;const n=e.task.getValueFor("lastCapacityCheck");if(n){const a=n.up+n.down+n.outOfService+n.unknown+n.succeeded+n.failed;t=e.task.execution.stages.some((t=>("cloneServerGroup"===t.type||"createServerGroup"===t.type)&&t.tasks.some((t=>t.startTime===e.step.startTime))))&&"waitForUpInstances"===e.step.name&&e.step.runningTimeInMs>bn.fromObject({minutes:5}).as("milliseconds")&&n.unknown>0&&n.unknown===a&&!m(e.application,"attributes.platformHealthOnly")}this.state={showMessage:t}}render(){return this.state.showMessage?ot.createElement(Qs,{template:this.tooltipTemplate},ot.createElement("i",{className:"fa fa-exclamation-circle",style:{fontSize:"smaller"}})):null}}class Jc{static addRunningTime(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||Object.defineProperties(e,{runningTimeInMs:{get:this.calculateRunningTime(e)}})}static shouldReplace(e,t){return(u(e)||""===e)&&!(u(t)||""===t)}static defineProperties(e){const t=Object.getOwnPropertyDescriptor(e,"runningTime");t&&!t.enumerable||(e.getValueFor=t=>{var n;if(e.context)return e.context[t];if(!e.variables)return null;const a=e.variables.find((e=>e.key===t));if(a)return a.value;const i=null==(n=e.execution)?void 0:n.stages;if(i&&Array.isArray(i)&&i.length>0){const n=i.map((e=>e.context&&m(e.context,t))).reduce(((e,t)=>Jc.shouldReplace(e,t)?t:e),null);if(!u(n)&&""!==n)return e.variables.push({key:t,value:n}),n}return a?a.value:null},e.getDisplayUser=()=>{var t,n,a;const i=null!=(a=null==(n=null==(t=e.execution)?void 0:t.authentication)?void 0:n.user)?a:"unknown user",r=e.getValueFor("user");return null===r||r===i?i:`${r} (${i})`},e.originalStatus=e.status,Object.defineProperties(e,{failureMessage:{get:()=>this.mergeExceptions(e)},isCompleted:{get:()=>["SUCCEEDED","SKIPPED"].includes(e.status)},isRunning:{get:()=>"RUNNING"===e.status},isFailed:{get:()=>["TERMINAL","FAILED_CONTINUE","STOPPED"].includes(e.status)},isStopped:{get:()=>"STOPPED"===e.status},isActive:{get:()=>["RUNNING","SUSPENDED","NOT_STARTED","PAUSED"].includes(e.status)},hasNotStarted:{get:()=>["NOT_STARTED","BUFFERED"].includes(e.status)},isBuffered:{get:()=>"BUFFERED"===e.status},isCanceled:{get:()=>"CANCELED"===e.status},isSuspended:{get:()=>"SUSPENDED"===e.status},isPaused:{get:()=>"PAUSED"===e.status},status:{get:()=>this.normalizeStatus(e),set:t=>{e.originalStatus=t,this.normalizeStatus(e)}},runningTime:{get:()=>{const t=Date.now(),n=new Date(t-this.calculateRunningTime(e)());return vn(n,t,{includeSeconds:!0})},configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(e),configurable:!0}}))}static mergeExceptions(e){const t=[this.getCustomException(e),this.getGeneralException(e),this.getOrchestrationException(e)].filter((e=>!!e));return 0===t.length?null:t.join("\n\n")}static getOrchestrationException(e){const t=e.getValueFor("kato.tasks");if(t&&t.length){const e=t.find((e=>e.status&&e.status.failed));if(!e)return null;const n=e.history,a=e.exception;if(a)return a.message;if(n&&n.length)return n[n.length-1].status}return null}static getLockFailureException(e){const t=e.getValueFor("exception");if(t){const e=t.details;if(e&&e.currentLockValue){let t,n;return"orchestration"===e.currentLockValue.type?(t="task",n=hi.$state.href("home.applications.application.tasks.taskDetails",{application:e.currentLockValue.application,taskId:e.currentLockValue.id})):(t="pipeline",n=hi.$state.href("home.applications.application.pipelines.executionDetails.execution",{application:e.currentLockValue.application,executionId:e.currentLockValue.id})),`Failed to acquire lock. An <a href="${n}">existing ${t}</a> is currently operating on the cluster.`}}return null}static getCustomException(e){const t=e.getValueFor("exception");return t&&t.exceptionType&&"LockFailureException"===t.exceptionType?this.getLockFailureException(e):null}static getGeneralException(e){var t,n,a,i;const r=e.getValueFor("exception");if(r){const e=(null!=(n=null==(t=r.details)?void 0:t.errors)?n:[]).filter((e=>!!e));return e.length?e.join("\n\n"):null!=(i=null==(a=r.details)?void 0:a.error)?i:null}return null}static calculateRunningTime(e){return()=>{if(!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static normalizeStatus(e){switch(e.originalStatus){case"SKIPPED":return"SKIPPED";case"COMPLETED":case"SUCCEEDED":return"SUCCEEDED";case"STARTED":case"EXECUTING":case"RUNNING":return"RUNNING";case"FAILED":case"TERMINAL":return"TERMINAL";case"STOPPED":return"STOPPED";case"SUSPENDED":case"DISABLED":return"SUSPENDED";case"NOT_STARTED":return"NOT_STARTED";case"CANCELED":return"CANCELED";case"UNKNOWN":return"UNKNOWN";case"TERMINATED":return"TERMINATED";case"PAUSED":return"PAUSED";case"FAILED_CONTINUE":return"FAILED_CONTINUE";case"BUFFERED":return"BUFFERED";default:return e.originalStatus&&Xe.warn("Unrecognized status:",e.originalStatus),e.originalStatus}}}class Wc{static getTasks(e,t=[]){return Si("/applications").path(e,"tasks").query({statuses:t.join(",")}).get().then((e=>(e.forEach((e=>this.setTaskProperties(e))),e.filter((e=>!e.getValueFor("dryRun"))))))}static getRunningTasks(e){return this.getTasks(e,this.activeStatuses)}static getTask(e){return Si("/tasks").path(e).get().then((e=>(this.setTaskProperties(e),e.execution&&(Jc.defineProperties(e.execution),e.execution.stages&&e.execution.stages.forEach((e=>Jc.defineProperties(e)))),e))).catch((t=>{Xe.warn("There was an issue retrieving taskId: ",e,t)}))}static waitUntilTaskMatches(e,t,n,a=1e3,i){const r=Ze.defer();return e?t(e)?r.resolve(e):n&&n(e)?r.reject(e):e.poller=_e((()=>{this.getTask(e.id).then((s=>{this.updateTask(e,s),null==i||i.next(),this.waitUntilTaskMatches(e,t,n,a,i).then(r.resolve,r.reject)}))}),a):r.reject(null),r.promise}static waitUntilTaskCompletes(e,t=1e3,n){return this.waitUntilTaskMatches(e,(e=>e.isCompleted),(e=>e.isFailed),t,n)}static updateTask(e,t){t&&(e.status=t.status,e.variables=t.variables,e.steps=t.steps,e.endTime=t.endTime,e.execution=t.execution,e.history=t.history)}static setTaskProperties(e){Jc.defineProperties(e),e.steps&&e.steps.length&&e.steps.forEach((e=>Jc.defineProperties(e)))}}Wc.activeStatuses=["RUNNING","SUSPENDED","NOT_STARTED"];class Kc{constructor(e){this.config=e,this.statusUpdatedStream=new At,this.closeModal=e=>{try{e&&e.stopPropagation(),this.modalInstance.dismiss()}catch(e){}},this.tryToFix=()=>{this.error=null,this.onTaskRetry&&this.onTaskRetry(),this.statusUpdatedStream.next()},this.submit=e=>{this.startSubmit(),(e||this.submitMethod)().then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))},this.title=e.title,this.application=e.application,this.modalInstance=e.modalInstance,this.onTaskComplete=e.onTaskComplete,this.onTaskRetry=e.onTaskRetry,this.monitorInterval=e.monitorInterval||1e3,this.submitMethod=e.submitMethod,this.modalInstance&&this.modalInstance.result.then((()=>this.onModalClose()),(()=>this.onModalClose()))}static modalInstanceEmulation(e,t){const n=Ze.defer();return n.promise.catch((()=>{})),{deferred:n,result:n.promise,close:t=>(n.resolve(t),e(t)),dismiss:a=>(n.reject(a),(t||e)(a))}}onModalClose(){this.task&&this.task.poller&&_e.cancel(this.task.poller)}startSubmit(){this.submitting=!0,this.task=null,this.error=!1,this.errorMessage=null,document.activeElement&&document.activeElement.blur(),this.statusUpdatedStream.next()}setError(e){e?(this.task=e,this.errorMessage=e.failureMessage||"There was an unknown server error."):this.errorMessage="There was an unknown server error.",this.submitting=!1,this.error=!0,this.statusUpdatedStream.next()}handleTaskComplete(){var e;null==(e=this.onTaskComplete)||e.call(this),this.statusUpdatedStream.next()}handleTaskSuccess(e){this.task=e,this.application&&this.application.getDataSource("runningTasks")&&this.application.getDataSource("runningTasks").refresh(),Wc.waitUntilTaskCompletes(e,this.monitorInterval,this.statusUpdatedStream).then((()=>this.handleTaskComplete())).catch((()=>this.setError(e))),this.statusUpdatedStream.next()}callPreconfiguredSubmit(e){this.startSubmit(),this.submitMethod(e).then((e=>this.handleTaskSuccess(e))).catch((e=>this.setError(e)))}}class qc extends ot.Component{render(){return ot.createElement("div",{className:"row",style:{marginTop:"10px",marginBottom:"10px"}},ot.createElement("div",{className:"col-md-3 sm-label-right"},"Reason"),ot.createElement("div",{className:"col-md-7"},ot.createElement("textarea",{className:"form-control",value:this.props.reason,onChange:e=>this.props.onChange(e.target.value),"ng-model":"vm.command.reason",rows:3,placeholder:"(Optional) anything that might be helpful to explain the reason for this change; HTML is okay"})))}}const Xc=[];const Zc=new class{constructor(){this.api=Si,this.plugins={sharedLibraries:{}}}addInjectable(e){Xc.push(e)}};window&&(window.spinnaker=Zc),window.spinnaker=Zc;n("spinnaker.core.utils.consoleDebug",[]).run(["$injector",e=>{Zc.$injector=e,Xc.forEach((t=>Zc[t]=e.get(t)))}]);class _c{static postTaskCommand(e){return Si("/tasks").post(e)}static cancelTask(e){return Si("/tasks").path(e,"cancel").put().then((()=>Wc.getTask(e).then((e=>Wc.waitUntilTaskMatches(e,(e=>"CANCELED"===e.status))))))}}Zc.TaskWriter=_c;class ep{static executeTask(e){const t=e.application||e.project||{name:"ad-hoc"};return e.application&&e.application.name&&(e.application=e.application.name),e.project&&e.project.name&&(e.project=e.project.name),"aws"===e.job[0].providerType&&delete e.job[0].providerType,e.job.forEach((e=>e.user=ri.getAuthenticatedUser().name)),_c.postTaskCommand(e).then((e=>{const n=e.ref.split("/").pop();return t.runningTasks&&t.runningTasks.refresh&&t.runningTasks.refresh(),Wc.getTask(n)}),(e=>{var t;const n=(null==(t=e.data)?void 0:t.message)||"Sorry, no more information.",a={status:e.status,message:e.statusText,log:n,failureMessage:n};return Ze.reject(a)}))}}class tp extends ot.Component{constructor(e){super(e),this.close=()=>{this.props.dismissModal()},this.submitTask=e=>{const{application:t,description:n}=this.props,a=Kc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),i=new Kc({application:t,modalInstance:a,title:n,onTaskComplete:()=>t.serverGroups.refresh()}),r=this.props.mapValuesToTask(e);r.description=this.props.description;i.submit((()=>{const e=ep.executeTask(r),t=()=>this.setState({isSubmitting:!1});return e.then(t,t),e})),this.setState({taskMonitor:i,isSubmitting:!0})},this.state={taskMonitor:null,isSubmitting:!1}}render(){const{isSubmitting:e}=this.state;return ot.createElement("div",null,ot.createElement(Gc,{monitor:this.state.taskMonitor}),ot.createElement(zs,{initialValues:this.props.initialValues,onSubmit:this.submitTask,render:t=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Mc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,this.props.title)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement(Ys,{value:co},this.props.render(t))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:e,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Nc,{isDisabled:!t.isValid||e,submitting:e,isFormSubmit:!0,label:"Submit"})))}))}}const{useEffect:np,useState:ap}=ot;function ip(e){const{label:t,account:n}=e,[a,i]=ap("");if(e.account&&e.expectedValue)throw new Error("Supply either the 'account' or the 'expectedValue' prop, but not both");const r=e.expectedValue||n,s=a===r,[o,l]=ap(!0);np((()=>{n&&Di.challengeDestructiveActions(n).then(l)}),[n]);const c=n&&!o;np((()=>e.onValidChange(c||s)),[s,c]);const p=ot.createElement(ot.Fragment,null,"Type the name of the account (",ot.createElement("span",{className:"verification-text"},r),") to continue"),d="form-control input-sm highlight-pristine "+(s?"":"ng-invalid");return c?null:ot.createElement("div",{className:"row verification user-verification"},ot.createElement("div",{className:"col-sm-12"},ot.createElement("div",{className:"form-inline"},ot.createElement("div",{className:"form-group"},ot.createElement("div",{className:"form-control-static"},t?ot.createElement(Br,{tag:"span",message:t}):p)," ",ot.createElement(Zs,{id:"user.verification"}),ot.createElement("input",{type:"text",className:d,value:a,onChange:e=>i(e.target.value)})))))}oi(".multi-task-monitor .overlay-modal-status {\n font-size: 90%;\n}\n.multi-task-monitor ul.task-progress {\n padding-left: 0;\n}\n");const rp=({monitors:e=[],title:t,closeModal:n})=>{const[a,i]=ot.useState(e.some((e=>e.error)));return e.some((e=>e.submitting||e.error))?ot.createElement("div",{className:"overlay overlay-modal multi-task-monitor"},ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,t)),ot.createElement(qt.Body,null,ot.createElement("div",{className:"clearfix"},e.map(((e,t)=>{var n,a;return ot.createElement("div",{className:"col-md-6 overlay-modal-status",key:`${null!=(a=null==(n=e.task)?void 0:n.id)?a:t}`},ot.createElement("h4",null,e.title),ot.createElement(zc,{monitor:e}),ot.createElement(Qc,{task:e.task,errorMessage:e.errorMessage}))})))),ot.createElement(qt.Footer,null,!a&&ot.createElement("button",{className:"btn btn-primary",onClick:n},"Close"),a&&ot.createElement(ot.Fragment,null,ot.createElement("button",{className:"btn btn-primary",onClick:()=>{e.forEach((e=>e.error=null)),i(!1)}},"Go back and try to fix this"),ot.createElement("button",{className:"btn btn-default",onClick:n},"Cancel")))):null},sp=e=>{const{account:t,verificationLabel:n,textToVerify:a,taskMonitor:i,taskMonitors:r,closeModal:s,dismissModal:o}=e,{useState:l,useEffect:c}=ot,[p,d]=l(!1),[u,m]=l(!1),[g,h]=l(!t&&!n&&!a),[f,v]=l({isError:!1}),[A,E]=l(),[b,y]=l();il((()=>o())),c((()=>{if(i&&!i.modalInstance&&(i.modalInstance=Kc.modalInstanceEmulation(s,o)),null==i?void 0:i.onTaskRetry){const{onTaskRetry:e}=i;i.onTaskRetry=()=>{m(!0),d(!1),e()}}}),[i]);const w=t||n&&a,x=p||!g,C=e=>{v({isError:!0,message:e}),d(!1)},k=(i||r)&&e.askForReason||e.submitJustWithReason,B=u&&e.retryBody||e.bodyContent||f.isError||e.platformHealthOnlyShowOverride||e.askForReason||e.submitJustWithReason;return ot.createElement("div",null,ot.createElement(Gc,{monitor:i}),ot.createElement(rp,{monitors:r,title:e.multiTaskTitle,closeModal:()=>o({source:"taskmonitor"})}),ot.createElement(Mc,{dismiss:()=>o({source:"header"})}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e.header)),B&&ot.createElement(qt.Body,null,e.bodyContent,e.platformHealthOnlyShowOverride&&ot.createElement(Bc,{interestingHealthProviderNames:b,showHelpDetails:!0,platformHealthType:e.platformHealthType,onChange:y}),f.isError&&ot.createElement("div",{className:"alert alert-danger"},ot.createElement("h4",null,"An error occurred:"),ot.createElement("p",null,f.message||"No details provided.")),u&&e.retryBody&&ot.createElement(Br,{message:e.retryBody}),k&&ot.createElement(qc,{reason:A,onChange:E})),ot.createElement(qt.Footer,null,!p&&w&&ot.createElement(ip,{onValidChange:h,account:t,expectedValue:a,label:n}),ot.createElement("button",{className:"btn btn-default",type:"button",onClick:()=>o({source:"footer"})},e.cancelButtonText),ot.createElement("button",{className:"btn btn-primary",type:"button",onClick:()=>{const{submitMethod:t,submitJustWithReason:n}=e;x||(d(!0),r?r.forEach((e=>e.callPreconfiguredSubmit({reason:A}))):i?i.submit((()=>t({interestingHealthProviderNames:b,reason:A}))):n?t({reason:A}).then(s,C):t?t().then(s,C):s())},disabled:x},p&&ot.createElement(Es,{mode:"circular"}),e.buttonText)))};class op{static confirm(e){const t={...this.defaults,...e};e.body&&(t.bodyContent=Sr(e.body));const{taskMonitorConfig:n,taskMonitorConfigs:a}=e;n&&(t.taskMonitor=new Kc(n)),a&&(t.taskMonitors=a.map((e=>new Kc(e))));const{promise:i,resolve:r,reject:s}=Ze.defer();return si.show(sp,t).then(r,s),i.catch((()=>{})),i}}op.defaults={buttonText:"Confirm",cancelButtonText:"Cancel"};class lp{constructor(){this.builders={}}register(e,t){this.builders[e]=t}getBuilder(e){return this.builders[e]}}class cp extends ot.Component{constructor(e){super(e),this.cancel=()=>{this.props.dismissModal()},this.selectProvider=()=>{this.props.closeModal(this.state.selectedProvider)},this.state={}}static show(e){return si.show(cp,e,{})}setProvider(e){this.setState({selectedProvider:e})}render(){const{selectedProvider:e}=this.state,{providerOptions:t}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(Mc,{dismiss:this.cancel}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,"Select Your Provider")),ot.createElement(qt.Body,null,ot.createElement("div",{className:"card-choices"},t.map((t=>ot.createElement("div",{className:`card vertical center middle ${e===t&&"active"}`,key:t,onClick:()=>this.setProvider(t)},Ni.hasValue(t,"logo.path")&&ot.createElement("img",{src:Ni.getValue(t,"logo.path"),alt:t,width:"100%",height:"auto"}),!Ni.hasValue(t,"logo.path")&&ot.createElement("h3",{className:"card-label"},t)))))),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",onClick:this.cancel},"Cancel"),ot.createElement("button",{className:"btn btn-primary",onClick:this.selectProvider,disabled:!e},"Next")))}}class pp{static selectProvider(e,t,n){return Di.applicationAccounts(e).then((a=>{let i=[];t&&(i=a.filter((e=>Ni.hasValue(e.cloudProvider,t)))),n&&(i=i.filter((t=>n(e,t,Ni.getProvider(t.cloudProvider)))));const r=f(i.filter((e=>!Ni.isDisabled(e.cloudProvider))).map((e=>(Ni.getProvider(e.cloudProvider)[t]||{}).useProvider||e.cloudProvider)));let s;return r.length>1?cp.show({providerOptions:r}):(s=1===r.length?Ze.when(r[0]):Ze.when(di.defaultProvider||"aws"),s)}))}static isDisabled(e){return Di.applicationAccounts(e).then((e=>{let t=!1;return 0===e.filter((e=>!Ni.isDisabled(e.cloudProvider))).length&&(t=!0),t}))}}class dp extends ot.Component{constructor(e){super(e),this.state={label:this.getProviderLabel(e.provider)}}getProviderLabel(e){return Ni.getValue(e,"name")||e}componentWillReceiveProps(e){this.setState({label:this.getProviderLabel(e.provider)})}render(){return ot.createElement("span",null,this.state.label)}}oi(".cloud-provider-logo {\n display: inline-block;\n margin-right: 3px;\n}\n.cloud-provider-logo .icon {\n display: inline-block;\n vertical-align: sub;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: 50% 50%;\n mask-position: 50% 50%;\n -webkit-mask-size: cover;\n mask-size: cover;\n background-color: var(--color-success);\n}\n.cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.disabled .cloud-provider-logo .icon {\n background-color: var(--color-dovegray);\n}\n.disabled .cloud-provider-logo svg {\n fill: var(--color-success);\n}\n.header-text .cloud-provider-logo {\n margin-right: 10px;\n}\n");const up=({height:e,provider:t,showTooltip:n,width:a})=>{const[i,r]=ot.useState(void 0),s=Ni.getValue(t,"cloudProviderLogo");ot.useEffect((()=>{n&&r(Ni.getValue(t,"name")||t)}),[n]);const o=s?ot.createElement(s,{height:e,width:a}):ot.createElement("span",{className:`icon icon-${t}`,style:{height:e,width:a}});return i?ot.createElement(Qs,{value:i},o):ot.createElement("span",{className:"cloud-provider-logo"},o)};class mp{constructor(e,t){this.$injector=e,this.$q=t}hasDelegate(e,t){const n=Ni.getValue(e,t);return P(n)||w(n)&&this.$injector.has(n)}getDelegate(e,t){const n=Ni.getValue(e,t);if(w(n)&&this.$injector.has(n))return this.$injector.get(n,"providerDelegate");if(P(n))return new n(this.$q);throw new Error('No "'+t+'" service found for provider "'+e+'"')}}mp.$inject=["$injector","$q"];const gp="spinnaker.core.cloudProvider.service.delegate";n(gp,[]).service("providerServiceDelegate",mp);const hp={list:()=>Si("/jobs/preconfigured").useCache().get()},fp={BITBUCKET_FILE:/bitbucket\/file/,CUSTOM_OBJECT:/custom\/object/,DOCKER_IMAGE:/docker\/image/,EMBEDDED_BASE64:/embedded\/base64/,GCS_OBJECT:/gcs\/object/,GITHUB_FILE:/github\/file/,GIT_REPO:/git\/repo/,GITLAB_FILE:/gitlab\/file/,GCE_MACHINE_IMAGE:/gce\/image/,JENKINS_FILE:/jenkins\/file/,KUBERNETES:/kubernetes\/(.*)/,S3_OBJECT:/s3\/object/,HELM_CHART:/helm\/chart/,IVY_FILE:/ivy\/file/,MAVEN_FILE:/maven\/file/,HTTP_FILE:/http\/file/,FRONT50_PIPELINE_TEMPLATE:/front50\/pipelineTemplate/,ORACLE_OBJECT:/oracle\/object/},vp=(...e)=>Object.keys(fp).map((e=>fp[e])).filter((t=>!e.includes(t)));class Ap extends ot.Component{constructor(e,t){if(super(e),this.onVersionChange=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},e.artifact.type!==t&&"custom-artifact"!==e.artifact.artifactAccount){const n=p(e.artifact);n.type=t,n.customKind=!1,e.onChange(n)}}}const Ep=e=>e.current===e.name?ot.createElement("div",{className:"step-section-details"},e.children):null;class bp extends ot.Component{render(){const e=m(this.props.stage,"context.execution.logs");return e?ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("a",{target:"_blank",href:e},"View Execution Logs")))):null}}class yp{static observe(e){return this.message$.pipe(Tt((t=>t.key===e)),St((e=>e.payload)))}static publish(e,t){this.message$.next({key:e,payload:t})}}yp.message$=new At;var wp,xp=Object.defineProperty,Cp=Object.getOwnPropertyDescriptor;(wp||(wp={})).NO_REASON_PROVIDED="No reason provided.";let kp=class extends ot.Component{constructor(e){super(e),this.state=this.getState(e)}getState(e){const{stage:t}=e;if(t&&(t.isFailed||t.isStopped)){const n=(t.tasks||[]).find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));let a,i,r=t.name;if(!n||!e.message&&0===e.messages.length){const e=m(t.context,"exception.source");if(e)r=e.stageName,a=e.executionId,i=e.stageId;else if(t.after){const e=t.after.find((e=>"TERMINAL"===e.status||"STOPPED"===e.status));e&&(r=yr(e.name),i=e.id)}}return{isFailed:!0,failedTask:n,failedExecutionId:a,failedStageName:r,failedStageId:i}}return{failedTask:void 0,isFailed:!1}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){var e,t;const{message:n,messages:a,stage:i}=this.props,{isFailed:r,failedTask:s,failedExecutionId:o,failedStageName:l,failedStageId:c}=this.state;let p=n||!a.length?[n]:a;if(p.length>0){const d=r?a.length?"Exceptions":"Exception":"Warning";if((r&&!(null==(e=i.context)?void 0:e.failOnFailedExpressions)||(null==(t=i.context)?void 0:t.skipExpressionEvaluation))&&(p=p.filter((e=>!e.startsWith("Failed to evaluate"))),0===p.length))return null;const u=p.map(((e,t)=>ot.createElement(Br,{key:t,message:e||wp.NO_REASON_PROVIDED,className:"break-word"})));if(u)return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert "+("Warning"===d?"alert-warning":"alert-danger")},ot.createElement("div",null,ot.createElement("h5",null,d," ",s&&ot.createElement("span",null,"( ",yr(s.name)," )")),u,ot.createElement(Tc,{errorMessage:n||a.join(",")})))));if(void 0!==c){const e=hi.$state.current,t={stageId:c};return void 0!==o&&(t.executionId=o),ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"alert alert-danger"},ot.createElement("div",null,"Stage"," ",ot.createElement(Dn,{to:e.name,params:t},ot.createElement("a",null,l))," ","failed."))))}yp.publish("stage-failure-message:no-reason",{params:{...hi.$state.params}})}return null}};function Bp(e){const{action:t,stage:n}=e;return ot.createElement(Ep,{name:e.name,current:e.current},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("dl",{className:"dl-narrow dl-horizontal"},ot.createElement("dt",null,"Account"),ot.createElement("dd",null,ot.createElement(ts,{account:n.context.credentials})),ot.createElement("dt",null,"Region"),ot.createElement("dd",null,n.context.region),ot.createElement("dt",null,"Server Group"),ot.createElement("dd",null,n.context.serverGroupName)))),ot.createElement(kp,{stage:n,message:n.failureMessage}),n.isCompleted&&n.context.serverGroupName&&ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},ot.createElement("div",{className:"well alert alert-info"},ot.createElement("strong",null,t,": "),n.context.serverGroupName))),ot.createElement(bp,{stage:n}))}kp.defaultProps={messages:[]},kp=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Cp(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&xp(t,n,r),r})([na],kp);const Sp=[{key:"sunday",label:"Sun",ordinal:1},{key:"monday",label:"Mon",ordinal:2},{key:"tuesday",label:"Tue",ordinal:3},{key:"wednesday",label:"Wed",ordinal:4},{key:"thursday",label:"Thu",ordinal:5},{key:"friday",label:"Fri",ordinal:6},{key:"saturday",label:"Sat",ordinal:7}],Mp="The pipeline will proceed immediately, continuing to the next step in the stage.";class Np extends ot.Component{constructor(e){var t;super(e),this.finishWaiting=e=>{const{executionService:t}=hi;e.target.blur();const{application:n,execution:a,stage:i}=this.props,r=e=>"RUNNING"!==e.stages.find((e=>e.id===i.id)).status,s={skipRemainingWait:!0};op.confirm({header:"Really skip execution window?",buttonText:"Skip",body:i.context.skipWindowText||`<p>${Mp}</p>`,submitMethod:()=>t.patchExecution(a.id,i.id,s).then((()=>t.waitUntilExecutionMatches(a.id,r))).then((e=>t.updateExecution(n,e)))})};const n=null==(t=e.stage.context.restrictedExecutionWindow)?void 0:t.days;let a="Everyday";n&&n.length>0&&(a=this.replaceDays(n).join(", ")),this.state={dayText:a}}replaceDays(e){const t=new Set(e);return Sp.filter((e=>t.has(e.ordinal))).map((e=>e.label))}render(){const{stage:e}=this.props;return ot.createElement("div",null,ot.createElement("h5",null,"Execution Windows Configuration"),ot.createElement("strong",null,"Stage execution can only run:"),ot.createElement("dl",{className:"dl-narrow dl-horizontal"},m(e,"context.restrictedExecutionWindow.whitelist",[]).map(((e,t)=>ot.createElement("div",{key:t},ot.createElement("dt",null,"From"),ot.createElement("dd",null,or({hours:e.startHour,minutes:e.startMin}),ot.createElement("strong",{style:{display:"inline-block",margin:"0 5px"}}," to "),or({hours:e.endHour,minutes:e.endMin}),ot.createElement("strong",null," ",ot.createElement(tr,null)," "))))),ot.createElement("dt",null,"On"),ot.createElement("dd",null,this.state.dayText)),e.context.skipRemainingWait&&ot.createElement("div",null,ot.createElement("span",null,"(skipped "),e.context.lastModifiedBy&&ot.createElement("span",null," by ",e.context.lastModifiedBy),")"),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:this.finishWaiting},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining window")))}}const Dp=({stage:e,execution:t,application:n})=>{const{conditions:a}=e.outputs;return ot.createElement("div",null,ot.createElement("div",null,a&&a.length>0&&ot.createElement("ul",{className:"nostyle",style:{marginBottom:"10px"}},a.map((({name:e,description:t},n)=>ot.createElement("li",{key:e+n},ot.createElement("b",null,e),": ",t)))),"SKIPPED"===e.context.status&&ot.createElement("span",null,"(skipped after ",ar(e.runningTimeInMs),")")),e.isSuspended&&ot.createElement("div",{className:"action-buttons"},ot.createElement("button",{className:"btn btn-xs btn-primary",onClick:a=>((e,t,n,a)=>{const{executionService:i}=hi;e.target.blur();const r=({stages:e})=>"RUNNING"!==e.find((e=>e.id===t.id)).status,s={status:"SKIPPED"};op.confirm({header:"Really skip wait?",buttonText:"Skip",body:t.context.skipWaitText||"The pipeline will proceed immediately, marking this stage completed.",submitMethod:()=>i.patchExecution(n.id,t.id,s).then((()=>i.waitUntilExecutionMatches(n.id,r))).then((e=>i.updateExecution(a,e)))})})(a,e,t,n)},ot.createElement("span",{style:{marginRight:"5px"},className:"small glyphicon glyphicon-fast-forward"}),"Skip remaining wait")))};class Ip extends ot.Component{constructor(e){super(e),this.mounted=!1,this.hydrate=()=>{const{application:e,execution:t}=this.props;this.requiresHydration()&&t&&hi.executionService.hydrate(e,t).then((()=>{this.mounted&&!this.state.hydrated&&this.setState({hydrated:!0})}))},this.requiresHydration=()=>{const{stage:e}=this.props,{suspendedStageTypes:t}=e;return e.labelComponent!==Ip||["restrictExecutionDuringTimeWindow","waitForCondition"].some((e=>t.has(e)))},this.DefaultLabel=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.labelComponent,i=ot.createElement(Zt,{id:e.id},ot.createElement(a,{application:t,execution:n,stage:e}));return ot.createElement(Xt,{placement:"top",overlay:i},this.props.children)},this.getExecutionWindowTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"restrictExecutionDuringTimeWindow"===e.type));return ot.createElement("div",null,ot.createElement("div",null,ot.createElement("b",null,e.name)," (waiting for execution window)"),ot.createElement(Np,{application:t,execution:n,stage:a}))},this.getWaitForConditionTemplate=()=>{const{stage:e,application:t,execution:n}=this.props,a=e.stages.find((e=>"waitForCondition"===e.type));return ot.createElement("div",null,ot.createElement("p",null,ot.createElement("b",null,e.name)," (waiting until conditions are met)"),"Conditions:",ot.createElement(Dp,{application:t,execution:n,stage:a}))},this.state={hydrated:e.execution&&e.execution.hydrated}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}getRenderableStageName(){const{stage:e}=this.props;let t=e.name?e.name:e.type;const n=hi.$uiRouter.globals.params;if("group"===e.type&&e.groupStages&&e.index===Number(n.stage)){const a=Number(n.subStage);if(!Number.isNaN(a)){const n=e.groupStages[a];n&&(t+=`: ${n.name}`)}}return t}render(){const{stage:e,executionMarker:t}=this.props,{suspendedStageTypes:n}=e,{getExecutionWindowTemplate:a,getWaitForConditionTemplate:i,DefaultLabel:r}=this;if(t){let e=null;return this.requiresHydration()&&!this.state.hydrated?e=ot.createElement(Es,{size:"small"}):n.has("restrictExecutionDuringTimeWindow")?e=a():n.has("waitForCondition")&&(e=i()),e?ot.createElement("span",{onMouseEnter:this.hydrate},ot.createElement(Ks,{template:e},this.props.children)):ot.createElement(r,null)}return ot.createElement("span",null,this.getRenderableStageName())}}const Fp=["RUNNING","SUSPENDED"];class Tp{constructor(e,t){this.item=e,this.updateCallback=t,this.checkStatus()}checkStatus(e=this.item){e&&e!==this.item&&(this.item=e),Fp.includes(this.item.status)||(this.reset(),this.updateCallback(this.item.runningTimeInMs)),Fp.includes(this.item.status)&&!this.updateInterval&&(this.updateInterval=setInterval((()=>this.updateCallback(Date.now()-this.item.startTime)),1e3),this.updateCallback(Date.now()-this.item.startTime))}reset(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=void 0)}}class Qp extends ot.Component{componentWillUnmount(){this.runningTime&&this.runningTime.reset()}componentDidMount(){const{item:e}=this.props,t=(e.tasks||[]).find((e=>"RUNNING"===e.status));t&&(this.runningTime=new Tp(t,(e=>this.setState({runningTimeInMs:e}))))}render(){const{item:e}=this.props;return ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("strong",null,"Task")),ot.createElement("div",{className:"col-md-3 text-right"},ot.createElement("strong",null,"Duration"))),Rc(e.tasks||[]).map(((e,t)=>ot.createElement("div",{key:t,className:"row"},ot.createElement("div",{className:"col-md-9"},ot.createElement("span",{className:"small"},ot.createElement(Pc,{item:e}))," ",yr(e.name)),ot.createElement("div",{className:"col-md-3 text-right"},ar(e.runningTimeInMs)))))))}}function Pp(e){return ot.createElement(Ep,{name:e.name,current:e.current},ot.createElement(Qp,{item:e.stage}))}(Pp||(Pp={})).title="taskStatus";const Rp=({stage:e})=>e.isSuspended||e.suspendedStageTypes.size>0?ot.createElement("span",{className:"far fa-clock sp-margin-xs-right"}):null,Up=e=>ot.createElement("div",{className:null!=e.groupClassName?e.groupClassName:"form-group"},ot.createElement("label",{className:`col-md-${e.labelColumns||3} sm-label-right`},ot.createElement("span",{className:"label-text"},e.label," "),e.helpKey&&ot.createElement(Zs,{id:e.helpKey})),ot.createElement("div",{className:`col-md-${e.fieldColumns||8}`},e.children)),zp=(e,t)=>{const n=e.stages.filter((e=>e.type===t&&"RUNNING"===e.status));if(n.forEach((e=>{e.status="SUSPENDED",e.tasks.forEach((function(e){e.status="SUSPENDED"}))})),n.length>0&&"RUNNING"===e.status){e.stages.some((e=>"RUNNING"===e.status))||(e.status="SUSPENDED")}};class Gp{static convertJsonKeysToBracketedList(e,t=[]){const n=[],a=[],i=[];for(n.push(e);0!==n.length;){const e=n.pop(),r=Object.keys(e),s=i.pop()||"";this.processKeys(r,e,i,s,n,a,t)}return a}static escapeForRegEx(e){return e?e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"):null}static processKeys(e,t,n,a,i,r,s){e.forEach((e=>{const o=isFinite(parseInt(e,10))?`${a}[${parseInt(e,10)}]`:`${a}['${e}']`,l=t[e];j(l)||Array.isArray(l)||s.some((e=>{const t=`['${e}`;return o.substr(0,t.length)===t}))||r.push({leaf:o,value:l}),j(t[e])&&(n.push(o),i.push(t[e]))}))}}class jp{constructor(e,t){this.$q=e,this.executionService=t,this.executionCache={},this.brackets=[{open:"(",close:")"},{open:"[",close:"]"}],this.quotes=[{open:"'",close:"'"},{open:'"',close:'"'}],this.helperFunctions=["alphanumerical","readJson","fromUrl","propertiesFromUrl","jsonFromUrl","judgment","stage","toBoolean","toFloat","toInt","toJson","toBase64","fromBase64","cfServiceKey"],this.helperParams=["execution","parameters","trigger","scmInfo","scmInfo.sha1","scmInfo.branch","deployedServerGroups"],this.codedHelperParams=this.helperParams.map((e=>({name:e,type:"param"}))),this.textcompleteConfig=[{id:"SpEL wrapper",match:/\$(\w*)$/,search:function(e,t){t(["${...}"])},index:1,replace:function(){return["${ "," }"]}},{id:"match quotes",match:/(["'])(\w*)$/,index:1,search:(e,t)=>{t(this.quotes.filter((t=>0===t.open.indexOf(e))))},template:function(){return"'...'"},replace:function(){return["'","'"]}},{id:"match brackets",match:/([[('])(\w*)$/,index:1,search:(e,t)=>{t(this.brackets.filter((t=>0===t.open.indexOf(e))))},template:e=>`${e.open}...${e.close}`,replace:e=>[`${e.open} `,` ${e.close}`]}]}paramInList(e){return t=>e.name===t.name}addToTextcompleteConfig(e,t){const n=t.slice(0);for(const a of e)0===t.filter((e=>e.id===a.id)).length&&n.push(a);return n}listSearchFn(e){return(t,n)=>{n(e.filter((e=>{if(e.leaf.includes(t))return e})))}}leafTemplateFn(e){return`${e.leaf} <span class="glyphicon glyphicon-triangle-right spel-value-separator"/> <span class="marker value"\n title="${e.value}">${e.value.length>90?`${e.value.slice(0,90)}...`:e.value}</span>`}addExecutionForAutocomplete(e,t){if(e){const n=Gp.convertJsonKeysToBracketedList(e,["task"]),a=[{id:`execution: ${e.id}`,match:/execution(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`execution${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addDeployedServerGroupsForAutoComplete(e,t){if(e&&e.context&&e.context.deploymentDetails){const n=Gp.convertJsonKeysToBracketedList(e.context.deploymentDetails),a=[{id:`deploymentServerGroups: ${e.id}`,match:/deployedServerGroups(\w*|\s*)$/,index:1,search:this.listSearchFn(n),template:this.leafTemplateFn,replace:e=>`deployedServerGroups${e.leaf}`}];return this.addToTextcompleteConfig(a,t)}return t}addStageDataForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.map((e=>{const t=Gp.convertJsonKeysToBracketedList(e,["task"]);return{id:`stage config for ${e.name}`,match:new RegExp(`#stage\\(\\s*'${Gp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#stage('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addManualJudgementConfigForAutocomplete(e,t){if(e&&e.stages){const n=e.stages.filter((e=>"manualJudgment"===e.type)).map((e=>{const t=Gp.convertJsonKeysToBracketedList(e);return{id:`judgement config for ${e.name}`,match:new RegExp(`#judgment\\(\\s*'\\s*${Gp.escapeForRegEx(e.name)}'\\s*\\)(.*)$`),index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:t=>`#judgement('${e.name}')${t.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addTriggerConfigForAutocomplete(e,t){if(e&&e.trigger){const n=[e.trigger].map((e=>{const t=Gp.convertJsonKeysToBracketedList(e);return{id:`trigger config: ${e.type}`,match:/trigger(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`trigger${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}addParameterConfigForAutocomplete(e,t){if(e&&e.parameterConfig){const n=[e.parameterConfig].map((e=>{const t=Gp.convertJsonKeysToBracketedList(e);return{id:`parameter config: ${Object.keys(e).join(",")}`,match:/parameters(\w*|\s*)$/,index:1,search:this.listSearchFn(t),template:this.leafTemplateFn,replace:e=>`parameters${e.leaf}`}}));return this.addToTextcompleteConfig(n,t)}return t}hasBuildTriggerOrStage(e,...t){return t.some((t=>e.triggers&&e.triggers.some((e=>e.type===t))||e.stages.some((e=>e.type===t))))}addStageNamesToCodeHelperList(e,t){if(e&&e.stages){let n=this.codedHelperParams.slice(0);const a=e.parameterConfig&&e.parameterConfig.length;n=a?n:n.filter((e=>"parameters"!==e.name)),n=this.hasBuildTriggerOrStage(e,"jenkins","concourse")?n:n.filter((e=>!e.name.includes("scmInfo"))),e.stages.forEach((e=>{const t={name:e.name,type:e.type};0===n.filter(this.paramInList(t)).length&&n.push({name:e.name,type:"stage"})}));const i=[{id:"params",match:/(\s*|\w*)\?(\s*|\w*|')$/,index:2,search:(e,t)=>{t(n.filter((t=>t.name.includes(e)||t.type.includes(e))))},template:e=>`<span class="marker ${e.type}"/> ${e.name}`,replace:e=>`${e.name}`}];return this.addToTextcompleteConfig(i,t)}return t}addHelperFunctionsBasedOnStages(e,t){if(e&&e.stages){let n=this.helperFunctions.slice(0);e.stages.some((e=>"manualJudgment"===e.type))||(n=this.helperFunctions.filter((e=>"judgment"!==e)));e.stages.some((e=>"createServiceKey"===e.type))||(n=this.helperFunctions.filter((e=>"cfServiceKey"!==e)));const a=[{id:"helper functions",match:/#([\w.]*)$/,index:1,search:(e,t)=>{t(n.filter((t=>t.startsWith(e))))},template:e=>`<span class="marker function"/> #${e}`,replace:e=>"toJson"===e?[`#${e}(`,")"]:[`#${e}( '`,"' )"]}];return this.addToTextcompleteConfig(a,t)}return t}getLastExecutionByPipelineConfig(e){return this.executionCache[e.id]?this.$q.when(this.executionCache[e.id]):this.executionService.getLastExecutionForApplicationByConfigId(e.application,e.id).then((t=>t?(this.executionCache[e.id]=t,t):null))}buildTextCompleteConfig(e){return this.addStageNamesToCodeHelperList(e,this.addStageDataForAutocomplete(e,this.addManualJudgementConfigForAutocomplete(e,this.addTriggerConfigForAutocomplete(e,this.addParameterConfigForAutocomplete(e,this.addHelperFunctionsBasedOnStages(e,this.addExecutionForAutocomplete(e,this.addDeployedServerGroupsForAutoComplete(e,this.textcompleteConfig.slice(0)))))))))}addPipelineInfo(e){return e&&e.id?this.getLastExecutionByPipelineConfig(e).then((t=>t||e)).then((e=>this.buildTextCompleteConfig(e))):this.$q.when(this.textcompleteConfig)}}const Lp=class{static addDeploymentTargets(e){const t=[];e.stages.forEach((e=>{const n=Om.pipeline.getStageConfig(e);n&&n.accountExtractor&&t.push(...n.accountExtractor(e))})),e.deploymentTargets=f(t).filter((e=>!!e)).sort()}static siblingStageSorter(e,t){return e.startTime||t.startTime?e.startTime?t.startTime?e.startTime-t.startTime:-1:1:0}static flattenStages(e,t){const n=t;return n.groupStages?(n.groupStages.forEach((t=>this.flattenStages(e,t))),e):(t.before&&t.before.length&&(t.before.sort(((e,t)=>this.siblingStageSorter(e,t))),t.before.forEach((t=>this.flattenStages(e,t)))),t.masterStage?e.push(t.masterStage):e.push(t),t.after&&t.after.length&&(t.after.sort(((e,t)=>this.siblingStageSorter(e,t))),t.after.forEach((t=>this.flattenStages(e,t)))),e)}static flattenAndFilter(e){return this.flattenStages([],e).filter((e=>e.isFailed||!this.hiddenStageTypes.includes(e.type)&&!0!==e.initializationStage))}static getCurrentStages(e){const t=e.stageSummaries.filter((e=>e.isRunning));if(!t.length){const n=e.stageSummaries.find((e=>e.hasNotStarted));n&&t.push(n)}return t}static setMasterStageStartTime(e,t){const n=e.filter((e=>e.startTime)).map((e=>e.startTime));n.length&&(t.startTime=Math.min(...n))}static getCurrentStage(e){const t=e[e.length-1],n=L(e,(e=>e.hasNotStarted)),a=L(e,(e=>e.isFailed)),i=L(e,(e=>e.isRunning)),r=L(e,(e=>e.isCanceled)),s=L(e,(e=>e.isStopped));return i||a||s||r||n||t}static cleanupLockStages(e){const t=(e,t)=>{let n=!1;return t.filter((t=>{if(t.type===e){if(n)return!1;n=!0}return!0}))};return t("releaseLock",t("acquireLock",e).reverse()).reverse()}static transformStage(e){const t=this.cleanupLockStages(this.flattenAndFilter(e));if(t.length){if(e.masterStage){this.setMasterStageStartTime(t,e);const n=this.getCurrentStage(t);e.status=n.status,n.endTime||delete e.endTime;const a=O(t,"endTime");n.endTime&&a.endTime&&(e.endTime=Math.max(n.endTime,a.endTime,e.endTime))}e.stages=t}}static cleanRequisiteStageRefIds(e,t){const{stages:n}=e;n.forEach((e=>{e.context&&e.context.requisiteIds&&(e.context.requisiteIds=f(e.context.requisiteIds)),e.requisiteStageRefIds=f(e.requisiteStageRefIds||[]),e.requisiteStageRefIds=e.requisiteStageRefIds.filter((e=>!!t[e]))}))}static getStagesMappedByRefId(e){const t={};return e.stages.forEach((e=>t[e.refId]=e)),t}static applyPhasesAndLink(e,t){const n=e.stages;let a=!0;n.forEach((e=>{let n=!0,i=0;void 0!==e.phase||e.requisiteStageRefIds.length?(e.requisiteStageRefIds.forEach((e=>{const a=t[e];a&&void 0!==a.phase?i=Math.max(i,a.phase):n=!1})),n?e.phase=i+1:a=!1):e.phase=i})),e.stages=Y(n,"phase","refId"),a||this.applyPhasesAndLink(e,t)}static addStageWidths(e){e.stageWidth=100/e.stageSummaries.length+"%"}static styleStage(e,t){t=t||e;const n=Om.pipeline.getStageConfig(t);n&&(e.labelComponent=n.executionLabelComponent||Ip,e.markerIcon=n.markerIcon||Rp,e.useCustomTooltip=!!n.useCustomTooltip,e.extraLabelLines=n.extraLabelLines)}static findNearestBuildInfo(e){return H(e,"trigger.buildInfo.number")?e.trigger.buildInfo:H(e,"trigger.parentExecution")?this.findNearestBuildInfo(e.trigger.parentExecution):null}static addBuildInfo(e){e.buildInfo=this.findNearestBuildInfo(e),H(e,"trigger.buildInfo.lastBuild.number")&&(e.buildInfo=e.trigger.buildInfo.lastBuild);const t=e.stages.find((e=>"deploy"===e.type)),n=m(t,"context.deploymentDetails")||m(e,"context.deploymentDetails");if(n&&n.length&&n[0].jenkins){const t=n[0].jenkins;e.buildInfo={number:t.number,url:n[0].buildInfoUrl||`${t.host}job/${t.name}/${t.number}`}}}static transformStageSummary(e,t){e.index=t,e.stages=this.flattenAndFilter(e),e.stages.forEach((e=>delete e.stages)),e.masterStageIndex=e.stages.includes(e.masterStage)?e.stages.indexOf(e.masterStage):0,this.filterStages(e),this.setFirstActiveStage(e),this.setSuspendedStageTypes(e),this.transformStage(e),this.styleStage(e),Jc.defineProperties(e),"group"===e.type&&e.groupStages.forEach(((e,t)=>this.transformStageSummary(e,t)))}static filterStages(e){const t=Om.pipeline.getStageConfig(e.masterStage);t&&t.stageFilter&&(e.stages=e.stages.filter((e=>t.stageFilter(e))))}static setSuspendedStageTypes(e){e.suspendedStageTypes=new Set(e.stages.filter((({isSuspended:e})=>e)).map((({type:e})=>e)))}static setFirstActiveStage(e){e.firstActiveStage=0;const t=e.stages||[];t.find((e=>e.isRunning))&&(e.firstActiveStage=t.findIndex((e=>e.isRunning))),t.find((e=>e.isFailed))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed))),t.find((e=>e.isFailed&&!!e.failureMessage))&&(e.firstActiveStage=t.findIndex((e=>e.isFailed&&!!e.failureMessage)))}static transformExecution(e,t){t.trigger&&(t.isStrategy=!1===t.trigger.isPipeline&&"pipeline"===t.trigger.type);const n=this.getStagesMappedByRefId(t);this.cleanRequisiteStageRefIds(t,n),this.applyPhasesAndLink(t,n),Om.pipeline.getExecutionTransformers().forEach((n=>{n.transform(e,t)})),t.context=t.context||{},t.stages.forEach(((e,t)=>{e.before=e.before||[],e.after=e.after||[],e.index=t,Jc.defineProperties(e),e.tasks&&e.tasks.length&&e.tasks.forEach((e=>Jc.addRunningTime(e)))})),t.stages.forEach((e=>{const n=V(t.stages,{id:e.parentStageId});n&&("STAGE_BEFORE"===e.syntheticStageOwner&&n.before.push(e),"STAGE_AFTER"===e.syntheticStageOwner&&n.after.push(e));const a=e.context||{};e.cloudProvider=a.cloudProvider||a.cloudProviderType,a.alias&&(e.alias=a.alias)})),Jc.defineProperties(t),this.processStageSummaries(t),t.graphStatusHash=Lp.calculateGraphStatusHash(t)}static calculateGraphStatusHash(e){return(e.stageSummaries||[]).map((e=>{const t=Om.pipeline.getStageConfig(e);return t&&t.extraLabelLines?[t.extraLabelLines(e),e.status].join("-"):e.status})).join(":")}static calculateRunningTime(e){return()=>{if(e.groupStages.forEach((t=>{t.startTime&&t.startTime<e.startTime&&(e.startTime=t.startTime),t.endTime&&t.endTime>e.endTime&&(e.endTime=t.endTime)})),!e.startTime)return null;const t=Math.max(Date.now(),e.startTime);return(e.endTime||t)-e.startTime}}static processStageSummaries(e){let t=[];e.stages.forEach((e=>{if(!e.syntheticStageOwner&&!this.hiddenStageTypes.includes(e.type)){"RUNNING"===e.status&&e.after.some((e=>"STOPPED"===e.status))&&(e.status="STOPPED");const n=e.context||{},a={after:e.after,before:e.before,cloudProvider:e.cloudProvider,comments:n.comments||null,endTime:e.endTime,group:n.group,id:e.id,index:void 0,graphRowOverride:n.graphRowOverride||0,masterStage:e,name:e.name,refId:e.refId,requisiteStageRefIds:e.requisiteStageRefIds&&"*"===e.requisiteStageRefIds[0]?[]:e.requisiteStageRefIds||[],stages:[],startTime:e.startTime,status:e.status,type:e.type};t.push(a)}}));const n={};t=t.reduce(((e,t)=>{if(!t.group)return e.push(t),e;let a=e.find((e=>"group"===e.type&&e.name===t.group));return a||(a={activeStageType:void 0,after:void 0,before:t.before,cloudProvider:t.cloudProvider,comments:"",endTime:t.endTime,groupStages:[],id:t.group,index:void 0,masterStage:void 0,name:t.group,refId:t.group,requisiteStageRefIds:t.requisiteStageRefIds&&"*"===t.requisiteStageRefIds[0]?[]:t.requisiteStageRefIds||[],stages:[],startTime:t.startTime,status:void 0,type:"group"},e.push(a)),Jc.defineProperties(t),Object.defineProperties(a,{runningTime:{get:()=>ar(this.calculateRunningTime(a)()),configurable:!0},runningTimeInMs:{get:this.calculateRunningTime(a),configurable:!0}}),n[t.refId]=a.refId,a.groupStages.push(t),e}),[]),t.forEach(((e,a)=>{if("group"!==e.type||e.groupStages||(e.groupStages=[]),"group"===e.type)if(1===e.groupStages.length){const i=e.groupStages[0];e=i,t[a]=i,delete n[i.refId]}else if(e.groupStages.length>1){const t=[];e.groupStages.forEach((e=>{e.comments&&t.push(e.comments)})),e.after=e.groupStages[e.groupStages.length-1].after;const n=this.getCurrentStage(e.groupStages);e.activeStageType=n.type,e.status=n.status,this.styleStage(e,n),e.comments=t.join(", ")}e.requisiteStageRefIds=f(e.requisiteStageRefIds.map((e=>n[e]||e)))})),t.forEach(((e,t)=>this.transformStageSummary(e,t))),e.stageSummaries=t,e.currentStages=this.getCurrentStages(e),this.addStageWidths(e),this.addBuildInfo(e),this.addDeploymentTargets(e)}};let Op=Lp;Op.hiddenStageTypes=["initialization","pipelineInitialization","waitForRequisiteCompletion","determineTargetServerGroup"];class Yp{constructor(e){this.cacheProxy=e}setItem(e,t){try{if(e.includes(di.gateUrl)){const e=JSON.parse(t);if(e.value&&Array.isArray(e.value)&&e.value.length>2&&e.value[2]["content-type"]){const t=e.value[2]["content-type"];if(t&&!t.includes("application/json"))return}}window.localStorage.setItem(e,t),this.cacheProxy[e]=t}catch(n){console.warn("Local Storage Error! Clearing caches and trying again.\nException:",n),this.cacheProxy=Object.create(null),window.localStorage.clear(),window.localStorage.setItem(e,t)}}getItem(e){let t;return t=void 0!==this.cacheProxy[e]?this.cacheProxy[e]:window.localStorage.getItem(e),t}removeItem(e){delete this.cacheProxy[e],window.localStorage.removeItem(e)}}const $p=class{static getStoragePrefix(e,t){return`angular-cache.caches.${e}:${t}.`}static buildCacheKey(e,t){let n;return n=e&&t?`${e}:${t}`:e||t,n}static bombCorruptedCache(e,t,n){const a=$p.buildCacheKey(e,t),i=`${$p.getStoragePrefix(a,n)}${a}`;window.localStorage[`${i}.keys`]&&"[]"!==window.localStorage[`${i}.keys`]||Object.keys(window.localStorage).filter((e=>e.includes(i))).forEach((e=>window.localStorage.removeItem(e)))}static clearPreviousVersions(e,t,n,a){if(n){$p.bombCorruptedCache(e,t,n);for(let i=0;i<n;i++){const n=$p.buildCacheKey(e,t);a.exists(n)&&a.get(n).destroy(),a.createCache(n,{storageMode:"localStorage",storagePrefix:$p.getStoragePrefix(n,i)}),a.get(n).removeAll(),a.get(n).destroy()}}}static getStats(e){const t=e.keys();let n=Date.now(),a=0;return t.forEach((t=>{const i=e.info(t)||{};n=Math.min(n,i.created),a=Math.max(a,i.created)})),{ageMax:a||null,ageMin:n||null,keys:t.length}}static createCache(e,t,n){var a;const i=$p.buildCacheKey(e,t),r=n.cacheFactory||this.cacheFactory,s=n.version||1;$p.clearPreviousVersions(e,t,s,r);const o=null!=(a=n.storageMode)?a:"localStorage";r.createCache(i,{deleteOnExpire:"aggressive",maxAge:n.maxAge||bn.fromObject({days:2}).as("milliseconds"),recycleFreq:bn.fromObject({seconds:5}).as("milliseconds"),storageMode:o,storageImpl:"localStorage"===o?new Yp(this.cacheProxy):null,storagePrefix:$p.getStoragePrefix(i,s)});const l=r.get(i);return this.caches[i]=l,l.getStats=$p.getStats.bind(null,this.caches[i]),l.config=n,l}static clearCache(e,t){this.caches[t]&&this.caches[t].destroy&&(this.caches[t].destroy(),this.createCache(e,t,this.caches[t].config))}static getCache(e=null,t=null){return this.caches[$p.buildCacheKey(e,t)]}};let Hp=$p;Hp.cacheFactory=new Mn,Hp.caches=Object.create(null),Hp.cacheProxy=Object.create(null);class Vp{constructor(){this.caches=Object.create(null)}createCache(e,t){return Hp.createCache(this.getNamespace(),e,t),this.caches[e]=Hp.getCache(this.getNamespace(),e),this.caches[e]}get(e){return this.caches[e]}clearCaches(){Object.keys(this.caches).forEach((e=>this.clearCache(e)))}destroyCaches(){this.caches=Object.create(null)}}const Jp=class extends Vp{getNamespace(){return Jp.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.destroy&&(t.destroy(),this.createCache(e,t.config))}};let Wp=Jp;Wp.NAMESPACE="viewStateCache";const Kp=new Wp,qp=class{static removeImmutableFields(e){qp.immutableFields.forEach((t=>delete e[t]))}static clone(e){const t=J(e,(e=>{e&&e.$$hashKey&&delete e.$$hashKey}));return qp.removeImmutableFields(t),t}};let Xp=qp;var Zp,_p;Xp.immutableFields=new Set(["name","application","index","id","$$hashKey"]),(_p=Zp||(Zp={})).Triggers="triggers",_p.Notifications="notifications",_p.ParameterConfig="parameterConfig",_p.ExpectedArtifacts="expectedArtifacts";const ed=class{static createPipelineTemplate(e,t){return{id:pr.generateUuid(),metadata:{description:`A pipeline template derived from pipeline "${e.name}" in application "${e.application}"`,name:pa.random(),owner:t,scopes:["global"]},pipeline:Xp.clone(e),protect:!1,schema:ed.schema,variables:[]}}static isV2PipelineConfig(e){return e.schema===ed.schema}static idForTemplate(e){const{id:t,digest:n=""}=e;return`${t}:${n}`}static getTemplateVersion({digest:e,tag:t,id:n}){return e?`${n}@sha256:${e}`:t?`${n}:${t}`:n}static convertTemplateVersionToId(e){const t=e.split("@");return t.length>1?t[0]:t[0].split(":")[0]}static getPipelineTemplateConfigV2(e){return{schema:ed.schema,template:{artifactAccount:"front50ArtifactCredentials",reference:this.prefixSource(e),type:"front50/pipelineTemplate"},type:"templatedPipeline"}}static prefixSource(e=""){const t="spinnaker://";return e.startsWith(t)?e:`spinnaker://${e}`}static filterInheritedConfig(e){return ed.inheritedKeys.forEach((t=>{if(Array.isArray(e[t])){const n=e[t];e[t]=n.filter((e=>!e.inherited))}})),e}};let td=ed;td.schema="v2",td.inheritedKeys=new Set([Zp.Triggers,Zp.Notifications,Zp.ParameterConfig,Zp.ExpectedArtifacts]);class nd{static buildViewStateCacheKey(e,t){return`${e}:${t}`}static getPipelinesForApplication(e){return Si("/applications").path(e,"pipelineConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getStrategiesForApplication(e){return Si("/applications").path(e,"strategyConfigs").get().then((e=>(e.forEach((e=>e.stages=e.stages||[])),this.sortPipelines(e))))}static getHistory(e,t,n=20){return Si(t?"strategyConfigs":"pipelineConfigs").path(e,"history").query({limit:n}).get()}static deletePipeline(e,t,n){const a=t.strategy?"strategies":"pipelines";return Si(a).path(e,n.trim()).delete()}static savePipeline(e){let t=p(e);delete t.isNew,t.name=t.name.trim(),Array.isArray(t.stages)&&t.stages.forEach((function(e){delete e.isNew,e.name||delete e.name})),td.isV2PipelineConfig(t)&&(t=td.filterInheritedConfig(t));const n=t.strategy?"strategies":"pipelines";return Si(n).query({staleCheck:!0}).post(t)}static reorderPipelines(e,t,n=!1){const a=n?"strategies":"pipelines";return Si("/actions").path(a,"reorder").post({application:e,idsToIndices:t})}static renamePipeline(e,t,n,a){this.configViewStateCache.remove(this.buildViewStateCacheKey(e,n)),t.name=a.trim();const i=t.strategy?"strategies":"pipelines";return Si(i).path(t.id).put(t)}static triggerPipeline(e,t,n={}){return n.user=ri.getAuthenticatedUser().name,Si("/pipelines/v2").path(e,t).post(n).then((e=>e.ref.split("/").pop()))}static getDownstreamStageIds(e,t){let n=[];const a=e.stages.filter((e=>e.requisiteStageRefIds&&e.requisiteStageRefIds.includes(t.refId)));return a.length&&(n=a.map((e=>e.refId)),a.forEach((t=>{n=n.concat(this.getDownstreamStageIds(e,t))}))),f(n)}static getDependencyCandidateStages(e,t){const n=this.getDownstreamStageIds(e,t);return e.stages.filter((e=>t!==e&&e.requisiteStageRefIds&&!n.includes(e.refId)&&t.requisiteStageRefIds&&!t.requisiteStageRefIds.includes(e.refId)))}static getAllUpstreamDependencies(e,t){if(!e||!t)return[];let n=[];return t.requisiteStageRefIds&&t.requisiteStageRefIds.length&&e.stages.forEach((a=>{t.requisiteStageRefIds.includes(a.refId)&&(n.push(a),n=n.concat(this.getAllUpstreamDependencies(e,a)))})),f(n)}static sortPipelines(e){const t=Y(e,["index","name"]),n=[];return t&&t.length&&(t.forEach(((e,t)=>{e.index!==t&&(e.index=t,n.push(this.savePipeline(e)))})),n.length)?Ze.all(n).then((()=>t)):Ze.resolve(t)}}nd.configViewStateCache=Kp.createCache("pipelineConfig",{version:2});class ad{static configureFilterModel(e,t){return t.forEach((e=>e.param=e.param||e.model)),e.config=t,e.groups=[],e.tags=[],e.displayOptions={},e.sortFilter=ad.mapRouterParamsToSortFilter(e,{}),e.addTags=()=>{e.tags=[],t.filter((e=>!e.displayOption)).forEach((t=>this.addTagsForSection(e,t)))},e.clearFilters=()=>{t.forEach((function(t){t.displayOption||(e.sortFilter[t.model]=t.clearValue)}))},e.activate=()=>{},e.applyParamsToUrl=()=>{const t=ad.mapSortFilterToRouterParams(e);hi.$state.go(".",t,{location:"replace"})},e}static mapSortFilterToRouterParams(e){const{sortFilter:t,config:n}=e;return n.reduce(((e,n)=>({...e,[n.param]:t[n.model]})),{})}static mapRouterParamsToSortFilter(e,t){const n={trueKeyObject:{},string:"",boolean:!1,"inverse-boolean":!0};return e.config.reduce(((e,a)=>{const i=n[a.type],r=t[a.param],s=u(r)?i:r;return{...e,[a.model]:p(s)}}),{})}static registerRouterHooks(e,t){const{transitionService:n}=hi.$uiRouter,a=e.config.map((e=>e.param));let i={};n.onSuccess({exiting:t,retained:"**.application"},(e=>{const t=e.params("from");i=W(t,a)})),n.onBefore({entering:t,retained:"**.application"},(e=>{const t=e.params(),n=a.some((e=>!u(t[e]))),r=i,s=a.some((e=>!u(r[e])));return!n&&s?e.targetState().withParams(r):null})),n.onStart({exiting:"**.application"},(()=>{i={}})),n.onBefore({to:t},(t=>{const n=t.params();Object.assign(e.sortFilter,ad.mapRouterParamsToSortFilter(e,n))}))}static isFilterable(e){return K(e)>0&&q(e)}static getCheckValues(e){return X(e,(function(e,t,n){return t&&e.push(n),e}),[]).sort()}static checkAccountFilters(e){return t=>{if(this.isFilterable(e.sortFilter.account)){const n=this.getCheckValues(e.sortFilter.account);return Z(n,t.account)}return!0}}static checkRegionFilters(e){return t=>{if(this.isFilterable(e.sortFilter.region)){const n=this.getCheckValues(e.sortFilter.region);return Z(n,t.region)}return!0}}static checkStackFilters(e){return t=>{if(this.isFilterable(e.sortFilter.stack)){const n=this.getCheckValues(e.sortFilter.stack);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.stack)}return!0}}static checkDetailFilters(e){return t=>{if(this.isFilterable(e.sortFilter.detail)){const n=this.getCheckValues(e.sortFilter.detail);return n.includes("(none)")&&(n.push(""),n.push(null),n.push(void 0)),Z(n,t.detail)}return!0}}static checkStatusFilters(e){return t=>{if(this.isFilterable(e.sortFilter.status)){const n=this.getCheckValues(e.sortFilter.status);return Z(n,"Up")&&0===t.instanceCounts.down||Z(n,"Down")&&t.instanceCounts.down>0||Z(n,"OutOfService")&&t.instanceCounts.outOfService>0||Z(n,"Starting")&&t.instanceCounts.starting>0||Z(n,"Disabled")&&t.isDisabled||Z(n,"Unknown")&&t.instanceCounts.unknown>0}return!0}}static checkProviderFilters(e){return t=>{if(this.isFilterable(e.sortFilter.providerType)){const n=this.getCheckValues(e.sortFilter.providerType);return Z(n,t.type)||Z(n,t.provider)}return!0}}static addTagsForSection(e,t){const n=t.model,a=t.filterLabel||t.model,i=t.filterTranslator||{},r=t.clearValue,s=e.tags,o=e.sortFilter[n];return"trueKeyObject"===t.type?ee(o,((t,r)=>{t&&s.push({key:n,label:a,value:i[r]||r,clear(){delete e.sortFilter[n][r],e.applyParamsToUrl()}})})):null!=o&&""!==o&&!1!==o&&s.push({key:n,label:a,value:i[o]||o,clear(){e.sortFilter[n]=r,e.applyParamsToUrl()}}),s}}const id=e=>{const{heading:t,isCloudProvider:n,name:a,onChange:i,onChangeEvent:r,sortFilterType:s}=e;return ot.createElement("div",{className:"checkbox"},ot.createElement("label",null,ot.createElement("input",{type:"checkbox",checked:Boolean(s&&s[t]),onChange:r||(e=>{const n=e.target,a="checkbox"===n.type?n.checked:n.value;s[t]=Boolean(a),i()}),name:a}),n?ot.createElement(ot.Fragment,null,ot.createElement(up,{provider:"heading",height:"'14px'",width:"'14px'"}),ot.createElement(dp,{provider:t})):t))};oi(".filters-toggle {\n position: absolute;\n}\n.filters-toggle .filters-hidden {\n margin-top: 11px;\n}\n.filters-toggle .filters-open {\n background-color: var(--color-accent-g2);\n height: 32px;\n font-size: 16px;\n margin-top: 6px;\n}\n@media (min-width: 768px) and (max-width: 992px) {\n .filters-toggle .filters-open {\n width: 104px;\n }\n}\n@media (min-width: 992px) {\n .filters-toggle .filters-open {\n width: 124px;\n }\n}\n@media (min-width: 1200px) {\n .filters-toggle .filters-open {\n width: 154px;\n }\n}\n@media (min-width: 1400px) {\n .filters-toggle .filters-open {\n width: 184px;\n }\n}\n@media (min-width: 1600px) {\n .filters-toggle .filters-open {\n width: 214px;\n }\n}\n@media (min-width: 1800px) {\n .filters-toggle .filters-open {\n width: 224px;\n }\n}\n@media (min-width: 2000px) {\n .filters-toggle .filters-open {\n width: 254px;\n }\n}\n.filters-toggle button {\n height: 22px;\n line-height: 12px;\n}\n.filters-toggle .show-filter-text {\n border-left: 1px solid var(--color-accessory-light);\n}\n");class rd extends ot.Component{constructor(){super(...arguments),this.onClick=e=>{hi.insightFilterStateModel.pinFilters(e),qe.$apply(),this.setState({})}}render(){const{filtersExpanded:e}=hi.insightFilterStateModel;return ot.createElement("div",{className:"filters-toggle layer-medium"},!e&&ot.createElement("div",{className:"filters-placeholder filters-hidden"},ot.createElement(Qs,{value:"Show filters"},ot.createElement("button",{className:"btn btn-xs btn-default pin clickable sp-padding-xs",onClick:()=>this.onClick(!0),style:{display:e?"none":"inherit"}},ot.createElement("i",{className:"fa fa-forward"}),ot.createElement("span",{className:"show-filter-text"}," Show filters")))),e&&ot.createElement("div",{className:"filters-placeholder filters-open horizontal middle"},ot.createElement(Qs,{value:"Hide filters"},ot.createElement("button",{className:"btn btn-xs btn-default unpin clickable sp-margin-s-xaxis sp-margin-2xs-yaxis sp-padding-xs",onClick:()=>this.onClick(!1),style:{display:e?"inherit":"none"}},ot.createElement("i",{className:"fa fa-backward"}))),ot.createElement("div",{className:"horizontal center flex-1 sp-margin-xl-right"},"Filters")))}}const sd={securityGroups:{version:4,storageMode:"memory"},healthChecks:{version:2},certificates:{version:2},backendServices:{version:2},addresses:{version:2}},od=class extends Vp{getNamespace(){return od.NAMESPACE}clearCache(e){const t=this.caches[e];t&&t.removeAll&&(t.keys()&&t.keys().forEach((e=>t.remove(e))),t.onReset&&t.onReset.forEach((e=>e())))}createCache(e,t){const n=super.createCache(e,t);return n.onReset=t.onReset,n}};let ld=od;ld.NAMESPACE="infrastructure";const cd=new ld;class pd{static getAllEntityTagsForApplication(e){return Si("/tags").query({maxResults:di.entityTags.maxResults||5e3,application:e}).get().then((e=>this.flattenTagsAndAddMetadata(e)))}static addTagsToServerGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data,n=t.filter((({entityRef:e})=>"servergroup"===e.entityType)),a=t.filter((({entityRef:e})=>"cluster"===e.entityType));e.serverGroups.data.forEach((e=>{e.entityTags=n.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region)),e.clusterEntityTags=a.filter((({entityRef:t})=>!(t.entityId!==e.cluster||"*"!==t.account&&t.account!==e.account||"*"!==t.region&&t.region!==e.region)))}))}static addTagsToServerGroupManagers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"servergroupmanager"===e.entityType));e.serverGroupManagers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToLoadBalancers(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"loadbalancer"===e.entityType));e.loadBalancers.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToFunctions(e){if(!di.feature.entityTags||!di.feature.functions)return;const t=e.entityTags.data.filter((({entityRef:e})=>"function"===e.entityType));e.functions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.functionName&&t.account===e.account&&t.region===e.region))}))}static addTagsToSecurityGroups(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"securitygroup"===e.entityType));e.securityGroups.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.name&&t.account===e.account&&t.region===e.region))}))}static addTagsToExecutions(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"execution"===e.entityType));e.executions.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static addTagsToPipelines(e){if(!di.feature.entityTags)return;const t=e.entityTags.data.filter((({entityRef:e})=>"pipeline"===e.entityType));e.pipelineConfigs.data.forEach((e=>{e.entityTags=t.find((({entityRef:t})=>t.entityId===e.id))}))}static getEntityTagsForId(e,t){return t?Si("/tags").query({entityType:e.toLowerCase(),entityId:t}).get().then((e=>this.flattenTagsAndAddMetadata(e))).catch((()=>Ze.when([]))):Ze.when([])}static flattenTagsAndAddMetadata(e){const t=[];return e.forEach((e=>{e.tags.forEach((t=>this.addTagMetadata(e,t))),e.alerts=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_alert:"))),e.notices=e.tags.filter((e=>e.name.startsWith("spinnaker_ui_notice:"))),e.creationMetadata=e.tags.find((e=>"spinnaker:metadata"===e.name)),t.push(e)})),t}static addTagMetadata(e,t){const n=e.tagsMetadata.find((e=>e.name===t.name));n&&(t.created=n.created,t.createdBy=n.createdBy,t.lastModified=n.lastModified,t.lastModifiedBy=n.lastModifiedBy)}}const dd=class{static parseServerGroupName(e){const t={application:"",stack:"",freeFormDetails:"",cluster:""};if(!e)return t;const n=e.split("-"),a=dd.VERSION_PATTERN.test(n[n.length-1]);return t.application=n[0],a&&n.pop(),n.length>1&&(t.stack=n[1]),n.length>2&&(t.freeFormDetails=n.slice(2,n.length).join("-")),t.cluster=dd.getClusterNameFromServerGroupName(e),t}static parseClusterName(e){return dd.parseServerGroupName(e)}static getClusterName(e,t,n){let a=e;return t&&(a+=`-${t}`),!t&&n&&(a+="-"),n&&(a+=`-${n}`),a}static getClusterNameFromServerGroupName(e){const t=e.split("-");return dd.VERSION_PATTERN.test(t[t.length-1])&&t.pop(),t.join("-")}static getSequence(e){return u(e)?null:`v${b(e.toString(),3,"0")}`}static parseLoadBalancerName(e){const t=e.split("-"),n={application:t[0],stack:"",freeFormDetails:"",cluster:""};return t.length>1&&(n.stack=t[1]),t.length>2&&(n.freeFormDetails=t.slice(2,t.length).join("-")),n.cluster=dd.getClusterName(n.application,n.stack,n.freeFormDetails),n}static parseSecurityGroupName(e){return dd.parseLoadBalancerName(e)}static getMoniker(e,t,n){return te({app:e,stack:t,detail:n})}static getMonikerForInstance(e,t,n){return n.ready().then((()=>{const a=n.getDataSource("serverGroups").data,i=n.getDataSource("loadBalancers").data,r=i.map((e=>e.serverGroups)).reduce(((e,t)=>e.concat(t)),[]),s=[].concat(a).concat(i).concat(r).find((n=>n.cloudProvider===e&&(n.instances||[]).some((e=>e.id===t))));return s&&s.moniker}))}};let ud=dd;ud.VERSION_PATTERN=/(v\d{3})/;class md{static get DEFAULT_PAGE_SIZE(){return 500}static search(e,t=null){const n={...e,...{pageSize:md.DEFAULT_PAGE_SIZE}};let a=Bi.one("search").query(n);return t&&(a=a.useCache(t)),a.get().then((e=>e[0]||{results:[]})).catch((e=>(Xe.error(e.data,e),{results:[]})))}}class gd{constructor(e){this.providerServiceDelegate=e}normalizeSecurityGroup(e){return this.providerServiceDelegate.getDelegate(e.provider||e.type,"securityGroup.transformer").normalizeSecurityGroup(e)}}gd.$inject=["providerServiceDelegate"];n("spinnaker.core.securityGroup.transformer.service",[gp]).service("securityGroupTransformer",gd);const hd=class{constructor(e,t,n,a){this.$log=e,this.$q=t,this.securityGroupTransformer=n,this.providerServiceDelegate=a}static indexSecurityGroups(e){const t={};return e.forEach((e=>{const n=e.account;t[n]={};const a=t[n];ee(e.securityGroups,((e,t)=>{const i={};a[t]=i,e.forEach((e=>{e.accountName=n,e.region=t,i[e.id]=e,i[e.name]=e}))}))})),t}static attachUsageFields(e){e.usages||(e.usages={loadBalancers:[],serverGroups:[]})}static sortUsages(e){e.usages&&(e.usages.serverGroups.sort(((e,t)=>t.name.localeCompare(e.name))),e.usages.loadBalancers.sort(((e,t)=>t.name.localeCompare(e.name))))}resolve(e,t,n){return this.providerServiceDelegate.getDelegate(t.provider||t.type||t.cloudProvider,"securityGroup.reader").resolveIndexedSecurityGroup(e,t,n)}addLoadBalancerSecurityGroups(e){let t=!1;const n=[];return e.getDataSource("loadBalancers").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);hd.attachUsageFields(t),t.usages.loadBalancers.some((e=>e.name===a.name))||t.usages.loadBalancers.push({name:a.name}),n.push(t)}catch(e){this.$log.warn("could not attach firewall to load balancer:",a.name,i,e),t=!0}}))})),n.forEach(hd.sortUsages),{notFoundCaught:t,securityGroups:n}}addNameBasedSecurityGroups(e,t){let n=!1;const a=[];return t.forEach((t=>{try{const n=this.resolve(e.securityGroupsIndex,t,t.id);hd.attachUsageFields(n),a.push(n)}catch(e){this.$log.warn("could not initialize application firewall:",t),n=!0}})),{notFoundCaught:n,securityGroups:a}}addServerGroupSecurityGroups(e){let t=!1;const n=new Set;e.getDataSource("serverGroups").data.forEach((a=>{a.securityGroups&&a.securityGroups.forEach((i=>{try{const t=this.resolve(e.securityGroupsIndex,a,i);if(hd.attachUsageFields(t),!t.usages.serverGroups.some((e=>e.name===a.name))){const{account:e,isDisabled:n,name:i,cloudProvider:r,region:s}=a;t.usages.serverGroups.push({account:e,isDisabled:n,name:i,cloudProvider:r,region:s})}n.add(t)}catch(e){this.$log.warn("could not attach firewall to server group:",a.name,i),t=!0}}))}));const a=Array.from(n);return a.forEach(hd.sortUsages),{notFoundCaught:t,securityGroups:a}}clearCacheAndRetryAttachingSecurityGroups(e,t){return cd.clearCache("securityGroups"),this.loadSecurityGroups().then((n=>(e.securityGroupsIndex=n,this.attachSecurityGroups(e,t,!1))))}addNamePartsToSecurityGroup(e){const t=ud.parseSecurityGroupName(e.name);e.stack=t.stack,e.detail=t.freeFormDetails,e.moniker=ud.getMoniker(t.application,t.stack,t.freeFormDetails)}attachSecurityGroups(e,t,n){let a=[],i=!1;if(t){e.getDataSource("securityGroups").data=[];const n=this.addNameBasedSecurityGroups(e,t);i=n.notFoundCaught,n.notFoundCaught||(a=n.securityGroups)}else a=e.getDataSource("securityGroups").data.filter((e=>!e.usages.serverGroups.length&&!e.usages.loadBalancers.length));if(!i){const t=this.addLoadBalancerSecurityGroups(e);if(i=t.notFoundCaught,!i){a=a.concat(t.securityGroups.filter((e=>!a.includes(e))));const n=this.addServerGroupSecurityGroups(e);i=n.notFoundCaught,i||(a=a.concat(n.securityGroups.filter((e=>!a.includes(e)))))}}return a=f(a),i&&n?(this.$log.warn("Clearing firewall cache and trying again..."),this.clearCacheAndRetryAttachingSecurityGroups(e,t)):(a.forEach((e=>this.addNamePartsToSecurityGroup(e))),this.$q.all(a.map((e=>this.securityGroupTransformer.normalizeSecurityGroup(e)))).then((()=>a)))}getAllSecurityGroups(){const e=cd.get("securityGroups"),t=e?e.get("allGroups"):null;return t?this.$q.resolve(this.decompress(p(t))):(this.getAllSecurityGroupsPromise||(this.getAllSecurityGroupsPromise=Si("/securityGroups").get().then((t=>(e&&e.put("allGroups",this.compress(t)),t))).finally((()=>{delete this.getAllSecurityGroupsPromise}))),this.getAllSecurityGroupsPromise)}compress(e){const t={};return Object.keys(e).forEach((n=>{t[n]={},Object.keys(e[n]).forEach((a=>{if(t[n][a]={},Object.keys(e[n][a]).forEach((t=>{e[n][a][t].forEach((e=>delete e.moniker))})),this.providerServiceDelegate.hasDelegate(a,"securityGroup.transformer")){const i=this.providerServiceDelegate.getDelegate(a,"securityGroup.transformer");i.supportsCompression?Object.keys(e[n][a]).forEach((r=>{t[n][a][r]=i.compress(e[n][a][r])})):t[n][a]=e[n][a]}else t[n][a]=e[n][a]}))})),t}decompress(e){return Object.keys(e).forEach((t=>{Object.keys(e[t]).forEach((n=>{if(this.providerServiceDelegate.hasDelegate(n,"securityGroup.transformer")){const a=this.providerServiceDelegate.getDelegate(n,"securityGroup.transformer");a&&a.supportsCompression&&Object.keys(e[t][n]).forEach((i=>{e[t][n][i]=a.decompress(e[t][n][i])}))}}))})),e}getApplicationSecurityGroup(e,t,n,a){let i=null;return H(e.securityGroupsIndex,[t,n,a])&&(i=e.securityGroupsIndex[t][n][a]),i}getApplicationSecurityGroups(e,t){return this.loadSecurityGroups().then((t=>{e.securityGroupsIndex=t})).then((()=>this.$q.all([e.getDataSource("serverGroups").ready(),e.getDataSource("loadBalancers").ready()]).then((()=>this.attachSecurityGroups(e,t,!0)))))}getSecurityGroupDetails(e,t,n,a,i,r){return Si("/securityGroups").path(t,a,r).query({provider:n,vpcId:i}).get().then((n=>(n&&n.inboundRules&&(n.ipRangeRules=n.inboundRules.filter((e=>e.range)),n.securityGroupRules=n.inboundRules.filter((e=>e.securityGroup)),n.securityGroupRules.forEach((t=>{const a=t.securityGroup;if(!a.name){const t=this.getApplicationSecurityGroup(e,a.accountName,n.region,a.id);t?a.name=t.name:(a.name=a.id,a.inferredName=!0)}}))),di.feature.entityTags&&e.isStandalone?pd.getEntityTagsForId("securitygroup",n.name).then((e=>(n.entityTags=e.find((e=>e.entityRef.entityId===n.name&&e.entityRef.account===t&&e.entityRef.region===a)),n))):n)))}loadSecurityGroups(){return this.getAllSecurityGroups().then((e=>{const t=[];return ee(e,((e,n)=>ee(e,((a,i)=>{ee(a,(e=>{e.forEach((e=>{e.provider=i,e.account=n}))})),t.push({account:n,provider:i,securityGroups:e[i]})})))),hd.indexSecurityGroups(t)}))}loadSecurityGroupsByApplicationName(e){return md.search({q:e,type:"securityGroups",pageSize:1e3}).then((t=>{let n=[];return t&&t.results?n=ne(t.results,{application:e}):this.$log.warn("WARNING: Gate firewall endpoint appears to be down."),n}))}};let fd=hd;fd.$inject=["$log","$q","securityGroupTransformer","providerServiceDelegate"];const vd="spinnaker.core.securityGroup.read.service";n(vd,["spinnaker.core.securityGroup.transformer.service",gp]).service("securityGroupReader",fd);class Ad{constructor(e,t,n){this.$q=e,this.securityGroupReader=t,this.providerServiceDelegate=n,this.cacheConfig=p(sd),this.initializers={securityGroups:[()=>this.securityGroupReader.getAllSecurityGroups()]}}setConfigDefaults(e,t){t.version=t.version||1,t.maxAge=t.maxAge||bn.fromObject({days:2}).as("milliseconds"),t.initializers=t.initializers||this.initializers[e]||[],t.onReset=t.onReset||[i]}extendConfig(){return Object.keys(this.cacheConfig).forEach((e=>{this.setConfigDefaults(e,this.cacheConfig[e])})),Di.listProviders().then((e=>Ni.listRegisteredProviders().forEach((t=>{if(e.includes(t)&&this.providerServiceDelegate.hasDelegate(t,"cache.configurer")){const e=this.providerServiceDelegate.getDelegate(t,"cache.configurer");Object.keys(e).forEach((t=>{this.setConfigDefaults(t,e[t]),this.cacheConfig[t]||(this.cacheConfig[t]=e[t]),this.cacheConfig[t].initializers=f(this.cacheConfig[t].initializers.concat(e[t].initializers)),this.cacheConfig[t].onReset=f(this.cacheConfig[t].onReset.concat(e[t].onReset)),this.cacheConfig[t].version=Math.max(this.cacheConfig[t].version,e[t].version),this.cacheConfig[t].maxAge=Math.min(this.cacheConfig[t].maxAge,e[t].maxAge)}))}}))))}initializeCache(e){if(cd.createCache(e,this.cacheConfig[e]),this.cacheConfig[e].initializers){const t=this.cacheConfig[e].initializers,n=[];return t.forEach((e=>{n.push(e())})),this.$q.all(n)}return this.$q.resolve(void 0)}initialize(){return this.extendConfig().then((()=>{const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.initializeCache(t))})),this.$q.all(e)}))}refreshCache(e){return cd.clearCache(e),this.initializeCache(e)}refreshCaches(){const e=[];return Object.keys(this.cacheConfig).forEach((t=>{e.push(this.refreshCache(t))})),this.$q.all(e)}}Ad.$inject=["$q","securityGroupReader","providerServiceDelegate"];const Ed="spinnaker.core.cache.initializer";n(Ed,[vd]).service("cacheInitializer",Ad);const bd=({clearFilters:e,tags:t,tagCleared:n})=>{const a=(null==t?void 0:t.length)>5,[i,r]=ot.useState(a&&Ss.isExpanded("filterTags")),s=!a||i?t:t.slice(0,5);return ot.createElement("div",{className:"col-md-12 filter-tags"},s&&s.length>0&&ot.createElement("span",null,ot.createElement("span",null,"Filtered by: "),s.map((e=>ot.createElement("span",{className:"filter-tag",key:[e.label,e.value].join(":")},ot.createElement("strong",null,e.label),": ",e.value,ot.createElement("a",{className:"clickable clear-filters",onClick:()=>(e=>{e.clear(),n(),Ui.log({category:"Filter Tags",action:"Individual tag removed"})})(e)},ot.createElement("span",{className:"glyphicon glyphicon-remove-sign"}))))),a&&ot.createElement("span",{className:"filter-toggle",onClick:()=>{Ss.setExpanded("filterTags",!i),r(!i)}},i?"Hide List":`See all ${t.length} current filters`),s.length>1&&ot.createElement("a",{className:"clickable clear-filters",onClick:()=>{e&&e(),Ui.log({category:"Filter Tags",action:"Clear All clicked"})}},"Clear All")))};function yd(e){return function(t,n){const{headings:a,pool:i}=t;return a[n]=A(i).map(n).uniq().compact().value().sort(),function(e,t){if(!t)return;const n=new Set(e);Object.keys(t).forEach((e=>{n.has(e)||delete t[e]}))}(a[n],e[n]),t.pool=function(e,t,n){const a=n[t];if(!Object.keys(te(a,ae)).length)return e;return e.filter((e=>a[e[t]]))}(i,n,e),t}}function wd({pool:e,dependencyOrder:t,sortFilter:n}){return t.reduce(yd(n),{pool:e,headings:{}}).headings}const xd=[{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"account",param:"acct",type:"trueKeyObject"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"category",param:"category",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"instanceType",type:"trueKeyObject",filterLabel:"instance type"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"minInstances",type:"int",filterLabel:"instance count (min)"},{model:"maxInstances",type:"int",filterLabel:"instance count (max)"},{model:"showAllInstances",param:"hideInstances",displayOption:!0,type:"inverse-boolean"},{model:"listInstances",displayOption:!0,type:"boolean"},{model:"instanceSort",displayOption:!0,type:"string",defaultValue:"launchTime"},{model:"multiselect",displayOption:!0,type:"boolean"},{model:"clusters",type:"trueKeyObject"},{model:"labels",type:"trueKeyObject",filterLabel:"label",clearValue:{}}];class Cd{constructor(){this.asFilterModel=ad.configureFilterModel(this,xd),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.clusters.**"),this.asFilterModel.activate()}}function kd(e){return e?X(e,((e,t)=>(e[`${t.key}:${t.value}`]=!0,e)),{}):{}}function Bd(e){return e?X(e,((e,t,n)=>{let[a,i]=n.split(":");return"null"===a&&(a=null),"null"===i&&(i=null),e.concat([{key:a,value:i}])}),[]):[]}var Sd=Object.defineProperty,Md=Object.getOwnPropertyDescriptor;class Nd{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=ad.isFilterable}updateClusterGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterServerGroupsForDisplay(e.getDataSource("serverGroups").data),a=ie(n,"account");ee(a,((n,a)=>{const i=ie(n,"category"),r=[];ee(i,((t,n)=>{const i=ie(t,"cluster");ee(i,((t,i)=>{const s=ie(t,"region"),o=[];ee(s,((e,t)=>{o.push({heading:t,category:n,serverGroups:e,key:`${t}:${n}`,entityTags:(e[0].clusterEntityTags||[]).find((e=>e.entityRef.region===t)),isManaged:!!e[0].isManaged,managedResourceSummary:e[0].managedResourceSummary})}));const l=(e.clusters||[]).find((e=>e.account===a&&e.name===i&&e.category===n));if(l){const e=o.every((({isManaged:e})=>e));r.push({heading:i,category:n,key:`${i}:${n}`,cluster:l,subgroups:Y(o,"heading"),entityTags:(t[0].clusterEntityTags||[]).find((e=>"*"===e.entityRef.region||void 0===e.entityRef.region)),isManaged:e,managedResourceSummary:e?o[0].managedResourceSummary:void 0})}}))})),t.push({heading:a,key:a,subgroups:Y(r,["heading","category"])})})),this.sortGroupsByHeading(t),Vd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.addHealthFlags(),this.groupsUpdatedStream.next(Vd.filterModel.asFilterModel.groups)}clearFilters(){Vd.filterModel.asFilterModel.clearFilters(),Vd.filterModel.asFilterModel.applyParamsToUrl()}shouldShowInstance(e){const t=Vd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!ad.getCheckValues(t.availabilityZone).includes(e.availabilityZone))return!1}if(this.isFilterable(t.status)){const n=ad.getCheckValues(t.status).filter((e=>"Disabled"!==e));return!n.length||(!!t.status.Disabled||n.includes(e.healthState))}return!0}overrideFiltersForUrl(e){if(e.href.includes("/clusters")){Vd.filterModel.asFilterModel.clearFilters();const t=Vd.filterModel.asFilterModel.sortFilter;if(t.filter=e.serverGroup?e.serverGroup:e.cluster?"cluster:"+e.cluster:"",e.account){const n={};n[e.account]=!0,t.account=n}if(e.region){const n={};n[e.region]=!0,t.region=n}if(e.stack){const n={};n[e.stack]=!0,t.stack=n}if(e.detail){const n={};n[e.detail]=!0,t.detail=n}if(e.category){const n={};n[e.category]=!0,t.category=n}hi.$stateParams.application===e.application&&this.updateClusterGroups()}}filterServerGroupsForDisplay(e){const t=e.filter((e=>this.textFilter(e))).filter((e=>this.instanceCountFilter(e))).filter((e=>ad.checkAccountFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkRegionFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStackFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkDetailFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStatusFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>ad.checkProviderFilters(Vd.filterModel.asFilterModel)(e))).filter((e=>this.instanceTypeFilters(e))).filter((e=>this.instanceFilters(e))).filter((e=>this.labelFilters(e)));return this.updateMultiselectInstanceGroups(t),this.updateMultiselectServerGroups(t),t}updateMultiselectInstanceGroups(e){const t=Vd.filterModel.asFilterModel.sortFilter;t.listInstances&&t.multiselect?(Vd.multiselectModel.instanceGroups.forEach((t=>{const n=e.find((e=>e.name===t.serverGroup&&e.region===t.region&&e.account===t.account&&e.type===t.cloudProvider));if(n){const e=n.instances.filter((e=>this.shouldShowInstance(e)));t.selectAll?t.instanceIds=e.map((e=>e.id)):t.instanceIds=e.filter((e=>t.instanceIds.includes(e.id))).map((e=>e.id))}else t.instanceIds.length=0})),Vd.multiselectModel.instancesStream.next(),Vd.multiselectModel.syncNavigation()):Vd.multiselectModel.instanceGroups.length=0}updateMultiselectServerGroups(e){if(Vd.filterModel.asFilterModel.sortFilter.multiselect){if(Vd.multiselectModel.serverGroups.length){const t=e.map((e=>Vd.multiselectModel.makeServerGroupKey(e))),n=[];Vd.multiselectModel.serverGroups.forEach(((e,a)=>{t.includes(e.key)||n.push(a)})),n.reverse().forEach((e=>Vd.multiselectModel.serverGroups.splice(e,1)))}Vd.multiselectModel.serverGroupsStream.next(),Vd.multiselectModel.syncNavigation()}}instanceTypeFilters(e){const t=Vd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.instanceType)){return ad.getCheckValues(t.instanceType).includes(e.instanceType)}return!0}instanceFilters(e){return!this.shouldFilterInstances()||e.instances.some((e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=Vd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.availabilityZone)||this.isFilterable(e.status)&&!e.status.hasOwnProperty("Disabled")}instanceCountFilter(e){let t=!0;const n=Vd.filterModel.asFilterModel.sortFilter;return n.minInstances&&!isNaN(n.minInstances)&&(t=e.instances.length>=n.minInstances),t&&null!==n.maxInstances&&!isNaN(n.maxInstances)&&(t=e.instances.length<=n.maxInstances),t}labelFilters(e){const t=Bd(Vd.filterModel.asFilterModel.sortFilter.labels);return!!re(t)||se(t,(({key:t,value:n})=>null===t||null===n||q(e.labels||{},((e,a)=>t&&t===a&&(n&&n===e)))))}textFilter(e){const t=Vd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();if(!t)return!0;if(t.includes("clusters:")){return t.split("clusters:")[1].replace(/\s/g,"").split(",").includes(e.cluster)}if(t.includes("vpc:")){const n=t.split("vpc:")[1];return e.vpcName.toLowerCase()===n.toLowerCase()}if(t.includes("tag:")){let n=!1;const[,a]=t.split("tag:");let i=null,r=null;return a.includes("=")&&([i,r]=a.split("=")),oe(e.tags||{},((e,t)=>{i?i.toLowerCase()===t.toLowerCase()&&e.toLowerCase().includes(r.toLowerCase())&&(n=!0):e.toLowerCase().includes(a.toLowerCase())&&(n=!0)})),n}if(t.includes("detail:")){const n=t.split("detail:")[1];return e.detail===n.toLowerCase()}if(t.includes("cluster:")){const n=t.split("cluster:")[1];return e.cluster===n}if(t.includes("labels:")){const t=Vd.filterModel.asFilterModel.sortFilter.filter.split("labels:")[1].split(",").map((e=>e.trim()));return se(t,(t=>{let n,a;return t.includes("=")&&([n,a]=t.split("=")),!(!n||!a)&&q(e.labels||{},((e,t)=>n===t&&e===a))}))}return this.addSearchField(e),t.split(" ").every((t=>e.searchField.includes(t)))}addSearchField(e){if(e.searchField)return;let t="";e.buildInfo&&e.buildInfo.jenkins&&(t=["#"+e.buildInfo.jenkins.number,e.buildInfo.jenkins.host,e.buildInfo.jenkins.name].join(" ").toLowerCase()),e.searchField||(e.searchField=[e.region.toLowerCase(),e.name.toLowerCase(),e.account.toLowerCase(),t,(e.loadBalancers||[]).join(" "),(e.instances||[]).map((e=>e.id)).join(" ")].join(" "))}sortGroupsByHeading(e){this.diffSubgroups(Vd.filterModel.asFilterModel.groups,e),Vd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}addHealthFlags(){Vd.filterModel.asFilterModel.groups.forEach((e=>{e.subgroups.forEach((e=>{e.hasDiscovery=e.subgroups.some((e=>this.hasDiscovery(e))),e.hasLoadBalancers=e.subgroups.some((e=>this.hasLoadBalancers(e)))}))}))}hasDiscovery(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"Discovery"===e.type))))))}hasLoadBalancers(e){return e.serverGroups.some((e=>(e.instances||[]).some((e=>(e.health||[]).some((e=>"LoadBalancer"===e.type))))))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.key===e.key));if(i){if(i.hasOwnProperty("subgroups")&&this.diffSubgroups(e.subgroups,i.subgroups),i.hasOwnProperty("cluster")&&(e.cluster=i.cluster,this.diffSubgroups(e.subgroups,i.subgroups)),i.hasOwnProperty("serverGroups")&&this.diffServerGroups(e,i),(e.entityTags||i.entityTags)&&(e.entityTags=i.entityTags),e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged")){const t=e,n=i;t.isManaged=n.isManaged,t.managedResourceSummary=n.managedResourceSummary}}else n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{e.find((e=>e.key===t.key))||e.push(t)}))}diffServerGroups(e,t){if(e.category!==t.category)return;const n=[];e.serverGroups.forEach(((a,i)=>{const r=t.serverGroups.find((e=>e.name===a.name&&e.account===a.account&&e.region===a.region));r?(a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region,a.category),e.serverGroups[i]=r),(a.runningExecutions||r.runningExecutions)&&(a.runningExecutions=r.runningExecutions),(a.runningTasks||r.runningTasks)&&(a.runningTasks=r.runningTasks)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region,a.category),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{e.serverGroups.find((e=>e.name===t.name&&e.account===t.account&&e.region===t.region))||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Md(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Sd(t,n,r)})([da(25)],Nd.prototype,"updateClusterGroups",1);class Dd{constructor(){this.instanceGroups=[],this.instancesStream=new At,this.serverGroups=[],this.serverGroupsStream=new At}syncNavigation(){const{$state:e}=hi;if(!Vd.filterModel.asFilterModel.sortFilter.multiselect&&e.params.multiselect&&e.go(".",{multiselect:null},{inherit:!0}),Vd.filterModel.asFilterModel.sortFilter.multiselect&&!e.params.multiselect&&e.go(".",{multiselect:!0},{inherit:!0}),e.includes("**.multipleInstances")&&!Vd.filterModel.asFilterModel.sortFilter.multiselect)return this.deselectAllInstances(),void e.go("^");if(e.includes("**.multipleServerGroups")&&!Vd.filterModel.asFilterModel.sortFilter.multiselect)return this.clearAllServerGroups(),void e.go("^");const t=this.instanceGroups.reduce(((e,t)=>e+t.instanceIds.length),0);e.includes("**.multipleInstances")&&!t&&e.go("^"),!e.includes("**.multipleInstances")&&t&&(this.isClusterChildState()?e.go("^.multipleInstances"):e.go(".multipleInstances")),!e.includes("**.multipleServerGroups")||this.serverGroups.length?!e.includes("**.multipleServerGroups")&&this.serverGroups.length&&(this.isClusterChildState()?e.go("^.multipleServerGroups"):e.go(".multipleServerGroups")):e.go("^")}deselectAllInstances(){this.instanceGroups.forEach((e=>{e.instanceIds.length=0,e.selectAll=!1}))}clearAllInstanceGroups(){this.instanceGroups.length=0,this.instancesStream.next()}clearAllServerGroups(){this.serverGroups.length=0,this.serverGroupsStream.next()}clearAll(){this.clearAllInstanceGroups(),this.clearAllServerGroups()}getOrCreateInstanceGroup(e){const t=e.name,n=e.account,a=e.region,i=e.type;let r=this.instanceGroups.find((e=>e.serverGroup===t&&e.account===n&&e.region===a&&e.cloudProvider===i));if(!r){const s=hi.$state.params,o=(e.instances||[]).filter((e=>e.provider===s.provider&&e.id===s.instanceId)).map((e=>e.id));r={serverGroup:t,account:n,region:a,cloudProvider:i,instanceIds:o,instances:[],selectAll:!1},this.instanceGroups.push(r)}return r}makeServerGroupKey(e){return[e.type,e.account,e.region,e.name,e.category].join(":")}serverGroupIsSelected(e){if(!this.serverGroups.length)return!1;const t=this.makeServerGroupKey(e);return this.serverGroups.filter((e=>e.key===t)).length>0}toggleServerGroup(e){const{$state:t}=hi;if(!Vd.filterModel.asFilterModel.sortFilter.multiselect){const n={provider:e.type,accountId:e.account,region:e.region,serverGroup:e.name,job:e.name};if(this.isClusterChildState()){if(t.includes("**.serverGroup",n))return;t.go("^."+e.category,n)}else t.go("."+e.category,n);return}this.deselectAllInstances();const n=this.makeServerGroupKey(e),a=this.serverGroups.find((e=>e.key===n));a?this.serverGroups.splice(this.serverGroups.indexOf(a),1):this.serverGroups.push({key:n,account:e.account,region:e.region,provider:e.type,name:e.name,moniker:e.moniker}),this.serverGroupsStream.next(),this.syncNavigation()}toggleInstance(e,t){const{$state:n}=hi;if(!Vd.filterModel.asFilterModel.sortFilter.multiselect){const a={provider:e.type,instanceId:t};if(this.isClusterChildState()){if(n.includes("**.instanceDetails",a))return;n.go("^.instanceDetails",a)}else n.go(".instanceDetails",a);return}this.clearAllServerGroups();const a=this.getOrCreateInstanceGroup(e);a.instanceIds.includes(t)?(a.instanceIds.splice(a.instanceIds.indexOf(t),1),a.selectAll=!1):a.instanceIds.push(t),this.instancesStream.next(),this.syncNavigation()}toggleSelectAll(e,t){const n=this.getOrCreateInstanceGroup(e);n.selectAll=!n.selectAll,n.instanceIds=n.selectAll?t:[],n.selectAll&&this.clearAllServerGroups(),this.instancesStream.next(),this.syncNavigation()}instanceIsSelected(e,t){return this.getOrCreateInstanceGroup(e).instanceIds.includes(t)}isClusterChildState(){return"clusters"!==hi.$state.$current.name.split(".").pop()}}const Id=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"}];class Fd{constructor(){this.asFilterModel=ad.configureFilterModel(this,Id),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.functions.**"),this.asFilterModel.activate()}}var Td=Object.defineProperty,Qd=Object.getOwnPropertyDescriptor;class Pd{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.functionName,e.region.toLowerCase(),e.account].join(" "))}checkSearchTextFilter(e){const t=qd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}filterFunctionsForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>ad.checkAccountFilters(qd.filterModel.asFilterModel)(e))).filter((e=>ad.checkRegionFilters(qd.filterModel.asFilterModel)(e))).filter((e=>ad.checkProviderFilters(qd.filterModel.asFilterModel)(e))).value()}sortGroupsByHeading(){qd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading.localeCompare(t.heading)))}clearFilters(){qd.filterModel.asFilterModel.clearFilters(),qd.filterModel.asFilterModel.applyParamsToUrl()}getFunctionGroups(e){const t=[];return ee(e,((e,n)=>{const a=I(ie(e,"region")).map((e=>e.map((e=>e.functionName)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.functionName}:${e.region}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,functionDef:e})}));const o=`${n}${i[n]&&a?` (${a})`:""}`;s.push({heading:o,subgroups:Y(r,"heading")})})),t.push({heading:n,subgroups:Y(s,"heading")})})),t}updateFunctionGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=this.filterFunctionsForDisplay(e.functions.data),n=ie(t,"account"),a=this.getFunctionGroups(n);qd.filterModel.asFilterModel.groups=a,this.sortGroupsByHeading(),qd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(a)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Qd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Td(t,n,r)})([da(25)],Pd.prototype,"updateFunctionGroups",1);const Rd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"availabilityZone",param:"zone",type:"trueKeyObject",filterLabel:"availability zone"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"loadBalancerType",param:"loadBalancerType",filterLabel:"type",type:"trueKeyObject"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showInstances",displayOption:!0,type:"boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"},{model:"status",type:"trueKeyObject",filterTranslator:{Up:"Healthy",Down:"Unhealthy",OutOfService:"Out of Service"}}];class Ud{constructor(){this.asFilterModel=ad.configureFilterModel(this,Rd),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.loadBalancers.**"),this.asFilterModel.activate()}}var zd=Object.defineProperty,Gd=Object.getOwnPropertyDescriptor;class jd{constructor(){this.groupsUpdatedStream=new At,this.isFilterable=ad.isFilterable,this.getCheckValues=ad.getCheckValues}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.region.toLowerCase(),e.account,F(e.serverGroups,"name").join(" "),F(e.instances,"id").join(" ")].join(" "))}checkSearchTextFilter(e){const t=Wd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}checkLoadBalancerTypeFilters(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.loadBalancerType)){return!!this.getCheckValues(t.loadBalancerType).includes(e.loadBalancerType)}return!0}filterLoadBalancersForDisplay(e){return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>this.checkLoadBalancerTypeFilters(e))).filter((e=>ad.checkAccountFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkRegionFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStackFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkDetailFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkStatusFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>ad.checkProviderFilters(Wd.filterModel.asFilterModel)(e))).filter((e=>this.instanceFilters(e))).value()}instanceFilters(e){return!this.shouldFilterInstances()||q(e.instances,(e=>this.shouldShowInstance(e)))}shouldFilterInstances(){const e=Wd.filterModel.asFilterModel.sortFilter;return this.isFilterable(e.status)||this.isFilterable(e.availabilityZone)}shouldShowInstance(e){const t=Wd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.availabilityZone)){if(!this.getCheckValues(t.availabilityZone).includes(e.zone))return!1}if(this.isFilterable(t.status)){const n=this.getCheckValues(t.status),a=M(n,"Disabled");return!a.length||Z(a,e.healthState)}return!0}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=V(t,{heading:e.heading});i?(i.loadBalancer&&(e.loadBalancer=i.loadBalancer),i.serverGroups&&this.diffServerGroups(e,i),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}diffServerGroups(e,t){const n=[];e.serverGroups.forEach(((a,i)=>{a.stringVal=a.stringVal||JSON.stringify(a,this.jsonReplacer);const r=V(t.serverGroups,{name:a.name,account:a.account,region:a.region});r?(r.stringVal=r.stringVal||JSON.stringify(r,this.jsonReplacer),a.stringVal!==r.stringVal&&(Xe.debug("change detected, updating server group:",a.name,a.account,a.region),e.serverGroups[i]=r)):(Xe.debug("server group no longer found, removing:",a.name,a.account,a.region),n.push(i))})),n.reverse().forEach((t=>{e.serverGroups.splice(t,1)})),t.serverGroups.forEach((t=>{V(e.serverGroups,{name:t.name,account:t.account,region:t.region})||(Xe.debug("new server group found, adding",t.name,t.account,t.region),e.serverGroups.push(t))}))}sortGroupsByHeading(e){this.diffSubgroups(Wd.filterModel.asFilterModel.groups,e),Wd.filterModel.asFilterModel.groups.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}clearFilters(){Wd.filterModel.asFilterModel.clearFilters(),Wd.filterModel.asFilterModel.applyParamsToUrl()}filterServerGroups(e){return this.shouldFilterInstances()?e.serverGroups.filter((e=>e.instances.some((e=>this.shouldShowInstance(e))))):e.serverGroups}jsonReplacer(e,t){return"string"==typeof e&&"$"===e.charAt(0)&&"$"===e.charAt(1)&&(t=void 0),t}updateLoadBalancerGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterLoadBalancersForDisplay(e.loadBalancers.data),a=ie(n,"account");ee(a,((e,n)=>{const a=I(ie(e,"loadBalancerType")).map((e=>e.map((e=>e.name)))),i=a.length>1?h(...a).reduce(((e,t)=>(e[t]=!0,e)),{}):{},r=ie(e,(e=>`${e.name}:${e.loadBalancerType}`)),s=[];ee(r,((e,t)=>{const[n,a]=t.split(":"),r=[];e.forEach((e=>{r.push({heading:e.region,loadBalancer:e,serverGroups:this.filterServerGroups(e),isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const o=`${n}${i[n]&&a?` (${a})`:""}`,l=r.every((({isManaged:e})=>e));s.push({heading:o,subgroups:Y(r,"heading"),isManaged:l,managedResourceSummary:l?r[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(s,"heading")})})),this.sortGroupsByHeading(t),Wd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Gd(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&zd(t,n,r)})([da(25)],jd.prototype,"updateLoadBalancerGroups",1);const Ld=[{model:"awaitingJudgement",type:"boolean",clearValue:!1},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"pipeline",param:"pipeline",type:"trueKeyObject",clearValue:{}},{model:"status",type:"trueKeyObject",clearValue:{}},{model:"tags",type:"trueKeyObject",clearValue:{}}];class Od{constructor(){this.expandSubject=new At;const{transitionService:e}=hi.$uiRouter;this.configViewStateCache=Kp.createCache("executionFilters",{version:2,maxAge:24*di.maxPipelineAgeDays*60*60*1e3}),this.asFilterModel=ad.configureFilterModel(this,Ld),ad.registerRouterHooks(this.asFilterModel,"**.application.pipelines.executions.**"),this.asFilterModel.activate(),e.onBefore({entering:e=>!(!e.self.name.match(".application.pipelines.executions$")&&!e.self.name.match(".application.pipelines.executionDetails.execution$"))},(e=>{this.mostRecentApplication=e.params().application,this.assignViewStateFromCache()})),Object.defineProperty(this.asFilterModel.sortFilter,"count",{get:()=>this.groupCount,set:e=>{this.groupCount=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"groupBy",{get:()=>this.groupBy,set:e=>{this.groupBy=e,this.cacheConfigViewState()}}),Object.defineProperty(this.asFilterModel.sortFilter,"showDurations",{get:()=>this.showDurations,set:e=>{this.showDurations=e,this.cacheConfigViewState()}}),this.asFilterModel.activate()}assignViewStateFromCache(){const e=this.getCachedViewState();this.groupCount=e.count,this.groupBy=e.groupBy,this.showDurations=e.showDurations}getCachedViewState(e){e=e||this.mostRecentApplication||"#global";const t=this.configViewStateCache.get(e)||{},n=this.configViewStateCache.get("#global")||{};return this.configViewStateCache.touch(e),le({count:2,groupBy:"name",showDurations:!0},t,null!=n.showDurations?{showDurations:n.showDurations}:void 0)}cacheConfigViewState(){const e=this.getCachedViewState();e.showDurations=this.showDurations,Object.keys(this.asFilterModel.sortFilter.pipeline).length||(e.count=this.groupCount,e.groupBy=this.groupBy);const t=this.mostRecentApplication||"#global";if(this.configViewStateCache.put(t,e),"#global"!==t){const e=this.getCachedViewState("#global");e.showDurations=this.showDurations,this.configViewStateCache.put("#global",e)}}}const Yd=[{model:"account",param:"acct",type:"trueKeyObject"},{model:"detail",param:"detail",type:"trueKeyObject"},{model:"filter",param:"q",clearValue:"",type:"string",filterLabel:"search"},{model:"providerType",type:"trueKeyObject",filterLabel:"provider"},{model:"region",param:"reg",type:"trueKeyObject"},{model:"showLoadBalancers",param:"hideLoadBalancers",displayOption:!0,type:"inverse-boolean"},{model:"showServerGroups",param:"hideServerGroups",displayOption:!0,type:"inverse-boolean"},{model:"stack",param:"stack",type:"trueKeyObject"}];class $d{constructor(){this.asFilterModel=ad.configureFilterModel(this,Yd),ad.registerRouterHooks(this.asFilterModel,"**.application.insight.firewalls.**"),this.asFilterModel.activate()}}n("spinnaker.core.securityGroup.filter.model",[]).service("securityGroupFilterModel",$d);class Hd{constructor(){this.groupsUpdatedStream=new At}addSearchFields(e){e.searchField||(e.searchField=[e.name,e.id,e.accountName,e.region,e.vpcName,e.vpcId,F(e.usages.serverGroups,"name").join(" "),F(e.usages.loadBalancers,"name").join(" ")].join(" "))}checkSearchTextFilter(e){const t=Kd.filterModel.asFilterModel.sortFilter.filter;if(!t)return!0;if(t.includes("vpc:")){const[,n]=/vpc:([\w-]*)/.exec(t);return e.vpcName.toLowerCase()===n.toLowerCase()}return this.addSearchFields(e),t.split(" ").every((t=>e.searchField.includes(t)))}clearFilters(){Kd.filterModel.asFilterModel.clearFilters(),Kd.filterModel.asFilterModel.applyParamsToUrl()}filterSecurityGroupsForDisplay(e){const t=ad,n=Kd.filterModel.asFilterModel;return A(e).filter((e=>this.checkSearchTextFilter(e))).filter((e=>t.checkAccountFilters(n)(e))).filter((e=>t.checkRegionFilters(n)(e))).filter((e=>t.checkStackFilters(n)(e))).filter((e=>t.checkDetailFilters(n)(e))).filter((e=>t.checkProviderFilters(n)(e))).value()}sortGroupsByHeading(e){const t=Kd.filterModel.asFilterModel.groups;this.diffSubgroups(t,e),t.sort(((e,t)=>e.heading<t.heading?-1:e.heading>t.heading?1:0))}diffSubgroups(e,t){const n=[];e.forEach(((e,a)=>{const i=(t||[]).find((t=>t.heading===e.heading&&t.vpcName===e.vpcName));i?(i.securityGroup&&(e.securityGroup=i.securityGroup),i.subgroups&&this.diffSubgroups(e.subgroups,i.subgroups),(e.hasOwnProperty("isManaged")||i.hasOwnProperty("isManaged"))&&(e.isManaged=i.isManaged,e.managedResourceSummary=i.managedResourceSummary)):n.push(a)})),n.reverse().forEach((t=>{e.splice(t,1)})),t.forEach((t=>{V(e,{heading:t.heading})||e.push(t)}))}updateSecurityGroups(e){if(!e&&(e=this.lastApplication,!this.lastApplication))return null;const t=[],n=this.filterSecurityGroupsForDisplay(e.securityGroups.data),a=ie(n,"account");ee(a,((e,n)=>{const a=ie(e,"name"),i=[];ee(a,((e,t)=>{const n=[];e.forEach((e=>{const t=e.vpcName?`${e.region} (${e.vpcName})`:e.region;n.push({heading:t,vpcName:e.vpcName,securityGroup:e,isManaged:!!e.isManaged,managedResourceSummary:e.managedResourceSummary})}));const a=n.every((({isManaged:e})=>e));i.push({heading:t,subgroups:Y(n,["heading","vpcName"]),isManaged:a,managedResourceSummary:a?n[0].managedResourceSummary:void 0})})),t.push({heading:n,subgroups:Y(i,"heading")})})),this.sortGroupsByHeading(t),Kd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(t)}}const Vd={},Jd={},Wd={},Kd={},qd={};function Xd(){Vd.filterModel=new Cd,Vd.filterService=new Nd,Vd.multiselectModel=new Dd,Jd.filterModel=new Od,Wd.filterModel=new Ud,Wd.filterService=new jd,qd.filterModel=new Fd,qd.filterService=new Pd,Kd.filterModel=new $d,Kd.filterService=new Hd,di.checkForUpdates&&to.initialize()}var Zd=Object.defineProperty,_d=Object.getOwnPropertyDescriptor;const eu=[{name:"Today",after:()=>En.local().startOf("day").toMillis()},{name:"Yesterday",after:()=>En.local().startOf("day").minus(bn.fromObject({days:1})).toMillis()},{name:"This Week",after:()=>En.local().startOf("week").toMillis()},{name:"Last Week",after:()=>En.local().startOf("week").minus(bn.fromObject({weeks:1})).toMillis()},{name:"Last Month",after:()=>En.local().startOf("month").toMillis()},{name:"This Year",after:()=>En.local().startOf("year").toMillis()},{name:"Prior Years",after:()=>0}];class tu{static groupByTimeBoundary(e){return ie(e,(e=>eu.find((t=>(e.startTime||e.buildTime)>t.after())).name))}static updateExecutionGroups(e=this.lastApplication){if(!e)return null;(e.executions.data||[]).forEach((t=>this.fixName(t,e)));const t=this.filterExecutionsForDisplay(e.executions.data,e),n=this.groupExecutions(t,e);this.applyGroupsToModel(n),Jd.filterModel.asFilterModel.addTags(),this.lastApplication=e,this.groupsUpdatedStream.next(n)}static doesPipelineMatchCheckedTags(e,t){if(0===t.length||!e.tags||0===e.tags.length)return!1;const n=t.map((e=>e.split(":").map(decodeURIComponent))).map((([e,t])=>({name:e,value:t}))),a=ie(n,"name");return Object.keys(a).every((t=>{const n=a[t].map((e=>e.value)),i=(e.tags||[]).filter((e=>e.name===t)).map((e=>e.value));return n.some((e=>i.includes(e)))}))}static tagsFilter(e,t){const n=Jd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(n.tags)){const a=t.pipelineConfigs.data.filter((e=>this.doesPipelineMatchCheckedTags(e,ad.getCheckValues(n.tags))));return Z(a.map((e=>e.id)),e.pipelineConfigId)}return!0}static pipelineNameFilter(e){const t=Jd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.pipeline)){const n=ad.getCheckValues(t.pipeline);return Z(n,e.name)}return!0}static getValuesAsString(e,t=[]){return"string"==typeof e?e:"number"==typeof e?""+e:e instanceof Array?e.map((e=>this.getValuesAsString(e,t))).join(" "):e instanceof Object?Object.keys(e).map((n=>t.includes(n)?"":this.getValuesAsString(e[n],t))).join(" "):""}static addSearchText(e){if(e.searchField)return;const t=[e.name];t.push(e.id),t.push(this.getValuesAsString(e.trigger,["parentExecution"])),e.searchField=t.join(" ").toLowerCase()}static textFilter(e){const t=Jd.filterModel.asFilterModel.sortFilter.filter.toLowerCase();return!t||(this.addSearchText(e),e.searchField.includes(t))}static statusFilter(e){const t=Jd.filterModel.asFilterModel.sortFilter;if(this.isFilterable(t.status)){const n=ad.getCheckValues(t.status);return Z(n,e.status)}return!0}static awaitingJudgementFilter(e){return!Jd.filterModel.asFilterModel.sortFilter.awaitingJudgement||e.stages.some((({type:e,status:t})=>"manualJudgment"===e&&"RUNNING"===t))}static filterExecutionsForDisplay(e,t){return A(e).filter((e=>this.textFilter(e))).filter((e=>this.tagsFilter(e,t))).filter((e=>this.pipelineNameFilter(e))).filter((e=>this.statusFilter(e))).filter((e=>this.awaitingJudgementFilter(e))).value()}static addEmptyPipelines(e,t){const n=(t.pipelineConfigs.data||[]).concat(t.strategyConfigs.data||[]),a=Jd.filterModel.asFilterModel.sortFilter,i={};e.forEach((e=>i[e.heading]=!0));let r=[];r=this.isFilterable(a.pipeline)||this.isFilterable(a.status)||a.filter||this.isFilterable(a.tags)?n.filter((e=>{const t=(a.filter||"").toLowerCase().includes(e.name.toLowerCase()),n=this.doesPipelineMatchCheckedTags(e,ad.getCheckValues(a.tags));return!i[e.name]&&(a.pipeline[e.name]||t||n)})):n.filter((e=>!i[e.name])),r.forEach((t=>{e.push({heading:t.name,config:t,executions:[],targetAccounts:this.extractAccounts(t),fromTemplate:t&&"templatedPipeline"===t.type||!1})}))}static extractAccounts(e){if(!e)return[];const t=[];return(e.stages||[]).forEach((e=>{const n=Om.pipeline.getStageConfig(e);n&&n.configAccountExtractor&&t.push(...n.configAccountExtractor(e))})),f(ce(t)).filter((e=>!e.includes("${")))}static fixName(e,t){const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));n&&(e.name=n.name)}static groupExecutions(e,t){const n=[];let a=[];ee(ie(e,"name"),(e=>{a=a.concat(e.sort(((e,t)=>this.executionSorter(e,t))))})),a.forEach((e=>{const n=t.pipelineConfigs.data.find((t=>t.id===e.pipelineConfigId));null!=n&&"templatedPipeline"===n.type&&(e.fromTemplate=!0)}));const i=Jd.filterModel.asFilterModel.sortFilter;if("name"===i.groupBy){const e=ie(a,"name");ee(e,((e,a)=>{var i,r;const s=t.pipelineConfigs.data.concat(null!=(r=null==(i=t.strategyConfigs)?void 0:i.data)?r:[]).find((t=>t.id===e[0].pipelineConfigId));e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:a,config:s||null,executions:e,runningExecutions:e.filter((e=>e.isActive)),targetAccounts:this.extractAccounts(s),fromTemplate:s&&"templatedPipeline"===s.type||!1})})),this.addEmptyPipelines(n,t)}if("timeBoundary"===i.groupBy){const e=this.groupByTimeBoundary(a);ee(e,((e,t)=>{e.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:t,config:null,executions:e,runningExecutions:e.filter((e=>e.isActive))})}))}return"none"===i.groupBy&&(a.sort(((e,t)=>this.executionSorter(e,t))),n.push({heading:"",executions:a,runningExecutions:[]})),n}static diffExecutionGroups(e,t){const n=[];return t.forEach((t=>{const a=e.find((e=>e.heading===t.heading));a?this.executionsAreDifferent(a,t)?n.push(t):n.push(a):n.push(t)})),e.forEach((e=>e.executions.sort(((e,t)=>this.executionSorter(e,t))))),n}static executionsAreDifferent(e,t){let n=!1;return e.executions.forEach((e=>{const a=t.executions.find((t=>t.id===e.id));a?e.stringVal!==a.stringVal&&(n=!0,Xe.debug("change detected, updating execution:",e.id)):(n=!0,Xe.debug("execution no longer found, removing:",e.id))})),t.executions.forEach((t=>{e.executions.find((e=>e.id===t.id))||(n=!0,Xe.debug("new execution found, adding",t.id),e.executions.push(t))})),n}static applyGroupsToModel(e){const t=Jd.filterModel.asFilterModel;t.groups=this.diffExecutionGroups(t.groups,e).sort(((e,t)=>this.executionGroupSorter(e,t)))}static executionGroupSorter(e,t){return"timeBoundary"===Jd.filterModel.asFilterModel.sortFilter.groupBy?(t.executions[0].startTime||t.executions[0].buildTime)-(e.executions[0].startTime||e.executions[0].buildTime):e.config&&t.config?e.config.strategy===t.config.strategy?e.config.index-t.config.index:e.config.strategy?1:-1:e.config?-1:t.config?1:e.heading<t.heading?-1:e.heading>t.heading?1:0}static executionSorter(e,t){return e.isActive&&t.isActive?t.startTime-e.startTime:e.isActive?-1:t.isActive?1:e.endTime||t.endTime?e.endTime?t.endTime?t.startTime-e.startTime:1:-1:t.buildTime-e.buildTime}static clearFilters(){Jd.filterModel.asFilterModel.clearFilters(),Jd.filterModel.asFilterModel.applyParamsToUrl()}}tu.groupsUpdatedStream=new At,tu.lastApplication=null,tu.isFilterable=ad.isFilterable,((e,t,n,a)=>{for(var i,r=a>1?void 0:a?_d(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);a&&r&&Zd(t,n,r)})([da(25)],tu,"updateExecutionGroups",1);class nu{constructor(e,t,n){this.$q=e,this.$state=t,this.$timeout=n,this.runningLimit=di.maxRunningExecutionsToRetrieve||30,this.ignoredStringValFields=["asg","commits","history","hydrator","hydrated","instances","requisiteIds","requisiteStageRefIds","$$hashKey"]}get activeStatuses(){return["RUNNING","SUSPENDED","PAUSED","NOT_STARTED"]}getRunningExecutions(e){return this.getFilteredExecutions(e,this.activeStatuses,this.runningLimit,null,!0)}getFilteredExecutions(e,t,n,a=null,i=!1){const r=t.map((e=>e.toUpperCase())).join(",")||null;return(a?Si("/executions").query({limit:n,pipelineConfigIds:a,statuses:t}).get():Si("/applications").path(e,"pipelines").query({limit:n,statuses:r,pipelineConfigIds:a,expand:i}).get()).then((e=>e?(e.forEach((e=>(e.hydrated=i,this.cleanExecutionForDiffing(e)))),e):[]))}getExecutions(e,t=null,n=!1){const a=Jd.filterModel.asFilterModel.sortFilter,i=ad.getCheckValues(a.tags),r=Object.keys(a.pipeline),s=Object.keys(te(a.status||{},ae)),o=a.count;return t&&(r.length||i.length)?this.getConfigIdsFromFilterModel(t).then((e=>this.getFilteredExecutions(t.name,s,o,e,n))):this.getFilteredExecutions(e,s,o,null,n)}getExecution(e,t=[]){return Si("/pipelines").path(e).get().then((e=>{const{application:n,name:a}=e;if(e.hydrated=!0,this.cleanExecutionForDiffing(e),n&&a){const i=t.find((t=>t.id===e.pipelineConfigId));return i?(e.pipelineConfig=i,Promise.resolve(e)):Si("/applications").path(n,"pipelineConfigs",a).get().then((t=>(e.pipelineConfig=t,e))).catch((()=>e))}return e}))}transformExecutions(e,t,n=[]){t&&t.length&&t.forEach((t=>{const a=this.stringifyExecution(t),i=n.find((e=>e.id===t.id));i&&i.stringVal&&i.stringVal===a||(t.stringVal=a,Op.transformExecution(e,t))}))}getConfigIdsFromFilterModel(e){const t=Jd.filterModel.asFilterModel.sortFilter,n=ad.getCheckValues(t.tags),a=Object.keys(t.pipeline);return e.pipelineConfigs.activate(),e.pipelineConfigs.ready().then((()=>{const t=e.pipelineConfigs.data.concat(e.strategyConfigs.data),i=a.map((e=>{const n=t.find((t=>t.name===e));return n?n.id:null})).filter((e=>!!e)),r=t.filter((e=>tu.doesPipelineMatchCheckedTags(e,n))).map((e=>e.id));return i.concat(f(r))}))}cleanExecutionForDiffing(e){(e.stages||[]).forEach((e=>this.removeInstances(e)))}toggleDetails(e,t,n){const a=this.$state.current.name.endsWith(".executionDetails.execution");if(e.id===this.$state.params.executionId&&this.$state.current.name.includes(".execution")&&void 0===t)return void this.$state.go("^");const i=t||0;let r=m(e,["stageSummaries",i]);if(r&&"group"===r.type){if(void 0===n)return;r=m(r,["groupStages",n])}r=r||{firstActiveStage:0};const s={executionId:e.id,stage:i,subStage:n,step:r.firstActiveStage};if(void 0===n&&"group"===r.type)return s.stage=null,void(s.step=null);this.$state.includes("**.execution",s)?a||this.$state.go("^"):this.$state.current.name.endsWith(".execution")||a?this.$state.go(".",s):this.$state.go(".execution",s)}removeInstances(e){e.context&&(delete e.context.instances,delete e.context.asg,e.context.targetReferences&&e.context.targetReferences.forEach((e=>{delete e.instances,delete e.asg})))}startAndMonitorPipeline(e,t,n){const{executionService:a}=hi;return nd.triggerPipeline(e.name,t,n).then((t=>a.waitUntilTriggeredPipelineAppears(e,t)))}waitUntilTriggeredPipelineAppears(e,t){return((e,t=1e3,n=0)=>{let a,i=0;const r=()=>(i++,0===n||i<=n?e().catch((()=>(a=_e(r,t),a))):e());return{promise:r(),cancel:()=>{a&&_e.cancel(a)}}})((()=>this.getExecution(t).then((()=>e.executions.refresh()))),1e3,10)}waitUntilPipelineIsCancelled(e,t){return this.waitUntilExecutionMatches(t,(e=>"CANCELED"===e.status)).then((()=>e.executions.refresh()))}waitUntilPipelineIsDeleted(e,t){const n=this.$q.defer();return this.getExecution(t).then((()=>this.$timeout((()=>this.waitUntilPipelineIsDeleted(e,t).then(n.resolve)),1e3)),(()=>n.resolve())),n.promise.then((()=>e.executions.refresh())),n.promise}cancelExecution(e,t,n,a){return Si("/pipelines").path(t,"cancel").query({force:n,reason:a}).put().then((()=>this.waitUntilPipelineIsCancelled(e,t))).catch((e=>{throw e&&e.data?e.message:null}))}pauseExecution(e,t){return Si("/pipelines").path(t,"pause").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"PAUSED"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}resumeExecution(e,t){return Si("/pipelines").path(t,"resume").put().then((()=>this.waitUntilExecutionMatches(t,(e=>"RUNNING"===e.status)))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}deleteExecution(e,t){return Si("/pipelines").path(t).delete().then((()=>this.waitUntilPipelineIsDeleted(e,t))).then((()=>e.executions.refresh())).catch((e=>{throw e&&e.data?e.message:null}))}waitUntilExecutionMatches(e,t){return this.getExecution(e).then((n=>t(n)?n:this.$timeout((()=>this.waitUntilExecutionMatches(e,t)),1e3)))}getSectionCacheKey(e,t,n){return["pipeline",e,t,n].join("#")}getProjectExecutions(e,t=1){return Si("/projects").path(e,"pipelines").query({limit:t}).get().then((e=>e&&e.length?(e.forEach((e=>Op.transformExecution({},e))),e.sort(((e,t)=>t.startTime-(e.startTime||Date.now())))):[]))}addExecutionsToApplication(e,t=[]){if(e.executions.data&&e.executions.data.length&&t.length){const n=e.executions.data,a=e.runningExecutions.data,i=[];return n.forEach(((n,r)=>{const s=t.find((e=>e.id===n.id)),o=a.find((e=>e.id===n.id));s&&n.stringVal&&s.stringVal&&n.stringVal!==s.stringVal&&(n.status!==s.status||n.hydrated===s.hydrated)&&(e.executions.data[r]=s),s||o||i.push(r)})),i.reverse().forEach((e=>n.splice(e,1))),t.forEach((e=>{n.filter((t=>t.id===e.id)).length||n.push(e)})),[...n]}return t}mergeRunningExecutionsIntoExecutions(e){let t=!1;e.runningExecutions.data.forEach((n=>{const a=e.executions.data.findIndex((e=>e.id===n.id));if(-1!==a){const i=e.executions.data[a].stringVal;n.stringVal!==i&&(t=!0,e.executions.data[a]=n)}else t=!0,e.executions.data.push(n)})),e.executions.data.forEach((t=>{var n;t.isActive&&e.runningExecutions.data.every((e=>e.id!==t.id))&&this.getExecution(t.id,null==(n=e.pipelineConfigs)?void 0:n.data).then((t=>{this.updateExecution(e,t)}))})),t&&!e.executions.reloadingForFilters&&e.executions.dataUpdated()}removeCompletedExecutionsFromRunningData(e){const t=e.executions.data,n=e.runningExecutions.data;t.forEach((e=>{const t=n.findIndex((t=>e.id===t.id));-1===t||e.isActive||n.splice(t,1)})),e.runningExecutions.dataUpdated()}updateExecution(e,t,n=e.executions){n.data&&n.data.length&&n.data.forEach(((a,i)=>{t.id===a.id&&(t.stringVal=this.stringifyExecution(t),t.status===a.status&&a.stringVal===t.stringVal||(Op.transformExecution(e,t),n.data[i]=t,n.dataUpdated()))}))}hydrate(e,t){if(t.hydrator)return t.hydrator;if(t.hydrated)return Promise.resolve(t);const n=this.getExecution(t.id).then((n=>(Op.transformExecution(e,n),t.stages.forEach(((e,a)=>{const i=n.stages.length===t.stages.length&&n.stages[a].id===e.id?n.stages[a]:n.stages.find((t=>e.id===t.id));i&&(e.context=i.context,e.outputs=i.outputs,e.tasks=i.tasks)})),t.hydrated=!0,t.graphStatusHash=n.graphStatusHash,t.stageSummaries=n.stageSummaries,t)));return t.hydrator=Promise.resolve(n),t.hydrator}getLastExecutionForApplicationByConfigId(e,t){return this.getFilteredExecutions(e,[],1).then((e=>e.filter((e=>e.pipelineConfigId===t)))).then((e=>e[0]))}getExecutionsForConfigIds(e,t={}){const{limit:n,statuses:a,transform:i,application:r}=t;return Si("/executions").query({limit:n,pipelineConfigIds:(e||[]).join(","),statuses:a}).get().then((e=>e?(i&&r&&e.forEach((e=>Op.transformExecution(r,e))),e.sort(((e,t)=>(t.buildTime||0)-(e.buildTime||0)))):[])).catch((()=>[]))}patchExecution(e,t,n){return Si("/pipelines").path(e,"stages",t).patch(n)}stringifyExecution(e){const t={...e};return t.stages=t.stages.filter((e=>"SUCCEEDED"!==e.status&&"NOT_STARTED"!==e.status)),this.stringify(t)}stringify(e){return Hi.makeSortedStringFromAngularObject({...e},this.ignoredStringValFields)}}const au="spinnaker.core.pipeline.executions.service";n(au,[ca]).factory("executionService",["$q","$state","$timeout",(e,t,n)=>new nu(e,t,n)]),Zc.addInjectable("executionService");oi("a.spelLink {\n margin-left: 10px;\n -webkit-animation: fadein 1s;\n animation: fadein 1s;\n}\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@-webkit-keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\ninput.borderless,\n.borderless select {\n border: none;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.button-input {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n border: 1px var(--color-alto) solid;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n background: var(--color-white);\n}\n.button-input .input {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.button-input.invalid {\n border-color: var(--color-danger);\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px var(--color-danger-light);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px var(--color-danger-light);\n}\n.button-input.focus {\n border-color: var(--color-accent);\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .input select,\n.button-input input {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n}\n.button-input.number {\n width: 245px;\n}\n.button-input:focus {\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.button-input .btn-group {\n margin-left: 5px;\n}\n.button-input .btn-group button.active {\n font-weight: 700;\n}\n.button-input .btn-group button:focus {\n outline: none;\n}\n.button-input .form-control:focus {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.button-input .select2-container .select2-choice,\n.button-input .select2-dropdown-open .select2-choice,\n.button-input .select2-container-active {\n border: none;\n background-image: none;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\nspan.marker {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: var(--color-white);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\nspan.marker.param {\n background-color: var(--color-alert);\n color: var(--color-dovegray);\n}\nspan.marker.stage {\n background-color: var(--color-accessory-light);\n color: var(--color-mineshaft);\n}\nspan.marker.function {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.value {\n background-color: var(--color-accent-g1);\n color: var(--color-primary);\n}\nspan.marker.param:before {\n content: 'p';\n}\nspan.marker.stage:before {\n content: 'stage';\n}\nspan.marker.function:before {\n content: 'fn';\n}\n.spel-dropdown {\n max-height: 400px;\n overflow-y: scroll;\n}\n.spel-value-separator {\n font-size: 70%;\n color: var(--color-primary);\n}\n.textcomplete-item.active .spel-value-separator {\n color: var(--color-white);\n}\n.monospace {\n font-family: monospace;\n}\n");class iu extends ot.Component{constructor(e){super(e),this.destroy$=new At,this.onChange=e=>{this.props.onChange(e.target.value)},this.state={textcompleteConfig:[]},this.autocompleteService=new jp(Ze,new nu(Ze,{},_e)),vt(this.autocompleteService.addPipelineInfo(this.props.pipeline)).pipe(It(this.destroy$)).subscribe((e=>{this.setState({textcompleteConfig:e})})),this.spelInputRef=ot.createRef()}componentWillUnmount(){this.$input.off("change",this.onChange),this.destroy$.next()}componentDidMount(){this.$input=hn(this.spelInputRef.current),this.renderSuggestions(),this.$input.on("change",this.onChange)}componentDidUpdate(e,t){t.textcompleteConfig!==this.state.textcompleteConfig&&this.renderSuggestions()}renderSuggestions(){this.$input.attr("contenteditable","true"),this.$input.textcomplete(this.state.textcompleteConfig,{maxCount:1e3,zIndex:9e3,dropdownClassName:"dropdown-menu textcomplete-dropdown spel-dropdown"})}render(){return ot.createElement("input",{type:"text",placeholder:this.props.placeholder,className:wn({"form-control":!0,"no-doc-link":!this.props.docLink}),value:this.props.value||"",onChange:this.onChange,ref:this.spelInputRef})}}iu.defaultProps={placeholder:""};const ru=(e,t,n,a,i)=>class extends Ap{constructor(e){super(e,t)}render(){return ot.createElement(Up,{label:n,helpKey:i},ot.createElement(iu,{placeholder:a,value:this.props.artifact[e]||"",onChange:n=>{const a=p(this.props.artifact);a[e]=n,a.type=t,this.props.onChange(a)},pipeline:this.props.pipeline,docLink:!0}))}},su=class extends ot.Component{constructor(e){if(super(e),this.convert=(e,t)=>{if(!t||0===t.length)return[t,""];try{return[e(t),""]}catch(e){return H(su.DOMBase64Errors,e.code)?["",su.DOMBase64Errors[e.code]]:["",e.message]}},this.onNameChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)},this.onContentChanged=e=>{const[t,n]=this.convert(btoa,e.target.value);if(!n){const e=p(this.props.artifact);e.reference=t,this.props.onChange(e)}this.setState({decoded:e.target.value,encodeDecodeError:n})},"embedded/base64"!==e.artifact.type){const t=p(e.artifact);t.type="embedded/base64",e.onChange(t)}const[t,n]=this.convert(atob,e.artifact.reference);this.state={decoded:t,encodeDecodeError:n}}render(){const{pipeline:e}=this.props,{name:t,reference:n}=this.props.artifact,{decoded:a,encodeDecodeError:i}=this.state;return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Name"},ot.createElement(iu,{placeholder:"base64-artifact",value:t,pipeline:e,onChange:this.onNameChanged,docLink:!1})),ot.createElement(Up,{label:"Contents"},ot.createElement("textarea",{autoCapitalize:"none",autoComplete:"off",rows:16,className:"form-control code",value:a,onChange:this.onContentChanged}),ot.createElement(zi,{text:n,toolTip:"Copy base64-encoded content to clipboard",analyticsLabel:"Copy Base64 Artifact Content"})),i&&ot.createElement("div",{className:"form-group row"},ot.createElement("div",{className:"col-md-12 error-message"},"Error encoding/decoding artifact content: ",i)))}};let ou=su;ou.DOMBase64Errors={5:"The string to encode contains characters outside the latin1 range."};const lu={label:"Base64",typePattern:fp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"base64",isDefault:!1,isMatch:!0,editCmp:ru("name","embedded/base64","Name","base64-artifact","")},cu={label:"Base64",typePattern:fp.EMBEDDED_BASE64,type:"embedded/base64",description:"An artifact that includes its referenced resource as part of its payload.",key:"default.base64",isDefault:!0,isMatch:!1,editCmp:ou},pu="bitbucket/file",du={label:"Bitbucket",typePattern:fp.BITBUCKET_FILE,type:pu,description:"A file stored in git, hosted by Bitbucket.",key:"bitbucket",isDefault:!1,isMatch:!0,editCmp:ru("name",pu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},uu={label:"Bitbucket",typePattern:fp.BITBUCKET_FILE,type:pu,description:"A file stored in git, hosted by Bitbucket.",key:"default.bitbucket",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,pu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onFilePathChanged=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.reference"},ot.createElement(iu,{placeholder:"https://api.bitbucket.com/rest/api/1.0/$PROJECTS/$PROJECTKEY/repos/$REPONAME/raw/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"File Path",helpKey:"pipeline.config.expectedArtifact.defaultBitbucket.filepath"},ot.createElement(iu,{placeholder:"path/to/file.yml",onChange:this.onFilePathChanged,value:this.props.artifact.name,pipeline:this.props.pipeline,docLink:!0})))}}},mu="custom/object";class gu extends Ap{constructor(e){super(e,mu),this.onTypeChanged=e=>{this.updateArtifact({type:e})},this.onNameChanged=e=>{this.updateArtifact({name:e})},this.onVersionChanged=e=>{this.updateArtifact({version:e})},this.onLocationChanged=e=>{this.updateArtifact({location:e})},this.onReferenceChanged=e=>{this.updateArtifact({reference:e})},this.updateArtifact=e=>{const t=p(this.props.artifact);le(t,e),this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Type"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.type,onChange:this.onTypeChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Name"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.name,onChange:this.onNameChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Version"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Location"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.location,onChange:this.onLocationChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Reference"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})))}}const hu={label:"Custom",typePattern:fp.CUSTOM_OBJECT,type:mu,description:"A custom-defined artifact.",key:"custom",isDefault:!1,isMatch:!0,editCmp:gu},fu={label:"Custom",typePattern:fp.CUSTOM_OBJECT,type:mu,description:"A custom-defined artifact.",key:"default.custom",isDefault:!0,isMatch:!1,editCmp:gu},vu="docker/image",Au={label:"Docker",typePattern:fp.DOCKER_IMAGE,type:vu,isDefault:!1,isMatch:!0,description:"A Docker image to be deployed.",key:"docker",editCmp:ru("name",vu,"Docker image","gcr.io/project/image","pipeline.config.expectedArtifact.docker.name")},Eu={label:"Docker",typePattern:fp.DOCKER_IMAGE,type:vu,isDefault:!0,isMatch:!1,description:"A Docker image to be deployed.",key:"default.docker",editCmp:class extends Ap{constructor(e){super(e,vu),this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange((e=>{const t=e.reference;if(u(t))return e;const n=t.indexOf("@"),a=t.lastIndexOf(":");if(n>=0){const n=t.split("@");e.name=n[0],e.version=n[1]}else a>0?(e.name=t.substring(0,a),e.version=t.substring(a+1)):e.name=t;return e})(t))}}render(){return ot.createElement(Up,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultDocker.reference"},ot.createElement(iu,{placeholder:"gcr.io/project/image@sha256:9efcc2818c9...",value:this.props.artifact.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0}))}}},bu="gcs/object",yu={label:"GCS",typePattern:fp.GCS_OBJECT,type:bu,description:"A GCS object.",key:"gcs",isDefault:!1,isMatch:!0,editCmp:ru("name",bu,"Object path","gs://bucket/path/to/file","pipeline.config.expectedArtifact.gcs.name")},wu={label:"GCS",typePattern:fp.GCS_OBJECT,type:bu,description:"A GCS object.",key:"default.gcs",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,bu),this.onReferenceChange=e=>{if(u(e))return;const t=p(this.props.artifact);if(t.reference=e,e.indexOf("#")>=0){const n=e.split("#");t.name=n[0],t.version=n[1]}else t.name=e;this.props.onChange(t)}}render(){return ot.createElement(Up,{label:"Object path",helpKey:"pipeline.config.expectedArtifact.defaultGcs.reference"},ot.createElement(iu,{placeholder:"gs://bucket/path/to/file",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0}))}}},xu="github/file",Cu={label:"GitHub",description:"A file stored in git, hosted by GitHub.",key:"github",typePattern:fp.GITHUB_FILE,type:xu,isDefault:!1,isMatch:!0,editCmp:ru("name",xu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},ku={label:"GitHub",typePattern:fp.GITHUB_FILE,type:xu,description:"A file stored in git, hosted by GitHub.",key:"default.github",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,xu),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGithub.reference"},ot.createElement(iu,{placeholder:"https://api.github.com/repos/$ORG/$REPO/contents/$FILEPATH",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(Up,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGithub.version"},ot.createElement(iu,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}},Bu="gitlab/file",Su={label:"Gitlab",typePattern:fp.GITLAB_FILE,type:Bu,description:"A file stored in git, hosted by Gitlab.",key:"gitlab",isDefault:!1,isMatch:!0,editCmp:ru("name",Bu,"File path","manifests/frontend.yaml","pipeline.config.expectedArtifact.git.name")},Mu={label:"Gitlab",typePattern:fp.GITLAB_FILE,type:Bu,description:"A file stored in git, hosted by Gitlab.",key:"default.gitlab",isDefault:!0,isMatch:!1,editCmp:class extends Ap{constructor(e){super(e,Bu),this.pathRegex=new RegExp("/repos/[^/]*/[^/]*/contents/(.*)$"),this.onReferenceChange=e=>{const t=this.pathRegex.exec(e),n=p(this.props.artifact);null!==t?(n.name=t[1],n.reference=e):(n.name=e,n.reference=e),this.props.onChange(n)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Content URL",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.reference"},ot.createElement(iu,{placeholder:"https://gitlab.com/api/v4/projects/$ORG%2F$REPO/repository/files/path%2Fto%2Ffile.yml/raw",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})),ot.createElement(Up,{label:"Commit/Branch",helpKey:"pipeline.config.expectedArtifact.defaultGitlab.version"},ot.createElement(iu,{placeholder:"master",value:this.props.artifact.version,onChange:this.onVersionChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Nu extends ot.Component{constructor(e){var t,n;super(e),this.onIncludesSubPathChange=e=>{this.setState({includesSubPath:e.target.checked})},this.onReferenceChanged=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onVersionChanged=e=>{const t=p(this.props.artifact);t.version=e,this.props.onChange(t)},this.onSubPathChanged=e=>{const t=p(this.props.artifact);t.location=e,this.props.onChange(t)};const{artifact:a}=this.props;this.state={includesSubPath:void 0!==(null!=(n=a.location)?n:null==(t=a.metadata)?void 0:t.subPath)}}render(){var e,t;const{artifact:n}=this.props;return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"URL",helpKey:"pipeline.config.expectedArtifact.gitrepo.url"},ot.createElement(iu,{placeholder:"https or ssh to your git repo",value:n.reference,onChange:this.onReferenceChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Branch",helpKey:"pipeline.config.expectedArtifact.gitrepo.branch"},ot.createElement(iu,{placeholder:"master",value:n.version,onChange:this.onVersionChanged,pipeline:this.props.pipeline,docLink:!0})),ot.createElement(Up,{label:"Checkout subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.checkoutSubpath"},ot.createElement(xo,{checked:this.state.includesSubPath,onChange:this.onIncludesSubPathChange})),this.state.includesSubPath&&ot.createElement(Up,{label:"Subpath",helpKey:"pipeline.config.expectedArtifact.gitrepo.subpath"},ot.createElement(iu,{placeholder:"path/to/subdirectory",value:null!=(t=n.location)?t:null==(e=n.metadata)?void 0:e.subPath,onChange:this.onSubPathChanged,pipeline:this.props.pipeline,docLink:!0})))}}const Du={label:"GitRepo",description:"A Git repository.",key:"gitrepo",typePattern:fp.GIT_REPO,type:"git/repo",isDefault:!1,isMatch:!0,editCmp:Nu},Iu={label:"GitRepo",typePattern:fp.GIT_REPO,type:"git/repo",description:"A Git repository.",key:"default.gitrepo",isDefault:!0,isMatch:!1,editCmp:Nu};class Fu{static getArtifactNames(e,t){return Si("/artifacts/account").path(t,"names").query({type:e}).get()}static getArtifactVersions(e,t,n){return Si("/artifacts/account").path(t,"versions").query({type:e,artifactName:n}).get()}}const Tu="helm/chart";class Qu extends ot.Component{constructor(e){super(e),this.state={names:[],versions:[],versionsLoading:!0,namesLoading:!0},this.SEMVER=new RegExp(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(\.(0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\+[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*)?$/),this.onChange=(e,t)=>{const n=p(this.props.artifact);n[t]=e.value.toString(),this.props.onChange(n)};const{artifact:t}=this.props;if(t.type!==Tu){const n=p(t);n.type=Tu,e.onChange(n)}Fu.getArtifactNames(Tu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1})}),(()=>{this.setState({names:[],namesLoading:!1,versionsLoading:!1,versions:[]})}))}componentDidMount(){const{artifact:e}=this.props;e.name&&this.getChartVersionOptions(e.name)}componentDidUpdate(e){this.props.account.name!==e.account.name&&Fu.getArtifactNames(Tu,this.props.account.name).then((e=>{this.setState({names:e,namesLoading:!1,versions:[]})}),(()=>{this.setState({names:[],namesLoading:!1,versions:[]})}))}render(){const{artifact:e}=this.props,t=this.state.names.map((e=>({value:e,label:e})));return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Name"},!this.state.namesLoading&&ot.createElement(Ti,{options:t,value:e.name||"",onChange:e=>{this.onChange(e,"name"),this.getChartVersionOptions(e.value.toString())},clearable:!1}),this.state.namesLoading&&ot.createElement(Es,null)),ot.createElement(Up,{label:"Version"},!this.state.versionsLoading&&ot.createElement(Ac,{options:this.state.versions,value:e.version||"",onChange:e=>{this.onChange(e,"version")},clearable:!1}),this.state.versionsLoading&&ot.createElement(Es,null)))}getChartVersionOptions(e){const{artifact:t,account:n}=this.props;this.setState({versionsLoading:!0}),Fu.getArtifactVersions(Tu,n.name,e).then((e=>{t.version&&!this.SEMVER.test(t.version)&&(e=e.concat(t.version)),this.setState({versions:e.map((e=>({label:e,value:e}))),versionsLoading:!1})}))}}const Pu={label:"Helm",typePattern:fp.HELM_CHART,type:Tu,isDefault:!1,isMatch:!0,description:"A helm chart to be deployed",key:"helm",editCmp:Qu},Ru={label:"Helm",typePattern:fp.HELM_CHART,type:Tu,isDefault:!0,isMatch:!1,description:"A helm chart to be deployed",key:"default.helm",editCmp:Qu},Uu={label:"HTTP",typePattern:fp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"http",isDefault:!1,isMatch:!0,editCmp:ru("reference","http/file","URL","path/file.ext","")},zu={label:"HTTP",typePattern:fp.HTTP_FILE,type:"http/file",description:"An HTTP artifact.",key:"default.http",isDefault:!0,isMatch:!1,editCmp:ru("reference","http/file","URL","http://host/path/file.ext","")},Gu={label:"Ivy",typePattern:fp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!1,isMatch:!0,editCmp:ru("reference","ivy/file","Ivy Coordinate","group:artifact:version","")},ju={label:"Ivy",typePattern:fp.IVY_FILE,type:"ivy/file",description:"An Ivy repository artifact.",key:"ivy",isDefault:!0,isMatch:!1,editCmp:ru("reference","ivy/file","Ivy Coordinate","group:artifact:version","")};var Lu,Ou;(Ou=Lu||(Lu={})).Jenkins="jenkins",Ou.Travis="travis",Ou.Wercker="wercker",Ou.Concourse="concourse";class Yu{static listMasters(e=null){const t=Si("/v2/builds").query({type:e}).get();if(!t)return Ze.reject("An error occurred when retrieving build masters");switch(e){case Lu.Jenkins:return t.then((e=>e.filter((e=>!/^travis-/.test(e)))));case Lu.Travis:return t.then((e=>e.filter((e=>/^travis-/.test(e)))));case Lu.Concourse:return t.then((e=>e.filter((e=>/^concourse-/.test(e)))));default:return t}}static listJobsForMaster(e){return Si("/v3/builds").path(e,"jobs").get()}static listBuildsForJob(e,t){return Si("/v3/builds").path(e,"builds").query({job:t}).get()}static getJobConfig(e,t){return Si("/v3/builds").path(e,"job").query({job:t}).get()}static getGcbAccounts(){return Si("/gcb/accounts").get()}static getGcbTriggers(e){return Si("/gcb/triggers").path(e).get()}static getCodeBuildAccounts(){return Si("/codebuild/accounts").get()}static getCodeBuildProjects(e){return Si("/codebuild/projects").path(e).get()}}const $u="jenkins/file",Hu={label:"Jenkins",typePattern:fp.JENKINS_FILE,type:$u,isDefault:!1,isMatch:!0,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:ru("reference",$u,"Relative path","pathFromWorkspaceRoot/file.ext","")},Vu={label:"Jenkins",typePattern:fp.JENKINS_FILE,type:$u,isDefault:!0,isMatch:!1,description:"A Jenkins artifact file.",key:"default.jenkins",editCmp:class extends Ap{constructor(e){super(e,$u),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onNameChange=e=>{const t=p(this.props.artifact);t.name=e,this.props.onChange(t),Yu.listBuildsForJob(this.props.account.name,e).then((e=>{const t=e.filter((e=>!e.building&&"SUCCESS"===e.result)).sort(((e,t)=>t.number-e.number)).map((e=>e.number));this.setState({buildNumbers:t})}),(()=>{this.setState({buildNumbers:[]})}))},this.state={jobs:[],buildNumbers:[]}}componentDidMount(){Yu.listJobsForMaster(this.props.account.name).then((e=>{this.setState({jobs:e})}))}render(){const{buildNumbers:e,jobs:t}=this.state,{artifact:n}=this.props,a=e.map((e=>({label:e,value:e})));a.splice(0,0,{label:"lastSuccessfulBuild",value:"lastSuccessfulBuild"});const i=t.map((e=>({label:e,value:e})));return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Job"},ot.createElement(Ti,{options:i,onChange:e=>this.onNameChange(e.value),value:n.name,clearable:!1})),ot.createElement(Up,{label:"Build Number"},ot.createElement(Ti,{options:a,onChange:e=>this.onVersionChange(e.value),value:n.version,clearable:!1})),ot.createElement(Up,{label:"Relative path"},ot.createElement(iu,{placeholder:"pathFromWorkspaceRoot/file.ext",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!1})))}}};class Ju extends Ap{constructor(e){super(e,e.artifact.type||"kubernetes/configMap"),this.onReferenceChange=e=>{const t=p(this.props.artifact);t.reference=e,this.props.onChange(t)},this.onTypeChange=e=>{const t=p(this.props.artifact);t.type=e.value,this.props.onChange(t)}}render(){return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Resource Type"},ot.createElement(cn,{options:[{label:"ConfigMap",value:"kubernetes/configMap"},{label:"Deployment",value:"kubernetes/deployment"},{label:"ReplicaSet",value:"kubernetes/replicaSet"},{label:"Secret",value:"kubernetes/secret"}],clearable:!1,value:this.props.artifact.type,onChange:this.onTypeChange})),ot.createElement(Up,{label:"Reference"},ot.createElement(iu,{placeholder:"",value:this.props.artifact.reference,onChange:this.onReferenceChange,pipeline:this.props.pipeline,docLink:!0})))}}const Wu={label:"Kubernetes",typePattern:fp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"kubernetes",isDefault:!1,isMatch:!0,editCmp:Ju},Ku={label:"Kubernetes",typePattern:fp.KUBERNETES,type:"kubernetes/*",description:"A kubernetes resource.",key:"default.kubernetes",isDefault:!0,isMatch:!1,editCmp:Ju},qu={label:"Maven",typePattern:fp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!1,isMatch:!0,editCmp:ru("reference","maven/file","Maven Coordinate","group:artifact:version","")},Xu={label:"Maven",typePattern:fp.MAVEN_FILE,type:"maven/file",description:"A Maven repository artifact.",key:"maven",isDefault:!0,isMatch:!1,editCmp:ru("reference","maven/file","Maven Coordinate","group:artifact:version","")},Zu={label:"Oracle",typePattern:fp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!1,isMatch:!0,editCmp:ru("name","oracle/object","reference","oci://bucket/file-path","pipeline.config.expectedArtifact.oracle.name")},_u={label:"Oracle",typePattern:fp.ORACLE_OBJECT,type:"oracle/object",description:"An oracle object.",key:"oracle",isDefault:!0,isMatch:!1,editCmp:ru("reference","oracle/object","Reference","oci://bucket/file-path","pipeline.config.expectedArtifact.defaultOracle.reference")},em={label:"S3",typePattern:fp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!1,isMatch:!0,editCmp:ru("name","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.s3.name")},tm={label:"S3",typePattern:fp.S3_OBJECT,type:"s3/object",description:"An S3 object.",key:"s3",isDefault:!0,isMatch:!1,editCmp:ru("reference","s3/object","Object path","s3://bucket/path/to/file","pipeline.config.expectedArtifact.defaultS3.reference")};var nm="data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20transform%3D%22matrix%28.56848%200%200%20.56848%2034.64%2080.686%29%22%20aria-label%3D%22%3F%22%3E%20%20%20%3Cpath%20d%3D%22m96.688%20198.91h19.031v23.812h-19.031zm18.469-13.781h-17.906v-14.438q0-9.4688%202.625-15.562t11.062-14.156l8.4375-8.3438q5.3438-4.9688%207.6875-9.375%202.4375-4.4062%202.4375-9%200-8.3438-6.1875-13.5-6.0938-5.1563-16.219-5.1563-7.4062%200-15.844%203.2812-8.3438%203.2813-17.438%209.5625v-17.625q8.8125-5.3438%2017.812-7.9688%209.0938-2.625%2018.75-2.625%2017.25%200%2027.656%209.0938%2010.5%209.0938%2010.5%2024%200%207.125-3.375%2013.594-3.375%206.375-11.812%2014.438l-8.25%208.0625q-4.4062%204.4062-6.2812%206.9375-1.7812%202.4375-2.5312%204.7812-0.5625%201.9688-0.84375%204.7812t-0.28125%207.6875z%22%20fill%3D%22%23fff%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E";const am=class{static registerType(e,t){am.icons.push({type:e,path:t})}static getPath(e){if(null==e)return nm;const t=am.icons.find((t=>t.type.test(e)));return void 0===t?null:t.path}};let im=am;im.icons=[],im.registerType(fp.CUSTOM_OBJECT,nm),im.registerType(fp.DOCKER_IMAGE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20viewBox%3D%220%200%20482%20439%22%20%20%20height%3D%22439%22%20%20%20width%3D%22482%22%20%20%20xml%3Aspace%3D%22preserve%22%20%20%20id%3D%22svg3718%22%20%20%20version%3D%221.1%22%3E%3Cmetadata%20%20%20%20%20id%3D%22metadata3724%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%20%20%20%20%20id%3D%22defs3722%22%3E%3CclipPath%20%20%20%20%20%20%20id%3D%22clipPath3734%22%20%20%20%20%20%20%20clipPathUnits%3D%22userSpaceOnUse%22%3E%3Cpath%20%20%20%20%20%20%20%20%20id%3D%22path3732%22%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C329.25%20H%20361.5%20V%200%20H%200%20Z%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fdefs%3E%3Cg%20%20%20%20%20transform%3D%22matrix%281.3333333%2C0%2C0%2C-1.3333333%2C0%2C439%29%22%20%20%20%20%20id%3D%22g3726%22%3E%3Cg%20%20%20%20%20%20%20id%3D%22g3728%22%3E%3Cg%20%20%20%20%20%20%20%20%20clip-path%3D%22url%28%23clipPath3734%29%22%20%20%20%20%20%20%20%20%20id%3D%22g3730%22%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28344.626%2C78.6162%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3736%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3738%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Aevenodd%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22m%200%2C0%20c%20-0.915%2C0.881%20-2.067%2C1.574%20-3.455%2C2.083%20-1.39%2C0.505%20-2.909%2C0.858%20-4.559%2C1.055%20-1.652%2C0.196%20-3.197%2C0.292%20-4.634%2C0.292%20-3.268%2C0%20-6.342%2C-0.523%20-9.217%2C-1.568%20-2.876%2C-1.048%20-5.539%2C-2.549%20-7.992%2C-4.511%20v%200.981%20c%200%2C1.403%20-0.497%2C2.605%20-1.495%2C3.604%20-0.995%2C0.997%20-2.2%2C1.494%20-3.603%2C1.494%20-1.44%2C0%20-2.656%2C-0.497%20-3.653%2C-1.494%20-0.996%2C-0.999%20-1.496%2C-2.201%20-1.496%2C-3.604%20v%20-44.713%20c%200%2C-1.406%200.5%2C-2.606%201.496%2C-3.603%200.997%2C-0.997%202.213%2C-1.495%203.653%2C-1.495%201.403%2C0%202.608%2C0.498%203.603%2C1.495%200.998%2C0.997%201.495%2C2.197%201.495%2C3.603%20v%2022.357%20c%200%2C2.384%200.452%2C4.625%201.348%2C6.717%200.9%2C2.091%202.125%2C3.911%203.677%2C5.466%201.554%2C1.552%203.375%2C2.777%205.468%2C3.676%202.09%2C0.899%204.329%2C1.349%206.716%2C1.349%202.419%2C0%204.657%2C-0.409%206.717%2C-1.226%200.815%2C-0.36%201.536%2C-0.538%202.157%2C-0.538%200.716%2C0%201.387%2C0.128%202.01%2C0.392%200.618%2C0.26%201.16%2C0.627%201.618%2C1.102%200.457%2C0.473%200.824%2C1.021%201.102%2C1.644%200.278%2C0.618%200.418%2C1.289%200.418%2C2.009%20C%201.374%2C-2.028%200.915%2C-0.883%200%2C0%20m%20-88.54%2C-18.925%20c%200.52%2C1.796%201.323%2C3.437%202.4%2C4.927%201.079%2C1.486%202.353%2C2.762%203.825%2C3.825%201.472%2C1.059%203.089%2C1.887%204.854%2C2.476%201.764%2C0.587%203.578%2C0.881%205.442%2C0.881%201.863%2C0%203.667%2C-0.294%205.415%2C-0.881%201.749%2C-0.589%203.352%2C-1.417%204.804%2C-2.476%201.456%2C-1.063%202.732%2C-2.339%203.824%2C-3.825%201.098%2C-1.49%201.922%2C-3.131%202.479%2C-4.927%20z%20m%2035.936%2C14.316%20c%20-5.428%2C5.36%20-11.9%2C8.039%20-19.415%2C8.039%20-7.585%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.83%2C-8.04%2019.415%2C-8.04%206.894%2C0%2012.875%2C2.222%2017.944%2C6.667%200.98%2C1.012%201.471%2C2.237%201.471%2C3.677%200%2C1.472%20-0.484%2C2.689%20-1.449%2C3.654%20-0.963%2C0.962%20-2.179%2C1.446%20-3.651%2C1.446%20-1.274%2C-0.034%20-2.402%2C-0.461%20-3.382%2C-1.276%20-1.538%2C-1.307%20-3.206%2C-2.289%20-5.002%2C-2.941%20-1.801%2C-0.654%20-3.774%2C-0.981%20-5.931%2C-0.981%20-1.898%2C0%20-3.719%2C0.295%20-5.469%2C0.883%20-1.746%2C0.589%20-3.351%2C1.412%20-4.804%2C2.476%20-1.454%2C1.061%20-2.721%2C2.335%20-3.798%2C3.824%20-1.079%2C1.487%20-1.898%2C3.129%20-2.45%2C4.927%20h%2038.827%20c%201.436%2C0%202.654%2C0.482%203.651%2C1.447%200.998%2C0.963%201.498%2C2.182%201.498%2C3.652%200%2C3.79%20-0.673%2C7.311%20-2.011%2C10.565%20-1.342%2C3.252%20-3.352%2C6.202%20-6.029%2C8.85%20m%20-51.511%2C2.941%20c%200%2C0.687%20-0.137%2C1.339%20-0.415%2C1.96%20-0.279%2C0.621%20-0.646%2C1.168%20-1.105%2C1.644%20-0.458%2C0.471%20-0.997%2C0.838%20-1.618%2C1.103%20-0.62%2C0.261%20-1.291%2C0.391%20-2.01%2C0.391%20-1.013%2C0%20-1.928%2C-0.263%20-2.745%2C-0.783%20l%20-29.316%2C-19.073%20v%2038.241%20c%200%2C1.438%20-0.5%2C2.655%20-1.497%2C3.654%20-0.995%2C0.995%20-2.199%2C1.495%20-3.604%2C1.495%20-1.44%2C0%20-2.656%2C-0.5%20-3.651%2C-1.495%20-0.997%2C-0.999%20-1.497%2C-2.216%20-1.497%2C-3.654%20v%20-68.146%20c%200%2C-1.405%200.5%2C-2.617%201.497%2C-3.628%200.995%2C-1.014%202.211%2C-1.52%203.651%2C-1.52%201.405%2C0%202.609%2C0.506%203.604%2C1.52%200.997%2C1.011%201.497%2C2.223%201.497%2C3.628%20v%2017.699%20l%205.98%2C3.92%2022.652%2C-25.443%20c%200.912%2C-0.884%202.057%2C-1.324%203.429%2C-1.324%200.719%2C0%201.39%2C0.13%202.01%2C0.392%200.621%2C0.261%201.16%2C0.628%201.618%2C1.103%200.459%2C0.472%200.826%2C1.022%201.105%2C1.642%200.278%2C0.619%200.415%2C1.277%200.415%2C1.961%200%2C1.339%20-0.475%2C2.532%20-1.421%2C3.58%20l%20-21.081%2C23.728%2020.542%2C13.336%20c%201.305%2C0.883%201.96%2C2.236%201.96%2C4.069%20m%20-84.207%2C-10.173%20c%201.568%2C1.552%203.398%2C2.777%205.49%2C3.676%202.093%2C0.899%204.332%2C1.349%206.719%2C1.349%202.156%2C0%204.148%2C-0.361%205.981%2C-1.078%201.828%2C-0.72%203.578%2C-1.784%205.244%2C-3.187%200.981%2C-0.785%202.092%2C-1.178%203.334%2C-1.178%201.471%2C0%202.688%2C0.49%203.653%2C1.472%200.964%2C0.981%201.447%2C2.207%201.447%2C3.677%200%2C1.535%20-0.589%2C2.827%20-1.766%2C3.874%20-5.034%2C4.443%20-10.997%2C6.666%20-17.893%2C6.666%20-7.586%2C0%20-14.057%2C-2.679%20-19.415%2C-8.039%20-5.361%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.681%2C-14.055%208.042%2C-19.415%205.358%2C-5.361%2011.829%2C-8.04%2019.415%2C-8.04%206.862%2C0%2012.827%2C2.222%2017.893%2C6.667%201.079%2C1.081%201.617%2C2.335%201.617%2C3.775%200%2C1.473%20-0.483%2C2.688%20-1.444%2C3.653%20-0.965%2C0.964%20-2.184%2C1.447%20-3.653%2C1.447%20-1.242%2C-0.034%20-2.321%2C-0.392%20-3.236%2C-1.079%20-1.634%2C-1.406%20-3.368%2C-2.46%20-5.196%2C-3.163%20-1.833%2C-0.703%20-3.825%2C-1.054%20-5.981%2C-1.054%20-2.387%2C0%20-4.626%2C0.45%20-6.719%2C1.348%20-2.092%2C0.9%20-3.922%2C2.125%20-5.49%2C3.677%20-1.57%2C1.552%20-2.804%2C3.375%20-3.701%2C5.468%20-0.899%2C2.09%20-1.349%2C4.329%20-1.349%2C6.716%200%2C2.384%200.45%2C4.625%201.349%2C6.717%200.897%2C2.091%202.131%2C3.911%203.701%2C5.466%20m%20-31.676%2C-18.827%20c%20-0.899%2C-2.076%20-2.127%2C-3.897%20-3.678%2C-5.465%20-1.552%2C-1.57%20-3.376%2C-2.813%20-5.466%2C-3.726%20-2.092%2C-0.917%20-4.331%2C-1.374%20-6.718%2C-1.374%20-2.419%2C0%20-4.673%2C0.457%20-6.764%2C1.374%20-2.092%2C0.913%20-3.906%2C2.147%20-5.442%2C3.701%20-1.538%2C1.552%20-2.755%2C3.373%20-3.654%2C5.466%20-0.899%2C2.089%20-1.348%2C4.315%20-1.348%2C6.668%200%2C2.352%200.449%2C4.575%201.348%2C6.668%200.899%2C2.089%202.116%2C3.913%203.654%2C5.467%201.536%2C1.549%203.35%2C2.784%205.442%2C3.701%202.091%2C0.913%204.345%2C1.372%206.764%2C1.372%202.387%2C0%204.626%2C-0.459%206.718%2C-1.372%202.09%2C-0.917%203.914%2C-2.159%205.466%2C-3.726%201.551%2C-1.57%202.779%2C-3.392%203.678%2C-5.468%200.897%2C-2.076%201.347%2C-4.29%201.347%2C-6.642%200%2C-2.353%20-0.45%2C-4.569%20-1.347%2C-6.644%20m%203.553%2C26.059%20c%20-5.427%2C5.36%20-11.898%2C8.039%20-19.415%2C8.039%20-7.583%2C0%20-14.055%2C-2.679%20-19.412%2C-8.039%20-5.363%2C-5.364%20-8.042%2C-11.832%20-8.042%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.042%2C-19.415%205.357%2C-5.361%2011.829%2C-8.04%2019.412%2C-8.04%207.517%2C0%2013.988%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.042%2C11.767%208.042%2C19.415%20-0.034%2C3.79%20-0.712%2C7.304%20-2.036%2C10.54%20-1.323%2C3.236%20-3.325%2C6.193%20-6.006%2C8.875%20m%20-63.398%2C-26.059%20c%20-0.899%2C-2.076%20-2.124%2C-3.897%20-3.676%2C-5.465%20-1.552%2C-1.57%20-3.375%2C-2.813%20-5.465%2C-3.726%20-2.093%2C-0.917%20-4.331%2C-1.374%20-6.719%2C-1.374%20-2.418%2C0%20-4.673%2C0.457%20-6.765%2C1.374%20-2.093%2C0.913%20-3.907%2C2.147%20-5.441%2C3.701%20-1.538%2C1.552%20-2.754%2C3.373%20-3.653%2C5.466%20-0.899%2C2.089%20-1.349%2C4.315%20-1.349%2C6.668%200%2C2.352%200.45%2C4.575%201.349%2C6.668%200.899%2C2.089%202.115%2C3.913%203.653%2C5.467%201.534%2C1.549%203.348%2C2.784%205.441%2C3.701%202.092%2C0.913%204.347%2C1.372%206.765%2C1.372%202.388%2C0%204.626%2C-0.459%206.719%2C-1.372%202.09%2C-0.917%203.913%2C-2.159%205.465%2C-3.726%201.552%2C-1.57%202.777%2C-3.392%203.676%2C-5.468%200.9%2C-2.076%201.349%2C-4.29%201.349%2C-6.642%200%2C-2.353%20-0.449%2C-4.569%20-1.349%2C-6.644%20m%206.449%2C57.632%20c%20-1.472%2C0%20-2.69%2C-0.485%20-3.653%2C-1.447%20-0.966%2C-0.965%20-1.447%2C-2.182%20-1.447%2C-3.651%20V%20-2.6%20c%20-4.968%2C4.022%20-10.705%2C6.03%20-17.209%2C6.03%20-7.583%2C0%20-14.054%2C-2.679%20-19.415%2C-8.039%20-5.36%2C-5.364%20-8.039%2C-11.832%20-8.039%2C-19.415%200%2C-7.583%202.679%2C-14.055%208.039%2C-19.415%205.361%2C-5.361%2011.832%2C-8.04%2019.415%2C-8.04%207.517%2C0%2013.989%2C2.679%2019.415%2C8.04%205.361%2C5.295%208.04%2C11.767%208.04%2C19.415%20v%2045.89%20c%200%2C1.469%20-0.498%2C2.686%20-1.495%2C3.651%20-0.997%2C0.962%20-2.213%2C1.447%20-3.651%2C1.447%20m%20142.279%2C113.243%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20-29.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C27.383%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.666%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%2029.665%2C0%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%200%2C27.384%20h%2025.102%20v%2022.82%20h%20-25.102%20z%20m%20135.273%2C-44.843%20-5.068%2C3.382%20c%20-5.484%2C3.667%20-18.077%2C5.011%20-27.772%2C3.183%20-1.248%2C9.13%20-6.337%2C17.047%20-15.592%2C24.203%20l%20-5.322%2C3.548%20-3.551%2C-5.326%20c%20-4.545%2C-6.855%20-6.816%2C-16.352%20-6.072%2C-25.46%200.335%2C-3.203%201.388%2C-8.934%204.685%2C-13.973%20-3.295%2C-1.77%20-9.808%2C-4.209%20-18.391%2C-4.045%20h%20-165.087%20l%20-0.323%2C-1.901%20c%20-1.552%2C-9.153%20-1.518%2C-37.714%2017.025%2C-59.667%2014.096%2C-16.686%2035.229%2C-25.147%2062.811%2C-25.147%2059.795%2C0%20104.033%2C27.525%20124.749%2C77.557%208.146%2C-0.162%2025.687%2C-0.047%2034.697%2C17.167%200.234%2C0.395%200.775%2C1.429%202.349%2C4.69%20z%22%20%2F%3E%3C%2Fg%3E%3Cg%20%20%20%20%20%20%20%20%20%20%20transform%3D%22translate%28323.4053%2C29.5137%29%22%20%20%20%20%20%20%20%20%20%20%20id%3D%22g3740%22%3E%3Cpath%20%20%20%20%20%20%20%20%20%20%20%20%20id%3D%22path3742%22%20%20%20%20%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23066da5%3Bfill-opacity%3A1%3Bfill-rule%3Anonzero%3Bstroke%3Anone%22%20%20%20%20%20%20%20%20%20%20%20%20%20d%3D%22M%200%2C0%20H%200.233%20C%200.507%2C0%200.728%2C0.091%200.728%2C0.312%200.728%2C0.507%200.585%2C0.638%200.272%2C0.638%200.143%2C0.638%200.052%2C0.624%200%2C0.61%20Z%20m%20-0.013%2C-1.209%20h%20-0.494%20v%202.132%20c%200.195%2C0.039%200.468%2C0.065%200.819%2C0.065%200.403%2C0%200.584%2C-0.065%200.741%2C-0.156%20C%201.17%2C0.741%201.261%2C0.572%201.261%2C0.364%201.261%2C0.13%201.079%2C-0.052%200.819%2C-0.13%20v%20-0.026%20c%200.207%2C-0.077%200.325%2C-0.234%200.39%2C-0.52%200.064%2C-0.325%200.103%2C-0.455%200.156%2C-0.533%20H%200.832%20c%20-0.065%2C0.078%20-0.104%2C0.272%20-0.169%2C0.521%20-0.039%2C0.233%20-0.169%2C0.337%20-0.442%2C0.337%20h%20-0.234%20z%20m%20-1.313%2C1.118%20c%200%2C-0.949%200.702%2C-1.703%201.664%2C-1.703%200.935%2C0%201.625%2C0.754%201.625%2C1.69%200%2C0.949%20-0.69%2C1.716%20-1.638%2C1.716%20-0.949%2C0%20-1.651%2C-0.767%20-1.651%2C-1.703%20m%203.835%2C0%20c%200%2C-1.209%20-0.949%2C-2.158%20-2.184%2C-2.158%20-1.222%2C0%20-2.197%2C0.949%20-2.197%2C2.158%200%2C1.183%200.975%2C2.132%202.197%2C2.132%201.235%2C0%202.184%2C-0.949%202.184%2C-2.132%22%20%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.KUBERNETES,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20%20%20xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%20%20%20xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%20%20%20width%3D%22722.8457%22%20%20%20height%3D%22701.96637%22%20%20%20id%3D%22svg2%22%20%20%20version%3D%221.1%22%20%20%20inkscape%3Aversion%3D%220.48.4%20r9939%22%20%20%20sodipodi%3Adocname%3D%22logo.svg%22%20%20%20inkscape%3Aexport-filename%3D%22%2Fhome%2Fthockin%2Fsrc%2Fkubernetes%2Fnew.png%22%20%20%20inkscape%3Aexport-xdpi%3D%22460.95001%22%20%20%20inkscape%3Aexport-ydpi%3D%22460.95001%22%3E%20%20%3Cdefs%20%20%20%20%20id%3D%22defs4%22%20%2F%3E%20%20%3Csodipodi%3Anamedview%20%20%20%20%20id%3D%22base%22%20%20%20%20%20pagecolor%3D%22%23ffffff%22%20%20%20%20%20bordercolor%3D%22%23666666%22%20%20%20%20%20borderopacity%3D%221.0%22%20%20%20%20%20inkscape%3Apageopacity%3D%220.0%22%20%20%20%20%20inkscape%3Apageshadow%3D%222%22%20%20%20%20%20inkscape%3Azoom%3D%2216.190509%22%20%20%20%20%20inkscape%3Acx%3D%22277.56851%22%20%20%20%20%20inkscape%3Acy%3D%22157.54494%22%20%20%20%20%20inkscape%3Adocument-units%3D%22px%22%20%20%20%20%20inkscape%3Acurrent-layer%3D%22g3052%22%20%20%20%20%20showgrid%3D%22false%22%20%20%20%20%20inkscape%3Awindow-width%3D%221519%22%20%20%20%20%20inkscape%3Awindow-height%3D%22822%22%20%20%20%20%20inkscape%3Awindow-x%3D%2251%22%20%20%20%20%20inkscape%3Awindow-y%3D%2225%22%20%20%20%20%20inkscape%3Awindow-maximized%3D%220%22%20%20%20%20%20inkscape%3Asnap-global%3D%22false%22%20%20%20%20%20fit-margin-top%3D%2210%22%20%20%20%20%20fit-margin-left%3D%2210%22%20%20%20%20%20fit-margin-right%3D%2210%22%20%20%20%20%20fit-margin-bottom%3D%2210%22%20%2F%3E%20%20%3Cmetadata%20%20%20%20%20id%3D%22metadata7%22%3E%20%20%20%20%3Crdf%3ARDF%3E%20%20%20%20%20%20%3Ccc%3AWork%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%20%20%20%20%3Cdc%3Atype%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%20%20%20%20%20%20%20%20%3Cdc%3Atitle%20%2F%3E%20%20%20%20%20%20%3C%2Fcc%3AWork%3E%20%20%20%20%3C%2Frdf%3ARDF%3E%20%20%3C%2Fmetadata%3E%20%20%3Cg%20%20%20%20%20inkscape%3Alabel%3D%22Layer%201%22%20%20%20%20%20inkscape%3Agroupmode%3D%22layer%22%20%20%20%20%20id%3D%22layer1%22%20%20%20%20%20transform%3D%22translate%28-6.3260942%2C-174.7524%29%22%3E%20%20%20%20%3Cg%20%20%20%20%20%20%20id%3D%22g3052%22%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%23326ce5%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%22%20%20%20%20%20%20%20%20%20d%3D%22m%20365.3125%2C184.8125%20a%2046.724621%2C46.342246%200%200%200%20-17.90625%2C4.53125%20l%20-244.34375%2C116.75%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C31.4375%20L%2017.5%2C599.78125%20A%2046.724621%2C46.342246%200%200%200%2023.84375%2C635.3125%2046.724621%2C46.342246%200%200%200%2026.5%2C639%20l%20169.125%2C210.28125%20a%2046.724621%2C46.342246%200%200%200%2036.53125%2C17.4375%20L%20503.375%2C866.65625%20A%2046.724621%2C46.342246%200%200%200%20539.90625%2C849.25%20L%20708.96875%2C638.9375%20A%2046.724621%2C46.342246%200%200%200%20718%2C599.71875%20l%20-60.375%2C-262.25%20a%2046.724621%2C46.342246%200%200%200%20-25.28125%2C-31.4375%20l%20-244.375%2C-116.6875%20A%2046.724621%2C46.342246%200%200%200%20365.3125%2C184.8125%20z%22%20%20%20%20%20%20%20%20%20id%3D%22path3055%22%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22new.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%20%20%3Cpath%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%20%20%20%20%20%20%20%20%20id%3D%22path3059%22%20%20%20%20%20%20%20%20%20d%3D%22m%20367.73366%2C274.05962%20c%20-8.07696%2C8.2e-4%20-14.62596%2C7.27591%20-14.625%2C16.25%201e-5%2C0.13773%200.0282%2C0.26934%200.0312%2C0.40625%20-0.0119%2C1.21936%20-0.0708%2C2.68836%20-0.0312%2C3.75%200.19262%2C5.176%201.3209%2C9.13749%202%2C13.90625%201.23028%2C10.20666%202.26117%2C18.66736%201.625%2C26.53125%20-0.61869%2C2.9654%20-2.80288%2C5.67741%20-4.75%2C7.5625%20l%20-0.34375%2C6.1875%20c%20-8.77682%2C0.72717%20-17.61235%2C2.05874%20-26.4375%2C4.0625%20-37.97461%2C8.62218%20-70.67008%2C28.18307%20-95.5625%2C54.59375%20-1.61522%2C-1.10193%20-4.44103%2C-3.12914%20-5.2813%2C-3.75%20-2.61117%2C0.35262%20-5.25021%2C1.15829%20-8.6875%2C-0.84375%20-6.54491%2C-4.40563%20-12.50587%2C-10.48693%20-19.71875%2C-17.8125%20-3.30498%2C-3.50419%20-5.69832%2C-6.84101%20-9.625%2C-10.21875%20-0.89172%2C-0.76707%20-2.25258%2C-1.80455%20-3.25%2C-2.59375%20-3.06988%2C-2.44757%20-6.6907%2C-3.72402%20-10.1875%2C-3.84375%20-4.49589%2C-0.15394%20-8.82394%2C1.60385%20-11.65625%2C5.15625%20-5.03521%2C6.31538%20-3.42312%2C15.96805%203.59375%2C21.5625%200.0712%2C0.0567%200.14702%2C0.10078%200.21875%2C0.15625%200.96422%2C0.78162%202.14496%2C1.78313%203.03125%2C2.4375%204.16687%2C3.07655%207.9732%2C4.65145%2012.125%2C7.09375%208.747%2C5.40181%2015.99837%2C9.88086%2021.75%2C15.28125%202.24602%2C2.39417%202.63858%2C6.61292%202.9375%2C8.4375%20l%204.6875%2C4.1875%20c%20-25.09342%2C37.76368%20-36.70686%2C84.40946%20-29.8437%2C131.9375%20l%20-6.125%2C1.78125%20c%20-1.6143%2C2.08461%20-3.89541%2C5.36474%20-6.2813%2C6.34375%20-7.52513%2C2.37021%20-15.99424%2C3.24059%20-26.21875%2C4.3125%20-4.80031%2C0.39915%20-8.94218%2C0.16095%20-14.03125%2C1.125%20-1.12008%2C0.21218%20-2.68072%2C0.61877%20-3.90625%2C0.90625%20-0.0426%2C0.009%20-0.0824%2C0.0216%20-0.125%2C0.0312%20-0.0668%2C0.0155%20-0.15456%2C0.0479%20-0.21875%2C0.0625%20-8.62014%2C2.08279%20-14.15774%2C10.006%20-12.375%2C17.8125%201.78316%2C7.80833%2010.20314%2C12.55677%2018.875%2C10.6875%200.0626%2C-0.0143%200.1535%2C-0.0167%200.21875%2C-0.0312%200.0979%2C-0.0224%200.18409%2C-0.0699%200.28125%2C-0.0937%201.20885%2C-0.26536%202.72377%2C-0.5606%203.78125%2C-0.84375%205.00334%2C-1.33963%208.62694%2C-3.30796%2013.125%2C-5.03125%209.67694%2C-3.47077%2017.69173%2C-6.37022%2025.5%2C-7.5%203.26118%2C-0.25542%206.69711%2C2.01216%208.40625%2C2.96875%20l%206.375%2C-1.09375%20c%2014.67018%2C45.48282%2045.41416%2C82.24502%2084.34375%2C105.3125%20l%20-2.65625%2C6.375%20c%200.95742%2C2.47542%202.01341%2C5.8247%201.30022%2C8.26932%20-2.83868%2C7.3612%20-7.70097%2C15.13097%20-13.23772%2C23.79318%20-2.68085%2C4.00192%20-5.42453%2C7.10761%20-7.84375%2C11.6875%20-0.5789%2C1.09589%20-1.31618%2C2.77932%20-1.875%2C3.9375%20-3.75884%2C8.04236%20-1.00164%2C17.3052%206.21875%2C20.78125%207.26575%2C3.49788%2016.28447%2C-0.19134%2020.1875%2C-8.25%200.006%2C-0.0114%200.0257%2C-0.0198%200.0312%2C-0.0312%200.004%2C-0.009%20-0.004%2C-0.0225%200%2C-0.0312%200.55593%2C-1.14255%201.34353%2C-2.64437%201.8125%2C-3.71875%202.07213%2C-4.74702%202.76161%2C-8.81506%204.21875%2C-13.40625%203.86962%2C-9.72014%205.99567%2C-19.91903%2011.32258%2C-26.27411%201.45868%2C-1.74023%203.83681%2C-2.4095%206.30242%2C-3.06964%20l%203.3125%2C-6%20c%2033.93824%2C13.0268%2071.92666%2C16.52246%20109.875%2C7.90625%208.65697%2C-1.96557%2017.01444%2C-4.50945%2025.09375%2C-7.5625%200.93098%2C1.65133%202.66113%2C4.8257%203.125%2C5.625%202.50559%2C0.81518%205.24044%2C1.23614%207.46875%2C4.53125%203.98539%2C6.80898%206.7109%2C14.86416%2010.03125%2C24.59375%201.45738%2C4.59111%202.17762%2C8.65933%204.25%2C13.40625%200.47234%2C1.08195%201.256%2C2.60486%201.8125%2C3.75%203.89482%2C8.08484%2012.94212%2C11.78667%2020.21875%2C8.28125%207.2195%2C-3.4779%209.97974%2C-12.7399%206.21875%2C-20.78125%20-0.55889%2C-1.15814%20-1.3273%2C-2.84164%20-1.90625%2C-3.9375%20-2.41946%2C-4.57976%20-5.1627%2C-7.65448%20-7.84375%2C-11.65625%20-5.53721%2C-8.66192%20-10.12968%2C-15.8577%20-12.96875%2C-23.21875%20-1.18711%2C-3.79657%200.20028%2C-6.15774%201.125%2C-8.625%20-0.55378%2C-0.63477%20-1.73881%2C-4.22009%20-2.4375%2C-5.90625%2040.4574%2C-23.88816%2070.29856%2C-62.02129%2084.3125%2C-106.0625%201.8924%2C0.29742%205.18154%2C0.87936%206.25%2C1.09375%202.19954%2C-1.4507%204.22194%2C-3.34352%208.1875%2C-3.03125%207.80832%2C1.12937%2015.82288%2C4.02973%2025.5%2C7.5%204.49815%2C1.72306%208.1216%2C3.72313%2013.125%2C5.0625%201.05749%2C0.28309%202.57238%2C0.5472%203.78125%2C0.8125%200.0972%2C0.0238%200.1833%2C0.0714%200.28125%2C0.0937%200.0653%2C0.0146%200.15615%2C0.0169%200.21875%2C0.0312%208.67236%2C1.86695%2017.09384%2C-2.87871%2018.875%2C-10.6875%201.78074%2C-7.80696%20-3.7543%2C-15.73201%20-12.375%2C-17.8125%20-1.25393%2C-0.28513%20-3.03225%2C-0.76938%20-4.25%2C-1%20-5.08912%2C-0.96378%20-9.23092%2C-0.7261%20-14.03125%2C-1.125%20-10.22456%2C-1.07138%20-18.6935%2C-1.94269%20-26.21875%2C-4.3125%20-3.06826%2C-1.19028%20-5.25103%2C-4.84124%20-6.31255%2C-6.34375%20l%20-5.90625%2C-1.71875%20c%203.06226%2C-22.15442%202.23655%2C-45.21134%20-3.0625%2C-68.28125%20-5.34839%2C-23.28471%20-14.80037%2C-44.58084%20-27.40625%2C-63.34375%201.51505%2C-1.37729%204.37619%2C-3.91091%205.1875%2C-4.65625%200.23716%2C-2.62417%200.0334%2C-5.37553%202.75%2C-8.28125%205.75134%2C-5.40069%2013.00329%2C-9.87898%2021.75%2C-15.28125%204.15167%2C-2.44252%207.98954%2C-4.01698%2012.15625%2C-7.09375%200.94225%2C-0.69576%202.2289%2C-1.79759%203.21875%2C-2.59375%207.01538%2C-5.59633%208.63058%2C-15.24842%203.59375%2C-21.5625%20-5.03683%2C-6.31408%20-14.79712%2C-6.90883%20-21.8125%2C-1.3125%20-0.99856%2C0.79085%20-2.35353%2C1.82252%20-3.25%2C2.59375%20-3.9265%2C3.37796%20-6.35145%2C6.71439%20-9.65625%2C10.21875%20-7.21249%2C7.32595%20-13.17407%2C13.43777%20-19.71875%2C17.84375%20-2.83601%2C1.65106%20-6.98996%2C1.07978%20-8.87505%2C0.96875%20l%20-5.5625%2C3.96875%20c%20-31.7188%2C-33.26057%20-74.90466%2C-54.52546%20-121.40605%2C-58.6563%20-0.13006%2C-1.94872%20-0.30045%2C-5.47117%20-0.34375%2C-6.53125%20-1.90371%2C-1.82165%20-4.20342%2C-3.37686%20-4.78125%2C-7.3125%20-0.63617%2C-7.86389%200.42597%2C-16.32459%201.65625%2C-26.53125%200.6791%2C-4.76876%201.80738%2C-8.73025%202%2C-13.90625%200.0438%2C-1.17663%20-0.0265%2C-2.88401%20-0.0312%2C-4.15625%20-9.6e-4%2C-8.97409%20-6.54804%2C-16.25082%20-14.625%2C-16.25%20z%20m%20-18.3125%2C113.4375%20-4.34375%2C76.71875%20-0.3125%2C0.15625%20c%20-0.29134%2C6.86335%20-5.93996%2C12.34375%20-12.875%2C12.34375%20-2.84081%2C0%20-5.46294%2C-0.91229%20-7.59375%2C-2.46875%20l%20-0.125%2C0.0625%20-62.90625%2C-44.59375%20c%2019.33365%2C-19.01115%2044.06291%2C-33.06039%2072.5625%2C-39.53125%205.20599%2C-1.18203%2010.40966%2C-2.0591%2015.59375%2C-2.6875%20z%20m%2036.65625%2C0%20c%2033.27347%2C4.09232%2064.04501%2C19.15882%2087.625%2C42.25%20l%20-62.5%2C44.3125%20-0.21875%2C-0.0937%20c%20-5.54745%2C4.05169%20-13.36343%2C3.04639%20-17.6875%2C-2.375%20-1.77132%2C-2.22096%20-2.70072%2C-4.83239%20-2.8125%2C-7.46875%20l%20-0.0625%2C-0.0312%20z%20m%20-147.625%2C70.875%2057.4375%2C51.375%20-0.0625%2C0.3125%20c%205.18437%2C4.50697%205.94888%2C12.32794%201.625%2C17.75%20-1.7712%2C2.22105%20-4.14208%2C3.71074%20-6.6875%2C4.40625%20l%20-0.0625%2C0.25%20-73.625%2C21.25%20c%20-3.74728%2C-34.26517%204.32855%2C-67.57364%2021.375%2C-95.34375%20z%20m%20258.15625%2C0.0312%20c%208.5341%2C13.83256%2014.99655%2C29.28214%2018.84375%2C46.03125%203.80106%2C16.54828%204.75499%2C33.06697%203.1875%2C49.03125%20l%20-74%2C-21.3125%20-0.0625%2C-0.3125%20c%20-6.6265%2C-1.81104%20-10.69893%2C-8.55162%20-9.15625%2C-15.3125%200.63203%2C-2.76962%202.10222%2C-5.11264%204.09375%2C-6.84375%20l%20-0.0312%2C-0.15625%2057.125%2C-51.125%20z%20m%20-140.65625%2C55.3125%2023.53125%2C0%2014.625%2C18.28125%20-5.25%2C22.8125%20-21.125%2C10.15625%20-21.1875%2C-10.1875%20-5.25%2C-22.8125%20z%20m%2075.4375%2C62.5625%20c%200.99997%2C-0.0505%201.99558%2C0.0396%202.96875%2C0.21875%20l%200.125%2C-0.15625%2076.15625%2C12.875%20c%20-11.1455%2C31.3131%20-32.47281%2C58.44018%20-60.96875%2C76.59375%20l%20-29.5625%2C-71.40625%200.0937%2C-0.125%20c%20-2.71561%2C-6.30999%200.002%2C-13.70956%206.25%2C-16.71875%201.59965%2C-0.77041%203.27089%2C-1.19701%204.9375%2C-1.28125%20z%20m%20-127.90625%2C0.3125%20c%205.81174%2C0.0815%2011.02462%2C4.11525%2012.375%2C10.03125%200.63219%2C2.76958%200.3245%2C5.51375%20-0.71875%2C7.9375%20l%200.21875%2C0.28125%20-29.25%2C70.6875%20c%20-27.34716%2C-17.5486%20-49.12927%2C-43.82403%20-60.78125%2C-76.06245%20l%2075.5%2C-12.8125%200.125%2C0.15625%20c%200.84451%2C-0.15541%201.701%2C-0.2304%202.53125%2C-0.21875%20z%20m%2063.78125%2C30.9688%20c%202.02445%2C-0.0744%204.07865%2C0.34098%206.03125%2C1.28125%202.55951%2C1.23253%204.53673%2C3.17319%205.78125%2C5.5%20l%200.28125%2C0%2037.21875%2C67.25%20c%20-4.83029%2C1.61923%20-9.79609%2C3.00308%20-14.875%2C4.15625%20-28.46453%2C6.4629%20-56.83862%2C4.50467%20-82.53125%2C-4.25%20l%2037.125%2C-67.125%200.0625%2C0%20c%202.22767%2C-4.16441%206.45247%2C-6.64887%2010.90625%2C-6.8125%20z%22%20%20%20%20%20%20%20%20%20style%3D%22font-size%3Amedium%3Bfont-style%3Anormal%3Bfont-variant%3Anormal%3Bfont-weight%3Anormal%3Bfont-stretch%3Anormal%3Btext-indent%3A0%3Btext-align%3Astart%3Btext-decoration%3Anone%3Bline-height%3Anormal%3Bletter-spacing%3Anormal%3Bword-spacing%3Anormal%3Btext-transform%3Anone%3Bdirection%3Altr%3Bblock-progression%3Atb%3Bwriting-mode%3Alr-tb%3Btext-anchor%3Astart%3Bbaseline-shift%3Abaseline%3Bcolor%3A%23000000%3Bfill%3A%23ffffff%3Bfill-opacity%3A1%3Bstroke%3A%23ffffff%3Bstroke-width%3A0.25%3Bstroke-miterlimit%3A4%3Bstroke-opacity%3A1%3Bstroke-dasharray%3Anone%3Bmarker%3Anone%3Bvisibility%3Avisible%3Bdisplay%3Ainline%3Boverflow%3Avisible%3Benable-background%3Aaccumulate%3Bfont-family%3ASans%3B-inkscape-font-specification%3ASans%22%20%20%20%20%20%20%20%20%20sodipodi%3Anodetypes%3D%22ccccccccsccccscssccsccccccccscccsccccccccccccccscccscsccsccccscscsccccccccscccscsccccsccccscscscccccccccccccccscccsccccccccccccscccccscccccccccccccccccccccccscccscccccccccscccscccc%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-filename%3D%22.%2Fpath3059.png%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-xdpi%3D%22250.55%22%20%20%20%20%20%20%20%20%20inkscape%3Aexport-ydpi%3D%22250.55%22%20%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.EMBEDDED_BASE64,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22110.37mm%22%20height%3D%22110.37mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20110.36904%20110.36904%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%20%3Cmetadata%3E%20%20%3Crdf%3ARDF%3E%20%20%20%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%20%20%20%20%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%20%20%20%20%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%20%20%20%20%3Cdc%3Atitle%2F%3E%20%20%20%3C%2Fcc%3AWork%3E%20%20%3C%2Frdf%3ARDF%3E%20%3C%2Fmetadata%3E%20%3Cg%20transform%3D%22translate%28-43.089%20-111.04%29%22%3E%20%20%3Crect%20x%3D%2243.089%22%20y%3D%22111.04%22%20width%3D%22110.37%22%20height%3D%22110.37%22%20stroke-width%3D%22.26458%22%2F%3E%20%20%3Cg%20fill%3D%22%23fff%22%3E%20%20%20%3Cpath%20d%3D%22m70.081%20171.06q0-6.0035-2.3648-9.4046-2.3366-3.4306-6.4468-3.4306t-6.475%203.4306q-2.3366%203.401-2.3366%209.4046t2.3366%209.4341q2.3648%203.401%206.475%203.401t6.4468-3.401q2.3648-3.4306%202.3648-9.4341zm-17.623-11.563q1.6328-2.9574%204.1102-4.377%202.5055-1.4491%205.9683-1.4491%205.743%200%209.3184%204.791%203.6035%204.791%203.6035%2012.599%200%207.8076-3.6035%2012.599-3.5753%204.791-9.3184%204.791-3.4627%200-5.9683-1.4196-2.4774-1.4491-4.1102-4.4066v4.9685h-5.2081v-46.017h5.2081z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m97.744%20163.14q-3.8287%200-6.0809%202.7504-2.224%202.7504-2.224%207.5414%200%204.7614%202.224%207.5414%202.2522%202.7504%206.0809%202.7504%203.8287%200%206.0528-2.7504%202.2522-2.78%202.2522-7.5414%200-4.791-2.2522-7.5414-2.224-2.7504-6.0528-2.7504zm11.289-18.72v5.4416q-2.1396-1.0647-4.3355-1.6266-2.1677-0.5619-4.3073-0.5619-5.6304%200-8.6146%203.9925-2.956%203.9925-3.3783%2012.066%201.661-2.573%204.1665-3.9334%202.5055-1.39%205.5178-1.39%206.3343%200%209.9941%204.0517%203.6879%204.0221%203.6879%2010.972%200%206.802-3.8287%2010.913-3.8287%204.1108-10.191%204.1108-7.2914%200-11.148-5.8557-3.8568-5.8853-3.8568-17.035%200-10.469%204.7296-16.68%204.7296-6.2401%2012.697-6.2401%202.1396%200%204.3073%200.44361%202.1959%200.44361%204.5607%201.3308z%22%2F%3E%20%20%20%3Cpath%20d%3D%22m137.32%20148.64-14.358%2023.571h14.358zm-1.4921-5.205h7.1506v28.776h5.9964v4.9684h-5.9964v10.41h-5.6586v-10.41h-18.975v-5.7669z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GCS_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22128%22%20height%3D%22128%22%20viewBox%3D%220%200%20128%20128%22%3E%20%20%3Ctitle%3ECloud%20Storage%3C%2Ftitle%3E%20%20%3Cpath%20d%3D%22M126.47%2C58.12l-26.3-45.74A11.56%2C11.56%2C0%2C0%2C0%2C90.31%2C6.5H37.7a11.55%2C11.55%2C0%2C0%2C0-9.86%2C5.88L1.53%2C58a11.48%2C11.48%2C0%2C0%2C0%2C0%2C11.44l26.3%2C46a11.77%2C11.77%2C0%2C0%2C0%2C9.86%2C6.09H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06l26.3-45.74A11.73%2C11.73%2C0%2C0%2C0%2C126.47%2C58.12Z%22%20style%3D%22fill%3A%20%234285f4%22%2F%3E%20%20%3Cpath%20d%3D%22M85.49%2C50.55%2C49.31%2C53.88l-7%2C7%2C6%2C6L42.36%2C77.3l44.2%2C44.2H90.3a11.73%2C11.73%2C0%2C0%2C0%2C9.87-6.06L118.5%2C83.56Z%22%20style%3D%22opacity%3A%200.070000000298023%3Bisolation%3A%20isolate%22%2F%3E%20%20%3Cg%20id%3D%22art%22%3E%20%20%20%20%3Cg%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C50.27H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C51.48v8.57a1.21%2C1.21%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V51.48a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%20%20%3Cpath%20d%3D%22M84.7%2C66.74H43.26A1.22%2C1.22%2C0%2C0%2C0%2C42%2C68v8.57a1.22%2C1.22%2C0%2C0%2C0%2C1.21%2C1.21H84.7a1.22%2C1.22%2C0%2C0%2C0%2C1.21-1.21V67.95a1.22%2C1.22%2C0%2C0%2C0-1.21-1.21m-6.41%2C8a2.48%2C2.48%2C0%2C1%2C1%2C2.48-2.48%2C2.48%2C2.48%2C0%2C0%2C1-2.48%2C2.48%22%20style%3D%22fill%3A%20%23fff%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GITHUB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%22161.03%22%20height%3D%22157.06%22%20version%3D%221.1%22%20viewBox%3D%220%200%20161.03467%20157.05798%22%20xml%3Aspace%3D%22preserve%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%3E%3Cmetadata%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%2F%3E%3Cdc%3Atitle%2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cg%20transform%3D%22matrix%281.3333%200%200%20-1.3333%20-386.96%20658.07%29%22%3E%3Cg%20transform%3D%22translate%28350.61%20493.55%29%22%3E%3Cpath%20d%3D%22m0%200c-33.347%200-60.388-27.035-60.388-60.388%200-26.68%2017.303-49.316%2041.297-57.301%203.018-0.559%204.126%201.31%204.126%202.905%200%201.439-0.056%206.197-0.082%2011.243-16.8-3.653-20.345%207.125-20.345%207.125-2.747%206.979-6.705%208.836-6.705%208.836-5.479%203.748%200.413%203.671%200.413%203.671%206.064-0.426%209.257-6.224%209.257-6.224%205.386-9.231%2014.127-6.562%2017.573-5.019%200.543%203.902%202.107%206.567%203.834%208.075-13.413%201.526-27.513%206.705-27.513%2029.844%200%206.592%202.359%2011.98%206.222%2016.209-0.627%201.521-2.694%207.663%200.586%2015.981%200%200%205.071%201.622%2016.61-6.191%204.817%201.338%209.983%202.009%2015.115%202.033%205.132-0.024%2010.302-0.695%2015.128-2.033%2011.526%207.813%2016.59%206.191%2016.59%206.191%203.287-8.318%201.22-14.46%200.593-15.981%203.872-4.229%206.214-9.617%206.214-16.209%200-23.195-14.127-28.301-27.574-29.796%202.166-1.874%204.096-5.549%204.096-11.183%200-8.08-0.069-14.583-0.069-16.572%200-1.608%201.086-3.49%204.147-2.898%2023.982%207.994%2041.263%2030.622%2041.263%2057.294%200%2033.353-27.037%2060.388-60.388%2060.388%22%20fill%3D%22%231b1817%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GIT_REPO,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2297px%22%20height%3D%2297px%22%20viewBox%3D%220%200%2097%2097%22%20enable-background%3D%22new%200%200%2097%2097%22%20xml%3Aspace%3D%22preserve%22%3E%3Cg%3E%20%3Cpath%20fill%3D%22%23F05133%22%20d%3D%22M92.71%2C44.408L52.591%2C4.291c-2.31-2.311-6.057-2.311-8.369%2C0l-8.33%2C8.332L46.459%2C23.19%20%20c2.456-0.83%2C5.272-0.273%2C7.229%2C1.685c1.969%2C1.97%2C2.521%2C4.81%2C1.67%2C7.275l10.186%2C10.185c2.465-0.85%2C5.307-0.3%2C7.275%2C1.671%20%20c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.958c-2.752%2C2.751-7.208%2C2.751-9.961%2C0c-2.068-2.07-2.58-5.11-1.531-7.658l-9.5-9.499v24.997%20%20c0.67%2C0.332%2C1.303%2C0.774%2C1.861%2C1.332c2.75%2C2.75%2C2.75%2C7.206%2C0%2C9.959c-2.75%2C2.749-7.209%2C2.749-9.957%2C0c-2.75-2.754-2.75-7.21%2C0-9.959%20%20c0.68-0.679%2C1.467-1.193%2C2.307-1.537V36.369c-0.84-0.344-1.625-0.853-2.307-1.537c-2.083-2.082-2.584-5.14-1.516-7.698%20%20L31.798%2C16.715L4.288%2C44.222c-2.311%2C2.313-2.311%2C6.06%2C0%2C8.371l40.121%2C40.118c2.31%2C2.311%2C6.056%2C2.311%2C8.369%2C0L92.71%2C52.779%20%20C95.021%2C50.468%2C95.021%2C46.719%2C92.71%2C44.408z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.GITLAB_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%3Csvg%20width%3D%22494px%22%20height%3D%22455px%22%20viewBox%3D%220%200%20494%20455%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xmlns%3Asketch%3D%22http%3A%2F%2Fwww.bohemiancoding.com%2Fsketch%2Fns%22%3E%20%20%20%20%20%20%20%20%3Ctitle%3Elogo%3C%2Ftitle%3E%20%20%20%20%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%20%20%20%20%3Cdefs%3E%20%20%20%20%20%20%20%20%3Cpath%20id%3D%22path-1%22%20d%3D%22M0%2C1173.3333%20L1999.99995%2C1173.3333%20L1999.99995%2C0%20L0%2C0%20L0%2C1173.3333%20L0%2C1173.3333%20Z%22%3E%3C%2Fpath%3E%20%20%20%20%3C%2Fdefs%3E%20%20%20%20%3Cg%20id%3D%22Page-1%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%20sketch%3Atype%3D%22MSPage%22%3E%20%20%20%20%20%20%20%20%3Cg%20id%3D%22gitlab_logo%22%20sketch%3Atype%3D%22MSLayerGroup%22%20transform%3D%22translate%28-359.000000%2C%20-360.000000%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g10%22%20transform%3D%22translate%28999.999975%2C%20587.666648%29%20scale%281%2C%20-1%29%20translate%28-999.999975%2C%20-587.666648%29%20translate%280.000000%2C%200.999996%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g16%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18-Clipped%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cmask%20id%3D%22mask-2%22%20sketch%3Aname%3D%22path22%22%20fill%3D%22white%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cuse%20xlink%3Ahref%3D%22%23path-1%22%3E%3C%2Fuse%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fmask%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path22%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g18%22%20mask%3D%22url%28%23mask-2%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20transform%3D%22translate%28358.666658%2C%20358.666658%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g44%22%20transform%3D%22translate%280.532000%2C%200.774933%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M491.999988%2C194.666662%20L464.441322%2C279.481326%20L409.82399%2C447.578655%20C407.014656%2C456.226655%20394.778657%2C456.226655%20391.96799%2C447.578655%20L337.349325%2C279.481326%20L155.982663%2C279.481326%20L101.362664%2C447.578655%20C98.5533309%2C456.226655%2086.3173312%2C456.226655%2083.5066646%2C447.578655%20L28.8893326%2C279.481326%20L1.33199997%2C194.666662%20C-1.18266664%2C186.930662%201.57199996%2C178.455996%208.1519998%2C173.674662%20L246.665327%2C0.385333324%20L485.179988%2C173.674662%20C491.759988%2C178.455996%20494.513321%2C186.930662%20491.999988%2C194.666662%22%20id%3D%22path46%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g48%22%20transform%3D%22translate%28155.197863%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M91.9999977%2C0%20L91.9999977%2C0%20L182.683995%2C279.095993%20L1.31599997%2C279.095993%20L91.9999977%2C0%20L91.9999977%2C0%20Z%22%20id%3D%22path50%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g52%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path54%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g56%22%20transform%3D%22translate%2828.531199%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C0%20L127.982663%2C279.09466%20L0.890666644%2C279.09466%20L218.666661%2C0%20L218.666661%2C0%20Z%22%20id%3D%22path58%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g60%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path62%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g64%22%20transform%3D%22translate%280.088533%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M29.3333326%2C279.999993%20L29.3333326%2C279.999993%20L1.77466662%2C195.185328%20C-0.738666648%2C187.449329%202.01466662%2C178.974662%208.59599979%2C174.194662%20L247.109327%2C0.905333311%20L29.3333326%2C279.999993%20L29.3333326%2C279.999993%20Z%22%20id%3D%22path66%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g68%22%20transform%3D%22translate%28247.197860%2C%201.160267%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22path70%22%3E%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g72%22%20transform%3D%22translate%2829.421866%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L127.091997%2C0%20L72.4733315%2C168.097329%20C69.6626649%2C176.746662%2057.4266652%2C176.746662%2054.617332%2C168.097329%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path74%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g76%22%20transform%3D%22translate%28247.197860%2C%201.160800%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%2C0%20L90.6839977%2C279.09466%20L217.775995%2C279.09466%20L0%2C0%20L0%2C0%20Z%22%20id%3D%22path78%22%20fill%3D%22%23FC6D26%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g80%22%20transform%3D%22translate%28246.307061%2C%200.255867%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M218.666661%2C279.999993%20L218.666661%2C279.999993%20L246.225327%2C195.185328%20C248.73866%2C187.449329%20245.985327%2C178.974662%20239.403994%2C174.194662%20L0.890666644%2C0.905333311%20L218.666661%2C279.999993%20L218.666661%2C279.999993%20Z%22%20id%3D%22path82%22%20fill%3D%22%23FCA326%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cg%20id%3D%22g84%22%20transform%3D%22translate%28336.973725%2C%20280.255593%29%22%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M127.999997%2C0%20L0.907999977%2C0%20L55.5266653%2C168.097329%20C58.3373319%2C176.746662%2070.5733316%2C176.746662%2073.3826648%2C168.097329%20L127.999997%2C0%20L127.999997%2C0%20Z%22%20id%3D%22path86%22%20fill%3D%22%23E24329%22%20sketch%3Atype%3D%22MSShapeGroup%22%3E%3C%2Fpath%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%20%20%20%20%3C%2Fg%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.BITBUCKET_FILE,"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2065%2063.27%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E.cls-2%7Bfill%3Anone%3B%7D.cls-3%7Bfill%3A%232684ff%3B%7D.cls-4%7Bfill%3Aurl%28%23New_Gradient_Swatch_1%29%3B%7D%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22New_Gradient_Swatch_1%22%20x1%3D%2264.01%22%20y1%3D%2230.27%22%20x2%3D%2232.99%22%20y2%3D%2254.48%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.18%22%20stop-color%3D%22%230052cc%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%232684ff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Ctitle%3EBitbucket-blue%3C%2Ftitle%3E%20%20%3Cg%20id%3D%22Layer_2%22%20data-name%3D%22Layer%202%22%3E%20%20%20%20%3Cg%20id%3D%22Blue%22%3E%20%20%20%20%20%20%3Cpolygon%20class%3D%22cls-2%22%20points%3D%2224.7%2043.51%2037.75%2043.51%2040.9%2025.12%2021.23%2025.12%2024.7%2043.51%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-3%22%20d%3D%22M2%2C6.26A2%2C2%2C0%2C0%2C0%2C0%2C8.58L8.49%2C60.12a2.72%2C2.72%2C0%2C0%2C0%2C2.66%2C2.27H51.88a2%2C2%2C0%2C0%2C0%2C2-1.68L62.37%2C8.59a2%2C2%2C0%2C0%2C0-2-2.32ZM37.75%2C43.51h-13L21.23%2C25.12H40.9Z%22%2F%3E%20%20%20%20%20%20%3Cpath%20class%3D%22cls-4%22%20d%3D%22M59.67%2C25.12H40.9L37.75%2C43.51h-13L9.4%2C61.73a2.71%2C2.71%2C0%2C0%2C0%2C1.75.66H51.89a2%2C2%2C0%2C0%2C0%2C2-1.68Z%22%2F%3E%20%20%20%20%3C%2Fg%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.S3_OBJECT,"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3EStorage%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2221.54%2023.23%2016.08%2025.96%2016.08%2073.93%2021.54%2076.66%2034.94%2049.94%2021.54%2023.23%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2021.54%2076.65%2021.54%2023.23%2050%2030.12%2063.45%2050.02%2050%2069.76%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2069.76%2078.45%2076.65%2083.37%2050.62%2078.45%2023.23%2050%2030.12%2050%2069.76%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.45%2023.23%2083.92%2025.96%2083.92%2073.93%2078.45%2076.66%2078.45%2023.23%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2058.78%2050%2060.37%2059.84%2050.02%2050%2039.68%2037.59%2041.24%2037.59%2058.78%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2035.01%2037.59%2032.75%2050%209%2062.41%2032.75%22%20fill%3D%22%235e1f18%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2067.25%2050%2064.97%2037.59%2067.25%2050%2091%2062.41%2067.25%22%20fill%3D%22%23f2b0a9%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2032.75%2050%2029.68%2050%209%2062.41%2015.2%2062.41%2032.75%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2237.59%2032.75%2050%2029.68%2050%209%2037.59%2015.2%2037.59%2032.75%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2062.41%2084.8%2062.41%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%23e05243%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2250%2091%2037.59%2084.8%2037.59%2067.25%2050%2070.32%2050%2091%22%20fill%3D%22%238c3123%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2262.41%2058.78%2050%2060.37%2050%2039.68%2062.41%2041.24%2062.41%2058.78%22%20fill%3D%22%23e05243%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.HELM_CHART,"helm-chart-artifact2320ab55b431ba0a.svg"),im.registerType(fp.IVY_FILE,"ivy-artifact537f2ce5956f4038.svg"),im.registerType(fp.JENKINS_FILE,"jenkins-file-artifactffa863534b26f298.svg"),im.registerType(fp.MAVEN_FILE,"data:image/svg+xml,%3Csvg%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2232mm%22%20width%3D%2232mm%22%20version%3D%221.1%22%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%20viewBox%3D%220%200%20113.38583%20113.38582%22%3E%20%3Cg%20transform%3D%22translate%28-212.06%20-472.38%29%22%3E%20%20%3Cg%20transform%3D%22translate%288.4853%20-1.4142%29%22%3E%20%20%20%3Cpath%20fill%3D%22%23e8a1a2%22%20d%3D%22m240.91%20580.01c-1.4824-4.2852-3.0745-9.2894-3.538-11.12-1.1372-4.4931-1.6472-4.8098-4.1569-2.5813-2.1418%201.9018-2.1462%201.9003-0.97095-0.33946%201.0077-1.9204%200.9278-2.25-0.54562-2.25-1.5731%200-1.5619-0.12023%200.12599-1.3544%201.7365-1.2698%201.6088-1.5199-2.041-4-2.4685-1.6774-3.2594-2.6456-2.1612-2.6456%202.1818%200%202.2506%200.42403-1.1547-7.1117-6.3934-14.148-9.1638-31.223-8.7054-53.655%200.26565-13%200.57841-15.561%202.1071-17.25%202.169-2.3967%202.745-2.4287%207.0398-0.39064%202.1654%201.0275%204.0683%203.0685%205.3612%205.75%202.5118%205.2098%204.2463%2018.35%202.7926%2021.157-0.92374%201.7835-0.85705%201.8525%200.61602%200.63738%202.0383-1.6814%202.7958-0.21965%203.0241%205.835%200.0833%202.209%200.54518%204.0188%201.0264%204.0219%200.48125%200.003%200.605%201.3557%200.275%203.0057s-0.19352%203%200.30328%203c2.6941%200%203.7428%2017.64%201.4808%2024.906-1.6203%205.2051%201.6784%200.7327%205.5919-7.5816%207.4605-15.85%2018.983-31.543%2033.937-46.223%2010.047-9.862%2014.218-12.61%2016.932-11.158%207.3999%203.9603%204.4295%2017.155-6.47%2028.741-2.791%202.9668-4.4785%205.1654-3.75%204.8858%202.3126-0.88743%201.4341%201.8404-1.8925%205.8761-1.7694%202.1466-3.3115%204.5462-3.4269%205.3325s-1.1503%202.0883-2.2997%202.8934c-1.1494%200.80509-1.8715%201.8172-1.6045%202.2491%200.64529%201.0441-4.8466%209.7279-8.8005%2013.915-3.6411%203.8562-9.5531%207.1556-12.862%207.1777-1.6096%200.0108-1.8993%200.26298-0.97519%200.84897%201.5334%200.97236%206.1197%200.31492%207.9595-1.141%200.70079-0.55456%201.5178-0.76462%201.8157-0.46679%200.68106%200.68106-5.8716%205.7435-7.4342%205.7435-0.63559%200-1.1556%200.43588-1.1556%200.96861%200%200.53274%200.74882%200.68127%201.664%200.33007%201.1573-0.44408%201.4322-0.26346%200.90287%200.59306-1.0808%201.7487-5.096%203.1042-9.7336%203.2859-3.501%200.13718-3.9164%200.40636-3.456%202.2391%200.50216%201.9991%200.4667%202.0075-0.87842%200.20849-1.2384-1.6564-1.0516-2.5682%201.604-7.8289%202.721-5.3903%2013.868-24.641%2017.811-30.758%200.8725-1.3537%201.0905-2.1559%200.4845-1.7825-1.7197%201.0594-17.765%2028.347-24.189%2041.136l-2.5006%204.9786%202.7335%208.3935c3.4677%2010.648%202.7166%2011.942-0.88644%201.5269zm-0.10056-17.041c0.42418-1.404%200.25625-2.25-0.44662-2.25-0.61952%200-0.86751%200.41891-0.55108%200.9309%200.31644%200.512%200.16515%201.1844-0.33619%201.4943-0.50134%200.30984-1.1943-0.17347-1.5398-1.074-0.34558-0.90056-0.85533-1.4104-1.1328-1.133-0.27744%200.27744-0.0251%201.7651%200.5607%203.306%201.1274%202.9652%202.2955%202.5332%203.4458-1.2742zm-5.5256-9.9968c-1.0612-3.7108-1.9294-7.1608-1.9294-7.6667%200-0.50592-0.25022-0.66963-0.55604-0.36381-0.52233%200.52233%202.1863%2012.37%203.2048%2014.018%201.2636%202.0446%201.0362%200.15112-0.71935-5.9875zm-4.4557-17.727c-0.93421-4.1991-1.9183-7.415-2.1869-7.1464-0.26861%200.2686%200.31288%203.8871%201.2922%208.0411%200.97931%204.154%201.9634%207.3699%202.1869%207.1464%200.2235-0.22351-0.35799-3.842-1.2922-8.0411zm-3.0737-14.426c-0.36648-2.2918-0.87608-3.9572-1.1324-3.7009-0.25636%200.25637-0.15176%202.3268%200.23245%204.6009s0.89381%203.9395%201.1324%203.7009c0.23863-0.23864%200.13403-2.309-0.23245-4.6009zm45.009-6.1437c3.0475-4.424%205.0948-7.768%204.5497-7.4311-1.1721%200.72439-11.233%2015.475-10.555%2015.475%200.25562%200%202.9582-3.6196%206.0056-8.0437zm-46.726-1.1438c-0.31922-0.79773-0.55618-0.56078-0.60416%200.60417-0.0434%201.0542%200.19292%201.6448%200.52522%201.3125%200.33229-0.3323%200.36781-1.1948%200.0789-1.9167zm-0.99378-9.5625c-0.25153-0.9625-0.45733-0.175-0.45733%201.75s0.2058%202.7125%200.45733%201.75c0.25152-0.9625%200.25152-2.5375%200-3.5zm55.438%200c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-1.6658%201.3064-2.1955%202.1276-1.3724%202.1276%200.20765%200%200.99515-0.7875%201.75-1.75zm-50.173%2080.37c1.8714-4.922%206.1906-12.808%206.7233-12.275%200.64112%200.64113-5.4132%2013.374-6.7529%2014.202-0.54189%200.33491-0.52977-0.45565%200.0295-1.9267z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23f8a52a%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.3539%203.9511-11.385-39.693-14.286-62.157l-1.368-10.593%200.37967%2010c0.51206%2013.487%205.5806%2038.798%2012.514%2062.493%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143%200.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.5314-16.99-11.952-33.628-11.87-57.739%200.0614-18.043%200.65624-20.888%204.4601-21.335%207.1233-0.83622%2011.788%207.2931%2011.99%2020.896%200.0995%206.7048%200.41125%208.5089%201.3385%207.7456%201.6189-1.3328%202.7298%203.0911%201.9629%207.8168-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%206.6604-13.266%2015.19-25.095%2027.19-37.705%2015.39-16.173%2021.504-19.166%2024.479-11.986%201.047%202.5278%201.06%204.0393%200.0665%207.7627-2.0495%207.6813-10.5%2019.159-15.205%2020.653-2.5932%200.82304-1.4824%202.4338%201.1954%201.7336%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-3.4249%200-4.6564%200.34222-4.1544%201.1545%200.43457%200.70315%200.2751%200.88354-0.40791%200.46142-2.661-1.6446%2023.158-44.042%2037.881-62.204%209.6668-11.925%2010.352-13.178%202.9574-5.4121-11.195%2011.758-25.777%2033.509-40.138%2059.871-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23ee8a2e%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4444%204.2152-12.641-45.572-14.224-63.25l-0.67174-7.5%203.9696-3.8462%203.9696-3.8462%201.2942%203.8462c0.71181%202.1154%201.3235%207.2934%201.3593%2011.507%200.0499%205.8679%200.34798%207.4268%201.2739%206.6618%201.6189-1.3376%202.7301%203.0854%201.9629%207.8133-0.49112%203.0264-0.36328%203.3534%200.90085%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24165%200.76529-0.73025%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%203.1212-6.217%208.5466-15.168%2012.056-19.89%206.4511-8.6802%2022.123-25.914%2023.566-25.914%200.4305%200%201.0767%201.1712%201.4359%202.6026%200.51967%202.0705-0.0742%203.4504-2.9048%206.75-10.644%2012.407-25.113%2034.515-37.644%2057.518-6.1651%2011.317-7.6224%2014.756-6.8581%2016.184%200.53378%200.99738%200.94199%202.4055%200.90712%203.1292-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-8.9594-17.843-12.488-36.385-11.898-62.524l0.10773-4.7731%202.3532%201.5419c2.083%201.3648%202.42%202.5444%202.9354%2010.273%200.87913%2013.184%206.336%2039.513%2012.689%2061.225%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.8279-1.8279%2024.6-44.87%2037.239-60.65l6.2075-7.75h5.9103c7.0286%200%207.2251%200.58116%202.5402%207.5134-4.0552%206.0005-8.1478%2010.199-10.746%2011.023-2.5763%200.81769-1.4423%202.422%201.2199%201.7258%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23a0579b%22%20d%3D%22m233.34%20578.74c2.2061-4.3878%204.0112-8.9144%204.0112-10.059%200-1.1447%200.36736-1.8542%200.81635-1.5767%200.44899%200.27749%201.5191-1.046%202.3781-2.941%201.2158-2.6824%201.275-3.4455%200.26698-3.4455-0.7121%200-1.4875%200.5625-1.723%201.25-1.4255%204.1602-13.738-50.443-13.738-60.925%200-3.9763%200.2069-4.3251%202.5657-4.3251%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.5414%207.2635%200.83326%2014.446-1.9652%2019.931-1.1416%202.2376-1.649%204.0684-1.1278%204.0684%201.6726%200%204.659-4.6191%2010.471-16.196%205.815-11.583%2014.544-24.164%2023.356-33.663%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9171%2010.904c-9.8621%2013.583-20.076%2029.991-29.524%2047.428-5.6996%2010.52-7.063%2013.813-6.3051%2015.229%200.53191%200.99388%200.93859%202.3991%200.90372%203.1228-0.0349%200.72366-0.52319%200.19074-1.0852-1.1843-0.97068-2.375-1.2182-2.1124-4.9487%205.25-2.1598%204.2625-4.1515%207.75-4.426%207.75-0.27449%200%201.306-3.59%203.5121-7.9778zm9.0901%205.3096c-0.0434-0.64252-0.33793-1.9925-0.65446-3-0.54705-1.7412-0.51883-1.7434%200.57078-0.0441%200.63045%200.98322%200.92496%202.3332%200.65445%203-0.35498%200.87499-0.51379%200.88727-0.57077%200.0441zm-9.2887-21.356c0.24021-1.6367%200.0482-2.9858-0.42675-2.998-0.47493-0.0122-1.9885-0.95412-3.3635-2.0931-1.7885-1.4815-1.9782-1.9019-0.66644-1.4771%201.0085%200.32657%201.6639%200.25596%201.4566-0.15691-7.5974-15.13-11.778-32.994-11.786-50.362-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.4438%2013.019%207.1395%2039.22%2012.532%2057.649%201.2478%204.2643%201.2661%204.9404%200.0831%203.0709-0.70095-1.1077-1.2282-1.1704-2.3079-0.27424-1.1575%200.96065-1.324%200.64698-0.96271-1.8143zm11.943%200.42401c-1.6524-1.6524%2024.342-44.54%2035.278-58.204%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.5503%209.0204-14.408%2016.082-20.264%2016.156-0.9625%200.0121-1.75%200.47196-1.75%201.022%200%201.3119%205.5942%201.2875%208.0657-0.0352%201.0638-0.56935%201.9343-0.75399%201.9343-0.4103%200%201.1947-4.5108%204.3792-6.25%204.4122-1.9687%200.0374-2.4476%202.0155-0.5%202.0651%200.70412%200.0179%200.40229%200.67298-0.69113%201.5-1.0894%200.82402-4.077%201.4682-6.809%201.4682-2.9906%200-4.6295%200.38564-4.2498%201%200.67773%201.0966%200.18616%201.3528-0.76691%200.39976z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d9555d%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.53192-2.7675-1.9493-5.3828-5.633-10.394-9.7349-29.495-9.7423-45.366-0.004-8.5328%200.0177-8.6072%202.3774-8.1561%202.1048%200.40235%202.4608%201.1704%203.0642%206.6113%201.3157%2011.864%207.161%2039.457%2012.161%2057.406%200.38001%201.3642%200.18716%202.25-0.48987%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.085-1.4621c-1.1463-0.75519-0.12074-3.2717%205.4085-13.271%207.5732-13.696%2020.99-34.488%2027.517-42.643%204.2053-5.2544%204.2649-5.2867%206.367-3.4544%201.1671%201.0173%203.3335%202.4537%204.8144%203.1922%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.1274%203.0951-4.8813%204.0563-3.4635%201.8982-3.5904%203.506-0.20681%202.6212%202.0694-0.54117%202.0658-0.49392-0.23563%203.0169-1.2859%201.9617-3.6686%204.3527-5.295%205.3134-2.5848%201.5269-2.7263%201.8276-1.1244%202.3896%201.576%200.55283%201.3578%200.9467-1.5584%202.8134-2.2594%201.4463-2.8101%202.1762-1.6502%202.1875%201.4874%200.0144%201.3089%200.71866-1.2265%204.8392-5.7488%209.343-14.425%2016.094-20.764%2016.156-1.2375%200.0121-2.25%200.52921-2.25%201.1492%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.5006%201.4641-8.4104%202.1624-9.9146%201.1714zm-10.35-2.8605c-0.27024-1.5125-1.9027-7.925-3.6276-14.25-3.8171-13.997-8.108-36.524-8.108-42.567%200-4.0926%200.19724-4.4334%202.5657-4.4334%201.4112%200%203.4251-0.45991%204.4754-1.022%201.6085-0.86085%202.0116-0.61573%202.5563%201.5543%200.35564%201.417%200.38906%204.1634%200.0743%206.1032-0.47971%202.9561-0.34429%203.3376%200.83677%202.3575%201.1386-0.94491%201.5364-0.66207%202.0723%201.4731%200.36478%201.4534%200.40568%204.2296%200.0909%206.1694-0.49112%203.0264-0.36327%203.3534%200.90086%202.3043%201.1834-0.98217%201.3868-0.94897%201.0338%200.1688-0.24166%200.76529-0.73026%202.7075-1.0858%204.3161-0.54261%202.455-0.41766%202.7348%200.7782%201.7423%201.1895-0.98722%201.6353-0.18963%202.7012%204.8334%201.6176%207.6223%200.76802%2014.931-2.3929%2020.587-1.3565%202.4271-2.0831%204.4129-1.6147%204.4129%201.1318%200%208.0075-8.072%208.0075-9.4007%200-0.57236%202.0354-5.1039%204.5232-10.07%204.7721-9.5263%2013.911-22.441%2022.211-31.388%204.7543-5.1249%205.0822-5.2996%207.5078-4l2.5364%201.359-7.9327%2010.926c-7.9323%2010.925-20.408%2030.492-27.181%2042.63-1.9776%203.5442-4.045%206.3369-4.5942%206.206-0.54923-0.13091-0.74165%200.43159-0.4276%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.4798%200-3.0778-0.47187-3.4848-2.75zm8.3919-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23e56636%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.2127-2.1932-1.903-2.5029c0.30969-0.30968-0.82795-3.4069-2.5281-6.8828-5.2654-10.765-9.0932-30.085-9.1-45.931-0.003-6.4246%200.0644-6.5985%202.3772-6.1564%202.1594%200.4128%202.4441%201.1183%203.0718%207.6113%201.2154%2012.574%205.1314%2030.731%2012.165%2056.406%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.104-1.4505c-1.1331-0.7471-0.60134-2.3678%202.8256-8.6118%2010.132-18.462%2019.444-33.053%2029.884-46.83%204.3859-5.7876%204.4216-5.8091%206.5482-3.9544%201.176%201.0257%203.3498%202.469%204.8307%203.2075%202.6064%201.2997%202.6383%201.4164%201%203.6512-0.93085%201.2697-3.155%203.1099-4.9424%204.0892-3.581%201.9619-4.4062%203.8275-1.25%202.8258%202.4434-0.77549%202.495-0.14656%200.29394%203.5796-0.93834%201.5885-3.3008%203.6544-5.25%204.591-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4882%201.4568-8.4073%202.1645-9.8958%201.183zm-10.397-2.8721c-0.28577-1.5125-2.0781-8.8284-3.9828-16.257-3.797-14.809-7.7246-35.885-7.7246-41.451%200-3.1933%200.27052-3.5432%202.75-3.557%201.5125-0.008%203.4131-0.43467%204.2236-0.94722%203.1162-1.9707%204.1457%204.8974%201.5007%2010.012-1.7991%203.479-1.3116%203.7654%201.4196%200.83387l1.9718-2.1165%200.7143%203.8075c0.41102%202.191%200.25033%205.0367-0.37849%206.7026-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%203.177-8.9807%2016.825-29.501%2026.607-40.005%204.0422-4.3404%204.3511-4.4839%206.8431-3.1782l2.6098%201.3674-5.7565%207.4853c-5.5704%207.2434-16.25%2022.982-18.921%2027.883-0.71861%201.3188-2.8308%204.9188-4.6938%208s-4.7645%208.0772-6.4478%2011.102c-1.6833%203.025-3.51%205.3929-4.0594%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42714%201.1131-0.18318%201.488-2.4225%201.488-2.473%200-3.0838-0.47816-3.5131-2.75zm8.4202-7c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23953a8a%22%20d%3D%22m232.38%20581.22c0-0.55%200.43621-1.675%200.96937-2.5s0.96937-1.05%200.96937-0.5-0.43621%201.675-0.96937%202.5-0.96937%201.05-0.96937%200.5zm1.9694-18.927c0-0.78508-1.1097-2.3003-2.4661-3.3672s-2.1836-2.2223-1.8383-2.5676c0.34526-0.34526-0.52619-2.7675-1.9366-5.3828-4.3364-8.041-6.7059-17.289-9.1878-35.861-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0403%203.5253%206.5198%2031.436%2011.619%2050.051%200.37202%201.358%200.1737%202.25-0.50025%202.25-0.61415%200-1.1166-0.64234-1.1166-1.4274zm13.16-1.4157c-1.0904-0.72083-0.96415-1.6213%200.67868-4.8416%203.6946-7.2419%2015.279-26.709%2020.784-34.927l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-3.1139%203.094-10.659%206.968-13.571%206.968-1.1773%200-2.1405%200.50725-2.1405%201.1272%200%200.75009%201.6731%200.96646%205.0007%200.64673%204.0039-0.38473%204.7874-0.22358%203.9309%200.80849-0.58837%200.70895-2.3887%201.5787-4.0007%201.9327-3.1838%200.69928-4.0133%202.466-1.1809%202.5152%201.4792%200.0257%201.5179%200.16633%200.25%200.90866-2.4503%201.4347-8.398%202.1708-9.8395%201.2178zm-10.808-4.4068c-3.9503-15.231-8.4522-35.009-8.9341-39.25-0.55928-4.9215-0.50815-5.0392%203.2567-7.4996%202.1037-1.3748%204.347-3.1691%204.9851-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%201.2738-1.0572%201.653-0.22631%202.6826%205.8779%201.3301%207.8859%200.41614%2013.825-3.0354%2019.724-1.0458%201.7875-1.5018%203.25-1.0132%203.25%201.615%200%207.5499-7.7426%208.934-11.655%202.7833-7.8678%2019.916-34.345%2022.223-34.345%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.14937-1.9826%203.55-4.4059%207.557-2.4232%204.007-5.7825%209.7605-7.4651%2012.785-1.6826%203.025-3.5088%205.3929-4.0581%205.262-0.5494-0.13091-0.74195%200.43159-0.4279%201.25%200.42404%201.105-0.17012%201.488-2.3086%201.488-2.5482%200-3.0065-0.48911-3.9819-4.25zm8.7751-5.5c1.2439-1.5861%201.2085-1.6214-0.37756-0.37756-0.9625%200.75485-1.75%201.5424-1.75%201.75%200%200.82304%200.82119%200.29331%202.1276-1.3724z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23b93368%22%20d%3D%22m229.62%20550.73c-4.5614-2.7739-7.6998-13.229-10.692-35.62-0.53866-4.0306-0.49396-4.104%202.4378-4%201.6426%200.0583%202.9875%200.19557%202.9888%200.30515%200.0207%201.8074%204.784%2024.184%206.6332%2031.161%201.3645%205.1484%202.3225%209.5192%202.1287%209.713-0.19376%200.19375-1.7671-0.50814-3.4964-1.5598zm3.3618-8.7222c-3.6221-15.214-5.6262-25.062-5.6183-27.607%200.004-1.4075%201.3383-3.0738%203.75-4.6842%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60046%203.2007-0.49366%203.5351%200.78905%202.4706%202.2862-1.8974%204.3241%2011.23%202.7275%2017.571-1.3475%205.3514-3.3184%209.43-5.3861%2011.146-1.2562%201.0426-1.8405-0.3426-4.038-9.5728zm18.076%2010.076c-0.64872-0.64871%2010.414-19.771%2017.923-30.98l5.4342-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%200.825-0.31658%201.5-0.24622%201.5%200.15636%200%201.1908-6.5289%2010.495-9.2884%2013.237-4.225%204.198-16.251%209.0958-18.011%207.3356zm-3.7203-5.4144c-1.6525-3.9895-0.58695-7.2754%206.0354-18.612%205.1782-8.8643%2014.889-22.341%2016.097-22.341%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.565-6.898%2010.715%200%200.41204-9.2079%2015.725-10.011%2016.648-0.38541%200.4431-1.2894-0.61555-2.0089-2.3526z%22%2F%3E%20%20%20%3Cpath%20fill%3D%22%23d0334d%22%20d%3D%22m268.92%20543.41c0.39936-1.0407%200.16314-1.6939-0.61257-1.6939-0.69443%200-2.7035-1.099-4.4647-2.4423-2.5028-1.909-3.4785-2.182-4.4679-1.25-1.964%201.8499%203.5846-7.9204%209.6087-16.92l5.4301-8.112%205.5666%201.294c3.0616%200.7117%206.1987%201.0515%206.9712%200.75503%203.9642-1.5212-1.2122%206.2605-5.5515%208.3455-3.3984%201.6329-3.4459%201.7267-1.1565%202.2847%202.2951%200.55931%202.2467%200.65759-1.25%202.5407-3.5284%201.9002-5.1631%204.3035-2.1374%203.1424%202.1429-0.82232%201.8896%200.0794-1.5114%205.3794-3.4044%205.3054-7.5528%209.6161-6.4246%206.6761zm-46.308-7.299c-1.065-3.6153-2.3791-11.094-3.6902-21.001-0.53331-4.0299-0.48805-4.104%202.4446-4%202.6018%200.0922%203.0678%200.55823%203.6051%203.6059%200.33938%201.925%201.4647%207.712%202.5008%2012.86%201.036%205.148%201.8837%209.5355%201.8837%209.75%200%200.21446-1.0875%200.38992-2.4167%200.38992s-2.5884%200.5152-2.7983%201.1449c-0.20989%200.62969-0.89795-0.60781-1.529-2.75zm6.8793-9.4428c-2.8681-13.469-2.8186-13.987%201.6215-16.952%202.0587-1.3748%204.2652-3.1691%204.9033-3.9874%201.7148-2.199%202.9854%205.4383%201.5413%209.2642-0.93555%202.4786-0.86844%202.809%200.46645%202.2968%201.3089-0.50226%201.4477-0.004%200.86477%203.1034-0.60089%203.203-0.4943%203.5356%200.79119%202.4688%201.2587-1.0446%201.5813-0.65346%202.1116%202.5604%201.4575%208.8336%201.4278%209.864-0.28538%209.8878-0.90753%200.0126-3.5016%200.32963-5.7647%200.70445l-4.1146%200.68151-2.1354-10.028zm25.578%206.8509c-0.98257-1.0318-2.2201-1.608-2.75-1.2804-0.52994%200.32752-0.96237%200.23144-0.96096-0.21352%200.008-2.4071%2016.461-26.309%2018.111-26.309%200.41358%200%201.0679%201.0125%201.4541%202.25s1.0456%202.475%201.4654%202.75c0.41975%200.275-2.3409%205.1993-6.1348%2010.943-3.7939%205.7436-6.898%2010.751-6.898%2011.128%200%202.0224-2.63%202.4718-4.2865%200.73246z%22%2F%3E%20%20%3C%2Fg%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.HTTP_FILE,"data:image/svg+xml,%3Csvg%20id%3D%22svg2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%22145mm%22%20width%3D%22145mm%22%20version%3D%221.1%22%20viewBox%3D%220%200%20513.77953%20513.77951%22%3E%20%3Cg%20id%3D%22layer1%22%20transform%3D%22translate%28-87.403%20-17.44%29%22%3E%20%20%3Cg%20id%3D%22text3336%22%3E%20%20%20%3Cpath%20id%3D%22path3372%22%20d%3D%22m145.34%20318.08v-51.12q0-10.98-3.06-15.84t-11.16-4.86q-5.94%200-10.98%204.14-4.86%203.96-6.48%2010.26v57.42h-23.4v-126h23.4v46.08h0.72q4.32-5.76%2010.62-9.18t16.02-3.42q6.84%200%2012.06%201.8t8.64%205.94q3.6%204.14%205.22%2011.34%201.8%207.02%201.8%2017.46v55.98h-23.4z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3374%22%20d%3D%22m178.99%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3376%22%20d%3D%22m240.51%20228.08h12.42v-16.92l23.4-6.66v23.58h21.96v19.8h-21.96v34.56q0%209.36%201.8%2013.5%201.98%203.96%207.2%203.96%203.6%200%206.12-0.72%202.7-0.72%205.94-2.16l4.14%2018q-4.86%202.34-11.34%203.96t-13.14%201.62q-12.42%200-18.36-6.3-5.76-6.48-5.76-21.06v-45.36h-12.42v-19.8z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3378%22%20d%3D%22m312.8%20228.08h17.1l2.7%2010.8h0.72q4.68-6.84%2010.98-10.08%206.48-3.24%2015.66-3.24%2016.92%200%2025.38%2010.8%208.46%2010.62%208.46%2034.38%200%2011.52-2.7%2020.88-2.7%209.18-8.1%2015.66-5.22%206.48-12.96%209.9-7.56%203.42-17.46%203.42-5.58%200-9.18-0.9-3.6-0.72-7.2-2.52v36.9h-23.4v-126zm40.14%2017.28q-6.84%200-10.8%203.42-3.78%203.42-5.94%2010.26v37.44q2.52%201.98%205.4%203.24%203.06%201.08%207.92%201.08%2010.08%200%2015.12-7.02%205.04-7.2%205.04-23.58%200-11.88-3.96-18.36t-12.78-6.48z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3380%22%20d%3D%22m416.66%20241.04q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08zm0%2065.16q0-6.3%203.96-9.9%203.96-3.78%2010.44-3.78%206.84%200%2010.8%203.78%203.96%203.6%203.96%209.9t-3.96%2010.08-10.8%203.78q-6.48%200-10.44-3.78t-3.96-10.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3382%22%20d%3D%22m508.38%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%20%3Cpath%20id%3D%22path3384%22%20d%3D%22m581.85%20189.92%2017.64%207.92-64.26%20145.44-17.64-8.28%2064.26-145.08z%22%2F%3E%20%20%3C%2Fg%3E%20%20%3Ctext%20id%3D%22text3340%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20y%3D%2292.362206%22%20x%3D%22-511.42856%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3Ctspan%20id%3D%22tspan3342%22%20x%3D%22-511.42856%22%20y%3D%2292.362206%22%2F%3E%3C%2Ftext%3E%20%20%3CflowRoot%20id%3D%22flowRoot3344%22%20style%3D%22word-spacing%3A0px%3Bletter-spacing%3A0px%22%20xml%3Aspace%3D%22preserve%22%20font-size%3D%2240px%22%20font-stretch%3D%22condensed%22%20line-height%3D%22125%25%22%20font-family%3D%22Impact%22%20fill%3D%22%23000000%22%3E%3CflowRegion%20id%3D%22flowRegion3346%22%3E%3Crect%20id%3D%22rect3348%22%20height%3D%2257.143%22%20width%3D%22225.71%22%20y%3D%22489.51%22%20x%3D%2274.286%22%2F%3E%3C%2FflowRegion%3E%3CflowPara%20id%3D%22flowPara3350%22%2F%3E%3C%2FflowRoot%3E%20%3C%2Fg%3E%3C%2Fsvg%3E"),im.registerType(fp.ORACLE_OBJECT,"data:image/svg+xml,%3Csvg%20width%3D%2236%22%20height%3D%2236%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%200h36v36H0V0z%22%20fill%3D%22%23C74634%22%2F%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.541%2022.139c2.277%200%204.126-1.855%204.126-4.143a4.134%204.134%200%2000-4.126-4.139H14.46a4.134%204.134%200%2000-4.128%204.139%204.135%204.135%200%20004.128%204.143h7.082zm-7.245%202.257c-3.52%200-6.376-2.865-6.376-6.4%200-3.534%202.855-6.393%206.376-6.393h7.408c3.52%200%206.373%202.86%206.373%206.393%200%203.54-2.853%206.403-6.373%206.403l-7.409-.003z%22%20fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E");class rm{static removeReferenceFromStages(e,t){(t||[]).forEach((t=>{const n=Om.pipeline.getStageConfig(t);m(n,["artifactRemover"],pe)(t,e)}))}static removeReferencesFromStages(e,t){e.forEach((e=>rm.removeReferenceFromStages(e,t)))}static removeArtifactFromField(e,t,n){const a=m(t,e);Array.isArray(a)?g(t,e,a.filter((e=>e!==n))):a===n&&g(t,e,null)}static removeArtifactFromFields(e){return(t,n)=>e.forEach((e=>this.removeArtifactFromField(e,t,n)))}}const sm=e=>e.artifacts.map(((e,t)=>{const{location:n,reference:a,type:i}=e;let{name:r}=e;const s=im.getPath(i),o=`${n||""}${i||""}${a||""}`||String(t);let l=i;if(w(i)&&i.length>0){const e=i.match(fp.KUBERNETES);if(null!=e&&e[1].length>0){r=`${e[1].substr(0,1).toUpperCase()+e[1].substr(1)} ${r}`,l=r}}return ot.createElement("div",{key:o,className:"artifact-list-item",title:l},s&&ot.createElement("img",{className:"artifact-list-item-icon",width:"20",height:"20",src:s}),ot.createElement("span",{className:"artifact-list-item-name"},r,e.version&&ot.createElement("span",null," - ",e.version)))}));oi(".execution-artifacts {\n background: var(--color-alabaster);\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-right: 0;\n padding: 6px;\n}\n.artifact-list-container {\n background: var(--color-white);\n padding: 8px 6px 6px;\n}\n.artifact-list-container > h5 {\n margin-top: 0;\n}\n.artifact-list-item {\n height: 28px;\n position: relative;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-bottom: 0.1em;\n}\n.artifact-list-item-icon {\n position: absolute;\n top: 4px;\n}\n.artifact-list-item-name {\n padding-left: 24px;\n}\n");class om extends ot.Component{extractBoundArtifactsFromExecution(e){const t=m(e,["trigger","resolvedExpectedArtifacts"],[]),n=m(e,"stages",[]).reduce(((e,t)=>{const n=m(t,["outputs","resolvedExpectedArtifacts"],[]);return e.concat(n)}),[]);return t.concat(n).filter((e=>H(e,"boundArtifact")))}artifactLists(){const{stage:e,execution:t}=this.props,n=Om.pipeline.getStageConfig(e),a=m(e,["context"],{}),i=new Set(n&&n.artifactExtractor?n.artifactExtractor(a):[]);return{consumedArtifacts:this.extractBoundArtifactsFromExecution(t).filter((e=>i.has(e.id))).map((e=>e.boundArtifact)).filter((({name:e,type:t})=>e&&t)),producedArtifacts:m(e,["outputs","artifacts"],[]).slice()}}render(){const{consumedArtifacts:e,producedArtifacts:t}=this.artifactLists();return ot.createElement(Ep,{name:this.props.name,current:this.props.current},ot.createElement("div",{className:"row execution-artifacts"},ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Consumed Artifacts"),ot.createElement("div",null,ot.createElement(sm,{artifacts:e}))),ot.createElement("div",{className:"col-sm-6 artifact-list-container"},ot.createElement("h5",null,"Produced Artifacts"),ot.createElement("div",null,ot.createElement(sm,{artifacts:t})))))}}om.title="artifactStatus";const lm="spinnaker.core.artifact.artifactTab.component";n(lm,[]).component("executionArtifactTab",yn(Gl(om,"executionArtifactTab"),["config","stage","execution"]));class cm{static getExpectedArtifactsAvailableToStage(e,t){if(!e||!t)return[];let n=t.expectedArtifacts||[];return nd.getAllUpstreamDependencies(t,e).forEach((e=>{const t=e.expectedArtifact;t&&(n=n.concat(t));const a=e.expectedArtifacts;a&&(n=n.concat(a))})),n}static accumulateArtifacts(e){return t=>e.map((e=>m(t,e))).filter((e=>e)).reduce(((e,t)=>e.concat(t)),[])}static createEmptyArtifact(){return{id:pr.generateUuid(),usePriorArtifact:!1,useDefaultArtifact:!1,matchArtifact:{id:pr.generateUuid(),customKind:!0},defaultArtifact:{id:pr.generateUuid(),customKind:!0},displayName:pa.random()}}static addArtifactTo(e,t){return null==t.expectedArtifacts&&(t.expectedArtifacts=[]),t.expectedArtifacts.push(e),e}static addNewArtifactTo(e){return cm.addArtifactTo(cm.createEmptyArtifact(),e)}static artifactFromExpected(e){return e&&e.matchArtifact?e.matchArtifact:null}static sourcesForPipelineStage(e,t){const n=[{get source(){return e()},label:"Pipeline Trigger"}];return nd.getAllUpstreamDependencies(e(),t).filter((e=>Om.pipeline.getStageConfig(e).producesArtifacts)).map((e=>({source:e,label:"Stage ("+e.name+")"}))).forEach((e=>n.push(e))),n}static getKindConfig(e,t){if(null==e||e.customKind||"custom"===e.kind)return Om.pipeline.getCustomArtifactKind();const n=(t?Om.pipeline.getDefaultArtifactKinds():Om.pipeline.getMatchArtifactKinds()).find((t=>t.type===e.type));return void 0!==n?n:Om.pipeline.getCustomArtifactKind()}}const pm={bindings:{command:"=",imageSources:"<",helpFieldKey:"@",idField:"@",imageSourceText:"<"},controllerAs:"ctrl",template:'\n <div class="form-group" ng-if="ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n </div>\n <div class="col-md-7" style="margin-top: 5px;">\n <span ng-bind-html="ctrl.imageSourceText"></span>\n </div>\n </div>\n <div class="form-group" ng-if="!ctrl.imageSourceText">\n <div class="col-md-3 sm-label-right">\n Image Source\n <help-field key="{{ ctrl.helpFieldKey }}"></help-field>\n </div>\n <div class="col-md-7">\n <div class="radio" ng-repeat="imageSource in ctrl.imageSources">\n <label>\n <input type="radio" ng-model="ctrl.command[ctrl.idField]" value="{{ imageSource }}">\n {{ imageSource | robotToHuman }}\n </label>\n </div>\n </div>\n </div>\n '},dm="spinnaker.core.artifacts.expected.image.selector";n(dm,[]).component("imageSourceSelector",pm);class um{constructor(e){this.delegate=e,this.accountsForArtifact=[],this.updateAccounts=e=>{if(null==e)this.accountsForArtifact=[];else{const t=cm.artifactFromExpected(e),n=this.delegate.getExpectedArtifactAccounts();this.accountsForArtifact="helm/chart"===t.type?n.filter((e=>e.types.includes(t.type)&&e.name===t.artifactAccount)):n.filter((e=>e.types.includes(t.type)));const a=this.delegate.getSelectedAccount();a&&this.accountsForArtifact.find((e=>e.name===a.name))||(this.accountsForArtifact.length?this.delegate.setSelectedArtifactAccount(this.accountsForArtifact[0]):this.delegate.setSelectedArtifactAccount(null))}},this.onArtifactChange=e=>{this.delegate.setSelectedExpectedArtifact(e),this.updateAccounts(e)},this.onArtifactCreated=e=>{cm.addArtifactTo(e.expectedArtifact,e.source.source),this.delegate.refreshExpectedArtifacts(),this.updateAccounts(e.expectedArtifact),this.delegate.setSelectedExpectedArtifact(e.expectedArtifact),this.delegate.setSelectedArtifactAccount(e.account)},this.onRequestCreate=()=>{this.delegate.createArtifact()},this.onAccountChange=e=>{this.delegate.setSelectedArtifactAccount(e)}}}um.$inject=["delegate"];class mm{constructor(e){this.$scope=e,this.sources=[],this.kinds=[],this.accounts=[],this.setAccounts=e=>{this.accounts=[...e]}}getExpectedArtifactSources(){return this.sources}getSupportedArtifactKinds(){return this.kinds}getExpectedArtifactAccounts(){return this.accounts}scopeApply(){this.$scope.$evalAsync()}}const gm=[fp.KUBERNETES,fp.DOCKER_IMAGE];class hm extends mm{constructor(e,t,n=gm){super(e),this.$scope=e,this.tag=t,this.excludedArtifactTypes=n,this.getExcludedArtifactTypes=()=>this.excludedArtifactTypes,this.getExpectedArtifacts=()=>cm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline),this.getSelectedExpectedArtifact=()=>{const e=this.$scope.stage[`${this.tag}ArtifactId`];return null==e?null:this.getExpectedArtifacts().find((t=>t.id===e))},this.getSelectedAccount=()=>{const e=this.$scope.stage[`${this.tag}ArtifactAccount`];return null==e?null:this.getExpectedArtifactAccounts().find((t=>t.name===e))},this.setSelectedExpectedArtifact=e=>{this.$scope.showCreateArtifactForm=!1,this.$scope.stage[`${this.tag}ArtifactId`]=e.id,this.scopeApply()},this.sources=cm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=Om.pipeline.getMatchArtifactKinds().filter((e=>!this.getExcludedArtifactTypes().find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}setSelectedArtifactAccount(e){this.$scope.stage[`${this.tag}ArtifactAccount`]=e?e.name:"",this.scopeApply()}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.expectedArtifacts=this.getExpectedArtifacts()}}const fm=[fp.GCE_MACHINE_IMAGE];class vm extends mm{constructor(e){super(e),this.$scope=e,this.kinds=[Om.pipeline.getCustomArtifactKind()];const{viewState:t}=e.command;this.sources=cm.sourcesForPipelineStage((()=>t.pipeline),t.stage),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return cm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.imageArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return fm}setSelectedExpectedArtifact(e){this.$scope.command.imageArtifactId=e.id,this.$scope.gceImageArtifact.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.gceImageArtifact.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.viewState.expectedArtifacts=this.getExpectedArtifacts()}}class Am extends mm{constructor(e,t=null){super(e),this.$scope=e,this.offeredArtifactTypes=t;const{viewState:n}=e.command;this.sources=cm.sourcesForPipelineStage((()=>n.pipeline),n.stage),this.kinds=Om.pipeline.getMatchArtifactKinds().filter((e=>e.customKind||t.find((t=>t.test(e.type))))),this.refreshExpectedArtifacts()}getExpectedArtifacts(){const{viewState:e}=this.$scope.command;return cm.getExpectedArtifactsAvailableToStage(e.stage,e.pipeline)}getSelectedExpectedArtifact(){return(this.getExpectedArtifacts()||[]).find((e=>e.id===this.$scope.command.expectedArtifactId))}getSelectedAccount(){return null}getOfferedArtifactTypes(){return this.offeredArtifactTypes}setSelectedExpectedArtifact(e){this.$scope.command.expectedArtifactId=e.id,this.$scope.showCreateArtifactForm=!1,this.scopeApply()}setSelectedArtifactAccount(e){}createArtifact(){this.$scope.showCreateArtifactForm=!0,this.scopeApply()}refreshExpectedArtifacts(){this.$scope.command.backingData.expectedArtifacts=this.getExpectedArtifacts()}}class Em extends mm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=cm.sourcesForPipelineStage((()=>this.$scope.$parent.pipeline),this.$scope.stage),this.kinds=Om.pipeline.getMatchArtifactKinds()}getExpectedArtifacts(){return cm.getExpectedArtifactsAvailableToStage(this.$scope.stage,this.$scope.$parent.pipeline)}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}class bm extends mm{constructor(e){super(e.$scope),this.artifact=e,this.requestingNew=!1,this.setAccounts=e=>{this.accounts=[...e]},this.refreshExpectedArtifacts(),this.sources=cm.sourcesForPipelineStage((()=>this.getPipeline()),this.getStage()),this.kinds=Om.pipeline.getMatchArtifactKinds()}getStage(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.stage}getPipeline(){var e,t,n,a;return null==(a=null==(n=null==(t=null==(e=this.artifact)?void 0:e.$scope)?void 0:t.command)?void 0:n.viewState)?void 0:a.pipeline}getExpectedArtifacts(){return cm.getExpectedArtifactsAvailableToStage(this.getStage(),this.getPipeline())}getSelectedExpectedArtifact(){return this.expectedArtifacts.find((e=>e.id===this.artifact.id))}getSelectedAccount(){return this.accounts.find((e=>e.name===this.artifact.account))}setSelectedExpectedArtifact(e){this.artifact.id=e.id,this.requestingNew=!1,this.scopeApply()}setSelectedArtifactAccount(e){this.artifact.account=null==e?"":e.name,this.scopeApply()}createArtifact(){this.requestingNew=!0,this.scopeApply()}refreshExpectedArtifacts(){this.expectedArtifacts=this.getExpectedArtifacts()}}const ym=e=>{let t;return e.type?t=e.type:e.artifact?t=e.artifact.type:e.kind?t=e.kind.type:e.expectedArtifact&&(t=cm.artifactFromExpected(e.expectedArtifact).type),ot.createElement("img",{style:{verticalAlign:"text-top",marginRight:"4px"},src:im.getPath(t),width:e.width,height:e.height})};class wm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,ot.createElement(ym,{type:e.types[0],width:"16",height:"16"}),e.name)}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.props.accounts,value:this.props.selected,onChange:this.props.onChange,optionRenderer:this.renderOption,valueRenderer:this.renderOption,clearable:!1,valueKey:"name"})}}const xm="spinnaker.core.artifacts.account.selector.react";n(xm,[]).component("artifactAccountSelectorReact",yn(Gl(wm,"artifactAccountSelectorReact"),["accounts","className","onChange","selected"]));class Cm extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,this.props.showIcons&&ot.createElement(ym,{type:e.type,width:"16",height:"16"}),e.label," - ",e.description),this.onChange=e=>{const t=this.props.kinds.find((t=>t.key===e.value));this.setState({selected:e}),this.props.onChange(t)},this.optionFromKindConfig=e=>e?{label:e.label,description:e.description,type:e.type,value:e.key}:null,this.state={selected:this.optionFromKindConfig(e.selected)}}render(){const e=this.props.kinds.map(this.optionFromKindConfig),t=this.state.selected;return ot.createElement(Ti,{className:this.props.className||"",options:e,value:t,optionRenderer:this.renderOption,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Cm.defaultProps={showIcons:!0};n("spinnaker.core.artifacts.expected.kind.selector.react",[]).component("expectedArtifactKindSelectorReact",yn(Gl(Cm,"expectedArtifactKindSelectorReact"),["kinds","selected","onChange","showIcons","className"]));class km extends ot.Component{constructor(e){super(e),this.renderOption=e=>ot.createElement("span",null,e.label),this.onChange=e=>{const t=this.props.sources.find((t=>t.source===e.source));this.props.onChange(t)},this.state={options:e.sources.map((e=>e.value?e:{...e,value:pr.generateUuid()}))}}render(){return ot.createElement(Ti,{className:this.props.className||"",options:this.state.options,optionRenderer:this.renderOption,value:this.props.selected,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}const Bm="spinnaker.core.artifacts.expected.source.selector.react";n(Bm,[]).component("expectedArtifactSourceSelectorReact",yn(Gl(km,"expectedArtifactSourceSelectorReact"),["sources","className","onChange","selected"]));class Sm extends ot.Component{constructor(){super(...arguments),this.renderOption=e=>e.expectedArtifact||e.requestingNew?e.requestingNew?ot.createElement("span",null,"Create new..."):ot.createElement("span",null,this.props.showIcons&&ot.createElement(ym,{expectedArtifact:e.expectedArtifact,width:"16",height:"16"}),e.expectedArtifact.displayName):ot.createElement("span",null),this.onChange=e=>{e.requestingNew?this.props.onRequestCreate():this.props.onChange(e.expectedArtifact)}}filterExpectedArtifacts(e){return(this.props.expectedArtifacts||[]).filter((t=>{const n=cm.artifactFromExpected(t);return!!n&&e(t,n)}))}getExpectedArtifacts(){return this.filterExpectedArtifacts(((e,t)=>{const{offeredArtifactTypes:n,excludedArtifactTypes:a}=this.props;let i=!0,r=!1;return n&&n.length>0&&(i=!!n.find((e=>e.test(t.type)))),a&&a.length>0&&(r=!!a.find((e=>e.test(t.type)))),i&&!r}))}render(){const e=this.getExpectedArtifacts().map((e=>({value:e.id,expectedArtifact:e,requestingNew:!1})));this.props.onRequestCreate&&e.push({value:"",expectedArtifact:null,requestingNew:!0});const t={value:this.props.selected?this.props.selected.id:"",expectedArtifact:this.props.selected,requestingNew:this.props.requestingNew};return ot.createElement(Ti,{className:this.props.className||"",options:e,optionRenderer:this.renderOption,value:t,valueRenderer:this.renderOption,onChange:this.onChange,clearable:!1})}}Sm.defaultProps={requestingNew:!1,showIcons:!0};const Mm="spinnaker.core.artifacts.expected.selector.react";n(Mm,["spinnaker.core.artifacts.expected.kind.selector.react",Bm,xm]).component("expectedArtifactSelectorReact",yn(Gl(Sm,"expectedArtifactSelectorReact"),["expectedArtifacts","selected","requestingNew","onRequestCreate","onChange","showIcons","className","offeredArtifactTypes","excludedArtifactTypes"]));class Nm extends ot.Component{constructor(e){super(e),this.onSave=()=>{this.props.onSave({expectedArtifact:this.state.expectedArtifact,source:this.state.source,account:this.state.account})},this.onSourceChange=e=>{this.setState({source:e})},this.onKindChange=e=>{const t=p(this.state.expectedArtifact);t.matchArtifact.type=e.type,delete t.matchArtifact.kind,t.matchArtifact.customKind=e.customKind;const n=this.accountsForExpectedArtifact(t);this.setState({expectedArtifact:t,account:n[0]})},this.onAccountChange=e=>{const{expectedArtifact:t}=this.state;this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:e.name,id:t.matchArtifact.id,reference:t.matchArtifact.name,type:t.matchArtifact.type}),this.setState({account:e})},this.onArtifactEdit=e=>{const t={...this.state.expectedArtifact,matchArtifact:{...e}};let n=this.state.account;if(this.state.expectedArtifact.matchArtifact.type!==e.type){n=this.accountsForExpectedArtifact(t)[0]}this.props.onArtifactChange&&this.props.onArtifactChange({artifactAccount:n?n.name:"",id:e.id,reference:e.name,type:e.type}),this.setState({expectedArtifact:t,account:n})},this.availableKinds=()=>{const e=this.props.kinds||[],t=this.props.accounts||[];return this.props.showAccounts?e.filter((e=>e.customKind||t.find((t=>t.types.includes(e.type))))):e.slice(0)},this.onArtifactDisplayNameEdit=e=>{const t=e.target.value,{expectedArtifact:n}=this.state,a={...n,displayName:t};this.setState({expectedArtifact:a})};const t=e.default?p(e.default):cm.createEmptyArtifact();this.state={expectedArtifact:t,source:e.sources[0],account:this.accountsForExpectedArtifact(t)[0]}}accountsForExpectedArtifact(e){const t=cm.artifactFromExpected(e);return t&&this.props.accounts?this.props.accounts.filter((e=>e.types.includes(t.type))):[]}render(){const{sources:e,showIcons:t,showAccounts:n,hidePipelineFields:a}=this.props,{expectedArtifact:i,source:r,account:s}=this.state,o=this.accountsForExpectedArtifact(i),l=cm.artifactFromExpected(i),c=this.availableKinds().sort(((e,t)=>e.label.localeCompare(t.label))),p=cm.getKindConfig(l,!1),d=p&&p.editCmp;return ot.createElement(ot.Fragment,null,!a&&ot.createElement(Up,{label:"Display Name"},ot.createElement("input",{className:"form-control",value:i.displayName,onChange:this.onArtifactDisplayNameEdit})),e.length>1&&ot.createElement(Up,{label:"Artifact Source"},ot.createElement(km,{sources:e,selected:r,onChange:this.onSourceChange})),ot.createElement(Up,{label:"Artifact Kind"},ot.createElement(Cm,{kinds:c,selected:p,onChange:this.onKindChange,showIcons:t})),n&&ot.createElement(Up,{label:"Artifact Account"},ot.createElement(wm,{accounts:o,selected:s,onChange:this.onAccountChange})),d&&ot.createElement(d,{account:s,artifact:l,onChange:this.onArtifactEdit,pipeline:this.props.pipeline}),!a&&ot.createElement(Up,{label:""},ot.createElement("button",{onClick:this.onSave,type:"button",className:"btn btn-block btn-primary btn-sm"},"Confirm")))}}Nm.defaultProps={showIcons:!0,showAccounts:!0,fieldColumns:8,singleColumn:!1};const Dm="spinnaker.core.artifacts.expected.editor.react";n(Dm,["spinnaker.core.artifacts.expected.kind.selector.react",Bm]).component("expectedArtifactEditorReact",yn(Gl(Nm,"expectedArtifactEditorReact"),["default","kinds","sources","accounts","onSave","showIcons","showAccounts","className","pipeline"]));class Im extends ot.Component{constructor(){super(...arguments),this.onArtifactAccountChanged=e=>{const t=!this.props.artifact||this.props.artifact.type&&!e.types.includes(this.props.artifact.type)&&"custom-artifact"!==e.name?{id:pr.generateUuid()}:p(this.props.artifact);t.artifactAccount=e.name,t.type&&"custom-artifact"===e.name||(t.type=e.types&&e.types.length>0?e.types[0]:""),this.props.onArtifactEdit(t)}}defaultArtifactAccountIfNecessary(){const{artifact:e,artifactAccounts:t}=this.props;!e.artifactAccount&&t.length>0&&this.onArtifactAccountChanged(de(t.filter((t=>t.types.includes(e.type))))||de(t.filter((e=>e.types.includes(mu))))||de(t))}componentDidMount(){this.defaultArtifactAccountIfNecessary()}componentDidUpdate(){this.defaultArtifactAccountIfNecessary()}render(){const{pipeline:e,artifact:t,artifactAccounts:n,onArtifactEdit:a,isDefault:i}=this.props,r=n.find((e=>e.name===t.artifactAccount))||n[0],s=r?r.types:void 0,o=i?Om.pipeline.getDefaultArtifactKinds():Om.pipeline.getMatchArtifactKinds(),l=s?o.find((e=>s.some((t=>e.typePattern.test(t))))):void 0,c=l&&l.editCmp;return ot.createElement(ot.Fragment,null,ot.createElement(Up,{label:"Account",fieldColumns:8},ot.createElement(wm,{accounts:n,selected:r,onChange:this.onArtifactAccountChanged})),c&&ot.createElement(c,{account:r,artifact:t,onChange:a,pipeline:e}))}}const Fm=class extends ot.Component{constructor(e){super(e),this.editArtifact=(e,t,n)=>{e.setFieldValue(t,n),e.setFieldValue(`${t}.artifactAccount`,n.artifactAccount)},this.state={matchArtifactAccounts:[],defaultArtifactAccounts:[],taskMonitor:new Kc({title:"I'm never used"})}}componentDidMount(){const{excludedArtifactTypePatterns:e,excludedDefaultArtifactTypePatterns:t}=this.props;Di.getArtifactAccounts().then((n=>{this.setState({matchArtifactAccounts:e?n.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):n,defaultArtifactAccounts:t?n.filter((e=>!e.types.some((e=>t.some((t=>t.test(e))))))):n})}))}static show(e){return si.show(Fm,e,{dialogClassName:"wizard-modal modal-lg"})}render(){const{matchArtifactAccounts:e,defaultArtifactAccounts:t}=this.state;return ot.createElement(jc,{heading:"Expected Artifact",initialValues:this.props.expectedArtifact||cm.createEmptyArtifact(),taskMonitor:this.state.taskMonitor,dismissModal:this.props.dismissModal,closeModal:this.props.closeModal,submitButtonLabel:"Save Artifact",render:({formik:n,nextIdx:a,wizard:i})=>ot.createElement(ot.Fragment,null,ot.createElement(Ic,{label:"General",wizard:i,order:a(),render:()=>ot.createElement(Cl,{name:"displayName",label:"Display Name",input:e=>ot.createElement(mo,{...e}),required:!0})}),ot.createElement(Ic,{label:"Match Artifact",wizard:i,order:a(),render:()=>ot.createElement(Im,{pipeline:this.props.pipeline,artifact:n.values.matchArtifact,artifactAccounts:e,onArtifactEdit:e=>this.editArtifact(n,"matchArtifact",e),isDefault:!1})}),ot.createElement(Ic,{label:"If Missing",wizard:i,order:a(),render:()=>ot.createElement(ot.Fragment,null,ot.createElement(Cl,{name:"usePriorArtifact",label:"Use prior execution",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(Zs,{id:"pipeline.config.expectedArtifact.usePriorExecution"})}),ot.createElement(Cl,{name:"useDefaultArtifact",label:"Use default artifact",input:e=>ot.createElement(xo,{...e}),help:ot.createElement(Zs,{id:"pipeline.config.expectedArtifact.defaultArtifact"})}),n.values.useDefaultArtifact&&ot.createElement(Im,{pipeline:this.props.pipeline,artifact:n.values.defaultArtifact,artifactAccounts:t,onArtifactEdit:e=>this.editArtifact(n,"defaultArtifact",e),isDefault:!0}))}))})}};let Tm=Fm;Tm.defaultProps={closeModal:qi,dismissModal:qi};class Qm extends ot.Component{constructor(e){super(e),this.defineNewArtifactOption={...cm.createEmptyArtifact(),displayName:"Define a new artifact...",id:"__inline.artifact__"},this.destroy$=new At,this.renderArtifact=e=>ot.createElement("span",null,"__inline.artifact__"!==e.id&&ot.createElement(ym,{type:e.matchArtifact&&e.matchArtifact.type||e.defaultArtifact&&e.defaultArtifact.type,width:"16",height:"16"}),e&&e.displayName),this.onExpectedArtifactSelected=e=>{"__inline.artifact__"!==e.id?this.props.onExpectedArtifactSelected(e):this.props.onArtifactEdited(e.defaultArtifact)},this.onInlineArtifactChanged=e=>{this.props.onArtifactEdited(e)},this.state={artifactAccounts:[]}}componentWillUnmount(){this.destroy$.next()}componentDidMount(){const e=this.props.excludedArtifactTypePatterns;vt(Di.getArtifactAccounts()).pipe(It(this.destroy$)).subscribe((t=>{this.setState({artifactAccounts:e?t.filter((t=>!t.types.some((t=>e.some((e=>e.test(t))))))):t})}))}render(){const{pipeline:e,stage:t,expectedArtifactId:n,artifact:a,excludedArtifactIds:i,renderLabel:r}=this.props,s=cm.getExpectedArtifactsAvailableToStage(t,e),o=n?s.find((e=>e.id===n)):a?{id:"__inline.artifact__",displayName:"Artifact from execution context",defaultArtifact:a}:void 0,l=[this.defineNewArtifactOption,...s.filter((e=>!i||!i.includes(e.id)))],c=ot.createElement(cn,{clearable:!1,options:l,value:o,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,onChange:this.onExpectedArtifactSelected,placeholder:"Select an artifact..."});return ot.createElement(ot.Fragment,null,ot.createElement("div",{className:"sp-margin-m-bottom","data-test-id":"Stage.artifactSelector"},r?r(c):c),!!a&&ot.createElement(Im,{pipeline:e,artifact:a,artifactAccounts:this.state.artifactAccounts,onArtifactEdit:e=>this.onInlineArtifactChanged(e),isDefault:!0}))}}const Pm="spinnaker.core.artifacts.stage.artifact.selector.react";n(Pm,[]).component("stageArtifactSelectorReact",yn(Gl(Qm,"stageArtifactSelectorReact"),["pipeline","stage","expectedArtifactId","artifact","onExpectedArtifactSelected","onArtifactEdited","excludedArtifactIds","excludedArtifactTypePatterns"]));const Rm=e=>ot.createElement(Up,{label:e.label,helpKey:e.helpKey,fieldColumns:e.fieldColumns},ot.createElement(Qm,{...e}));oi(".TriggerArtifactConstraintSelector_Selects > * + * {\n margin-top: 4px;\n}\n");class Um extends ot.Component{constructor(){super(...arguments),this.defaultExcludedArtifactTypePatterns=[fp.KUBERNETES,fp.FRONT50_PIPELINE_TEMPLATE],this.excludedArtifactTypes=()=>{const e=Om.pipeline.getTriggerConfig(this.props.triggerType);return this.defaultExcludedArtifactTypePatterns.concat(e&&e.excludedArtifactTypePatterns||[])},this.handleChange=(e,t)=>{if("__create.new.artifact"===t.id)return void Tm.show({pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>{this.props.addExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:(this.props.value||[]).concat([e.id])}))}),(()=>null));const n=(this.props.value||[]).slice(0);n[e]=t.id,this.props.onChange(fr({name:this.props.name,value:n}))},this.removeExpectedArtifact=e=>{const t=(this.props.value||[]).slice();this.props.removeExpectedArtifact(e),this.props.onChange(fr({name:this.props.name,value:t.filter((t=>t!==e.id))}))},this.editExpectedArtifact=e=>{Tm.show({expectedArtifact:e,pipeline:this.props.pipeline,excludedArtifactTypePatterns:this.excludedArtifactTypes(),excludedDefaultArtifactTypePatterns:this.defaultExcludedArtifactTypePatterns}).then((e=>this.props.updateExpectedArtifact(e)),(()=>null))},this.renderArtifact=e=>ot.createElement("span",null,e&&e.displayName)}render(){const{pipeline:e}=this.props,t=this.props.value||[],n=e.expectedArtifacts||[],[a,i]=ue(n,(e=>t.includes(e.id))),r=cm.createEmptyArtifact();r.id="__create.new.artifact",r.displayName="Define a new artifact...",i.push(r);const s=(e,t)=>{const n=ot.createElement(ot.Fragment,null,ot.createElement("a",{className:"clickable glyphicon glyphicon-edit",onClick:()=>this.editExpectedArtifact(t)}),ot.createElement("a",{className:"clickable glyphicon glyphicon-trash",onClick:()=>this.removeExpectedArtifact(t)}));return ot.createElement("div",{key:t&&t.id||"new",className:"flex-container-h baseline margin-between-md"},ot.createElement(cn,{className:"flex-grow",clearable:!1,value:t,onChange:t=>this.handleChange(e,t),options:i,optionRenderer:this.renderArtifact,valueRenderer:this.renderArtifact,placeholder:"Select or define an artifact..."}),ot.createElement("div",{style:{minWidth:"50px"},className:"flex-container-h baseline margin-between-md"},t&&n))};return ot.createElement("div",{className:"TriggerArtifactConstraintSelector_Selects flex-container-v margin-between-md"},a.map(((e,t)=>s(t,e))),s(t.length))}}const zm=[lu,cu,du,uu,hu,fu,Au,Eu,yu,wu,Cu,ku,Du,Iu,Su,Mu,Pu,Ru,Uu,zu,Gu,ju,Hu,Vu,qu,Xu,em,tm,Zu,_u,Wu,Ku];class Gm{constructor(){this.triggerTypes=[],this.stageTypes=[],this.transformers=[],this.notificationTypes=[],this.artifactKinds=zm,this.getStageConfig=me(this.getStageConfig.bind(this),(e=>[e?e.type:"",e?Gm.resolveCloudProvider(e):""].join(":")))}normalizeStageTypes(){this.stageTypes.filter((e=>e.provides)).forEach((e=>{const t=this.stageTypes.find((t=>t.key===e.provides&&!t.provides));t&&(e.label=e.label||t.label,e.description=e.description||t.description,e.key=e.key||t.key,e.manualExecutionComponent=e.manualExecutionComponent||t.manualExecutionComponent,t.executionDetailsUrl&&!e.executionDetailsUrl&&(e.executionDetailsUrl=t.executionDetailsUrl),t.executionConfigSections&&!e.executionConfigSections&&(e.executionConfigSections=t.executionConfigSections),t.executionDetailsSections&&!e.executionDetailsSections&&(e.executionDetailsSections=t.executionDetailsSections))}))}registerNotification(e){this.notificationTypes.push(e)}registerTrigger(e){di.triggerTypes?di.triggerTypes.indexOf(e.key)>=0&&this.triggerTypes.push(e):this.triggerTypes.push(e)}registerTransformer(e){this.transformers.push(e)}registerStage(e){(di.hiddenStages||[]).includes(e.key)||(this.stageTypes.push(e),this.normalizeStageTypes())}async registerPreconfiguredJobStage(e){var t;const n=(await hp.list()).find((t=>t.type===e.key));if(!n)throw new Error(`Preconfigured Job of type '${e.key}' not found in /jobs/preconfigured from gate. Is the preconfigured job registered in orca?`);const a=null!=(t=null==n?void 0:n.parameters)?t:[],i=a.filter((e=>!u(e.defaultValue))),r=ge(i.map((e=>[e.name,e.defaultValue]))),{label:s,description:o,waitForCompletion:l,producesArtifacts:c}=n,p={...e,configuration:{...e.configuration,parameters:a,waitForCompletion:l},defaults:{parameters:r},description:o,label:s,producesArtifacts:c};return this.registerStage(p),p}registerArtifactKind(e){return this.artifactKinds.push(e),e.editCmp}getExecutionTransformers(){return this.transformers}getNotificationTypes(){return p(this.notificationTypes)}getTriggerTypes(){return p(this.triggerTypes)}getStageTypes(){return p(this.stageTypes)}getMatchArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isMatch)))}getDefaultArtifactKinds(){return p(this.artifactKinds.filter((e=>e.isDefault)))}getCustomArtifactKind(){return p(this.artifactKinds.find((e=>"custom"===e.key)))}getCloudProvidersForStage(e,t,n){const a=f(n.map((e=>e.cloudProvider)));let i=[];if(e.providesFor)i=e.providesFor;else if(e.cloudProvider)i=[e.cloudProvider];else if(e.useBaseProvider){t.filter((t=>t.provides===e.key)).forEach((e=>{e.providesFor?i=i.concat(e.providesFor):i.push(e.cloudProvider)}))}else i=a.slice(0);return i=i.filter((t=>!!n.filter((e=>e.cloudProvider===t)).find((t=>{const n=Ni.getProvider(t.cloudProvider);return!jm(e,n)})))),di.feature.dockerBake&&"bake"===e.key&&a.push("docker"),h(a,i)}getConfigurableStageTypes(e){const t=u(e)?[]:Array.from(new Set(e.map((e=>e.cloudProvider)))),n=this.getStageTypes();let a=n.filter((e=>!e.synthetic&&!e.provides));return 0===t.length?a:(a.forEach((t=>t.cloudProviders=this.getCloudProvidersForStage(t,n,e))),a=a.filter((t=>!e.every((e=>{const n=Ni.getProvider(e.cloudProvider);return jm(t,n)})))),a.filter((e=>e.cloudProviders.length)).sort(((e,t)=>e.label.localeCompare(t.label))))}getProvidersFor(e){let t=e;const n=this.getStageTypes().filter((t=>t.provides&&(t.provides===e||t.key===e||t.alias===e)));return n.length&&(t=n[0].provides),this.getStageTypes().filter((e=>e.provides&&e.provides===t))}getNotificationConfig(e){return this.getNotificationTypes().find((t=>t.key===e))}getTriggerConfig(e){return this.getTriggerTypes().find((t=>t.key===e))}overrideManualExecutionComponent(e,t){const n=this.triggerTypes.find((t=>t.key===e));n&&(n.manualExecutionComponent=t)}checkAliasedStageTypes(e){const t=this.getStageTypes().filter((t=>t.alias===e.type));return 1===t.length?t[0]:null}checkAliasFallback(e){if(e.alias){const t=this.getStageTypes().filter((t=>t.key===e.alias));if(1===t.length)return t[0]}return null}getStageConfig(e){var t;if(!e||!e.type)return null;const n=this.getStageTypes().filter((t=>t.key===e.type||t.provides===e.type));switch(n.length){case 0:{const t=this.checkAliasedStageTypes(e)||this.checkAliasFallback(e),n=this.getStageTypes().find((e=>"unmatched"===e.key));return null!=t?t:n}case 1:return n[0];default:{const a=Gm.resolveCloudProvider(e),i=n.find((e=>e.cloudProvider===a)),r=n.find((e=>!!e.cloudProvider));return null!=(t=null!=i?i:r)?t:n[0]}}}static resolveCloudProvider(e){var t,n,a,i,r,s;return null!=(s=null!=(r=null!=(a=null!=(t=e.cloudProvider)?t:e.cloudProviderType)?a:null==(n=e.context)?void 0:n.cloudProvider)?r:null==(i=e.context)?void 0:i.cloudProviderType)?s:"aws"}getManualExecutionComponent(e){return e&&e.manualExecutionComponent?e.manualExecutionComponent:null}getManualExecutionComponentForTriggerType(e){return this.getManualExecutionComponent(this.getTriggerConfig(e))}hasManualExecutionComponentForTriggerType(e){return null!==this.getManualExecutionComponent(this.getTriggerConfig(e))}getManualExecutionComponentForStage(e){return this.getStageConfig(e).manualExecutionComponent}}function jm(e,t){return!(!t||!t.unsupportedStageTypes)&&t.unsupportedStageTypes.indexOf(e.key)>-1}const Lm=class{};let Om=Lm;Om.pipeline=new Gm,Om.urlBuilder=new lp,Om.reinitialize=()=>{Lm.pipeline=new Gm,Lm.urlBuilder=new lp},Zc.Registry=Om;class Ym{constructor(e,t,n,a){this.$scope=e,this.$stateParams=t,this.$state=n,this.executionService=a,this.parser=new xn,this.renderer=new Cn}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.execution=this.execution,this.$scope.stage=this.stage,this.$scope.stageSummary=this.stageSummary}getStepLabel(e){const t=Om.pipeline.getStageConfig(e);return t&&t.executionStepLabelUrl?t.executionStepLabelUrl:"core/src/pipeline/config/stages/common/stepLabel.html"}getComments(){const e=this.parser.parse(this.stageSummary.comments+"");return this.renderer.render(e)}getCurrentStep(){return parseInt(this.$stateParams.step,10)}isStepCurrent(e){return e===this.getCurrentStep()}isRestartable(e){if(e.isRunning||e.isCompleted)return!1;const t=Om.pipeline.getStageConfig(e);if(!t||!0===e.isRestarting)return!1;const n=this.application.attributes.enableRestartRunningExecutions||!1;return!(this.execution.isRunning&&!n)&&(t.restartable||!1)}canManuallySkip(){const e=this.getTopLevelStage();return this.stage.isRunning&&e&&e.context.canManuallySkip}getTopLevelStage(){let e=this.stage.parentStageId,t=this.stage;for(;e;)t=this.execution.stages.find((t=>t.id===e)),e=t.parentStageId;return t}openManualSkipStageModal(){const e=this.getTopLevelStage();op.confirm({header:"Really skip this stage?",buttonText:"Skip",askForReason:!0,submitJustWithReason:!0,body:'<div class="alert alert-warning">\n <b>Warning:</b> Skipping this stage may have unpredictable results.\n <ul>\n <li>Mutating changes initiated by this stage will continue and will need to be cleaned up manually.</li>\n <li>Downstream stages that depend on the outputs of this stage may fail or behave unexpectedly.</li>\n </ul>\n </div>\n ',submitMethod:t=>this.executionService.patchExecution(this.execution.id,e.id,{manualSkip:!0,reason:t}).then((()=>this.executionService.waitUntilExecutionMatches(this.execution.id,(t=>{const n=t.stages.find((t=>t.id===e.id));return n&&"SKIPPED"===n.status})))).then((e=>this.executionService.updateExecution(this.application,e)))})}toggleDetails(e){const t=this.getCurrentStep()===e?null:e;if(null!==t){const e={step:t},n=parseInt(this.$stateParams.stage,10);n&&(e.stage=n);const a=parseInt(this.$stateParams.subStage,10);a&&(e.subStage=a),this.$state.go(".",e)}}}Ym.$inject=["$scope","$stateParams","$state","executionService"];const $m={bindings:{application:"<",execution:"<",sourceUrl:"<",stage:"<",stageSummary:"<"},controller:Ym,template:'<div className="stage-summary-wrapper" ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stageSummary.component",[]).component("stageSummary",$m),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pipeline/config/stages/common/stepLabel.html",'<span class="task-label">{{ step.name | robotToHuman }}</span>\n')}]);class Hm{constructor(e){this.$scope=e}$onInit(){this.updateScope()}$onChanges(){this.updateScope()}updateScope(){this.$scope.application=this.application,this.$scope.config=this.config,this.$scope.configSections=this.configSections,this.$scope.execution=this.execution,this.$scope.stage=this.stage}}Hm.$inject=["$scope"];const Vm={bindings:{application:"<",config:"<",configSections:"<",execution:"<",sourceUrl:"<",stage:"<"},controller:Hm,template:'<div ng-include="$ctrl.sourceUrl"></div>'};n("spinnaker.core.pipeline.stepExecutionDetails.component",[]).component("stepExecutionDetails",Vm);oi("instance-type-selector tr.unavailable {\n opacity: 0.5;\n}\n");class Jm{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{e.unavailable||(this.command.instanceType=e.name,this.command.viewState.dirty&&this.command.viewState.dirty.instanceType&&delete this.command.viewState.dirty.instanceType,this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,e.name).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType))},this.getStorageDescription=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?this.command.viewState.overriddenStorageDescription:e.storage.count+"x"+e.storage.size,this.getStorageDescriptionHelpKey=e=>this.command.instanceType===e.name&&this.command.viewState.overriddenStorageDescription?"instanceType.storageOverridden":null}$onInit(){this.instanceProfile=this.command.viewState.instanceProfile,this.instanceTypes=this.command.backingData&&this.command.backingData.filtered?this.command.backingData.filtered.instanceTypes:[],this.updateFamilies()}$doCheck(){let e=!1;this.command.viewState.instanceProfile!==this.instanceProfile&&(this.instanceProfile=this.command.viewState.instanceProfile,e=!0);this.command.backingData&&this.command.backingData.filtered&&this.command.backingData.filtered.instanceTypes!==this.instanceTypes&&(this.instanceTypes=this.command.backingData.filtered.instanceTypes,e=!0),e&&this.updateFamilies()}updateFamilies(){let e=[];this.command.backingData&&this.command.backingData.filtered&&(e=this.command.backingData.filtered.instanceTypes||[]),this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{t.forEach((t=>{t.type===this.command.viewState.instanceProfile&&(this.command.viewState.disableImageSelection||t.families.forEach((t=>{t.instanceTypes.forEach((t=>{t.unavailable=e.every((e=>e!==t.name))}))})),this.$scope.selectedInstanceProfile=t)}))}))}}Jm.$inject=["$scope","instanceTypeService"];const Wm={bindings:{command:"<",onTypeChanged:"="},controller:Jm,controllerAs:"instanceTypeCtrl",templateUrl:"core/src/serverGroup/configure/common/instanceTypeDirective.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceTypeSelector",[]).component("v2InstanceTypeSelector",Wm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/instanceTypeDirective.html",'<dirty-instance-type-notification command="command"></dirty-instance-type-notification>\n<div class="row" ng-repeat="family in selectedInstanceProfile.families">\n <div class="col-md-12">\n <h4>{{selectedInstanceProfile.label}}: {{family.type}}</h4>\n <p>{{family.description}}</p>\n <table class="table table-hover">\n <thead>\n <tr>\n <th></th>\n <th>Size</th>\n <th>vCPU</th>\n <th>Mem (GiB)</th>\n <th>\n {{family.storageType || \'SSD\'}} Storage (GB)\n <help-field ng-if="family.storageHelpFieldKey" key="{{family.storageHelpFieldKey}}"></help-field>\n </th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n <tr\n ng-repeat="instanceType in family.instanceTypes"\n ng-class="{info: instanceTypeCtrl.command.instanceType === instanceType.name, clickable: !instanceType.unavailable, unavailable: instanceType.unavailable}"\n ng-click="instanceTypeCtrl.selectInstanceType(instanceType)"\n >\n <td>\n <help-field ng-if="instanceType.unavailable" key="instanceType.unavailable"></help-field>\n <help-field ng-if="instanceType.helpFieldKey" key="{{instanceType.helpFieldKey}}"></help-field>\n <input\n type="radio"\n ng-value="instanceType.name"\n ng-model="instanceTypeCtrl.command.instanceType"\n ng-disabled="instanceType.unavailable"\n />\n </td>\n <td>{{instanceType.label}}</td>\n <td>{{instanceType.cpu}}</td>\n <td>{{instanceType.memory}}</td>\n <td ng-if="instanceType.storage.type === \'EBS\'">EBS Only</td>\n <td ng-if="instanceType.storage.type === \'SSD\' || family.storageType">\n <help-field\n ng-if="instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)"\n key="{{instanceTypeCtrl.getStorageDescriptionHelpKey(instanceType)}}"\n ></help-field>\n {{instanceTypeCtrl.getStorageDescription(instanceType)}}\n </td>\n <td><cost-factor factor="instanceType.costFactor"></cost-factor></td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>\n')}]);n("spinnaker.core.serverGroup.configure.common.costFactor",[]).directive("costFactor",(function(){return{restrict:"E",scope:{factor:"=",range:"="},templateUrl:"core/src/serverGroup/configure/common/costFactor.html",link:function(e){function t(e){return{used:new Array(e+1).join("$"),unused:new Array(5-e).join("$")}}function n(){if(e.range)e.min=t(e.range.min),e.max=t(e.range.max);else{const n=t(e.factor);e.used=n.used,e.unused=n.unused}}n(),e.$watch("range",n)}}})),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/costFactor.html",'<span class="cost-factor" ng-if="!range"> <span class="cost">{{used}}</span>{{unused}} </span>\n<span class="cost-factor" ng-if="range">\n <span class="cost">{{min.used}}</span>{{min.unused}} – <span class="cost">{{max.used}}</span>{{max.unused}}\n</span>\n')}]);n("spinnaker.core.presentation.isVisible.directive",[]).directive("isVisible",(function(){return function(e,t,n){e.$watch(n.isVisible,(function(e){t.css("visibility",e?"visible":"hidden")}))}}));class Km{constructor(e,t){this.$scope=e,this.instanceTypeService=t,this.selectInstanceType=e=>{const{$scope:t}=this;t.selectedInstanceProfile&&t.selectedInstanceProfile.type===e&&(e=null,t.selectedInstanceProfile=null),this.command.viewState.instanceProfile=e,t.instanceProfiles.forEach((n=>{if(n.type===e){t.selectedInstanceProfile=n;const e=this.command.instanceType;if(e&&!Z(["custom","buildCustom"],n.type)){n.families.some((t=>t.instanceTypes.some((t=>t.name===e&&!t.unavailable))))||(this.command.instanceType=null)}}})),this.onProfileChanged&&this.onProfileChanged(e)},this.updateInstanceType=()=>{Dc.renderedPages.length>0&&(this.command.instanceType?Dc.markComplete("instance-type"):Dc.markIncomplete("instance-type"))},this.updateInstanceTypeDetails=()=>{this.instanceTypeService.getInstanceTypeDetails(this.command.selectedProvider,this.command.instanceType).then((e=>{this.command.viewState.instanceTypeDetails=e})),this.onTypeChanged&&this.onTypeChanged(this.command.instanceType)}}$onInit(){const{$scope:e}=this;this.instanceTypeService.getCategories(this.command.selectedProvider).then((t=>{e.instanceProfiles=t,e.instanceProfiles.length%3==0&&(e.columns=3),e.instanceProfiles.length%4==0&&(e.columns=4),e.instanceProfiles.length%5!=0&&7!==e.instanceProfiles.length||(e.columns=5),this.selectInstanceType(this.command.viewState.instanceProfile)})),this.command.region&&this.command.instanceType&&!this.command.viewState.instanceProfile&&this.selectInstanceType("custom"),this.getInstanceBuilderTemplate=Ni.getValue.bind(Ni,this.command.cloudProvider,"instance.customInstanceBuilderTemplateUrl"),e.$watch("$ctrl.command.instanceType",(()=>this.updateInstanceType()))}}Km.$inject=["$scope","instanceTypeService"];const qm={bindings:{command:"<",onProfileChanged:"=",onTypeChanged:"="},controller:Km,controllerAs:"instanceArchetypeCtrl",templateUrl:"core/src/serverGroup/configure/common/v2instanceArchetype.directive.html"};n("spinnaker.core.serverGroup.configure.common.v2instanceArchetypeSelector",["spinnaker.core.serverGroup.configure.common.costFactor","spinnaker.core.presentation.isVisible.directive"]).component("v2InstanceArchetypeSelector",qm),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/serverGroup/configure/common/v2instanceArchetype.directive.html",'<h4 class="col-md-12" style="margin-top: 10px">This application is:</h4>\n<div class="archetype-columns archetype-columns-{{columns}}" ng-repeat="instanceProfile in instanceProfiles">\n <button\n class="instance-profile"\n type="button"\n ng-class="{active: instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type}"\n ng-click="instanceArchetypeCtrl.selectInstanceType(instanceProfile.type)"\n >\n <span\n is-visible="instanceArchetypeCtrl.command.viewState.instanceProfile === instanceProfile.type"\n class="far fa-check-circle selected-indicator"\n ></span>\n <div class="panel-heading">\n <h4>\n <span class="glyphicon glyphicon-{{instanceProfile.icon}}"></span>\n <div>{{instanceProfile.label}}</div>\n </h4>\n </div>\n </button>\n</div>\n<div class="clearfix" ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'custom\'">\n <dirty-instance-type-notification command="instanceArchetypeCtrl.command"></dirty-instance-type-notification>\n <div class="col-md-8">\n <select\n class="form-control input-sm"\n ng-model="instanceArchetypeCtrl.command.instanceType"\n ng-options="customType for customType in instanceArchetypeCtrl.command.backingData.filtered.instanceTypes"\n ng-change="instanceArchetypeCtrl.updateInstanceTypeDetails()"\n required\n >\n <option value="">Select an instance type...</option>\n </select>\n </div>\n</div>\n<ng-include\n src="instanceArchetypeCtrl.getInstanceBuilderTemplate()"\n ng-if="instanceArchetypeCtrl.command.viewState.instanceProfile === \'buildCustom\'"\n>\n</ng-include>\n')}]);const Xm={bindings:{application:"<",component:"<",accounts:"<",clusterField:"<",singleRegion:"<",showAllRegions:"<?",onAccountUpdate:"<?",disableRegionSelect:"<?"},template:'\n <account-region-cluster-selector\n application="$ctrl.application"\n component="$ctrl.component"\n accounts="$ctrl.accounts"\n cluster-field="{{::$ctrl.clusterField}}"\n single-region="$ctrl.singleRegion"\n show-all-regions="$ctrl.showAllRegions"\n on-account-update="$ctrl.onAccountUpdate"\n disable-region-select="$ctrl.disableRegionSelect">\n </account-region-cluster-selector>\n '};n("spinnaker.core.accountRegionClusterSelectorWrapper.component",[]).component("accountRegionClusterSelectorWrapper",Xm);class Zm extends mi{constructor(){super(...arguments),this.$injectorProxy={},this.AccountRegionClusterSelector=la("accountRegionClusterSelectorWrapper",Xm,this.$injectorProxy),this.InstanceArchetypeSelector=la("v2InstanceArchetypeSelector",qm,this.$injectorProxy),this.InstanceTypeSelector=la("v2InstanceTypeSelector",Wm,this.$injectorProxy),this.StageSummaryWrapper=la("stageSummary",$m,this.$injectorProxy),this.StepExecutionDetailsWrapper=la("stepExecutionDetails",Vm,this.$injectorProxy),this.TargetSelect=la("targetSelect",kc,this.$injectorProxy)}initialize(e){const t=e,n=this.$injectorProxy;Object.keys(e).filter((e=>"function"==typeof t[e])).forEach((e=>n[e]=t[e].bind(t)))}}const _m=new Zm;class eg{constructor(e){this.$rootScope=e,this.stateChangeSuccess=new At,this.locationChangeSuccess=new At;this.$rootScope.$on("$stateChangeSuccess",((e,t,n,a,i)=>{this.stateChangeSuccess.next({to:t,toParams:n,from:a,fromParams:i})})),this.$rootScope.$on("$locationChangeSuccess",((e,t)=>this.locationChangeSuccess.next(t)))}}eg.$inject=["$rootScope"];const tg="spinnaker.core.state.events";n(tg,[]).service("stateEvents",eg);oi("react-ui-view-adapter {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n height: 100%;\n}\n");const ng="spinnaker.core.react";function ag(e,t,n,a=((e,t)=>e===t)){return n.every((n=>a(e[n],t[n])))}n(ng,["bcherny/ngimport","ui.router",tg]).run(["$injector",function(e){hi.initialize(e),vi.initialize(e),_m.initialize(e)}]);class ig{static deleteSecurityGroup(e,t,n){n.type="deleteSecurityGroup",n.securityGroupName=e.name,n.regions=[e.region],n.credentials=e.accountId;const a=ep.executeTask({job:[n],application:t,description:`Delete ${Vs.get("Firewall")}: ${e.name}`});return cd.clearCache("securityGroups"),a}static upsertSecurityGroup(e,t,n,a={}){a.type="upsertSecurityGroup",a.securityGroupName=e.name,a.credentials=e.credentials||e.accountName;const i={...e,...a},r=ep.executeTask({job:[i],application:t,description:`${n} ${Vs.get("Firewall")}: ${e.name}`});return cd.clearCache("securityGroups"),r}}oi(".search-result {\n display: inline-block;\n width: calc(100% - 20px);\n}\n.search-result > span + span {\n margin-left: 6px;\n}\n");class rg extends ot.Component{render(){const{displayName:e,account:t}=this.props;return ot.createElement("span",{className:"search-result"},t&&ot.createElement(ts,{account:t}),ot.createElement(Br,{tag:"span",message:e}))}}const sg=({categories:e,onItemKeyDown:t,onResultClick:n,resultRef:a})=>e.length?ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,i)=>[ot.createElement("li",{key:e.category,className:"category-heading"},ot.createElement("div",{className:"category-heading"},"Recent ",e.category)),...e.results.map(((r,s)=>{const o=r.params||{},l=r.account||o.account||o.accountId||o.accountName;return ot.createElement("li",{key:r.id,className:"result",onClick:()=>n(e.category)},ot.createElement(Dn,{to:r.state,params:r.params},ot.createElement("a",{ref:e=>a(i,s,e),onKeyDown:t},ot.createElement(rg,{displayName:r.displayName,account:l}))))}))]))):null,og=(e,t)=>{if(e)for(const n of e)if("applications"===n.type.id){const e=n.results.find((e=>e.application.toLowerCase()===t.toLowerCase()));if(e)return{category:n,result:e}}},lg=(e,t)=>2===di.searchVersion?{key:e,tab:t}:{q:e},cg=({categories:e,query:t,onItemKeyDown:n,onResultClick:a,onSeeMoreClick:i,resultRef:r})=>{if(!e.length)return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"result"},ot.createElement("a",null,"No matches")));const s=og(e,t);return ot.createElement("ul",{className:"dropdown-menu",role:"menu"},e.map(((e,o)=>{const l=lg(t,e.type.id);return[ot.createElement("li",{key:e.type.id,className:"category-heading flex-container-h no-wrap space-between baseline"},ot.createElement("span",null,e.type.displayName),ot.createElement(Dn,{to:"home.search",params:l},ot.createElement("a",{target:"_self",className:"expand-results",ref:e=>r(o,0,e),onClick:i,onKeyDown:n},"show all"))),e.results.map(((e,t)=>ot.createElement("li",{key:e.href,className:"result"},ot.createElement("a",{onKeyDown:n,onClick:()=>a(e),ref:e=>r(o,t+1,e),href:e.href,className:e===(null==s?void 0:s.result)?"query-match":void 0},ot.createElement(rg,{displayName:e.displayName,account:e.account})))))]})))};oi(".infrastructure-project {\n display: block;\n border: 1px solid var(--color-mineshaft);\n background-color: var(--color-white);\n margin-bottom: 15px;\n}\n.infrastructure-project a {\n color: var(--color-mineshaft);\n display: block;\n}\n.infrastructure-project a:active,\n.infrastructure-project a:hover {\n font-weight: 600;\n}\n.infrastructure-project .project-summary {\n padding: 10px;\n background-color: var(--color-primary);\n color: var(--color-alabaster);\n}\n.infrastructure-project .project-summary .remove-result-link {\n opacity: 0;\n}\n.infrastructure-project .project-summary:hover .remove-result-link {\n opacity: 1;\n -webkit-transition: opacity 0.25s ease-in;\n transition: opacity 0.25s ease-in;\n color: var(--color-concrete);\n}\n.infrastructure-project .project-summary:hover .remove-result-link:hover,\n.infrastructure-project .project-summary:hover .remove-result-link:active {\n color: var(--color-accent);\n}\n.infrastructure-project .project-summary .project-name {\n text-transform: uppercase;\n font-weight: 600;\n font-size: 120%;\n}\n.infrastructure-project .project-summary .project-name a {\n color: var(--color-accessory-light);\n display: inline-block;\n width: calc(100% - 20px);\n}\n.infrastructure-project .application-list {\n padding: 10px 15px;\n margin-bottom: 0;\n border-top: 1px solid var(--color-mineshaft);\n background-color: var(--color-cirrus);\n}\n.infrastructure-project .application-list li {\n list-style-type: none;\n}\n.infrastructure-project .application-list li a {\n color: var(--color-mineshaft);\n}\n");var pg=Object.defineProperty,dg=Object.getOwnPropertyDescriptor;let ug=class extends ot.Component{constructor(){super(...arguments),this.handleRemoveClicked=e=>{e.preventDefault(),this.props.onRemoveProject(this.props.id)},this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick("projects")}}render(){const{projectName:e,applications:t,onRemoveProject:n}=this.props,a=!!n;return ot.createElement("div",{className:"infrastructure-project",onClick:this.handleResultClick},ot.createElement("div",{className:"project-summary"},ot.createElement("div",{className:"project-name"},ot.createElement(Dn,{to:"home.project.dashboard",params:{project:e}},ot.createElement("a",null,e)),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:this.handleRemoveClicked},ot.createElement(Qs,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"})))),ot.createElement("div",{className:"application-count"},t.length||0," Application",1!==t.length?"s":"")),ot.createElement("ul",{className:"application-list"},t.map((t=>ot.createElement("li",{key:t},ot.createElement(Dn,{to:"home.project.application.insight.clusters",params:{project:e,application:t}},ot.createElement("a",null,t)))))))}};ug=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?dg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&pg(t,n,r),r})([na],ug);var mg=Object.defineProperty,gg=Object.getOwnPropertyDescriptor;let hg=class extends ot.Component{constructor(){super(...arguments),this.handleResultClick=()=>{this.props.onResultClick&&this.props.onResultClick(this.props.categoryName)}}handleRemoveClicked(e,t,n){e.preventDefault(),this.props.onRemoveItem(t,n)}render(){const{categoryName:e,result:t,onRemoveItem:n}=this.props,a=!!n,i=t.params||{},r=t.account||i.account||i.accountId||i.accountName;return ot.createElement(Dn,{to:t.state,params:t.params},ot.createElement("a",{target:"_self",className:"list-group-item"},ot.createElement("span",{onClick:this.handleResultClick},ot.createElement(rg,{displayName:t.displayName,account:r}),a&&ot.createElement("span",{className:"small clickable remove-result-link",onClick:n=>this.handleRemoveClicked(n,e,t.id)},ot.createElement(Qs,{value:"remove from history",placement:"left",delayShow:300},ot.createElement("span",{className:"glyphicon glyphicon-remove"}))))))}};hg=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?gg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&mg(t,n,r),r})([na],hg);class fg extends ot.Component{render(){const{podData:e}=this.props,{category:t}=e;return ot.createElement("div",{className:"col-md-4 category-container",key:t},ot.createElement("div",{className:"panel category row"},ot.createElement("div",{className:"summary"},ot.createElement("span",{className:"category-icon"},e.config.iconClass&&ot.createElement("span",{className:e.config.iconClass})),yr(t)," (",e.results.length,")"),ot.createElement("div",{className:"details-container list-group"},e.results.map((e=>ot.createElement(hg,{key:e.id,categoryName:t,result:e,onResultClick:this.props.onResultClick,onRemoveItem:this.props.onRemoveItem}))))))}}class vg extends ot.Component{render(){const{results:e}=this.props;if(!e.length)return null;const t=e.find((e=>"projects"===e.category)),n=e.filter((e=>"projects"!==e.category)).sort(((e,t)=>e.category.localeCompare(t.category)));return ot.createElement("div",{className:"infrastructure-section container"},ot.createElement("div",{className:"recent-items"},ot.createElement("h3",null,"Recently viewed"),ot.createElement("div",{className:"row"},t&&ot.createElement("div",{className:"col-md-3"},ot.createElement("div",{className:"row"},ot.createElement("div",{className:"col-md-12"},t.results.map((e=>ot.createElement(ug,{key:e.id,id:e.id,projectName:m(e,"params.project"),applications:m(e,"extraData.config.applications",[]),onRemoveProject:this.props.onRemoveProject,onResultClick:this.props.onResultClick})))))),ot.createElement("div",{className:"col-md-"+(t?9:12)},ot.createElement("div",{className:"row"},n.map((e=>ot.createElement(fg,{key:e.category,podData:e,onRemoveItem:this.props.onRemoveItem,onResultClick:()=>this.props.onResultClick(e.category)}))))))))}}class Ag{static getItems(e){const t=[{state:"securityGroup",replacement:"firewall"},{state:"securityGroupDetails",replacement:"firewallDetails"}],n=this.cache.get(e)||[];return n.forEach((e=>{t.forEach((t=>{e.state&&e.state.includes(t.state)&&(e.state=e.state.replace(t.state,t.replacement))}))})),Y(n,"accessTime").reverse()}static addItem(e,t,n,a=[]){const i=this.getItems(e).slice(0,5),r=this.getExisting(i,n,a),s={params:n,state:t,accessTime:(new Date).getTime(),extraData:{},id:pr.generateUuid()};r&&i.splice(i.indexOf(r),1),5===i.length&&i.pop(),i.push(s),this.cache.put(e,i)}static removeItem(e,t){const n=this.getItems(e),a=n.find((e=>e.id===t));a&&(n.splice(n.indexOf(a),1),this.cache.put(e,n))}static removeLastItem(e){const t=this.getItems(e);t.length&&(t.splice(0,1),this.cache.put(e,t))}static addExtraDataToLatest(e,t){const n=this.getItems(e);n.length&&(n[0].extraData=t,this.cache.put(e,n))}static removeByAppName(e){const t="applications",n=this.getItems(t).filter((t=>t.params.application!==e));n&&this.cache.put(t,n)}static getExisting(e,t,n){return n&&n.length?e.find((e=>n.every((n=>e.params[n]===t[n])))):V(e,{params:fe(t,B)})}}Ag.cache=Hp.createCache("history","user",{version:3,maxAge:bn.fromObject({days:90}).as("milliseconds")});const Eg="spinnaker.core.history.recentHistory.service";function bg(e){const{Component:t}=e,n=["projects","applications","loadBalancers","serverGroups","instances","securityGroups"],a=ot.useMemo((()=>hi.infrastructureSearchService.getSearcher()),[]);const{result:i,refresh:r}=Vo((async()=>{const e=async e=>{const t=a.getCategoryConfig(e),n=Ag.getItems(e),i=await Promise.all(n.map((t=>function(e,t){const n={...t.params,...t.extraData};return a.formatRouteResult(e,n).then((e=>({...t,displayName:e})))}(e,t))));return{category:e,config:t,results:i}};return(await Promise.all(n.map((t=>e(t))))).filter((e=>e.results.length))}),[],[]),s=(e,t)=>{Ag.removeItem(e,t),r()},o=e=>{Ui.log({category:"Primary Search",action:`Recent item selected from ${e}`})};return t?ot.createElement(t,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o}):ot.createElement(vg,{results:i,onRemoveItem:s,onRemoveProject:e=>s("projects",e),onResultClick:o})}n(Eg,[]).run(["$rootScope",e=>{e.$on("$stateChangeSuccess",((e,t,n)=>{var a;const i=null==(a=t.data)?void 0:a.history;if(i){const e=he(n||{},["debug","vis","trace"]),a=i.state||t.name;Ag.addItem(i.type,a,e,i.keyParams)}}))}]);const yg=(e,t="")=>{if(!e||!e.length)return[];const n=t.toLowerCase();return e.slice().sort(((e,t)=>{if(e.displayName&&t.displayName){const a=e.displayName.toLowerCase().indexOf(n),i=t.displayName.toLowerCase().indexOf(n);return a===i?e.displayName.localeCompare(t.displayName):a-i}return 0}))};n("spinnaker.core.search.searchResult.searchRank.filter",[]).filter("searchRank",(()=>yg));var wg=Object.defineProperty,xg=Object.getOwnPropertyDescriptor,Cg=(e,t,n,a)=>{for(var i,r=a>1?void 0:a?xg(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&wg(t,n,r),r};let kg=class extends ot.Component{constructor(e){super(e),this.query$=new At,this.destroy$=new At,this.handleWindowKeyup=e=>{const{target:t,key:n}=e;t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||(({key:e,shiftKey:t})=>"/"===e&&t)(e)||"/"!==n||this.searchField.focus()},this.handleWindowClick=e=>{this.container.contains(e.target)||this.hideDropdown()},this.searchFieldBlurred=({relatedTarget:e})=>{this.container.contains(e)||this.hideDropdown()},this.searchFieldKeyUp=e=>{if(!this.state.showDropdown)return;const{key:t,shiftKey:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from input)"}}),this.searchField.blur();else if("ArrowDown"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow down (from input)"}}),e.preventDefault(),this.focusFirstSearchResult();else if("ArrowUp"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"arrow up (from input)"}}),e.preventDefault(),this.focusLastSearchResult();else if("Tab"===t)n||(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from input)"}}),e.preventDefault(),this.focusFirstSearchResult());else if("Enter"===t){const{$state:t}=hi;if(this.state.categories){const e=og(this.state.categories,this.state.query);e?(t.go("home.applications.application",{application:e.result.application}),this.hideDropdown()):t.go("home.search",lg(this.state.query))}e.preventDefault()}},this.focusFirstSearchResult=()=>{const e=this.resultRefs[0]&&this.resultRefs[0][0];e&&e.focus()},this.focusLastSearchResult=()=>{const e=T(this.resultRefs),t=e[e.length-1];t&&t.focus()},this.navigateResult=e=>{const{key:t,target:n}=e;if("Escape"===t)Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"escape (from result)"}}),this.setState({showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null});else if("Tab"===t){const e=T(this.resultRefs);if(n===e[e.length-1])return Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"tab (from result)"}}),void this.hideDropdown()}else if("ArrowDown"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"down (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a+1];i&&i.focus(),e.preventDefault()}else if("ArrowUp"===t){Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"up (from result)"}});const t=T(this.resultRefs),a=t.indexOf(n),i=t[a-1];i&&i.focus(),e.preventDefault()}else"Enter"===t&&(Ui.log({category:"Global Search",action:"Keyboard Nav",data:{label:"enter (from result)"}}),setTimeout((()=>this.hideDropdown()),100))},this.queryChanged=({target:e})=>{const t=e.value,{showMinLengthWarning:n}=this.state,a=!!t&&t.length<3&&n;this.setState({query:t,querying:!1,showMinLengthWarning:a,categories:null},(()=>{t.length>=3?this.query$.next(t.trim()):a||this.considerMinLengthWarning()}))},this.showDropdown=()=>{this.setState({showDropdown:!0})},this.hideDropdown=()=>{this.setState({showDropdown:!1})},this.clearFilters=e=>{Vd.filterService.overrideFiltersForUrl(e)},this.SpinnerDropdown=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement(Es,{size:"small"}))),this.MinLengthWarning=()=>ot.createElement("ul",{className:"dropdown-menu",role:"menu"},ot.createElement("li",{className:"horizontal middle center spinner-section"},ot.createElement("span",{className:"error-message"},"Please enter at least ",3," characters"))),this.RecentlyViewed=()=>ot.createElement(bg,{limit:5,Component:({results:e})=>(this.resultRefs=e.map((()=>[])),ot.createElement(sg,{categories:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{this.hideDropdown(),Ui.log({category:"Global Search",action:`Recent item selected from ${e}`})},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}}))}),this.SearchResults=()=>{const{query:e,categories:t}=this.state;return ot.createElement(cg,{categories:t,query:e,onItemKeyDown:this.navigateResult,onResultClick:e=>{Ui.log({category:"Global Search",action:"Result Selected"}),this.hideDropdown(),this.clearFilters(e)},onSeeMoreClick:()=>{Ui.log({category:"Global Search",action:"See all results selected"}),this.hideDropdown()},resultRef:(e,t,n)=>{this.resultRefs[e]&&(this.resultRefs[e][t]=n)}})},this.state={showDropdown:!1,showMinLengthWarning:!1,query:"",querying:!1,categories:null}}componentDidMount(){window.addEventListener("keyup",this.handleWindowKeyup),window.addEventListener("click",this.handleWindowClick);const{infrastructureSearchService:e}=hi,t=e.getSearcher();this.query$.pipe(Qt(300),Pt((e=>{Ui.log({category:"Global Search",action:"Query",data:{label:e}}),this.setState({querying:!0})})),Dt((e=>vt(t.query(e)))),St((e=>e.filter((({results:e})=>e.length)).map((e=>({...e,results:yg(e.results,e.query).slice(0,5)}))).sort(((e,t)=>e.type.order-t.type.order)))),It(this.destroy$)).subscribe((e=>{this.resultRefs=e.map((()=>[])),this.setState({querying:!1,categories:e})}))}componentWillUnmount(){window.removeEventListener("keyup",this.handleWindowKeyup),window.removeEventListener("click",this.handleWindowClick),this.destroy$.next()}considerMinLengthWarning(){const{query:e}=this.state;this.setState({showMinLengthWarning:!!e&&e.length<3})}renderDropdown(){const{query:e,querying:t,showMinLengthWarning:n,categories:a}=this.state,{SpinnerDropdown:i,MinLengthWarning:r,SearchResults:s,RecentlyViewed:o}=this;return e?t?ot.createElement(i,null):e.length<3&&n?ot.createElement(r,null):a?ot.createElement(s,null):null:ot.createElement(o,null)}render(){const{showDropdown:e,query:t}=this.state;return ot.createElement("li",{ref:e=>this.container=e,className:"global-search open"},ot.createElement("form",{className:"right global-search",onSubmit:e=>e.preventDefault()},ot.createElement("div",{className:"form-group has-feedback"},ot.createElement("div",{className:"input-group"},ot.createElement("input",{ref:e=>this.searchField=e,type:"search",className:"form-control flat input-sm no-border",placeholder:"Search",value:t,onBlur:this.searchFieldBlurred,onFocus:this.showDropdown,onChange:this.queryChanged,onKeyUp:this.searchFieldKeyUp}),ot.createElement(Qs,{placement:"right",template:ot.createElement("span",null,"Keyboard shortcut: ",ot.createElement("span",{className:"keyboard-key"},"/"))},ot.createElement("i",{className:"glyphicon glyphicon-search form-control-feedback"}))))),e&&this.renderDropdown())}};Cg([da(300)],kg.prototype,"considerMinLengthWarning",1),kg=Cg([na],kg);class Bg{constructor(e){this.$stateRegistryProvider=e,this.registeredStates=[]}setNestedState(e,t=!1){const n=r(e);t||(this.fixStateName(n),this.fixStateViews(n),n.parent=null),this.registeredStates.includes(n.name)||(this.registeredStates.push(n.name),this.$stateRegistryProvider.register(n)),n.children&&n.children.length&&n.children.forEach((e=>{e.parent=n.name,this.setNestedState(e,t)}))}fixStateName(e){e.parent&&(e.name=`${e.parent}.${e.name}`)}fixStateViews(e){const t=e.views||{},n=[];Object.keys(t).forEach((a=>{const i=a.match("../");if(i&&i.length&&"string"==typeof e.parent){const r=e.parent.split(".").slice(0,-1-i.length).join(".")+".";t[a.replace(/(..\/)+/,r)]=t[a],n.push(a)}})),n.forEach((e=>delete t[e]))}$get(){return this}}Bg.$inject=["$stateRegistryProvider"];const Sg="spinnaker.core.navigation.stateHelper.provider";n(Sg,[]).provider("stateHelper",Bg);oi(".secondary-panel > div {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.secondary-panel .nav {\n margin: 52px 24px 32px 4px;\n}\n.secondary-panel .nav h3 {\n margin-right: 10px;\n font-weight: 600;\n}\n.secondary-panel .nav h4 {\n font-weight: 600;\n text-transform: uppercase;\n margin-bottom: 0;\n font-size: 16px;\n}\n.secondary-panel .nav .list-group-item.active {\n font-weight: 700;\n}\n.secondary-panel .nav .nav-search {\n margin-top: 10px;\n}\n.secondary-panel .nav-content .header {\n border-bottom: none;\n padding: 0;\n position: relative;\n z-index: 10;\n background-color: var(--color-alabaster);\n}\n.secondary-panel .nav-content .header h3 {\n display: inline-block;\n font-weight: 600;\n}\n.secondary-panel .nav-content .header .actions {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters {\n display: inline-block;\n}\n.secondary-panel .nav-content .header .filters label {\n font-weight: normal;\n margin-bottom: 0;\n margin-left: 10px;\n}\n.secondary-panel .nav-content .header.header-clusters {\n padding-top: 0;\n}\n.secondary-panel .nav-content .header.header-clusters h3 {\n padding-bottom: 5px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .header.header-clusters h3 {\n font-size: 110%;\n }\n}\n.secondary-panel .nav-content .header.header-clusters .filters {\n height: 40px;\n line-height: 40px;\n vertical-align: top;\n font-size: 90%;\n}\n.secondary-panel .nav-content .content {\n padding: 0 0 10px;\n}\n@media (min-width: 708px) and (max-width: 992px) {\n .secondary-panel .nav-content .content {\n padding: 0 5px;\n }\n}\n.nav.navbar-nav .remove-border-top:hover,\n.nav.navbar-nav .remove-border-top:active {\n border-top-color: transparent;\n -webkit-transition: none;\n transition: none;\n}\n.nav.navbar-nav .glyphicon {\n padding-right: 4px;\n}\n");class Mg{constructor(e,t){this.$urlRouterProvider=e,this.stateHelperProvider=t,this.root={name:"home",abstract:!0,params:{allowModalToStayOpen:{dynamic:!0,value:null}},url:"?{debug:boolean}&{vis:query}&{trace:query}",dynamic:!0,children:[]}}addToRootState(e){this.root.children.find((t=>t.name===e.name))||this.root.children.push(e),this.setStates()}setStates(){this.stateHelperProvider.setNestedState(this.root)}addRewriteRule(e,t){this.$urlRouterProvider.when(e,t)}buildDynamicParams(e){return e.reduce(((e,t)=>{const n=t.param||t.model;return e[n]={type:t.type||"string",dynamic:!0},t.array&&(e[n].array=!0),e}),{})}paramsToQuery(e){return e.map((e=>e.param||e.model)).join("&")}$get(){return this}}Mg.$inject=["$urlRouterProvider","stateHelperProvider"];const Ng={decode:e=>{if(e){const t={};return e.split(",").map((e=>e.replace(/%2c/g,","))).forEach((e=>t[e]=!0)),t}return{}},encode:e=>{if(e){const t=Object.keys(e).filter((t=>e[t]));return t.length?t.sort().map((e=>e.replace(/,/g,"%2c"))).join(","):null}return null},equals:(e,t)=>E(e,t),is:e=>x(e)},Dg={decode:e=>!e||"true"!==e,encode:e=>e?null:"true",equals:(e,t)=>e===t,is:()=>!0},Ig={decode:e=>!!e&&"true"===e,encode:e=>e?"true":null,equals:(e,t)=>e===t,is:()=>!0},Fg={decode:e=>({key:e}),encode:e=>e?e.key:null,equals:(e,t)=>E(e,t),is:e=>x(e)},Tg="spinnaker.core.navigation.state.config.provider";n(Tg,[ca,Sg]).provider("stateConfig",Mg).config(["$urlRouterProvider",e=>{e.otherwise("/"),e.when("/{path:.*}/",["$match",e=>"/"+e.path])}]).config(["$urlServiceProvider",e=>{e.config.type("trueKeyObject",Ng),e.config.type("inverse-boolean",Dg),e.config.type("boolean",Ig),e.config.type("sortKey",Fg)}]);class Qg{static forEachSorted(e,t,n){Object.keys(e).sort().forEach((a=>{t.call(n,e[a],a)}))}static encodeUriQuery(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}static buildUrl(e,t={}){if(!t)return e;const n=[];return Qg.forEachSorted(t,((e,t)=>{if(null===e||B(e))return;let a;a=Array.isArray(e)?e:[e],a.forEach((e=>{j(e)&&(e=ve(e)?e.toISOString():JSON.stringify(e)),n.push(`${Qg.encodeUriQuery(t)}=${Qg.encodeUriQuery(e)}`)}))})),n.length>0&&(e+=(e.includes("?")?"&":"?")+n.join("&")),e}}class Pg{constructor(e){this.$state=e}createCloneTask(e){const t=e.getValueFor("deploy.server.groups"),n=e.getValueFor("deploy.account.name");let a;if(t&&Object.keys(t)[0]){const e=Object.keys(t),i=t[e[0]][0];a=!!i&&(!!i.match(ud.VERSION_PATTERN)&&this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:i.split("-")[0],cluster:i.replace(ud.VERSION_PATTERN,""),account:n,accountId:n,region:e,serverGroup:i,q:i}))}else a=!1;return a}asgTask(e){const t=e.getValueFor("asgName"),n=e.getValueFor("credentials");let a;return a=!!t&&(t.match(ud.VERSION_PATTERN)?this.$state.href("home.applications.application.insight.clusters.serverGroup",{application:t.split("-")[0],cluster:t.replace(ud.VERSION_PATTERN,""),account:n,accountId:n,region:e.getValueFor("regions")[0],serverGroup:t}):"/"),a}static buildFromMetadata(e){const t=Om.urlBuilder.getBuilder(e.type);let n;return n=t?t.build(e,hi.$state):"/",n}buildFromTask(e){const t=e.name||"";function n(e){return t.includes(e)}let a;switch(!0){case n("Destroy Server Group"):a=!1;break;case n("Disable Server Group"):case n("Enable Server Group"):case n("Resize Server Group"):a=this.asgTask(e);break;case n("Create Cloned Server Group"):case n("Create New Server Group"):a=this.createCloneTask(e);break;default:a=!1}return a}}Om.urlBuilder.register("applications",new class{build(e,t){let n;return n=e.project?t.href("home.project.application",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application",{application:e.application},{inherit:!1}),n}}),Om.urlBuilder.register("clusters",new class{build(e,t){const n={acct:e.account};let a;return e.cluster&&(n.q=`cluster:${e.cluster}`),e.stack&&(n.stack=e.stack),e.detail&&(n.q=`detail:${e.detail}`),e.region&&(n.reg=e.region),a=e.project?t.href("home.project.application.insight.clusters",{application:e.application,project:e.project},{inherit:!1}):t.href("home.applications.application.insight.clusters",{application:e.application},{inherit:!1}),Qg.buildUrl(a,n)}}),Om.urlBuilder.register("instances",new class{build(e,t){let n;if(e.application){const a=t.href("home.applications.application.insight.clusters.instanceDetails",{application:e.application,instanceId:e.instanceId,provider:e.provider},{inherit:!1});n=Qg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}else n=t.href("home.instanceDetails",{account:e.account,region:e.region,instanceId:e.instanceId,provider:e.provider});return n}}),Om.urlBuilder.register("loadBalancers",new class{build(e,t){const n=t.href("home.applications.application.insight.loadBalancers.loadBalancerDetails",{application:e.application,name:e.loadBalancer,region:e.region||e.namespace,accountId:e.account,vpcId:e.vpcId,provider:e.provider},{inherit:!1});return Qg.buildUrl(n,{q:e.loadBalancer,reg:e.region,acct:e.account})}}),Om.urlBuilder.register("projects",new class{build(e,t){return t.href("home.project.dashboard",{project:e.name},{inherit:!1})}}),Om.urlBuilder.register("securityGroups",new class{build(e,t){const n=t.href("home.firewallDetails",{accountId:e.account,region:e.region,name:e.name,vpcId:e.vpcId,provider:e.provider});return Qg.buildUrl(n)}}),Om.urlBuilder.register("serverGroups",new class{build(e,t){const n=e.project?"project":"applications",a=t.href(`home.${n}.application.insight.clusters.serverGroup`,{application:e.application,accountId:e.account,region:e.region,serverGroup:e.serverGroup,provider:e.provider,project:e.project},{inherit:!1});return Qg.buildUrl(a,{q:e.serverGroup,acct:e.account,reg:e.region})}}),Om.urlBuilder.register("task",new class{build(e,t){return t.href("home.applications.application.tasks.taskDetails",{application:e.application,taskId:e.taskId},{inherit:!1})}}),Om.urlBuilder.register("tasks",new class{build(e,t){return t.href("home.applications.application.tasks",{application:e.application},{inherit:!1})}});class Rg{static parseQueryString(e=""){const t={};return e.split("&").forEach((e=>{let n,a,i;e&&(a=e=e.replace(/\+/g,"%20"),n=e.indexOf("="),-1!==n&&(a=e.substring(0,n),i=e.substring(n+1)),a=this.tryDecodeURIComponent(a),null!==a&&(i=!(i&&i.length>0)||this.tryDecodeURIComponent(i),void 0===t[a]?t[a]=i:Array.isArray(t[a])?t[a].push(i):t[a]=[t[a],i]))})),t}static tryDecodeURIComponent(e){try{return decodeURIComponent(e)}catch(e){return null}}}var Ug,zg;(zg=Ug||(Ug={}))[zg.INITIAL=0]="INITIAL",zg[zg.SEARCHING=1]="SEARCHING",zg[zg.FINISHED=2]="FINISHED",zg[zg.NO_RESULTS=3]="NO_RESULTS",zg[zg.ERROR=4]="ERROR";class Gg{constructor(){this.types=[]}register(e){this.types.push(e)}get(e){return this.types.find((t=>t.id===e))}getAll(){return this.types.slice().sort(((e,t)=>e.order-t.order))}getSearchCategories(){return this.types.map((e=>e.id))}}const jg=new Gg;class Lg{static search(e){if(re(e))return vt(this.EMPTY_RESULTS);const t={...e},n=jg.getAll(),a=new At,i=(t,n)=>{const a=Ae(t.results.map((e=>((e,t)=>({...e,href:Pg.buildFromMetadata(e),displayName:t.displayFormatter(e)}))(e,n))),(e=>e.href)),i=e.key;return{type:n,results:a,status:Ug.FINISHED,query:i}};return vt(n).pipe(Rt((e=>e.search(t,a).pipe(St((t=>i(t,e))),Ut((t=>((e,t)=>Et({error:e,type:t,results:[],status:Ug.ERROR}))(t,e)))))),Pt((e=>a.next(e))),zt((()=>a.complete())))}}Lg.EMPTY_RESULTS=jg.getAll().map((e=>({type:e,results:[],status:Ug.FINISHED})));oi(".glyphicon.healthy,\n.fa.healthy {\n color: var(--color-success);\n}\n.glyphicon.unhealthy,\n.fa.unhealthy {\n color: var(--color-danger);\n}\n.glyphicon.unknown,\n.fa.unknown {\n color: var(--color-dovegray);\n}\nhealth-counts {\n display: inherit;\n}\n.health-counts .instance-health-counts .glyphicon {\n top: 0;\n}\n.health-counts .instance-health-counts .healthy {\n color: var(--color-success);\n}\n.health-counts .instance-health-counts .unhealthy {\n color: var(--color-alert);\n}\n.health-counts .instance-health-counts .dead {\n color: var(--color-danger);\n}\n");class Og extends ot.Component{constructor(e){super(e),this.state=this.calculatePercent(e.container)}calculatePercent(e){const t=(e=e||{}).up||0,n=e.down||0,a=e.succeeded||0,i=e.failed||0,r=e.unknown||0,s=e.starting||0,o=e.total||t+n+r+s+a+i,l=o?Math.floor(100*(t+a)/o):void 0;return{percentLabel:void 0===l?"n/a":l+"%",statusClass:void 0===l?"disabled":100===l?"healthy":l<100&&l>0?"unhealthy":0===l?"dead":"disabled",total:o}}componentWillReceiveProps(e){E(e.container,this.props.container)||this.setState(this.calculatePercent(e.container))}render(){const e=ot.createElement("span",null,ot.createElement("table",{className:"tooltip-table"},ot.createElement("tbody",null,ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"})),ot.createElement("td",null,"Up")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"})),ot.createElement("td",null,"Down")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"})),ot.createElement("td",null,"In transition or no status reported")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"})),ot.createElement("td",null,"Out of Service")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle small"})),ot.createElement("td",null,"Terminated successfully")),ot.createElement("tr",null,ot.createElement("td",null,ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle small"})),ot.createElement("td",null,"Terminated unsuccessfully")))),ot.createElement("span",null,this.props.additionalLegendText)),t=this.props.container,n=this.state.percentLabel;let a=!1;const i=[];t.up&&(i.push(ot.createElement("span",{key:"up"}," ",t.up," ",ot.createElement("span",{className:"glyphicon glyphicon-Up-triangle healthy"}))),a=!0),t.down&&t.down!==t.missingHealthCount&&(a&&i.push(ot.createElement("span",{key:"downslash"}," / ")),i.push(ot.createElement("span",{key:"down"}," ",t.down," ",ot.createElement("span",{className:"glyphicon glyphicon-Down-triangle dead"}))),a=!0),(t.unknown||t.starting)&&(a&&i.push(ot.createElement("span",{key:"unknownslash"}," / ")),i.push(ot.createElement("span",{key:"unknown"}," ",t.unknown+t.starting," ",ot.createElement("span",{className:"glyphicon glyphicon-Unknown-triangle unknown"}))),a=!0),t.outOfService&&(a&&i.push(ot.createElement("span",{key:"outOfServiceslash"}," / ")),i.push(ot.createElement("span",{key:"outOfService"}," ",t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-OutOfService-triangle disabled small"}))),a=!0),t.succeeded&&(a&&i.push(ot.createElement("span",{key:"succeededslash"}," / ")),i.push(ot.createElement("span",{key:"succeeded"}," ",t.succeeded," ",ot.createElement("span",{className:"glyphicon glyphicon-Succeeded-triangle disabled small"}))),a=!0),t.failed&&(a&&i.push(ot.createElement("span",{key:"failedslash"}," / ")),i.push(ot.createElement("span",{key:"failed"}," ",t.failed," ",ot.createElement("span",{className:"glyphicon glyphicon-Failed-triangle disabled small"}))));const r=this.props.className||"";return"n/a"!==n?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Qs,{template:e,placement:this.props.legendPlacement},ot.createElement("span",{className:"counter instance-health-counts"},i,t.unknown!==this.state.total&&ot.createElement("span",null," ",": ",ot.createElement("span",{className:this.state.statusClass},n))))):t.outOfService?ot.createElement("span",{className:`health-counts ${r}`},ot.createElement(Qs,{template:e},ot.createElement("span",{className:"counter instance-health-counts"},ot.createElement("span",null,t.outOfService," ",ot.createElement("span",{className:"glyphicon glyphicon-minus disabled small"}))))):null}}Og.defaultProps={legendPlacement:"top",container:{}};class Yg{static setDataSourceOrder(e){this.dataSourceOrder=e,this.sortDataSources()}static sortDataSources(){let e=this.defaultDataSourceOrder;this.dataSourceOrder.length&&(e=this.dataSourceOrder),this.dataSources.forEach((t=>{e.includes(t.key)||e.push(t.key)})),this.dataSources.sort(((t,n)=>e.indexOf(t.key)-e.indexOf(n.key)))}static registerDataSource(e){this.dataSources.push(e),this.sortDataSources()}static getDataSources(){return p(this.dataSources)}static removeDataSource(e){this.dataSources=this.dataSources.filter((t=>t.key!==e))}static clearDataSources(){this.dataSources.length=0}}Yg.defaultDataSourceOrder=["environments","serverGroups","executions","loadBalancers","securityGroups","tasks","config"],Yg.dataSources=[],Yg.dataSourceOrder=[];class $g{static resetViewedApplications(){this.viewedApplications.length=0}static isInferredApplication(e){return!e.attributes||!e.attributes.email}static checkIfInferredAndWarn(e){this.check(e)&&this.warn(e.name)}static check(e){const{name:t}=e,n=this.viewedApplications.includes(t);return this.viewedApplications.push(t),!n&&this.isInferredApplication(e)}static warn(e){eo.publish({key:"inferredApplicationWarning",action:"create",content:ot.createElement("div",null,"The application ",ot.createElement("b",null,e)," has not been ",ot.createElement("a",{href:`#/applications/${e}/config`},"configured"),".")})}}$g.viewedApplications=[];class Hg{static listApplications(){return Si("/applications").useCache().get()}static getApplicationAttributes(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>(this.splitAttributes(e.attributes,["accounts","cloudProviders"]),e.attributes)))}static getApplicationPermissions(e){return Si("/applications").path(e).query({expand:!1}).get().then((e=>e.attributes.permissions))}static getApplication(e,t=!0){return Si("/applications").path(e).query({expand:t}).get().then((e=>{const t=Yg.getDataSources(),n=new Fh(e.name,_s.createScheduler(),t);return n.attributes=e.attributes,this.splitAttributes(n.attributes,["accounts","cloudProviders"]),this.setDisabledDataSources(n),n.refresh(),n}))}static splitAttributes(e,t){t.forEach((t=>{e[t]?Array.isArray(e[t])||(e[t]=e[t].split(",").map((e=>e.trim()))):e[t]=[]}))}static setDisabledDataSources(e){const t=e.dataSources,n=e.attributes.dataSources;n?t.forEach((t=>{t.optional&&(t.optIn?this.setDataSourceDisabled(t,e,!n.enabled.includes(t.key)):this.setDataSourceDisabled(t,e,n.disabled.includes(t.key)))})):(t.filter((e=>e.optIn)).forEach((t=>this.setDataSourceDisabled(t,e,!0))),$g.isInferredApplication(e)&&t.filter((e=>e.requireConfiguredApp)).forEach((t=>this.setDataSourceDisabled(t,e,!0)))),t.filter((e=>e.requiresDataSource)).forEach((n=>{const a=t.find((e=>e.key===n.requiresDataSource));a&&this.setDataSourceDisabled(n,e,a.disabled)}))}static setDataSourceDisabled(e,t,n){e.disabled=n,e.badge&&(t.dataSources.find((t=>t.key===e.badge)).disabled=n)}}function Vg(e){const{result:t,status:n}=Vo((()=>Hg.listApplications().then((e=>e.map((e=>e.name)).sort()))),[],[]),a=pt((()=>t.map((e=>({label:e,value:e})))),[t]),i=Ko((e=>{if("PENDING"===n)return Rr("Loading apps...");const a=(e?"string"==typeof e?[e]:e:[]).find((e=>!t.includes(e)));return a?Ur(`Application ${a} does not exist.`):void 0}));return No(e.validation,i,[t,n]),ot.createElement(Kr,{...e,mode:"VIRTUALIZED",options:a,isLoading:"PENDING"===n})}class Jg{static get BACKSPACE(){return"Backspace"}static get DOWN_ARROW(){return"ArrowDown"}static get DELETE(){return"Delete"}static get ENTER(){return"Enter"}static get ESCAPE(){return"Escape"}static get LEFT_ARROW(){return"ArrowLeft"}static get RIGHT_ARROW(){return"ArrowRight"}static get UP_ARROW(){return"ArrowUp"}}class Wg extends ot.Component{constructor(e){super(e),this.handleClusterChange=e=>{this.props.onChange&&this.props.onChange({clusterName:e.currentTarget.value})},this.toggleFreeFormClusterField=()=>this.setState({freeFormClusterField:!this.state.freeFormClusterField});const{clusters:t,model:n}=this.props,a=!(Array.isArray(t)&&t.some((e=>e===n))),i=null!=n||""!==(n||"").trim();this.state={freeFormClusterField:!!i&&a}}render(){return ot.createElement("div",null,ot.createElement("div",null,!this.state.freeFormClusterField&&ot.createElement("select",{className:"form-control input-sm",onChange:this.handleClusterChange,required:this.props.required,value:this.props.model||""},ot.createElement("option",{value:""},"-- select cluster --"),(this.props.clusters||[]).map((e=>ot.createElement("option",{key:e,value:e},e)))),this.state.freeFormClusterField&&ot.createElement("input",{type:"text",className:"form-control input-sm",required:this.props.required,value:this.props.model||"",onChange:this.handleClusterChange,onBlur:this.handleClusterChange})),ot.createElement("div",{className:"pull-right"},!this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for text input"),this.state.freeFormClusterField&&ot.createElement("a",{className:"clickable",onClick:this.toggleFreeFormClusterField},"Toggle for list of existing clusters")))}}class Kg extends ot.Component{render(){const{matches:e}=this.props;return e&&e.length?ot.createElement("ul",{className:"nostyle"},e.map(((e,t)=>ot.createElement("li",{key:t},ot.createElement(ts,{account:e.account}),ot.createElement("span",{className:"break-word"},e.name),e.regions&&e.regions.length&&ot.createElement("i",null," in ",e.regions.join(", ")))))):ot.createElement("div",null,"(no matches)")}}const qg="spinnaker.core.widget.cluster.clusterMatches.component";n(qg,[]).component("clusterMatches",yn(Gl(Kg,"clusterMatches"),["matches"]));class Xg extends ot.Component{constructor(e){super(e),this.valueChanged=({target:{value:e}})=>{const t=parseInt(e,10);this.props.onChange(isNaN(t)?e:t)},this.state={expressionActive:w(e.value),glowing:!1}}componentWillReceiveProps(e){const t=w(e.value);this.state.expressionActive!==t&&this.setState({expressionActive:t})}setExpressionActive(e){this.setState({expressionActive:e})}setGlow(e){this.setState({glowing:e})}render(){const{expressionActive:e,glowing:t}=this.state,{value:n,min:a,max:i,required:r=!1,error:s,disabled:o}=this.props;return ot.createElement("div",{className:"navbar-form",style:{padding:0,margin:0,display:"inline-block"}},ot.createElement(Qs,{value:s,placement:"right"},ot.createElement("div",{className:`button-input${t&&!s?" focus":""}${s?" invalid":""}`},ot.createElement("span",{className:"btn-group btn-group-xs",role:"group"},ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"":"active"),onClick:()=>this.setExpressionActive(!1),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Qs,{value:"Toggle to enter number"},ot.createElement("span",null,"Num"))),ot.createElement("button",{type:"button",disabled:o,className:"btn btn-default "+(e?"active":""),onClick:()=>this.setExpressionActive(!0),onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1)},ot.createElement(Qs,{value:"Toggle to enter expression"},ot.createElement("span",null,"${","β¦","}")))),ot.createElement("input",{type:e?"text":"number",disabled:o,className:"form-control borderless inline-"+(e?"text":"number"),value:n,min:a,max:i,onChange:this.valueChanged,onFocus:()=>this.setGlow(!0),onBlur:()=>this.setGlow(!1),required:r}))))}}var Zg,_g;(_g=Zg||(Zg={}))[_g.BACKSPACE=0]="BACKSPACE",_g[_g.REMOVE=1]="REMOVE";class eh extends ot.Component{constructor(){super(...arguments),this.refCallback=e=>{e&&this.props.onCreate(e)},this.handleFocus=()=>{this.props.onFocus()},this.handleBlur=()=>{this.props.onBlur()},this.handleKeyUp=e=>{switch(e.key){case Jg.BACKSPACE:case Jg.DELETE:this.props.onDelete(this.props.tag,0);break;case Jg.LEFT_ARROW:case Jg.RIGHT_ARROW:this.props.onKeyUp(this.props.tag,e.key)}},this.handleRemoveClick=()=>{this.props.onDelete(this.props.tag,1)}}render(){const{key:e,text:t}=this.props.tag;return ot.createElement("div",{ref:this.refCallback,className:"tag",onBlur:this.handleBlur,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp,tabIndex:-1},ot.createElement("div",{className:"tag__category"},e.toLocaleUpperCase()),ot.createElement("div",{className:"tag__label"},t),ot.createElement("div",{className:"tag__remove"},ot.createElement("i",{className:"fa fa-times-circle",onClick:this.handleRemoveClick})))}}eh.defaultProps={onBlur:()=>{},onCreate:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{}};oi(".tag-list {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.tag-list .tag {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n cursor: default;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n font-size: 14px;\n margin-right: 10px;\n}\n.tag-list .tag .tag__category {\n background-color: var(--color-primary);\n border-radius: 4px 0 0 4px;\n color: var(--color-white);\n padding: 8px;\n}\n.tag-list .tag .tag__label {\n background-color: var(--color-accent-g2);\n color: var(--color-primary);\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n padding: 8px;\n}\n.tag-list .tag .tag__remove {\n background-color: var(--color-accent-g2);\n border-radius: 0 4px 4px 0;\n color: var(--color-primary);\n padding: 8px;\n}\n.tag-list .tag .tag__remove .fa.fa-times-circle {\n cursor: pointer;\n}\n");class th extends ot.Component{constructor(){super(...arguments),this.tagElements=[],this.handleBlur=()=>{this.props.onBlur()},this.handleCreate=e=>{this.tagElements.push(e),this.props.onUpdate(this.tagElements)},this.handleDelete=(e,t)=>{const n=this.findIndex(e);switch(this.tagElements.splice(n,1),this.props.onUpdate(this.tagElements),t){case Zg.BACKSPACE:this.tagElements.length?(0===n?this.tagElements[0].focus():n<=this.tagElements.length-1?this.tagElements[n].focus():this.tagElements[n-1].focus(),this.props.onDelete(e,!1)):this.props.onDelete(e,!0);break;case Zg.REMOVE:this.props.onDelete(e,!0)}Ui.log({category:"Infrastructure Search Tags",action:"Individual tag removed"})},this.handleFocus=()=>{this.props.onFocus()},this.handleKeyUp=(e,t)=>{const n=this.findIndex(e);switch(t){case Jg.LEFT_ARROW:0===n?this.props.onKeyUp():this.tagElements[n-1].focus();break;case Jg.RIGHT_ARROW:n===this.tagElements.length-1?this.props.onKeyUp():this.tagElements[n+1].focus()}}}findIndex(e){return this.props.tags.findIndex((t=>e===t))}render(){const e=this.props.tags||[];return ot.createElement("div",{className:"tag-list"},e.map((e=>ot.createElement(eh,{key:[e.key,e.text].join("|"),tag:e,onBlur:this.handleBlur,onCreate:this.handleCreate,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUp}))))}}th.defaultProps={onBlur:()=>{},onDelete:()=>{},onFocus:()=>{},onKeyUp:()=>{},onUpdate:()=>{}};class nh extends ot.Component{render(){return ot.createElement("div",{className:"table-header"},this.props.children)}}class ah extends ot.Component{render(){return ot.createElement("div",{className:"table-row small"},this.props.children)}}class ih extends ot.Component{render(){return ot.createElement("div",{className:"table-contents flex-fill"},this.props.children)}}const rh=e=>`col-${Ee(e)}`;class sh extends ot.Component{render(){const{col:e}=this.props;return ot.createElement("div",{className:rh(e.key)},e.label||N(e.key))}}class oh extends ot.Component{render(){const{item:e,col:t,defaultValue:n,children:a}=this.props;return ot.createElement("div",{className:rh(t.key)},a||e[t.key]||n)}}class lh extends ot.Component{render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:rh(t.key)},ot.createElement("a",{href:e.href},e[t.key]))}}class ch extends ot.Component{render(){const{item:e,col:t}=this.props,n=e[t.key];if(!n)return ot.createElement("div",{className:rh(t.key)},"-");const a=(Array.isArray(n)?n:n.split(",")).sort();return ot.createElement("div",{className:rh(t.key)},a.map((e=>ot.createElement(ts,{key:e,account:e}))))}}class ph extends ot.Component{cellContent(e){switch(e){case void 0:return ot.createElement(Es,{size:"small"});case null:return ot.createElement("span",null,"?");default:return ot.createElement(Og,{container:e})}}render(){const{item:e,col:t}=this.props;return ot.createElement("div",{className:rh(t.key)},this.cellContent(e[t.key]))}}class dh extends ot.Component{render(){const{isActive:e,resultSet:t}=this.props,{type:n,results:a,status:i,error:r}=t,s=n.iconClass,o=a.length,l=o<md.DEFAULT_PAGE_SIZE?`${o}`:`${o}+`,c=()=>{switch(i){case Ug.SEARCHING:return ot.createElement(Es,{size:"small"});case Ug.ERROR:return ot.createElement(Qs,{value:r&&r.toString()},ot.createElement("i",{className:"fa fa-exclamation-triangle"}));default:return a.length?ot.createElement("div",{className:"badge"},l):ot.createElement("div",{className:"badge faded"},l)}},p=e?"search-group--focus":"search-group--blur";return ot.createElement("div",{className:`flex-container-h baseline search-group ${p}`},ot.createElement("span",{className:`flex-nogrow search-group-icon ${s}`}),ot.createElement("div",{className:"flex-grow search-group-name"},n.displayName),ot.createElement("div",{className:"flex-nogrow"},ot.createElement(c,null)))}}class uh{constructor(){this.fieldsRequired=[],this.TabComponent=dh}search(e,t){const{cloudProvider:n,key:a,...i}=e,r={...i,q:a,cloudProvider:n,type:this.id};return Object.keys(i).length>0&&(r.allowShortQuery="true"),vt(md.search(r))}}const mh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement(Es,{size:"large",message:"Fetching search results ..."})),gh=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No ",e.type.displayName," found for the specified search query")),hh=({resultSet:e})=>{const{type:t}=e,{HeaderComponent:n,DataComponent:a}=t;return ot.createElement("div",{className:"search-result-grid flex-fill",style:{height:"initial"}},ot.createElement("div",{className:`table table-search-results table-search-results-${Ee(t.id)}`},ot.createElement(n,{resultSet:e}),ot.createElement(a,{resultSet:e})))},fh=({resultSet:e})=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h4",{className:"error-message"},"Could not fetch ",e.type.displayName),ot.createElement("div",{className:"error-message"},e&&e.error&&e.error.toString()));class vh extends ot.Component{render(){const e=this.props.resultSet||{},{status:t,results:n}=e;switch(t){case Ug.INITIAL:case void 0:return null;case Ug.ERROR:return ot.createElement(fh,{resultSet:e});case Ug.SEARCHING:return ot.createElement(mh,null);case Ug.FINISHED:return n.length?ot.createElement(hh,{resultSet:e}):ot.createElement(gh,{resultSet:e});default:return null}}}var Ah=Object.defineProperty,Eh=Object.getOwnPropertyDescriptor;let bh=class extends ot.Component{render(){const{activeSearchResultType:e}=this.props,t=this.props.resultSets.slice().sort(((e,t)=>e.type.order-t.type.order));return ot.createElement("ul",{className:"search-groups nostyle"},t.map((t=>{const{type:n}=t,{TabComponent:a}=n,i=n===e;return ot.createElement(Dn,{key:n.id,to:".",params:{tab:n.id}},ot.createElement("li",null,ot.createElement(a,{resultSet:t,isActive:i})))})))}};bh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Eh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Ah(t,n,r),r})([na],bh);oi(".table-search-results {\n width: auto;\n overflow-x: auto;\n white-space: nowrap;\n word-break: break-all;\n}\n.table-search-results .table-header {\n position: sticky;\n top: 0;\n font-weight: 600;\n background-color: var(--color-alabaster);\n z-index: 2;\n}\n.table-search-results .table-header .fa {\n padding-left: 2px;\n}\n.table-search-results .table-header .fa.disabled {\n color: var(--color-alto);\n}\n.table-search-results .table-header .table-header {\n background-color: var(--color-alabaster);\n}\n.table-search-results .table-header,\n.table-search-results .table-row {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.table-search-results .table-header > div,\n.table-search-results .table-row > div {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n padding: 10px;\n display: inline-block;\n width: 150px;\n word-break: break-all;\n white-space: normal;\n border-bottom: 1px solid var(--color-alto);\n}\n.table-search-results .table-row > div {\n background-color: var(--color-alabaster);\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n}\n.table-search-results .table-row:nth-child(even) > div {\n background-color: var(--color-white);\n}\n.table-search-results .table-row:hover > div {\n background-color: var(--color-cirrus);\n}\n.table-search-results .table-row.active > div {\n background-color: var(--color-accent-g2);\n}\n.search-results {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n margin-top: 10px;\n height: 100%;\n overflow: hidden;\n}\n.search-results .faded {\n opacity: 0.2;\n}\n.search-results .search-groups {\n background-color: var(--color-alabaster);\n cursor: default;\n min-width: 275px;\n width: 275px;\n}\n.search-results .search-groups .search-group {\n cursor: pointer;\n padding: 10px;\n margin-bottom: 1px;\n}\n.search-results .search-groups .search-group .search-group-icon {\n background-color: var(--color-primary);\n border: 2px solid var(--color-white);\n border-radius: 50%;\n color: var(--color-white);\n display: inline-block;\n height: 32px;\n line-height: 29px;\n margin-right: 10px;\n text-align: center;\n width: 32px;\n}\n.search-results .search-groups .search-group .search-group-name {\n color: var(--color-primary);\n font-size: 110%;\n font-weight: 600;\n text-transform: uppercase;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.search-results .search-groups .search-group .badge {\n background-color: var(--color-primary);\n border-radius: 3px;\n}\n.search-results .search-groups .search-group.search-group--focus {\n background-color: var(--color-accent-g2);\n}\n.search-results .search-groups .search-group.search-group--blur {\n background-color: var(--color-alabaster);\n}\n.search-results .search-groups .search-group:hover {\n background-color: var(--color-accent-g2);\n -webkit-transition: all 0.15s ease-in-out;\n transition: all 0.15s ease-in-out;\n}\n.search-results .search-groups .search-group:hover.faded {\n background-color: var(--color-alabaster);\n}\n.search-results .search-result-grid {\n padding-left: 15px;\n}\n.search-results .search-result-grid .small {\n font-size: 90%;\n}\n.search-results .search-result-grid .table-contents.flex-fill {\n height: inherit;\n}\n");const yh=()=>ot.createElement("div",{className:"flex-grow vertical center middle"},ot.createElement("h3",null,"No results found for the specified search query"));class wh extends ot.Component{constructor(){super(...arguments),this.state={active:null}}componentWillReceiveProps(e){const{resultSets:t,selectedTab:n}=e,a=t.map((e=>e.type)).find((e=>e.id===n));this.setState({active:a})}render(){const{resultSets:e,isSearching:t}=this.props,{active:n}=this.state,a=n&&e.find((e=>e.type===n)),i=e.every((e=>e.status===Ug.FINISHED&&0===e.results.length));return ot.createElement("div",{className:"search-results"},ot.createElement(bh,{resultSets:e,activeSearchResultType:n}),a&&ot.createElement(vh,{resultSet:a}),!a&&t&&ot.createElement(mh,null),i&&!n&&ot.createElement(yh,null))}}class xh{constructor(e,t){this.$q=e,this.providerServiceDelegate=t,this.querySubject=new At,this.querySubject.pipe(Dt((e=>{if(!e||""===e.trim()){const e=jg.getAll().map((e=>({type:e,results:[],status:Ug.INITIAL})));return Et(e)}return Lg.search({key:e}).pipe(Gt())}))).subscribe((e=>{this.deferred.resolve(e)}))}query(e){return this.deferred=this.$q.defer(),this.querySubject.next(e),this.deferred.promise}getCategoryConfig(e){return jg.get(e)}formatRouteResult(e,t){return this.formatResult(e,t,!0)}formatResult(e,t,n=!1){const a=jg.get(e);if(!a)return this.$q.when("");let i=a.displayFormatter;if(this.providerServiceDelegate.hasDelegate(t.provider,"search.resultFormatter")){const n=this.providerServiceDelegate.getDelegate(t.provider,"search.resultFormatter");n[e]&&(i=n[e])}return this.$q.when(i(t,n))}}class Ch{constructor(e,t){this.$q=e,this.providerServiceDelegate=t}getSearcher(){return new xh(this.$q,this.providerServiceDelegate)}}Ch.$inject=["$q","providerServiceDelegate"];const kh="spinnaker.infrastructure.search.service";n(kh,[gp]).service("infrastructureSearchService",Ch);class Bh extends ot.Component{constructor(){super(...arguments),this.handleClick=()=>{const{filterType:e,onClick:t}=this.props,{name:n,key:a}=e;t([n,a].join("|"))},this.handleKeyUp=e=>{this.props.onKeyUp(e)},this.handleMouseDown=e=>{this.props.onMouseDown(e)}}render(){const{isActive:e}=this.props,t=wn({filter:!0,"filter--focus":e,"filter--blur":!e}),{key:n,name:a}=this.props.filterType;return ot.createElement("div",{role:"option",className:t,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown},ot.createElement("div",{className:"filter__text"},a),ot.createElement("div",{className:"filter__modifier"},"[",n.toLocaleUpperCase(),":]"))}}Bh.defaultProps={onClick:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};oi(".filter-list {\n background-color: var(--color-white);\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n cursor: default;\n margin-top: 40px;\n position: absolute;\n white-space: pre;\n width: 200px;\n z-index: 1000;\n}\n.filter-list.filter-list__open {\n display: block;\n}\n.filter-list.filter-list__closed {\n display: none;\n}\n.filter-list .filter-list__header {\n color: var(--color-concrete);\n margin-left: 5px;\n margin-top: 10px;\n margin-left: 10px;\n}\n.filter-list .filter {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n cursor: pointer;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n padding: 5px 5px 5px 10px;\n}\n.filter-list .filter .filter__text {\n font-size: 14px;\n color: var(--color-mineshaft);\n}\n.filter-list .filter .filter__modifier {\n font-size: 14px;\n color: var(--color-concrete);\n margin-left: 5px;\n}\n.filter-list .filter.filter--focus {\n border-color: var(--color-accent-g1);\n background-color: var(--color-accent-g2);\n}\n.filter-list .filter.filter--blur {\n background-color: var(--color-white);\n}\n.filter-list .filter:hover {\n background-color: var(--color-accent-g2);\n border-color: var(--color-accent-g1);\n}\n");class Sh extends ot.Component{constructor(){super(...arguments),this.filters=[],this.refCallback=e=>{this.filters.push(e)},this.handleClick=e=>{const t=this.filters.find((t=>{const{name:n,key:a}=t.props.filterType;return e===[n,a].join("|")}));this.props.filterClicked(t)},this.handleKeyUp=e=>{switch(e.key){case Jg.UP_ARROW:case Jg.DOWN_ARROW:this.props.onKeyUp(e.key)}},this.handleMouseDown=()=>{this.props.onMouseDown()}}generateFilterElement(e){const{name:t,key:n}=e;return ot.createElement(Bh,{key:[t,n].join("|"),ref:this.refCallback,filterType:e,isActive:this.props.activeFilter.key===n,onClick:this.handleClick,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown})}renderFilterLayout(e){const{header:t,filterTypes:n}=e,a=(n||[]).map((e=>this.generateFilterElement(e)));return ot.createElement("div",{key:[t,n.length].join("|")},ot.createElement("div",{className:"filter-list__header"},t),ot.createElement("div",{role:"listbox"},a))}render(){const{layouts:e,isOpen:t}=this.props,n=wn({"filter-list":!0,"filter-list__open":t,"filter-list__closed":!t}),a=(e||[]).map((e=>this.renderFilterLayout(e)));return ot.createElement("div",{className:n},a)}}Sh.defaultProps={filterClicked:()=>{},onKeyUp:()=>{},onMouseDown:()=>{}};class Mh{constructor(){this.KEYWORD_FILTER=Object.freeze({key:"key",name:"Keyword"}),this.NAME_FILTER=Object.freeze({key:"name",name:"Name"}),this.registry=new Map,this.register(this.KEYWORD_FILTER),this.register(this.NAME_FILTER)}register(e){this.registry.set(e.key,e)}getFilterType(e){return this.registry.get(e)}getFilterByModifier(e){return[...this.registry.values()].find((t=>e===t.key))}getRegisteredFilterKeys(){return[...this.registry.keys()]}getValues(){const e=Array.from(this.registry.values());return e.sort(((e,t)=>e.name.localeCompare(t.name))),e}}const Nh=new Mh;oi(".search {\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.search .search__icon {\n -webkit-box-flex: 1;\n -ms-flex: 1 0 auto;\n flex: 1 0 auto;\n}\n.search .search__input {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n color: var(--color-mineshaft);\n background: var(--color-white) none;\n border: 1px solid;\n border-radius: 4px;\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.search .search__input .search__input-wrapper {\n -webkit-box-align: baseline;\n -ms-flex-align: baseline;\n align-items: baseline;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -ms-flex: 1 1;\n flex: 1 1;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control {\n border: none;\n max-width: 100%;\n outline: 0;\n padding-right: 10px;\n width: 100%;\n}\n.search .search__input .search__input-wrapper .search__input-control::-moz-placeholder {\n color: var(--color-concrete);\n opacity: 1;\n}\n.search .search__input .search__input-wrapper .search__input-control:-ms-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .search__input-control::-webkit-input-placeholder {\n color: var(--color-concrete);\n}\n.search .search__input .search__input-wrapper .fa.fa-times {\n cursor: pointer;\n}\n.search .search__input.search__input--focus {\n border-color: var(--color-accent);\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px -2px var(--color-accent);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px -2px var(--color-accent);\n}\n.search .search__input.search__input--blur {\n border-color: var(--color-alto);\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n");class Dh extends ot.Component{constructor(e){super(e),this.filterTypes=[],this.tagElements=[],this.mouseDownFired=!1,this.handleTagListUpdate=e=>{this.tagElements=e},this.refCallback=e=>{this.inputElement=e},this.handleBlur=()=>{this.mouseDownFired||this.setState({isFocused:!1,isOpen:!1})},this.handleChange=()=>{let e;const t=this.inputElement.value.trim();if(this.hasModifier(t)){const n=this.getModifier(t);e={activeFilter:this.filterTypes.find((e=>e.key===n)),isOpen:!0}}else e={isOpen:!!t};this.setState(e)},this.handleDelete=(e,t)=>{const n=this.state.tags.filter((t=>e!==t));this.setState({isFocused:!0,tags:n}),this.props.onChange(n),t&&this.inputElement.focus()},this.handleFocus=()=>{this.setState({isFocused:!0})},this.handleKeyUpFromInput=e=>{const t=this.tagElements.length;switch(e.key){case Jg.LEFT_ARROW:!this.inputElement.value&&t>=1&&this.tagElements[t-1].focus();break;case Jg.RIGHT_ARROW:this.inputElement.value||0===t||this.tagElements[0].focus();break;case Jg.UP_ARROW:this.navigateUp();break;case Jg.DOWN_ARROW:this.navigateDown();break;case Jg.ENTER:this.handleFilterSelection();break;case Jg.ESCAPE:{const e=this.inputElement.value;this.hasModifier(e)&&!this.getSearchText(e)&&(this.inputElement.value=""),this.setState({activeFilter:Nh.KEYWORD_FILTER,isOpen:!1});break}}},this.handleKeyUpFromTag=()=>{this.inputElement.focus()},this.filterClicked=e=>{this.handleFilterSelection(e.props.filterType),this.mouseDownFired=!1},this.handleKeyUp=e=>{switch(e){case Jg.UP_ARROW:this.navigateUp();break;case Jg.DOWN_ARROW:this.navigateDown()}},this.handleMouseDown=()=>{this.mouseDownFired=!0},this.handleClearClick=()=>{this.setState({isOpen:!1,tags:[]}),this.inputElement.value="",this.inputElement.focus(),this.props.onChange([])};const t=[];t.push({header:"SEARCH",filterTypes:[Nh.KEYWORD_FILTER]}),this.filterTypes=this.reorderFilterTypesForSearch(Nh.getValues()),t.push({header:"FILTER ON",filterTypes:this.filterTypes.filter((e=>e.key!==Nh.KEYWORD_FILTER.key))}),this.keys=new Set(Nh.getValues().map((e=>e.key))),this.state={activeFilter:Nh.KEYWORD_FILTER,isFocused:!0,isOpen:!1,layouts:t,tags:this.buildTagsFromParams(e.params,[])}}componentWillReceiveProps(e){const t=this.buildTagsFromParams(e.params,this.state.tags);this.setState({tags:t})}reorderFilterTypesForSearch(e){const t=new Set([Nh.KEYWORD_FILTER.key,Nh.NAME_FILTER.key]),n=e.filter((e=>!t.has(e.key)));return n.unshift(Nh.NAME_FILTER),n.unshift(Nh.KEYWORD_FILTER),n}buildTagsFromParams(e,t){const n=t.filter((t=>e[t.key])).map((t=>({key:t.key,text:e[t.key]}))),a=Object.keys(e).filter((t=>!!e[t]&&!n.some((e=>e.key===t)))).map((t=>({key:t,text:e[t]})));return n.concat(a)}isLongEnoughIfKeyword(e){return e.key!==Nh.KEYWORD_FILTER.key||e.key===Nh.KEYWORD_FILTER.key&&e.text.length>2}hasModifier(e){const t=e.indexOf(":");return this.keys.has(e.substring(0,t).toLocaleLowerCase())&&t!==e.length}getModifier(e){return e.substring(0,e.indexOf(":")).toLocaleLowerCase()}getSearchText(e){const t=e.trim(),n=t.split(":")[1]||"";return this.hasModifier(t)?n.trim():t}buildTagFromInputString(e=this.state.activeFilter){const t=this.inputElement.value.trim(),n=this.getSearchText(t).trim();if(!t||!n)return null;return{key:this.hasModifier(t)?this.getModifier(t):e.key,text:n}}getActiveFilterIndex(){return this.filterTypes.findIndex((e=>e===this.state.activeFilter))}getActiveFilterText(e){let t;const n=this.inputElement.value.trim();if(this.hasModifier(n)){const a=this.getModifier(n),i=new RegExp(a,"i");t=`${n.replace(i,e.key)}`}else t=`${e.key}:${n}`;return t}navigateUp(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=0===t?e[e.length-1]:e[t-1];this.navigate(n)}navigateDown(){const{filterTypes:e}=this,t=this.getActiveFilterIndex(),n=t===e.length-1?e[0]:e[t+1];this.navigate(n)}navigate(e){const t=this.state.isOpen?e:Nh.KEYWORD_FILTER,n={activeFilter:t};this.inputElement.value=this.getActiveFilterText(t),this.setState({...n,isOpen:!0})}handleFilterSelection(e){const t=this.buildTagFromInputString(e);if(t&&this.isLongEnoughIfKeyword(t)){const e=this.state.tags.filter((e=>e.key!==t.key)).concat(t);this.setState({activeFilter:Nh.KEYWORD_FILTER,isOpen:!1,tags:e}),this.inputElement.value="",this.props.onChange(e)}}render(){const{activeFilter:e,isFocused:t,isOpen:n,layouts:a,tags:i}=this.state,r=wn({search__input:!0,"search__input--focus":t,"search__input--blur":!t});return ot.createElement("div",{className:"search"},ot.createElement("i",{className:"fa fa-search search__icon"}),ot.createElement("span",{className:"search-label"},"Search"),ot.createElement("div",{className:r},ot.createElement(th,{tags:i,onBlur:this.handleBlur,onDelete:this.handleDelete,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromTag,onUpdate:this.handleTagListUpdate}),ot.createElement("div",{className:"search__input-wrapper"},ot.createElement("input",{type:"text",ref:this.refCallback,autoFocus:!0,className:"search__input-control",placeholder:`projects, applications, clusters, load balancers, server groups, ${Vs.get("firewalls")}`,onBlur:this.handleBlur,onChange:this.handleChange,onFocus:this.handleFocus,onKeyUp:this.handleKeyUpFromInput}),ot.createElement("i",{className:"fa fa-times",onClick:this.handleClearClick}),ot.createElement(Sh,{activeFilter:e,isOpen:n,layouts:a,filterClicked:this.filterClicked,onKeyUp:this.handleKeyUp,onMouseDown:this.handleMouseDown}))))}}jg.register(new class extends uh{constructor(){super(...arguments),this.id="securityGroups",this.order=6,this.displayName=Vs.get("Firewalls"),this.iconClass="fa fa-exchange-alt",this.cols={NAME:{key:"name"},ACCOUNT:{key:"account"},REGION:{key:"region"}},this.TabComponent=dh,this.HeaderComponent=()=>ot.createElement(nh,null,ot.createElement(sh,{col:this.cols.NAME}),ot.createElement(sh,{col:this.cols.ACCOUNT}),ot.createElement(sh,{col:this.cols.REGION})),this.DataComponent=({resultSet:e})=>{const t=e=>[e.id,e.name,e.account,e.region].join("|"),n=(e,t)=>{const n=e.name.localeCompare(t.name);return 0!==n?n:e.region.localeCompare(t.region)},a=e.results.slice().sort(n);return ot.createElement(ih,null,a.slice().sort(n).map((e=>ot.createElement(ah,{key:t(e)},ot.createElement(lh,{item:e,col:this.cols.NAME}),ot.createElement(ch,{item:e,col:this.cols.ACCOUNT}),ot.createElement(oh,{item:e,col:this.cols.REGION})))))}}displayFormatter(e){return`${e.name} (${e.region})`}});class Ih{constructor(e,t){if(this.application=t,this.autoActivate=!1,this.lazy=!1,this.optIn=!1,this.optional=!1,this.primary=!1,this.requireConfiguredApp=!1,this.visible=!0,this.hidden=!1,this.loaded=!1,this.loading=!1,this.disabled=!1,this.loadFailure=!1,this.active=!1,this.debugEnabled=!1,Object.assign(this,e),!e.hasOwnProperty("defaultData"))throw new Error("The defaultData field is required when registering a data source.\n\ndefaultData accepts the initial default value that will be used before data has been fetched.\nFor example, if your data source holds an array of objects, you should set defaultData to an empty array.");this.data=this.data||this.defaultData,this.label=Vs.get(e.label||yr(e.key)),!e.activeState&&this.sref&&(this.activeState="**"+this.sref+".**"),e.autoActivate&&(hi.$uiRouter.transitionService.onSuccess({entering:this.activeState},(()=>this.activate())),hi.$uiRouter.transitionService.onSuccess({exiting:this.activeState},(()=>this.deactivate()))),this.destroy$=new At,this.fetchRequest$=new At,this.status$=new wt({status:"NOT_INITIALIZED",loaded:this.loaded,lastRefresh:0,error:null,data:this.data}),this.data$=new wt(this.data),this.refresh$=this.data$.pipe(jt(1)),this.refreshFailure$=this.status$.pipe(jt(1),Tt((({status:e})=>"ERROR"===e))),this.throwFailures$=this.refreshFailure$.pipe(St((({error:e})=>{throw e}))),this.nextRefresh$=bt(this.data$.pipe(jt(1)),this.throwFailures$).pipe(Lt(1));const n=this.fetchRequest$.pipe(Pt((()=>this.debug("fetch requested..."))),Dt((()=>vt(this.loader(this.application)).pipe(Rt((e=>this.onLoad(this.application,e))),St((e=>({status:"FETCHED",lastRefresh:Date.now(),data:e}))),Ut((e=>Et({status:"ERROR",lastRefresh:this.lastRefresh,data:this.data,error:e}))),Ot({status:"FETCHING",lastRefresh:this.lastRefresh,data:this.data})))),Ot(this.status$.value),It(this.destroy$)),a=vt(Ze.resolve());n.pipe(Yt(a)).subscribe((([e,t])=>{this.statusUpdated(e),e.loaded=this.loaded,"FETCHED"===e.status&&(this.updateData(e.data),this.afterLoad&&this.afterLoad(this.application),this.addAlerts()),this.status$.next(e)}))}dataUpdated(e){if(this.loaded){this.updateData(void 0!==e?e:this.data);const t={data:this.data,...this.status$.value};this.status$.next(t)}}statusUpdated(e){const{status:t}=e;this.status=e,this.loaded="FETCHED"===t||this.loaded,this.loading="FETCHING"===t,this.loadFailure="ERROR"===t,this.lastRefresh=e.lastRefresh,this.debug(`status: ${e.status}`)}destroy(){this.destroy$.next()}onNextRefresh(e,t,n){const a=this.nextRefresh$.subscribe((e=>t(e)),(e=>n&&n(e)));return e&&e.$on("$destroy",(()=>a.unsubscribe())),()=>a.unsubscribe()}onRefresh(e,t,n){const a=this.refreshFailure$.pipe(Rt((({error:e})=>(n&&n(e),xt())))),i=bt(this.data$.pipe(jt(1)),a).subscribe((e=>t(e)));return e&&e.$on("$destroy",(()=>i.unsubscribe())),()=>i.unsubscribe()}ready(){return this.disabled||this.loaded||this.lazy&&!this.active?Ze.resolve(this.data):Xi(this.nextRefresh$)}activate(){this.active||(this.active=!0,this.loaded||this.refresh())}deactivate(){this.active=!1}updateData(e){this.data=e||this.defaultData,this.data$.next(this.data),this.debug("this.data:",this.data)}refresh(e){if(this.debug(`refresh(${e})`),!this.loader||this.disabled||this.lazy&&!this.active)return this.loaded=!1,this.updateData(this.defaultData),Ze.resolve(this.data);const t=Xi(this.data$.pipe(jt(1),Lt(1)));return this.loading&&!e?Xe.info(`${this.key} still loading, skipping refresh`):this.fetchRequest$.next(),t}addAlerts(){this.alerts=[],Array.isArray(this.data)&&this.data.length&&(this.alerts=this.data.filter((e=>{var t,n,a;return null!=(a=null==(n=null==(t=e.entityTags)?void 0:t.alerts)?void 0:n.length)?a:0})).map((e=>e.entityTags)))}debug(e,t){this.debugEnabled&&console.log(`DEBUG ${this.application.name}.${this.key}: ${e}`,t)}}class Fh{constructor(e,t,n){this.applicationName=e,this.scheduler=t,this.dataSources=[],this.accounts=[],this.clusters=[],this.defaultCredentials={},this.defaultRegions={},this.attributes={},this.notFound=!1,this.hasError=!1,this.isStandalone=!1,this.isManagementPaused=!1,this.activeState=null,this.refreshListeners=[],this.activeDataSource$=new Ct(1),this.activeStateChangeStream=new At,this.refreshStream=new At,this.refreshFailureStream=new At,n.forEach((e=>this.addDataSource(e))),this.status$=kt(this.dataSources.map((e=>e.status$))).pipe(St((e=>this.getDerivedApplicationStatus(e))))}get name(){return this.applicationName}getDerivedApplicationStatus(e){const t=e.some((({status:e})=>"ERROR"===e))?"ERROR":void 0,n=e.some((({status:e})=>"FETCHING"===e))?"FETCHING":void 0,a=e.some((({status:e})=>"FETCHED"===e))?"FETCHED":void 0,i=t||n||a||"NOT_INITIALIZED",r=e.every((({status:e})=>["FETCHED","NOT_INITIALIZED"].includes(e))),s=e.reduce(((e,t)=>Math.max(e,t.lastRefresh||0)),0),o=e.every((({loaded:e})=>e));return{status:i,lastRefresh:r?s:this.lastRefresh,loaded:o,data:void 0}}addDataSource(e){const t=new Ih(e,this);this.dataSources.push(t),this[e.key]=t}getDataSource(e){return this.dataSources.find((t=>t.key===e))}refresh(e){return this.dataSources.filter((e=>!e.visible)).forEach((t=>t.refresh(e))),this.refreshListeners.forEach((e=>e())),Ze.all(this.dataSources.filter((e=>e.visible)).map((t=>t.refresh(e)))).then((()=>this.applicationLoadSuccess()),(e=>this.applicationLoadError(e)))}ready(){return Ze.all(this.dataSources.filter((e=>void 0!==e.onLoad&&e.visible)).map((e=>e.ready())))}onRefresh(e,t,n){const a=this.refreshStream.subscribe(t);let i=null;n&&(i=this.refreshFailureStream.subscribe(n));const r=()=>{a.unsubscribe(),i&&i.unsubscribe()};return e&&e.$on("$destroy",(()=>r())),r}enableAutoRefresh(){this.dataLoader=this.scheduler.subscribe((()=>this.refresh()))}disableAutoRefresh(){this.dataLoader&&this.dataLoader.unsubscribe(),this.scheduler.unsubscribe()}setActiveState(e=null){this.activeState!==e&&(this.activeState=e,this.activeDataSource$.next(e),this.activeStateChangeStream.next(null))}applicationLoadError(e){Xe.error(e,"Failed to load application, will retry on next scheduler execution."),this.refreshFailureStream.next(e)}applicationLoadSuccess(){this.setApplicationAccounts(),this.setDefaults(),this.lastRefresh=(new Date).getTime(),this.refreshStream.next(null)}setApplicationAccounts(){let e=this.accounts.concat(this.attributes.accounts||[]);this.dataSources.filter((e=>Array.isArray(e.data)&&void 0!==e.credentialsField)).forEach((t=>e=e.concat(t.data.map((e=>e[t.credentialsField]))))),this.accounts=f(e)}extractProviderDefault(e){const t=new Map,n=this.dataSources.filter((t=>void 0!==t[e]&&Array.isArray(t.data)&&void 0!==t.providerField)),a=n.map((e=>e.data.map((t=>t[e.providerField])))).filter((e=>e.length>0));return be(...a).forEach((a=>{const i=n.map((t=>F(t.data.filter((e=>"object"==typeof e&&e[t.providerField]===a)),t[e]))).filter((e=>e.length>0)),r=be(...i);1===r.length&&(t[a]=r[0])})),t}setDefaults(){this.defaultCredentials=this.extractProviderDefault("credentialsField"),this.defaultRegions=this.extractProviderDefault("regionField")}subscribeToRefresh(e){this.refreshListeners.push(e);return()=>{this.refreshListeners.filter((t=>t!==e))}}}const Th=(e,t)=>new Promise(((n,a)=>{Si(e).post(null==t?void 0:t.body).then((e=>{n({ok:!0,status:200,text:()=>new Promise((t=>{t(JSON.stringify(e))}))})})).catch((e=>a(e)))})),Qh=()=>{const e=new ga({cache:new ha}),t=new fa({uri:"/managed/graphql",fetch:Th});e.setLink(t);return{client:e,onRefresh:()=>e.reFetchObservableQueries()}};var Ph=Object.defineProperty,Rh=Object.getOwnPropertyDescriptor;let Uh=class extends ot.Component{render(){return ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appSynced"})}};Uh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Rh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Ph(t,n,r),r})([bs("applicationIcon")],Uh);const zh=({appName:e,lastRefresh:t,refresh:n,refreshing:a})=>{const i=_s.createScheduler(2e3),[r,s]=ot.useState(sr(t)),[o,l]=ot.useState(!1);ot.useEffect((()=>(i.subscribe((()=>{s(sr(t))})),()=>i.unsubscribe())),[t]);const c=(new Date).getTime()-t>12e4,p=ot.createElement("span",null,ot.createElement("p",null,ot.createElement("strong",null,e)),ot.createElement("p",null,"app data is "+(a?"refreshing":"up to date (click to refresh)")),ot.createElement("p",null,"Last refresh: ",rr(t)," ",ot.createElement("br",null)," ",r),ot.createElement("p",null,"Note: Due to caching, data may be delayed up to 2 minutes")),d=o||a;return ot.createElement(Qs,{template:p,placement:at.innerWidth<1100?"bottom":"right"},ot.createElement("div",{className:"application-header-icon"+(d?" header-icon-pulsing":""),onClick:()=>{l(!0),setTimeout((()=>{l(!1)}),3e3),n()}},!c&&!d&&ot.createElement(Uh,null),(c||d)&&ot.createElement(Sn,{className:"app-fresh-icon horizontal middle",name:"appUnsynced"})))},Gh=({app:e})=>{const[t,n]=ot.useState(!1),[a,i]=ot.useState(0);qo(e.status$,(e=>{"FETCHING"===e.status?n(!0):"FETCHED"===e.status?(n(!1),i(e.lastRefresh)):n(!1)}));return ot.createElement(zh,{appName:e.name,lastRefresh:a,refreshing:t,refresh:()=>{e.refresh(!0)}})};class jh{constructor(){this.queue=[]}setRegistries(e){this.overrideRegistry=e,this.flush()}register(e,t,n){this.queue.push((()=>{n?Ni.overrideValue(n,t,e):this.overrideRegistry.overrideComponent(t,e)})),this.flush()}flush(){if(this.overrideRegistry&&Ni)for(;this.queue.length;)this.queue.splice(0,1)[0]()}}const Lh=new jh;function Oh(e,t){return function(n){Lh.register(n,e,t)}}const Yh=(e,t,n)=>{Lh.register(e,t,n)};class $h{constructor(){this.templateOverrides=new Map,this.componentOverrides=new Map,this.controllerOverrides=new Map}overrideTemplate(e,t){this.templateOverrides.set(e,t)}overrideComponent(e,t){this.componentOverrides.set(e,t)}overrideController(e,t){this.controllerOverrides.set(e,t)}getTemplate(e,t){return this.templateOverrides.get(e)||t}getComponent(e){return this.componentOverrides.get(e)}getController(e,t=e){return this.controllerOverrides.get(e)||t}}const Hh="spinnaker.core.override.registry";n(Hh,[]).service("overrideRegistry",$h).run(["overrideRegistry",e=>{Lh.setRegistries(e)}]);var Vh=Object.defineProperty,Jh=Object.getOwnPropertyDescriptor;let Wh=class extends ot.Component{render(){return null}};Wh=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Jh(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&Vh(t,n,r),r})([bs("core.nav.bottom")],Wh);class Kh extends ot.Component{render(){const e=this.props.tag.entityRef;return e.account||e.region?ot.createElement("div",{className:"entityname"},ot.createElement("span",{className:"entityref"},ot.createElement("strong",null,e.entityId)),ot.createElement("span",{className:"account-region"}," ( ",e.account&&ot.createElement(ts,{account:e.account})," ",ot.createElement("span",null,e.region)," ) ")):null}}class qh extends ot.Component{constructor(e){super(e),this.state={collapsed:!0,alertsByMessage:this.getAlertsByMessage(e.notifications)}}componentWillReceiveProps(e){this.setState({alertsByMessage:this.getAlertsByMessage(e.notifications)})}getAlertsByMessage(e){const t=ie(e,"entityTag.value.message");return Object.keys(t).map((e=>({message:e,tagline:t[e][0].entityTag.value.tagline,title:t[e][0].entityTag.value.title,notifications:t[e]})))}render(){return ot.createElement("div",{className:"notification-list"},this.state.alertsByMessage.map((e=>ot.createElement(Xh,{key:e.message,alertsForMessage:e}))))}}qh.defaultProps={notifications:[]};class Xh extends ot.Component{constructor(){super(...arguments),this.state={collapsed:!0},this.toggleCollapsed=()=>{this.setState({collapsed:!this.state.collapsed})},this.renderServerGroupName=e=>{const{entityTags:t}=e,{entityRef:{region:n,entityId:a}}=t,i=`${n}+${a}`;return ot.createElement(Kh,{key:i,tag:t})}}renderServerGroupNames(e){return 1===e.length?this.renderServerGroupName(e[0]):ot.createElement("div",null,ot.createElement("a",{className:"clickable",onClick:this.toggleCollapsed},ot.createElement("strong",null,ot.createElement("span",null," ",this.state.collapsed?"Show":"Hide"," ",e.length," entities"))),ot.createElement("div",{className:"server-group-list"},!this.state.collapsed&&e.map(this.renderServerGroupName)))}render(){const{alertsForMessage:{notifications:e,title:t,message:n,tagline:a}}=this.props;return ot.createElement("div",{className:"notification-message"},t&&ot.createElement("div",{className:"notification-title"},ot.createElement(Br,{message:t})),this.renderServerGroupNames(e),ot.createElement(Br,{message:n}),ot.createElement(Br,{className:"small",message:a}))}}class Zh extends ot.Component{constructor(){super(...arguments),this.selectCategory=()=>{this.props.onCategorySelected(this.props.category)}}render(){const{category:e,notifications:t}=this.props,n=`clickable list-group-item flex-container-h baseline alerts-severity-${e.severity} `+(this.props.isSelected?"selected ":" ");return ot.createElement("li",{className:n,onClick:this.selectCategory,key:e.id},ot.createElement("i",{className:`notification-category-icon fa ${e.icon}`}),ot.createElement("span",{className:"notification-category-label flex-grow"},e.label),ot.createElement("span",{className:"badge"},t.length))}}class _h extends ot.Component{render(){const{notifications:e,onEditTag:t,onDeleteTag:n}=this.props;return ot.createElement("div",{className:"notification-list"},e.map(((e,a)=>{const{entityTag:{lastModified:i,value:{title:r,message:s,tagline:o}}}=e;return ot.createElement("div",{className:"notification-message",key:a},r&&ot.createElement("div",{className:"notification-title"},ot.createElement(Br,{message:r})),ot.createElement(Br,{message:s}),ot.createElement("div",{className:"notification-tagline flex-container-h baseline"},ot.createElement(Br,{className:"small",message:o}),ot.createElement("div",{className:"small flex-grow",title:rr(i)},sr(i)),ot.createElement(ef,{notification:e,onEditTag:t,onDeleteTag:n})))})))}}class ef extends ot.Component{constructor(){super(...arguments),this.editTag=()=>{this.props.onEditTag(this.props.notification)},this.deleteTag=()=>{this.props.onDeleteTag(this.props.notification)}}render(){return ot.createElement("div",{className:"flex-nogrow actions actions-popover",style:{position:"relative"}},ot.createElement("a",{onClick:this.editTag},ot.createElement("span",{className:"glyphicon glyphicon-cog clickable"})),ot.createElement("a",{onClick:this.deleteTag},ot.createElement("span",{className:"glyphicon glyphicon-trash clickable"})))}}const tf=ye([{id:"urgentissues",label:"Urgent Issues",icon:"fa-exclamation",severity:2},{id:"deprecation",label:"Deprecations",icon:"fa-wrench",severity:1},{id:"default",label:"Uncategorized",icon:"fa-exclamation-circle",severity:0}],"id");class nf{static defineCategory(e,t=e,n=0,a="fa-exclamation-circle"){return tf[e]={id:e,label:t,severity:n,icon:a}}static getCategory(e){return e?tf[e="blacklist"===e?"urgentissues":e]||nf.defineCategory(e):tf.default}}class af extends ot.Component{constructor(e){super(e),this.handleCategorySelected=e=>{this.setState({selectedCategory:e})};const t=this.categorizeNotifications(e.notifications);this.state={categorizedAlerts:t,selectedCategory:t[0].category}}componentWillReceiveProps(e){const t=this.categorizeNotifications(e.notifications);this.setState({categorizedAlerts:t})}categorizeNotifications(e){const t=e=>nf.getCategory(e.entityTag.category).id;return f(e.map(t)).map((n=>({category:nf.getCategory(n),notifications:e.filter((e=>t(e)===n))}))).sort(((e,t)=>t.category.severity-e.category.severity))}render(){const{categorizedAlerts:e,selectedCategory:t}=this.state,{onEditTag:n,onDeleteTag:a}=this.props;if(!e||!t)return null;const i=e.find((e=>e.category===t)).notifications;return ot.createElement("div",{className:"flex-container-h"},ot.createElement("ul",{className:"list-group notification-categories"},e.map((({category:e,notifications:n})=>ot.createElement(Zh,{isSelected:e===t,key:e.id,category:e,notifications:n,onCategorySelected:this.handleCategorySelected})))),this.props.grouped?ot.createElement(qh,{notifications:i}):ot.createElement(_h,{notifications:i,onEditTag:n,onDeleteTag:a}))}}class rf{static upsertEntityTag(e,t,n,a){return ep.executeTask({application:e,description:`${a?"Create":"Update"} entity tag on ${n.entityId}`,job:[{type:"upsertEntityTags",application:e.name,entityId:n.entityId,entityRef:n,tags:[t],isPartial:!0}]})}static deleteEntityTag(e,t,n,a){return ep.executeTask({application:e,description:`Delete entity tag on ${t.name}`,job:[{type:"deleteEntityTags",application:e.name,id:n.id,tags:[a]}]})}}oi(".entity-tag-editor-modal .preview {\n background-color: var(--color-accent-g2);\n}\n.entity-tag-editor-modal .preview .marked,\n.entity-tag-editor-modal .preview [marked] {\n padding-top: 5px;\n}\n.entity-tag-editor-modal label .marked p,\n.entity-tag-editor-modal label [marked] p {\n margin-bottom: 0;\n}\n");const sf=class extends ot.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal.apply(null,e)},this.upsertTag=e=>{const{application:t,isNew:n,tag:a,onUpdate:i}=this.props,r=e.ownerOption?e.ownerOption.owner:this.props.owner,s=e.ownerOption?e.ownerOption.type:this.props.entityType,o=this.props.entityRef||class{static buildServerGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroup",entityId:e.name,account:e.account,region:e.region}}static buildServerGroupManagerRef(e){return{cloudProvider:e.cloudProvider,entityType:"servergroupmanager",entityId:e.name,account:e.account,region:e.region}}static buildLoadBalancerRef(e){return{cloudProvider:e.cloudProvider,entityType:"loadbalancer",entityId:e.name,account:e.account,region:e.region}}static buildApplicationRef(e){return{cloudProvider:"*",entityType:"application",entityId:e.name}}static buildRegionalClusterRef(e){return{cloudProvider:e.cloudProvider,entityType:"cluster",entityId:e.name,account:e.account,region:e.region}}static buildSecurityGroupRef(e){return{cloudProvider:e.cloudProvider,entityType:"securitygroup",entityId:e.name,account:e.accountName,region:e.region,vpcId:e.vpcId}}static getBuilder(e){switch(e){case"application":return this.buildApplicationRef;case"serverGroup":return this.buildServerGroupRef;case"serverGroupManager":return this.buildServerGroupManagerRef;case"loadBalancer":return this.buildLoadBalancerRef;case"cluster":return this.buildRegionalClusterRef;case"securityGroup":return this.buildSecurityGroupRef;default:return null}}}.getBuilder(s)(r);o.application||(o.application=t.name),a.value.message=e.message;const l=Kc.modalInstanceEmulation((e=>this.props.closeModal(e)),(e=>this.props.dismissModal(e))),c=new Kc({application:t,modalInstance:l,title:`${n?"Create":"Update"} ${this.props.tag.value.type} for ${o.entityId}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>i()))});c.submit((()=>{const e=rf.upsertEntityTag(t,a,o,n),i=()=>this.setState({isSubmitting:!1});return e.then(i,i),e})),this.setState({taskMonitor:c,isSubmitting:!0})};const{tag:t}=this.props,n=this.props.ownerOptions||[],a=n.find((e=>e.isDefault))||n[0];t.name=t.name||`spinnaker_ui_${t.value.type}:${pr.generateUuid()}`,this.state={taskMonitor:null,initialValues:{message:t.value&&t.value.message||"",ownerOption:a},isSubmitting:!1}}static show(e){return si.show(sf,e)}render(){const{isNew:e,tag:t,ownerOptions:n}=this.props,{initialValues:a,isSubmitting:i}=this.state,r=n||[],s=`${e?" Create":" Update"} ${t.value.type}`;return ot.createElement("div",null,ot.createElement(Gc,{monitor:this.state.taskMonitor}),ot.createElement(zs,{initialValues:a,onSubmit:this.upsertTag,render:({isValid:n,values:a,setFieldValue:o})=>ot.createElement(Vn,{className:"form-horizontal"},ot.createElement(Mc,{dismiss:this.close}),ot.createElement(qt.Header,null,ot.createElement(qt.Title,null,e?"Create":"Update"," ",t.value.type)),ot.createElement(qt.Body,{className:"entity-tag-editor-modal"},ot.createElement("div",{className:""},ot.createElement(Cl,{label:"Message",name:"message",required:!0,input:e=>ot.createElement(Qo,{...e,rows:5,required:!0})}),ot.createElement("div",{className:"small text-right"},"Markdown is okay ",ot.createElement(Zs,{id:"markdown.examples"})),a.message&&ot.createElement("div",{className:"form-group preview"},ot.createElement("div",{className:"col-md-3 sm-label-right"},ot.createElement("strong",null,"Preview")),ot.createElement("div",{className:"col-md-9"},ot.createElement(Br,{message:a.message})))),!!r.length&&ot.createElement(Nl,{name:"ownerOption",label:"Applies To",required:!0,value:a.ownerOption.label,onChange:e=>{const t=r.find((t=>t.label===e.target.value));o("ownerOption",t)},input:e=>ot.createElement(Fo,{...e,stringOptions:r.map((e=>e.label))})})),ot.createElement(qt.Footer,null,ot.createElement("button",{className:"btn btn-default",disabled:i,onClick:this.close,type:"button"},"Cancel"),ot.createElement(Nc,{isDisabled:!n||i,submitting:i,isFormSubmit:!0,label:s})))}))}};let of=sf;of.defaultProps={onUpdate:qi,ownerOptions:[]};oi(".notices-severity-0,\n.notices-severity-1,\n.notices-severity-2 {\n --color-notice: var(--color-accent);\n --color-notice-light: var(--color-accent-g2);\n}\n.alerts-severity-0 {\n --color-notice: var(--color-warning);\n --color-notice-light: var(--color-warning-light);\n}\n.alerts-severity-1 {\n --color-notice: var(--color-alert);\n --color-notice-light: var(--color-alert-light);\n}\n.alerts-severity-2 {\n --color-notice: var(--color-danger);\n --color-notice-light: var(--color-danger-light);\n}\n.notification.fa,\n.notifications-popover.fa {\n color: var(--color-notice);\n}\n.notification .popover-title,\n.notifications-popover .popover-title,\n.notification.inverse .notification.fa,\n.notifications-popover.inverse .notification.fa {\n background-color: var(--color-notice);\n color: var(--color-white);\n}\n.notification.bottom > div.arrow:after,\n.notifications-popover.bottom > div.arrow:after {\n border-bottom-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li {\n color: var(--color-notice);\n}\n.notifications-popover .notification-categories li .notification-category-label {\n color: var(--color-black);\n}\n.notifications-popover .notification-categories li .badge {\n background-color: var(--color-notice);\n}\n.notifications-popover .notification-categories li.selected {\n background-color: var(--color-notice-light);\n}\n.notifications-popover .notification-categories li:hover {\n background-color: var(--color-notice-light);\n}\n.alert-severity-2 .notification-category-label {\n color: var(--color-danger);\n}\n.notification-category-icon {\n -webkit-box-flex: 0;\n -ms-flex: 0 0 1em;\n flex: 0 0 1em;\n text-align: center;\n}\n.entity-notifications {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.entity-notifications .tag-marker {\n display: inline-block;\n margin-left: 5px;\n font-size: 15px;\n}\n.entity-notifications .tag-marker.inverse .fa {\n border-radius: 3px;\n padding: 2px;\n font-size: 90%;\n}\n.ephemeral.fa,\n.ephemeral-popover.fa {\n color: var(--color-mineshaft);\n}\n.ephemeral .popover-title,\n.ephemeral-popover .popover-title {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n");oi("@-webkit-keyframes animate-glow {\n 0% {\n opacity: 0.9;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 0.9;\n }\n}\n@-webkit-keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes spin {\n from {\n -webkit-transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n }\n}\n@keyframes spin {\n from {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n/* Common mixins extracted from Bootstrap */\n@-webkit-keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n@keyframes slideDown {\n 0% {\n height: 0;\n opacity: 0;\n }\n 100% {\n height: 100%;\n opacity: 1;\n }\n}\n.popover.notifications-popover {\n padding: 0;\n min-width: 200px;\n max-width: 500px;\n text-align: left;\n}\n.popover.notifications-popover .popover-title {\n padding: 0.6em 0.8em;\n margin: 0;\n border-bottom: none;\n}\n.popover.notifications-popover .list-group-item {\n padding: 0.333em 1em;\n border-radius: 0;\n background-color: var(--color-alabaster);\n border-left: none;\n border-right: none;\n}\n.popover.notifications-popover .notification-categories {\n margin: 0;\n background-color: var(--color-alabaster);\n border-right: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-categories .notification-category-label {\n padding: 0 1em;\n}\n.popover.notifications-popover .notification-categories .badge {\n border-radius: 3px;\n padding: 3px 6px;\n}\n.popover.notifications-popover .notification-list {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow-y: auto;\n max-height: 15em;\n padding: 1em;\n}\n.popover.notifications-popover .server-group-list {\n margin: 0.75em 0;\n}\n.popover.notifications-popover .entityname {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-flow: row wrap;\n flex-flow: row wrap;\n -webkit-box-pack: justify;\n -ms-flex-pack: justify;\n justify-content: space-between;\n}\n.popover.notifications-popover .entityname .account-region {\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n text-align: end;\n}\n.popover.notifications-popover .entityname span {\n white-space: nowrap;\n}\n.popover.notifications-popover .notification-message {\n min-width: 150px;\n}\n.popover.notifications-popover .notification-message .notification-title {\n font-weight: bold;\n margin-bottom: 0.25em;\n}\n.popover.notifications-popover .notification-message:not(:first-child) {\n padding-top: 10px;\n margin-top: 5px;\n border-top: 1px solid var(--color-alto);\n}\n.popover.notifications-popover .notification-message .notification-tagline > *:not(:first-child) {\n margin-left: 0.5em;\n}\n");const lf={alerts:{title:"Alerts",icon:"fa-exclamation-triangle"},notices:{title:"Notices",icon:"fa-flag"}};class cf extends ot.Component{constructor(e){super(e),this.fireGAEvent=()=>{const e=this.props.gaLabelFn(this.props);Ui.log({action:"SPAN",category:"Alerts hovered",data:{label:e}})},this.PopoverContent=({hidePopover:e})=>{const{type:t,categorized:n,grouped:a}=this.props,{notifications:i}=this.state;return ot.createElement(pf,{type:t,categorized:n,grouped:a,notifications:i,hidePopover:e,handleEditNotification:t=>{e(),this.handleEditNotification(t)},handleDeleteNotification:t=>{e(),this.handleDeleteNotification(t)}})},this.state=this.getState(e)}getState(e){const{tags:t,type:n}=e,a=t.filter((e=>!!e)).reduce(((e,t)=>e.concat(t[n].map((e=>({entityTags:t,entityTag:e}))))),[]),i=a.length,r=f(a.map((e=>e.entityTag.category))).map((e=>nf.getCategory(e))).reduce(((e,t)=>Math.max(e,t.severity)),0);return{notifications:a,count:i,severity:r}}componentWillReceiveProps(e){this.setState(this.getState(e))}handleEditNotification(e){const{entity:t,application:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=W(r,"name","namespace","category");s.value={...r.value};const o={tag:s,isNew:!1,owner:t,entityType:i.entityRef.entityType,application:n,onUpdate:a,ownerOptions:null,entityRef:i.entityRef};of.show(o)}handleDeleteNotification(e){const{application:t,entity:n,onUpdate:a}=this.props,{entityTags:i,entityTag:r}=e,s=r.value.type,o={application:t,title:`Deleting ${s} on ${n.name}`,onTaskComplete:()=>t.entityTags.refresh().then((()=>a()))};op.confirm({header:`Really delete ${s}?`,buttonText:`Delete ${s}`,account:n.account,taskMonitorConfig:o,submitMethod:()=>rf.deleteEntityTag(t,n,i,r.name)})}render(){const{type:e,className:t,placement:n,hOffsetPercent:a}=this.props,{count:i,severity:r}=this.state,{title:s,icon:o}=lf[e];if(i<1)return null;const l=`${e}-severity-${Math.min(Math.max(r,0),2)}`;return ot.createElement("span",{className:`tag-marker small ${t||""}`,onMouseEnter:this.fireGAEvent},ot.createElement(Ks,{delayShow:100,placement:n,hOffsetPercent:a,Component:this.PopoverContent,title:s,className:`no-padding notifications-popover ${l}`},ot.createElement("i",{className:`notification fa ${o} ${l}`})))}}cf.defaultProps={tags:[],categorized:!0,className:"",entity:null,grouped:!1,onUpdate:qi,placement:"bottom",type:"alerts"};const pf=e=>{const{type:t,grouped:n,categorized:a,notifications:i,handleEditNotification:r,handleDeleteNotification:s}=e,{title:o}=lf[t];return a?ot.createElement(af,{notifications:i,onEditTag:r,onDeleteTag:s,grouped:n,title:o}):n?ot.createElement(qh,{notifications:i}):ot.createElement(_h,{notifications:i,onEditTag:r,onDeleteTag:s})};class df extends ot.Component{constructor(){super(...arguments),this.getDataSourceAnalyticsLabel=()=>{const{tabName:e,application:t,tags:n}=this.props,a=n.map((e=>e.alerts.map((e=>e.name)).join(",")));return[e,t.name,a].join(":")}}render(){const{application:e,tags:t}=this.props;return ot.createElement(cf,{tags:t,application:e,type:"alerts",gaLabelFn:this.getDataSourceAnalyticsLabel,grouped:!0,categorized:!0,placement:"right"})}}n("spinnaker.core.entityTag.alerts.datasourcenotifications",[]).component("dataSourceNotifications",yn(Gl(df,"dataSourceNotifications"),["tags","application","tabName"]));const uf=ba({key:"verticalNavExpanded",default:!Ss.isSet("verticalNav")||Ss.isExpanded("verticalNav")}),mf=({app:e,dataSource:t,isActive:n})=>{const a=ya(uf),{alerts:i,badge:r,iconName:s,key:o,label:l}=t,{data:c}=Zo(e.getDataSource(r||o)),p=r?c.length:0;Zo(t);const d=i||[],u=p?"badge-running-count":"badge-none";return ot.createElement(ot.Fragment,null,ot.createElement("span",{className:u},p>0?p:""),ot.createElement("span",{className:"nav-row-item"},s&&(a?ot.createElement(Bn,{className:"nav-icon",name:s||"config",size:"medium",color:n?"primary":"accent"}):ot.createElement(Qs,{value:t.label,placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-icon",name:s,size:"medium",color:n?"primary":"accent"}))))),ot.createElement("span",{className:"nav-row-item nav-name"}," "+t.label),ot.createElement(df,{tags:d,application:e,tabName:l}))},gf=({app:e,dataSource:t})=>{const n=In(t.sref),a=Fn(t.activeState);return ot.createElement("a",{...n,className:"nav-category flex-container-h middle sp-padding-s-yaxis"+(a?" active":"")},ot.createElement(mf,{app:e,dataSource:t,isActive:a}))},hf=({app:e,dataSources:t})=>ot.createElement("div",{className:"nav-section sp-padding-s-yaxis text-semibold"},t.map((t=>ot.createElement(gf,{key:t.label,dataSource:t,app:e}))));class ff{constructor(){this.categories=[],this.orderOverrides=new Map}register(e){this.categories.push(e)}get(e){return p(this.categories.find((t=>t.key===e)))}has(e){return this.categories.some((t=>t.key===e))}getAll(){return this.categories.slice().sort(((e,t)=>this.getOrder(e)-this.getOrder(t)))}overrideCategoryOrder(e,t){this.orderOverrides.set(e,t)}getHighestOrder(){return Math.max(...this.categories.map((e=>e.order)).concat(Array.from(this.orderOverrides.values())))}getOrder(e){const{key:t,order:n}=e;return this.orderOverrides.has(t)?this.orderOverrides.get(t):n}}const vf=new ff;class Af{static listServices(){return vt(Si("/pagerDuty/services").get())}static listOnCalls(){return vt(Si("/pagerDuty/oncalls").get())}}class Ef{static pageApplicationOwnerModal(e){vi.modalService.open({templateUrl:"core/src/pagerDuty/pageApplicationOwner.html",controller:"PageModalCtrl as ctrl",resolve:{application:()=>e}}).result.catch((()=>{}))}static sendPage(e,t,n,a,i){const r={type:"pageApplicationOwner",message:n,details:i};e&&e.length>0&&(r.applications=e.map((e=>e.name))),t&&t.length>0&&(r.keys=t);const s={application:a,job:[r],description:"Send Page"};return ep.executeTask(s)}static pageApplicationOwner(e,t,n){return this.sendPage([e],void 0,t,e,{details:n})}}window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/pagerDuty/pageApplicationOwner.html",'<div modal-page>\n <task-monitor monitor="ctrl.taskMonitor"></task-monitor>\n <modal-close dismiss="$dismiss()"></modal-close>\n <div class="modal-header">\n <h4 class="modal-title">Page {{ctrl.application.name}} Owner</h4>\n </div>\n\n <form role="form" class="container-fluid" novalidate name="pageApplicationOwnerForm">\n <div class="modal-body">\n <div class="row" style="margin-top: 10px; margin-bottom: 10px">\n <div class="col-md-3 sm-label-right">Reason</div>\n <div class="col-md-7">\n <textarea\n class="form-control required"\n ng-model="ctrl.reason"\n rows="3"\n placeholder="Brief description of incident, severity and expected action."\n ></textarea>\n </div>\n </div>\n </div>\n\n <div class="modal-footer">\n <a href class="btn btn-default" ng-click="$dismiss()">Cancel</a>\n <button type="submit" class="btn btn-primary" ng-click="ctrl.submit()" ng-disabled="!ctrl.reason">\n Page Now\n </button>\n </div>\n </form>\n</div>\n')}]);class bf{constructor(){this.servicesLoaded=!1}setCurrentService(){this.servicesLoaded=!1,Af.listServices().subscribe((e=>{this.currentService=e.find((e=>e.integration_key===this.apiKey)),this.servicesLoaded=!0}))}$onInit(){this.setCurrentService()}$onChanges(){this.setCurrentService()}}const yf={bindings:{apiKey:"<"},controller:bf,template:'\n <span>\n <span ng-if="!$ctrl.servicesLoaded">\n <i class="fa fa-asterisk fa-spin fa-fw"></i> Loading...\n </span>\n <span ng-if="$ctrl.servicesLoaded && $ctrl.currentService">\n {{ $ctrl.currentService.name }} ({{ $ctrl.currentService.integration_key }})\n </span>\n <span ng-if="$ctrl.servicesLoaded && !$ctrl.currentService">\n Unable to locate PagerDuty key ({{ $ctrl.apiKey }})\n </span>\n </span>\n '},wf="spinnaker.core.pagerDuty.pagerDutyTag.component";n(wf,[]).component("pagerDutyTag",yf);class xf{constructor(){this.helpContents='<p>Make sure your service exists in Pager Duty and includes the "Generic API"\n integration.</p>\n <h5><b>Setting up a new integration</b></h5>\n <ol>\n <li>Find your service in Pager Duty</li>\n <li>Click "New Integration"</li>\n <li>Select "Use our API directly"</li>\n <li>Make sure to select "Events API v1" (Spinnaker is not compatible with v2)</li>\n </ol>\n <p><b>Note:</b> it can take up to five minutes for the service to appear in Spinnaker</p>',this.required=di.pagerDuty&&di.pagerDuty.required||!1,this.label="PagerDuty"+(this.required?" *":"")}$onInit(){this.scheduler=_s.createScheduler(1e4),this.scheduler.subscribe((()=>this.loadPagerDutyServices())),this.loadPagerDutyServices()}$onDestroy(){this.scheduler.unsubscribe()}loadPagerDutyServices(){Af.listServices().subscribe((e=>{this.pagerDutyServices=e.filter((e=>e.integration_key)),this.servicesLoaded=!0}))}}const Cf={bindings:{component:"="},controller:xf,template:'\n <div class="form-group row">\n <div class="col-sm-3 sm-label-right">{{$ctrl.label}} <help-field content="{{$ctrl.helpContents}}"></help-field></div>\n <div class="col-sm-9">\n <ui-select ng-if="$ctrl.servicesLoaded" ng-model="$ctrl.component.pdApiKey" class="form-control input-sm" ng-required="$ctrl.required">\n <ui-select-match placeholder="Select a PagerDuty Service">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="pagerDuty.integration_key as pagerDuty in $ctrl.pagerDutyServices | filter: $select.search">\n {{pagerDuty.name}}\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n'},kf="spinnaker.core.pagerDuty.pagerDutySelectField.component";n(kf,[]).component("pagerDutySelectField",Cf);oi(".vertical-navigation {\n background-color: var(--color-accent-g2);\n -webkit-box-shadow: 2px 0 3px 1px var(--color-alto);\n box-shadow: 2px 0 3px 1px var(--color-alto);\n min-width: 226px;\n max-width: 300px;\n display: grid;\n height: 100%;\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr auto;\n grid-template-areas: 'nav-header' 'nav-content' 'nav-bottom';\n}\n@media (max-width: 1640px) {\n .vertical-navigation {\n max-width: 226px;\n }\n}\n.vertical-navigation .nav-header {\n grid-area: nav-header;\n color: var(--color-primary);\n margin-bottom: unset;\n}\n.vertical-navigation .nav-header .application-header-icon {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: var(--color-white);\n text-align: center;\n width: 36px;\n height: 36px;\n font-size: 15px;\n cursor: pointer;\n}\n.vertical-navigation .nav-header .app-fresh-icon {\n width: 20px;\n}\n.vertical-navigation .nav-header .header-icon-pulsing {\n -webkit-animation: pulse 4s steps(48) infinite;\n animation: pulse 4s steps(48) infinite;\n}\n.vertical-navigation .nav-header .application-name {\n word-break: break-word;\n}\n.vertical-navigation .nav-content {\n grid-area: nav-content;\n overflow: auto;\n}\n.vertical-navigation .nav-content .nav-section {\n font-size: 16px;\n text-transform: uppercase;\n}\n.vertical-navigation .nav-content .nav-section .nav-category {\n color: var(--color-accent);\n padding-left: 12px;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-running-count {\n min-width: 16px;\n height: 16px;\n margin-right: -12px;\n margin-top: 18px;\n border-radius: 3px;\n color: var(--color-white);\n background-color: var(--color-primary);\n line-height: 16px;\n text-align: center;\n font-size: 12px;\n z-index: 100;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .badge-none {\n min-width: 16px;\n margin-right: -12px;\n margin-top: 18px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item {\n min-width: 16px;\n margin-right: 8px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section .nav-category .nav-row-item .bs-tooltip-right {\n display: none;\n}\n.vertical-navigation .nav-content .nav-section a {\n text-decoration: none;\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category {\n background: #bbdee8;\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-icon {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .active.nav-category .nav-name {\n color: var(--color-primary);\n}\n.vertical-navigation .nav-content .nav-section .page-category {\n color: var(--color-accent);\n padding-left: 16px;\n margin-top: -4px;\n}\n.vertical-navigation .nav-content .nav-section .page-category .nav-row-item {\n min-width: 16px;\n line-height: 10px;\n padding: 0;\n font-size: 16px;\n}\n.vertical-navigation .nav-content .nav-section:not(:first-of-type) {\n border-top: 1px solid var(--color-white);\n}\n.vertical-navigation .nav-bottom {\n max-height: 100px;\n grid-area: nav-bottom;\n overflow: auto;\n}\n.vertical-nav-collapsed {\n min-width: 60px;\n max-width: 60px;\n}\n.vertical-nav-collapsed .nav-header {\n margin-left: 12px;\n margin-right: 12px;\n}\n.vertical-nav-collapsed .application-name {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .nav-name,\n.vertical-nav-collapsed .nav-section .page-category .nav-name,\n.vertical-nav-collapsed .nav-section .nav-category .HoverablePopover,\n.vertical-nav-collapsed .nav-section .page-category .HoverablePopover {\n display: none;\n}\n.vertical-nav-collapsed .nav-section .nav-category .tooltip,\n.vertical-nav-collapsed .nav-section .page-category .tooltip {\n color: red;\n}\n");const Bf=({app:e})=>{const t=Go(e.attributes.dataSources);Tn();const n=ll(),a=ya(uf),i=e=>{const t=e.filter((e=>!1!==e.visible&&!e.disabled&&e.sref)),n=vf.getAll(),a=n.map((e=>t.filter((t=>t.category===e.key)))),i=t.filter((e=>!e.category||!V(n,(t=>t.key==e.category))));return a.push(i),a},r=i(e.dataSources),[s,o]=ot.useState(r),l=e.onRefresh(null,(()=>{if(!E(e.attributes.dataSources,t)){const t=i(e.dataSources);o(t)}}));ot.useEffect((()=>l()),[]);return!a&&n?null:ot.createElement("div",{className:wn(["vertical-navigation","layer-high",{"vertical-nav-collapsed":!a}])},ot.createElement("h3",{className:"heading-2 horizontal middle nav-header sp-margin-m-xaxis sp-margin-l-top"},ot.createElement(Gh,{app:e}),ot.createElement("span",{className:"application-name text-semibold heading-2 sp-margin-m-left"},e.name)),ot.createElement("div",{className:"nav-content"},s.filter((e=>e.length)).map(((t,n)=>ot.createElement(hf,{key:`section-${n}`,dataSources:t,app:e}))),di.feature.pagerDuty&&e.attributes.pdApiKey&&ot.createElement("div",{className:"nav-section sp-padding-s-yaxis"},ot.createElement("div",{className:"page-category flex-container-h middle text-semibold sp-padding-s-yaxis clickable",onClick:()=>{Ef.pageApplicationOwnerModal(e)}},ot.createElement("div",{className:"nav-row-item sp-margin-s-right"},a?ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"}):ot.createElement(Qs,{value:"Page App Owner",placement:"right"},ot.createElement("div",null,ot.createElement(Bn,{className:"nav-item-icon",name:"spMenuPager",size:"medium",color:"danger"})))),ot.createElement("span",{className:"nav-name"}," Page App Owner")))),ot.createElement("div",{className:"nav-bottom"},ot.createElement(Wh,{app:e})))};oi(".application {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-flex: 1;\n -ms-flex: 1 1 auto;\n flex: 1 1 auto;\n overflow-y: hidden;\n}\n.glyphicon-cloud {\n top: 4px;\n}\n.application-actions {\n margin-bottom: 10px;\n padding-top: 5px;\n display: inline-block;\n float: right !important;\n}\n.filter-tags {\n padding: 5px 15px 0;\n}\n.filter-tags .filter-tag {\n border-radius: 2px;\n display: inline-block;\n padding: 3px 5px;\n margin-right: 10px;\n margin-bottom: 5px;\n background-color: var(--color-cirrus);\n font-size: 90%;\n}\n.filter-tags .filter-tag strong {\n font-weight: 600;\n text-transform: uppercase;\n}\n.filter-tags .filter-tag a {\n font-size: 90%;\n color: var(--color-dovegray);\n}\n.filter-tags .filter-toggle {\n background-color: var(--color-accent);\n border-radius: 2px;\n color: var(--color-white);\n cursor: pointer;\n display: inline-block;\n font-size: 90%;\n font-weight: 600;\n margin-bottom: 5px;\n margin-right: 10px;\n padding: 3px 5px;\n text-transform: uppercase;\n}\n.filter-tags .clear-filters {\n display: inline-block;\n margin-left: 5px;\n color: var(--color-mineshaft);\n font-size: 90%;\n}\n.select2-highlighted .icon {\n color: inherit;\n}\n.glyphicon-none:before {\n content: '\\e113';\n color: transparent !important;\n}\ninput[type='checkbox'],\ninput[type='radio'] {\n cursor: pointer;\n}\n.table-search-results-application .table-header .col-application,\n.table-search-results-application .table-row .col-application {\n width: 200px;\n}\n.table-search-results-application .table-header .col-account,\n.table-search-results-application .table-row .col-account,\n.table-search-results-application .table-header .col-accounts,\n.table-search-results-application .table-row .col-accounts {\n width: 250px;\n}\n.table-search-results-application .table-header .col-email,\n.table-search-results-application .table-row .col-email {\n width: 250px;\n}\n");class Sf extends ot.Component{constructor(e){super(e),this.apolloClient=Qh(),this.mountApplication(e.app)}componentWillUnmount(){this.unmountApplication(this.props.app)}componentWillReceiveProps(e){this.unmountApplication(this.props.app),this.mountApplication(e.app)}mountApplication(e){var t;e.notFound||e.hasError?Ag.removeLastItem("applications"):(Zc.application=e,(null==(t=e.attributes)?void 0:t.disableAutoRefresh)||(this.unsubscribeAppRefresh=this.props.app.subscribeToRefresh(this.apolloClient.onRefresh),e.enableAutoRefresh()))}unmountApplication(e){var t;e.notFound||e.hasError||(Zc.application=void 0,null==(t=this.unsubscribeAppRefresh)||t.call(this),this.unsubscribeAppRefresh=void 0,e.disableAutoRefresh())}render(){const{app:e}=this.props;return ot.createElement("div",{className:"application"},!e.notFound&&!e.hasError&&ot.createElement(Bf,{app:e}),e.notFound&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Application Not Found"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"Please check your URL - we can't find any data for ",ot.createElement("em",null,e.name),".")),e.hasError&&ot.createElement("div",null,ot.createElement("h2",{className:"text-center"},"Something went wrong"),ot.createElement("p",{className:"text-center",style:{marginBottom:"20px"}},"There was a problem loading ",ot.createElement("em",null,e.name),". Try checking your browser console for errors.")),ot.createElement(as,{app:e},ot.createElement(va,{client:this.apolloClient.client},ot.createElement("div",{className:"container scrollable-columns"},ot.createElement(Qn,{className:"secondary-panel",name:"insight"})))))}}class Mf{static createApplicationForTests(e,...t){return new Fh(e,_s.createScheduler(),t)}static createStandaloneApplication(e){const t=new Fh(e,_s.createScheduler(),[]);return t.isStandalone=!0,t}static createNotFoundApplication(e){const t=new Fh(e,_s.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.notFound=!0,t}static createApplicationWithError(e){const t=new Fh(e,_s.createScheduler(),[{key:"serverGroups",lazy:!0,defaultData:[]}]);return t.hasError=!0,t}}const Nf=({app:e})=>{const[t,n]=ot.useState(hi.insightFilterStateModel.filtersExpanded),{filtersHidden:a}=hi.insightFilterStateModel,i=t?"filters-expanded":"filters-collapsed",r=ya(uf)?"nav-expanded":"nav-collapsed",{state:s}=Tn(),o=Boolean(Object.keys(s.views).find((e=>-1!==e.indexOf("detail@")))),l=o?"details-open":"details-closed";return e.notFound||e.hasError?null:ot.createElement("div",{className:`insight ${i} ${r} ${l}`},!a&&ot.createElement("div",{onClick:()=>{hi.insightFilterStateModel.pinFilters(!t),n(!t)}},ot.createElement(rd,null)),!a&&t&&ot.createElement("div",null,ot.createElement(Qn,{name:"nav",className:"nav ng-scope"})),ot.createElement("div",{className:"flex-1"},ot.createElement(Qn,{name:"master",className:"nav-content ng-scope","data-scroll-id":"nav-content"}),o&&ot.createElement("div",null,ot.createElement(Qn,{name:"detail",className:"detail-content"}))))};class Df{constructor(e){this.stateConfigProvider=e,this.childStates=[],this.detailStates=[],this.insightStates=[],this.insightState={name:"insight",abstract:!0,views:{insight:{component:Nf,$type:"react"}},resolve:{app:["app",e=>e]},children:this.insightStates},this.childStates.push(this.insightState)}addChildState(e){this.childStates.push(e),this.stateConfigProvider.setStates()}addInsightState(e){this.insightStates.push(e),e.children=this.detailStates,this.stateConfigProvider.setStates()}addInsightDetailState(e){this.detailStates.push(e),this.insightState.children.forEach((t=>{t.children=t.children||[],t.children.some((t=>t.name===e.name))||t.children.push(e)})),this.stateConfigProvider.setStates()}addParentState(e,t,n=""){const a={name:"application",url:`${n}/:application`,redirectTo:e=>e.injector().getAsync("app").then((t=>{var n;const a=null==(n=t.dataSources.find((e=>e.sref&&!e.disabled)))?void 0:n.sref,i=e.params(),r={relative:a?e.to().name:void 0};return e.router.stateService.target(a||"home.search",i,r)})),resolve:{app:["$stateParams",e=>Hg.getApplication(e.application,!1).then((t=>($g.checkIfInferredAndWarn(t),t||Mf.createNotFoundApplication(e.application)))).catch((t=>t.status&&404===t.status?Mf.createNotFoundApplication(e.application):(console.error(t),Mf.createApplicationWithError(e.application))))]},data:{pageTitleMain:{field:"application"},history:{type:"applications",state:"home.applications.application",keyParams:["application"]}},children:this.childStates,views:{}};a.views[t]={component:Sf,$type:"react"},e.children.push(a),this.stateConfigProvider.setStates()}$get(){return this}}Df.$inject=["stateConfigProvider"];const If="spinnaker.core.application.state.provider";n(If,[Tg]).provider("applicationState",Df);class Ff extends ot.Component{render(){const{isValid:e,isDirty:t,isSaving:n,saveError:a,onRevertClicked:i,onSaveClicked:r}=this.props;if(!t)return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-12 text-right"},ot.createElement("span",{className:"btn btn-link disabled"},ot.createElement("span",{className:"far fa-check-circle"})," In sync with server")));const s=ot.createElement("button",{className:"btn btn-primary "+(e?"":"disabled"),onClick:r},ot.createElement("span",null,ot.createElement("span",{className:"far fa-check-circle"})," Save Changes")),o=ot.createElement("button",{className:"btn btn-primary",disabled:!0},ot.createElement("span",{className:"pulsing"},ot.createElement(Es,{size:"nano"})," Savingβ¦"));return ot.createElement("div",{className:"row footer"},ot.createElement("div",{className:"col-md-3"},ot.createElement("button",{className:"btn btn-default",onClick:i,style:{visibility:"visible"}},ot.createElement("span",{className:"glyphicon glyphicon-flash"})," Revert")),ot.createElement("div",{className:"col-md-9 text-right"},n?o:s,!!a&&ot.createElement("div",{className:"error-message"},"There was an error saving your changes. Please try again.")))}}class Tf{static createApplication(e){const t=this.buildJobs(e,"createApplication",p);return ep.executeTask({job:t,application:e,description:"Create Application: "+e.name})}static updateApplication(e){const t=this.buildJobs(e,"updateApplication",p);return ep.executeTask({job:t,application:e,description:"Update Application: "+e.name})}static deleteApplication(e){const t=this.buildJobs(e,"deleteApplication",(e=>({name:e.name})));return ep.executeTask({job:t,application:e,description:"Deleting Application: "+e.name}).then((t=>(Ag.removeByAppName(e.name),t))).catch((e=>e))}static buildJobs(e,t,n){const a=[],i=n(e);return e.cloudProviders&&(i.cloudProviders=e.cloudProviders.join(",")),delete i.accounts,a.push({type:t,application:i}),a}}class Qf{revert(){r(this.viewState.originalConfig,this.config),this.viewState.isDirty=!1}saveSuccess(){this.viewState.originalConfig=p(this.config),this.viewState.originalStringVal=s(this.config),this.viewState.isDirty=!1,this.viewState.saving=!1,this.application.attributes[this.configField]=this.config}saveError(){this.viewState.saving=!1,this.viewState.saveError=!0}save(){this.viewState.saving=!0,this.viewState.saveError=!1;const e={name:this.application.name,accounts:this.application.attributes.accounts};e[this.configField]=this.config,Tf.updateApplication(e).then((()=>this.saveSuccess()),(()=>this.saveError()))}}const Pf={bindings:{application:"=",config:"=",viewState:"=",configField:"@",revert:"&?",afterSave:"&?",saveDisabled:"<"},controller:Qf,templateUrl:"core/src/application/config/footer/configSectionFooter.component.html"},Rf="spinnaker.core.application.config.section.footer.component";n(Rf,[]).component("configSectionFooter",Pf),window.angular.module("ng").run(["$templateCache",function(e){e.put("core/src/application/config/footer/configSectionFooter.component.html",'<div class="row footer">\n <div class="col-md-3">\n <button\n class="btn btn-default"\n ng-click="$ctrl.revert()"\n ng-if="$ctrl.viewState.isDirty"\n style="visibility: visible"\n >\n <span class="glyphicon glyphicon-flash"></span> Revert\n </button>\n </div>\n <div class="col-md-9 text-right">\n <button\n class="btn btn-primary"\n ng-if="$ctrl.viewState.isDirty"\n ng-click="$ctrl.save()"\n ng-disabled="$ctrl.saveDisabled"\n >\n <span ng-if="!$ctrl.viewState.saving"> <span class="far fa-check-circle"></span> Save Changes </span>\n <span ng-if="$ctrl.viewState.saving" class="pulsing">\n <span class="fa fa-cog fa-spin"></span> Saving…\n </span>\n </button>\n <div class="error-message" ng-if="$ctrl.viewState.saveError">\n There was an error saving your changes. Please try again.\n </div>\n <span ng-if="!$ctrl.viewState.isDirty" class="btn btn-link disabled"\n ><span class="far fa-check-circle"></span> In sync with server</span\n >\n </div>\n</div>\n')}]);const Uf=()=>!0;class zf{static getMonikers(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.moniker))));return ce(T(n))}static getRegions(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.region))));return f(ce(T(n))).sort()}static getStacks(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.stack))));return f(ce(T(n))).sort()}static getClusters(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.cluster))));return f(ce(T(n))).sort()}static getAsgs(e,t=Uf){const n=e.map((e=>e.getDataSource("serverGroups").data.filter(t).map((e=>e.name))));return f(ce(T(n))).sort()}static getZones(e,t=Uf,n=Uf,a=Uf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).filter(a).map((e=>e.instances)))),r=T(T(i)).map((e=>e.availabilityZone));return f(ce(r)).sort()}static getInstances(e,t=Uf,n=Uf,a=Uf){const i=e.map((e=>e.getDataSource("serverGroups").data.filter(t).filter(n).map((e=>e.instances))));return f(ce(T(T(i)).filter(a)))}static clusterFilterForCredentials(e){return t=>!e||t.account===e}static monikerClusterNameFilter(e){return t=>t.moniker.cluster===e}static clusterFilterForCredentialsAndRegion(e,t){return n=>{const a=!e||n.account===e,i=n&&Array.isArray(t)&&t.length?t.includes(n.region):!t||n.region===t;return a&&i}}}class Gf{static registerValidator(e,t){this.providerMap.has(e)||this.providerMap.set(e,[]),this.providerMap.get(e).push(t)}static setValidators(e,t){this.providerMap.set(e,t)}static validate(e,t){return Di.listProviders().then((n=>{const a=t&&t.length?t:n,i=[],r=[];return a.forEach((t=>{this.providerMap.has(t)&&this.providerMap.get(t).forEach((n=>{const a=n.validate(e);a.warnings.forEach((e=>r.push({cloudProvider:t,message:e}))),a.errors.forEach((e=>i.push({cloudProvider:t,message:e})))}))})),{errors:i,warnings:r}}))}}Gf.providerMap=new Map;const jf="infrastructure",Lf="delivery";vf.register({key:Lf,label:"Delivery",icon:"fa fa-fw fa-xs fa-tasks",primary:!0,order:100}),vf.register({key:jf,label:"Infrastructure",icon:"fa fa-fw fa-xs fa-cloud",primary:!0,order:200});oi(".user-menu .dropdown-toggle {\n background-color: var(--color-primary);\n border: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: var(--color-white);\n font-weight: 200;\n padding: var(--padd);\n}\n.user-menu .dropdown-menu {\n top: 80%;\n min-width: 125px;\n border: 0;\n}\n@media (max-width: 480px) {\n .user-menu .dropdown-menu {\n position: static;\n }\n}\n");const Of=()=>{const e=ri.getAuthenticatedUser(),t=e.authenticated;return di.authEnabled?st.createElement("div",{className:"user-menu"},st.createElement(tn,{id:"user-menu-dropdown"},st.createElement(tn.Toggle,null,st.createElement("i",{className:"hidden-lg glyphicon glyphicon-user"}),st.createElement("span",{className:"hidden-xs hidden-sm hidden-md"},e.name)),t&&st.createElement(tn.Menu,null,st.createElement("li",{className:"sp-padding-xs",onClick:()=>Ai.logOut()},"Log Out")))):null},Yf={};var $f=Object.defineProperty,Hf=Object.getOwnPropertyDescriptor;let Vf=class extends ot.Component{render(){return ot.createElement(ta,null,ot.createElement(Jf,{app:this.props.app}))}};Vf=((e,t,n,a)=>{for(var i,r=a>1?void 0:a?Hf(t,n):t,s=e.length-1;s>=0;s--)(i=e[s])&&(r=(a?i(t,n,r):i(r))||r);return a&&r&&$f(t,n,r),r})([bs("core.insight.banners")],Vf);const Jf=({app:e})=>{const{state:t}=Tn(),n=(di.banners||[]).filter((e=>{const n=e.routes.some((e=>t.name.includes(e)));return e.active&&n&&Boolean(Yf[e.key])})).map((t=>{const n=Yf[t.key];return ot.createElement(n,{key:`banner-${t.key}`,app:e})}));return n.length?ot.createElement("div",{className:"sp-margin-sm vertical"},n):null};class Wf{static listCertificates(){return Si("/certificates").get()}static listCertificatesByProvider(e){return Si("/certificates").path(e).get()}}class Kf extends ot.Component{constructor(e){super(e),this.PopoverContent=()=>{const{ttl:e}=this.state,t=!!e&&Date.now()>e,n=sr(e);return ot.createElement("div",null,"This server group ",t?"was scheduled to be":"will be"," automatically destroyed"," ",ot.createElement("strong",null,n),".")},this.state=this.getState(e)}getState(e){const t=e.entity&&e.entity.entityTags;if(t){const e=t.tags.filter((e=>"spinnaker:ttl"===e.name))[0];if(e)return{ttl:e.value.expiry}}return{}}componentWillReceiveProps(e){this.setState(this.getState(e))}render(){const{ttl:e}=this.state;return e?ot.createElement("span",{className:"tag-marker small"},ot.createElement(Ks,{Component:this.PopoverContent,title:"Ephemeral Server Group",className:"ephemeral-popover"},ot.createElement("i",{className:"ephemeral fa fa-clock"}))):null}}class qf extends ot.Component{constructor(){super(...arguments),this.getAlertAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,r,a.alerts.map((e=>e.name)).join(",")].join(":")},this.getNoticeAnalyticsLabel=()=>{const{entity:e,pageLocation:t,entityType:n}=this.props,a=e.entityTags,{account:i,region:r,entityId:s}=a.entityRef;return[t,n,i,r,s,a.notices.map((e=>e.name)).join(",")].join(":")}}render(){const{entity:e,application:t,placement:n,hOffsetPercent:a,className:i,onUpdate:r}=this.props,s=e&&e.entityTags,o=s?[s]:[];return ot.createElement("div",{className:"entity-notifications"},ot.createElement(cf,{entity:e,tags:o,application:t,type:"alerts",gaLabelFn:this.getAlertAnalyticsLabel,grouped:!1,categorized:!0,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(cf,{entity:e,tags:o,application:t,type:"notices",gaLabelFn:this.getNoticeAnalyticsLabel,grouped:!1,categorized:!1,className:i,placement:n,hOffsetPercent:a,onUpdate:r}),ot.createElement(Kf,{entity:e}))}}qf.defaultProps={placement:"bottom",hOffsetPercent:"50%",className:"",onUpdate:qi};class Xf{static pauseResourceManagement(e){return Si("/managed/resources").path(e,"pause").post()}static resumeResourceManagement(e){return Si("/managed/resources").path(e,"pause").delete()}}var Zf,_f;(_f=Zf||(Zf={})).ACTUATING="ACTUATING",_f.CREATED="CREATED",_f.DIFF="DIFF",_f.DIFF_NOT_ACTIONABLE="DIFF_NOT_ACTIONABLE",_f.CURRENTLY_UNRESOLVABLE="CURRENTLY_UNRESOLVABLE",_f.MISSING_DEPENDENCY="MISSING_DEPENDENCY",_f.ERROR="ERROR",_f.HAPPY="HAPPY",_f.PAUSED="PAUSED",_f.RESUMED="RESUMED",_f.UNHAPPY="UNHAPPY",_f.UNKNOWN="UNKNOWN",_f.WAITING="WAITING",_f.DELETING="DELETING";const ev=()=>ot.createElement("p",null,ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,"Pausing management will not interrupt the action Spinnaker is currently performing to resolve the difference from desired state."))),tv=({isPaused:e,isActuating:t,regions:n})=>e?ot.createElement(ot.Fragment,null,ot.createElement("p",null,"Spinnaker will resume taking action to correct differences from the desired state."),ot.createElement(nv,{isPaused:!0,regions:n})):ot.createElement(ot.Fragment,null,ot.createElement("p",null,"While a resource is paused, Spinnaker will not take action to correct differences from the desired state."),t&&ot.createElement(ev,null),ot.createElement(nv,{isPaused:!0,regions:n})),nv=({isPaused:e,regions:t})=>t.length<2?null:ot.createElement("div",{className:"horizontal top sp-padding-m alert alert-warning"},ot.createElement("i",{className:"fa fa-exclamation-triangle sp-margin-m-right sp-margin-xs-top"}),ot.createElement("span",null,e?"Resuming":"Pausing"," management of this resource will affect the following regions:"," ",ot.createElement("b",null,t.join(", ")),"."));oi(".ManagedResourceStatusIndicator .HoverablePopover {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n}\n.ManagedResourceStatusIndicator .info {\n background-color: var(--color-status-info);\n}\n.ManagedResourceStatusIndicator .warning {\n background-color: var(--color-status-warning);\n}\n.ManagedResourceStatusIndicator .error {\n background-color: var(--color-status-error);\n}\n.ManagedResourceStatusIndicator .square {\n padding: 0 8px;\n font-size: 20px;\n}\n.ManagedResourceStatusIndicator .circle {\n padding: 4px;\n font-size: 14px;\n border-radius: 50%;\n}\n");const av=(e,t)=>{const{managedResourceSummary:n,isManaged:a}=e;if(!a||!n||n.isPaused)return Ze.when(!0);return op.confirm({header:"Pause Management?",bodyContent:ot.createElement(sv,{resourceSummary:n}),account:n.locations.account,buttonText:"Pause management",submitMethod:()=>Xf.pauseResourceManagement(n.id).then((()=>t.managedResources.refresh(!0)))}).then((()=>!0),(()=>!1))},iv=(e,t,n)=>{null==n||n();const{id:a,isPaused:i}=e;return op.confirm({header:`Really ${i?"resume":"pause"} resource management?`,bodyContent:ot.createElement(tv,{isActuating:e.status===Zf.ACTUATING,isPaused:i,regions:rv(e)}),account:e.locations.account,buttonText:(i?"Resume":"Pause")+" management",submitMethod:()=>(i?Xf.resumeResourceManagement(a):Xf.pauseResourceManagement(a)).then((()=>t.managedResources.refresh(!0)))})},rv=e=>e.locations.regions.map((e=>e.name)).sort(),sv=({resourceSummary:e})=>{const{status:t}=e;return ot.createElement(ot.Fragment,null,ot.createElement("p",null,"π ",ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If you need to temporarily stop Spinnaker from managing this resource β for example, if something is wrong and manual intervention is required β you can pause management and resume it later."),t===Zf.ACTUATING&&ot.createElement(ev,null),ot.createElement(nv,{isPaused:!0,regions:rv(e)}))},ov=({app:e,formik:t})=>{const[n,a]=ot.useState(!1),i=t.values,r=ot.useCallback((()=>{const{resourceSummary:n,backingData:i}=t.values;n&&iv(n,e).then((()=>{var n,r;i.managedResources=null==(r=null==(n=e.getDataSource("managedResources"))?void 0:n.data)?void 0:r.resources,a(!0),t.setFieldValue("resourceSummary",null)}),(()=>{}))}),[e,t]);return i.resourceSummary||n?n?ot.createElement("div",{className:"alert alert-info"},ot.createElement("div",{className:"horizontal top"},ot.createElement("div",null,ot.createElement("i",{className:"fa fa-check-circle"})),ot.createElement("div",{className:"sp-margin-m-left"},"Resource management has been paused."))):ot.createElement("div",{className:"alert alert-danger"},ot.createElement("p",null,ot.createElement("b",null,"π Spinnaker is managing this resource.")),ot.createElement("p",null,"Any changes you make to this cluster will be overridden in favor of the desired state."),ot.createElement("p",null,"If you need to manually deploy a new version of this server group, you should pause management."),ot.createElement("div",{className:"sp-margin-m-top"},ot.createElement("button",{className:"passive",onClick:r},ot.createElement("i",{className:"fa fa-pause"})," Pause management"))):null},lv=({resource:e,application:t,onClick:n,children:a})=>{if(!e)return null;const i=e.isManaged&&(!e.managedResourceSummary||e.managedResourceSummary.isPaused),r=t.isManagementPaused,s=e.isManaged&&!i&&!r;return ot.createElement(an,{onClick:()=>(s?av(e,t):Ze.when(!0)).then((e=>{e&&(null==n||n())}))},a)};class cv{constructor(e){this.handlers={};for(const t of e)this.registerHandler(t)}normalizeKind(e){return e.split("@")[0]}getHandler(e){return this.handlers[e]||this.handlers[this.normalizeKind(e)]}isSupported(e){return Boolean(this.getHandler(e))}registerHandler(e){this.handlers[e.kind]=e,this.handlers[this.normalizeKind(e.kind)]=e}}const pv=new class extends cv{getIcon(e){var t,n;return null!=(n=null==(t=this.getHandler(e))?void 0:t.iconName)?n:"placeholder"}getExperimentalDisplayLink(e){var t,n;return null==(n=null==(t=this.getHandler(e.kind))?void 0:t.experimentalDisplayLink)?void 0:n.call(t,e)}getSpinnakerType(e){var t;const n=this.normalizeKind(e);return(null==(t=n.split("/"))?void 0:t[1])||n}getNativeResourceRoutingInfo({kind:e,account:t,stack:n,detail:a,displayName:i}){const r={acct:t,stack:n,detail:a,q:i};switch(this.getSpinnakerType(e)){case"cluster":return{state:"home.applications.application.insight.clusters",params:r};case"security-group":return{state:"home.applications.application.insight.firewalls",params:r};case"classic-load-balancer":case"application-load-balancer":return{state:"home.applications.application.insight.loadBalancers",params:r}}}}([{kind:"titus/cluster",iconName:"cluster"},{kind:"ec2/cluster",iconName:"cluster"},{kind:"ec2/security-group",iconName:"securityGroup"},{kind:"ec2/classic-load-balancer",iconName:"loadBalancer"},{kind:"ec2/application-load-balancer",iconName:"loadBalancer"}]),dv=/^(.*)\[(.*)\]$/i,uv=e=>pv.getSpinnakerType(e),mv=e=>{switch(e){case"classic":return"classic-load-balancer";case"application":return"application-load-balancer";default:return null}};class gv{static decorateResources(e){return e.applicationPaused&&e.resources.forEach((e=>e.status=Zf.PAUSED)),e.resources.forEach((e=>e.isPaused=e.status===Zf.PAUSED)),e}static getApplicationSummary(e){return Si("/managed/application").path(e).query({entities:"resources"}).get().then(this.decorateResources)}static getResourceHistory(e){return Si("/history").path(e).query({limit:100}).get().then((e=>(e.forEach((e=>{var t;e.delta&&(e.delta=(t=e.delta)?Object.keys(t).reduce(((e,n)=>{const a=t[n],i=`["${we(n.split("/").filter(Boolean),(e=>{if(e.startsWith("{")&&e.endsWith("}"))return e.substring(1,e.length-1);const t=e.match(dv);return t?[t[1],t[2]]:e})).join('"]["fields"]["')}"]`,r=m(e,i);return g(e,i,{...r,key:n,diffType:a.state,actual:a.current,desired:a.desired}),e}),{}):{})})),e)))}}const hv=(e,t)=>e&&t&&e.app===t.app&&e.stack===t.stack&&e.detail===t.detail,fv=(e,t)=>e.managedResources.data.resources.filter((({kind:e})=>t.includes(uv(e)))),vv=e=>{if(!di.feature.managedResources)return;const t=fv(e,["cluster"]);e.serverGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>hv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.serverGroups.dataUpdated()},Av=e=>{if(!di.feature.managedResources)return;const t=fv(e,["classic-load-balancer","application-load-balancer"]);e.loadBalancers.data.forEach((e=>{const n=t.find((({kind:t,moniker:n,locations:{account:a,regions:i}})=>e.loadBalancerType&&uv(t)===mv(e.loadBalancerType)&&hv(n,e.moniker)&&a===e.account&&i.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.loadBalancers.dataUpdated()},Ev=e=>{if(!di.feature.managedResources)return;const t=fv(e,["security-group"]);e.securityGroups.data.forEach((e=>{const n=t.find((({moniker:t,locations:{account:n,regions:a}})=>hv(t,e.moniker)&&n===e.account&&a.some((({name:t})=>t===e.region))));e.isManaged=!!n,e.managedResourceSummary=n})),e.securityGroups.dataUpdated()};const{memo:bv}=ot,yv=(e,t,n)=>(Object.keys(e).sort(((e,t)=>e.localeCompare(t))).forEach((a=>{const{key:i,diffType:r,actual:s,desired:o,fields:l}=e[a];n.push({key:i,name:a,depth:t,actual:s,desired:o,type:r,isLeafNode:!l}),l&&yv(l,t+1,n)})),n),wv=bv((({diff:e})=>{const t=(e=>yv(e,0,[]))(e);return ot.createElement(rc,{layout:uc,columns:["configuration","change","actual","desired"]},t.map((({key:e,name:t,depth:n,isLeafNode:a,type:i,actual:r,desired:s})=>ot.createElement(cc,{key:e},ot.createElement(dc,{indent:n},ot.createElement(bc,null,t)),ot.createElement(dc,null,a&&ot.createElement(bc,{className:"text-italic"},i.toLowerCase())),ot.createElement(dc,null,ot.createElement(Ec,null,r)),ot.createElement(dc,null,ot.createElement(Ec,null,s))))))})),xv={delayShow:400,delayHide:100},Cv={size:"medium",fullWidth:!0},kv={root:"https://www.spinnaker.io/guides/user/managed-delivery",pinning:"https://www.spinnaker.io/guides/user/managed-delivery/pinning/",gettingStarted:"https://www.spinnaker.io/guides/user/managed-delivery/getting-started/",markAsBad:"https://www.spinnaker.io/guides/user/managed-delivery/marking-as-bad/",resourceStatus:"https://www.spinnaker.io/guides/user/managed-delivery/resource-status/"},Bv=e=>{var t,n;return(null==(n=null==(t=di.managedDelivery)?void 0:t.urls)?void 0:n[e])||kv[e]},Sv=di.feature.displayTimestampsInUserLocalTime?void 0:di.defaultTimeZone,Mv=({startedAt:e,completedAt:t})=>{const[,n]=ot.useState(!1);sl((()=>{t||n((e=>!e))}),t?0:1e3);const a=En.fromISO(e),i=t?En.fromISO(t):En.utc();return ot.createElement(ot.Fragment,null,ir(a,i))},Nv=(e,t)=>{const n=Dv(e),a=t?" ago":"";if(n.years||n.months){let t=En.local();return Sv&&(t=t.setZone(Sv)),e.year===t.year?e.toFormat("MMM d"):e.toFormat("MMM d, y")}return n.days?n.toFormat("d")+"d"+a:n.hours?n.toFormat("h")+"h"+a:n.minutes?n.toFormat("m")+"m"+a:n.seconds?n.toFormat("s")+"s"+a:null},Dv=e=>e.diffNow().negate().shiftTo("years","months","days","hours","minutes","seconds"),Iv=mt((({timestamp:e,clickToCopy:t,delayShow:n,removeStyles:a,withSuffix:i=!1})=>{const r=(e=>"number"==typeof e?En.fromMillis(e):"string"==typeof e?En.fromISO(e):e)(e),s=Sv?r.setZone(Sv):r,[o,l]=dt(Nv(s,i)),c=()=>{l(Nv(s,i))};if(sl(c,1e3),lt(c,[s]),!o)return null;const p=s.toFormat("yyyy-MM-dd HH:mm:ss ZZZZ"),d=ot.createElement("span",{className:a?void 0:"text-regular text-italic",style:a?void 0:{fontSize:13,lineHeight:1}},o);return t?ot.createElement(zi,{buttonInnerNode:d,text:p,toolTip:`${p} (click to copy)`}):ot.createElement(Qs,{value:p,delayShow:n},d)})),Fv={WARNING:"event-warning",ERROR:"event-error",SUCCESS:"event-success"},Tv=({level:e,diff:t,tasks:n,dismissModal:a,message:i})=>ot.createElement("div",{className:"flex-container-v left"},i&&ot.createElement("div",{className:wn("sp-padding-xs-yaxis",Fv[e])},i),n&&ot.createElement("div",{className:"flex-container-v"},n.map((({id:e,name:t})=>ot.createElement(Dn,{key:e,to:"home.applications.application.tasks.taskDetails",params:{taskId:e}},ot.createElement("a",{className:"sp-padding-xs-yaxis",onClick:()=>null==a?void 0:a()},t))))),t&&ot.createElement(wv,{diff:t})),Qv=ot.memo((({event:e,dismissModal:t})=>{const{timestamp:n,delta:a,tasks:i,message:r,reason:s,exceptionMessage:o,level:l}=e,c=ot.useMemo((()=>En.fromISO(n)),[n]),p=a||i||r||s||o;return ot.createElement(cc,{renderExpandedContent:p?()=>ot.createElement(Tv,{level:e.level,diff:a,tasks:i,message:r||s||o,dismissModal:t}):void 0},ot.createElement(dc,null,ot.createElement("span",{className:wn(Fv[l]||"event-info","event-level")},e.level)),ot.createElement(dc,null,ot.createElement("span",{className:"event-type"},e.displayName)),ot.createElement(dc,null,ot.createElement("div",{className:"flex-container-h middle wrap"},ot.createElement(Iv,{timestamp:c,clickToCopy:!0}))))}),Ca);oi(".ManagedResourceHistoryModal {\n width: 100%;\n}\n.ManagedResourceHistoryModal .event-type {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-level {\n font-size: 12px;\n line-height: 1;\n}\n.ManagedResourceHistoryModal .event-type-icon {\n font-size: 18px;\n}\n.ManagedResourceHistoryModal .event-time {\n white-space: nowrap;\n}\n.ManagedResourceHistoryModal .event-info {\n color: var(--color-charcoal);\n}\n.ManagedResourceHistoryModal .event-success {\n color: var(--color-success);\n}\n.ManagedResourceHistoryModal .event-warning {\n color: var(--color-alert);\n}\n.ManagedResourceHistoryModal .event-error {\n color: var(--color-danger);\n}\n.ManagedResourceHistoryModal .loading-error-message {\n color: var(--color-danger);\n}\n");const Pv=e=>ql(Uv,e),Rv=vc([{unit:"px",size:70},8,1.5]),Uv=({id:e,displayName:t,dismissModal:n})=>{const{status:a,result:i,refresh:r}=cl((()=>gv.getResourceHistory(e)),null,1e4,[]),s=!i&&["NONE","PENDING"].includes(a),o=!s&&"REJECTED"!==a;return ot.createElement(ot.Fragment,null,ot.createElement(Jl,null,"Resource history - ",t),ot.createElement(Wl,null,ot.createElement("div",{className:wn("ManagedResourceHistoryModal",{"flex-container-h middle center flex-grow":!o})},s&&ot.createElement(Es,{size:"medium"}),"REJECTED"===a&&ot.createElement("div",{className:"flex-container-v middle center"},ot.createElement("div",{className:"loading-error-message text-semibold sp-margin-m-bottom"},"Something went wrong."),ot.createElement("button",{className:"btn btn-default",onClick:r},ot.createElement("i",{className:"fa fa-xs fa-sync-alt sp-margin-xs-right"})," Try again")),o&&ot.createElement("div",{className:"sp-margin-xl-bottom"},ot.createElement(rc,{layout:Rv,columns:["Level","Event","Time"],expandable:null==i?void 0:i.some((({delta:e,tasks:t,message:n,reason:a,exceptionMessage:i})=>e||t||n||a||i))},(i||[]).map((e=>ot.createElement(Qv,{key:e.type+e.timestamp,event:e,dismissModal:n}))))))))};oi(".ManagedResourceDetailsIndicator {\n background-color: var(--color-mineshaft);\n color: var(--color-white);\n}\n\n.ManagedResourceDetailsIndicator .md-logo {\n background-color: var(--color-black);\n padding: 18px;\n}\n\n.ManagedResourceDetailsIndicator .summary-message {\n font-size: 12px;\n font-weight: 300;\n}\n\n.ManagedResourceDetailsIndicator .resource-actions > .dropdown-toggle {\n color: var(--color-white);\n background-color: transparent;\n padding: 3px 10px;\n}\n");const zv=(e,t)=>Ui.log({category:"Managed Resource Menu",action:`${e} clicked`,data:{label:t}}),Gv=({resourceSummary:e,application:t})=>{if(!e)return null;const{id:n,isPaused:a}=e,i=ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement("a",{target:"_blank",onClick:()=>zv("Learn More",n),href:Bv("root")},"Learn More"))),r=`\n <p>Resource management is currently disabled for the entire application.\n <a\n href=${hi.$state.href("home.applications.application.config",{section:"managed-resources"})}\n >\n Resume application management\n </a>\n</p>`;return ot.createElement("div",{className:"flex-container-h middle ManagedResourceDetailsIndicator"},ot.createElement(Ks,{template:i,placement:"left"},ot.createElement("div",{className:"md-logo flex-container-h middle"},ot.createElement("img",{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20viewBox%3D%220%200%2014.37557%2015.52748%22%3E%20%20%3Cdefs%3E%20%20%20%20%3Cstyle%3E%20%20%20%20%20%20.a%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23de4d53%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.b%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23eeac3c%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.c%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2396c25e%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.d%20%7B%20%20%20%20%20%20%20%20fill%3A%20%2349a9df%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.e%20%7B%20%20%20%20%20%20%20%20fill%3A%20%238f429b%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.f%20%7B%20%20%20%20%20%20%20%20opacity%3A%200.25%3B%20%20%20%20%20%20%20%20fill%3A%20url%28%23a%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.g%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23b%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.h%20%7B%20%20%20%20%20%20%20%20fill%3A%20url%28%23c%29%3B%20%20%20%20%20%20%7D%20%20%20%20%20%20.i%20%7B%20%20%20%20%20%20%20%20fill%3A%20%23fff%3B%20%20%20%20%20%20%7D%20%20%20%20%3C%2Fstyle%3E%20%20%20%20%3ClinearGradient%20id%3D%22a%22%20x1%3D%225.51119%22%20y1%3D%229.27236%22%20x2%3D%225.9233%22%20y2%3D%229.32662%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.26839%22%20stop-color%3D%22%23441b19%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.73261%22%20stop-color%3D%22%23441b19%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22b%22%20x1%3D%225.00789%22%20y1%3D%227.58774%22%20x2%3D%227.13963%22%20y2%3D%226.85373%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.21861%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%221%22%20stop-color%3D%22%234b0726%22%20stop-opacity%3D%220.6%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%20%20%3ClinearGradient%20id%3D%22c%22%20x1%3D%224.24719%22%20y1%3D%2215.7319%22%20x2%3D%226.15272%22%20y2%3D%220.21263%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.35048%22%20stop-color%3D%22%23ff0%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.40939%22%20stop-color%3D%22%23ffff1c%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.53687%22%20stop-color%3D%22%23ffff64%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.72174%22%20stop-color%3D%22%23ffffd5%22%2F%3E%20%20%20%20%20%20%3Cstop%20offset%3D%220.7878%22%20stop-color%3D%22%23fff%22%2F%3E%20%20%20%20%3C%2FlinearGradient%3E%20%20%3C%2Fdefs%3E%20%20%3Cpath%20class%3D%22a%22%20d%3D%22M5.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H6.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.91827%2C6.45482%2C7.198%2C4.30693Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22b%22%20d%3D%22M6.58716%2C1.48546%2C4.7%2C15.16747a.5.5%2C0%2C0%2C0%2C.43.56H5.2a.50007.50007%2C0%2C0%2C0%2C.5-.44L7.3075%2C3.63335Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22c%22%20d%3D%22M3.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C5.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C3.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22d%22%20d%3D%22M2.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C4.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C2.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22e%22%20d%3D%22M1.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C3.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C1.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22f%22%20d%3D%22M6.6712%2C3.77776%2C6.397%2C2.95122l-1.68982%2C12.242a.49324.49324%2C0%2C0%2C0%2C.21478.43933.51145.51145%2C0%2C0%2C0%2C.16754-.31134Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpolygon%20class%3D%22g%22%20points%3D%225.692%202.719%205.02%207.591%206.46%2011.721%207.11%207.005%205.692%202.719%22%2F%3E%20%20%3Cpath%20class%3D%22h%22%20d%3D%22M4.20043%2C15.72258a.557.557%2C0%2C0%2C1-.06885-.00488.49923.49923%2C0%2C0%2C1-.42676-.56348l2-14.50049A.49241.49241%2C0%2C0%2C1%2C6.2683.227a.4995.4995%2C0%2C0%2C1%2C.42676.56348l-2%2C14.50049A.49982.49982%2C0%2C0%2C1%2C4.20043%2C15.72258Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%20%20%3Cpath%20class%3D%22i%22%20d%3D%22M13.07062.66277A.55391.55391%2C0%2C0%2C0%2C12.59216.2a.5261.5261%2C0%2C0%2C0-.53333.4549l-2.513%2C8.61346L6.68512.6278a.48865.48865%2C0%2C0%2C1%2C.00995.16266L6.37059%2C2.86276%2C9.101%2C11.10332a.49483.49483%2C0%2C0%2C0%2C.4834.34277.50023.50023%2C0%2C0%2C0%2C.47119-.35937l2.34375-8.00879%2C1.68115%2C12.18652a.49939.49939%2C0%2C0%2C0%2C.49463.43164.47593.47593%2C0%2C0%2C0%2C.06885-.00488.4995.4995%2C0%2C0%2C0%2C.42676-.56348Z%22%20transform%3D%22translate%28-0.7%20-0.2%29%22%2F%3E%3C%2Fsvg%3E",width:"36px"}))),ot.createElement("div",{className:"flex-container-v middle flex-1 sp-margin-l-left"},ot.createElement("span",{className:"summary-message sp-margin-s-bottom"},"Managed by Spinnaker"),ot.createElement(tn,{className:"resource-actions sp-margin-xs-bottom flex-pull-left",id:"server-group-managed-resource-dropdown",pullRight:!0},ot.createElement(tn.Toggle,{className:"btn btn-sm btn-default dropdown-toggle"},"Resource Actions"),ot.createElement(tn.Menu,{className:"dropdown-menu"},!t.isManagementPaused&&ot.createElement(an,{onClick:()=>iv(e,t)},a?"Resume ":"Pause "," Management"),t.isManagementPaused&&ot.createElement(an,{disabled:!0,onClick:e=>{const t=e.target,n=null==t?void 0:t.getAttribute("href");n&&(window.location.href=n)}},"Resume Management ",ot.createElement(Zs,{content:r})),ot.createElement("li",null,ot.createElement("a",{onClick:()=>{Pv(e),zv("History",n)}},"History")),ot.createElement("li",null,ot.createElement("a",{target:"_blank",onClick:()=>zv("Raw Source",n),href:`${di.gateUrl}/managed/resources/${n}`},"Raw Source"))))))},jv="spinnaker.core.managed.resourceDetailsIndicator.component";n(jv,[]).component("managedResourceDetailsIndicator",yn(Gl(Gv,"managedResourceDetailsIndicator"),["resourceSummary","application"]));const Lv=({resourceSummary:e})=>ot.createElement("a",{target:"_blank",onClick:()=>((e,t,n)=>Ui.log({category:"Managed Resource Status Indicator",action:`${e} clicked`,data:{label:`${t},${n}`}}))("Status docs link",e.id,e.status),href:`${Bv("resourceStatus")}#${e.status.toLowerCase().replace("_","-")}`},"Learn more"),Ov={DELETING:{appearance:"warning",iconName:"mdActuating",popoverContents:()=>ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is deleting this temporary managed resource"))},ACTUATING:{appearance:"info",iconName:"mdActuating",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is taking action to resolve a difference from this resource's desired state.")),ot.createElement("p",null,"You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},CREATED:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker has started managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Lv,{resourceSummary:e})))},DIFF:{appearance:"info",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state.")),ot.createElement("p",null,"In a moment, Spinnaker will take action to bring this resource back to its desired state. You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},DIFF_NOT_ACTIONABLE:{appearance:"warning",iconName:"mdDiff",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but can't take action to resolve it.")),ot.createElement("p",null,"Spinnaker doesn't have a way of resolving this kind of difference. Manual action might be required. You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},CURRENTLY_UNRESOLVABLE:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a temporary issue to pass.")),ot.createElement("p",null,"Something required for management is temporarily experiencing issues. Spinnaker can't take action right now, but should be able to soon. You can click History to see more."," ",ot.createElement(Lv,{resourceSummary:e})))},MISSING_DEPENDENCY:{appearance:"warning",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for a missing dependency to become available.")),ot.createElement("p",null,"Something required for management isn't ready yet. Spinnaker can't take action right now, but will resume once the missing dependencies exist. You can click History to see more."," ",ot.createElement(Lv,{resourceSummary:e})))},ERROR:{appearance:"error",iconName:"mdError",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Something went wrong.")),ot.createElement("p",null,"Something went wrong while trying to check this resource's current state. Spinnaker can't take action right now, and manual intervention might be required. You can click History to see more."," ",ot.createElement(Lv,{resourceSummary:e})))},HAPPY:{appearance:"info",iconName:"md",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker is managing this resource.")),ot.createElement("p",null,"If a difference from the desired state is detected, Spinnaker will act to correct it."," ",ot.createElement(Lv,{resourceSummary:e})))},PAUSED:{appearance:"warning",iconName:"mdPaused",popoverContents:(e,t)=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management is paused.")),t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management for the entire application is temporarily paused. ",ot.createElement(Lv,{resourceSummary:e})),!t.isManagementPaused&&ot.createElement("p",null,"Spinnaker is configured to manage this resource, but management has been temporarily paused."," ",ot.createElement(Lv,{resourceSummary:e})))},RESUMED:{appearance:"info",iconName:"mdResumed",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Management was just resumed.")),ot.createElement("p",null,"Management was resumed after being temporarily paused. If Spinnaker detects that a difference from the desired state occurred while paused, it will act to correct it. ",ot.createElement(Lv,{resourceSummary:e})))},UNHAPPY:{appearance:"error",iconName:"mdUnhappy",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Spinnaker detected a difference from the desired state, but hasn't been able to correct it.")),ot.createElement("p",null,"Spinnaker has been trying to correct a difference, but taking action hasn't helped. Manual intervention might be required. You can click History to see more. ",ot.createElement(Lv,{resourceSummary:e})))},UNKNOWN:{appearance:"warning",iconName:"mdUnknown",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Unable to determine resource status.")),ot.createElement("p",null,"Spinnaker is configured to manage this resource, but can't calculate its current status."," ",ot.createElement(Lv,{resourceSummary:e})))},WAITING:{appearance:"info",iconName:"mdCreated",popoverContents:e=>ot.createElement(ot.Fragment,null,ot.createElement("p",null,ot.createElement("b",null,"Waiting for information.")),ot.createElement("p",null,"This resource is part of a brand new environment. Spinnaker is waiting for an artifact to become available to deploy. It normally takes less than 5 minutes for a newly created artifact to be seen, and after that all constraints need to pass in order for it to start deploying. You can click History to see a more detailed message. ",ot.createElement(Lv,{resourceSummary:e})))}},Yv=({resourceSummary:e,application:t,hidePopover:n})=>{const a=ot.createElement("button",{className:"passive flex-none",onClick:()=>{null==n||n(),Pv(e)}},ot.createElement("i",{className:"fa fa-history"})," History");return ot.createElement("div",{className:"horizontal right"},ot.createElement("p",{className:"flex-container-h middle sp-margin-m-top sp-margin-xs-bottom sp-group-margin-s-xaxis"},a,!e.isPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>iv(e,t,n)},ot.createElement("i",{className:"fa fa-pause"})," Pause management of this resource"),e.isPaused&&!t.isManagementPaused&&ot.createElement("button",{className:"passive flex-none",onClick:()=>iv(e,t,n)},ot.createElement("i",{className:"fa fa-play"})," Resume management of this resource"),t.isManagementPaused&&ot.createElement(Dn,{to:"home.applications.application.config",params:{section:"managed-resources"}},ot.createElement("a",null,"Resume application management"))))},$v=({application:e,children:t,placement:n,resourceSummary:a})=>{const{status:i}=a;return ot.createElement(Ks,{Component:({hidePopover:t})=>ot.createElement(ot.Fragment,null,Ov[i].popoverContents(a,e),ot.createElement(Yv,{resourceSummary:a,application:e,hidePopover:t})),delayHide:200,delayShow:200,placement:n},t)},Hv=({shape:e,resourceSummary:t,application:n})=>{const{status:a}=t;return ot.createElement("div",{className:"flex-container-h stretch ManagedResourceStatusIndicator"},ot.createElement($v,{application:n,placement:"left",resourceSummary:t},ot.createElement("div",{className:wn("flex-container-h middle",e,Ov[a].appearance)},ot.createElement(Bn,{appearance:"light",name:Ov[a].iconName,size:"small"}))))},Vv="spinnaker.core.managed.dataSource";n(Vv,[]).run(["$q",e=>{if(!di.feature.managedResources)return;Yg.registerDataSource({key:"managedResources",visible:!1,loader:e=>gv.getApplicationSummary(e.name),onLoad:(t,n)=>(t.isManagementPaused=n.applicationPaused,e.when(n)),afterLoad:e=>{e.serverGroups.ready().then((()=>vv(e)),qi),e.loadBalancers.ready().then((()=>Av(e)),qi),e.securityGroups.ready().then((()=>Ev(e)),qi)},defaultData:{applicationPaused:!1,hasManagedResources:!1,resources:[]}}),Yg.registerDataSource({key:"environments",sref:".environments",category:Lf,optional:!0,optIn:!0,label:"Environments",icon:"fa fa-fw fa-xs fa-code-branch",iconName:"spEnvironments",description:"Artifacts and environments managed by Spinnaker",defaultData:{applicationPaused:!1,hasManagedResources:!1,environments:[],artifacts:[],resources:[]}})}]);const Jv=e=>e.current?{width:e.current.offsetWidth,height:e.current.offsetHeight}:{width:0,height:0},Wv=(e,t)=>{const n=Po();return ot.useCallback((a=>{Ui.log({...a,category:`MD__${e}`,action:(null==a?void 0:a.action)||t||"",data:{label:null==a?void 0:a.label,application:null==n?void 0:n.name,...null==a?void 0:a.data}})}),[null==n?void 0:n.name,e,t])},Kv=["listView","gridView"],qv=localStorage.getItem("MD_environmentsDirection"),Xv=ba({key:"environmentsDisplay",default:(Zv=qv,Boolean(Zv&&Kv.includes(Zv))?qv:"gridView")});var Zv;const _v=()=>{const[e,t]=wa(Xv);return ot.useEffect((()=>{localStorage.setItem("MD_environmentsDirection",e)}),[e]),{direction:e,setDirection:t}},eA=()=>{const{direction:e,setDirection:t}=_v(),n=Wv("environmentsDirection");return ot.useEffect((()=>{n({action:e})}),[e]),ot.createElement("button",{type:"button",className:"btn env-direction-btn",onClick:()=>t((e=>"listView"===e?"gridView":"listView"))},"listView"===e?"Grid view":"List view",ot.createElement("i",{className:wn("listView"===e?"fas fa-columns":"far fa-list-alt","sp-margin-xs-left")}))},tA=(e,t)=>{const{direction:n}=_v(),{width:a}=((e,{delay:t=100,isActive:n=!0})=>{const[a,i]=ot.useState(Jv(e));return ot.useLayoutEffect((()=>{const a=xe((()=>{i(Jv(e))}),t,{leading:!0});if(n&&e.current){const t=new ResizeObserver(a);return t.observe(e.current),()=>t.disconnect()}return()=>{}}),[t,n,e.current]),a})(e,{isActive:"gridView"===n}),i=Math.min(Math.round(a/500),t.length);return{environments:"gridView"===n?Ce(t):t,style:"gridView"===n?{gridTemplateColumns:`repeat(${i}, 1fr)`}:{},className:"gridView"===n?"grid-view":void 0}},nA=ot.forwardRef((({className:e,style:t,children:n},a)=>ot.createElement("div",{ref:a,className:wn(e,"environments-list"),style:t},n)));oi(".HorizontalTabs {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid var(--color-alto);\n margin-bottom: var(--xl-spacing);\n}\n.HorizontalTabs .tab {\n background: none;\n border: none;\n padding: 0;\n min-width: 150px;\n max-width: 33%;\n padding: var(--xs-spacing) var(--m-spacing);\n font-weight: 600;\n letter-spacing: 0.2px;\n border-bottom: 3px solid transparent;\n color: var(--color-concrete);\n text-align: center;\n}\n@media (max-width: 768px) {\n .HorizontalTabs .tab {\n min-width: 80px;\n }\n}\n.HorizontalTabs .tab:focus:active {\n text-decoration: none;\n}\n.HorizontalTabs .tab:hover {\n text-decoration: none;\n color: var(--color-dovegray);\n border-bottom: 3px solid var(--color-accent-g2);\n}\n.HorizontalTabs .tab.selected-tab {\n border-bottom: 3px solid var(--color-accent);\n color: var(--color-black);\n}\n.HorizontalTabs .right-element {\n margin-left: auto;\n -ms-flex-item-align: center;\n align-self: center;\n}\n");const aA=({tabs:e,className:t,onClick:n,rightElement:a})=>ot.createElement("div",{className:wn(t,"HorizontalTabs")},e.map((e=>ot.createElement(iA,{key:e.path,data:e,onClick:n}))),a&&ot.createElement("div",{className:"right-element"},a)),iA=({data:e,onClick:t})=>{const n=Pn(e.path,{},"selected-tab");return ot.createElement("a",{href:n.href,className:wn("tab",n.className),onClick:a=>{n.onClick(a),null==t||t(e)}},e.title)},rA="MD_debug",sA="1",oA=()=>localStorage.getItem(rA)===sA,lA=e=>{e?localStorage.setItem(rA,sA):localStorage.removeItem(rA)};oi(".Environments {\n width: 100%;\n padding: 0 var(--l-spacing);\n --base-horizontal-padding: 20px;\n}\n@media (max-width: 768px) {\n .Environments {\n padding: 0;\n --base-horizontal-padding: var(--m-spacing);\n }\n}\n.Environments a,\n.Environments .btn-link {\n color: var(--color-text-link-g1);\n}\n.Environments a:focus,\n.Environments .btn-link:focus,\n.Environments a:active,\n.Environments .btn-link:active {\n outline: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.Environments a:focus:active,\n.Environments .btn-link:focus:active {\n outline: none;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.Environments .env-direction-btn {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n line-height: 1;\n padding: var(--xs-spacing);\n background-color: transparent;\n color: var(--color-dovegray);\n}\n.Environments .env-direction-btn > i {\n margin-top: 1px;\n font-size: 16px;\n}\n.Environments .env-direction-btn:focus,\n.Environments .env-direction-btn:active:focus {\n outline: none;\n}\n@media (max-width: 768px) {\n .Environments .env-direction-btn {\n display: none;\n }\n}\n.Environments .environments-list {\n width: 100%;\n display: grid;\n gap: var(--m-spacing);\n -webkit-box-align: start;\n -ms-flex-align: start;\n align-items: flex-start;\n --row-element-icon-width: 32px;\n}\n.Environments .environments-list.grid-view {\n gap: var(--xl-spacing) var(--m-spacing);\n --row-element-icon-width: 26px;\n}\n.ui-switcher {\n background-color: var(--color-white);\n padding: var(--xs-spacing) var(--s-spacing);\n position: absolute;\n border-radius: 4px;\n border: 1px solid var(--color-alto);\n bottom: 4px;\n right: 30px;\n}\n@media (max-width: 768px) {\n .ui-switcher {\n right: 8px;\n }\n}\n");oi(".Environments .environment-row-element,\n.ActionModal .environment-row-element {\n display: grid;\n grid-template-columns: [icon] var(--row-element-icon-width) [details] 1fr;\n position: relative;\n}\n.Environments .environment-row-element.with-padding,\n.ActionModal .environment-row-element.with-padding {\n padding: var(--l-spacing) var(--base-horizontal-padding) var(--s-spacing) var(--base-horizontal-padding);\n}\n@media (max-width: 768px) {\n .Environments .environment-row-element,\n .ActionModal .environment-row-element {\n grid-template-columns: [icon] 30px [details] 1fr;\n }\n}\n.Environments .environment-row-element .no-items-message,\n.ActionModal .environment-row-element .no-items-message {\n grid-column: 1 / 3;\n}\n.Environments .environment-row-element .row-details,\n.ActionModal .environment-row-element .row-details {\n grid-column: details;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n min-width: 0;\n}\n.Environments .environment-row-element .row-icon,\n.ActionModal .environment-row-element .row-icon {\n grid-column: icon;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-item-align: start;\n align-self: flex-start;\n padding-top: var(--2xs-spacing);\n}\n.Environments .environment-row-element .row-icon.small,\n.ActionModal .environment-row-element .row-icon.small {\n padding-top: var(--3xs-spacing);\n}\n.Environments .environment-row-element .row-title,\n.ActionModal .environment-row-element .row-title {\n font-size: 18px;\n font-weight: 600;\n line-height: 1.3;\n color: var(--color-charcoal);\n display: grid;\n grid-template-columns: 1fr auto;\n}\n.Environments .environment-row-element .row-title.small,\n.ActionModal .environment-row-element .row-title.small {\n font-size: 14px;\n}\n.Environments .environment-row-element .row-title > a,\n.ActionModal .environment-row-element .row-title > a {\n color: inherit;\n}\n.Environments .md-icon-success,\n.ActionModal .md-icon-success {\n color: var(--color-status-success);\n}\n.Environments .md-icon-pending,\n.ActionModal .md-icon-pending {\n color: var(--color-titanium);\n}\n.Environments .md-icon-fail,\n.ActionModal .md-icon-fail {\n color: var(--color-status-error);\n}\n.Environments .delimited-element:not(:last-child),\n.ActionModal .delimited-element:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-element:not(:first-child)::before,\n.ActionModal .delimited-element:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:last-child),\n.ActionModal .delimited-elements > *:not(:last-child) {\n margin-right: 6px;\n}\n.Environments .delimited-elements > *:not(:first-child)::before,\n.ActionModal .delimited-elements > *:not(:first-child)::before {\n content: 'β’';\n margin-right: 6px;\n}\n.Environments .truncate,\n.ActionModal .truncate {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.Environments button.md-btn,\n.ActionModal button.md-btn {\n background-color: transparent;\n -webkit-box-shadow: 1px 2px 2px 0px rgba(0, 0, 0, 0.06), 0px 1px 3px 0px rgba(0, 0, 0, 0.03);\n box-shadow: 1px 2px 2px 0px rgba(0, 0, 0, 0.06), 0px 1px 3px 0px rgba(0, 0, 0, 0.03);\n}\n.Environments button.md-btn:hover,\n.ActionModal button.md-btn:hover {\n background-color: var(--color-cirrus);\n}\n.Environments button.md-btn:active,\n.ActionModal button.md-btn:active,\n.Environments button.md-btn:focus,\n.ActionModal button.md-btn:focus {\n outline: none;\n}\n.Environments button.md-btn-accent,\n.ActionModal button.md-btn-accent,\n.Environments button.md-btn-accent:hover,\n.ActionModal button.md-btn-accent:hover {\n color: var(--color-accent);\n border-color: var(--color-accent);\n}\n.Environments button.md-btn-success,\n.ActionModal button.md-btn-success,\n.Environments button.md-btn-success:hover,\n.ActionModal button.md-btn-success:hover {\n color: var(--color-validation-success);\n border-color: var(--color-validation-success);\n}\n.Environments button.md-btn-danger,\n.ActionModal button.md-btn-danger,\n.Environments button.md-btn-danger:hover,\n.ActionModal button.md-btn-danger:hover {\n color: var(--color-danger);\n border: 1px solid var(--color-danger);\n}\n.Environments .md-action-button,\n.ActionModal .md-action-button {\n padding: 0 var(--xs-spacing);\n text-transform: uppercase;\n color: inherit;\n font-size: 12px;\n font-weight: 500;\n padding: 2px var(--s-spacing);\n color: var(--color-primary-g1);\n letter-spacing: 0.2px;\n}\n.Environments .md-action-button:hover,\n.ActionModal .md-action-button:hover {\n background-color: var(--color-alabaster);\n}\n.Environments .no-underline,\n.ActionModal .no-underline {\n text-decoration: none;\n}\n.Environments .md-actions-gap,\n.ActionModal .md-actions-gap {\n gap: var(--s-spacing);\n}\n.Environments .in-progress-dot,\n.ActionModal .in-progress-dot {\n height: 8px;\n width: 8px;\n border-radius: 999px;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-animation: deployingAnimation 2s infinite;\n animation: deployingAnimation 2s infinite;\n}\n@-webkit-keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@keyframes deployingAnimation {\n 0% {\n background-color: var(--color-status-success);\n }\n 50% {\n background-color: var(--color-status-success-light);\n }\n 100% {\n background-color: var(--color-status-success);\n }\n}\n@-webkit-keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n@keyframes deletingAnimation {\n 0% {\n background-color: var(--color-danger);\n }\n 50% {\n background-color: var(--color-danger-medium);\n }\n 100% {\n background-color: var(--color-danger);\n }\n}\n");const cA=Object.entries({overview:"Overview",history:"History",config:"Configuration"}).map((([e,t])=>({title:t,path:`.${e}`}))),pA=()=>{var e;const t=Wv("EnvironmentsTab"),{state:n,params:a}=Tn();return ot.useEffect((()=>{"enabled"===a.md_debug?lA(!0):"disabled"===a.md_debug&&lA(!1)}),[a]),ot.createElement("div",{className:"vertical Environments"},ot.createElement(aA,{tabs:cA,rightElement:(null==(e=n.name)?void 0:e.endsWith(".config"))?void 0:ot.createElement(eA,null),onClick:({title:e,path:n})=>{t({action:`Open_${e}`,data:{path:n}})}}),ot.createElement(Qn,null),ot.createElement("div",{style:{minHeight:32,minWidth:32}}))},dA=()=>{const e=Bv("gettingStarted");return ot.createElement("div",{style:{width:"100%"}},"Welcome! This application does not have any environments or artifacts. Check out the"," ",ot.createElement("a",{href:e,target:"_blank"},"getting started guide")," ","to set some up!")},uA=({hasApplicationData:e,error:t})=>{const n=Wv("Error","AppQuery");return ot.useEffect((()=>{t&&e&&n({level:"ERROR",error:t})}),[t,n,e]),e?ot.createElement("div",{style:{width:"100%"}},"Failed to load application data, please refresh and try again.",ot.createElement("p",null,t.message)):ot.createElement(dA,null)},mA={},gA=Aa`
|
|
2
2
|
fragment actionDetails on MdAction {
|
|
3
3
|
id
|
|
4
4
|
actionId
|