@agnos-ui/angular-headless 0.0.1-alpha.1 → 0.0.1-alpha.4

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,90 +1,7 @@
1
- import { createWidgetsConfig } from '@agnos-ui/core';
2
- import { computed, readable, writable } from '@amadeus-it-group/tansu';
3
- import { InjectionToken, Injector, Optional, SkipSelf, inject, runInInjectionContext } from '@angular/core';
4
- export class ComponentTemplate {
5
- constructor(component, templateProp) {
6
- this.component = component;
7
- this.templateProp = templateProp;
8
- }
9
- }
10
- /**
11
- * Dependency Injection token which can be used to provide or inject the widgets default configuration store.
12
- */
13
- export const widgetsConfigInjectionToken = new InjectionToken('widgetsConfig');
14
- /**
15
- * Creates a provider of widgets default configuration that inherits from any widgets default configuration already defined at an upper level
16
- * in the Angular dependency injection system. It contains its own set of widgets configuration properties that override the same properties form
17
- * the parent configuration.
18
- *
19
- * @remarks
20
- * The configuration is computed from the parent configuration in two steps:
21
- * - first step: the parent configuration is transformed by the adaptParentConfig function (if specified).
22
- * If adaptParentConfig is not specified, this step is skipped.
23
- * - second step: the configuration from step 1 is merged (2-levels deep) with the own$ store. The own$ store initially contains
24
- * an empty object (i.e. no property from the parent is overridden). It can be changed by calling set on the store returned by
25
- * {@link injectWidgetsConfig}.
26
- *
27
- * @param adaptParentConfig - optional function that receives a 2-levels copy of the widgets default configuration
28
- * defined at an upper level in the Angular dependency injection system (or an empty object if there is none) and returns the widgets
29
- * default configuration to be used.
30
- * It is called only if the configuration is needed, and was not yet computed for the current value of the parent configuration.
31
- * It is called in a tansu reactive context, so it can use any tansu store and will be called again if those stores change.
32
- * It is also called in an Angular injection context, so it can call the Angular inject function to get and use dependencies from the
33
- * Angular dependency injection system.
34
-
35
- * @returns DI provider to be included a list of `providers` (for example at a component level or
36
- * any other level of the Angular dependency injection system)
37
- *
38
- * @example
39
- * ```typescript
40
- * @Component({
41
- * // ...
42
- * providers: [
43
- * provideWidgetsConfig((parentConfig) => {
44
- * // first step configuration: transforms the parent configuration
45
- * parentConfig.rating = parentConfig.rating ?? {};
46
- * parentConfig.rating.className = `${parentConfig.rating.className ?? ''} my-rating-extra-class`
47
- * return parentConfig;
48
- * })
49
- * ]
50
- * })
51
- * class MyComponent {
52
- * widgetsConfig = injectWidgetsConfig();
53
- * constructor() {
54
- * this.widgetsConfig.set({
55
- * // second step configuration: overrides the parent configuration
56
- * rating: {
57
- * slotStar: MyCustomSlotStar
58
- * }
59
- * });
60
- * }
61
- * // ...
62
- * }
63
- * ```
64
- */
65
- export const provideWidgetsConfig = (adaptParentConfig) => ({
66
- provide: widgetsConfigInjectionToken,
67
- useFactory: (parent) => {
68
- if (adaptParentConfig) {
69
- const injector = inject(Injector);
70
- const originalAdaptParentConfig = adaptParentConfig;
71
- adaptParentConfig = (value) => runInInjectionContext(injector, () => originalAdaptParentConfig(value));
72
- }
73
- return createWidgetsConfig(parent ?? undefined, adaptParentConfig);
74
- },
75
- deps: [[new SkipSelf(), new Optional(), widgetsConfigInjectionToken]],
76
- });
77
- /**
78
- * Returns the widgets default configuration store that was provided in the current injection context.
79
- * Throws if the no widgets default configuration store was provided.
80
- *
81
- * @remarks
82
- * This function must be called from an injection context, such as a constructor, a factory function, a field initializer or
83
- * a function used with {@link https://angular.io/api/core/runInInjectionContext | runInInjectionContext}.
84
- *
85
- * @returns the widgets default configuration store.
86
- */
87
- export const injectWidgetsConfig = () => inject(widgetsConfigInjectionToken);
1
+ import { toReadableStore } from '@agnos-ui/core';
2
+ import { computed, writable } from '@amadeus-it-group/tansu';
3
+ import { DestroyRef, Injectable, NgZone, inject, signal } from '@angular/core';
4
+ import * as i0 from "@angular/core";
88
5
  const createPatchSlots = (set) => {
89
6
  let lastValue = {};
90
7
  return (object) => {
@@ -106,12 +23,95 @@ const createPatchSlots = (set) => {
106
23
  }
107
24
  };
108
25
  };
109
- export const callWidgetFactory = (factory, widgetName, defaultConfig = {}) => {
110
- const defaultConfigStore = typeof defaultConfig !== 'function' ? readable(defaultConfig) : defaultConfig;
26
+ const noop = () => { };
27
+ const identity = (a) => a;
28
+ const createObjectWrapper = (wrap) => (object) => {
29
+ if (!object || typeof object !== 'object') {
30
+ return object;
31
+ }
32
+ const res = {};
33
+ for (const key of Object.keys(object)) {
34
+ res[key] = wrap(object[key]);
35
+ }
36
+ return res;
37
+ };
38
+ const createReturnValueWrapper = (wrapReturnValue, wrapResult) => (fn) => wrapResult(typeof fn === 'function' ? ((...args) => wrapReturnValue(fn(...args))) : fn);
39
+ class ZoneWrapper {
40
+ constructor() {
41
+ this.#zone = inject(NgZone);
42
+ this.#hasZone = this.#zone.run(() => NgZone.isInAngularZone()); // check if zone is enabled (can be NoopZone, cf https://angular.io/guide/zone#noopzone)
43
+ this.#runNeeded = false;
44
+ this.#runPlanned = false;
45
+ this.planNgZoneRun = this.#hasZone
46
+ ? () => {
47
+ if (this.#zone.isStable) {
48
+ this.#runNeeded = true;
49
+ if (!this.#runPlanned) {
50
+ this.#runPlanned = true;
51
+ (async () => {
52
+ await 0;
53
+ this.#runPlanned = false;
54
+ if (this.#runNeeded) {
55
+ this.ngZoneRun(noop);
56
+ }
57
+ })();
58
+ }
59
+ }
60
+ }
61
+ : noop;
62
+ this.insideNgZone = this.#hasZone
63
+ ? (fn) => (typeof fn === 'function' ? ((...args) => this.ngZoneRun(() => fn(...args))) : fn)
64
+ : identity;
65
+ this.insideNgZoneWrapFunctionsObject = createObjectWrapper(this.insideNgZone);
66
+ this.outsideNgZone = this.#hasZone
67
+ ? (fn) => (typeof fn === 'function' ? ((...args) => this.#zone.runOutsideAngular(() => fn(...args))) : fn)
68
+ : identity;
69
+ this.outsideNgZoneWrapFunctionsObject = createObjectWrapper(this.outsideNgZone);
70
+ this.outsideNgZoneWrapDirective = createReturnValueWrapper(this.outsideNgZoneWrapFunctionsObject, this.outsideNgZone);
71
+ this.outsideNgZoneWrapDirectivesObject = createObjectWrapper(this.outsideNgZoneWrapDirective);
72
+ }
73
+ #zone;
74
+ #hasZone; // check if zone is enabled (can be NoopZone, cf https://angular.io/guide/zone#noopzone)
75
+ #runNeeded;
76
+ #runPlanned;
77
+ ngZoneRun(fn) {
78
+ this.#runNeeded = false;
79
+ return this.#zone.run(fn);
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZoneWrapper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
82
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZoneWrapper, providedIn: 'root' }); }
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZoneWrapper, decorators: [{
85
+ type: Injectable,
86
+ args: [{
87
+ providedIn: 'root',
88
+ }]
89
+ }] });
90
+ export const toAngularSignal = (tansuSignal) => {
91
+ const zoneWrapper = inject(ZoneWrapper);
92
+ const res = signal(undefined);
93
+ const subscription = zoneWrapper.outsideNgZone(tansuSignal.subscribe)((value) => {
94
+ res.set(value);
95
+ zoneWrapper.planNgZoneRun();
96
+ });
97
+ inject(DestroyRef).onDestroy(zoneWrapper.outsideNgZone(subscription));
98
+ return res;
99
+ };
100
+ export const callWidgetFactoryWithConfig = ({ factory, defaultConfig, widgetConfig, events, }) => {
101
+ const zoneWrapper = inject(ZoneWrapper);
102
+ factory = zoneWrapper.outsideNgZone(factory);
103
+ const defaultConfig$ = toReadableStore(defaultConfig);
111
104
  const slots$ = writable({});
112
- const widgetsConfig = widgetName ? inject(widgetsConfigInjectionToken, { optional: true }) : undefined;
105
+ events = zoneWrapper.insideNgZoneWrapFunctionsObject(events);
106
+ const widget = factory({
107
+ config: computed(() => ({ ...defaultConfig$(), ...widgetConfig?.(), ...slots$(), ...events })),
108
+ });
113
109
  return {
114
- ...factory(computed(() => ({ ...defaultConfigStore(), ...(widgetName ? widgetsConfig?.()[widgetName] : undefined), ...slots$() }))),
110
+ ...widget,
111
+ patch: zoneWrapper.outsideNgZone(widget.patch),
112
+ directives: zoneWrapper.outsideNgZoneWrapDirectivesObject(widget.directives),
113
+ actions: zoneWrapper.outsideNgZoneWrapFunctionsObject(widget.actions),
114
+ api: zoneWrapper.outsideNgZoneWrapFunctionsObject(widget.api),
115
115
  patchSlots: createPatchSlots(slots$.set),
116
116
  };
117
117
  };
