@decaf-ts/for-angular 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/en.json +9 -69
- package/assets/i18n/pt.json +80 -0
- package/assets/icons/icon-128.webp +0 -0
- package/assets/icons/icon-192.webp +0 -0
- package/assets/icons/icon-256.webp +0 -0
- package/assets/icons/icon-48.webp +0 -0
- package/assets/icons/icon-512.webp +0 -0
- package/assets/icons/icon-72.webp +0 -0
- package/assets/icons/icon-96.webp +0 -0
- package/assets/images/apple-touch-icon.png +0 -0
- package/assets/images/favicon.png +0 -0
- package/assets/images/favicon.svg +29 -0
- package/components/component-renderer/component-renderer.component.d.ts +5 -4
- package/components/crud-field/crud-field.component.d.ts +186 -22
- package/components/crud-form/crud-form.component.d.ts +194 -8
- package/components/empty-state/empty-state.component.d.ts +9 -10
- package/components/fieldset/fieldset.component.d.ts +383 -36
- package/components/filter/filter.component.d.ts +11 -2
- package/components/list/list.component.d.ts +1 -1
- package/components/list-item/list-item.component.d.ts +2 -2
- package/components/model-renderer/model-renderer.component.d.ts +1 -5
- package/directives/collapsable.directive.d.ts +1 -0
- package/engine/NgxBaseComponent.d.ts +43 -43
- package/engine/NgxCrudFormField.d.ts +7 -3
- package/engine/NgxFormService.d.ts +113 -12
- package/engine/NgxRenderingEngine.d.ts +178 -25
- package/engine/constants.d.ts +11 -6
- package/engine/decorators.d.ts +2 -2
- package/engine/index.d.ts +4 -2
- package/engine/interfaces.d.ts +271 -0
- package/engine/types.d.ts +11 -206
- package/esm2022/components/component-renderer/component-renderer.component.mjs +13 -11
- package/esm2022/components/crud-field/crud-field.component.mjs +213 -8
- package/esm2022/components/crud-form/crud-form.component.mjs +133 -13
- package/esm2022/components/empty-state/empty-state.component.mjs +13 -12
- package/esm2022/components/fieldset/fieldset.component.mjs +485 -43
- package/esm2022/components/filter/filter.component.mjs +16 -6
- package/esm2022/components/layout/layout.component.mjs +3 -3
- package/esm2022/components/list/list.component.mjs +4 -5
- package/esm2022/components/list-item/list-item.component.mjs +10 -10
- package/esm2022/components/model-renderer/model-renderer.component.mjs +9 -8
- package/esm2022/components/pagination/pagination.component.mjs +7 -7
- package/esm2022/components/searchbar/searchbar.component.mjs +3 -3
- package/esm2022/directives/collapsable.directive.mjs +3 -2
- package/esm2022/engine/NgxBaseComponent.mjs +64 -63
- package/esm2022/engine/NgxCrudFormField.mjs +14 -4
- package/esm2022/engine/NgxFormService.mjs +239 -27
- package/esm2022/engine/NgxRenderingEngine.mjs +218 -46
- package/esm2022/engine/ValidatorFactory.mjs +6 -4
- package/esm2022/engine/constants.mjs +14 -9
- package/esm2022/engine/decorators.mjs +6 -6
- package/esm2022/engine/index.mjs +5 -3
- package/esm2022/engine/interfaces.mjs +4 -0
- package/esm2022/engine/types.mjs +1 -3
- package/esm2022/helpers/utils.mjs +53 -32
- package/esm2022/i18n/Loader.mjs +82 -0
- package/fesm2022/decaf-ts-for-angular.mjs +3030 -2097
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/helpers/utils.d.ts +42 -16
- package/i18n/Loader.d.ts +48 -0
- package/package.json +11 -1
- package/engine/NgxRenderingEngine2.d.ts +0 -250
- package/esm2022/engine/NgxRenderingEngine2.mjs +0 -332
- package/esm2022/interfaces.mjs +0 -2
- package/interfaces.d.ts +0 -28
|
@@ -2,38 +2,64 @@ import { RenderingEngine } from '@decaf-ts/ui-decorators';
|
|
|
2
2
|
import { AngularEngineKeys } from './constants';
|
|
3
3
|
import { InternalError } from '@decaf-ts/db-decorators';
|
|
4
4
|
import { reflectComponentType, } from '@angular/core';
|
|
5
|
+
import { NgxFormService } from './NgxFormService';
|
|
5
6
|
/**
|
|
6
|
-
* @description Angular implementation of the RenderingEngine
|
|
7
|
-
* @summary This class extends the base RenderingEngine to provide Angular-specific rendering capabilities
|
|
8
|
-
* It handles the conversion of field definitions
|
|
7
|
+
* @description Angular implementation of the RenderingEngine with enhanced features
|
|
8
|
+
* @summary This class extends the base RenderingEngine to provide Angular-specific rendering capabilities
|
|
9
|
+
* with additional features compared to NgxRenderingEngine. It handles the conversion of field definitions
|
|
10
|
+
* to Angular components, manages component registration, and provides utilities for component creation
|
|
11
|
+
* and input handling. This implementation uses Angular's newer component APIs.
|
|
12
|
+
*
|
|
9
13
|
* @template AngularFieldDefinition - Type for Angular-specific field definitions
|
|
10
14
|
* @template AngularDynamicOutput - Type for Angular-specific component output
|
|
11
|
-
*
|
|
12
|
-
* @param {ViewContainerRef} vcr - View container reference for component creation
|
|
13
|
-
* @param {TemplateRef<any>} tpl - Template reference for content projection
|
|
15
|
+
*
|
|
14
16
|
* @class NgxRenderingEngine
|
|
15
17
|
* @example
|
|
16
18
|
* ```typescript
|
|
17
|
-
* const engine =
|
|
19
|
+
* const engine = NgxRenderingEngine.get();
|
|
18
20
|
* engine.initialize();
|
|
19
21
|
* const output = engine.render(myModel, {}, viewContainerRef, injector, templateRef);
|
|
20
22
|
* ```
|
|
23
|
+
*
|
|
21
24
|
* @mermaid
|
|
22
25
|
* sequenceDiagram
|
|
23
26
|
* participant Client
|
|
24
27
|
* participant Engine as NgxRenderingEngine
|
|
25
28
|
* participant Components as RegisteredComponents
|
|
26
29
|
*
|
|
27
|
-
* Client->>Engine:
|
|
30
|
+
* Client->>Engine: get()
|
|
28
31
|
* Client->>Engine: initialize()
|
|
29
32
|
* Client->>Engine: render(model, props, vcr, injector, tpl)
|
|
30
33
|
* Engine->>Engine: toFieldDefinition(model, props)
|
|
31
34
|
* Engine->>Engine: fromFieldDefinition(fieldDef, vcr, injector, tpl)
|
|
32
35
|
* Engine->>Components: components(fieldDef.tag)
|
|
33
36
|
* Components-->>Engine: component constructor
|
|
34
|
-
* Engine->>
|
|
37
|
+
* Engine->>Engine: createComponent(component, inputs, metadata, vcr, injector, template)
|
|
38
|
+
* Engine-->>Client: return AngularDynamicOutput
|
|
35
39
|
*/
|
|
36
40
|
export class NgxRenderingEngine extends RenderingEngine {
|
|
41
|
+
/**
|
|
42
|
+
* @description Current operation context for component visibility control
|
|
43
|
+
* @summary Static property that stores the current operation being performed,
|
|
44
|
+
* which is used to determine component visibility through the 'hidden' property.
|
|
45
|
+
* Components can specify operations where they should be hidden, and this property
|
|
46
|
+
* provides the context for those visibility checks. The value is typically extracted
|
|
47
|
+
* from the global properties during the rendering process.
|
|
48
|
+
*
|
|
49
|
+
* @private
|
|
50
|
+
* @static
|
|
51
|
+
* @type {string | undefined}
|
|
52
|
+
*/
|
|
53
|
+
static { this._operation = undefined; }
|
|
54
|
+
/**
|
|
55
|
+
* @description Constructs a new NgxRenderingEngine instance
|
|
56
|
+
* @summary Initializes a new instance of the Angular rendering engine by calling the parent
|
|
57
|
+
* constructor with the 'angular' engine type identifier. This constructor sets up the base
|
|
58
|
+
* rendering engine functionality with Angular-specific configurations and prepares the
|
|
59
|
+
* instance for component registration and rendering operations.
|
|
60
|
+
*
|
|
61
|
+
* @constructor
|
|
62
|
+
*/
|
|
37
63
|
constructor() {
|
|
38
64
|
super('angular');
|
|
39
65
|
}
|
|
@@ -41,69 +67,142 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
41
67
|
* @description Converts a field definition to an Angular component output
|
|
42
68
|
* @summary This private method takes a field definition and creates the corresponding Angular component.
|
|
43
69
|
* It handles component instantiation, input property mapping, and child component rendering.
|
|
70
|
+
* The method validates input properties against the component's metadata and processes
|
|
71
|
+
* child components recursively.
|
|
72
|
+
*
|
|
44
73
|
* @param {FieldDefinition<AngularFieldDefinition>} fieldDef - The field definition to convert
|
|
45
74
|
* @param {ViewContainerRef} vcr - The view container reference for component creation
|
|
46
75
|
* @param {Injector} injector - The Angular injector for dependency injection
|
|
47
76
|
* @param {TemplateRef<any>} tpl - The template reference for content projection
|
|
77
|
+
* @param {string} registryFormId - Form identifier for the component renderer
|
|
48
78
|
* @return {AngularDynamicOutput} The Angular component output with component reference and inputs
|
|
79
|
+
*
|
|
49
80
|
* @mermaid
|
|
50
81
|
* sequenceDiagram
|
|
51
82
|
* participant Method as fromFieldDefinition
|
|
52
83
|
* participant Components as NgxRenderingEngine.components
|
|
53
84
|
* participant Angular as Angular Core
|
|
85
|
+
* participant Process as processChild
|
|
54
86
|
*
|
|
55
87
|
* Method->>Components: components(fieldDef.tag)
|
|
56
88
|
* Components-->>Method: component constructor
|
|
57
89
|
* Method->>Angular: reflectComponentType(component)
|
|
58
90
|
* Angular-->>Method: componentMetadata
|
|
59
|
-
* Method->>Method:
|
|
91
|
+
* Method->>Method: Validate input properties
|
|
60
92
|
* Method->>Method: Create result object
|
|
61
|
-
*
|
|
93
|
+
* alt Has children
|
|
94
|
+
* Method->>Process: Process children recursively
|
|
95
|
+
* Process->>Method: Return processed children
|
|
96
|
+
* Method->>Angular: Create embedded view
|
|
97
|
+
* Method->>Method: Create component instance
|
|
98
|
+
* end
|
|
62
99
|
* Method-->>Caller: return AngularDynamicOutput
|
|
63
100
|
*/
|
|
64
|
-
fromFieldDefinition(fieldDef, vcr, injector, tpl) {
|
|
65
|
-
const
|
|
66
|
-
|
|
101
|
+
fromFieldDefinition(fieldDef, vcr, injector, tpl, registryFormId = Date.now().toString(36).toUpperCase()) {
|
|
102
|
+
const cmp = fieldDef?.['component'] || NgxRenderingEngine.components(fieldDef.tag);
|
|
103
|
+
const component = cmp.constructor;
|
|
67
104
|
const componentMetadata = reflectComponentType(component);
|
|
68
105
|
if (!componentMetadata) {
|
|
69
106
|
throw new InternalError(`Metadata for component ${fieldDef.tag} not found.`);
|
|
70
107
|
}
|
|
71
|
-
const inputs =
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
108
|
+
const { inputs: possibleInputs } = componentMetadata;
|
|
109
|
+
const inputs = { ...fieldDef.props };
|
|
110
|
+
const unmappedKeys = Object.keys(inputs).filter(input => {
|
|
111
|
+
const isMapped = possibleInputs.find(({ propName }) => propName === input);
|
|
112
|
+
if (!isMapped)
|
|
113
|
+
delete inputs[input];
|
|
114
|
+
return !isMapped;
|
|
115
|
+
});
|
|
116
|
+
if (unmappedKeys.length > 0)
|
|
117
|
+
console.warn(`Unmapped input properties for component ${fieldDef.tag}: ${unmappedKeys.join(', ')}`);
|
|
118
|
+
const operation = NgxRenderingEngine._operation;
|
|
119
|
+
const hiddenOn = inputs?.hidden || [];
|
|
120
|
+
if (hiddenOn.includes(operation))
|
|
121
|
+
return { inputs, injector };
|
|
122
|
+
// const hiddenOn = inputs?.hidden || [];
|
|
84
123
|
const result = {
|
|
85
|
-
component
|
|
86
|
-
inputs
|
|
87
|
-
injector
|
|
124
|
+
component,
|
|
125
|
+
inputs,
|
|
126
|
+
injector,
|
|
88
127
|
};
|
|
89
|
-
if (fieldDef.rendererId)
|
|
90
|
-
result.inputs['rendererId'] =
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (fieldDef.children && fieldDef.children.length) {
|
|
128
|
+
if (fieldDef.rendererId)
|
|
129
|
+
result.inputs['rendererId'] = fieldDef.rendererId;
|
|
130
|
+
// process children
|
|
131
|
+
if (fieldDef.children?.length) {
|
|
94
132
|
result.children = fieldDef.children.map((child) => {
|
|
95
|
-
|
|
133
|
+
if (child?.children?.length) {
|
|
134
|
+
child.children = child.children.filter(c => {
|
|
135
|
+
const hiddenOn = c?.props?.hidden || [];
|
|
136
|
+
if (!hiddenOn.includes(operation))
|
|
137
|
+
return c;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// create a child form and add its controls as properties of child.props
|
|
141
|
+
NgxFormService.addControlFromProps(registryFormId, child.props, inputs);
|
|
142
|
+
return this.fromFieldDefinition(child, vcr, injector, tpl, registryFormId);
|
|
96
143
|
});
|
|
97
|
-
const template = vcr.createEmbeddedView(tpl, injector).rootNodes;
|
|
98
|
-
result.content = [template];
|
|
99
144
|
}
|
|
145
|
+
// generating DOM
|
|
146
|
+
vcr.clear();
|
|
147
|
+
const template = vcr.createEmbeddedView(tpl, injector).rootNodes;
|
|
148
|
+
const componentInstance = NgxRenderingEngine.createComponent(component, { ...inputs, model: this._model }, componentMetadata, vcr, injector, template);
|
|
149
|
+
result.instance = NgxRenderingEngine._instance = componentInstance.instance;
|
|
100
150
|
return result;
|
|
101
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* @description Creates an Angular component instance
|
|
154
|
+
* @summary This static utility method creates an Angular component instance with the specified
|
|
155
|
+
* inputs and template. It uses Angular's component creation API to instantiate the component
|
|
156
|
+
* and then sets the input properties using the provided metadata.
|
|
157
|
+
*
|
|
158
|
+
* @param {Type<unknown>} component - The component type to create
|
|
159
|
+
* @param {KeyValue} [inputs={}] - The input properties to set on the component
|
|
160
|
+
* @param {ComponentMirror<unknown>} metadata - The component metadata for input validation
|
|
161
|
+
* @param {ViewContainerRef} vcr - The view container reference for component creation
|
|
162
|
+
* @param {Injector} injector - The Angular injector for dependency injection
|
|
163
|
+
* @param {Node[]} [template=[]] - The template nodes to project into the component
|
|
164
|
+
* @return {ComponentRef<unknown>} The created component reference
|
|
165
|
+
*/
|
|
166
|
+
static createComponent(component, inputs = {}, metadata, vcr, injector, template = []) {
|
|
167
|
+
const componentInstance = vcr.createComponent(component, {
|
|
168
|
+
environmentInjector: injector,
|
|
169
|
+
projectableNodes: [template],
|
|
170
|
+
});
|
|
171
|
+
this.setInputs(componentInstance, inputs, metadata);
|
|
172
|
+
return componentInstance;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* @description Extracts decorator metadata from a model
|
|
176
|
+
* @summary This method provides access to the field definition generated from a model's
|
|
177
|
+
* decorators. It's a convenience wrapper around the toFieldDefinition method that
|
|
178
|
+
* converts a model to a field definition based on its decorators and the provided
|
|
179
|
+
* global properties.
|
|
180
|
+
*
|
|
181
|
+
* @param {Model} model - The model to extract decorators from
|
|
182
|
+
* @param {Record<string, unknown>} globalProps - Global properties to include in the field definition
|
|
183
|
+
* @return {FieldDefinition<AngularFieldDefinition>} The field definition generated from the model
|
|
184
|
+
*/
|
|
185
|
+
getDecorators(model, globalProps) {
|
|
186
|
+
return this.toFieldDefinition(model, globalProps);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* @description Destroys the current engine instance
|
|
190
|
+
* @summary This static method clears the current instance reference, effectively
|
|
191
|
+
* destroying the singleton instance of the rendering engine. This can be used
|
|
192
|
+
* to reset the engine state or to prepare for a new instance creation.
|
|
193
|
+
*
|
|
194
|
+
* @return {Promise<void>} A promise that resolves when the instance is destroyed
|
|
195
|
+
*/
|
|
196
|
+
static async destroy() {
|
|
197
|
+
NgxRenderingEngine._instance = undefined;
|
|
198
|
+
}
|
|
102
199
|
/**
|
|
103
200
|
* @description Renders a model into an Angular component output
|
|
104
201
|
* @summary This method takes a model and converts it to an Angular component output.
|
|
105
|
-
* It first
|
|
106
|
-
*
|
|
202
|
+
* It first stores a reference to the model, then converts it to a field definition
|
|
203
|
+
* using the base RenderingEngine's toFieldDefinition method, and finally converts
|
|
204
|
+
* that field definition to an Angular component output using fromFieldDefinition.
|
|
205
|
+
*
|
|
107
206
|
* @template M - Type extending Model
|
|
108
207
|
* @param {M} model - The model to render
|
|
109
208
|
* @param {Record<string, unknown>} globalProps - Global properties to pass to the component
|
|
@@ -111,6 +210,7 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
111
210
|
* @param {Injector} injector - The Angular injector for dependency injection
|
|
112
211
|
* @param {TemplateRef<any>} tpl - The template reference for content projection
|
|
113
212
|
* @return {AngularDynamicOutput} The Angular component output with component reference and inputs
|
|
213
|
+
*
|
|
114
214
|
* @mermaid
|
|
115
215
|
* sequenceDiagram
|
|
116
216
|
* participant Client as Client Code
|
|
@@ -119,6 +219,7 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
119
219
|
* participant FromField as fromFieldDefinition
|
|
120
220
|
*
|
|
121
221
|
* Client->>Render: render(model, globalProps, vcr, injector, tpl)
|
|
222
|
+
* Render->>Render: Store model reference
|
|
122
223
|
* Render->>ToField: toFieldDefinition(model, globalProps)
|
|
123
224
|
* ToField-->>Render: fieldDef
|
|
124
225
|
* Render->>FromField: fromFieldDefinition(fieldDef, vcr, injector, tpl)
|
|
@@ -128,8 +229,15 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
128
229
|
render(model, globalProps, vcr, injector, tpl) {
|
|
129
230
|
let result;
|
|
130
231
|
try {
|
|
232
|
+
this._model = model;
|
|
233
|
+
const formId = Date.now().toString(36).toUpperCase();
|
|
131
234
|
const fieldDef = this.toFieldDefinition(model, globalProps);
|
|
132
|
-
|
|
235
|
+
const props = fieldDef.props;
|
|
236
|
+
if (!NgxRenderingEngine._operation)
|
|
237
|
+
NgxRenderingEngine._operation = props?.['operation'] || undefined;
|
|
238
|
+
result = this.fromFieldDefinition(fieldDef, vcr, injector, tpl, formId);
|
|
239
|
+
result.instance['formGroup'] = NgxFormService.getControlFromForm(formId);
|
|
240
|
+
NgxFormService.removeRegistry(formId);
|
|
133
241
|
}
|
|
134
242
|
catch (e) {
|
|
135
243
|
throw new InternalError(`Failed to render Model ${model.constructor.name}: ${e}`);
|
|
@@ -139,18 +247,24 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
139
247
|
/**
|
|
140
248
|
* @description Initializes the rendering engine
|
|
141
249
|
* @summary This method initializes the rendering engine. It checks if the engine is already initialized
|
|
142
|
-
* and sets the initialized flag to true. This method is called before the engine is used
|
|
250
|
+
* and sets the initialized flag to true. This method is called before the engine is used
|
|
251
|
+
* to ensure it's properly set up for rendering operations.
|
|
252
|
+
*
|
|
143
253
|
* @return {Promise<void>} A promise that resolves when initialization is complete
|
|
144
254
|
*/
|
|
145
255
|
async initialize() {
|
|
146
256
|
if (this.initialized)
|
|
147
257
|
return;
|
|
258
|
+
// ValidatableByType[]
|
|
148
259
|
this.initialized = true;
|
|
149
260
|
}
|
|
150
261
|
/**
|
|
151
262
|
* @description Registers a component with the rendering engine
|
|
152
263
|
* @summary This static method registers a component constructor with the rendering engine
|
|
153
|
-
* under a specific name. It
|
|
264
|
+
* under a specific name. It initializes the components registry if needed and throws
|
|
265
|
+
* an error if a component is already registered under the same name to prevent
|
|
266
|
+
* accidental overrides.
|
|
267
|
+
*
|
|
154
268
|
* @param {string} name - The name to register the component under
|
|
155
269
|
* @param {Constructor<unknown>} constructor - The component constructor
|
|
156
270
|
* @return {void}
|
|
@@ -167,7 +281,10 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
167
281
|
/**
|
|
168
282
|
* @description Retrieves registered components from the rendering engine
|
|
169
283
|
* @summary This static method retrieves either all registered components or a specific component
|
|
170
|
-
* by its selector.
|
|
284
|
+
* by its selector. When called without a selector, it returns an array of all registered
|
|
285
|
+
* components. When called with a selector, it returns the specific component if found,
|
|
286
|
+
* or throws an error if the component is not registered.
|
|
287
|
+
*
|
|
171
288
|
* @param {string} [selector] - Optional selector to retrieve a specific component
|
|
172
289
|
* @return {Object|Array} Either a specific component or an array of all components
|
|
173
290
|
*/
|
|
@@ -181,12 +298,67 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
181
298
|
/**
|
|
182
299
|
* @description Generates a key for reflection metadata
|
|
183
300
|
* @summary This static method generates a key for reflection metadata by prefixing the input key
|
|
184
|
-
* with the Angular engine's reflection prefix. This is used for storing and retrieving
|
|
301
|
+
* with the Angular engine's reflection prefix. This is used for storing and retrieving
|
|
302
|
+
* metadata in a namespaced way to avoid conflicts with other metadata.
|
|
303
|
+
*
|
|
185
304
|
* @param {string} key - The base key to prefix
|
|
186
305
|
* @return {string} The prefixed key for reflection metadata
|
|
187
306
|
*/
|
|
188
307
|
static key(key) {
|
|
189
308
|
return `${AngularEngineKeys.REFLECT}${key}`;
|
|
190
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* @description Sets input properties on a component instance
|
|
312
|
+
* @summary This static utility method sets input properties on a component instance
|
|
313
|
+
* based on the provided inputs object and component metadata. It handles both simple
|
|
314
|
+
* values and nested objects, recursively processing object properties. The method
|
|
315
|
+
* validates each input against the component's metadata to ensure only valid inputs
|
|
316
|
+
* are set.
|
|
317
|
+
*
|
|
318
|
+
* @param {ComponentRef<unknown>} component - The component reference to set inputs on
|
|
319
|
+
* @param {KeyValue} inputs - The input properties to set
|
|
320
|
+
* @param {ComponentMirror<unknown>} metadata - The component metadata for input validation
|
|
321
|
+
* @return {void}
|
|
322
|
+
*
|
|
323
|
+
* @mermaid
|
|
324
|
+
* sequenceDiagram
|
|
325
|
+
* participant Caller
|
|
326
|
+
* participant SetInputs as setInputs
|
|
327
|
+
* participant Parse as parseInputValue
|
|
328
|
+
* participant Component as ComponentRef
|
|
329
|
+
*
|
|
330
|
+
* Caller->>SetInputs: setInputs(component, inputs, metadata)
|
|
331
|
+
* SetInputs->>SetInputs: Iterate through inputs
|
|
332
|
+
* loop For each input
|
|
333
|
+
* SetInputs->>SetInputs: Check if input exists in metadata
|
|
334
|
+
* alt Input is 'props'
|
|
335
|
+
* SetInputs->>Parse: parseInputValue(component, value)
|
|
336
|
+
* Parse->>Parse: Recursively process nested objects
|
|
337
|
+
* Parse->>Component: setInput(key, value)
|
|
338
|
+
* else Input is valid
|
|
339
|
+
* SetInputs->>Component: setInput(key, value)
|
|
340
|
+
* end
|
|
341
|
+
* end
|
|
342
|
+
*/
|
|
343
|
+
static setInputs(component, inputs, metadata) {
|
|
344
|
+
function parseInputValue(component, input) {
|
|
345
|
+
Object.keys(input).forEach(key => {
|
|
346
|
+
const value = input[key];
|
|
347
|
+
if (typeof value === 'object' && !!value)
|
|
348
|
+
return parseInputValue(component, value);
|
|
349
|
+
component.setInput(key, value);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
Object.entries(inputs).forEach(([key, value]) => {
|
|
353
|
+
const prop = metadata.inputs.find((item) => item.propName === key);
|
|
354
|
+
if (prop) {
|
|
355
|
+
if (key === 'props')
|
|
356
|
+
parseInputValue(component, value);
|
|
357
|
+
// if(key === 'locale' && !value)
|
|
358
|
+
// value = getLocaleFromClassName(this._componentName);
|
|
359
|
+
component.setInput(key, value);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
}
|
|
191
363
|
}
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBRUwsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFHdkM7SUFNQztRQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdUJHO0lBQ0ssbUJBQW1CLENBQ3pCLFFBQWlELEVBQ2pELEdBQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLEdBQXlCO1FBRXpCLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2FBQzFELFdBQXVDLENBQUM7UUFFM0MsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksYUFBYSxDQUNyQiwwQkFBMEIsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFFOUIsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxD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UUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUN2QixXQUFXLEVBQUUsV0FBVztTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBaUI7UUFDakMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxhQUFhLENBQUMsaUNBQWlDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQVUsR0FBRyxDQUFDLEdBQVc7UUFDN0IsT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZERlZmluaXRpb24sIFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFuZ3VsYXJEeW5hbWljT3V0cHV0LCBBbmd1bGFyRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBbmd1bGFyRW5naW5lS2V5cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgSW5qZWN0b3IsXG4gIHJlZmxlY3RDb21wb25lbnRUeXBlLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJlbmRlcmluZ0VuZ2luZVxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBiYXNlIFJlbmRlcmluZ0VuZ2luZSB0byBwcm92aWRlIEFuZ3VsYXItc3BlY2lmaWMgcmVuZGVyaW5nIGNhcGFiaWxpdGllcy5cbiAqIEl0IGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gb2YgZmllbGQgZGVmaW5pdGlvbnMgdG8gQW5ndWxhciBjb21wb25lbnRzIGFuZCBtYW5hZ2VzIGNvbXBvbmVudCByZWdpc3RyYXRpb24uXG4gKiBAdGVtcGxhdGUgQW5ndWxhckZpZWxkRGVmaW5pdGlvbiAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgZmllbGQgZGVmaW5pdGlvbnNcbiAqIEB0ZW1wbGF0ZSBBbmd1bGFyRHluYW1pY091dHB1dCAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgY29tcG9uZW50IG91dHB1dFxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBWaWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICogQGNsYXNzIE5neFJlbmRlcmluZ0VuZ2luZVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGVuZ2luZSA9IG5ldyBOZ3hSZW5kZXJpbmdFbmdpbmUoKTtcbiAqIGVuZ2luZS5pbml0aWFsaXplKCk7XG4gKiBjb25zdCBvdXRwdXQgPSBlbmdpbmUucmVuZGVyKG15TW9kZWwsIHt9LCB2aWV3Q29udGFpbmVyUmVmLCBpbmplY3RvciwgdGVtcGxhdGVSZWYpO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFbmdpbmUgYXMgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudHMgYXMgUmVnaXN0ZXJlZENvbXBvbmVudHNcbiAqXG4gKiAgIENsaWVudC0+PkVuZ2luZTogbmV3IE5neFJlbmRlcmluZ0VuZ2luZSgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogaW5pdGlhbGl6ZSgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogcmVuZGVyKG1vZGVsLCBwcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICogICBFbmdpbmUtPj5FbmdpbmU6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBwcm9wcylcbiAqICAgRW5naW5lLT4+RW5naW5lOiBmcm9tRmllbGREZWZpbml0aW9uKGZpZWxkRGVmLCB2Y3IsIGluamVjdG9yLCB0cGwpXG4gKiAgIEVuZ2luZS0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICogICBDb21wb25lbnRzLS0+PkVuZ2luZTogY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gKiAgIEVuZ2luZS0+PkNsaWVudDogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZ3hSZW5kZXJpbmdFbmdpbmUgZXh0ZW5kcyBSZW5kZXJpbmdFbmdpbmU8XG4gIEFuZ3VsYXJGaWVsZERlZmluaXRpb24sXG4gIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbXBvbmVudHM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfVxuICA+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdhbmd1bGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgZmllbGQgZGVmaW5pdGlvbiB0byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXRcbiAgICogQHN1bW1hcnkgVGhpcyBwcml2YXRlIG1ldGhvZCB0YWtlcyBhIGZpZWxkIGRlZmluaXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgQW5ndWxhciBjb21wb25lbnQuXG4gICAqIEl0IGhhbmRsZXMgY29tcG9uZW50IGluc3RhbnRpYXRpb24sIGlucHV0IHByb3BlcnR5IG1hcHBpbmcsIGFuZCBjaGlsZCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gZmllbGREZWYgLSBUaGUgZmllbGQgZGVmaW5pdGlvbiB0byBjb252ZXJ0XG4gICAqIEBwYXJhbSB7Vmlld0NvbnRhaW5lclJlZn0gdmNyIC0gVGhlIHZpZXcgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgY29tcG9uZW50IGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yIC0gVGhlIEFuZ3VsYXIgaW5qZWN0b3IgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVSZWY8YW55Pn0gdHBsIC0gVGhlIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgY29udGVudCBwcm9qZWN0aW9uXG4gICAqIEByZXR1cm4ge0FuZ3VsYXJEeW5hbWljT3V0cHV0fSBUaGUgQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHdpdGggY29tcG9uZW50IHJlZmVyZW5jZSBhbmQgaW5wdXRzXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IE1ldGhvZCBhcyBmcm9tRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50cyBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUuY29tcG9uZW50c1xuICAgKiAgIHBhcnRpY2lwYW50IEFuZ3VsYXIgYXMgQW5ndWxhciBDb3JlXG4gICAqXG4gICAqICAgTWV0aG9kLT4+Q29tcG9uZW50czogY29tcG9uZW50cyhmaWVsZERlZi50YWcpXG4gICAqICAgQ29tcG9uZW50cy0tPj5NZXRob2Q6IGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiAgIE1ldGhvZC0+PkFuZ3VsYXI6IHJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudClcbiAgICogICBBbmd1bGFyLS0+Pk1ldGhvZDogY29tcG9uZW50TWV0YWRhdGFcbiAgICogICBNZXRob2QtPj5NZXRob2Q6IENoZWNrIGlucHV0IHByb3BlcnRpZXNcbiAgICogICBNZXRob2QtPj5NZXRob2Q6IENyZWF0ZSByZXN1bHQgb2JqZWN0XG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBQcm9jZXNzIGNoaWxkcmVuIGlmIGFueVxuICAgKiAgIE1ldGhvZC0tPj5DYWxsZXI6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBmcm9tRmllbGREZWZpbml0aW9uKFxuICAgIGZpZWxkRGVmOiBGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj4sXG4gICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICB0cGw6IFRlbXBsYXRlUmVmPHVua25vd24+LFxuICApOiBBbmd1bGFyRHluYW1pY091dHB1dCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gTmd4UmVuZGVyaW5nRW5naW5lLmNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICAgICAgLmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgVHlwZTx1bmtub3duPjtcblxuICAgIGNvbnN0IGNvbXBvbmVudE1ldGFkYXRhID0gcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KTtcbiAgICBpZiAoIWNvbXBvbmVudE1ldGFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE1ldGFkYXRhIGZvciBjb21wb25lbnQgJHtmaWVsZERlZi50YWd9IG5vdCBmb3VuZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRzID0gZmllbGREZWYucHJvcHM7XG5cbiAgICBjb25zdCBwb3NzaWJsZUlucHV0cyA9IGNvbXBvbmVudE1ldGFkYXRhLmlucHV0cztcbiAgICBjb25zdCBpbnB1dEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgcG9zc2libGVJbnB1dHMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW5wdXRLZXlzLmluZGV4T2YoaW5wdXQucHJvcE5hbWUpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBpbnB1dEtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5wdXRLZXlzLmxlbmd0aCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0S2V5cy5sZW5ndGgpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBVbm1hcHBlZCBpbnB1dCBwcm9wZXJ0aWVzIGZvciBjb21wb25lbnQgJHtmaWVsZERlZi50YWd9OiAke2lucHV0S2V5cy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0OiBBbmd1bGFyRHluYW1pY091dHB1dCA9IHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgaW5wdXRzOiBpbnB1dHMgfHwge30sXG4gICAgICBpbmplY3RvcjogaW5qZWN0b3IsXG4gICAgfTtcblxuICAgIGlmIChmaWVsZERlZi5yZW5kZXJlcklkKSB7XG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9XG4gICAgICAgIGZpZWxkRGVmLnJlbmRlcmVySWQ7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuICYmIGZpZWxkRGVmLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmVzdWx0LmNoaWxkcmVuID0gZmllbGREZWYuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0cGwsIGluamVjdG9yKS5yb290Tm9kZXM7XG4gICAgICByZXN1bHQuY29udGVudCA9IFt0ZW1wbGF0ZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3QgY29udmVydHMgdGhlIG1vZGVsIHRvIGEgZmllbGQgZGVmaW5pdGlvbiB1c2luZyB0aGUgYmFzZSBSZW5kZXJpbmdFbmdpbmUnc1xuICAgKiB0b0ZpZWxkRGVmaW5pdGlvbiBtZXRob2QsIHRoZW4gY29udmVydHMgdGhhdCBmaWVsZCBkZWZpbml0aW9uIHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHJlbmRlclxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBnbG9iYWxQcm9wcyAtIEdsb2JhbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge1RlbXBsYXRlUmVmPGFueT59IHRwbCAtIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICAgKiBAcmV0dXJuIHtBbmd1bGFyRHluYW1pY091dHB1dH0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dCB3aXRoIGNvbXBvbmVudCByZWZlcmVuY2UgYW5kIGlucHV0c1xuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnQgYXMgQ2xpZW50IENvZGVcbiAgICogICBwYXJ0aWNpcGFudCBSZW5kZXIgYXMgcmVuZGVyIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFRvRmllbGQgYXMgdG9GaWVsZERlZmluaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBGcm9tRmllbGQgYXMgZnJvbUZpZWxkRGVmaW5pdGlvblxuICAgKlxuICAgKiAgIENsaWVudC0+PlJlbmRlcjogcmVuZGVyKG1vZGVsLCBnbG9iYWxQcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZERlZiA9IHRoaXMudG9GaWVsZERlZmluaXRpb24obW9kZWwsIGdsb2JhbFByb3BzKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZnJvbUZpZWxkRGVmaW5pdGlvbihmaWVsZERlZiwgdmNyLCBpbmplY3RvciwgdHBsKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byByZW5kZXIgTW9kZWwgJHttb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSByZW5kZXJpbmcgZW5naW5lLiBJdCBjaGVja3MgaWYgdGhlIGVuZ2luZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAqIGFuZCBzZXRzIHRoZSBpbml0aWFsaXplZCBmbGFnIHRvIHRydWUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGVuZ2luZSBpcyB1c2VkLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGNvbXBvbmVudCB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIG1ldGhvZCByZWdpc3RlcnMgYSBjb21wb25lbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiB1bmRlciBhIHNwZWNpZmljIG5hbWUuIEl0IHRocm93cyBhbiBlcnJvciBpZiBhIGNvbXBvbmVudCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgdW5kZXIgdGhlIHNhbWUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KSB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gSXQgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0ZWQgY29tcG9uZW50IGlzIG5vdCByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yXSAtIE9wdGlvbmFsIHNlbGVjdG9yIHRvIHJldHJpZXZlIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIEByZXR1cm4ge09iamVjdHxBcnJheX0gRWl0aGVyIGEgc3BlY2lmaWMgY29tcG9uZW50IG9yIGFuIGFycmF5IG9mIGFsbCBjb21wb25lbnRzXG4gICAqL1xuICBzdGF0aWMgY29tcG9uZW50cyhzZWxlY3Rvcj86IHN0cmluZykge1xuICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2NvbXBvbmVudHMpO1xuICAgIGlmICghKHNlbGVjdG9yIGluIHRoaXMuX2NvbXBvbmVudHMpKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE5vIENvbXBvbmVudCByZWdpc3RlcmVkIHVuZGVyICR7c2VsZWN0b3J9YCk7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudHNbc2VsZWN0b3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YSBieSBwcmVmaXhpbmcgdGhlIGlucHV0IGtleVxuICAgKiB3aXRoIHRoZSBBbmd1bGFyIGVuZ2luZSdzIHJlZmxlY3Rpb24gcHJlZml4LiBUaGlzIGlzIHVzZWQgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgYmFzZSBrZXkgdG8gcHJlZml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByZWZpeGVkIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cbn1cbiJdfQ==
|
|
364
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBS0wsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGVBQTZEO0lBNEJuRzs7Ozs7Ozs7Ozs7T0FXRzthQUNZLGVBQVUsR0FBdUIsU0FBUyxDQUFDO0lBZ0IxRDs7Ozs7Ozs7T0FRRztJQUNIO1FBQ0UsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtDRztJQUNLLG1CQUFtQixDQUN6QixRQUFpRCxFQUNqRCxHQUFxQixFQUNyQixRQUFrQixFQUNsQixHQUF5QixFQUN6QixpQkFBeUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFFOUQsTUFBTSxHQUFHLEdBQUksUUFBcUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakcsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLFdBQXVDLENBQUM7UUFFOUQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0Is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LEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUs7b0JBQ3RDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6RixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksR0FBRyxLQUFLLE9BQU87b0JBQ2pCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BDLGlDQUFpQztnQkFDakMseURBQXlEO2dCQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGREZWZpbml0aW9uLCBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRmllbGREZWZpbml0aW9uLCBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQW5ndWxhckR5bmFtaWNPdXRwdXQgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWx9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50TWlycm9yLFxuICBDb21wb25lbnRSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEluamVjdG9yLFxuICByZWZsZWN0Q29tcG9uZW50VHlwZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4Rm9ybVNlcnZpY2UgfSBmcm9tICcuL05neEZvcm1TZXJ2aWNlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQW5ndWxhciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUmVuZGVyaW5nRW5naW5lIHdpdGggZW5oYW5jZWQgZmVhdHVyZXNcbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgZXh0ZW5kcyB0aGUgYmFzZSBSZW5kZXJpbmdFbmdpbmUgdG8gcHJvdmlkZSBBbmd1bGFyLXNwZWNpZmljIHJlbmRlcmluZyBjYXBhYmlsaXRpZXNcbiAqIHdpdGggYWRkaXRpb25hbCBmZWF0dXJlcyBjb21wYXJlZCB0byBOZ3hSZW5kZXJpbmdFbmdpbmUuIEl0IGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gb2YgZmllbGQgZGVmaW5pdGlvbnNcbiAqIHRvIEFuZ3VsYXIgY29tcG9uZW50cywgbWFuYWdlcyBjb21wb25lbnQgcmVnaXN0cmF0aW9uLCBhbmQgcHJvdmlkZXMgdXRpbGl0aWVzIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAqIGFuZCBpbnB1dCBoYW5kbGluZy4gVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIEFuZ3VsYXIncyBuZXdlciBjb21wb25lbnQgQVBJcy5cbiAqXG4gKiBAdGVtcGxhdGUgQW5ndWxhckZpZWxkRGVmaW5pdGlvbiAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgZmllbGQgZGVmaW5pdGlvbnNcbiAqIEB0ZW1wbGF0ZSBBbmd1bGFyRHluYW1pY091dHB1dCAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgY29tcG9uZW50IG91dHB1dFxuICpcbiAqIEBjbGFzcyBOZ3hSZW5kZXJpbmdFbmdpbmVcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBlbmdpbmUgPSBOZ3hSZW5kZXJpbmdFbmdpbmUuZ2V0KCk7XG4gKiBlbmdpbmUuaW5pdGlhbGl6ZSgpO1xuICogY29uc3Qgb3V0cHV0ID0gZW5naW5lLnJlbmRlcihteU1vZGVsLCB7fSwgdmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3IsIHRlbXBsYXRlUmVmKTtcbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEVuZ2luZSBhcyBOZ3hSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50cyBhcyBSZWdpc3RlcmVkQ29tcG9uZW50c1xuICpcbiAqICAgQ2xpZW50LT4+RW5naW5lOiBnZXQoKVxuICogICBDbGllbnQtPj5FbmdpbmU6IGluaXRpYWxpemUoKVxuICogICBDbGllbnQtPj5FbmdpbmU6IHJlbmRlcihtb2RlbCwgcHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAqICAgRW5naW5lLT4+RW5naW5lOiB0b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgcHJvcHMpXG4gKiAgIEVuZ2luZS0+PkVuZ2luZTogZnJvbUZpZWxkRGVmaW5pdGlvbihmaWVsZERlZiwgdmNyLCBpbmplY3RvciwgdHBsKVxuICogICBFbmdpbmUtPj5Db21wb25lbnRzOiBjb21wb25lbnRzKGZpZWxkRGVmLnRhZylcbiAqICAgQ29tcG9uZW50cy0tPj5FbmdpbmU6IGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICogICBFbmdpbmUtPj5FbmdpbmU6IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIGlucHV0cywgbWV0YWRhdGEsIHZjciwgaW5qZWN0b3IsIHRlbXBsYXRlKVxuICogICBFbmdpbmUtLT4+Q2xpZW50OiByZXR1cm4gQW5ndWxhckR5bmFtaWNPdXRwdXRcbiAqL1xuZXhwb3J0IGNsYXNzIE5neFJlbmRlcmluZ0VuZ2luZSBleHRlbmRzIFJlbmRlcmluZ0VuZ2luZTxBbmd1bGFyRmllbGREZWZpbml0aW9uLCBBbmd1bGFyRHluYW1pY091dHB1dD4ge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0cnkgb2YgY29tcG9uZW50cyBhdmFpbGFibGUgZm9yIHJlbmRlcmluZ1xuICAgKiBAc3VtbWFyeSBTdGF0aWMgcmVnaXN0cnkgdGhhdCBzdG9yZXMgYWxsIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbmRleGVkIGJ5IHRoZWlyIHNlbGVjdG9yIG5hbWUuXG4gICAqIEVhY2ggY29tcG9uZW50IGVudHJ5IGNvbnRhaW5zIGEgY29uc3RydWN0b3IgcmVmZXJlbmNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5zdGFudGlhdGVcbiAgICogdGhlIGNvbXBvbmVudCBkdXJpbmcgdGhlIHJlbmRlcmluZyBwcm9jZXNzLiBUaGlzIHJlZ2lzdHJ5IGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGluc3RhbmNlc1xuICAgKiBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZSBhbmQgaXMgcG9wdWxhdGVkIHRocm91Z2ggdGhlIHJlZ2lzdGVyQ29tcG9uZW50IG1ldGhvZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfY29tcG9uZW50czogUmVjb3JkPHN0cmluZywgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50bHkgYWN0aXZlIG1vZGVsIGJlaW5nIHJlbmRlcmVkXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgbW9kZWwgaW5zdGFuY2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkXG4gICAqIGJ5IHRoZSByZW5kZXJpbmcgZW5naW5lLiBUaGlzIHByb3BlcnR5IGlzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBtZXRob2QgZXhlY3V0aW9uXG4gICAqIGFuZCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIHJlbmRlcmluZyBsaWZlY3ljbGUgdG8gYWNjZXNzIG1vZGVsIGRhdGEgYW5kIG1ldGFkYXRhLlxuICAgKiBUaGUgZGVmaW5pdGUgYXNzaWdubWVudCBhc3NlcnRpb24gKCEpIGlzIHVzZWQgYmVjYXVzZSB0aGlzIHByb3BlcnR5IGlzIGFsd2F5c1xuICAgKiBpbml0aWFsaXplZCBiZWZvcmUgdXNlIHdpdGhpbiB0aGUgcmVuZGVyIG1ldGhvZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge01vZGVsfVxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kZWwhOiBNb2RlbDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgb3BlcmF0aW9uIGNvbnRleHQgZm9yIGNvbXBvbmVudCB2aXNpYmlsaXR5IGNvbnRyb2xcbiAgICogQHN1bW1hcnkgU3RhdGljIHByb3BlcnR5IHRoYXQgc3RvcmVzIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBiZWluZyBwZXJmb3JtZWQsXG4gICAqIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGNvbXBvbmVudCB2aXNpYmlsaXR5IHRocm91Z2ggdGhlICdoaWRkZW4nIHByb3BlcnR5LlxuICAgKiBDb21wb25lbnRzIGNhbiBzcGVjaWZ5IG9wZXJhdGlvbnMgd2hlcmUgdGhleSBzaG91bGQgYmUgaGlkZGVuLCBhbmQgdGhpcyBwcm9wZXJ0eVxuICAgKiBwcm92aWRlcyB0aGUgY29udGV4dCBmb3IgdGhvc2UgdmlzaWJpbGl0eSBjaGVja3MuIFRoZSB2YWx1ZSBpcyB0eXBpY2FsbHkgZXh0cmFjdGVkXG4gICAqIGZyb20gdGhlIGdsb2JhbCBwcm9wZXJ0aWVzIGR1cmluZyB0aGUgcmVuZGVyaW5nIHByb2Nlc3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9vcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgU3RhdGljIHByb3BlcnR5IHRoYXQgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBtb3N0IHJlY2VudGx5IGNyZWF0ZWRcbiAgICogY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgY29tcG9uZW50IGxpZmVjeWNsZSBtYW5hZ2VtZW50XG4gICAqIGFuZCBjYW4gYmUgY2xlYXJlZCB0aHJvdWdoIHRoZSBkZXN0cm95IG1ldGhvZC4gVGhlIHJlZmVyZW5jZSBhbGxvd3MgYWNjZXNzIHRvXG4gICAqIHRoZSBhY3RpdmUgY29tcG9uZW50IGluc3RhbmNlIGZvciBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBpbnRlcmFjdCB3aXRoIHRoZVxuICAgKiBjdXJyZW50bHkgcmVuZGVyZWQgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqIEB0eXBlIHtUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0cyBhIG5ldyBOZ3hSZW5kZXJpbmdFbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFuZ3VsYXIgcmVuZGVyaW5nIGVuZ2luZSBieSBjYWxsaW5nIHRoZSBwYXJlbnRcbiAgICogY29uc3RydWN0b3Igd2l0aCB0aGUgJ2FuZ3VsYXInIGVuZ2luZSB0eXBlIGlkZW50aWZpZXIuIFRoaXMgY29uc3RydWN0b3Igc2V0cyB1cCB0aGUgYmFzZVxuICAgKiByZW5kZXJpbmcgZW5naW5lIGZ1bmN0aW9uYWxpdHkgd2l0aCBBbmd1bGFyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFuZCBwcmVwYXJlcyB0aGVcbiAgICogaW5zdGFuY2UgZm9yIGNvbXBvbmVudCByZWdpc3RyYXRpb24gYW5kIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdhbmd1bGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgZmllbGQgZGVmaW5pdGlvbiB0byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXRcbiAgICogQHN1bW1hcnkgVGhpcyBwcml2YXRlIG1ldGhvZCB0YWtlcyBhIGZpZWxkIGRlZmluaXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgQW5ndWxhciBjb21wb25lbnQuXG4gICAqIEl0IGhhbmRsZXMgY29tcG9uZW50IGluc3RhbnRpYXRpb24sIGlucHV0IHByb3BlcnR5IG1hcHBpbmcsIGFuZCBjaGlsZCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgKiBUaGUgbWV0aG9kIHZhbGlkYXRlcyBpbnB1dCBwcm9wZXJ0aWVzIGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIGFuZCBwcm9jZXNzZXNcbiAgICogY2hpbGQgY29tcG9uZW50cyByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIHtGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj59IGZpZWxkRGVmIC0gVGhlIGZpZWxkIGRlZmluaXRpb24gdG8gY29udmVydFxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge1RlbXBsYXRlUmVmPGFueT59IHRwbCAtIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cnlGb3JtSWQgLSBGb3JtIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQgcmVuZGVyZXJcbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgTWV0aG9kIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRzIGFzIE5neFJlbmRlcmluZ0VuZ2luZS5jb21wb25lbnRzXG4gICAqICAgcGFydGljaXBhbnQgQW5ndWxhciBhcyBBbmd1bGFyIENvcmVcbiAgICogICBwYXJ0aWNpcGFudCBQcm9jZXNzIGFzIHByb2Nlc3NDaGlsZFxuICAgKlxuICAgKiAgIE1ldGhvZC0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICAgKiAgIENvbXBvbmVudHMtLT4+TWV0aG9kOiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogICBNZXRob2QtPj5Bbmd1bGFyOiByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpXG4gICAqICAgQW5ndWxhci0tPj5NZXRob2Q6IGNvbXBvbmVudE1ldGFkYXRhXG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBWYWxpZGF0ZSBpbnB1dCBwcm9wZXJ0aWVzXG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBDcmVhdGUgcmVzdWx0IG9iamVjdFxuICAgKiAgIGFsdCBIYXMgY2hpbGRyZW5cbiAgICogICAgIE1ldGhvZC0+PlByb2Nlc3M6IFByb2Nlc3MgY2hpbGRyZW4gcmVjdXJzaXZlbHlcbiAgICogICAgIFByb2Nlc3MtPj5NZXRob2Q6IFJldHVybiBwcm9jZXNzZWQgY2hpbGRyZW5cbiAgICogICAgIE1ldGhvZC0+PkFuZ3VsYXI6IENyZWF0ZSBlbWJlZGRlZCB2aWV3XG4gICAqICAgICBNZXRob2QtPj5NZXRob2Q6IENyZWF0ZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogICBlbmRcbiAgICogICBNZXRob2QtLT4+Q2FsbGVyOiByZXR1cm4gQW5ndWxhckR5bmFtaWNPdXRwdXRcbiAgICovXG4gIHByaXZhdGUgZnJvbUZpZWxkRGVmaW5pdGlvbihcbiAgICBmaWVsZERlZjogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgICByZWdpc3RyeUZvcm1JZDogc3RyaW5nID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKSxcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGNvbnN0IGNtcCA9IChmaWVsZERlZiBhcyBLZXlWYWx1ZSk/LlsnY29tcG9uZW50J10gfHwgTmd4UmVuZGVyaW5nRW5naW5lLmNvbXBvbmVudHMoZmllbGREZWYudGFnKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjbXAuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgY29uc3QgY29tcG9uZW50TWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpO1xuICAgIGlmICghY29tcG9uZW50TWV0YWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNZXRhZGF0YSBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfSBub3QgZm91bmQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpbnB1dHM6IHBvc3NpYmxlSW5wdXRzIH0gPSBjb21wb25lbnRNZXRhZGF0YTtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZpZWxkRGVmLnByb3BzIH07XG5cbiAgICBjb25zdCB1bm1hcHBlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpLmZpbHRlcihpbnB1dCA9PiB7XG4gICAgICBjb25zdCBpc01hcHBlZCA9IHBvc3NpYmxlSW5wdXRzLmZpbmQoKHsgcHJvcE5hbWUgfSkgPT4gcHJvcE5hbWUgPT09IGlucHV0KTtcbiAgICAgIGlmICghaXNNYXBwZWQpIGRlbGV0ZSBpbnB1dHNbaW5wdXRdO1xuICAgICAgcmV0dXJuICFpc01hcHBlZDtcbiAgICB9KTtcblxuICAgIGlmICh1bm1hcHBlZEtleXMubGVuZ3RoID4gMClcbiAgICAgIGNvbnNvbGUud2FybihgVW5tYXBwZWQgaW5wdXQgcHJvcGVydGllcyBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfTogJHt1bm1hcHBlZEtleXMuam9pbignLCAnKX1gKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IE5neFJlbmRlcmluZ0VuZ2luZS5fb3BlcmF0aW9uO1xuXG4gICAgY29uc3QgaGlkZGVuT24gPSBpbnB1dHM/LmhpZGRlbiB8fCBbXTtcbiAgICBpZigoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgcmV0dXJuIHtpbnB1dHMsIGluamVjdG9yfTtcbiAgICAvLyBjb25zdCBoaWRkZW5PbiA9IGlucHV0cz8uaGlkZGVuIHx8IFtdO1xuICAgIGNvbnN0IHJlc3VsdDogQW5ndWxhckR5bmFtaWNPdXRwdXQgPSB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBpbnB1dHMsXG4gICAgICBpbmplY3RvcixcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkRGVmLnJlbmRlcmVySWQpXG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9IGZpZWxkRGVmLnJlbmRlcmVySWQ7XG5cbiAgICAvLyBwcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGZpZWxkRGVmLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gYz8ucHJvcHM/LmhpZGRlbiB8fCBbXTtcbiAgICAgICAgICAgIGlmKCEoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgY2hpbGQgZm9ybSBhbmQgYWRkIGl0cyBjb250cm9scyBhcyBwcm9wZXJ0aWVzIG9mIGNoaWxkLnByb3BzXG4gICAgICAgIE5neEZvcm1TZXJ2aWNlLmFkZENvbnRyb2xGcm9tUHJvcHMocmVnaXN0cnlGb3JtSWQsIGNoaWxkLnByb3BzLCBpbnB1dHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwsIHJlZ2lzdHJ5Rm9ybUlkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRpbmcgRE9NXG4gICAgdmNyLmNsZWFyKCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB2Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbCwgaW5qZWN0b3IpLnJvb3ROb2RlcztcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQsXG4gICAgICB7IC4uLmlucHV0cywgbW9kZWw6IHRoaXMuX21vZGVsIH0sXG4gICAgICBjb21wb25lbnRNZXRhZGF0YSxcbiAgICAgIHZjcixcbiAgICAgIGluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcblxuICAgIHJlc3VsdC5pbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZSBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIHV0aWxpdHkgbWV0aG9kIGNyZWF0ZXMgYW4gQW5ndWxhciBjb21wb25lbnQgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkXG4gICAqIGlucHV0cyBhbmQgdGVtcGxhdGUuIEl0IHVzZXMgQW5ndWxhcidzIGNvbXBvbmVudCBjcmVhdGlvbiBBUEkgdG8gaW5zdGFudGlhdGUgdGhlIGNvbXBvbmVudFxuICAgKiBhbmQgdGhlbiBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIHVzaW5nIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHR5cGUgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IFtpbnB1dHM9e31dIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge05vZGVbXX0gW3RlbXBsYXRlPVtdXSAtIFRoZSB0ZW1wbGF0ZSBub2RlcyB0byBwcm9qZWN0IGludG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtDb21wb25lbnRSZWY8dW5rbm93bj59IFRoZSBjcmVhdGVkIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPHVua25vd24+LCBpbnB1dHM6IEtleVZhbHVlID0ge30sIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sIHZjcjogVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3I6IEluamVjdG9yLCB0ZW1wbGF0ZTogTm9kZVtdID0gW10pOiBDb21wb25lbnRSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gdmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgVHlwZTx1bmtub3duPiwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogaW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIHByb2plY3RhYmxlTm9kZXM6IFt0ZW1wbGF0ZV0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2UsIGlucHV0cywgbWV0YWRhdGEpO1xuICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgZGVjb3JhdG9yIG1ldGFkYXRhIGZyb20gYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gYSBtb2RlbCdzXG4gICAqIGRlY29yYXRvcnMuIEl0J3MgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kIHRoYXRcbiAgICogY29udmVydHMgYSBtb2RlbCB0byBhIGZpZWxkIGRlZmluaXRpb24gYmFzZWQgb24gaXRzIGRlY29yYXRvcnMgYW5kIHRoZSBwcm92aWRlZFxuICAgKiBnbG9iYWwgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gZXh0cmFjdCBkZWNvcmF0b3JzIGZyb21cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBpbmNsdWRlIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uXG4gICAqIEByZXR1cm4ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gVGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gdGhlIG1vZGVsXG4gICAqL1xuICBnZXREZWNvcmF0b3JzKG1vZGVsOiBNb2RlbCwgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXN0cm95cyB0aGUgY3VycmVudCBlbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNsZWFycyB0aGUgY3VycmVudCBpbnN0YW5jZSByZWZlcmVuY2UsIGVmZmVjdGl2ZWx5XG4gICAqIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBjYW4gYmUgdXNlZFxuICAgKiB0byByZXNldCB0aGUgZW5naW5lIHN0YXRlIG9yIHRvIHByZXBhcmUgZm9yIGEgbmV3IGluc3RhbmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3Qgc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCwgdGhlbiBjb252ZXJ0cyBpdCB0byBhIGZpZWxkIGRlZmluaXRpb25cbiAgICogdXNpbmcgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lJ3MgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kLCBhbmQgZmluYWxseSBjb252ZXJ0c1xuICAgKiB0aGF0IGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHVzaW5nIGZyb21GaWVsZERlZmluaXRpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50IGFzIENsaWVudCBDb2RlXG4gICAqICAgcGFydGljaXBhbnQgUmVuZGVyIGFzIHJlbmRlciBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUb0ZpZWxkIGFzIHRvRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgRnJvbUZpZWxkIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICpcbiAgICogICBDbGllbnQtPj5SZW5kZXI6IHJlbmRlcihtb2RlbCwgZ2xvYmFsUHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBSZW5kZXItPj5SZW5kZXI6IFN0b3JlIG1vZGVsIHJlZmVyZW5jZVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgY29uc3QgZm9ybUlkID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpZWxkRGVmID0gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICAgICAgY29uc3QgcHJvcHMgPSBmaWVsZERlZi5wcm9wcyBhcyBLZXlWYWx1ZTtcbiAgICAgIGlmKCFOZ3hSZW5kZXJpbmdFbmdpbmUuX29wZXJhdGlvbilcbiAgICAgICAgTmd4UmVuZGVyaW5nRW5naW5lLl9vcGVyYXRpb24gPSBwcm9wcz8uWydvcGVyYXRpb24nXSB8fCB1bmRlZmluZWQ7XG4gICAgICByZXN1bHQgPSB0aGlzLmZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbCwgZm9ybUlkKTtcblxuICAgICAgKHJlc3VsdCEuaW5zdGFuY2UhIGFzIEtleVZhbHVlKVsnZm9ybUdyb3VwJ10gPSBOZ3hGb3JtU2VydmljZS5nZXRDb250cm9sRnJvbUZvcm0oZm9ybUlkKTtcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnJlbW92ZVJlZ2lzdHJ5KGZvcm1JZCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVuZGVyIE1vZGVsICR7bW9kZWwuY29uc3RydWN0b3IubmFtZX06ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gSXQgY2hlY2tzIGlmIHRoZSBlbmdpbmUgaXMgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgKiBhbmQgc2V0cyB0aGUgaW5pdGlhbGl6ZWQgZmxhZyB0byB0cnVlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlbmdpbmUgaXMgdXNlZFxuICAgKiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBzZXQgdXAgZm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKVxuICAgICAgcmV0dXJuO1xuICAgIC8vIFZhbGlkYXRhYmxlQnlUeXBlW11cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgY29tcG9uZW50IHdpdGggdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIHJlZ2lzdGVycyBhIGNvbXBvbmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIHVuZGVyIGEgc3BlY2lmaWMgbmFtZS4gSXQgaW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudHMgcmVnaXN0cnkgaWYgbmVlZGVkIGFuZCB0aHJvd3NcbiAgICogYW4gZXJyb3IgaWYgYSBjb21wb25lbnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyIHRoZSBzYW1lIG5hbWUgdG8gcHJldmVudFxuICAgKiBhY2NpZGVudGFsIG92ZXJyaWRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gV2hlbiBjYWxsZWQgd2l0aG91dCBhIHNlbGVjdG9yLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCByZWdpc3RlcmVkXG4gICAqIGNvbXBvbmVudHMuIFdoZW4gY2FsbGVkIHdpdGggYSBzZWxlY3RvciwgaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgY29tcG9uZW50IGlmIGZvdW5kLFxuICAgKiBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciB0byByZXRyaWV2ZSBhIHNwZWNpZmljIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9IEVpdGhlciBhIHNwZWNpZmljIGNvbXBvbmVudCBvciBhbiBhcnJheSBvZiBhbGwgY29tcG9uZW50c1xuICAgKi9cbiAgc3RhdGljIGNvbXBvbmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBvYmplY3QgfCBzdHJpbmdbXSB7XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29tcG9uZW50cyk7XG4gICAgaWYgKCEoc2VsZWN0b3IgaW4gdGhpcy5fY29tcG9uZW50cykpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQ29tcG9uZW50IHJlZ2lzdGVyZWQgdW5kZXIgJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1tzZWxlY3Rvcl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIGEga2V5IGZvciByZWZsZWN0aW9uIG1ldGFkYXRhIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQga2V5XG4gICAqIHdpdGggdGhlIEFuZ3VsYXIgZW5naW5lJ3MgcmVmbGVjdGlvbiBwcmVmaXguIFRoaXMgaXMgdXNlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZ1xuICAgKiBtZXRhZGF0YSBpbiBhIG5hbWVzcGFjZWQgd2F5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGJhc2Uga2V5IHRvIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBrZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgaW5wdXQgcHJvcGVydGllcyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyB1dGlsaXR5IG1ldGhvZCBzZXRzIGlucHV0IHByb3BlcnRpZXMgb24gYSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0cyBvYmplY3QgYW5kIGNvbXBvbmVudCBtZXRhZGF0YS4gSXQgaGFuZGxlcyBib3RoIHNpbXBsZVxuICAgKiB2YWx1ZXMgYW5kIG5lc3RlZCBvYmplY3RzLCByZWN1cnNpdmVseSBwcm9jZXNzaW5nIG9iamVjdCBwcm9wZXJ0aWVzLiBUaGUgbWV0aG9kXG4gICAqIHZhbGlkYXRlcyBlYWNoIGlucHV0IGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIHRvIGVuc3VyZSBvbmx5IHZhbGlkIGlucHV0c1xuICAgKiBhcmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudFJlZjx1bmtub3duPn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gc2V0IGlucHV0cyBvblxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnB1dHMgLSBUaGUgaW5wdXQgcHJvcGVydGllcyB0byBzZXRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBTZXRJbnB1dHMgYXMgc2V0SW5wdXRzXG4gICAqICAgcGFydGljaXBhbnQgUGFyc2UgYXMgcGFyc2VJbnB1dFZhbHVlXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50IGFzIENvbXBvbmVudFJlZlxuICAgKlxuICAgKiAgIENhbGxlci0+PlNldElucHV0czogc2V0SW5wdXRzKGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSlcbiAgICogICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IEl0ZXJhdGUgdGhyb3VnaCBpbnB1dHNcbiAgICogICBsb29wIEZvciBlYWNoIGlucHV0XG4gICAqICAgICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IENoZWNrIGlmIGlucHV0IGV4aXN0cyBpbiBtZXRhZGF0YVxuICAgKiAgICAgYWx0IElucHV0IGlzICdwcm9wcydcbiAgICogICAgICAgU2V0SW5wdXRzLT4+UGFyc2U6IHBhcnNlSW5wdXRWYWx1ZShjb21wb25lbnQsIHZhbHVlKVxuICAgKiAgICAgICBQYXJzZS0+PlBhcnNlOiBSZWN1cnNpdmVseSBwcm9jZXNzIG5lc3RlZCBvYmplY3RzXG4gICAqICAgICAgIFBhcnNlLT4+Q29tcG9uZW50OiBzZXRJbnB1dChrZXksIHZhbHVlKVxuICAgKiAgICAgZWxzZSBJbnB1dCBpcyB2YWxpZFxuICAgKiAgICAgICBTZXRJbnB1dHMtPj5Db21wb25lbnQ6IHNldElucHV0KGtleSwgdmFsdWUpXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBzZXRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0czogS2V5VmFsdWUsIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0OiBLZXlWYWx1ZSkge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhIXZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbXBvbmVudC5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGlucHV0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gbWV0YWRhdGEuaW5wdXRzLmZpbmQoKGl0ZW06IHsgcHJvcE5hbWU6IHN0cmluZyB9KSA9PiBpdGVtLnByb3BOYW1lID09PSBrZXkpO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Byb3BzJylcbiAgICAgICAgICBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIC8vIGlmKGtleSA9PT0gJ2xvY2FsZScgJiYgIXZhbHVlKVxuICAgICAgICAvLyAgIHZhbHVlID0gZ2V0TG9jYWxlRnJvbUNsYXNzTmFtZSh0aGlzLl9jb21wb25lbnROYW1lKTtcbiAgICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FormControl, FormGroup } from '@angular/forms';
|
|
2
|
-
import { ComparisonValidationKeys, DEFAULT_PATTERNS, PathProxyEngine,
|
|
2
|
+
import { ComparisonValidationKeys, DEFAULT_PATTERNS, PathProxyEngine, Validation, ValidationKeys, } from '@decaf-ts/decorator-validation';
|
|
3
3
|
import { HTML5InputTypes, parseValueByType } from '@decaf-ts/ui-decorators';
|
|
4
4
|
import { AngularEngineKeys } from './constants';
|
|
5
|
+
import { NgxRenderingEngine } from './NgxRenderingEngine';
|
|
5
6
|
/**
|
|
6
7
|
*
|
|
7
8
|
* Resolves the correct validator key and its associated properties based on the input key and type.
|
|
@@ -25,7 +26,8 @@ const resolveValidatorKeyProps = (key, value, type) => {
|
|
|
25
26
|
const isTypeBased = key === ValidationKeys.TYPE && Object.keys(patternValidators).includes(type);
|
|
26
27
|
const validatorKey = isTypeBased ? type : key;
|
|
27
28
|
const props = {
|
|
28
|
-
[validatorKey]: value,
|
|
29
|
+
// [validatorKey]: (!isTypeBased && key === 'type') ? parseType(type) : value,
|
|
30
|
+
[validatorKey]: (!isTypeBased && validatorKey === ValidationKeys.TYPE) ? NgxRenderingEngine.get().translate(value, false) : value,
|
|
29
31
|
// Email, Password, and URL are validated using the "pattern" key
|
|
30
32
|
...(isTypeBased && { [ValidationKeys.PATTERN]: patternValidators[type] }),
|
|
31
33
|
};
|
|
@@ -52,7 +54,7 @@ export class ValidatorFactory {
|
|
|
52
54
|
let errs;
|
|
53
55
|
try {
|
|
54
56
|
if (!props['types'] && !props['customTypes'])
|
|
55
|
-
props['types'] = props['type']
|
|
57
|
+
props['types'] = props['type'];
|
|
56
58
|
errs = validator.hasErrors(value, props, proxy);
|
|
57
59
|
}
|
|
58
60
|
catch (e) {
|
|
@@ -101,4 +103,4 @@ export class ValidatorFactory {
|
|
|
101
103
|
});
|
|
102
104
|
}
|
|
103
105
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL1ZhbGlkYXRvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLGNBQWMsR0FFZixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBbUIsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS2hEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLHdCQUF3QixHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxJQUFZLEVBR3pFLEVBQUU7SUFDRixNQUFNLGlCQUFpQixHQUE0QjtRQUNqRCxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsaUJBQWlCO1FBQ3RFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7UUFDOUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsR0FBRztLQUMzQyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsR0FBRyxLQUFLLGNBQWMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRyxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUE0QjtRQUNyQyxDQUFD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TyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQXdCO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDckMsUUFBUSxDQUFDLE1BQXVCLEVBQUUsSUFBWTtnQkFDNUMsSUFBSSxNQUFNLFlBQVksV0FBVztvQkFDL0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUV0QixJQUFJLE1BQU0sWUFBWSxTQUFTLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxPQUFPLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xFLENBQUM7Z0JBRUQsOEJBQThCO2dCQUM5QixvQ0FBb0M7Z0JBQ3BDLHdCQUF3QjtnQkFDeEIsRUFBRTtnQkFDRixvQ0FBb0M7Z0JBQ3BDLDBDQUEwQztnQkFDMUMscUVBQXFFO2dCQUNyRSxJQUFJO2dCQUVKLE9BQVEsTUFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxTQUFTLEVBQUUsVUFBUyxNQUF1QjtnQkFDekMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsZUFBZSxFQUFFLElBQUk7WUFDckIsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cyxcbiAgREVGQVVMVF9QQVRURVJOUyxcbiAgUGF0aFByb3h5LFxuICBQYXRoUHJveHlFbmdpbmUsXG4gIFByaW1pdGl2ZXMsXG4gIFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBGaWVsZFByb3BlcnRpZXMsIEhUTUw1SW5wdXRUeXBlcywgcGFyc2VWYWx1ZUJ5VHlwZSB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFuZ3VsYXJFbmdpbmVLZXlzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBDb21wYXJpc29uVmFsaWRhdGlvbktleSA9IHR5cGVvZiBDb21wYXJpc29uVmFsaWRhdGlvbktleXNba2V5b2YgdHlwZW9mIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5c107XG5cbi8qKlxuICpcbiAqIFJlc29sdmVzIHRoZSBjb3JyZWN0IHZhbGlkYXRvciBrZXkgYW5kIGl0cyBhc3NvY2lhdGVkIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIGlucHV0IGtleSBhbmQgdHlwZS5cbiAqXG4gKiBXaGVuIHRoZSB2YWxpZGF0aW9uIGtleSBpcyBUWVBFLCBpdCdzIG5lY2Vzc2FyeSB0byByZXNvbHZlIHRoZSBhY3R1YWwgdmFsaWRhdG9yIGJhc2VkIG9uIHRoZVxuICogZmllbGQncyB0eXBlIChlLmcuLCAncGFzc3dvcmQnLCAnZW1haWwnLCAndXJsJykgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2VuZXJpYyBnZXRWYWxpZGF0b3IoXCJ0eXBlXCIpIGxvZ2ljLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0bHkgaW52b2tpbmcgc3BlY2lmaWMgdmFsaWRhdG9ycyBsaWtlIGdldFZhbGlkYXRvcigncGFzc3dvcmQnKSwgZW5zdXJpbmcgdGhlIGNvcnJlY3RcbiAqIGJlaGF2aW9yIGZvciB0eXBlLWJhc2VkIHZhbGlkYXRpb24uXG4gKlxuICogQHBhcmFtIGtleSAtIFRoZSB2YWxpZGF0aW9uIGtleSAoZS5nLiwgJ3R5cGUnLCAncmVxdWlyZWQnLCBldGMuKS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0aGF0IG5lZWRzIGJlIHByb3ZpZGVkIHRvIHRoZSB2YWxpZGF0b3IuXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBmaWVsZCdzIGRlY2xhcmVkIHR5cGUuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdmFsaWRhdG9yIGtleSBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgcHJvcHMuXG4gKi9cbmNvbnN0IHJlc29sdmVWYWxpZGF0b3JLZXlQcm9wcyA9IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHR5cGU6IHN0cmluZyk6IHtcbiAgdmFsaWRhdG9yS2V5OiBzdHJpbmc7XG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0gPT4ge1xuICBjb25zdCBwYXR0ZXJuVmFsaWRhdG9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgW1ZhbGlkYXRpb25LZXlzLlBBU1NXT1JEXTogREVGQVVMVF9QQVRURVJOUy5QQVNTV09SRC5DSEFSOF9PTkVfT0ZfRUFDSCxcbiAgICBbVmFsaWRhdGlvbktleXMuRU1BSUxdOiBERUZBVUxUX1BBVFRFUk5TLkVNQUlMLFxuICAgIFtWYWxpZGF0aW9uS2V5cy5VUkxdOiBERUZBVUxUX1BBVFRFUk5TLlVSTCxcbiAgfTtcblxuICBjb25zdCBpc1R5cGVCYXNlZCA9IGtleSA9PT0gVmFsaWRhdGlvbktleXMuVFlQRSAmJiBPYmplY3Qua2V5cyhwYXR0ZXJuVmFsaWRhdG9ycykuaW5jbHVkZXModHlwZSk7XG4gIGNvbnN0IHZhbGlkYXRvcktleSA9IGlzVHlwZUJhc2VkID8gdHlwZSA6IGtleTtcbiAgY29uc3QgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFt2YWxpZGF0b3JLZXldOiB2YWx1ZSxcbiAgICAvLyBFbWFpbCwgUGFzc3dvcmQsIGFuZCBVUkwgYXJlIHZhbGlkYXRlZCB1c2luZyB0aGUgXCJwYXR0ZXJuXCIga2V5XG4gICAgLi4uKGlzVHlwZUJhc2VkICYmIHsgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dOiBwYXR0ZXJuVmFsaWRhdG9yc1t0eXBlXSB9KSxcbiAgfTtcblxuICByZXR1cm4geyB2YWxpZGF0b3JLZXksIHByb3BzIH07XG59O1xuXG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JGYWN0b3J5IHtcbiAgc3RhdGljIHNwYXduKGZpZWxkUHJvcHM6IEZpZWxkUHJvcGVydGllcywga2V5OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgaWYgKCFWYWxpZGF0aW9uLmtleXMoKS5pbmNsdWRlcyhrZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjdXN0b20gdmFsaWRhdGlvbicpO1xuXG4gICAgY29uc3QgdmFsaWRhdG9yRm46IFZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgdHlwZSB9ID0gZmllbGRQcm9wcztcbiAgICAgIGNvbnN0IHsgdmFsaWRhdG9yS2V5LCBwcm9wcyB9ID0gcmVzb2x2ZVZhbGlkYXRvcktleVByb3BzKGtleSwgZmllbGRQcm9wc1trZXkgYXMga2V5b2YgRmllbGRQcm9wZXJ0aWVzXSwgdHlwZSk7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSBWYWxpZGF0aW9uLmdldCh2YWxpZGF0b3JLZXkpIGFzIFZhbGlkYXRvcjtcblxuICAgICAgLy8gcGFyc2VWYWx1ZUJ5VHlwZSBkb2VzIG5vdCBzdXBwb3J0IHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGNvbnRyb2wudmFsdWUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gcGFyc2VWYWx1ZUJ5VHlwZSh0eXBlLCB0eXBlID09PSBIVE1MNUlucHV0VHlwZXMuQ0hFQ0tCT1ggPyBuYW1lIDogY29udHJvbC52YWx1ZSwgZmllbGRQcm9wcylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIENyZWF0ZSBhIHByb3h5IHRvIGVuYWJsZSBhY2Nlc3MgdG8gcGFyZW50IGFuZCBjaGlsZCB2YWx1ZXNcbiAgICAgIGxldCBwcm94eTogUGF0aFByb3h5PHVua25vd24+ID0gVmFsaWRhdG9yRmFjdG9yeS5jcmVhdGVQcm94eSh7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgaWYgKE9iamVjdC52YWx1ZXMoQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzKS5pbmNsdWRlcyhrZXkgYXMgQ29tcGFyaXNvblZhbGlkYXRpb25LZXkpKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudDogRm9ybUdyb3VwID0gY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCA/IGNvbnRyb2wgOiAoY29udHJvbCBhcyBLZXlWYWx1ZSlbQW5ndWxhckVuZ2luZUtleXMuUEFSRU5UXTtcbiAgICAgICAgcHJveHkgPSBWYWxpZGF0b3JGYWN0b3J5LmNyZWF0ZVByb3h5KHBhcmVudCkgYXMgUGF0aFByb3h5PHVua25vd24+O1xuICAgICAgfVxuXG4gICAgICBsZXQgZXJyczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoIXByb3BzWyd0eXBlcyddICYmICFwcm9wc1snY3VzdG9tVHlwZXMnXSlcbiAgICAgICAgICBwcm9wc1sndHlwZXMnXSA9IHByb3BzWyd0eXBlJ10gPT09ICd0ZXh0JyA/IFByaW1pdGl2ZXMuU1RSSU5HIDogdHlwZTtcbiAgICAgICAgZXJycyA9IHZhbGlkYXRvci5oYXNFcnJvcnModmFsdWUsIHByb3BzLCBwcm94eSk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGVycnMgPSBgJHtrZXl9IHZhbGlkYXRvciBmYWlsZWQgdG8gdmFsaWRhdGU6ICR7ZX1gO1xuICAgICAgICBjb25zb2xlLndhcm4oZXJycyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJzID8geyBbdmFsaWRhdG9yS2V5XTogdHJ1ZSB9IDogbnVsbDtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRvckZuLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBgJHtrZXl9VmFsaWRhdG9yYCxcbiAgICB9KTtcblxuICAgIHJldHVybiB2YWxpZGF0b3JGbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgcHJveHkgd3JhcHBlciBmb3IgYW4gQW5ndWxhciBBYnN0cmFjdENvbnRyb2wgdG8gYXNzaXN0IHdpdGggY3VzdG9tIHZhbGlkYXRpb24gbG9naWMuXG4gICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgc3RydWN0dXJlZCBwcm94eSBvYmplY3QgdGhhdCBzaW11bGF0ZXMgYSBoaWVyYXJjaGljYWwgdHJlZSBvZiBmb3JtIHZhbHVlcy5cbiAgICogRW5hYmxlcyBWYWxpZGF0b3JzIGhhbmRsaW5nIG1ldGhvZCB0byBhY2Nlc3MgcGFyZW50IGFuZCBjaGlsZCBwcm9wZXJ0aWVzIHVzaW5nIGNvbnNpc3RlbnQgZG90LW5vdGF0aW9uIGluIEFuZ3VsYXIgZm9ybXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGNvbnRyb2wgdG8gd3JhcCBpbiBhIHByb3h5LlxuICAgKiBAcmV0dXJucyB7UGF0aFByb3h5PHVua25vd24+fSBBIHByb3h5IG9iamVjdCBleHBvc2luZyBmb3JtIHZhbHVlcyBhbmQgZW5hYmxpbmcgcmVjdXJzaXZlIHBhcmVudCBhY2Nlc3MuXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlUHJveHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUGF0aFByb3h5PHVua25vd24+IHtcbiAgICByZXR1cm4gUGF0aFByb3h5RW5naW5lLmNyZWF0ZShjb250cm9sLCB7XG4gICAgICBnZXRWYWx1ZSh0YXJnZXQ6IEFic3RyYWN0Q29udHJvbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biB7XG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGFyZ2V0LmNvbnRyb2xzW3Byb3BdO1xuICAgICAgICAgIHJldHVybiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgPyBjb250cm9sLnZhbHVlIDogY29udHJvbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnN0IHZhbHVlID0gdGFyZ2V0W3Byb3BdO1xuICAgICAgICAvLyBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtQ29udHJvbClcbiAgICAgICAgLy8gICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAvLyAgIGNvbnN0IGNvbnRyb2wgPSB2YWx1ZS5jb250cm9sc1twcm9wXTtcbiAgICAgICAgLy8gICByZXR1cm4gY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sID8gY29udHJvbC52YWx1ZSA6IGNvbnRyb2w7XG4gICAgICAgIC8vIH1cblxuICAgICAgICByZXR1cm4gKHRhcmdldCBhcyBLZXlWYWx1ZSk/Lltwcm9wXTtcbiAgICAgIH0sXG4gICAgICBnZXRQYXJlbnQ6IGZ1bmN0aW9uKHRhcmdldDogQWJzdHJhY3RDb250cm9sKSAge1xuICAgICAgICByZXR1cm4gdGFyZ2V0Py5bJ19wYXJlbnQnXTtcbiAgICAgIH0sXG4gICAgICBpZ25vcmVVbmRlZmluZWQ6IHRydWUsXG4gICAgICBpZ25vcmVOdWxsOiB0cnVlLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL1ZhbGlkYXRvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFtQixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLMUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLElBQVksRUFHekUsRUFBRTtJQUNGLE1BQU0saUJBQWlCLEdBQTRCO1FBQ2pELENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7UUFDdEUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztRQUM5QyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO0tBQzNDLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxHQUFHLEtBQUssY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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QUFJLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1lBQ3pDLEtBQUssRUFBRSxHQUFHLEdBQUcsV0FBVztTQUN6QixDQUFDLENBQUM7UUFFSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBd0I7UUFDekMsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNyQyxRQUFRLENBQUMsTUFBdUIsRUFBRSxJQUFZO2dCQUM1QyxJQUFJLE1BQU0sWUFBWSxXQUFXO29CQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBRXRCLElBQUksTUFBTSxZQUFZLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QyxPQUFPLE9BQU8sWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbEUsQ0FBQztnQkFFRCw4QkFBOEI7Z0JBQzlCLG9DQUFvQztnQkFDcEMsd0JBQXdCO2dCQUN4QixFQUFFO2dCQUNGLG9DQUFvQztnQkFDcEMsMENBQTBDO2dCQUMxQyxxRUFBcUU7Z0JBQ3JFLElBQUk7Z0JBRUosT0FBUSxNQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELFNBQVMsRUFBRSxVQUFTLE1BQXVCO2dCQUN6QyxPQUFPLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxlQUFlLEVBQUUsSUFBSTtZQUNyQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzLFxuICBERUZBVUxUX1BBVFRFUk5TLFxuICBQYXRoUHJveHksXG4gIFBhdGhQcm94eUVuZ2luZSxcbiAgVmFsaWRhdGlvbixcbiAgVmFsaWRhdGlvbktleXMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IEZpZWxkUHJvcGVydGllcywgSFRNTDVJbnB1dFR5cGVzLCBwYXJzZVZhbHVlQnlUeXBlIH0gZnJvbSAnQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTmd4UmVuZGVyaW5nRW5naW5lIH0gZnJvbSAnLi9OZ3hSZW5kZXJpbmdFbmdpbmUnO1xuXG5cbnR5cGUgQ29tcGFyaXNvblZhbGlkYXRpb25LZXkgPSB0eXBlb2YgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzW2tleW9mIHR5cGVvZiBDb21wYXJpc29uVmFsaWRhdGlvbktleXNdO1xuXG4vKipcbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29ycmVjdCB2YWxpZGF0b3Iga2V5IGFuZCBpdHMgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBpbnB1dCBrZXkgYW5kIHR5cGUuXG4gKlxuICogV2hlbiB0aGUgdmFsaWRhdGlvbiBrZXkgaXMgVFlQRSwgaXQncyBuZWNlc3NhcnkgdG8gcmVzb2x2ZSB0aGUgYWN0dWFsIHZhbGlkYXRvciBiYXNlZCBvbiB0aGVcbiAqIGZpZWxkJ3MgdHlwZSAoZS5nLiwgJ3Bhc3N3b3JkJywgJ2VtYWlsJywgJ3VybCcpIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyaWMgZ2V0VmFsaWRhdG9yKFwidHlwZVwiKSBsb2dpYy5cbiAqIFRoaXMgYWxsb3dzIGRpcmVjdGx5IGludm9raW5nIHNwZWNpZmljIHZhbGlkYXRvcnMgbGlrZSBnZXRWYWxpZGF0b3IoJ3Bhc3N3b3JkJyksIGVuc3VyaW5nIHRoZSBjb3JyZWN0XG4gKiBiZWhhdmlvciBmb3IgdHlwZS1iYXNlZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgdmFsaWRhdGlvbiBrZXkgKGUuZy4sICd0eXBlJywgJ3JlcXVpcmVkJywgZXRjLikuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdGhhdCBuZWVkcyBiZSBwcm92aWRlZCB0byB0aGUgdmFsaWRhdG9yLlxuICogQHBhcmFtIHR5cGUgLSBUaGUgZmllbGQncyBkZWNsYXJlZCB0eXBlLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc29sdmVkIHZhbGlkYXRvciBrZXkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHByb3BzLlxuICovXG5jb25zdCByZXNvbHZlVmFsaWRhdG9yS2V5UHJvcHMgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCB0eXBlOiBzdHJpbmcpOiB7XG4gIHZhbGlkYXRvcktleTogc3RyaW5nO1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59ID0+IHtcbiAgY29uc3QgcGF0dGVyblZhbGlkYXRvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFtWYWxpZGF0aW9uS2V5cy5QQVNTV09SRF06IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkVNQUlMXTogREVGQVVMVF9QQVRURVJOUy5FTUFJTCxcbiAgICBbVmFsaWRhdGlvbktleXMuVVJMXTogREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gIH07XG4gIGNvbnN0IGlzVHlwZUJhc2VkID0ga2V5ID09PSBWYWxpZGF0aW9uS2V5cy5UWVBFICYmIE9iamVjdC5rZXlzKHBhdHRlcm5WYWxpZGF0b3JzKS5pbmNsdWRlcyh0eXBlKTtcbiAgY29uc3QgdmFsaWRhdG9yS2V5ID0gaXNUeXBlQmFzZWQgPyB0eXBlIDoga2V5O1xuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLy8gW3ZhbGlkYXRvcktleV06ICghaXNUeXBlQmFzZWQgJiYga2V5ID09PSAndHlwZScpID8gcGFyc2VUeXBlKHR5cGUpIDogdmFsdWUsXG4gICAgW3ZhbGlkYXRvcktleV06ICghaXNUeXBlQmFzZWQgJiYgdmFsaWRhdG9yS2V5ID09PSBWYWxpZGF0aW9uS2V5cy5UWVBFKSA/IE5neFJlbmRlcmluZ0VuZ2luZS5nZXQoKS50cmFuc2xhdGUodmFsdWUgYXMgc3RyaW5nLCBmYWxzZSkgOiB2YWx1ZSxcbiAgICAvLyBFbWFpbCwgUGFzc3dvcmQsIGFuZCBVUkwgYXJlIHZhbGlkYXRlZCB1c2luZyB0aGUgXCJwYXR0ZXJuXCIga2V5XG4gICAgLi4uKGlzVHlwZUJhc2VkICYmIHsgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dIDogcGF0dGVyblZhbGlkYXRvcnNbdHlwZV0gfSksXG4gIH07XG5cbiAgcmV0dXJuIHsgdmFsaWRhdG9yS2V5LCBwcm9wcyB9O1xufTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBzcGF3bihmaWVsZFByb3BzOiBGaWVsZFByb3BlcnRpZXMsIGtleTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmICghVmFsaWRhdGlvbi5rZXlzKCkuaW5jbHVkZXMoa2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY3VzdG9tIHZhbGlkYXRpb24nKTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IGZpZWxkUHJvcHM7XG4gICAgICBjb25zdCB7IHZhbGlkYXRvcktleSwgcHJvcHMgfSA9IHJlc29sdmVWYWxpZGF0b3JLZXlQcm9wcyhrZXksIGZpZWxkUHJvcHNba2V5IGFzIGtleW9mIEZpZWxkUHJvcGVydGllc10sIHR5cGUpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gVmFsaWRhdGlvbi5nZXQodmFsaWRhdG9yS2V5KSBhcyBWYWxpZGF0b3I7XG5cbiAgICAgIC8vIHBhcnNlVmFsdWVCeVR5cGUgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBjb250cm9sLnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IHBhcnNlVmFsdWVCeVR5cGUodHlwZSwgdHlwZSA9PT0gSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YID8gbmFtZSA6IGNvbnRyb2wudmFsdWUsIGZpZWxkUHJvcHMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDcmVhdGUgYSBwcm94eSB0byBlbmFibGUgYWNjZXNzIHRvIHBhcmVudCBhbmQgY2hpbGQgdmFsdWVzXG4gICAgICBsZXQgcHJveHk6IFBhdGhQcm94eTx1bmtub3duPiA9IFZhbGlkYXRvckZhY3RvcnkuY3JlYXRlUHJveHkoe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cykuaW5jbHVkZXMoa2V5IGFzIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5KSkge1xuICAgICAgICBjb25zdCBwYXJlbnQ6IEZvcm1Hcm91cCA9IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogKGNvbnRyb2wgYXMgS2V5VmFsdWUpW0FuZ3VsYXJFbmdpbmVLZXlzLlBBUkVOVF07XG4gICAgICAgIHByb3h5ID0gVmFsaWRhdG9yRmFjdG9yeS5jcmVhdGVQcm94eShwYXJlbnQpIGFzIFBhdGhQcm94eTx1bmtub3duPjtcbiAgICAgIH1cblxuICAgICAgbGV0IGVycnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKCFwcm9wc1sndHlwZXMnXSAmJiAhcHJvcHNbJ2N1c3RvbVR5cGVzJ10pXG4gICAgICAgICAgcHJvcHNbJ3R5cGVzJ10gPSBwcm9wc1sndHlwZSddO1xuICAgICAgICBlcnJzID0gdmFsaWRhdG9yLmhhc0Vycm9ycyh2YWx1ZSwgcHJvcHMsIHByb3h5KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgZXJycyA9IGAke2tleX0gdmFsaWRhdG9yIGZhaWxlZCB0byB2YWxpZGF0ZTogJHtlfWA7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnJzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVycnMgPyB7IFt2YWxpZGF0b3JLZXldOiB0cnVlIH0gOiBudWxsO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdG9yRm4sICduYW1lJywge1xuICAgICAgdmFsdWU6IGAke2tleX1WYWxpZGF0b3JgLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBwcm94eSB3cmFwcGVyIGZvciBhbiBBbmd1bGFyIEFic3RyYWN0Q29udHJvbCB0byBhc3Npc3Qgd2l0aCBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYy5cbiAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBzdHJ1Y3R1cmVkIHByb3h5IG9iamVjdCB0aGF0IHNpbXVsYXRlcyBhIGhpZXJhcmNoaWNhbCB0cmVlIG9mIGZvcm0gdmFsdWVzLlxuICAgKiBFbmFibGVzIFZhbGlkYXRvcnMgaGFuZGxpbmcgbWV0aG9kIHRvIGFjY2VzcyBwYXJlbnQgYW5kIGNoaWxkIHByb3BlcnRpZXMgdXNpbmcgY29uc2lzdGVudCBkb3Qtbm90YXRpb24gaW4gQW5ndWxhciBmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgY29udHJvbCB0byB3cmFwIGluIGEgcHJveHkuXG4gICAqIEByZXR1cm5zIHtQYXRoUHJveHk8dW5rbm93bj59IEEgcHJveHkgb2JqZWN0IGV4cG9zaW5nIGZvcm0gdmFsdWVzIGFuZCBlbmFibGluZyByZWN1cnNpdmUgcGFyZW50IGFjY2Vzcy5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQcm94eShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQYXRoUHJveHk8dW5rbm93bj4ge1xuICAgIHJldHVybiBQYXRoUHJveHlFbmdpbmUuY3JlYXRlKGNvbnRyb2wsIHtcbiAgICAgIGdldFZhbHVlKHRhcmdldDogQWJzdHJhY3RDb250cm9sLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAgIHJldHVybiB0YXJnZXQudmFsdWU7XG5cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0YXJnZXQuY29udHJvbHNbcHJvcF07XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBjb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc3QgdmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgIC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAvLyAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgIC8vICAgY29uc3QgY29udHJvbCA9IHZhbHVlLmNvbnRyb2xzW3Byb3BdO1xuICAgICAgICAvLyAgIHJldHVybiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgPyBjb250cm9sLnZhbHVlIDogY29udHJvbDtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiAodGFyZ2V0IGFzIEtleVZhbHVlKT8uW3Byb3BdO1xuICAgICAgfSxcbiAgICAgIGdldFBhcmVudDogZnVuY3Rpb24odGFyZ2V0OiBBYnN0cmFjdENvbnRyb2wpICB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ/LlsnX3BhcmVudCddO1xuICAgICAgfSxcbiAgICAgIGlnbm9yZVVuZGVmaW5lZDogdHJ1ZSxcbiAgICAgIGlnbm9yZU51bGw6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|