@aws-cdk/service-spec-types 0.0.219 → 0.0.221
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/common.d.ts +2 -0
- package/lib/types/common.js +1 -1
- package/lib/types/resource.js +10 -2
- package/package.json +1 -1
package/lib/types/common.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type GenericPropertyType<T extends Entity> = PrimitiveType | GenericDefin
|
|
|
3
3
|
export type PrimitiveType = StringType | NumberType | IntegerType | BooleanType | JsonType | DateTimeType | NullType | BuiltinTagType;
|
|
4
4
|
export interface StringType {
|
|
5
5
|
readonly type: 'string';
|
|
6
|
+
readonly allowedValues?: string[];
|
|
6
7
|
}
|
|
7
8
|
/**
|
|
8
9
|
* The "legacy" tag type (used in the old resource spec)
|
|
@@ -15,6 +16,7 @@ export interface NumberType {
|
|
|
15
16
|
}
|
|
16
17
|
export interface IntegerType {
|
|
17
18
|
readonly type: 'integer';
|
|
19
|
+
readonly allowedValues?: number[];
|
|
18
20
|
}
|
|
19
21
|
export interface BooleanType {
|
|
20
22
|
readonly type: 'boolean';
|
package/lib/types/common.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5LCBSZWZlcmVuY2UgfSBmcm9tICdAY2RrbGFicy90c2tiJztcblxuZXhwb3J0IHR5cGUgR2VuZXJpY1Byb3BlcnR5VHlwZTxUIGV4dGVuZHMgRW50aXR5PiA9XG4gIHwgUHJpbWl0aXZlVHlwZVxuICB8IEdlbmVyaWNEZWZpbml0aW9uUmVmZXJlbmNlPFQ+XG4gIHwgQnVpbHRpblRhZ1R5cGVcbiAgfCBBcnJheVR5cGU8R2VuZXJpY1Byb3BlcnR5VHlwZTxUPj5cbiAgfCBNYXBUeXBlPEdlbmVyaWNQcm9wZXJ0eVR5cGU8VD4+XG4gIHwgVHlwZVVuaW9uPEdlbmVyaWNQcm9wZXJ0eVR5cGU8VD4+
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5LCBSZWZlcmVuY2UgfSBmcm9tICdAY2RrbGFicy90c2tiJztcblxuZXhwb3J0IHR5cGUgR2VuZXJpY1Byb3BlcnR5VHlwZTxUIGV4dGVuZHMgRW50aXR5PiA9XG4gIHwgUHJpbWl0aXZlVHlwZVxuICB8IEdlbmVyaWNEZWZpbml0aW9uUmVmZXJlbmNlPFQ+XG4gIHwgQnVpbHRpblRhZ1R5cGVcbiAgfCBBcnJheVR5cGU8R2VuZXJpY1Byb3BlcnR5VHlwZTxUPj5cbiAgfCBNYXBUeXBlPEdlbmVyaWNQcm9wZXJ0eVR5cGU8VD4+XG4gIHwgVHlwZVVuaW9uPEdlbmVyaWNQcm9wZXJ0eVR5cGU8VD4+O1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVUeXBlID1cbiAgfCBTdHJpbmdUeXBlXG4gIHwgTnVtYmVyVHlwZVxuICB8IEludGVnZXJUeXBlXG4gIHwgQm9vbGVhblR5cGVcbiAgfCBKc29uVHlwZVxuICB8IERhdGVUaW1lVHlwZVxuICB8IE51bGxUeXBlXG4gIHwgQnVpbHRpblRhZ1R5cGU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nVHlwZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdzdHJpbmcnO1xuICByZWFkb25seSBhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG59XG4vKipcbiAqIFRoZSBcImxlZ2FjeVwiIHRhZyB0eXBlICh1c2VkIGluIHRoZSBvbGQgcmVzb3VyY2Ugc3BlYylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsdGluVGFnVHlwZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICd0YWcnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bWJlclR5cGUge1xuICByZWFkb25seSB0eXBlOiAnbnVtYmVyJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlZ2VyVHlwZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdpbnRlZ2VyJztcbiAgcmVhZG9ubHkgYWxsb3dlZFZhbHVlcz86IG51bWJlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5UeXBlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2Jvb2xlYW4nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzb25UeXBlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2pzb24nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVUaW1lVHlwZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdkYXRlLXRpbWUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE51bGxUeXBlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ251bGwnO1xufVxuXG4vKipcbiAqXG4gKiBUIGlzIHRoZSBlbnRpdHkgdHlwZSBmb3IgY29tcG91bmQgb2JqZWN0cy5cbiAqXG4gKiBGb3IgZXhhbXBsZTogVHlwZURlZmluaXRpb24sIEV2ZW50VHlwZURlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0RlZmluaXRpb25SZWZlcmVuY2U8VCBleHRlbmRzIEVudGl0eT4ge1xuICByZWFkb25seSB0eXBlOiAncmVmJztcbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBSZWZlcmVuY2U8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJyYXlUeXBlPEU+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ2FycmF5JztcbiAgcmVhZG9ubHkgZWxlbWVudDogRTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBUeXBlPEU+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ21hcCc7XG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVVuaW9uPEU+IHtcbiAgcmVhZG9ubHkgdHlwZTogJ3VuaW9uJztcbiAgcmVhZG9ubHkgdHlwZXM6IEVbXTtcbn1cbiJdfQ==
|
package/lib/types/resource.js
CHANGED
|
@@ -27,6 +27,12 @@ class RichTypedField {
|
|
|
27
27
|
// do much better than full equality.
|
|
28
28
|
if (this.types().some((t) => richType.equals(t))) {
|
|
29
29
|
// Nothing to do, type is already in there.
|
|
30
|
+
// But if the new type has allowedValues, merge them into the current type.
|
|
31
|
+
if ((type.type === 'string' || type.type === 'integer') && type.allowedValues) {
|
|
32
|
+
if (this.field.type.type === type.type) {
|
|
33
|
+
this.field.type.allowedValues = type.allowedValues;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
30
36
|
return false;
|
|
31
37
|
}
|
|
32
38
|
// Special case: if the new type is `string` and the old type is `date-time`, we assume this is
|
|
@@ -267,13 +273,15 @@ class RichPropertyType {
|
|
|
267
273
|
}
|
|
268
274
|
stringify(db, withId = true) {
|
|
269
275
|
switch (this.type.type) {
|
|
276
|
+
case 'string':
|
|
277
|
+
return this.type.allowedValues ? `string<${this.type.allowedValues.join('|')}>` : 'string';
|
|
270
278
|
case 'integer':
|
|
279
|
+
return this.type.allowedValues ? `integer<${this.type.allowedValues.join('|')}>` : 'integer';
|
|
271
280
|
case 'boolean':
|
|
272
281
|
case 'date-time':
|
|
273
282
|
case 'json':
|
|
274
283
|
case 'null':
|
|
275
284
|
case 'number':
|
|
276
|
-
case 'string':
|
|
277
285
|
case 'tag':
|
|
278
286
|
return this.type.type;
|
|
279
287
|
case 'array':
|
|
@@ -317,4 +325,4 @@ class RichPropertyType {
|
|
|
317
325
|
}
|
|
318
326
|
}
|
|
319
327
|
exports.RichPropertyType = RichPropertyType;
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsNkNBQW9EO0FBa01wRCxNQUFhLGNBQWM7SUFDekIsWUFBNkIsS0FBK0M7UUFBL0MsVUFBSyxHQUFMLEtBQUssQ0FBMEM7UUFDMUUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFTSxLQUFLO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsSUFBa0I7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1Qyw2R0FBNkc7UUFDN0csd0dBQXdHO1FBQ3hHLDhHQUE4RztRQUM5RyxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEQsMkNBQTJDO1lBQzNDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCwrRkFBK0Y7UUFDL0Ysa0dBQWtHO1FBQ2xHLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsRUFBRTtZQUM5RSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsdUdBQXVHO1FB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SSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqSCxLQUFLLE9BQU87Z0JBQ1YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUEsMkJBQWlCLEVBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztDQUNGO0FBdEpELDRDQXNKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgUmVsYXRpb25zaGlwIH0gZnJvbSAnQGNka2xhYnMvdHNrYic7XG5pbXBvcnQgeyBBcnJheVR5cGUsIE1hcFR5cGUsIEdlbmVyaWNQcm9wZXJ0eVR5cGUsIEdlbmVyaWNEZWZpbml0aW9uUmVmZXJlbmNlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgU3BlY0RhdGFiYXNlIH0gZnJvbSAnLi9kYXRhYmFzZSc7XG5pbXBvcnQgeyBzb3J0S2V5Q29tcGFyYXRvciB9IGZyb20gJy4uL3V0aWwvc29ydGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGl0aW9uIGV4dGVuZHMgRW50aXR5IHtcbiAgcmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEhhc1JlZ2lvbiA9IFJlbGF0aW9uc2hpcDxQYXJ0aXRpb24sIFJlZ2lvbiwgeyBpc1ByaW1hcnk/OiBib29sZWFuIH0+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2UgZXh0ZW5kcyBFbnRpdHkge1xuICAvKipcbiAgICogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgc2VydmljZSBpbmNsdWRpbmcgdGhlIGdyb3VwIHByZWZpeCwgbG93ZXJjYXNlZCBhbmQgaHlwaGVuYXRlZC5cbiAgICpcbiAgICogRS5nLiBgQVdTOjpEeW5hbW9EQmAgLT4gYGF3cy1keW5hbW9kYmBcbiAgICpcbiAgICogQGV4YW1wbGUgYXdzLWR5bmFtb2RiXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPbmx5IHRoZSBzZXJ2aWNlIHBhcnQgb2YgdGhlIG5hbWUsIGxvd2VyY2FzZWQuXG4gICAqXG4gICAqIEUuZy4gYEFXUzo6RHluYW1vREJgIC0+IGBkeW5hbW9kYmBcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1vZGJcbiAgICovXG4gIHJlYWRvbmx5IHNob3J0TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNob3J0bmFtZSBvZiB0aGUgc2VydmljZSBpbiBjYXBpdGFsaXplZCBmb3JtXG4gICAqXG4gICAqIEUuZy4gYEFXUzo6RHluYW1vREJgIC0+IGBEeW5hbW9EQmBcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1vZGJcbiAgICovXG4gIHJlYWRvbmx5IGNhcGl0YWxpemVkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tcGxldGUgY2xvdWRmb3JtYXRpb24gc3R5bGUgbmFtZXNwYWNlIG9mIHRoZSBzZXJ2aWNlXG4gICAqXG4gICAqIEUuZy4gYEFXUzo6RHluYW1vREJgXG4gICAqXG4gICAqIEBleGFtcGxlIGR5bmFtb2RiXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvcm1hdGlvbk5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbiBleHRlbmRzIEVudGl0eSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRhdGlvbiBleHRlbmRzIEVudGl0eSB7XG4gIHJlYWRvbmx5IG1hcmtkb3duOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2UgZXh0ZW5kcyBFbnRpdHkge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogSWYgc2V0LCB0aGlzIENsb3VkRm9ybWF0aW9uIFRyYW5zZm9ybSBpcyByZXF1aXJlZCBieSB0aGUgcmVzb3VyY2VcbiAgICovXG4gIGNsb3VkRm9ybWF0aW9uVHJhbnNmb3JtPzogc3RyaW5nO1xuICBkb2N1bWVudGF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBpZGVudGlmaWVyLCBvciBpZGVudGlmaWVycywgaW4gQ2xvdWQgQ29udHJvbCBBUElcbiAgICpcbiAgICogVW5pcXVlbHkgaWRlbnRpZmllcyBhIHJlc291cmNlIGluIGFuIGFjY291bnQuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVhZCBmcm9tIHRoZSBzY2hlbWEsIHdoaWNoIGFsd2F5cyBwZXJ0YWlucyB0byB0aGUgQ0NBUEkgaWRlbnRpZmllci5cbiAgICogVHlwaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBDbG91ZEZvcm1hdGlvbiBpZGVudGlmaWVyLCBidXQgbm90IG5lY2Vzc2FyaWx5LlxuICAgKi9cbiAgcHJpbWFyeUlkZW50aWZpZXI/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgaWRlbnRpZmllciwgb3IgaWRlbnRpZmllcnMsIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIFdoYXRldmVyIGdldHMgcmV0dXJuZWQgd2hlbiB5b3UgY2FsbCBgeyBSZWYgfWAgYSByZXNvdXJjZS4gVHlwaWNhbGx5IHRoZVxuICAgKiB2YWx1ZSB0aGF0IG90aGVyIHJlc291cmNlcyBpbiB0aGUgc2FtZSBzZXJ2aWNlIGV4cGVjdCB0byBzZWUgYXMgdGhlIHdheSB0b1xuICAgKiByZWZlcmVuY2UgdGhpcyByZXNvdXJjZSAobmFtZSBvciBBUk4gb3IgSWQpLlxuICAgKlxuICAgKiBJZiBtaXNzaW5nLCB0aGUgYGNmblJlZklkZW50aWZpZXJgIGlzIHRoZSBzYW1lIGFzIHRoZSAoQ0MtQVBJKSBgcHJpbWFyeUlkZW50aWZpZXJgLlxuICAgKi9cbiAgY2ZuUmVmSWRlbnRpZmllcj86IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlc291cmNlUHJvcGVydGllcztcbiAgcmVhZG9ubHkgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgQXR0cmlidXRlPjtcbiAgcmVhZG9ubHkgdmFsaWRhdGlvbnM/OiB1bmtub3duO1xuICBhcm5UZW1wbGF0ZT86IHN0cmluZztcbiAgaXNTdGF0ZWZ1bD86IGJvb2xlYW47XG4gIHZlbmRlZExvZ3M/OiBWZW5kZWRMb2dzW107XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWdnYWJpbGl0eSBvZiB0aGlzIHJlc291cmNlXG4gICAqXG4gICAqIFVuZGVmaW5lZCBpZiB0aGUgcmVzb3VyY2UgaXMgbm90IHRhZ2dhYmxlLlxuICAgKi9cbiAgdGFnSW5mb3JtYXRpb24/OiBUYWdJbmZvcm1hdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciBjaGFuZ2VzIHRvIHRoaXMgcmVzb3VyY2UgbmVlZCB0byBiZSBzY3J1dGluaXplZFxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXNvdXJjZVNjcnV0aW55VHlwZS5OT05FXG4gICAqL1xuICBzY3J1dGluaXphYmxlPzogUmVzb3VyY2VTY3J1dGlueVR5cGU7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcGF0aHMgdG8gcHJvcGVydGllcyB0aGF0IGFsc28gY2F1c2UgcmVwbGFjZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgdG8gaW5kaWNhdGUgdGhhdCBjZXJ0YWluIHByb3BlcnR5IHBhdGhzIGludG8gdGhpcyByZXNvdXJjZVxuICAgKiB3aWxsIGNhdXNlIHJlcGxhY2VtZW50OyBvbmx5IHJlcGxhY2VtZW50cyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZFxuICAgKiBieSB0YWdnaW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHR5cGUgZGVmaW5pdGlvbiB3aWxsIGJlIGluY2x1ZGVkIGhlcmVcbiAgICogKGZvciBleGFtcGxlLCBiZWNhdXNlIHRoZSB0YWdnZWQgcHJvcGVydHkgd291bGQgYmUgaW4gYSBwcmVkZWZpbmVkXG4gICAqIHR5cGUgbGlrZSBgdGFnYCkuXG4gICAqXG4gICAqIEFsbCBwcm9wZXJ0aWVzIGluIHRoaXMgbGlzdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBgY2F1c2VzUmVwbGFjZW1lbnQ6ICd5ZXMnYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgYWRkaXRpb25hbFJlcGxhY2VtZW50UHJvcGVydGllcz86IHN0cmluZ1tdW107XG59XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlUHJvcGVydGllcyA9IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PjtcblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRGVmaW5pdGlvbiBleHRlbmRzIEVudGl0eSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgZG9jdW1lbnRhdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydGllczogUmVzb3VyY2VQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCByZW5kZXIgdGhpcyB0eXBlIGV2ZW4gaWYgaXQgaXMgdW51c2VkLlxuICAgKi9cbiAgbXVzdFJlbmRlckZvckJ3Q29tcGF0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHlcbiAgICovXG4gIGRvY3VtZW50YXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgcHJvcGVydHkgcmVxdWlyZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdHlwZSBvZiB0aGlzIHByb3BlcnR5XG4gICAqL1xuICB0eXBlOiBQcm9wZXJ0eVR5cGU7XG5cbiAgLyoqXG4gICAqIEFuIG9yZGVyZWQgbGlzdCBvZiBwcmV2aW91cyB0eXBlcyBvZiB0aGlzIHByb3BlcnR5IGluIGFzY2VuZGluZyBvcmRlclxuICAgKlxuICAgKiBEb2VzIG5vdCBpbmNsdWRlIHRoZSBjdXJyZW50IHR5cGUsIHVzZSBgdHlwZWAgZm9yIHRoaXMuXG4gICAqL1xuICBwcmV2aW91c1R5cGVzPzogUHJvcGVydHlUeXBlW107XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcHJvcGVydHlcbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpcyBub3QgZGlyZWN0bHkgZnVuY3Rpb25hbDsgaXQgZGVzY3JpYmVzIGhvdyB0aGUgdW5kZXJseWluZyByZXNvdXJjZVxuICAgKiB3aWxsIGJlaGF2ZSBpZiB0aGUgdmFsdWUgaXMgbm90IHNwZWNpZmllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHVua25vd25cbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3QgZGVwcmVjYXRlZFxuICAgKi9cbiAgZGVwcmVjYXRlZD86IERlcHJlY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNoYW5nZXMgdG8gdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBiZSBzY3J1dGluaXplZCBzcGVjaWFsbHlcbiAgICpcbiAgICogQGRlZmF1bHQgUHJvcGVydHlTY3J1dGlueVR5cGUuTk9ORVxuICAgKi9cbiAgc2NydXRpbml6YWJsZT86IFByb3BlcnR5U2NydXRpbnlUeXBlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb250YWluaW5nIHJlc291cmNlIHdpbGwgYmUgcmVwbGFjZWQgaWYgdGhpcyBwcm9wZXJ0eSBpcyBjaGFuZ2VkXG4gICAqXG4gICAqIEBkZWZhdWx0ICdubydcbiAgICovXG4gIGNhdXNlc1JlcGxhY2VtZW50PzogJ3llcycgfCAnbm8nIHwgJ21heWJlJztcblxuICAvKipcbiAgICogUmVsYXRpb25zaGlwIHJlZmVyZW5jZXMgdG8gb3RoZXIgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VzXG4gICAqL1xuICByZWxhdGlvbnNoaXBSZWZzPzogUmVsYXRpb25zaGlwUmVmW107XG59XG5cbmV4cG9ydCBjbGFzcyBSaWNoVHlwZWRGaWVsZCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGQ6IFBpY2s8UHJvcGVydHksICd0eXBlJyB8ICdwcmV2aW91c1R5cGVzJz4pIHtcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWVsZCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHlwZXMoKTogUHJvcGVydHlUeXBlW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuZmllbGQucHJldmlvdXNUeXBlcyA/PyBbXSksIHRoaXMuZmllbGQudHlwZV07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB0eXBlIG9mIHRoaXMgcHJvcGVydHkgd2l0aCBhIG5ldyB0eXBlXG4gICAqXG4gICAqIE9ubHkgaWYgaXQncyBub3QgaW4gdGhlIHNldCBvZiB0eXBlcyBhbHJlYWR5LlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgd2FzIHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVHlwZSh0eXBlOiBQcm9wZXJ0eVR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCByaWNoVHlwZSA9IG5ldyBSaWNoUHJvcGVydHlUeXBlKHR5cGUpO1xuXG4gICAgLy8gT25seSBhZGQgdGhpcyB0eXBlIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBpdC4gV2UgYXJlIG9ubHkgZG9pbmcgY29tcGFyaXNvbnMgd2hlcmUgJ2ludGVnZXInIGFuZCAnbnVtYmVyJ1xuICAgIC8vIGFyZSB0cmVhdGVkIHRoZSBzYW1lLCBmb3IgYWxsIG90aGVyIHR5cGVzIHdlIG5lZWQgc3RyaWN0IGVxdWFsaXR5LiBXZSB1c2VkIHRvIHVzZSAnYXNzaWduYWJsZVRvJyBhcyBhXG4gICAgLy8gY29uZGl0aW9uLCBidXQgdGhlc2UgdHlwZXMgd2lsbCBiZSByZW5kZXJlZCBpbiBib3RoIGNvLSBhbmQgY29udHJhdmFyaWFudCBwb3NpdGlvbnMsIGFuZCBzbyB3ZSByZWFsbHkgY2FuJ3RcbiAgICAvLyBkbyBtdWNoIGJldHRlciB0aGFuIGZ1bGwgZXF1YWxpdHkuXG4gICAgaWYgKHRoaXMudHlwZXMoKS5zb21lKCh0KSA9PiByaWNoVHlwZS5lcXVhbHModCkpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvLCB0eXBlIGlzIGFscmVhZHkgaW4gdGhlcmUuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBpZiB0aGUgbmV3IHR5cGUgaXMgYHN0cmluZ2AgYW5kIHRoZSBvbGQgdHlwZSBpcyBgZGF0ZS10aW1lYCwgd2UgYXNzdW1lIHRoaXMgaXNcbiAgICAvLyB0aGUgc2FtZSB0eXBlIGJ1dCB3ZSBkcm9wcGVkIHNvbWUgZm9ybWF0dGluZyBpbmZvcm1hdGlvbi4gTm8gbmVlZCB0byBtYWtlIHRoaXMgYSBzZXBhcmF0ZSB0eXBlLlxuICAgIGlmICh0eXBlLnR5cGUgPT09ICdzdHJpbmcnICYmIHRoaXMudHlwZXMoKS5zb21lKCh0KSA9PiB0LnR5cGUgPT09ICdkYXRlLXRpbWUnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZTogaWYgdGhlIG5ldyB0eXBlIGlzIGBzdHJpbmdgIGFuZCB0aGUgb2xkIHR5cGUgaXMgYGpzb25gLCB3ZSBhc3N1bWUgdGhpcyBpcyBhIGNvcnJlY3Rpb25cbiAgICAvLyBvZiBhIGJ1ZzsgdGhlIG9sZCB0eXBlIHdhcyBpbmNvcnJlY3RseSB0eXBlZCBhcyBKc29uLCBhbmQgd2UncmUgbm93IGNvcnJlY3RpbmcgdGhpcy4gU2luY2UgdGhpcyB3YXMgYVxuICAgIC8vIGJ1Zywgd2UgZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBvbGQgdHlwZTogaXQgd2FzIG5ldmVyIGFjY3VyYXRlLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgYmUgbW9yZSBicm9hZCwgYW5kIG9ubHkgbWFpbnRhaW4gdHlwZSBoaXN0b3J5IGlmIHdlIGdvIGZyb21cbiAgICAvLyBganNvbmAgLT4gYG5hbWVkIHR5cGVgLCBvciBgbmFtZWQgdHlwZWAgLT4gYG5hbWVkIHR5cGVgLiAgRm9yIG5vdyBJJ21cbiAgICAvLyB3YXJ5IG9mIGRlc3Ryb3lpbmcgdG9vIG11Y2ggaW5mb3JtYXRpb247IHdlJ2xsIGp1c3QgZG8gdGhlIGZpeCBzcGVjaWZpY2FsbHlcbiAgICAvLyBmb3IgYGpzb25gIC0+IGBzdHJpbmdgLlxuICAgIGlmICh0eXBlLnR5cGUgPT09ICdzdHJpbmcnICYmIHRoaXMuZmllbGQudHlwZS50eXBlID09PSAnanNvbicpIHtcbiAgICAgIHRoaXMuZmllbGQudHlwZSA9IHR5cGU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZmllbGQucHJldmlvdXNUeXBlcykge1xuICAgICAgdGhpcy5maWVsZC5wcmV2aW91c1R5cGVzID0gW107XG4gICAgfVxuICAgIHRoaXMuZmllbGQucHJldmlvdXNUeXBlcy5wdXNoKHRoaXMuZmllbGQudHlwZSk7XG4gICAgdGhpcy5maWVsZC50eXBlID0gdHlwZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmljaFByb3BlcnR5IGV4dGVuZHMgUmljaFR5cGVkRmllbGQge1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogUHJvcGVydHkpIHtcbiAgICBzdXBlcihwcm9wZXJ0eSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJpY2hBdHRyaWJ1dGUgZXh0ZW5kcyBSaWNoVHlwZWRGaWVsZCB7XG4gIGNvbnN0cnVjdG9yKGF0dHI6IEF0dHJpYnV0ZSkge1xuICAgIHN1cGVyKGF0dHIpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlIHtcbiAgZG9jdW1lbnRhdGlvbj86IHN0cmluZztcbiAgdHlwZTogUHJvcGVydHlUeXBlO1xuICAvKipcbiAgICogQW4gb3JkZXJlZCBsaXN0IG9mIHByZXZpb3VzIHR5cGVzIG9mIHRoaXMgcHJvcGVydHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAqXG4gICAqIERvZXMgbm90IGluY2x1ZGUgdGhlIGN1cnJlbnQgdHlwZSwgdXNlIGB0eXBlYCBmb3IgdGhpcy5cbiAgICovXG4gIHByZXZpb3VzVHlwZXM/OiBQcm9wZXJ0eVR5cGVbXTtcbn1cblxuZXhwb3J0IGVudW0gRGVwcmVjYXRpb24ge1xuICAvKipcbiAgICogTm90IGRlcHJlY2F0ZWRcbiAgICovXG4gIE5PTkUgPSAnTk9ORScsXG5cbiAgLyoqXG4gICAqIFdhcm4gYWJvdXQgdXNlXG4gICAqL1xuICBXQVJOID0gJ1dBUk4nLFxuXG4gIC8qKlxuICAgKiBEbyBub3QgZW1pdCB0aGUgdmFsdWUgYXQgYWxsXG4gICAqXG4gICAqIChIYW5kbGUgcHJvcGVydGllcyB0aGF0IHdlcmUgaW5jb3JyZWN0bHkgYWRkZWQgdG8gdGhlIHNwZWMpXG4gICAqL1xuICBJR05PUkUgPSAnSUdOT1JFJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29sbGVjdGlvblR5cGUoeDogUHJvcGVydHlUeXBlKTogeCBpcyBBcnJheVR5cGU8YW55PiB8IE1hcFR5cGU8YW55PiB7XG4gIHJldHVybiB4LnR5cGUgPT09ICdhcnJheScgfHwgeC50eXBlID09PSAnbWFwJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWdJbmZvcm1hdGlvbiB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGhvbGRzIHRoZSB0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdQcm9wZXJ0eU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVXNlZCB0byBpbnN0cnVjdCBjZGsuVGFnTWFuYWdlciBob3cgdG8gaGFuZGxlIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHZhcmlhbnQ6IFRhZ1ZhcmlhbnQ7XG59XG5cbmV4cG9ydCB0eXBlIFRhZ1ZhcmlhbnQgPSAnc3RhbmRhcmQnIHwgJ2FzZycgfCAnbWFwJztcblxuZXhwb3J0IHR5cGUgSGFzUmVzb3VyY2UgPSBSZWxhdGlvbnNoaXA8U2VydmljZSwgUmVzb3VyY2U+O1xuZXhwb3J0IHR5cGUgUmVnaW9uSGFzUmVzb3VyY2UgPSBSZWxhdGlvbnNoaXA8UmVnaW9uLCBSZXNvdXJjZT47XG5leHBvcnQgdHlwZSBSZWdpb25IYXNTZXJ2aWNlID0gUmVsYXRpb25zaGlwPFJlZ2lvbiwgU2VydmljZT47XG5leHBvcnQgdHlwZSBSZXNvdXJjZURvYyA9IFJlbGF0aW9uc2hpcDxSZXNvdXJjZSwgRG9jdW1lbnRhdGlvbj47XG5cbmV4cG9ydCB0eXBlIFNlcnZpY2VJblJlZ2lvbiA9IFJlbGF0aW9uc2hpcDxSZWdpb24sIFNlcnZpY2U+O1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VJblJlZ2lvbiA9IFJlbGF0aW9uc2hpcDxSZWdpb24sIFJlc291cmNlPjtcblxuZXhwb3J0IHR5cGUgVXNlc1R5cGUgPSBSZWxhdGlvbnNoaXA8UmVzb3VyY2UsIFR5cGVEZWZpbml0aW9uPjtcblxuLyoqXG4gKiBNYXJrIGEgcmVzb3VyY2UgYXMgYSByZXNvdXJjZSB0aGF0IG5lZWRzIGFkZGl0aW9uYWwgc2NydXRpeSB3aGVuIGFkZGVkLCByZW1vdmVkIG9yIGNoYW5nZWRcbiAqXG4gKiBVc2VkIHRvIG1hcmsgcmVzb3VyY2VzIHRoYXQgcmVwcmVzZW50IHNlY3VyaXR5IHBvbGljaWVzLlxuICovXG5leHBvcnQgZW51bSBSZXNvdXJjZVNjcnV0aW55VHlwZSB7XG4gIC8qKlxuICAgKiBObyBhZGRpdGlvbmFsIHNjcnV0aW55XG4gICAqL1xuICBOb25lID0gJ05vbmUnLFxuXG4gIC8qKlxuICAgKiBBbiBleHRlcm5hbGx5IGF0dGFjaGVkIHBvbGljeSBkb2N1bWVudCB0byBhIHJlc291cmNlXG4gICAqXG4gICAqIChDb21tb24gZm9yIFNRUywgU05TLCBTMywgLi4uKVxuICAgKi9cbiAgUmVzb3VyY2VQb2xpY3lSZXNvdXJjZSA9ICdSZXNvdXJjZVBvbGljeVJlc291cmNlJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBhbiBJQU0gcG9saWN5IG9uIGFuIGlkZW50aXR5IHJlc291cmNlXG4gICAqXG4gICAqIChCYXNpY2FsbHkgc2F5aW5nOiB0aGlzIGlzIEFXUzo6SUFNOjpQb2xpY3kpXG4gICAqL1xuICBJZGVudGl0eVBvbGljeVJlc291cmNlID0gJ0lkZW50aXR5UG9saWN5UmVzb3VyY2UnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgTGFtYmRhIFBlcm1pc3Npb24gcG9saWN5XG4gICAqL1xuICBMYW1iZGFQZXJtaXNzaW9uID0gJ0xhbWJkYVBlcm1pc3Npb24nLFxuXG4gIC8qKlxuICAgKiBBbiBpbmdyZXNzIHJ1bGUgb2JqZWN0XG4gICAqL1xuICBJbmdyZXNzUnVsZVJlc291cmNlID0gJ0luZ3Jlc3NSdWxlUmVzb3VyY2UnLFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBlZ3Jlc3MgcnVsZXNcbiAgICovXG4gIEVncmVzc1J1bGVSZXNvdXJjZSA9ICdFZ3Jlc3NSdWxlUmVzb3VyY2UnLFxuXG4gIC8qKlxuICAgKiBBV1M6OlNTTzo6QXNzaWdubWVudFxuICAgKlxuICAgKiBJQU0gSWRlbnRpdHkgQ2VudGVyIChmb3JtZXJseSBrbm93biBhcyBTU08pXG4gICAqL1xuICBTc29Bc3NpZ25tZW50UmVzb3VyY2UgPSAnU3NvQXNzaWdubWVudFJlc291cmNlJyxcblxuICAvKipcbiAgICogQVdTOjpTU086Okluc3RhbmNlQWNjZXNzQ29udHJvbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogSUFNIElkZW50aXR5IENlbnRlciAoZm9ybWVybHkga25vd24gYXMgU1NPKVxuICAgKi9cbiAgU3NvSW5zdGFuY2VBQ0FDb25maWdSZXNvdXJjZSA9ICdTc29JbnN0YW5jZUFDQUNvbmZpZ1Jlc291cmNlJyxcblxuICAvKipcbiAgICogQVdTOjpTU086OlBlcm1pc3Npb25TZXRcbiAgICpcbiAgICogSUFNIElkZW50aXR5IENlbnRlciAoZm9ybWVybHkga25vd24gYXMgU1NPKVxuICAgKi9cbiAgU3NvUGVybWlzc2lvblNldCA9ICdTc29QZXJtaXNzaW9uU2V0Jyxcbn1cblxuLyoqXG4gKiBNYXJrIGEgcHJvcGVydHkgYXMgYSBwcm9wZXJ0eSB0aGF0IG5lZWRzIGFkZGl0aW9uYWwgc2NydXRpbnkgd2hlbiBpdCBjaGFuZ2VzXG4gKlxuICogVXNlZCB0byBtYXJrIHNlbnNpdGl2ZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBzZWN1cml0eS1yZWxhdGVkIGltcGxpY2F0aW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUHJvcGVydHlTY3J1dGlueVR5cGUge1xuICAvKipcbiAgICogTm8gYWRkaXRpb25hbCBzY3J1dGlueVxuICAgKi9cbiAgTm9uZSA9ICdOb25lJyxcblxuICAvKipcbiAgICogVGhpcyBpcyBhbiBJQU0gcG9saWN5IGRpcmVjdGx5IG9uIGEgcmVzb3VyY2VcbiAgICovXG4gIElubGluZVJlc291cmNlUG9saWN5ID0gJ0lubGluZVJlc291cmNlUG9saWN5JyxcblxuICAvKipcbiAgICogRWl0aGVyIGFuIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudCBvciBhIGRpY3Rpb25hcnkgb2YgcG9saWN5IGRvY3VtZW50c1xuICAgKi9cbiAgSW5saW5lSWRlbnRpdHlQb2xpY2llcyA9ICdJbmxpbmVJZGVudGl0eVBvbGljaWVzJyxcblxuICAvKipcbiAgICogQSBsaXN0IG9mIG1hbmFnZWQgcG9saWNpZXMgKG9uIGFuIGlkZW50aXR5IHJlc291cmNlKVxuICAgKi9cbiAgTWFuYWdlZFBvbGljaWVzID0gJ01hbmFnZWRQb2xpY2llcycsXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGluZ3Jlc3MgcnVsZXMgKG9uIGEgc2VjdXJpdHkgZ3JvdXApXG4gICAqL1xuICBJbmdyZXNzUnVsZXMgPSAnSW5ncmVzc1J1bGVzJyxcblxuICAvKipcbiAgICogQSBzZXQgb2YgZWdyZXNzIHJ1bGVzIChvbiBhIHNlY3VyaXR5IGdyb3VwKVxuICAgKi9cbiAgRWdyZXNzUnVsZXMgPSAnRWdyZXNzUnVsZXMnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWxhdGlvbnNoaXAgcmVmZXJlbmNlIHRvIGFub3RoZXIgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxhdGlvbnNoaXBSZWYge1xuICAvKipcbiAgICogVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGUgdGhpcyBwcm9wZXJ0eSByZWZlcmVuY2VzXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvcm1hdGlvblR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IG5hbWUgd2l0aGluIHRoZSByZWZlcmVuY2VkIHJlc291cmNlIChlLmcuLCBcIklkXCIpXG4gICAqL1xuICByZWFkb25seSBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGVsaXZlcnkgZGVzdGluYXRpb24gdGhhdCBhIENsb3VkZm9ybWF0aW9uIHJlc291cmNlIGNhbiBzZW5kIGxvZ3MgdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxpdmVyeURlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHNlcnZpY2UgdGhhdCBpcyBpbmdlc3RpbmcgdGhlIGxvZ3MsIGNhbiBiZSBTMyB8IEZIIHwgQ1dMIHwgWFJBWVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25UeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBmb3JtYXQgb2YgbG9ncyBzZW50IHRvIHRoaXMgZGVsaXZlcnkgZGVzdGluYXRpb24sIGNhbiBiZSBqc29uIHwgcGFycXVldCB8IHczYyB8IHBsYWluIHwgcmF3IHwgdW5kZWZpbmVkXG4gICAqIFdoYXQgZm9ybWF0cyBhcmUgYXZhbGlibGUgdmFyeSBiYXNlZCBvbiBkZXN0aW5hdGlvblR5cGVcbiAgICogUzMgZGVzdGluYXRpb24gdHlwZXMgY2FuIGFjY2VwdCBqc29uLCBwbGFpbiwgdzNjLCBvciBwYXJxdWV0XG4gICAqIENsb3Vkd2F0Y2ggZGVzdGluYXRpb24gdHlwZXMgY2FuIGFjY2VwdCBwbGFpbiBvciBqc29uXG4gICAqIEZpcmVob3NlIGRlc3RpbmF0aW9uIHR5cGVzIGNhbiBhY2NlcHQganNvbiwgcmF3LCBvciBwYXJxdWV0XG4gICAqIFhSYXkgZGVzdGluYXRpb24gdHlwZXMgZG8gbm90IHVzZSBvdXRwdXQgZm9ybWF0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0Rm9ybWF0cz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0eXBlIG9mIGxvZyB0aGF0IGEgQ2xvdWRmb3JtYXRpb24gUmVzb3VyY2UgY2FuIHByb2R1Y2UgYW5kIHdoYXQgZGVzdGluYXRpb25zIGNhbiBjb25zdW1lIHRoZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZW5kZWRMb2dzIHtcbiAgLyoqXG4gICAqIFdoYXQgdmVyc2lvbiBvZiBwZXJtaXNzaW9ucyB0aGUgZGVzdGluYXRpb24gc3VwcG9ydHMgVjEgfCBWMlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnNWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUeXBlIG9mIGxvZyBhIENsb3VkZm9ybWF0aW9uIHJlc291cmNlIGNhbiBwcm9kdWNlXG4gICAqL1xuICByZWFkb25seSBsb2dUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHRoZSBkZXN0aW5hdGlvbnMgdGhlIGNhbiBjb25zdW1lIHRob3NlIGxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uczogRGVsaXZlcnlEZXN0aW5hdGlvbltdO1xuICAvKipcbiAgICogUmVjb3JkIGZpZWxkcyB0aGF0IGFyZSBtYW5kYXRvcnkgdG8gYmUgZGVsaXZlcmVkXG4gICAqL1xuICBtYW5kYXRvcnlGaWVsZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFJlY29yZCBmaWVsZHMgdGhhdCBjYW4gYmUgb3B0aW9uYWxseSBkZWxpdmVyZWRcbiAgICovXG4gIG9wdGlvbmFsRmllbGRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBSaWNoUHJvcGVydHlUeXBlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0eXBlOiBQcm9wZXJ0eVR5cGUpIHt9XG5cbiAgcHVibGljIGVxdWFscyhyaHM6IFByb3BlcnR5VHlwZSk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy50eXBlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlLXRpbWUnOlxuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBjYXNlICdudWxsJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndGFnJzpcbiAgICAgICAgcmV0dXJuIHJocy50eXBlID09PSB0aGlzLnR5cGUudHlwZTtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICAgIHJldHVybiByaHMudHlwZSA9PT0gdGhpcy50eXBlLnR5cGUgJiYgbmV3IFJpY2hQcm9wZXJ0eVR5cGUodGhpcy50eXBlLmVsZW1lbnQpLmVxdWFscyhyaHMuZWxlbWVudCk7XG4gICAgICBjYXNlICdyZWYnOlxuICAgICAgICByZXR1cm4gcmhzLnR5cGUgPT09ICdyZWYnICYmIHRoaXMudHlwZS5yZWZlcmVuY2UuJHJlZiA9PT0gcmhzLnJlZmVyZW5jZS4kcmVmO1xuICAgICAgY2FzZSAndW5pb24nOlxuICAgICAgICBjb25zdCBsaHNLZXkgPSB0aGlzLnNvcnRLZXkoKTtcbiAgICAgICAgY29uc3QgcmhzS2V5ID0gbmV3IFJpY2hQcm9wZXJ0eVR5cGUocmhzKS5zb3J0S2V5KCk7XG4gICAgICAgIHJldHVybiBsaHNLZXkubGVuZ3RoID09PSByaHNLZXkubGVuZ3RoICYmIGxoc0tleS5ldmVyeSgobCwgaSkgPT4gbCA9PT0gcmhzS2V5W2ldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY3VycmVudCB0eXBlIGlzIEphdmFTY3JpcHQtZXF1YWwgdG8gdGhlIFJIUyB0eXBlXG4gICAqXG4gICAqIFNhbWUgYXMgbm9ybWFsIGVxdWFsaXR5LCBidXQgY29uc2lkZXIgYGludGVnZXJgIGFuZCBgbnVtYmVyYCB0aGUgc2FtZSB0eXBlcy5cbiAgICovXG4gIHB1YmxpYyBqYXZhc2NyaXB0RXF1YWxzKHJoczogUHJvcGVydHlUeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUudHlwZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICAvLyBXaWRlbmluZ1xuICAgICAgICByZXR1cm4gcmhzLnR5cGUgPT09ICdpbnRlZ2VyJyB8fCByaHMudHlwZSA9PT0gJ251bWJlcic7XG5cbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICAgIHJldHVybiByaHMudHlwZSA9PT0gdGhpcy50eXBlLnR5cGUgJiYgbmV3IFJpY2hQcm9wZXJ0eVR5cGUodGhpcy50eXBlLmVsZW1lbnQpLmphdmFzY3JpcHRFcXVhbHMocmhzLmVsZW1lbnQpO1xuXG4gICAgICBjYXNlICd1bmlvbic6XG4gICAgICAgIGlmIChyaHMudHlwZSAhPT0gJ3VuaW9uJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBFdmVyeSB0eXBlIGluIHRoaXMgdW5pb24gbmVlZHMgdG8gYmUgZXF1YWwgb25lIHR5cGUgaW4gUkhTXG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUudHlwZXMuZXZlcnkoKHQxKSA9PiByaHMudHlwZXMuc29tZSgodDIpID0+IG5ldyBSaWNoUHJvcGVydHlUeXBlKHQxKS5qYXZhc2NyaXB0RXF1YWxzKHQyKSkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBGb3IgYW55dGhpbmcgZWxzZSwgbmVlZCBzdHJpY3QgZXF1YWxpdHlcbiAgICAgICAgcmV0dXJuIHRoaXMuZXF1YWxzKHJocyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgdHlwZSBpcyBhc3NpZ25hYmxlIHRvIHRoZSBSSFMgdHlwZS5cbiAgICpcbiAgICogVGhpcyBpcyBtZWFucyBldmVyeSB0eXBlIG1lbWJlciBvZiB0aGUgTEhTIG11c3QgYmUgcHJlc2VudCBpbiB0aGUgUkhTIHR5cGVcbiAgICovXG4gIHB1YmxpYyBhc3NpZ25hYmxlVG8ocmhzOiBQcm9wZXJ0eVR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBleHRyYWN0TWVtYmVycyA9ICh0eXBlOiBQcm9wZXJ0eVR5cGUpOiBQcm9wZXJ0eVR5cGVbXSA9PiAodHlwZS50eXBlID09ICd1bmlvbicgPyB0eXBlLnR5cGVzIDogW3R5cGVdKTtcbiAgICBjb25zdCBhc1JpY2hUeXBlID0gKHR5cGU6IFByb3BlcnR5VHlwZSk6IFJpY2hQcm9wZXJ0eVR5cGUgPT4gbmV3IFJpY2hQcm9wZXJ0eVR5cGUodHlwZSk7XG5cbiAgICBjb25zdCByaHNNZW1iZXJzID0gZXh0cmFjdE1lbWJlcnMocmhzKTtcbiAgICBmb3IgKGNvbnN0IGxoc01lbWJlciBvZiBleHRyYWN0TWVtYmVycyh0aGlzLnR5cGUpLm1hcChhc1JpY2hUeXBlKSkge1xuICAgICAgaWYgKCFyaHNNZW1iZXJzLnNvbWUoKHR5cGUpID0+IGxoc01lbWJlci5lcXVhbHModHlwZSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoaXMgdHlwZSwgYnV0IHdpdGggYWxsIHR5cGUgdW5pb25zIGluIGEgcmVndWxhcml6ZWQgb3JkZXJcbiAgICovXG4gIHB1YmxpYyBub3JtYWxpemUoZGI6IFNwZWNEYXRhYmFzZSk6IFJpY2hQcm9wZXJ0eVR5cGUge1xuICAgIHN3aXRjaCAodGhpcy50eXBlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICAgIHJldHVybiBuZXcgUmljaFByb3BlcnR5VHlwZSh7XG4gICAgICAgICAgdHlwZTogdGhpcy50eXBlLnR5cGUsXG4gICAgICAgICAgZWxlbWVudDogbmV3IFJpY2hQcm9wZXJ0eVR5cGUodGhpcy50eXBlLmVsZW1lbnQpLm5vcm1hbGl6ZShkYikudHlwZSxcbiAgICAgICAgfSk7XG4gICAgICBjYXNlICd1bmlvbic6XG4gICAgICAgIGNvbnN0IHR5cGVzID0gdGhpcy50eXBlLnR5cGVzXG4gICAgICAgICAgLm1hcCgodCkgPT4gbmV3IFJpY2hQcm9wZXJ0eVR5cGUodCkubm9ybWFsaXplKGRiKSlcbiAgICAgICAgICAubWFwKCh0KSA9PiBbdCwgdC5zb3J0S2V5KGRiKV0gYXMgY29uc3QpO1xuICAgICAgICB0eXBlcy5zb3J0KHNvcnRLZXlDb21wYXJhdG9yKChbXywgc29ydEtleV0pID0+IHNvcnRLZXkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSaWNoUHJvcGVydHlUeXBlKHtcbiAgICAgICAgICB0eXBlOiAndW5pb24nLFxuICAgICAgICAgIHR5cGVzOiB0eXBlcy5tYXAoKFt0LCBfXSkgPT4gdC50eXBlKSxcbiAgICAgICAgfSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RyaW5naWZ5KGRiOiBTcGVjRGF0YWJhc2UsIHdpdGhJZCA9IHRydWUpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy50eXBlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlLXRpbWUnOlxuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBjYXNlICdudWxsJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndGFnJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS50eXBlO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gYEFycmF5PCR7bmV3IFJpY2hQcm9wZXJ0eVR5cGUodGhpcy50eXBlLmVsZW1lbnQpLnN0cmluZ2lmeShkYiwgd2l0aElkKX0+YDtcbiAgICAgIGNhc2UgJ21hcCc6XG4gICAgICAgIHJldHVybiBgTWFwPHN0cmluZywgJHtuZXcgUmljaFByb3BlcnR5VHlwZSh0aGlzLnR5cGUuZWxlbWVudCkuc3RyaW5naWZ5KGRiLCB3aXRoSWQpfT5gO1xuICAgICAgY2FzZSAncmVmJzpcbiAgICAgICAgY29uc3QgdHlwZSA9IGRiLmdldCgndHlwZURlZmluaXRpb24nLCB0aGlzLnR5cGUucmVmZXJlbmNlKTtcbiAgICAgICAgcmV0dXJuIHdpdGhJZCA/IGAke3R5cGUubmFtZX0oJHt0aGlzLnR5cGUucmVmZXJlbmNlLiRyZWZ9KWAgOiB0eXBlLm5hbWU7XG4gICAgICBjYXNlICd1bmlvbic6XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUudHlwZXMubWFwKCh0KSA9PiBuZXcgUmljaFByb3BlcnR5VHlwZSh0KS5zdHJpbmdpZnkoZGIsIHdpdGhJZCkpLmpvaW4oJyB8ICcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzb3J0YWJsZSBrZXkgYmFzZWQgb24gdGhpcyB0eXBlXG4gICAqXG4gICAqIElmIGEgZGF0YWJhc2UgaXMgZ2l2ZW4sIHR5cGUgZGVmaW5pdGlvbnMgd2lsbCBiZSBzb3J0ZWQgYmFzZWQgb24gdHlwZSBuYW1lLFxuICAgKiBvdGhlcndpc2Ugb24gaWRlbnRpZmllclxuICAgKi9cbiAgcHVibGljIHNvcnRLZXkoZGI/OiBTcGVjRGF0YWJhc2UpOiBzdHJpbmdbXSB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUudHlwZSkge1xuICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUtdGltZSc6XG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICByZXR1cm4gWycwJywgdGhpcy50eXBlLnR5cGVdO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgcmV0dXJuIFsnMScsIHRoaXMudHlwZS50eXBlLCAuLi5uZXcgUmljaFByb3BlcnR5VHlwZSh0aGlzLnR5cGUuZWxlbWVudCkuc29ydEtleShkYildO1xuICAgICAgY2FzZSAncmVmJzpcbiAgICAgICAgcmV0dXJuIFsnMicsIHRoaXMudHlwZS50eXBlLCBkYj8uZ2V0KCd0eXBlRGVmaW5pdGlvbicsIHRoaXMudHlwZS5yZWZlcmVuY2UpPy5uYW1lID8/IHRoaXMudHlwZS5yZWZlcmVuY2UuJHJlZl07XG4gICAgICBjYXNlICd1bmlvbic6XG4gICAgICAgIGNvbnN0IHR5cGVLZXlzID0gdGhpcy50eXBlLnR5cGVzLm1hcCgodCkgPT4gbmV3IFJpY2hQcm9wZXJ0eVR5cGUodCkuc29ydEtleShkYikpO1xuICAgICAgICB0eXBlS2V5cy5zb3J0KHNvcnRLZXlDb21wYXJhdG9yKCh4KSA9PiB4KSk7XG4gICAgICAgIHJldHVybiBbJzMnLCB0aGlzLnR5cGUudHlwZSwgLi4udHlwZUtleXMuZmxhdE1hcCgoeCkgPT4geCldO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVR5cGUgPSBHZW5lcmljUHJvcGVydHlUeXBlPFR5cGVEZWZpbml0aW9uPjtcbmV4cG9ydCB0eXBlIERlZmluaXRpb25SZWZlcmVuY2UgPSBHZW5lcmljRGVmaW5pdGlvblJlZmVyZW5jZTxUeXBlRGVmaW5pdGlvbj47XG4iXX0=
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsNkNBQW9EO0FBa01wRCxNQUFhLGNBQWM7SUFDekIsWUFBNkIsS0FBK0M7UUFBL0MsVUFBSyxHQUFMLEtBQUssQ0FBMEM7UUFDMUUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFTSxLQUFLO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsSUFBa0I7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1Qyw2R0FBNkc7UUFDN0csd0dBQXdHO1FBQ3hHLDhHQUE4RztRQUM5RyxxQ0FBcUM7UUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEQsMkNBQTJDO1lBQzNDLDJFQUEyRTtZQUMzRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUM3RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQVksQ0FBQyxhQUFh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RUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztDQUNGO0FBeEpELDRDQXdKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eSwgUmVsYXRpb25zaGlwIH0gZnJvbSAnQGNka2xhYnMvdHNrYic7XG5pbXBvcnQgeyBBcnJheVR5cGUsIE1hcFR5cGUsIEdlbmVyaWNQcm9wZXJ0eVR5cGUsIEdlbmVyaWNEZWZpbml0aW9uUmVmZXJlbmNlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgU3BlY0RhdGFiYXNlIH0gZnJvbSAnLi9kYXRhYmFzZSc7XG5pbXBvcnQgeyBzb3J0S2V5Q29tcGFyYXRvciB9IGZyb20gJy4uL3V0aWwvc29ydGluZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGl0aW9uIGV4dGVuZHMgRW50aXR5IHtcbiAgcmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEhhc1JlZ2lvbiA9IFJlbGF0aW9uc2hpcDxQYXJ0aXRpb24sIFJlZ2lvbiwgeyBpc1ByaW1hcnk/OiBib29sZWFuIH0+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2UgZXh0ZW5kcyBFbnRpdHkge1xuICAvKipcbiAgICogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgc2VydmljZSBpbmNsdWRpbmcgdGhlIGdyb3VwIHByZWZpeCwgbG93ZXJjYXNlZCBhbmQgaHlwaGVuYXRlZC5cbiAgICpcbiAgICogRS5nLiBgQVdTOjpEeW5hbW9EQmAgLT4gYGF3cy1keW5hbW9kYmBcbiAgICpcbiAgICogQGV4YW1wbGUgYXdzLWR5bmFtb2RiXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPbmx5IHRoZSBzZXJ2aWNlIHBhcnQgb2YgdGhlIG5hbWUsIGxvd2VyY2FzZWQuXG4gICAqXG4gICAqIEUuZy4gYEFXUzo6RHluYW1vREJgIC0+IGBkeW5hbW9kYmBcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1vZGJcbiAgICovXG4gIHJlYWRvbmx5IHNob3J0TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNob3J0bmFtZSBvZiB0aGUgc2VydmljZSBpbiBjYXBpdGFsaXplZCBmb3JtXG4gICAqXG4gICAqIEUuZy4gYEFXUzo6RHluYW1vREJgIC0+IGBEeW5hbW9EQmBcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1vZGJcbiAgICovXG4gIHJlYWRvbmx5IGNhcGl0YWxpemVkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tcGxldGUgY2xvdWRmb3JtYXRpb24gc3R5bGUgbmFtZXNwYWNlIG9mIHRoZSBzZXJ2aWNlXG4gICAqXG4gICAqIEUuZy4gYEFXUzo6RHluYW1vREJgXG4gICAqXG4gICAqIEBleGFtcGxlIGR5bmFtb2RiXG4gICAqL1xuICByZWFkb25seSBjbG91ZEZvcm1hdGlvbk5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbiBleHRlbmRzIEVudGl0eSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRhdGlvbiBleHRlbmRzIEVudGl0eSB7XG4gIHJlYWRvbmx5IG1hcmtkb3duOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2UgZXh0ZW5kcyBFbnRpdHkge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uVHlwZTogc3RyaW5nO1xuICAvKipcbiAgICogSWYgc2V0LCB0aGlzIENsb3VkRm9ybWF0aW9uIFRyYW5zZm9ybSBpcyByZXF1aXJlZCBieSB0aGUgcmVzb3VyY2VcbiAgICovXG4gIGNsb3VkRm9ybWF0aW9uVHJhbnNmb3JtPzogc3RyaW5nO1xuICBkb2N1bWVudGF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBpZGVudGlmaWVyLCBvciBpZGVudGlmaWVycywgaW4gQ2xvdWQgQ29udHJvbCBBUElcbiAgICpcbiAgICogVW5pcXVlbHkgaWRlbnRpZmllcyBhIHJlc291cmNlIGluIGFuIGFjY291bnQuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVhZCBmcm9tIHRoZSBzY2hlbWEsIHdoaWNoIGFsd2F5cyBwZXJ0YWlucyB0byB0aGUgQ0NBUEkgaWRlbnRpZmllci5cbiAgICogVHlwaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBDbG91ZEZvcm1hdGlvbiBpZGVudGlmaWVyLCBidXQgbm90IG5lY2Vzc2FyaWx5LlxuICAgKi9cbiAgcHJpbWFyeUlkZW50aWZpZXI/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgaWRlbnRpZmllciwgb3IgaWRlbnRpZmllcnMsIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIFdoYXRldmVyIGdldHMgcmV0dXJuZWQgd2hlbiB5b3UgY2FsbCBgeyBSZWYgfWAgYSByZXNvdXJjZS4gVHlwaWNhbGx5IHRoZVxuICAgKiB2YWx1ZSB0aGF0IG90aGVyIHJlc291cmNlcyBpbiB0aGUgc2FtZSBzZXJ2aWNlIGV4cGVjdCB0byBzZWUgYXMgdGhlIHdheSB0b1xuICAgKiByZWZlcmVuY2UgdGhpcyByZXNvdXJjZSAobmFtZSBvciBBUk4gb3IgSWQpLlxuICAgKlxuICAgKiBJZiBtaXNzaW5nLCB0aGUgYGNmblJlZklkZW50aWZpZXJgIGlzIHRoZSBzYW1lIGFzIHRoZSAoQ0MtQVBJKSBgcHJpbWFyeUlkZW50aWZpZXJgLlxuICAgKi9cbiAgY2ZuUmVmSWRlbnRpZmllcj86IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlc291cmNlUHJvcGVydGllcztcbiAgcmVhZG9ubHkgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgQXR0cmlidXRlPjtcbiAgcmVhZG9ubHkgdmFsaWRhdGlvbnM/OiB1bmtub3duO1xuICBhcm5UZW1wbGF0ZT86IHN0cmluZztcbiAgaXNTdGF0ZWZ1bD86IGJvb2xlYW47XG4gIHZlbmRlZExvZ3M/OiBWZW5kZWRMb2dzW107XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSB0YWdnYWJpbGl0eSBvZiB0aGlzIHJlc291cmNlXG4gICAqXG4gICAqIFVuZGVmaW5lZCBpZiB0aGUgcmVzb3VyY2UgaXMgbm90IHRhZ2dhYmxlLlxuICAgKi9cbiAgdGFnSW5mb3JtYXRpb24/OiBUYWdJbmZvcm1hdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciBjaGFuZ2VzIHRvIHRoaXMgcmVzb3VyY2UgbmVlZCB0byBiZSBzY3J1dGluaXplZFxuICAgKlxuICAgKiBAZGVmYXVsdCBSZXNvdXJjZVNjcnV0aW55VHlwZS5OT05FXG4gICAqL1xuICBzY3J1dGluaXphYmxlPzogUmVzb3VyY2VTY3J1dGlueVR5cGU7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcGF0aHMgdG8gcHJvcGVydGllcyB0aGF0IGFsc28gY2F1c2UgcmVwbGFjZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgdG8gaW5kaWNhdGUgdGhhdCBjZXJ0YWluIHByb3BlcnR5IHBhdGhzIGludG8gdGhpcyByZXNvdXJjZVxuICAgKiB3aWxsIGNhdXNlIHJlcGxhY2VtZW50OyBvbmx5IHJlcGxhY2VtZW50cyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZFxuICAgKiBieSB0YWdnaW5nIHRoZSBwcm9wZXJ0eSBpbiBhIHR5cGUgZGVmaW5pdGlvbiB3aWxsIGJlIGluY2x1ZGVkIGhlcmVcbiAgICogKGZvciBleGFtcGxlLCBiZWNhdXNlIHRoZSB0YWdnZWQgcHJvcGVydHkgd291bGQgYmUgaW4gYSBwcmVkZWZpbmVkXG4gICAqIHR5cGUgbGlrZSBgdGFnYCkuXG4gICAqXG4gICAqIEFsbCBwcm9wZXJ0aWVzIGluIHRoaXMgbGlzdCBzaG91bGQgYmUgdHJlYXRlZCBhcyBgY2F1c2VzUmVwbGFjZW1lbnQ6ICd5ZXMnYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgYWRkaXRpb25hbFJlcGxhY2VtZW50UHJvcGVydGllcz86IHN0cmluZ1tdW107XG59XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlUHJvcGVydGllcyA9IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5PjtcblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRGVmaW5pdGlvbiBleHRlbmRzIEVudGl0eSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgZG9jdW1lbnRhdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydGllczogUmVzb3VyY2VQcm9wZXJ0aWVzO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCByZW5kZXIgdGhpcyB0eXBlIGV2ZW4gaWYgaXQgaXMgdW51c2VkLlxuICAgKi9cbiAgbXVzdFJlbmRlckZvckJ3Q29tcGF0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHlcbiAgICovXG4gIGRvY3VtZW50YXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgcHJvcGVydHkgcmVxdWlyZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdHlwZSBvZiB0aGlzIHByb3BlcnR5XG4gICAqL1xuICB0eXBlOiBQcm9wZXJ0eVR5cGU7XG5cbiAgLyoqXG4gICAqIEFuIG9yZGVyZWQgbGlzdCBvZiBwcmV2aW91cyB0eXBlcyBvZiB0aGlzIHByb3BlcnR5IGluIGFzY2VuZGluZyBvcmRlclxuICAgKlxuICAgKiBEb2VzIG5vdCBpbmNsdWRlIHRoZSBjdXJyZW50IHR5cGUsIHVzZSBgdHlwZWAgZm9yIHRoaXMuXG4gICAqL1xuICBwcmV2aW91c1R5cGVzPzogUHJvcGVydHlUeXBlW107XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgcHJvcGVydHlcbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpcyBub3QgZGlyZWN0bHkgZnVuY3Rpb25hbDsgaXQgZGVzY3JpYmVzIGhvdyB0aGUgdW5kZXJseWluZyByZXNvdXJjZVxuICAgKiB3aWxsIGJlaGF2ZSBpZiB0aGUgdmFsdWUgaXMgbm90IHNwZWNpZmllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHVua25vd25cbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3QgZGVwcmVjYXRlZFxuICAgKi9cbiAgZGVwcmVjYXRlZD86IERlcHJlY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNoYW5nZXMgdG8gdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBiZSBzY3J1dGluaXplZCBzcGVjaWFsbHlcbiAgICpcbiAgICogQGRlZmF1bHQgUHJvcGVydHlTY3J1dGlueVR5cGUuTk9ORVxuICAgKi9cbiAgc2NydXRpbml6YWJsZT86IFByb3BlcnR5U2NydXRpbnlUeXBlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb250YWluaW5nIHJlc291cmNlIHdpbGwgYmUgcmVwbGFjZWQgaWYgdGhpcyBwcm9wZXJ0eSBpcyBjaGFuZ2VkXG4gICAqXG4gICAqIEBkZWZhdWx0ICdubydcbiAgICovXG4gIGNhdXNlc1JlcGxhY2VtZW50PzogJ3llcycgfCAnbm8nIHwgJ21heWJlJztcblxuICAvKipcbiAgICogUmVsYXRpb25zaGlwIHJlZmVyZW5jZXMgdG8gb3RoZXIgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2VzXG4gICAqL1xuICByZWxhdGlvbnNoaXBSZWZzPzogUmVsYXRpb25zaGlwUmVmW107XG59XG5cbmV4cG9ydCBjbGFzcyBSaWNoVHlwZWRGaWVsZCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGQ6IFBpY2s8UHJvcGVydHksICd0eXBlJyB8ICdwcmV2aW91c1R5cGVzJz4pIHtcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWVsZCBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHlwZXMoKTogUHJvcGVydHlUeXBlW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuZmllbGQucHJldmlvdXNUeXBlcyA/PyBbXSksIHRoaXMuZmllbGQudHlwZV07XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB0eXBlIG9mIHRoaXMgcHJvcGVydHkgd2l0aCBhIG5ldyB0eXBlXG4gICAqXG4gICAqIE9ubHkgaWYgaXQncyBub3QgaW4gdGhlIHNldCBvZiB0eXBlcyBhbHJlYWR5LlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR5cGUgd2FzIHVwZGF0ZWQuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVHlwZSh0eXBlOiBQcm9wZXJ0eVR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCByaWNoVHlwZSA9IG5ldyBSaWNoUHJvcGVydHlUeXBlKHR5cGUpO1xuXG4gICAgLy8gT25seSBhZGQgdGhpcyB0eXBlIGlmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBpdC4gV2UgYXJlIG9ubHkgZG9pbmcgY29tcGFyaXNvbnMgd2hlcmUgJ2ludGVnZXInIGFuZCAnbnVtYmVyJ1xuICAgIC8vIGFyZSB0cmVhdGVkIHRoZSBzYW1lLCBmb3IgYWxsIG90aGVyIHR5cGVzIHdlIG5lZWQgc3RyaWN0IGVxdWFsaXR5LiBXZSB1c2VkIHRvIHVzZSAnYXNzaWduYWJsZVRvJyBhcyBhXG4gICAgLy8gY29uZGl0aW9uLCBidXQgdGhlc2UgdHlwZXMgd2lsbCBiZSByZW5kZXJlZCBpbiBib3RoIGNvLSBhbmQgY29udHJhdmFyaWFudCBwb3NpdGlvbnMsIGFuZCBzbyB3ZSByZWFsbHkgY2FuJ3RcbiAgICAvLyBkbyBtdWNoIGJldHRlciB0aGFuIGZ1bGwgZXF1YWxpdHkuXG4gICAgaWYgKHRoaXMudHlwZXMoKS5zb21lKCh0KSA9PiByaWNoVHlwZS5lcXVhbHModCkpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvLCB0eXBlIGlzIGFscmVhZHkgaW4gdGhlcmUuXG4gICAgICAvLyBCdXQgaWYgdGhlIG5ldyB0eXBlIGhhcyBhbGxvd2VkVmFsdWVzLCBtZXJnZSB0aGVtIGludG8gdGhlIGN1cnJlbnQgdHlwZS5cbiAgICAgIGlmICgodHlwZS50eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlLnR5cGUgPT09ICdpbnRlZ2VyJykgJiYgdHlwZS5hbGxvd2VkVmFsdWVzKSB7XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLnR5cGUudHlwZSA9PT0gdHlwZS50eXBlKSB7XG4gICAgICAgICAgKHRoaXMuZmllbGQudHlwZSBhcyBhbnkpLmFsbG93ZWRWYWx1ZXMgPSB0eXBlLmFsbG93ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2U6IGlmIHRoZSBuZXcgdHlwZSBpcyBgc3RyaW5nYCBhbmQgdGhlIG9sZCB0eXBlIGlzIGBkYXRlLXRpbWVgLCB3ZSBhc3N1bWUgdGhpcyBpc1xuICAgIC8vIHRoZSBzYW1lIHR5cGUgYnV0IHdlIGRyb3BwZWQgc29tZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uLiBObyBuZWVkIHRvIG1ha2UgdGhpcyBhIHNlcGFyYXRlIHR5cGUuXG4gICAgaWYgKHR5cGUudHlwZSA9PT0gJ3N0cmluZycgJiYgdGhpcy50eXBlcygpLnNvbWUoKHQpID0+IHQudHlwZSA9PT0gJ2RhdGUtdGltZScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlOiBpZiB0aGUgbmV3IHR5cGUgaXMgYHN0cmluZ2AgYW5kIHRoZSBvbGQgdHlwZSBpcyBganNvbmAsIHdlIGFzc3VtZSB0aGlzIGlzIGEgY29ycmVjdGlvblxuICAgIC8vIG9mIGEgYnVnOyB0aGUgb2xkIHR5cGUgd2FzIGluY29ycmVjdGx5IHR5cGVkIGFzIEpzb24sIGFuZCB3ZSdyZSBub3cgY29ycmVjdGluZyB0aGlzLiBTaW5jZSB0aGlzIHdhcyBhXG4gICAgLy8gYnVnLCB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgdGhlIG9sZCB0eXBlOiBpdCB3YXMgbmV2ZXIgYWNjdXJhdGUuXG4gICAgLy9cbiAgICAvLyBXZSBjb3VsZCBiZSBtb3JlIGJyb2FkLCBhbmQgb25seSBtYWludGFpbiB0eXBlIGhpc3RvcnkgaWYgd2UgZ28gZnJvbVxuICAgIC8vIGBqc29uYCAtPiBgbmFtZWQgdHlwZWAsIG9yIGBuYW1lZCB0eXBlYCAtPiBgbmFtZWQgdHlwZWAuICBGb3Igbm93IEknbVxuICAgIC8vIHdhcnkgb2YgZGVzdHJveWluZyB0b28gbXVjaCBpbmZvcm1hdGlvbjsgd2UnbGwganVzdCBkbyB0aGUgZml4IHNwZWNpZmljYWxseVxuICAgIC8vIGZvciBganNvbmAgLT4gYHN0cmluZ2AuXG4gICAgaWYgKHR5cGUudHlwZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5maWVsZC50eXBlLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgdGhpcy5maWVsZC50eXBlID0gdHlwZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5maWVsZC5wcmV2aW91c1R5cGVzKSB7XG4gICAgICB0aGlzLmZpZWxkLnByZXZpb3VzVHlwZXMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5maWVsZC5wcmV2aW91c1R5cGVzLnB1c2godGhpcy5maWVsZC50eXBlKTtcbiAgICB0aGlzLmZpZWxkLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSaWNoUHJvcGVydHkgZXh0ZW5kcyBSaWNoVHlwZWRGaWVsZCB7XG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuICAgIHN1cGVyKHByb3BlcnR5KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmljaEF0dHJpYnV0ZSBleHRlbmRzIFJpY2hUeXBlZEZpZWxkIHtcbiAgY29uc3RydWN0b3IoYXR0cjogQXR0cmlidXRlKSB7XG4gICAgc3VwZXIoYXR0cik7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBkb2N1bWVudGF0aW9uPzogc3RyaW5nO1xuICB0eXBlOiBQcm9wZXJ0eVR5cGU7XG4gIC8qKlxuICAgKiBBbiBvcmRlcmVkIGxpc3Qgb2YgcHJldmlvdXMgdHlwZXMgb2YgdGhpcyBwcm9wZXJ0eSBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICpcbiAgICogRG9lcyBub3QgaW5jbHVkZSB0aGUgY3VycmVudCB0eXBlLCB1c2UgYHR5cGVgIGZvciB0aGlzLlxuICAgKi9cbiAgcHJldmlvdXNUeXBlcz86IFByb3BlcnR5VHlwZVtdO1xufVxuXG5leHBvcnQgZW51bSBEZXByZWNhdGlvbiB7XG4gIC8qKlxuICAgKiBOb3QgZGVwcmVjYXRlZFxuICAgKi9cbiAgTk9ORSA9ICdOT05FJyxcblxuICAvKipcbiAgICogV2FybiBhYm91dCB1c2VcbiAgICovXG4gIFdBUk4gPSAnV0FSTicsXG5cbiAgLyoqXG4gICAqIERvIG5vdCBlbWl0IHRoZSB2YWx1ZSBhdCBhbGxcbiAgICpcbiAgICogKEhhbmRsZSBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBhZGRlZCB0byB0aGUgc3BlYylcbiAgICovXG4gIElHTk9SRSA9ICdJR05PUkUnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh4OiBQcm9wZXJ0eVR5cGUpOiB4IGlzIEFycmF5VHlwZTxhbnk+IHwgTWFwVHlwZTxhbnk+IHtcbiAgcmV0dXJuIHgudHlwZSA9PT0gJ2FycmF5JyB8fCB4LnR5cGUgPT09ICdtYXAnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0luZm9ybWF0aW9uIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGluc3RydWN0IGNkay5UYWdNYW5hZ2VyIGhvdyB0byBoYW5kbGUgdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdmFyaWFudDogVGFnVmFyaWFudDtcbn1cblxuZXhwb3J0IHR5cGUgVGFnVmFyaWFudCA9ICdzdGFuZGFyZCcgfCAnYXNnJyB8ICdtYXAnO1xuXG5leHBvcnQgdHlwZSBIYXNSZXNvdXJjZSA9IFJlbGF0aW9uc2hpcDxTZXJ2aWNlLCBSZXNvdXJjZT47XG5leHBvcnQgdHlwZSBSZWdpb25IYXNSZXNvdXJjZSA9IFJlbGF0aW9uc2hpcDxSZWdpb24sIFJlc291cmNlPjtcbmV4cG9ydCB0eXBlIFJlZ2lvbkhhc1NlcnZpY2UgPSBSZWxhdGlvbnNoaXA8UmVnaW9uLCBTZXJ2aWNlPjtcbmV4cG9ydCB0eXBlIFJlc291cmNlRG9jID0gUmVsYXRpb25zaGlwPFJlc291cmNlLCBEb2N1bWVudGF0aW9uPjtcblxuZXhwb3J0IHR5cGUgU2VydmljZUluUmVnaW9uID0gUmVsYXRpb25zaGlwPFJlZ2lvbiwgU2VydmljZT47XG5leHBvcnQgdHlwZSBSZXNvdXJjZUluUmVnaW9uID0gUmVsYXRpb25zaGlwPFJlZ2lvbiwgUmVzb3VyY2U+O1xuXG5leHBvcnQgdHlwZSBVc2VzVHlwZSA9IFJlbGF0aW9uc2hpcDxSZXNvdXJjZSwgVHlwZURlZmluaXRpb24+O1xuXG4vKipcbiAqIE1hcmsgYSByZXNvdXJjZSBhcyBhIHJlc291cmNlIHRoYXQgbmVlZHMgYWRkaXRpb25hbCBzY3J1dGl5IHdoZW4gYWRkZWQsIHJlbW92ZWQgb3IgY2hhbmdlZFxuICpcbiAqIFVzZWQgdG8gbWFyayByZXNvdXJjZXMgdGhhdCByZXByZXNlbnQgc2VjdXJpdHkgcG9saWNpZXMuXG4gKi9cbmV4cG9ydCBlbnVtIFJlc291cmNlU2NydXRpbnlUeXBlIHtcbiAgLyoqXG4gICAqIE5vIGFkZGl0aW9uYWwgc2NydXRpbnlcbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIEFuIGV4dGVybmFsbHkgYXR0YWNoZWQgcG9saWN5IGRvY3VtZW50IHRvIGEgcmVzb3VyY2VcbiAgICpcbiAgICogKENvbW1vbiBmb3IgU1FTLCBTTlMsIFMzLCAuLi4pXG4gICAqL1xuICBSZXNvdXJjZVBvbGljeVJlc291cmNlID0gJ1Jlc291cmNlUG9saWN5UmVzb3VyY2UnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIElBTSBwb2xpY3kgb24gYW4gaWRlbnRpdHkgcmVzb3VyY2VcbiAgICpcbiAgICogKEJhc2ljYWxseSBzYXlpbmc6IHRoaXMgaXMgQVdTOjpJQU06OlBvbGljeSlcbiAgICovXG4gIElkZW50aXR5UG9saWN5UmVzb3VyY2UgPSAnSWRlbnRpdHlQb2xpY3lSZXNvdXJjZScsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBMYW1iZGEgUGVybWlzc2lvbiBwb2xpY3lcbiAgICovXG4gIExhbWJkYVBlcm1pc3Npb24gPSAnTGFtYmRhUGVybWlzc2lvbicsXG5cbiAgLyoqXG4gICAqIEFuIGluZ3Jlc3MgcnVsZSBvYmplY3RcbiAgICovXG4gIEluZ3Jlc3NSdWxlUmVzb3VyY2UgPSAnSW5ncmVzc1J1bGVSZXNvdXJjZScsXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGVncmVzcyBydWxlc1xuICAgKi9cbiAgRWdyZXNzUnVsZVJlc291cmNlID0gJ0VncmVzc1J1bGVSZXNvdXJjZScsXG5cbiAgLyoqXG4gICAqIEFXUzo6U1NPOjpBc3NpZ25tZW50XG4gICAqXG4gICAqIElBTSBJZGVudGl0eSBDZW50ZXIgKGZvcm1lcmx5IGtub3duIGFzIFNTTylcbiAgICovXG4gIFNzb0Fzc2lnbm1lbnRSZXNvdXJjZSA9ICdTc29Bc3NpZ25tZW50UmVzb3VyY2UnLFxuXG4gIC8qKlxuICAgKiBBV1M6OlNTTzo6SW5zdGFuY2VBY2Nlc3NDb250cm9sQXR0cmlidXRlQ29uZmlndXJhdGlvblxuICAgKlxuICAgKiBJQU0gSWRlbnRpdHkgQ2VudGVyIChmb3JtZXJseSBrbm93biBhcyBTU08pXG4gICAqL1xuICBTc29JbnN0YW5jZUFDQUNvbmZpZ1Jlc291cmNlID0gJ1Nzb0luc3RhbmNlQUNBQ29uZmlnUmVzb3VyY2UnLFxuXG4gIC8qKlxuICAgKiBBV1M6OlNTTzo6UGVybWlzc2lvblNldFxuICAgKlxuICAgKiBJQU0gSWRlbnRpdHkgQ2VudGVyIChmb3JtZXJseSBrbm93biBhcyBTU08pXG4gICAqL1xuICBTc29QZXJtaXNzaW9uU2V0ID0gJ1Nzb1Blcm1pc3Npb25TZXQnLFxufVxuXG4vKipcbiAqIE1hcmsgYSBwcm9wZXJ0eSBhcyBhIHByb3BlcnR5IHRoYXQgbmVlZHMgYWRkaXRpb25hbCBzY3J1dGlueSB3aGVuIGl0IGNoYW5nZXNcbiAqXG4gKiBVc2VkIHRvIG1hcmsgc2Vuc2l0aXZlIHByb3BlcnRpZXMgdGhhdCBoYXZlIHNlY3VyaXR5LXJlbGF0ZWQgaW1wbGljYXRpb25zLlxuICovXG5leHBvcnQgZW51bSBQcm9wZXJ0eVNjcnV0aW55VHlwZSB7XG4gIC8qKlxuICAgKiBObyBhZGRpdGlvbmFsIHNjcnV0aW55XG4gICAqL1xuICBOb25lID0gJ05vbmUnLFxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGFuIElBTSBwb2xpY3kgZGlyZWN0bHkgb24gYSByZXNvdXJjZVxuICAgKi9cbiAgSW5saW5lUmVzb3VyY2VQb2xpY3kgPSAnSW5saW5lUmVzb3VyY2VQb2xpY3knLFxuXG4gIC8qKlxuICAgKiBFaXRoZXIgYW4gQXNzdW1lUm9sZVBvbGljeURvY3VtZW50IG9yIGEgZGljdGlvbmFyeSBvZiBwb2xpY3kgZG9jdW1lbnRzXG4gICAqL1xuICBJbmxpbmVJZGVudGl0eVBvbGljaWVzID0gJ0lubGluZUlkZW50aXR5UG9saWNpZXMnLFxuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbWFuYWdlZCBwb2xpY2llcyAob24gYW4gaWRlbnRpdHkgcmVzb3VyY2UpXG4gICAqL1xuICBNYW5hZ2VkUG9saWNpZXMgPSAnTWFuYWdlZFBvbGljaWVzJyxcblxuICAvKipcbiAgICogQSBzZXQgb2YgaW5ncmVzcyBydWxlcyAob24gYSBzZWN1cml0eSBncm91cClcbiAgICovXG4gIEluZ3Jlc3NSdWxlcyA9ICdJbmdyZXNzUnVsZXMnLFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBlZ3Jlc3MgcnVsZXMgKG9uIGEgc2VjdXJpdHkgZ3JvdXApXG4gICAqL1xuICBFZ3Jlc3NSdWxlcyA9ICdFZ3Jlc3NSdWxlcycsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJlbGF0aW9uc2hpcCByZWZlcmVuY2UgdG8gYW5vdGhlciBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF0aW9uc2hpcFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSB0aGlzIHByb3BlcnR5IHJlZmVyZW5jZXNcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgbmFtZSB3aXRoaW4gdGhlIHJlZmVyZW5jZWQgcmVzb3VyY2UgKGUuZy4sIFwiSWRcIilcbiAgICovXG4gIHJlYWRvbmx5IHByb3BlcnR5TmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkZWxpdmVyeSBkZXN0aW5hdGlvbiB0aGF0IGEgQ2xvdWRmb3JtYXRpb24gcmVzb3VyY2UgY2FuIHNlbmQgbG9ncyB0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlbGl2ZXJ5RGVzdGluYXRpb24ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc2VydmljZSB0aGF0IGlzIGluZ2VzdGluZyB0aGUgbG9ncywgY2FuIGJlIFMzIHwgRkggfCBDV0wgfCBYUkFZXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvblR5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGZvcm1hdCBvZiBsb2dzIHNlbnQgdG8gdGhpcyBkZWxpdmVyeSBkZXN0aW5hdGlvbiwgY2FuIGJlIGpzb24gfCBwYXJxdWV0IHwgdzNjIHwgcGxhaW4gfCByYXcgfCB1bmRlZmluZWRcbiAgICogV2hhdCBmb3JtYXRzIGFyZSBhdmFsaWJsZSB2YXJ5IGJhc2VkIG9uIGRlc3RpbmF0aW9uVHlwZVxuICAgKiBTMyBkZXN0aW5hdGlvbiB0eXBlcyBjYW4gYWNjZXB0IGpzb24sIHBsYWluLCB3M2MsIG9yIHBhcnF1ZXRcbiAgICogQ2xvdWR3YXRjaCBkZXN0aW5hdGlvbiB0eXBlcyBjYW4gYWNjZXB0IHBsYWluIG9yIGpzb25cbiAgICogRmlyZWhvc2UgZGVzdGluYXRpb24gdHlwZXMgY2FuIGFjY2VwdCBqc29uLCByYXcsIG9yIHBhcnF1ZXRcbiAgICogWFJheSBkZXN0aW5hdGlvbiB0eXBlcyBkbyBub3QgdXNlIG91dHB1dCBmb3JtYXRzXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRGb3JtYXRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHR5cGUgb2YgbG9nIHRoYXQgYSBDbG91ZGZvcm1hdGlvbiBSZXNvdXJjZSBjYW4gcHJvZHVjZSBhbmQgd2hhdCBkZXN0aW5hdGlvbnMgY2FuIGNvbnN1bWUgdGhlbVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlbmRlZExvZ3Mge1xuICAvKipcbiAgICogV2hhdCB2ZXJzaW9uIG9mIHBlcm1pc3Npb25zIHRoZSBkZXN0aW5hdGlvbiBzdXBwb3J0cyBWMSB8IFYyXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uc1ZlcnNpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFR5cGUgb2YgbG9nIGEgQ2xvdWRmb3JtYXRpb24gcmVzb3VyY2UgY2FuIHByb2R1Y2VcbiAgICovXG4gIHJlYWRvbmx5IGxvZ1R5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIExpc3Qgb2YgdGhlIGRlc3RpbmF0aW9ucyB0aGUgY2FuIGNvbnN1bWUgdGhvc2UgbG9nc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25zOiBEZWxpdmVyeURlc3RpbmF0aW9uW107XG4gIC8qKlxuICAgKiBSZWNvcmQgZmllbGRzIHRoYXQgYXJlIG1hbmRhdG9yeSB0byBiZSBkZWxpdmVyZWRcbiAgICovXG4gIG1hbmRhdG9yeUZpZWxkcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUmVjb3JkIGZpZWxkcyB0aGF0IGNhbiBiZSBvcHRpb25hbGx5IGRlbGl2ZXJlZFxuICAgKi9cbiAgb3B0aW9uYWxGaWVsZHM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFJpY2hQcm9wZXJ0eVR5cGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFByb3BlcnR5VHlwZSkge31cblxuICBwdWJsaWMgZXF1YWxzKHJoczogUHJvcGVydHlUeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUudHlwZSkge1xuICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUtdGltZSc6XG4gICAgICBjYXNlICdqc29uJzpcbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICByZXR1cm4gcmhzLnR5cGUgPT09IHRoaXMudHlwZS50eXBlO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgcmV0dXJuIHJocy50eXBlID09PSB0aGlzLnR5cGUudHlwZSAmJiBuZXcgUmljaFByb3BlcnR5VHlwZSh0aGlzLnR5cGUuZWxlbWVudCkuZXF1YWxzKHJocy5lbGVtZW50KTtcbiAgICAgIGNhc2UgJ3JlZic6XG4gICAgICAgIHJldHVybiByaHMudHlwZSA9PT0gJ3JlZicgJiYgdGhpcy50eXBlLnJlZmVyZW5jZS4kcmVmID09PSByaHMucmVmZXJlbmNlLiRyZWY7XG4gICAgICBjYXNlICd1bmlvbic6XG4gICAgICAgIGNvbnN0IGxoc0tleSA9IHRoaXMuc29ydEtleSgpO1xuICAgICAgICBjb25zdCByaHNLZXkgPSBuZXcgUmljaFByb3BlcnR5VHlwZShyaHMpLnNvcnRLZXkoKTtcbiAgICAgICAgcmV0dXJuIGxoc0tleS5sZW5ndGggPT09IHJoc0tleS5sZW5ndGggJiYgbGhzS2V5LmV2ZXJ5KChsLCBpKSA9PiBsID09PSByaHNLZXlbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjdXJyZW50IHR5cGUgaXMgSmF2YVNjcmlwdC1lcXVhbCB0byB0aGUgUkhTIHR5cGVcbiAgICpcbiAgICogU2FtZSBhcyBub3JtYWwgZXF1YWxpdHksIGJ1dCBjb25zaWRlciBgaW50ZWdlcmAgYW5kIGBudW1iZXJgIHRoZSBzYW1lIHR5cGVzLlxuICAgKi9cbiAgcHVibGljIGphdmFzY3JpcHRFcXVhbHMocmhzOiBQcm9wZXJ0eVR5cGUpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZS50eXBlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgIC8vIFdpZGVuaW5nXG4gICAgICAgIHJldHVybiByaHMudHlwZSA9PT0gJ2ludGVnZXInIHx8IHJocy50eXBlID09PSAnbnVtYmVyJztcblxuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgcmV0dXJuIHJocy50eXBlID09PSB0aGlzLnR5cGUudHlwZSAmJiBuZXcgUmljaFByb3BlcnR5VHlwZSh0aGlzLnR5cGUuZWxlbWVudCkuamF2YXNjcmlwdEVxdWFscyhyaHMuZWxlbWVudCk7XG5cbiAgICAgIGNhc2UgJ3VuaW9uJzpcbiAgICAgICAgaWYgKHJocy50eXBlICE9PSAndW5pb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEV2ZXJ5IHR5cGUgaW4gdGhpcyB1bmlvbiBuZWVkcyB0byBiZSBlcXVhbCBvbmUgdHlwZSBpbiBSSFNcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS50eXBlcy5ldmVyeSgodDEpID0+IHJocy50eXBlcy5zb21lKCh0MikgPT4gbmV3IFJpY2hQcm9wZXJ0eVR5cGUodDEpLmphdmFzY3JpcHRFcXVhbHModDIpKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEZvciBhbnl0aGluZyBlbHNlLCBuZWVkIHN0cmljdCBlcXVhbGl0eVxuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHMocmhzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY3VycmVudCB0eXBlIGlzIGFzc2lnbmFibGUgdG8gdGhlIFJIUyB0eXBlLlxuICAgKlxuICAgKiBUaGlzIGlzIG1lYW5zIGV2ZXJ5IHR5cGUgbWVtYmVyIG9mIHRoZSBMSFMgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBSSFMgdHlwZVxuICAgKi9cbiAgcHVibGljIGFzc2lnbmFibGVUbyhyaHM6IFByb3BlcnR5VHlwZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGV4dHJhY3RNZW1iZXJzID0gKHR5cGU6IFByb3BlcnR5VHlwZSk6IFByb3BlcnR5VHlwZVtdID0+ICh0eXBlLnR5cGUgPT0gJ3VuaW9uJyA/IHR5cGUudHlwZXMgOiBbdHlwZV0pO1xuICAgIGNvbnN0IGFzUmljaFR5cGUgPSAodHlwZTogUHJvcGVydHlUeXBlKTogUmljaFByb3BlcnR5VHlwZSA9PiBuZXcgUmljaFByb3BlcnR5VHlwZSh0eXBlKTtcblxuICAgIGNvbnN0IHJoc01lbWJlcnMgPSBleHRyYWN0TWVtYmVycyhyaHMpO1xuICAgIGZvciAoY29uc3QgbGhzTWVtYmVyIG9mIGV4dHJhY3RNZW1iZXJzKHRoaXMudHlwZSkubWFwKGFzUmljaFR5cGUpKSB7XG4gICAgICBpZiAoIXJoc01lbWJlcnMuc29tZSgodHlwZSkgPT4gbGhzTWVtYmVyLmVxdWFscyh0eXBlKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHZlcnNpb24gb2YgdGhpcyB0eXBlLCBidXQgd2l0aCBhbGwgdHlwZSB1bmlvbnMgaW4gYSByZWd1bGFyaXplZCBvcmRlclxuICAgKi9cbiAgcHVibGljIG5vcm1hbGl6ZShkYjogU3BlY0RhdGFiYXNlKTogUmljaFByb3BlcnR5VHlwZSB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUudHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgcmV0dXJuIG5ldyBSaWNoUHJvcGVydHlUeXBlKHtcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUudHlwZSxcbiAgICAgICAgICBlbGVtZW50OiBuZXcgUmljaFByb3BlcnR5VHlwZSh0aGlzLnR5cGUuZWxlbWVudCkubm9ybWFsaXplKGRiKS50eXBlLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgJ3VuaW9uJzpcbiAgICAgICAgY29uc3QgdHlwZXMgPSB0aGlzLnR5cGUudHlwZXNcbiAgICAgICAgICAubWFwKCh0KSA9PiBuZXcgUmljaFByb3BlcnR5VHlwZSh0KS5ub3JtYWxpemUoZGIpKVxuICAgICAgICAgIC5tYXAoKHQpID0+IFt0LCB0LnNvcnRLZXkoZGIpXSBhcyBjb25zdCk7XG4gICAgICAgIHR5cGVzLnNvcnQoc29ydEtleUNvbXBhcmF0b3IoKFtfLCBzb3J0S2V5XSkgPT4gc29ydEtleSkpO1xuICAgICAgICByZXR1cm4gbmV3IFJpY2hQcm9wZXJ0eVR5cGUoe1xuICAgICAgICAgIHR5cGU6ICd1bmlvbicsXG4gICAgICAgICAgdHlwZXM6IHR5cGVzLm1hcCgoW3QsIF9dKSA9PiB0LnR5cGUpLFxuICAgICAgICB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdHJpbmdpZnkoZGI6IFNwZWNEYXRhYmFzZSwgd2l0aElkID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUudHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS5hbGxvd2VkVmFsdWVzID8gYHN0cmluZzwke3RoaXMudHlwZS5hbGxvd2VkVmFsdWVzLmpvaW4oJ3wnKX0+YCA6ICdzdHJpbmcnO1xuICAgICAgY2FzZSAnaW50ZWdlcic6XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUuYWxsb3dlZFZhbHVlcyA/IGBpbnRlZ2VyPCR7dGhpcy50eXBlLmFsbG93ZWRWYWx1ZXMuam9pbignfCcpfT5gIDogJ2ludGVnZXInO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlLXRpbWUnOlxuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBjYXNlICdudWxsJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICByZXR1cm4gdGhpcy50eXBlLnR5cGU7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgIHJldHVybiBgQXJyYXk8JHtuZXcgUmljaFByb3BlcnR5VHlwZSh0aGlzLnR5cGUuZWxlbWVudCkuc3RyaW5naWZ5KGRiLCB3aXRoSWQpfT5gO1xuICAgICAgY2FzZSAnbWFwJzpcbiAgICAgICAgcmV0dXJuIGBNYXA8c3RyaW5nLCAke25ldyBSaWNoUHJvcGVydHlUeXBlKHRoaXMudHlwZS5lbGVtZW50KS5zdHJpbmdpZnkoZGIsIHdpdGhJZCl9PmA7XG4gICAgICBjYXNlICdyZWYnOlxuICAgICAgICBjb25zdCB0eXBlID0gZGIuZ2V0KCd0eXBlRGVmaW5pdGlvbicsIHRoaXMudHlwZS5yZWZlcmVuY2UpO1xuICAgICAgICByZXR1cm4gd2l0aElkID8gYCR7dHlwZS5uYW1lfSgke3RoaXMudHlwZS5yZWZlcmVuY2UuJHJlZn0pYCA6IHR5cGUubmFtZTtcbiAgICAgIGNhc2UgJ3VuaW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZS50eXBlcy5tYXAoKHQpID0+IG5ldyBSaWNoUHJvcGVydHlUeXBlKHQpLnN0cmluZ2lmeShkYiwgd2l0aElkKSkuam9pbignIHwgJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHNvcnRhYmxlIGtleSBiYXNlZCBvbiB0aGlzIHR5cGVcbiAgICpcbiAgICogSWYgYSBkYXRhYmFzZSBpcyBnaXZlbiwgdHlwZSBkZWZpbml0aW9ucyB3aWxsIGJlIHNvcnRlZCBiYXNlZCBvbiB0eXBlIG5hbWUsXG4gICAqIG90aGVyd2lzZSBvbiBpZGVudGlmaWVyXG4gICAqL1xuICBwdWJsaWMgc29ydEtleShkYj86IFNwZWNEYXRhYmFzZSk6IHN0cmluZ1tdIHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZS50eXBlKSB7XG4gICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZS10aW1lJzpcbiAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3RhZyc6XG4gICAgICAgIHJldHVybiBbJzAnLCB0aGlzLnR5cGUudHlwZV07XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdtYXAnOlxuICAgICAgICByZXR1cm4gWycxJywgdGhpcy50eXBlLnR5cGUsIC4uLm5ldyBSaWNoUHJvcGVydHlUeXBlKHRoaXMudHlwZS5lbGVtZW50KS5zb3J0S2V5KGRiKV07XG4gICAgICBjYXNlICdyZWYnOlxuICAgICAgICByZXR1cm4gWycyJywgdGhpcy50eXBlLnR5cGUsIGRiPy5nZXQoJ3R5cGVEZWZpbml0aW9uJywgdGhpcy50eXBlLnJlZmVyZW5jZSk/Lm5hbWUgPz8gdGhpcy50eXBlLnJlZmVyZW5jZS4kcmVmXTtcbiAgICAgIGNhc2UgJ3VuaW9uJzpcbiAgICAgICAgY29uc3QgdHlwZUtleXMgPSB0aGlzLnR5cGUudHlwZXMubWFwKCh0KSA9PiBuZXcgUmljaFByb3BlcnR5VHlwZSh0KS5zb3J0S2V5KGRiKSk7XG4gICAgICAgIHR5cGVLZXlzLnNvcnQoc29ydEtleUNvbXBhcmF0b3IoKHgpID0+IHgpKTtcbiAgICAgICAgcmV0dXJuIFsnMycsIHRoaXMudHlwZS50eXBlLCAuLi50eXBlS2V5cy5mbGF0TWFwKCh4KSA9PiB4KV07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VHlwZSA9IEdlbmVyaWNQcm9wZXJ0eVR5cGU8VHlwZURlZmluaXRpb24+O1xuZXhwb3J0IHR5cGUgRGVmaW5pdGlvblJlZmVyZW5jZSA9IEdlbmVyaWNEZWZpbml0aW9uUmVmZXJlbmNlPFR5cGVEZWZpbml0aW9uPjtcbiJdfQ==
|