@@ -124,4 +124,4 @@ export function patchSimpleChanges(patchFn, changes) {
124
124
  }
125
125
  patchFn(obj);
126
126
  }
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9oZWFkbGVzcy9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXJFLE9BQU8sRUFBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFHLE1BQU0sT0FBTyxpQkFBaUI7SUFDN0IsWUFBNEIsU0FBa0IsRUFBa0IsWUFBZTtRQUFuRCxjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQWtCLGlCQUFZLEdBQVosWUFBWSxDQUFHO0lBQUcsQ0FBQztDQUNuRjtBQTRCRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLElBQUksY0FBYyxDQUFvQyxlQUFlLENBQUMsQ0FBQztBQUVsSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUNuQyxpQkFBNEYsRUFDMUUsRUFBRSxDQUFDLENBQUM7SUFDdEIsT0FBTyxFQUFFLDJCQUEyQjtJQUNwQyxVQUFVLEVBQUUsQ0FBQyxNQUFnRCxFQUFFLEVBQUU7UUFDaEUsSUFBSSxpQkFBaUIsRUFBRTtZQUN0QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsTUFBTSx5QkFBeUIsR0FBRyxpQkFBaUIsQ0FBQztZQUNwRCxpQkFBaUIsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFD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bXBvcnQgdHlwZSB7XG5cdFNsb3RDb250ZW50IGFzIENvcmVTbG90Q29udGVudCxcblx0V2lkZ2V0c0NvbmZpZyBhcyBDb3JlV2lkZ2V0c0NvbmZpZyxcblx0UGFydGlhbDJMZXZlbHMsXG5cdFdpZGdldCxcblx0V2lkZ2V0RmFjdG9yeSxcblx0V2lkZ2V0UHJvcHMsXG5cdFdpZGdldFNsb3RDb250ZXh0LFxuXHRXaWRnZXRTdGF0ZSxcblx0V2lkZ2V0c0NvbmZpZ1N0b3JlLFxufSBmcm9tICdAYWdub3MtdWkvY29yZSc7XG5pbXBvcnQge2NyZWF0ZVdpZGdldHNDb25maWd9IGZyb20gJ0BhZ25vcy11aS9jb3JlJztcbmltcG9ydCB0eXBlIHtSZWFkYWJsZVNpZ25hbCwgU3Vic2NyaWJhYmxlU3RvcmV9IGZyb20gJ0BhbWFkZXVzLWl0LWdyb3VwL3RhbnN1JztcbmltcG9ydCB7Y29tcHV0ZWQsIHJlYWRhYmxlLCB3cml0YWJsZX0gZnJvbSAnQGFtYWRldXMtaXQtZ3JvdXAvdGFuc3UnO1xuaW1wb3J0IHR5cGUge0ZhY3RvcnlQcm92aWRlciwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3IsIE9wdGlvbmFsLCBTa2lwU2VsZiwgaW5qZWN0LCBydW5JbkluamVjdGlvbkNvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50VGVtcGxhdGU8UHJvcHMsIEsgZXh0ZW5kcyBzdHJpbmcsIFQgZXh0ZW5kcyB7W2tleSBpbiBLXTogVGVtcGxhdGVSZWY8UHJvcHM+fT4ge1xuXHRjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50OiBUeXBlPFQ+LCBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVQcm9wOiBLKSB7fVxufVxuXG5leHBvcnQgdHlwZSBTbG90Q29udGVudDxQcm9wcyBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4gPVxuXHR8IENvcmVTbG90Q29udGVudDxQcm9wcz5cblx0fCBUZW1wbGF0ZVJlZjxQcm9wcz5cblx0fCBUeXBlPHVua25vd24+XG5cdHwgQ29tcG9uZW50VGVtcGxhdGU8UHJvcHMsIGFueSwgYW55PjtcblxuZXhwb3J0IHR5cGUgQWRhcHRTbG90Q29udGVudFByb3BzPFByb3BzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4gPSBQcm9wcyBleHRlbmRzIFdpZGdldFNsb3RDb250ZXh0PGluZmVyIFU+XG5cdD8gV2lkZ2V0U2xvdENvbnRleHQ8QWRhcHRXaWRnZXRTbG90czxVPj4gJiBBZGFwdFByb3BzU2xvdHM8T21pdDxQcm9wcywga2V5b2YgV2lkZ2V0U2xvdENvbnRleHQ8YW55Pj4+XG5cdDogQWRhcHRQcm9wc1Nsb3RzPFByb3BzPjtcblxuZXhwb3J0IHR5cGUgQWRhcHRQcm9wc1Nsb3RzPFByb3BzPiA9IE9taXQ8UHJvcHMsIGBzbG90JHtzdHJpbmd9YD4gJiB7XG5cdFtLIGluIGtleW9mIFByb3BzICYgYHNsb3Qke3N0cmluZ31gXTogUHJvcHNbS10gZXh0ZW5kcyBDb3JlU2xvdENvbnRlbnQ8aW5mZXIgVT4gPyBTbG90Q29udGVudDxBZGFwdFNsb3RDb250ZW50UHJvcHM8VT4+IDogUHJvcHNbS107XG59O1xuXG5leHBvcnQgdHlwZSBBZGFwdFdpZGdldFNsb3RzPFcgZXh0ZW5kcyBXaWRnZXQ+ID0gV2lkZ2V0PFxuXHRBZGFwdFByb3BzU2xvdHM8V2lkZ2V0UHJvcHM8Vz4+LFxuXHRBZGFwdFByb3BzU2xvdHM8V2lkZ2V0U3RhdGU8Vz4+LFxuXHRXWydhcGknXSxcblx0V1snYWN0aW9ucyddLFxuXHRXWydkaXJlY3RpdmVzJ11cbj47XG5cbmV4cG9ydCB0eXBlIFdpZGdldHNDb25maWcgPSB7XG5cdFtXaWRnZXROYW1lIGluIGtleW9mIENvcmVXaWRnZXRzQ29uZmlnXTogQWRhcHRQcm9wc1Nsb3RzPENvcmVXaWRnZXRzQ29uZmlnW1dpZGdldE5hbWVdPjtcbn07XG5cbi8qKlxuICogRGVwZW5kZW5jeSBJbmplY3Rpb24gdG9rZW4gd2hpY2ggY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBvciBpbmplY3QgdGhlIHdpZGdldHMgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0b3JlLlxuICovXG5leHBvcnQgY29uc3Qgd2lkZ2V0c0NvbmZpZ0luamVjdGlvblRva2VuID0gbmV3IEluamVjdGlvblRva2VuPFdpZGdldHNDb25maWdTdG9yZTxXaWRnZXRzQ29uZmlnPj4oJ3dpZGdldHNDb25maWcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcHJvdmlkZXIgb2Ygd2lkZ2V0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdGhhdCBpbmhlcml0cyBmcm9tIGFueSB3aWRnZXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiBhbHJlYWR5IGRlZmluZWQgYXQgYW4gdXBwZXIgbGV2ZWxcbiAqIGluIHRoZSBBbmd1bGFyIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbS4gSXQgY29udGFpbnMgaXRzIG93biBzZXQgb2Ygd2lkZ2V0cyBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBvdmVycmlkZSB0aGUgc2FtZSBwcm9wZXJ0aWVzIGZvcm1cbiAqIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcmVtYXJrc1xuICogVGhlIGNvbmZpZ3VyYXRpb24gaXMgY29tcHV0ZWQgZnJvbSB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gaW4gdHdvIHN0ZXBzOlxuICogLSBmaXJzdCBzdGVwOiB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gaXMgdHJhbnNmb3JtZWQgYnkgdGhlIGFkYXB0UGFyZW50Q29uZmlnIGZ1bmN0aW9uIChpZiBzcGVjaWZpZWQpLlxuICogSWYgYWRhcHRQYXJlbnRDb25maWcgaXMgbm90IHNwZWNpZmllZCwgdGhpcyBzdGVwIGlzIHNraXBwZWQuXG4gKiAtIHNlY29uZCBzdGVwOiB0aGUgY29uZmlndXJhdGlvbiBmcm9tIHN0ZXAgMSBpcyBtZXJnZWQgKDItbGV2ZWxzIGRlZXApIHdpdGggdGhlIG93biQgc3RvcmUuIFRoZSBvd24kIHN0b3JlIGluaXRpYWxseSBjb250YWluc1xuICogYW4gZW1wdHkgb2JqZWN0IChpLmUuIG5vIHByb3BlcnR5IGZyb20gdGhlIHBhcmVudCBpcyBvdmVycmlkZGVuKS4gSXQgY2FuIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBzZXQgb24gdGhlIHN0b3JlIHJldHVybmVkIGJ5XG4gKiB7QGxpbmsgaW5qZWN0V2lkZ2V0c0NvbmZpZ30uXG4gKlxuICogQHBhcmFtIGFkYXB0UGFyZW50Q29uZmlnIC0gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIDItbGV2ZWxzIGNvcHkgb2YgdGhlIHdpZGdldHMgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gKiBkZWZpbmVkIGF0IGFuIHVwcGVyIGxldmVsIGluIHRoZSBBbmd1bGFyIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbSAob3IgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vbmUpIGFuZCByZXR1cm5zIHRoZSB3aWRnZXRzXG4gKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdG8gYmUgdXNlZC5cbiAqIEl0IGlzIGNhbGxlZCBvbmx5IGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIG5lZWRlZCwgYW5kIHdhcyBub3QgeWV0IGNvbXB1dGVkIGZvciB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24uXG4gKiBJdCBpcyBjYWxsZWQgaW4gYSB0YW5zdSByZWFjdGl2ZSBjb250ZXh0LCBzbyBpdCBjYW4gdXNlIGFueSB0YW5zdSBzdG9yZSBhbmQgd2lsbCBiZSBjYWxsZWQgYWdhaW4gaWYgdGhvc2Ugc3RvcmVzIGNoYW5nZS5cbiAqIEl0IGlzIGFsc28gY2FsbGVkIGluIGFuIEFuZ3VsYXIgaW5qZWN0aW9uIGNvbnRleHQsIHNvIGl0IGNhbiBjYWxsIHRoZSBBbmd1bGFyIGluamVjdCBmdW5jdGlvbiB0byBnZXQgYW5kIHVzZSBkZXBlbmRlbmNpZXMgZnJvbSB0aGVcbiAqIEFuZ3VsYXIgZGVwZW5kZW5jeSBpbmplY3Rpb24gc3lzdGVtLlxuXG4gKiBAcmV0dXJucyBESSBwcm92aWRlciB0byBiZSBpbmNsdWRlZCBhIGxpc3Qgb2YgYHByb3ZpZGVyc2AgKGZvciBleGFtcGxlIGF0IGEgY29tcG9uZW50IGxldmVsIG9yXG4gKiBhbnkgb3RoZXIgbGV2ZWwgb2YgdGhlIEFuZ3VsYXIgZGVwZW5kZW5jeSBpbmplY3Rpb24gc3lzdGVtKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHtcbiAqICAgLy8gLi4uXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVXaWRnZXRzQ29uZmlnKChwYXJlbnRDb25maWcpID0+IHtcbiAqICAgICAgIC8vIGZpcnN0IHN0ZXAgY29uZmlndXJhdGlvbjogdHJhbnNmb3JtcyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb25cbiAqICAgICAgIHBhcmVudENvbmZpZy5yYXRpbmcgPSBwYXJlbnRDb25maWcucmF0aW5nID8/IHt9O1xuICogICAgICAgcGFyZW50Q29uZmlnLnJhdGluZy5jbGFzc05hbWUgPSBgJHtwYXJlbnRDb25maWcucmF0aW5nLmNsYXNzTmFtZSA/PyAnJ30gbXktcmF0aW5nLWV4dHJhLWNsYXNzYFxuICogICAgICAgcmV0dXJuIHBhcmVudENvbmZpZztcbiAqICAgICB9KVxuICogICBdXG4gKiB9KVxuICogY2xhc3MgTXlDb21wb25lbnQge1xuICogICB3aWRnZXRzQ29uZmlnID0gaW5qZWN0V2lkZ2V0c0NvbmZpZygpO1xuICogICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICB0aGlzLndpZGdldHNDb25maWcuc2V0KHtcbiAqICAgICAgIC8vIHNlY29uZCBzdGVwIGNvbmZpZ3VyYXRpb246IG92ZXJyaWRlcyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb25cbiAqICAgICAgIHJhdGluZzoge1xuICogICAgICAgICBzbG90U3RhcjogTXlDdXN0b21TbG90U3RhclxuICogICAgICAgfVxuICogICAgIH0pO1xuICogICB9XG4gKiAgIC8vIC4uLlxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlV2lkZ2V0c0NvbmZpZyA9IChcblx0YWRhcHRQYXJlbnRDb25maWc/OiAoY29uZmlnOiBQYXJ0aWFsMkxldmVsczxXaWRnZXRzQ29uZmlnPikgPT4gUGFydGlhbDJMZXZlbHM8V2lkZ2V0c0NvbmZpZz5cbik6IEZhY3RvcnlQcm92aWRlciA9PiAoe1xuXHRwcm92aWRlOiB3aWRnZXRzQ29uZmlnSW5qZWN0aW9uVG9rZW4sXG5cdHVzZUZhY3Rvcnk6IChwYXJlbnQ6IFdpZGdldHNDb25maWdTdG9yZTxXaWRnZXRzQ29uZmlnPiB8IG51bGwpID0+IHtcblx0XHRpZiAoYWRhcHRQYXJlbnRDb25maWcpIHtcblx0XHRcdGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0XHRcdGNvbnN0IG9yaWdpbmFsQWRhcHRQYXJlbnRDb25maWcgPSBhZGFwdFBhcmVudENvbmZpZztcblx0XHRcdGFkYXB0UGFyZW50Q29uZmlnID0gKHZhbHVlKSA9PiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IG9yaWdpbmFsQWRhcHRQYXJlbnRDb25maWcodmFsdWUpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNyZWF0ZVdpZGdldHNDb25maWcocGFyZW50ID8/IHVuZGVmaW5lZCwgYWRhcHRQYXJlbnRDb25maWcpO1xuXHR9LFxuXHRkZXBzOiBbW25ldyBTa2lwU2VsZigpLCBuZXcgT3B0aW9uYWwoKSwgd2lkZ2V0c0NvbmZpZ0luamVjdGlvblRva2VuXV0sXG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB3aWRnZXRzIGRlZmF1bHQgY29uZmlndXJhdGlvbiBzdG9yZSB0aGF0IHdhcyBwcm92aWRlZCBpbiB0aGUgY3VycmVudCBpbmplY3Rpb24gY29udGV4dC5cbiAqIFRocm93cyBpZiB0aGUgbm8gd2lkZ2V0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3RvcmUgd2FzIHByb3ZpZGVkLlxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZyb20gYW4gaW5qZWN0aW9uIGNvbnRleHQsIHN1Y2ggYXMgYSBjb25zdHJ1Y3RvciwgYSBmYWN0b3J5IGZ1bmN0aW9uLCBhIGZpZWxkIGluaXRpYWxpemVyIG9yXG4gKiBhIGZ1bmN0aW9uIHVzZWQgd2l0aCB7QGxpbmsgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9jb3JlL3J1bkluSW5qZWN0aW9uQ29udGV4dCB8IHJ1bkluSW5qZWN0aW9uQ29udGV4dH0uXG4gKlxuICogQHJldHVybnMgdGhlIHdpZGdldHMgZGVmYXVsdCBjb25maWd1cmF0aW9uIHN0b3JlLlxuICovXG5leHBvcnQgY29uc3QgaW5qZWN0V2lkZ2V0c0NvbmZpZyA9ICgpID0+IGluamVjdCh3aWRnZXRzQ29uZmlnSW5qZWN0aW9uVG9rZW4pO1xuXG5jb25zdCBjcmVhdGVQYXRjaFNsb3RzID0gPFQgZXh0ZW5kcyBvYmplY3Q+KHNldDogKG9iamVjdDogUGFydGlhbDxUPikgPT4gdm9pZCkgPT4ge1xuXHRsZXQgbGFzdFZhbHVlOiBQYXJ0aWFsPFQ+ID0ge307XG5cdHJldHVybiAob2JqZWN0OiBUKSA9PiB7XG5cdFx0Y29uc3QgbmV3VmFsdWU6IFBhcnRpYWw8VD4gPSB7fTtcblx0XHRsZXQgaGFzQ2hhbmdlID0gZmFsc2U7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSBhcyAoc3RyaW5nICYga2V5b2YgVClbXSkge1xuXHRcdFx0Y29uc3Qgb2JqZWN0S2V5ID0gKG9iamVjdCBhcyBhbnkpW2tleV07XG5cdFx0XHRpZiAob2JqZWN0S2V5ICE9IG51bGwpIHtcblx0XHRcdFx0Ly8gb25seSB1c2UgZGVmaW5lZCBzbG90c1xuXHRcdFx0XHRuZXdWYWx1ZVtrZXldID0gb2JqZWN0S2V5O1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9iamVjdEtleSAhPSBsYXN0VmFsdWVba2V5XSkge1xuXHRcdFx0XHRoYXNDaGFuZ2UgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaGFzQ2hhbmdlKSB7XG5cdFx0XHRsYXN0VmFsdWUgPSBuZXdWYWx1ZTtcblx0XHRcdHNldChuZXdWYWx1ZSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aFBhdGNoU2xvdHM8VyBleHRlbmRzIFdpZGdldD4gPSBBZGFwdFdpZGdldFNsb3RzPFc+ICYge1xuXHRwYXRjaFNsb3RzKHNsb3RzOiB7XG5cdFx0W0sgaW4ga2V5b2YgV2lkZ2V0UHJvcHM8Vz4gJiBgc2xvdCR7c3RyaW5nfWBdOiBXaWRnZXRQcm9wczxXPltLXSBleHRlbmRzIENvcmVTbG90Q29udGVudDxpbmZlciBVPlxuXHRcdFx0PyBUZW1wbGF0ZVJlZjxBZGFwdFNsb3RDb250ZW50UHJvcHM8VT4+IHwgdW5kZWZpbmVkXG5cdFx0XHQ6IG5ldmVyO1xuXHR9KTogdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWxsV2lkZ2V0RmFjdG9yeSA9IDxXIGV4dGVuZHMgV2lkZ2V0Pihcblx0ZmFjdG9yeTogV2lkZ2V0RmFjdG9yeTxXPixcblx0d2lkZ2V0TmFtZToga2V5b2YgV2lkZ2V0c0NvbmZpZyB8IG51bGwsXG5cdGRlZmF1bHRDb25maWc6IFBhcnRpYWw8QWRhcHRQcm9wc1Nsb3RzPFdpZGdldFByb3BzPFc+Pj4gfCBSZWFkYWJsZVNpZ25hbDxQYXJ0aWFsPEFkYXB0UHJvcHNTbG90czxXaWRnZXRQcm9wczxXPj4+PiA9IHt9XG4pOiBXaXRoUGF0Y2hTbG90czxXPiA9PiB7XG5cdGNvbnN0IGRlZmF1bHRDb25maWdTdG9yZSA9IHR5cGVvZiBkZWZhdWx0Q29uZmlnICE9PSAnZnVuY3Rpb24nID8gcmVhZGFibGUoZGVmYXVsdENvbmZpZykgOiBkZWZhdWx0Q29uZmlnO1xuXHRjb25zdCBzbG90cyQgPSB3cml0YWJsZSh7fSk7XG5cdGNvbnN0IHdpZGdldHNDb25maWcgPSB3aWRnZXROYW1lID8gaW5qZWN0KHdpZGdldHNDb25maWdJbmplY3Rpb25Ub2tlbiwge29wdGlvbmFsOiB0cnVlfSkgOiB1bmRlZmluZWQ7XG5cdHJldHVybiB7XG5cdFx0Li4uKGZhY3RvcnkoXG5cdFx0XHRjb21wdXRlZCgoKSA9PiAoey4uLihkZWZhdWx0Q29uZmlnU3RvcmUoKSBhcyBhbnkpLCAuLi4od2lkZ2V0TmFtZSA/IHdpZGdldHNDb25maWc/LigpW3dpZGdldE5hbWVdIDogdW5kZWZpbmVkKSwgLi4uc2xvdHMkKCl9KSlcblx0XHQpIGFzIGFueSksXG5cdFx0cGF0Y2hTbG90czogY3JlYXRlUGF0Y2hTbG90cyhzbG90cyQuc2V0KSxcblx0fTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFNpbXBsZUNoYW5nZXMocGF0Y2hGbjogKG9iajogYW55KSA9PiB2b2lkLCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdGZvciAoY29uc3QgW2tleSwgc2ltcGxlQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyhjaGFuZ2VzKSkge1xuXHRcdGlmIChzaW1wbGVDaGFuZ2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b2JqW2tleV0gPSBzaW1wbGVDaGFuZ2UuY3VycmVudFZhbHVlO1xuXHRcdH1cblx0fVxuXHRwYXRjaEZuKG9iaik7XG59XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RTdG9yZVR5cGU8VD4gPSBUIGV4dGVuZHMgU3Vic2NyaWJhYmxlU3RvcmU8aW5mZXIgVT4gPyBVIDogbmV2ZXI7XG4iXX0=
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9oZWFkbGVzcy9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRTNELE9BQU8sRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUc3RSxNQUFNLGdCQUFnQixHQUFHLENBQW1CLEdBQWlDLEVBQUUsRUFBRTtJQUNoRixJQUFJLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFDL0IsT0FBTyxDQUFDLE1BQVMsRUFBRSxFQUFFO1FBQ3BCLE1BQU0sUUFBUSxHQUFlLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBeUIsRUFBRTtZQUM5RCxNQUFNLFNBQVMsR0FBSSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFO2dCQUN0Qix5QkFBeUI7Z0JBQ3pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDMUI7WUFDRCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDakI7U0FDRDtRQUNELElBQUksU0FBUyxFQUFFO1lBQ2QsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDZDtJQUNGLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFFLENB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Q0FBZ0MsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQzdELFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0tBQ3hDLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBMkIsRUFBRSxPQUFzQjtJQUNyRixNQUFNLEdBQUcsR0FBUSxFQUFFLENBQUM7SUFDcEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQy9CLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO1NBQ3JDO0tBQ0Q7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1dpZGdldCwgV2lkZ2V0RmFjdG9yeSwgV2lkZ2V0UHJvcHN9IGZyb20gJ0BhZ25vcy11aS9jb3JlJztcbmltcG9ydCB7dG9SZWFkYWJsZVN0b3JlfSBmcm9tICdAYWdub3MtdWkvY29yZSc7XG5pbXBvcnQgdHlwZSB7UmVhZGFibGVTaWduYWx9IGZyb20gJ0BhbWFkZXVzLWl0LWdyb3VwL3RhbnN1JztcbmltcG9ydCB7Y29tcHV0ZWQsIHdyaXRhYmxlfSBmcm9tICdAYW1hZGV1cy1pdC1ncm91cC90YW5zdSc7XG5pbXBvcnQgdHlwZSB7U2lnbmFsLCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Rlc3Ryb3lSZWYsIEluamVjdGFibGUsIE5nWm9uZSwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1Nsb3RDb250ZW50fSBmcm9tICcuL3Nsb3RUeXBlcyc7XG5cbmNvbnN0IGNyZWF0ZVBhdGNoU2xvdHMgPSA8VCBleHRlbmRzIG9iamVjdD4oc2V0OiAob2JqZWN0OiBQYXJ0aWFsPFQ+KSA9PiB2b2lkKSA9PiB7XG5cdGxldCBsYXN0VmFsdWU6IFBhcnRpYWw8VD4gPSB7fTtcblx0cmV0dXJuIChvYmplY3Q6IFQpID0+IHtcblx0XHRjb25zdCBuZXdWYWx1ZTogUGFydGlhbDxUPiA9IHt9O1xuXHRcdGxldCBoYXNDaGFuZ2UgPSBmYWxzZTtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpIGFzIChzdHJpbmcgJiBrZXlvZiBUKVtdKSB7XG5cdFx0XHRjb25zdCBvYmplY3RLZXkgPSAob2JqZWN0IGFzIGFueSlba2V5XTtcblx0XHRcdGlmIChvYmplY3RLZXkgIT0gbnVsbCkge1xuXHRcdFx0XHQvLyBvbmx5IHVzZSBkZWZpbmVkIHNsb3RzXG5cdFx0XHRcdG5ld1ZhbHVlW2tleV0gPSBvYmplY3RLZXk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob2JqZWN0S2V5ICE9IGxhc3RWYWx1ZVtrZXldKSB7XG5cdFx0XHRcdGhhc0NoYW5nZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChoYXNDaGFuZ2UpIHtcblx0XHRcdGxhc3RWYWx1ZSA9IG5ld1ZhbHVlO1xuXHRcdFx0c2V0KG5ld1ZhbHVlKTtcblx0XHR9XG5cdH07XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5jb25zdCBpZGVudGl0eSA9IDxUPihhOiBUKSA9PiBhO1xuXG50eXBlIFdyYXBwZXIgPSA8VD4oZm46IFQpID0+IFQ7XG5cbmNvbnN0IGNyZWF0ZU9iamVjdFdyYXBwZXIgPVxuXHQod3JhcDogV3JhcHBlcik6IFdyYXBwZXIgPT5cblx0KG9iamVjdCkgPT4ge1xuXHRcdGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG5cdFx0XHRyZXR1cm4gb2JqZWN0O1xuXHRcdH1cblx0XHRjb25zdCByZXMgPSB7fSBhcyBhbnk7XG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSkge1xuXHRcdFx0cmVzW2tleV0gPSB3cmFwKChvYmplY3QgYXMgYW55KVtrZXldKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlcztcblx0fTtcblxuY29uc3QgY3JlYXRlUmV0dXJuVmFsdWVXcmFwcGVyID1cblx0KHdyYXBSZXR1cm5WYWx1ZTogV3JhcHBlciwgd3JhcFJlc3VsdDogV3JhcHBlcik6IFdyYXBwZXIgPT5cblx0KGZuKSA9PlxuXHRcdHdyYXBSZXN1bHQodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gKCgoLi4uYXJnczogYW55W10pID0+IHdyYXBSZXR1cm5WYWx1ZShmbiguLi5hcmdzKSkpIGFzIGFueSkgOiBmbik7XG5cbkBJbmplY3RhYmxlKHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmNsYXNzIFpvbmVXcmFwcGVyIHtcblx0cmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKTtcblx0cmVhZG9ubHkgI2hhc1pvbmUgPSB0aGlzLiN6b25lLnJ1bigoKSA9PiBOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpOyAvLyBjaGVjayBpZiB6b25lIGlzIGVuYWJsZWQgKGNhbiBiZSBOb29wWm9uZSwgY2YgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3pvbmUjbm9vcHpvbmUpXG5cdCNydW5OZWVkZWQgPSBmYWxzZTtcblx0I3J1blBsYW5uZWQgPSBmYWxzZTtcblxuXHRwbGFuTmdab25lUnVuID0gdGhpcy4jaGFzWm9uZVxuXHRcdD8gKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy4jem9uZS5pc1N0YWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuI3J1bk5lZWRlZCA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLiNydW5QbGFubmVkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLiNydW5QbGFubmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdChhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IDA7XG5cdFx0XHRcdFx0XHRcdHRoaXMuI3J1blBsYW5uZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuI3J1bk5lZWRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMubmdab25lUnVuKG5vb3ApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdCAgfVxuXHRcdDogbm9vcDtcblxuXHRuZ1pvbmVSdW48VD4oZm46ICgpID0+IFQpOiBUIHtcblx0XHR0aGlzLiNydW5OZWVkZWQgPSBmYWxzZTtcblx0XHRyZXR1cm4gdGhpcy4jem9uZS5ydW4oZm4pO1xuXHR9XG5cblx0aW5zaWRlTmdab25lOiBXcmFwcGVyID0gdGhpcy4jaGFzWm9uZVxuXHRcdD8gKGZuKSA9PiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gKCgoLi4uYXJnczogYW55W10pID0+IHRoaXMubmdab25lUnVuKCgpID0+IGZuKC4uLmFyZ3MpKSkgYXMgYW55KSA6IGZuKVxuXHRcdDogaWRlbnRpdHk7XG5cdGluc2lkZU5nWm9uZVdyYXBGdW5jdGlvbnNPYmplY3QgPSBjcmVhdGVPYmplY3RXcmFwcGVyKHRoaXMuaW5zaWRlTmdab25lKTtcblxuXHRvdXRzaWRlTmdab25lOiBXcmFwcGVyID0gdGhpcy4jaGFzWm9uZVxuXHRcdD8gKGZuKSA9PiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gKCgoLi4uYXJnczogYW55W10pID0+IHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZm4oLi4uYXJncykpKSBhcyBhbnkpIDogZm4pXG5cdFx0OiBpZGVudGl0eTtcblxuXHRvdXRzaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdCA9IGNyZWF0ZU9iamVjdFdyYXBwZXIodGhpcy5vdXRzaWRlTmdab25lKTtcblx0b3V0c2lkZU5nWm9uZVdyYXBEaXJlY3RpdmUgPSBjcmVhdGVSZXR1cm5WYWx1ZVdyYXBwZXIodGhpcy5vdXRzaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdCwgdGhpcy5vdXRzaWRlTmdab25lKTtcblx0b3V0c2lkZU5nWm9uZVdyYXBEaXJlY3RpdmVzT2JqZWN0ID0gY3JlYXRlT2JqZWN0V3JhcHBlcih0aGlzLm91dHNpZGVOZ1pvbmVXcmFwRGlyZWN0aXZlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRvQW5ndWxhclNpZ25hbCA9IDxUPih0YW5zdVNpZ25hbDogUmVhZGFibGVTaWduYWw8VD4pOiBTaWduYWw8VD4gPT4ge1xuXHRjb25zdCB6b25lV3JhcHBlciA9IGluamVjdChab25lV3JhcHBlcik7XG5cdGNvbnN0IHJlcyA9IHNpZ25hbCh1bmRlZmluZWQgYXMgYW55IGFzIFQpO1xuXHRjb25zdCBzdWJzY3JpcHRpb24gPSB6b25lV3JhcHBlci5vdXRzaWRlTmdab25lKHRhbnN1U2lnbmFsLnN1YnNjcmliZSkoKHZhbHVlKSA9PiB7XG5cdFx0cmVzLnNldCh2YWx1ZSk7XG5cdFx0em9uZVdyYXBwZXIucGxhbk5nWm9uZVJ1bigpO1xuXHR9KTtcblx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSh6b25lV3JhcHBlci5vdXRzaWRlTmdab25lKHN1YnNjcmlwdGlvbikpO1xuXHRyZXR1cm4gcmVzO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aFBhdGNoU2xvdHM8VyBleHRlbmRzIFdpZGdldD4gPSBXICYge1xuXHRwYXRjaFNsb3RzKHNsb3RzOiB7XG5cdFx0W0sgaW4ga2V5b2YgV2lkZ2V0UHJvcHM8Vz4gJiBgc2xvdCR7c3RyaW5nfWBdOiBXaWRnZXRQcm9wczxXPltLXSBleHRlbmRzIFNsb3RDb250ZW50PGluZmVyIFU+ID8gVGVtcGxhdGVSZWY8VT4gfCB1bmRlZmluZWQgOiBuZXZlcjtcblx0fSk6IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgY2FsbFdpZGdldEZhY3RvcnlXaXRoQ29uZmlnID0gPFcgZXh0ZW5kcyBXaWRnZXQ+KHtcblx0ZmFjdG9yeSxcblx0ZGVmYXVsdENvbmZpZyxcblx0d2lkZ2V0Q29uZmlnLFxuXHRldmVudHMsXG59OiB7XG5cdGZhY3Rvcnk6IFdpZGdldEZhY3Rvcnk8Vz47XG5cdGRlZmF1bHRDb25maWc/OiBQYXJ0aWFsPFdpZGdldFByb3BzPFc+PiB8IFJlYWRhYmxlU2lnbmFsPFBhcnRpYWw8V2lkZ2V0UHJvcHM8Vz4+IHwgdW5kZWZpbmVkPjtcblx0d2lkZ2V0Q29uZmlnPzogbnVsbCB8IHVuZGVmaW5lZCB8IFJlYWRhYmxlU2lnbmFsPFBhcnRpYWw8V2lkZ2V0UHJvcHM8Vz4+IHwgdW5kZWZpbmVkPjtcblx0ZXZlbnRzOiBQaWNrPFdpZGdldFByb3BzPFc+LCBrZXlvZiBXaWRnZXRQcm9wczxXPiAmIGBvbiR7c3RyaW5nfWA+O1xufSk6IFdpdGhQYXRjaFNsb3RzPFc+ID0+IHtcblx0Y29uc3Qgem9uZVdyYXBwZXIgPSBpbmplY3QoWm9uZVdyYXBwZXIpO1xuXHRmYWN0b3J5ID0gem9uZVdyYXBwZXIub3V0c2lkZU5nWm9uZShmYWN0b3J5KTtcblx0Y29uc3QgZGVmYXVsdENvbmZpZyQgPSB0b1JlYWRhYmxlU3RvcmUoZGVmYXVsdENvbmZpZyk7XG5cdGNvbnN0IHNsb3RzJCA9IHdyaXRhYmxlKHt9KTtcblx0ZXZlbnRzID0gem9uZVdyYXBwZXIuaW5zaWRlTmdab25lV3JhcEZ1bmN0aW9uc09iamVjdChldmVudHMpO1xuXHRjb25zdCB3aWRnZXQgPSBmYWN0b3J5KHtcblx0XHRjb25maWc6IGNvbXB1dGVkKCgpID0+ICh7Li4uZGVmYXVsdENvbmZpZyQoKSwgLi4ud2lkZ2V0Q29uZmlnPy4oKSwgLi4uc2xvdHMkKCksIC4uLihldmVudHMgYXMgUGFydGlhbDxXaWRnZXRQcm9wczxXPj4pfSkpLFxuXHR9KTtcblx0cmV0dXJuIHtcblx0XHQuLi53aWRnZXQsXG5cdFx0cGF0Y2g6IHpvbmVXcmFwcGVyLm91dHNpZGVOZ1pvbmUod2lkZ2V0LnBhdGNoKSxcblx0XHRkaXJlY3RpdmVzOiB6b25lV3JhcHBlci5vdXRzaWRlTmdab25lV3JhcERpcmVjdGl2ZXNPYmplY3Qod2lkZ2V0LmRpcmVjdGl2ZXMpLFxuXHRcdGFjdGlvbnM6IHpvbmVXcmFwcGVyLm91dHNpZGVOZ1pvbmVXcmFwRnVuY3Rpb25zT2JqZWN0KHdpZGdldC5hY3Rpb25zKSxcblx0XHRhcGk6IHpvbmVXcmFwcGVyLm91dHNpZGVOZ1pvbmVXcmFwRnVuY3Rpb25zT2JqZWN0KHdpZGdldC5hcGkpLFxuXHRcdHBhdGNoU2xvdHM6IGNyZWF0ZVBhdGNoU2xvdHMoc2xvdHMkLnNldCksXG5cdH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hTaW1wbGVDaGFuZ2VzKHBhdGNoRm46IChvYmo6IGFueSkgPT4gdm9pZCwgY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRmb3IgKGNvbnN0IFtrZXksIHNpbXBsZUNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykpIHtcblx0XHRpZiAoc2ltcGxlQ2hhbmdlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdG9ialtrZXldID0gc2ltcGxlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcblx0XHR9XG5cdH1cblx0cGF0Y2hGbihvYmopO1xufVxuIl19
@@ -2,8 +2,18 @@
2
2
  * Public API Surface of @agnos-ui/angular-headless
