@sidekick-coder/zenith-kit 0.0.12 → 0.0.13

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.
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,t=(t,n)=>{let r={};for(var i in t)e(r,i,{get:t[i],enumerable:!0});return n||e(r,Symbol.toStringTag,{value:`Module`}),r};export{t};
@@ -1,4 +1,6 @@
1
1
  import * as v from "valibot";
2
+ import * as _$_casl_ability0 from "@casl/ability";
3
+ import { defineAbility } from "@casl/ability";
2
4
 
3
5
  //#region src/shared/services/ConfigService.d.ts
4
6
  interface Entry {
@@ -7,6 +9,7 @@ interface Entry {
7
9
  source: string;
8
10
  }
9
11
  declare class ConfigService {
12
+ static __container_entry_key: string;
10
13
  entries: Map<string, Entry>;
11
14
  constructor();
12
15
  list(): Entry[];
@@ -29,6 +32,7 @@ declare class ContainerService {
29
32
  private entries;
30
33
  loadFromRecord(record: Record<string, any>): void;
31
34
  toRecord(): Record<string, any>;
35
+ private getKey;
32
36
  set(payload: EntryKey, value: any): this;
33
37
  has(payload: EntryKey): boolean;
34
38
  get<T>(payload: EntryKey): T;
@@ -38,19 +42,9 @@ declare class ContainerService {
38
42
  keys(): EntryKey[];
39
43
  }
40
44
  //#endregion
41
- //#region src/shared/services/CookieService.d.ts
42
- declare class CookieService {
43
- cookies: Map<string, string>;
44
- prefix: string;
45
- constructor(data?: Partial<CookieService>);
46
- load(cookies: Record<string, string> | Map<string, string>): void;
47
- get(name: string, defaultValue?: string | null): string | null;
48
- set(name: string, value: string, options?: any): void;
49
- toRecord(): Record<string, string>;
50
- }
51
- //#endregion
52
45
  //#region src/shared/services/LoggerService.d.ts
53
46
  declare class LoggerService {
47
+ static __container_entry_key: string;
54
48
  info(message: string, meta?: any): void;
55
49
  debug(message: string, meta?: any): void;
56
50
  warn(message: string, meta?: any): void;
@@ -77,6 +71,7 @@ interface EmmitterServiceOptions {
77
71
  logger?: LoggerService;
78
72
  }
79
73
  declare class EmmitterService<Events extends Record<string, any> = Record<string, any>> {
74
+ static __container_entry_key: string;
80
75
  private handlers;
81
76
  private debug;
82
77
  private logger;
@@ -104,12 +99,20 @@ declare class EmmitterService<Events extends Record<string, any> = Record<string
104
99
  //#region src/shared/entities/LifecycleHook.d.ts
105
100
  declare class LifecycleHook {
106
101
  hook_id: string;
102
+ hook_aliases?: string[];
107
103
  order?: number;
108
104
  subhooks?: LifecycleHook[];
109
- constructor();
105
+ register(): Promise<void>;
106
+ load(): Promise<void>;
107
+ boot(): Promise<void>;
108
+ shutdown(): Promise<void>;
109
+ /** @deprecated Use register */
110
110
  onRegister(): Promise<void>;
111
+ /** @deprecated Use load */
111
112
  onLoad(): Promise<void>;
113
+ /** @deprecated Use boot */
112
114
  onBoot(): Promise<void>;
115
+ /** @deprecated Use shutdown */
113
116
  onShutdown(): Promise<void>;
114
117
  }
115
118
  //#endregion
@@ -159,17 +162,35 @@ declare function composeWith<TBase extends Constructor, M extends Array<(base: C
159
162
  declare function mixin<TBase extends Constructor>(Source: TBase): <TTarget extends Constructor>(Target: TTarget) => TTarget & TBase;
160
163
  //#endregion
161
164
  //#region src/shared/services/LifecycleService.d.ts
165
+ type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
162
166
  interface ListOptions {
163
- exclude?: (string | Constructor<LifecycleHook> | LifecycleHook)[];
167
+ include?: string | string[];
168
+ exclude?: string | string[];
169
+ }
170
+ interface LifecycleServiceOptions {
171
+ debug?: boolean;
172
+ hooks?: Map<string, LifecycleHook>;
173
+ logger?: LoggerService;
174
+ onError?: (error: Error, context: {
175
+ hookId: string;
176
+ method: LifecycleMethod;
177
+ }) => void;
164
178
  }
165
179
  declare class LifecycleService {
180
+ static __container_entry_key: string;
166
181
  hooks: Map<string, LifecycleHook>;
167
182
  logger: LoggerService;
168
183
  debug: boolean;
169
- constructor(data?: Partial<LifecycleService>);
170
- private executeHookMethod;
184
+ constructor(data?: LifecycleServiceOptions);
185
+ onError(error: Error, context: {
186
+ hookId: string;
187
+ method: LifecycleMethod;
188
+ }): void;
189
+ mapAliases(args: string[]): string[];
171
190
  list(options?: ListOptions): LifecycleHook[];
172
191
  add(...payload: (LifecycleHook | Constructor<LifecycleHook>)[]): void;
192
+ emitMethod(method: LifecycleMethod, options?: ListOptions): Promise<void>;
193
+ emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions): Promise<void>;
173
194
  register(options?: ListOptions): Promise<void>;
174
195
  load(options?: ListOptions): Promise<void>;
175
196
  boot(options?: ListOptions): Promise<void>;
@@ -179,6 +200,7 @@ declare class LifecycleService {
179
200
  //#endregion
180
201
  //#region src/shared/services/TranslatorService.d.ts
181
202
  declare class TranslatorService {
203
+ static __container_entry_key: string;
182
204
  entries: Map<string, string>;
183
205
  locale: string;
184
206
  localeLoaders: Map<string, () => Promise<Record<string, string>>>;
@@ -200,10 +222,11 @@ declare class TranslatorService {
200
222
  //#endregion
201
223
  //#region src/shared/services/UploadService.d.ts
202
224
  declare class UploadService {
225
+ static __container_entry_key: string;
203
226
  single(name: string): void;
204
227
  multiple(name: string): void;
205
228
  }
206
- declare namespace url_d_exports {
229
+ declare namespace urlValidator_d_exports {
207
230
  export { array, arrayNumber, boolean, date, datetime, number, object };
208
231
  }
209
232
  declare const number: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>;
@@ -219,10 +242,24 @@ declare const object: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSc
219
242
  }>, v.TransformAction<{
220
243
  [x: string]: any;
221
244
  }, Record<string, any>>]>;
245
+ declare namespace paginationValidator_d_exports {
246
+ export { PaginationParams, base };
247
+ }
248
+ interface PaginationParams {
249
+ maxLimit?: number;
250
+ orderFields?: string[];
251
+ }
252
+ declare const base: (options?: PaginationParams) => v.ObjectSchema<{
253
+ readonly page: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, 1>;
254
+ readonly limit: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>, number>;
255
+ readonly orderBy: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.PicklistSchema<string[], undefined>, undefined>]> | v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.StringSchema<undefined>, undefined>]>, readonly []>;
256
+ readonly orderDirection: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.UnionSchema<[v.LiteralSchema<"asc", undefined>, v.LiteralSchema<"desc", undefined>], undefined>, undefined>]>, readonly []>;
257
+ }, undefined>;
222
258
  //#endregion
223
259
  //#region src/shared/services/ValidatorService.d.ts
224
260
  declare const extras: {
225
- url: typeof url_d_exports;
261
+ url: typeof urlValidator_d_exports;
262
+ pagination: typeof paginationValidator_d_exports;
226
263
  };
227
264
  type Valibot = typeof v & {
228
265
  extras: typeof extras;
@@ -239,6 +276,7 @@ type ValidatorResult<T extends v.ObjectEntries> = v.InferOutput<v.ObjectSchema<T
239
276
  type ValidatePayload<T extends ValibotSchema = ValibotSchema> = ValidatorCallback<T> | T;
240
277
  type ValidateResult<T extends ValidatePayload> = T extends ValibotSchema ? v.InferOutput<T> : T extends ValidatorCallback<infer U> ? v.InferOutput<U> : unknown;
241
278
  declare class ValidatorService {
279
+ static __container_entry_key: string;
242
280
  v: Valibot;
243
281
  create<T extends ValibotSchema>(cb: ValidatorCallback<T>): T;
244
282
  validate<T extends ValibotSchema>(payload: any, cb: ValidatePayload<T>): v.InferOutput<T>;
@@ -256,6 +294,10 @@ declare function unflatten(obj: any): Record<string, any>;
256
294
  //#region src/shared/utils/formatBytes.d.ts
257
295
  declare function formatBytes(bytes: number, decimals?: number): string;
258
296
  //#endregion
297
+ //#region src/shared/utils/parseRouteUrl.d.ts
298
+ declare function parseUrlParams(routePath: string, requestPath: string): Record<string, string>;
299
+ declare function parseUrlQuery(requestPath: string): Record<string, any>;
300
+ //#endregion
259
301
  //#region src/shared/utils/tryCatch.d.ts
260
302
  interface Tryer {
261
303
  (...args: any[]): any;
@@ -326,6 +368,54 @@ declare class ShellException extends BaseException {
326
368
  //#region src/shared/facades/validator.d.ts
327
369
  declare const validator: ValidatorService;
328
370
  //#endregion
371
+ //#region src/shared/entities/PermissionEntity.d.ts
372
+ declare const PermissionEntity_base: {
373
+ new (...args: any[]): {
374
+ merge(data: Partial< /*elided*/any>): /*elided*/any;
375
+ };
376
+ from<T>(this: new () => T, data: Partial<T>): T;
377
+ } & Constructor;
378
+ declare class PermissionEntity extends PermissionEntity_base {
379
+ id: number;
380
+ name: string;
381
+ description: string | null;
382
+ origin: string;
383
+ subject: string;
384
+ action: string;
385
+ conditions: string | null | Record<string, any>;
386
+ get editable(): boolean;
387
+ get parsedConditions(): any;
388
+ }
389
+ //#endregion
390
+ //#region src/shared/entities/AclEntity.d.ts
391
+ declare class AclEntity {
392
+ static __container_entry_key: string;
393
+ ability: ReturnType<typeof defineAbility>;
394
+ permissions: PermissionEntity[];
395
+ debug: boolean;
396
+ logger: LoggerService;
397
+ constructor(data?: Partial<AclEntity>);
398
+ can(action: string, subject: any, object?: Record<string, any>): boolean;
399
+ cannot(action: string, subject: any, object?: Record<string, any>): boolean;
400
+ subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
401
+ }
402
+ //#endregion
403
+ //#region src/shared/entities/CookieMapEntity.d.ts
404
+ interface CookieMapEntityOptions$1 {
405
+ cookies?: Map<string, string>;
406
+ prefix?: string;
407
+ }
408
+ declare class CookieMapEntity {
409
+ static __container_entry_key: string;
410
+ cookies: Map<string, string>;
411
+ prefix: string;
412
+ constructor(data?: CookieMapEntityOptions$1);
413
+ load(cookies: Record<string, string> | Map<string, string>): void;
414
+ get(name: string, defaultValue?: string | null): string | null;
415
+ set(name: string, value: string, options?: any): void;
416
+ toRecord(): Record<string, string>;
417
+ }
418
+ //#endregion
329
419
  //#region src/shared/entities/DriveEntryEntity.d.ts
330
420
  declare class DriveEntry {
331
421
  name: string;
@@ -335,6 +425,79 @@ declare class DriveEntry {
335
425
  constructor(data: DriveEntry);
336
426
  }
337
427
  //#endregion
428
+ //#region src/shared/entities/FileEntity.d.ts
429
+ declare const FileEntity_base: {
430
+ new (...args: any[]): {
431
+ merge(data: Partial< /*elided*/any>): /*elided*/any;
432
+ };
433
+ from<T>(this: new () => T, data: Partial<T>): T;
434
+ } & Constructor & {
435
+ new (...args: any[]): {
436
+ created_at: Date | string;
437
+ updated_at: Date | string;
438
+ };
439
+ } & {
440
+ new (...args: any[]): {
441
+ deleted_at: Date | string | null;
442
+ };
443
+ };
444
+ declare class FileEntity extends FileEntity_base {
445
+ id: number;
446
+ drive: string;
447
+ mimetype: string;
448
+ purpose: string;
449
+ client_name: string;
450
+ filename: string;
451
+ public: boolean;
452
+ url?: string;
453
+ metas?: Record<string, any>;
454
+ isImage(): boolean;
455
+ }
456
+ //#endregion
457
+ //#region src/shared/entities/FileUploadSessionEntity.d.ts
458
+ declare const UploadSession_base: {
459
+ new (...args: any[]): {
460
+ merge(data: Partial< /*elided*/any>): /*elided*/any;
461
+ };
462
+ from<T>(this: new () => T, data: Partial<T>): T;
463
+ } & Constructor & {
464
+ new (...args: any[]): {
465
+ created_at: Date | string;
466
+ updated_at: Date | string;
467
+ };
468
+ } & {
469
+ new (...args: any[]): {
470
+ deleted_at: Date | string | null;
471
+ };
472
+ };
473
+ declare class UploadSession extends UploadSession_base {
474
+ id: number;
475
+ purpose: string;
476
+ mime_types: string;
477
+ max_size: number;
478
+ upload_url?: string;
479
+ create_file_url?: string;
480
+ getParsedMimeTypes(): string[];
481
+ isAllowedMimeType(mimeType: string): boolean;
482
+ isAllowedSize(size: number): boolean;
483
+ }
484
+ //#endregion
485
+ //#region src/shared/entities/HeaderMapEntity.d.ts
486
+ interface CookieMapEntityOptions {
487
+ headers?: Record<string, string>;
488
+ setHeader?: (name: string, value: string) => void;
489
+ }
490
+ declare class HeaderMapEntity {
491
+ static __container_entry_key: string;
492
+ entries: Map<string, string>;
493
+ setHeader?: (name: string, value: string) => void;
494
+ constructor(data?: CookieMapEntityOptions);
495
+ loadFromRecord(cookies: Record<string, string>): void;
496
+ get(name: string, defaultValue?: string | null): string | null;
497
+ set(name: string, value: string): void;
498
+ toRecord(): Record<string, string>;
499
+ }
500
+ //#endregion
338
501
  //#region src/shared/entities/ModuleManifestEntity.d.ts
339
502
  interface ModuleManifestBuildImport {
340
503
  from: string;
@@ -384,4 +547,80 @@ declare class Module extends Module_base {
384
547
  setData(data: Partial<Module | ModuleManifest>): void;
385
548
  }
386
549
  //#endregion
387
- export { AnyClass, BaseException, ConfigService, Constructor, ContainerService, CookieService, DriveEntry as DriveEntryEntity, EmmitterService, EmmitterServiceOptions, LifecycleHook, LifecycleService, LoggerService, Mixin, Module as ModuleEntity, ModuleManifestBuild, ModuleManifestBuildImport, ModuleManifest as ModuleManifestEntity, PartialBy, Permission, PermissionAssignment, PublicData, ShellException, Token, TranslatorService, UnionToIntersection, UploadService, Valibot, ValibotSchema, ValibotSchemaAsync, ValidatePayload, ValidateResult, ValidatorCallback, ValidatorCallbackAsync, ValidatorResult, ValidatorService, compose, composeWith, createId, flatten, formatBytes, mixin, permissionAssignmentSchema, permissionSchema, tokenSchema, tryCatch, unflatten, validator };
550
+ //#region src/shared/entities/PaginationEntity.d.ts
551
+ declare class PaginationEntity<T = Record<string, any>> {
552
+ items: T[];
553
+ total: number;
554
+ page: number;
555
+ per_page: number;
556
+ total_pages: number;
557
+ constructor(data: Partial<PaginationEntity>);
558
+ static from<T = Record<string, string>>(payload: Partial<PaginationEntity<T>>): PaginationEntity<T>;
559
+ }
560
+ //#endregion
561
+ //#region src/shared/entities/PluginEntity.d.ts
562
+ declare const PluginEntity_base: {
563
+ new (...args: any[]): {
564
+ merge(data: Partial< /*elided*/any>): /*elided*/any;
565
+ };
566
+ from<T>(this: new () => T, data: Partial<T>): T;
567
+ } & Constructor;
568
+ declare class PluginEntity extends PluginEntity_base {
569
+ id: string;
570
+ name: string;
571
+ version: string;
572
+ enabled: boolean;
573
+ }
574
+ //#endregion
575
+ //#region src/shared/entities/RoleEntity.d.ts
576
+ declare const Role_base: {
577
+ new (...args: any[]): {
578
+ merge(data: Partial< /*elided*/any>): /*elided*/any;
579
+ };
580
+ from<T>(this: new () => T, data: Partial<T>): T;
581
+ } & Constructor & {
582
+ new (...args: any[]): {
583
+ created_at: Date | string;
584
+ updated_at: Date | string;
585
+ };
586
+ } & {
587
+ new (...args: any[]): {
588
+ deleted_at: Date | string | null;
589
+ };
590
+ };
591
+ declare class Role extends Role_base {
592
+ id: number;
593
+ name: string;
594
+ description?: string;
595
+ }
596
+ //#endregion
597
+ //#region src/shared/entities/UserEntity.d.ts
598
+ declare const UserEntity_base: {
599
+ new (...args: any[]): {
600
+ merge(data: Partial< /*elided*/any>): /*elided*/any;
601
+ };
602
+ from<T>(this: new () => T, data: Partial<T>): T;
603
+ } & Constructor & {
604
+ new (...args: any[]): {
605
+ created_at: Date | string;
606
+ updated_at: Date | string;
607
+ };
608
+ } & {
609
+ new (...args: any[]): {
610
+ deleted_at: Date | string | null;
611
+ };
612
+ };
613
+ declare class UserEntity extends UserEntity_base {
614
+ id: number;
615
+ email: string;
616
+ name: string;
617
+ username: string;
618
+ password?: string;
619
+ verified_at?: Date | string | null;
620
+ permissions?: PermissionEntity[];
621
+ roles?: Role[];
622
+ get initials(): string;
623
+ }
624
+ //#endregion
625
+ export { AclEntity, AnyClass, BaseException, ConfigService, Constructor, ContainerService, CookieMapEntity, DriveEntry as DriveEntryEntity, EmmitterService, EmmitterServiceOptions, FileEntity, UploadSession as FileUploadSessionEntity, HeaderMapEntity, LifecycleHook, LifecycleService, LifecycleServiceOptions, LoggerService, Mixin, Module as ModuleEntity, ModuleManifestBuild, ModuleManifestBuildImport, ModuleManifest as ModuleManifestEntity, PaginationEntity, PartialBy, Permission, PermissionAssignment, PermissionEntity, PluginEntity, PublicData, Role as RoleEntity, ShellException, Token, TranslatorService, UnionToIntersection, UploadService, UserEntity, Valibot, ValibotSchema, ValibotSchemaAsync, ValidatePayload, ValidateResult, ValidatorCallback, ValidatorCallbackAsync, ValidatorResult, ValidatorService, compose, composeWith, createId, flatten, formatBytes, mixin, parseUrlParams, parseUrlQuery, permissionAssignmentSchema, permissionSchema, tokenSchema, tryCatch, unflatten, validator };
626
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Db25maWdTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbnRhaW5lclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy90eXBpbmcuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvY29tcG9zZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9MaWZlY3ljbGVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1RyYW5zbGF0b3JTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1VwbG9hZFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdmFsaWRhdG9ycy91cmxWYWxpZGF0b3IuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdmFsaWRhdG9ycy9wYWdpbmF0aW9uVmFsaWRhdG9yLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1ZhbGlkYXRvclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvY3JlYXRlSWQuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvdXRpbHMvZmxhdHRlbi5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9mb3JtYXRCeXRlcy5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9wYXJzZVJvdXRlVXJsLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzL3RyeUNhdGNoLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2NoZW1hcy9wZXJtaXNzaW9uU2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvdG9rZW5TY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZXhjZXB0aW9ucy9CYXNlRXhjZXB0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2V4Y2VwdGlvbnMvU2hlbGxFeGNlcHRpb24uZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZmFjYWRlcy92YWxpZGF0b3IuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUGVybWlzc2lvbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9BY2xFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvQ29va2llTWFwRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0RyaXZlRW50cnlFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvRmlsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9GaWxlVXBsb2FkU2Vzc2lvbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9IZWFkZXJNYXBFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTW9kdWxlTWFuaWZlc3RFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTW9kdWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1BhZ2luYXRpb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUGx1Z2luRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1JvbGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvVXNlckVudGl0eS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBFbnRyeSB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbiAgICBzb3VyY2U6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ1NlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBlbnRyaWVzOiBNYXA8c3RyaW5nLCBFbnRyeT47XG4gICAgY29uc3RydWN0b3IoKTtcbiAgICBsaXN0KCk6IEVudHJ5W107XG4gICAgcGFyc2VWYWx1ZSh2YWx1ZTogYW55KTogYW55O1xuICAgIGxvYWRGcm9tUmVjb3JkKHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55Piwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICBsb2FkRnJvbUVudHJpZXMoZW50cmllczogW3N0cmluZywgYW55XVtdLCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHRvUmVjb3JkKCk6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbjtcbiAgICBnZXQ8VCA9IGFueSB8IHVuZGVmaW5lZD4oa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IFQ7XG4gICAgZ2V0T25lPFQgPSBhbnkgfCB1bmRlZmluZWQ+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBUO1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB1bnNldChrZXk6IHN0cmluZyk6IHZvaWQ7XG4gICAgY2xlYXIoKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsInR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xudHlwZSBFbnRyeUtleSA9IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFpbmVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBlbnRyaWVzO1xuICAgIGxvYWRGcm9tUmVjb3JkKHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwcml2YXRlIGdldEtleTtcbiAgICBzZXQocGF5bG9hZDogRW50cnlLZXksIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAgIGhhcyhwYXlsb2FkOiBFbnRyeUtleSk6IGJvb2xlYW47XG4gICAgZ2V0PFQ+KHBheWxvYWQ6IEVudHJ5S2V5KTogVDtcbiAgICBzaW5nbGV0b248VD4oY2xhc3NDb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4pOiBUO1xuICAgIGxvYWQoZW50cmllczogUmVjb3JkPGFueSwgYW55Pik6IHZvaWQ7XG4gICAgcHJveHk8VCA9IHVua25vd24+KGtleTogRW50cnlLZXkpOiBUO1xuICAgIGtleXMoKTogRW50cnlLZXlbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICBjaGlsZChvcHRpb25zOiBhbnkpOiBMb2dnZXJTZXJ2aWNlO1xufVxuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmludGVyZmFjZSBFbW1pdHRlckhhbmRsZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG4gICAgb3JpZ2luYWxMaXN0ZW5lcj86ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xufVxuaW50ZXJmYWNlIE9uT3B0aW9ucyB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdW5pcXVlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBPbkRlYm91bmNlT3B0aW9ucyBleHRlbmRzIE9uT3B0aW9ucyB7XG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHByaXZhdGUgaGFuZGxlcnM7XG4gICAgcHJpdmF0ZSBkZWJ1ZztcbiAgICBwcml2YXRlIGxvZ2dlcjtcbiAgICBsb2FkKG9wdGlvbnM/OiBFbW1pdHRlclNlcnZpY2VPcHRpb25zKTogdm9pZDtcbiAgICBvbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25jZTxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkRlYm91bmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2UoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbkRlYm91bmNlT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkFueU9mPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50czogS1tdLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9uQW55T2YoZXZlbnRzOiBzdHJpbmdbXSwgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IEZ1bmN0aW9uKTogdm9pZDtcbiAgICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiB2b2lkO1xuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQ7XG4gICAgZW1pdEFuZFdhaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGFyZ3M6IEV2ZW50c1tLXSk6IFByb21pc2U8dm9pZD47XG4gICAgZW1pdEFuZFdhaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBsaXN0QnlFdmVudChldmVudDogc3RyaW5nKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgcmVtb3ZlKHBheWxvYWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGhhc0hhbmRsZXJzKCk6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWZlY3ljbGVIb29rIHtcbiAgICBob29rX2lkOiBzdHJpbmc7XG4gICAgaG9va19hbGlhc2VzPzogc3RyaW5nW107XG4gICAgb3JkZXI/OiBudW1iZXI7XG4gICAgc3ViaG9va3M/OiBMaWZlY3ljbGVIb29rW107XG4gICAgcmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgYm9vdCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSByZWdpc3RlciAqL1xuICAgIG9uUmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGxvYWQgKi9cbiAgICBvbkxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGJvb3QgKi9cbiAgICBvbkJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIHNodXRkb3duICovXG4gICAgb25TaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiZXhwb3J0IHR5cGUgVW5pb25Ub0ludGVyc2VjdGlvbjxVPiA9IChVIGV4dGVuZHMgYW55ID8gKGs6IFUpID0+IHZvaWQgOiBuZXZlcikgZXh0ZW5kcyAoazogaW5mZXIgSSkgPT4gdm9pZCA/IEkgOiBuZXZlcjtcbmV4cG9ydCB0eXBlIFBhcnRpYWxCeTxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBPbWl0PFQsIEs+ICYgUGFydGlhbDxQaWNrPFQsIEs+PjtcbmV4cG9ydCB0eXBlIFB1YmxpY0RhdGE8VD4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEtdOiBUW0tdO1xufTtcbiIsImltcG9ydCB0eXBlIHsgVW5pb25Ub0ludGVyc2VjdGlvbiB9IGZyb20gJy4vdHlwaW5nLnRzJztcbmV4cG9ydCB0eXBlIEFueUNsYXNzID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5leHBvcnQgdHlwZSBNaXhpbjxUPiA9IChiYXNlOiBDb25zdHJ1Y3RvcikgPT4gQ29uc3RydWN0b3I8VD47XG4vKipcbiAqIENvbXBvc2VzIG11bHRpcGxlIG1peGlucyBpbnRvIGEgc2luZ2xlIGNsYXNzIHRoYXQgY2FuIGJlIGV4dGVuZGVkLlxuICogQWxsb3dzIGZvciBtdWx0aXBsZSBpbmhlcml0YW5jZS1saWtlIGJlaGF2aW9yIGJ5IGFwcGx5aW5nIG1peGlucyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHBhcmFtIG1peGlucyAtIEFycmF5IG9mIG1peGluIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gKiBAcmV0dXJucyBBIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgaW5jbHVkZXMgYWxsIG1peGluIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciBleHRlbmRzIGNvbXBvc2UoVGltZXN0YW1wLCBTb2Z0RGVsZXRlKSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcigpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wb3NlPE0gZXh0ZW5kcyBBcnJheTwoYmFzZTogQ29uc3RydWN0b3I8YW55PikgPT4gQ29uc3RydWN0b3I8YW55Pj4+KC4uLm1peGluczogTSk6IFVuaW9uVG9JbnRlcnNlY3Rpb248UmV0dXJuVHlwZTxNW251bWJlcl0+Pjtcbi8qKlxuICogQWx0ZXJuYXRpdmUgY29tcG9zZSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB3aXRoIGEgYmFzZSBjbGFzc1xuICpcbiAqIEBwYXJhbSBiYXNlQ2xhc3MgLSBUaGUgYmFzZSBjbGFzcyB0byBzdGFydCB3aXRoXG4gKiBAcGFyYW0gbWl4aW5zIC0gQXJyYXkgb2YgbWl4aW4gZnVuY3Rpb25zIHRvIGFwcGx5XG4gKiBAcmV0dXJucyBBIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgZXh0ZW5kcyB0aGUgYmFzZSBjbGFzcyB3aXRoIGFsbCBtaXhpbiBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBjb21wb3NlV2l0aChCYXNlRW50aXR5LCBUaW1lc3RhbXAsIFNvZnREZWxldGUpIHtcbiAqICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICogICAgIHN1cGVyKClcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbXBvc2VXaXRoPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3IsIE0gZXh0ZW5kcyBBcnJheTwoYmFzZTogQ29uc3RydWN0b3IpID0+IENvbnN0cnVjdG9yPGFueT4+PihiYXNlQ2xhc3M6IFRCYXNlLCAuLi5taXhpbnM6IE0pOiBUQmFzZSAmIFVuaW9uVG9JbnRlcnNlY3Rpb248UmV0dXJuVHlwZTxNW251bWJlcl0+PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1peGluPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KFNvdXJjZTogVEJhc2UpOiA8VFRhcmdldCBleHRlbmRzIENvbnN0cnVjdG9yPihUYXJnZXQ6IFRUYXJnZXQpID0+IFRUYXJnZXQgJiBUQmFzZTtcbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJy4vTG9nZ2VyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbnR5cGUgTGlmZWN5Y2xlTWV0aG9kID0gJ3JlZ2lzdGVyJyB8ICdsb2FkJyB8ICdib290JyB8ICdzaHV0ZG93bic7XG5pbnRlcmZhY2UgTGlzdE9wdGlvbnMge1xuICAgIGluY2x1ZGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBleGNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIExpZmVjeWNsZVNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgaG9va3M/OiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCBjb250ZXh0OiB7XG4gICAgICAgIGhvb2tJZDogc3RyaW5nO1xuICAgICAgICBtZXRob2Q6IExpZmVjeWNsZU1ldGhvZDtcbiAgICB9KSA9PiB2b2lkO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhvb2tzOiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IExpZmVjeWNsZVNlcnZpY2VPcHRpb25zKTtcbiAgICBvbkVycm9yKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSk6IHZvaWQ7XG4gICAgbWFwQWxpYXNlcyhhcmdzOiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuICAgIGxpc3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogTGlmZWN5Y2xlSG9va1tdO1xuICAgIGFkZCguLi5wYXlsb2FkOiAoTGlmZWN5Y2xlSG9vayB8IENvbnN0cnVjdG9yPExpZmVjeWNsZUhvb2s+KVtdKTogdm9pZDtcbiAgICBlbWl0TWV0aG9kKG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXQocGF5bG9hZDogTGlmZWN5Y2xlTWV0aG9kIHwgTGlmZWN5Y2xlTWV0aG9kW10sIG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgcmVnaXN0ZXIob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgYm9vdChvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHNodXRkb3duKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgY2xlYXIoKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJy4vTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmFuc2xhdG9yU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGVudHJpZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgbG9jYWxlOiBzdHJpbmc7XG4gICAgbG9jYWxlTG9hZGVyczogTWFwPHN0cmluZywgKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj47XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGNhY2hlOiBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxUcmFuc2xhdG9yU2VydmljZT4pO1xuICAgIGdldCBsb2NhbGVzKCk6IHN0cmluZ1tdO1xuICAgIGxpc3QoKToge1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9W107XG4gICAgZ2V0RW50cmllcyhsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gICAgbG9hZChsb2NhbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgdChrZXk6IHN0cmluZywgYXJncz86IGFueSk6IHN0cmluZztcbiAgICBkYXRlKGRhdGE6IHN0cmluZyB8IG51bWJlciB8IERhdGUpOiBzdHJpbmc7XG4gICAgZGF0ZXRpbWUoZGF0YTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSk6IHN0cmluZztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZFNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBzaW5nbGUobmFtZTogc3RyaW5nKTogdm9pZDtcbiAgICBtdWx0aXBsZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xufVxuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG51bWJlcjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYm9vbGVhbjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBib29sZWFuLCBib29sZWFuPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZGF0ZTogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5EYXRlU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBEYXRlLCBEYXRlPiwgdi5UcmFuc2Zvcm1BY3Rpb248RGF0ZSwgc3RyaW5nIHwgRGF0ZT5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRhdGV0aW1lOiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkRhdGVTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IERhdGUsIHN0cmluZyB8IERhdGU+XT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcnJheTogPFQgZXh0ZW5kcyB2LkJhc2VTY2hlbWE8YW55LCBhbnksIGFueT4+KHNjaGVtYT86IFQpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8VCwgdW5kZWZpbmVkPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYXJyYXlOdW1iZXI6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5CYXNlU2NoZW1hPGFueSwgYW55LCBhbnk+LCB1bmRlZmluZWQ+XT4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueVtdLCBudW1iZXJbXT5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG9iamVjdDogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5SZWNvcmRTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BbnlTY2hlbWEsIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCB7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbn0sIHtcbiAgICBbeDogc3RyaW5nXTogYW55O1xufT4sIHYuVHJhbnNmb3JtQWN0aW9uPHtcbiAgICBbeDogc3RyaW5nXTogYW55O1xufSwgUmVjb3JkPHN0cmluZywgYW55Pj5dPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25QYXJhbXMge1xuICAgIG1heExpbWl0PzogbnVtYmVyO1xuICAgIG9yZGVyRmllbGRzPzogc3RyaW5nW107XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBiYXNlOiAob3B0aW9ucz86IFBhZ2luYXRpb25QYXJhbXMpID0+IHYuT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBwYWdlOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgMT47XG4gICAgcmVhZG9ubHkgbGltaXQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+LCBudW1iZXI+O1xuICAgIHJlYWRvbmx5IG9yZGVyQnk6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPHN0cmluZ1tdLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4gfCB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiwgcmVhZG9ubHkgW10+O1xuICAgIHJlYWRvbmx5IG9yZGVyRGlyZWN0aW9uOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5VbmlvblNjaGVtYTxbdi5MaXRlcmFsU2NoZW1hPFwiYXNjXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImRlc2NcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiwgcmVhZG9ubHkgW10+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAnI3NoYXJlZC92YWxpZGF0b3JzL3VybFZhbGlkYXRvci50cyc7XG5pbXBvcnQgKiBhcyBwYWdpbmF0aW9uIGZyb20gJyNzaGFyZWQvdmFsaWRhdG9ycy9wYWdpbmF0aW9uVmFsaWRhdG9yLnRzJztcbmRlY2xhcmUgY29uc3QgZXh0cmFzOiB7XG4gICAgdXJsOiB0eXBlb2YgdXJsO1xuICAgIHBhZ2luYXRpb246IHR5cGVvZiBwYWdpbmF0aW9uO1xufTtcbmV4cG9ydCB0eXBlIFZhbGlib3QgPSB0eXBlb2YgdiAmIHtcbiAgICBleHRyYXM6IHR5cGVvZiBleHRyYXM7XG59O1xuZXhwb3J0IHR5cGUgVmFsaWJvdFNjaGVtYSA9IHYuQmFzZVNjaGVtYTx1bmtub3duLCB1bmtub3duLCB2LkJhc2VJc3N1ZTx1bmtub3duPj47XG5leHBvcnQgdHlwZSBWYWxpYm90U2NoZW1hQXN5bmMgPSB2LkJhc2VTY2hlbWFBc3luYzx1bmtub3duLCB1bmtub3duLCB2LkJhc2VJc3N1ZTx1bmtub3duPj47XG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRvckNhbGxiYWNrPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPiB7XG4gICAgKF92OiBWYWxpYm90KTogVDtcbn1cbmV4cG9ydCB0eXBlIFZhbGlkYXRvckNhbGxiYWNrQXN5bmM8VCBleHRlbmRzIFZhbGlib3RTY2hlbWFBc3luYz4gPSB7XG4gICAgKF92OiBWYWxpYm90KTogVDtcbn07XG5leHBvcnQgdHlwZSBWYWxpZGF0b3JSZXN1bHQ8VCBleHRlbmRzIHYuT2JqZWN0RW50cmllcz4gPSB2LkluZmVyT3V0cHV0PHYuT2JqZWN0U2NoZW1hPFQsIHVuZGVmaW5lZD4+O1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVQYXlsb2FkPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hID0gVmFsaWJvdFNjaGVtYT4gPSBWYWxpZGF0b3JDYWxsYmFjazxUPiB8IFQ7XG5leHBvcnQgdHlwZSBWYWxpZGF0ZVJlc3VsdDxUIGV4dGVuZHMgVmFsaWRhdGVQYXlsb2FkPiA9IFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hID8gdi5JbmZlck91dHB1dDxUPiA6IFQgZXh0ZW5kcyBWYWxpZGF0b3JDYWxsYmFjazxpbmZlciBVPiA/IHYuSW5mZXJPdXRwdXQ8VT4gOiB1bmtub3duO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdG9yU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHY6IFZhbGlib3Q7XG4gICAgY3JlYXRlPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPihjYjogVmFsaWRhdG9yQ2FsbGJhY2s8VD4pOiBUO1xuICAgIHZhbGlkYXRlPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPihwYXlsb2FkOiBhbnksIGNiOiBWYWxpZGF0ZVBheWxvYWQ8VD4pOiB2LkluZmVyT3V0cHV0PFQ+O1xuICAgIHZhbGlkYXRlQXN5bmM8VCBleHRlbmRzIFZhbGlib3RTY2hlbWFBc3luYz4ocGF5bG9hZDogYW55LCBjYjogVmFsaWRhdG9yQ2FsbGJhY2tBc3luYzxUPiB8IFQpOiBQcm9taXNlPHYuSW5mZXJPdXRwdXQ8VD4+O1xuICAgIGlzVmFsaWQ8VCBleHRlbmRzIFZhbGlib3RTY2hlbWE+KHBheWxvYWQ6IGFueSwgY2I6IFZhbGlkYXRlUGF5bG9hZDxUPik6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVJZChwcmVmaXg/OiBzdHJpbmcpOiBzdHJpbmc7XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmbGF0dGVuKG9iajogYW55LCBwcmVmaXg/OiBzdHJpbmcsIHJlcz86IGFueSk6IFJlY29yZDxzdHJpbmcsIGFueT47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmZsYXR0ZW4ob2JqOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoYnl0ZXM6IG51bWJlciwgZGVjaW1hbHM/OiBudW1iZXIpOiBzdHJpbmc7XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZVVybFBhcmFtcyhyb3V0ZVBhdGg6IHN0cmluZywgcmVxdWVzdFBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYXJzZVVybFF1ZXJ5KHJlcXVlc3RQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuIiwiaW50ZXJmYWNlIFRyeWVyIHtcbiAgICAoLi4uYXJnczogYW55W10pOiBhbnk7XG59XG5pbnRlcmZhY2UgVHJ5ZXJBc3luYyB7XG4gICAgKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxhbnk+IHwgYW55O1xufVxudHlwZSBUcnlDYXRjaFJlc3VsdDxUIGV4dGVuZHMgVHJ5ZXI+ID0gW251bGwsIFJldHVyblR5cGU8VD5dIHwgW0Vycm9yLCBudWxsXTtcbnR5cGUgVHJ5Q2F0Y2hBc3luY1Jlc3VsdDxUIGV4dGVuZHMgVHJ5ZXJBc3luYz4gPSBbbnVsbCwgQXdhaXRlZDxSZXR1cm5UeXBlPFQ+Pl0gfCBbRXJyb3IsIG51bGxdO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdHJ5Q2F0Y2g8VCBleHRlbmRzIFRyeWVyQXN5bmM+KHRyeWVyOiBUKTogUHJvbWlzZTxUcnlDYXRjaEFzeW5jUmVzdWx0PFQ+PjtcbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSB0cnlDYXRjaCB7XG4gICAgdmFyIHN5bmM6IDxUIGV4dGVuZHMgVHJ5ZXI+KHRyeWVyOiBUKSA9PiBUcnlDYXRjaFJlc3VsdDxUPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uQXNzaWdubWVudCA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIHBlcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHBlcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgcGVybWlzc2lvbl9pZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBhc3NpZ25hYmxlX3R5cGU6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYXNzaWduYWJsZV9pZDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG59LCB1bmRlZmluZWQ+O1xuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCB0eXBlIFBlcm1pc3Npb24gPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBwZXJtaXNzaW9uU2NoZW1hPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHBlcm1pc3Npb25TY2hlbWE6IHYuT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBpZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBuYW1lOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHYuTnVsbGFibGVTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBhY3Rpb246IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgc3ViamVjdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjb25kaXRpb25zOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1cGRhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGV4cGlyZXNfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG59LCB1bmRlZmluZWQ+O1xuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCB0eXBlIFRva2VuID0gdi5JbmZlck91dHB1dDx0eXBlb2YgdG9rZW5TY2hlbWE+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdG9rZW5TY2hlbWE6IHYuT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBpZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBuYW1lOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdHlwZTogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1c2VyX2lkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHRva2VuOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBleHBpcmVzX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZT86IG51bWJlcik7XG4gICAgc3RhdGljIGZyb21FcnJvcihlcnJvcjogRXJyb3IpOiBCYXNlRXhjZXB0aW9uO1xufVxuIiwiaW1wb3J0IEJhc2VFeGNlcHRpb24gZnJvbSAnLi9CYXNlRXhjZXB0aW9uLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoZWxsRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gICAgb3V0cHV0OiBzdHJpbmc7XG4gICAgYmluOiBzdHJpbmc7XG4gICAgYXJnczogc3RyaW5nW107XG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvdXRwdXQ6IHN0cmluZywgYmluOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKTtcbn1cbiIsImltcG9ydCBWYWxpZGF0b3JTZXJ2aWNlIGZyb20gXCIuLi9zZXJ2aWNlcy9WYWxpZGF0b3JTZXJ2aWNlXCI7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0b3I7XG4iLCJkZWNsYXJlIGNvbnN0IFBlcm1pc3Npb25FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uRW50aXR5IGV4dGVuZHMgUGVybWlzc2lvbkVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW46IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uczogc3RyaW5nIHwgbnVsbCB8IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW47XG4gICAgZ2V0IHBhcnNlZENvbmRpdGlvbnMoKTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgZGVmaW5lQWJpbGl0eSB9IGZyb20gJ0BjYXNsL2FiaWxpdHknO1xuaW1wb3J0IFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2xFbnRpdHkge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBhYmlsaXR5OiBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVBYmlsaXR5PjtcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxBY2xFbnRpdHk+KTtcbiAgICBjYW4oYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW47XG4gICAgY2Fubm90KGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIHN1YmplY3Qoc3ViamVjdDogc3RyaW5nLCBvYmplY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgaW1wb3J0KFwiQGNhc2wvYWJpbGl0eVwiKS5Gb3JjZWRTdWJqZWN0PHN0cmluZz47XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIENvb2tpZU1hcEVudGl0eU9wdGlvbnMge1xuICAgIGNvb2tpZXM/OiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByZWZpeD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvb2tpZU1hcEVudGl0eSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGNvb2tpZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJlZml4OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IENvb2tpZU1hcEVudGl0eU9wdGlvbnMpO1xuICAgIGxvYWQoY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkO1xuICAgIGdldChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsO1xuICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiB2b2lkO1xuICAgIHRvUmVjb3JkKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUVudHJ5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIHR5cGU6ICdmaWxlJyB8ICdkaXJlY3RvcnknO1xuICAgIG1ldGFzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IERyaXZlRW50cnkpO1xufVxuIiwiZGVjbGFyZSBjb25zdCBGaWxlRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlRW50aXR5IGV4dGVuZHMgRmlsZUVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGRyaXZlOiBzdHJpbmc7XG4gICAgbWltZXR5cGU6IHN0cmluZztcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgY2xpZW50X25hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYzogYm9vbGVhbjtcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgbWV0YXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGlzSW1hZ2UoKTogYm9vbGVhbjtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgY29uc3QgVXBsb2FkU2Vzc2lvbl9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBsb2FkU2Vzc2lvbiBleHRlbmRzIFVwbG9hZFNlc3Npb25fYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgbWltZV90eXBlczogc3RyaW5nO1xuICAgIG1heF9zaXplOiBudW1iZXI7XG4gICAgdXBsb2FkX3VybD86IHN0cmluZztcbiAgICBjcmVhdGVfZmlsZV91cmw/OiBzdHJpbmc7XG4gICAgZ2V0UGFyc2VkTWltZVR5cGVzKCk6IHN0cmluZ1tdO1xuICAgIGlzQWxsb3dlZE1pbWVUeXBlKG1pbWVUeXBlOiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGlzQWxsb3dlZFNpemUoc2l6ZTogbnVtYmVyKTogYm9vbGVhbjtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29va2llTWFwRW50aXR5T3B0aW9ucyB7XG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc2V0SGVhZGVyPzogKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhlYWRlck1hcEVudGl0eSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGVudHJpZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgc2V0SGVhZGVyPzogKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogQ29va2llTWFwRW50aXR5T3B0aW9ucyk7XG4gICAgbG9hZEZyb21SZWNvcmQoY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gICAgZ2V0KG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGw7XG4gICAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlTWFuaWZlc3RCdWlsZEltcG9ydCB7XG4gICAgZnJvbTogc3RyaW5nO1xuICAgIHRvPzogc3RyaW5nO1xuICAgIHR5cGU6ICdnbG9iYWxfaW1wb3J0Jztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlTWFuaWZlc3RCdWlsZCB7XG4gICAgaW1wb3J0cz86IE1vZHVsZU1hbmlmZXN0QnVpbGRJbXBvcnRbXTtcbn1cbmRlY2xhcmUgY29uc3QgTW9kdWxlTWFuaWZlc3RfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGVNYW5pZmVzdCBleHRlbmRzIE1vZHVsZU1hbmlmZXN0X2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhvcj86IHN0cmluZztcbiAgICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGJ1aWxkPzogTW9kdWxlTWFuaWZlc3RCdWlsZDtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSBNb2R1bGVNYW5pZmVzdCBmcm9tICcuL01vZHVsZU1hbmlmZXN0RW50aXR5LnRzJztcbmltcG9ydCBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbnRlcmZhY2UgTW9kdWxlVXBncmFkZUluZm8ge1xuICAgIHNvdXJjZTogJ2dpdCcgfCAnemlwJztcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5kZWNsYXJlIGNvbnN0IE1vZHVsZV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3Rvcjx7fT4gJiB0eXBlb2YgTGlmZWN5Y2xlSG9vaztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZSBleHRlbmRzIE1vZHVsZV9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBidWlsZDogTW9kdWxlTWFuaWZlc3RbJ2J1aWxkJ107XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgdXBncmFkZV9pbmZvPzogTW9kdWxlVXBncmFkZUluZm87XG4gICAgc2V0RGF0YShkYXRhOiBQYXJ0aWFsPE1vZHVsZSB8IE1vZHVsZU1hbmlmZXN0Pik6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0aW9uRW50aXR5PFQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgaXRlbXM6IFRbXTtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJfcGFnZTogbnVtYmVyO1xuICAgIHRvdGFsX3BhZ2VzOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGFydGlhbDxQYWdpbmF0aW9uRW50aXR5Pik7XG4gICAgc3RhdGljIGZyb208VCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHBheWxvYWQ6IFBhcnRpYWw8UGFnaW5hdGlvbkVudGl0eTxUPj4pOiBQYWdpbmF0aW9uRW50aXR5PFQ+O1xufVxuIiwiZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRpdHlfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJkZWNsYXJlIGNvbnN0IFJvbGVfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBkZWxldGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvbGUgZXh0ZW5kcyBSb2xlX2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgUGVybWlzc2lvbiBmcm9tICcuL1Blcm1pc3Npb25FbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgUm9sZSBmcm9tICcuL1JvbGVFbnRpdHkudHMnO1xuZGVjbGFyZSBjb25zdCBVc2VyRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyRW50aXR5IGV4dGVuZHMgVXNlckVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGVtYWlsOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgdmVyaWZpZWRfYXQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25bXTtcbiAgICByb2xlcz86IFJvbGVbXTtcbiAgICBnZXQgaW5pdGlhbHMoKTogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBLFFBQVU7Q0FBQTtPQUFNLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBSSxnQkFBVztDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RmLElBQUksZ0JBQWM7Q0FBQztFQUFFLE1BQU0sQ0FBQyxFQUFFO0NBQUM7RUFBQTtFQUFNO0VBQUU7RUFBSztDQUFDO0FBQzdDLElBQUksV0FBVztDQUFDO09BQVMsQ0FBQSxjQUFTO0NBQUEsQ0FBQSxHQUFBO0NBQVc7QUFDN0MsSUFBQSxtQkFBcUI7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFpQjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGdEMsSUFBQSxnQkFBb0I7Q0FBQztPQUFBLENBQUEsY0FBYztDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ25DLElBQUEsa0JBQVU7Q0FBQTtPQUFnQixFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksWUFBVTtDQUFBO09BQUEsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDZCxJQUFJLG9CQUFhO0NBQUE7T0FBQSxDQUFBLFVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2pCLElBQUkseUJBQThCO0NBQUc7T0FBQSxDQUFBLGNBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDckMsSUFBSSxrQkFBa0I7Q0FBQztFQUFJLEdBQUEsV0FBYztFQUFDO0VBQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTDlDLElBQUEsZ0JBQW9CO0NBQUM7T0FBQTtFQUFBO0VBQWM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQW5DLElBQVcsc0JBQXNCO0NBQUM7RUFBSSxNQUFFLENBQUEsR0FBTyxFQUFDO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUc7RUFBSztFQUFFO0NBQUE7QUFDOUUsSUFBVyxZQUFZO0NBQUM7RUFBRyxHQUFBLE1BQVE7RUFBQTtFQUFPO0VBQUc7RUFBQztFQUFRO0VBQUc7RUFBRTtFQUFPO0VBQVE7Q0FBRTtFQUFDO0VBQUM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM5RSxJQUFXLGFBQWE7Q0FBQztFQUFHLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDVCLElBQVcsV0FBVztDQUFDO09BQVEsRUFBSTtDQUFFLENBQUEsR0FBSTtDQUFDO0FBQzFDLElBQVcsY0FBYztDQUFDO0VBQUksTUFBSSxDQUFBLEVBQUk7Q0FBRTtFQUFDO0VBQUM7RUFBTTtFQUFJO0NBQUM7QUFDckQsSUFBVyxRQUFRO0NBQUM7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