cdk8s 1.61.25 → 1.62.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -220,6 +220,21 @@ public synth()
220
220
  public synthYaml()
221
221
  ```
222
222
 
223
+ #### Static Functions <a name="Static Functions"></a>
224
+
225
+ ##### `of` <a name="cdk8s.App.of"></a>
226
+
227
+ ```typescript
228
+ import { App } from 'cdk8s'
229
+
230
+ App.of(c: IConstruct)
231
+ ```
232
+
233
+ ###### `c`<sup>Required</sup> <a name="cdk8s.App.parameter.c"></a>
234
+
235
+ - *Type:* [`constructs.IConstruct`](#constructs.IConstruct)
236
+
237
+ ---
223
238
 
224
239
  #### Properties <a name="Properties"></a>
225
240
 
@@ -260,6 +275,21 @@ The file extension to use for rendered YAML files.
260
275
 
261
276
  ---
262
277
 
278
+ ##### `resolvers`<sup>Required</sup> <a name="cdk8s.App.property.resolvers"></a>
279
+
280
+ ```typescript
281
+ public readonly resolvers: IResolver[];
282
+ ```
283
+
284
+ - *Type:* [`cdk8s.IResolver`](#cdk8s.IResolver)[]
285
+
286
+ Resolvers used by this app.
287
+
288
+ This includes both custom resolvers
289
+ passed by the `resolvers` property, as well as built-in resolvers.
290
+
291
+ ---
292
+
263
293
  ##### `yamlOutputType`<sup>Required</sup> <a name="cdk8s.App.property.yamlOutputType"></a>
264
294
 
265
295
  ```typescript
@@ -512,6 +542,18 @@ import { ApiObjectMetadata } from 'cdk8s'
512
542
  const apiObjectMetadata: ApiObjectMetadata = { ... }
513
543
  ```
514
544
 
545
+ ##### `additionalAttributes`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadata.property.additionalAttributes"></a>
546
+
547
+ ```typescript
548
+ public readonly additionalAttributes: {[ key: string ]: any};
549
+ ```
550
+
551
+ - *Type:* {[ key: string ]: `any`}
552
+
553
+ Additional metadata attributes.
554
+
555
+ ---
556
+
515
557
  ##### `annotations`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadata.property.annotations"></a>
516
558
 
517
559
  ```typescript
@@ -646,6 +688,176 @@ relationships.
646
688
 
647
689
  ---
648
690
 