3
3
  */
4
4
  export * from '@agnos-ui/core';
5
+ export * from './lib/config';
5
6
  export * from './lib/slot.directive';
6
7
  export * from './lib/slotDefault.directive';
8
+ export * from './lib/slotTypes';
7
9
  export * from './lib/use.directive';
8
10
  export * from './lib/utils';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2hlYWRsZXNzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUUvQixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQGFnbm9zLXVpL2FuZ3VsYXItaGVhZGxlc3NcbiAqL1xuXG5leHBvcnQgKiBmcm9tICdAYWdub3MtdWkvY29yZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nsb3QuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nsb3REZWZhdWx0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91c2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcbmV4cG9ydCB0eXBlIHtTbG90Q29udGVudCwgV2lkZ2V0c0NvbmZpZ30gZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHR5cGUge1dpZGdldFByb3BzLCBXaWRnZXRTdGF0ZX0gZnJvbSAnQGFnbm9zLXVpL2NvcmUnO1xuaW1wb3J0IHR5cGUge0FkYXB0U2xvdENvbnRlbnRQcm9wcywgQWRhcHRXaWRnZXRTbG90c30gZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBBY2NvcmRpb25XaWRnZXQgPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5BY2NvcmRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uUHJvcHMgPSBXaWRnZXRQcm9wczxBY2NvcmRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uU3RhdGUgPSBXaWRnZXRTdGF0ZTxBY2NvcmRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uSXRlbVdpZGdldCA9IEFkYXB0V2lkZ2V0U2xvdHM8aW1wb3J0KCdAYWdub3MtdWkvY29yZScpLkFjY29yZGlvbkl0ZW1XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uSXRlbVByb3BzID0gV2lkZ2V0UHJvcHM8QWNjb3JkaW9uSXRlbVdpZGdldD47XG5leHBvcnQgdHlwZSBBY2NvcmRpb25JdGVtU3RhdGUgPSBXaWRnZXRTdGF0ZTxBY2NvcmRpb25JdGVtV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIEFjY29yZGlvbkl0ZW1Db250ZXh0ID0gQWRhcHRTbG90Q29udGVudFByb3BzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5BY2NvcmRpb25JdGVtQ29udGV4dD47XG5cbmV4cG9ydCB0eXBlIEFsZXJ0V2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuQWxlcnRXaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWxlcnRQcm9wcyA9IFdpZGdldFByb3BzPEFsZXJ0V2lkZ2V0PjtcbmV4cG9ydCB0eXBlIEFsZXJ0U3RhdGUgPSBXaWRnZXRTdGF0ZTxBbGVydFdpZGdldD47XG5leHBvcnQgdHlwZSBBbGVydENvbnRleHQgPSBBZGFwdFNsb3RDb250ZW50UHJvcHM8aW1wb3J0KCdAYWdub3MtdWkvY29yZScpLkFsZXJ0Q29udGV4dD47XG5cbmV4cG9ydCB0eXBlIE1vZGFsV2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuTW9kYWxXaWRnZXQ+O1xuZXhwb3J0IHR5cGUgTW9kYWxQcm9wcyA9IFdpZGdldFByb3BzPE1vZGFsV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIE1vZGFsU3RhdGUgPSBXaWRnZXRTdGF0ZTxNb2RhbFdpZGdldD47XG5leHBvcnQgdHlwZSBNb2RhbENvbnRleHQgPSBBZGFwdFNsb3RDb250ZW50UHJvcHM8aW1wb3J0KCdAYWdub3MtdWkvY29yZScpLk1vZGFsQ29udGV4dD47XG5cbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25XaWRnZXQgPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5QYWdpbmF0aW9uV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25Qcm9wcyA9IFdpZGdldFByb3BzPFBhZ2luYXRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvblN0YXRlID0gV2lkZ2V0U3RhdGU8UGFnaW5hdGlvbldpZGdldD47XG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uQ29udGV4dCA9IEFkYXB0U2xvdENvbnRlbnRQcm9wczxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuUGFnaW5hdGlvbkNvbnRleHQ+O1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbk51bWJlckNvbnRleHQgPSBBZGFwdFNsb3RDb250ZW50UHJvcHM8aW1wb3J0KCdAYWdub3MtdWkvY29yZScpLlBhZ2luYXRpb25OdW1iZXJDb250ZXh0PjtcblxuZXhwb3J0IHR5cGUgUmF0aW5nV2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuUmF0aW5nV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFJhdGluZ1Byb3BzID0gV2lkZ2V0UHJvcHM8UmF0aW5nV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFJhdGluZ1N0YXRlID0gV2lkZ2V0U3RhdGU8UmF0aW5nV2lkZ2V0PjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0V2lkZ2V0PEl0ZW0+ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuU2VsZWN0V2lkZ2V0PEl0ZW0+PjtcbmV4cG9ydCB0eXBlIFNlbGVjdFByb3BzPEl0ZW0+ID0gV2lkZ2V0UHJvcHM8U2VsZWN0V2lkZ2V0PEl0ZW0+PjtcbmV4cG9ydCB0eXBlIFNlbGVjdFN0YXRlPEl0ZW0+ID0gV2lkZ2V0U3RhdGU8U2VsZWN0V2lkZ2V0PEl0ZW0+PjtcbiJdfQ==
