@pipeline-builder/api-core 5.2.10 → 5.2.11
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/lib/types/ecosystem-notifications.d.ts +5 -4
- package/lib/types/ecosystem-notifications.js +10 -3
- package/lib/types/error-codes.d.ts +41 -0
- package/lib/types/error-codes.js +62 -1
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +2 -2
- package/lib/types/permissions.d.ts +1 -1
- package/lib/types/permissions.js +11 -2
- package/lib/types/pipeline.d.ts +2 -0
- package/lib/types/pipeline.js +3 -1
- package/lib/types/plugin-catalog.d.ts +44 -0
- package/lib/types/plugin-catalog.js +63 -1
- package/lib/types/remote-audit-actions.d.ts +1 -1
- package/lib/types/remote-audit-actions.js +13 -1
- package/lib/validation/index.d.ts +1 -1
- package/lib/validation/index.js +2 -2
- package/lib/validation/pipeline-schemas.d.ts +22 -0
- package/lib/validation/pipeline-schemas.js +19 -1
- package/lib/validation/plugin-spec-schema.d.ts +54 -2
- package/lib/validation/plugin-spec-schema.js +94 -7
- package/package.json +1 -1
|
@@ -29,6 +29,22 @@ export declare const PipelineFilterSchema: z.ZodObject<{
|
|
|
29
29
|
orgId: z.ZodOptional<z.ZodString>;
|
|
30
30
|
keyword: z.ZodOptional<z.ZodString>;
|
|
31
31
|
}, z.core.$strip>;
|
|
32
|
+
/**
|
|
33
|
+
* A managed toolchain RELEASE version (docs/plans/bootstrap-image-versioning.md
|
|
34
|
+
* §1): plain `MAJOR.MINOR.PATCH` — a managed name refuses prerelease uploads,
|
|
35
|
+
* so a release is never a range or a prerelease.
|
|
36
|
+
*/
|
|
37
|
+
export declare const TOOLCHAIN_RELEASE_VERSION_PATTERN: RegExp;
|
|
38
|
+
/**
|
|
39
|
+
* A pipeline's toolchain release pin (§5): `{ release: "1.4.2" }` pins BOTH
|
|
40
|
+
* halves of one release (`pipeline-bootstrap` + `cdk-synth`). Omitted = the
|
|
41
|
+
* org default, canary or platform default. Eligibility (D15) is checked by the
|
|
42
|
+
* pipeline service when the pin changes, not here. Never carried by a pipeline
|
|
43
|
+
* TEMPLATE (D12).
|
|
44
|
+
*/
|
|
45
|
+
export declare const PipelineToolchainPinSchema: z.ZodObject<{
|
|
46
|
+
release: z.ZodString;
|
|
47
|
+
}, z.core.$strict>;
|
|
32
48
|
/**
|
|
33
49
|
* Pipeline creation schema
|
|
34
50
|
*/
|
|
@@ -107,6 +123,9 @@ export declare const PipelineCreateSchema: z.ZodObject<{
|
|
|
107
123
|
}>>;
|
|
108
124
|
}, z.core.$loose>>;
|
|
109
125
|
}, z.core.$loose>>>;
|
|
126
|
+
toolchain: z.ZodOptional<z.ZodObject<{
|
|
127
|
+
release: z.ZodString;
|
|
128
|
+
}, z.core.$strict>>;
|
|
110
129
|
}, z.core.$loose>;
|
|
111
130
|
}, z.core.$strip>;
|
|
112
131
|
/**
|
|
@@ -176,6 +195,9 @@ export declare const PipelineUpdateSchema: z.ZodObject<{
|
|
|
176
195
|
}>>;
|
|
177
196
|
}, z.core.$loose>>;
|
|
178
197
|
}, z.core.$loose>>>;
|
|
198
|
+
toolchain: z.ZodOptional<z.ZodObject<{
|
|
199
|
+
release: z.ZodString;
|
|
200
|
+
}, z.core.$strict>>;
|
|
179
201
|
}, z.core.$loose>>;
|
|
180
202
|
isActive: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodPipe<z.ZodEnum<{
|
|
181
203
|
false: "false";
|
|
@@ -23,6 +23,22 @@ const PLUGIN_REF_NON_FIELDS = {
|
|
|
23
23
|
version: '`version` is not a plugin-reference field — it is ignored and the default version is used. '
|
|
24
24
|
+ 'Pin or range the version with `filter: { version: "1.2.3" }` (also ^, ~, 1.x, 1.2, latest).',
|
|
25
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* A managed toolchain RELEASE version (docs/plans/bootstrap-image-versioning.md
|
|
28
|
+
* §1): plain `MAJOR.MINOR.PATCH` — a managed name refuses prerelease uploads,
|
|
29
|
+
* so a release is never a range or a prerelease.
|
|
30
|
+
*/
|
|
31
|
+
export const TOOLCHAIN_RELEASE_VERSION_PATTERN = /^\d+\.\d+\.\d+$/;
|
|
32
|
+
/**
|
|
33
|
+
* A pipeline's toolchain release pin (§5): `{ release: "1.4.2" }` pins BOTH
|
|
34
|
+
* halves of one release (`pipeline-bootstrap` + `cdk-synth`). Omitted = the
|
|
35
|
+
* org default, canary or platform default. Eligibility (D15) is checked by the
|
|
36
|
+
* pipeline service when the pin changes, not here. Never carried by a pipeline
|
|
37
|
+
* TEMPLATE (D12).
|
|
38
|
+
*/
|
|
39
|
+
export const PipelineToolchainPinSchema = z.object({
|
|
40
|
+
release: z.string().regex(TOOLCHAIN_RELEASE_VERSION_PATTERN, 'toolchain.release must be a release version (MAJOR.MINOR.PATCH, e.g. 1.4.2)'),
|
|
41
|
+
}).strict();
|
|
26
42
|
/**
|
|
27
43
|
* Plugin options schema (name-based selection)
|
|
28
44
|
*/
|
|
@@ -104,6 +120,8 @@ const BuilderPropsSchema = z.object({
|
|
|
104
120
|
plugin: PluginOptionsSchema,
|
|
105
121
|
}).passthrough(),
|
|
106
122
|
stages: z.array(StageSchema).optional(),
|
|
123
|
+
/** Toolchain release pin (see {@link PipelineToolchainPinSchema}). */
|
|
124
|
+
toolchain: PipelineToolchainPinSchema.optional(),
|
|
107
125
|
}).passthrough().superRefine((props, ctx) => {
|
|
108
126
|
for (const key of Object.keys(props.tags ?? {})) {
|
|
109
127
|
if (!isReservedTagKey(key))
|
|
@@ -154,4 +172,4 @@ export const PipelineUpdateSchema = z.object({
|
|
|
154
172
|
isDefault: BooleanQuerySchema.optional(),
|
|
155
173
|
visibility: VisibilitySchema.optional(),
|
|
156
174
|
});
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc2NoZW1hcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vcGlwZWxpbmUtc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDMUQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25DLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBMkI7SUFDcEQsT0FBTyxFQUNMLDZGQUE2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Q0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLDBCQUEwQixDQUFDO0lBQzNELFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtJQUN2Qzs7Ozs7Ozs7T0FRRztJQUNILFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsS0FBSyxFQUFFLGtCQUFrQjtDQUMxQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0MsR0FBRyxvQkFBb0I7SUFDdkIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN4QyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3BDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN4QyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSwgVmlzaWJpbGl0eVNjaGVtYSwgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiB9IGZyb20gJy4uL3R5cGVzL2Vjb3N5c3RlbS5qcyc7XG5pbXBvcnQgeyBpc1Jlc2VydmVkVGFnS2V5LCBSRVNFUlZFRF9UQUdfS0VZUywgUkVTRVJWRURfVEFHX1BSRUZJWEVTIH0gZnJvbSAnLi4vdHlwZXMvcmVzZXJ2ZWQtdGFncy5qcyc7XG5cbi8qKlxuICogUGlwZWxpbmUgZmlsdGVyIHNjaGVtYSBmb3IgcXVlcnkgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVGaWx0ZXJTY2hlbWEgPSBCYXNlRmlsdGVyU2NoZW1hLmV4dGVuZCh7XG4gIHByb2plY3Q6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIG9yZ2FuaXphdGlvbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBvcmdJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAga2V5d29yZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEtleXMgdGhhdCBsb29rIGxpa2UgcGx1Z2luLXJlZmVyZW5jZSBmaWVsZHMgYnV0IGFyZW4ndDogc3ludGggbmV2ZXIgcmVhZHNcbiAqIHRoZW0sIHNvIHdpdGhvdXQgYSBsb3VkIHJlZnVzYWwgdGhlIHJlZmVyZW5jZSBzaWxlbnRseSByZXNvbHZlcyB0byBzb21ldGhpbmdcbiAqIG90aGVyIHRoYW4gd2hhdCBpdHMgYXV0aG9yIG1lYW50LlxuICovXG5jb25zdCBQTFVHSU5fUkVGX05PTl9GSUVMRFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHZlcnNpb246XG4gICAgJ2B2ZXJzaW9uYCBpcyBub3QgYSBwbHVnaW4tcmVmZXJlbmNlIGZpZWxkIOKAlCBpdCBpcyBpZ25vcmVkIGFuZCB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHVzZWQuICdcbiAgICArICdQaW4gb3IgcmFuZ2UgdGhlIHZlcnNpb24gd2l0aCBgZmlsdGVyOiB7IHZlcnNpb246IFwiMS4yLjNcIiB9YCAoYWxzbyBeLCB+LCAxLngsIDEuMiwgbGF0ZXN0KS4nLFxufTtcblxuLyoqXG4gKiBQbHVnaW4gb3B0aW9ucyBzY2hlbWEgKG5hbWUtYmFzZWQgc2VsZWN0aW9uKVxuICovXG5jb25zdCBQbHVnaW5PcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgLyoqXG4gICAqIFRoZSBwdWJsaXNoZXIgd2hvc2UgaW5zdGFsbGVkIGxpc3RpbmcgdGhlIHJlZmVyZW5jZSByZXNvbHZlcyB0b1xuICAgKiAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuIEFic2VudDogdGhlIG9yZydzIG93biBwbHVnaW4sIHRoZW5cbiAgICogaXRzIHBhcmVudCdzLCB0aGVuIHRoZSBPZmZpY2lhbCBsaXN0aW5nLlxuICAgKi9cbiAgcHVibGlzaGVyOiB6LnN0cmluZygpLm1heCgzOSkucmVnZXgoUFVCTElTSEVSX0hBTkRMRV9QQVRURVJOLCAncHVibGlzaGVyIG11c3QgYmUgYSBwdWJsaXNoZXIgaGFuZGxlIChsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBzaW5nbGUgaHlwaGVucyknKS5vcHRpb25hbCgpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaWx0ZXI6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICBtZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG59KS5wYXNzdGhyb3VnaCgpLnN1cGVyUmVmaW5lKChyZWYsIGN0eCkgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIG1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKFBMVUdJTl9SRUZfTk9OX0ZJRUxEUykpIHtcbiAgICBpZiAoa2V5IGluIChyZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzdGVwIHNjaGVtYVxuICpcbiAqIGBwYXNzdGhyb3VnaCgpYCBrZWVwcyBmb3J3YXJkLWNvbXBhdGlibGUgZmllbGRzLCBidXQgYSBmZXcgY29tbW9uIG1pc3Rha2VzIGFyZVxuICogcmVqZWN0ZWQgbG91ZGx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZWQgYXQgc3ludGgg4oCUIG1vc3Qgbm90YWJseSBhXG4gKiB0b3AtbGV2ZWwgYGNvbW1hbmRzYCwgd2hpY2ggaXMgTk9UIGEgc3RlcCBmaWVsZCAodGhlIHBsdWdpbidzIG93biBjb21tYW5kcyBydW4pXG4gKiBhbmQgd291bGQgb3RoZXJ3aXNlIGRvIG5vdGhpbmcuXG4gKi9cbmNvbnN0IFNURVBfTk9OX0ZJRUxEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY29tbWFuZHM6XG4gICAgJ2Bjb21tYW5kc2AgaXMgbm90IGEgc3RlcCBmaWVsZCDigJQgaXQgaXMgaWdub3JlZCBhdCBzeW50aCAodGhlIHBsdWdpblxcJ3Mgb3duIGNvbW1hbmRzIHJ1bikuICdcbiAgICArICdUbyBjaGFuZ2Ugd2hhdCBhIHN0ZXAgcnVucywgdXNlIGEgcGx1Z2luIGVudiBrbm9iIChlLmcuIGBtZXRhZGF0YS5HUkFETEVfVEFTS2ApLCAnXG4gICAgKyAnYHByZUNvbW1hbmRzYC9gcG9zdENvbW1hbmRzYCB0byBhZGQgY29tbWFuZHMgYXJvdW5kIHRoZSBwbHVnaW5cXCdzLCBvciB0aGUgJ1xuICAgICsgJ2Bhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYCBtZXRhZGF0YSBrZXkgZm9yIGEgZnVsbCBvdmVycmlkZS4nLFxufTtcblxuY29uc3QgU3RhZ2VTdGVwU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgbmV0d29yazogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIHBvc2l0aW9uOiB6LmVudW0oWydwcmUnLCAncG9zdCddKS5vcHRpb25hbCgpLFxufSkucGFzc3Rocm91Z2goKS5zdXBlclJlZmluZSgoc3RlcCwgY3R4KSA9PiB7XG4gIGZvciAoY29uc3QgW2tleSwgbWVzc2FnZV0gb2YgT2JqZWN0LmVudHJpZXMoU1RFUF9OT05fRklFTERTKSkge1xuICAgIGlmIChrZXkgaW4gKHN0ZXAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzY2hlbWEuIGBwYXNzdGhyb3VnaCgpYCBsaWtlIGl0cyBzaWJsaW5nczogYSBzdHJpY3QtYnktZGVmYXVsdCBvYmplY3RcbiAqIGhlcmUgc3RyaXBwZWQgZXZlcnkgdW5kZWNsYXJlZCBzdGFnZSBmaWVsZCBiZWZvcmUgc3RvcmFnZSDigJQgaW5jbHVkaW5nXG4gKiBgZW52aXJvbm1lbnRgLCB3aGljaCBtYXJrcyBhIHN0YWdlIGFzIGEgRE9SQSBkZXBsb3kuXG4gKi9cbmNvbnN0IFN0YWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGFnZU5hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogRGVwbG95IGVudmlyb25tZW50IHRoaXMgc3RhZ2UgdGFyZ2V0cyAoRE9SQSBkZXBsb3kgYXR0cmlidXRpb24sIGBwYi5kZXBsb3lzYCkuICovXG4gIGVudmlyb25tZW50OiB6LnN0cmluZygpLm1pbigxKS5tYXgoNjQpLm9wdGlvbmFsKCksXG4gIHN0ZXBzOiB6LmFycmF5KFN0YWdlU3RlcFNjaGVtYSkubWluKDEpLFxufSkucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBCdWlsZGVyUHJvcHMgc2NoZW1hIOKAlCBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZm9yIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24uXG4gKiBVc2VzIHBhc3N0aHJvdWdoKCkgdG8gYWxsb3cgYWRkaXRpb25hbCBmaWVsZHMgd2l0aG91dCByZWplY3RpbmcgdGhlbS5cbiAqL1xuY29uc3QgQnVpbGRlclByb3BzU2NoZW1hID0gei5vYmplY3Qoe1xuICBwcm9qZWN0OiB6LnN0cmluZygpLm1pbigxKSxcbiAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLm1pbigxKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGdsb2JhbDogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIGRlZmF1bHRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgcm9sZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBDb3N0LWFsbG9jYXRpb24gdGFncyBhcHBsaWVkIHRvIHRoZSBwaXBlbGluZSdzIHN0YWNrLiBSZXNlcnZlZCBrZXlzIGFyZVxuICAgKiByZWZ1c2VkIHJhdGhlciB0aGFuIGRyb3BwZWQsIHNvIGEgY2FsbGVyIGxlYXJucyB3aGljaCBrZXkgaXQgbWF5IG5vdCBzZXQ7XG4gICAqIGBQaXBlbGluZUJ1aWxkZXJgIGRyb3BzIHRoZW0gYWdhaW4gYXQgc3ludGggZm9yIGNhbGxlcnMgdGhhdCBieXBhc3MgdGhlIEFQSS5cbiAgICovXG4gIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHN5bnRoOiB6Lm9iamVjdCh7XG4gICAgc291cmNlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIH0pLnBhc3N0aHJvdWdoKCksXG4gIHN0YWdlczogei5hcnJheShTdGFnZVNjaGVtYSkub3B0aW9uYWwoKSxcbn0pLnBhc3N0aHJvdWdoKCkuc3VwZXJSZWZpbmUoKHByb3BzLCBjdHgpID0+IHtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoKHByb3BzIGFzIHsgdGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkudGFncyA/PyB7fSkpIHtcbiAgICBpZiAoIWlzUmVzZXJ2ZWRUYWdLZXkoa2V5KSkgY29udGludWU7XG4gICAgY3R4LmFkZElzc3VlKHtcbiAgICAgIGNvZGU6ICdjdXN0b20nLFxuICAgICAgcGF0aDogWyd0YWdzJywga2V5XSxcbiAgICAgIG1lc3NhZ2U6XG4gICAgICAgIGBcXGAke2tleX1cXGAgaXMgYSByZXNlcnZlZCB0YWcga2V5IGFuZCBjYW5ub3QgYmUgc2V0LiBSZXNlcnZlZDogYFxuICAgICAgICArIGAke1JFU0VSVkVEX1RBR19LRVlTLmpvaW4oJywgJyl9LCBhbmQgYW55dGhpbmcgc3RhcnRpbmcgd2l0aCBgXG4gICAgICAgICsgYCR7UkVTRVJWRURfVEFHX1BSRUZJWEVTLmpvaW4oJyBvciAnKX0uIFRoZXNlIGNhcnJ5IHBpcGVsaW5lIHRlbmFuY3kgYW5kIGBcbiAgICAgICAgKyAnZGVwbG95IGF0dHJpYnV0aW9uLCBzbyB0aGUgcGxhdGZvcm0gb3ducyB0aGVtLicsXG4gICAgfSk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFBpcGVsaW5lIGNyZWF0aW9uIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVDcmVhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC4uLkNhdGFsb2dNZXRhZGF0YVNoYXBlLFxuICBwcm9qZWN0OiB6LnN0cmluZygpLm1pbigxLCAnUHJvamVjdCBpcyByZXF1aXJlZCcpLFxuICBvcmdhbml6YXRpb246IHouc3RyaW5nKCkubWluKDEsICdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHBpcGVsaW5lIHBhdXNlZC4gRGVjbGFyZWQgaGVyZSBiZWNhdXNlIGl0IHVzZWQgdG8gYmUgc3RyaXBwZWQ6XG4gICAqIHRoZSBzY2hlbWEgaXMgc3RyaWN0LWJ5LWRlZmF1bHQsIHNvIHRoZSBDTEkncyBgLS1uby1hY3RpdmVgIHdhcyBzaWxlbnRseVxuICAgKiBkcm9wcGVkIGFuZCBldmVyeSBwaXBlbGluZSBjYW1lIHVwIGFjdGl2ZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gYGlzRGVmYXVsdGAgY291bnRlcnBhcnQuIGBwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWVgIGFsbG93c1xuICAgKiBleGFjdGx5IG9uZSBwaXBlbGluZSBwZXIgKHByb2plY3QsIG9yZ2FuaXphdGlvbiwgb3JnKSwgc28gdGhlIHJvdyBjcmVhdGVkIGluXG4gICAqIGEgc2xvdCBJUyB0aGF0IHNsb3QncyBkZWZhdWx0IOKAlCBhIGBmYWxzZWAgY291bGQgbm90IGJlIGhvbm91cmVkLlxuICAgKi9cbiAgaXNBY3RpdmU6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICBwcm9wczogQnVpbGRlclByb3BzU2NoZW1hLFxufSk7XG5cbi8qKlxuICogUGlwZWxpbmUgdXBkYXRlIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVVcGRhdGVTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIC4uLkNhdGFsb2dNZXRhZGF0YVNoYXBlLFxuICBwaXBlbGluZU5hbWU6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHByb3BzOiBCdWlsZGVyUHJvcHNTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICBpc0RlZmF1bHQ6IEJvb2xlYW5RdWVyeVNjaGVtYS5vcHRpb25hbCgpLFxuICB2aXNpYmlsaXR5OiBWaXNpYmlsaXR5U2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbiJdfQ==
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc2NoZW1hcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vcGlwZWxpbmUtc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDMUQsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3JDLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUMxQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ25DLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBMkI7SUFDcEQsT0FBTyxFQUNMLDZGQUE2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QUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN4QyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFO0lBQ3BDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtJQUN4QyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO0NBQ3hDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSwgVmlzaWJpbGl0eVNjaGVtYSwgQ2F0YWxvZ01ldGFkYXRhU2hhcGUgfSBmcm9tICcuL2NvbW1vbi1zY2hlbWFzLmpzJztcbmltcG9ydCB7IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiB9IGZyb20gJy4uL3R5cGVzL2Vjb3N5c3RlbS5qcyc7XG5pbXBvcnQgeyBpc1Jlc2VydmVkVGFnS2V5LCBSRVNFUlZFRF9UQUdfS0VZUywgUkVTRVJWRURfVEFHX1BSRUZJWEVTIH0gZnJvbSAnLi4vdHlwZXMvcmVzZXJ2ZWQtdGFncy5qcyc7XG5cbi8qKlxuICogUGlwZWxpbmUgZmlsdGVyIHNjaGVtYSBmb3IgcXVlcnkgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVGaWx0ZXJTY2hlbWEgPSBCYXNlRmlsdGVyU2NoZW1hLmV4dGVuZCh7XG4gIHByb2plY3Q6IHouc3RyaW5nKCkubWluKDEpLm9wdGlvbmFsKCksXG4gIG9yZ2FuaXphdGlvbjogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBvcmdJZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAga2V5d29yZDogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEtleXMgdGhhdCBsb29rIGxpa2UgcGx1Z2luLXJlZmVyZW5jZSBmaWVsZHMgYnV0IGFyZW4ndDogc3ludGggbmV2ZXIgcmVhZHNcbiAqIHRoZW0sIHNvIHdpdGhvdXQgYSBsb3VkIHJlZnVzYWwgdGhlIHJlZmVyZW5jZSBzaWxlbnRseSByZXNvbHZlcyB0byBzb21ldGhpbmdcbiAqIG90aGVyIHRoYW4gd2hhdCBpdHMgYXV0aG9yIG1lYW50LlxuICovXG5jb25zdCBQTFVHSU5fUkVGX05PTl9GSUVMRFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIHZlcnNpb246XG4gICAgJ2B2ZXJzaW9uYCBpcyBub3QgYSBwbHVnaW4tcmVmZXJlbmNlIGZpZWxkIOKAlCBpdCBpcyBpZ25vcmVkIGFuZCB0aGUgZGVmYXVsdCB2ZXJzaW9uIGlzIHVzZWQuICdcbiAgICArICdQaW4gb3IgcmFuZ2UgdGhlIHZlcnNpb24gd2l0aCBgZmlsdGVyOiB7IHZlcnNpb246IFwiMS4yLjNcIiB9YCAoYWxzbyBeLCB+LCAxLngsIDEuMiwgbGF0ZXN0KS4nLFxufTtcblxuLyoqXG4gKiBBIG1hbmFnZWQgdG9vbGNoYWluIFJFTEVBU0UgdmVyc2lvbiAoZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZFxuICogwqcxKTogcGxhaW4gYE1BSk9SLk1JTk9SLlBBVENIYCDigJQgYSBtYW5hZ2VkIG5hbWUgcmVmdXNlcyBwcmVyZWxlYXNlIHVwbG9hZHMsXG4gKiBzbyBhIHJlbGVhc2UgaXMgbmV2ZXIgYSByYW5nZSBvciBhIHByZXJlbGVhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT09MQ0hBSU5fUkVMRUFTRV9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKyQvO1xuXG4vKipcbiAqIEEgcGlwZWxpbmUncyB0b29sY2hhaW4gcmVsZWFzZSBwaW4gKMKnNSk6IGB7IHJlbGVhc2U6IFwiMS40LjJcIiB9YCBwaW5zIEJPVEhcbiAqIGhhbHZlcyBvZiBvbmUgcmVsZWFzZSAoYHBpcGVsaW5lLWJvb3RzdHJhcGAgKyBgY2RrLXN5bnRoYCkuIE9taXR0ZWQgPSB0aGVcbiAqIG9yZyBkZWZhdWx0LCBjYW5hcnkgb3IgcGxhdGZvcm0gZGVmYXVsdC4gRWxpZ2liaWxpdHkgKEQxNSkgaXMgY2hlY2tlZCBieSB0aGVcbiAqIHBpcGVsaW5lIHNlcnZpY2Ugd2hlbiB0aGUgcGluIGNoYW5nZXMsIG5vdCBoZXJlLiBOZXZlciBjYXJyaWVkIGJ5IGEgcGlwZWxpbmVcbiAqIFRFTVBMQVRFIChEMTIpLlxuICovXG5leHBvcnQgY29uc3QgUGlwZWxpbmVUb29sY2hhaW5QaW5TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHJlbGVhc2U6IHouc3RyaW5nKCkucmVnZXgoVE9PTENIQUlOX1JFTEVBU0VfVkVSU0lPTl9QQVRURVJOLCAndG9vbGNoYWluLnJlbGVhc2UgbXVzdCBiZSBhIHJlbGVhc2UgdmVyc2lvbiAoTUFKT1IuTUlOT1IuUEFUQ0gsIGUuZy4gMS40LjIpJyksXG59KS5zdHJpY3QoKTtcblxuLyoqXG4gKiBQbHVnaW4gb3B0aW9ucyBzY2hlbWEgKG5hbWUtYmFzZWQgc2VsZWN0aW9uKVxuICovXG5jb25zdCBQbHVnaW5PcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgLyoqXG4gICAqIFRoZSBwdWJsaXNoZXIgd2hvc2UgaW5zdGFsbGVkIGxpc3RpbmcgdGhlIHJlZmVyZW5jZSByZXNvbHZlcyB0b1xuICAgKiAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCkuIEFic2VudDogdGhlIG9yZydzIG93biBwbHVnaW4sIHRoZW5cbiAgICogaXRzIHBhcmVudCdzLCB0aGVuIHRoZSBPZmZpY2lhbCBsaXN0aW5nLlxuICAgKi9cbiAgcHVibGlzaGVyOiB6LnN0cmluZygpLm1heCgzOSkucmVnZXgoUFVCTElTSEVSX0hBTkRMRV9QQVRURVJOLCAncHVibGlzaGVyIG11c3QgYmUgYSBwdWJsaXNoZXIgaGFuZGxlIChsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBzaW5nbGUgaHlwaGVucyknKS5vcHRpb25hbCgpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmaWx0ZXI6IHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKS5vcHRpb25hbCgpLFxuICBtZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG59KS5wYXNzdGhyb3VnaCgpLnN1cGVyUmVmaW5lKChyZWYsIGN0eCkgPT4ge1xuICBmb3IgKGNvbnN0IFtrZXksIG1lc3NhZ2VdIG9mIE9iamVjdC5lbnRyaWVzKFBMVUdJTl9SRUZfTk9OX0ZJRUxEUykpIHtcbiAgICBpZiAoa2V5IGluIChyZWYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzdGVwIHNjaGVtYVxuICpcbiAqIGBwYXNzdGhyb3VnaCgpYCBrZWVwcyBmb3J3YXJkLWNvbXBhdGlibGUgZmllbGRzLCBidXQgYSBmZXcgY29tbW9uIG1pc3Rha2VzIGFyZVxuICogcmVqZWN0ZWQgbG91ZGx5IHJhdGhlciB0aGFuIHNpbGVudGx5IGlnbm9yZWQgYXQgc3ludGgg4oCUIG1vc3Qgbm90YWJseSBhXG4gKiB0b3AtbGV2ZWwgYGNvbW1hbmRzYCwgd2hpY2ggaXMgTk9UIGEgc3RlcCBmaWVsZCAodGhlIHBsdWdpbidzIG93biBjb21tYW5kcyBydW4pXG4gKiBhbmQgd291bGQgb3RoZXJ3aXNlIGRvIG5vdGhpbmcuXG4gKi9cbmNvbnN0IFNURVBfTk9OX0ZJRUxEUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgY29tbWFuZHM6XG4gICAgJ2Bjb21tYW5kc2AgaXMgbm90IGEgc3RlcCBmaWVsZCDigJQgaXQgaXMgaWdub3JlZCBhdCBzeW50aCAodGhlIHBsdWdpblxcJ3Mgb3duIGNvbW1hbmRzIHJ1bikuICdcbiAgICArICdUbyBjaGFuZ2Ugd2hhdCBhIHN0ZXAgcnVucywgdXNlIGEgcGx1Z2luIGVudiBrbm9iIChlLmcuIGBtZXRhZGF0YS5HUkFETEVfVEFTS2ApLCAnXG4gICAgKyAnYHByZUNvbW1hbmRzYC9gcG9zdENvbW1hbmRzYCB0byBhZGQgY29tbWFuZHMgYXJvdW5kIHRoZSBwbHVnaW5cXCdzLCBvciB0aGUgJ1xuICAgICsgJ2Bhd3M6Y2RrOnBpcGVsaW5lczpjb2RlYnVpbGRzdGVwOmNvbW1hbmRzYCBtZXRhZGF0YSBrZXkgZm9yIGEgZnVsbCBvdmVycmlkZS4nLFxufTtcblxuY29uc3QgU3RhZ2VTdGVwU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgbmV0d29yazogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIHBvc2l0aW9uOiB6LmVudW0oWydwcmUnLCAncG9zdCddKS5vcHRpb25hbCgpLFxufSkucGFzc3Rocm91Z2goKS5zdXBlclJlZmluZSgoc3RlcCwgY3R4KSA9PiB7XG4gIGZvciAoY29uc3QgW2tleSwgbWVzc2FnZV0gb2YgT2JqZWN0LmVudHJpZXMoU1RFUF9OT05fRklFTERTKSkge1xuICAgIGlmIChrZXkgaW4gKHN0ZXAgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiAnY3VzdG9tJywgcGF0aDogW2tleV0sIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFnZSBzY2hlbWEuIGBwYXNzdGhyb3VnaCgpYCBsaWtlIGl0cyBzaWJsaW5nczogYSBzdHJpY3QtYnktZGVmYXVsdCBvYmplY3RcbiAqIGhlcmUgc3RyaXBwZWQgZXZlcnkgdW5kZWNsYXJlZCBzdGFnZSBmaWVsZCBiZWZvcmUgc3RvcmFnZSDigJQgaW5jbHVkaW5nXG4gKiBgZW52aXJvbm1lbnRgLCB3aGljaCBtYXJrcyBhIHN0YWdlIGFzIGEgRE9SQSBkZXBsb3kuXG4gKi9cbmNvbnN0IFN0YWdlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGFnZU5hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICBhbGlhczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogRGVwbG95IGVudmlyb25tZW50IHRoaXMgc3RhZ2UgdGFyZ2V0cyAoRE9SQSBkZXBsb3kgYXR0cmlidXRpb24sIGBwYi5kZXBsb3lzYCkuICovXG4gIGVudmlyb25tZW50OiB6LnN0cmluZygpLm1pbigxKS5tYXgoNjQpLm9wdGlvbmFsKCksXG4gIHN0ZXBzOiB6LmFycmF5KFN0YWdlU3RlcFNjaGVtYSkubWluKDEpLFxufSkucGFzc3Rocm91Z2goKTtcblxuLyoqXG4gKiBCdWlsZGVyUHJvcHMgc2NoZW1hIOKAlCBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZm9yIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24uXG4gKiBVc2VzIHBhc3N0aHJvdWdoKCkgdG8gYWxsb3cgYWRkaXRpb25hbCBmaWVsZHMgd2l0aG91dCByZWplY3RpbmcgdGhlbS5cbiAqL1xuY29uc3QgQnVpbGRlclByb3BzU2NoZW1hID0gei5vYmplY3Qoe1xuICBwcm9qZWN0OiB6LnN0cmluZygpLm1pbigxKSxcbiAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLm1pbigxKSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGdsb2JhbDogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIGRlZmF1bHRzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgcm9sZTogei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBDb3N0LWFsbG9jYXRpb24gdGFncyBhcHBsaWVkIHRvIHRoZSBwaXBlbGluZSdzIHN0YWNrLiBSZXNlcnZlZCBrZXlzIGFyZVxuICAgKiByZWZ1c2VkIHJhdGhlciB0aGFuIGRyb3BwZWQsIHNvIGEgY2FsbGVyIGxlYXJucyB3aGljaCBrZXkgaXQgbWF5IG5vdCBzZXQ7XG4gICAqIGBQaXBlbGluZUJ1aWxkZXJgIGRyb3BzIHRoZW0gYWdhaW4gYXQgc3ludGggZm9yIGNhbGxlcnMgdGhhdCBieXBhc3MgdGhlIEFQSS5cbiAgICovXG4gIHRhZ3M6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIHN5bnRoOiB6Lm9iamVjdCh7XG4gICAgc291cmNlOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkub3B0aW9uYWwoKSxcbiAgICBwbHVnaW46IFBsdWdpbk9wdGlvbnNTY2hlbWEsXG4gIH0pLnBhc3N0aHJvdWdoKCksXG4gIHN0YWdlczogei5hcnJheShTdGFnZVNjaGVtYSkub3B0aW9uYWwoKSxcbiAgLyoqIFRvb2xjaGFpbiByZWxlYXNlIHBpbiAoc2VlIHtAbGluayBQaXBlbGluZVRvb2xjaGFpblBpblNjaGVtYX0pLiAqL1xuICB0b29sY2hhaW46IFBpcGVsaW5lVG9vbGNoYWluUGluU2NoZW1hLm9wdGlvbmFsKCksXG59KS5wYXNzdGhyb3VnaCgpLnN1cGVyUmVmaW5lKChwcm9wcywgY3R4KSA9PiB7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKChwcm9wcyBhcyB7IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pLnRhZ3MgPz8ge30pKSB7XG4gICAgaWYgKCFpc1Jlc2VydmVkVGFnS2V5KGtleSkpIGNvbnRpbnVlO1xuICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICBjb2RlOiAnY3VzdG9tJyxcbiAgICAgIHBhdGg6IFsndGFncycsIGtleV0sXG4gICAgICBtZXNzYWdlOlxuICAgICAgICBgXFxgJHtrZXl9XFxgIGlzIGEgcmVzZXJ2ZWQgdGFnIGtleSBhbmQgY2Fubm90IGJlIHNldC4gUmVzZXJ2ZWQ6IGBcbiAgICAgICAgKyBgJHtSRVNFUlZFRF9UQUdfS0VZUy5qb2luKCcsICcpfSwgYW5kIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYFxuICAgICAgICArIGAke1JFU0VSVkVEX1RBR19QUkVGSVhFUy5qb2luKCcgb3IgJyl9LiBUaGVzZSBjYXJyeSBwaXBlbGluZSB0ZW5hbmN5IGFuZCBgXG4gICAgICAgICsgJ2RlcGxveSBhdHRyaWJ1dGlvbiwgc28gdGhlIHBsYXRmb3JtIG93bnMgdGhlbS4nLFxuICAgIH0pO1xuICB9XG59KTtcblxuLyoqXG4gKiBQaXBlbGluZSBjcmVhdGlvbiBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFBpcGVsaW5lQ3JlYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICAuLi5DYXRhbG9nTWV0YWRhdGFTaGFwZSxcbiAgcHJvamVjdDogei5zdHJpbmcoKS5taW4oMSwgJ1Byb2plY3QgaXMgcmVxdWlyZWQnKSxcbiAgb3JnYW5pemF0aW9uOiB6LnN0cmluZygpLm1pbigxLCAnT3JnYW5pemF0aW9uIGlzIHJlcXVpcmVkJyksXG4gIHBpcGVsaW5lTmFtZTogei5zdHJpbmcoKS5taW4oMSkub3B0aW9uYWwoKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5d29yZHM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBwaXBlbGluZSBwYXVzZWQuIERlY2xhcmVkIGhlcmUgYmVjYXVzZSBpdCB1c2VkIHRvIGJlIHN0cmlwcGVkOlxuICAgKiB0aGUgc2NoZW1hIGlzIHN0cmljdC1ieS1kZWZhdWx0LCBzbyB0aGUgQ0xJJ3MgYC0tbm8tYWN0aXZlYCB3YXMgc2lsZW50bHlcbiAgICogZHJvcHBlZCBhbmQgZXZlcnkgcGlwZWxpbmUgY2FtZSB1cCBhY3RpdmUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGBpc0RlZmF1bHRgIGNvdW50ZXJwYXJ0LiBgcGlwZWxpbmVfcHJvamVjdF9vcmdfdW5pcXVlYCBhbGxvd3NcbiAgICogZXhhY3RseSBvbmUgcGlwZWxpbmUgcGVyIChwcm9qZWN0LCBvcmdhbml6YXRpb24sIG9yZyksIHNvIHRoZSByb3cgY3JlYXRlZCBpblxuICAgKiBhIHNsb3QgSVMgdGhhdCBzbG90J3MgZGVmYXVsdCDigJQgYSBgZmFsc2VgIGNvdWxkIG5vdCBiZSBob25vdXJlZC5cbiAgICovXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgcHJvcHM6IEJ1aWxkZXJQcm9wc1NjaGVtYSxcbn0pO1xuXG4vKipcbiAqIFBpcGVsaW5lIHVwZGF0ZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IFBpcGVsaW5lVXBkYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICAuLi5DYXRhbG9nTWV0YWRhdGFTaGFwZSxcbiAgcGlwZWxpbmVOYW1lOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXl3b3Jkczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBwcm9wczogQnVpbGRlclByb3BzU2NoZW1hLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNEZWZhdWx0OiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgdmlzaWJpbGl0eTogVmlzaWJpbGl0eVNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4iXX0=
|
|
@@ -9,7 +9,15 @@
|
|
|
9
9
|
* {@link checkPluginConfig}.
|
|
10
10
|
*/
|
|
11
11
|
import { z } from 'zod';
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* `BuildImage` is the managed toolchain's build image (`pipeline-bootstrap`,
|
|
14
|
+
* docs/plans/bootstrap-image-versioning.md §1): a prebuilt image with no
|
|
15
|
+
* commands, never a pipeline step. {@link STEP_PLUGIN_TYPES} is the subset a
|
|
16
|
+
* step (or a generator) may use.
|
|
17
|
+
*/
|
|
18
|
+
export declare const PLUGIN_TYPES: readonly ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep', 'BuildImage'];
|
|
19
|
+
/** The plugin types a pipeline step can use — every type except `BuildImage`. */
|
|
20
|
+
export declare const STEP_PLUGIN_TYPES: readonly ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
|
|
13
21
|
export declare const PLUGIN_COMPUTE_TYPES: readonly ['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE'];
|
|
14
22
|
export declare const PLUGIN_FAILURE_BEHAVIORS: readonly ['fail', 'warn', 'ignore'];
|
|
15
23
|
export declare const PLUGIN_BUILD_TYPES: readonly ['build_image', 'prebuilt', 'metadata_only'];
|
|
@@ -22,6 +30,39 @@ export declare const PLUGIN_VERSION_PATTERN: RegExp;
|
|
|
22
30
|
export declare const EGRESS_MAX_HOSTS = 50;
|
|
23
31
|
/** True when `host` is an acceptable `network.egress` entry. */
|
|
24
32
|
export declare function isValidEgressHost(host: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* The tool versions a managed build image carries, written by
|
|
35
|
+
* `sync-image-tags.sh` from the Dockerfile `ARG`s. Every field is required and
|
|
36
|
+
* exact: this is what the release IS, not what it accepts.
|
|
37
|
+
*/
|
|
38
|
+
export declare const PluginToolchainSchema: z.ZodObject<{
|
|
39
|
+
pipelineManager: z.ZodString;
|
|
40
|
+
awsCdk: z.ZodString;
|
|
41
|
+
cdkAssets: z.ZodString;
|
|
42
|
+
esbuild: z.ZodString;
|
|
43
|
+
pnpm: z.ZodString;
|
|
44
|
+
node: z.ZodString;
|
|
45
|
+
}, z.core.$strict>;
|
|
46
|
+
export type PluginToolchain = z.infer<typeof PluginToolchainSchema>;
|
|
47
|
+
/**
|
|
48
|
+
* Where a managed build image's `toolchain` is persisted: its plugin row's
|
|
49
|
+
* `metadata`, one flat `toolchain.<field>` key per tool (the column is a flat
|
|
50
|
+
* string map, and a `BuildImage` spec may carry no step `metadata` of its own,
|
|
51
|
+
* so the keys never collide). Written at upload by {@link toolchainMetadata},
|
|
52
|
+
* read by {@link toolchainFromMetadata} — the platform-default metadata guard
|
|
53
|
+
* and the resolver both go through it.
|
|
54
|
+
*/
|
|
55
|
+
export declare const TOOLCHAIN_METADATA_PREFIX = "toolchain.";
|
|
56
|
+
/** The flat `metadata` entries that persist `toolchain` on a build image's row. */
|
|
57
|
+
export declare function toolchainMetadata(toolchain: PluginToolchain): Record<string, string>;
|
|
58
|
+
/**
|
|
59
|
+
* The `toolchain` a build image's row carries, or `null` when its `metadata`
|
|
60
|
+
* holds no complete, valid one (every field required and exact — the same
|
|
61
|
+
* schema the upload validated).
|
|
62
|
+
*/
|
|
63
|
+
export declare function toolchainFromMetadata(metadata: unknown): PluginToolchain | null;
|
|
64
|
+
/** A build-input hash: 64 lowercase hex characters (sha256), optionally `sha256:`-prefixed. */
|
|
65
|
+
export declare const PLUGIN_SOURCE_DIGEST_PATTERN: RegExp;
|
|
25
66
|
export declare const PluginConfigSchema: z.ZodObject<{
|
|
26
67
|
pluginSpec: z.ZodOptional<z.ZodString>;
|
|
27
68
|
dockerfile: z.ZodOptional<z.ZodString>;
|
|
@@ -40,6 +81,7 @@ export declare const PluginSpecSchema: z.ZodObject<{
|
|
|
40
81
|
category: z.ZodOptional<z.ZodString>;
|
|
41
82
|
version: z.ZodOptional<z.ZodString>;
|
|
42
83
|
pluginType: z.ZodOptional<z.ZodEnum<{
|
|
84
|
+
BuildImage: "BuildImage";
|
|
43
85
|
CodeBuildStep: "CodeBuildStep";
|
|
44
86
|
ManualApprovalStep: "ManualApprovalStep";
|
|
45
87
|
ShellStep: "ShellStep";
|
|
@@ -86,6 +128,15 @@ export declare const PluginSpecSchema: z.ZodObject<{
|
|
|
86
128
|
network: z.ZodOptional<z.ZodObject<{
|
|
87
129
|
egress: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
88
130
|
}, z.core.$strict>>;
|
|
131
|
+
toolchain: z.ZodOptional<z.ZodObject<{
|
|
132
|
+
pipelineManager: z.ZodString;
|
|
133
|
+
awsCdk: z.ZodString;
|
|
134
|
+
cdkAssets: z.ZodString;
|
|
135
|
+
esbuild: z.ZodString;
|
|
136
|
+
pnpm: z.ZodString;
|
|
137
|
+
node: z.ZodString;
|
|
138
|
+
}, z.core.$strict>>;
|
|
139
|
+
sourceDigest: z.ZodOptional<z.ZodString>;
|
|
89
140
|
}, z.core.$strict>;
|
|
90
141
|
export type PluginSpecInput = z.infer<typeof PluginSpecSchema>;
|
|
91
142
|
/**
|
|
@@ -107,6 +158,7 @@ export declare function checkPluginSpec(raw: unknown): PackageCheck<PluginSpecIn
|
|
|
107
158
|
export declare function checkPluginConfig(raw: unknown): PackageCheck<PluginConfigInput>;
|
|
108
159
|
/**
|
|
109
160
|
* The required-field contract: `name` and `version` always, `commands` for
|
|
110
|
-
* every type except `ManualApprovalStep
|
|
161
|
+
* every type except `ManualApprovalStep` and `BuildImage` (neither runs
|
|
162
|
+
* commands). Returns the upload's message, or null.
|
|
111
163
|
*/
|
|
112
164
|
export declare function pluginSpecRequiredFieldsProblem(spec: Pick<PluginSpecInput, 'name' | 'version' | 'commands' | 'pluginType'>): string | null;
|
|
@@ -12,11 +12,19 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { z } from 'zod';
|
|
14
14
|
import { IconKeySchema, PLUGIN_CATALOG_FIELD_SCHEMAS, ProjectUrlSchema, isAllowedSpdxId, } from './plugin-catalog-metadata.js';
|
|
15
|
-
import { PLUGIN_CHANGELOG_MAX_BYTES } from '../types/plugin-catalog.js';
|
|
15
|
+
import { PLUGIN_CHANGELOG_MAX_BYTES, isManagedToolchainPlugin } from '../types/plugin-catalog.js';
|
|
16
16
|
// -----------------------------------------------------------------------------
|
|
17
17
|
// Vocabularies
|
|
18
18
|
// -----------------------------------------------------------------------------
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* `BuildImage` is the managed toolchain's build image (`pipeline-bootstrap`,
|
|
21
|
+
* docs/plans/bootstrap-image-versioning.md §1): a prebuilt image with no
|
|
22
|
+
* commands, never a pipeline step. {@link STEP_PLUGIN_TYPES} is the subset a
|
|
23
|
+
* step (or a generator) may use.
|
|
24
|
+
*/
|
|
25
|
+
export const PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep', 'BuildImage'];
|
|
26
|
+
/** The plugin types a pipeline step can use — every type except `BuildImage`. */
|
|
27
|
+
export const STEP_PLUGIN_TYPES = ['CodeBuildStep', 'ShellStep', 'ManualApprovalStep'];
|
|
20
28
|
export const PLUGIN_COMPUTE_TYPES = ['SMALL', 'MEDIUM', 'LARGE', 'X2_LARGE'];
|
|
21
29
|
export const PLUGIN_FAILURE_BEHAVIORS = ['fail', 'warn', 'ignore'];
|
|
22
30
|
export const PLUGIN_BUILD_TYPES = ['build_image', 'prebuilt', 'metadata_only'];
|
|
@@ -40,6 +48,56 @@ export function isValidEgressHost(host) {
|
|
|
40
48
|
return host.length <= 253 && EGRESS_HOST_PATTERN.test(host);
|
|
41
49
|
}
|
|
42
50
|
// -----------------------------------------------------------------------------
|
|
51
|
+
// Managed toolchain metadata (BuildImage specs)
|
|
52
|
+
// -----------------------------------------------------------------------------
|
|
53
|
+
/** An EXACT semver (no range): `1.2.3`, optionally `-pre` / `+build`. */
|
|
54
|
+
const EXACT_SEMVER_PATTERN = /^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
|
|
55
|
+
const exactSemver = z.string().regex(EXACT_SEMVER_PATTERN, { message: 'must be an exact semver version (e.g. 1.2.3)' });
|
|
56
|
+
/**
|
|
57
|
+
* The tool versions a managed build image carries, written by
|
|
58
|
+
* `sync-image-tags.sh` from the Dockerfile `ARG`s. Every field is required and
|
|
59
|
+
* exact: this is what the release IS, not what it accepts.
|
|
60
|
+
*/
|
|
61
|
+
export const PluginToolchainSchema = z.object({
|
|
62
|
+
pipelineManager: exactSemver,
|
|
63
|
+
awsCdk: exactSemver,
|
|
64
|
+
cdkAssets: exactSemver,
|
|
65
|
+
esbuild: exactSemver,
|
|
66
|
+
pnpm: exactSemver,
|
|
67
|
+
node: exactSemver,
|
|
68
|
+
}).strict();
|
|
69
|
+
/**
|
|
70
|
+
* Where a managed build image's `toolchain` is persisted: its plugin row's
|
|
71
|
+
* `metadata`, one flat `toolchain.<field>` key per tool (the column is a flat
|
|
72
|
+
* string map, and a `BuildImage` spec may carry no step `metadata` of its own,
|
|
73
|
+
* so the keys never collide). Written at upload by {@link toolchainMetadata},
|
|
74
|
+
* read by {@link toolchainFromMetadata} — the platform-default metadata guard
|
|
75
|
+
* and the resolver both go through it.
|
|
76
|
+
*/
|
|
77
|
+
export const TOOLCHAIN_METADATA_PREFIX = 'toolchain.';
|
|
78
|
+
/** The flat `metadata` entries that persist `toolchain` on a build image's row. */
|
|
79
|
+
export function toolchainMetadata(toolchain) {
|
|
80
|
+
return Object.fromEntries(Object.entries(toolchain).map(([k, v]) => [`${TOOLCHAIN_METADATA_PREFIX}${k}`, v]));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The `toolchain` a build image's row carries, or `null` when its `metadata`
|
|
84
|
+
* holds no complete, valid one (every field required and exact — the same
|
|
85
|
+
* schema the upload validated).
|
|
86
|
+
*/
|
|
87
|
+
export function toolchainFromMetadata(metadata) {
|
|
88
|
+
if (!metadata || typeof metadata !== 'object')
|
|
89
|
+
return null;
|
|
90
|
+
const fields = {};
|
|
91
|
+
for (const [k, v] of Object.entries(metadata)) {
|
|
92
|
+
if (k.startsWith(TOOLCHAIN_METADATA_PREFIX))
|
|
93
|
+
fields[k.slice(TOOLCHAIN_METADATA_PREFIX.length)] = v;
|
|
94
|
+
}
|
|
95
|
+
const parsed = PluginToolchainSchema.safeParse(fields);
|
|
96
|
+
return parsed.success ? parsed.data : null;
|
|
97
|
+
}
|
|
98
|
+
/** A build-input hash: 64 lowercase hex characters (sha256), optionally `sha256:`-prefixed. */
|
|
99
|
+
export const PLUGIN_SOURCE_DIGEST_PATTERN = /^(sha256:)?[a-f0-9]{64}$/;
|
|
100
|
+
// -----------------------------------------------------------------------------
|
|
43
101
|
// config.yaml
|
|
44
102
|
// -----------------------------------------------------------------------------
|
|
45
103
|
export const PluginConfigSchema = z.object({
|
|
@@ -128,7 +186,35 @@ export const PluginSpecSchema = z.object({
|
|
|
128
186
|
message: 'must be a bare hostname (no scheme, port or path; one leading *. allowed)',
|
|
129
187
|
})).max(EGRESS_MAX_HOSTS).optional(),
|
|
130
188
|
}).strict().optional(),
|
|
131
|
-
|
|
189
|
+
// Managed toolchain metadata — `BuildImage` specs only (see the check below).
|
|
190
|
+
toolchain: PluginToolchainSchema.optional(),
|
|
191
|
+
sourceDigest: z.string().regex(PLUGIN_SOURCE_DIGEST_PATTERN, { message: 'must be a sha256 hex digest' }).optional(),
|
|
192
|
+
}).strict().superRefine((spec, ctx) => {
|
|
193
|
+
for (const issue of buildImageSpecProblems(spec))
|
|
194
|
+
ctx.addIssue({ code: 'custom', path: [issue.path], message: issue.message });
|
|
195
|
+
});
|
|
196
|
+
function buildImageSpecProblems(spec) {
|
|
197
|
+
const out = [];
|
|
198
|
+
if (spec.pluginType !== 'BuildImage') {
|
|
199
|
+
if (spec.toolchain !== undefined)
|
|
200
|
+
out.push({ path: 'toolchain', message: 'is only allowed on a BuildImage plugin' });
|
|
201
|
+
if (spec.sourceDigest !== undefined)
|
|
202
|
+
out.push({ path: 'sourceDigest', message: 'is only allowed on a BuildImage plugin' });
|
|
203
|
+
return out;
|
|
204
|
+
}
|
|
205
|
+
if (spec.name !== undefined && !isManagedToolchainPlugin(spec.name)) {
|
|
206
|
+
out.push({ path: 'pluginType', message: 'BuildImage is reserved for the managed toolchain plugins' });
|
|
207
|
+
}
|
|
208
|
+
if (spec.toolchain === undefined)
|
|
209
|
+
out.push({ path: 'toolchain', message: 'is required on a BuildImage plugin' });
|
|
210
|
+
if (spec.sourceDigest === undefined)
|
|
211
|
+
out.push({ path: 'sourceDigest', message: 'is required on a BuildImage plugin' });
|
|
212
|
+
for (const field of ['commands', 'installCommands', 'metadata']) {
|
|
213
|
+
if (spec[field] !== undefined)
|
|
214
|
+
out.push({ path: field, message: 'is not allowed on a BuildImage plugin' });
|
|
215
|
+
}
|
|
216
|
+
return out;
|
|
217
|
+
}
|
|
132
218
|
const isMapping = (raw) => typeof raw === 'object' && raw !== null && !Array.isArray(raw);
|
|
133
219
|
function checkAgainst(file, raw, schema, withPath) {
|
|
134
220
|
if (!isMapping(raw)) {
|
|
@@ -151,13 +237,14 @@ export function checkPluginConfig(raw) {
|
|
|
151
237
|
}
|
|
152
238
|
/**
|
|
153
239
|
* The required-field contract: `name` and `version` always, `commands` for
|
|
154
|
-
* every type except `ManualApprovalStep
|
|
240
|
+
* every type except `ManualApprovalStep` and `BuildImage` (neither runs
|
|
241
|
+
* commands). Returns the upload's message, or null.
|
|
155
242
|
*/
|
|
156
243
|
export function pluginSpecRequiredFieldsProblem(spec) {
|
|
157
|
-
const
|
|
158
|
-
if (!spec.name || !spec.version || (!
|
|
244
|
+
const runsNoCommands = spec.pluginType === 'ManualApprovalStep' || spec.pluginType === 'BuildImage';
|
|
245
|
+
if (!spec.name || !spec.version || (!runsNoCommands && !spec.commands)) {
|
|
159
246
|
return 'Invalid spec: name, version, and commands are required';
|
|
160
247
|
}
|
|
161
248
|
return null;
|
|
162
249
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMtc2NoZW1hLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxHQUMvRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXhFLGdGQUFnRjtBQUNoRixlQUFlO0FBQ2YsZ0ZBQWdGO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLENBQVUsQ0FBQztBQUMxRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBQ3RGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsQ0FBQztBQUM1RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFVLENBQUM7QUFHeEYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUNsRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsc0RBQXNELENBQUM7QUFFN0YsZ0ZBQWdGO0FBQ2hGLDRDQUE0QztBQUM1QyxnRkFBZ0Y7QUFFaEYsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUVuQzs7OztHQUlHO0FBQ0gsTUFB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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUaGUgcGx1Z2luIFBBQ0tBR0Ugc2NoZW1hczogYHBsdWdpbi1zcGVjLnlhbWxgIGFuZCBgY29uZmlnLnlhbWxgLCBleGFjdGx5IGFzXG4gKiB0aGUgcGx1Z2luIHNlcnZpY2UgdmFsaWRhdGVzIGFuIHVwbG9hZC4gU2hhcmVkIGZyb20gYXBpLWNvcmUgc28gdGhlIHVwbG9hZFxuICogcGF0aCAoYXBpL3BsdWdpbikgYW5kIHRoZSBDTEkgKGBwaXBlbGluZS1tYW5hZ2VyIHBsdWdpbiB2YWxpZGF0ZWAgL1xuICogYHBsdWdpbiBwdWJsaXNoYCkgYXBwbHkgT05FIHNjaGVtYSBhbmQgY2FuJ3QgZHJpZnQuXG4gKlxuICogUHVyZTogbm8gWUFNTCBwYXJzaW5nLCBubyBmaWxlc3lzdGVtLiBDYWxsZXJzIHBhcnNlICh3aXRoIHRoZWlyIG93biBzaXplIGFuZFxuICogYWxpYXMgYm91bmRzKSBhbmQgaGFuZCB0aGUgcmVzdWx0aW5nIG9iamVjdCB0byB7QGxpbmsgY2hlY2tQbHVnaW5TcGVjfSAvXG4gKiB7QGxpbmsgY2hlY2tQbHVnaW5Db25maWd9LlxuICovXG5cbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge1xuICBJY29uS2V5U2NoZW1hLCBQTFVHSU5fQ0FUQUxPR19GSUVMRF9TQ0hFTUFTLCBQcm9qZWN0VXJsU2NoZW1hLCBpc0FsbG93ZWRTcGR4SWQsXG59IGZyb20gJy4vcGx1Z2luLWNhdGFsb2ctbWV0YWRhdGEuanMnO1xuaW1wb3J0IHsgUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMgfSBmcm9tICcuLi90eXBlcy9wbHVnaW4tY2F0YWxvZy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWb2NhYnVsYXJpZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBQTFVHSU5fVFlQRVMgPSBbJ0NvZGVCdWlsZFN0ZXAnLCAnU2hlbGxTdGVwJywgJ01hbnVhbEFwcHJvdmFsU3RlcCddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9DT01QVVRFX1RZUEVTID0gWydTTUFMTCcsICdNRURJVU0nLCAnTEFSR0UnLCAnWDJfTEFSR0UnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fRkFJTFVSRV9CRUhBVklPUlMgPSBbJ2ZhaWwnLCAnd2FybicsICdpZ25vcmUnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBQTFVHSU5fQlVJTERfVFlQRVMgPSBbJ2J1aWxkX2ltYWdlJywgJ3ByZWJ1aWx0JywgJ21ldGFkYXRhX29ubHknXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBsdWdpbkJ1aWxkVHlwZSA9IHR5cGVvZiBQTFVHSU5fQlVJTERfVFlQRVNbbnVtYmVyXTtcblxuLyoqIFBsdWdpbiBuYW1lOiBsb3dlcmNhc2UgbGV0dGVycywgZGlnaXRzIGFuZCBoeXBoZW5zLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcbi8qKiBQbHVnaW4gdmVyc2lvbjogc2VtdmVyLCB3aXRoIG9wdGlvbmFsIGAtcHJlcmVsZWFzZWAgYW5kIGArYnVpbGRgIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9WRVJTSU9OX1BBVFRFUk4gPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyhcXCtbYS16QS1aMC05Li1dKyk/JC87XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBuZXR3b3JrLmVncmVzcyAoc3BlYy1vbmx5IHRydXN0IG1ldGFkYXRhKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1heCBkZWNsYXJlZCBgbmV0d29yay5lZ3Jlc3NgIGhvc3RuYW1lcy4gKi9cbmV4cG9ydCBjb25zdCBFR1JFU1NfTUFYX0hPU1RTID0gNTA7XG5cbi8qKlxuICogQSBiYXJlIEROUyBob3N0bmFtZSwgb3B0aW9uYWxseSB3aXRoIE9ORSBsZWFkaW5nIGAqLmAgd2lsZGNhcmQgbGFiZWwuIE5vXG4gKiBzY2hlbWUsIHBvcnQsIHBhdGgsIHVzZXJpbmZvIG9yIElQIGxpdGVyYWwg4oCUIGEgZGVjbGFyZWQgZWdyZXNzIHRhcmdldCBpcyBhXG4gKiBuYW1lIHRoZSByZXZpZXdlciBjYW4gcmVhZC5cbiAqL1xuY29uc3QgRUdSRVNTX0hPU1RfUEFUVEVSTiA9IC9eKD86XFwqXFwuKT8oPzpbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT9cXC4pK1thLXpdW2EtejAtOS1dezAsNjF9W2EtejAtOV0kLztcblxuLyoqIFRydWUgd2hlbiBgaG9zdGAgaXMgYW4gYWNjZXB0YWJsZSBgbmV0d29yay5lZ3Jlc3NgIGVudHJ5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZ3Jlc3NIb3N0KGhvc3Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaG9zdC5sZW5ndGggPD0gMjUzICYmIEVHUkVTU19IT1NUX1BBVFRFUk4udGVzdChob3N0KTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNvbmZpZy55YW1sXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUGx1Z2luQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW5TcGVjOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvY2tlcmZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRUeXBlOiB6LmVudW0oUExVR0lOX0JVSUxEX1RZUEVTKS5vcHRpb25hbCgpLFxuICAvLyBEZXRlcm1pbmlzdGljIGJ1aWxkIHRhZyB3cml0dGVuIGJ5IGJ1aWxkLXBsdWdpbi1pbWFnZXMuc2hcbiAgLy8gKGBwLTxuYW1lPi08c2hhMjU2OjEyPmApLiBJbmZvcm1hdGlvbmFsIG9ubHkgb24gdGhlIHVwbG9hZCBwYXRoIOKAlFxuICAvLyB0aGUgcGxhdGZvcm0gZG9lc24ndCBhY3Qgb24gaXQsIGJ1dCBpdCBsaXZlcyBpbiB0aGUgc2FtZSBjb25maWdcbiAgLy8gZmlsZSBhcyB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgbWV0YWRhdGEgc28gcmUtcnVucyBjYW4gc2hvcnQtY2lyY3VpdFxuICAvLyB1bmNoYW5nZWQgcGx1Z2lucyB3aXRob3V0IG5lZWRpbmcgYSBzZXBhcmF0ZSAuaW1hZ2UtaGFzaCBzaWRlY2FyLlxuICBpbWFnZVRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSkuc3RyaWN0KClcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdwcmVidWlsdCcgJiYgZC5kb2NrZXJmaWxlKSwge1xuICAgIG1lc3NhZ2U6ICdkb2NrZXJmaWxlIGlzIG5vdCBhbGxvd2VkIHdoZW4gYnVpbGRUeXBlIGlzIHByZWJ1aWx0JyxcbiAgfSlcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JyAmJiBkLmRvY2tlcmZpbGUpLCB7XG4gICAgbWVzc2FnZTogJ2RvY2tlcmZpbGUgaXMgbm90IGFsbG93ZWQgd2hlbiBidWlsZFR5cGUgaXMgbWV0YWRhdGFfb25seScsXG4gIH0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luQ29uZmlnSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Db25maWdTY2hlbWE+O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGx1Z2luLXNwZWMueWFtbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gbmFtZS92ZXJzaW9uL2NvbW1hbmRzIGFyZSB0aGUgcmVxdWlyZWQtZmllbGQgY29udHJhY3QsIGJ1dCB0aGV5J3JlIGNoZWNrZWQgYnlcbi8vIHtAbGluayBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtfSAodGhlIHN0YWJsZSBcIm5hbWUsIHZlcnNpb24sIGFuZFxuLy8gY29tbWFuZHMgYXJlIHJlcXVpcmVkXCIgbWVzc2FnZSBhbmQgdGhlIE1hbnVhbEFwcHJvdmFsU3RlcCBjYXJ2ZS1vdXQpLiBIZXJlXG4vLyB0aGV5J3JlIG9wdGlvbmFsIHN0cmluZ3M7IHRoZSBzY2hlbWEncyBqb2IgaXMgdG8gcmVqZWN0IG1hbGZvcm1lZCAqdHlwZXMqIG9uXG4vLyB0aGUgZmllbGRzIHRoYXQgZmxvdyBkb3duc3RyZWFtIHVuY2hlY2tlZC5cbmV4cG9ydCBjb25zdCBQbHVnaW5TcGVjU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5lbnVtKFBMVUdJTl9UWVBFUykub3B0aW9uYWwoKSxcbiAgY29tcHV0ZVR5cGU6IHouZW51bShQTFVHSU5fQ09NUFVURV9UWVBFUykub3B0aW9uYWwoKSxcbiAgLy8gPj0gMCBtaW51dGVzOiBNYW51YWxBcHByb3ZhbFN0ZXAgc3BlY3MgbGVnaXRpbWF0ZWx5IGRlY2xhcmUgYHRpbWVvdXQ6IDBgLlxuICB0aW1lb3V0OiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB6LmVudW0oUExVR0lOX0ZBSUxVUkVfQkVIQVZJT1JTKS5vcHRpb25hbCgpLFxuICBzZWNyZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICByZXF1aXJlZDogei5ib29sZWFuKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSkpLm9wdGlvbmFsKCksXG4gIC8vIEFjY2VwdCBhbiBleHBsaWNpdCBgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogbnVsbGAgKGEgTWFudWFsQXBwcm92YWxTdGVwIC9cbiAgLy8gb3V0cHV0LWxlc3Mgc3RlcCBsZWdpdGltYXRlbHkgZGVjbGFyZXMgaXQpIGFuZCBub3JtYWxpemUgaXQgdG8gYHVuZGVmaW5lZGAuXG4gIC8vIFdpdGhvdXQgYC5udWxsaXNoKClgIGEgcHJlc2VudCBZQU1MIGBudWxsYCBmYWlscyB0aGUgYmFyZSBzdHJpbmcgY2hlY2sgYW5kXG4gIC8vIDQwMHMgdGhlIHdob2xlIHVwbG9hZC5cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsaXNoKCkudHJhbnNmb3JtKCh2KSA9PiB2ID8/IHVuZGVmaW5lZCksXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pKS5vcHRpb25hbCgpLFxuICBkb2NrZXJmaWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGJ1aWxkQXJnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgcmVxdWlyZWRNZXRhZGF0YTogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByZXF1aXJlZFZhcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLy8gS2VwdCBhcyBmcmVlLXN0cmluZyBtYXBzIHJhdGhlciB0aGFuIGEgdmFsdWUgZW51bTogc2hpcHBlZCBzcGVjcyB1c2UgYm90aFxuICAvLyBgYm9vbGAgYW5kIGBib29sZWFuYCwgYW5kIHRoZSBjb2VyY2lvbi12cy1kZWNsYXJlZC10eXBlIGNvbnNpc3RlbmN5IGlzXG4gIC8vIGVuZm9yY2VkIHNlcGFyYXRlbHkgYnkgdGhlIHRlbXBsYXRlIGNvbnRyYWN0IGNoZWNrLiBUaGUgc2NoZW1hIG9ubHlcbiAgLy8gZ3VhcmFudGVlcyB0aGV5J3JlIHN0cmluZy12YWx1ZWQgcmVjb3JkcyBoZXJlLlxuICBtZXRhZGF0YVR5cGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2YXJzVHlwZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8vIEEgY29tbWFuZCB0aGUgYnVpbGQgdG9vbGluZyBydW5zIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlXG4gIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoLCB0ZXN0LXBsdWdpbnMuc2ggLS1idWlsZCwgYHBsdWdpbiB0ZXN0YCkuXG4gIHNtb2tlVGVzdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyBEb2N1bWVudGF0aW9uICsgdHJ1c3QgbWV0YWRhdGEuIFRoZSBSRUFETUUgaXMgTk9UIGEgc3BlYyBmaWVsZCDigJQgaXRcbiAgLy8gaXMgUkVBRE1FLm1kIGF0IHRoZSB6aXAgcm9vdC5cbiAgbGljZW5zZTogei5zdHJpbmcoKS5yZWZpbmUoaXNBbGxvd2VkU3BkeElkLCB7XG4gICAgbWVzc2FnZTogJ211c3QgYmUgYSBzdXBwb3J0ZWQgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIgKGUuZy4gQXBhY2hlLTIuMCwgTUlUKScsXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNoYW5nZWxvZzogei5zdHJpbmcoKS5yZWZpbmUoKHYpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2KS5sZW5ndGggPD0gUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsIHtcbiAgICBtZXNzYWdlOiBgbXVzdCBiZSBhdCBtb3N0ICR7UExVR0lOX0NIQU5HRUxPR19NQVhfQllURVN9IGJ5dGVzYCxcbiAgfSkub3B0aW9uYWwoKSxcbiAgaG9tZXBhZ2VVcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgc291cmNlVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8vIENhdGFsb2cgbWV0YWRhdGE6IHRoZSBjYXJkIG9uZS1saW5lciBhbmQgdGhlIGRvY3MgbGluay4gU2FtZVxuICAvLyB2YWxpZGF0b3JzIGFzIGEgdmFsdWUgdHlwZWQgaW50byB0aGUgdXBsb2FkIGZvcm0uXG4gIHN1bW1hcnk6IFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMuc3VtbWFyeS5vcHRpb25hbCgpLFxuICBkb2N1bWVudGF0aW9uVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIGljb246IHoudW5pb24oW1xuICAgIEljb25LZXlTY2hlbWEsXG4gICAgei5vYmplY3QoeyBrZXk6IEljb25LZXlTY2hlbWEsIGJhZGdlOiBJY29uS2V5U2NoZW1hLm9wdGlvbmFsKCkgfSkuc3RyaWN0KCksXG4gIF0pLm9wdGlvbmFsKCksXG4gIG5ldHdvcms6IHoub2JqZWN0KHtcbiAgICBlZ3Jlc3M6IHouYXJyYXkoei5zdHJpbmcoKS5yZWZpbmUoaXNWYWxpZEVncmVzc0hvc3QsIHtcbiAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGEgYmFyZSBob3N0bmFtZSAobm8gc2NoZW1lLCBwb3J0IG9yIHBhdGg7IG9uZSBsZWFkaW5nICouIGFsbG93ZWQpJyxcbiAgICB9KSkubWF4KEVHUkVTU19NQVhfSE9TVFMpLm9wdGlvbmFsKCksXG4gIH0pLnN0cmljdCgpLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKTtcbmV4cG9ydCB0eXBlIFBsdWdpblNwZWNJbnB1dCA9IHouaW5mZXI8dHlwZW9mIFBsdWdpblNwZWNTY2hlbWE+O1xuXG4vKipcbiAqIFJlc3VsdCBvZiBjaGVja2luZyBhIHBhcnNlZCBZQU1MIGRvY3VtZW50IGFnYWluc3QgYSBwYWNrYWdlIHNjaGVtYTpcbiAqIGBpc3N1ZXNgIGFyZSB0aGUgaW5kaXZpZHVhbCBwcm9ibGVtcywgYG1lc3NhZ2VgIHRoZSBvbmUtbGluZSBmb3JtIHRoZSB1cGxvYWRcbiAqIEFQSSByZXBvcnRzIChgcGx1Z2luLXNwZWMueWFtbDogPHBhdGg+OiA8cHJvYmxlbT47IOKApmApLlxuICovXG5leHBvcnQgdHlwZSBQYWNrYWdlQ2hlY2s8VD4gPSB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9IHwgeyBvazogZmFsc2U7IGlzc3Vlczogc3RyaW5nW107IG1lc3NhZ2U6IHN0cmluZyB9O1xuXG5jb25zdCBpc01hcHBpbmcgPSAocmF3OiB1bmtub3duKTogcmF3IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+XG4gIHR5cGVvZiByYXcgPT09ICdvYmplY3QnICYmIHJhdyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShyYXcpO1xuXG5mdW5jdGlvbiBjaGVja0FnYWluc3Q8VD4oZmlsZTogc3RyaW5nLCByYXc6IHVua25vd24sIHNjaGVtYTogei5ab2RUeXBlPFQ+LCB3aXRoUGF0aDogYm9vbGVhbik6IFBhY2thZ2VDaGVjazxUPiB7XG4gIGlmICghaXNNYXBwaW5nKHJhdykpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYCR7ZmlsZX0gbXVzdCBiZSBhIFlBTUwgbWFwcGluZ2A7XG4gICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBpc3N1ZXM6IFttZXNzYWdlXSwgbWVzc2FnZSB9O1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5zYWZlUGFyc2UocmF3KTtcbiAgaWYgKHJlc3VsdC5zdWNjZXNzKSByZXR1cm4geyBvazogdHJ1ZSwgdmFsdWU6IHJlc3VsdC5kYXRhIH07XG4gIGNvbnN0IGlzc3VlcyA9IHJlc3VsdC5lcnJvci5pc3N1ZXMubWFwKGkgPT4gKHdpdGhQYXRoID8gYCR7aS5wYXRoLmpvaW4oJy4nKSB8fCAnKHJvb3QpJ306ICR7aS5tZXNzYWdlfWAgOiBpLm1lc3NhZ2UpKTtcbiAgcmV0dXJuIHsgb2s6IGZhbHNlLCBpc3N1ZXMsIG1lc3NhZ2U6IGAke2ZpbGV9OiAke2lzc3Vlcy5qb2luKCc7ICcpfWAgfTtcbn1cblxuLyoqIENoZWNrIGEgcGFyc2VkIGBwbHVnaW4tc3BlYy55YW1sYCBkb2N1bWVudCBhZ2FpbnN0IHtAbGluayBQbHVnaW5TcGVjU2NoZW1hfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsdWdpblNwZWMocmF3OiB1bmtub3duKTogUGFja2FnZUNoZWNrPFBsdWdpblNwZWNJbnB1dD4ge1xuICByZXR1cm4gY2hlY2tBZ2FpbnN0KCdwbHVnaW4tc3BlYy55YW1sJywgcmF3LCBQbHVnaW5TcGVjU2NoZW1hLCB0cnVlKTtcbn1cblxuLyoqIENoZWNrIGEgcGFyc2VkIGBjb25maWcueWFtbGAgZG9jdW1lbnQgYWdhaW5zdCB7QGxpbmsgUGx1Z2luQ29uZmlnU2NoZW1hfS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1BsdWdpbkNvbmZpZyhyYXc6IHVua25vd24pOiBQYWNrYWdlQ2hlY2s8UGx1Z2luQ29uZmlnSW5wdXQ+IHtcbiAgcmV0dXJuIGNoZWNrQWdhaW5zdCgnY29uZmlnLnlhbWwnLCByYXcsIFBsdWdpbkNvbmZpZ1NjaGVtYSwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFRoZSByZXF1aXJlZC1maWVsZCBjb250cmFjdDogYG5hbWVgIGFuZCBgdmVyc2lvbmAgYWx3YXlzLCBgY29tbWFuZHNgIGZvclxuICogZXZlcnkgdHlwZSBleGNlcHQgYE1hbnVhbEFwcHJvdmFsU3RlcGAuIFJldHVybnMgdGhlIHVwbG9hZCdzIG1lc3NhZ2UsIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtKHNwZWM6IFBpY2s8UGx1Z2luU3BlY0lucHV0LCAnbmFtZScgfCAndmVyc2lvbicgfCAnY29tbWFuZHMnIHwgJ3BsdWdpblR5cGUnPik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBpc0FwcHJvdmFsU3RlcCA9IHNwZWMucGx1Z2luVHlwZSA9PT0gJ01hbnVhbEFwcHJvdmFsU3RlcCc7XG4gIGlmICghc3BlYy5uYW1lIHx8ICFzcGVjLnZlcnNpb24gfHwgKCFpc0FwcHJvdmFsU3RlcCAmJiAhc3BlYy5jb21tYW5kcykpIHtcbiAgICByZXR1cm4gJ0ludmFsaWQgc3BlYzogbmFtZSwgdmVyc2lvbiwgYW5kIGNvbW1hbmRzIGFyZSByZXF1aXJlZCc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWMtc2NoZW1hLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9wbHVnaW4tc3BlYy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE9BQU8sRUFDTCxhQUFhLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxHQUMvRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWxHLGdGQUFnRjtBQUNoRixlQUFlO0FBQ2YsZ0ZBQWdGO0FBRWhGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLENBQVUsQ0FBQztBQUN4RyxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixDQUFVLENBQUM7QUFDL0YsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQVUsQ0FBQztBQUN0RixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFDNUUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBVSxDQUFDO0FBR3hGLDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUM7QUFDbEQsaUZBQWlGO0FBQ2pGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHNEQUFz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QUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sd0RBQXdELENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4gUEFDS0FHRSBzY2hlbWFzOiBgcGx1Z2luLXNwZWMueWFtbGAgYW5kIGBjb25maWcueWFtbGAsIGV4YWN0bHkgYXNcbiAqIHRoZSBwbHVnaW4gc2VydmljZSB2YWxpZGF0ZXMgYW4gdXBsb2FkLiBTaGFyZWQgZnJvbSBhcGktY29yZSBzbyB0aGUgdXBsb2FkXG4gKiBwYXRoIChhcGkvcGx1Z2luKSBhbmQgdGhlIENMSSAoYHBpcGVsaW5lLW1hbmFnZXIgcGx1Z2luIHZhbGlkYXRlYCAvXG4gKiBgcGx1Z2luIHB1Ymxpc2hgKSBhcHBseSBPTkUgc2NoZW1hIGFuZCBjYW4ndCBkcmlmdC5cbiAqXG4gKiBQdXJlOiBubyBZQU1MIHBhcnNpbmcsIG5vIGZpbGVzeXN0ZW0uIENhbGxlcnMgcGFyc2UgKHdpdGggdGhlaXIgb3duIHNpemUgYW5kXG4gKiBhbGlhcyBib3VuZHMpIGFuZCBoYW5kIHRoZSByZXN1bHRpbmcgb2JqZWN0IHRvIHtAbGluayBjaGVja1BsdWdpblNwZWN9IC9cbiAqIHtAbGluayBjaGVja1BsdWdpbkNvbmZpZ30uXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7XG4gIEljb25LZXlTY2hlbWEsIFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMsIFByb2plY3RVcmxTY2hlbWEsIGlzQWxsb3dlZFNwZHhJZCxcbn0gZnJvbSAnLi9wbHVnaW4tY2F0YWxvZy1tZXRhZGF0YS5qcyc7XG5pbXBvcnQgeyBQTFVHSU5fQ0hBTkdFTE9HX01BWF9CWVRFUywgaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luIH0gZnJvbSAnLi4vdHlwZXMvcGx1Z2luLWNhdGFsb2cuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVm9jYWJ1bGFyaWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIGBCdWlsZEltYWdlYCBpcyB0aGUgbWFuYWdlZCB0b29sY2hhaW4ncyBidWlsZCBpbWFnZSAoYHBpcGVsaW5lLWJvb3RzdHJhcGAsXG4gKiBkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMSk6IGEgcHJlYnVpbHQgaW1hZ2Ugd2l0aCBub1xuICogY29tbWFuZHMsIG5ldmVyIGEgcGlwZWxpbmUgc3RlcC4ge0BsaW5rIFNURVBfUExVR0lOX1RZUEVTfSBpcyB0aGUgc3Vic2V0IGFcbiAqIHN0ZXAgKG9yIGEgZ2VuZXJhdG9yKSBtYXkgdXNlLlxuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1RZUEVTID0gWydDb2RlQnVpbGRTdGVwJywgJ1NoZWxsU3RlcCcsICdNYW51YWxBcHByb3ZhbFN0ZXAnLCAnQnVpbGRJbWFnZSddIGFzIGNvbnN0O1xuLyoqIFRoZSBwbHVnaW4gdHlwZXMgYSBwaXBlbGluZSBzdGVwIGNhbiB1c2Ug4oCUIGV2ZXJ5IHR5cGUgZXhjZXB0IGBCdWlsZEltYWdlYC4gKi9cbmV4cG9ydCBjb25zdCBTVEVQX1BMVUdJTl9UWVBFUyA9IFsnQ29kZUJ1aWxkU3RlcCcsICdTaGVsbFN0ZXAnLCAnTWFudWFsQXBwcm92YWxTdGVwJ10gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgUExVR0lOX0NPTVBVVEVfVFlQRVMgPSBbJ1NNQUxMJywgJ01FRElVTScsICdMQVJHRScsICdYMl9MQVJHRSddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9GQUlMVVJFX0JFSEFWSU9SUyA9IFsnZmFpbCcsICd3YXJuJywgJ2lnbm9yZSddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9CVUlMRF9UWVBFUyA9IFsnYnVpbGRfaW1hZ2UnLCAncHJlYnVpbHQnLCAnbWV0YWRhdGFfb25seSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUGx1Z2luQnVpbGRUeXBlID0gdHlwZW9mIFBMVUdJTl9CVUlMRF9UWVBFU1tudW1iZXJdO1xuXG4vKiogUGx1Z2luIG5hbWU6IGxvd2VyY2FzZSBsZXR0ZXJzLCBkaWdpdHMgYW5kIGh5cGhlbnMuICovXG5leHBvcnQgY29uc3QgUExVR0lOX05BTUVfUEFUVEVSTiA9IC9eW2EtejAtOS1dKyQvO1xuLyoqIFBsdWdpbiB2ZXJzaW9uOiBzZW12ZXIsIHdpdGggb3B0aW9uYWwgYC1wcmVyZWxlYXNlYCBhbmQgYCtidWlsZGAgbWV0YWRhdGEuICovXG5leHBvcnQgY29uc3QgUExVR0lOX1ZFUlNJT05fUEFUVEVSTiA9IC9eXFxkK1xcLlxcZCtcXC5cXGQrKC1bYS16QS1aMC05Li1dKyk/KFxcK1thLXpBLVowLTkuLV0rKT8kLztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIG5ldHdvcmsuZWdyZXNzIChzcGVjLW9ubHkgdHJ1c3QgbWV0YWRhdGEpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWF4IGRlY2xhcmVkIGBuZXR3b3JrLmVncmVzc2AgaG9zdG5hbWVzLiAqL1xuZXhwb3J0IGNvbnN0IEVHUkVTU19NQVhfSE9TVFMgPSA1MDtcblxuLyoqXG4gKiBBIGJhcmUgRE5TIGhvc3RuYW1lLCBvcHRpb25hbGx5IHdpdGggT05FIGxlYWRpbmcgYCouYCB3aWxkY2FyZCBsYWJlbC4gTm9cbiAqIHNjaGVtZSwgcG9ydCwgcGF0aCwgdXNlcmluZm8gb3IgSVAgbGl0ZXJhbCDigJQgYSBkZWNsYXJlZCBlZ3Jlc3MgdGFyZ2V0IGlzIGFcbiAqIG5hbWUgdGhlIHJldmlld2VyIGNhbiByZWFkLlxuICovXG5jb25zdCBFR1JFU1NfSE9TVF9QQVRURVJOID0gL14oPzpcXCpcXC4pPyg/OlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pP1xcLikrW2Etel1bYS16MC05LV17MCw2MX1bYS16MC05XSQvO1xuXG4vKiogVHJ1ZSB3aGVuIGBob3N0YCBpcyBhbiBhY2NlcHRhYmxlIGBuZXR3b3JrLmVncmVzc2AgZW50cnkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVncmVzc0hvc3QoaG9zdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBob3N0Lmxlbmd0aCA8PSAyNTMgJiYgRUdSRVNTX0hPU1RfUEFUVEVSTi50ZXN0KGhvc3QpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTWFuYWdlZCB0b29sY2hhaW4gbWV0YWRhdGEgKEJ1aWxkSW1hZ2Ugc3BlY3MpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQW4gRVhBQ1Qgc2VtdmVyIChubyByYW5nZSk6IGAxLjIuM2AsIG9wdGlvbmFsbHkgYC1wcmVgIC8gYCtidWlsZGAuICovXG5jb25zdCBFWEFDVF9TRU1WRVJfUEFUVEVSTiA9IC9eXFxkK1xcLlxcZCtcXC5cXGQrKC1bMC05QS1aYS16Li1dKyk/KFxcK1swLTlBLVphLXouLV0rKT8kLztcbmNvbnN0IGV4YWN0U2VtdmVyID0gei5zdHJpbmcoKS5yZWdleChFWEFDVF9TRU1WRVJfUEFUVEVSTiwgeyBtZXNzYWdlOiAnbXVzdCBiZSBhbiBleGFjdCBzZW12ZXIgdmVyc2lvbiAoZS5nLiAxLjIuMyknIH0pO1xuXG4vKipcbiAqIFRoZSB0b29sIHZlcnNpb25zIGEgbWFuYWdlZCBidWlsZCBpbWFnZSBjYXJyaWVzLCB3cml0dGVuIGJ5XG4gKiBgc3luYy1pbWFnZS10YWdzLnNoYCBmcm9tIHRoZSBEb2NrZXJmaWxlIGBBUkdgcy4gRXZlcnkgZmllbGQgaXMgcmVxdWlyZWQgYW5kXG4gKiBleGFjdDogdGhpcyBpcyB3aGF0IHRoZSByZWxlYXNlIElTLCBub3Qgd2hhdCBpdCBhY2NlcHRzLlxuICovXG5leHBvcnQgY29uc3QgUGx1Z2luVG9vbGNoYWluU2NoZW1hID0gei5vYmplY3Qoe1xuICBwaXBlbGluZU1hbmFnZXI6IGV4YWN0U2VtdmVyLFxuICBhd3NDZGs6IGV4YWN0U2VtdmVyLFxuICBjZGtBc3NldHM6IGV4YWN0U2VtdmVyLFxuICBlc2J1aWxkOiBleGFjdFNlbXZlcixcbiAgcG5wbTogZXhhY3RTZW12ZXIsXG4gIG5vZGU6IGV4YWN0U2VtdmVyLFxufSkuc3RyaWN0KCk7XG5leHBvcnQgdHlwZSBQbHVnaW5Ub29sY2hhaW4gPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Ub29sY2hhaW5TY2hlbWE+O1xuXG4vKipcbiAqIFdoZXJlIGEgbWFuYWdlZCBidWlsZCBpbWFnZSdzIGB0b29sY2hhaW5gIGlzIHBlcnNpc3RlZDogaXRzIHBsdWdpbiByb3cnc1xuICogYG1ldGFkYXRhYCwgb25lIGZsYXQgYHRvb2xjaGFpbi48ZmllbGQ+YCBrZXkgcGVyIHRvb2wgKHRoZSBjb2x1bW4gaXMgYSBmbGF0XG4gKiBzdHJpbmcgbWFwLCBhbmQgYSBgQnVpbGRJbWFnZWAgc3BlYyBtYXkgY2Fycnkgbm8gc3RlcCBgbWV0YWRhdGFgIG9mIGl0cyBvd24sXG4gKiBzbyB0aGUga2V5cyBuZXZlciBjb2xsaWRlKS4gV3JpdHRlbiBhdCB1cGxvYWQgYnkge0BsaW5rIHRvb2xjaGFpbk1ldGFkYXRhfSxcbiAqIHJlYWQgYnkge0BsaW5rIHRvb2xjaGFpbkZyb21NZXRhZGF0YX0g4oCUIHRoZSBwbGF0Zm9ybS1kZWZhdWx0IG1ldGFkYXRhIGd1YXJkXG4gKiBhbmQgdGhlIHJlc29sdmVyIGJvdGggZ28gdGhyb3VnaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVggPSAndG9vbGNoYWluLic7XG5cbi8qKiBUaGUgZmxhdCBgbWV0YWRhdGFgIGVudHJpZXMgdGhhdCBwZXJzaXN0IGB0b29sY2hhaW5gIG9uIGEgYnVpbGQgaW1hZ2UncyByb3cuICovXG5leHBvcnQgZnVuY3Rpb24gdG9vbGNoYWluTWV0YWRhdGEodG9vbGNoYWluOiBQbHVnaW5Ub29sY2hhaW4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0b29sY2hhaW4pLm1hcCgoW2ssIHZdKSA9PiBbYCR7VE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWH0ke2t9YCwgdl0pKTtcbn1cblxuLyoqXG4gKiBUaGUgYHRvb2xjaGFpbmAgYSBidWlsZCBpbWFnZSdzIHJvdyBjYXJyaWVzLCBvciBgbnVsbGAgd2hlbiBpdHMgYG1ldGFkYXRhYFxuICogaG9sZHMgbm8gY29tcGxldGUsIHZhbGlkIG9uZSAoZXZlcnkgZmllbGQgcmVxdWlyZWQgYW5kIGV4YWN0IOKAlCB0aGUgc2FtZVxuICogc2NoZW1hIHRoZSB1cGxvYWQgdmFsaWRhdGVkKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvb2xjaGFpbkZyb21NZXRhZGF0YShtZXRhZGF0YTogdW5rbm93bik6IFBsdWdpblRvb2xjaGFpbiB8IG51bGwge1xuICBpZiAoIW1ldGFkYXRhIHx8IHR5cGVvZiBtZXRhZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBjb25zdCBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChrLnN0YXJ0c1dpdGgoVE9PTENIQUlOX01FVEFEQVRBX1BSRUZJWCkpIGZpZWxkc1trLnNsaWNlKFRPT0xDSEFJTl9NRVRBREFUQV9QUkVGSVgubGVuZ3RoKV0gPSB2O1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IFBsdWdpblRvb2xjaGFpblNjaGVtYS5zYWZlUGFyc2UoZmllbGRzKTtcbiAgcmV0dXJuIHBhcnNlZC5zdWNjZXNzID8gcGFyc2VkLmRhdGEgOiBudWxsO1xufVxuXG4vKiogQSBidWlsZC1pbnB1dCBoYXNoOiA2NCBsb3dlcmNhc2UgaGV4IGNoYXJhY3RlcnMgKHNoYTI1NiksIG9wdGlvbmFsbHkgYHNoYTI1NjpgLXByZWZpeGVkLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9TT1VSQ0VfRElHRVNUX1BBVFRFUk4gPSAvXihzaGEyNTY6KT9bYS1mMC05XXs2NH0kLztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGNvbmZpZy55YW1sXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUGx1Z2luQ29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBwbHVnaW5TcGVjOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvY2tlcmZpbGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYnVpbGRUeXBlOiB6LmVudW0oUExVR0lOX0JVSUxEX1RZUEVTKS5vcHRpb25hbCgpLFxuICAvLyBEZXRlcm1pbmlzdGljIGJ1aWxkIHRhZyB3cml0dGVuIGJ5IGJ1aWxkLXBsdWdpbi1pbWFnZXMuc2hcbiAgLy8gKGBwLTxuYW1lPi08c2hhMjU2OjEyPmApLiBJbmZvcm1hdGlvbmFsIG9ubHkgb24gdGhlIHVwbG9hZCBwYXRoIOKAlFxuICAvLyB0aGUgcGxhdGZvcm0gZG9lc24ndCBhY3Qgb24gaXQsIGJ1dCBpdCBsaXZlcyBpbiB0aGUgc2FtZSBjb25maWdcbiAgLy8gZmlsZSBhcyB0aGUgcmVzdCBvZiB0aGUgYnVpbGQgbWV0YWRhdGEgc28gcmUtcnVucyBjYW4gc2hvcnQtY2lyY3VpdFxuICAvLyB1bmNoYW5nZWQgcGx1Z2lucyB3aXRob3V0IG5lZWRpbmcgYSBzZXBhcmF0ZSAuaW1hZ2UtaGFzaCBzaWRlY2FyLlxuICBpbWFnZVRhZzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSkuc3RyaWN0KClcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdwcmVidWlsdCcgJiYgZC5kb2NrZXJmaWxlKSwge1xuICAgIG1lc3NhZ2U6ICdkb2NrZXJmaWxlIGlzIG5vdCBhbGxvd2VkIHdoZW4gYnVpbGRUeXBlIGlzIHByZWJ1aWx0JyxcbiAgfSlcbiAgLnJlZmluZShkID0+ICEoZC5idWlsZFR5cGUgPT09ICdtZXRhZGF0YV9vbmx5JyAmJiBkLmRvY2tlcmZpbGUpLCB7XG4gICAgbWVzc2FnZTogJ2RvY2tlcmZpbGUgaXMgbm90IGFsbG93ZWQgd2hlbiBidWlsZFR5cGUgaXMgbWV0YWRhdGFfb25seScsXG4gIH0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luQ29uZmlnSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBQbHVnaW5Db25maWdTY2hlbWE+O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcGx1Z2luLXNwZWMueWFtbFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gbmFtZS92ZXJzaW9uL2NvbW1hbmRzIGFyZSB0aGUgcmVxdWlyZWQtZmllbGQgY29udHJhY3QsIGJ1dCB0aGV5J3JlIGNoZWNrZWQgYnlcbi8vIHtAbGluayBwbHVnaW5TcGVjUmVxdWlyZWRGaWVsZHNQcm9ibGVtfSAodGhlIHN0YWJsZSBcIm5hbWUsIHZlcnNpb24sIGFuZFxuLy8gY29tbWFuZHMgYXJlIHJlcXVpcmVkXCIgbWVzc2FnZSBhbmQgdGhlIE1hbnVhbEFwcHJvdmFsU3RlcCBjYXJ2ZS1vdXQpLiBIZXJlXG4vLyB0aGV5J3JlIG9wdGlvbmFsIHN0cmluZ3M7IHRoZSBzY2hlbWEncyBqb2IgaXMgdG8gcmVqZWN0IG1hbGZvcm1lZCAqdHlwZXMqIG9uXG4vLyB0aGUgZmllbGRzIHRoYXQgZmxvdyBkb3duc3RyZWFtIHVuY2hlY2tlZC5cbmV4cG9ydCBjb25zdCBQbHVnaW5TcGVjU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleXdvcmRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHZlcnNpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcGx1Z2luVHlwZTogei5lbnVtKFBMVUdJTl9UWVBFUykub3B0aW9uYWwoKSxcbiAgY29tcHV0ZVR5cGU6IHouZW51bShQTFVHSU5fQ09NUFVURV9UWVBFUykub3B0aW9uYWwoKSxcbiAgLy8gPj0gMCBtaW51dGVzOiBNYW51YWxBcHByb3ZhbFN0ZXAgc3BlY3MgbGVnaXRpbWF0ZWx5IGRlY2xhcmUgYHRpbWVvdXQ6IDBgLlxuICB0aW1lb3V0OiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgZmFpbHVyZUJlaGF2aW9yOiB6LmVudW0oUExVR0lOX0ZBSUxVUkVfQkVIQVZJT1JTKS5vcHRpb25hbCgpLFxuICBzZWNyZXRzOiB6LmFycmF5KHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgICByZXF1aXJlZDogei5ib29sZWFuKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSkpLm9wdGlvbmFsKCksXG4gIC8vIEFjY2VwdCBhbiBleHBsaWNpdCBgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogbnVsbGAgKGEgTWFudWFsQXBwcm92YWxTdGVwIC9cbiAgLy8gb3V0cHV0LWxlc3Mgc3RlcCBsZWdpdGltYXRlbHkgZGVjbGFyZXMgaXQpIGFuZCBub3JtYWxpemUgaXQgdG8gYHVuZGVmaW5lZGAuXG4gIC8vIFdpdGhvdXQgYC5udWxsaXNoKClgIGEgcHJlc2VudCBZQU1MIGBudWxsYCBmYWlscyB0aGUgYmFyZSBzdHJpbmcgY2hlY2sgYW5kXG4gIC8vIDQwMHMgdGhlIHdob2xlIHVwbG9hZC5cbiAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKS5udWxsaXNoKCkudHJhbnNmb3JtKCh2KSA9PiB2ID8/IHVuZGVmaW5lZCksXG4gIG1ldGFkYXRhOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnVuaW9uKFt6LnN0cmluZygpLCB6Lm51bWJlcigpLCB6LmJvb2xlYW4oKV0pKS5vcHRpb25hbCgpLFxuICBkb2NrZXJmaWxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGluc3RhbGxDb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBjb21tYW5kczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBlbnY6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIGJ1aWxkQXJnczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgcmVxdWlyZWRNZXRhZGF0YTogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICByZXF1aXJlZFZhcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgLy8gS2VwdCBhcyBmcmVlLXN0cmluZyBtYXBzIHJhdGhlciB0aGFuIGEgdmFsdWUgZW51bTogc2hpcHBlZCBzcGVjcyB1c2UgYm90aFxuICAvLyBgYm9vbGAgYW5kIGBib29sZWFuYCwgYW5kIHRoZSBjb2VyY2lvbi12cy1kZWNsYXJlZC10eXBlIGNvbnNpc3RlbmN5IGlzXG4gIC8vIGVuZm9yY2VkIHNlcGFyYXRlbHkgYnkgdGhlIHRlbXBsYXRlIGNvbnRyYWN0IGNoZWNrLiBUaGUgc2NoZW1hIG9ubHlcbiAgLy8gZ3VhcmFudGVlcyB0aGV5J3JlIHN0cmluZy12YWx1ZWQgcmVjb3JkcyBoZXJlLlxuICBtZXRhZGF0YVR5cGVzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuICB2YXJzVHlwZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIC8vIEEgY29tbWFuZCB0aGUgYnVpbGQgdG9vbGluZyBydW5zIGFnYWluc3QgdGhlIGJ1aWx0IGltYWdlXG4gIC8vIChidWlsZC1wbHVnaW4taW1hZ2VzLnNoLCB0ZXN0LXBsdWdpbnMuc2ggLS1idWlsZCwgYHBsdWdpbiB0ZXN0YCkuXG4gIHNtb2tlVGVzdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvLyBEb2N1bWVudGF0aW9uICsgdHJ1c3QgbWV0YWRhdGEuIFRoZSBSRUFETUUgaXMgTk9UIGEgc3BlYyBmaWVsZCDigJQgaXRcbiAgLy8gaXMgUkVBRE1FLm1kIGF0IHRoZSB6aXAgcm9vdC5cbiAgbGljZW5zZTogei5zdHJpbmcoKS5yZWZpbmUoaXNBbGxvd2VkU3BkeElkLCB7XG4gICAgbWVzc2FnZTogJ211c3QgYmUgYSBzdXBwb3J0ZWQgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXIgKGUuZy4gQXBhY2hlLTIuMCwgTUlUKScsXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNoYW5nZWxvZzogei5zdHJpbmcoKS5yZWZpbmUoKHYpID0+IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2KS5sZW5ndGggPD0gUExVR0lOX0NIQU5HRUxPR19NQVhfQllURVMsIHtcbiAgICBtZXNzYWdlOiBgbXVzdCBiZSBhdCBtb3N0ICR7UExVR0lOX0NIQU5HRUxPR19NQVhfQllURVN9IGJ5dGVzYCxcbiAgfSkub3B0aW9uYWwoKSxcbiAgaG9tZXBhZ2VVcmw6IFByb2plY3RVcmxTY2hlbWEub3B0aW9uYWwoKSxcbiAgc291cmNlVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8vIENhdGFsb2cgbWV0YWRhdGE6IHRoZSBjYXJkIG9uZS1saW5lciBhbmQgdGhlIGRvY3MgbGluay4gU2FtZVxuICAvLyB2YWxpZGF0b3JzIGFzIGEgdmFsdWUgdHlwZWQgaW50byB0aGUgdXBsb2FkIGZvcm0uXG4gIHN1bW1hcnk6IFBMVUdJTl9DQVRBTE9HX0ZJRUxEX1NDSEVNQVMuc3VtbWFyeS5vcHRpb25hbCgpLFxuICBkb2N1bWVudGF0aW9uVXJsOiBQcm9qZWN0VXJsU2NoZW1hLm9wdGlvbmFsKCksXG4gIGljb246IHoudW5pb24oW1xuICAgIEljb25LZXlTY2hlbWEsXG4gICAgei5vYmplY3QoeyBrZXk6IEljb25LZXlTY2hlbWEsIGJhZGdlOiBJY29uS2V5U2NoZW1hLm9wdGlvbmFsKCkgfSkuc3RyaWN0KCksXG4gIF0pLm9wdGlvbmFsKCksXG4gIG5ldHdvcms6IHoub2JqZWN0KHtcbiAgICBlZ3Jlc3M6IHouYXJyYXkoei5zdHJpbmcoKS5yZWZpbmUoaXNWYWxpZEVncmVzc0hvc3QsIHtcbiAgICAgIG1lc3NhZ2U6ICdtdXN0IGJlIGEgYmFyZSBob3N0bmFtZSAobm8gc2NoZW1lLCBwb3J0IG9yIHBhdGg7IG9uZSBsZWFkaW5nICouIGFsbG93ZWQpJyxcbiAgICB9KSkubWF4KEVHUkVTU19NQVhfSE9TVFMpLm9wdGlvbmFsKCksXG4gIH0pLnN0cmljdCgpLm9wdGlvbmFsKCksXG4gIC8vIE1hbmFnZWQgdG9vbGNoYWluIG1ldGFkYXRhIOKAlCBgQnVpbGRJbWFnZWAgc3BlY3Mgb25seSAoc2VlIHRoZSBjaGVjayBiZWxvdykuXG4gIHRvb2xjaGFpbjogUGx1Z2luVG9vbGNoYWluU2NoZW1hLm9wdGlvbmFsKCksXG4gIHNvdXJjZURpZ2VzdDogei5zdHJpbmcoKS5yZWdleChQTFVHSU5fU09VUkNFX0RJR0VTVF9QQVRURVJOLCB7IG1lc3NhZ2U6ICdtdXN0IGJlIGEgc2hhMjU2IGhleCBkaWdlc3QnIH0pLm9wdGlvbmFsKCksXG59KS5zdHJpY3QoKS5zdXBlclJlZmluZSgoc3BlYywgY3R4KSA9PiB7XG4gIGZvciAoY29uc3QgaXNzdWUgb2YgYnVpbGRJbWFnZVNwZWNQcm9ibGVtcyhzcGVjKSkgY3R4LmFkZElzc3VlKHsgY29kZTogJ2N1c3RvbScsIHBhdGg6IFtpc3N1ZS5wYXRoXSwgbWVzc2FnZTogaXNzdWUubWVzc2FnZSB9KTtcbn0pO1xuZXhwb3J0IHR5cGUgUGx1Z2luU3BlY0lucHV0ID0gei5pbmZlcjx0eXBlb2YgUGx1Z2luU3BlY1NjaGVtYT47XG5cbi8qKlxuICogVGhlIGBCdWlsZEltYWdlYCBydWxlcyAoZG9jcy9wbGFucy9ib290c3RyYXAtaW1hZ2UtdmVyc2lvbmluZy5tZCDCpzEpOiBhXG4gKiBtYW5hZ2VkIGJ1aWxkIGltYWdlIHVzZXMgYSBtYW5hZ2VkIHRvb2xjaGFpbiBuYW1lLCBjYXJyaWVzIGB0b29sY2hhaW5gIGFuZFxuICogYHNvdXJjZURpZ2VzdGAsIGFuZCBkZWNsYXJlcyBub3RoaW5nIGEgc3RlcCB3b3VsZCBydW4gKGBjb21tYW5kc2AsXG4gKiBgaW5zdGFsbENvbW1hbmRzYCwgYG1ldGFkYXRhYCkuIENvbnZlcnNlbHkgYHRvb2xjaGFpbmAgLyBgc291cmNlRGlnZXN0YCBhcmVcbiAqIHJlZnVzZWQgb24gZXZlcnkgb3RoZXIgdHlwZS4gVGhhdCBpdCBpcyBgcHJlYnVpbHRgIGlzIHRoZSB1cGxvYWQgcGF0aCdzXG4gKiBjaGVjazogdGhlIGNoZWNrZWQtaW4gYGNvbmZpZy55YW1sYCBzYXlzIGBidWlsZF9pbWFnZWAgdW50aWwgdGhlIGJ1aWxkXG4gKiBzY3JpcHQgZmxpcHMgaXQuXG4gKi9cbmludGVyZmFjZSBCdWlsZEltYWdlQ2hlY2tJbnB1dCB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBsdWdpblR5cGU/OiBzdHJpbmc7XG4gIHRvb2xjaGFpbj86IHVua25vd247XG4gIHNvdXJjZURpZ2VzdD86IHVua25vd247XG4gIGNvbW1hbmRzPzogdW5rbm93bjtcbiAgaW5zdGFsbENvbW1hbmRzPzogdW5rbm93bjtcbiAgbWV0YWRhdGE/OiB1bmtub3duO1xufVxuXG5mdW5jdGlvbiBidWlsZEltYWdlU3BlY1Byb2JsZW1zKHNwZWM6IEJ1aWxkSW1hZ2VDaGVja0lucHV0KTogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gIGNvbnN0IG91dDogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PiA9IFtdO1xuICBpZiAoc3BlYy5wbHVnaW5UeXBlICE9PSAnQnVpbGRJbWFnZScpIHtcbiAgICBpZiAoc3BlYy50b29sY2hhaW4gIT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAndG9vbGNoYWluJywgbWVzc2FnZTogJ2lzIG9ubHkgYWxsb3dlZCBvbiBhIEJ1aWxkSW1hZ2UgcGx1Z2luJyB9KTtcbiAgICBpZiAoc3BlYy5zb3VyY2VEaWdlc3QgIT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAnc291cmNlRGlnZXN0JywgbWVzc2FnZTogJ2lzIG9ubHkgYWxsb3dlZCBvbiBhIEJ1aWxkSW1hZ2UgcGx1Z2luJyB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmIChzcGVjLm5hbWUgIT09IHVuZGVmaW5lZCAmJiAhaXNNYW5hZ2VkVG9vbGNoYWluUGx1Z2luKHNwZWMubmFtZSkpIHtcbiAgICBvdXQucHVzaCh7IHBhdGg6ICdwbHVnaW5UeXBlJywgbWVzc2FnZTogJ0J1aWxkSW1hZ2UgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBtYW5hZ2VkIHRvb2xjaGFpbiBwbHVnaW5zJyB9KTtcbiAgfVxuICBpZiAoc3BlYy50b29sY2hhaW4gPT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAndG9vbGNoYWluJywgbWVzc2FnZTogJ2lzIHJlcXVpcmVkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICBpZiAoc3BlYy5zb3VyY2VEaWdlc3QgPT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiAnc291cmNlRGlnZXN0JywgbWVzc2FnZTogJ2lzIHJlcXVpcmVkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnY29tbWFuZHMnLCAnaW5zdGFsbENvbW1hbmRzJywgJ21ldGFkYXRhJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoc3BlY1tmaWVsZF0gIT09IHVuZGVmaW5lZCkgb3V0LnB1c2goeyBwYXRoOiBmaWVsZCwgbWVzc2FnZTogJ2lzIG5vdCBhbGxvd2VkIG9uIGEgQnVpbGRJbWFnZSBwbHVnaW4nIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNoZWNraW5nIGEgcGFyc2VkIFlBTUwgZG9jdW1lbnQgYWdhaW5zdCBhIHBhY2thZ2Ugc2NoZW1hOlxuICogYGlzc3Vlc2AgYXJlIHRoZSBpbmRpdmlkdWFsIHByb2JsZW1zLCBgbWVzc2FnZWAgdGhlIG9uZS1saW5lIGZvcm0gdGhlIHVwbG9hZFxuICogQVBJIHJlcG9ydHMgKGBwbHVnaW4tc3BlYy55YW1sOiA8cGF0aD46IDxwcm9ibGVtPjsg4oCmYCkuXG4gKi9cbmV4cG9ydCB0eXBlIFBhY2thZ2VDaGVjazxUPiA9IHsgb2s6IHRydWU7IHZhbHVlOiBUIH0gfCB7IG9rOiBmYWxzZTsgaXNzdWVzOiBzdHJpbmdbXTsgbWVzc2FnZTogc3RyaW5nIH07XG5cbmNvbnN0IGlzTWFwcGluZyA9IChyYXc6IHVua25vd24pOiByYXcgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT5cbiAgdHlwZW9mIHJhdyA9PT0gJ29iamVjdCcgJiYgcmF3ICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHJhdyk7XG5cbmZ1bmN0aW9uIGNoZWNrQWdhaW5zdDxUPihmaWxlOiBzdHJpbmcsIHJhdzogdW5rbm93biwgc2NoZW1hOiB6LlpvZFR5cGU8VD4sIHdpdGhQYXRoOiBib29sZWFuKTogUGFja2FnZUNoZWNrPFQ+IHtcbiAgaWYgKCFpc01hcHBpbmcocmF3KSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgJHtmaWxlfSBtdXN0IGJlIGEgWUFNTCBtYXBwaW5nYDtcbiAgICByZXR1cm4geyBvazogZmFsc2UsIGlzc3VlczogW21lc3NhZ2VdLCBtZXNzYWdlIH07XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gc2NoZW1hLnNhZmVQYXJzZShyYXcpO1xuICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHJldHVybiB7IG9rOiB0cnVlLCB2YWx1ZTogcmVzdWx0LmRhdGEgfTtcbiAgY29uc3QgaXNzdWVzID0gcmVzdWx0LmVycm9yLmlzc3Vlcy5tYXAoaSA9PiAod2l0aFBhdGggPyBgJHtpLnBhdGguam9pbignLicpIHx8ICcocm9vdCknfTogJHtpLm1lc3NhZ2V9YCA6IGkubWVzc2FnZSkpO1xuICByZXR1cm4geyBvazogZmFsc2UsIGlzc3VlcywgbWVzc2FnZTogYCR7ZmlsZX06ICR7aXNzdWVzLmpvaW4oJzsgJyl9YCB9O1xufVxuXG4vKiogQ2hlY2sgYSBwYXJzZWQgYHBsdWdpbi1zcGVjLnlhbWxgIGRvY3VtZW50IGFnYWluc3Qge0BsaW5rIFBsdWdpblNwZWNTY2hlbWF9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUGx1Z2luU3BlYyhyYXc6IHVua25vd24pOiBQYWNrYWdlQ2hlY2s8UGx1Z2luU3BlY0lucHV0PiB7XG4gIHJldHVybiBjaGVja0FnYWluc3QoJ3BsdWdpbi1zcGVjLnlhbWwnLCByYXcsIFBsdWdpblNwZWNTY2hlbWEsIHRydWUpO1xufVxuXG4vKiogQ2hlY2sgYSBwYXJzZWQgYGNvbmZpZy55YW1sYCBkb2N1bWVudCBhZ2FpbnN0IHtAbGluayBQbHVnaW5Db25maWdTY2hlbWF9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUGx1Z2luQ29uZmlnKHJhdzogdW5rbm93bik6IFBhY2thZ2VDaGVjazxQbHVnaW5Db25maWdJbnB1dD4ge1xuICByZXR1cm4gY2hlY2tBZ2FpbnN0KCdjb25maWcueWFtbCcsIHJhdywgUGx1Z2luQ29uZmlnU2NoZW1hLCBmYWxzZSk7XG59XG5cbi8qKlxuICogVGhlIHJlcXVpcmVkLWZpZWxkIGNvbnRyYWN0OiBgbmFtZWAgYW5kIGB2ZXJzaW9uYCBhbHdheXMsIGBjb21tYW5kc2AgZm9yXG4gKiBldmVyeSB0eXBlIGV4Y2VwdCBgTWFudWFsQXBwcm92YWxTdGVwYCBhbmQgYEJ1aWxkSW1hZ2VgIChuZWl0aGVyIHJ1bnNcbiAqIGNvbW1hbmRzKS4gUmV0dXJucyB0aGUgdXBsb2FkJ3MgbWVzc2FnZSwgb3IgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsdWdpblNwZWNSZXF1aXJlZEZpZWxkc1Byb2JsZW0oc3BlYzogUGljazxQbHVnaW5TcGVjSW5wdXQsICduYW1lJyB8ICd2ZXJzaW9uJyB8ICdjb21tYW5kcycgfCAncGx1Z2luVHlwZSc+KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHJ1bnNOb0NvbW1hbmRzID0gc3BlYy5wbHVnaW5UeXBlID09PSAnTWFudWFsQXBwcm92YWxTdGVwJyB8fCBzcGVjLnBsdWdpblR5cGUgPT09ICdCdWlsZEltYWdlJztcbiAgaWYgKCFzcGVjLm5hbWUgfHwgIXNwZWMudmVyc2lvbiB8fCAoIXJ1bnNOb0NvbW1hbmRzICYmICFzcGVjLmNvbW1hbmRzKSkge1xuICAgIHJldHVybiAnSW52YWxpZCBzcGVjOiBuYW1lLCB2ZXJzaW9uLCBhbmQgY29tbWFuZHMgYXJlIHJlcXVpcmVkJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
|