691
+ ### ApiObjectMetadataDefinitionOptions <a name="cdk8s.ApiObjectMetadataDefinitionOptions"></a>
692
+
693
+ Options for `ApiObjectMetadataDefinition`.
694
+
695
+ #### Initializer <a name="[object Object].Initializer"></a>
696
+
697
+ ```typescript
698
+ import { ApiObjectMetadataDefinitionOptions } from 'cdk8s'
699
+
700
+ const apiObjectMetadataDefinitionOptions: ApiObjectMetadataDefinitionOptions = { ... }
701
+ ```
702
+
703
+ ##### `additionalAttributes`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.additionalAttributes"></a>
704
+
705
+ ```typescript
706
+ public readonly additionalAttributes: {[ key: string ]: any};
707
+ ```
708
+
709
+ - *Type:* {[ key: string ]: `any`}
710
+
711
+ Additional metadata attributes.
712
+
713
+ ---
714
+
715
+ ##### `annotations`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.annotations"></a>
716
+
717
+ ```typescript
718
+ public readonly annotations: {[ key: string ]: string};
719
+ ```
720
+
721
+ - *Type:* {[ key: string ]: `string`}
722
+ - *Default:* No annotations.
723
+
724
+ Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata.
725
+
726
+ They are not queryable and should be
727
+ preserved when modifying objects.
728
+
729
+ > http://kubernetes.io/docs/user-guide/annotations
730
+
731
+ ---
732
+
733
+ ##### `finalizers`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.finalizers"></a>
734
+
735
+ ```typescript
736
+ public readonly finalizers: string[];
737
+ ```
738
+
739
+ - *Type:* `string`[]
740
+ - *Default:* No finalizers.
741
+
742
+ Namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion.
743
+
744
+ Must be empty before the object is deleted from the registry. Each entry is
745
+ an identifier for the responsible component that will remove the entry from
746
+ the list. If the deletionTimestamp of the object is non-nil, entries in
747
+ this list can only be removed. Finalizers may be processed and removed in
748
+ any order. Order is NOT enforced because it introduces significant risk of
749
+ stuck finalizers. finalizers is a shared field, any actor with permission
750
+ can reorder it. If the finalizer list is processed in order, then this can
751
+ lead to a situation in which the component responsible for the first
752
+ finalizer in the list is waiting for a signal (field value, external
753
+ system, or other) produced by a component responsible for a finalizer later
754
+ in the list, resulting in a deadlock. Without enforced ordering finalizers
755
+ are free to order amongst themselves and are not vulnerable to ordering
756
+ changes in the list.
757
+
758
+ > https://kubernetes.io/docs/concepts/overview/working-with-objects/finalizers/
759
+
760
+ ---
761
+
762
+ ##### `labels`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.labels"></a>
763
+
764
+ ```typescript
765
+ public readonly labels: {[ key: string ]: string};
766
+ ```
767
+
768
+ - *Type:* {[ key: string ]: `string`}
769
+ - *Default:* No labels.
770
+
771
+ Map of string keys and values that can be used to organize and categorize (scope and select) objects.
772
+
773
+ May match selectors of replication controllers and services.
774
+
775
+ > http://kubernetes.io/docs/user-guide/labels
776
+
777
+ ---
778
+
779
+ ##### `name`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.name"></a>
780
+
781
+ ```typescript
782
+ public readonly name: string;
783
+ ```
784
+
785
+ - *Type:* `string`
786
+ - *Default:* an app-unique name generated by the chart
787
+
788
+ The unique, namespace-global, name of this object inside the Kubernetes cluster.
789
+
790
+ Normally, you shouldn't specify names for objects and let the CDK generate
791
+ a name for you that is application-unique. The names CDK generates are
792
+ composed from the construct path components, separated by dots and a suffix
793
+ that is based on a hash of the entire path, to ensure uniqueness.
794
+
795
+ You can supply custom name allocation logic by overriding the
796
+ `chart.generateObjectName` method.
797
+
798
+ If you use an explicit name here, bear in mind that this reduces the
799
+ composability of your construct because it won't be possible to include
800
+ more than one instance in any app. Therefore it is highly recommended to
801
+ leave this unspecified.
802
+
803
+ ---
804
+
805
+ ##### `namespace`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.namespace"></a>
806
+
807
+ ```typescript
808
+ public readonly namespace: string;
809
+ ```
810
+
811
+ - *Type:* `string`
812
+ - *Default:* undefined (will be assigned to the 'default' namespace)
813
+
814
+ Namespace defines the space within each name must be unique.
815
+
816
+ An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation.
817
+ Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces
818
+
819
+ ---
820
+
821
+ ##### `ownerReferences`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.ownerReferences"></a>
822
+
823
+ ```typescript
824
+ public readonly ownerReferences: OwnerReference[];
825
+ ```
826
+
827
+ - *Type:* [`cdk8s.OwnerReference`](#cdk8s.OwnerReference)[]
828
+ - *Default:* automatically set by Kubernetes
829
+
830
+ List of objects depended by this object.
831
+
832
+ If ALL objects in the list have
833
+ been deleted, this object will be garbage collected. If this object is
834
+ managed by a controller, then an entry in this list will point to this
835
+ controller, with the controller field set to true. There cannot be more
836
+ than one managing controller.
837
+
838
+ Kubernetes sets the value of this field automatically for objects that are
839
+ dependents of other objects like ReplicaSets, DaemonSets, Deployments, Jobs
840
+ and CronJobs, and ReplicationControllers. You can also configure these
841
+ relationships manually by changing the value of this field. However, you
842
+ usually don't need to and can allow Kubernetes to automatically manage the
843
+ relationships.
844
+
845
+ > https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/
846
+
847
+ ---
848
+
849
+ ##### `apiObject`<sup>Required</sup> <a name="cdk8s.ApiObjectMetadataDefinitionOptions.property.apiObject"></a>
850
+
851
+ ```typescript
852
+ public readonly apiObject: ApiObject;
853
+ ```
854
+
855
+ - *Type:* [`cdk8s.ApiObject`](#cdk8s.ApiObject)
856
+
857
+ Which ApiObject instance is the metadata attached to.
858
+
859
+ ---
860
+
649
861
  ### ApiObjectProps <a name="cdk8s.ApiObjectProps"></a>
650
862
 
651
863
  Options for defining API objects.
@@ -754,6 +966,25 @@ When set to true, the output directory will contain a `construct-metadata.json`
754
966
 
755
967
  ---
756
968
 
969
+ ##### `resolvers`<sup>Optional</sup> <a name="cdk8s.AppProps.property.resolvers"></a>
970
+
971
+ ```typescript
972
+ public readonly resolvers: IResolver[];
973
+ ```
974
+
975
+ - *Type:* [`cdk8s.IResolver`](#cdk8s.IResolver)[]
976
+ - *Default:* no resolvers.
977
+
978
+ A list of resolvers that can be used to replace property values before they are written to the manifest file.
979
+
980
+ When multiple resolvers are passed,
981
+ they are invoked by order in the list, and only the first one that applies
982
+ (e.g calls `context.replaceValue`) is invoked.
983
+
984
+ > https://cdk8s.io/docs/latest/basics/app/#resolvers
985
+
986
+ ---
987
+
757
988
  ##### `yamlOutputType`<sup>Optional</sup> <a name="cdk8s.AppProps.property.yamlOutputType"></a>
758
989
 
759
990
  ```typescript
@@ -1303,12 +1534,12 @@ Object metadata.
1303
1534
  ```typescript
1304
1535
  import { ApiObjectMetadataDefinition } from 'cdk8s'
1305
1536
 
1306
- new ApiObjectMetadataDefinition(options?: ApiObjectMetadata)
1537
+ new ApiObjectMetadataDefinition(options: ApiObjectMetadataDefinitionOptions)
1307
1538
  ```
1308
1539
 
1309
- ##### `options`<sup>Optional</sup> <a name="cdk8s.ApiObjectMetadataDefinition.parameter.options"></a>
1540
+ ##### `options`<sup>Required</sup> <a name="cdk8s.ApiObjectMetadataDefinition.parameter.options"></a>
1310
1541
 
1311
- - *Type:* [`cdk8s.ApiObjectMetadata`](#cdk8s.ApiObjectMetadata)
1542
+ - *Type:* [`cdk8s.ApiObjectMetadataDefinitionOptions`](#cdk8s.ApiObjectMetadataDefinitionOptions)
1312
1543
 
1313
1544
  ---
1314
1545
 
@@ -1884,6 +2115,37 @@ the amount of Seconds the `Duration` will represent.
1884
2115
 
1885
2116
 
1886
2117
 
2118
+ ### ImplicitTokenResolver <a name="cdk8s.ImplicitTokenResolver"></a>
2119
+
2120
+ - *Implements:* [`cdk8s.IResolver`](#cdk8s.IResolver)
2121
+
2122
+ Resolves implicit tokens.
2123
+
2124
+ #### Initializers <a name="cdk8s.ImplicitTokenResolver.Initializer"></a>
2125
+
2126
+ ```typescript
2127
+ import { ImplicitTokenResolver } from 'cdk8s'
2128
+
2129
+ new ImplicitTokenResolver()
2130
+ ```
2131
+
2132
+ #### Methods <a name="Methods"></a>
2133
+
2134
+ ##### `resolve` <a name="cdk8s.ImplicitTokenResolver.resolve"></a>
2135
+
2136
+ ```typescript
2137
+ public resolve(context: ResolutionContext)
2138
+ ```
2139
+
2140
+ ###### `context`<sup>Required</sup> <a name="cdk8s.ImplicitTokenResolver.parameter.context"></a>
2141
+
2142
+ - *Type:* [`cdk8s.ResolutionContext`](#cdk8s.ResolutionContext)
2143
+
2144
+ ---
2145
+
2146
+
2147
+
2148
+
1887
2149
  ### JsonPatch <a name="cdk8s.JsonPatch"></a>
1888
2150
 
1889
2151
  Utility for applying RFC-6902 JSON-Patch to a document.
@@ -2065,6 +2327,37 @@ Lazy.any(producer: IAnyProducer)
2065
2327
 
2066
2328
 
2067
2329
 
2330
+ ### LazyResolver <a name="cdk8s.LazyResolver"></a>
2331
+
2332
+ - *Implements:* [`cdk8s.IResolver`](#cdk8s.IResolver)
2333
+
2334
+ Resolvers instanecs of `Lazy`.
2335
+
2336
+ #### Initializers <a name="cdk8s.LazyResolver.Initializer"></a>
2337
+
2338
+ ```typescript
2339
+ import { LazyResolver } from 'cdk8s'
2340
+
2341
+ new LazyResolver()
2342
+ ```
2343
+
2344
+ #### Methods <a name="Methods"></a>
2345
+
2346
+ ##### `resolve` <a name="cdk8s.LazyResolver.resolve"></a>
2347
+
2348
+ ```typescript
2349
+ public resolve(context: ResolutionContext)
2350
+ ```
2351
+
2352
+ ###### `context`<sup>Required</sup> <a name="cdk8s.LazyResolver.parameter.context"></a>
2353
+
2354
+ - *Type:* [`cdk8s.ResolutionContext`](#cdk8s.ResolutionContext)
2355
+
2356
+ ---
2357
+
2358
+
2359
+
2360
+
2068
2361
  ### Names <a name="cdk8s.Names"></a>
2069
2362
 
2070
2363
  Utilities for generating unique and stable names.
@@ -2122,6 +2415,120 @@ Name options.
2122
2415
 
2123
2416
 
2124
2417
 
2418
+ ### ResolutionContext <a name="cdk8s.ResolutionContext"></a>
2419
+
2420
+ Context object for a specific resolution process.
2421
+
2422
+ #### Initializers <a name="cdk8s.ResolutionContext.Initializer"></a>
2423
+
2424
+ ```typescript
2425
+ import { ResolutionContext } from 'cdk8s'
2426
+
2427
+ new ResolutionContext(obj: ApiObject, key: string[], value: any)
2428
+ ```
2429
+
2430
+ ##### `obj`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.obj"></a>
2431
+
2432
+ - *Type:* [`cdk8s.ApiObject`](#cdk8s.ApiObject)
2433
+
2434
+ Which ApiObject is currently being resolved.
2435
+
2436
+ ---
2437
+
2438
+ ##### `key`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.key"></a>
2439
+
2440
+ - *Type:* `string`[]
2441
+
2442
+ Which key is currently being resolved.
2443
+
2444
+ ---
2445
+
2446
+ ##### `value`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.value"></a>
2447
+
2448
+ - *Type:* `any`
2449
+
2450
+ The value associated to the key currently being resolved.
2451
+
2452
+ ---
2453
+
2454
+ #### Methods <a name="Methods"></a>
2455
+
2456
+ ##### `replaceValue` <a name="cdk8s.ResolutionContext.replaceValue"></a>
2457
+
2458
+ ```typescript
2459
+ public replaceValue(newValue: any)
2460
+ ```
2461
+
2462
+ ###### `newValue`<sup>Required</sup> <a name="cdk8s.ResolutionContext.parameter.newValue"></a>
2463
+
2464
+ - *Type:* `any`
2465
+
2466
+ ---
2467
+
2468
+
2469
+ #### Properties <a name="Properties"></a>
2470
+
2471
+ ##### `key`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.key"></a>
2472
+
2473
+ ```typescript
2474
+ public readonly key: string[];
2475
+ ```
2476
+
2477
+ - *Type:* `string`[]
2478
+
2479
+ Which key is currently being resolved.
2480
+
2481
+ ---
2482
+
2483
+ ##### `obj`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.obj"></a>
2484
+
2485
+ ```typescript
2486
+ public readonly obj: ApiObject;
2487
+ ```
2488
+
2489
+ - *Type:* [`cdk8s.ApiObject`](#cdk8s.ApiObject)
2490
+
2491
+ Which ApiObject is currently being resolved.
2492
+
2493
+ ---
2494
+
2495
+ ##### `value`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.value"></a>
2496
+
2497
+ ```typescript
2498
+ public readonly value: any;
2499
+ ```
2500
+
2501
+ - *Type:* `any`
2502
+
2503
+ The value associated to the key currently being resolved.
2504
+
2505
+ ---
2506
+
2507
+ ##### `replaced`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.replaced"></a>
2508
+
2509
+ ```typescript
2510
+ public readonly replaced: boolean;
2511
+ ```
2512
+
2513
+ - *Type:* `boolean`
2514
+
2515
+ Whether or not the value was replaced by invoking the `replaceValue` method.
2516
+
2517
+ ---
2518
+
2519
+ ##### `replacedValue`<sup>Required</sup> <a name="cdk8s.ResolutionContext.property.replacedValue"></a>
2520
+
2521
+ ```typescript
2522
+ public readonly replacedValue: any;
2523
+ ```
2524
+
2525
+ - *Type:* `any`
2526
+
2527
+ The replaced value that was set via the `replaceValue` method.
2528
+
2529
+ ---
2530
+
2531
+
2125
2532
  ### Size <a name="cdk8s.Size"></a>
2126
2533
 
2127
2534
  Represents the amount of digital storage.
@@ -2422,6 +2829,27 @@ public produce()
2422
2829
  ```
2423
2830
 
2424
2831
 
2832
+ ### IResolver <a name="cdk8s.IResolver"></a>
2833
+
2834
+ - *Implemented By:* [`cdk8s.ImplicitTokenResolver`](#cdk8s.ImplicitTokenResolver), [`cdk8s.LazyResolver`](#cdk8s.LazyResolver), [`cdk8s.IResolver`](#cdk8s.IResolver)
2835
+
2836
+ Contract for resolver objects.
2837
+
2838
+ #### Methods <a name="Methods"></a>
2839
+
2840
+ ##### `resolve` <a name="cdk8s.IResolver.resolve"></a>
2841
+
2842
+ ```typescript
2843
+ public resolve(context: ResolutionContext)
2844
+ ```
2845
+
2846
+ ###### `context`<sup>Required</sup> <a name="cdk8s.IResolver.parameter.context"></a>
2847
+
2848
+ - *Type:* [`cdk8s.ResolutionContext`](#cdk8s.ResolutionContext)
2849
+
2850
+ ---
2851
+
2852
+
2425
2853
  ## Enums <a name="Enums"></a>
2426
2854
 
2427
2855
  ### SizeRoundingBehavior <a name="SizeRoundingBehavior"></a>
package/lib/api-object.js CHANGED
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ApiObject = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const constructs_1 = require("constructs");
7
- const _resolve_1 = require("./_resolve");
8
7
  const _util_1 = require("./_util");
9
8
  const chart_1 = require("./chart");
10
9
  const json_patch_1 = require("./json-patch");
11
10
  const metadata_1 = require("./metadata");
11
+ const resolve_1 = require("./resolve");
12
12
  const API_OBJECT_SYMBOL = Symbol.for('cdk8s.ApiObject');
13
13
  class ApiObject extends constructs_1.Construct {
14
14
  /**
@@ -73,6 +73,7 @@ class ApiObject extends constructs_1.Construct {
73
73
  ...this.chart.labels,
74
74
  ...props.metadata?.labels,
75
75
  },
76
+ apiObject: this,
76
77
  });
77
78
  Object.defineProperty(this, API_OBJECT_SYMBOL, { value: true });
78
79
  }
@@ -111,7 +112,7 @@ class ApiObject extends constructs_1.Construct {
111
112
  metadata: this.metadata.toJson(),
112
113
  };
113
114
  const sortKeys = process.env.CDK8S_DISABLE_SORT ? false : true;
114
- const json = (0, _util_1.sanitizeValue)((0, _resolve_1.resolve)(data), { sortKeys });
115
+ const json = (0, _util_1.sanitizeValue)((0, resolve_1.resolve)([], data, this), { sortKeys });
115
116
  const patched = json_patch_1.JsonPatch.apply(json, ...this.patches);
116
117
  // reorder top-level keys so that we first have "apiVersion", "kind" and
117
118
  // "metadata" and then all the rest
@@ -126,7 +127,7 @@ class ApiObject extends constructs_1.Construct {
126
127
  }
127
128
  }
128
129
  exports.ApiObject = ApiObject;
129
- ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "1.61.25" };
130
+ ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "1.62.0" };
130
131
  function parseApiGroup(apiVersion) {
131
132
  const v = apiVersion.split('/');
132
133
  // no group means "core"
@@ -139,4 +140,4 @@ function parseApiGroup(apiVersion) {
139
140
  }
140
141
  throw new Error(`invalid apiVersion ${apiVersion}, expecting GROUP/VERSION. See https://kubernetes.io/docs/reference/using-api/api-overview/#api-groups`);
141
142
  }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXlEO0FBQ3pELHlDQUFxQztBQUNyQyxtQ0FBd0M7QUFDeEMsbUNBQWdDO0FBQ2hDLDZDQUF5QztBQUN6Qyx5Q0FBNEU7QUE0QzVFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXhELE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBRXRDOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBTTtRQUN2QixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsMkJBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQVU7UUFDcEMsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFhO1FBQzVCLElBQUksQ0FBQyxZQUFZLFNBQVMsRUFBRTtZQUMxQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsTUFBTSxLQUFLLEdBQUcsaUJBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hIO1FBRUQsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUEwQ0Q7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBbUIsS0FBcUI7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUR3QyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUU5RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFhLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksc0NBQTJCLENBQUM7WUFDOUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBRWYsc0JBQXNCO1lBQ3RCLEdBQUcsS0FBSyxDQUFDLFFBQVE7WUFFakIsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUM1RCxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3BCLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNO2FBQzFCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsR0FBRyxZQUEwQjtRQUNoRCxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLFlBQVksQ0FBQyxHQUFHLEdBQWdCO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTTtRQUNYLE1BQU0sSUFBSSxHQUFRO1lBQ2hCLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7U0FDakMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUEscUJBQWEsRUFBQyxJQUFBLGtCQUFPLEVBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLHNCQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV2RCx3RUFBd0U7UUFDeEUsbUNBQW1DO1FBQ25DLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLEtBQUssTUFBTSxDQUFDLElBQUksV0FBVyxFQUFFO1lBQzNCLElBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRTtnQkFDaEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUF4S0gsOEJBeUtDOztBQUVELFNBQVMsYUFBYSxDQUFDLFVBQWtCO0lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsd0JBQXdCO0lBQ3hCLDBFQUEwRTtJQUMxRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2I7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixVQUFVLHdHQUF3RyxDQUFDLENBQUM7QUFDNUosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCwgTm9kZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJy4vX3Jlc29sdmUnO1xuaW1wb3J0IHsgc2FuaXRpemVWYWx1ZSB9IGZyb20gJy4vX3V0aWwnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcbmltcG9ydCB7IEpzb25QYXRjaCB9IGZyb20gJy4vanNvbi1wYXRjaCc7XG5pbXBvcnQgeyBBcGlPYmplY3RNZXRhZGF0YSwgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgZGVmaW5pbmcgQVBJIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpT2JqZWN0UHJvcHMge1xuICAvKipcbiAgICogT2JqZWN0IG1ldGFkYXRhLlxuICAgKlxuICAgKiBJZiBgbmFtZWAgaXMgbm90IHNwZWNpZmllZCwgYW4gYXBwLXVuaXF1ZSBuYW1lIHdpbGwgYmUgYWxsb2NhdGVkIGJ5IHRoZVxuICAgKiBmcmFtZXdvcmsgYmFzZWQgb24gdGhlIHBhdGggb2YgdGhlIGNvbnN0cnVjdCB3aXRoaW4gdGhlcyBjb25zdHJ1Y3QgdHJlZS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEFQSSB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIHRoaXMgQVBJIG9iamVjdC5cbiAgICogQGpzaWkgaWdub3JlXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2NkazhzLXRlYW0vY2RrOHMtY29yZS9pc3N1ZXMvMTI5N1xuICAgKi9cbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVmVyc2lvbktpbmQge1xuICAvKipcbiAgICogVGhlIG9iamVjdCdzIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pby92MWApXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3Qga2luZC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbn1cblxuY29uc3QgQVBJX09CSkVDVF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdjZGs4cy5BcGlPYmplY3QnKTtcblxuZXhwb3J0IGNsYXNzIEFwaU9iamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gYEFwaU9iamVjdGAuXG4gICAqXG4gICAqIFdlIGRvIGF0dHJpYnV0ZSBkZXRlY3Rpb24gc2luY2Ugd2UgY2FuJ3QgcmVsaWFibHkgdXNlICdpbnN0YW5jZW9mJy5cblxuICAgKiBAcGFyYW0gbyBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gICAqL1xuICBzdGF0aWMgaXNBcGlPYmplY3QobzogYW55KTogbyBpcyBBcGlPYmplY3Qge1xuICAgIHJldHVybiBvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBBUElfT0JKRUNUX1NZTUJPTCBpbiBvO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgYGluc3RhbmNlb2YgQXBpT2JqZWN0YCB1c2luZyB0aGUgbW9yZSByZWxpYWJsZSBgQXBpT2JqZWN0LmlzQXBpT2JqZWN0YCBzdGF0aWMgbWV0aG9kXG4gICAqXG4gICAqIEBwYXJhbSBvIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAgICogQGludGVybmFsXG4gICAqL1xuICBzdGF0aWMgW1N5bWJvbC5oYXNJbnN0YW5jZV0obzogdW5rbm93bikge1xuICAgIHJldHVybiBBcGlPYmplY3QuaXNBcGlPYmplY3Qobyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBBcGlPYmplY3RgIG5hbWVkIGBSZXNvdXJjZWAgd2hpY2ggaXMgYSBjaGlsZCBvZiB0aGUgZ2l2ZW5cbiAgICogY29uc3RydWN0LiBJZiBgY2AgaXMgYW4gYEFwaU9iamVjdGAsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LiBUaHJvd3MgYW5cbiAgICogZXhjZXB0aW9uIGlmIHRoZSBjb25zdHJ1Y3QgZG9lcyBub3QgaGF2ZSBhIGNoaWxkIG5hbWVkIGBEZWZhdWx0YCBfb3JfIGlmXG4gICAqIHRoaXMgY2hpbGQgaXMgbm90IGFuIGBBcGlPYmplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0gYyBUaGUgaGlnaGVyLWxldmVsIGNvbnN0cnVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihjOiBJQ29uc3RydWN0KTogQXBpT2JqZWN0IHtcbiAgICBpZiAoYyBpbnN0YW5jZW9mIEFwaU9iamVjdCkge1xuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGQgPSBOb2RlLm9mKGMpLmRlZmF1bHRDaGlsZDtcbiAgICBpZiAoIWNoaWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBmaW5kIGEgKGRpcmVjdCBvciBpbmRpcmVjdCkgY2hpbGQgb2YgdHlwZSBBcGlPYmplY3QgZm9yIGNvbnN0cnVjdCAke05vZGUub2YoYykucGF0aH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBpT2JqZWN0Lm9mKGNoaWxkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIG9iamVjdC5cbiAgICpcbiAgICogSWYgYSBuYW1lIGlzIHNwZWNpZmllZCBpbiBgbWV0YWRhdGEubmFtZWAgdGhpcyB3aWxsIGJlIHRoZSBuYW1lIHJldHVybmVkLlxuICAgKiBPdGhlcndpc2UsIGEgbmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBieSBjYWxsaW5nXG4gICAqIGBDaGFydC5vZih0aGlzKS5nZW5lcmF0ZWRPYmplY3ROYW1lKHRoaXMpYCwgd2hpY2ggYnkgZGVmYXVsdCB1c2VzIHRoZVxuICAgKiBjb25zdHJ1Y3QgcGF0aCB0byBnZW5lcmF0ZSBhIEROUy1jb21wYXRpYmxlIG5hbWUgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QncyBBUEkgdmVyc2lvbiAoZS5nLiBgYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFgKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdyb3VwIHBvcnRpb24gb2YgdGhlIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pb2ApXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpR3JvdXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCBraW5kLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNoYXJ0IGluIHdoaWNoIHRoaXMgb2JqZWN0IGlzIGRlZmluZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhcnQ6IENoYXJ0O1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBBUEkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhOiBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb247XG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIEpTT04gcGF0Y2ggb3BlcmF0aW9ucyB0byBhcHBseSB0byB0aGUgZG9jdW1lbnQgYWZ0ZXIgc3ludGhlc2lzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwYXRjaGVzOiBBcnJheTxKc29uUGF0Y2g+O1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGFuIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSB0aGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHByb3BzIG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEFwaU9iamVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnBhdGNoZXMgPSBuZXcgQXJyYXk8SnNvblBhdGNoPigpO1xuICAgIHRoaXMuY2hhcnQgPSBDaGFydC5vZih0aGlzKTtcbiAgICB0aGlzLmtpbmQgPSBwcm9wcy5raW5kO1xuICAgIHRoaXMuYXBpVmVyc2lvbiA9IHByb3BzLmFwaVZlcnNpb247XG4gICAgdGhpcy5hcGlHcm91cCA9IHBhcnNlQXBpR3JvdXAodGhpcy5hcGlWZXJzaW9uKTtcblxuICAgIHRoaXMubmFtZSA9IHByb3BzLm1ldGFkYXRhPy5uYW1lID8/IHRoaXMuY2hhcnQuZ2VuZXJhdGVPYmplY3ROYW1lKHRoaXMpO1xuXG4gICAgdGhpcy5tZXRhZGF0YSA9IG5ldyBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24oe1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuXG4gICAgICAvLyB1c2VyIGRlZmluZWQgdmFsdWVzXG4gICAgICAuLi5wcm9wcy5tZXRhZGF0YSxcblxuICAgICAgbmFtZXNwYWNlOiBwcm9wcy5tZXRhZGF0YT8ubmFtZXNwYWNlID8/IHRoaXMuY2hhcnQubmFtZXNwYWNlLFxuICAgICAgbGFiZWxzOiB7XG4gICAgICAgIC4uLnRoaXMuY2hhcnQubGFiZWxzLFxuICAgICAgICAuLi5wcm9wcy5tZXRhZGF0YT8ubGFiZWxzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBBUElfT0JKRUNUX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkZXBlbmRlbmN5IGJldHdlZW4gdGhpcyBBcGlPYmplY3QgYW5kIG90aGVyIGNvbnN0cnVjdHMuXG4gICAqIFRoZXNlIGNhbiBiZSBvdGhlciBBcGlPYmplY3RzLCBDaGFydHMsIG9yIGN1c3RvbS5cbiAgICpcbiAgICogQHBhcmFtIGRlcGVuZGVuY2llcyB0aGUgZGVwZW5kZW5jaWVzIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llczogSUNvbnN0cnVjdFtdKSB7XG4gICAgTm9kZS5vZih0aGlzKS5hZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llcyk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIHNldCBvZiBSRkMtNjkwMiBKU09OLVBhdGNoIG9wZXJhdGlvbnMgdG8gdGhlIG1hbmlmZXN0XG4gICAqIHN5bnRoZXNpemVkIGZvciB0aGlzIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBvcHMgVGhlIEpTT04tUGF0Y2ggb3BlcmF0aW9ucyB0byBhcHBseS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICBrdWJlUG9kLmFkZEpzb25QYXRjaChKc29uUGF0Y2gucmVwbGFjZSgnL3NwZWMvZW5hYmxlU2VydmljZUxpbmtzJywgdHJ1ZSkpO1xuICAgKlxuICAgKi9cbiAgcHVibGljIGFkZEpzb25QYXRjaCguLi5vcHM6IEpzb25QYXRjaFtdKSB7XG4gICAgdGhpcy5wYXRjaGVzLnB1c2goLi4ub3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBvYmplY3QgdG8gS3ViZXJuZXRlcyBKU09OLlxuICAgKlxuICAgKiBUbyBkaXNhYmxlIHNvcnRpbmcgb2YgZGljdGlvbmFyeSBrZXlzIGluIG91dHB1dCBvYmplY3Qgc2V0IHRoZVxuICAgKiBgQ0RLOFNfRElTQUJMRV9TT1JUYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhbnkgbm9uLWVtcHR5IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YS50b0pzb24oKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc29ydEtleXMgPSBwcm9jZXNzLmVudi5DREs4U19ESVNBQkxFX1NPUlQgPyBmYWxzZSA6IHRydWU7XG4gICAgY29uc3QganNvbiA9IHNhbml0aXplVmFsdWUocmVzb2x2ZShkYXRhKSwgeyBzb3J0S2V5cyB9KTtcbiAgICBjb25zdCBwYXRjaGVkID0gSnNvblBhdGNoLmFwcGx5KGpzb24sIC4uLnRoaXMucGF0Y2hlcyk7XG5cbiAgICAvLyByZW9yZGVyIHRvcC1sZXZlbCBrZXlzIHNvIHRoYXQgd2UgZmlyc3QgaGF2ZSBcImFwaVZlcnNpb25cIiwgXCJraW5kXCIgYW5kXG4gICAgLy8gXCJtZXRhZGF0YVwiIGFuZCB0aGVuIGFsbCB0aGUgcmVzdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgY29uc3Qgb3JkZXJlZEtleXMgPSBbJ2FwaVZlcnNpb24nLCAna2luZCcsICdtZXRhZGF0YScsIC4uLk9iamVjdC5rZXlzKHBhdGNoZWQpXTtcbiAgICBmb3IgKGNvbnN0IGsgb2Ygb3JkZXJlZEtleXMpIHtcbiAgICAgIGlmIChrIGluIHBhdGNoZWQpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcGF0Y2hlZFtrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXBpR3JvdXAoYXBpVmVyc2lvbjogc3RyaW5nKSB7XG4gIGNvbnN0IHYgPSBhcGlWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgLy8gbm8gZ3JvdXAgbWVhbnMgXCJjb3JlXCJcbiAgLy8gaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvcmVmZXJlbmNlL3VzaW5nLWFwaS9hcGktb3ZlcnZpZXcvI2FwaS1ncm91cHNcbiAgaWYgKHYubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuICdjb3JlJztcbiAgfVxuXG4gIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiB2WzBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFwaVZlcnNpb24gJHthcGlWZXJzaW9ufSwgZXhwZWN0aW5nIEdST1VQL1ZFUlNJT04uIFNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvdXNpbmctYXBpL2FwaS1vdmVydmlldy8jYXBpLWdyb3Vwc2ApO1xufVxuIl19
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXlEO0FBQ3pELG1DQUF3QztBQUN4QyxtQ0FBZ0M7QUFDaEMsNkNBQXlDO0FBQ3pDLHlDQUE0RTtBQUM1RSx1Q0FBb0M7QUE0Q3BDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRXhELE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBRXRDOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBTTtRQUN2QixPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsMkJBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQVU7UUFDcEMsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFhO1FBQzVCLElBQUksQ0FBQyxZQUFZLFNBQVMsRUFBRTtZQUMxQixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsTUFBTSxLQUFLLEdBQUcsaUJBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxpQkFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hIO1FBRUQsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUEwQ0Q7Ozs7OztPQU1HO0lB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QUFDO2FBQ3hCO1NBQ0Y7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQXpLSCw4QkEwS0M7O0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBa0I7SUFDdkMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVoQyx3QkFBd0I7SUFDeEIsMEVBQTBFO0lBQzFFLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDYjtJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLFVBQVUsd0dBQXdHLENBQUMsQ0FBQztBQUM1SixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0LCBOb2RlIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBzYW5pdGl6ZVZhbHVlIH0gZnJvbSAnLi9fdXRpbCc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xuaW1wb3J0IHsgSnNvblBhdGNoIH0gZnJvbSAnLi9qc29uLXBhdGNoJztcbmltcG9ydCB7IEFwaU9iamVjdE1ldGFkYXRhLCBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24gfSBmcm9tICcuL21ldGFkYXRhJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICcuL3Jlc29sdmUnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGRlZmluaW5nIEFQSSBvYmplY3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9iamVjdFByb3BzIHtcbiAgLyoqXG4gICAqIE9iamVjdCBtZXRhZGF0YS5cbiAgICpcbiAgICogSWYgYG5hbWVgIGlzIG5vdCBzcGVjaWZpZWQsIGFuIGFwcC11bmlxdWUgbmFtZSB3aWxsIGJlIGFsbG9jYXRlZCBieSB0aGVcbiAgICogZnJhbWV3b3JrIGJhc2VkIG9uIHRoZSBwYXRoIG9mIHRoZSBjb25zdHJ1Y3Qgd2l0aGluIHRoZXMgY29uc3RydWN0IHRyZWUuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IEFwaU9iamVjdE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBBUEkgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2Uga2luZC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciB0aGlzIEFQSSBvYmplY3QuXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGs4cy10ZWFtL2NkazhzLWNvcmUvaXNzdWVzLzEyOTdcbiAgICovXG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cFZlcnNpb25LaW5kIHtcbiAgLyoqXG4gICAqIFRoZSBvYmplY3QncyBBUEkgdmVyc2lvbiAoZS5nLiBgYXV0aG9yaXphdGlvbi5rOHMuaW8vdjFgKVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IGtpbmQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmNvbnN0IEFQSV9PQkpFQ1RfU1lNQk9MID0gU3ltYm9sLmZvcignY2RrOHMuQXBpT2JqZWN0Jyk7XG5cbmV4cG9ydCBjbGFzcyBBcGlPYmplY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGFuIGBBcGlPYmplY3RgLlxuICAgKlxuICAgKiBXZSBkbyBhdHRyaWJ1dGUgZGV0ZWN0aW9uIHNpbmNlIHdlIGNhbid0IHJlbGlhYmx5IHVzZSAnaW5zdGFuY2VvZicuXG5cbiAgICogQHBhcmFtIG8gVGhlIG9iamVjdCB0byBjaGVja1xuICAgKi9cbiAgc3RhdGljIGlzQXBpT2JqZWN0KG86IGFueSk6IG8gaXMgQXBpT2JqZWN0IHtcbiAgICByZXR1cm4gbyAhPT0gbnVsbCAmJiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgQVBJX09CSkVDVF9TWU1CT0wgaW4gbztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRzIGBpbnN0YW5jZW9mIEFwaU9iamVjdGAgdXNpbmcgdGhlIG1vcmUgcmVsaWFibGUgYEFwaU9iamVjdC5pc0FwaU9iamVjdGAgc3RhdGljIG1ldGhvZFxuICAgKlxuICAgKiBAcGFyYW0gbyBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKG86IHVua25vd24pIHtcbiAgICByZXR1cm4gQXBpT2JqZWN0LmlzQXBpT2JqZWN0KG8pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgQXBpT2JqZWN0YCBuYW1lZCBgUmVzb3VyY2VgIHdoaWNoIGlzIGEgY2hpbGQgb2YgdGhlIGdpdmVuXG4gICAqIGNvbnN0cnVjdC4gSWYgYGNgIGlzIGFuIGBBcGlPYmplY3RgLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4gVGhyb3dzIGFuXG4gICAqIGV4Y2VwdGlvbiBpZiB0aGUgY29uc3RydWN0IGRvZXMgbm90IGhhdmUgYSBjaGlsZCBuYW1lZCBgRGVmYXVsdGAgX29yXyBpZlxuICAgKiB0aGlzIGNoaWxkIGlzIG5vdCBhbiBgQXBpT2JqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIGMgVGhlIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YoYzogSUNvbnN0cnVjdCk6IEFwaU9iamVjdCB7XG4gICAgaWYgKGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkID0gTm9kZS5vZihjKS5kZWZhdWx0Q2hpbGQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgZmluZCBhIChkaXJlY3Qgb3IgaW5kaXJlY3QpIGNoaWxkIG9mIHR5cGUgQXBpT2JqZWN0IGZvciBjb25zdHJ1Y3QgJHtOb2RlLm9mKGMpLnBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwaU9iamVjdC5vZihjaGlsZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIElmIGEgbmFtZSBpcyBzcGVjaWZpZWQgaW4gYG1ldGFkYXRhLm5hbWVgIHRoaXMgd2lsbCBiZSB0aGUgbmFtZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlLCBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgY2FsbGluZ1xuICAgKiBgQ2hhcnQub2YodGhpcykuZ2VuZXJhdGVkT2JqZWN0TmFtZSh0aGlzKWAsIHdoaWNoIGJ5IGRlZmF1bHQgdXNlcyB0aGVcbiAgICogY29uc3RydWN0IHBhdGggdG8gZ2VuZXJhdGUgYSBETlMtY29tcGF0aWJsZSBuYW1lIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0J3MgQVBJIHZlcnNpb24gKGUuZy4gYGF1dGhvcml6YXRpb24uazhzLmlvL3YxYClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBwb3J0aW9uIG9mIHRoZSBBUEkgdmVyc2lvbiAoZS5nLiBgYXV0aG9yaXphdGlvbi5rOHMuaW9gKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUdyb3VwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3Qga2luZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBpbiB3aGljaCB0aGlzIG9iamVjdCBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNoYXJ0OiBDaGFydDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVBJIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBKU09OIHBhdGNoIG9wZXJhdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGRvY3VtZW50IGFmdGVyIHN5bnRoZXNpcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGF0Y2hlczogQXJyYXk8SnNvblBhdGNoPjtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgbmFtZXNwYWNlXG4gICAqIEBwYXJhbSBwcm9wcyBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBcGlPYmplY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wYXRjaGVzID0gbmV3IEFycmF5PEpzb25QYXRjaD4oKTtcbiAgICB0aGlzLmNoYXJ0ID0gQ2hhcnQub2YodGhpcyk7XG4gICAgdGhpcy5raW5kID0gcHJvcHMua2luZDtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSBwcm9wcy5hcGlWZXJzaW9uO1xuICAgIHRoaXMuYXBpR3JvdXAgPSBwYXJzZUFwaUdyb3VwKHRoaXMuYXBpVmVyc2lvbik7XG5cbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5tZXRhZGF0YT8ubmFtZSA/PyB0aGlzLmNoYXJ0LmdlbmVyYXRlT2JqZWN0TmFtZSh0aGlzKTtcblxuICAgIHRoaXMubWV0YWRhdGEgPSBuZXcgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uKHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcblxuICAgICAgLy8gdXNlciBkZWZpbmVkIHZhbHVlc1xuICAgICAgLi4ucHJvcHMubWV0YWRhdGEsXG5cbiAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0YWRhdGE/Lm5hbWVzcGFjZSA/PyB0aGlzLmNoYXJ0Lm5hbWVzcGFjZSxcbiAgICAgIGxhYmVsczoge1xuICAgICAgICAuLi50aGlzLmNoYXJ0LmxhYmVscyxcbiAgICAgICAgLi4ucHJvcHMubWV0YWRhdGE/LmxhYmVscyxcbiAgICAgIH0sXG4gICAgICBhcGlPYmplY3Q6IHRoaXMsXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQVBJX09CSkVDVF9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoaXMgQXBpT2JqZWN0IGFuZCBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKiBUaGVzZSBjYW4gYmUgb3RoZXIgQXBpT2JqZWN0cywgQ2hhcnRzLCBvciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgdGhlIGRlcGVuZGVuY2llcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeSguLi5kZXBlbmRlbmNpZXM6IElDb25zdHJ1Y3RbXSkge1xuICAgIE5vZGUub2YodGhpcykuYWRkRGVwZW5kZW5jeSguLi5kZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBzZXQgb2YgUkZDLTY5MDIgSlNPTi1QYXRjaCBvcGVyYXRpb25zIHRvIHRoZSBtYW5pZmVzdFxuICAgKiBzeW50aGVzaXplZCBmb3IgdGhpcyBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3BzIFRoZSBKU09OLVBhdGNoIG9wZXJhdGlvbnMgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAga3ViZVBvZC5hZGRKc29uUGF0Y2goSnNvblBhdGNoLnJlcGxhY2UoJy9zcGVjL2VuYWJsZVNlcnZpY2VMaW5rcycsIHRydWUpKTtcbiAgICpcbiAgICovXG4gIHB1YmxpYyBhZGRKc29uUGF0Y2goLi4ub3BzOiBKc29uUGF0Y2hbXSkge1xuICAgIHRoaXMucGF0Y2hlcy5wdXNoKC4uLm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICpcbiAgICogVG8gZGlzYWJsZSBzb3J0aW5nIG9mIGRpY3Rpb25hcnkga2V5cyBpbiBvdXRwdXQgb2JqZWN0IHNldCB0aGVcbiAgICogYENESzhTX0RJU0FCTEVfU09SVGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYW55IG5vbi1lbXB0eSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGEudG9Kc29uKCksXG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnRLZXlzID0gcHJvY2Vzcy5lbnYuQ0RLOFNfRElTQUJMRV9TT1JUID8gZmFsc2UgOiB0cnVlO1xuICAgIGNvbnN0IGpzb24gPSBzYW5pdGl6ZVZhbHVlKHJlc29sdmUoW10sIGRhdGEsIHRoaXMpLCB7IHNvcnRLZXlzIH0pO1xuICAgIGNvbnN0IHBhdGNoZWQgPSBKc29uUGF0Y2guYXBwbHkoanNvbiwgLi4udGhpcy5wYXRjaGVzKTtcblxuICAgIC8vIHJlb3JkZXIgdG9wLWxldmVsIGtleXMgc28gdGhhdCB3ZSBmaXJzdCBoYXZlIFwiYXBpVmVyc2lvblwiLCBcImtpbmRcIiBhbmRcbiAgICAvLyBcIm1ldGFkYXRhXCIgYW5kIHRoZW4gYWxsIHRoZSByZXN0XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBjb25zdCBvcmRlcmVkS2V5cyA9IFsnYXBpVmVyc2lvbicsICdraW5kJywgJ21ldGFkYXRhJywgLi4uT2JqZWN0LmtleXMocGF0Y2hlZCldO1xuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkS2V5cykge1xuICAgICAgaWYgKGsgaW4gcGF0Y2hlZCkge1xuICAgICAgICByZXN1bHRba10gPSBwYXRjaGVkW2tdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBcGlHcm91cChhcGlWZXJzaW9uOiBzdHJpbmcpIHtcbiAgY29uc3QgdiA9IGFwaVZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAvLyBubyBncm91cCBtZWFucyBcImNvcmVcIlxuICAvLyBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvdXNpbmctYXBpL2FwaS1vdmVydmlldy8jYXBpLWdyb3Vwc1xuICBpZiAodi5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gJ2NvcmUnO1xuICB9XG5cbiAgaWYgKHYubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHZbMF07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYXBpVmVyc2lvbiAke2FwaVZlcnNpb259LCBleHBlY3RpbmcgR1JPVVAvVkVSU0lPTi4gU2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3JlZmVyZW5jZS91c2luZy1hcGkvYXBpLW92ZXJ2aWV3LyNhcGktZ3JvdXBzYCk7XG59XG4iXX0=
package/lib/app.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { Construct } from 'constructs';
1
+ import { Construct, IConstruct } from 'constructs';
2
2
  import { Chart } from './chart';
3
+ import { IResolver } from './resolve';
3
4
  /** The method to divide YAML output into files */
4
5
  export declare enum YamlOutputType {
5
6
  /** All resources are output into a single YAML file */
@@ -43,6 +44,17 @@ export interface AppProps {
43
44
  * @default false
44
45
  */
45
46
  readonly recordConstructMetadata?: boolean;
47
+ /**
48
+ * A list of resolvers that can be used to replace property values before
49
+ * they are written to the manifest file. When multiple resolvers are passed,
50
+ * they are invoked by order in the list, and only the first one that applies
51
+ * (e.g calls `context.replaceValue`) is invoked.
52
+ *
53
+ * @see https://cdk8s.io/docs/latest/basics/app/#resolvers
54
+ *
55
+ * @default - no resolvers.
56
+ */
57
+ readonly resolvers?: IResolver[];
46
58
  }
47
59
  /**
48
60
  * Represents a cdk8s application.
@@ -62,7 +74,7 @@ export declare class App extends Construct {
62
74
  * @internal
63
75
  */
64
76
  static _synthChart(chart: Chart): any[];
65
- private static of;
77
+ static of(c: IConstruct): App;
66
78
  /**
67
79
  * The output directory into which manifests will be synthesized.
68
80
  */
@@ -76,6 +88,11 @@ export declare class App extends Construct {
76
88
  * @default YamlOutputType.FILE_PER_CHART
77
89
  */
78
90
  readonly yamlOutputType: YamlOutputType;
91
+ /**
92
+ * Resolvers used by this app. This includes both custom resolvers
93
+ * passed by the `resolvers` property, as well as built-in resolvers.
94
+ */
95
+ readonly resolvers: IResolver[];
79
96
  private readonly recordConstructMetadata;
80
97
  /**
81
98
  * Returns all the charts in this app, sorted topologically.