cdk8s 2.2.10 → 2.2.14

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/.jsii CHANGED
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "bundled": {
10
10
  "fast-json-patch": "^2.2.1",
11
- "follow-redirects": "^1.14.7",
11
+ "follow-redirects": "^1.14.8",
12
12
  "yaml": "2.0.0-7"
13
13
  },
14
14
  "dependencies": {
@@ -46,7 +46,7 @@
46
46
  "stability": "stable"
47
47
  },
48
48
  "homepage": "https://github.com/cdk8s-team/cdk8s-core.git",
49
- "jsiiVersion": "1.52.1 (build 5ccc8f6)",
49
+ "jsiiVersion": "1.53.0 (build c071d26)",
50
50
  "keywords": [
51
51
  "cdk",
52
52
  "configuration",
@@ -3541,6 +3541,6 @@
3541
3541
  "symbolId": "src/app:YamlOutputType"
3542
3542
  }
3543
3543
  },
3544
- "version": "2.2.10",
3545
- "fingerprint": "FdO/HIrN+nzpd0uI7Q/UbeDO99zJTTQZU++T8LCSoDE="
3544
+ "version": "2.2.14",
3545
+ "fingerprint": "F738bNQbqMHmedMmCDC8qxzNzCoQLDawGJ6eARhNf5A="
3546
3546
  }
package/changelog.md CHANGED
@@ -1,2 +1,2 @@
1
1
 
2
- ### [2.2.10](https://github.com/cdk8s-team/cdk8s-core/compare/v2.2.9...v2.2.10) (2022-02-08)
2
+ ### [2.2.14](https://github.com/cdk8s-team/cdk8s-core/compare/v2.2.13...v2.2.14) (2022-02-12)
@@ -4,8 +4,6 @@ import { JsonPatch } from './json-patch';
4
4
  import { ApiObjectMetadata, ApiObjectMetadataDefinition } from './metadata';
5
5
  /**
6
6
  * Options for defining API objects.
7
- *
8
- * @stability stable
9
7
  */
10
8
  export interface ApiObjectProps {
11
9
  /**
@@ -13,20 +11,14 @@ export interface ApiObjectProps {
13
11
  *
14
12
  * If `name` is not specified, an app-unique name will be allocated by the
15
13
  * framework based on the path of the construct within thes construct tree.
16
- *
17
- * @stability stable
18
14
  */
19
15
  readonly metadata?: ApiObjectMetadata;
20
16
  /**
21
17
  * API version.
22
- *
23
- * @stability stable
24
18
  */
25
19
  readonly apiVersion: string;
26
20
  /**
27
21
  * Resource kind.
28
- *
29
- * @stability stable
30
22
  */
31
23
  readonly kind: string;
32
24
  /**
@@ -34,37 +26,25 @@ export interface ApiObjectProps {
34
26
  */
35
27
  readonly [key: string]: any;
36
28
  }
37
- /**
38
- * @stability stable
39
- */
40
29
  export interface GroupVersionKind {
41
30
  /**
42
- * The object's API version (e.g. `authorization.k8s.io/v1`).
43
- *
44
- * @stability stable
31
+ * The object's API version (e.g. `authorization.k8s.io/v1`)
45
32
  */
46
33
  readonly apiVersion: string;
47
34
  /**
48
35
  * The object kind.
49
- *
50
- * @stability stable
51
36
  */
52
37
  readonly kind: string;
53
38
  }
54
- /**
55
- * @stability stable
56
- */
57
39
  export declare class ApiObject extends Construct {
58
40
  private readonly props;
59
41
  /**
60
- * Returns the `ApiObject` named `Resource` which is a child of the given construct.
61
- *
62
- * If `c` is an `ApiObject`, it is returned directly. Throws an
42
+ * Returns the `ApiObject` named `Resource` which is a child of the given
43
+ * construct. If `c` is an `ApiObject`, it is returned directly. Throws an
63
44
  * exception if the construct does not have a child named `Default` _or_ if
64
45
  * this child is not an `ApiObject`.
65
46
  *
66
- * @param c The higher-level construct.
67
- * @stability stable
47
+ * @param c The higher-level construct
68
48
  */
69
49
  static of(c: IConstruct): ApiObject;
70
50
  /**
@@ -74,38 +54,26 @@ export declare class ApiObject extends Construct {
74
54
  * Otherwise, a name will be generated by calling
75
55
  * `Chart.of(this).generatedObjectName(this)`, which by default uses the
76
56
  * construct path to generate a DNS-compatible name for the resource.
77
- *
78
- * @stability stable
79
57
  */
80
58
  readonly name: string;
81
59
  /**
82
- * The object's API version (e.g. `authorization.k8s.io/v1`).
83
- *
84
- * @stability stable
60
+ * The object's API version (e.g. `authorization.k8s.io/v1`)
85
61
  */
86
62
  readonly apiVersion: string;
87
63
  /**
88
- * The group portion of the API version (e.g. `authorization.k8s.io`).
89
- *
90
- * @stability stable
64
+ * The group portion of the API version (e.g. `authorization.k8s.io`)
91
65
  */
92
66
  readonly apiGroup: string;
93
67
  /**
94
68
  * The object kind.
95
- *
96
- * @stability stable
97
69
  */
98
70
  readonly kind: string;
99
71
  /**
100
72
  * The chart in which this object is defined.
101
- *
102
- * @stability stable
103
73
  */
104
74
  readonly chart: Chart;
105
75
  /**
106
76
  * Metadata associated with this API object.
107
- *
108
- * @stability stable
109
77
  */
110
78
  readonly metadata: ApiObjectMetadataDefinition;
111
79
  /**
@@ -115,29 +83,28 @@ export declare class ApiObject extends Construct {
115
83
  /**
116
84
  * Defines an API object.
117
85
  *
118
- * @param scope the construct scope.
119
- * @param id namespace.
120
- * @param props options.
121
- * @stability stable
86
+ * @param scope the construct scope
87
+ * @param id namespace
88
+ * @param props options
122
89
  */
123
90
  constructor(scope: Construct, id: string, props: ApiObjectProps);
124
91
  /**
125
92
  * Create a dependency between this ApiObject and other constructs.
126
- *
127
93
  * These can be other ApiObjects, Charts, or custom.
128
94
  *
129
95
  * @param dependencies the dependencies to add.
130
- * @stability stable
131
96
  */
132
97
  addDependency(...dependencies: IConstruct[]): void;
133
98
  /**
134
- * Applies a set of RFC-6902 JSON-Patch operations to the manifest synthesized for this API object.
99
+ * Applies a set of RFC-6902 JSON-Patch operations to the manifest
100
+ * synthesized for this API object.
135
101
  *
136
102
  * @param ops The JSON-Patch operations to apply.
137
- * @stability stable
103
+ *
138
104
  * @example
139
105
  *
140
106
  * kubePod.addJsonPatch(JsonPatch.replace('/spec/enableServiceLinks', true));
107
+ *
141
108
  */
142
109
  addJsonPatch(...ops: JsonPatch[]): void;
143
110
  /**
@@ -145,8 +112,6 @@ export declare class ApiObject extends Construct {
145
112
  *
146
113
  * To disable sorting of dictionary keys in output object set the
147
114
  * `CDK8S_DISABLE_SORT` environment variable to any non-empty value.
148
- *
149
- * @stability stable
150
115
  */
151
116
  toJson(): any;
152
117
  }
package/lib/api-object.js CHANGED
@@ -9,17 +9,13 @@ const _util_1 = require("./_util");
9
9
  const chart_1 = require("./chart");
10
10
  const json_patch_1 = require("./json-patch");
11
11
  const metadata_1 = require("./metadata");
12
- /**
13
- * @stability stable
14
- */
15
12
  class ApiObject extends constructs_1.Construct {
16
13
  /**
17
14
  * Defines an API object.
18
15
  *
19
- * @param scope the construct scope.
20
- * @param id namespace.
21
- * @param props options.
22
- * @stability stable
16
+ * @param scope the construct scope
17
+ * @param id namespace
18
+ * @param props options
23
19
  */
24
20
  constructor(scope, id, props) {
25
21
  var _b, _c, _d, _e, _f;
@@ -43,14 +39,12 @@ class ApiObject extends constructs_1.Construct {
43
39
  });
44
40
  }
45
41
  /**
46
- * Returns the `ApiObject` named `Resource` which is a child of the given construct.
47
- *
48
- * If `c` is an `ApiObject`, it is returned directly. Throws an
42
+ * Returns the `ApiObject` named `Resource` which is a child of the given
43
+ * construct. If `c` is an `ApiObject`, it is returned directly. Throws an
49
44
  * exception if the construct does not have a child named `Default` _or_ if
50
45
  * this child is not an `ApiObject`.
51
46
  *
52
- * @param c The higher-level construct.
53
- * @stability stable
47
+ * @param c The higher-level construct
54
48
  */
