@decaf-ts/decorator-validation 1.7.0 → 1.7.2
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/README.md +312 -20
- package/dist/decorator-validation.cjs +245 -94
- package/dist/decorator-validation.esm.cjs +245 -95
- package/lib/constants/validation.cjs +6 -8
- package/lib/constants/validation.d.ts +4 -6
- package/lib/esm/constants/validation.d.ts +4 -6
- package/lib/esm/constants/validation.js +6 -8
- package/lib/esm/index.d.ts +8 -1
- package/lib/esm/index.js +9 -2
- package/lib/esm/model/Model.d.ts +164 -40
- package/lib/esm/model/Model.js +165 -41
- package/lib/esm/model/construction.d.ts +4 -2
- package/lib/esm/model/construction.js +4 -2
- package/lib/esm/model/decorators.d.ts +25 -1
- package/lib/esm/model/decorators.js +29 -2
- package/lib/esm/model/types.d.ts +48 -31
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/utils/decorators.d.ts +7 -12
- package/lib/esm/utils/decorators.js +8 -13
- package/lib/esm/validation/Validators/EmailValidator.js +1 -1
- package/lib/esm/validation/Validators/PasswordValidator.js +1 -1
- package/lib/esm/validation/Validators/URLValidator.js +1 -1
- package/lib/esm/validation/Validators/decorators.d.ts +1 -1
- package/lib/esm/validation/Validators/decorators.js +2 -2
- package/lib/esm/validation/Validators/utils.d.ts +4 -0
- package/lib/esm/validation/Validators/utils.js +5 -1
- package/lib/esm/validation/decorators.d.ts +20 -26
- package/lib/esm/validation/decorators.js +21 -27
- package/lib/index.cjs +9 -2
- package/lib/index.d.ts +8 -1
- package/lib/model/Model.cjs +165 -41
- package/lib/model/Model.d.ts +164 -40
- package/lib/model/construction.cjs +4 -2
- package/lib/model/construction.d.ts +4 -2
- package/lib/model/decorators.cjs +29 -2
- package/lib/model/decorators.d.ts +25 -1
- package/lib/model/types.cjs +1 -1
- package/lib/model/types.d.ts +48 -31
- package/lib/utils/decorators.cjs +8 -13
- package/lib/utils/decorators.d.ts +7 -12
- package/lib/validation/Validators/EmailValidator.cjs +1 -1
- package/lib/validation/Validators/PasswordValidator.cjs +1 -1
- package/lib/validation/Validators/URLValidator.cjs +1 -1
- package/lib/validation/Validators/decorators.cjs +2 -2
- package/lib/validation/Validators/decorators.d.ts +1 -1
- package/lib/validation/Validators/utils.cjs +5 -1
- package/lib/validation/Validators/utils.d.ts +4 -0
- package/lib/validation/decorators.cjs +21 -27
- package/lib/validation/decorators.d.ts +20 -26
- package/package.json +1 -1
|
@@ -15,7 +15,7 @@ import { Decoration } from "../utils/Decoration";
|
|
|
15
15
|
* @return {PropertyDecorator} A decorator function that can be applied to class properties
|
|
16
16
|
*
|
|
17
17
|
* @function required
|
|
18
|
-
* @category Decorators
|
|
18
|
+
* @category Property Decorators
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```typescript
|
|
@@ -47,7 +47,7 @@ export function required(message = DEFAULT_ERROR_MESSAGES.REQUIRED) {
|
|
|
47
47
|
* @return {PropertyDecorator} A decorator function that can be applied to class properties
|
|
48
48
|
*
|
|
49
49
|
* @function min
|
|
50
|
-
* @category Decorators
|
|
50
|
+
* @category Property Decorators
|
|
51
51
|
*
|
|
52
52
|
* @example
|
|
53
53
|
* ```typescript
|
|
@@ -78,7 +78,7 @@ export function min(value, message = DEFAULT_ERROR_MESSAGES.MIN) {
|
|
|
78
78
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MAX}
|
|
79
79
|
*
|
|
80
80
|
* @function max
|
|
81
|
-
* @category Decorators
|
|
81
|
+
* @category Property Decorators
|
|
82
82
|
*/
|
|
83
83
|
export function max(value, message = DEFAULT_ERROR_MESSAGES.MAX) {
|
|
84
84
|
const key = Validation.key(ValidationKeys.MAX);
|
|
@@ -98,7 +98,7 @@ export function max(value, message = DEFAULT_ERROR_MESSAGES.MAX) {
|
|
|
98
98
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#STEP}
|
|
99
99
|
*
|
|
100
100
|
* @function step
|
|
101
|
-
* @category Decorators
|
|
101
|
+
* @category Property Decorators
|
|
102
102
|
*/
|
|
103
103
|
export function step(value, message = DEFAULT_ERROR_MESSAGES.STEP) {
|
|
104
104
|
const key = Validation.key(ValidationKeys.STEP);
|
|
@@ -118,7 +118,7 @@ export function step(value, message = DEFAULT_ERROR_MESSAGES.STEP) {
|
|
|
118
118
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MIN_LENGTH}
|
|
119
119
|
*
|
|
120
120
|
* @function minlength
|
|
121
|
-
* @category Decorators
|
|
121
|
+
* @category Property Decorators
|
|
122
122
|
*/
|
|
123
123
|
export function minlength(value, message = DEFAULT_ERROR_MESSAGES.MIN_LENGTH) {
|
|
124
124
|
const key = Validation.key(ValidationKeys.MIN_LENGTH);
|
|
@@ -138,7 +138,7 @@ export function minlength(value, message = DEFAULT_ERROR_MESSAGES.MIN_LENGTH) {
|
|
|
138
138
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#MAX_LENGTH}
|
|
139
139
|
*
|
|
140
140
|
* @function maxlength
|
|
141
|
-
* @category Decorators
|
|
141
|
+
* @category Property Decorators
|
|
142
142
|
*/
|
|
143
143
|
export function maxlength(value, message = DEFAULT_ERROR_MESSAGES.MAX_LENGTH) {
|
|
144
144
|
const key = Validation.key(ValidationKeys.MAX_LENGTH);
|
|
@@ -158,7 +158,7 @@ export function maxlength(value, message = DEFAULT_ERROR_MESSAGES.MAX_LENGTH) {
|
|
|
158
158
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#PATTERN}
|
|
159
159
|
*
|
|
160
160
|
* @function pattern
|
|
161
|
-
* @category Decorators
|
|
161
|
+
* @category Property Decorators
|
|
162
162
|
*/
|
|
163
163
|
export function pattern(value, message = DEFAULT_ERROR_MESSAGES.PATTERN) {
|
|
164
164
|
const key = Validation.key(ValidationKeys.PATTERN);
|
|
@@ -177,7 +177,7 @@ export function pattern(value, message = DEFAULT_ERROR_MESSAGES.PATTERN) {
|
|
|
177
177
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#EMAIL}
|
|
178
178
|
*
|
|
179
179
|
* @function email
|
|
180
|
-
* @category Decorators
|
|
180
|
+
* @category Property Decorators
|
|
181
181
|
*/
|
|
182
182
|
export function email(message = DEFAULT_ERROR_MESSAGES.EMAIL) {
|
|
183
183
|
const key = Validation.key(ValidationKeys.EMAIL);
|
|
@@ -196,7 +196,7 @@ export function email(message = DEFAULT_ERROR_MESSAGES.EMAIL) {
|
|
|
196
196
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#URL}
|
|
197
197
|
*
|
|
198
198
|
* @function url
|
|
199
|
-
* @category Decorators
|
|
199
|
+
* @category Property Decorators
|
|
200
200
|
*/
|
|
201
201
|
export function url(message = DEFAULT_ERROR_MESSAGES.URL) {
|
|
202
202
|
const key = Validation.key(ValidationKeys.URL);
|
|
@@ -216,7 +216,7 @@ export function url(message = DEFAULT_ERROR_MESSAGES.URL) {
|
|
|
216
216
|
* @param {string} [message] the error message. Defaults to {@link DEFAULT_ERROR_MESSAGES#TYPE}
|
|
217
217
|
*
|
|
218
218
|
* @function type
|
|
219
|
-
* @category Decorators
|
|
219
|
+
* @category Property Decorators
|
|
220
220
|
*/
|
|
221
221
|
export function type(types, message = DEFAULT_ERROR_MESSAGES.TYPE) {
|
|
222
222
|
const key = Validation.key(ValidationKeys.TYPE);
|
|
@@ -238,7 +238,7 @@ export function type(types, message = DEFAULT_ERROR_MESSAGES.TYPE) {
|
|
|
238
238
|
*
|
|
239
239
|
* @function date
|
|
240
240
|
*
|
|
241
|
-
* @category Decorators
|
|
241
|
+
* @category Property Decorators
|
|
242
242
|
*/
|
|
243
243
|
export function date(format = "dd/MM/yyyy", message = DEFAULT_ERROR_MESSAGES.DATE) {
|
|
244
244
|
const key = Validation.key(ValidationKeys.DATE);
|
|
@@ -287,7 +287,7 @@ export function date(format = "dd/MM/yyyy", message = DEFAULT_ERROR_MESSAGES.DAT
|
|
|
287
287
|
*
|
|
288
288
|
* @function password
|
|
289
289
|
*
|
|
290
|
-
* @category Decorators
|
|
290
|
+
* @category Property Decorators
|
|
291
291
|
*/
|
|
292
292
|
export function password(pattern = DEFAULT_PATTERNS.PASSWORD.CHAR8_ONE_OF_EACH, message = DEFAULT_ERROR_MESSAGES.PASSWORD) {
|
|
293
293
|
const key = Validation.key(ValidationKeys.PASSWORD);
|
|
@@ -309,7 +309,7 @@ export function password(pattern = DEFAULT_PATTERNS.PASSWORD.CHAR8_ONE_OF_EACH,
|
|
|
309
309
|
*
|
|
310
310
|
* @function list
|
|
311
311
|
*
|
|
312
|
-
* @category Decorators
|
|
312
|
+
* @category Property Decorators
|
|
313
313
|
*/
|
|
314
314
|
export function list(clazz, collection = "Array", message = DEFAULT_ERROR_MESSAGES.LIST) {
|
|
315
315
|
const key = Validation.key(ValidationKeys.LIST);
|
|
@@ -330,7 +330,7 @@ export function list(clazz, collection = "Array", message = DEFAULT_ERROR_MESSAG
|
|
|
330
330
|
*
|
|
331
331
|
* @function set
|
|
332
332
|
*
|
|
333
|
-
* @category Decorators
|
|
333
|
+
* @category Property Decorators
|
|
334
334
|
*/
|
|
335
335
|
export function set(clazz, message = DEFAULT_ERROR_MESSAGES.LIST) {
|
|
336
336
|
return list(clazz, "Set", message);
|
|
@@ -345,8 +345,7 @@ export function set(clazz, message = DEFAULT_ERROR_MESSAGES.LIST) {
|
|
|
345
345
|
* @returns {PropertyDecorator} A property decorator used to register the equality validation metadata.
|
|
346
346
|
*
|
|
347
347
|
* @function eq
|
|
348
|
-
* @
|
|
349
|
-
* @category Decorators
|
|
348
|
+
* @category Property Decorators
|
|
350
349
|
*/
|
|
351
350
|
export function eq(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.EQUALS) {
|
|
352
351
|
const options = {
|
|
@@ -365,8 +364,7 @@ export function eq(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.EQUALS) {
|
|
|
365
364
|
* @returns {PropertyDecorator} A property decorator used to register the difference validation metadata.
|
|
366
365
|
*
|
|
367
366
|
* @function diff
|
|
368
|
-
* @
|
|
369
|
-
* @category Decorators
|
|
367
|
+
* @category Property Decorators
|
|
370
368
|
*/
|
|
371
369
|
export function diff(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.DIFF) {
|
|
372
370
|
const options = {
|
|
@@ -385,8 +383,7 @@ export function diff(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.DIFF) {
|
|
|
385
383
|
* @returns {PropertyDecorator} A property decorator used to register the less than validation metadata.
|
|
386
384
|
*
|
|
387
385
|
* @function lt
|
|
388
|
-
* @
|
|
389
|
-
* @category Decorators
|
|
386
|
+
* @category Property Decorators
|
|
390
387
|
*/
|
|
391
388
|
export function lt(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.LESS_THAN) {
|
|
392
389
|
const options = {
|
|
@@ -405,8 +402,7 @@ export function lt(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.LESS_THAN
|
|
|
405
402
|
* @returns {PropertyDecorator} A property decorator used to register the less than or equal validation metadata.
|
|
406
403
|
*
|
|
407
404
|
* @function lte
|
|
408
|
-
* @
|
|
409
|
-
* @category Decorators
|
|
405
|
+
* @category Property Decorators
|
|
410
406
|
*/
|
|
411
407
|
export function lte(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.LESS_THAN_OR_EQUAL) {
|
|
412
408
|
const options = {
|
|
@@ -425,8 +421,7 @@ export function lte(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.LESS_THA
|
|
|
425
421
|
* @returns {PropertyDecorator} A property decorator used to register the greater than validation metadata.
|
|
426
422
|
*
|
|
427
423
|
* @function gt
|
|
428
|
-
* @
|
|
429
|
-
* @category Decorators
|
|
424
|
+
* @category Property Decorators
|
|
430
425
|
*/
|
|
431
426
|
export function gt(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.GREATER_THAN) {
|
|
432
427
|
const options = {
|
|
@@ -445,8 +440,7 @@ export function gt(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.GREATER_T
|
|
|
445
440
|
* @returns {PropertyDecorator} A property decorator used to register the greater than or equal validation metadata.
|
|
446
441
|
*
|
|
447
442
|
* @function gte
|
|
448
|
-
* @
|
|
449
|
-
* @category Decorators
|
|
443
|
+
* @category Property Decorators
|
|
450
444
|
*/
|
|
451
445
|
export function gte(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.GREATER_THAN_OR_EQUAL) {
|
|
452
446
|
const options = {
|
|
@@ -455,4 +449,4 @@ export function gte(propertyToCompare, message = DEFAULT_ERROR_MESSAGES.GREATER_
|
|
|
455
449
|
};
|
|
456
450
|
return propMetadata(Validation.key(ValidationKeys.GREATER_THAN_OR_EQUAL), options);
|
|
457
451
|
}
|
|
458
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQVUxQixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsVUFBa0Isc0JBQXNCLENBQUMsUUFBUTtJQUN4RSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQ3ZCLE1BQU0sQ0FDTCxZQUFZLENBQXFCLEdBQUcsRUFBRTtRQUNwQyxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQ0g7U0FDQSxLQUFLLEVBQUUsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUNqQixLQUE2QixFQUM3QixVQUFrQixzQkFBc0IsQ0FBQyxHQUFHO0lBRTVDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sVUFBVSxD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RUFBRSxPQUFPO1FBQ2hCLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsaUJBQWlCO0tBQzFELENBQUM7SUFFRixPQUFPLFlBQVksQ0FDakIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFDcEQsT0FBNkIsQ0FDOUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQge1xuICBEaWZmVmFsaWRhdG9yT3B0aW9ucyxcbiAgRXF1YWxzVmFsaWRhdG9yT3B0aW9ucyxcbiAgR3JlYXRlclRoYW5PckVxdWFsVmFsaWRhdG9yT3B0aW9ucyxcbiAgR3JlYXRlclRoYW5WYWxpZGF0b3JPcHRpb25zLFxuICBMZXNzVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zLFxuICBMZXNzVGhhblZhbGlkYXRvck9wdGlvbnMsXG4gIFZhbGlkYXRpb25NZXRhZGF0YSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfRVJST1JfTUVTU0FHRVMsXG4gIERFRkFVTFRfUEFUVEVSTlMsXG4gIFZhbGlkYXRpb25LZXlzLFxufSBmcm9tIFwiLi9WYWxpZGF0b3JzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgTW9kZWxDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9tb2RlbC90eXBlc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVzXCI7XG5pbXBvcnQgeyBwcm9wTWV0YWRhdGEgfSBmcm9tIFwiLi4vdXRpbHMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gXCIuL1ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IERlY29yYXRpb24gfSBmcm9tIFwiLi4vdXRpbHMvRGVjb3JhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcm9wZXJ0eSBkZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGZpZWxkIGFzIHJlcXVpcmVkXG4gKiBAc3VtbWFyeSBNYXJrcyB0aGUgcHJvcGVydHkgYXMgcmVxdWlyZWQsIGNhdXNpbmcgdmFsaWRhdGlvbiB0byBmYWlsIGlmIHRoZSBwcm9wZXJ0eSBpcyB1bmRlZmluZWQsIG51bGwsIG9yIGVtcHR5LlxuICogVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1JFUVVJUkVEfS5cbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGNvbW1vbmx5IHVzZWQgYXMgdGhlIGZpcnN0IHZhbGlkYXRpb24gc3RlcCBmb3IgaW1wb3J0YW50IGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHMuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1JFUVVJUkVEfVxuICogQHJldHVybiB7UHJvcGVydHlEZWNvcmF0b3J9IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gY2xhc3MgcHJvcGVydGllc1xuICpcbiAqIEBmdW5jdGlvbiByZXF1aXJlZFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gKlxuICogICBAcmVxdWlyZWQoXCJFbWFpbCBhZGRyZXNzIGlzIG1hbmRhdG9yeVwiKVxuICogICBlbWFpbDogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlJFUVVJUkVEKSB7XG4gIGNvbnN0IGtleSA9IFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLlJFUVVJUkVEKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgZW5mb3JjZXMgYSBtaW5pbXVtIHZhbHVlIGNvbnN0cmFpbnRcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBtaW5pbXVtIHZhbHVlIGZvciB0aGUgcHJvcGVydHksIGNhdXNpbmcgdmFsaWRhdGlvbiB0byBmYWlsIGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBtaW5pbXVtLlxuICogVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI01JTn0uXG4gKiBUaGlzIGRlY29yYXRvciB3b3JrcyB3aXRoIG51bWVyaWMgdmFsdWVzIGFuZCBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlciB8IERhdGUgfCBzdHJpbmd9IHZhbHVlIC0gVGhlIG1pbmltdW0gdmFsdWUgYWxsb3dlZC4gRm9yIGRhdGVzLCBjYW4gYmUgYSBEYXRlIG9iamVjdCBvciBhIHN0cmluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHMuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01JTn1cbiAqIEByZXR1cm4ge1Byb3BlcnR5RGVjb3JhdG9yfSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGNsYXNzIHByb3BlcnRpZXNcbiAqXG4gKiBAZnVuY3Rpb24gbWluXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBQcm9kdWN0IHtcbiAqICAgQG1pbigwKVxuICogICBwcmljZTogbnVtYmVyO1xuICpcbiAqICAgQG1pbihuZXcgRGF0ZSgyMDIzLCAwLCAxKSwgXCJEYXRlIG11c3QgYmUgYWZ0ZXIgSmFudWFyeSAxLCAyMDIzXCIpXG4gKiAgIHJlbGVhc2VEYXRlOiBEYXRlO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW4oXG4gIHZhbHVlOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1JTlxuKSB7XG4gIGNvbnN0IGtleSA9IFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLk1JTik7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBbVmFsaWRhdGlvbktleXMuTUlOXTogdmFsdWUsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbTnVtYmVyLm5hbWUsIERhdGUubmFtZV0sXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI01BWH1cbiAqXG4gKiBAcGFyYW0ge251bWJlciB8IERhdGV9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNNQVh9XG4gKlxuICogQGZ1bmN0aW9uIG1heFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heChcbiAgdmFsdWU6IG51bWJlciB8IERhdGUgfCBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTUFYXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuTUFYKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5NQVhdOiB2YWx1ZSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgdHlwZXM6IFtOdW1iZXIubmFtZSwgRGF0ZS5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBzdGVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjU1RFUH1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1NURVB9XG4gKlxuICogQGZ1bmN0aW9uIHN0ZXBcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGVwKFxuICB2YWx1ZTogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlNURVBcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5TVEVQKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5TVEVQXTogdmFsdWUsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbTnVtYmVyLm5hbWVdLFxuICAgICAgfSlcbiAgICApXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIG1pbmltdW0gbGVuZ3RoIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjTUlOX0xFTkdUSH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01JTl9MRU5HVEh9XG4gKlxuICogQGZ1bmN0aW9uIG1pbmxlbmd0aFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbmxlbmd0aChcbiAgdmFsdWU6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5NSU5fTEVOR1RIXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSCk7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBbVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSF06IHZhbHVlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lLCBBcnJheS5uYW1lLCBTZXQubmFtZV0sXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBwcm9wZXJ0eVxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvcnMgdG8gdmFsaWRhdGUgYSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCB1c2Uga2V5IHtAbGluayBWYWxpZGF0aW9uS2V5cyNNQVhfTEVOR1RIfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTUFYX0xFTkdUSH1cbiAqXG4gKiBAZnVuY3Rpb24gbWF4bGVuZ3RoXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4bGVuZ3RoKFxuICB2YWx1ZTogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1BWF9MRU5HVEhcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIXTogdmFsdWUsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWUsIEFycmF5Lm5hbWUsIFNldC5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBSZWdFeHAgcGF0dGVybiB0aGUgcHJvcGVydHkgbXVzdCByZXNwZWN0XG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1BBVFRFUk59XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNQQVRURVJOfVxuICpcbiAqIEBmdW5jdGlvbiBwYXR0ZXJuXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0dGVybihcbiAgdmFsdWU6IFJlZ0V4cCB8IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5QQVRURVJOXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuUEFUVEVSTik7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBbVmFsaWRhdGlvbktleXMuUEFUVEVSTl06XG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHByb3BlcnR5IGFzIGFuIGVtYWlsXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI0VNQUlMfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0VNQUlMfVxuICpcbiAqIEBmdW5jdGlvbiBlbWFpbFxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuRU1BSUwpIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuRU1BSUwpO1xuICByZXR1cm4gRGVjb3JhdGlvbi5mb3Ioa2V5KVxuICAgIC5kZWZpbmUoXG4gICAgICBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihrZXksIHtcbiAgICAgICAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dOiBERUZBVUxUX1BBVFRFUk5TLkVNQUlMLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHByb3BlcnR5IGFzIGFuIFVSTFxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvcnMgdG8gdmFsaWRhdGUgYSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCB1c2Uga2V5IHtAbGluayBWYWxpZGF0aW9uS2V5cyNVUkx9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjVVJMfVxuICpcbiAqIEBmdW5jdGlvbiB1cmxcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmwobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5VUkwpIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuVVJMKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXTogREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWVdLFxuICAgICAgfSlcbiAgICApXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRW5mb3JjZXMgdHlwZSB2ZXJpZmljYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjVFlQRX1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSB0eXBlcyBhY2NlcHRlZCB0eXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjVFlQRX1cbiAqXG4gKiBAZnVuY3Rpb24gdHlwZVxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGUoXG4gIHR5cGVzOiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5UWVBFXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuVFlQRSk7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBjdXN0b21UeXBlczogdHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEYXRlIEhhbmRsZXIgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI0RBVEV9XG4gKlxuICogV2lsbCBlbmZvcmNlIHNlcmlhbGl6YXRpb24gYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBmb3JtYXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IGFjY2VwdGVkIGZvcm1hdCBhY2NvcmRpbmcgdG8ge0BsaW5rIGZvcm1hdERhdGV9XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNEQVRFfVxuICpcbiAqIEBmdW5jdGlvbiBkYXRlXG4gKlxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGUoXG4gIGZvcm1hdDogc3RyaW5nID0gXCJkZC9NTS95eXl5XCIsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuREFURVxuKSB7XG4gIGNvbnN0IGtleSA9IFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkRBVEUpO1xuICBjb25zdCBkYXRlRGVjID0gKHRhcmdldDogUmVjb3JkPHN0cmluZywgYW55PiwgcHJvcGVydHlLZXk/OiBhbnkpOiBhbnkgPT4ge1xuICAgIHByb3BNZXRhZGF0YShrZXksIHtcbiAgICAgIFtWYWxpZGF0aW9uS2V5cy5GT1JNQVRdOiBmb3JtYXQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdHlwZXM6IFtEYXRlLm5hbWVdLFxuICAgIH0pKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuXG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgc2V0KHRoaXM6IGFueSwgbmV3VmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgcHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5jb25maWd1cmFibGUpXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4gdmFsdWVzLmdldCh0aGlzKSxcbiAgICAgICAgICAgIHNldDogKG5ld1ZhbHVlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWw6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcGFyc2VEYXRlKGZvcm1hdCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQodGhpcywgdmFsKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihzZihcIkZhaWxlZCB0byBwYXJzZSBkYXRlOiB7MH1cIiwgZS5tZXNzYWdlIHx8IGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpc1twcm9wZXJ0eUtleV0gPSBuZXdWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaGVyZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpLmRlZmluZShkYXRlRGVjKS5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFBhc3N3b3JkIEhhbmRsZXIgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1BBU1NXT1JEfVxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSBbcGF0dGVybl0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfUEFUVEVSTlMjQ0hBUjhfT05FX09GX0VBQ0h9XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNQQVNTV09SRH1cbiAqXG4gKiBAZnVuY3Rpb24gcGFzc3dvcmRcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFzc3dvcmQoXG4gIHBhdHRlcm46IFJlZ0V4cCA9IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuUEFTU1dPUkRcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5QQVNTV09SRCk7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YShrZXksIHtcbiAgICAgICAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dOiBwYXR0ZXJuLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IExpc3QgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gQWxzbyBzZXRzIHRoZSB7QGxpbmsgdHlwZX0gdG8gdGhlIHByb3ZpZGVkIGNvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge01vZGVsQ29uc3RydWN0b3J9IGNsYXp6XG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbGxlY3Rpb25dIFRoZSBjb2xsZWN0aW9uIGJlaW5nIHVzZWQuIGRlZmF1bHRzIHRvIEFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0xJU1R9XG4gKlxuICogQGZ1bmN0aW9uIGxpc3RcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdChcbiAgY2xheno6IE1vZGVsQ29uc3RydWN0b3I8YW55PiB8IE1vZGVsQ29uc3RydWN0b3I8YW55PltdLFxuICBjb2xsZWN0aW9uOiBcIkFycmF5XCIgfCBcIlNldFwiID0gXCJBcnJheVwiLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkxJU1Rcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5MSVNUKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhKGtleSwge1xuICAgICAgICBjbGF6ejogQXJyYXkuaXNBcnJheShjbGF6eikgPyBjbGF6ei5tYXAoKGMpID0+IGMubmFtZSkgOiBbY2xhenoubmFtZV0sXG4gICAgICAgIHR5cGU6IGNvbGxlY3Rpb24sXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBTZXQgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gV3JhcHBlciBmb3Ige0BsaW5rIGxpc3R9IHdpdGggdGhlICdTZXQnIENvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge01vZGVsQ29uc3RydWN0b3J9IGNsYXp6XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0xJU1R9XG4gKlxuICogQGZ1bmN0aW9uIHNldFxuICpcbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXQoXG4gIGNsYXp6OiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTElTVFxuKSB7XG4gIHJldHVybiBsaXN0KGNsYXp6LCBcIlNldFwiLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCB0byBhbm90aGVyIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXMuRVFVQUxTfSB2YWxpZGF0b3IgdG8gZW5zdXJlIHRoZSBkZWNvcmF0ZWQgdmFsdWUgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGVxdWFsaXR5IGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5FUVVBTFNdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBlcXVhbGl0eSB2YWxpZGF0aW9uIG1ldGFkYXRhLlxuICpcbiAqIEBmdW5jdGlvbiBlcVxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcShcbiAgcHJvcGVydHlUb0NvbXBhcmU6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5FUVVBTFNcbikge1xuICBjb25zdCBvcHRpb25zOiBFcXVhbHNWYWxpZGF0b3JPcHRpb25zID0ge1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkVRVUFMU106IHByb3BlcnR5VG9Db21wYXJlLFxuICB9O1xuXG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihcbiAgICBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5FUVVBTFMpLFxuICAgIG9wdGlvbnMgYXMgVmFsaWRhdGlvbk1ldGFkYXRhXG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVjbGFyZXMgdGhhdCB0aGUgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgYmUgZGlmZmVyZW50IGZyb20gYW5vdGhlciBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzLkRJRkZ9IHZhbGlkYXRvciB0byBlbnN1cmUgdGhlIGRlY29yYXRlZCB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGRpZmZlcmVuY2UgYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT1ERUZBVUxUX0VSUk9SX01FU1NBR0VTLkRJRkZdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBkaWZmZXJlbmNlIHZhbGlkYXRpb24gbWV0YWRhdGEuXG4gKlxuICogQGZ1bmN0aW9uIGRpZmZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZihcbiAgcHJvcGVydHlUb0NvbXBhcmU6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5ESUZGXG4pIHtcbiAgY29uc3Qgb3B0aW9uczogRGlmZlZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuRElGRl06IHByb3BlcnR5VG9Db21wYXJlLFxuICB9O1xuXG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihcbiAgICBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5ESUZGKSxcbiAgICBvcHRpb25zIGFzIFZhbGlkYXRpb25NZXRhZGF0YVxuICApO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlY2xhcmVzIHRoYXQgdGhlIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IGJlIGxlc3MgdGhhbiBhbm90aGVyIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXMuTEVTU19USEFOfSB2YWxpZGF0b3IgdG8gZW5zdXJlIHRoZSBkZWNvcmF0ZWQgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5VG9Db21wYXJlIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT1ERUZBVUxUX0VSUk9SX01FU1NBR0VTLkxFU1NfVEhBTl0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byByZXR1cm4gaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAqXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZWNvcmF0b3J9IEEgcHJvcGVydHkgZGVjb3JhdG9yIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGxlc3MgdGhhbiB2YWxpZGF0aW9uIG1ldGFkYXRhLlxuICpcbiAqIEBmdW5jdGlvbiBsdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5EZWNvcmF0b3JzLlZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsdChcbiAgcHJvcGVydHlUb0NvbXBhcmU6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MRVNTX1RIQU5cbikge1xuICBjb25zdCBvcHRpb25zOiBMZXNzVGhhblZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTiksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gYW5vdGhlciBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTH0gdmFsaWRhdG9yIHRvIGVuc3VyZSB0aGUgZGVjb3JhdGVkIHZhbHVlIGlzIGVxdWFsIG9yIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MRVNTX1RIQU5fT1JfRVFVQUxdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdmFsaWRhdGlvbiBtZXRhZGF0YS5cbiAqXG4gKiBAZnVuY3Rpb24gbHRlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkRlY29yYXRvcnMuVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGx0ZShcbiAgcHJvcGVydHlUb0NvbXBhcmU6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MRVNTX1RIQU5fT1JfRVFVQUxcbikge1xuICBjb25zdCBvcHRpb25zOiBMZXNzVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zID0ge1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTF06IHByb3BlcnR5VG9Db21wYXJlLFxuICB9O1xuXG4gIHJldHVybiBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihcbiAgICBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5MRVNTX1RIQU5fT1JfRVFVQUwpLFxuICAgIG9wdGlvbnMgYXMgVmFsaWRhdGlvbk1ldGFkYXRhXG4gICk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVjbGFyZXMgdGhhdCB0aGUgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgYmUgZ3JlYXRlciB0aGFuIGFub3RoZXIgc3BlY2lmaWVkIHByb3BlcnR5LlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgdGhlIHtAbGluayBWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU59IHZhbGlkYXRvciB0byBlbnN1cmUgdGhlIGRlY29yYXRlZCB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlUb0NvbXBhcmUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gY29tcGFyZSBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlPURFRkFVTFRfRVJST1JfTUVTU0FHRVMuR1JFQVRFUl9USEFOXSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIHRvIHJldHVybiBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICpcbiAqIEByZXR1cm5zIHtQcm9wZXJ0eURlY29yYXRvcn0gQSBwcm9wZXJ0eSBkZWNvcmF0b3IgdXNlZCB0byByZWdpc3RlciB0aGUgZ3JlYXRlciB0aGFuIHZhbGlkYXRpb24gbWV0YWRhdGEuXG4gKlxuICogQGZ1bmN0aW9uIGd0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLkRlY29yYXRvcnMuVmFsaWRhdGlvblxuICogQGNhdGVnb3J5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGd0KFxuICBwcm9wZXJ0eVRvQ29tcGFyZTogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkdSRUFURVJfVEhBTlxuKSB7XG4gIGNvbnN0IG9wdGlvbnM6IEdyZWF0ZXJUaGFuVmFsaWRhdG9yT3B0aW9ucyA9IHtcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIFtWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU5dOiBwcm9wZXJ0eVRvQ29tcGFyZSxcbiAgfTtcblxuICByZXR1cm4gcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oXG4gICAgVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOKSxcbiAgICBvcHRpb25zIGFzIFZhbGlkYXRpb25NZXRhZGF0YVxuICApO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlY2xhcmVzIHRoYXQgdGhlIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IGJlIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiBhbm90aGVyIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOX09SX0VRVUFMfSB2YWxpZGF0b3IgdG8gZW5zdXJlIHRoZSBkZWNvcmF0ZWQgdmFsdWUgaXMgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5VG9Db21wYXJlIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT1ERUZBVUxUX0VSUk9SX01FU1NBR0VTLkdSRUFURVJfVEhBTl9PUl9FUVVBTF0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byByZXR1cm4gaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAqXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZWNvcmF0b3J9IEEgcHJvcGVydHkgZGVjb3JhdG9yIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB2YWxpZGF0aW9uIG1ldGFkYXRhLlxuICpcbiAqIEBmdW5jdGlvbiBndGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uRGVjb3JhdG9ycy5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3RlKFxuICBwcm9wZXJ0eVRvQ29tcGFyZTogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxuKSB7XG4gIGNvbnN0IG9wdGlvbnM6IEdyZWF0ZXJUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl9PUl9FUVVBTCksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cbiJdfQ==
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQVUxQixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixjQUFjLEdBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsVUFBa0Isc0JBQXNCLENBQUMsUUFBUTtJQUN4RSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1NBQ3ZCLE1BQU0sQ0FDTCxZQUFZLENBQXFCLEdBQUcsRUFBRTtRQUNwQyxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQ0g7U0FDQSxLQUFLLEVBQUUsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUNqQixLQUE2QixFQUM3QixVQUFrQixzQkFBc0IsQ0FBQyxHQUFHO0lBRTVDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sVUFBVSxD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QUFPO1FBQ2hCLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsaUJBQWlCO0tBQzFELENBQUM7SUFFRixPQUFPLFlBQVksQ0FDakIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFDcEQsT0FBNkIsQ0FDOUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQge1xuICBEaWZmVmFsaWRhdG9yT3B0aW9ucyxcbiAgRXF1YWxzVmFsaWRhdG9yT3B0aW9ucyxcbiAgR3JlYXRlclRoYW5PckVxdWFsVmFsaWRhdG9yT3B0aW9ucyxcbiAgR3JlYXRlclRoYW5WYWxpZGF0b3JPcHRpb25zLFxuICBMZXNzVGhhbk9yRXF1YWxWYWxpZGF0b3JPcHRpb25zLFxuICBMZXNzVGhhblZhbGlkYXRvck9wdGlvbnMsXG4gIFZhbGlkYXRpb25NZXRhZGF0YSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIERFRkFVTFRfRVJST1JfTUVTU0FHRVMsXG4gIERFRkFVTFRfUEFUVEVSTlMsXG4gIFZhbGlkYXRpb25LZXlzLFxufSBmcm9tIFwiLi9WYWxpZGF0b3JzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgc2YgfSBmcm9tIFwiLi4vdXRpbHMvc3RyaW5nc1wiO1xuaW1wb3J0IHsgTW9kZWxDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9tb2RlbC90eXBlc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRlIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVzXCI7XG5pbXBvcnQgeyBwcm9wTWV0YWRhdGEgfSBmcm9tIFwiLi4vdXRpbHMvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gXCIuL1ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IERlY29yYXRpb24gfSBmcm9tIFwiLi4vdXRpbHMvRGVjb3JhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQcm9wZXJ0eSBkZWNvcmF0b3IgdGhhdCBtYXJrcyBhIGZpZWxkIGFzIHJlcXVpcmVkXG4gKiBAc3VtbWFyeSBNYXJrcyB0aGUgcHJvcGVydHkgYXMgcmVxdWlyZWQsIGNhdXNpbmcgdmFsaWRhdGlvbiB0byBmYWlsIGlmIHRoZSBwcm9wZXJ0eSBpcyB1bmRlZmluZWQsIG51bGwsIG9yIGVtcHR5LlxuICogVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1JFUVVJUkVEfS5cbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGNvbW1vbmx5IHVzZWQgYXMgdGhlIGZpcnN0IHZhbGlkYXRpb24gc3RlcCBmb3IgaW1wb3J0YW50IGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHMuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1JFUVVJUkVEfVxuICogQHJldHVybiB7UHJvcGVydHlEZWNvcmF0b3J9IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gY2xhc3MgcHJvcGVydGllc1xuICpcbiAqIEBmdW5jdGlvbiByZXF1aXJlZFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gKlxuICogICBAcmVxdWlyZWQoXCJFbWFpbCBhZGRyZXNzIGlzIG1hbmRhdG9yeVwiKVxuICogICBlbWFpbDogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlJFUVVJUkVEKSB7XG4gIGNvbnN0IGtleSA9IFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLlJFUVVJUkVEKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJvcGVydHkgZGVjb3JhdG9yIHRoYXQgZW5mb3JjZXMgYSBtaW5pbXVtIHZhbHVlIGNvbnN0cmFpbnRcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBtaW5pbXVtIHZhbHVlIGZvciB0aGUgcHJvcGVydHksIGNhdXNpbmcgdmFsaWRhdGlvbiB0byBmYWlsIGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBtaW5pbXVtLlxuICogVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI01JTn0uXG4gKiBUaGlzIGRlY29yYXRvciB3b3JrcyB3aXRoIG51bWVyaWMgdmFsdWVzIGFuZCBkYXRlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlciB8IERhdGUgfCBzdHJpbmd9IHZhbHVlIC0gVGhlIG1pbmltdW0gdmFsdWUgYWxsb3dlZC4gRm9yIGRhdGVzLCBjYW4gYmUgYSBEYXRlIG9iamVjdCBvciBhIHN0cmluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHZhbGlkYXRpb24gZmFpbHMuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01JTn1cbiAqIEByZXR1cm4ge1Byb3BlcnR5RGVjb3JhdG9yfSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGNsYXNzIHByb3BlcnRpZXNcbiAqXG4gKiBAZnVuY3Rpb24gbWluXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBQcm9kdWN0IHtcbiAqICAgQG1pbigwKVxuICogICBwcmljZTogbnVtYmVyO1xuICpcbiAqICAgQG1pbihuZXcgRGF0ZSgyMDIzLCAwLCAxKSwgXCJEYXRlIG11c3QgYmUgYWZ0ZXIgSmFudWFyeSAxLCAyMDIzXCIpXG4gKiAgIHJlbGVhc2VEYXRlOiBEYXRlO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaW4oXG4gIHZhbHVlOiBudW1iZXIgfCBEYXRlIHwgc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1JTlxuKSB7XG4gIGNvbnN0IGtleSA9IFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLk1JTik7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBbVmFsaWRhdGlvbktleXMuTUlOXTogdmFsdWUsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbTnVtYmVyLm5hbWUsIERhdGUubmFtZV0sXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI01BWH1cbiAqXG4gKiBAcGFyYW0ge251bWJlciB8IERhdGV9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNNQVh9XG4gKlxuICogQGZ1bmN0aW9uIG1heFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1heChcbiAgdmFsdWU6IG51bWJlciB8IERhdGUgfCBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTUFYXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuTUFYKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5NQVhdOiB2YWx1ZSxcbiAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgdHlwZXM6IFtOdW1iZXIubmFtZSwgRGF0ZS5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBzdGVwIHZhbHVlIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjU1RFUH1cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI1NURVB9XG4gKlxuICogQGZ1bmN0aW9uIHN0ZXBcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGVwKFxuICB2YWx1ZTogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLlNURVBcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5TVEVQKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5TVEVQXTogdmFsdWUsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbTnVtYmVyLm5hbWVdLFxuICAgICAgfSlcbiAgICApXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIG1pbmltdW0gbGVuZ3RoIGZvciB0aGUgcHJvcGVydHlcbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjTUlOX0xFTkdUSH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI01JTl9MRU5HVEh9XG4gKlxuICogQGZ1bmN0aW9uIG1pbmxlbmd0aFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbmxlbmd0aChcbiAgdmFsdWU6IG51bWJlcixcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5NSU5fTEVOR1RIXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSCk7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBbVmFsaWRhdGlvbktleXMuTUlOX0xFTkdUSF06IHZhbHVlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lLCBBcnJheS5uYW1lLCBTZXQubmFtZV0sXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgbWF4aW11bSBsZW5ndGggZm9yIHRoZSBwcm9wZXJ0eVxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvcnMgdG8gdmFsaWRhdGUgYSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCB1c2Uga2V5IHtAbGluayBWYWxpZGF0aW9uS2V5cyNNQVhfTEVOR1RIfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjTUFYX0xFTkdUSH1cbiAqXG4gKiBAZnVuY3Rpb24gbWF4bGVuZ3RoXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWF4bGVuZ3RoKFxuICB2YWx1ZTogbnVtYmVyLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLk1BWF9MRU5HVEhcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RIXTogdmFsdWUsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWUsIEFycmF5Lm5hbWUsIFNldC5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBSZWdFeHAgcGF0dGVybiB0aGUgcHJvcGVydHkgbXVzdCByZXNwZWN0XG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1BBVFRFUk59XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNQQVRURVJOfVxuICpcbiAqIEBmdW5jdGlvbiBwYXR0ZXJuXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0dGVybihcbiAgdmFsdWU6IFJlZ0V4cCB8IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5QQVRURVJOXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuUEFUVEVSTik7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBbVmFsaWRhdGlvbktleXMuUEFUVEVSTl06XG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHByb3BlcnR5IGFzIGFuIGVtYWlsXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI0VNQUlMfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gdGhlIGVycm9yIG1lc3NhZ2UuIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0VNQUlMfVxuICpcbiAqIEBmdW5jdGlvbiBlbWFpbFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuRU1BSUwpIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuRU1BSUwpO1xuICByZXR1cm4gRGVjb3JhdGlvbi5mb3Ioa2V5KVxuICAgIC5kZWZpbmUoXG4gICAgICBwcm9wTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPihrZXksIHtcbiAgICAgICAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dOiBERUZBVUxUX1BBVFRFUk5TLkVNQUlMLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHByb3BlcnR5IGFzIGFuIFVSTFxuICogQGRlc2NyaXB0aW9uIFZhbGlkYXRvcnMgdG8gdmFsaWRhdGUgYSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCB1c2Uga2V5IHtAbGluayBWYWxpZGF0aW9uS2V5cyNVUkx9XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjVVJMfVxuICpcbiAqIEBmdW5jdGlvbiB1cmxcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmwobWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5VUkwpIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuVVJMKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oa2V5LCB7XG4gICAgICAgIFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXTogREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHR5cGVzOiBbU3RyaW5nLm5hbWVdLFxuICAgICAgfSlcbiAgICApXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgRW5mb3JjZXMgdHlwZSB2ZXJpZmljYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0b3JzIHRvIHZhbGlkYXRlIGEgZGVjb3JhdGVkIHByb3BlcnR5IG11c3QgdXNlIGtleSB7QGxpbmsgVmFsaWRhdGlvbktleXMjVFlQRX1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSB0eXBlcyBhY2NlcHRlZCB0eXBlc1xuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSB0aGUgZXJyb3IgbWVzc2FnZS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfRVJST1JfTUVTU0FHRVMjVFlQRX1cbiAqXG4gKiBAZnVuY3Rpb24gdHlwZVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGUoXG4gIHR5cGVzOiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5UWVBFXG4pIHtcbiAgY29uc3Qga2V5ID0gVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuVFlQRSk7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KGtleSwge1xuICAgICAgICBjdXN0b21UeXBlczogdHlwZXMsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEYXRlIEhhbmRsZXIgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI0RBVEV9XG4gKlxuICogV2lsbCBlbmZvcmNlIHNlcmlhbGl6YXRpb24gYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBmb3JtYXRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IGFjY2VwdGVkIGZvcm1hdCBhY2NvcmRpbmcgdG8ge0BsaW5rIGZvcm1hdERhdGV9XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNEQVRFfVxuICpcbiAqIEBmdW5jdGlvbiBkYXRlXG4gKlxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGUoXG4gIGZvcm1hdDogc3RyaW5nID0gXCJkZC9NTS95eXl5XCIsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuREFURVxuKSB7XG4gIGNvbnN0IGtleSA9IFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkRBVEUpO1xuICBjb25zdCBkYXRlRGVjID0gKHRhcmdldDogUmVjb3JkPHN0cmluZywgYW55PiwgcHJvcGVydHlLZXk/OiBhbnkpOiBhbnkgPT4ge1xuICAgIHByb3BNZXRhZGF0YShrZXksIHtcbiAgICAgIFtWYWxpZGF0aW9uS2V5cy5GT1JNQVRdOiBmb3JtYXQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdHlwZXM6IFtEYXRlLm5hbWVdLFxuICAgIH0pKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuXG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFdlYWtNYXAoKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgc2V0KHRoaXM6IGFueSwgbmV3VmFsdWU6IHN0cmluZyB8IERhdGUpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgcHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5jb25maWd1cmFibGUpXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4gdmFsdWVzLmdldCh0aGlzKSxcbiAgICAgICAgICAgIHNldDogKG5ld1ZhbHVlOiBzdHJpbmcgfCBEYXRlIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2YWw6IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcGFyc2VEYXRlKGZvcm1hdCwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQodGhpcywgdmFsKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihzZihcIkZhaWxlZCB0byBwYXJzZSBkYXRlOiB7MH1cIiwgZS5tZXNzYWdlIHx8IGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpc1twcm9wZXJ0eUtleV0gPSBuZXdWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaGVyZVwiKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpLmRlZmluZShkYXRlRGVjKS5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFBhc3N3b3JkIEhhbmRsZXIgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdG9ycyB0byB2YWxpZGF0ZSBhIGRlY29yYXRlZCBwcm9wZXJ0eSBtdXN0IHVzZSBrZXkge0BsaW5rIFZhbGlkYXRpb25LZXlzI1BBU1NXT1JEfVxuICpcbiAqIEBwYXJhbSB7UmVnRXhwfSBbcGF0dGVybl0gZGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfUEFUVEVSTlMjQ0hBUjhfT05FX09GX0VBQ0h9XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIHRoZSBlcnJvciBtZXNzYWdlLiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9FUlJPUl9NRVNTQUdFUyNQQVNTV09SRH1cbiAqXG4gKiBAZnVuY3Rpb24gcGFzc3dvcmRcbiAqXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFzc3dvcmQoXG4gIHBhdHRlcm46IFJlZ0V4cCA9IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuUEFTU1dPUkRcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5QQVNTV09SRCk7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZShcbiAgICAgIHByb3BNZXRhZGF0YShrZXksIHtcbiAgICAgICAgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dOiBwYXR0ZXJuLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB0eXBlczogW1N0cmluZy5uYW1lXSxcbiAgICAgIH0pXG4gICAgKVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IExpc3QgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gQWxzbyBzZXRzIHRoZSB7QGxpbmsgdHlwZX0gdG8gdGhlIHByb3ZpZGVkIGNvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge01vZGVsQ29uc3RydWN0b3J9IGNsYXp6XG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbGxlY3Rpb25dIFRoZSBjb2xsZWN0aW9uIGJlaW5nIHVzZWQuIGRlZmF1bHRzIHRvIEFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0xJU1R9XG4gKlxuICogQGZ1bmN0aW9uIGxpc3RcbiAqXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdChcbiAgY2xheno6IE1vZGVsQ29uc3RydWN0b3I8YW55PiB8IE1vZGVsQ29uc3RydWN0b3I8YW55PltdLFxuICBjb2xsZWN0aW9uOiBcIkFycmF5XCIgfCBcIlNldFwiID0gXCJBcnJheVwiLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkxJU1Rcbikge1xuICBjb25zdCBrZXkgPSBWYWxpZGF0aW9uLmtleShWYWxpZGF0aW9uS2V5cy5MSVNUKTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgcHJvcE1ldGFkYXRhKGtleSwge1xuICAgICAgICBjbGF6ejogQXJyYXkuaXNBcnJheShjbGF6eikgPyBjbGF6ei5tYXAoKGMpID0+IGMubmFtZSkgOiBbY2xhenoubmFtZV0sXG4gICAgICAgIHR5cGU6IGNvbGxlY3Rpb24sXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICB9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBTZXQgRGVjb3JhdG9yXG4gKiBAZGVzY3JpcHRpb24gV3JhcHBlciBmb3Ige0BsaW5rIGxpc3R9IHdpdGggdGhlICdTZXQnIENvbGxlY3Rpb25cbiAqXG4gKiBAcGFyYW0ge01vZGVsQ29uc3RydWN0b3J9IGNsYXp6XG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2VdIGRlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0VSUk9SX01FU1NBR0VTI0xJU1R9XG4gKlxuICogQGZ1bmN0aW9uIHNldFxuICpcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXQoXG4gIGNsYXp6OiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuTElTVFxuKSB7XG4gIHJldHVybiBsaXN0KGNsYXp6LCBcIlNldFwiLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCB0byBhbm90aGVyIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXMuRVFVQUxTfSB2YWxpZGF0b3IgdG8gZW5zdXJlIHRoZSBkZWNvcmF0ZWQgdmFsdWUgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGVxdWFsaXR5IGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5FUVVBTFNdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBlcXVhbGl0eSB2YWxpZGF0aW9uIG1ldGFkYXRhLlxuICpcbiAqIEBmdW5jdGlvbiBlcVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxKFxuICBwcm9wZXJ0eVRvQ29tcGFyZTogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkVRVUFMU1xuKSB7XG4gIGNvbnN0IG9wdGlvbnM6IEVxdWFsc1ZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuRVFVQUxTXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkVRVUFMUyksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSBhbm90aGVyIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXMuRElGRn0gdmFsaWRhdG9yIHRvIGVuc3VyZSB0aGUgZGVjb3JhdGVkIHZhbHVlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5VG9Db21wYXJlIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNvbXBhcmUgZGlmZmVyZW5jZSBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlPURFRkFVTFRfRVJST1JfTUVTU0FHRVMuRElGRl0gLSBDdXN0b20gZXJyb3IgbWVzc2FnZSB0byByZXR1cm4gaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAqXG4gKiBAcmV0dXJucyB7UHJvcGVydHlEZWNvcmF0b3J9IEEgcHJvcGVydHkgZGVjb3JhdG9yIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIGRpZmZlcmVuY2UgdmFsaWRhdGlvbiBtZXRhZGF0YS5cbiAqXG4gKiBAZnVuY3Rpb24gZGlmZlxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmYoXG4gIHByb3BlcnR5VG9Db21wYXJlOiBzdHJpbmcsXG4gIG1lc3NhZ2U6IHN0cmluZyA9IERFRkFVTFRfRVJST1JfTUVTU0FHRVMuRElGRlxuKSB7XG4gIGNvbnN0IG9wdGlvbnM6IERpZmZWYWxpZGF0b3JPcHRpb25zID0ge1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkRJRkZdOiBwcm9wZXJ0eVRvQ29tcGFyZSxcbiAgfTtcblxuICByZXR1cm4gcHJvcE1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT4oXG4gICAgVmFsaWRhdGlvbi5rZXkoVmFsaWRhdGlvbktleXMuRElGRiksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBsZXNzIHRoYW4gYW5vdGhlciBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTn0gdmFsaWRhdG9yIHRvIGVuc3VyZSB0aGUgZGVjb3JhdGVkIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MRVNTX1RIQU5dIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBsZXNzIHRoYW4gdmFsaWRhdGlvbiBtZXRhZGF0YS5cbiAqXG4gKiBAZnVuY3Rpb24gbHRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsdChcbiAgcHJvcGVydHlUb0NvbXBhcmU6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MRVNTX1RIQU5cbikge1xuICBjb25zdCBvcHRpb25zOiBMZXNzVGhhblZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTiksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gYW5vdGhlciBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTH0gdmFsaWRhdG9yIHRvIGVuc3VyZSB0aGUgZGVjb3JhdGVkIHZhbHVlIGlzIGVxdWFsIG9yIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5MRVNTX1RIQU5fT1JfRVFVQUxdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgdmFsaWRhdGlvbiBtZXRhZGF0YS5cbiAqXG4gKiBAZnVuY3Rpb24gbHRlXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbHRlKFxuICBwcm9wZXJ0eVRvQ29tcGFyZTogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkxFU1NfVEhBTl9PUl9FUVVBTFxuKSB7XG4gIGNvbnN0IG9wdGlvbnM6IExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuTEVTU19USEFOX09SX0VRVUFMXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTl9PUl9FUVVBTCksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gYW5vdGhlciBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTn0gdmFsaWRhdG9yIHRvIGVuc3VyZSB0aGUgZGVjb3JhdGVkIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5HUkVBVEVSX1RIQU5dIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBncmVhdGVyIHRoYW4gdmFsaWRhdGlvbiBtZXRhZGF0YS5cbiAqXG4gKiBAZnVuY3Rpb24gZ3RcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBndChcbiAgcHJvcGVydHlUb0NvbXBhcmU6IHN0cmluZyxcbiAgbWVzc2FnZTogc3RyaW5nID0gREVGQVVMVF9FUlJPUl9NRVNTQUdFUy5HUkVBVEVSX1RIQU5cbikge1xuICBjb25zdCBvcHRpb25zOiBHcmVhdGVyVGhhblZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTiksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBEZWNsYXJlcyB0aGF0IHRoZSBkZWNvcmF0ZWQgcHJvcGVydHkgbXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gYW5vdGhlciBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl9PUl9FUVVBTH0gdmFsaWRhdG9yIHRvIGVuc3VyZSB0aGUgZGVjb3JhdGVkIHZhbHVlIGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVRvQ29tcGFyZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9REVGQVVMVF9FUlJPUl9NRVNTQUdFUy5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuIGlmIHZhbGlkYXRpb24gZmFpbHMuXG4gKlxuICogQHJldHVybnMge1Byb3BlcnR5RGVjb3JhdG9yfSBBIHByb3BlcnR5IGRlY29yYXRvciB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdmFsaWRhdGlvbiBtZXRhZGF0YS5cbiAqXG4gKiBAZnVuY3Rpb24gZ3RlXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ3RlKFxuICBwcm9wZXJ0eVRvQ29tcGFyZTogc3RyaW5nLFxuICBtZXNzYWdlOiBzdHJpbmcgPSBERUZBVUxUX0VSUk9SX01FU1NBR0VTLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxuKSB7XG4gIGNvbnN0IG9wdGlvbnM6IEdyZWF0ZXJUaGFuT3JFcXVhbFZhbGlkYXRvck9wdGlvbnMgPSB7XG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICBbVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogcHJvcGVydHlUb0NvbXBhcmUsXG4gIH07XG5cbiAgcmV0dXJuIHByb3BNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+KFxuICAgIFZhbGlkYXRpb24ua2V5KFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl9PUl9FUVVBTCksXG4gICAgb3B0aW9ucyBhcyBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTtcbn1cbiJdfQ==
|
package/lib/index.cjs
CHANGED
|
@@ -22,8 +22,15 @@ exports.VERSION = void 0;
|
|
|
22
22
|
* It exposes utility functions, validation decorators, and model-related functionality for
|
|
23
23
|
* implementing type-safe, declarative validation in TypeScript applications.
|
|
24
24
|
*/
|
|
25
|
+
__exportStar(require("./constants/index.cjs"), exports);
|
|
25
26
|
__exportStar(require("./utils/index.cjs"), exports);
|
|
26
27
|
__exportStar(require("./validation/index.cjs"), exports);
|
|
27
28
|
__exportStar(require("./model/index.cjs"), exports);
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
/**
|
|
30
|
+
* @description Current version of the reflection package
|
|
31
|
+
* @summary Stores the semantic version number of the package
|
|
32
|
+
* @const VERSION
|
|
33
|
+
* @memberOf module:decorator-validation
|
|
34
|
+
*/
|
|
35
|
+
exports.VERSION = "1.7.2";
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCx3REFBNEI7QUFDNUIsb0RBQXdCO0FBQ3hCLHlEQUE2QjtBQUM3QixvREFBd0I7QUFFeEI7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBUeXBlU2NyaXB0IGRlY29yYXRvci1iYXNlZCB2YWxpZGF0aW9uIGxpYnJhcnlcbiAqIEBzdW1tYXJ5IFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB2YWxpZGF0aW9uIGZyYW1ld29yayB1c2luZyBUeXBlU2NyaXB0IGRlY29yYXRvcnMuXG4gKiBJdCBleHBvc2VzIHV0aWxpdHkgZnVuY3Rpb25zLCB2YWxpZGF0aW9uIGRlY29yYXRvcnMsIGFuZCBtb2RlbC1yZWxhdGVkIGZ1bmN0aW9uYWxpdHkgZm9yXG4gKiBpbXBsZW1lbnRpbmcgdHlwZS1zYWZlLCBkZWNsYXJhdGl2ZSB2YWxpZGF0aW9uIGluIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92YWxpZGF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -5,7 +5,14 @@
|
|
|
5
5
|
* It exposes utility functions, validation decorators, and model-related functionality for
|
|
6
6
|
* implementing type-safe, declarative validation in TypeScript applications.
|
|
7
7
|
*/
|
|
8
|
+
export * from "./constants";
|
|
8
9
|
export * from "./utils";
|
|
9
10
|
export * from "./validation";
|
|
10
11
|
export * from "./model";
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* @description Current version of the reflection package
|
|
14
|
+
* @summary Stores the semantic version number of the package
|
|
15
|
+
* @const VERSION
|
|
16
|
+
* @memberOf module:decorator-validation
|
|
17
|
+
*/
|
|
18
|
+
export declare const VERSION = "1.7.2";
|