11
+ import { createAccordion as coreCreateAccordion, createAlert as coreCreateAlert, createModal as coreCreateModal, createPagination as coreCreatePagination, createProgressbar as coreCreateProgressbar, createRating as coreCreateRating, createSelect as coreCreateSelect, } from '@agnos-ui/core';
12
+ export const createAccordion = coreCreateAccordion;
13
+ export const createAlert = coreCreateAlert;
14
+ export const createModal = coreCreateModal;
15
+ export const createPagination = coreCreatePagination;
16
+ export const createRating = coreCreateRating;
17
+ export const createSelect = coreCreateSelect;
18
+ export const createProgressbar = coreCreateProgressbar;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2hlYWRsZXNzL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUU3QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpQkFBaUIsQ0FBQztBQUVoQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsYUFBYSxDQUFDO0FBRzVCLE9BQU8sRUFDTixlQUFlLElBQUksbUJBQW1CLEVBQ3RDLFdBQVcsSUFBSSxlQUFlLEVBQzlCLFdBQVcsSUFBSSxlQUFlLEVBQzlCLGdCQUFnQixJQUFJLG9CQUFvQixFQUN4QyxpQkFBaUIsSUFBSSxxQkFBcUIsRUFDMUMsWUFBWSxJQUFJLGdCQUFnQixFQUNoQyxZQUFZLElBQUksZ0JBQWdCLEdBQ2hDLE1BQU0sZ0JBQWdCLENBQUM7QUFXeEIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFtQyxtQkFBMEIsQ0FBQztBQU0xRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQStCLGVBQXNCLENBQUM7QUFNOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUErQixlQUFzQixDQUFDO0FBTzlFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFvQyxvQkFBMkIsQ0FBQztBQUs3RixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQWdDLGdCQUF1QixDQUFDO0FBS2pGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBK0UsZ0JBQXVCLENBQUM7QUFVaEksTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXFDLHFCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAYWdub3MtdWkvYW5ndWxhci1oZWFkbGVzc1xuICovXG5cbmV4cG9ydCAqIGZyb20gJ0BhZ25vcy11aS9jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbmZpZyc7XG5leHBvcnQgdHlwZSB7V2lkZ2V0c0NvbmZpZ30gZnJvbSAnLi9saWIvY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nsb3QuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nsb3REZWZhdWx0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbG90VHlwZXMnO1xuZXhwb3J0IHR5cGUge1Nsb3RDb250ZW50fSBmcm9tICcuL2xpYi9zbG90VHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXNlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5cbmltcG9ydCB0eXBlIHtQcm9wc0NvbmZpZywgV2lkZ2V0RmFjdG9yeSwgV2lkZ2V0UHJvcHMsIFdpZGdldFN0YXRlfSBmcm9tICdAYWdub3MtdWkvY29yZSc7XG5pbXBvcnQge1xuXHRjcmVhdGVBY2NvcmRpb24gYXMgY29yZUNyZWF0ZUFjY29yZGlvbixcblx0Y3JlYXRlQWxlcnQgYXMgY29yZUNyZWF0ZUFsZXJ0LFxuXHRjcmVhdGVNb2RhbCBhcyBjb3JlQ3JlYXRlTW9kYWwsXG5cdGNyZWF0ZVBhZ2luYXRpb24gYXMgY29yZUNyZWF0ZVBhZ2luYXRpb24sXG5cdGNyZWF0ZVByb2dyZXNzYmFyIGFzIGNvcmVDcmVhdGVQcm9ncmVzc2Jhcixcblx0Y3JlYXRlUmF0aW5nIGFzIGNvcmVDcmVhdGVSYXRpbmcsXG5cdGNyZWF0ZVNlbGVjdCBhcyBjb3JlQ3JlYXRlU2VsZWN0LFxufSBmcm9tICdAYWdub3MtdWkvY29yZSc7XG5pbXBvcnQgdHlwZSB7QWRhcHRTbG90Q29udGVudFByb3BzLCBBZGFwdFdpZGdldFNsb3RzfSBmcm9tICcuL2xpYi9zbG90VHlwZXMnO1xuXG5leHBvcnQgdHlwZSBBY2NvcmRpb25XaWRnZXQgPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5BY2NvcmRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uUHJvcHMgPSBXaWRnZXRQcm9wczxBY2NvcmRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uU3RhdGUgPSBXaWRnZXRTdGF0ZTxBY2NvcmRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uQXBpID0gQWNjb3JkaW9uV2lkZ2V0WydhcGknXTtcbmV4cG9ydCB0eXBlIEFjY29yZGlvbkl0ZW1XaWRnZXQgPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5BY2NvcmRpb25JdGVtV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIEFjY29yZGlvbkl0ZW1Qcm9wcyA9IFdpZGdldFByb3BzPEFjY29yZGlvbkl0ZW1XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWNjb3JkaW9uSXRlbVN0YXRlID0gV2lkZ2V0U3RhdGU8QWNjb3JkaW9uSXRlbVdpZGdldD47XG5leHBvcnQgdHlwZSBBY2NvcmRpb25JdGVtQ29udGV4dCA9IEFkYXB0U2xvdENvbnRlbnRQcm9wczxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuQWNjb3JkaW9uSXRlbUNvbnRleHQ+O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjY29yZGlvbjogV2lkZ2V0RmFjdG9yeTxBY2NvcmRpb25XaWRnZXQ+ID0gY29yZUNyZWF0ZUFjY29yZGlvbiBhcyBhbnk7XG5cbmV4cG9ydCB0eXBlIEFsZXJ0V2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuQWxlcnRXaWRnZXQ+O1xuZXhwb3J0IHR5cGUgQWxlcnRQcm9wcyA9IFdpZGdldFByb3BzPEFsZXJ0V2lkZ2V0PjtcbmV4cG9ydCB0eXBlIEFsZXJ0U3RhdGUgPSBXaWRnZXRTdGF0ZTxBbGVydFdpZGdldD47XG5leHBvcnQgdHlwZSBBbGVydENvbnRleHQgPSBBZGFwdFNsb3RDb250ZW50UHJvcHM8aW1wb3J0KCdAYWdub3MtdWkvY29yZScpLkFsZXJ0Q29udGV4dD47XG5leHBvcnQgY29uc3QgY3JlYXRlQWxlcnQ6IFdpZGdldEZhY3Rvcnk8QWxlcnRXaWRnZXQ+ID0gY29yZUNyZWF0ZUFsZXJ0IGFzIGFueTtcblxuZXhwb3J0IHR5cGUgTW9kYWxXaWRnZXQgPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5Nb2RhbFdpZGdldD47XG5leHBvcnQgdHlwZSBNb2RhbFByb3BzID0gV2lkZ2V0UHJvcHM8TW9kYWxXaWRnZXQ+O1xuZXhwb3J0IHR5cGUgTW9kYWxTdGF0ZSA9IFdpZGdldFN0YXRlPE1vZGFsV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIE1vZGFsQ29udGV4dCA9IEFkYXB0U2xvdENvbnRlbnRQcm9wczxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuTW9kYWxDb250ZXh0PjtcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2RhbDogV2lkZ2V0RmFjdG9yeTxNb2RhbFdpZGdldD4gPSBjb3JlQ3JlYXRlTW9kYWwgYXMgYW55O1xuXG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uV2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuUGFnaW5hdGlvbldpZGdldD47XG5leHBvcnQgdHlwZSBQYWdpbmF0aW9uUHJvcHMgPSBXaWRnZXRQcm9wczxQYWdpbmF0aW9uV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25TdGF0ZSA9IFdpZGdldFN0YXRlPFBhZ2luYXRpb25XaWRnZXQ+O1xuZXhwb3J0IHR5cGUgUGFnaW5hdGlvbkNvbnRleHQgPSBBZGFwdFNsb3RDb250ZW50UHJvcHM8aW1wb3J0KCdAYWdub3MtdWkvY29yZScpLlBhZ2luYXRpb25Db250ZXh0PjtcbmV4cG9ydCB0eXBlIFBhZ2luYXRpb25OdW1iZXJDb250ZXh0ID0gQWRhcHRTbG90Q29udGVudFByb3BzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5QYWdpbmF0aW9uTnVtYmVyQ29udGV4dD47XG5leHBvcnQgY29uc3QgY3JlYXRlUGFnaW5hdGlvbjogV2lkZ2V0RmFjdG9yeTxQYWdpbmF0aW9uV2lkZ2V0PiA9IGNvcmVDcmVhdGVQYWdpbmF0aW9uIGFzIGFueTtcblxuZXhwb3J0IHR5cGUgUmF0aW5nV2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuUmF0aW5nV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFJhdGluZ1Byb3BzID0gV2lkZ2V0UHJvcHM8UmF0aW5nV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFJhdGluZ1N0YXRlID0gV2lkZ2V0U3RhdGU8UmF0aW5nV2lkZ2V0PjtcbmV4cG9ydCBjb25zdCBjcmVhdGVSYXRpbmc6IFdpZGdldEZhY3Rvcnk8UmF0aW5nV2lkZ2V0PiA9IGNvcmVDcmVhdGVSYXRpbmcgYXMgYW55O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RXaWRnZXQ8SXRlbT4gPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5TZWxlY3RXaWRnZXQ8SXRlbT4+O1xuZXhwb3J0IHR5cGUgU2VsZWN0UHJvcHM8SXRlbT4gPSBXaWRnZXRQcm9wczxTZWxlY3RXaWRnZXQ8SXRlbT4+O1xuZXhwb3J0IHR5cGUgU2VsZWN0U3RhdGU8SXRlbT4gPSBXaWRnZXRTdGF0ZTxTZWxlY3RXaWRnZXQ8SXRlbT4+O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVNlbGVjdDogPEl0ZW0+KHByb3BzQ29uZmlnPzogUHJvcHNDb25maWc8U2VsZWN0UHJvcHM8SXRlbT4+KSA9PiBTZWxlY3RXaWRnZXQ8SXRlbT4gPSBjb3JlQ3JlYXRlU2VsZWN0IGFzIGFueTtcblxuZXhwb3J0IHR5cGUgU2xpZGVyV2lkZ2V0ID0gQWRhcHRXaWRnZXRTbG90czxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuU2xpZGVyV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFNsaWRlclByb3BzID0gV2lkZ2V0UHJvcHM8U2xpZGVyV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFNsaWRlclN0YXRlID0gV2lkZ2V0U3RhdGU8U2xpZGVyV2lkZ2V0PjtcblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NiYXJXaWRnZXQgPSBBZGFwdFdpZGdldFNsb3RzPGltcG9ydCgnQGFnbm9zLXVpL2NvcmUnKS5Qcm9ncmVzc2JhcldpZGdldD47XG5leHBvcnQgdHlwZSBQcm9ncmVzc2JhclByb3BzID0gV2lkZ2V0UHJvcHM8UHJvZ3Jlc3NiYXJXaWRnZXQ+O1xuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NiYXJTdGF0ZSA9IFdpZGdldFN0YXRlPFByb2dyZXNzYmFyV2lkZ2V0PjtcbmV4cG9ydCB0eXBlIFByb2dyZXNzYmFyQ29udGV4dCA9IEFkYXB0U2xvdENvbnRlbnRQcm9wczxpbXBvcnQoJ0BhZ25vcy11aS9jb3JlJykuUHJvZ3Jlc3NiYXJDb250ZXh0PjtcbmV4cG9ydCBjb25zdCBjcmVhdGVQcm9ncmVzc2JhcjogV2lkZ2V0RmFjdG9yeTxQcm9ncmVzc2JhcldpZGdldD4gPSBjb3JlQ3JlYXRlUHJvZ3Jlc3NiYXIgYXMgYW55O1xuIl19