55
49
  static of(c) {
56
50
  if (c instanceof ApiObject) {
@@ -64,23 +58,23 @@ class ApiObject extends constructs_1.Construct {
64
58
  }
65
59
  /**
66
60
  * Create a dependency between this ApiObject and other constructs.
67
- *
68
61
  * These can be other ApiObjects, Charts, or custom.
69
62
  *
70
63
  * @param dependencies the dependencies to add.
71
- * @stability stable
72
64
  */
73
65
  addDependency(...dependencies) {
74
66
  constructs_1.Node.of(this).addDependency(...dependencies);
75
67
  }
76
68
  /**
77
- * Applies a set of RFC-6902 JSON-Patch operations to the manifest synthesized for this API object.
69
+ * Applies a set of RFC-6902 JSON-Patch operations to the manifest
70
+ * synthesized for this API object.
78
71
  *
79
72
  * @param ops The JSON-Patch operations to apply.
80
- * @stability stable
73
+ *
81
74
  * @example
82
75
  *
83
76
  * kubePod.addJsonPatch(JsonPatch.replace('/spec/enableServiceLinks', true));
77
+ *
84
78
  */
85
79
  addJsonPatch(...ops) {
86
80
  this.patches.push(...ops);
@@ -90,8 +84,6 @@ class ApiObject extends constructs_1.Construct {
90
84
  *
91
85
  * To disable sorting of dictionary keys in output object set the
92
86
  * `CDK8S_DISABLE_SORT` environment variable to any non-empty value.
93
- *
94
- * @stability stable
95
87
  */
96
88
  toJson() {
97
89
  const data = {
@@ -115,7 +107,7 @@ class ApiObject extends constructs_1.Construct {
115
107
  }
116
108
  exports.ApiObject = ApiObject;
117
109
  _a = JSII_RTTI_SYMBOL_1;
118
- ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "2.2.10" };
110
+ ApiObject[_a] = { fqn: "cdk8s.ApiObject", version: "2.2.14" };
119
111
  function parseApiGroup(apiVersion) {
120
112
  const v = apiVersion.split('/');
121
113
  // no group means "core"
@@ -128,4 +120,4 @@ function parseApiGroup(apiVersion) {
128
120
  }
129
121
  throw new Error(`invalid apiVersion ${apiVersion}, expecting GROUP/VERSION. See https://kubernetes.io/docs/reference/using-api/api-overview/#api-groups`);
130
122
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXlEO0FBQ3pELHlDQUFxQztBQUNyQyxtQ0FBd0M7QUFDeEMsbUNBQWdDO0FBQ2hDLDZDQUF5QztBQUN6Qyx5Q0FBNEU7Ozs7QUEyQjVFLE1BQWEsU0FBVSxTQUFRLHNCQUFTOzs7Ozs7Ozs7SUF1Q3RDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQW1CLEtBQXFCOztRQUM5RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRHdDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBRTlFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksZUFBRyxLQUFLLENBQUMsUUFBUSwwQ0FBRSxJQUFJLG1DQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNDQUEyQixDQUFDO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUVmLHNCQUFzQjtZQUN0QixHQUFHLEtBQUssQ0FBQyxRQUFRO1lBRWpCLFNBQVMsY0FBRSxLQUFLLENBQUMsUUFBUSwwQ0FBRSxTQUFTLG1DQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUM1RCxNQUFNLEVBQUU7Z0JBQ04sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQ3BCLFNBQUcsS0FBSyxDQUFDLFFBQVEsMENBQUUsTUFBTTthQUMxQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7Ozs7Ozs7O0lBM0RNLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBYTtRQUM1QixJQUFJLENBQUMsWUFBWSxTQUFTLEVBQUU7WUFDMUIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLGlCQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsaUJBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoSDtRQUVELE9BQU8sU0FBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDOzs7Ozs7Ozs7SUFtRE0sYUFBYSxDQUFDLEdBQUcsWUFBMEI7UUFDaEQsaUJBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7Ozs7Ozs7OztJQUdNLFlBQVksQ0FBQyxHQUFHLEdBQWdCO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQzs7Ozs7Ozs7O0lBR00sTUFBTTtRQUNYLE1BQU0sSUFBSSxHQUFRO1lBQ2hCLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7U0FDakMsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9ELE1BQU0sSUFBSSxHQUFHLHFCQUFhLENBQUMsa0JBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQUcsc0JBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZELHdFQUF3RTtRQUN4RSxtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEYsS0FBSyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksT0FBTyxFQUFFO2dCQUNoQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hCO1NBQ0Y7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztBQS9GSCw4QkFnR0M7OztBQUVELFNBQVMsYUFBYSxDQUFDLFVBQWtCO0lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEMsd0JBQXdCO0lBQ3hCLDBFQUEwRTtJQUMxRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2I7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixVQUFVLHdHQUF3RyxDQUFDLENBQUM7QUFDNUosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCwgTm9kZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJy4vX3Jlc29sdmUnO1xuaW1wb3J0IHsgc2FuaXRpemVWYWx1ZSB9IGZyb20gJy4vX3V0aWwnO1xuaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcbmltcG9ydCB7IEpzb25QYXRjaCB9IGZyb20gJy4vanNvbi1wYXRjaCc7XG5pbXBvcnQgeyBBcGlPYmplY3RNZXRhZGF0YSwgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRhZGF0YSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9iamVjdFByb3BzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYXBpVmVyc2lvbjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciB0aGlzIEFQSSBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBWZXJzaW9uS2luZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlPYmplY3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBzdGF0aWMgb2YoYzogSUNvbnN0cnVjdCk6IEFwaU9iamVjdCB7XG4gICAgaWYgKGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkID0gTm9kZS5vZihjKS5kZWZhdWx0Q2hpbGQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgZmluZCBhIChkaXJlY3Qgb3IgaW5kaXJlY3QpIGNoaWxkIG9mIHR5cGUgQXBpT2JqZWN0IGZvciBjb25zdHJ1Y3QgJHtOb2RlLm9mKGMpLnBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwaU9iamVjdC5vZihjaGlsZCk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBhcGlHcm91cDogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNoYXJ0OiBDaGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgbWV0YWRhdGE6IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbjtcblxuICAvKipcbiAgICogQSBzZXQgb2YgSlNPTiBwYXRjaCBvcGVyYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBkb2N1bWVudCBhZnRlciBzeW50aGVzaXMuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhdGNoZXM6IEFycmF5PEpzb25QYXRjaD47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXBpT2JqZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucGF0Y2hlcyA9IG5ldyBBcnJheTxKc29uUGF0Y2g+KCk7XG4gICAgdGhpcy5jaGFydCA9IENoYXJ0Lm9mKHRoaXMpO1xuICAgIHRoaXMua2luZCA9IHByb3BzLmtpbmQ7XG4gICAgdGhpcy5hcGlWZXJzaW9uID0gcHJvcHMuYXBpVmVyc2lvbjtcbiAgICB0aGlzLmFwaUdyb3VwID0gcGFyc2VBcGlHcm91cCh0aGlzLmFwaVZlcnNpb24pO1xuXG4gICAgdGhpcy5uYW1lID0gcHJvcHMubWV0YWRhdGE/Lm5hbWUgPz8gdGhpcy5jaGFydC5nZW5lcmF0ZU9iamVjdE5hbWUodGhpcyk7XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gbmV3IEFwaU9iamVjdE1ldGFkYXRhRGVmaW5pdGlvbih7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG5cbiAgICAgIC8vIHVzZXIgZGVmaW5lZCB2YWx1ZXNcbiAgICAgIC4uLnByb3BzLm1ldGFkYXRhLFxuXG4gICAgICBuYW1lc3BhY2U6IHByb3BzLm1ldGFkYXRhPy5uYW1lc3BhY2UgPz8gdGhpcy5jaGFydC5uYW1lc3BhY2UsXG4gICAgICBsYWJlbHM6IHtcbiAgICAgICAgLi4udGhpcy5jaGFydC5sYWJlbHMsXG4gICAgICAgIC4uLnByb3BzLm1ldGFkYXRhPy5sYWJlbHMsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llczogSUNvbnN0cnVjdFtdKSB7XG4gICAgTm9kZS5vZih0aGlzKS5hZGREZXBlbmRlbmN5KC4uLmRlcGVuZGVuY2llcyk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkSnNvblBhdGNoKC4uLm9wczogSnNvblBhdGNoW10pIHtcbiAgICB0aGlzLnBhdGNoZXMucHVzaCguLi5vcHMpO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHRvSnNvbigpOiBhbnkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMsXG4gICAgICBtZXRhZGF0YTogdGhpcy5tZXRhZGF0YS50b0pzb24oKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc29ydEtleXMgPSBwcm9jZXNzLmVudi5DREs4U19ESVNBQkxFX1NPUlQgPyBmYWxzZSA6IHRydWU7XG4gICAgY29uc3QganNvbiA9IHNhbml0aXplVmFsdWUocmVzb2x2ZShkYXRhKSwgeyBzb3J0S2V5cyB9KTtcbiAgICBjb25zdCBwYXRjaGVkID0gSnNvblBhdGNoLmFwcGx5KGpzb24sIC4uLnRoaXMucGF0Y2hlcyk7XG5cbiAgICAvLyByZW9yZGVyIHRvcC1sZXZlbCBrZXlzIHNvIHRoYXQgd2UgZmlyc3QgaGF2ZSBcImFwaVZlcnNpb25cIiwgXCJraW5kXCIgYW5kXG4gICAgLy8gXCJtZXRhZGF0YVwiIGFuZCB0aGVuIGFsbCB0aGUgcmVzdFxuICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgY29uc3Qgb3JkZXJlZEtleXMgPSBbJ2FwaVZlcnNpb24nLCAna2luZCcsICdtZXRhZGF0YScsIC4uLk9iamVjdC5rZXlzKHBhdGNoZWQpXTtcbiAgICBmb3IgKGNvbnN0IGsgb2Ygb3JkZXJlZEtleXMpIHtcbiAgICAgIGlmIChrIGluIHBhdGNoZWQpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcGF0Y2hlZFtrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXBpR3JvdXAoYXBpVmVyc2lvbjogc3RyaW5nKSB7XG4gIGNvbnN0IHYgPSBhcGlWZXJzaW9uLnNwbGl0KCcvJyk7XG5cbiAgLy8gbm8gZ3JvdXAgbWVhbnMgXCJjb3JlXCJcbiAgLy8gaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvcmVmZXJlbmNlL3VzaW5nLWFwaS9hcGktb3ZlcnZpZXcvI2FwaS1ncm91cHNcbiAgaWYgKHYubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuICdjb3JlJztcbiAgfVxuXG4gIGlmICh2Lmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiB2WzBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFwaVZlcnNpb24gJHthcGlWZXJzaW9ufSwgZXhwZWN0aW5nIEdST1VQL1ZFUlNJT04uIFNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9yZWZlcmVuY2UvdXNpbmctYXBpL2FwaS1vdmVydmlldy8jYXBpLWdyb3Vwc2ApO1xufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXlEO0FBQ3pELHlDQUFxQztBQUNyQyxtQ0FBd0M7QUFDeEMsbUNBQWdDO0FBQ2hDLDZDQUF5QztBQUN6Qyx5Q0FBNEU7QUEwQzVFLE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBOER0Qzs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFtQixLQUFxQjs7UUFDOUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUR3QyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUU5RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFhLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxJQUFJLGVBQUcsS0FBSyxDQUFDLFFBQVEsMENBQUUsSUFBSSxtQ0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQ0FBMkIsQ0FBQztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFFZixzQkFBc0I7WUFDdEIsR0FBRyxLQUFLLENBQUMsUUFBUTtZQUVqQixTQUFTLGNBQUUsS0FBSyxDQUFDLFFBQVEsMENBQUUsU0FBUyxtQ0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDNUQs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ZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnLi9fcmVzb2x2ZSc7XG5pbXBvcnQgeyBzYW5pdGl6ZVZhbHVlIH0gZnJvbSAnLi9fdXRpbCc7XG5pbXBvcnQgeyBDaGFydCB9IGZyb20gJy4vY2hhcnQnO1xuaW1wb3J0IHsgSnNvblBhdGNoIH0gZnJvbSAnLi9qc29uLXBhdGNoJztcbmltcG9ydCB7IEFwaU9iamVjdE1ldGFkYXRhLCBBcGlPYmplY3RNZXRhZGF0YURlZmluaXRpb24gfSBmcm9tICcuL21ldGFkYXRhJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBkZWZpbmluZyBBUEkgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlPYmplY3RQcm9wcyB7XG4gIC8qKlxuICAgKiBPYmplY3QgbWV0YWRhdGEuXG4gICAqXG4gICAqIElmIGBuYW1lYCBpcyBub3Qgc3BlY2lmaWVkLCBhbiBhcHAtdW5pcXVlIG5hbWUgd2lsbCBiZSBhbGxvY2F0ZWQgYnkgdGhlXG4gICAqIGZyYW1ld29yayBiYXNlZCBvbiB0aGUgcGF0aCBvZiB0aGUgY29uc3RydWN0IHdpdGhpbiB0aGVzIGNvbnN0cnVjdCB0cmVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiBBcGlPYmplY3RNZXRhZGF0YTtcblxuICAvKipcbiAgICogQVBJIHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIGtpbmQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXR0cmlidXRlcyBmb3IgdGhpcyBBUEkgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwVmVyc2lvbktpbmQge1xuICAvKipcbiAgICogVGhlIG9iamVjdCdzIEFQSSB2ZXJzaW9uIChlLmcuIGBhdXRob3JpemF0aW9uLms4cy5pby92MWApXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3Qga2luZC5cbiAgICovXG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFwaU9iamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgQXBpT2JqZWN0YCBuYW1lZCBgUmVzb3VyY2VgIHdoaWNoIGlzIGEgY2hpbGQgb2YgdGhlIGdpdmVuXG4gICAqIGNvbnN0cnVjdC4gSWYgYGNgIGlzIGFuIGBBcGlPYmplY3RgLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4gVGhyb3dzIGFuXG4gICAqIGV4Y2VwdGlvbiBpZiB0aGUgY29uc3RydWN0IGRvZXMgbm90IGhhdmUgYSBjaGlsZCBuYW1lZCBgRGVmYXVsdGAgX29yXyBpZlxuICAgKiB0aGlzIGNoaWxkIGlzIG5vdCBhbiBgQXBpT2JqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIGMgVGhlIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YoYzogSUNvbnN0cnVjdCk6IEFwaU9iamVjdCB7XG4gICAgaWYgKGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpIHtcbiAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkID0gTm9kZS5vZihjKS5kZWZhdWx0Q2hpbGQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgZmluZCBhIChkaXJlY3Qgb3IgaW5kaXJlY3QpIGNoaWxkIG9mIHR5cGUgQXBpT2JqZWN0IGZvciBjb25zdHJ1Y3QgJHtOb2RlLm9mKGMpLnBhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwaU9iamVjdC5vZihjaGlsZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSBvYmplY3QuXG4gICAqXG4gICAqIElmIGEgbmFtZSBpcyBzcGVjaWZpZWQgaW4gYG1ldGFkYXRhLm5hbWVgIHRoaXMgd2lsbCBiZSB0aGUgbmFtZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlLCBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgY2FsbGluZ1xuICAgKiBgQ2hhcnQub2YodGhpcykuZ2VuZXJhdGVkT2JqZWN0TmFtZSh0aGlzKWAsIHdoaWNoIGJ5IGRlZmF1bHQgdXNlcyB0aGVcbiAgICogY29uc3RydWN0IHBhdGggdG8gZ2VuZXJhdGUgYSBETlMtY29tcGF0aWJsZSBuYW1lIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0J3MgQVBJIHZlcnNpb24gKGUuZy4gYGF1dGhvcml6YXRpb24uazhzLmlvL3YxYClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBncm91cCBwb3J0aW9uIG9mIHRoZSBBUEkgdmVyc2lvbiAoZS5nLiBgYXV0aG9yaXphdGlvbi5rOHMuaW9gKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUdyb3VwOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3Qga2luZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBraW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFydCBpbiB3aGljaCB0aGlzIG9iamVjdCBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNoYXJ0OiBDaGFydDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgQVBJIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YTogQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uO1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBKU09OIHBhdGNoIG9wZXJhdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGRvY3VtZW50IGFmdGVyIHN5bnRoZXNpcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGF0Y2hlczogQXJyYXk8SnNvblBhdGNoPjtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgbmFtZXNwYWNlXG4gICAqIEBwYXJhbSBwcm9wcyBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBcGlPYmplY3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wYXRjaGVzID0gbmV3IEFycmF5PEpzb25QYXRjaD4oKTtcbiAgICB0aGlzLmNoYXJ0ID0gQ2hhcnQub2YodGhpcyk7XG4gICAgdGhpcy5raW5kID0gcHJvcHMua2luZDtcbiAgICB0aGlzLmFwaVZlcnNpb24gPSBwcm9wcy5hcGlWZXJzaW9uO1xuICAgIHRoaXMuYXBpR3JvdXAgPSBwYXJzZUFwaUdyb3VwKHRoaXMuYXBpVmVyc2lvbik7XG5cbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5tZXRhZGF0YT8ubmFtZSA/PyB0aGlzLmNoYXJ0LmdlbmVyYXRlT2JqZWN0TmFtZSh0aGlzKTtcblxuICAgIHRoaXMubWV0YWRhdGEgPSBuZXcgQXBpT2JqZWN0TWV0YWRhdGFEZWZpbml0aW9uKHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcblxuICAgICAgLy8gdXNlciBkZWZpbmVkIHZhbHVlc1xuICAgICAgLi4ucHJvcHMubWV0YWRhdGEsXG5cbiAgICAgIG5hbWVzcGFjZTogcHJvcHMubWV0YWRhdGE/Lm5hbWVzcGFjZSA/PyB0aGlzLmNoYXJ0Lm5hbWVzcGFjZSxcbiAgICAgIGxhYmVsczoge1xuICAgICAgICAuLi50aGlzLmNoYXJ0LmxhYmVscyxcbiAgICAgICAgLi4ucHJvcHMubWV0YWRhdGE/LmxhYmVscyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGVwZW5kZW5jeSBiZXR3ZWVuIHRoaXMgQXBpT2JqZWN0IGFuZCBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKiBUaGVzZSBjYW4gYmUgb3RoZXIgQXBpT2JqZWN0cywgQ2hhcnRzLCBvciBjdXN0b20uXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgdGhlIGRlcGVuZGVuY2llcyB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeSguLi5kZXBlbmRlbmNpZXM6IElDb25zdHJ1Y3RbXSkge1xuICAgIE5vZGUub2YodGhpcykuYWRkRGVwZW5kZW5jeSguLi5kZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBzZXQgb2YgUkZDLTY5MDIgSlNPTi1QYXRjaCBvcGVyYXRpb25zIHRvIHRoZSBtYW5pZmVzdFxuICAgKiBzeW50aGVzaXplZCBmb3IgdGhpcyBBUEkgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3BzIFRoZSBKU09OLVBhdGNoIG9wZXJhdGlvbnMgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAga3ViZVBvZC5hZGRKc29uUGF0Y2goSnNvblBhdGNoLnJlcGxhY2UoJy9zcGVjL2VuYWJsZVNlcnZpY2VMaW5rcycsIHRydWUpKTtcbiAgICpcbiAgICovXG4gIHB1YmxpYyBhZGRKc29uUGF0Y2goLi4ub3BzOiBKc29uUGF0Y2hbXSkge1xuICAgIHRoaXMucGF0Y2hlcy5wdXNoKC4uLm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgb2JqZWN0IHRvIEt1YmVybmV0ZXMgSlNPTi5cbiAgICpcbiAgICogVG8gZGlzYWJsZSBzb3J0aW5nIG9mIGRpY3Rpb25hcnkga2V5cyBpbiBvdXRwdXQgb2JqZWN0IHNldCB0aGVcbiAgICogYENESzhTX0RJU0FCTEVfU09SVGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYW55IG5vbi1lbXB0eSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyB0b0pzb24oKTogYW55IHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgbWV0YWRhdGE6IHRoaXMubWV0YWRhdGEudG9Kc29uKCksXG4gICAgfTtcblxuICAgIGNvbnN0IHNvcnRLZXlzID0gcHJvY2Vzcy5lbnYuQ0RLOFNfRElTQUJMRV9TT1JUID8gZmFsc2UgOiB0cnVlO1xuICAgIGNvbnN0IGpzb24gPSBzYW5pdGl6ZVZhbHVlKHJlc29sdmUoZGF0YSksIHsgc29ydEtleXMgfSk7XG4gICAgY29uc3QgcGF0Y2hlZCA9IEpzb25QYXRjaC5hcHBseShqc29uLCAuLi50aGlzLnBhdGNoZXMpO1xuXG4gICAgLy8gcmVvcmRlciB0b3AtbGV2ZWwga2V5cyBzbyB0aGF0IHdlIGZpcnN0IGhhdmUgXCJhcGlWZXJzaW9uXCIsIFwia2luZFwiIGFuZFxuICAgIC8vIFwibWV0YWRhdGFcIiBhbmQgdGhlbiBhbGwgdGhlIHJlc3RcbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgIGNvbnN0IG9yZGVyZWRLZXlzID0gWydhcGlWZXJzaW9uJywgJ2tpbmQnLCAnbWV0YWRhdGEnLCAuLi5PYmplY3Qua2V5cyhwYXRjaGVkKV07XG4gICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRLZXlzKSB7XG4gICAgICBpZiAoayBpbiBwYXRjaGVkKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IHBhdGNoZWRba107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUFwaUdyb3VwKGFwaVZlcnNpb246IHN0cmluZykge1xuICBjb25zdCB2ID0gYXBpVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gIC8vIG5vIGdyb3VwIG1lYW5zIFwiY29yZVwiXG4gIC8vIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3JlZmVyZW5jZS91c2luZy1hcGkvYXBpLW92ZXJ2aWV3LyNhcGktZ3JvdXBzXG4gIGlmICh2Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiAnY29yZSc7XG4gIH1cblxuICBpZiAodi5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gdlswXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBhcGlWZXJzaW9uICR7YXBpVmVyc2lvbn0sIGV4cGVjdGluZyBHUk9VUC9WRVJTSU9OLiBTZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvcmVmZXJlbmNlL3VzaW5nLWFwaS9hcGktb3ZlcnZpZXcvI2FwaS1ncm91cHNgKTtcbn1cbiJdfQ==
package/lib/app.d.ts CHANGED
@@ -1,66 +1,36 @@
1
1
  import { Construct } from 'constructs';
2
2
  import { Chart } from './chart';
3
- /**
4
- * The method to divide YAML output into files.
5
- *
6
- * @stability stable
7
- */
3
+ /** The method to divide YAML output into files */
8
4
  export declare enum YamlOutputType {
9
- /**
10
- * All resources are output into a single YAML file.
11
- *
12
- * @stability stable
13
- */
5
+ /** All resources are output into a single YAML file */
14
6
  FILE_PER_APP = 0,
15
- /**
16
- * Resources are split into seperate files by chart.
17
- *
18
- * @stability stable
19
- */
7
+ /** Resources are split into seperate files by chart */
20
8
  FILE_PER_CHART = 1,
21
- /**
22
- * Each resource is output to its own file.
23
- *
24
- * @stability stable
25
- */
9
+ /** Each resource is output to its own file */
26
10
  FILE_PER_RESOURCE = 2,
27
- /**
28
- * Each chart in its own folder and each resource in its own file.
29
- *
30
- * @stability stable
31
- */
11
+ /** Each chart in its own folder and each resource in its own file */
32
12
  FOLDER_PER_CHART_FILE_PER_RESOURCE = 3
33
13
  }
34
- /**
35
- * @stability stable
36
- */
37
14
  export interface AppProps {
38
15
  /**
39
16
  * The directory to output Kubernetes manifests.
40
17
  *
41
18
  * @default - CDK8S_OUTDIR if defined, otherwise "dist"
42
- * @stability stable
43
19
  */
44
20
  readonly outdir?: string;
45
21
  /**
46
- * The file extension to use for rendered YAML files.
47
- *
22
+ * The file extension to use for rendered YAML files
48
23
  * @default .k8s.yaml
49
- * @stability stable
50
24
  */
51
25
  readonly outputFileExtension?: string;
52
26
  /**
53
- * How to divide the YAML output into files.
54
- *
27
+ * How to divide the YAML output into files
55
28
  * @default YamlOutputType.FILE_PER_CHART
56
- * @stability stable
57
29
  */
58
30
  readonly yamlOutputType?: YamlOutputType;
59
31
  }
60
32
  /**
61
33
  * Represents a cdk8s application.
62
- *
63
- * @stability stable
64
34
  */
65
35
  export declare class App extends Construct {
66
36
  /**
@@ -80,48 +50,34 @@ export declare class App extends Construct {
80
50
  private static of;
81
51
  /**
82
52
  * The output directory into which manifests will be synthesized.
83
- *
84
- * @stability stable
85
53
  */
86
54
  readonly outdir: string;
87
55
  /**
88
- * The file extension to use for rendered YAML files.
89
- *
56
+ * The file extension to use for rendered YAML files
90
57
  * @default .k8s.yaml
91
- * @stability stable
92
58
  */
93
59
  readonly outputFileExtension: string;
94
- /**
95
- * How to divide the YAML output into files.
96
- *
60
+ /** How to divide the YAML output into files
97
61
  * @default YamlOutputType.FILE_PER_CHART
98
- * @stability stable
99
62
  */
100
63
  readonly yamlOutputType: YamlOutputType;
101
64
  /**
102
65
  * Returns all the charts in this app, sorted topologically.
103
- *
104
- * @stability stable
105
66
  */
106
67
  get charts(): Chart[];
107
68
  /**
108
- * Defines an app.
109
- *
110
- * @param props configuration options.
111
- * @stability stable
69
+ * Defines an app
70
+ * @param props configuration options
112
71
  */
113
72
  constructor(props?: AppProps);
114
73
  /**
115
- * Synthesizes all manifests to the output directory.
116
- *
117
- * @stability stable
74
+ * Synthesizes all manifests to the output directory
118
75
  */
119
76
  synth(): void;
120
77
  /**
121
78
  * Synthesizes the app into a YAML string.
122
79
  *
123
80
  * @returns A string with all YAML objects across all charts in this app.
124
- * @stability stable
125
81
  */
126
82
  synthYaml(): any;
127
83
  }
package/lib/app.js CHANGED
@@ -11,29 +11,25 @@ const chart_1 = require("./chart");
11
11
  const dependency_1 = require("./dependency");
12
12
  const names_1 = require("./names");
13
13
  const yaml_1 = require("./yaml");
14
- /**
15
- * The method to divide YAML output into files.
16
- *
17
- * @stability stable
18
- */
14
+ /** The method to divide YAML output into files */
19
15
  var YamlOutputType;
20
16
  (function (YamlOutputType) {
17
+ /** All resources are output into a single YAML file */
21
18
  YamlOutputType[YamlOutputType["FILE_PER_APP"] = 0] = "FILE_PER_APP";
19
+ /** Resources are split into seperate files by chart */
22
20
  YamlOutputType[YamlOutputType["FILE_PER_CHART"] = 1] = "FILE_PER_CHART";
21
+ /** Each resource is output to its own file */
23
22
  YamlOutputType[YamlOutputType["FILE_PER_RESOURCE"] = 2] = "FILE_PER_RESOURCE";
23
+ /** Each chart in its own folder and each resource in its own file */
24
24
  YamlOutputType[YamlOutputType["FOLDER_PER_CHART_FILE_PER_RESOURCE"] = 3] = "FOLDER_PER_CHART_FILE_PER_RESOURCE";
25
25
  })(YamlOutputType = exports.YamlOutputType || (exports.YamlOutputType = {}));
26
26
  /**
27
27
  * Represents a cdk8s application.
28
- *
29
- * @stability stable
30
28
  */
31
29
  class App extends constructs_1.Construct {
32
30
  /**
33
- * Defines an app.
34
- *
35
- * @param props configuration options.
36
- * @stability stable
31
+ * Defines an app
32
+ * @param props configuration options
37
33
  */
38
34
  constructor(props = {}) {
39
35
  var _b, _c, _d, _e;
@@ -76,8 +72,6 @@ class App extends constructs_1.Construct {
76
72
  }
77
73
  /**
78
74
  * Returns all the charts in this app, sorted topologically.
79
- *
80
- * @stability stable
81
75
  */
82
76
  get charts() {
83
77
  const isChart = (x) => x instanceof chart_1.Chart;
@@ -86,9 +80,7 @@ class App extends constructs_1.Construct {
86
80
  .filter(isChart);
87
81
  }
88
82
  /**
89
- * Synthesizes all manifests to the output directory.
90
- *
91
- * @stability stable
83
+ * Synthesizes all manifests to the output directory
92
84
  */
93
85
  synth() {
94
86
  fs.mkdirSync(this.outdir, { recursive: true });
@@ -154,7 +146,6 @@ class App extends constructs_1.Construct {
154
146
  * Synthesizes the app into a YAML string.
155
147
  *
156
148
  * @returns A string with all YAML objects across all charts in this app.
157
- * @stability stable
158
149
  */
159
150
  synthYaml() {
160
151
  validate(this);
@@ -169,7 +160,7 @@ class App extends constructs_1.Construct {
169
160
  }
170
161
  exports.App = App;
171
162
  _a = JSII_RTTI_SYMBOL_1;
172
- App[_a] = { fqn: "cdk8s.App", version: "2.2.10" };
163
+ App[_a] = { fqn: "cdk8s.App", version: "2.2.14" };
173
164
  function validate(app) {
174
165
  const errors = [];
175
166
  for (const child of app.node.findAll()) {
@@ -262,4 +253,4 @@ class IndexedChartFolderNamer extends SimpleChartFolderNamer {
262
253
  return name;
263
254
  }
264
255
  }
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsMkNBQXlEO0FBQ3pELDZDQUF5QztBQUN6QyxtQ0FBZ0M7QUFDaEMsNkNBQStDO0FBQy9DLG1DQUFnQztBQUNoQyxpQ0FBOEI7Ozs7OztBQUc5QixJQUFZLGNBU1g7QUFURCxXQUFZLGNBQWM7SUFFeEIsbUVBQVksQ0FBQTtJQUVaLHVFQUFjLENBQUE7SUFFZCw2RUFBaUIsQ0FBQTtJQUVqQiwrR0FBa0MsQ0FBQTtBQUNwQyxDQUFDLEVBVFcsY0FBYyxHQUFkLHNCQUFjLEtBQWQsc0JBQWMsUUFTekI7Ozs7OztBQVlELE1BQWEsR0FBSSxTQUFRLHNCQUFTOzs7Ozs7O0lBNERoQyxZQUFZLFFBQWtCLEVBQUc7O1FBQy9CLEtBQUssQ0FBQyxTQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLGVBQUcsS0FBSyxDQUFDLE1BQU0sbUNBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLG1DQUFJLE1BQU0sQ0FBQztRQUNqRSxJQUFJLENBQUMsbUJBQW1CLFNBQUcsS0FBSyxDQUFDLG1CQUFtQixtQ0FBSSxXQUFXLENBQUM7UUFDcEUsSUFBSSxDQUFDLGNBQWMsU0FBRyxLQUFLLENBQUMsY0FBYyxtQ0FBSSxjQUFjLENBQUMsY0FBYyxDQUFDO0lBQzlFLENBQUM7SUFoRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFZO1FBRXBDLE1BQU0sR0FBRyxHQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsK0RBQStEO1FBQy9ELDZEQUE2RDtRQUM3RCxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixnRkFBZ0Y7UUFDaEYsb0ZBQW9GO1FBQ3BGLDJGQUEyRjtRQUMzRixR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QUFZO1FBQ3RCLE9BQU8sYUFBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLHVCQUF3QixTQUFRLHNCQUFzQjtJQUUxRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBRkYsVUFBSyxHQUFXLENBQUMsQ0FBQztJQUcxQixDQUFDO0lBRU0sSUFBSSxDQUFDLEtBQVk7UUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbnN0cnVjdCwgTm9kZSwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5R3JhcGggfSBmcm9tICcuL2RlcGVuZGVuY3knO1xuaW1wb3J0IHsgTmFtZXMgfSBmcm9tICcuL25hbWVzJztcbmltcG9ydCB7IFlhbWwgfSBmcm9tICcuL3lhbWwnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGVudW0gWWFtbE91dHB1dFR5cGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIEZJTEVfUEVSX0FQUCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBGSUxFX1BFUl9DSEFSVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBGSUxFX1BFUl9SRVNPVVJDRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIEZPTERFUl9QRVJfQ0hBUlRfRklMRV9QRVJfUkVTT1VSQ0UsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwUHJvcHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgb3V0ZGlyPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBvdXRwdXRGaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHlhbWxPdXRwdXRUeXBlPzogWWFtbE91dHB1dFR5cGU7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIEFwcCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBTeW50aGVzaXplIGEgc2luZ2xlIGNoYXJ0LlxuICAgKlxuICAgKiBFYWNoIGVsZW1lbnQgcmV0dXJuZWQgaW4gdGhlIHJlc3VsdGluZyBhcnJheSByZXByZXNlbnRzIGEgZGlmZmVyZW50IEFwaU9iamVjdFxuICAgKiBpbiB0aGUgc2NvcGUgb2YgdGhlIGNoYXJ0LlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIGFycmF5IG9yZGVyIGlzIGltcG9ydGFudC4gSXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdmFyaW91cyBkZXBlbmRlbmNpZXMgYmV0d2VlblxuICAgKiB0aGUgY29uc3RydWN0cyBpbiB0aGUgY2hhcnQsIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBvbmUgd2l0aG91dCBkZXBlbmRlbmNpZXMsIGFuZCBzbyBvbi4uLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBKU09OIG9iamVjdHMuXG4gICAqIEBwYXJhbSBjaGFydCB0aGUgY2hhcnQgdG8gc3ludGhlc2l6ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIF9zeW50aENoYXJ0KGNoYXJ0OiBDaGFydCk6IGFueVtdIHtcblxuICAgIGNvbnN0IGFwcDogQXBwID0gQXBwLm9mKGNoYXJ0KTtcblxuICAgIC8vIHdlIG11c3QgcHJlcGFyZSB0aGUgZW50aXJlIGFwcCBiZWZvcmUgc3ludGhlc2l6aW5nIHRoZSBjaGFydFxuICAgIC8vIGJlY2F1c2UgdGhlIGRlcGVuZGVuY3kgaW5mZXJlbmNlIGhhcHBlbnMgb24gdGhlIGFwcCBsZXZlbC5cbiAgICByZXNvbHZlRGVwZW5kZW5jaWVzKGFwcCk7XG5cbiAgICAvLyB2YWxpZGF0ZSB0aGUgYXBwIHNpbmNlIHdlIHdhbnQgdG8gY2FsbCBvblZhbGlkYXRlIG9mIHRoZSByZWxldmFudCBjb25zdHJ1Y3RzLlxuICAgIC8vIG5vdGUgdGhpcyB3aWxsIGFsc28gY2FsbCBvblZhbGlkYXRlIG9uIGNvbnN0cnVjdHMgZnJvbSBwb3NzaWJseSBkaWZmZXJlbnQgY2hhcnRzLFxuICAgIC8vIGJ1dCB0aGF0cyBvayB0b28gc2luY2Ugd2Ugbm8gbG9uZ2VyIHRyZWF0IGNvbnN0cnVjdHMgYXMgYSBzZWxmLWNvbnRhaW5lZCBzeW50aGVzaXMgdW5pdC5cbiAgICB2YWxpZGF0ZShhcHApO1xuXG4gICAgcmV0dXJuIGNoYXJ0VG9LdWJlKGNoYXJ0KS5tYXAob2JqID0+IG9iai50b0pzb24oKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvZihjOiBJQ29uc3RydWN0KTogQXBwIHtcblxuICAgIGNvbnN0IHNjb3BlID0gTm9kZS5vZihjKS5zY29wZTtcblxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIC8vIHRoZSBhcHAgaXMgdGhlIG9ubHkgY29uc3RydWN0IHdpdGhvdXQgYSBzY29wZS5cbiAgICAgIHJldHVybiBjIGFzIEFwcDtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwLm9mKHNjb3BlKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBvdXRkaXI6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHlhbWxPdXRwdXRUeXBlOiBZYW1sT3V0cHV0VHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGdldCBjaGFydHMoKTogQ2hhcnRbXSB7XG4gICAgY29uc3QgaXNDaGFydCA9ICh4OiBJQ29uc3RydWN0KTogeCBpcyBDaGFydCA9PiB4IGluc3RhbmNlb2YgQ2hhcnQ7XG4gICAgcmV0dXJuIG5ldyBEZXBlbmRlbmN5R3JhcGgoTm9kZS5vZih0aGlzKSlcbiAgICAgIC50b3BvbG9neSgpXG4gICAgICAuZmlsdGVyKGlzQ2hhcnQpO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBcHBQcm9wcyA9IHsgfSkge1xuICAgIHN1cGVyKHVuZGVmaW5lZCBhcyBhbnksICcnKTtcbiAgICB0aGlzLm91dGRpciA9IHByb3BzLm91dGRpciA/PyBwcm9jZXNzLmVudi5DREs4U19PVVRESVIgPz8gJ2Rpc3QnO1xuICAgIHRoaXMub3V0cHV0RmlsZUV4dGVuc2lvbiA9IHByb3BzLm91dHB1dEZpbGVFeHRlbnNpb24gPz8gJy5rOHMueWFtbCc7XG4gICAgdGhpcy55YW1sT3V0cHV0VHlwZSA9IHByb3BzLnlhbWxPdXRwdXRUeXBlID8/IFlhbWxPdXRwdXRUeXBlLkZJTEVfUEVSX0NIQVJUO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3ludGgoKTogdm9pZCB7XG5cbiAgICBmcy5ta2RpclN5bmModGhpcy5vdXRkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgLy8gU2luY2Ugd2UgcGxhbiBvbiByZW1vdmluZyB0aGUgZGlzdHJpYnV0ZWQgc3ludGggbWVjaGFuaXNtLCB3ZSBubyBsb25nZXIgY2FsbCBgTm9kZS5zeW50aGVzaXplYCwgYnV0IHJhdGhlciBzaW1wbHkgaW1wbGVtZW50XG4gICAgLy8gdGhlIG5lY2Vzc2FyeSBvcGVyYXRpb25zLiBXZSBkbyBob3dldmVyIHdhbnQgdG8gcHJlc2VydmUgdGhlIGRpc3RyaWJ1dGVkIHZhbGlkYXRpb24uXG4gICAgdmFsaWRhdGUodGhpcyk7XG5cbiAgICAvLyB0aGlzIGlzIGtpbmQgb2Ygc3Vja3ksIGV2ZW50dWFsbHkgSSB3b3VsZCBsaWtlIHRoZSBEZXBlbmRlbmN5R3JhcGhcbiAgICAvLyB0byBiZSBhYmxlIHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLlxuICAgIGNvbnN0IGhhc0RlcGVuZGFudENoYXJ0cyA9IHJlc29sdmVEZXBlbmRlbmNpZXModGhpcyk7XG4gICAgY29uc3QgY2hhcnRzID0gdGhpcy5jaGFydHM7XG5cbiAgICBzd2l0Y2ggKHRoaXMueWFtbE91dHB1dFR5cGUpIHtcbiAgICAgIGNhc2UgWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfQVBQOlxuICAgICAgICBsZXQgYXBpT2JqZWN0TGlzdDogQXBpT2JqZWN0W10gPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoYXJ0IG9mIGNoYXJ0cykge1xuICAgICAgICAgIGFwaU9iamVjdExpc3QucHVzaCguLi5jaGFydFRvS3ViZShjaGFydCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgWWFtbC5zYXZlKFxuICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMub3V0ZGlyLCBgYXBwJHt0aGlzLm91dHB1dEZpbGVFeHRlbnNpb259YCksIC8vIFRoZXJlIGlzIG5vIFwiYXBwIG5hbWVcIiwgc28gd2UganVzdCBoYXJkY29kZSB0aGUgZmlsZSBuYW1lXG4gICAgICAgICAgICBhcGlPYmplY3RMaXN0Lm1hcCgoYXBpT2JqZWN0KSA9PiBhcGlPYmplY3QudG9Kc29uKCkpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfQ0hBUlQ6XG4gICAgICAgIGNvbnN0IG5hbWVyOiBDaGFydE5hbWVyID0gaGFzRGVwZW5kYW50Q2hhcnRzID8gbmV3IEluZGV4ZWRDaGFydE5hbWVyKCkgOiBuZXcgU2ltcGxlQ2hhcnROYW1lcigpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhcnQgb2YgY2hhcnRzKSB7XG4gICAgICAgICAgY29uc3QgY2hhcnROYW1lID0gbmFtZXIubmFtZShjaGFydCk7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IGNoYXJ0VG9LdWJlKGNoYXJ0KTtcblxuICAgICAgICAgIFlhbWwuc2F2ZShwYXRoLmpvaW4odGhpcy5vdXRkaXIsIGNoYXJ0TmFtZSt0aGlzLm91dHB1dEZpbGVFeHRlbnNpb24pLCBvYmplY3RzLm1hcChvYmogPT4gb2JqLnRvSnNvbigpKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfUkVTT1VSQ0U6XG4gICAgICAgIGZvciAoY29uc3QgY2hhcnQgb2YgY2hhcnRzKSB7XG4gICAgICAgICAgY29uc3QgYXBpT2JqZWN0cyA9IGNoYXJ0VG9LdWJlKGNoYXJ0KTtcblxuICAgICAgICAgIGFwaU9iamVjdHMuZm9yRWFjaCgoYXBpT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIShhcGlPYmplY3QgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgJHtgJHthcGlPYmplY3Qua2luZH0uJHthcGlPYmplY3QubWV0YWRhdGEubmFtZX1gXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1teMC05YS16QS1aLV8uXS9nLCAnJyl9YDtcbiAgICAgICAgICAgICAgWWFtbC5zYXZlKHBhdGguam9pbih0aGlzLm91dGRpciwgZmlsZU5hbWUrdGhpcy5vdXRwdXRGaWxlRXh0ZW5zaW9uKSwgW2FwaU9iamVjdC50b0pzb24oKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFlhbWxPdXRwdXRUeXBlLkZPTERFUl9QRVJfQ0hBUlRfRklMRV9QRVJfUkVTT1VSQ0U6XG4gICAgICAgIGNvbnN0IGZvbGRlck5hbWVyOiBDaGFydE5hbWVyID0gaGFzRGVwZW5kYW50Q2hhcnRzID8gbmV3IEluZGV4ZWRDaGFydEZvbGRlck5hbWVyKCkgOiBuZXcgU2ltcGxlQ2hhcnRGb2xkZXJOYW1lcigpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXJ0IG9mIGNoYXJ0cykge1xuICAgICAgICAgIGNvbnN0IGNoYXJ0TmFtZSA9IGZvbGRlck5hbWVyLm5hbWUoY2hhcnQpO1xuICAgICAgICAgIGNvbnN0IGFwaU9iamVjdHMgPSBjaGFydFRvS3ViZShjaGFydCk7XG4gICAgICAgICAgY29uc3QgZnVsbE91dERpciA9IHBhdGguam9pbih0aGlzLm91dGRpciwgY2hhcnROYW1lKTtcbiAgICAgICAgICBmcy5ta2RpclN5bmMoZnVsbE91dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAgICAgICBhcGlPYmplY3RzLmZvckVhY2goKGFwaU9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoYXBpT2JqZWN0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YCR7YXBpT2JqZWN0LmtpbmR9LiR7YXBpT2JqZWN0Lm1ldGFkYXRhLm5hbWV9YFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXjAtOWEtekEtWi1fLl0vZywgJycpfWA7XG4gICAgICAgICAgICAgIFlhbWwuc2F2ZShwYXRoLmpvaW4oZnVsbE91dERpciwgZmlsZU5hbWUrdGhpcy5vdXRwdXRGaWxlRXh0ZW5zaW9uKSwgW2FwaU9iamVjdC50b0pzb24oKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3ludGhZYW1sKCk6IGFueSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG5cbiAgICBjb25zdCBjaGFydHMgPSB0aGlzLmNoYXJ0cztcbiAgICBjb25zdCBkb2NzOiBhbnlbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaGFydCBvZiBjaGFydHMpIHtcbiAgICAgIGNvbnN0IGFwaU9iamVjdHMgPSBjaGFydFRvS3ViZShjaGFydCk7XG4gICAgICBkb2NzLnB1c2goLi4uYXBpT2JqZWN0cy5tYXAoYXBpT2JqZWN0ID0+IGFwaU9iamVjdC50b0pzb24oKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBZYW1sLnN0cmluZ2lmeSguLi5kb2NzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZShhcHA6IEFwcCkge1xuICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBhcHAubm9kZS5maW5kQWxsKCkpIHtcbiAgICBjb25zdCBjaGlsZEVycm9ycyA9IGNoaWxkLm5vZGUudmFsaWRhdGUoKTtcbiAgICBmb3IgKGNvbnN0IGVycm9yIG9mIGNoaWxkRXJyb3JzKSB7XG4gICAgICBlcnJvcnMucHVzaChgWyR7Y2hpbGQubm9kZS5wYXRofV0gJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcnM6XFxuICAke2Vycm9ycy5qb2luKCdcXG4gICcpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZXBlbmRlbmNpZXMoYXBwOiBBcHApIHtcblxuICBsZXQgaGFzRGVwZW5kYW50Q2hhcnRzID0gZmFsc2U7XG5cbiAgY29uc3QgZGVwcyA9IFtdO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGFwcC5ub2RlLmZpbmRBbGwoKSkge1xuICAgIGZvciAoY29uc3QgZGVwIG9mIGNoaWxkLm5vZGUuZGVwZW5kZW5jaWVzKSB7XG4gICAgICBkZXBzLnB1c2goeyBzb3VyY2U6IGNoaWxkLCB0YXJnZXQ6IGRlcCB9KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG5cbiAgICAvLyBjcmVhdGUgZXhwbGljaXQgYXBpIG9iamVjdCBkZXBlbmRlbmNpZXMgZnJvbSBpbXBsaWNpdCBjb25zdHJ1Y3QgZGVwZW5kZW5jaWVzXG4gICAgY29uc3QgdGFyZ2V0QXBpT2JqZWN0cyA9IE5vZGUub2YoZGVwLnRhcmdldCkuZmluZEFsbCgpLmZpbHRlcihjID0+IGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpO1xuICAgIGNvbnN0IHNvdXJjZUFwaU9iamVjdHMgPSBOb2RlLm9mKGRlcC5zb3VyY2UpLmZpbmRBbGwoKS5maWx0ZXIoYyA9PiBjIGluc3RhbmNlb2YgQXBpT2JqZWN0KTtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldEFwaU9iamVjdHMpIHtcbiAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZUFwaU9iamVjdHMpIHtcbiAgICAgICAgaWYgKHRhcmdldCAhPT0gc291cmNlKSB7XG4gICAgICAgICAgTm9kZS5vZihzb3VyY2UpLmFkZERlcGVuZGVuY3kodGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhbiBleHBsaWNpdCBjaGFydCBkZXBlbmRlbmN5IGZyb20gaW1wbGljaXQgY29uc3RydWN0IGRlcGVuZGVuY2llc1xuICAgIGNvbnN0IHNvdXJjZUNoYXJ0ID0gQ2hhcnQub2YoZGVwLnNvdXJjZSk7XG4gICAgY29uc3QgdGFyZ2V0Q2hhcnQgPSBDaGFydC5vZihkZXAudGFyZ2V0KTtcblxuICAgIGlmIChzb3VyY2VDaGFydCAhPT0gdGFyZ2V0Q2hhcnQpIHtcbiAgICAgIE5vZGUub2Yoc291cmNlQ2hhcnQpLmFkZERlcGVuZGVuY3kodGFyZ2V0Q2hhcnQpO1xuICAgICAgaGFzRGVwZW5kYW50Q2hhcnRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0IGNoYXJ0cyA9IG5ldyBEZXBlbmRlbmN5R3JhcGgoTm9kZS5vZihhcHApKS50b3BvbG9neSgpXG4gICAgLmZpbHRlcih4ID0+IHggaW5zdGFuY2VvZiBDaGFydCk7XG5cbiAgZm9yIChjb25zdCBwYXJlbnRDaGFydCBvZiBjaGFydHMpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkQ2hhcnQgb2YgTm9kZS5vZihwYXJlbnRDaGFydCkuY2hpbGRyZW4uZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIENoYXJ0KSkge1xuICAgICAgLy8gY3JlYXRlIGFuIGV4cGxpY2l0IGNoYXJ0IGRlcGVuZGVuY3kgZnJvbSBuZXN0ZWQgY2hhcnQgcmVsYXRpb25zaGlwc1xuICAgICAgTm9kZS5vZihwYXJlbnRDaGFydCkuYWRkRGVwZW5kZW5jeShjaGlsZENoYXJ0KTtcbiAgICAgIGhhc0RlcGVuZGFudENoYXJ0cyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGhhc0RlcGVuZGFudENoYXJ0cztcblxufVxuXG5mdW5jdGlvbiBjaGFydFRvS3ViZShjaGFydDogQ2hhcnQpIHtcbiAgcmV0dXJuIG5ldyBEZXBlbmRlbmN5R3JhcGgoTm9kZS5vZihjaGFydCkpLnRvcG9sb2d5KClcbiAgICAuZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIEFwaU9iamVjdClcbiAgICAuZmlsdGVyKHggPT4gQ2hhcnQub2YoeCkgPT09IGNoYXJ0KSAvLyBpbmNsdWRlIGFuIG9iamVjdCBvbmx5IGluIGl0cyBjbG9zZXN0IHBhcmVudCBjaGFydFxuICAgIC5tYXAoeCA9PiAoeCBhcyBBcGlPYmplY3QpKTtcbn1cblxuaW50ZXJmYWNlIENoYXJ0TmFtZXIge1xuICBuYW1lKGNoYXJ0OiBDaGFydCk6IHN0cmluZztcbn1cblxuY2xhc3MgU2ltcGxlQ2hhcnROYW1lciBpbXBsZW1lbnRzIENoYXJ0TmFtZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIHB1YmxpYyBuYW1lKGNoYXJ0OiBDaGFydCkge1xuICAgIHJldHVybiBgJHtOYW1lcy50b0Ruc0xhYmVsKGNoYXJ0KX1gO1xuICB9XG59XG5cbmNsYXNzIEluZGV4ZWRDaGFydE5hbWVyIGV4dGVuZHMgU2ltcGxlQ2hhcnROYW1lciBpbXBsZW1lbnRzIENoYXJ0TmFtZXIge1xuICBwcml2YXRlIGluZGV4OiBudW1iZXIgPSAwO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIG5hbWUoY2hhcnQ6IENoYXJ0KSB7XG4gICAgY29uc3QgbmFtZSA9IGAke3RoaXMuaW5kZXgudG9TdHJpbmcoKS5wYWRTdGFydCg0LCAnMCcpfS0ke3N1cGVyLm5hbWUoY2hhcnQpfWA7XG4gICAgdGhpcy5pbmRleCsrO1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5cbmNsYXNzIFNpbXBsZUNoYXJ0Rm9sZGVyTmFtZXIgaW1wbGVtZW50cyBDaGFydE5hbWVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cblxuICBwdWJsaWMgbmFtZShjaGFydDogQ2hhcnQpIHtcbiAgICByZXR1cm4gTmFtZXMudG9EbnNMYWJlbChjaGFydCk7XG4gIH1cbn1cblxuY2xhc3MgSW5kZXhlZENoYXJ0Rm9sZGVyTmFtZXIgZXh0ZW5kcyBTaW1wbGVDaGFydEZvbGRlck5hbWVyIGltcGxlbWVudHMgQ2hhcnROYW1lciB7XG4gIHByaXZhdGUgaW5kZXg6IG51bWJlciA9IDA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgbmFtZShjaGFydDogQ2hhcnQpIHtcbiAgICBjb25zdCBuYW1lID0gYCR7dGhpcy5pbmRleC50b1N0cmluZygpLnBhZFN0YXJ0KDQsICcwJyl9LSR7c3VwZXIubmFtZShjaGFydCl9YDtcbiAgICB0aGlzLmluZGV4Kys7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn0iXX0=
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsMkNBQXlEO0FBQ3pELDZDQUF5QztBQUN6QyxtQ0FBZ0M7QUFDaEMsNkNBQStDO0FBQy9DLG1DQUFnQztBQUNoQyxpQ0FBOEI7QUFFOUIsa0RBQWtEO0FBQ2xELElBQVksY0FTWDtBQVRELFdBQVksY0FBYztJQUN4Qix1REFBdUQ7SUFDdkQsbUVBQVksQ0FBQTtJQUNaLHVEQUF1RDtJQUN2RCx1RUFBYyxDQUFBO0lBQ2QsOENBQThDO0lBQzlDLDZFQUFpQixDQUFBO0lBQ2pCLHFFQUFxRTtJQUNyRSwrR0FBa0MsQ0FBQTtBQUNwQyxDQUFDLEVBVFcsY0FBYyxHQUFkLHNCQUFjLEtBQWQsc0JBQWMsUUFTekI7QUFxQkQ7O0dBRUc7QUFDSCxNQUFhLEdBQUksU0FBUSxzQkFBUztJQW9FaEM7OztPQUdHO0lBQ0gsWUFBWSxRQUFrQixFQUFHOztRQUMvQixLQUFLLENBQUMsU0FBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxlQUFHLEtBQUssQ0FBQyxNQUFNLG1DQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxtQ0FBSSxNQUFNLENBQUM7UUFDakUsSUFBSSxDQUFDLG1CQUFtQixTQUFHLEtBQUssQ0FBQyxtQkFBbUIsbUNBQUksV0FBVyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxjQUFjLFNBQUcsS0FBSyxDQUFDLGNBQWMsbUNBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQztJQUM5RSxDQUFDO0lBNUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBWTtRQUVwQyxNQUFNLEdBQUcsR0FBUSxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9CLCtEQUErRDtRQUMvRCw2REFBNkQ7UUFDN0Qs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QUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQUVELE1BQU0sc0JBQXNCO0lBQzFCO0lBQ0EsQ0FBQztJQUVNLElBQUksQ0FBQyxLQUFZO1FBQ3RCLE9BQU8sYUFBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLHVCQUF3QixTQUFRLHNCQUFzQjtJQUUxRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBRkYsVUFBSyxHQUFXLENBQUMsQ0FBQztJQUcxQixDQUFDO0lBRU0sSUFBSSxDQUFDLEtBQVk7UUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbnN0cnVjdCwgTm9kZSwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXBpT2JqZWN0IH0gZnJvbSAnLi9hcGktb2JqZWN0JztcbmltcG9ydCB7IENoYXJ0IH0gZnJvbSAnLi9jaGFydCc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5R3JhcGggfSBmcm9tICcuL2RlcGVuZGVuY3knO1xuaW1wb3J0IHsgTmFtZXMgfSBmcm9tICcuL25hbWVzJztcbmltcG9ydCB7IFlhbWwgfSBmcm9tICcuL3lhbWwnO1xuXG4vKiogVGhlIG1ldGhvZCB0byBkaXZpZGUgWUFNTCBvdXRwdXQgaW50byBmaWxlcyAqL1xuZXhwb3J0IGVudW0gWWFtbE91dHB1dFR5cGUge1xuICAvKiogQWxsIHJlc291cmNlcyBhcmUgb3V0cHV0IGludG8gYSBzaW5nbGUgWUFNTCBmaWxlICovXG4gIEZJTEVfUEVSX0FQUCxcbiAgLyoqIFJlc291cmNlcyBhcmUgc3BsaXQgaW50byBzZXBlcmF0ZSBmaWxlcyBieSBjaGFydCAqL1xuICBGSUxFX1BFUl9DSEFSVCxcbiAgLyoqIEVhY2ggcmVzb3VyY2UgaXMgb3V0cHV0IHRvIGl0cyBvd24gZmlsZSAqL1xuICBGSUxFX1BFUl9SRVNPVVJDRSxcbiAgLyoqIEVhY2ggY2hhcnQgaW4gaXRzIG93biBmb2xkZXIgYW5kIGVhY2ggcmVzb3VyY2UgaW4gaXRzIG93biBmaWxlICovXG4gIEZPTERFUl9QRVJfQ0hBUlRfRklMRV9QRVJfUkVTT1VSQ0UsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0byBvdXRwdXQgS3ViZXJuZXRlcyBtYW5pZmVzdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ0RLOFNfT1VURElSIGlmIGRlZmluZWQsIG90aGVyd2lzZSBcImRpc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgb3V0ZGlyPzogc3RyaW5nO1xuICAvKipcbiAgICogIFRoZSBmaWxlIGV4dGVuc2lvbiB0byB1c2UgZm9yIHJlbmRlcmVkIFlBTUwgZmlsZXNcbiAgICogQGRlZmF1bHQgLms4cy55YW1sXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRGaWxlRXh0ZW5zaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogIEhvdyB0byBkaXZpZGUgdGhlIFlBTUwgb3V0cHV0IGludG8gZmlsZXNcbiAgICogQGRlZmF1bHQgWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfQ0hBUlRcbiAgICovXG4gIHJlYWRvbmx5IHlhbWxPdXRwdXRUeXBlPzogWWFtbE91dHB1dFR5cGU7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNkazhzIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXBwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFN5bnRoZXNpemUgYSBzaW5nbGUgY2hhcnQuXG4gICAqXG4gICAqIEVhY2ggZWxlbWVudCByZXR1cm5lZCBpbiB0aGUgcmVzdWx0aW5nIGFycmF5IHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgQXBpT2JqZWN0XG4gICAqIGluIHRoZSBzY29wZSBvZiB0aGUgY2hhcnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgYXJyYXkgb3JkZXIgaXMgaW1wb3J0YW50LiBJdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YXJpb3VzIGRlcGVuZGVuY2llcyBiZXR3ZWVuXG4gICAqIHRoZSBjb25zdHJ1Y3RzIGluIHRoZSBjaGFydCwgd2hlcmUgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdGhlIG9uZSB3aXRob3V0IGRlcGVuZGVuY2llcywgYW5kIHNvIG9uLi4uXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIEpTT04gb2JqZWN0cy5cbiAgICogQHBhcmFtIGNoYXJ0IHRoZSBjaGFydCB0byBzeW50aGVzaXplLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgX3N5bnRoQ2hhcnQoY2hhcnQ6IENoYXJ0KTogYW55W10ge1xuXG4gICAgY29uc3QgYXBwOiBBcHAgPSBBcHAub2YoY2hhcnQpO1xuXG4gICAgLy8gd2UgbXVzdCBwcmVwYXJlIHRoZSBlbnRpcmUgYXBwIGJlZm9yZSBzeW50aGVzaXppbmcgdGhlIGNoYXJ0XG4gICAgLy8gYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBpbmZlcmVuY2UgaGFwcGVucyBvbiB0aGUgYXBwIGxldmVsLlxuICAgIHJlc29sdmVEZXBlbmRlbmNpZXMoYXBwKTtcblxuICAgIC8vIHZhbGlkYXRlIHRoZSBhcHAgc2luY2Ugd2Ugd2FudCB0byBjYWxsIG9uVmFsaWRhdGUgb2YgdGhlIHJlbGV2YW50IGNvbnN0cnVjdHMuXG4gICAgLy8gbm90ZSB0aGlzIHdpbGwgYWxzbyBjYWxsIG9uVmFsaWRhdGUgb24gY29uc3RydWN0cyBmcm9tIHBvc3NpYmx5IGRpZmZlcmVudCBjaGFydHMsXG4gICAgLy8gYnV0IHRoYXRzIG9rIHRvbyBzaW5jZSB3ZSBubyBsb25nZXIgdHJlYXQgY29uc3RydWN0cyBhcyBhIHNlbGYtY29udGFpbmVkIHN5bnRoZXNpcyB1bml0LlxuICAgIHZhbGlkYXRlKGFwcCk7XG5cbiAgICByZXR1cm4gY2hhcnRUb0t1YmUoY2hhcnQpLm1hcChvYmogPT4gb2JqLnRvSnNvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG9mKGM6IElDb25zdHJ1Y3QpOiBBcHAge1xuXG4gICAgY29uc3Qgc2NvcGUgPSBOb2RlLm9mKGMpLnNjb3BlO1xuXG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgLy8gdGhlIGFwcCBpcyB0aGUgb25seSBjb25zdHJ1Y3Qgd2l0aG91dCBhIHNjb3BlLlxuICAgICAgcmV0dXJuIGMgYXMgQXBwO1xuICAgIH1cblxuICAgIHJldHVybiBBcHAub2Yoc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvdXRwdXQgZGlyZWN0b3J5IGludG8gd2hpY2ggbWFuaWZlc3RzIHdpbGwgYmUgc3ludGhlc2l6ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0ZGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBUaGUgZmlsZSBleHRlbnNpb24gdG8gdXNlIGZvciByZW5kZXJlZCBZQU1MIGZpbGVzXG4gICAqIEBkZWZhdWx0IC5rOHMueWFtbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG91dHB1dEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKiogSG93IHRvIGRpdmlkZSB0aGUgWUFNTCBvdXRwdXQgaW50byBmaWxlc1xuICAgKiBAZGVmYXVsdCBZYW1sT3V0cHV0VHlwZS5GSUxFX1BFUl9DSEFSVFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHlhbWxPdXRwdXRUeXBlOiBZYW1sT3V0cHV0VHlwZTtcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgdGhlIGNoYXJ0cyBpbiB0aGlzIGFwcCwgc29ydGVkIHRvcG9sb2dpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoYXJ0cygpOiBDaGFydFtdIHtcbiAgICBjb25zdCBpc0NoYXJ0ID0gKHg6IElDb25zdHJ1Y3QpOiB4IGlzIENoYXJ0ID0+IHggaW5zdGFuY2VvZiBDaGFydDtcbiAgICByZXR1cm4gbmV3IERlcGVuZGVuY3lHcmFwaChOb2RlLm9mKHRoaXMpKVxuICAgICAgLnRvcG9sb2d5KClcbiAgICAgIC5maWx0ZXIoaXNDaGFydCk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBhcHBcbiAgICogQHBhcmFtIHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IEFwcFByb3BzID0geyB9KSB7XG4gICAgc3VwZXIodW5kZWZpbmVkIGFzIGFueSwgJycpO1xuICAgIHRoaXMub3V0ZGlyID0gcHJvcHMub3V0ZGlyID8/IHByb2Nlc3MuZW52LkNESzhTX09VVERJUiA/PyAnZGlzdCc7XG4gICAgdGhpcy5vdXRwdXRGaWxlRXh0ZW5zaW9uID0gcHJvcHMub3V0cHV0RmlsZUV4dGVuc2lvbiA/PyAnLms4cy55YW1sJztcbiAgICB0aGlzLnlhbWxPdXRwdXRUeXBlID0gcHJvcHMueWFtbE91dHB1dFR5cGUgPz8gWWFtbE91dHB1dFR5cGUuRklMRV9QRVJfQ0hBUlQ7XG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgYWxsIG1hbmlmZXN0cyB0byB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICAgKi9cbiAgcHVibGljIHN5bnRoKCk6IHZvaWQge1xuXG4gICAgZnMubWtkaXJTeW5jKHRoaXMub3V0ZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIC8vIFNpbmNlIHdlIHBsYW4gb24gcmVtb3ZpbmcgdGhlIGRpc3RyaWJ1dGVkIHN5bnRoIG1lY2hhbmlzbSwgd2Ugbm8gbG9uZ2VyIGNhbGwgYE5vZGUuc3ludGhlc2l6ZWAsIGJ1dCByYXRoZXIgc2ltcGx5IGltcGxlbWVudFxuICAgIC8vIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9ucy4gV2UgZG8gaG93ZXZlciB3YW50IHRvIHByZXNlcnZlIHRoZSBkaXN0cmlidXRlZCB2YWxpZGF0aW9uLlxuICAgIHZhbGlkYXRlKHRoaXMpO1xuXG4gICAgLy8gdGhpcyBpcyBraW5kIG9mIHN1Y2t5LCBldmVudHVhbGx5IEkgd291bGQgbGlrZSB0aGUgRGVwZW5kZW5jeUdyYXBoXG4gICAgLy8gdG8gYmUgYWJsZSB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbi5cbiAgICBjb25zdCBoYXNEZXBlbmRhbnRDaGFydHMgPSByZXNvbHZlRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IGNoYXJ0cyA9IHRoaXMuY2hhcnRzO1xuXG4gICAgc3dpdGNoICh0aGlzLnlhbWxPdXRwdXRUeXBlKSB7XG4gICAgICBjYXNlIFlhbWxPdXRwdXRUeXBlLkZJTEVfUEVSX0FQUDpcbiAgICAgICAgbGV0IGFwaU9iamVjdExpc3Q6IEFwaU9iamVjdFtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFydCBvZiBjaGFydHMpIHtcbiAgICAgICAgICBhcGlPYmplY3RMaXN0LnB1c2goLi4uY2hhcnRUb0t1YmUoY2hhcnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIFlhbWwuc2F2ZShcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLm91dGRpciwgYGFwcCR7dGhpcy5vdXRwdXRGaWxlRXh0ZW5zaW9ufWApLCAvLyBUaGVyZSBpcyBubyBcImFwcCBuYW1lXCIsIHNvIHdlIGp1c3QgaGFyZGNvZGUgdGhlIGZpbGUgbmFtZVxuICAgICAgICAgICAgYXBpT2JqZWN0TGlzdC5tYXAoKGFwaU9iamVjdCkgPT4gYXBpT2JqZWN0LnRvSnNvbigpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFlhbWxPdXRwdXRUeXBlLkZJTEVfUEVSX0NIQVJUOlxuICAgICAgICBjb25zdCBuYW1lcjogQ2hhcnROYW1lciA9IGhhc0RlcGVuZGFudENoYXJ0cyA/IG5ldyBJbmRleGVkQ2hhcnROYW1lcigpIDogbmV3IFNpbXBsZUNoYXJ0TmFtZXIoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoYXJ0IG9mIGNoYXJ0cykge1xuICAgICAgICAgIGNvbnN0IGNoYXJ0TmFtZSA9IG5hbWVyLm5hbWUoY2hhcnQpO1xuICAgICAgICAgIGNvbnN0IG9iamVjdHMgPSBjaGFydFRvS3ViZShjaGFydCk7XG5cbiAgICAgICAgICBZYW1sLnNhdmUocGF0aC5qb2luKHRoaXMub3V0ZGlyLCBjaGFydE5hbWUrdGhpcy5vdXRwdXRGaWxlRXh0ZW5zaW9uKSwgb2JqZWN0cy5tYXAob2JqID0+IG9iai50b0pzb24oKSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFlhbWxPdXRwdXRUeXBlLkZJTEVfUEVSX1JFU09VUkNFOlxuICAgICAgICBmb3IgKGNvbnN0IGNoYXJ0IG9mIGNoYXJ0cykge1xuICAgICAgICAgIGNvbnN0IGFwaU9iamVjdHMgPSBjaGFydFRvS3ViZShjaGFydCk7XG5cbiAgICAgICAgICBhcGlPYmplY3RzLmZvckVhY2goKGFwaU9iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoYXBpT2JqZWN0ID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YCR7YXBpT2JqZWN0LmtpbmR9LiR7YXBpT2JqZWN0Lm1ldGFkYXRhLm5hbWV9YFxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXjAtOWEtekEtWi1fLl0vZywgJycpfWA7XG4gICAgICAgICAgICAgIFlhbWwuc2F2ZShwYXRoLmpvaW4odGhpcy5vdXRkaXIsIGZpbGVOYW1lK3RoaXMub3V0cHV0RmlsZUV4dGVuc2lvbiksIFthcGlPYmplY3QudG9Kc29uKCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBZYW1sT3V0cHV0VHlwZS5GT0xERVJfUEVSX0NIQVJUX0ZJTEVfUEVSX1JFU09VUkNFOlxuICAgICAgICBjb25zdCBmb2xkZXJOYW1lcjogQ2hhcnROYW1lciA9IGhhc0RlcGVuZGFudENoYXJ0cyA/IG5ldyBJbmRleGVkQ2hhcnRGb2xkZXJOYW1lcigpIDogbmV3IFNpbXBsZUNoYXJ0Rm9sZGVyTmFtZXIoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFydCBvZiBjaGFydHMpIHtcbiAgICAgICAgICBjb25zdCBjaGFydE5hbWUgPSBmb2xkZXJOYW1lci5uYW1lKGNoYXJ0KTtcbiAgICAgICAgICBjb25zdCBhcGlPYmplY3RzID0gY2hhcnRUb0t1YmUoY2hhcnQpO1xuICAgICAgICAgIGNvbnN0IGZ1bGxPdXREaXIgPSBwYXRoLmpvaW4odGhpcy5vdXRkaXIsIGNoYXJ0TmFtZSk7XG4gICAgICAgICAgZnMubWtkaXJTeW5jKGZ1bGxPdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgYXBpT2JqZWN0cy5mb3JFYWNoKChhcGlPYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghKGFwaU9iamVjdCA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2Ake2FwaU9iamVjdC5raW5kfS4ke2FwaU9iamVjdC5tZXRhZGF0YS5uYW1lfWBcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW14wLTlhLXpBLVotXy5dL2csICcnKX1gO1xuICAgICAgICAgICAgICBZYW1sLnNhdmUocGF0aC5qb2luKGZ1bGxPdXREaXIsIGZpbGVOYW1lK3RoaXMub3V0cHV0RmlsZUV4dGVuc2lvbiksIFthcGlPYmplY3QudG9Kc29uKCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgdGhlIGFwcCBpbnRvIGEgWUFNTCBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHdpdGggYWxsIFlBTUwgb2JqZWN0cyBhY3Jvc3MgYWxsIGNoYXJ0cyBpbiB0aGlzIGFwcC5cbiAgICovXG4gIHB1YmxpYyBzeW50aFlhbWwoKTogYW55IHtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcblxuICAgIGNvbnN0IGNoYXJ0cyA9IHRoaXMuY2hhcnRzO1xuICAgIGNvbnN0IGRvY3M6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJ0IG9mIGNoYXJ0cykge1xuICAgICAgY29uc3QgYXBpT2JqZWN0cyA9IGNoYXJ0VG9LdWJlKGNoYXJ0KTtcbiAgICAgIGRvY3MucHVzaCguLi5hcGlPYmplY3RzLm1hcChhcGlPYmplY3QgPT4gYXBpT2JqZWN0LnRvSnNvbigpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFlhbWwuc3RyaW5naWZ5KC4uLmRvY3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFwcDogQXBwKSB7XG4gIGNvbnN0IGVycm9ycyA9IFtdO1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGFwcC5ub2RlLmZpbmRBbGwoKSkge1xuICAgIGNvbnN0IGNoaWxkRXJyb3JzID0gY2hpbGQubm9kZS52YWxpZGF0ZSgpO1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgY2hpbGRFcnJvcnMpIHtcbiAgICAgIGVycm9ycy5wdXNoKGBbJHtjaGlsZC5ub2RlLnBhdGh9XSAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiBmYWlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JzLmpvaW4oJ1xcbiAgJyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlcGVuZGVuY2llcyhhcHA6IEFwcCkge1xuXG4gIGxldCBoYXNEZXBlbmRhbnRDaGFydHMgPSBmYWxzZTtcblxuICBjb25zdCBkZXBzID0gW107XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgYXBwLm5vZGUuZmluZEFsbCgpKSB7XG4gICAgZm9yIChjb25zdCBkZXAgb2YgY2hpbGQubm9kZS5kZXBlbmRlbmNpZXMpIHtcbiAgICAgIGRlcHMucHVzaCh7IHNvdXJjZTogY2hpbGQsIHRhcmdldDogZGVwIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcblxuICAgIC8vIGNyZWF0ZSBleHBsaWNpdCBhcGkgb2JqZWN0IGRlcGVuZGVuY2llcyBmcm9tIGltcGxpY2l0IGNvbnN0cnVjdCBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCB0YXJnZXRBcGlPYmplY3RzID0gTm9kZS5vZihkZXAudGFyZ2V0KS5maW5kQWxsKCkuZmlsdGVyKGMgPT4gYyBpbnN0YW5jZW9mIEFwaU9iamVjdCk7XG4gICAgY29uc3Qgc291cmNlQXBpT2JqZWN0cyA9IE5vZGUub2YoZGVwLnNvdXJjZSkuZmluZEFsbCgpLmZpbHRlcihjID0+IGMgaW5zdGFuY2VvZiBBcGlPYmplY3QpO1xuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0QXBpT2JqZWN0cykge1xuICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlQXBpT2JqZWN0cykge1xuICAgICAgICBpZiAodGFyZ2V0ICE9PSBzb3VyY2UpIHtcbiAgICAgICAgICBOb2RlLm9mKHNvdXJjZSkuYWRkRGVwZW5kZW5jeSh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGFuIGV4cGxpY2l0IGNoYXJ0IGRlcGVuZGVuY3kgZnJvbSBpbXBsaWNpdCBjb25zdHJ1Y3QgZGVwZW5kZW5jaWVzXG4gICAgY29uc3Qgc291cmNlQ2hhcnQgPSBDaGFydC5vZihkZXAuc291cmNlKTtcbiAgICBjb25zdCB0YXJnZXRDaGFydCA9IENoYXJ0Lm9mKGRlcC50YXJnZXQpO1xuXG4gICAgaWYgKHNvdXJjZUNoYXJ0ICE9PSB0YXJnZXRDaGFydCkge1xuICAgICAgTm9kZS5vZihzb3VyY2VDaGFydCkuYWRkRGVwZW5kZW5jeSh0YXJnZXRDaGFydCk7XG4gICAgICBoYXNEZXBlbmRhbnRDaGFydHMgPSB0cnVlO1xuICAgIH1cblxuICB9XG5cbiAgY29uc3QgY2hhcnRzID0gbmV3IERlcGVuZGVuY3lHcmFwaChOb2RlLm9mKGFwcCkpLnRvcG9sb2d5KClcbiAgICAuZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIENoYXJ0KTtcblxuICBmb3IgKGNvbnN0IHBhcmVudENoYXJ0IG9mIGNoYXJ0cykge1xuICAgIGZvciAoY29uc3QgY2hpbGRDaGFydCBvZiBOb2RlLm9mKHBhcmVudENoYXJ0KS5jaGlsZHJlbi5maWx0ZXIoeCA9PiB4IGluc3RhbmNlb2YgQ2hhcnQpKSB7XG4gICAgICAvLyBjcmVhdGUgYW4gZXhwbGljaXQgY2hhcnQgZGVwZW5kZW5jeSBmcm9tIG5lc3RlZCBjaGFydCByZWxhdGlvbnNoaXBzXG4gICAgICBOb2RlLm9mKHBhcmVudENoYXJ0KS5hZGREZXBlbmRlbmN5KGNoaWxkQ2hhcnQpO1xuICAgICAgaGFzRGVwZW5kYW50Q2hhcnRzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaGFzRGVwZW5kYW50Q2hhcnRzO1xuXG59XG5cbmZ1bmN0aW9uIGNoYXJ0VG9LdWJlKGNoYXJ0OiBDaGFydCkge1xuICByZXR1cm4gbmV3IERlcGVuZGVuY3lHcmFwaChOb2RlLm9mKGNoYXJ0KSkudG9wb2xvZ3koKVxuICAgIC5maWx0ZXIoeCA9PiB4IGluc3RhbmNlb2YgQXBpT2JqZWN0KVxuICAgIC5maWx0ZXIoeCA9PiBDaGFydC5vZih4KSA9PT0gY2hhcnQpIC8vIGluY2x1ZGUgYW4gb2JqZWN0IG9ubHkgaW4gaXRzIGNsb3Nlc3QgcGFyZW50IGNoYXJ0XG4gICAgLm1hcCh4ID0+ICh4IGFzIEFwaU9iamVjdCkpO1xufVxuXG5pbnRlcmZhY2UgQ2hhcnROYW1lciB7XG4gIG5hbWUoY2hhcnQ6IENoYXJ0KTogc3RyaW5nO1xufVxuXG5jbGFzcyBTaW1wbGVDaGFydE5hbWVyIGltcGxlbWVudHMgQ2hhcnROYW1lciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgcHVibGljIG5hbWUoY2hhcnQ6IENoYXJ0KSB7XG4gICAgcmV0dXJuIGAke05hbWVzLnRvRG5zTGFiZWwoY2hhcnQpfWA7XG4gIH1cbn1cblxuY2xhc3MgSW5kZXhlZENoYXJ0TmFtZXIgZXh0ZW5kcyBTaW1wbGVDaGFydE5hbWVyIGltcGxlbWVudHMgQ2hhcnROYW1lciB7XG4gIHByaXZhdGUgaW5kZXg6IG51bWJlciA9IDA7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgbmFtZShjaGFydDogQ2hhcnQpIHtcbiAgICBjb25zdCBuYW1lID0gYCR7dGhpcy5pbmRleC50b1N0cmluZygpLnBhZFN0YXJ0KDQsICcwJyl9LSR7c3VwZXIubmFtZShjaGFydCl9YDtcbiAgICB0aGlzLmluZGV4Kys7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbn1cblxuY2xhc3MgU2ltcGxlQ2hhcnRGb2xkZXJOYW1lciBpbXBsZW1lbnRzIENoYXJ0TmFtZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIHB1YmxpYyBuYW1lKGNoYXJ0OiBDaGFydCkge1xuICAgIHJldHVybiBOYW1lcy50b0Ruc0xhYmVsKGNoYXJ0KTtcbiAgfVxufVxuXG5jbGFzcyBJbmRleGVkQ2hhcnRGb2xkZXJOYW1lciBleHRlbmRzIFNpbXBsZUNoYXJ0Rm9sZGVyTmFtZXIgaW1wbGVtZW50cyBDaGFydE5hbWVyIHtcbiAgcHJpdmF0ZSBpbmRleDogbnVtYmVyID0gMDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBuYW1lKGNoYXJ0OiBDaGFydCkge1xuICAgIGNvbnN0IG5hbWUgPSBgJHt0aGlzLmluZGV4LnRvU3RyaW5nKCkucGFkU3RhcnQoNCwgJzAnKX0tJHtzdXBlci5uYW1lKGNoYXJ0KX1gO1xuICAgIHRoaXMuaW5kZXgrKztcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufSJdfQ==