@xxmachina/components 19.2.1 → 19.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"xxmachina-components-pages-query.mjs","sources":["../tmp-esm2022/pages/query/query.page.js","../tmp-esm2022/pages/query/xxmachina-components-pages-query.js"],"sourcesContent":["var QueryPageStore_1;\nimport { __decorate, __metadata } from \"tslib\";\nimport { Component, inject, computed, viewChild, Directive, Injectable, signal, input, ChangeDetectionStrategy, effect, untracked, ElementRef } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { IndexTemplate, IndexTemplateStore } from '@ng-atomic/components/templates/_index';\nimport { _computed, applyToInput, computeFake, createAction, Effect, InjectableComponent, NgAtomicComponent, provideEffect, TokenizedType, updateInput } from '@ng-atomic/core';\nimport { EditingStateManager } from '@ng-atomic/common';\nimport { AppService } from '@xxmachina/components/services/app';\nimport { buildColumns, injectIndexFormBuilder } from '@ng-atomic/components/organisms/table';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { getRawValue$, getValue$, injectHasNext, injectNavigationExtras, injectRouteData, injectRouteSkip, injectUnflattenRouteParam } from '@ng-atomic/common/utils';\nimport { ActivatedRoute } from '@angular/router';\nimport { RouterOutletFrame, RouterOutletFrameStore } from '@ng-atomic/components/frames/router-outlet';\nimport { CommandService } from '@xxmachina/components/services/command';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { Query, QueryHelper } from '@xxmachina/common/domain/models';\nimport { injectOne } from '@ng-atomic/common/stores/entities';\nimport { injectNavStartActionsV2, makeDI } from '@ng-atomic/common/services/ui';\nimport { makeInitializerConfig } from '@ng-atomic/common/services/initializer';\nimport { NgAtomicFormSectionBuilder } from '@ng-atomic/components/templates/form';\nimport { QueryFeature } from '@xxmachina/components/features/query';\nimport { QueryService } from '@xxmachina/components/services/query';\nimport { QueryFormGroup } from '@xxmachina/components/groups/query-form';\nimport { flatten } from 'flat';\nimport { derivedAsync } from 'ngxtension/derived-async';\nimport { isEqual, merge, omitBy } from 'lodash-es';\nimport { ValueCellAtomStore } from '@ng-atomic/components/atoms/value-cell';\nimport { QueryGraphqlVariablesFormFeature } from '@xxmachina/components/features/query';\nimport { MachinaDevService } from '@xxmachina/components/services/debug';\nimport { TableOrganism } from '@ng-atomic/components/organisms/table';\nimport * as i0 from \"@angular/core\";\nexport var ActionId;\n(function (ActionId) {\n ActionId[\"NAVIGATE_TO_IFRAME\"] = \"NAVIGATE TO IFRAME\";\n ActionId[\"TOGGLE_PAGE\"] = \"\\u5168\\u4F53\\u8868\\u793A\";\n ActionId[\"TOGGLE_VARIABLES_FORM\"] = \"\\u5909\\u6570\\u30D5\\u30A9\\u30FC\\u30E0\\u306E\\u8868\\u793A\\u5207\\u66FF\";\n ActionId[\"ADD\"] = \"\\u8FFD\\u52A0\";\n ActionId[\"DETAIL\"] = \"\\u8A73\\u7D30\";\n})(ActionId || (ActionId = {}));\nexport function buildItemsMap(itemsResult = {}, itemsLengthResult = {}) {\n return Object.entries(itemsResult).reduce((acc, [key, items]) => ({\n ...acc,\n [key]: {\n items,\n itemsLength: itemsLengthResult[key] ?? items.length,\n }\n }), {});\n}\nexport function buildItemsMapFromResult(result = {}) {\n console.debug('[DEBUG] result:', result);\n const data = omitBy(result, (_, key) => key.startsWith('_'));\n if (Array.isArray(data)) {\n return buildItemsMap({ default: data });\n }\n else if (data && typeof data === 'object' && 'items' in data) {\n const itemsMap = buildItemsMap({ default: data.items }, { default: data?.itemsLength });\n return itemsMap;\n }\n else {\n const itemsResult = {};\n const itemsLengthResult = {};\n Object.entries(data).forEach(([key, value]) => {\n if (key.endsWith('Length')) {\n itemsLengthResult[key.replace('Length', '')] = value;\n }\n else {\n itemsResult[key] = value;\n }\n });\n return buildItemsMap(itemsResult, itemsLengthResult);\n }\n}\nexport class QueryActionReducer {\n constructor() {\n this.action = signal(null);\n this.action$ = toObservable(this.action);\n }\n dispatch(action) {\n this.action.set(action);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryActionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryActionReducer, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryActionReducer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nlet QueryPageStore = class QueryPageStore extends InjectableComponent {\n static { QueryPageStore_1 = this; }\n static { this.ActionId = ActionId; }\n static { this.DI = makeDI(QueryPageStore_1, () => {\n return () => ({\n type: 'table',\n style: {\n width: 'var(--page-width-lv2)',\n },\n title: null,\n titleEditable: true,\n childrenKey: 'children',\n additionalNavEndActions: [],\n navEndActions: [],\n additionalColumns: (items) => [],\n itemActions: (item => [{ id: QueryPageStore_1.ActionId.DETAIL, icon: 'open_in_new', name: '詳細', payload: item }]),\n pageSizeOptions: [50, 100, 300, 500, 1000],\n });\n }, ['@xxmachina/components', 'pages', 'query']); }\n /** @deprecated use `QueryPageStore.DI.provideInitializer` instead */\n static { this.Initializer = makeInitializerConfig(QueryPageStore_1); }\n static provideDefault() {\n return [\n QueryPageStore_1.DI.provideConfig(),\n QueryPageStore_1.provideDefaultInitializes(),\n QueryPageStore_1.provideDefaultEffects(),\n QueryPageStore_1.provideDebugStyleInitializer(),\n QueryFeature.provideDefault(),\n ];\n }\n static provideCustom() {\n return [\n QueryPageStore_1.DI.provideConfig(),\n QueryPageStore_1.provideDefaultInitializes(),\n QueryPageStore_1.provideDefaultEffects(),\n QueryPageStore_1.provideDebugStyleInitializer(),\n QueryPageStore_1.provideNonEditableConfig(),\n QueryPageStore_1.provideQueryFromRouteDataQueryIdInitializer(),\n QueryPageStore_1.provideAutoTogglePageInitializer(),\n QueryFeature.provideDefault(),\n ];\n }\n static provideDefaultV2() {\n return [\n QueryPageStore_1.provideCustom(),\n QueryPageStore_1.DI.Config.provide(() => config => ({ ...config })),\n QueryPageStore_1.provideTitleFromQueryResultInitializer(),\n QueryPageStore_1.provideQueryFromRouteDataInitializer(),\n QueryPageStore_1.providePaginationInitializer(),\n ];\n }\n /** @deprecated use `provideCustom` instead */\n static provideForCustomPage() {\n return this.provideCustom();\n }\n static provideNonEditableConfig() {\n return QueryPageStore_1.DI.provideConfig(() => {\n return config => ({\n ...config,\n titleEditable: false,\n style: {\n ...config.style,\n width: `var(--page-width-lv3)`\n },\n });\n });\n }\n static provideDefaultInitializes() {\n return [\n QueryPageStore_1.provideAutoTogglePageInitializer(),\n QueryPageStore_1.provideVariablesFormValueFromMatrixParamsInitializer(),\n ];\n }\n static provideNavEndActionsInitializers() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n effect(() => {\n const icon = store.style()?.width === 'var(--page-width-lv3)' ? 'close_fullscreen' : 'open_in_full';\n const navEndActions = [\n createAction(QueryFeature.ActionId.クエリの実行, null, { icon: 'play_arrow' }).create(),\n store.variablesFormDisplayed() ? createAction(ActionId.TOGGLE_PAGE, null, { icon }).create() : null,\n createAction(QueryFeature.ActionId.クエリの更新, null, { icon: 'save' }).create(),\n ].filter(Boolean);\n applyToInput(store, 'navEndActions', navEndActions);\n });\n }),\n QueryPageStore_1.provideVariablesFromRouteParamDataInitializer(),\n ];\n }\n static provideVariablesFromRouteParamDataInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer(store => {\n const data = injectUnflattenRouteParam('data');\n effect(() => {\n const variables = store.variablesFormValue();\n const merged = merge(variables, data());\n store.feature.form.patchValue({\n graphql: {\n variablesJson: JSON.stringify(merged, null, 2),\n }\n });\n });\n }),\n ];\n }\n static provideVariablesFromRouteParamInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer(store => {\n const data = injectUnflattenRouteParam();\n effect(() => {\n const variables = store.variablesFormValue();\n const merged = merge(variables, data());\n store.feature.form.patchValue({\n graphql: {\n variablesJson: JSON.stringify(merged, null, 2),\n }\n });\n });\n }),\n ];\n }\n static provideAutoTogglePageInitializer() {\n return [\n provideEffect(RouterOutletFrameStore.ActionId.DEACTIVATED, () => {\n const store = inject(QueryPageStore_1);\n const style = computeFake(store.style());\n return () => {\n applyToInput(store, 'style', { ...style, paddingLeft: `0` });\n };\n }),\n QueryPageStore_1.DI.provideInitializer((store) => {\n const hasNext = injectHasNext();\n const style = computeFake(store.style());\n effect(() => {\n if (hasNext()) {\n setTimeout(() => {\n if (style.width === 'var(--page-width-lv3)') {\n applyToInput(store, 'style', {\n ...style,\n paddingLeft: 'var(--page-width-lv1)',\n });\n }\n }, 300);\n }\n });\n }),\n ];\n }\n static provideVariablesFormValueFromMatrixParamsInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const data = injectUnflattenRouteParam('data');\n effect(() => {\n store.variablesForm()?.patchValue({ ...data() });\n });\n }),\n ];\n }\n static provideQueryFromRouteDataQueryIdInitializer(key = 'queryId') {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const query = injectOne(Query, { id: injectRouteData(key) });\n const _query = computed(() => {\n return query();\n }, { equal: (pre, cur) => JSON.stringify(pre) === JSON.stringify(cur) });\n effect(() => {\n console.debug('[QueryPageStore] query:', _query());\n applyToInput(store, 'query', _query());\n });\n }),\n ];\n }\n static provideQueryFromRouteDataInitializer(key = 'query') {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const query = injectRouteData(key);\n effect(() => applyToInput(store, 'query', query()));\n }),\n ];\n }\n static provideItemActionsFromRouteDataInitializer(key = 'itemActionsCommandIds') {\n return QueryPageStore_1.DI.provideInitializer((store) => {\n const idOrObjectArray = injectRouteData(key);\n const service = inject(CommandService);\n const itemActions = (item) => {\n const params = (idOrObjectArray() ?? []).map((idOrObject) => ({\n id: typeof idOrObject === 'string' ? idOrObject : idOrObject.id,\n options: typeof idOrObject === 'string' ? {} : idOrObject.options,\n }));\n const builder = service.getActionBuilder().setItem(item);\n const actions = params.map(param => builder.setOptions(param.options).buildAction(param.id));\n console.debug('actions:', actions);\n return actions;\n };\n applyToInput(store, 'itemActions', itemActions);\n });\n }\n static provideNavEndActionsFromRouteDataInitializer(key = 'navEndActionsCommandIds') {\n return QueryPageStore_1.DI.provideInitializer((store) => {\n const ids = injectRouteData(key);\n const queryId = injectRouteData('navEndActionsCommandQueryId');\n const service = inject(CommandService);\n const route = inject(ActivatedRoute);\n const hasNext = injectHasNext();\n effect(() => {\n const actions = service.getActionBuilder().setFilterIds(ids()).setOptions({ queryId: queryId() }).buildActions(undefined, { relativeTo: route, replaceUrl: hasNext() });\n applyToInput(store, 'navEndActions', [\n store.variablesFormDisplayed() ? { id: ActionId.TOGGLE_VARIABLES_FORM, icon: store.navMode() === 'collapsed' ? 'expand_less' : 'expand_more' } : null,\n // TODO(@NozomuMiyamoto): 変更\n actions?.length ? {\n id: 'open_command_menu',\n icon: 'more_vert',\n children: [...actions],\n } : null,\n ].filter(Boolean));\n });\n });\n }\n static provideDefaultEffects() {\n return [\n QueryPageStore_1.provideCommandEffects(),\n QueryPageStore_1.provideNavModeToggleEffect(),\n QueryPageStore_1.provideChangeWidthEffect(),\n QueryFeature.provideDefaultEffects(),\n QueryPageStore_1.provideNavigateEffects(),\n QueryPageStore_1.provideEditingStateEffects(),\n ];\n }\n static provideEditingStateEffects() {\n return [\n provideEffect(ValueCellAtomStore.ActionId.START_EDIT, () => {\n const editingStateManager = inject(EditingStateManager);\n return (payload) => {\n editingStateManager.startEditing(payload.rowId, payload.columnId);\n };\n }),\n provideEffect(ValueCellAtomStore.ActionId.END_EDIT, () => {\n const editingStateManager = inject(EditingStateManager);\n return (payload) => {\n setTimeout(() => editingStateManager.stopEditing(payload.rowId, payload.columnId), 0);\n };\n }),\n ];\n }\n static provideCommandEffects() {\n return [\n QueryPageStore_1.provideCommandExecuteEffect(),\n QueryPageStore_1.provideCommandNavigateEffect(),\n ];\n }\n static provideCommandExecuteEffect() {\n return [\n provideEffect(CommandService.ActionId.EXECUTE_COMMAND, () => {\n const commandService = inject(CommandService);\n return async (payload) => {\n const app = inject(AppService);\n const obj = omitBy(payload.body, (value) => typeof value === undefined);\n const command = inject(CommandService).getCommand(payload.command.id);\n console.debug('[QueryPage] payload:', payload);\n if (payload.options?.confirm && !(await payload.options?.confirm())) {\n app.snackBar.open('キャンセルされました。');\n return;\n }\n app.loading.await(() => {\n return commandService.execute(command, obj).then(() => {\n app.snackBar.open('成功しました。');\n }).catch((error) => {\n console.error(error);\n app.snackBar.open(`エラー: ${error.message}`);\n });\n });\n };\n }),\n ];\n }\n static provideCommandNavigateEffect() {\n return [\n provideEffect(CommandService.ActionId.NAVIGATE_TO_COMMAND_PAGE, () => {\n const app = inject(AppService);\n const route = inject(ActivatedRoute);\n const hasNext = injectHasNext();\n return (payload) => {\n const flat = flatten({ data: { id: payload.body?.id }, queryId: payload?.options?.queryId });\n const _flat = omitBy(flat, (value) => value === undefined);\n app.router.navigate(['commands', { skip: true }, payload.command.id, _flat], {\n relativeTo: route,\n replaceUrl: hasNext(),\n });\n };\n }),\n ];\n }\n static provideNavModeToggleEffect() {\n return provideEffect(ActionId.TOGGLE_VARIABLES_FORM, () => {\n const store = inject(QueryPageStore_1);\n return () => {\n store.navMode.set(store.navMode() === 'collapsed' ? 'expanded' : 'collapsed');\n };\n }, { scopes: ['root', 'host'] });\n }\n static provideNavEndActionsInitializer() {\n return QueryPageStore_1.DI.provideInitializer((store) => {\n const navEndActions = computed(() => [\n store.variablesFormDisplayed() ? {\n id: ActionId.TOGGLE_VARIABLES_FORM,\n icon: store.navMode() === 'collapsed' ? 'expand_less' : 'expand_more'\n } : null,\n ].filter(Boolean));\n effect(() => applyToInput(store, 'navEndActions', [\n ...navEndActions(),\n ...store.additionalNavEndActions()\n ]));\n });\n }\n static provideChangeWidthEffect() {\n return [\n provideEffect(IndexTemplateStore.ActionId.TABLE_COLUMN_WIDTH_CHANGE, () => {\n const store = inject(QueryPageStore_1);\n return (payload) => {\n const form = store.itemsMap()?.[payload.key]?.form || store.form();\n form.patchValue({ columns: { map: { [payload.columnName]: { width: payload.width } } } });\n };\n }),\n ];\n }\n static provideNavigateEffects() {\n return [\n provideEffect(QueryPageStore_1.ActionId.ADD, () => {\n const app = inject(AppService);\n const extras = injectNavigationExtras();\n return (item) => app.router.navigate(['new'], extras());\n }),\n provideEffect(QueryPageStore_1.ActionId.DETAIL, () => {\n const app = inject(AppService);\n const extras = injectNavigationExtras();\n return (item) => app.router.navigate([item.id], extras());\n }),\n ];\n }\n static providePaginationInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n effect(() => {\n const columns = store.columnNames();\n const sticky = store.sticky();\n const current = untracked(() => store.form())?.value;\n const form = store.indexFormBuilder.build({\n columns: buildColumns([...columns, '__actions'], sticky),\n page: {\n size: current?.page?.size ?? 100,\n index: current?.page?.index ?? 0,\n }\n });\n applyToInput(store, 'form', form);\n });\n }),\n QueryPageStore_1.DI.provideInitializer((store) => {\n const page = derivedAsync(() => getValue$(store.form().get(['page'])), {\n initialValue: { index: 0, size: 100 }\n });\n const pagination = computed(() => {\n const _page = page() || { index: 0, size: 100 };\n return {\n offset: _page.index * _page.size,\n limit: _page.size,\n };\n });\n effect(() => {\n const _pagination = pagination();\n store.variablesForm()?.patchValue(_pagination);\n });\n }),\n ];\n }\n static provideTableCellValueChangeEffect(handlerFactory, optionsOrColumns) {\n return provideEffect(ValueCellAtomStore.ActionId.UPDATE_VALUE, (injector) => {\n // 後方互換性のためのオプション正規化\n const normalizedOptions = Array.isArray(optionsOrColumns)\n ? { columns: optionsOrColumns }\n : (optionsOrColumns || {});\n // デフォルトの比較関数\n const defaultEquals = (current, next) => current === next;\n const equalsFn = normalizedOptions.equals || defaultEquals;\n const handler = handlerFactory(injector);\n return (action) => {\n const { context, next, current, setValue } = action;\n const name = context.name;\n // フィールドフィルタリング\n if (normalizedOptions.columns && normalizedOptions.columns.length > 0 && !normalizedOptions.columns.includes(name)) {\n return;\n }\n // 値の比較\n if (equalsFn(current, next, name)) {\n // 値が同じ場合は処理をスキップ\n return;\n }\n // TableCellValueChangeオブジェクトの作成\n const change = {\n item: context.item,\n name: name,\n current: current,\n next: next,\n rowIndex: context.position?.row ?? 0,\n columnId: context.name\n };\n // ハンドラーの実行\n handler(change, setValue);\n };\n });\n }\n static provideTableAutofillEffect(handlerFactory) {\n return provideEffect(TableOrganism.ActionId.AUTOFILL_COMPLETE, (injector) => {\n const handler = handlerFactory(injector);\n const store = inject(QueryPageStore_1);\n return async (payload) => {\n // TableOrganismから渡されたコンテキスト情報を使用\n if (!payload.contexts) {\n console.warn('No autofill contexts provided');\n return;\n }\n const { sourceContext, targetContexts } = payload.contexts;\n const sourceItem = sourceContext.item;\n const columnName = sourceContext.name;\n const sourceValue = sourceItem[columnName];\n // 影響を受けるアイテムを収集(表示されているセルのみ)\n const affectedItems = [];\n targetContexts.forEach(({ position, context }, index) => {\n const targetItem = context.item;\n // 値の生成\n let newValue = sourceValue;\n // 数値の連番\n if (typeof sourceValue === 'number') {\n newValue = sourceValue + index + 1;\n }\n // 文字列パターン\n else if (typeof sourceValue === 'string') {\n const dateMatch = sourceValue.match(/^(\\d{4}-\\d{2}-\\d{2})$/);\n if (dateMatch) {\n const sourceDate = new Date(dateMatch[1]);\n const newDate = new Date(sourceDate);\n newDate.setDate(sourceDate.getDate() + index + 1);\n newValue = newDate.toISOString().split('T')[0];\n }\n }\n affectedItems.push({\n item: targetItem,\n newValue,\n rowIndex: position.row\n });\n });\n // オートフィルの変更情報を作成\n const autofillChange = {\n sourceItem,\n sourceValue,\n columnName,\n columnIndex: payload.sourcePosition.col,\n affectedItems,\n range: payload.targetRange\n };\n // ハンドラーを実行\n await handler(autofillChange);\n };\n });\n }\n static provideDebugStyleInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const debug = inject(MachinaDevService);\n const el = inject(ElementRef);\n effect(() => el.nativeElement.style.setProperty('--is-debug', debug.isDevMode() ? '1' : '0'));\n }),\n ];\n }\n static provideTitleFromQueryResultInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n effect(() => applyToInput(store, 'title', store.feature.result()?.__meta__?.title));\n }),\n ];\n }\n #navStartActions;\n constructor() {\n super();\n this.app = inject(AppService);\n this.config = QueryPageStore_1.DI.injectConfig();\n this.feature = inject(QueryFeature);\n this.variablesFormFeature = inject(QueryGraphqlVariablesFormFeature);\n this.indexFormBuilder = injectIndexFormBuilder();\n this.navMode = signal('collapsed');\n this.editingStateManager = inject(EditingStateManager);\n this.style = input(_computed(() => this.config().style));\n this.query = input(null);\n this.#navStartActions = injectNavStartActionsV2();\n this.navStartActions = input(_computed(() => this.#navStartActions()));\n this.additionalNavEndActions = input(_computed(() => this.config().additionalNavEndActions));\n this.navEndActions = input(_computed(() => this.config().navEndActions));\n this.type = input(_computed(() => this.config().type));\n this.title = input(_computed(() => this.config().title ?? this.query()?.title));\n this.titleEditable = input(_computed(() => this.config().titleEditable));\n this.itemsMap = input(_computed(() => buildItemsMapFromResult(this.feature.result())));\n this.items = computed(() => this.itemsMap()[Object.keys(this.itemsMap())[0]]?.items ?? []);\n this.itemsLength = input(_computed(() => this.itemsMap()[Object.keys(this.itemsMap())[0]]?.itemsLength ?? 0));\n this.childrenKey = input(_computed(() => this.config().childrenKey));\n this.additionalColumns = input(_computed(() => this.config().additionalColumns));\n this.additionalColumnNames = input(_computed(() => this.additionalColumns()(this.items())));\n this.extractedColumnNames = input(_computed(() => QueryHelper.extractColumnNames(this.items(), this.childrenKey())));\n this.columnNames = input(_computed(() => [...this.extractedColumnNames(), ...this.additionalColumnNames()]));\n this.sticky = input(_computed(() => ({ stickyStart: 2, stickyEnd: 1 })));\n this.form = input(_computed(() => this.indexFormBuilder.build({\n columns: buildColumns([...this.columnNames(), '__actions'], this.sticky()),\n })));\n this.itemActions = input(_computed(() => this.config().itemActions));\n this.tableTreeControl = new FlatTreeControl(n => n.level, n => n.isExpandable, { trackBy: (n) => n?.id ?? n });\n this.variablesForm = input(_computed(() => this.variablesFormFeature.variablesForm() ?? new FormGroup({})));\n this.variablesFormFieldMap = input(_computed(() => ({})));\n this.variablesFormValue = derivedAsync(() => getRawValue$(this.variablesForm()), { equal: isEqual });\n this.variablesFormValue$ = toObservable(this.variablesFormValue);\n this.variablesFormDisplayed = input(_computed(() => Object.keys(this.variablesFormFeature.variablesValue())?.length > 0));\n this.tableColumnFormFieldMap = input(_computed(() => ({})));\n this.getRowClass = input(_computed(() => () => ''));\n this.skip = injectRouteSkip();\n this.pageSizeOptions = input(_computed(() => this.config().pageSizeOptions));\n QueryPageStore_1.DI.initialize(this);\n effect(() => this.feature.form.patchValue(this.query()));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPageStore, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.5\", type: QueryPageStore, isStandalone: true, inputs: { style: { classPropertyName: \"style\", publicName: \"style\", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: \"query\", publicName: \"query\", isSignal: true, isRequired: false, transformFunction: null }, navStartActions: { classPropertyName: \"navStartActions\", publicName: \"navStartActions\", isSignal: true, isRequired: false, transformFunction: null }, additionalNavEndActions: { classPropertyName: \"additionalNavEndActions\", publicName: \"additionalNavEndActions\", isSignal: true, isRequired: false, transformFunction: null }, navEndActions: { classPropertyName: \"navEndActions\", publicName: \"navEndActions\", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: \"type\", publicName: \"type\", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, titleEditable: { classPropertyName: \"titleEditable\", publicName: \"titleEditable\", isSignal: true, isRequired: false, transformFunction: null }, itemsMap: { classPropertyName: \"itemsMap\", publicName: \"itemsMap\", isSignal: true, isRequired: false, transformFunction: null }, itemsLength: { classPropertyName: \"itemsLength\", publicName: \"itemsLength\", isSignal: true, isRequired: false, transformFunction: null }, childrenKey: { classPropertyName: \"childrenKey\", publicName: \"childrenKey\", isSignal: true, isRequired: false, transformFunction: null }, additionalColumns: { classPropertyName: \"additionalColumns\", publicName: \"additionalColumns\", isSignal: true, isRequired: false, transformFunction: null }, additionalColumnNames: { classPropertyName: \"additionalColumnNames\", publicName: \"additionalColumnNames\", isSignal: true, isRequired: false, transformFunction: null }, extractedColumnNames: { classPropertyName: \"extractedColumnNames\", publicName: \"extractedColumnNames\", isSignal: true, isRequired: false, transformFunction: null }, columnNames: { classPropertyName: \"columnNames\", publicName: \"columnNames\", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: \"sticky\", publicName: \"sticky\", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: \"form\", publicName: \"form\", isSignal: true, isRequired: false, transformFunction: null }, itemActions: { classPropertyName: \"itemActions\", publicName: \"itemActions\", isSignal: true, isRequired: false, transformFunction: null }, variablesForm: { classPropertyName: \"variablesForm\", publicName: \"variablesForm\", isSignal: true, isRequired: false, transformFunction: null }, variablesFormFieldMap: { classPropertyName: \"variablesFormFieldMap\", publicName: \"variablesFormFieldMap\", isSignal: true, isRequired: false, transformFunction: null }, variablesFormDisplayed: { classPropertyName: \"variablesFormDisplayed\", publicName: \"variablesFormDisplayed\", isSignal: true, isRequired: false, transformFunction: null }, tableColumnFormFieldMap: { classPropertyName: \"tableColumnFormFieldMap\", publicName: \"tableColumnFormFieldMap\", isSignal: true, isRequired: false, transformFunction: null }, getRowClass: { classPropertyName: \"getRowClass\", publicName: \"getRowClass\", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: \"pageSizeOptions\", publicName: \"pageSizeOptions\", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }\n};\nQueryPageStore = QueryPageStore_1 = __decorate([\n TokenizedType(),\n __metadata(\"design:paramtypes\", [])\n], QueryPageStore);\nexport { QueryPageStore };\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPageStore, decorators: [{\n type: Directive,\n args: [{ standalone: true }]\n }], ctorParameters: () => [] });\nexport class QueryPage extends NgAtomicComponent {\n constructor() {\n super();\n this.fb = inject(FormBuilder);\n this.route = inject(ActivatedRoute);\n this.app = inject(AppService);\n this.store = inject(QueryPageStore);\n this.reducer = inject(QueryActionReducer);\n this.query = inject(QueryService);\n this.feature = inject(QueryFeature);\n this.template = viewChild(IndexTemplate);\n this.title = input('default title');\n this.reducer.action$.subscribe((action) => this.dispatch(action));\n const context = computed(() => ({\n query: this.feature.formValue(),\n // schema: this.feature.graphqlSchema(),\n }));\n effect(() => this.app.context.context.set(JSON.stringify(context())));\n }\n async back() {\n history.back();\n }\n async navigateToIframe(item) {\n this.app.router.navigate(['invoices', item.id], {\n relativeTo: this.route,\n });\n }\n async expandPage() {\n updateInput(this.store, 'style', (style) => ({\n ...style,\n width: style?.width === 'var(--page-width-lv3)' ? 'var(--page-width-lv2)' : 'var(--page-width-lv3)',\n }));\n }\n itemClick(item) {\n this.dispatch({ id: ActionId.DETAIL, payload: item });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: QueryPage, isStandalone: true, selector: \"pages-query\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"template\", first: true, predicate: IndexTemplate, descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: QueryPageStore, inputs: [\"type\", \"type\", \"query\", \"query\", \"titleEditable\", \"titleEditable\", \"variablesForm\", \"variablesForm\", \"variablesFormFieldMap\", \"variablesFormFieldMap\", \"navStartActions\", \"navStartActions\", \"navEndActions\", \"navEndActions\", \"itemActions\", \"itemActions\", \"pageSizeOptions\", \"pageSizeOptions\"] }], ngImport: i0, template: `\n <frames-router-outlet [skip]=\"store.skip()\" (action)=\"dispatch($event)\">\n <templates-index\n [tableColumnFormFieldMap]=\"store.tableColumnFormFieldMap()\"\n [style]=\"store.style()\"\n [title]=\"store.title()\"\n [titleControl]=\"store.feature.form.get(['title'])\"\n [titleEditable]=\"store.titleEditable()\"\n [type]=\"store.type()\"\n [tableChildrenKey]=\"store.childrenKey()\"\n [tableTreeControl]=\"store.tableTreeControl\"\n [itemsMap]=\"store.itemsMap()\"\n [itemsLength]=\"store.itemsLength()\"\n [itemActions]=\"store.itemActions()\"\n [getRowClass]=\"store.getRowClass()\"\n [form]=\"store.form()\"\n [navStartActions]=\"store.navStartActions()\"\n [navEndActions]=\"store.navEndActions()\"\n [navMode]=\"store.navMode()\"\n [pageSizeOptions]=\"store.pageSizeOptions()\"\n (action)=\"dispatch($event)\"\n >\n @if (store.variablesFormDisplayed()) {\n <div navDashboard>\n <ng-atomic-form-section-builder\n [form]=\"store.variablesForm()\"\n [fieldMap]=\"store.variablesFormFieldMap()\"\n />\n </div>\n }\n <groups-query-form dashboard (action)=\"dispatch($event)\" />\n </templates-index>\n </frames-router-outlet>\n `, isInline: true, styles: [\"@charset \\\"UTF-8\\\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-nLSU: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-nLSU: var(--page-width-lv3);--primary-color-SCOPED-IN-query-nLSU: var(--primary-color);--on-primary-color-SCOPED-IN-query-nLSU: var(--on-primary-color);--surface-color-SCOPED-IN-query-nLSU: var(--surface-color);--on-surface-color-SCOPED-IN-query-nLSU: var(--on-surface-color);--on-background-color-SCOPED-IN-query-nLSU: var(--on-background-color);--background-color-SCOPED-IN-query-nLSU: var(--background-color);--navigator-background-color-SCOPED-IN-query-nLSU: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-nLSU: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-nLSU: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-nLSU: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-nLSU: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-nLSU);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-nLSU);--surface-color: var(--surface-color-SCOPED-IN-query-nLSU);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-nLSU);--background-color: var(--background-color-SCOPED-IN-query-nLSU);--on-background-color: var(--on-background-color-SCOPED-IN-query-nLSU);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-nLSU);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-nLSU);--table-background-color: var(--table-background-color-SCOPED-IN-query-nLSU);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-nLSU);--is-debug: var(--is-debug-SCOPED-IN-query-nLSU)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-nLSU) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\\n\"], dependencies: [{ kind: \"component\", type: IndexTemplate, selector: \"templates-index\" }, { kind: \"component\", type: RouterOutletFrame, selector: \"frames-router-outlet\", outputs: [\"events\"] }, { kind: \"component\", type: NgAtomicFormSectionBuilder, selector: \"ng-atomic-form-section-builder\", inputs: [\"form\", \"formFlatExcludes\", \"fieldMap\", \"fieldKeys\"] }, { kind: \"component\", type: QueryFormGroup, selector: \"groups-query-form\", inputs: [\"form\", \"keyActions\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\n__decorate([\n Effect(IndexTemplateStore.ActionId.BACK),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], QueryPage.prototype, \"back\", null);\n__decorate([\n Effect(ActionId.NAVIGATE_TO_IFRAME),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], QueryPage.prototype, \"navigateToIframe\", null);\n__decorate([\n Effect(ActionId.TOGGLE_PAGE),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], QueryPage.prototype, \"expandPage\", null);\n__decorate([\n Effect(IndexTemplate.ActionId.ITEM_CLICK),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], QueryPage.prototype, \"itemClick\", null);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPage, decorators: [{\n type: Component,\n args: [{ selector: 'pages-query', imports: [\n IndexTemplate,\n RouterOutletFrame,\n NgAtomicFormSectionBuilder,\n QueryFormGroup,\n ], template: `\n <frames-router-outlet [skip]=\"store.skip()\" (action)=\"dispatch($event)\">\n <templates-index\n [tableColumnFormFieldMap]=\"store.tableColumnFormFieldMap()\"\n [style]=\"store.style()\"\n [title]=\"store.title()\"\n [titleControl]=\"store.feature.form.get(['title'])\"\n [titleEditable]=\"store.titleEditable()\"\n [type]=\"store.type()\"\n [tableChildrenKey]=\"store.childrenKey()\"\n [tableTreeControl]=\"store.tableTreeControl\"\n [itemsMap]=\"store.itemsMap()\"\n [itemsLength]=\"store.itemsLength()\"\n [itemActions]=\"store.itemActions()\"\n [getRowClass]=\"store.getRowClass()\"\n [form]=\"store.form()\"\n [navStartActions]=\"store.navStartActions()\"\n [navEndActions]=\"store.navEndActions()\"\n [navMode]=\"store.navMode()\"\n [pageSizeOptions]=\"store.pageSizeOptions()\"\n (action)=\"dispatch($event)\"\n >\n @if (store.variablesFormDisplayed()) {\n <div navDashboard>\n <ng-atomic-form-section-builder\n [form]=\"store.variablesForm()\"\n [fieldMap]=\"store.variablesFormFieldMap()\"\n />\n </div>\n }\n <groups-query-form dashboard (action)=\"dispatch($event)\" />\n </templates-index>\n </frames-router-outlet>\n `, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [\n {\n directive: QueryPageStore,\n inputs: [\n 'type',\n 'query',\n 'titleEditable',\n 'variablesForm',\n 'variablesFormFieldMap',\n 'navStartActions',\n 'navEndActions',\n 'itemActions',\n 'pageSizeOptions'\n ]\n },\n ], styles: [\"@charset \\\"UTF-8\\\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-nLSU: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-nLSU: var(--page-width-lv3);--primary-color-SCOPED-IN-query-nLSU: var(--primary-color);--on-primary-color-SCOPED-IN-query-nLSU: var(--on-primary-color);--surface-color-SCOPED-IN-query-nLSU: var(--surface-color);--on-surface-color-SCOPED-IN-query-nLSU: var(--on-surface-color);--on-background-color-SCOPED-IN-query-nLSU: var(--on-background-color);--background-color-SCOPED-IN-query-nLSU: var(--background-color);--navigator-background-color-SCOPED-IN-query-nLSU: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-nLSU: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-nLSU: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-nLSU: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-nLSU: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-nLSU);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-nLSU);--surface-color: var(--surface-color-SCOPED-IN-query-nLSU);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-nLSU);--background-color: var(--background-color-SCOPED-IN-query-nLSU);--on-background-color: var(--on-background-color-SCOPED-IN-query-nLSU);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-nLSU);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-nLSU);--table-background-color: var(--table-background-color-SCOPED-IN-query-nLSU);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-nLSU);--is-debug: var(--is-debug-SCOPED-IN-query-nLSU)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-nLSU) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { back: [], navigateToIframe: [], expandPage: [], itemClick: [] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0B4eG1hY2hpbmEvY29tcG9uZW50cy9zcmMvbGliL3BhZ2VzL3F1ZXJ5L3F1ZXJ5LnBhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQVksU0FBUyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6TCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBWSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUEyQixpQkFBaUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pOLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RLLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxp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LFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNwRSxTQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxVQUFLLEdBQUcsS0FBSyxDQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25GLGtCQUFhLEdBQUcsS0FBSyxDQUFVLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM3RSxhQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEYsZ0JBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsZ0JBQVcsR0FBRyxLQUFLLENBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElB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IGluamVjdCwgY29tcHV0ZWQsIHZpZXdDaGlsZCwgRGlyZWN0aXZlLCBJbmplY3RhYmxlLCBzaWduYWwsIGlucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgZWZmZWN0LCBQcm92aWRlciwgdW50cmFja2VkLCBFbGVtZW50UmVmLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5kZXhUZW1wbGF0ZSwgSW5kZXhUZW1wbGF0ZVN0b3JlLCBJdGVtc01hcCB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy90ZW1wbGF0ZXMvX2luZGV4JztcbmltcG9ydCB7IF9jb21wdXRlZCwgQWN0aW9uLCBhcHBseVRvSW5wdXQsIGNvbXB1dGVGYWtlLCBjcmVhdGVBY3Rpb24sIEVmZmVjdCwgSW5qZWN0YWJsZUNvbXBvbmVudCwgSXRlbUFjdGlvbnMsIE5hdkFjdGlvbnMsIE5nQXRvbWljQ29tcG9uZW50LCBwcm92aWRlRWZmZWN0LCBUb2tlbml6ZWRUeXBlLCB1cGRhdGVJbnB1dCB9IGZyb20gJ0BuZy1hdG9taWMvY29yZSc7XG5pbXBvcnQgeyBFZGl0aW5nU3RhdGVNYW5hZ2VyIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24nO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tcG9uZW50cy9zZXJ2aWNlcy9hcHAnO1xuaW1wb3J0IHsgYnVpbGRDb2x1bW5zLCBpbmplY3RJbmRleEZvcm1CdWlsZGVyIH0gZnJvbSAnQG5nLWF0b21pYy9jb21wb25lbnRzL29yZ2FuaXNtcy90YWJsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0UmF3VmFsdWUkLCBnZXRWYWx1ZSQsIGluamVjdEhhc05leHQsIGluamVjdE5hdmlnYXRpb25FeHRyYXMsIGluamVjdFJvdXRlRGF0YSwgaW5qZWN0Um91dGVTa2lwLCBpbmplY3RVbmZsYXR0ZW5Sb3V0ZVBhcmFtIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVyT3V0bGV0RnJhbWUsIFJvdXRlck91dGxldEZyYW1lU3RvcmUgfSBmcm9tICdAbmctYXRvbWljL2NvbXBvbmVudHMvZnJhbWVzL3JvdXRlci1vdXRsZXQnO1xuaW1wb3J0IHsgQ29tbWFuZEFjdGlvblBheWxvYWQgfSBmcm9tICdAeHhtYWNoaW5hL2NvbW1vbi9kb21haW4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb21tYW5kU2VydmljZSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tcG9uZW50cy9zZXJ2aWNlcy9jb21tYW5kJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IFF1ZXJ5LCBRdWVyeUhlbHBlciB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2RvbWFpbi9tb2RlbHMnO1xuaW1wb3J0IHsgaW5qZWN0T25lIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vc3RvcmVzL2VudGl0aWVzJztcbmltcG9ydCB7IGluamVjdE5hdlN0YXJ0QWN0aW9uc1YyLCBtYWtlREkgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zZXJ2aWNlcy91aSc7XG5pbXBvcnQgeyBtYWtlSW5pdGlhbGl6ZXJDb25maWcgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zZXJ2aWNlcy9pbml0aWFsaXplcic7XG5pbXBvcnQgeyBOZ0F0b21pY0Zvcm1TZWN0aW9uQnVpbGRlciB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy90ZW1wbGF0ZXMvZm9ybSc7XG5pbXBvcnQgeyBGb3JtRmllbGRNYXAgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9waXBlcy9zbWFydC1maWVsZCc7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUgfSBmcm9tICdAeHhtYWNoaW5hL2NvbXBvbmVudHMvZmVhdHVyZXMvcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnQHh4bWFjaGluYS9jb21wb25lbnRzL3NlcnZpY2VzL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5Rm9ybUdyb3VwIH0gZnJvbSAnQHh4bWFjaGluYS9jb21wb25lbnRzL2dyb3Vwcy9xdWVyeS1mb3JtJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICdmbGF0JztcbmltcG9ydCB7IGRlcml2ZWRBc3luYyB9IGZyb20gJ25neHRlbnNpb24vZGVyaXZlZC1hc3luYyc7XG5pbXBvcnQgeyBpc0VxdWFsLCBtZXJnZSwgb21pdEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFZhbHVlQ2VsbEF0b21TdG9yZSwgVXBkYXRlVmFsdWVQYXlsb2FkIH0gZnJvbSAnQG5nLWF0b21pYy9jb21wb25lbnRzL2F0b21zL3ZhbHVlLWNlbGwnO1xuaW1wb3J0IHsgUXVlcnlHcmFwaHFsVmFyaWFibGVzRm9ybUZlYXR1cmUgfSBmcm9tICdAeHhtYWNoaW5hL2NvbXBvbmVudHMvZmVhdHVyZXMvcXVlcnknO1xuaW1wb3J0IHsgTWFjaGluYURldlNlcnZpY2UgfSBmcm9tICdAeHhtYWNoaW5hL2NvbXBvbmVudHMvc2VydmljZXMvZGVidWcnO1xuaW1wb3J0IHsgVGFibGVPcmdhbmlzbSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9vcmdhbmlzbXMvdGFibGUnO1xuXG5leHBvcnQgZW51bSBBY3Rpb25JZCB7XG4gIE5BVklHQVRFX1RPX0lGUkFNRSA9ICdOQVZJR0FURSBUTyBJRlJBTUUnLFxuICBUT0dHTEVfUEFHRSA9ICflhajkvZPooajnpLonLFxuICBUT0dHTEVfVkFSSUFCTEVTX0ZPUk0gPSAn5aSJ5pWw44OV44Kp44O844Og44Gu6KGo56S65YiH5pu/JyxcbiAgQUREID0gJ+i/veWKoCcsXG4gIERFVEFJTCA9ICfoqbPntLAnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ2VsbFZhbHVlQ2hhbmdlPFQgPSBhbnk+IHtcbiAgaXRlbTogVDtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXJyZW50OiBhbnk7XG4gIG5leHQ6IGFueTtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sdW1uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUF1dG9maWxsQ2hhbmdlPFQgPSBhbnk+IHtcbiAgc291cmNlSXRlbTogVDtcbiAgc291cmNlVmFsdWU6IGFueTtcbiAgY29sdW1uTmFtZTogc3RyaW5nO1xuICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICBhZmZlY3RlZEl0ZW1zOiBBcnJheTx7XG4gICAgaXRlbTogVDtcbiAgICBuZXdWYWx1ZTogYW55O1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gIH0+O1xuICByYW5nZToge1xuICAgIHN0YXJ0OiB7IHJvdzogbnVtYmVyOyBjb2w6IG51bWJlciB9O1xuICAgIGVuZDogeyByb3c6IG51bWJlcjsgY29sOiBudW1iZXIgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNlbGxDaGFuZ2VPcHRpb25zPFQgPSBhbnk+IHtcbiAgY29sdW1ucz86IChrZXlvZiBUKVtdOyAgLy8g5a++6LGh44Kr44Op44Og77yI5pei5a2Y44GuY29sdW1uTmFtZXPjgajlkIzjgZjvvIlcbiAgZXF1YWxzPzogKGN1cnJlbnQ6IGFueSwgbmV4dDogYW55LCBjb2x1bW5OYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47ICAvLyDjgqvjgrnjgr/jg6Dmr5TovIPplqLmlbBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSXRlbXNNYXAoXG4gIGl0ZW1zUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fSxcbiAgaXRlbXNMZW5ndGhSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fSxcbikge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXNSZXN1bHQpLnJlZHVjZSgoYWNjLCBba2V5LCBpdGVtc10pID0+ICh7XG4gICAgLi4uYWNjLFxuICAgIFtrZXldOiB7XG4gICAgICBpdGVtcyxcbiAgICAgIGl0ZW1zTGVuZ3RoOiBpdGVtc0xlbmd0aFJlc3VsdFtrZXldID8/IGl0ZW1zLmxlbmd0aCxcbiAgICB9XG4gIH0pLCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEl0ZW1zTWFwRnJvbVJlc3VsdChcbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gJiBSZWNvcmQ8YCR7c3RyaW5nfUxlbmd0aGAsIG51bWJlcj4gPSB7fSxcbik6IEl0ZW1zTWFwPGFueT4ge1xuICBjb25zb2xlLmRlYnVnKCdbREVCVUddIHJlc3VsdDonLCByZXN1bHQpO1xuICBjb25zdCBkYXRhID0gb21pdEJ5KHJlc3VsdCwgKF8sIGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ18nKSk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gYnVpbGRJdGVtc01hcCh7IGRlZmF1bHQ6IGRhdGEgfSk7XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2l0ZW1zJyBpbiBkYXRhKSB7XG4gICAgY29uc3QgaXRlbXNNYXAgPSBidWlsZEl0ZW1zTWFwKHsgZGVmYXVsdDogZGF0YS5pdGVtcyBhcyBhbnlbXSB9LCB7IGRlZmF1bHQ6IGRhdGE/Lml0ZW1zTGVuZ3RoIGFzIG51bWJlciB9KTtcbiAgICByZXR1cm4gaXRlbXNNYXA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXRlbXNSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xuICAgIGNvbnN0IGl0ZW1zTGVuZ3RoUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKCdMZW5ndGgnKSkge1xuICAgICAgICBpdGVtc0xlbmd0aFJlc3VsdFtrZXkucmVwbGFjZSgnTGVuZ3RoJywgJycpXSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zUmVzdWx0W2tleV0gPSB2YWx1ZSBhcyBhbnlbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRJdGVtc01hcChpdGVtc1Jlc3VsdCwgaXRlbXNMZW5ndGhSZXN1bHQpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUXVlcnlBY3Rpb25SZWR1Y2VyIHtcbiAgcmVhZG9ubHkgYWN0aW9uID0gc2lnbmFsPEFjdGlvbj4obnVsbCk7XG4gIHJlYWRvbmx5IGFjdGlvbiQgPSB0b09ic2VydmFibGUodGhpcy5hY3Rpb24pO1xuXG4gIGRpc3BhdGNoKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgdGhpcy5hY3Rpb24uc2V0KGFjdGlvbik7XG4gIH1cbn1cblxuXG5AVG9rZW5pemVkVHlwZSgpXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFnZVN0b3JlIGV4dGVuZHMgSW5qZWN0YWJsZUNvbXBvbmVudCB7XG4gIHN0YXRpYyByZWFkb25seSBBY3Rpb25JZCA9IEFjdGlvbklkO1xuICBzdGF0aWMgcmVhZG9ubHkgREkgPSBtYWtlREkoUXVlcnlQYWdlU3RvcmUsICgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICBzdHlsZTogPGFueT57XG4gICAgICAgIHdpZHRoOiAndmFyKC0tcGFnZS13aWR0aC1sdjIpJyxcbiAgICAgIH0sXG4gICAgICB0aXRsZTogPHN0cmluZz5udWxsLFxuICAgICAgdGl0bGVFZGl0YWJsZTogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuS2V5OiAnY2hpbGRyZW4nIHNhdGlzZmllcyBzdHJpbmcsXG4gICAgICBhZGRpdGlvbmFsTmF2RW5kQWN0aW9uczogPEFjdGlvbltdPltdLFxuICAgICAgbmF2RW5kQWN0aW9uczogPE5hdkFjdGlvbnM+W10sXG4gICAgICBhZGRpdGlvbmFsQ29sdW1uczogKGl0ZW1zOiBvYmplY3RbXSkgPT4gW10gYXMgc3RyaW5nW10sXG4gICAgICBpdGVtQWN0aW9uczogKGl0ZW0gPT4gW3sgaWQ6IFF1ZXJ5UGFnZVN0b3JlLkFjdGlvbklkLkRFVEFJTCwgaWNvbjogJ29wZW5faW5fbmV3JywgbmFtZTogJ+ips+e0sCcsIHBheWxvYWQ6IGl0ZW0gfV0pIGFzIEl0ZW1BY3Rpb25zLFxuICAgICAgcGFnZVNpemVPcHRpb25zOiBbNTAsIDEwMCwgMzAwLCA1MDAsIDEwMDBdLFxuICAgIH0pO1xuICB9LCBbJ0B4eG1hY2hpbmEvY29tcG9uZW50cycsICdwYWdlcycsICdxdWVyeSddKTtcblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXJgIGluc3RlYWQgKi9cbiAgc3RhdGljIHJlYWRvbmx5IEluaXRpYWxpemVyID0gbWFrZUluaXRpYWxpemVyQ29uZmlnKFF1ZXJ5UGFnZVN0b3JlKTtcblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHQoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVDb25maWcoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVEZWZhdWx0SW5pdGlhbGl6ZXMoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVEZWZhdWx0RWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZURlYnVnU3R5bGVJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlGZWF0dXJlLnByb3ZpZGVEZWZhdWx0KCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ3VzdG9tKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlQ29uZmlnKCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEluaXRpYWxpemVzKCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEVmZmVjdHMoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVEZWJ1Z1N0eWxlSW5pdGlhbGl6ZXIoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVOb25FZGl0YWJsZUNvbmZpZygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZVF1ZXJ5RnJvbVJvdXRlRGF0YVF1ZXJ5SWRJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUF1dG9Ub2dnbGVQYWdlSW5pdGlhbGl6ZXIoKSxcbiAgICAgIFF1ZXJ5RmVhdHVyZS5wcm92aWRlRGVmYXVsdCgpLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHRWMigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUN1c3RvbSgpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUuREkuQ29uZmlnLnByb3ZpZGUoKCkgPT4gY29uZmlnID0+ICh7IC4uLmNvbmZpZyB9KSksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlVGl0bGVGcm9tUXVlcnlSZXN1bHRJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZVF1ZXJ5RnJvbVJvdXRlRGF0YUluaXRpYWxpemVyKCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlUGFnaW5hdGlvbkluaXRpYWxpemVyKCksXG4gICAgXTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYHByb3ZpZGVDdXN0b21gIGluc3RlYWQgKi9cbiAgc3RhdGljIHByb3ZpZGVGb3JDdXN0b21QYWdlKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVDdXN0b20oKTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlTm9uRWRpdGFibGVDb25maWcoKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlQ29uZmlnKCgpID0+IHtcbiAgICAgIHJldHVybiBjb25maWcgPT4gKHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICB0aXRsZUVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAuLi5jb25maWcuc3R5bGUsXG4gICAgICAgICAgd2lkdGg6IGB2YXIoLS1wYWdlLXdpZHRoLWx2MylgXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdEluaXRpYWxpemVzKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlQXV0b1RvZ2dsZVBhZ2VJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZVZhcmlhYmxlc0Zvcm1WYWx1ZUZyb21NYXRyaXhQYXJhbXNJbml0aWFsaXplcigpLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZU5hdkVuZEFjdGlvbnNJbml0aWFsaXplcnMoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpY29uID0gc3RvcmUuc3R5bGUoKT8ud2lkdGggPT09ICd2YXIoLS1wYWdlLXdpZHRoLWx2MyknID8gJ2Nsb3NlX2Z1bGxzY3JlZW4nIDogJ29wZW5faW5fZnVsbCc7XG4gICAgICAgICAgY29uc3QgbmF2RW5kQWN0aW9ucyA9IFtcbiAgICAgICAgICAgIGNyZWF0ZUFjdGlvbihRdWVyeUZlYXR1cmUuQWN0aW9uSWQu44Kv44Ko44Oq44Gu5a6f6KGMLCBudWxsLCB7IGljb246ICdwbGF5X2Fycm93JyB9KS5jcmVhdGUoKSxcbiAgICAgICAgICAgIHN0b3JlLnZhcmlhYmxlc0Zvcm1EaXNwbGF5ZWQoKSA/IGNyZWF0ZUFjdGlvbihBY3Rpb25JZC5UT0dHTEVfUEFHRSwgbnVsbCwgeyBpY29uIH0pLmNyZWF0ZSgpIDogbnVsbCxcbiAgICAgICAgICAgIGNyZWF0ZUFjdGlvbihRdWVyeUZlYXR1cmUuQWN0aW9uSWQu44Kv44Ko44Oq44Gu5pu05pawLCBudWxsLCB7IGljb246ICdzYXZlJyB9KS5jcmVhdGUoKSxcbiAgICAgICAgICBdLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICduYXZFbmRBY3Rpb25zJywgbmF2RW5kQWN0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlVmFyaWFibGVzRnJvbVJvdXRlUGFyYW1EYXRhSW5pdGlhbGl6ZXIoKSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVWYXJpYWJsZXNGcm9tUm91dGVQYXJhbURhdGFJbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKHN0b3JlID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdFVuZmxhdHRlblJvdXRlUGFyYW0oJ2RhdGEnKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBzdG9yZS52YXJpYWJsZXNGb3JtVmFsdWUoKTtcbiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZSh2YXJpYWJsZXMsIGRhdGEoKSk7XG4gICAgICAgICAgc3RvcmUuZmVhdHVyZS5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZ3JhcGhxbDoge1xuICAgICAgICAgICAgICB2YXJpYWJsZXNKc29uOiBKU09OLnN0cmluZ2lmeShtZXJnZWQsIG51bGwsIDIpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlVmFyaWFibGVzRnJvbVJvdXRlUGFyYW1Jbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKHN0b3JlID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdFVuZmxhdHRlblJvdXRlUGFyYW0oKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBzdG9yZS52YXJpYWJsZXNGb3JtVmFsdWUoKTtcbiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZSh2YXJpYWJsZXMsIGRhdGEoKSk7XG4gICAgICAgICAgc3RvcmUuZmVhdHVyZS5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZ3JhcGhxbDoge1xuICAgICAgICAgICAgICB2YXJpYWJsZXNKc29uOiBKU09OLnN0cmluZ2lmeShtZXJnZWQsIG51bGwsIDIpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQXV0b1RvZ2dsZVBhZ2VJbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvdmlkZUVmZmVjdChSb3V0ZXJPdXRsZXRGcmFtZVN0b3JlLkFjdGlvbklkLkRFQUNUSVZBVEVELCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KFF1ZXJ5UGFnZVN0b3JlKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb21wdXRlRmFrZShzdG9yZS5zdHlsZSgpKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdzdHlsZScsIHsgLi4uc3R5bGUsIHBhZGRpbmdMZWZ0OiBgMGAgfSk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb21wdXRlRmFrZShzdG9yZS5zdHlsZSgpKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBpZiAoaGFzTmV4dCgpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN0eWxlLndpZHRoID09PSAndmFyKC0tcGFnZS13aWR0aC1sdjMpJykge1xuICAgICAgICAgICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ3N0eWxlJywge1xuICAgICAgICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJ3ZhcigtLXBhZ2Utd2lkdGgtbHYxKScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVZhcmlhYmxlc0Zvcm1WYWx1ZUZyb21NYXRyaXhQYXJhbXNJbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKChzdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gaW5qZWN0VW5mbGF0dGVuUm91dGVQYXJhbSgnZGF0YScpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIHN0b3JlLnZhcmlhYmxlc0Zvcm0oKT8ucGF0Y2hWYWx1ZSh7IC4uLmRhdGEoKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdXG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVF1ZXJ5RnJvbVJvdXRlRGF0YVF1ZXJ5SWRJbml0aWFsaXplcihrZXkgPSAncXVlcnlJZCcpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKChzdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGluamVjdE9uZShRdWVyeSwgeyBpZDogaW5qZWN0Um91dGVEYXRhPHN0cmluZz4oa2V5KSB9KTtcbiAgICAgICAgY29uc3QgX3F1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBxdWVyeSgpO1xuICAgICAgICB9LCB7IGVxdWFsOiAocHJlLCBjdXIpID0+IEpTT04uc3RyaW5naWZ5KHByZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cikgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbUXVlcnlQYWdlU3RvcmVdIHF1ZXJ5OicsIF9xdWVyeSgpKTtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdxdWVyeScsIF9xdWVyeSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVRdWVyeUZyb21Sb3V0ZURhdGFJbml0aWFsaXplcihrZXkgPSAncXVlcnknKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbmplY3RSb3V0ZURhdGE8UXVlcnk+KGtleSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiBhcHBseVRvSW5wdXQoc3RvcmUsICdxdWVyeScsIHF1ZXJ5KCkpKTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1BY3Rpb25zRnJvbVJvdXRlRGF0YUluaXRpYWxpemVyKGtleSA9ICdpdGVtQWN0aW9uc0NvbW1hbmRJZHMnKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXIoKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBpZE9yT2JqZWN0QXJyYXkgPSBpbmplY3RSb3V0ZURhdGE8c3RyaW5nW10gfCB7IGlkOiBzdHJpbmcsIG9wdGlvbnM6IHsgcXVlcnlJZCB9IH1bXT4oa2V5KTtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29tbWFuZFNlcnZpY2UpO1xuICAgICAgY29uc3QgaXRlbUFjdGlvbnM6IEl0ZW1BY3Rpb25zID0gKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gKGlkT3JPYmplY3RBcnJheSgpID8/IFtdKS5tYXAoKGlkT3JPYmplY3QpID0+ICh7XG4gICAgICAgICAgaWQ6IHR5cGVvZiBpZE9yT2JqZWN0ID09PSAnc3RyaW5nJyA/IGlkT3JPYmplY3QgOiBpZE9yT2JqZWN0LmlkLFxuICAgICAgICAgIG9wdGlvbnM6IHR5cGVvZiBpZE9yT2JqZWN0ID09PSAnc3RyaW5nJyA/IHt9IDogaWRPck9iamVjdC5vcHRpb25zLFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBzZXJ2aWNlLmdldEFjdGlvbkJ1aWxkZXIoKS5zZXRJdGVtKGl0ZW0pO1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gcGFyYW1zLm1hcChwYXJhbSA9PiBidWlsZGVyLnNldE9wdGlvbnMocGFyYW0ub3B0aW9ucykuYnVpbGRBY3Rpb24ocGFyYW0uaWQpKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnYWN0aW9uczonLCBhY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgICB9XG4gICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdpdGVtQWN0aW9ucycsIGl0ZW1BY3Rpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlTmF2RW5kQWN0aW9uc0Zyb21Sb3V0ZURhdGFJbml0aWFsaXplcihrZXkgPSAnbmF2RW5kQWN0aW9uc0NvbW1hbmRJZHMnKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXIoKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBpbmplY3RSb3V0ZURhdGE8KHN0cmluZyB8IHsgaWQ6IHN0cmluZywgYXV0bzogYm9vbGVhbiB9KVtdPihrZXkpO1xuICAgICAgY29uc3QgcXVlcnlJZCA9IGluamVjdFJvdXRlRGF0YTxzdHJpbmc+KCduYXZFbmRBY3Rpb25zQ29tbWFuZFF1ZXJ5SWQnKTtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29tbWFuZFNlcnZpY2UpO1xuICAgICAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKVxuXG4gICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gc2VydmljZS5nZXRBY3Rpb25CdWlsZGVyKCkuc2V0RmlsdGVySWRzKGlkcygpKS5zZXRPcHRpb25zKHsgcXVlcnlJZDogcXVlcnlJZCgpIH0pLmJ1aWxkQWN0aW9ucyh1bmRlZmluZWQsIHsgcmVsYXRpdmVUbzogcm91dGUsIHJlcGxhY2VVcmw6IGhhc05leHQoKSB9KTtcbiAgICAgICAgYXBwbHlUb0lucHV0KHN0b3JlLCAnbmF2RW5kQWN0aW9ucycsIFtcbiAgICAgICAgICBzdG9yZS52YXJpYWJsZXNGb3JtRGlzcGxheWVkKCkgPyB7IGlkOiBBY3Rpb25JZC5UT0dHTEVfVkFSSUFCTEVTX0ZPUk0sIGljb246IHN0b3JlLm5hdk1vZGUoKSA9PT0gJ2NvbGxhcHNlZCcgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9IDogbnVsbCxcbiAgICAgICAgICAvLyBUT0RPKEBOb3pvbXVNaXlhbW90byk6IOWkieabtFxuICAgICAgICAgIGFjdGlvbnM/Lmxlbmd0aCA/IHtcbiAgICAgICAgICAgIGlkOiAnb3Blbl9jb21tYW5kX21lbnUnLFxuICAgICAgICAgICAgaWNvbjogJ21vcmVfdmVydCcsXG4gICAgICAgICAgICBjaGlsZHJlbjogWy4uLmFjdGlvbnNdLFxuICAgICAgICAgIH0gOiBudWxsLFxuICAgICAgICBdLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdEVmZmVjdHMoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVDb21tYW5kRWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZU5hdk1vZGVUb2dnbGVFZmZlY3QoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVDaGFuZ2VXaWR0aEVmZmVjdCgpLFxuICAgICAgUXVlcnlGZWF0dXJlLnByb3ZpZGVEZWZhdWx0RWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZU5hdmlnYXRlRWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUVkaXRpbmdTdGF0ZUVmZmVjdHMoKSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVFZGl0aW5nU3RhdGVFZmZlY3RzKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBwcm92aWRlRWZmZWN0KFZhbHVlQ2VsbEF0b21TdG9yZS5BY3Rpb25JZC5TVEFSVF9FRElULCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRpbmdTdGF0ZU1hbmFnZXIgPSBpbmplY3QoRWRpdGluZ1N0YXRlTWFuYWdlcik7XG4gICAgICAgIHJldHVybiAocGF5bG9hZDogeyByb3dJZDogc3RyaW5nOyBjb2x1bW5JZDogc3RyaW5nOyBpdGVtPzogYW55IH0pID0+IHtcbiAgICAgICAgICBlZGl0aW5nU3RhdGVNYW5hZ2VyLnN0YXJ0RWRpdGluZyhwYXlsb2FkLnJvd0lkLCBwYXlsb2FkLmNvbHVtbklkKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgcHJvdmlkZUVmZmVjdChWYWx1ZUNlbGxBdG9tU3RvcmUuQWN0aW9uSWQuRU5EX0VESVQsICgpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdGluZ1N0YXRlTWFuYWdlciA9IGluamVjdChFZGl0aW5nU3RhdGVNYW5hZ2VyKTtcbiAgICAgICAgcmV0dXJuIChwYXlsb2FkPzogeyByb3dJZD86IHN0cmluZzsgY29sdW1uSWQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWRpdGluZ1N0YXRlTWFuYWdlci5zdG9wRWRpdGluZyhwYXlsb2FkLnJvd0lkLCBwYXlsb2FkLmNvbHVtbklkKSwgMCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVDb21tYW5kRWZmZWN0cygpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUNvbW1hbmRFeGVjdXRlRWZmZWN0KCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlQ29tbWFuZE5hdmlnYXRlRWZmZWN0KCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ29tbWFuZEV4ZWN1dGVFZmZlY3QoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3ZpZGVFZmZlY3QoQ29tbWFuZFNlcnZpY2UuQWN0aW9uSWQuRVhFQ1VURV9DT01NQU5ELCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRTZXJ2aWNlID0gaW5qZWN0KENvbW1hbmRTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChwYXlsb2FkOiBDb21tYW5kQWN0aW9uUGF5bG9hZDxhbnk+KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgICAgIGNvbnN0IG9iaiA9IG9taXRCeShwYXlsb2FkLmJvZHksICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBpbmplY3QoQ29tbWFuZFNlcnZpY2UpLmdldENvbW1hbmQocGF5bG9hZC5jb21tYW5kLmlkKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbUXVlcnlQYWdlXSBwYXlsb2FkOicsIHBheWxvYWQpO1xuICAgICAgICAgIGlmIChwYXlsb2FkLm9wdGlvbnM/LmNvbmZpcm0gJiYgIShhd2FpdCBwYXlsb2FkLm9wdGlvbnM/LmNvbmZpcm0oKSkpIHtcbiAgICAgICAgICAgIGFwcC5zbmFja0Jhci5vcGVuKCfjgq3jg6Pjg7Pjgrvjg6vjgZXjgozjgb7jgZfjgZ/jgIInKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBwLmxvYWRpbmcuYXdhaXQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRTZXJ2aWNlLmV4ZWN1dGUoY29tbWFuZCwgb2JqKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBwLnNuYWNrQmFyLm9wZW4oJ+aIkOWKn+OBl+OBvuOBl+OBn+OAgicpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICBhcHAuc25hY2tCYXIub3Blbihg44Ko44Op44O8OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUNvbW1hbmROYXZpZ2F0ZUVmZmVjdCgpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvdmlkZUVmZmVjdChDb21tYW5kU2VydmljZS5BY3Rpb25JZC5OQVZJR0FURV9UT19DT01NQU5EX1BBR0UsICgpID0+IHtcbiAgICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIGNvbnN0IGhhc05leHQgPSBpbmplY3RIYXNOZXh0KCk7XG4gICAgICAgIHJldHVybiAocGF5bG9hZDogQ29tbWFuZEFjdGlvblBheWxvYWQ8YW55PikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsYXQgPSBmbGF0dGVuPG9iamVjdCwgb2JqZWN0Pih7IGRhdGE6IHsgaWQ6IHBheWxvYWQuYm9keT8uaWQgfSwgcXVlcnlJZDogcGF5bG9hZD8ub3B0aW9ucz8ucXVlcnlJZCB9KTtcbiAgICAgICAgICBjb25zdCBfZmxhdCA9IG9taXRCeShmbGF0LCAodmFsdWUpID0+IHZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgIGFwcC5yb3V0ZXIubmF2aWdhdGUoWydjb21tYW5kcycsIHsgc2tpcDogdHJ1ZSB9LCBwYXlsb2FkLmNvbW1hbmQuaWQsIF9mbGF0XSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogcm91dGUsXG4gICAgICAgICAgICByZXBsYWNlVXJsOiBoYXNOZXh0KCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIF1cbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlTmF2TW9kZVRvZ2dsZUVmZmVjdCgpOiBQcm92aWRlciB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoQWN0aW9uSWQuVE9HR0xFX1ZBUklBQkxFU19GT1JNLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IGluamVjdChRdWVyeVBhZ2VTdG9yZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdG9yZS5uYXZNb2RlLnNldChzdG9yZS5uYXZNb2RlKCkgPT09ICdjb2xsYXBzZWQnID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnKTtcbiAgICAgIH07XG4gICAgfSwgeyBzY29wZXM6IFsncm9vdCcsICdob3N0J10gfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZU5hdkVuZEFjdGlvbnNJbml0aWFsaXplcigpOiBQcm92aWRlciB7XG4gICAgcmV0dXJuIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IG5hdkVuZEFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgICAgIHN0b3JlLnZhcmlhYmxlc0Zvcm1EaXNwbGF5ZWQoKSA/IHsgXG4gICAgICAgICAgaWQ6IEFjdGlvbklkLlRPR0dMRV9WQVJJQUJMRVNfRk9STSwgXG4gICAgICAgICAgaWNvbjogc3RvcmUubmF2TW9kZSgpID09PSAnY29sbGFwc2VkJyA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIFxuICAgICAgICB9IDogbnVsbCxcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pKTtcblxuICAgICAgZWZmZWN0KCgpID0+IGFwcGx5VG9JbnB1dChzdG9yZSwgJ25hdkVuZEFjdGlvbnMnLCBbXG4gICAgICAgIC4uLm5hdkVuZEFjdGlvbnMoKSxcbiAgICAgICAgLi4uc3RvcmUuYWRkaXRpb25hbE5hdkVuZEFjdGlvbnMoKVxuICAgICAgXSkpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVDaGFuZ2VXaWR0aEVmZmVjdCgpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvdmlkZUVmZmVjdChJbmRleFRlbXBsYXRlU3RvcmUuQWN0aW9uSWQuVEFCTEVfQ09MVU1OX1dJRFRIX0NIQU5HRSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZSA9IGluamVjdChRdWVyeVBhZ2VTdG9yZSk7XG4gICAgICAgIHJldHVybiAocGF5bG9hZDogeyBjb2x1bW5OYW1lOiBzdHJpbmcsIGtleTogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtID0gc3RvcmUuaXRlbXNNYXAoKT8uW3BheWxvYWQua2V5XT8uZm9ybSB8fCBzdG9yZS5mb3JtKCk7XG4gICAgICAgICAgZm9ybS5wYXRjaFZhbHVlKHsgY29sdW1uczogeyBtYXA6IHsgW3BheWxvYWQuY29sdW1uTmFtZV06IHsgd2lkdGg6IHBheWxvYWQud2lkdGggfSB9IH0gfSk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVOYXZpZ2F0ZUVmZmVjdHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3ZpZGVFZmZlY3QoUXVlcnlQYWdlU3RvcmUuQWN0aW9uSWQuQURELCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcCA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgZXh0cmFzID0gaW5qZWN0TmF2aWdhdGlvbkV4dHJhcygpO1xuICAgICAgICByZXR1cm4gKGl0ZW0pID0+IGFwcC5yb3V0ZXIubmF2aWdhdGUoWyduZXcnXSwgZXh0cmFzKCkpO1xuICAgICAgfSksXG4gICAgICBwcm92aWRlRWZmZWN0KFF1ZXJ5UGFnZVN0b3JlLkFjdGlvbklkLkRFVEFJTCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBhcHAgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gICAgICAgIGNvbnN0IGV4dHJhcyA9IGluamVjdE5hdmlnYXRpb25FeHRyYXMoKTtcbiAgICAgICAgcmV0dXJuIChpdGVtKSA9PiBhcHAucm91dGVyLm5hdmlnYXRlKFtpdGVtLmlkXSwgZXh0cmFzKCkpO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlUGFnaW5hdGlvbkluaXRpYWxpemVyKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXIoKHN0b3JlKSA9PiB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IHN0b3JlLmNvbHVtbk5hbWVzKCk7XG4gICAgICAgICAgY29uc3Qgc3RpY2t5ID0gc3RvcmUuc3RpY2t5KCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZCgoKSA9PiBzdG9yZS5mb3JtKCkpPy52YWx1ZTtcbiAgICAgICAgICBjb25zdCBmb3JtID0gc3RvcmUuaW5kZXhGb3JtQnVpbGRlci5idWlsZCh7XG4gICAgICAgICAgICBjb2x1bW5zOiBidWlsZENvbHVtbnMoWy4uLmNvbHVtbnMsICdfX2FjdGlvbnMnXSwgc3RpY2t5KSxcbiAgICAgICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAgICAgc2l6ZTogY3VycmVudD8ucGFnZT8uc2l6ZSA/PyAxMDAsXG4gICAgICAgICAgICAgIGluZGV4OiBjdXJyZW50Py5wYWdlPy5pbmRleCA/PyAwLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ2Zvcm0nLCBmb3JtKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IGRlcml2ZWRBc3luYygoKSA9PiBnZXRWYWx1ZSQoc3RvcmUuZm9ybSgpLmdldChbJ3BhZ2UnXSkpLCB7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlOiB7IGluZGV4OiAwLCBzaXplOiAxMDAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBfcGFnZSA9IHBhZ2UoKSB8fCB7IGluZGV4OiAwLCBzaXplOiAxMDAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2Zmc2V0OiBfcGFnZS5pbmRleCAqIF9wYWdlLnNpemUsXG4gICAgICAgICAgICBsaW1pdDogX3BhZ2Uuc2l6ZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgX3BhZ2luYXRpb24gPSBwYWdpbmF0aW9uKCk7XG4gICAgICAgICAgc3RvcmUudmFyaWFibGVzRm9ybSgpPy5wYXRjaFZhbHVlKF9wYWdpbmF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVUYWJsZUNlbGxWYWx1ZUNoYW5nZUVmZmVjdDxUID0gYW55PihcbiAgICBoYW5kbGVyRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gKFxuICAgICAgY2hhbmdlOiBUYWJsZUNlbGxWYWx1ZUNoYW5nZTxUPiwgXG4gICAgICBzZXRWYWx1ZTogKHZhbHVlOiBhbnkpID0+IHZvaWRcbiAgICApID0+IHZvaWQsXG4gICAgb3B0aW9uc09yQ29sdW1ucz86IFRhYmxlQ2VsbENoYW5nZU9wdGlvbnM8VD4gfCAoa2V5b2YgVClbXSxcbiAgKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KFZhbHVlQ2VsbEF0b21TdG9yZS5BY3Rpb25JZC5VUERBVEVfVkFMVUUsIChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgIC8vIOW+jOaWueS6kuaPm+aAp+OBruOBn+OCgeOBruOCquODl+OCt+ODp+ODs+ato+imj+WMllxuICAgICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnM6IFRhYmxlQ2VsbENoYW5nZU9wdGlvbnM8VD4gPSBBcnJheS5pc0FycmF5KG9wdGlvbnNPckNvbHVtbnMpIFxuICAgICAgICA/IHsgY29sdW1uczogb3B0aW9uc09yQ29sdW1ucyB9XG4gICAgICAgIDogKG9wdGlvbnNPckNvbHVtbnMgfHwge30pO1xuICAgICAgXG4gICAgICAvLyDjg4fjg5Xjgqnjg6vjg4jjga7mr5TovIPplqLmlbBcbiAgICAgIGNvbnN0IGRlZmF1bHRFcXVhbHMgPSAoY3VycmVudDogYW55LCBuZXh0OiBhbnkpID0+IGN1cnJlbnQgPT09IG5leHQ7XG4gICAgICBjb25zdCBlcXVhbHNGbiA9IG5vcm1hbGl6ZWRPcHRpb25zLmVxdWFscyB8fCBkZWZhdWx0RXF1YWxzO1xuICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJGYWN0b3J5KGluamVjdG9yKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIChhY3Rpb246IFVwZGF0ZVZhbHVlUGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRleHQsIG5leHQsIGN1cnJlbnQsIHNldFZhbHVlIH0gPSBhY3Rpb247XG4gICAgICAgIGNvbnN0IG5hbWUgPSBjb250ZXh0Lm5hbWUgYXMga2V5b2YgVDtcbiAgICAgICAgXG4gICAgICAgIC8vIOODleOCo+ODvOODq+ODieODleOCo+ODq+OCv+ODquODs+OCsFxuICAgICAgICBpZiAobm9ybWFsaXplZE9wdGlvbnMuY29sdW1ucyAmJiBub3JtYWxpemVkT3B0aW9ucy5jb2x1bW5zLmxlbmd0aCA+IDAgJiYgIW5vcm1hbGl6ZWRPcHRpb25zLmNvbHVtbnMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIOWApOOBruavlOi8g1xuICAgICAgICBpZiAoZXF1YWxzRm4oY3VycmVudCwgbmV4dCwgbmFtZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgICAgLy8g5YCk44GM5ZCM44GY5aC05ZCI44Gv5Yem55CG44KS44K544Kt44OD44OXXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBUYWJsZUNlbGxWYWx1ZUNoYW5nZeOCquODluOCuOOCp+OCr+ODiOOBruS9nOaIkFxuICAgICAgICBjb25zdCBjaGFuZ2U6IFRhYmxlQ2VsbFZhbHVlQ2hhbmdlPFQ+ID0ge1xuICAgICAgICAgIGl0ZW06IGNvbnRleHQuaXRlbSxcbiAgICAgICAgICBuYW1lOiBuYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgICAgIG5leHQ6IG5leHQsXG4gICAgICAgICAgcm93SW5kZXg6IGNvbnRleHQucG9zaXRpb24/LnJvdyA/PyAwLFxuICAgICAgICAgIGNvbHVtbklkOiBjb250ZXh0Lm5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8g44OP44Oz44OJ44Op44O844Gu5a6f6KGMXG4gICAgICAgIGhhbmRsZXIoY2hhbmdlLCBzZXRWYWx1ZSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVUYWJsZUF1dG9maWxsRWZmZWN0PFQgPSBhbnk+KFxuICAgIGhhbmRsZXJGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoXG4gICAgICBhdXRvZmlsbDogVGFibGVBdXRvZmlsbENoYW5nZTxUPlxuICAgICkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICk6IFByb3ZpZGVyIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChUYWJsZU9yZ2FuaXNtLkFjdGlvbklkLkFVVE9GSUxMX0NPTVBMRVRFLCAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlckZhY3RvcnkoaW5qZWN0b3IpO1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoUXVlcnlQYWdlU3RvcmUpO1xuICAgICAgXG4gICAgICByZXR1cm4gYXN5bmMgKHBheWxvYWQ6IHsgc291cmNlUG9zaXRpb246IGFueTsgdGFyZ2V0UmFuZ2U6IGFueTsgY29udGV4dHM/OiBhbnkgfSkgPT4ge1xuICAgICAgICAvLyBUYWJsZU9yZ2FuaXNt44GL44KJ5rih44GV44KM44Gf44Kz44Oz44OG44Kt44K544OI5oOF5aCx44KS5L2/55SoXG4gICAgICAgIGlmICghcGF5bG9hZC5jb250ZXh0cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTm8gYXV0b2ZpbGwgY29udGV4dHMgcHJvdmlkZWQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHsgc291cmNlQ29udGV4dCwgdGFyZ2V0Q29udGV4dHMgfSA9IHBheWxvYWQuY29udGV4dHM7XG4gICAgICAgIGNvbnN0IHNvdXJjZUl0ZW0gPSBzb3VyY2VDb250ZXh0Lml0ZW0gYXMgVDtcbiAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHNvdXJjZUNvbnRleHQubmFtZTtcbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSAoc291cmNlSXRlbSBhcyBhbnkpW2NvbHVtbk5hbWVdO1xuICAgICAgICBcbiAgICAgICAgLy8g5b2x6Z+/44KS5Y+X44GR44KL44Ki44Kk44OG44Og44KS5Y+O6ZuG77yI6KGo56S644GV44KM44Gm44GE44KL44K744Or44Gu44G/77yJXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkSXRlbXM6IEFycmF5PHsgaXRlbTogVDsgbmV3VmFsdWU6IGFueTsgcm93SW5kZXg6IG51bWJlciB9PiA9IFtdO1xuICAgICAgICBcbiAgICAgICAgdGFyZ2V0Q29udGV4dHMuZm9yRWFjaCgoeyBwb3NpdGlvbiwgY29udGV4dCB9OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRJdGVtID0gY29udGV4dC5pdGVtIGFzIFQ7XG4gICAgICAgICAgLy8g5YCk44Gu55Sf5oiQXG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gc291cmNlVmFsdWU7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8g5pWw5YCk44Gu6YCj55WqXG4gICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc291cmNlVmFsdWUgKyBpbmRleCArIDE7XG4gICAgICAgICAgfSBcbiAgICAgICAgICAvLyDmloflrZfliJfjg5Hjgr/jg7zjg7NcbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVNYXRjaCA9IHNvdXJjZVZhbHVlLm1hdGNoKC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KSQvKTtcbiAgICAgICAgICAgICAgaWYgKGRhdGVNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGUgPSBuZXcgRGF0ZShkYXRlTWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShzb3VyY2VEYXRlKTtcbiAgICAgICAgICAgICAgICBuZXdEYXRlLnNldERhdGUoc291cmNlRGF0ZS5nZXREYXRlKCkgKyBpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbmV3RGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYWZmZWN0ZWRJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGl0ZW06IHRhcmdldEl0ZW0sXG4gICAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBwb3NpdGlvbi5yb3dcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyDjgqrjg7zjg4jjg5XjgqPjg6vjga7lpInmm7Tmg4XloLHjgpLkvZzmiJBcbiAgICAgICAgY29uc3QgYXV0b2ZpbGxDaGFuZ2U6IFRhYmxlQXV0b2ZpbGxDaGFuZ2U8VD4gPSB7XG4gICAgICAgICAgc291cmNlSXRlbSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIGNvbHVtbkluZGV4OiBwYXlsb2FkLnNvdXJjZVBvc2l0aW9uLmNvbCxcbiAgICAgICAgICBhZmZlY3RlZEl0ZW1zLFxuICAgICAgICAgIHJhbmdlOiBwYXlsb2FkLnRhcmdldFJhbmdlXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyDjg4/jg7Pjg4njg6njg7zjgpLlrp/ooYxcbiAgICAgICAgYXdhaXQgaGFuZGxlcihhdXRvZmlsbENoYW5nZSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVEZWJ1Z1N0eWxlSW5pdGlhbGl6ZXIoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgZGVidWcgPSBpbmplY3QoTWFjaGluYURldlNlcnZpY2UpXG4gICAgICAgIGNvbnN0IGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpXG4gICAgICAgIGVmZmVjdCgoKSA9PiBlbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWlzLWRlYnVnJywgZGVidWcuaXNEZXZNb2RlKCkgPyAnMScgOiAnMCcpKTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVRpdGxlRnJvbVF1ZXJ5UmVzdWx0SW5pdGlhbGl6ZXIoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgZWZmZWN0KCgpID0+IGFwcGx5VG9JbnB1dChzdG9yZSwgJ3RpdGxlJywgc3RvcmUuZmVhdHVyZS5yZXN1bHQoKT8uX19tZXRhX18/LnRpdGxlKSk7XG4gICAgICB9KSxcbiAgICBdXG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnID0gUXVlcnlQYWdlU3RvcmUuREkuaW5qZWN0Q29uZmlnKCk7XG4gIHJlYWRvbmx5IGZlYXR1cmUgPSBpbmplY3QoUXVlcnlGZWF0dXJlKTtcbiAgcmVhZG9ubHkgdmFyaWFibGVzRm9ybUZlYXR1cmUgPSBpbmplY3QoUXVlcnlHcmFwaHFsVmFyaWFibGVzRm9ybUZlYXR1cmUpO1xuICByZWFkb25seSBpbmRleEZvcm1CdWlsZGVyID0gaW5qZWN0SW5kZXhGb3JtQnVpbGRlcigpO1xuXG4gIHJlYWRvbmx5IG5hdk1vZGUgPSBzaWduYWw8J2V4cGFuZGVkJyB8ICdjb2xsYXBzZWQnPignY29sbGFwc2VkJyk7XG4gIHJlYWRvbmx5IGVkaXRpbmdTdGF0ZU1hbmFnZXIgPSBpbmplY3QoRWRpdGluZ1N0YXRlTWFuYWdlcik7XG4gIHJlYWRvbmx5IHN0eWxlID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuc3R5bGUpKTtcbiAgcmVhZG9ubHkgcXVlcnkgPSBpbnB1dDxRdWVyeT4obnVsbCk7XG5cbiAgcmVhZG9ubHkgI25hdlN0YXJ0QWN0aW9ucyA9IGluamVjdE5hdlN0YXJ0QWN0aW9uc1YyKCk7XG4gIHJlYWRvbmx5IG5hdlN0YXJ0QWN0aW9ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLiNuYXZTdGFydEFjdGlvbnMoKSkpO1xuICByZWFkb25seSBhZGRpdGlvbmFsTmF2RW5kQWN0aW9ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmFkZGl0aW9uYWxOYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IG5hdkVuZEFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5uYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50eXBlKSk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPihfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50aXRsZSA/PyB0aGlzLnF1ZXJ5KCk/LnRpdGxlKSk7XG4gIHJlYWRvbmx5IHRpdGxlRWRpdGFibGUgPSBpbnB1dDxib29sZWFuPihfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50aXRsZUVkaXRhYmxlKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IGJ1aWxkSXRlbXNNYXBGcm9tUmVzdWx0KHRoaXMuZmVhdHVyZS5yZXN1bHQoKSkpKTtcbiAgcmVhZG9ubHkgaXRlbXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLml0ZW1zTWFwKClbT2JqZWN0LmtleXModGhpcy5pdGVtc01hcCgpKVswXV0/Lml0ZW1zID8/IFtdKTtcbiAgcmVhZG9ubHkgaXRlbXNMZW5ndGggPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5pdGVtc01hcCgpW09iamVjdC5rZXlzKHRoaXMuaXRlbXNNYXAoKSlbMF1dPy5pdGVtc0xlbmd0aCA/PyAwKSk7XG4gIHJlYWRvbmx5IGNoaWxkcmVuS2V5ID0gaW5wdXQ8c3RyaW5nPihfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5jaGlsZHJlbktleSkpO1xuICByZWFkb25seSBhZGRpdGlvbmFsQ29sdW1ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmFkZGl0aW9uYWxDb2x1bW5zKSlcbiAgcmVhZG9ubHkgYWRkaXRpb25hbENvbHVtbk5hbWVzID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuYWRkaXRpb25hbENvbHVtbnMoKSh0aGlzLml0ZW1zKCkpKSk7XG4gIHJlYWRvbmx5IGV4dHJhY3RlZENvbHVtbk5hbWVzID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IFF1ZXJ5SGVscGVyLmV4dHJhY3RDb2x1bW5OYW1lcyh0aGlzLml0ZW1zKCksIHRoaXMuY2hpbGRyZW5LZXkoKSkpKTtcbiAgcmVhZG9ubHkgY29sdW1uTmFtZXMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gWy4uLnRoaXMuZXh0cmFjdGVkQ29sdW1uTmFtZXMoKSwgLi4udGhpcy5hZGRpdGlvbmFsQ29sdW1uTmFtZXMoKV0pKTtcbiAgcmVhZG9ubHkgc3RpY2t5ID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+ICh7IHN0aWNreVN0YXJ0OiAyLCBzdGlja3lFbmQ6IDEgfSkpKTtcbiAgcmVhZG9ubHkgZm9ybSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmluZGV4Rm9ybUJ1aWxkZXIuYnVpbGQoe1xuICAgIGNvbHVtbnM6IGJ1aWxkQ29sdW1ucyhbLi4udGhpcy5jb2x1bW5OYW1lcygpLCAnX19hY3Rpb25zJ10sIHRoaXMuc3RpY2t5KCkpLFxuICB9KSkpO1xuICByZWFkb25seSBpdGVtQWN0aW9ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1BY3Rpb25zKSk7XG4gIHJlYWRvbmx5IHRhYmxlVHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPGFueT4obiA9PiBuLmxldmVsLCBuID0+IG4uaXNFeHBhbmRhYmxlLCB7IHRyYWNrQnk6IChuOiBhbnkpID0+IG4/LmlkID8/IG4gfSk7XG4gIHJlYWRvbmx5IHZhcmlhYmxlc0Zvcm0gPSBpbnB1dChfY29tcHV0ZWQ8Rm9ybUdyb3VwPigoKSA9PiB0aGlzLnZhcmlhYmxlc0Zvcm1GZWF0dXJlLnZhcmlhYmxlc0Zvcm0oKSA/PyBuZXcgRm9ybUdyb3VwKHt9KSkpO1xuICByZWFkb25seSB2YXJpYWJsZXNGb3JtRmllbGRNYXAgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gKHt9IGFzIEZvcm1GaWVsZE1hcCkpKTtcbiAgcmVhZG9ubHkgdmFyaWFibGVzRm9ybVZhbHVlID0gZGVyaXZlZEFzeW5jKCgpID0+IGdldFJhd1ZhbHVlJCh0aGlzLnZhcmlhYmxlc0Zvcm0oKSksIHsgZXF1YWw6IGlzRXF1YWwgfSk7XG4gIHJlYWRvbmx5IHZhcmlhYmxlc0Zvcm1WYWx1ZSQgPSB0b09ic2VydmFibGUodGhpcy52YXJpYWJsZXNGb3JtVmFsdWUpO1xuICByZWFkb25seSB2YXJpYWJsZXNGb3JtRGlzcGxheWVkID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMudmFyaWFibGVzRm9ybUZlYXR1cmUudmFyaWFibGVzVmFsdWUoKSk/Lmxlbmd0aCA+IDApKTtcbiAgcmVhZG9ubHkgdGFibGVDb2x1bW5Gb3JtRmllbGRNYXAgPSBpbnB1dDxGb3JtRmllbGRNYXA+KF9jb21wdXRlZCgoKSA9PiAoe30pKSk7XG4gIHJlYWRvbmx5IGdldFJvd0NsYXNzID0gaW5wdXQ8KGl0ZW06IGFueSkgPT4gc3RyaW5nPihfY29tcHV0ZWQoKCkgPT4gKCkgPT4gJycpKTtcbiAgcmVhZG9ubHkgc2tpcCA9IGluamVjdFJvdXRlU2tpcCgpO1xuICByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5wYWdlU2l6ZU9wdGlvbnMpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLmluaXRpYWxpemUodGhpcyk7XG4gICAgZWZmZWN0KCgpID0+IHRoaXMuZmVhdHVyZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5xdWVyeSgpKSk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGFnZXMtcXVlcnknLFxuICBpbXBvcnRzOiBbXG4gICAgSW5kZXhUZW1wbGF0ZSxcbiAgICBSb3V0ZXJPdXRsZXRGcmFtZSxcbiAgICBOZ0F0b21pY0Zvcm1TZWN0aW9uQnVpbGRlcixcbiAgICBRdWVyeUZvcm1Hcm91cCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZnJhbWVzLXJvdXRlci1vdXRsZXQgW3NraXBdPVwic3RvcmUuc2tpcCgpXCIgKGFjdGlvbik9XCJkaXNwYXRjaCgkZXZlbnQpXCI+XG4gICAgICA8dGVtcGxhdGVzLWluZGV4XG4gICAgICAgIFt0YWJsZUNvbHVtbkZvcm1GaWVsZE1hcF09XCJzdG9yZS50YWJsZUNvbHVtbkZvcm1GaWVsZE1hcCgpXCJcbiAgICAgICAgW3N0eWxlXT1cInN0b3JlLnN0eWxlKClcIlxuICAgICAgICBbdGl0bGVdPVwic3RvcmUudGl0bGUoKVwiXG4gICAgICAgIFt0aXRsZUNvbnRyb2xdPVwic3RvcmUuZmVhdHVyZS5mb3JtLmdldChbJ3RpdGxlJ10pXCJcbiAgICAgICAgW3RpdGxlRWRpdGFibGVdPVwic3RvcmUudGl0bGVFZGl0YWJsZSgpXCJcbiAgICAgICAgW3R5cGVdPVwic3RvcmUudHlwZSgpXCJcbiAgICAgICAgW3RhYmxlQ2hpbGRyZW5LZXldPVwic3RvcmUuY2hpbGRyZW5LZXkoKVwiXG4gICAgICAgIFt0YWJsZVRyZWVDb250cm9sXT1cInN0b3JlLnRhYmxlVHJlZUNvbnRyb2xcIlxuICAgICAgICBbaXRlbXNNYXBdPVwic3RvcmUuaXRlbXNNYXAoKVwiXG4gICAgICAgIFtpdGVtc0xlbmd0aF09XCJzdG9yZS5pdGVtc0xlbmd0aCgpXCJcbiAgICAgICAgW2l0ZW1BY3Rpb25zXT1cInN0b3JlLml0ZW1BY3Rpb25zKClcIlxuICAgICAgICBbZ2V0Um93Q2xhc3NdPVwic3RvcmUuZ2V0Um93Q2xhc3MoKVwiXG4gICAgICAgIFtmb3JtXT1cInN0b3JlLmZvcm0oKVwiXG4gICAgICAgIFtuYXZTdGFydEFjdGlvbnNdPVwic3RvcmUubmF2U3RhcnRBY3Rpb25zKClcIlxuICAgICAgICBbbmF2RW5kQWN0aW9uc109XCJzdG9yZS5uYXZFbmRBY3Rpb25zKClcIlxuICAgICAgICBbbmF2TW9kZV09XCJzdG9yZS5uYXZNb2RlKClcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInN0b3JlLnBhZ2VTaXplT3B0aW9ucygpXCJcbiAgICAgICAgKGFjdGlvbik9XCJkaXNwYXRjaCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChzdG9yZS52YXJpYWJsZXNGb3JtRGlzcGxheWVkKCkpIHtcbiAgICAgICAgICA8ZGl2IG5hdkRhc2hib2FyZD5cbiAgICAgICAgICAgIDxuZy1hdG9taWMtZm9ybS1zZWN0aW9uLWJ1aWxkZXJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwic3RvcmUudmFyaWFibGVzRm9ybSgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkTWFwXT1cInN0b3JlLnZhcmlhYmxlc0Zvcm1GaWVsZE1hcCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGdyb3Vwcy1xdWVyeS1mb3JtIGRhc2hib2FyZCAoYWN0aW9uKT1cImRpc3BhdGNoKCRldmVudClcIiAvPlxuICAgICAgPC90ZW1wbGF0ZXMtaW5kZXg+XG4gICAgPC9mcmFtZXMtcm91dGVyLW91dGxldD5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3F1ZXJ5LnBhZ2Uuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogUXVlcnlQYWdlU3RvcmUsXG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAncXVlcnknLFxuICAgICAgICAndGl0bGVFZGl0YWJsZScsXG4gICAgICAgICd2YXJpYWJsZXNGb3JtJyxcbiAgICAgICAgJ3ZhcmlhYmxlc0Zvcm1GaWVsZE1hcCcsXG4gICAgICAgICduYXZTdGFydEFjdGlvbnMnLFxuICAgICAgICAnbmF2RW5kQWN0aW9ucycsXG4gICAgICAgICdpdGVtQWN0aW9ucycsXG4gICAgICAgICdwYWdlU2l6ZU9wdGlvbnMnXG4gICAgICBdXG4gICAgfSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeVBhZ2UgZXh0ZW5kcyBOZ0F0b21pY0NvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoUXVlcnlQYWdlU3RvcmUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVkdWNlciA9IGluamVjdChRdWVyeUFjdGlvblJlZHVjZXIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnkgPSBpbmplY3QoUXVlcnlTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgZmVhdHVyZSA9IGluamVjdChRdWVyeUZlYXR1cmUpO1xuXG4gIHJlYWRvbmx5IHRlbXBsYXRlID0gdmlld0NoaWxkKEluZGV4VGVtcGxhdGUpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KCdkZWZhdWx0IHRpdGxlJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZHVjZXIuYWN0aW9uJC5zdWJzY3JpYmUoKGFjdGlvbikgPT4gdGhpcy5kaXNwYXRjaChhY3Rpb24pKTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgcXVlcnk6IHRoaXMuZmVhdHVyZS5mb3JtVmFsdWUoKSxcbiAgICAgIC8vIHNjaGVtYTogdGhpcy5mZWF0dXJlLmdyYXBocWxTY2hlbWEoKSxcbiAgICB9KSk7XG5cbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5hcHAuY29udGV4dC5jb250ZXh0LnNldChKU09OLnN0cmluZ2lmeShjb250ZXh0KCkpKSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGVTdG9yZS5BY3Rpb25JZC5CQUNLKVxuICBhc3luYyBiYWNrKCkge1xuICAgIGhpc3RvcnkuYmFjaygpO1xuICB9XG5cbiAgQEVmZmVjdChBY3Rpb25JZC5OQVZJR0FURV9UT19JRlJBTUUpXG4gIGFzeW5jIG5hdmlnYXRlVG9JZnJhbWUoaXRlbTogeyBpZDogc3RyaW5nIH0pIHtcbiAgICB0aGlzLmFwcC5yb3V0ZXIubmF2aWdhdGUoWydpbnZvaWNlcycsIGl0ZW0uaWRdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgIH0pO1xuICB9XG5cbiAgQEVmZmVjdChBY3Rpb25JZC5UT0dHTEVfUEFHRSlcbiAgYXN5bmMgZXhwYW5kUGFnZSgpIHtcbiAgICB1cGRhdGVJbnB1dCh0aGlzLnN0b3JlLCAnc3R5bGUnLCAoc3R5bGUpID0+ICh7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIHdpZHRoOiBzdHlsZT8ud2lkdGggPT09ICd2YXIoLS1wYWdlLXdpZHRoLWx2MyknID8gJ3ZhcigtLXBhZ2Utd2lkdGgtbHYyKScgOiAndmFyKC0tcGFnZS13aWR0aC1sdjMpJyxcbiAgICB9KSlcbiAgfVxuXG4gIEBFZmZlY3QoSW5kZXhUZW1wbGF0ZS5BY3Rpb25JZC5JVEVNX0NMSUNLKVxuICBwcm90ZWN0ZWQgaXRlbUNsaWNrKGl0ZW06IHsgaWQ6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7IGlkOiBBY3Rpb25JZC5ERVRBSUwsIHBheWxvYWQ6IGl0ZW0gfSk7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHhtYWNoaW5hLWNvbXBvbmVudHMtcGFnZXMtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AeHhtYWNoaW5hL2NvbXBvbmVudHMvc3JjL2xpYi9wYWdlcy9xdWVyeS94eG1hY2hpbmEtY29tcG9uZW50cy1wYWdlcy1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xxmachina-components-pages-query.mjs","sources":["../tmp-esm2022/pages/query/query.page.js","../tmp-esm2022/pages/query/xxmachina-components-pages-query.js"],"sourcesContent":["var QueryPageStore_1;\nimport { __decorate, __metadata } from \"tslib\";\nimport { Component, inject, computed, viewChild, Directive, Injectable, signal, input, ChangeDetectionStrategy, effect, untracked, ElementRef } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { IndexTemplate, IndexTemplateStore } from '@ng-atomic/components/templates/_index';\nimport { _computed, applyToInput, computeFake, createAction, Effect, InjectableComponent, NgAtomicComponent, provideEffect, TokenizedType, updateInput } from '@ng-atomic/core';\nimport { EditingStateManager } from '@ng-atomic/common';\nimport { AppService } from '@xxmachina/components/services/app';\nimport { buildColumns, injectIndexFormBuilder } from '@ng-atomic/components/organisms/table';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { getRawValue$, getValue$, injectHasNext, injectNavigationExtras, injectRouteData, injectRouteSkip, injectUnflattenRouteParam } from '@ng-atomic/common/utils';\nimport { ActivatedRoute } from '@angular/router';\nimport { RouterOutletFrame, RouterOutletFrameStore } from '@ng-atomic/components/frames/router-outlet';\nimport { CommandService } from '@xxmachina/components/services/command';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport { Query, QueryHelper } from '@xxmachina/common/domain/models';\nimport { injectOne } from '@ng-atomic/common/stores/entities';\nimport { injectNavStartActionsV2, makeDI } from '@ng-atomic/common/services/ui';\nimport { makeInitializerConfig } from '@ng-atomic/common/services/initializer';\nimport { NgAtomicFormSectionBuilder } from '@ng-atomic/components/templates/form';\nimport { QueryFeature } from '@xxmachina/components/features/query';\nimport { QueryService } from '@xxmachina/components/services/query';\nimport { QueryFormGroup } from '@xxmachina/components/groups/query-form';\nimport { flatten } from 'flat';\nimport { derivedAsync } from 'ngxtension/derived-async';\nimport { isEqual, merge, omitBy } from 'lodash-es';\nimport { ValueCellAtomStore } from '@ng-atomic/components/atoms/value-cell';\nimport { QueryGraphqlVariablesFormFeature } from '@xxmachina/components/features/query';\nimport { MachinaDevService } from '@xxmachina/components/services/debug';\nimport { TableOrganism } from '@ng-atomic/components/organisms/table';\nimport * as i0 from \"@angular/core\";\nexport var ActionId;\n(function (ActionId) {\n ActionId[\"NAVIGATE_TO_IFRAME\"] = \"NAVIGATE TO IFRAME\";\n ActionId[\"TOGGLE_PAGE\"] = \"\\u5168\\u4F53\\u8868\\u793A\";\n ActionId[\"TOGGLE_VARIABLES_FORM\"] = \"\\u5909\\u6570\\u30D5\\u30A9\\u30FC\\u30E0\\u306E\\u8868\\u793A\\u5207\\u66FF\";\n ActionId[\"ADD\"] = \"\\u8FFD\\u52A0\";\n ActionId[\"DETAIL\"] = \"\\u8A73\\u7D30\";\n})(ActionId || (ActionId = {}));\nexport function buildItemsMap(itemsResult = {}, itemsLengthResult = {}) {\n return Object.entries(itemsResult).reduce((acc, [key, items]) => ({\n ...acc,\n [key]: {\n items,\n itemsLength: itemsLengthResult[key] ?? items.length,\n }\n }), {});\n}\nexport function buildItemsMapFromResult(result = {}) {\n console.debug('[DEBUG] result:', result);\n const data = omitBy(result, (_, key) => key.startsWith('_'));\n if (Array.isArray(data)) {\n return buildItemsMap({ default: data });\n }\n else if (data && typeof data === 'object' && 'items' in data) {\n const itemsMap = buildItemsMap({ default: data.items }, { default: data?.itemsLength });\n return itemsMap;\n }\n else {\n const itemsResult = {};\n const itemsLengthResult = {};\n Object.entries(data).forEach(([key, value]) => {\n if (key.endsWith('Length')) {\n itemsLengthResult[key.replace('Length', '')] = value;\n }\n else {\n itemsResult[key] = value;\n }\n });\n return buildItemsMap(itemsResult, itemsLengthResult);\n }\n}\nexport class QueryActionReducer {\n constructor() {\n this.action = signal(null);\n this.action$ = toObservable(this.action);\n }\n dispatch(action) {\n this.action.set(action);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryActionReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryActionReducer, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryActionReducer, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nlet QueryPageStore = class QueryPageStore extends InjectableComponent {\n static { QueryPageStore_1 = this; }\n static { this.ActionId = ActionId; }\n static { this.DI = makeDI(QueryPageStore_1, () => {\n return () => ({\n type: 'table',\n style: {\n width: 'var(--page-width-lv2)',\n },\n title: null,\n titleEditable: true,\n childrenKey: 'children',\n additionalNavEndActions: [],\n navEndActions: [],\n additionalColumns: (items) => [],\n itemActions: (item => [{ id: QueryPageStore_1.ActionId.DETAIL, icon: 'open_in_new', name: '詳細', payload: item }]),\n pageSizeOptions: [50, 100, 300, 500, 1000],\n });\n }, ['@xxmachina/components', 'pages', 'query']); }\n /** @deprecated use `QueryPageStore.DI.provideInitializer` instead */\n static { this.Initializer = makeInitializerConfig(QueryPageStore_1); }\n static provideDefault() {\n return [\n QueryPageStore_1.DI.provideConfig(),\n QueryPageStore_1.provideDefaultInitializes(),\n QueryPageStore_1.provideDefaultEffects(),\n QueryPageStore_1.provideDebugStyleInitializer(),\n QueryFeature.provideDefault(),\n ];\n }\n static provideCustom() {\n return [\n QueryPageStore_1.DI.provideConfig(),\n QueryPageStore_1.provideDefaultInitializes(),\n QueryPageStore_1.provideDefaultEffects(),\n QueryPageStore_1.provideDebugStyleInitializer(),\n QueryPageStore_1.provideNonEditableConfig(),\n QueryPageStore_1.provideQueryFromRouteDataQueryIdInitializer(),\n QueryPageStore_1.provideAutoTogglePageInitializer(),\n QueryFeature.provideDefault(),\n ];\n }\n static provideDefaultV2() {\n return [\n QueryPageStore_1.provideCustom(),\n QueryPageStore_1.DI.Config.provide(() => config => ({ ...config })),\n QueryPageStore_1.provideTitleFromQueryResultInitializer(),\n QueryPageStore_1.provideQueryFromRouteDataInitializer(),\n QueryPageStore_1.providePaginationInitializer(),\n ];\n }\n /** @deprecated use `provideCustom` instead */\n static provideForCustomPage() {\n return this.provideCustom();\n }\n static provideNonEditableConfig() {\n return QueryPageStore_1.DI.provideConfig(() => {\n return config => ({\n ...config,\n titleEditable: false,\n style: {\n ...config.style,\n width: `var(--page-width-lv3)`\n },\n });\n });\n }\n static provideDefaultInitializes() {\n return [\n QueryPageStore_1.provideAutoTogglePageInitializer(),\n QueryPageStore_1.provideVariablesFormValueFromMatrixParamsInitializer(),\n ];\n }\n static provideNavEndActionsInitializers() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n effect(() => {\n const icon = store.style()?.width === 'var(--page-width-lv3)' ? 'close_fullscreen' : 'open_in_full';\n const navEndActions = [\n createAction(QueryFeature.ActionId.クエリの実行, null, { icon: 'play_arrow' }).create(),\n store.variablesFormDisplayed() ? createAction(ActionId.TOGGLE_PAGE, null, { icon }).create() : null,\n createAction(QueryFeature.ActionId.クエリの更新, null, { icon: 'save' }).create(),\n ].filter(Boolean);\n applyToInput(store, 'navEndActions', navEndActions);\n });\n }),\n QueryPageStore_1.provideVariablesFromRouteParamDataInitializer(),\n ];\n }\n static provideVariablesFromRouteParamDataInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer(store => {\n const data = injectUnflattenRouteParam('data');\n effect(() => {\n const variables = store.variablesFormValue();\n const merged = merge(variables, data());\n store.feature.form.patchValue({\n graphql: {\n variablesJson: JSON.stringify(merged, null, 2),\n }\n });\n });\n }),\n ];\n }\n static provideVariablesFromRouteParamInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer(store => {\n const data = injectUnflattenRouteParam();\n effect(() => {\n const variables = store.variablesFormValue();\n const merged = merge(variables, data());\n store.feature.form.patchValue({\n graphql: {\n variablesJson: JSON.stringify(merged, null, 2),\n }\n });\n });\n }),\n ];\n }\n static provideAutoTogglePageInitializer() {\n return [\n provideEffect(RouterOutletFrameStore.ActionId.DEACTIVATED, () => {\n const store = inject(QueryPageStore_1);\n const style = computeFake(store.style());\n return () => {\n applyToInput(store, 'style', { ...style, paddingLeft: `0` });\n };\n }),\n QueryPageStore_1.DI.provideInitializer((store) => {\n const hasNext = injectHasNext();\n const style = computeFake(store.style());\n effect(() => {\n if (hasNext()) {\n setTimeout(() => {\n if (style.width === 'var(--page-width-lv3)') {\n applyToInput(store, 'style', {\n ...style,\n paddingLeft: 'var(--page-width-lv1)',\n });\n }\n }, 300);\n }\n });\n }),\n ];\n }\n static provideVariablesFormValueFromMatrixParamsInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const data = injectUnflattenRouteParam('data');\n effect(() => {\n store.variablesForm()?.patchValue({ ...data() });\n });\n }),\n ];\n }\n static provideQueryFromRouteDataQueryIdInitializer(key = 'queryId') {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const query = injectOne(Query, { id: injectRouteData(key) });\n const _query = computed(() => {\n return query();\n }, { equal: (pre, cur) => JSON.stringify(pre) === JSON.stringify(cur) });\n effect(() => {\n console.debug('[QueryPageStore] query:', _query());\n applyToInput(store, 'query', _query());\n });\n }),\n ];\n }\n static provideQueryFromRouteDataInitializer(key = 'query') {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const query = injectRouteData(key);\n effect(() => applyToInput(store, 'query', query()));\n }),\n ];\n }\n static provideItemActionsFromRouteDataInitializer(key = 'itemActionsCommandIds') {\n return QueryPageStore_1.DI.provideInitializer((store) => {\n const idOrObjectArray = injectRouteData(key);\n const service = inject(CommandService);\n const itemActions = (item) => {\n const params = (idOrObjectArray() ?? []).map((idOrObject) => ({\n id: typeof idOrObject === 'string' ? idOrObject : idOrObject.id,\n options: typeof idOrObject === 'string' ? {} : idOrObject.options,\n }));\n const builder = service.getActionBuilder().setItem(item);\n const actions = params.map(param => builder.setOptions(param.options).buildAction(param.id));\n console.debug('actions:', actions);\n return actions;\n };\n applyToInput(store, 'itemActions', itemActions);\n });\n }\n static provideNavEndActionsFromRouteDataInitializer(key = 'navEndActionsCommandIds') {\n return QueryPageStore_1.DI.provideInitializer((store) => {\n const ids = injectRouteData(key);\n const queryId = injectRouteData('navEndActionsCommandQueryId');\n const service = inject(CommandService);\n const route = inject(ActivatedRoute);\n const hasNext = injectHasNext();\n effect(() => {\n const actions = service.getActionBuilder().setFilterIds(ids()).setOptions({ queryId: queryId() }).buildActions(undefined, { relativeTo: route, replaceUrl: hasNext() });\n applyToInput(store, 'navEndActions', [\n store.variablesFormDisplayed() ? { id: ActionId.TOGGLE_VARIABLES_FORM, icon: store.navMode() === 'collapsed' ? 'expand_less' : 'expand_more' } : null,\n // TODO(@NozomuMiyamoto): 変更\n actions?.length ? {\n id: 'open_command_menu',\n icon: 'more_vert',\n children: [...actions],\n } : null,\n ].filter(Boolean));\n });\n });\n }\n static provideDefaultEffects() {\n return [\n QueryPageStore_1.provideCommandEffects(),\n QueryPageStore_1.provideNavModeToggleEffect(),\n QueryPageStore_1.provideChangeWidthEffect(),\n QueryFeature.provideDefaultEffects(),\n QueryPageStore_1.provideNavigateEffects(),\n QueryPageStore_1.provideEditingStateEffects(),\n ];\n }\n static provideEditingStateEffects() {\n return [\n provideEffect(ValueCellAtomStore.ActionId.START_EDIT, () => {\n const editingStateManager = inject(EditingStateManager);\n return (payload) => {\n editingStateManager.startEditing(payload.rowId, payload.columnId);\n };\n }),\n provideEffect(ValueCellAtomStore.ActionId.END_EDIT, () => {\n const editingStateManager = inject(EditingStateManager);\n return (payload) => {\n setTimeout(() => editingStateManager.stopEditing(payload.rowId, payload.columnId), 0);\n };\n }),\n ];\n }\n static provideCommandEffects() {\n return [\n QueryPageStore_1.provideCommandExecuteEffect(),\n QueryPageStore_1.provideCommandNavigateEffect(),\n ];\n }\n static provideCommandExecuteEffect() {\n return [\n provideEffect(CommandService.ActionId.EXECUTE_COMMAND, () => {\n const commandService = inject(CommandService);\n return async (payload) => {\n const app = inject(AppService);\n const obj = omitBy(payload.body, (value) => typeof value === undefined);\n const command = inject(CommandService).getCommand(payload.command.id);\n console.debug('[QueryPage] payload:', payload);\n if (payload.options?.confirm && !(await payload.options?.confirm())) {\n app.snackBar.open('キャンセルされました。');\n return;\n }\n app.loading.await(() => {\n return commandService.execute(command, obj).then(() => {\n app.snackBar.open('成功しました。');\n }).catch((error) => {\n console.error(error);\n app.snackBar.open(`エラー: ${error.message}`);\n });\n });\n };\n }),\n ];\n }\n static provideCommandNavigateEffect() {\n return [\n provideEffect(CommandService.ActionId.NAVIGATE_TO_COMMAND_PAGE, () => {\n const app = inject(AppService);\n const route = inject(ActivatedRoute);\n const hasNext = injectHasNext();\n return (payload) => {\n const flat = flatten({ data: { id: payload.body?.id }, queryId: payload?.options?.queryId });\n const _flat = omitBy(flat, (value) => value === undefined);\n app.router.navigate(['commands', { skip: true }, payload.command.id, _flat], {\n relativeTo: route,\n replaceUrl: hasNext(),\n });\n };\n }),\n ];\n }\n static provideNavModeToggleEffect() {\n return provideEffect(ActionId.TOGGLE_VARIABLES_FORM, () => {\n const store = inject(QueryPageStore_1);\n return () => {\n store.navMode.set(store.navMode() === 'collapsed' ? 'expanded' : 'collapsed');\n };\n }, { scopes: ['root', 'host'] });\n }\n static provideNavEndActionsInitializer() {\n return QueryPageStore_1.DI.provideInitializer((store) => {\n const navEndActions = computed(() => [\n store.variablesFormDisplayed() ? {\n id: ActionId.TOGGLE_VARIABLES_FORM,\n icon: store.navMode() === 'collapsed' ? 'expand_less' : 'expand_more'\n } : null,\n ].filter(Boolean));\n effect(() => applyToInput(store, 'navEndActions', [\n ...navEndActions(),\n ...store.additionalNavEndActions()\n ]));\n });\n }\n static provideChangeWidthEffect() {\n return [\n provideEffect(IndexTemplateStore.ActionId.TABLE_COLUMN_WIDTH_CHANGE, () => {\n const store = inject(QueryPageStore_1);\n return (payload) => {\n const form = store.itemsMap()?.[payload.key]?.form || store.form();\n form.patchValue({ columns: { map: { [payload.columnName]: { width: payload.width } } } });\n };\n }),\n ];\n }\n static provideNavigateEffects() {\n return [\n provideEffect(QueryPageStore_1.ActionId.ADD, () => {\n const app = inject(AppService);\n const extras = injectNavigationExtras();\n return (item) => app.router.navigate(['new'], extras());\n }),\n provideEffect(QueryPageStore_1.ActionId.DETAIL, () => {\n const app = inject(AppService);\n const extras = injectNavigationExtras();\n return (item) => app.router.navigate([item.id], extras());\n }),\n ];\n }\n static providePaginationInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n effect(() => {\n const columns = store.columnNames();\n const sticky = store.sticky();\n const current = untracked(() => store.form())?.value;\n const form = store.indexFormBuilder.build({\n columns: buildColumns([...columns, '__actions'], sticky),\n page: {\n size: current?.page?.size ?? 100,\n index: current?.page?.index ?? 0,\n }\n });\n applyToInput(store, 'form', form);\n });\n }),\n QueryPageStore_1.DI.provideInitializer((store) => {\n const page = derivedAsync(() => getValue$(store.form().get(['page'])), {\n initialValue: { index: 0, size: 100 }\n });\n const pagination = computed(() => {\n const _page = page() || { index: 0, size: 100 };\n return {\n offset: _page.index * _page.size,\n limit: _page.size,\n };\n });\n effect(() => {\n const _pagination = pagination();\n store.variablesForm()?.patchValue(_pagination);\n });\n }),\n ];\n }\n static provideTableCellValueChangeEffect(handlerFactory, optionsOrColumns) {\n return provideEffect(ValueCellAtomStore.ActionId.UPDATE_VALUE, (injector) => {\n // 後方互換性のためのオプション正規化\n const normalizedOptions = Array.isArray(optionsOrColumns)\n ? { columns: optionsOrColumns }\n : (optionsOrColumns || {});\n // デフォルトの比較関数\n const defaultEquals = (current, next) => current === next;\n const equalsFn = normalizedOptions.equals || defaultEquals;\n const handler = handlerFactory(injector);\n return (action) => {\n const { context, next, current, setValue } = action;\n const name = context.name;\n // フィールドフィルタリング\n if (normalizedOptions.columns && normalizedOptions.columns.length > 0 && !normalizedOptions.columns.includes(name)) {\n return;\n }\n // 値の比較\n if (equalsFn(current, next, name)) {\n // 値が同じ場合は処理をスキップ\n return;\n }\n // TableCellValueChangeオブジェクトの作成\n const change = {\n item: context.item,\n name: name,\n current: current,\n next: next,\n rowIndex: context.position?.row ?? 0,\n columnId: context.name\n };\n // ハンドラーの実行\n handler(change, setValue);\n };\n });\n }\n static provideTableAutofillEffect(handlerFactory) {\n return provideEffect(TableOrganism.ActionId.AUTOFILL_COMPLETE, (injector) => {\n const handler = handlerFactory(injector);\n const store = inject(QueryPageStore_1);\n return async (payload) => {\n // TableOrganismから渡されたコンテキスト情報を使用\n if (!payload.contexts) {\n console.warn('No autofill contexts provided');\n return;\n }\n const { sourceContext, targetContexts } = payload.contexts;\n const sourceItem = sourceContext.item;\n const columnName = sourceContext.name;\n const sourceValue = sourceItem[columnName];\n // 影響を受けるアイテムを収集(表示されているセルのみ)\n const affectedItems = [];\n targetContexts.forEach(({ position, context }, index) => {\n const targetItem = context.item;\n // 値の生成\n let newValue = sourceValue;\n // 数値の連番\n if (typeof sourceValue === 'number') {\n newValue = sourceValue + index + 1;\n }\n // 文字列パターン\n else if (typeof sourceValue === 'string') {\n const dateMatch = sourceValue.match(/^(\\d{4}-\\d{2}-\\d{2})$/);\n if (dateMatch) {\n const sourceDate = new Date(dateMatch[1]);\n const newDate = new Date(sourceDate);\n newDate.setDate(sourceDate.getDate() + index + 1);\n newValue = newDate.toISOString().split('T')[0];\n }\n }\n affectedItems.push({\n item: targetItem,\n newValue,\n rowIndex: position.row\n });\n });\n // オートフィルの変更情報を作成\n const autofillChange = {\n sourceItem,\n sourceValue,\n columnName,\n columnIndex: payload.sourcePosition.col,\n affectedItems,\n range: payload.targetRange\n };\n // ハンドラーを実行\n await handler(autofillChange);\n };\n });\n }\n static provideDebugStyleInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n const debug = inject(MachinaDevService);\n const el = inject(ElementRef);\n effect(() => el.nativeElement.style.setProperty('--is-debug', debug.isDevMode() ? '1' : '0'));\n }),\n ];\n }\n static provideTitleFromQueryResultInitializer() {\n return [\n QueryPageStore_1.DI.provideInitializer((store) => {\n effect(() => applyToInput(store, 'title', store.feature.result()?.__meta__?.title));\n }),\n ];\n }\n #navStartActions;\n constructor() {\n super();\n this.app = inject(AppService);\n this.config = QueryPageStore_1.DI.injectConfig();\n this.feature = inject(QueryFeature);\n this.variablesFormFeature = inject(QueryGraphqlVariablesFormFeature);\n this.indexFormBuilder = injectIndexFormBuilder();\n this.navMode = signal('collapsed');\n this.editingStateManager = inject(EditingStateManager);\n this.style = input(_computed(() => this.config().style));\n this.query = input(null);\n this.#navStartActions = injectNavStartActionsV2();\n this.navStartActions = input(_computed(() => this.#navStartActions()));\n this.additionalNavEndActions = input(_computed(() => this.config().additionalNavEndActions));\n this.navEndActions = input(_computed(() => this.config().navEndActions));\n this.type = input(_computed(() => this.config().type));\n this.title = input(_computed(() => this.config().title ?? this.query()?.title));\n this.titleEditable = input(_computed(() => this.config().titleEditable));\n this.itemsMap = input(_computed(() => buildItemsMapFromResult(this.feature.result())));\n this.items = computed(() => this.itemsMap()[Object.keys(this.itemsMap())[0]]?.items ?? []);\n this.itemsLength = input(_computed(() => this.itemsMap()[Object.keys(this.itemsMap())[0]]?.itemsLength ?? 0));\n this.childrenKey = input(_computed(() => this.config().childrenKey));\n this.additionalColumns = input(_computed(() => this.config().additionalColumns));\n this.additionalColumnNames = input(_computed(() => this.additionalColumns()(this.items())));\n this.extractedColumnNames = input(_computed(() => QueryHelper.extractColumnNames(this.items(), this.childrenKey())));\n this.columnNames = input(_computed(() => [...this.extractedColumnNames(), ...this.additionalColumnNames()]));\n this.sticky = input(_computed(() => ({ stickyStart: 2, stickyEnd: 1 })));\n this.form = input(_computed(() => this.indexFormBuilder.build({\n columns: buildColumns([...this.columnNames(), '__actions'], this.sticky()),\n })));\n this.itemActions = input(_computed(() => this.config().itemActions));\n this.tableTreeControl = new FlatTreeControl(n => n.level, n => n.isExpandable, { trackBy: (n) => n?.id ?? n });\n this.variablesForm = input(_computed(() => this.variablesFormFeature.variablesForm() ?? new FormGroup({})));\n this.variablesFormFieldMap = input(_computed(() => ({})));\n this.variablesFormValue = derivedAsync(() => getRawValue$(this.variablesForm()), { equal: isEqual });\n this.variablesFormValue$ = toObservable(this.variablesFormValue);\n this.variablesFormDisplayed = input(_computed(() => Object.keys(this.variablesFormFeature.variablesValue())?.length > 0));\n this.tableColumnFormFieldMap = input(_computed(() => ({})));\n this.getRowClass = input(_computed(() => () => ''));\n this.skip = injectRouteSkip();\n this.pageSizeOptions = input(_computed(() => this.config().pageSizeOptions));\n QueryPageStore_1.DI.initialize(this);\n effect(() => this.feature.form.patchValue(this.query()));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPageStore, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.5\", type: QueryPageStore, isStandalone: true, inputs: { style: { classPropertyName: \"style\", publicName: \"style\", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: \"query\", publicName: \"query\", isSignal: true, isRequired: false, transformFunction: null }, navStartActions: { classPropertyName: \"navStartActions\", publicName: \"navStartActions\", isSignal: true, isRequired: false, transformFunction: null }, additionalNavEndActions: { classPropertyName: \"additionalNavEndActions\", publicName: \"additionalNavEndActions\", isSignal: true, isRequired: false, transformFunction: null }, navEndActions: { classPropertyName: \"navEndActions\", publicName: \"navEndActions\", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: \"type\", publicName: \"type\", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, titleEditable: { classPropertyName: \"titleEditable\", publicName: \"titleEditable\", isSignal: true, isRequired: false, transformFunction: null }, itemsMap: { classPropertyName: \"itemsMap\", publicName: \"itemsMap\", isSignal: true, isRequired: false, transformFunction: null }, itemsLength: { classPropertyName: \"itemsLength\", publicName: \"itemsLength\", isSignal: true, isRequired: false, transformFunction: null }, childrenKey: { classPropertyName: \"childrenKey\", publicName: \"childrenKey\", isSignal: true, isRequired: false, transformFunction: null }, additionalColumns: { classPropertyName: \"additionalColumns\", publicName: \"additionalColumns\", isSignal: true, isRequired: false, transformFunction: null }, additionalColumnNames: { classPropertyName: \"additionalColumnNames\", publicName: \"additionalColumnNames\", isSignal: true, isRequired: false, transformFunction: null }, extractedColumnNames: { classPropertyName: \"extractedColumnNames\", publicName: \"extractedColumnNames\", isSignal: true, isRequired: false, transformFunction: null }, columnNames: { classPropertyName: \"columnNames\", publicName: \"columnNames\", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: \"sticky\", publicName: \"sticky\", isSignal: true, isRequired: false, transformFunction: null }, form: { classPropertyName: \"form\", publicName: \"form\", isSignal: true, isRequired: false, transformFunction: null }, itemActions: { classPropertyName: \"itemActions\", publicName: \"itemActions\", isSignal: true, isRequired: false, transformFunction: null }, variablesForm: { classPropertyName: \"variablesForm\", publicName: \"variablesForm\", isSignal: true, isRequired: false, transformFunction: null }, variablesFormFieldMap: { classPropertyName: \"variablesFormFieldMap\", publicName: \"variablesFormFieldMap\", isSignal: true, isRequired: false, transformFunction: null }, variablesFormDisplayed: { classPropertyName: \"variablesFormDisplayed\", publicName: \"variablesFormDisplayed\", isSignal: true, isRequired: false, transformFunction: null }, tableColumnFormFieldMap: { classPropertyName: \"tableColumnFormFieldMap\", publicName: \"tableColumnFormFieldMap\", isSignal: true, isRequired: false, transformFunction: null }, getRowClass: { classPropertyName: \"getRowClass\", publicName: \"getRowClass\", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: \"pageSizeOptions\", publicName: \"pageSizeOptions\", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }\n};\nQueryPageStore = QueryPageStore_1 = __decorate([\n TokenizedType(),\n __metadata(\"design:paramtypes\", [])\n], QueryPageStore);\nexport { QueryPageStore };\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPageStore, decorators: [{\n type: Directive,\n args: [{ standalone: true }]\n }], ctorParameters: () => [] });\nexport class QueryPage extends NgAtomicComponent {\n constructor() {\n super();\n this.fb = inject(FormBuilder);\n this.route = inject(ActivatedRoute);\n this.app = inject(AppService);\n this.store = inject(QueryPageStore);\n this.reducer = inject(QueryActionReducer);\n this.query = inject(QueryService);\n this.feature = inject(QueryFeature);\n this.template = viewChild(IndexTemplate);\n this.title = input('default title');\n this.reducer.action$.subscribe((action) => this.dispatch(action));\n const context = computed(() => ({\n query: this.feature.formValue(),\n // schema: this.feature.graphqlSchema(),\n }));\n effect(() => this.app.context.context.set(JSON.stringify(context())));\n }\n async back() {\n history.back();\n }\n async navigateToIframe(item) {\n this.app.router.navigate(['invoices', item.id], {\n relativeTo: this.route,\n });\n }\n async expandPage() {\n updateInput(this.store, 'style', (style) => ({\n ...style,\n width: style?.width === 'var(--page-width-lv3)' ? 'var(--page-width-lv2)' : 'var(--page-width-lv3)',\n }));\n }\n itemClick(item) {\n this.dispatch({ id: ActionId.DETAIL, payload: item });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPage, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: QueryPage, isStandalone: true, selector: \"pages-query\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"template\", first: true, predicate: IndexTemplate, descendants: true, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: QueryPageStore, inputs: [\"type\", \"type\", \"query\", \"query\", \"titleEditable\", \"titleEditable\", \"variablesForm\", \"variablesForm\", \"variablesFormFieldMap\", \"variablesFormFieldMap\", \"navStartActions\", \"navStartActions\", \"navEndActions\", \"navEndActions\", \"itemActions\", \"itemActions\", \"pageSizeOptions\", \"pageSizeOptions\"] }], ngImport: i0, template: `\n <frames-router-outlet [skip]=\"store.skip()\" (action)=\"dispatch($event)\">\n <templates-index\n [tableColumnFormFieldMap]=\"store.tableColumnFormFieldMap()\"\n [style]=\"store.style()\"\n [title]=\"store.title()\"\n [titleControl]=\"store.feature.form.get(['title'])\"\n [titleEditable]=\"store.titleEditable()\"\n [type]=\"store.type()\"\n [tableChildrenKey]=\"store.childrenKey()\"\n [tableTreeControl]=\"store.tableTreeControl\"\n [itemsMap]=\"store.itemsMap()\"\n [itemsLength]=\"store.itemsLength()\"\n [itemActions]=\"store.itemActions()\"\n [getRowClass]=\"store.getRowClass()\"\n [form]=\"store.form()\"\n [navStartActions]=\"store.navStartActions()\"\n [navEndActions]=\"store.navEndActions()\"\n [navMode]=\"store.navMode()\"\n [pageSizeOptions]=\"store.pageSizeOptions()\"\n (action)=\"dispatch($event)\"\n >\n @if (store.variablesFormDisplayed()) {\n <div navDashboard>\n <ng-atomic-form-section-builder\n [form]=\"store.variablesForm()\"\n [fieldMap]=\"store.variablesFormFieldMap()\"\n />\n </div>\n }\n <groups-query-form dashboard (action)=\"dispatch($event)\" />\n </templates-index>\n </frames-router-outlet>\n `, isInline: true, styles: [\"@charset \\\"UTF-8\\\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-elKu: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-elKu: var(--page-width-lv3);--primary-color-SCOPED-IN-query-elKu: var(--primary-color);--on-primary-color-SCOPED-IN-query-elKu: var(--on-primary-color);--surface-color-SCOPED-IN-query-elKu: var(--surface-color);--on-surface-color-SCOPED-IN-query-elKu: var(--on-surface-color);--on-background-color-SCOPED-IN-query-elKu: var(--on-background-color);--background-color-SCOPED-IN-query-elKu: var(--background-color);--navigator-background-color-SCOPED-IN-query-elKu: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-elKu: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-elKu: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-elKu: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-elKu: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-elKu);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-elKu);--surface-color: var(--surface-color-SCOPED-IN-query-elKu);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-elKu);--background-color: var(--background-color-SCOPED-IN-query-elKu);--on-background-color: var(--on-background-color-SCOPED-IN-query-elKu);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-elKu);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-elKu);--table-background-color: var(--table-background-color-SCOPED-IN-query-elKu);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-elKu);--is-debug: var(--is-debug-SCOPED-IN-query-elKu)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-elKu) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\\n\"], dependencies: [{ kind: \"component\", type: IndexTemplate, selector: \"templates-index\" }, { kind: \"component\", type: RouterOutletFrame, selector: \"frames-router-outlet\", outputs: [\"events\"] }, { kind: \"component\", type: NgAtomicFormSectionBuilder, selector: \"ng-atomic-form-section-builder\", inputs: [\"form\", \"formFlatExcludes\", \"fieldMap\", \"fieldKeys\"] }, { kind: \"component\", type: QueryFormGroup, selector: \"groups-query-form\", inputs: [\"form\", \"keyActions\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\n__decorate([\n Effect(IndexTemplateStore.ActionId.BACK),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], QueryPage.prototype, \"back\", null);\n__decorate([\n Effect(ActionId.NAVIGATE_TO_IFRAME),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], QueryPage.prototype, \"navigateToIframe\", null);\n__decorate([\n Effect(ActionId.TOGGLE_PAGE),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], QueryPage.prototype, \"expandPage\", null);\n__decorate([\n Effect(IndexTemplate.ActionId.ITEM_CLICK),\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], QueryPage.prototype, \"itemClick\", null);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: QueryPage, decorators: [{\n type: Component,\n args: [{ selector: 'pages-query', imports: [\n IndexTemplate,\n RouterOutletFrame,\n NgAtomicFormSectionBuilder,\n QueryFormGroup,\n ], template: `\n <frames-router-outlet [skip]=\"store.skip()\" (action)=\"dispatch($event)\">\n <templates-index\n [tableColumnFormFieldMap]=\"store.tableColumnFormFieldMap()\"\n [style]=\"store.style()\"\n [title]=\"store.title()\"\n [titleControl]=\"store.feature.form.get(['title'])\"\n [titleEditable]=\"store.titleEditable()\"\n [type]=\"store.type()\"\n [tableChildrenKey]=\"store.childrenKey()\"\n [tableTreeControl]=\"store.tableTreeControl\"\n [itemsMap]=\"store.itemsMap()\"\n [itemsLength]=\"store.itemsLength()\"\n [itemActions]=\"store.itemActions()\"\n [getRowClass]=\"store.getRowClass()\"\n [form]=\"store.form()\"\n [navStartActions]=\"store.navStartActions()\"\n [navEndActions]=\"store.navEndActions()\"\n [navMode]=\"store.navMode()\"\n [pageSizeOptions]=\"store.pageSizeOptions()\"\n (action)=\"dispatch($event)\"\n >\n @if (store.variablesFormDisplayed()) {\n <div navDashboard>\n <ng-atomic-form-section-builder\n [form]=\"store.variablesForm()\"\n [fieldMap]=\"store.variablesFormFieldMap()\"\n />\n </div>\n }\n <groups-query-form dashboard (action)=\"dispatch($event)\" />\n </templates-index>\n </frames-router-outlet>\n `, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [\n {\n directive: QueryPageStore,\n inputs: [\n 'type',\n 'query',\n 'titleEditable',\n 'variablesForm',\n 'variablesFormFieldMap',\n 'navStartActions',\n 'navEndActions',\n 'itemActions',\n 'pageSizeOptions'\n ]\n },\n ], styles: [\"@charset \\\"UTF-8\\\";:host{width:100%;height:100%;display:block;--page-width-lv1-SCOPED-IN-query-elKu: var(--page-width-lv1);--page-width-lv3-SCOPED-IN-query-elKu: var(--page-width-lv3);--primary-color-SCOPED-IN-query-elKu: var(--primary-color);--on-primary-color-SCOPED-IN-query-elKu: var(--on-primary-color);--surface-color-SCOPED-IN-query-elKu: var(--surface-color);--on-surface-color-SCOPED-IN-query-elKu: var(--on-surface-color);--on-background-color-SCOPED-IN-query-elKu: var(--on-background-color);--background-color-SCOPED-IN-query-elKu: var(--background-color);--navigator-background-color-SCOPED-IN-query-elKu: var(--navigator-background-color);--navigator-on-background-color-SCOPED-IN-query-elKu: var(--navigator-on-background-color);--table-background-color-SCOPED-IN-query-elKu: var(--table-background-color);--table-on-background-color-SCOPED-IN-query-elKu: var(--table-on-background-color);--is-debug: 1;--is-debug-SCOPED-IN-query-elKu: var(--is-debug)}:host *{--primary-color: var(--primary-color-SCOPED-IN-query-elKu);--on-primary-color: var(--on-primary-color-SCOPED-IN-query-elKu);--surface-color: var(--surface-color-SCOPED-IN-query-elKu);--on-surface-color: var(--on-surface-color-SCOPED-IN-query-elKu);--background-color: var(--background-color-SCOPED-IN-query-elKu);--on-background-color: var(--on-background-color-SCOPED-IN-query-elKu);--navigator-background-color: var(--navigator-background-color-SCOPED-IN-query-elKu);--navigator-on-background-color: var(--navigator-on-background-color-SCOPED-IN-query-elKu);--table-background-color: var(--table-background-color-SCOPED-IN-query-elKu);--table-on-background-color: var(--table-on-background-color-SCOPED-IN-query-elKu);--is-debug: var(--is-debug-SCOPED-IN-query-elKu)}:host templates-index{padding-left:0;box-sizing:border-box;--first-content-height: calc(var(--is-debug-SCOPED-IN-query-elKu) * 300px);transition:padding-left .3s}:host templates-index div[navDashboard]{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;padding:16px;box-sizing:border-box}:host templates-index div[navDashboard] ng-atomic-form-section-builder{--horizontal-padding: 0}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: { back: [], navigateToIframe: [], expandPage: [], itemClick: [] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkucGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0B4eG1hY2hpbmEvY29tcG9uZW50cy9zcmMvbGliL3BhZ2VzL3F1ZXJ5L3F1ZXJ5LnBhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQVksU0FBUyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN6TCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBWSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUEyQixpQkFBaUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pOLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RLLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxp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LFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNwRSxTQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRCxVQUFLLEdBQUcsS0FBSyxDQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25GLGtCQUFhLEdBQUcsS0FBSyxDQUFVLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM3RSxhQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEYsZ0JBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekcsZ0JBQVcsR0FBRyxLQUFLLENBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElB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IGluamVjdCwgY29tcHV0ZWQsIHZpZXdDaGlsZCwgRGlyZWN0aXZlLCBJbmplY3RhYmxlLCBzaWduYWwsIGlucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgZWZmZWN0LCBQcm92aWRlciwgdW50cmFja2VkLCBFbGVtZW50UmVmLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5kZXhUZW1wbGF0ZSwgSW5kZXhUZW1wbGF0ZVN0b3JlLCBJdGVtc01hcCB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy90ZW1wbGF0ZXMvX2luZGV4JztcbmltcG9ydCB7IF9jb21wdXRlZCwgQWN0aW9uLCBhcHBseVRvSW5wdXQsIGNvbXB1dGVGYWtlLCBjcmVhdGVBY3Rpb24sIEVmZmVjdCwgSW5qZWN0YWJsZUNvbXBvbmVudCwgSXRlbUFjdGlvbnMsIE5hdkFjdGlvbnMsIE5nQXRvbWljQ29tcG9uZW50LCBwcm92aWRlRWZmZWN0LCBUb2tlbml6ZWRUeXBlLCB1cGRhdGVJbnB1dCB9IGZyb20gJ0BuZy1hdG9taWMvY29yZSc7XG5pbXBvcnQgeyBFZGl0aW5nU3RhdGVNYW5hZ2VyIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24nO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tcG9uZW50cy9zZXJ2aWNlcy9hcHAnO1xuaW1wb3J0IHsgYnVpbGRDb2x1bW5zLCBpbmplY3RJbmRleEZvcm1CdWlsZGVyIH0gZnJvbSAnQG5nLWF0b21pYy9jb21wb25lbnRzL29yZ2FuaXNtcy90YWJsZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0UmF3VmFsdWUkLCBnZXRWYWx1ZSQsIGluamVjdEhhc05leHQsIGluamVjdE5hdmlnYXRpb25FeHRyYXMsIGluamVjdFJvdXRlRGF0YSwgaW5qZWN0Um91dGVTa2lwLCBpbmplY3RVbmZsYXR0ZW5Sb3V0ZVBhcmFtIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUm91dGVyT3V0bGV0RnJhbWUsIFJvdXRlck91dGxldEZyYW1lU3RvcmUgfSBmcm9tICdAbmctYXRvbWljL2NvbXBvbmVudHMvZnJhbWVzL3JvdXRlci1vdXRsZXQnO1xuaW1wb3J0IHsgQ29tbWFuZEFjdGlvblBheWxvYWQgfSBmcm9tICdAeHhtYWNoaW5hL2NvbW1vbi9kb21haW4vYnVpbGRlcic7XG5pbXBvcnQgeyBDb21tYW5kU2VydmljZSB9IGZyb20gJ0B4eG1hY2hpbmEvY29tcG9uZW50cy9zZXJ2aWNlcy9jb21tYW5kJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IFF1ZXJ5LCBRdWVyeUhlbHBlciB9IGZyb20gJ0B4eG1hY2hpbmEvY29tbW9uL2RvbWFpbi9tb2RlbHMnO1xuaW1wb3J0IHsgaW5qZWN0T25lIH0gZnJvbSAnQG5nLWF0b21pYy9jb21tb24vc3RvcmVzL2VudGl0aWVzJztcbmltcG9ydCB7IGluamVjdE5hdlN0YXJ0QWN0aW9uc1YyLCBtYWtlREkgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zZXJ2aWNlcy91aSc7XG5pbXBvcnQgeyBtYWtlSW5pdGlhbGl6ZXJDb25maWcgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9zZXJ2aWNlcy9pbml0aWFsaXplcic7XG5pbXBvcnQgeyBOZ0F0b21pY0Zvcm1TZWN0aW9uQnVpbGRlciB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy90ZW1wbGF0ZXMvZm9ybSc7XG5pbXBvcnQgeyBGb3JtRmllbGRNYXAgfSBmcm9tICdAbmctYXRvbWljL2NvbW1vbi9waXBlcy9zbWFydC1maWVsZCc7XG5pbXBvcnQgeyBRdWVyeUZlYXR1cmUgfSBmcm9tICdAeHhtYWNoaW5hL2NvbXBvbmVudHMvZmVhdHVyZXMvcXVlcnknO1xuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnQHh4bWFjaGluYS9jb21wb25lbnRzL3NlcnZpY2VzL3F1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5Rm9ybUdyb3VwIH0gZnJvbSAnQHh4bWFjaGluYS9jb21wb25lbnRzL2dyb3Vwcy9xdWVyeS1mb3JtJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICdmbGF0JztcbmltcG9ydCB7IGRlcml2ZWRBc3luYyB9IGZyb20gJ25neHRlbnNpb24vZGVyaXZlZC1hc3luYyc7XG5pbXBvcnQgeyBpc0VxdWFsLCBtZXJnZSwgb21pdEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFZhbHVlQ2VsbEF0b21TdG9yZSwgVXBkYXRlVmFsdWVQYXlsb2FkIH0gZnJvbSAnQG5nLWF0b21pYy9jb21wb25lbnRzL2F0b21zL3ZhbHVlLWNlbGwnO1xuaW1wb3J0IHsgUXVlcnlHcmFwaHFsVmFyaWFibGVzRm9ybUZlYXR1cmUgfSBmcm9tICdAeHhtYWNoaW5hL2NvbXBvbmVudHMvZmVhdHVyZXMvcXVlcnknO1xuaW1wb3J0IHsgTWFjaGluYURldlNlcnZpY2UgfSBmcm9tICdAeHhtYWNoaW5hL2NvbXBvbmVudHMvc2VydmljZXMvZGVidWcnO1xuaW1wb3J0IHsgVGFibGVPcmdhbmlzbSB9IGZyb20gJ0BuZy1hdG9taWMvY29tcG9uZW50cy9vcmdhbmlzbXMvdGFibGUnO1xuXG5leHBvcnQgZW51bSBBY3Rpb25JZCB7XG4gIE5BVklHQVRFX1RPX0lGUkFNRSA9ICdOQVZJR0FURSBUTyBJRlJBTUUnLFxuICBUT0dHTEVfUEFHRSA9ICflhajkvZPooajnpLonLFxuICBUT0dHTEVfVkFSSUFCTEVTX0ZPUk0gPSAn5aSJ5pWw44OV44Kp44O844Og44Gu6KGo56S65YiH5pu/JyxcbiAgQUREID0gJ+i/veWKoCcsXG4gIERFVEFJTCA9ICfoqbPntLAnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ2VsbFZhbHVlQ2hhbmdlPFQgPSBhbnk+IHtcbiAgaXRlbTogVDtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXJyZW50OiBhbnk7XG4gIG5leHQ6IGFueTtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sdW1uSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUF1dG9maWxsQ2hhbmdlPFQgPSBhbnk+IHtcbiAgc291cmNlSXRlbTogVDtcbiAgc291cmNlVmFsdWU6IGFueTtcbiAgY29sdW1uTmFtZTogc3RyaW5nO1xuICBjb2x1bW5JbmRleDogbnVtYmVyO1xuICBhZmZlY3RlZEl0ZW1zOiBBcnJheTx7XG4gICAgaXRlbTogVDtcbiAgICBuZXdWYWx1ZTogYW55O1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gIH0+O1xuICByYW5nZToge1xuICAgIHN0YXJ0OiB7IHJvdzogbnVtYmVyOyBjb2w6IG51bWJlciB9O1xuICAgIGVuZDogeyByb3c6IG51bWJlcjsgY29sOiBudW1iZXIgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNlbGxDaGFuZ2VPcHRpb25zPFQgPSBhbnk+IHtcbiAgY29sdW1ucz86IChrZXlvZiBUKVtdOyAgLy8g5a++6LGh44Kr44Op44Og77yI5pei5a2Y44GuY29sdW1uTmFtZXPjgajlkIzjgZjvvIlcbiAgZXF1YWxzPzogKGN1cnJlbnQ6IGFueSwgbmV4dDogYW55LCBjb2x1bW5OYW1lOiBzdHJpbmcpID0+IGJvb2xlYW47ICAvLyDjgqvjgrnjgr/jg6Dmr5TovIPplqLmlbBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSXRlbXNNYXAoXG4gIGl0ZW1zUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fSxcbiAgaXRlbXNMZW5ndGhSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fSxcbikge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaXRlbXNSZXN1bHQpLnJlZHVjZSgoYWNjLCBba2V5LCBpdGVtc10pID0+ICh7XG4gICAgLi4uYWNjLFxuICAgIFtrZXldOiB7XG4gICAgICBpdGVtcyxcbiAgICAgIGl0ZW1zTGVuZ3RoOiBpdGVtc0xlbmd0aFJlc3VsdFtrZXldID8/IGl0ZW1zLmxlbmd0aCxcbiAgICB9XG4gIH0pLCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEl0ZW1zTWFwRnJvbVJlc3VsdChcbiAgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gJiBSZWNvcmQ8YCR7c3RyaW5nfUxlbmd0aGAsIG51bWJlcj4gPSB7fSxcbik6IEl0ZW1zTWFwPGFueT4ge1xuICBjb25zb2xlLmRlYnVnKCdbREVCVUddIHJlc3VsdDonLCByZXN1bHQpO1xuICBjb25zdCBkYXRhID0gb21pdEJ5KHJlc3VsdCwgKF8sIGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ18nKSk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gYnVpbGRJdGVtc01hcCh7IGRlZmF1bHQ6IGRhdGEgfSk7XG4gIH0gZWxzZSBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2l0ZW1zJyBpbiBkYXRhKSB7XG4gICAgY29uc3QgaXRlbXNNYXAgPSBidWlsZEl0ZW1zTWFwKHsgZGVmYXVsdDogZGF0YS5pdGVtcyBhcyBhbnlbXSB9LCB7IGRlZmF1bHQ6IGRhdGE/Lml0ZW1zTGVuZ3RoIGFzIG51bWJlciB9KTtcbiAgICByZXR1cm4gaXRlbXNNYXA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaXRlbXNSZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xuICAgIGNvbnN0IGl0ZW1zTGVuZ3RoUmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKCdMZW5ndGgnKSkge1xuICAgICAgICBpdGVtc0xlbmd0aFJlc3VsdFtrZXkucmVwbGFjZSgnTGVuZ3RoJywgJycpXSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zUmVzdWx0W2tleV0gPSB2YWx1ZSBhcyBhbnlbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGRJdGVtc01hcChpdGVtc1Jlc3VsdCwgaXRlbXNMZW5ndGhSZXN1bHQpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUXVlcnlBY3Rpb25SZWR1Y2VyIHtcbiAgcmVhZG9ubHkgYWN0aW9uID0gc2lnbmFsPEFjdGlvbj4obnVsbCk7XG4gIHJlYWRvbmx5IGFjdGlvbiQgPSB0b09ic2VydmFibGUodGhpcy5hY3Rpb24pO1xuXG4gIGRpc3BhdGNoKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgdGhpcy5hY3Rpb24uc2V0KGFjdGlvbik7XG4gIH1cbn1cblxuXG5AVG9rZW5pemVkVHlwZSgpXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFnZVN0b3JlIGV4dGVuZHMgSW5qZWN0YWJsZUNvbXBvbmVudCB7XG4gIHN0YXRpYyByZWFkb25seSBBY3Rpb25JZCA9IEFjdGlvbklkO1xuICBzdGF0aWMgcmVhZG9ubHkgREkgPSBtYWtlREkoUXVlcnlQYWdlU3RvcmUsICgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICBzdHlsZTogPGFueT57XG4gICAgICAgIHdpZHRoOiAndmFyKC0tcGFnZS13aWR0aC1sdjIpJyxcbiAgICAgIH0sXG4gICAgICB0aXRsZTogPHN0cmluZz5udWxsLFxuICAgICAgdGl0bGVFZGl0YWJsZTogdHJ1ZSxcbiAgICAgIGNoaWxkcmVuS2V5OiAnY2hpbGRyZW4nIHNhdGlzZmllcyBzdHJpbmcsXG4gICAgICBhZGRpdGlvbmFsTmF2RW5kQWN0aW9uczogPEFjdGlvbltdPltdLFxuICAgICAgbmF2RW5kQWN0aW9uczogPE5hdkFjdGlvbnM+W10sXG4gICAgICBhZGRpdGlvbmFsQ29sdW1uczogKGl0ZW1zOiBvYmplY3RbXSkgPT4gW10gYXMgc3RyaW5nW10sXG4gICAgICBpdGVtQWN0aW9uczogKGl0ZW0gPT4gW3sgaWQ6IFF1ZXJ5UGFnZVN0b3JlLkFjdGlvbklkLkRFVEFJTCwgaWNvbjogJ29wZW5faW5fbmV3JywgbmFtZTogJ+ips+e0sCcsIHBheWxvYWQ6IGl0ZW0gfV0pIGFzIEl0ZW1BY3Rpb25zLFxuICAgICAgcGFnZVNpemVPcHRpb25zOiBbNTAsIDEwMCwgMzAwLCA1MDAsIDEwMDBdLFxuICAgIH0pO1xuICB9LCBbJ0B4eG1hY2hpbmEvY29tcG9uZW50cycsICdwYWdlcycsICdxdWVyeSddKTtcblxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIGBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXJgIGluc3RlYWQgKi9cbiAgc3RhdGljIHJlYWRvbmx5IEluaXRpYWxpemVyID0gbWFrZUluaXRpYWxpemVyQ29uZmlnKFF1ZXJ5UGFnZVN0b3JlKTtcblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHQoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVDb25maWcoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVEZWZhdWx0SW5pdGlhbGl6ZXMoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVEZWZhdWx0RWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZURlYnVnU3R5bGVJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlGZWF0dXJlLnByb3ZpZGVEZWZhdWx0KCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ3VzdG9tKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlQ29uZmlnKCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEluaXRpYWxpemVzKCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlRGVmYXVsdEVmZmVjdHMoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVEZWJ1Z1N0eWxlSW5pdGlhbGl6ZXIoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVOb25FZGl0YWJsZUNvbmZpZygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZVF1ZXJ5RnJvbVJvdXRlRGF0YVF1ZXJ5SWRJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUF1dG9Ub2dnbGVQYWdlSW5pdGlhbGl6ZXIoKSxcbiAgICAgIFF1ZXJ5RmVhdHVyZS5wcm92aWRlRGVmYXVsdCgpLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZURlZmF1bHRWMigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUN1c3RvbSgpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUuREkuQ29uZmlnLnByb3ZpZGUoKCkgPT4gY29uZmlnID0+ICh7IC4uLmNvbmZpZyB9KSksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlVGl0bGVGcm9tUXVlcnlSZXN1bHRJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZVF1ZXJ5RnJvbVJvdXRlRGF0YUluaXRpYWxpemVyKCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlUGFnaW5hdGlvbkluaXRpYWxpemVyKCksXG4gICAgXTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYHByb3ZpZGVDdXN0b21gIGluc3RlYWQgKi9cbiAgc3RhdGljIHByb3ZpZGVGb3JDdXN0b21QYWdlKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVDdXN0b20oKTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlTm9uRWRpdGFibGVDb25maWcoKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlQ29uZmlnKCgpID0+IHtcbiAgICAgIHJldHVybiBjb25maWcgPT4gKHtcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICB0aXRsZUVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAuLi5jb25maWcuc3R5bGUsXG4gICAgICAgICAgd2lkdGg6IGB2YXIoLS1wYWdlLXdpZHRoLWx2MylgXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdEluaXRpYWxpemVzKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlQXV0b1RvZ2dsZVBhZ2VJbml0aWFsaXplcigpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZVZhcmlhYmxlc0Zvcm1WYWx1ZUZyb21NYXRyaXhQYXJhbXNJbml0aWFsaXplcigpLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZU5hdkVuZEFjdGlvbnNJbml0aWFsaXplcnMoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBpY29uID0gc3RvcmUuc3R5bGUoKT8ud2lkdGggPT09ICd2YXIoLS1wYWdlLXdpZHRoLWx2MyknID8gJ2Nsb3NlX2Z1bGxzY3JlZW4nIDogJ29wZW5faW5fZnVsbCc7XG4gICAgICAgICAgY29uc3QgbmF2RW5kQWN0aW9ucyA9IFtcbiAgICAgICAgICAgIGNyZWF0ZUFjdGlvbihRdWVyeUZlYXR1cmUuQWN0aW9uSWQu44Kv44Ko44Oq44Gu5a6f6KGMLCBudWxsLCB7IGljb246ICdwbGF5X2Fycm93JyB9KS5jcmVhdGUoKSxcbiAgICAgICAgICAgIHN0b3JlLnZhcmlhYmxlc0Zvcm1EaXNwbGF5ZWQoKSA/IGNyZWF0ZUFjdGlvbihBY3Rpb25JZC5UT0dHTEVfUEFHRSwgbnVsbCwgeyBpY29uIH0pLmNyZWF0ZSgpIDogbnVsbCxcbiAgICAgICAgICAgIGNyZWF0ZUFjdGlvbihRdWVyeUZlYXR1cmUuQWN0aW9uSWQu44Kv44Ko44Oq44Gu5pu05pawLCBudWxsLCB7IGljb246ICdzYXZlJyB9KS5jcmVhdGUoKSxcbiAgICAgICAgICBdLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICduYXZFbmRBY3Rpb25zJywgbmF2RW5kQWN0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlVmFyaWFibGVzRnJvbVJvdXRlUGFyYW1EYXRhSW5pdGlhbGl6ZXIoKSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVWYXJpYWJsZXNGcm9tUm91dGVQYXJhbURhdGFJbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKHN0b3JlID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdFVuZmxhdHRlblJvdXRlUGFyYW0oJ2RhdGEnKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBzdG9yZS52YXJpYWJsZXNGb3JtVmFsdWUoKTtcbiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZSh2YXJpYWJsZXMsIGRhdGEoKSk7XG4gICAgICAgICAgc3RvcmUuZmVhdHVyZS5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZ3JhcGhxbDoge1xuICAgICAgICAgICAgICB2YXJpYWJsZXNKc29uOiBKU09OLnN0cmluZ2lmeShtZXJnZWQsIG51bGwsIDIpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlVmFyaWFibGVzRnJvbVJvdXRlUGFyYW1Jbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKHN0b3JlID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluamVjdFVuZmxhdHRlblJvdXRlUGFyYW0oKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBzdG9yZS52YXJpYWJsZXNGb3JtVmFsdWUoKTtcbiAgICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZSh2YXJpYWJsZXMsIGRhdGEoKSk7XG4gICAgICAgICAgc3RvcmUuZmVhdHVyZS5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZ3JhcGhxbDoge1xuICAgICAgICAgICAgICB2YXJpYWJsZXNKc29uOiBKU09OLnN0cmluZ2lmeShtZXJnZWQsIG51bGwsIDIpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQXV0b1RvZ2dsZVBhZ2VJbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvdmlkZUVmZmVjdChSb3V0ZXJPdXRsZXRGcmFtZVN0b3JlLkFjdGlvbklkLkRFQUNUSVZBVEVELCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gaW5qZWN0KFF1ZXJ5UGFnZVN0b3JlKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb21wdXRlRmFrZShzdG9yZS5zdHlsZSgpKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdzdHlsZScsIHsgLi4uc3R5bGUsIHBhZGRpbmdMZWZ0OiBgMGAgfSk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBjb21wdXRlRmFrZShzdG9yZS5zdHlsZSgpKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBpZiAoaGFzTmV4dCgpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN0eWxlLndpZHRoID09PSAndmFyKC0tcGFnZS13aWR0aC1sdjMpJykge1xuICAgICAgICAgICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ3N0eWxlJywge1xuICAgICAgICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJ3ZhcigtLXBhZ2Utd2lkdGgtbHYxKScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVZhcmlhYmxlc0Zvcm1WYWx1ZUZyb21NYXRyaXhQYXJhbXNJbml0aWFsaXplcigpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKChzdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gaW5qZWN0VW5mbGF0dGVuUm91dGVQYXJhbSgnZGF0YScpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIHN0b3JlLnZhcmlhYmxlc0Zvcm0oKT8ucGF0Y2hWYWx1ZSh7IC4uLmRhdGEoKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdXG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVF1ZXJ5RnJvbVJvdXRlRGF0YVF1ZXJ5SWRJbml0aWFsaXplcihrZXkgPSAncXVlcnlJZCcpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUuREkucHJvdmlkZUluaXRpYWxpemVyKChzdG9yZSkgPT4ge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGluamVjdE9uZShRdWVyeSwgeyBpZDogaW5qZWN0Um91dGVEYXRhPHN0cmluZz4oa2V5KSB9KTtcbiAgICAgICAgY29uc3QgX3F1ZXJ5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBxdWVyeSgpO1xuICAgICAgICB9LCB7IGVxdWFsOiAocHJlLCBjdXIpID0+IEpTT04uc3RyaW5naWZ5KHByZSkgPT09IEpTT04uc3RyaW5naWZ5KGN1cikgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbUXVlcnlQYWdlU3RvcmVdIHF1ZXJ5OicsIF9xdWVyeSgpKTtcbiAgICAgICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdxdWVyeScsIF9xdWVyeSgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVRdWVyeUZyb21Sb3V0ZURhdGFJbml0aWFsaXplcihrZXkgPSAncXVlcnknKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbmplY3RSb3V0ZURhdGE8UXVlcnk+KGtleSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiBhcHBseVRvSW5wdXQoc3RvcmUsICdxdWVyeScsIHF1ZXJ5KCkpKTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUl0ZW1BY3Rpb25zRnJvbVJvdXRlRGF0YUluaXRpYWxpemVyKGtleSA9ICdpdGVtQWN0aW9uc0NvbW1hbmRJZHMnKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXIoKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBpZE9yT2JqZWN0QXJyYXkgPSBpbmplY3RSb3V0ZURhdGE8c3RyaW5nW10gfCB7IGlkOiBzdHJpbmcsIG9wdGlvbnM6IHsgcXVlcnlJZCB9IH1bXT4oa2V5KTtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29tbWFuZFNlcnZpY2UpO1xuICAgICAgY29uc3QgaXRlbUFjdGlvbnM6IEl0ZW1BY3Rpb25zID0gKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gKGlkT3JPYmplY3RBcnJheSgpID8/IFtdKS5tYXAoKGlkT3JPYmplY3QpID0+ICh7XG4gICAgICAgICAgaWQ6IHR5cGVvZiBpZE9yT2JqZWN0ID09PSAnc3RyaW5nJyA/IGlkT3JPYmplY3QgOiBpZE9yT2JqZWN0LmlkLFxuICAgICAgICAgIG9wdGlvbnM6IHR5cGVvZiBpZE9yT2JqZWN0ID09PSAnc3RyaW5nJyA/IHt9IDogaWRPck9iamVjdC5vcHRpb25zLFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBzZXJ2aWNlLmdldEFjdGlvbkJ1aWxkZXIoKS5zZXRJdGVtKGl0ZW0pO1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gcGFyYW1zLm1hcChwYXJhbSA9PiBidWlsZGVyLnNldE9wdGlvbnMocGFyYW0ub3B0aW9ucykuYnVpbGRBY3Rpb24ocGFyYW0uaWQpKTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnYWN0aW9uczonLCBhY3Rpb25zKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgICB9XG4gICAgICBhcHBseVRvSW5wdXQoc3RvcmUsICdpdGVtQWN0aW9ucycsIGl0ZW1BY3Rpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlTmF2RW5kQWN0aW9uc0Zyb21Sb3V0ZURhdGFJbml0aWFsaXplcihrZXkgPSAnbmF2RW5kQWN0aW9uc0NvbW1hbmRJZHMnKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXIoKHN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBpbmplY3RSb3V0ZURhdGE8KHN0cmluZyB8IHsgaWQ6IHN0cmluZywgYXV0bzogYm9vbGVhbiB9KVtdPihrZXkpO1xuICAgICAgY29uc3QgcXVlcnlJZCA9IGluamVjdFJvdXRlRGF0YTxzdHJpbmc+KCduYXZFbmRBY3Rpb25zQ29tbWFuZFF1ZXJ5SWQnKTtcbiAgICAgIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29tbWFuZFNlcnZpY2UpO1xuICAgICAgY29uc3Qgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgY29uc3QgaGFzTmV4dCA9IGluamVjdEhhc05leHQoKVxuXG4gICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gc2VydmljZS5nZXRBY3Rpb25CdWlsZGVyKCkuc2V0RmlsdGVySWRzKGlkcygpKS5zZXRPcHRpb25zKHsgcXVlcnlJZDogcXVlcnlJZCgpIH0pLmJ1aWxkQWN0aW9ucyh1bmRlZmluZWQsIHsgcmVsYXRpdmVUbzogcm91dGUsIHJlcGxhY2VVcmw6IGhhc05leHQoKSB9KTtcbiAgICAgICAgYXBwbHlUb0lucHV0KHN0b3JlLCAnbmF2RW5kQWN0aW9ucycsIFtcbiAgICAgICAgICBzdG9yZS52YXJpYWJsZXNGb3JtRGlzcGxheWVkKCkgPyB7IGlkOiBBY3Rpb25JZC5UT0dHTEVfVkFSSUFCTEVTX0ZPUk0sIGljb246IHN0b3JlLm5hdk1vZGUoKSA9PT0gJ2NvbGxhcHNlZCcgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9IDogbnVsbCxcbiAgICAgICAgICAvLyBUT0RPKEBOb3pvbXVNaXlhbW90byk6IOWkieabtFxuICAgICAgICAgIGFjdGlvbnM/Lmxlbmd0aCA/IHtcbiAgICAgICAgICAgIGlkOiAnb3Blbl9jb21tYW5kX21lbnUnLFxuICAgICAgICAgICAgaWNvbjogJ21vcmVfdmVydCcsXG4gICAgICAgICAgICBjaGlsZHJlbjogWy4uLmFjdGlvbnNdLFxuICAgICAgICAgIH0gOiBudWxsLFxuICAgICAgICBdLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlRGVmYXVsdEVmZmVjdHMoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVDb21tYW5kRWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZU5hdk1vZGVUb2dnbGVFZmZlY3QoKSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLnByb3ZpZGVDaGFuZ2VXaWR0aEVmZmVjdCgpLFxuICAgICAgUXVlcnlGZWF0dXJlLnByb3ZpZGVEZWZhdWx0RWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZU5hdmlnYXRlRWZmZWN0cygpLFxuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUVkaXRpbmdTdGF0ZUVmZmVjdHMoKSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVFZGl0aW5nU3RhdGVFZmZlY3RzKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBwcm92aWRlRWZmZWN0KFZhbHVlQ2VsbEF0b21TdG9yZS5BY3Rpb25JZC5TVEFSVF9FRElULCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRpbmdTdGF0ZU1hbmFnZXIgPSBpbmplY3QoRWRpdGluZ1N0YXRlTWFuYWdlcik7XG4gICAgICAgIHJldHVybiAocGF5bG9hZDogeyByb3dJZDogc3RyaW5nOyBjb2x1bW5JZDogc3RyaW5nOyBpdGVtPzogYW55IH0pID0+IHtcbiAgICAgICAgICBlZGl0aW5nU3RhdGVNYW5hZ2VyLnN0YXJ0RWRpdGluZyhwYXlsb2FkLnJvd0lkLCBwYXlsb2FkLmNvbHVtbklkKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgcHJvdmlkZUVmZmVjdChWYWx1ZUNlbGxBdG9tU3RvcmUuQWN0aW9uSWQuRU5EX0VESVQsICgpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdGluZ1N0YXRlTWFuYWdlciA9IGluamVjdChFZGl0aW5nU3RhdGVNYW5hZ2VyKTtcbiAgICAgICAgcmV0dXJuIChwYXlsb2FkPzogeyByb3dJZD86IHN0cmluZzsgY29sdW1uSWQ/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWRpdGluZ1N0YXRlTWFuYWdlci5zdG9wRWRpdGluZyhwYXlsb2FkLnJvd0lkLCBwYXlsb2FkLmNvbHVtbklkKSwgMCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVDb21tYW5kRWZmZWN0cygpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgUXVlcnlQYWdlU3RvcmUucHJvdmlkZUNvbW1hbmRFeGVjdXRlRWZmZWN0KCksXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5wcm92aWRlQ29tbWFuZE5hdmlnYXRlRWZmZWN0KCksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlQ29tbWFuZEV4ZWN1dGVFZmZlY3QoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3ZpZGVFZmZlY3QoQ29tbWFuZFNlcnZpY2UuQWN0aW9uSWQuRVhFQ1VURV9DT01NQU5ELCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRTZXJ2aWNlID0gaW5qZWN0KENvbW1hbmRTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChwYXlsb2FkOiBDb21tYW5kQWN0aW9uUGF5bG9hZDxhbnk+KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgICAgIGNvbnN0IG9iaiA9IG9taXRCeShwYXlsb2FkLmJvZHksICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBpbmplY3QoQ29tbWFuZFNlcnZpY2UpLmdldENvbW1hbmQocGF5bG9hZC5jb21tYW5kLmlkKTtcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKCdbUXVlcnlQYWdlXSBwYXlsb2FkOicsIHBheWxvYWQpO1xuICAgICAgICAgIGlmIChwYXlsb2FkLm9wdGlvbnM/LmNvbmZpcm0gJiYgIShhd2FpdCBwYXlsb2FkLm9wdGlvbnM/LmNvbmZpcm0oKSkpIHtcbiAgICAgICAgICAgIGFwcC5zbmFja0Jhci5vcGVuKCfjgq3jg6Pjg7Pjgrvjg6vjgZXjgozjgb7jgZfjgZ/jgIInKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXBwLmxvYWRpbmcuYXdhaXQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRTZXJ2aWNlLmV4ZWN1dGUoY29tbWFuZCwgb2JqKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBwLnNuYWNrQmFyLm9wZW4oJ+aIkOWKn+OBl+OBvuOBl+OBn+OAgicpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICBhcHAuc25hY2tCYXIub3Blbihg44Ko44Op44O8OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZUNvbW1hbmROYXZpZ2F0ZUVmZmVjdCgpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvdmlkZUVmZmVjdChDb21tYW5kU2VydmljZS5BY3Rpb25JZC5OQVZJR0FURV9UT19DT01NQU5EX1BBR0UsICgpID0+IHtcbiAgICAgICAgY29uc3QgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICAgICAgICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIGNvbnN0IGhhc05leHQgPSBpbmplY3RIYXNOZXh0KCk7XG4gICAgICAgIHJldHVybiAocGF5bG9hZDogQ29tbWFuZEFjdGlvblBheWxvYWQ8YW55PikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsYXQgPSBmbGF0dGVuPG9iamVjdCwgb2JqZWN0Pih7IGRhdGE6IHsgaWQ6IHBheWxvYWQuYm9keT8uaWQgfSwgcXVlcnlJZDogcGF5bG9hZD8ub3B0aW9ucz8ucXVlcnlJZCB9KTtcbiAgICAgICAgICBjb25zdCBfZmxhdCA9IG9taXRCeShmbGF0LCAodmFsdWUpID0+IHZhbHVlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgIGFwcC5yb3V0ZXIubmF2aWdhdGUoWydjb21tYW5kcycsIHsgc2tpcDogdHJ1ZSB9LCBwYXlsb2FkLmNvbW1hbmQuaWQsIF9mbGF0XSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogcm91dGUsXG4gICAgICAgICAgICByZXBsYWNlVXJsOiBoYXNOZXh0KCksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIF1cbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlTmF2TW9kZVRvZ2dsZUVmZmVjdCgpOiBQcm92aWRlciB7XG4gICAgcmV0dXJuIHByb3ZpZGVFZmZlY3QoQWN0aW9uSWQuVE9HR0xFX1ZBUklBQkxFU19GT1JNLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IGluamVjdChRdWVyeVBhZ2VTdG9yZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdG9yZS5uYXZNb2RlLnNldChzdG9yZS5uYXZNb2RlKCkgPT09ICdjb2xsYXBzZWQnID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnKTtcbiAgICAgIH07XG4gICAgfSwgeyBzY29wZXM6IFsncm9vdCcsICdob3N0J10gfSk7XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZU5hdkVuZEFjdGlvbnNJbml0aWFsaXplcigpOiBQcm92aWRlciB7XG4gICAgcmV0dXJuIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgIGNvbnN0IG5hdkVuZEFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgICAgIHN0b3JlLnZhcmlhYmxlc0Zvcm1EaXNwbGF5ZWQoKSA/IHsgXG4gICAgICAgICAgaWQ6IEFjdGlvbklkLlRPR0dMRV9WQVJJQUJMRVNfRk9STSwgXG4gICAgICAgICAgaWNvbjogc3RvcmUubmF2TW9kZSgpID09PSAnY29sbGFwc2VkJyA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIFxuICAgICAgICB9IDogbnVsbCxcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pKTtcblxuICAgICAgZWZmZWN0KCgpID0+IGFwcGx5VG9JbnB1dChzdG9yZSwgJ25hdkVuZEFjdGlvbnMnLCBbXG4gICAgICAgIC4uLm5hdkVuZEFjdGlvbnMoKSxcbiAgICAgICAgLi4uc3RvcmUuYWRkaXRpb25hbE5hdkVuZEFjdGlvbnMoKVxuICAgICAgXSkpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVDaGFuZ2VXaWR0aEVmZmVjdCgpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgcHJvdmlkZUVmZmVjdChJbmRleFRlbXBsYXRlU3RvcmUuQWN0aW9uSWQuVEFCTEVfQ09MVU1OX1dJRFRIX0NIQU5HRSwgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZSA9IGluamVjdChRdWVyeVBhZ2VTdG9yZSk7XG4gICAgICAgIHJldHVybiAocGF5bG9hZDogeyBjb2x1bW5OYW1lOiBzdHJpbmcsIGtleTogbnVtYmVyLCB3aWR0aDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtID0gc3RvcmUuaXRlbXNNYXAoKT8uW3BheWxvYWQua2V5XT8uZm9ybSB8fCBzdG9yZS5mb3JtKCk7XG4gICAgICAgICAgZm9ybS5wYXRjaFZhbHVlKHsgY29sdW1uczogeyBtYXA6IHsgW3BheWxvYWQuY29sdW1uTmFtZV06IHsgd2lkdGg6IHBheWxvYWQud2lkdGggfSB9IH0gfSk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVOYXZpZ2F0ZUVmZmVjdHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3ZpZGVFZmZlY3QoUXVlcnlQYWdlU3RvcmUuQWN0aW9uSWQuQURELCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcCA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgZXh0cmFzID0gaW5qZWN0TmF2aWdhdGlvbkV4dHJhcygpO1xuICAgICAgICByZXR1cm4gKGl0ZW0pID0+IGFwcC5yb3V0ZXIubmF2aWdhdGUoWyduZXcnXSwgZXh0cmFzKCkpO1xuICAgICAgfSksXG4gICAgICBwcm92aWRlRWZmZWN0KFF1ZXJ5UGFnZVN0b3JlLkFjdGlvbklkLkRFVEFJTCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBhcHAgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gICAgICAgIGNvbnN0IGV4dHJhcyA9IGluamVjdE5hdmlnYXRpb25FeHRyYXMoKTtcbiAgICAgICAgcmV0dXJuIChpdGVtKSA9PiBhcHAucm91dGVyLm5hdmlnYXRlKFtpdGVtLmlkXSwgZXh0cmFzKCkpO1xuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBwcm92aWRlUGFnaW5hdGlvbkluaXRpYWxpemVyKCk6IFByb3ZpZGVyW10ge1xuICAgIHJldHVybiBbXG4gICAgICBRdWVyeVBhZ2VTdG9yZS5ESS5wcm92aWRlSW5pdGlhbGl6ZXIoKHN0b3JlKSA9PiB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IHN0b3JlLmNvbHVtbk5hbWVzKCk7XG4gICAgICAgICAgY29uc3Qgc3RpY2t5ID0gc3RvcmUuc3RpY2t5KCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZCgoKSA9PiBzdG9yZS5mb3JtKCkpPy52YWx1ZTtcbiAgICAgICAgICBjb25zdCBmb3JtID0gc3RvcmUuaW5kZXhGb3JtQnVpbGRlci5idWlsZCh7XG4gICAgICAgICAgICBjb2x1bW5zOiBidWlsZENvbHVtbnMoWy4uLmNvbHVtbnMsICdfX2FjdGlvbnMnXSwgc3RpY2t5KSxcbiAgICAgICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAgICAgc2l6ZTogY3VycmVudD8ucGFnZT8uc2l6ZSA/PyAxMDAsXG4gICAgICAgICAgICAgIGluZGV4OiBjdXJyZW50Py5wYWdlPy5pbmRleCA/PyAwLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFwcGx5VG9JbnB1dChzdG9yZSwgJ2Zvcm0nLCBmb3JtKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IGRlcml2ZWRBc3luYygoKSA9PiBnZXRWYWx1ZSQoc3RvcmUuZm9ybSgpLmdldChbJ3BhZ2UnXSkpLCB7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlOiB7IGluZGV4OiAwLCBzaXplOiAxMDAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBfcGFnZSA9IHBhZ2UoKSB8fCB7IGluZGV4OiAwLCBzaXplOiAxMDAgfTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb2Zmc2V0OiBfcGFnZS5pbmRleCAqIF9wYWdlLnNpemUsXG4gICAgICAgICAgICBsaW1pdDogX3BhZ2Uuc2l6ZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgX3BhZ2luYXRpb24gPSBwYWdpbmF0aW9uKCk7XG4gICAgICAgICAgc3RvcmUudmFyaWFibGVzRm9ybSgpPy5wYXRjaFZhbHVlKF9wYWdpbmF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVUYWJsZUNlbGxWYWx1ZUNoYW5nZUVmZmVjdDxUID0gYW55PihcbiAgICBoYW5kbGVyRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gKFxuICAgICAgY2hhbmdlOiBUYWJsZUNlbGxWYWx1ZUNoYW5nZTxUPiwgXG4gICAgICBzZXRWYWx1ZTogKHZhbHVlOiBhbnkpID0+IHZvaWRcbiAgICApID0+IHZvaWQsXG4gICAgb3B0aW9uc09yQ29sdW1ucz86IFRhYmxlQ2VsbENoYW5nZU9wdGlvbnM8VD4gfCAoa2V5b2YgVClbXSxcbiAgKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBwcm92aWRlRWZmZWN0KFZhbHVlQ2VsbEF0b21TdG9yZS5BY3Rpb25JZC5VUERBVEVfVkFMVUUsIChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgIC8vIOW+jOaWueS6kuaPm+aAp+OBruOBn+OCgeOBruOCquODl+OCt+ODp+ODs+ato+imj+WMllxuICAgICAgY29uc3Qgbm9ybWFsaXplZE9wdGlvbnM6IFRhYmxlQ2VsbENoYW5nZU9wdGlvbnM8VD4gPSBBcnJheS5pc0FycmF5KG9wdGlvbnNPckNvbHVtbnMpIFxuICAgICAgICA/IHsgY29sdW1uczogb3B0aW9uc09yQ29sdW1ucyB9XG4gICAgICAgIDogKG9wdGlvbnNPckNvbHVtbnMgfHwge30pO1xuICAgICAgXG4gICAgICAvLyDjg4fjg5Xjgqnjg6vjg4jjga7mr5TovIPplqLmlbBcbiAgICAgIGNvbnN0IGRlZmF1bHRFcXVhbHMgPSAoY3VycmVudDogYW55LCBuZXh0OiBhbnkpID0+IGN1cnJlbnQgPT09IG5leHQ7XG4gICAgICBjb25zdCBlcXVhbHNGbiA9IG5vcm1hbGl6ZWRPcHRpb25zLmVxdWFscyB8fCBkZWZhdWx0RXF1YWxzO1xuICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJGYWN0b3J5KGluamVjdG9yKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIChhY3Rpb246IFVwZGF0ZVZhbHVlUGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRleHQsIG5leHQsIGN1cnJlbnQsIHNldFZhbHVlIH0gPSBhY3Rpb247XG4gICAgICAgIGNvbnN0IG5hbWUgPSBjb250ZXh0Lm5hbWUgYXMga2V5b2YgVDtcbiAgICAgICAgXG4gICAgICAgIC8vIOODleOCo+ODvOODq+ODieODleOCo+ODq+OCv+ODquODs+OCsFxuICAgICAgICBpZiAobm9ybWFsaXplZE9wdGlvbnMuY29sdW1ucyAmJiBub3JtYWxpemVkT3B0aW9ucy5jb2x1bW5zLmxlbmd0aCA+IDAgJiYgIW5vcm1hbGl6ZWRPcHRpb25zLmNvbHVtbnMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIOWApOOBruavlOi8g1xuICAgICAgICBpZiAoZXF1YWxzRm4oY3VycmVudCwgbmV4dCwgbmFtZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgICAgLy8g5YCk44GM5ZCM44GY5aC05ZCI44Gv5Yem55CG44KS44K544Kt44OD44OXXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBUYWJsZUNlbGxWYWx1ZUNoYW5nZeOCquODluOCuOOCp+OCr+ODiOOBruS9nOaIkFxuICAgICAgICBjb25zdCBjaGFuZ2U6IFRhYmxlQ2VsbFZhbHVlQ2hhbmdlPFQ+ID0ge1xuICAgICAgICAgIGl0ZW06IGNvbnRleHQuaXRlbSxcbiAgICAgICAgICBuYW1lOiBuYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICBjdXJyZW50OiBjdXJyZW50LFxuICAgICAgICAgIG5leHQ6IG5leHQsXG4gICAgICAgICAgcm93SW5kZXg6IGNvbnRleHQucG9zaXRpb24/LnJvdyA/PyAwLFxuICAgICAgICAgIGNvbHVtbklkOiBjb250ZXh0Lm5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8g44OP44Oz44OJ44Op44O844Gu5a6f6KGMXG4gICAgICAgIGhhbmRsZXIoY2hhbmdlLCBzZXRWYWx1ZSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVUYWJsZUF1dG9maWxsRWZmZWN0PFQgPSBhbnk+KFxuICAgIGhhbmRsZXJGYWN0b3J5OiAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoXG4gICAgICBhdXRvZmlsbDogVGFibGVBdXRvZmlsbENoYW5nZTxUPlxuICAgICkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4sXG4gICk6IFByb3ZpZGVyIHtcbiAgICByZXR1cm4gcHJvdmlkZUVmZmVjdChUYWJsZU9yZ2FuaXNtLkFjdGlvbklkLkFVVE9GSUxMX0NPTVBMRVRFLCAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlckZhY3RvcnkoaW5qZWN0b3IpO1xuICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoUXVlcnlQYWdlU3RvcmUpO1xuICAgICAgXG4gICAgICByZXR1cm4gYXN5bmMgKHBheWxvYWQ6IHsgc291cmNlUG9zaXRpb246IGFueTsgdGFyZ2V0UmFuZ2U6IGFueTsgY29udGV4dHM/OiBhbnkgfSkgPT4ge1xuICAgICAgICAvLyBUYWJsZU9yZ2FuaXNt44GL44KJ5rih44GV44KM44Gf44Kz44Oz44OG44Kt44K544OI5oOF5aCx44KS5L2/55SoXG4gICAgICAgIGlmICghcGF5bG9hZC5jb250ZXh0cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTm8gYXV0b2ZpbGwgY29udGV4dHMgcHJvdmlkZWQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHsgc291cmNlQ29udGV4dCwgdGFyZ2V0Q29udGV4dHMgfSA9IHBheWxvYWQuY29udGV4dHM7XG4gICAgICAgIGNvbnN0IHNvdXJjZUl0ZW0gPSBzb3VyY2VDb250ZXh0Lml0ZW0gYXMgVDtcbiAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IHNvdXJjZUNvbnRleHQubmFtZTtcbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSAoc291cmNlSXRlbSBhcyBhbnkpW2NvbHVtbk5hbWVdO1xuICAgICAgICBcbiAgICAgICAgLy8g5b2x6Z+/44KS5Y+X44GR44KL44Ki44Kk44OG44Og44KS5Y+O6ZuG77yI6KGo56S644GV44KM44Gm44GE44KL44K744Or44Gu44G/77yJXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkSXRlbXM6IEFycmF5PHsgaXRlbTogVDsgbmV3VmFsdWU6IGFueTsgcm93SW5kZXg6IG51bWJlciB9PiA9IFtdO1xuICAgICAgICBcbiAgICAgICAgdGFyZ2V0Q29udGV4dHMuZm9yRWFjaCgoeyBwb3NpdGlvbiwgY29udGV4dCB9OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRJdGVtID0gY29udGV4dC5pdGVtIGFzIFQ7XG4gICAgICAgICAgLy8g5YCk44Gu55Sf5oiQXG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gc291cmNlVmFsdWU7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8g5pWw5YCk44Gu6YCj55WqXG4gICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gc291cmNlVmFsdWUgKyBpbmRleCArIDE7XG4gICAgICAgICAgfSBcbiAgICAgICAgICAvLyDmloflrZfliJfjg5Hjgr/jg7zjg7NcbiAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygc291cmNlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVNYXRjaCA9IHNvdXJjZVZhbHVlLm1hdGNoKC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9KSQvKTtcbiAgICAgICAgICAgICAgaWYgKGRhdGVNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGUgPSBuZXcgRGF0ZShkYXRlTWF0Y2hbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShzb3VyY2VEYXRlKTtcbiAgICAgICAgICAgICAgICBuZXdEYXRlLnNldERhdGUoc291cmNlRGF0ZS5nZXREYXRlKCkgKyBpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbmV3RGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgYWZmZWN0ZWRJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGl0ZW06IHRhcmdldEl0ZW0sXG4gICAgICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgICAgIHJvd0luZGV4OiBwb3NpdGlvbi5yb3dcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyDjgqrjg7zjg4jjg5XjgqPjg6vjga7lpInmm7Tmg4XloLHjgpLkvZzmiJBcbiAgICAgICAgY29uc3QgYXV0b2ZpbGxDaGFuZ2U6IFRhYmxlQXV0b2ZpbGxDaGFuZ2U8VD4gPSB7XG4gICAgICAgICAgc291cmNlSXRlbSxcbiAgICAgICAgICBzb3VyY2VWYWx1ZSxcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIGNvbHVtbkluZGV4OiBwYXlsb2FkLnNvdXJjZVBvc2l0aW9uLmNvbCxcbiAgICAgICAgICBhZmZlY3RlZEl0ZW1zLFxuICAgICAgICAgIHJhbmdlOiBwYXlsb2FkLnRhcmdldFJhbmdlXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyDjg4/jg7Pjg4njg6njg7zjgpLlrp/ooYxcbiAgICAgICAgYXdhaXQgaGFuZGxlcihhdXRvZmlsbENoYW5nZSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHByb3ZpZGVEZWJ1Z1N0eWxlSW5pdGlhbGl6ZXIoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgY29uc3QgZGVidWcgPSBpbmplY3QoTWFjaGluYURldlNlcnZpY2UpXG4gICAgICAgIGNvbnN0IGVsID0gaW5qZWN0KEVsZW1lbnRSZWYpXG4gICAgICAgIGVmZmVjdCgoKSA9PiBlbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWlzLWRlYnVnJywgZGVidWcuaXNEZXZNb2RlKCkgPyAnMScgOiAnMCcpKTtcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgcHJvdmlkZVRpdGxlRnJvbVF1ZXJ5UmVzdWx0SW5pdGlhbGl6ZXIoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLnByb3ZpZGVJbml0aWFsaXplcigoc3RvcmUpID0+IHtcbiAgICAgICAgZWZmZWN0KCgpID0+IGFwcGx5VG9JbnB1dChzdG9yZSwgJ3RpdGxlJywgc3RvcmUuZmVhdHVyZS5yZXN1bHQoKT8uX19tZXRhX18/LnRpdGxlKSk7XG4gICAgICB9KSxcbiAgICBdXG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnID0gUXVlcnlQYWdlU3RvcmUuREkuaW5qZWN0Q29uZmlnKCk7XG4gIHJlYWRvbmx5IGZlYXR1cmUgPSBpbmplY3QoUXVlcnlGZWF0dXJlKTtcbiAgcmVhZG9ubHkgdmFyaWFibGVzRm9ybUZlYXR1cmUgPSBpbmplY3QoUXVlcnlHcmFwaHFsVmFyaWFibGVzRm9ybUZlYXR1cmUpO1xuICByZWFkb25seSBpbmRleEZvcm1CdWlsZGVyID0gaW5qZWN0SW5kZXhGb3JtQnVpbGRlcigpO1xuXG4gIHJlYWRvbmx5IG5hdk1vZGUgPSBzaWduYWw8J2V4cGFuZGVkJyB8ICdjb2xsYXBzZWQnPignY29sbGFwc2VkJyk7XG4gIHJlYWRvbmx5IGVkaXRpbmdTdGF0ZU1hbmFnZXIgPSBpbmplY3QoRWRpdGluZ1N0YXRlTWFuYWdlcik7XG4gIHJlYWRvbmx5IHN0eWxlID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkuc3R5bGUpKTtcbiAgcmVhZG9ubHkgcXVlcnkgPSBpbnB1dDxRdWVyeT4obnVsbCk7XG5cbiAgcmVhZG9ubHkgI25hdlN0YXJ0QWN0aW9ucyA9IGluamVjdE5hdlN0YXJ0QWN0aW9uc1YyKCk7XG4gIHJlYWRvbmx5IG5hdlN0YXJ0QWN0aW9ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLiNuYXZTdGFydEFjdGlvbnMoKSkpO1xuICByZWFkb25seSBhZGRpdGlvbmFsTmF2RW5kQWN0aW9ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmFkZGl0aW9uYWxOYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IG5hdkVuZEFjdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5uYXZFbmRBY3Rpb25zKSk7XG4gIHJlYWRvbmx5IHR5cGUgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50eXBlKSk7XG4gIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQ8c3RyaW5nPihfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50aXRsZSA/PyB0aGlzLnF1ZXJ5KCk/LnRpdGxlKSk7XG4gIHJlYWRvbmx5IHRpdGxlRWRpdGFibGUgPSBpbnB1dDxib29sZWFuPihfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS50aXRsZUVkaXRhYmxlKSk7XG4gIHJlYWRvbmx5IGl0ZW1zTWFwID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IGJ1aWxkSXRlbXNNYXBGcm9tUmVzdWx0KHRoaXMuZmVhdHVyZS5yZXN1bHQoKSkpKTtcbiAgcmVhZG9ubHkgaXRlbXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLml0ZW1zTWFwKClbT2JqZWN0LmtleXModGhpcy5pdGVtc01hcCgpKVswXV0/Lml0ZW1zID8/IFtdKTtcbiAgcmVhZG9ubHkgaXRlbXNMZW5ndGggPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5pdGVtc01hcCgpW09iamVjdC5rZXlzKHRoaXMuaXRlbXNNYXAoKSlbMF1dPy5pdGVtc0xlbmd0aCA/PyAwKSk7XG4gIHJlYWRvbmx5IGNoaWxkcmVuS2V5ID0gaW5wdXQ8c3RyaW5nPihfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5jaGlsZHJlbktleSkpO1xuICByZWFkb25seSBhZGRpdGlvbmFsQ29sdW1ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmFkZGl0aW9uYWxDb2x1bW5zKSlcbiAgcmVhZG9ubHkgYWRkaXRpb25hbENvbHVtbk5hbWVzID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IHRoaXMuYWRkaXRpb25hbENvbHVtbnMoKSh0aGlzLml0ZW1zKCkpKSk7XG4gIHJlYWRvbmx5IGV4dHJhY3RlZENvbHVtbk5hbWVzID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IFF1ZXJ5SGVscGVyLmV4dHJhY3RDb2x1bW5OYW1lcyh0aGlzLml0ZW1zKCksIHRoaXMuY2hpbGRyZW5LZXkoKSkpKTtcbiAgcmVhZG9ubHkgY29sdW1uTmFtZXMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gWy4uLnRoaXMuZXh0cmFjdGVkQ29sdW1uTmFtZXMoKSwgLi4udGhpcy5hZGRpdGlvbmFsQ29sdW1uTmFtZXMoKV0pKTtcbiAgcmVhZG9ubHkgc3RpY2t5ID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+ICh7IHN0aWNreVN0YXJ0OiAyLCBzdGlja3lFbmQ6IDEgfSkpKTtcbiAgcmVhZG9ubHkgZm9ybSA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmluZGV4Rm9ybUJ1aWxkZXIuYnVpbGQoe1xuICAgIGNvbHVtbnM6IGJ1aWxkQ29sdW1ucyhbLi4udGhpcy5jb2x1bW5OYW1lcygpLCAnX19hY3Rpb25zJ10sIHRoaXMuc3RpY2t5KCkpLFxuICB9KSkpO1xuICByZWFkb25seSBpdGVtQWN0aW9ucyA9IGlucHV0KF9jb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLml0ZW1BY3Rpb25zKSk7XG4gIHJlYWRvbmx5IHRhYmxlVHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPGFueT4obiA9PiBuLmxldmVsLCBuID0+IG4uaXNFeHBhbmRhYmxlLCB7IHRyYWNrQnk6IChuOiBhbnkpID0+IG4/LmlkID8/IG4gfSk7XG4gIHJlYWRvbmx5IHZhcmlhYmxlc0Zvcm0gPSBpbnB1dChfY29tcHV0ZWQ8Rm9ybUdyb3VwPigoKSA9PiB0aGlzLnZhcmlhYmxlc0Zvcm1GZWF0dXJlLnZhcmlhYmxlc0Zvcm0oKSA/PyBuZXcgRm9ybUdyb3VwKHt9KSkpO1xuICByZWFkb25seSB2YXJpYWJsZXNGb3JtRmllbGRNYXAgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gKHt9IGFzIEZvcm1GaWVsZE1hcCkpKTtcbiAgcmVhZG9ubHkgdmFyaWFibGVzRm9ybVZhbHVlID0gZGVyaXZlZEFzeW5jKCgpID0+IGdldFJhd1ZhbHVlJCh0aGlzLnZhcmlhYmxlc0Zvcm0oKSksIHsgZXF1YWw6IGlzRXF1YWwgfSk7XG4gIHJlYWRvbmx5IHZhcmlhYmxlc0Zvcm1WYWx1ZSQgPSB0b09ic2VydmFibGUodGhpcy52YXJpYWJsZXNGb3JtVmFsdWUpO1xuICByZWFkb25seSB2YXJpYWJsZXNGb3JtRGlzcGxheWVkID0gaW5wdXQoX2NvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMudmFyaWFibGVzRm9ybUZlYXR1cmUudmFyaWFibGVzVmFsdWUoKSk/Lmxlbmd0aCA+IDApKTtcbiAgcmVhZG9ubHkgdGFibGVDb2x1bW5Gb3JtRmllbGRNYXAgPSBpbnB1dDxGb3JtRmllbGRNYXA+KF9jb21wdXRlZCgoKSA9PiAoe30pKSk7XG4gIHJlYWRvbmx5IGdldFJvd0NsYXNzID0gaW5wdXQ8KGl0ZW06IGFueSkgPT4gc3RyaW5nPihfY29tcHV0ZWQoKCkgPT4gKCkgPT4gJycpKTtcbiAgcmVhZG9ubHkgc2tpcCA9IGluamVjdFJvdXRlU2tpcCgpO1xuICByZWFkb25seSBwYWdlU2l6ZU9wdGlvbnMgPSBpbnB1dChfY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKS5wYWdlU2l6ZU9wdGlvbnMpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIFF1ZXJ5UGFnZVN0b3JlLkRJLmluaXRpYWxpemUodGhpcyk7XG4gICAgZWZmZWN0KCgpID0+IHRoaXMuZmVhdHVyZS5mb3JtLnBhdGNoVmFsdWUodGhpcy5xdWVyeSgpKSk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncGFnZXMtcXVlcnknLFxuICBpbXBvcnRzOiBbXG4gICAgSW5kZXhUZW1wbGF0ZSxcbiAgICBSb3V0ZXJPdXRsZXRGcmFtZSxcbiAgICBOZ0F0b21pY0Zvcm1TZWN0aW9uQnVpbGRlcixcbiAgICBRdWVyeUZvcm1Hcm91cCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZnJhbWVzLXJvdXRlci1vdXRsZXQgW3NraXBdPVwic3RvcmUuc2tpcCgpXCIgKGFjdGlvbik9XCJkaXNwYXRjaCgkZXZlbnQpXCI+XG4gICAgICA8dGVtcGxhdGVzLWluZGV4XG4gICAgICAgIFt0YWJsZUNvbHVtbkZvcm1GaWVsZE1hcF09XCJzdG9yZS50YWJsZUNvbHVtbkZvcm1GaWVsZE1hcCgpXCJcbiAgICAgICAgW3N0eWxlXT1cInN0b3JlLnN0eWxlKClcIlxuICAgICAgICBbdGl0bGVdPVwic3RvcmUudGl0bGUoKVwiXG4gICAgICAgIFt0aXRsZUNvbnRyb2xdPVwic3RvcmUuZmVhdHVyZS5mb3JtLmdldChbJ3RpdGxlJ10pXCJcbiAgICAgICAgW3RpdGxlRWRpdGFibGVdPVwic3RvcmUudGl0bGVFZGl0YWJsZSgpXCJcbiAgICAgICAgW3R5cGVdPVwic3RvcmUudHlwZSgpXCJcbiAgICAgICAgW3RhYmxlQ2hpbGRyZW5LZXldPVwic3RvcmUuY2hpbGRyZW5LZXkoKVwiXG4gICAgICAgIFt0YWJsZVRyZWVDb250cm9sXT1cInN0b3JlLnRhYmxlVHJlZUNvbnRyb2xcIlxuICAgICAgICBbaXRlbXNNYXBdPVwic3RvcmUuaXRlbXNNYXAoKVwiXG4gICAgICAgIFtpdGVtc0xlbmd0aF09XCJzdG9yZS5pdGVtc0xlbmd0aCgpXCJcbiAgICAgICAgW2l0ZW1BY3Rpb25zXT1cInN0b3JlLml0ZW1BY3Rpb25zKClcIlxuICAgICAgICBbZ2V0Um93Q2xhc3NdPVwic3RvcmUuZ2V0Um93Q2xhc3MoKVwiXG4gICAgICAgIFtmb3JtXT1cInN0b3JlLmZvcm0oKVwiXG4gICAgICAgIFtuYXZTdGFydEFjdGlvbnNdPVwic3RvcmUubmF2U3RhcnRBY3Rpb25zKClcIlxuICAgICAgICBbbmF2RW5kQWN0aW9uc109XCJzdG9yZS5uYXZFbmRBY3Rpb25zKClcIlxuICAgICAgICBbbmF2TW9kZV09XCJzdG9yZS5uYXZNb2RlKClcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInN0b3JlLnBhZ2VTaXplT3B0aW9ucygpXCJcbiAgICAgICAgKGFjdGlvbik9XCJkaXNwYXRjaCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChzdG9yZS52YXJpYWJsZXNGb3JtRGlzcGxheWVkKCkpIHtcbiAgICAgICAgICA8ZGl2IG5hdkRhc2hib2FyZD5cbiAgICAgICAgICAgIDxuZy1hdG9taWMtZm9ybS1zZWN0aW9uLWJ1aWxkZXJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwic3RvcmUudmFyaWFibGVzRm9ybSgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkTWFwXT1cInN0b3JlLnZhcmlhYmxlc0Zvcm1GaWVsZE1hcCgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGdyb3Vwcy1xdWVyeS1mb3JtIGRhc2hib2FyZCAoYWN0aW9uKT1cImRpc3BhdGNoKCRldmVudClcIiAvPlxuICAgICAgPC90ZW1wbGF0ZXMtaW5kZXg+XG4gICAgPC9mcmFtZXMtcm91dGVyLW91dGxldD5cbiAgYCxcbiAgc3R5bGVVcmw6ICcuL3F1ZXJ5LnBhZ2Uuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogUXVlcnlQYWdlU3RvcmUsXG4gICAgICBpbnB1dHM6IFtcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAncXVlcnknLFxuICAgICAgICAndGl0bGVFZGl0YWJsZScsXG4gICAgICAgICd2YXJpYWJsZXNGb3JtJyxcbiAgICAgICAgJ3ZhcmlhYmxlc0Zvcm1GaWVsZE1hcCcsXG4gICAgICAgICduYXZTdGFydEFjdGlvbnMnLFxuICAgICAgICAnbmF2RW5kQWN0aW9ucycsXG4gICAgICAgICdpdGVtQWN0aW9ucycsXG4gICAgICAgICdwYWdlU2l6ZU9wdGlvbnMnXG4gICAgICBdXG4gICAgfSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeVBhZ2UgZXh0ZW5kcyBOZ0F0b21pY0NvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgcmVhZG9ubHkgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoUXVlcnlQYWdlU3RvcmUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVkdWNlciA9IGluamVjdChRdWVyeUFjdGlvblJlZHVjZXIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnkgPSBpbmplY3QoUXVlcnlTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgZmVhdHVyZSA9IGluamVjdChRdWVyeUZlYXR1cmUpO1xuXG4gIHJlYWRvbmx5IHRlbXBsYXRlID0gdmlld0NoaWxkKEluZGV4VGVtcGxhdGUpO1xuICByZWFkb25seSB0aXRsZSA9IGlucHV0KCdkZWZhdWx0IHRpdGxlJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnJlZHVjZXIuYWN0aW9uJC5zdWJzY3JpYmUoKGFjdGlvbikgPT4gdGhpcy5kaXNwYXRjaChhY3Rpb24pKTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgcXVlcnk6IHRoaXMuZmVhdHVyZS5mb3JtVmFsdWUoKSxcbiAgICAgIC8vIHNjaGVtYTogdGhpcy5mZWF0dXJlLmdyYXBocWxTY2hlbWEoKSxcbiAgICB9KSk7XG5cbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5hcHAuY29udGV4dC5jb250ZXh0LnNldChKU09OLnN0cmluZ2lmeShjb250ZXh0KCkpKSk7XG4gIH1cblxuICBARWZmZWN0KEluZGV4VGVtcGxhdGVTdG9yZS5BY3Rpb25JZC5CQUNLKVxuICBhc3luYyBiYWNrKCkge1xuICAgIGhpc3RvcnkuYmFjaygpO1xuICB9XG5cbiAgQEVmZmVjdChBY3Rpb25JZC5OQVZJR0FURV9UT19JRlJBTUUpXG4gIGFzeW5jIG5hdmlnYXRlVG9JZnJhbWUoaXRlbTogeyBpZDogc3RyaW5nIH0pIHtcbiAgICB0aGlzLmFwcC5yb3V0ZXIubmF2aWdhdGUoWydpbnZvaWNlcycsIGl0ZW0uaWRdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgIH0pO1xuICB9XG5cbiAgQEVmZmVjdChBY3Rpb25JZC5UT0dHTEVfUEFHRSlcbiAgYXN5bmMgZXhwYW5kUGFnZSgpIHtcbiAgICB1cGRhdGVJbnB1dCh0aGlzLnN0b3JlLCAnc3R5bGUnLCAoc3R5bGUpID0+ICh7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIHdpZHRoOiBzdHlsZT8ud2lkdGggPT09ICd2YXIoLS1wYWdlLXdpZHRoLWx2MyknID8gJ3ZhcigtLXBhZ2Utd2lkdGgtbHYyKScgOiAndmFyKC0tcGFnZS13aWR0aC1sdjMpJyxcbiAgICB9KSlcbiAgfVxuXG4gIEBFZmZlY3QoSW5kZXhUZW1wbGF0ZS5BY3Rpb25JZC5JVEVNX0NMSUNLKVxuICBwcm90ZWN0ZWQgaXRlbUNsaWNrKGl0ZW06IHsgaWQ6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5kaXNwYXRjaCh7IGlkOiBBY3Rpb25JZC5ERVRBSUwsIHBheWxvYWQ6IGl0ZW0gfSk7XG4gIH1cbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHhtYWNoaW5hLWNvbXBvbmVudHMtcGFnZXMtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AeHhtYWNoaW5hL2NvbXBvbmVudHMvc3JjL2xpYi9wYWdlcy9xdWVyeS94eG1hY2hpbmEtY29tcG9uZW50cy1wYWdlcy1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}