@sidekick-coder/zenith-kit 0.3.3 → 0.3.4

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.
@@ -1,1176 +0,0 @@
1
- import * as _$vue_sonner0 from "vue-sonner";
2
- import * as v from "valibot";
3
- import * as _$_casl_ability0 from "@casl/ability";
4
- import { defineAbility } from "@casl/ability";
5
- import * as VueRouter from "vue-router";
6
- import { NavigationGuard, RouteLocationNormalized, RouteLocationNormalizedGeneric, RouteRecordRaw, Router as Router$1 } from "vue-router";
7
- import * as _$vue from "vue";
8
- import { ComputedRef, DefineComponent, MaybeRef, MaybeRefOrGetter, Ref, getCurrentInstance, inject } from "vue";
9
- import { toTypedSchema as toTypedSchema$1 } from "@vee-validate/valibot";
10
- import * as VeeValidate from "vee-validate";
11
- import { FormContext, FormOptions, GenericObject } from "vee-validate";
12
- import * as UnheadVue from "@unhead/vue";
13
- import { useRouteQuery as useRouteQuery$1 } from "@vueuse/router";
14
- import { ClassValue } from "clsx";
15
- import { ClassNameValue } from "tailwind-merge";
16
-
17
- //#region src/shared/utils/compose.d.ts
18
- type Constructor$1<T = {}> = new (...args: any[]) => T;
19
- //#endregion
20
- //#region src/shared/entities/PermissionEntity.d.ts
21
- declare const PermissionEntity_base: {
22
- new (...args: any[]): {
23
- merge(data: Partial< /*elided*/any>): /*elided*/any;
24
- };
25
- from<T>(this: new () => T, data: Partial<T>): T;
26
- } & Constructor$1;
27
- declare class PermissionEntity extends PermissionEntity_base {
28
- id: number;
29
- name: string;
30
- description: string | null;
31
- origin: string;
32
- subject: string;
33
- action: string;
34
- conditions: string | null | Record<string, any>;
35
- get editable(): boolean;
36
- get parsedConditions(): any;
37
- }
38
- //#endregion
39
- //#region src/shared/entities/RoleEntity.d.ts
40
- declare const Role_base: {
41
- new (...args: any[]): {
42
- merge(data: Partial< /*elided*/any>): /*elided*/any;
43
- };
44
- from<T>(this: new () => T, data: Partial<T>): T;
45
- } & Constructor$1 & {
46
- new (...args: any[]): {
47
- created_at: Date | string;
48
- updated_at: Date | string;
49
- };
50
- } & {
51
- new (...args: any[]): {
52
- deleted_at: Date | string | null;
53
- };
54
- };
55
- declare class Role extends Role_base {
56
- id: number;
57
- name: string;
58
- description?: string;
59
- }
60
- //#endregion
61
- //#region src/shared/entities/UserEntity.d.ts
62
- declare const UserEntity_base: {
63
- new (...args: any[]): {
64
- merge(data: Partial< /*elided*/any>): /*elided*/any;
65
- };
66
- from<T>(this: new () => T, data: Partial<T>): T;
67
- } & Constructor$1 & {
68
- new (...args: any[]): {
69
- created_at: Date | string;
70
- updated_at: Date | string;
71
- };
72
- } & {
73
- new (...args: any[]): {
74
- deleted_at: Date | string | null;
75
- };
76
- };
77
- declare class UserEntity extends UserEntity_base {
78
- id: number;
79
- email: string;
80
- name: string;
81
- username: string;
82
- password?: string;
83
- verified_at?: Date | string | null;
84
- permissions?: PermissionEntity[];
85
- roles?: Role[];
86
- get initials(): string;
87
- }
88
- //#endregion
89
- //#region src/client/services/AuthService.d.ts
90
- interface LogoutOptions {
91
- redirect?: string;
92
- }
93
- declare class AuthService {
94
- static __container_entry_key: string;
95
- user: UserEntity | null;
96
- constructor(data?: Partial<AuthService>);
97
- logout(options?: LogoutOptions): Promise<void>;
98
- }
99
- //#endregion
100
- //#region src/client/services/FetchService.d.ts
101
- interface FetchOptions extends RequestInit {
102
- query?: Record<string, any>;
103
- data?: Record<string, any>;
104
- }
105
- declare class FetchService {
106
- static __container_entry_key: string;
107
- protected handleError(response: Response): Promise<any>;
108
- protected buildUrl(url: string, query?: Record<string, any>): string;
109
- protected buildRequestInit(options: FetchOptions): RequestInit;
110
- protected parseResponse<T>(response: Response): Promise<T>;
111
- fetch<T>(_url: string, _options?: FetchOptions): Promise<T>;
112
- try<T = any>(url: string, options?: FetchOptions): Promise<[Error, null] | [null, Awaited<T>]>;
113
- get<T = any>(url: string, options?: FetchOptions): Promise<T>;
114
- post<T = any>(url: string, options?: FetchOptions): Promise<T>;
115
- put<T = any>(url: string, options?: FetchOptions): Promise<T>;
116
- delete<T = any>(url: string, options?: FetchOptions): Promise<T>;
117
- }
118
- //#endregion
119
- //#region src/client/services/FetchBrowserService.d.ts
120
- declare class FetchBrowserService extends FetchService {
121
- fetch<T>(url: string, options?: FetchOptions): Promise<T>;
122
- }
123
- //#endregion
124
- //#region src/client/services/FetchNodeService.d.ts
125
- declare class FetchNodeService extends FetchService {
126
- fetch<T>(url: string, options?: FetchOptions): Promise<T>;
127
- protected fetchExternal<T>(url: string, options?: FetchOptions): Promise<T>;
128
- protected fetchInternal<T>(url: string, options?: FetchOptions): Promise<T>;
129
- }
130
- //#endregion
131
- //#region src/client/services/LayoutService.d.ts
132
- declare class LayoutService {
133
- static __container_entry_key: string;
134
- components: Map<string, DefineComponent>;
135
- options: Record<string, any>;
136
- currendId: string | null;
137
- setCurrent(id: string): void;
138
- add(name: string, component: DefineComponent, options?: any): void;
139
- has(name: string): boolean;
140
- get(name: string): DefineComponent;
141
- getOptions(): Record<string, any>;
142
- getCurrent(): DefineComponent | null;
143
- setOptions(options?: any): void;
144
- }
145
- //#endregion
146
- //#region src/shared/services/LoggerService.d.ts
147
- declare class LoggerService {
148
- static __container_entry_key: string;
149
- info(message: string, meta?: any): void;
150
- debug(message: string, meta?: any): void;
151
- warn(message: string, meta?: any): void;
152
- error(message: string | Error, meta?: any): void;
153
- child(options: any): LoggerService;
154
- }
155
- //#endregion
156
- //#region src/shared/entities/LifecycleHook.d.ts
157
- declare class LifecycleHook {
158
- hook_id: string;
159
- hook_aliases?: string[];
160
- order?: number;
161
- subhooks?: LifecycleHook[];
162
- register(): Promise<void>;
163
- load(): Promise<void>;
164
- boot(): Promise<void>;
165
- shutdown(): Promise<void>;
166
- /** @deprecated Use register */
167
- onRegister(): Promise<void>;
168
- /** @deprecated Use load */
169
- onLoad(): Promise<void>;
170
- /** @deprecated Use boot */
171
- onBoot(): Promise<void>;
172
- /** @deprecated Use shutdown */
173
- onShutdown(): Promise<void>;
174
- }
175
- //#endregion
176
- //#region src/shared/services/LifecycleService.d.ts
177
- type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
178
- interface ListOptions {
179
- include?: string | string[];
180
- exclude?: string | string[];
181
- }
182
- interface LifecycleServiceOptions {
183
- debug?: boolean;
184
- hooks?: Map<string, LifecycleHook>;
185
- logger?: LoggerService;
186
- onError?: (error: Error, context: {
187
- hookId: string;
188
- method: LifecycleMethod;
189
- }) => void;
190
- }
191
- declare class LifecycleService$1 {
192
- static __container_entry_key: string;
193
- hooks: Map<string, LifecycleHook>;
194
- logger: LoggerService;
195
- debug: boolean;
196
- constructor(data?: LifecycleServiceOptions);
197
- setOnError(handler: Required<LifecycleServiceOptions>['onError']): void;
198
- onError(error: Error, context: {
199
- hookId: string;
200
- method: LifecycleMethod;
201
- }): void;
202
- mapAliases(args: string[]): string[];
203
- list(options?: ListOptions): LifecycleHook[];
204
- add(...payload: (LifecycleHook | Constructor$1<LifecycleHook>)[]): void;
205
- emitMethod(method: LifecycleMethod, options?: ListOptions): Promise<void>;
206
- emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions): Promise<void>;
207
- on(method: LifecycleMethod, handler: () => Promise<void>): void;
208
- register(options?: ListOptions): Promise<void>;
209
- load(options?: ListOptions): Promise<void>;
210
- boot(options?: ListOptions): Promise<void>;
211
- shutdown(options?: ListOptions): Promise<void>;
212
- clear(): void;
213
- }
214
- //#endregion
215
- //#region src/client/services/LifecycleService.d.ts
216
- declare class LifecycleService extends LifecycleService$1 {
217
- addImports(imports: Record<string, any>): void;
218
- }
219
- //#endregion
220
- //#region src/client/entities/MenuItemEntity.d.ts
221
- declare const MenuItem_base: {
222
- new (...args: any[]): {
223
- merge(data: Partial< /*elided*/any>): /*elided*/any;
224
- };
225
- from<T>(this: new () => T, data: Partial<T>): T;
226
- } & Constructor$1;
227
- declare class MenuItem$1 extends MenuItem_base {
228
- id: string;
229
- label: string;
230
- layout: string;
231
- to?: string;
232
- target?: '_blank' | '_self' | '_parent' | '_top';
233
- group?: string;
234
- order?: number;
235
- icon?: string;
236
- parent?: string;
237
- }
238
- //#endregion
239
- //#region src/client/services/MenuService.d.ts
240
- interface ListFilter {
241
- layout?: string;
242
- group?: string;
243
- parent?: string;
244
- allowed?: boolean;
245
- }
246
- declare class MenuService {
247
- static __container_entry_key: string;
248
- items: Map<string, MenuItem$1>;
249
- add(...item: Omit<Partial<MenuItem$1>, 'merge' | 'from'>[]): void;
250
- remove(id: MenuItem$1['id']): void;
251
- list(filter?: ListFilter): MenuItem$1[];
252
- clear(): void;
253
- }
254
- //#endregion
255
- //#region src/client/services/RouterService.d.ts
256
- interface Router extends Router$1 {
257
- auto: typeof auto;
258
- }
259
- interface AutoOptions {
260
- guards?: NavigationGuard[] | ((record: RouteRecordRaw) => NavigationGuard[]);
261
- strip?: (string | RegExp)[];
262
- exclude?: (string | RegExp)[];
263
- prefix?: string;
264
- refine?: (records: RouteRecordRaw[]) => RouteRecordRaw[];
265
- }
266
- declare function auto(imports: Record<string, DefineComponent | (() => Promise<DefineComponent>)>, options?: AutoOptions): RouteRecordRaw[];
267
- declare function createRouter(): Router;
268
- //#endregion
269
- //#region src/client/services/ToastService.d.ts
270
- declare class ToastService {
271
- static __container_entry_key: string;
272
- success(message: string, options?: Record<string, any>): void;
273
- error(message: string, options?: Record<string, any>): void;
274
- }
275
- //#endregion
276
- //#region node_modules/@vueuse/core/dist/index.d.ts
277
- type UseBreakpointReturn<K$1 extends string = string> = Record<K$1, ComputedRef<boolean>> & {
278
- greaterOrEqual: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
279
- smallerOrEqual: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
280
- greater: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
281
- smaller: (k: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
282
- between: (a: MaybeRefOrGetter<K$1>, b: MaybeRefOrGetter<K$1>) => ComputedRef<boolean>;
283
- isGreater: (k: MaybeRefOrGetter<K$1>) => boolean;
284
- isGreaterOrEqual: (k: MaybeRefOrGetter<K$1>) => boolean;
285
- isSmaller: (k: MaybeRefOrGetter<K$1>) => boolean;
286
- isSmallerOrEqual: (k: MaybeRefOrGetter<K$1>) => boolean;
287
- isInBetween: (a: MaybeRefOrGetter<K$1>, b: MaybeRefOrGetter<K$1>) => boolean;
288
- current: () => ComputedRef<K$1[]>;
289
- active: () => ComputedRef<K$1 | ''>;
290
- };
291
- /**
292
- * Reactively viewport breakpoints
293
- *
294
- * @see https://vueuse.org/useBreakpoints
295
- *
296
- * @__NO_SIDE_EFFECTS__
297
- */
298
- //#endregion
299
- //#region src/client/composables/useBreakpoint.d.ts
300
- declare function useBreakpoints(): UseBreakpointReturn<"sm" | "md" | "lg" | "xl" | "2xl">;
301
- //#endregion
302
- //#region src/client/composables/useColor.d.ts
303
- interface RGB {
304
- r: number;
305
- g: number;
306
- b: number;
307
- }
308
- interface RGBA extends RGB {
309
- a: number;
310
- }
311
- interface HSL {
312
- h: number;
313
- s: number;
314
- l: number;
315
- }
316
- interface OKLCH {
317
- l: number;
318
- c: number;
319
- h: number;
320
- }
321
- declare function extracRGB(color: string): RGB;
322
- declare function extractRGBA(color: string): RGBA;
323
- declare function hexToRGB(hex: string): RGB;
324
- declare function hslToRgb(hsl: string): RGB;
325
- declare function rgbToHsl(r: number, g: number, b: number): HSL;
326
- declare function rgbToHex(r: number, g: number, b: number): string;
327
- declare function rgbaToString(rgba: RGBA): string;
328
- declare function extractOKLCH(color: string): OKLCH;
329
- declare function oklchToRgb(color: string): RGB;
330
- declare function rgbToOklch(r: number, g: number, b: number): OKLCH;
331
- declare function useColorType(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<string | null, string | null>;
332
- declare function useRGB(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<RGB | null, RGB | null>;
333
- declare function useRGBA(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<RGBA | null, RGBA | null>;
334
- declare function useHSL(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<HSL | null, HSL | null>;
335
- declare function useHex(payload?: MaybeRef<string | null | undefined>): _$vue.WritableComputedRef<string | null, string | null>;
336
- declare function useColor(payload?: MaybeRef<string | null | undefined>): {
337
- type: _$vue.WritableComputedRef<string | null, string | null>;
338
- color: _$vue.Ref<string | null | undefined, string | null | undefined>;
339
- hex: _$vue.WritableComputedRef<string | null, string | null>;
340
- rgb: _$vue.WritableComputedRef<RGB | null, RGB | null>;
341
- hsl: _$vue.WritableComputedRef<HSL | null, HSL | null>;
342
- oklch: _$vue.WritableComputedRef<OKLCH | null, OKLCH | null>;
343
- rgba: _$vue.WritableComputedRef<RGBA | null, RGBA | null>;
344
- };
345
- //#endregion
346
- //#region src/shared/services/EmmitterService.d.ts
347
- interface EmmitterListenerOptions {
348
- event: string;
349
- }
350
- interface EmmitterListener {
351
- (data: any, options: EmmitterListenerOptions): void;
352
- }
353
- interface EmmitterHandler {
354
- id: string;
355
- event: string;
356
- listener: EmmitterListener;
357
- originalListener?: EmmitterListener;
358
- }
359
- interface OnOptions {
360
- id?: string;
361
- unique?: boolean;
362
- }
363
- interface OnDebounceOptions extends OnOptions {
364
- debounce?: number;
365
- }
366
- interface EmmitterServiceOptions {
367
- debug?: boolean;
368
- logger?: LoggerService;
369
- }
370
- declare class EmmitterService<Events extends Record<string, any> = Record<string, any>> {
371
- static __container_entry_key: string;
372
- handlers: EmmitterHandler[];
373
- debug: boolean;
374
- logger: LoggerService;
375
- constructor(options?: EmmitterServiceOptions);
376
- static create<Events extends Record<string, any> = Record<string, any>>(options?: EmmitterServiceOptions): EmmitterService<Events>;
377
- setDebug(debug: boolean): void;
378
- setLogger(logger: LoggerService): void;
379
- on<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
380
- on(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
381
- once<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
382
- once(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
383
- onDebounce<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnDebounceOptions): EmmitterHandler;
384
- onDebounce(event: string, listener: (args: any) => void, options?: OnDebounceOptions): EmmitterHandler;
385
- onAnyOf<K extends keyof Events>(events: K[], listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler[];
386
- onAnyOf(events: string[], listener: (args: any) => void, options?: OnOptions): EmmitterHandler[];
387
- off(event: string, listener: EmmitterHandler['listener']): void;
388
- emit<K extends keyof Events>(event: K, args: Events[K]): void;
389
- emit(event: string, args?: any): void;
390
- emitAndWait<K extends keyof Events>(event: K, args: Events[K]): Promise<void>;
391
- emitAndWait(event: string, args?: any): Promise<void>;
392
- list(): EmmitterHandler[];
393
- listByEvent(event: string): EmmitterHandler[];
394
- remove(payload: string | string[]): void;
395
- clear(): void;
396
- hasHandlers(): boolean;
397
- }
398
- //#endregion
399
- //#region src/client/entities/DashboardWidgetData.d.ts
400
- interface DashboardGridUnit {
401
- base?: number;
402
- sm?: number;
403
- md?: number;
404
- lg?: number;
405
- xl?: number;
406
- }
407
- declare class DashboardWidgetData {
408
- id: string;
409
- name: string;
410
- definition_id: string;
411
- columns: DashboardGridUnit;
412
- rows: DashboardGridUnit;
413
- x: DashboardGridUnit;
414
- y: DashboardGridUnit;
415
- order: number;
416
- options: Record<string, any>;
417
- constructor(data: Partial<DashboardWidgetData>);
418
- }
419
- //#endregion
420
- //#region src/client/entities/DashboardWidgetDefinition.d.ts
421
- interface DashboardWidgetAction {
422
- props?: Record<string, any>;
423
- component: any;
424
- }
425
- declare class DashboardWidgetDefinition {
426
- id: string;
427
- name: string;
428
- description?: string;
429
- icon?: string;
430
- constructor();
431
- component(): any;
432
- actions(): DashboardWidgetAction[];
433
- }
434
- //#endregion
435
- //#region src/client/entities/DashboardWidget.d.ts
436
- declare const DASHBOARD_ROW_HEIGHT = 80;
437
- interface DashboardWidgetOptions {
438
- data: DashboardWidgetData;
439
- definition: DashboardWidgetDefinition;
440
- }
441
- interface StylesOptions {
442
- contianerWidth: number;
443
- breakpoint?: 'base' | 'sm' | 'md' | 'xl';
444
- }
445
- declare class DashboardWidget {
446
- data: DashboardWidgetData;
447
- definition: DashboardWidgetDefinition;
448
- emmitter: EmmitterService;
449
- constructor({
450
- data,
451
- definition
452
- }: DashboardWidgetOptions);
453
- static fromData(data: DashboardWidgetData): DashboardWidget;
454
- setEmmitter(emmitter: EmmitterService): void;
455
- get id(): string;
456
- get name(): string;
457
- set name(value: string);
458
- get options(): DashboardWidgetData['options'];
459
- get definition_id(): string;
460
- component(): any;
461
- actions(): DashboardWidgetAction[];
462
- get columns(): DashboardWidgetData['columns'];
463
- set columns(payload: DashboardWidgetData['columns']);
464
- get rows(): DashboardWidgetData['rows'];
465
- set rows(payload: DashboardWidgetData['rows']);
466
- get x(): DashboardWidgetData['x'];
467
- set x(payload: DashboardWidgetData['x']);
468
- get y(): DashboardWidgetData['y'];
469
- set y(payload: DashboardWidgetData['y']);
470
- get classes(): string;
471
- computeStyles(options: StylesOptions): string;
472
- update(payload: Partial<DashboardWidgetData>): void;
473
- setOption(key: string, value: any): void;
474
- setX(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
475
- setY(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
476
- setColumn(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
477
- setRow(breakpoint: 'base' | 'sm' | 'md' | 'lg' | 'xl', value?: number | undefined): void;
478
- }
479
- //#endregion
480
- //#region src/shared/validators/urlValidator.d.ts
481
- declare const number: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>;
482
- declare const boolean: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.BooleanSchema<undefined>], undefined>, v.TransformAction<string | boolean, boolean>]>;
483
- declare const date: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, Date>, v.TransformAction<Date, string>]>;
484
- declare const datetime: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, string | null>]>;
485
- declare const array: <T extends v.BaseSchema<any, any, any>>(schema?: T) => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<T, undefined>]>;
486
- declare const arrayNumber: () => v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.BaseSchema<any, any, any>, undefined>]>, v.TransformAction<any[], number[]>]>;
487
- declare const object: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>], undefined>, v.TransformAction<string | {
488
- [x: string]: any;
489
- }, {
490
- [x: string]: any;
491
- }>, v.TransformAction<{
492
- [x: string]: any;
493
- }, Record<string, any>>]>;
494
- declare function url(): v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>], undefined>, v.TransformAction<string | {
495
- [x: string]: any;
496
- }, {
497
- [x: string]: any;
498
- }>, v.TransformAction<{
499
- [x: string]: any;
500
- }, Record<string, any>>]>;
501
- declare namespace url {
502
- var number: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>], undefined>, v.TransformAction<any, number>, v.IntegerAction<number, undefined>]>;
503
- var boolean: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.BooleanSchema<undefined>], undefined>, v.TransformAction<string | boolean, boolean>]>;
504
- var date: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, Date>, v.TransformAction<Date, string>]>;
505
- var datetime: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.DateSchema<undefined>], undefined>, v.TransformAction<string | Date, string | null>]>;
506
- var array: <T extends v.BaseSchema<any, any, any>>(schema?: T) => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<T, undefined>]>;
507
- var arrayNumber: () => v.SchemaWithPipe<readonly [v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>, v.ArraySchema<v.BaseSchema<any, any, any>, undefined>]>, v.TransformAction<any[], number[]>]>;
508
- var object: () => v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>], undefined>, v.TransformAction<string | {
509
- [x: string]: any;
510
- }, {
511
- [x: string]: any;
512
- }>, v.TransformAction<{
513
- [x: string]: any;
514
- }, Record<string, any>>]>;
515
- }
516
- //#endregion
517
- //#region src/shared/validators/keyValueValidator.d.ts
518
- declare const keyValue: () => v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>;
519
- //#endregion
520
- //#region src/shared/validators/paginationValidator.d.ts
521
- interface PaginationParams {
522
- maxLimit?: number;
523
- orderFields?: string[];
524
- }
525
- declare const base: (options?: PaginationParams) => v.ObjectSchema<{
526
- 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>;
527
- 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>;
528
- readonly orderBy: v.NullishSchema<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 []>;
529
- readonly orderDirection: v.NullishSchema<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 []>;
530
- }, undefined>;
531
- declare function pagination(options?: PaginationParams): v.ObjectSchema<{
532
- 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>;
533
- 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>;
534
- readonly orderBy: v.NullishSchema<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 []>;
535
- readonly orderDirection: v.NullishSchema<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 []>;
536
- }, undefined>;
537
- declare namespace pagination {
538
- var base: (options?: PaginationParams) => v.ObjectSchema<{
539
- 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>;
540
- 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>;
541
- readonly orderBy: v.NullishSchema<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 []>;
542
- readonly orderDirection: v.NullishSchema<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 []>;
543
- }, undefined>;
544
- }
545
- declare namespace index_d_exports {
546
- export { PaginationParams, array, arrayNumber, base, boolean, date, datetime, keyValue, number, object, pagination, url };
547
- }
548
- //#endregion
549
- //#region src/shared/services/ValidatorService.d.ts
550
- type Valibot = typeof v & {
551
- extras: typeof index_d_exports;
552
- };
553
- type ValibotSchema = v.BaseSchema<unknown, unknown, v.BaseIssue<unknown>>;
554
- type ValibotObjectSchema = v.ObjectSchema<any, any>;
555
- interface ValidatorCallback<T extends ValibotSchema> {
556
- (_v: Valibot): T;
557
- }
558
- type ValidatorResult<T extends v.BaseSchema<any, any, any>> = v.InferOutput<T>;
559
- type ValidatePayload<T extends ValibotSchema = ValibotSchema> = ValidatorCallback<T> | T;
560
- //#endregion
561
- //#region src/shared/schemas/dashboardSchema.d.ts
562
- type DashboardSchema = ValidatorResult<ReturnType<typeof dashboardSchema>>;
563
- declare function dashboardSchema(): v.ObjectSchema<{
564
- readonly id: v.NumberSchema<undefined>;
565
- readonly name: v.StringSchema<undefined>;
566
- readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
567
- readonly created_at: v.StringSchema<undefined>;
568
- readonly updated_at: v.StringSchema<undefined>;
569
- readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
570
- readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
571
- }, undefined>;
572
- declare namespace dashboardSchema {
573
- var create: Omit<v.ObjectSchema<{
574
- readonly id: v.NumberSchema<undefined>;
575
- readonly name: v.StringSchema<undefined>;
576
- readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
577
- readonly created_at: v.StringSchema<undefined>;
578
- readonly updated_at: v.StringSchema<undefined>;
579
- readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
580
- readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
581
- }, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
582
- readonly entries: Pick<{
583
- readonly id: v.NumberSchema<undefined>;
584
- readonly name: v.StringSchema<undefined>;
585
- readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
586
- readonly created_at: v.StringSchema<undefined>;
587
- readonly updated_at: v.StringSchema<undefined>;
588
- readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
589
- readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
590
- }, "description" | "name">;
591
- readonly "~standard": v.StandardProps<{
592
- description: string | null;
593
- name: string;
594
- }, {
595
- description: string | null;
596
- name: string;
597
- }>;
598
- readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
599
- description: string | null;
600
- name: string;
601
- }, v.ObjectIssue | v.StringIssue>;
602
- readonly "~types"?: {
603
- readonly input: {
604
- description: string | null;
605
- name: string;
606
- };
607
- readonly output: {
608
- description: string | null;
609
- name: string;
610
- };
611
- readonly issue: v.ObjectIssue | v.StringIssue;
612
- } | undefined;
613
- };
614
- var update: Omit<Omit<v.ObjectSchema<{
615
- readonly id: v.NumberSchema<undefined>;
616
- readonly name: v.StringSchema<undefined>;
617
- readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
618
- readonly created_at: v.StringSchema<undefined>;
619
- readonly updated_at: v.StringSchema<undefined>;
620
- readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
621
- readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
622
- }, undefined>, "entries" | "~types" | "~run" | "~standard"> & {
623
- readonly entries: Pick<{
624
- readonly id: v.NumberSchema<undefined>;
625
- readonly name: v.StringSchema<undefined>;
626
- readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
627
- readonly created_at: v.StringSchema<undefined>;
628
- readonly updated_at: v.StringSchema<undefined>;
629
- readonly deleted_at: v.NullableSchema<v.StringSchema<undefined>, undefined>;
630
- readonly metas: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.AnySchema, undefined>, undefined>;
631
- }, "description" | "name">;
632
- readonly "~standard": v.StandardProps<{
633
- description: string | null;
634
- name: string;
635
- }, {
636
- description: string | null;
637
- name: string;
638
- }>;
639
- readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
640
- description: string | null;
641
- name: string;
642
- }, v.ObjectIssue | v.StringIssue>;
643
- readonly "~types"?: {
644
- readonly input: {
645
- description: string | null;
646
- name: string;
647
- };
648
- readonly output: {
649
- description: string | null;
650
- name: string;
651
- };
652
- readonly issue: v.ObjectIssue | v.StringIssue;
653
- } | undefined;
654
- }, "entries" | "~types" | "~run" | "~standard"> & {
655
- readonly entries: {
656
- readonly description: v.OptionalSchema<v.NullableSchema<v.StringSchema<undefined>, undefined>, undefined>;
657
- readonly name: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
658
- };
659
- readonly "~standard": v.StandardProps<{
660
- description?: string | null | undefined;
661
- name?: string | undefined;
662
- }, {
663
- description?: string | null | undefined;
664
- name?: string | undefined;
665
- }>;
666
- readonly "~run": (dataset: v.UnknownDataset, config: v.Config<v.BaseIssue<unknown>>) => v.OutputDataset<{
667
- description?: string | null | undefined;
668
- name?: string | undefined;
669
- }, v.ObjectIssue | v.StringIssue>;
670
- readonly "~types"?: {
671
- readonly input: {
672
- description?: string | null | undefined;
673
- name?: string | undefined;
674
- };
675
- readonly output: {
676
- description?: string | null | undefined;
677
- name?: string | undefined;
678
- };
679
- readonly issue: v.ObjectIssue | v.StringIssue;
680
- } | undefined;
681
- };
682
- }
683
- //#endregion
684
- //#region src/client/entities/Dashboard.d.ts
685
- interface DashboardOptions {
686
- dashboard: DashboardSchema;
687
- widgets?: DashboardWidgetData[];
688
- }
689
- declare class Dashboard {
690
- name: DashboardSchema['name'];
691
- description: DashboardSchema['description'];
692
- widgets: DashboardWidget[];
693
- emmitter: EmmitterService;
694
- containerWidth: number;
695
- constructor();
696
- setName(name: string): this;
697
- setDescription(description: string): this;
698
- setContainerWidth(width: number): this;
699
- setWidgets(widgets: DashboardWidgetData[]): this;
700
- findLastRow(): number;
701
- addWidget(payload?: Partial<DashboardWidgetData>): void;
702
- removeWidget(index: number): void;
703
- removeWidgetById(id: string): void;
704
- updateWidget(index: number, widget: DashboardWidget): void;
705
- duplicateWidget(index: number): void;
706
- }
707
- //#endregion
708
- //#region src/client/composables/useDashboard.d.ts
709
- declare function provideDashboard(entity: Ref<Dashboard>): void;
710
- declare function useDashboard(): Ref<Dashboard>;
711
- //#endregion
712
- //#region src/client/composables/useDashboardWidget.d.ts
713
- declare function provideDashboardWidget(entity: Ref<DashboardWidget>): void;
714
- declare function useDashboardWidget(): Ref<DashboardWidget>;
715
- //#endregion
716
- //#region src/client/composables/useFetchPagination.d.ts
717
- interface UseFetchPaginationOptions {
718
- key?: string;
719
- query?: MaybeRef<Record<string, any>>;
720
- page?: MaybeRef<number>;
721
- serialize?: (item: any) => any;
722
- refine?: (items: any[]) => any[];
723
- limit?: number;
724
- orderBy?: string | string[] | null;
725
- orderDirection?: 'asc' | 'desc' | ('asc' | 'desc')[] | null;
726
- debounce?: number;
727
- immediate?: boolean;
728
- }
729
- declare function useFetchPagination<T = any>(url: string, options?: UseFetchPaginationOptions): {
730
- page: Ref<number, number>;
731
- limit: Ref<number, number>;
732
- orderBy: Ref<string | string[] | null, string | string[] | null>;
733
- orderDirection: Ref<"asc" | "desc" | ("asc" | "desc")[] | null, "asc" | "desc" | ("asc" | "desc")[] | null>;
734
- total: _$vue.ComputedRef<number>;
735
- totalPages: _$vue.ComputedRef<number>;
736
- items: _$vue.ComputedRef<T[]>;
737
- loading: Ref<boolean, boolean>;
738
- load: () => Promise<void>;
739
- reset: () => Promise<void>;
740
- query: Ref<Record<string, any>, Record<string, any>>;
741
- hydrate: () => Promise<void>;
742
- };
743
- //#endregion
744
- //#region src/shared/services/ConfigService.d.ts
745
- interface Entry {
746
- key: string;
747
- value: any;
748
- source: string;
749
- }
750
- declare class ConfigService {
751
- static __container_entry_key: string;
752
- entries: Map<string, Entry>;
753
- constructor();
754
- list(): Entry[];
755
- parseValue(value: any): any;
756
- loadFromRecord(record: Record<string, any>, source?: string): void;
757
- loadFromEntries(entries: [string, any][], source?: string): void;
758
- toRecord(): Record<string, any>;
759
- has(key: string): boolean;
760
- get<T = any | undefined>(key: string, defaultValue?: any): T;
761
- getOne<T = any | undefined>(keys: string[], defaultValue?: any): T;
762
- set(key: string, value: any, source?: string): void;
763
- unset(key: string): void;
764
- clear(): void;
765
- dump(): Record<string, any>;
766
- }
767
- //#endregion
768
- //#region src/shared/services/ContainerService.d.ts
769
- type Constructor<T = object> = new (...args: any[]) => T;
770
- type EntryKey = string | symbol | Constructor;
771
- declare class ContainerService {
772
- private entries;
773
- loadFromRecord(record: Record<string, any>): void;
774
- toRecord(): Record<string, any>;
775
- private getKey;
776
- set(payload: EntryKey, value: any): this;
777
- has(payload: EntryKey): boolean;
778
- get<T>(payload: EntryKey): T;
779
- unset(payload: EntryKey): void;
780
- singleton<T>(classConstructor: Constructor<T>): T;
781
- load(entries: Record<any, any>): void;
782
- proxy<T = unknown>(key: EntryKey): T;
783
- keys(): EntryKey[];
784
- }
785
- //#endregion
786
- //#region src/shared/utils/createId.d.ts
787
- declare function createId(prefix?: string): string;
788
- //#endregion
789
- //#region src/shared/entities/AclEntity.d.ts
790
- declare class AclEntity {
791
- static __container_entry_key: string;
792
- ability: ReturnType<typeof defineAbility>;
793
- permissions: PermissionEntity[];
794
- debug: boolean;
795
- logger: LoggerService;
796
- constructor(data?: Partial<AclEntity>);
797
- can(action: string, subject: any, object?: Record<string, any>): boolean;
798
- cannot(action: string, subject: any, object?: Record<string, any>): boolean;
799
- subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
800
- }
801
- //#endregion
802
- //#region src/shared/entities/ModuleManifestEntity.d.ts
803
- interface ModuleManifestBuildImport {
804
- from: string;
805
- to?: string;
806
- type: 'global_import';
807
- }
808
- interface ModuleManifestBuild {
809
- imports?: ModuleManifestBuildImport[];
810
- }
811
- declare const ModuleManifest_base: {
812
- new (...args: any[]): {
813
- merge(data: Partial< /*elided*/any>): /*elided*/any;
814
- };
815
- from<T>(this: new () => T, data: Partial<T>): T;
816
- } & Constructor$1;
817
- declare class ModuleManifest extends ModuleManifest_base {
818
- id: string;
819
- name: string;
820
- version: string;
821
- description?: string;
822
- enabled: boolean;
823
- author?: string;
824
- dependencies?: Record<string, string>;
825
- build?: ModuleManifestBuild;
826
- [key: string]: any;
827
- }
828
- //#endregion
829
- //#region src/shared/entities/ModuleEntity.d.ts
830
- interface ModuleUpgradeInfo {
831
- source: 'git' | 'zip';
832
- [key: string]: any;
833
- }
834
- declare const Module_base$1: {
835
- new (...args: any[]): {
836
- merge(data: Partial< /*elided*/any>): /*elided*/any;
837
- };
838
- from<T>(this: new () => T, data: Partial<T>): T;
839
- } & Constructor$1 & Constructor$1<{}> & typeof LifecycleHook;
840
- declare class Module$1 extends Module_base$1 {
841
- id: string;
842
- name: string;
843
- enabled: boolean;
844
- dependencies: Record<string, any>;
845
- build: ModuleManifest['build'];
846
- directory: string;
847
- upgrade_info?: ModuleUpgradeInfo;
848
- setData(data: Partial<Module$1 | ModuleManifest>): void;
849
- }
850
- //#endregion
851
- //#region src/shared/entities/PluginEntity.d.ts
852
- declare const PluginEntity_base$1: {
853
- new (...args: any[]): {
854
- merge(data: Partial< /*elided*/any>): /*elided*/any;
855
- };
856
- from<T>(this: new () => T, data: Partial<T>): T;
857
- } & Constructor$1;
858
- declare class PluginEntity$1 extends PluginEntity_base$1 {
859
- id: string;
860
- name: string;
861
- version: string;
862
- enabled: boolean;
863
- aliases: string[];
864
- version_channel: string;
865
- version_available_channels: string[];
866
- }
867
- //#endregion
868
- //#region src/client/composables/useForm.d.ts
869
- interface ValibotFormOptions<T extends ValibotSchema = ValibotSchema> extends Omit<FormOptions<ValidatePayload<T>, ValidatorResult<T>>, 'validationSchema'> {}
870
- interface ValibotFormResultObject<T extends ValibotObjectSchema> extends GenericObject, FormContext<ValidatorResult<T>> {}
871
- declare const useForm: typeof useValibotForm;
872
- declare const toTypedSchema: typeof toTypedSchema$1;
873
- declare function useValibotForm<T extends ValibotObjectSchema = ValibotObjectSchema>(schema: T, options?: ValibotFormOptions<T>): FormContext<ValidatorResult<T>>;
874
- //#endregion
875
- //#region src/client/facades/unheadVue.d.ts
876
- declare const UNHEAD_VUE_CONTAINER_KEY = "unhead-vue";
877
- declare const unheadVue: typeof UnheadVue;
878
- //#endregion
879
- //#region src/client/composables/useHead.d.ts
880
- declare const useHead: typeof unheadVue.useHead;
881
- //#endregion
882
- //#region src/client/composables/useLayoutOptions.d.ts
883
- declare function useLayoutOptions(): _$vue.Ref<any, any>;
884
- //#endregion
885
- //#region src/client/composables/useLoading.d.ts
886
- interface Options {
887
- timeout?: number;
888
- }
889
- interface LoadingRef extends Ref<boolean> {
890
- set: (value: boolean) => void;
891
- }
892
- declare function useLoading(defaultValue?: boolean, options?: Options): LoadingRef;
893
- //#endregion
894
- //#region src/client/composables/useMenu.d.ts
895
- interface MenuBase {
896
- id: string;
897
- label: string;
898
- order?: number;
899
- }
900
- interface MenuSingle extends MenuBase {
901
- icon: string;
902
- to: string;
903
- target?: '_blank' | '_self' | '_parent' | '_top';
904
- }
905
- interface MenuWithChildren extends MenuBase {
906
- icon: string;
907
- children: Omit<MenuSingle, 'icon'>[];
908
- }
909
- interface MenuGroup extends MenuBase {
910
- group: boolean;
911
- items: MenuItem[];
912
- }
913
- interface MenuItem {
914
- id: string;
915
- label: string;
916
- to?: string;
917
- target?: '_blank' | '_self' | '_parent' | '_top';
918
- group?: string;
919
- order?: number;
920
- icon?: string;
921
- parent?: string;
922
- layout?: string;
923
- }
924
- type UseMenu = ReturnType<typeof useMenu>;
925
- declare function useMenu(): {
926
- items: _$vue.ComputedRef<{
927
- id: string;
928
- label: string;
929
- to?: string | undefined;
930
- target?: "_blank" | "_self" | "_parent" | "_top" | undefined;
931
- group?: string | undefined;
932
- order?: number | undefined;
933
- icon?: string | undefined;
934
- parent?: string | undefined;
935
- layout?: string | undefined;
936
- }[]>;
937
- add: (...item: MenuItem[]) => void;
938
- remove: (item: MenuItem | MenuItem["id"]) => void;
939
- removeGroup: (groupId: string) => void;
940
- removeMany: (itemIds: string[]) => void;
941
- removeManyGroup: (groupIds: string[]) => void;
942
- clear: () => void;
943
- };
944
- //#endregion
945
- //#region src/client/composables/useRouteQuery.d.ts
946
- declare const useRouteQuery: typeof useRouteQuery$1;
947
- //#endregion
948
- //#region src/client/composables/useState.d.ts
949
- interface UseStateOptions {
950
- default?: () => any;
951
- transform?: (value: any) => any;
952
- }
953
- declare function useState<T>(key: string, options?: UseStateOptions): Ref<T>;
954
- //#endregion
955
- //#region src/client/facades/acl.d.ts
956
- declare const acl: AclEntity;
957
- //#endregion
958
- //#region src/client/facades/auth.d.ts
959
- declare const auth: AuthService;
960
- //#endregion
961
- //#region src/client/facades/config.d.ts
962
- declare const config: ConfigService;
963
- //#endregion
964
- //#region src/client/facades/container.d.ts
965
- declare const _default: ContainerService;
966
- //#endregion
967
- //#region src/client/registry/DashboardWidgetRegistry.d.ts
968
- declare class DashboardWidgetRegistry {
969
- static __container_entry_key: string;
970
- private definitions;
971
- register(...definition: DashboardWidgetDefinition[]): void;
972
- get(id: string): DashboardWidgetDefinition | null;
973
- list(): DashboardWidgetDefinition[];
974
- }
975
- //#endregion
976
- //#region src/client/facades/dashboardRegistry.d.ts
977
- declare const dashboardRegistry: DashboardWidgetRegistry;
978
- //#endregion
979
- //#region src/client/facades/emmitter.d.ts
980
- declare const emmitter: EmmitterService<Record<string, any>>;
981
- //#endregion
982
- //#region src/client/facades/fetcher.d.ts
983
- declare const fetcher: FetchService;
984
- //#endregion
985
- //#region src/client/facades/layout.d.ts
986
- declare const layout: any;
987
- //#endregion
988
- //#region src/client/facades/lifecycle.d.ts
989
- declare const lifecycle: LifecycleService;
990
- //#endregion
991
- //#region src/client/facades/logger.d.ts
992
- declare const logger: LoggerService;
993
- //#endregion
994
- //#region src/client/facades/menu.d.ts
995
- declare const menu: MenuService;
996
- //#endregion
997
- //#region src/client/facades/route.d.ts
998
- declare const route: RouteLocationNormalizedGeneric;
999
- //#endregion
1000
- //#region src/client/facades/router.d.ts
1001
- declare const router: Router;
1002
- //#endregion
1003
- //#region src/client/facades/toast.d.ts
1004
- declare const toast: ToastService;
1005
- //#endregion
1006
- //#region src/client/facades/veeValidate.d.ts
1007
- declare const VEE_VALIDATE_CONTAINER_KEY = "vee-validate";
1008
- declare const veeValidate: typeof VeeValidate;
1009
- //#endregion
1010
- //#region src/client/facades/vue.d.ts
1011
- declare const VUE_CONTAINER_KEY = "Vue";
1012
- declare const vue: typeof _$vue;
1013
- //#endregion
1014
- //#region src/client/facades/vueRouter.d.ts
1015
- declare const VUE_ROUTER_CONTAINER_KEY = "VueRouter";
1016
- declare const vueRouter: typeof VueRouter;
1017
- //#endregion
1018
- //#region src/client/entities/DashboardWidgetDefinitionChart.d.ts
1019
- /**
1020
- * Component to be used for chart widgets in the dashboard.
1021
- * Plugins can extend this class to create their own chart widgets.
1022
- * @example
1023
- * class MyChartWidget extends DashboardWidgetDefinitionChart {
1024
- * constructor() {
1025
- * super()
1026
- * this.name = 'My Chart Widget'
1027
- * this.id = 'my-chart-widget'
1028
- * }
1029
- * }
1030
- */
1031
- declare class DashboardWidgetDefinitionChart extends DashboardWidgetDefinition {
1032
- private static renderer;
1033
- constructor();
1034
- static setRenderer(renderer: any): void;
1035
- component(): any;
1036
- chartOptions(payload: DashboardWidgetData['options']): Promise<any>;
1037
- }
1038
- //#endregion
1039
- //#region src/client/entities/ModuleEntity.d.ts
1040
- declare const Module_base: typeof Module$1;
1041
- declare class Module extends Module_base {}
1042
- //#endregion
1043
- //#region src/client/entities/PluginEntity.d.ts
1044
- declare const PluginEntity_base: typeof PluginEntity$1;
1045
- declare class PluginEntity extends PluginEntity_base {
1046
- addPagesFolder(imports: any, options?: AutoOptions): void;
1047
- load(): Promise<void>;
1048
- }
1049
- //#endregion
1050
- //#region src/client/utils/autoPages.d.ts
1051
- /** @deprecated Use auto from RouterService instead */
1052
- declare function autoRoutes(imports: Record<string, DefineComponent | (() => Promise<DefineComponent>)>, options?: AutoOptions): RouteRecordRaw[];
1053
- //#endregion
1054
- //#region src/client/utils/defineColumns.d.ts
1055
- interface DataTableColumn<T extends Record<string, any> = Record<string, any>> {
1056
- id?: string;
1057
- label?: string;
1058
- field?: keyof T | ((row: T) => any) | (string & {});
1059
- sortable?: boolean;
1060
- width?: string | number;
1061
- }
1062
- declare function defineColumns<T extends Record<string, any>>(columns: DataTableColumn<T>[]): DataTableColumn<T>[];
1063
- //#endregion
1064
- //#region src/client/utils/defineFormFields.d.ts
1065
- interface DefineFormField {
1066
- component: 'text-field' | 'textarea' | 'select' | 'autocomplete' | 'switch' | 'file-upload' | 'image-upload' | 'color-picker' | 'string-list-input' | 'json-input' | 'date-picker' | 'hidden';
1067
- [key: string]: any;
1068
- }
1069
- declare function defineFormFields(field: Record<string, DefineFormField>): Record<string, DefineFormField>;
1070
- //#endregion
1071
- //#region src/client/utils/fetcher.d.ts
1072
- /** @deprecated Use fetcher facade */
1073
- declare const $fetch: FetchService;
1074
- //#endregion
1075
- //#region src/client/utils/file.d.ts
1076
- interface PickOptions {
1077
- accept?: string;
1078
- multiple?: boolean;
1079
- }
1080
- type PickResult<T extends PickOptions> = T['multiple'] extends true ? File[] : File | null;
1081
- declare function pick<T extends PickOptions>(options: T): Promise<PickResult<T>>;
1082
- declare function toUint8Array(file: File): Promise<Uint8Array>;
1083
- interface UploadOptions {
1084
- driveId: string;
1085
- file: File;
1086
- directory?: string;
1087
- }
1088
- declare function upload(options: UploadOptions): Promise<any>;
1089
- declare const $file: {
1090
- pick: typeof pick;
1091
- upload: typeof upload;
1092
- toUint8Array: typeof toUint8Array;
1093
- };
1094
- //#endregion
1095
- //#region src/client/utils/parseTo.d.ts
1096
- declare function parseTo(to: string): string;
1097
- //#endregion
1098
- //#region src/client/utils/toast.d.ts
1099
- declare const $toast: ((message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number) & {
1100
- success: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1101
- info: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1102
- warning: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1103
- error: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1104
- custom: (component: _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1105
- message: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1106
- promise: <ToastData>(promise: Promise<ToastData> | (() => Promise<ToastData>), data?: ({
1107
- id?: number | string | undefined;
1108
- icon?: _$vue.Component | undefined;
1109
- toasterId?: string | undefined;
1110
- component?: _$vue.Component | undefined;
1111
- componentProps?: any;
1112
- richColors?: boolean | undefined;
1113
- invert?: boolean | undefined;
1114
- closeButton?: boolean | undefined;
1115
- dismissible?: boolean | undefined;
1116
- duration?: number | undefined;
1117
- important?: boolean | undefined;
1118
- action?: (_$vue_sonner0.Action | _$vue.Component) | undefined;
1119
- cancel?: (_$vue_sonner0.Action | _$vue.Component) | undefined;
1120
- onDismiss?: ((toast: _$vue_sonner0.ToastT) => void) | undefined;
1121
- onAutoClose?: ((toast: _$vue_sonner0.ToastT) => void) | undefined;
1122
- cancelButtonStyle?: _$vue.CSSProperties | undefined;
1123
- actionButtonStyle?: _$vue.CSSProperties | undefined;
1124
- style?: _$vue.CSSProperties | undefined;
1125
- unstyled?: boolean | undefined;
1126
- class?: string | undefined;
1127
- classes?: _$vue_sonner0.ToastClasses | undefined;
1128
- descriptionClass?: string | undefined;
1129
- position?: ("top-left" | "top-right" | "bottom-left" | "bottom-right" | "top-center" | "bottom-center") | undefined;
1130
- closeButtonPosition?: ("top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
1131
- testId?: string | undefined;
1132
- } & {
1133
- loading?: string | _$vue.Component;
1134
- success?: (string | _$vue.Component | ((data: ToastData) => _$vue.Component | string | Promise<_$vue.Component | string>)) | (_$vue_sonner0.PromiseIExtendedResult | ((data: ToastData) => _$vue_sonner0.PromiseIExtendedResult | Promise<_$vue_sonner0.PromiseIExtendedResult>)) | undefined;
1135
- error?: (string | _$vue.Component | ((data: any) => _$vue.Component | string | Promise<_$vue.Component | string>)) | (_$vue_sonner0.PromiseIExtendedResult | ((data: any) => _$vue_sonner0.PromiseIExtendedResult | Promise<_$vue_sonner0.PromiseIExtendedResult>));
1136
- description?: string | _$vue.Component | ((data: any) => _$vue.Component | string | Promise<_$vue.Component | string>);
1137
- finally?: () => void | Promise<void>;
1138
- }) | undefined) => (string & {
1139
- unwrap: () => Promise<ToastData>;
1140
- }) | (number & {
1141
- unwrap: () => Promise<ToastData>;
1142
- }) | {
1143
- unwrap: () => Promise<ToastData>;
1144
- } | undefined;
1145
- dismiss: (id?: number | string) => string | number | undefined;
1146
- loading: (message: string | (() => string | _$vue.Component) | _$vue.Component, data?: _$vue_sonner0.ExternalToast) => string | number;
1147
- } & {
1148
- getHistory: () => (_$vue_sonner0.ToastT<_$vue.Component> | _$vue_sonner0.ToastToDismiss)[];
1149
- getToasts: () => (_$vue_sonner0.ToastT<_$vue.Component> | _$vue_sonner0.ToastToDismiss)[];
1150
- };
1151
- //#endregion
1152
- //#region src/client/utils/twMerge.d.ts
1153
- declare function twMerge(...inputs: ClassNameValue[]): string;
1154
- declare function clsx(...inputs: ClassValue[]): string;
1155
- declare function cn(...inputs: ClassValue[]): string;
1156
- //#endregion
1157
- //#region src/client/guards/authGuard.d.ts
1158
- interface AuthGuardOptions {
1159
- redirect: string | ((to: RouteLocationNormalized) => string);
1160
- exclude?: string[];
1161
- }
1162
- declare function createAuthGuard(options: AuthGuardOptions): NavigationGuard;
1163
- declare const authGuard: NavigationGuard;
1164
- //#endregion
1165
- //#region src/client/guards/guestGuard.d.ts
1166
- interface GuestGuardOptions {
1167
- redirect: string;
1168
- }
1169
- declare function createGuestGuard(options: GuestGuardOptions): () => string | undefined;
1170
- declare const guestGuard: () => string | undefined;
1171
- //#endregion
1172
- //#region src/client/guards/setupGuard.d.ts
1173
- declare const setupGuard: NavigationGuard;
1174
- //#endregion
1175
- export { $fetch, $file, $toast, AuthGuardOptions, AuthService, AutoOptions, DASHBOARD_ROW_HEIGHT, Dashboard, DashboardGridUnit, DashboardOptions, DashboardWidget, DashboardWidgetAction, DashboardWidgetData, DashboardWidgetDefinition, DashboardWidgetDefinitionChart, DashboardWidgetRegistry, DataTableColumn, DefineFormField, FetchBrowserService, FetchNodeService, FetchOptions, FetchService, GuestGuardOptions, HSL, LayoutService, LifecycleService, ListFilter, MenuBase, MenuGroup, MenuItem, MenuItem$1 as MenuItemEntity, MenuService, MenuSingle, MenuWithChildren, Module as ModuleEntity, OKLCH, PluginEntity, RGB, RGBA, Router, ToastService, UNHEAD_VUE_CONTAINER_KEY, UseFetchPaginationOptions, UseMenu, UseStateOptions, VEE_VALIDATE_CONTAINER_KEY, VUE_CONTAINER_KEY, VUE_ROUTER_CONTAINER_KEY, ValibotFormOptions, ValibotFormResultObject, acl, auth, authGuard, auto, autoRoutes, clsx, cn, config, _default as container, createAuthGuard, createGuestGuard, createId, createRouter, dashboardRegistry, defineColumns, defineFormFields, emmitter, extracRGB, extractOKLCH, extractRGBA, fetcher, guestGuard, hexToRGB, hslToRgb, layout, lifecycle, logger, menu, oklchToRgb, parseTo, provideDashboard, provideDashboardWidget, rgbToHex, rgbToHsl, rgbToOklch, rgbaToString, route, router, setupGuard, toTypedSchema, toast, twMerge, unheadVue, useBreakpoints, useColor, useColorType, useDashboard, useDashboardWidget, useFetchPagination, useForm, useHSL, useHead, useHex, useLayoutOptions, useLoading, useMenu, useRGB, useRGBA, useRouteQuery, useState, useValibotForm, veeValidate, vue, vueRouter };
1176
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9jb21wb3NlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1Blcm1pc3Npb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL0F1dGhTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL0ZldGNoU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9zZXJ2aWNlcy9GZXRjaEJyb3dzZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL0ZldGNoTm9kZVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvc2VydmljZXMvTGF5b3V0U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2suZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9zZXJ2aWNlcy9MaWZlY3ljbGVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2VudGl0aWVzL01lbnVJdGVtRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL01lbnVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3NlcnZpY2VzL1JvdXRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvc2VydmljZXMvVG9hc3RTZXJ2aWNlLmQudHMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHZ1ZXVzZS9jb3JlL2Rpc3QvaW5kZXguZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlQnJlYWtwb2ludC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VDb2xvci5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkV2lkZ2V0RGF0YS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9lbnRpdGllcy9EYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2VudGl0aWVzL0Rhc2hib2FyZFdpZGdldC5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC92YWxpZGF0b3JzL3VybFZhbGlkYXRvci5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC92YWxpZGF0b3JzL2tleVZhbHVlVmFsaWRhdG9yLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3ZhbGlkYXRvcnMvcGFnaW5hdGlvblZhbGlkYXRvci5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC92YWxpZGF0b3JzL2luZGV4LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL1ZhbGlkYXRvclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2NoZW1hcy9kYXNoYm9hcmRTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2NvbXBvc2FibGVzL3VzZURhc2hib2FyZC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VEYXNoYm9hcmRXaWRnZXQuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlRmV0Y2hQYWdpbmF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC91dGlscy9jcmVhdGVJZC5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9BY2xFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTW9kdWxlTWFuaWZlc3RFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvTW9kdWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1BsdWdpbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VGb3JtLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvdW5oZWFkVnVlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2NvbXBvc2FibGVzL3VzZUhlYWQuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlTGF5b3V0T3B0aW9ucy5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VMb2FkaW5nLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2NvbXBvc2FibGVzL3VzZU1lbnUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvY29tcG9zYWJsZXMvdXNlUm91dGVRdWVyeS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9jb21wb3NhYmxlcy91c2VTdGF0ZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2FjbC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2F1dGguZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9jb25maWcuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9jb250YWluZXIuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvcmVnaXN0cnkvRGFzaGJvYXJkV2lkZ2V0UmVnaXN0cnkuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9kYXNoYm9hcmRSZWdpc3RyeS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2VtbWl0dGVyLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvZmV0Y2hlci5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2xheW91dC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2xpZmVjeWNsZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL2xvZ2dlci5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL21lbnUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy9yb3V0ZS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL3JvdXRlci5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9mYWNhZGVzL3RvYXN0LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2ZhY2FkZXMvdmVlVmFsaWRhdGUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy92dWUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZmFjYWRlcy92dWVSb3V0ZXIuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbkNoYXJ0LmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2VudGl0aWVzL01vZHVsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvdXRpbHMvYXV0b1BhZ2VzLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3V0aWxzL2RlZmluZUNvbHVtbnMuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvdXRpbHMvZGVmaW5lRm9ybUZpZWxkcy5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC91dGlscy9mZXRjaGVyLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L3V0aWxzL2ZpbGUuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvdXRpbHMvcGFyc2VUby5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC91dGlscy90b2FzdC5kLnRzIiwiLi4vLi4vc3JjL2NsaWVudC91dGlscy90d01lcmdlLmQudHMiLCIuLi8uLi9zcmMvY2xpZW50L2d1YXJkcy9hdXRoR3VhcmQuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZ3VhcmRzL2d1ZXN0R3VhcmQuZC50cyIsIi4uLy4uL3NyYy9jbGllbnQvZ3VhcmRzL3NldHVwR3VhcmQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVuaW9uVG9JbnRlcnNlY3Rpb24gfSBmcm9tICcuL3R5cGluZy50cyc7XG5leHBvcnQgdHlwZSBBbnlDbGFzcyA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueTtcbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuZXhwb3J0IHR5cGUgTWl4aW48VD4gPSAoYmFzZTogQ29uc3RydWN0b3IpID0+IENvbnN0cnVjdG9yPFQ+O1xuLyoqXG4gKiBDb21wb3NlcyBtdWx0aXBsZSBtaXhpbnMgaW50byBhIHNpbmdsZSBjbGFzcyB0aGF0IGNhbiBiZSBleHRlbmRlZC5cbiAqIEFsbG93cyBmb3IgbXVsdGlwbGUgaW5oZXJpdGFuY2UtbGlrZSBiZWhhdmlvciBieSBhcHBseWluZyBtaXhpbnMgc2VxdWVudGlhbGx5LlxuICpcbiAqIEBwYXJhbSBtaXhpbnMgLSBBcnJheSBvZiBtaXhpbiBmdW5jdGlvbnMgdG8gY29tcG9zZVxuICogQHJldHVybnMgQSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IGluY2x1ZGVzIGFsbCBtaXhpbiBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBjb21wb3NlKFRpbWVzdGFtcCwgU29mdERlbGV0ZSkge1xuICogICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gKiAgICAgc3VwZXIoKVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tcG9zZTxNIGV4dGVuZHMgQXJyYXk8KGJhc2U6IENvbnN0cnVjdG9yPGFueT4pID0+IENvbnN0cnVjdG9yPGFueT4+PiguLi5taXhpbnM6IE0pOiBVbmlvblRvSW50ZXJzZWN0aW9uPFJldHVyblR5cGU8TVtudW1iZXJdPj47XG4vKipcbiAqIEFsdGVybmF0aXZlIGNvbXBvc2UgZnVuY3Rpb24gdGhhdCBzdGFydHMgd2l0aCBhIGJhc2UgY2xhc3NcbiAqXG4gKiBAcGFyYW0gYmFzZUNsYXNzIC0gVGhlIGJhc2UgY2xhc3MgdG8gc3RhcnQgd2l0aFxuICogQHBhcmFtIG1peGlucyAtIEFycmF5IG9mIG1peGluIGZ1bmN0aW9ucyB0byBhcHBseVxuICogQHJldHVybnMgQSBjbGFzcyBjb25zdHJ1Y3RvciB0aGF0IGV4dGVuZHMgdGhlIGJhc2UgY2xhc3Mgd2l0aCBhbGwgbWl4aW4gZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBVc2VyIGV4dGVuZHMgY29tcG9zZVdpdGgoQmFzZUVudGl0eSwgVGltZXN0YW1wLCBTb2Z0RGVsZXRlKSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcigpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wb3NlV2l0aDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yLCBNIGV4dGVuZHMgQXJyYXk8KGJhc2U6IENvbnN0cnVjdG9yKSA9PiBDb25zdHJ1Y3Rvcjxhbnk+Pj4oYmFzZUNsYXNzOiBUQmFzZSwgLi4ubWl4aW5zOiBNKTogVEJhc2UgJiBVbmlvblRvSW50ZXJzZWN0aW9uPFJldHVyblR5cGU8TVtudW1iZXJdPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBtaXhpbjxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihTb3VyY2U6IFRCYXNlKTogPFRUYXJnZXQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oVGFyZ2V0OiBUVGFyZ2V0KSA9PiBUVGFyZ2V0ICYgVEJhc2U7XG4iLCJkZWNsYXJlIGNvbnN0IFBlcm1pc3Npb25FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uRW50aXR5IGV4dGVuZHMgUGVybWlzc2lvbkVudGl0eV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW46IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uczogc3RyaW5nIHwgbnVsbCB8IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZ2V0IGVkaXRhYmxlKCk6IGJvb2xlYW47XG4gICAgZ2V0IHBhcnNlZENvbmRpdGlvbnMoKTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBSb2xlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb2xlIGV4dGVuZHMgUm9sZV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIFJvbGUgZnJvbSAnLi9Sb2xlRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgVXNlckVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlckVudGl0eSBleHRlbmRzIFVzZXJFbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIHZlcmlmaWVkX2F0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gICAgcm9sZXM/OiBSb2xlW107XG4gICAgZ2V0IGluaXRpYWxzKCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBVc2VyIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvVXNlckVudGl0eS50cyc7XG5pbnRlcmZhY2UgTG9nb3V0T3B0aW9ucyB7XG4gICAgcmVkaXJlY3Q/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRoU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHVzZXI6IFVzZXIgfCBudWxsO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPEF1dGhTZXJ2aWNlPik7XG4gICAgbG9nb3V0KG9wdGlvbnM/OiBMb2dvdXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgRmV0Y2hPcHRpb25zIGV4dGVuZHMgUmVxdWVzdEluaXQge1xuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZldGNoU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBoYW5kbGVFcnJvcihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPGFueT47XG4gICAgcHJvdGVjdGVkIGJ1aWxkVXJsKHVybDogc3RyaW5nLCBxdWVyeT86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGJ1aWxkUmVxdWVzdEluaXQob3B0aW9uczogRmV0Y2hPcHRpb25zKTogUmVxdWVzdEluaXQ7XG4gICAgcHJvdGVjdGVkIHBhcnNlUmVzcG9uc2U8VD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxUPjtcbiAgICBmZXRjaDxUPihfdXJsOiBzdHJpbmcsIF9vcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgICB0cnk8VCA9IGFueT4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFtFcnJvciwgbnVsbF0gfCBbbnVsbCwgQXdhaXRlZDxUPl0+O1xuICAgIGdldDxUID0gYW55Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IEZldGNoT3B0aW9ucyk6IFByb21pc2U8VD47XG4gICAgcG9zdDxUID0gYW55Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IEZldGNoT3B0aW9ucyk6IFByb21pc2U8VD47XG4gICAgcHV0PFQgPSBhbnk+KHVybDogc3RyaW5nLCBvcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbiAgICBkZWxldGU8VCA9IGFueT4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBGZXRjaE9wdGlvbnMgfSBmcm9tICcuL0ZldGNoU2VydmljZS50cyc7XG5pbXBvcnQgRmV0Y2hTZXJ2aWNlIGZyb20gJy4vRmV0Y2hTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZldGNoQnJvd3NlclNlcnZpY2UgZXh0ZW5kcyBGZXRjaFNlcnZpY2Uge1xuICAgIGZldGNoPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgRmV0Y2hPcHRpb25zIH0gZnJvbSAnLi9GZXRjaFNlcnZpY2UudHMnO1xuaW1wb3J0IEZldGNoU2VydmljZSBmcm9tICcuL0ZldGNoU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZXRjaE5vZGVTZXJ2aWNlIGV4dGVuZHMgRmV0Y2hTZXJ2aWNlIHtcbiAgICBmZXRjaDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IEZldGNoT3B0aW9ucyk6IFByb21pc2U8VD47XG4gICAgcHJvdGVjdGVkIGZldGNoRXh0ZXJuYWw8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBGZXRjaE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICAgIHByb3RlY3RlZCBmZXRjaEludGVybmFsPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxUPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgRGVmaW5lQ29tcG9uZW50IH0gZnJvbSBcInZ1ZVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGF5b3V0U2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGNvbXBvbmVudHM6IE1hcDxzdHJpbmcsIERlZmluZUNvbXBvbmVudD47XG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjdXJyZW5kSWQ6IHN0cmluZyB8IG51bGw7XG4gICAgc2V0Q3VycmVudChpZDogc3RyaW5nKTogdm9pZDtcbiAgICBhZGQobmFtZTogc3RyaW5nLCBjb21wb25lbnQ6IERlZmluZUNvbXBvbmVudCwgb3B0aW9ucz86IGFueSk6IHZvaWQ7XG4gICAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IERlZmluZUNvbXBvbmVudDtcbiAgICBnZXRPcHRpb25zKCk6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZ2V0Q3VycmVudCgpOiBEZWZpbmVDb21wb25lbnQgfCBudWxsO1xuICAgIHNldE9wdGlvbnMob3B0aW9ucz86IGFueSk6IHZvaWQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgd2FybihtZXNzYWdlOiBzdHJpbmcsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGVycm9yKG1lc3NhZ2U6IHN0cmluZyB8IEVycm9yLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICBjaGlsZChvcHRpb25zOiBhbnkpOiBMb2dnZXJTZXJ2aWNlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlSG9vayB7XG4gICAgaG9va19pZDogc3RyaW5nO1xuICAgIGhvb2tfYWxpYXNlcz86IHN0cmluZ1tdO1xuICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIHN1Ymhvb2tzPzogTGlmZWN5Y2xlSG9va1tdO1xuICAgIHJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2UgcmVnaXN0ZXIgKi9cbiAgICBvblJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBsb2FkICovXG4gICAgb25Mb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBib290ICovXG4gICAgb25Cb290KCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBzaHV0ZG93biAqL1xuICAgIG9uU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJy4vTG9nZ2VyU2VydmljZS50cyc7XG5pbXBvcnQgTGlmZWN5Y2xlSG9vayBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2sudHMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG50eXBlIExpZmVjeWNsZU1ldGhvZCA9ICdyZWdpc3RlcicgfCAnbG9hZCcgfCAnYm9vdCcgfCAnc2h1dGRvd24nO1xuaW50ZXJmYWNlIExpc3RPcHRpb25zIHtcbiAgICBpbmNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZXhjbHVkZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGhvb2tzPzogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZVNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBob29rczogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyk7XG4gICAgc2V0T25FcnJvcihoYW5kbGVyOiBSZXF1aXJlZDxMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucz5bJ29uRXJyb3InXSk6IHZvaWQ7XG4gICAgb25FcnJvcihlcnJvcjogRXJyb3IsIGNvbnRleHQ6IHtcbiAgICAgICAgaG9va0lkOiBzdHJpbmc7XG4gICAgICAgIG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kO1xuICAgIH0pOiB2b2lkO1xuICAgIG1hcEFsaWFzZXMoYXJnczogc3RyaW5nW10pOiBzdHJpbmdbXTtcbiAgICBsaXN0KG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IExpZmVjeWNsZUhvb2tbXTtcbiAgICBhZGQoLi4ucGF5bG9hZDogKExpZmVjeWNsZUhvb2sgfCBDb25zdHJ1Y3RvcjxMaWZlY3ljbGVIb29rPilbXSk6IHZvaWQ7XG4gICAgZW1pdE1ldGhvZChtZXRob2Q6IExpZmVjeWNsZU1ldGhvZCwgb3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBlbWl0KHBheWxvYWQ6IExpZmVjeWNsZU1ldGhvZCB8IExpZmVjeWNsZU1ldGhvZFtdLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIG9uKG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kLCBoYW5kbGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZDtcbiAgICByZWdpc3RlcihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBib290KG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgc2h1dGRvd24ob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBjbGVhcigpOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2VMaWZlY3ljbGVTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWZlY3ljbGVTZXJ2aWNlIGV4dGVuZHMgQmFzZUxpZmVjeWNsZVNlcnZpY2Uge1xuICAgIGFkZEltcG9ydHMoaW1wb3J0czogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG59XG4iLCJkZWNsYXJlIGNvbnN0IE1lbnVJdGVtX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVudUl0ZW0gZXh0ZW5kcyBNZW51SXRlbV9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgbGF5b3V0OiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgdGFyZ2V0PzogJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnO1xuICAgIGdyb3VwPzogc3RyaW5nO1xuICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgcGFyZW50Pzogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IE1lbnVJdGVtIGZyb20gJyNjbGllbnQvZW50aXRpZXMvTWVudUl0ZW1FbnRpdHkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBMaXN0RmlsdGVyIHtcbiAgICBsYXlvdXQ/OiBzdHJpbmc7XG4gICAgZ3JvdXA/OiBzdHJpbmc7XG4gICAgcGFyZW50Pzogc3RyaW5nO1xuICAgIGFsbG93ZWQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVudVNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBpdGVtczogTWFwPHN0cmluZywgTWVudUl0ZW0+O1xuICAgIGFkZCguLi5pdGVtOiBPbWl0PFBhcnRpYWw8TWVudUl0ZW0+LCAnbWVyZ2UnIHwgJ2Zyb20nPltdKTogdm9pZDtcbiAgICByZW1vdmUoaWQ6IE1lbnVJdGVtWydpZCddKTogdm9pZDtcbiAgICBsaXN0KGZpbHRlcj86IExpc3RGaWx0ZXIpOiBNZW51SXRlbVtdO1xuICAgIGNsZWFyKCk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25HdWFyZCwgUm91dGVyIGFzIFZ1ZVJvdXRlciB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZVJlY29yZFJhdyB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuaW1wb3J0IHR5cGUgeyBEZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnO1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXIgZXh0ZW5kcyBWdWVSb3V0ZXIge1xuICAgIGF1dG86IHR5cGVvZiBhdXRvO1xufVxuZXhwb3J0IGludGVyZmFjZSBBdXRvT3B0aW9ucyB7XG4gICAgZ3VhcmRzPzogTmF2aWdhdGlvbkd1YXJkW10gfCAoKHJlY29yZDogUm91dGVSZWNvcmRSYXcpID0+IE5hdmlnYXRpb25HdWFyZFtdKTtcbiAgICBzdHJpcD86IChzdHJpbmcgfCBSZWdFeHApW107XG4gICAgZXhjbHVkZT86IChzdHJpbmcgfCBSZWdFeHApW107XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIHJlZmluZT86IChyZWNvcmRzOiBSb3V0ZVJlY29yZFJhd1tdKSA9PiBSb3V0ZVJlY29yZFJhd1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYXV0byhpbXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbmVDb21wb25lbnQgfCAoKCkgPT4gUHJvbWlzZTxEZWZpbmVDb21wb25lbnQ+KT4sIG9wdGlvbnM/OiBBdXRvT3B0aW9ucyk6IFJvdXRlUmVjb3JkUmF3W107XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVSb3V0ZXIoKTogUm91dGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9hc3RTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgc3VjY2VzcyhtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbn1cbiIsImltcG9ydCAqIGFzIF92dWV1c2Vfc2hhcmVkMCBmcm9tIFwiQHZ1ZXVzZS9zaGFyZWRcIjtcbmltcG9ydCB7IEFycmF5YWJsZSwgQXdhaXRhYmxlLCBDb25maWd1cmFibGVFdmVudEZpbHRlciwgQ29uZmlndXJhYmxlRmx1c2gsIENvbmZpZ3VyYWJsZUZsdXNoU3luYywgRXZlbnRIb29rT24sIEZuLCBJc0FueSwgUGF1c2FibGUsIFJlYWRvbmx5UmVmT3JHZXR0ZXIsIFJlbW92YWJsZVJlZiwgU2hhbGxvd09yRGVlcFJlZiwgU3RvcHBhYmxlLCBVc2VUaW1lb3V0Rm5PcHRpb25zIH0gZnJvbSBcIkB2dWV1c2Uvc2hhcmVkXCI7XG5pbXBvcnQgKiBhcyB2dWUwIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IEFwcCwgQ29tcG9uZW50LCBDb21wb25lbnRPYmplY3RQcm9wc09wdGlvbnMsIENvbXBvbmVudFB1YmxpY0luc3RhbmNlLCBDb21wdXRlZFJlZiwgRGVmaW5lQ29tcG9uZW50LCBJbmplY3Rpb25LZXksIE1heWJlUmVmLCBNYXliZVJlZk9yR2V0dGVyLCBNdWx0aVdhdGNoU291cmNlcywgUmVmLCBTaGFsbG93UmVmLCBTbG90LCBTdHlsZVZhbHVlLCBUb1JlZnMsIFRyYW5zaXRpb25Hcm91cFByb3BzLCBVbndyYXBOZXN0ZWRSZWZzLCBVbndyYXBSZWYsIFdhdGNoT3B0aW9ucywgV2F0Y2hPcHRpb25zQmFzZSwgV2F0Y2hTb3VyY2UsIFdhdGNoU3RvcEhhbmRsZSwgV3JpdGFibGVDb21wdXRlZFJlZiB9IGZyb20gXCJ2dWVcIjtcbmV4cG9ydCAqIGZyb20gXCJAdnVldXNlL3NoYXJlZFwiO1xuXG4vLyNyZWdpb24gY29tcHV0ZWRBc3luYy9pbmRleC5kLnRzXG4vKipcbiAqIEhhbmRsZSBvdmVybGFwcGluZyBhc3luYyBldmFsdWF0aW9ucy5cbiAqXG4gKiBAcGFyYW0gY2FuY2VsQ2FsbGJhY2sgVGhlIHByb3ZpZGVkIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbiBhIHJlLWV2YWx1YXRpb24gb2YgdGhlIGNvbXB1dGVkIHZhbHVlIGlzIHRyaWdnZXJlZCBiZWZvcmUgdGhlIHByZXZpb3VzIG9uZSBmaW5pc2hlZFxuICovXG50eXBlIEFzeW5jQ29tcHV0ZWRPbkNhbmNlbCA9IChjYW5jZWxDYWxsYmFjazogRm4pID0+IHZvaWQ7XG5pbnRlcmZhY2UgQXN5bmNDb21wdXRlZE9wdGlvbnM8TGF6eSA9IGJvb2xlYW4+IGV4dGVuZHMgQ29uZmlndXJhYmxlRmx1c2hTeW5jIHtcbiAgLyoqXG4gICAqIFNob3VsZCB2YWx1ZSBiZSBldmFsdWF0ZWQgbGF6aWx5XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBsYXp5PzogTGF6eTtcbiAgLyoqXG4gICAqIFJlZiBwYXNzZWQgdG8gcmVjZWl2ZSB0aGUgdXBkYXRlZCBvZiBhc3luYyBldmFsdWF0aW9uXG4gICAqL1xuICBldmFsdWF0aW5nPzogUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogVXNlIHNoYWxsb3dSZWZcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc2hhbGxvdz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIGVycm9yIGlzIGNhdWdodC5cbiAgICovXG4gIG9uRXJyb3I/OiAoZTogdW5rbm93bikgPT4gdm9pZDtcbn1cbi8qKlxuICogQ3JlYXRlIGFuIGFzeW5jaHJvbm91cyBjb21wdXRlZCBkZXBlbmRlbmN5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL2NvbXB1dGVkQXN5bmNcbiAqIEBwYXJhbSBldmFsdWF0aW9uQ2FsbGJhY2sgICAgIFRoZSBwcm9taXNlLXJldHVybmluZyBjYWxsYmFjayB3aGljaCBnZW5lcmF0ZXMgdGhlIGNvbXB1dGVkIHZhbHVlXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlICAgICAgICAgICBUaGUgaW5pdGlhbCBzdGF0ZSwgdXNlZCB1bnRpbCB0aGUgZmlyc3QgZXZhbHVhdGlvbiBmaW5pc2hlc1xuICogQHBhcmFtIG9wdGlvbnNPclJlZiAgICAgICAgICAgQWRkaXRpb25hbCBvcHRpb25zIG9yIGEgcmVmIHBhc3NlZCB0byByZWNlaXZlIHRoZSB1cGRhdGVzIG9mIHRoZSBhc3luYyBldmFsdWF0aW9uXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRBc3luYzxUPihldmFsdWF0aW9uQ2FsbGJhY2s6IChvbkNhbmNlbDogQXN5bmNDb21wdXRlZE9uQ2FuY2VsKSA9PiBUIHwgUHJvbWlzZTxUPiwgaW5pdGlhbFN0YXRlOiBULCBvcHRpb25zT3JSZWY6IEFzeW5jQ29tcHV0ZWRPcHRpb25zPHRydWU+KTogQ29tcHV0ZWRSZWY8VD47XG5kZWNsYXJlIGZ1bmN0aW9uIGNvbXB1dGVkQXN5bmM8VD4oZXZhbHVhdGlvbkNhbGxiYWNrOiAob25DYW5jZWw6IEFzeW5jQ29tcHV0ZWRPbkNhbmNlbCkgPT4gVCB8IFByb21pc2U8VD4sIGluaXRpYWxTdGF0ZTogdW5kZWZpbmVkLCBvcHRpb25zT3JSZWY6IEFzeW5jQ29tcHV0ZWRPcHRpb25zPHRydWU+KTogQ29tcHV0ZWRSZWY8VCB8IHVuZGVmaW5lZD47XG5kZWNsYXJlIGZ1bmN0aW9uIGNvbXB1dGVkQXN5bmM8VD4oZXZhbHVhdGlvbkNhbGxiYWNrOiAob25DYW5jZWw6IEFzeW5jQ29tcHV0ZWRPbkNhbmNlbCkgPT4gVCB8IFByb21pc2U8VD4sIGluaXRpYWxTdGF0ZTogVCwgb3B0aW9uc09yUmVmPzogUmVmPGJvb2xlYW4+IHwgQXN5bmNDb21wdXRlZE9wdGlvbnMpOiBSZWY8VD47XG5kZWNsYXJlIGZ1bmN0aW9uIGNvbXB1dGVkQXN5bmM8VD4oZXZhbHVhdGlvbkNhbGxiYWNrOiAob25DYW5jZWw6IEFzeW5jQ29tcHV0ZWRPbkNhbmNlbCkgPT4gVCB8IFByb21pc2U8VD4sIGluaXRpYWxTdGF0ZT86IHVuZGVmaW5lZCwgb3B0aW9uc09yUmVmPzogUmVmPGJvb2xlYW4+IHwgQXN5bmNDb21wdXRlZE9wdGlvbnMpOiBSZWY8VCB8IHVuZGVmaW5lZD47XG4vKiogQGRlcHJlY2F0ZWQgdXNlIGBjb21wdXRlZEFzeW5jYCBpbnN0ZWFkICovXG5kZWNsYXJlIGNvbnN0IGFzeW5jQ29tcHV0ZWQ6IHR5cGVvZiBjb21wdXRlZEFzeW5jO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gY29tcHV0ZWRJbmplY3QvaW5kZXguZC50c1xudHlwZSBDb21wdXRlZEluamVjdEdldHRlcjxULCBLJDE+ID0gKHNvdXJjZTogVCB8IHVuZGVmaW5lZCwgb2xkVmFsdWU/OiBLJDEpID0+IEskMTtcbnR5cGUgQ29tcHV0ZWRJbmplY3RHZXR0ZXJXaXRoRGVmYXVsdDxULCBLJDE+ID0gKHNvdXJjZTogVCwgb2xkVmFsdWU/OiBLJDEpID0+IEskMTtcbnR5cGUgQ29tcHV0ZWRJbmplY3RTZXR0ZXI8VD4gPSAodjogVCkgPT4gdm9pZDtcbmludGVyZmFjZSBXcml0YWJsZUNvbXB1dGVkSW5qZWN0T3B0aW9uczxULCBLJDE+IHtcbiAgZ2V0OiBDb21wdXRlZEluamVjdEdldHRlcjxULCBLJDE+O1xuICBzZXQ6IENvbXB1dGVkSW5qZWN0U2V0dGVyPEskMT47XG59XG5pbnRlcmZhY2UgV3JpdGFibGVDb21wdXRlZEluamVjdE9wdGlvbnNXaXRoRGVmYXVsdDxULCBLJDE+IHtcbiAgZ2V0OiBDb21wdXRlZEluamVjdEdldHRlcldpdGhEZWZhdWx0PFQsIEskMT47XG4gIHNldDogQ29tcHV0ZWRJbmplY3RTZXR0ZXI8SyQxPjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRJbmplY3Q8VCwgSyQxID0gYW55PihrZXk6IEluamVjdGlvbktleTxUPiB8IHN0cmluZywgZ2V0dGVyOiBDb21wdXRlZEluamVjdEdldHRlcjxULCBLJDE+KTogQ29tcHV0ZWRSZWY8SyQxIHwgdW5kZWZpbmVkPjtcbmRlY2xhcmUgZnVuY3Rpb24gY29tcHV0ZWRJbmplY3Q8VCwgSyQxID0gYW55PihrZXk6IEluamVjdGlvbktleTxUPiB8IHN0cmluZywgb3B0aW9uczogV3JpdGFibGVDb21wdXRlZEluamVjdE9wdGlvbnM8VCwgSyQxPik6IENvbXB1dGVkUmVmPEskMSB8IHVuZGVmaW5lZD47XG5kZWNsYXJlIGZ1bmN0aW9uIGNvbXB1dGVkSW5qZWN0PFQsIEskMSA9IGFueT4oa2V5OiBJbmplY3Rpb25LZXk8VD4gfCBzdHJpbmcsIGdldHRlcjogQ29tcHV0ZWRJbmplY3RHZXR0ZXJXaXRoRGVmYXVsdDxULCBLJDE+LCBkZWZhdWx0U291cmNlOiBULCB0cmVhdERlZmF1bHRBc0ZhY3Rvcnk/OiBmYWxzZSk6IENvbXB1dGVkUmVmPEskMT47XG5kZWNsYXJlIGZ1bmN0aW9uIGNvbXB1dGVkSW5qZWN0PFQsIEskMSA9IGFueT4oa2V5OiBJbmplY3Rpb25LZXk8VD4gfCBzdHJpbmcsIG9wdGlvbnM6IFdyaXRhYmxlQ29tcHV0ZWRJbmplY3RPcHRpb25zV2l0aERlZmF1bHQ8VCwgSyQxPiwgZGVmYXVsdFNvdXJjZTogVCB8ICgoKSA9PiBUKSwgdHJlYXREZWZhdWx0QXNGYWN0b3J5OiB0cnVlKTogQ29tcHV0ZWRSZWY8SyQxPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIGNyZWF0ZVJldXNhYmxlVGVtcGxhdGUvaW5kZXguZC50c1xudHlwZSBPYmplY3RMaXRlcmFsV2l0aFBvdGVudGlhbE9iamVjdExpdGVyYWxzID0gUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZD47XG50eXBlIEdlbmVyYXRlU2xvdHNGcm9tU2xvdE1hcDxUIGV4dGVuZHMgT2JqZWN0TGl0ZXJhbFdpdGhQb3RlbnRpYWxPYmplY3RMaXRlcmFscz4gPSB7IFtLIGluIGtleW9mIFRdOiBTbG90PFRbS10+IH07XG50eXBlIERlZmluZVRlbXBsYXRlQ29tcG9uZW50PEJpbmRpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgTWFwU2xvdE5hbWVUb1Nsb3RQcm9wcyBleHRlbmRzIE9iamVjdExpdGVyYWxXaXRoUG90ZW50aWFsT2JqZWN0TGl0ZXJhbHM+ID0gRGVmaW5lQ29tcG9uZW50ICYge1xuICBuZXcgKCk6IHtcbiAgICAkc2xvdHM6IHtcbiAgICAgIGRlZmF1bHQ6IChfOiBCaW5kaW5ncyAmIHtcbiAgICAgICAgJHNsb3RzOiBHZW5lcmF0ZVNsb3RzRnJvbVNsb3RNYXA8TWFwU2xvdE5hbWVUb1Nsb3RQcm9wcz47XG4gICAgICB9KSA9PiBhbnk7XG4gICAgfTtcbiAgfTtcbn07XG50eXBlIFJldXNlVGVtcGxhdGVDb21wb25lbnQ8QmluZGluZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBNYXBTbG90TmFtZVRvU2xvdFByb3BzIGV4dGVuZHMgT2JqZWN0TGl0ZXJhbFdpdGhQb3RlbnRpYWxPYmplY3RMaXRlcmFscz4gPSBEZWZpbmVDb21wb25lbnQ8QmluZGluZ3M+ICYge1xuICBuZXcgKCk6IHtcbiAgICAkc2xvdHM6IEdlbmVyYXRlU2xvdHNGcm9tU2xvdE1hcDxNYXBTbG90TmFtZVRvU2xvdFByb3BzPjtcbiAgfTtcbn07XG50eXBlIFJldXNhYmxlVGVtcGxhdGVQYWlyPEJpbmRpbmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgTWFwU2xvdE5hbWVUb1Nsb3RQcm9wcyBleHRlbmRzIE9iamVjdExpdGVyYWxXaXRoUG90ZW50aWFsT2JqZWN0TGl0ZXJhbHM+ID0gW0RlZmluZVRlbXBsYXRlQ29tcG9uZW50PEJpbmRpbmdzLCBNYXBTbG90TmFtZVRvU2xvdFByb3BzPiwgUmV1c2VUZW1wbGF0ZUNvbXBvbmVudDxCaW5kaW5ncywgTWFwU2xvdE5hbWVUb1Nsb3RQcm9wcz5dICYge1xuICBkZWZpbmU6IERlZmluZVRlbXBsYXRlQ29tcG9uZW50PEJpbmRpbmdzLCBNYXBTbG90TmFtZVRvU2xvdFByb3BzPjtcbiAgcmV1c2U6IFJldXNlVGVtcGxhdGVDb21wb25lbnQ8QmluZGluZ3MsIE1hcFNsb3ROYW1lVG9TbG90UHJvcHM+O1xufTtcbmludGVyZmFjZSBDcmVhdGVSZXVzYWJsZVRlbXBsYXRlT3B0aW9uczxQcm9wcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgLyoqXG4gICAqIEluaGVyaXQgYXR0cnMgZnJvbSByZXVzZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGluaGVyaXRBdHRycz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcm9wcyBkZWZpbml0aW9uIGZvciByZXVzZSBjb21wb25lbnQuXG4gICAqL1xuICBwcm9wcz86IENvbXBvbmVudE9iamVjdFByb3BzT3B0aW9uczxQcm9wcz47XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBgZGVmaW5lYCBhbmQgYHJldXNlYCBjb21wb25lbnRzIGluIHBhaXIsXG4gKiBJdCBhbHNvIGFsbG93IHRvIHBhc3MgYSBnZW5lcmljIHRvIGJpbmQgd2l0aCB0eXBlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL2NyZWF0ZVJldXNhYmxlVGVtcGxhdGVcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVJldXNhYmxlVGVtcGxhdGU8QmluZGluZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBNYXBTbG90TmFtZVRvU2xvdFByb3BzIGV4dGVuZHMgT2JqZWN0TGl0ZXJhbFdpdGhQb3RlbnRpYWxPYmplY3RMaXRlcmFscyA9IFJlY29yZDwnZGVmYXVsdCcsIHVuZGVmaW5lZD4+KG9wdGlvbnM/OiBDcmVhdGVSZXVzYWJsZVRlbXBsYXRlT3B0aW9uczxCaW5kaW5ncz4pOiBSZXVzYWJsZVRlbXBsYXRlUGFpcjxCaW5kaW5ncywgTWFwU2xvdE5hbWVUb1Nsb3RQcm9wcz47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBjcmVhdGVUZW1wbGF0ZVByb21pc2UvaW5kZXguZC50c1xuaW50ZXJmYWNlIFRlbXBsYXRlUHJvbWlzZVByb3BzPFJldHVybiwgQXJncyBleHRlbmRzIGFueVtdID0gW10+IHtcbiAgLyoqXG4gICAqIFRoZSBwcm9taXNlIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvbWlzZTogUHJvbWlzZTxSZXR1cm4+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgcHJvbWlzZS5cbiAgICovXG4gIHJlc29sdmU6ICh2OiBSZXR1cm4gfCBQcm9taXNlPFJldHVybj4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZWplY3QgdGhlIHByb21pc2UuXG4gICAqL1xuICByZWplY3Q6ICh2OiBhbnkpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBBcmd1bWVudHMgcGFzc2VkIHRvIFRlbXBsYXRlUHJvbWlzZS5zdGFydCgpXG4gICAqL1xuICBhcmdzOiBBcmdzO1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBwcm9taXNlIGlzIHJlc29sdmluZy5cbiAgICogV2hlbiBwYXNzaW5nIGFub3RoZXIgcHJvbWlzZSB0byBgcmVzb2x2ZWAsIHRoaXMgd2lsbCBiZSBzZXQgdG8gYHRydWVgIHVudGlsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkLlxuICAgKi9cbiAgaXNSZXNvbHZpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25zIHBhc3NlZCB0byBjcmVhdGVUZW1wbGF0ZVByb21pc2UoKVxuICAgKi9cbiAgb3B0aW9uczogVGVtcGxhdGVQcm9taXNlT3B0aW9ucztcbiAgLyoqXG4gICAqIFVuaXF1ZSBrZXkgZm9yIGxpc3QgcmVuZGVyaW5nLlxuICAgKi9cbiAga2V5OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVGVtcGxhdGVQcm9taXNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBwcm9taXNlIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlIGF0IGEgdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNpbmdsZXRvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIHByb3BzIGZvciB0aGUgcHJvbWlzZS5cbiAgICovXG4gIHRyYW5zaXRpb24/OiBUcmFuc2l0aW9uR3JvdXBQcm9wcztcbn1cbnR5cGUgVGVtcGxhdGVQcm9taXNlPFJldHVybiwgQXJncyBleHRlbmRzIGFueVtdID0gW10+ID0gRGVmaW5lQ29tcG9uZW50PG9iamVjdD4gJiB7XG4gIG5ldyAoKToge1xuICAgICRzbG90czoge1xuICAgICAgZGVmYXVsdDogKF86IFRlbXBsYXRlUHJvbWlzZVByb3BzPFJldHVybiwgQXJncz4pID0+IGFueTtcbiAgICB9O1xuICB9O1xufSAmIHtcbiAgc3RhcnQ6ICguLi5hcmdzOiBBcmdzKSA9PiBQcm9taXNlPFJldHVybj47XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgdGVtcGxhdGUgcHJvbWlzZSBjb21wb25lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvY3JlYXRlVGVtcGxhdGVQcm9taXNlXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZVByb21pc2U8UmV0dXJuLCBBcmdzIGV4dGVuZHMgYW55W10gPSBbXT4ob3B0aW9ucz86IFRlbXBsYXRlUHJvbWlzZU9wdGlvbnMpOiBUZW1wbGF0ZVByb21pc2U8UmV0dXJuLCBBcmdzPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIGNyZWF0ZVVucmVmRm4vaW5kZXguZC50c1xudHlwZSBVbnJlZkZuPFQ+ID0gVCBleHRlbmRzICgoLi4uYXJnczogaW5mZXIgQSkgPT4gaW5mZXIgUikgPyAoLi4uYXJnczogeyBbSyBpbiBrZXlvZiBBXTogTWF5YmVSZWY8QVtLXT4gfSkgPT4gUiA6IG5ldmVyO1xuLyoqXG4gKiBNYWtlIGEgcGxhaW4gZnVuY3Rpb24gYWNjZXB0aW5nIHJlZiBhbmQgcmF3IHZhbHVlcyBhcyBhcmd1bWVudHMuXG4gKiBSZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHRoZSB1bmNvbnZlcnRlZCBmdW5jdGlvbiByZXR1cm5zLCB3aXRoIHByb3BlciB0eXBpbmcuXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVVbnJlZkZuPFQgZXh0ZW5kcyBGdW5jdGlvbj4oZm46IFQpOiBVbnJlZkZuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gX2NvbmZpZ3VyYWJsZS5kLnRzXG5pbnRlcmZhY2UgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgd2luZG93PzogV2luZG93O1xufVxuaW50ZXJmYWNlIENvbmZpZ3VyYWJsZURvY3VtZW50IHtcbiAgZG9jdW1lbnQ/OiBEb2N1bWVudDtcbn1cbmludGVyZmFjZSBDb25maWd1cmFibGVEb2N1bWVudE9yU2hhZG93Um9vdCB7XG4gIGRvY3VtZW50PzogRG9jdW1lbnRPclNoYWRvd1Jvb3Q7XG59XG5pbnRlcmZhY2UgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgbmF2aWdhdG9yPzogTmF2aWdhdG9yO1xufVxuaW50ZXJmYWNlIENvbmZpZ3VyYWJsZUxvY2F0aW9uIHtcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbn1cbmRlY2xhcmUgY29uc3QgZGVmYXVsdFdpbmRvdzogKFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzKSB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgY29uc3QgZGVmYXVsdERvY3VtZW50OiBEb2N1bWVudCB8IHVuZGVmaW5lZDtcbmRlY2xhcmUgY29uc3QgZGVmYXVsdE5hdmlnYXRvcjogTmF2aWdhdG9yIHwgdW5kZWZpbmVkO1xuZGVjbGFyZSBjb25zdCBkZWZhdWx0TG9jYXRpb246IExvY2F0aW9uIHwgdW5kZWZpbmVkO1xuaW50ZXJmYWNlIENvbmZpZ3VyYWJsZURlZXBSZWZzPEQgZXh0ZW5kcyBib29sZWFuPiB7XG4gIC8qKlxuICAgKiBSZXR1cm4gZGVlcCByZWZzIGluc3RlYWQgb2Ygc2hhbGxvdyByZWZzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIC0gd2lsbCBiZSBjaGFuZ2VkIHRvIGBmYWxzZWAgYnkgZGVmYXVsdCBpbiB0aGUgbmV4dCBtYWpvclxuICAgKi9cbiAgZGVlcFJlZnM/OiBEO1xufVxuaW50ZXJmYWNlIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIC8qKlxuICAgKiBDdXN0b20gc2NoZWR1bGVyIHRvIHVzZSBmb3IgaW50ZXJ2YWwgZXhlY3V0aW9uLlxuICAgKi9cbiAgc2NoZWR1bGVyPzogKGNiOiBGbikgPT4gUGF1c2FibGU7XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1bnJlZkVsZW1lbnQvaW5kZXguZC50c1xudHlwZSBWdWVJbnN0YW5jZSA9IENvbXBvbmVudFB1YmxpY0luc3RhbmNlO1xudHlwZSBNYXliZUVsZW1lbnRSZWY8VCBleHRlbmRzIE1heWJlRWxlbWVudCA9IE1heWJlRWxlbWVudD4gPSBNYXliZVJlZjxUPjtcbnR5cGUgTWF5YmVDb21wdXRlZEVsZW1lbnRSZWY8VCBleHRlbmRzIE1heWJlRWxlbWVudCA9IE1heWJlRWxlbWVudD4gPSBNYXliZVJlZk9yR2V0dGVyPFQ+O1xudHlwZSBNYXliZUVsZW1lbnQgPSBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBWdWVJbnN0YW5jZSB8IHVuZGVmaW5lZCB8IG51bGw7XG50eXBlIFVuUmVmRWxlbWVudFJldHVybjxUIGV4dGVuZHMgTWF5YmVFbGVtZW50ID0gTWF5YmVFbGVtZW50PiA9IFQgZXh0ZW5kcyBWdWVJbnN0YW5jZSA/IEV4Y2x1ZGU8TWF5YmVFbGVtZW50LCBWdWVJbnN0YW5jZT4gOiBUIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBHZXQgdGhlIGRvbSBlbGVtZW50IG9mIGEgcmVmIG9mIGVsZW1lbnQgb3IgVnVlIGNvbXBvbmVudCBpbnN0YW5jZVxuICpcbiAqIEBwYXJhbSBlbFJlZlxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVucmVmRWxlbWVudDxUIGV4dGVuZHMgTWF5YmVFbGVtZW50PihlbFJlZjogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWY8VD4pOiBVblJlZkVsZW1lbnRSZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBvbkNsaWNrT3V0c2lkZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgT25DbGlja091dHNpZGVPcHRpb25zPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCB0cmlnZ2VyIHRoZSBldmVudCxcbiAgICogcHJvdmlkZWQgYXMgUmVmcyBvciBDU1MgU2VsZWN0b3JzLlxuICAgKi9cbiAgaWdub3JlPzogTWF5YmVSZWZPckdldHRlcjwoTWF5YmVFbGVtZW50UmVmIHwgc3RyaW5nKVtdPjtcbiAgLyoqXG4gICAqIFVzZSBjYXB0dXJpbmcgcGhhc2UgZm9yIGludGVybmFsIGV2ZW50IGxpc3RlbmVyLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBjYXB0dXJlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBoYW5kbGVyIGZ1bmN0aW9uIGlmIGZvY3VzIG1vdmVzIHRvIGFuIGlmcmFtZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRldGVjdElmcmFtZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBVc2UgY29udHJvbHMgdG8gY2FuY2VsL3RyaWdnZXIgbGlzdGVuZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250cm9scz86IENvbnRyb2xzO1xufVxudHlwZSBPbkNsaWNrT3V0c2lkZUhhbmRsZXI8VCBleHRlbmRzIE9uQ2xpY2tPdXRzaWRlT3B0aW9uczxib29sZWFuPiA9IE9uQ2xpY2tPdXRzaWRlT3B0aW9ucz4gPSAoZXZlbnQ6IChUWydkZXRlY3RJZnJhbWUnXSBleHRlbmRzIHRydWUgPyBGb2N1c0V2ZW50IDogbmV2ZXIpIHwgKFRbJ2NvbnRyb2xzJ10gZXh0ZW5kcyB0cnVlID8gRXZlbnQgOiBuZXZlcikgfCBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG50eXBlIE9uQ2xpY2tPdXRzaWRlUmV0dXJuPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiA9IENvbnRyb2xzIGV4dGVuZHMgZmFsc2UgPyBGbiA6IHtcbiAgc3RvcDogRm47XG4gIGNhbmNlbDogRm47XG4gIHRyaWdnZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBMaXN0ZW4gZm9yIGNsaWNrcyBvdXRzaWRlIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvb25DbGlja091dHNpZGVcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBoYW5kbGVyXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIG9uQ2xpY2tPdXRzaWRlPFQgZXh0ZW5kcyBPbkNsaWNrT3V0c2lkZU9wdGlvbnM+KHRhcmdldDogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYsIGhhbmRsZXI6IE9uQ2xpY2tPdXRzaWRlSGFuZGxlcjxUPiwgb3B0aW9ucz86IFQpOiBGbjtcbmRlY2xhcmUgZnVuY3Rpb24gb25DbGlja091dHNpZGU8VCBleHRlbmRzIE9uQ2xpY2tPdXRzaWRlT3B0aW9uczx0cnVlPj4odGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiwgaGFuZGxlcjogT25DbGlja091dHNpZGVIYW5kbGVyPFQ+LCBvcHRpb25zOiBUKToge1xuICBzdG9wOiBGbjtcbiAgY2FuY2VsOiBGbjtcbiAgdHJpZ2dlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbn07XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBvbkVsZW1lbnRSZW1vdmFsL2luZGV4LmQudHNcbmludGVyZmFjZSBPbkVsZW1lbnRSZW1vdmFsT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdywgQ29uZmlndXJhYmxlRG9jdW1lbnRPclNoYWRvd1Jvb3QsIFdhdGNoT3B0aW9uc0Jhc2Uge31cbi8qKlxuICogRmlyZXMgd2hlbiB0aGUgZWxlbWVudCBvciBhbnkgZWxlbWVudCBjb250YWluaW5nIGl0IGlzIHJlbW92ZWQuXG4gKlxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIG9uRWxlbWVudFJlbW92YWwodGFyZ2V0OiBNYXliZUVsZW1lbnRSZWYsIGNhbGxiYWNrOiAobXV0YXRpb25SZWNvcmRzOiBNdXRhdGlvblJlY29yZFtdKSA9PiB2b2lkLCBvcHRpb25zPzogT25FbGVtZW50UmVtb3ZhbE9wdGlvbnMpOiBGbjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIG9uS2V5U3Ryb2tlL2luZGV4LmQudHNcbnR5cGUgS2V5UHJlZGljYXRlID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuO1xudHlwZSBLZXlGaWx0ZXIgPSB0cnVlIHwgc3RyaW5nIHwgc3RyaW5nW10gfCBLZXlQcmVkaWNhdGU7XG50eXBlIEtleVN0cm9rZUV2ZW50TmFtZSA9ICdrZXlkb3duJyB8ICdrZXlwcmVzcycgfCAna2V5dXAnO1xuaW50ZXJmYWNlIE9uS2V5U3Ryb2tlT3B0aW9ucyB7XG4gIGV2ZW50TmFtZT86IEtleVN0cm9rZUV2ZW50TmFtZTtcbiAgdGFyZ2V0PzogTWF5YmVSZWZPckdldHRlcjxFdmVudFRhcmdldCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICBwYXNzaXZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgdG8gaWdub3JlIHJlcGVhdGVkIGV2ZW50cyB3aGVuIHRoZSBrZXkgaXMgYmVpbmcgaGVsZCBkb3duLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGVkdXBlPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPjtcbn1cbi8qKlxuICogTGlzdGVuIGZvciBrZXlib2FyZCBrZXlzdHJva2VzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL29uS2V5U3Ryb2tlXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gb25LZXlTdHJva2Uoa2V5OiBLZXlGaWx0ZXIsIGhhbmRsZXI6IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IE9uS2V5U3Ryb2tlT3B0aW9ucyk6ICgpID0+IHZvaWQ7XG5kZWNsYXJlIGZ1bmN0aW9uIG9uS2V5U3Ryb2tlKGhhbmRsZXI6IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IE9uS2V5U3Ryb2tlT3B0aW9ucyk6ICgpID0+IHZvaWQ7XG4vKipcbiAqIExpc3RlbiB0byB0aGUga2V5ZG93biBldmVudCBvZiB0aGUgZ2l2ZW4ga2V5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL29uS2V5U3Ryb2tlXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gaGFuZGxlclxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBvbktleURvd24oa2V5OiBLZXlGaWx0ZXIsIGhhbmRsZXI6IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IE9taXQ8T25LZXlTdHJva2VPcHRpb25zLCAnZXZlbnROYW1lJz4pOiAoKSA9PiB2b2lkO1xuLyoqXG4gKiBMaXN0ZW4gdG8gdGhlIGtleXByZXNzIGV2ZW50IG9mIHRoZSBnaXZlbiBrZXkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvb25LZXlTdHJva2VcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBoYW5kbGVyXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIG9uS2V5UHJlc3NlZChrZXk6IEtleUZpbHRlciwgaGFuZGxlcjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogT21pdDxPbktleVN0cm9rZU9wdGlvbnMsICdldmVudE5hbWUnPik6ICgpID0+IHZvaWQ7XG4vKipcbiAqIExpc3RlbiB0byB0aGUga2V5dXAgZXZlbnQgb2YgdGhlIGdpdmVuIGtleS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy9vbktleVN0cm9rZVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGhhbmRsZXJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gb25LZXlVcChrZXk6IEtleUZpbHRlciwgaGFuZGxlcjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogT21pdDxPbktleVN0cm9rZU9wdGlvbnMsICdldmVudE5hbWUnPik6ICgpID0+IHZvaWQ7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBvbkxvbmdQcmVzcy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgT25Mb25nUHJlc3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRpbWUgaW4gbXMgdGlsbCBgbG9uZ3ByZXNzYCBnZXRzIGNhbGxlZFxuICAgKlxuICAgKiBAZGVmYXVsdCA1MDBcbiAgICovXG4gIGRlbGF5PzogbnVtYmVyIHwgKChldjogUG9pbnRlckV2ZW50KSA9PiBudW1iZXIpO1xuICBtb2RpZmllcnM/OiBPbkxvbmdQcmVzc01vZGlmaWVycztcbiAgLyoqXG4gICAqIEFsbG93YW5jZSBvZiBtb3ZpbmcgZGlzdGFuY2UgaW4gcGl4ZWxzLFxuICAgKiBUaGUgYWN0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIFdoZW4gbW92aW5nIHRvbyBmYXIgZnJvbSB0aGUgcG9pbnRlcmRvd24gcG9zaXRpb24uXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICBkaXN0YW5jZVRocmVzaG9sZD86IG51bWJlciB8IGZhbHNlO1xuICAvKipcbiAgICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHJlZiBlbGVtZW50IGlzIHJlbGVhc2VkLlxuICAgKiBAcGFyYW0gZHVyYXRpb24gaG93IGxvbmcgdGhlIGVsZW1lbnQgd2FzIHByZXNzZWQgaW4gbXNcbiAgICogQHBhcmFtIGRpc3RhbmNlIGRpc3RhbmNlIGZyb20gdGhlIHBvaW50ZXJkb3duIHBvc2l0aW9uXG4gICAqIEBwYXJhbSBpc0xvbmdQcmVzcyB3aGV0aGVyIHRoZSBhY3Rpb24gd2FzIGEgbG9uZyBwcmVzcyBvciBub3RcbiAgICovXG4gIG9uTW91c2VVcD86IChkdXJhdGlvbjogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBpc0xvbmdQcmVzczogYm9vbGVhbikgPT4gdm9pZDtcbn1cbmludGVyZmFjZSBPbkxvbmdQcmVzc01vZGlmaWVycyB7XG4gIHN0b3A/OiBib29sZWFuO1xuICBvbmNlPzogYm9vbGVhbjtcbiAgcHJldmVudD86IGJvb2xlYW47XG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICBzZWxmPzogYm9vbGVhbjtcbn1cbnR5cGUgT25Mb25nUHJlc3NSZXR1cm4gPSAoKSA9PiB2b2lkO1xuLyoqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgT25Mb25nUHJlc3NSZXR1cm59IGluc3RlYWQgKi9cbnR5cGUgVXNlT25Mb25nUHJlc3NSZXR1cm4gPSBPbkxvbmdQcmVzc1JldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gb25Mb25nUHJlc3ModGFyZ2V0OiBNYXliZUVsZW1lbnRSZWYsIGhhbmRsZXI6IChldnQ6IFBvaW50ZXJFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IE9uTG9uZ1ByZXNzT3B0aW9ucyk6IE9uTG9uZ1ByZXNzUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gb25TdGFydFR5cGluZy9pbmRleC5kLnRzXG4vKipcbiAqIEZpcmVzIHdoZW4gdXNlcnMgc3RhcnQgdHlwaW5nIG9uIG5vbi1lZGl0YWJsZSBlbGVtZW50cy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy9vblN0YXJ0VHlwaW5nXG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gb25TdGFydFR5cGluZyhjYWxsYmFjazogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkLCBvcHRpb25zPzogQ29uZmlndXJhYmxlRG9jdW1lbnQpOiB2b2lkO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdGVtcGxhdGVSZWYvaW5kZXguZC50c1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgVnVlJ3MgYnVpbHQtaW4gYHVzZVRlbXBsYXRlUmVmYCBpbnN0ZWFkLlxuICpcbiAqIFNob3J0aGFuZCBmb3IgYmluZGluZyByZWYgdG8gdGVtcGxhdGUgZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy90ZW1wbGF0ZVJlZlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdGVtcGxhdGVSZWY8VCBleHRlbmRzIEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IENvbXBvbmVudCB8IG51bGwsIEtleXMgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KGtleTogS2V5cywgaW5pdGlhbFZhbHVlPzogVCB8IG51bGwpOiBSZWFkb25seTxSZWY8VD4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQWN0aXZlRWxlbWVudC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQWN0aXZlRWxlbWVudE9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3csIENvbmZpZ3VyYWJsZURvY3VtZW50T3JTaGFkb3dSb290IHtcbiAgLyoqXG4gICAqIFNlYXJjaCBhY3RpdmUgZWxlbWVudCBkZWVwbHkgaW5zaWRlIHNoYWRvdyBkb21cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZGVlcD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmFjayBhY3RpdmUgZWxlbWVudCB3aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBET01cbiAgICogVXNpbmcgYSBNdXRhdGlvbk9ic2VydmVyIHVuZGVyIHRoZSBob29kXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB0cmlnZ2VyT25SZW1vdmFsPzogYm9vbGVhbjtcbn1cbnR5cGUgVXNlQWN0aXZlRWxlbWVudFJldHVybjxUIGV4dGVuZHMgSFRNTEVsZW1lbnQgPSBIVE1MRWxlbWVudD4gPSBTaGFsbG93UmVmPFQgfCBudWxsIHwgdW5kZWZpbmVkPjtcbi8qKlxuICogUmVhY3RpdmUgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQWN0aXZlRWxlbWVudFxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUFjdGl2ZUVsZW1lbnQ8VCBleHRlbmRzIEhUTUxFbGVtZW50PihvcHRpb25zPzogVXNlQWN0aXZlRWxlbWVudE9wdGlvbnMpOiBVc2VBY3RpdmVFbGVtZW50UmV0dXJuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdHlwZXMuZC50c1xuaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgUmVuZGVyYWJsZUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0aGF0IHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHJlbmRlcmVkIGFzXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkaXYnXG4gICAqL1xuICBhcz86IG9iamVjdCB8IHN0cmluZztcbn1cbnR5cGUgUG9pbnRlclR5cGUgPSAnbW91c2UnIHwgJ3RvdWNoJyB8ICdwZW4nO1xuaW50ZXJmYWNlIFN1cHBvcnRhYmxlIHtcbiAgaXNTdXBwb3J0ZWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQW5pbWF0ZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQW5pbWF0ZU9wdGlvbnMgZXh0ZW5kcyBLZXlmcmFtZUFuaW1hdGlvbk9wdGlvbnMsIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBXaWxsIGF1dG9tYXRpY2FsbHkgcnVuIHBsYXkgd2hlbiBgdXNlQW5pbWF0ZWAgaXMgdXNlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBjb21taXRzIHRoZSBlbmQgc3R5bGluZyBzdGF0ZSBvZiBhbiBhbmltYXRpb24gdG8gdGhlIGVsZW1lbnQgYmVpbmcgYW5pbWF0ZWRcbiAgICogSW4gZ2VuZXJhbCwgeW91IHNob3VsZCB1c2UgYGZpbGxgIG9wdGlvbiB3aXRoIHRoaXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb21taXRTdHlsZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBwZXJzaXN0cyB0aGUgYW5pbWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwZXJzaXN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4ZWN1dGVkIGFmdGVyIGFuaW1hdGlvbiBpbml0aWFsaXphdGlvblxuICAgKi9cbiAgb25SZWFkeT86IChhbmltYXRlOiBBbmltYXRpb24pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIGVycm9yIGlzIGNhdWdodC5cbiAgICovXG4gIG9uRXJyb3I/OiAoZTogdW5rbm93bikgPT4gdm9pZDtcbn1cbnR5cGUgVXNlQW5pbWF0ZUtleWZyYW1lcyA9IE1heWJlUmVmPEtleWZyYW1lW10gfCBQcm9wZXJ0eUluZGV4ZWRLZXlmcmFtZXMgfCBudWxsPjtcbmludGVyZmFjZSBVc2VBbmltYXRlUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBhbmltYXRlOiBTaGFsbG93UmVmPEFuaW1hdGlvbiB8IHVuZGVmaW5lZD47XG4gIHBsYXk6ICgpID0+IHZvaWQ7XG4gIHBhdXNlOiAoKSA9PiB2b2lkO1xuICByZXZlcnNlOiAoKSA9PiB2b2lkO1xuICBmaW5pc2g6ICgpID0+IHZvaWQ7XG4gIGNhbmNlbDogKCkgPT4gdm9pZDtcbiAgcGVuZGluZzogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIHBsYXlTdGF0ZTogQ29tcHV0ZWRSZWY8QW5pbWF0aW9uUGxheVN0YXRlPjtcbiAgcmVwbGFjZVN0YXRlOiBDb21wdXRlZFJlZjxBbmltYXRpb25SZXBsYWNlU3RhdGU+O1xuICBzdGFydFRpbWU6IFdyaXRhYmxlQ29tcHV0ZWRSZWY8Q1NTTnVtYmVyaXNoIHwgbnVtYmVyIHwgbnVsbD47XG4gIGN1cnJlbnRUaW1lOiBXcml0YWJsZUNvbXB1dGVkUmVmPENTU051bWJlcmlzaCB8IG51bGw+O1xuICB0aW1lbGluZTogV3JpdGFibGVDb21wdXRlZFJlZjxBbmltYXRpb25UaW1lbGluZSB8IG51bGw+O1xuICBwbGF5YmFja1JhdGU6IFdyaXRhYmxlQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgV2ViIEFuaW1hdGlvbnMgQVBJXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQW5pbWF0ZVxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGtleWZyYW1lc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VBbmltYXRlKHRhcmdldDogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYsIGtleWZyYW1lczogVXNlQW5pbWF0ZUtleWZyYW1lcywgb3B0aW9ucz86IG51bWJlciB8IFVzZUFuaW1hdGVPcHRpb25zKTogVXNlQW5pbWF0ZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUFzeW5jUXVldWUvaW5kZXguZC50c1xudHlwZSBVc2VBc3luY1F1ZXVlVGFzazxUPiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gVCB8IFByb21pc2U8VD47XG50eXBlIE1hcFF1ZXVlVGFzazxUIGV4dGVuZHMgYW55W10+ID0geyBbSyBpbiBrZXlvZiBUXTogVXNlQXN5bmNRdWV1ZVRhc2s8VFtLXT4gfTtcbmludGVyZmFjZSBVc2VBc3luY1F1ZXVlUmVzdWx0PFQ+IHtcbiAgc3RhdGU6ICdhYm9ydGVkJyB8ICdmdWxmaWxsZWQnIHwgJ3BlbmRpbmcnIHwgJ3JlamVjdGVkJztcbiAgZGF0YTogVCB8IG51bGw7XG59XG5pbnRlcmZhY2UgVXNlQXN5bmNRdWV1ZVJldHVybjxUPiB7XG4gIGFjdGl2ZUluZGV4OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHJlc3VsdDogVDtcbn1cbmludGVyZmFjZSBVc2VBc3luY1F1ZXVlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJbnRlcnJ1cHQgdGFza3Mgd2hlbiBjdXJyZW50IHRhc2sgZmFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGludGVycnVwdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGl0IHdoZW4gdGhlIHRhc2tzIGZhaWxzLlxuICAgKlxuICAgKi9cbiAgb25FcnJvcj86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBUcmlnZ2VyIGl0IHdoZW4gdGhlIHRhc2tzIGVuZHMuXG4gICAqXG4gICAqL1xuICBvbkZpbmlzaGVkPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEEgQWJvcnRTaWduYWwgdGhhdCBjYW4gYmUgdXNlZCB0byBhYm9ydCB0aGUgdGFzay5cbiAgICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuLyoqXG4gKiBBc3luY2hyb25vdXMgcXVldWUgdGFzayBjb250cm9sbGVyLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUFzeW5jUXVldWVcbiAqIEBwYXJhbSB0YXNrc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VBc3luY1F1ZXVlPFQgZXh0ZW5kcyBhbnlbXSwgUyA9IE1hcFF1ZXVlVGFzazxUPj4odGFza3M6IFMgJiBBcnJheTxVc2VBc3luY1F1ZXVlVGFzazxhbnk+Piwgb3B0aW9ucz86IFVzZUFzeW5jUXVldWVPcHRpb25zKTogVXNlQXN5bmNRdWV1ZVJldHVybjx7IFtQIGluIGtleW9mIFRdOiBVc2VBc3luY1F1ZXVlUmVzdWx0PFRbUF0+IH0+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQXN5bmNTdGF0ZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQXN5bmNTdGF0ZVJldHVybkJhc2U8RGF0YSwgUGFyYW1zIGV4dGVuZHMgYW55W10sIFNoYWxsb3cgZXh0ZW5kcyBib29sZWFuPiB7XG4gIHN0YXRlOiBTaGFsbG93IGV4dGVuZHMgdHJ1ZSA/IFJlZjxEYXRhPiA6IFJlZjxVbndyYXBSZWY8RGF0YT4+O1xuICBpc1JlYWR5OiBSZWY8Ym9vbGVhbj47XG4gIGlzTG9hZGluZzogUmVmPGJvb2xlYW4+O1xuICBlcnJvcjogUmVmPHVua25vd24+O1xuICBleGVjdXRlOiAoZGVsYXk/OiBudW1iZXIsIC4uLmFyZ3M6IFBhcmFtcykgPT4gUHJvbWlzZTxEYXRhIHwgdW5kZWZpbmVkPjtcbiAgZXhlY3V0ZUltbWVkaWF0ZTogKC4uLmFyZ3M6IFBhcmFtcykgPT4gUHJvbWlzZTxEYXRhIHwgdW5kZWZpbmVkPjtcbn1cbnR5cGUgVXNlQXN5bmNTdGF0ZVJldHVybjxEYXRhLCBQYXJhbXMgZXh0ZW5kcyBhbnlbXSwgU2hhbGxvdyBleHRlbmRzIGJvb2xlYW4+ID0gVXNlQXN5bmNTdGF0ZVJldHVybkJhc2U8RGF0YSwgUGFyYW1zLCBTaGFsbG93PiAmIFByb21pc2VMaWtlPFVzZUFzeW5jU3RhdGVSZXR1cm5CYXNlPERhdGEsIFBhcmFtcywgU2hhbGxvdz4+O1xuaW50ZXJmYWNlIFVzZUFzeW5jU3RhdGVPcHRpb25zPFNoYWxsb3cgZXh0ZW5kcyBib29sZWFuLCBEID0gYW55PiB7XG4gIC8qKlxuICAgKiBEZWxheSBmb3IgdGhlIGZpcnN0IGV4ZWN1dGlvbiBvZiB0aGUgcHJvbWlzZSB3aGVuIFwiaW1tZWRpYXRlXCIgaXMgdHJ1ZS4gSW4gbWlsbGlzZWNvbmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBkZWxheT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgdGhlIHByb21pc2UgcmlnaHQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGlzIGludm9rZWQuXG4gICAqIFdpbGwgYXBwbHkgdGhlIGRlbGF5IGlmIGFueS5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gZmFsc2UsIHlvdSB3aWxsIG5lZWQgdG8gZXhlY3V0ZSBpdCBtYW51YWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gZXJyb3IgaXMgY2F1Z2h0LlxuICAgKi9cbiAgb25FcnJvcj86IChlOiB1bmtub3duKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBzdWNjZXNzIGlzIGNhdWdodC5cbiAgICogQHBhcmFtIHtEfSBkYXRhXG4gICAqL1xuICBvblN1Y2Nlc3M/OiAoZGF0YTogRCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YXRlIHRvIGluaXRpYWxTdGF0ZSBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwcm9taXNlLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBjYWxsaW5nIHRoZSBleGVjdXRlIGZ1bmN0aW9uIG1vcmUgdGhhbiBvbmNlIChmb3JcbiAgICogZXhhbXBsZSwgdG8gcmVmcmVzaCBkYXRhKS4gV2hlbiBzZXQgdG8gZmFsc2UsIHRoZSBjdXJyZW50IHN0YXRlIHJlbWFpbnNcbiAgICogdW5jaGFuZ2VkIHVudGlsIHRoZSBwcm9taXNlIHJlc29sdmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZXNldE9uRXhlY3V0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBVc2Ugc2hhbGxvd1JlZi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc2hhbGxvdz86IFNoYWxsb3c7XG4gIC8qKlxuICAgKlxuICAgKiBBbiBlcnJvciBpcyB0aHJvd24gd2hlbiBleGVjdXRpbmcgdGhlIGV4ZWN1dGUgZnVuY3Rpb25cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHRocm93RXJyb3I/OiBib29sZWFuO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBhc3luYyBzdGF0ZS4gV2lsbCBub3QgYmxvY2sgeW91ciBzZXR1cCBmdW5jdGlvbiBhbmQgd2lsbCB0cmlnZ2VyIGNoYW5nZXMgb25jZVxuICogdGhlIHByb21pc2UgaXMgcmVhZHkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQXN5bmNTdGF0ZVxuICogQHBhcmFtIHByb21pc2UgICAgICAgICBUaGUgcHJvbWlzZSAvIGFzeW5jIGZ1bmN0aW9uIHRvIGJlIHJlc29sdmVkXG4gKiBAcGFyYW0gaW5pdGlhbFN0YXRlICAgIFRoZSBpbml0aWFsIHN0YXRlLCB1c2VkIHVudGlsIHRoZSBmaXJzdCBldmFsdWF0aW9uIGZpbmlzaGVzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUFzeW5jU3RhdGU8RGF0YSwgUGFyYW1zIGV4dGVuZHMgYW55W10gPSBhbnlbXSwgU2hhbGxvdyBleHRlbmRzIGJvb2xlYW4gPSB0cnVlPihwcm9taXNlOiBQcm9taXNlPERhdGE+IHwgKCguLi5hcmdzOiBQYXJhbXMpID0+IFByb21pc2U8RGF0YT4pLCBpbml0aWFsU3RhdGU6IE1heWJlUmVmPERhdGE+LCBvcHRpb25zPzogVXNlQXN5bmNTdGF0ZU9wdGlvbnM8U2hhbGxvdywgRGF0YT4pOiBVc2VBc3luY1N0YXRlUmV0dXJuPERhdGEsIFBhcmFtcywgU2hhbGxvdz47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VCYXNlNjQvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUJhc2U2NE9wdGlvbnMge1xuICAvKipcbiAgICogT3V0cHV0IGFzIERhdGEgVVJMIGZvcm1hdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkYXRhVXJsPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBUb0RhdGFVUkxPcHRpb25zIGV4dGVuZHMgVXNlQmFzZTY0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNSU1FIHR5cGVcbiAgICovXG4gIHR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBJbWFnZSBxdWFsaXR5IG9mIGpwZWcgb3Igd2VicFxuICAgKi9cbiAgcXVhbGl0eT86IGFueTtcbn1cbmludGVyZmFjZSBVc2VCYXNlNjRPYmplY3RPcHRpb25zPFQ+IGV4dGVuZHMgVXNlQmFzZTY0T3B0aW9ucyB7XG4gIHNlcmlhbGl6ZXI/OiAodjogVCkgPT4gc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZUJhc2U2NFJldHVybiB7XG4gIGJhc2U2NDogU2hhbGxvd1JlZjxzdHJpbmc+O1xuICBwcm9taXNlOiBTaGFsbG93UmVmPFByb21pc2U8c3RyaW5nPj47XG4gIGV4ZWN1dGU6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmcgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlQmFzZTY0T3B0aW9ucyk6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxCbG9iIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZUJhc2U2NE9wdGlvbnMpOiBVc2VCYXNlNjRSZXR1cm47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUJhc2U2NCh0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlCdWZmZXIgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlQmFzZTY0T3B0aW9ucyk6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxIVE1MQ2FudmFzRWxlbWVudCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBUb0RhdGFVUkxPcHRpb25zKTogVXNlQmFzZTY0UmV0dXJuO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCYXNlNjQodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxJbWFnZUVsZW1lbnQgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVG9EYXRhVVJMT3B0aW9ucyk6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVXNlQmFzZTY0T2JqZWN0T3B0aW9uczxUPik6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0PFQgZXh0ZW5kcyBNYXA8c3RyaW5nLCB1bmtub3duPj4odGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVXNlQmFzZTY0T2JqZWN0T3B0aW9uczxUPik6IFVzZUJhc2U2NFJldHVybjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmFzZTY0PFQgZXh0ZW5kcyBTZXQ8dW5rbm93bj4+KHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxUPiwgb3B0aW9ucz86IFVzZUJhc2U2NE9iamVjdE9wdGlvbnM8VD4pOiBVc2VCYXNlNjRSZXR1cm47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUJhc2U2NDxUPih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8VFtdPiwgb3B0aW9ucz86IFVzZUJhc2U2NE9iamVjdE9wdGlvbnM8VFtdPik6IFVzZUJhc2U2NFJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUJhdHRlcnkvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUJhdHRlcnlPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHt9XG5pbnRlcmZhY2UgVXNlQmF0dGVyeVJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgY2hhcmdpbmc6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGNoYXJnaW5nVGltZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBkaXNjaGFyZ2luZ1RpbWU6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgbGV2ZWw6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbn1cbmludGVyZmFjZSBCYXR0ZXJ5TWFuYWdlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY2hhcmdpbmc6IGJvb2xlYW47XG4gIGNoYXJnaW5nVGltZTogbnVtYmVyO1xuICBkaXNjaGFyZ2luZ1RpbWU6IG51bWJlcjtcbiAgbGV2ZWw6IG51bWJlcjtcbn1cbi8qKlxuICogUmVhY3RpdmUgQmF0dGVyeSBTdGF0dXMgQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUJhdHRlcnlcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUJhdHRlcnkob3B0aW9ucz86IFVzZUJhdHRlcnlPcHRpb25zKTogVXNlQmF0dGVyeVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUJsdWV0b290aC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQmx1ZXRvb3RoUmVxdWVzdERldmljZU9wdGlvbnMge1xuICAvKipcbiAgICpcbiAgICogQW4gYXJyYXkgb2YgQmx1ZXRvb3RoU2NhbkZpbHRlcnMuIFRoaXMgZmlsdGVyIGNvbnNpc3RzIG9mIGFuIGFycmF5XG4gICAqIG9mIEJsdWV0b290aFNlcnZpY2VVVUlEcywgYSBuYW1lIHBhcmFtZXRlciwgYW5kIGEgbmFtZVByZWZpeCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqL1xuICBmaWx0ZXJzPzogQmx1ZXRvb3RoTEVTY2FuRmlsdGVyW10gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKlxuICAgKiBBbiBhcnJheSBvZiBCbHVldG9vdGhTZXJ2aWNlVVVJRHMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0JsdWV0b290aFJlbW90ZUdBVFRTZXJ2aWNlL3V1aWRcbiAgICpcbiAgICovXG4gIG9wdGlvbmFsU2VydmljZXM/OiBCbHVldG9vdGhTZXJ2aWNlVVVJRFtdIHwgdW5kZWZpbmVkO1xufVxuaW50ZXJmYWNlIFVzZUJsdWV0b290aE9wdGlvbnMgZXh0ZW5kcyBVc2VCbHVldG9vdGhSZXF1ZXN0RGV2aWNlT3B0aW9ucywgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgLyoqXG4gICAqXG4gICAqIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlcXVlc3Rpbmcgc2NyaXB0IGNhbiBhY2NlcHQgYWxsIEJsdWV0b290aFxuICAgKiBkZXZpY2VzLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS5cbiAgICpcbiAgICogISEgVGhpcyBtYXkgcmVzdWx0IGluIGEgYnVuY2ggb2YgdW5yZWxhdGVkIGRldmljZXMgYmVpbmcgc2hvd25cbiAgICogaW4gdGhlIGNob29zZXIgYW5kIGVuZXJneSBiZWluZyB3YXN0ZWQgYXMgdGhlcmUgYXJlIG5vIGZpbHRlcnMuXG4gICAqXG4gICAqXG4gICAqIFVzZSBpdCB3aXRoIGNhdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqXG4gICAqL1xuICBhY2NlcHRBbGxEZXZpY2VzPzogYm9vbGVhbjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQmx1ZXRvb3RoKG9wdGlvbnM/OiBVc2VCbHVldG9vdGhPcHRpb25zKTogVXNlQmx1ZXRvb3RoUmV0dXJuO1xuaW50ZXJmYWNlIFVzZUJsdWV0b290aFJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgaXNDb25uZWN0ZWQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8Ym9vbGVhbj4+O1xuICBkZXZpY2U6IFNoYWxsb3dSZWY8Qmx1ZXRvb3RoRGV2aWNlIHwgdW5kZWZpbmVkPjtcbiAgcmVxdWVzdERldmljZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgc2VydmVyOiBTaGFsbG93UmVmPEJsdWV0b290aFJlbW90ZUdBVFRTZXJ2ZXIgfCB1bmRlZmluZWQ+O1xuICBlcnJvcjogU2hhbGxvd1JlZjx1bmtub3duIHwgbnVsbD47XG59XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VCcmVha3BvaW50cy9icmVha3BvaW50cy5kLnRzXG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gVGFpbHdpbmQgVjJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJlYWtwb2ludHNcbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c1RhaWx3aW5kOiB7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG4gICcyeGwnOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIEJvb3RzdHJhcCBWNVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4wL2xheW91dC9icmVha3BvaW50c1xuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzQm9vdHN0cmFwVjU6IHtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbiAgeHhsOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIFZ1ZXRpZnkgVjJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdjIudnVldGlmeWpzLmNvbS9lbi9mZWF0dXJlcy9icmVha3BvaW50cy9cbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c1Z1ZXRpZnlWMjoge1xuICB4czogbnVtYmVyO1xuICBzbTogbnVtYmVyO1xuICBtZDogbnVtYmVyO1xuICBsZzogbnVtYmVyO1xuICB4bDogbnVtYmVyO1xufTtcbi8qKlxuICogQnJlYWtwb2ludHMgZnJvbSBWdWV0aWZ5IFYzXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXRpZnlqcy5jb20vZW4vc3R5bGVzL2Zsb2F0LyNvdmVydmlld1xuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzVnVldGlmeVYzOiB7XG4gIHhzOiBudW1iZXI7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG4gIHh4bDogbnVtYmVyO1xufTtcbi8qKlxuICogQWxpYXMgdG8gYGJyZWFrcG9pbnRzVnVldGlmeVYyYFxuICpcbiAqIEBkZXByZWNhdGVkIGV4cGxpY3RseSB1c2UgYGJyZWFrcG9pbnRzVnVldGlmeVYyYCBvciBgYnJlYWtwb2ludHNWdWV0aWZ5VjNgIGluc3RlYWRcbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c1Z1ZXRpZnk6IHtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbn07XG4vKipcbiAqIEJyZWFrcG9pbnRzIGZyb20gQW50IERlc2lnblxuICpcbiAqIEBzZWUgaHR0cHM6Ly9hbnQuZGVzaWduL2NvbXBvbmVudHMvbGF5b3V0LyNicmVha3BvaW50LXdpZHRoXG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNBbnREZXNpZ246IHtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbiAgeHhsOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIFF1YXNhciBWMlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9xdWFzYXIuZGV2L3N0eWxlL2JyZWFrcG9pbnRzXG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNRdWFzYXI6IHtcbiAgeHM6IG51bWJlcjtcbiAgc206IG51bWJlcjtcbiAgbWQ6IG51bWJlcjtcbiAgbGc6IG51bWJlcjtcbiAgeGw6IG51bWJlcjtcbn07XG4vKipcbiAqIFNlbWF0aWMgQnJlYWtwb2ludHNcbiAqL1xuZGVjbGFyZSBjb25zdCBicmVha3BvaW50c1NlbWF0aWM6IHtcbiAgbW9iaWxlUzogbnVtYmVyO1xuICBtb2JpbGVNOiBudW1iZXI7XG4gIG1vYmlsZUw6IG51bWJlcjtcbiAgdGFibGV0OiBudW1iZXI7XG4gIGxhcHRvcDogbnVtYmVyO1xuICBsYXB0b3BMOiBudW1iZXI7XG4gIGRlc2t0b3A0SzogbnVtYmVyO1xufTtcbi8qKlxuICogQnJlYWtwb2ludHMgZnJvbSBNYXN0ZXIgQ1NTXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MubWFzdGVyLmNvL2Nzcy9icmVha3BvaW50c1xuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzTWFzdGVyQ3NzOiB7XG4gICczeHMnOiBudW1iZXI7XG4gICcyeHMnOiBudW1iZXI7XG4gIHhzOiBudW1iZXI7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG4gICcyeGwnOiBudW1iZXI7XG4gICczeGwnOiBudW1iZXI7XG4gICc0eGwnOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIFByaW1lRmxleFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9wcmltZWZsZXgub3JnL2luc3RhbGxhdGlvblxuICovXG5kZWNsYXJlIGNvbnN0IGJyZWFrcG9pbnRzUHJpbWVGbGV4OiB7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG59O1xuLyoqXG4gKiBCcmVha3BvaW50cyBmcm9tIEVsZW1lbnRVSS9FbGVtZW50UGx1c1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9lbGVtZW50LmVsZW1lLmlvLyMvZW4tVVMvY29tcG9uZW50L2xheW91dFxuICogQHNlZSBodHRwczovL2VsZW1lbnQtcGx1cy5vcmcvZW4tVVMvY29tcG9uZW50L2xheW91dC5odG1sXG4gKi9cbmRlY2xhcmUgY29uc3QgYnJlYWtwb2ludHNFbGVtZW50OiB7XG4gIHhzOiBudW1iZXI7XG4gIHNtOiBudW1iZXI7XG4gIG1kOiBudW1iZXI7XG4gIGxnOiBudW1iZXI7XG4gIHhsOiBudW1iZXI7XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQnJlYWtwb2ludHMvaW5kZXguZC50c1xudHlwZSBCcmVha3BvaW50czxLJDEgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0gUmVjb3JkPEskMSwgTWF5YmVSZWZPckdldHRlcjxudW1iZXIgfCBzdHJpbmc+PjtcbmludGVyZmFjZSBVc2VCcmVha3BvaW50c09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogVGhlIHF1ZXJ5IHN0cmF0ZWd5IHRvIHVzZSBmb3IgdGhlIGdlbmVyYXRlZCBzaG9ydGN1dCBtZXRob2RzIGxpa2UgYC5sZ2BcbiAgICpcbiAgICogJ21pbi13aWR0aCcgLSAubGcgd2lsbCBiZSB0cnVlIHdoZW4gdGhlIHZpZXdwb3J0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGcgYnJlYWtwb2ludCAobW9iaWxlLWZpcnN0KVxuICAgKiAnbWF4LXdpZHRoJyAtIC5sZyB3aWxsIGJlIHRydWUgd2hlbiB0aGUgdmlld3BvcnQgaXMgc21hbGxlciB0aGFuIHRoZSB4bCBicmVha3BvaW50IChkZXNrdG9wLWZpcnN0KVxuICAgKlxuICAgKiBAZGVmYXVsdCBcIm1pbi13aWR0aFwiXG4gICAqL1xuICBzdHJhdGVneT86ICdtaW4td2lkdGgnIHwgJ21heC13aWR0aCc7XG4gIHNzcldpZHRoPzogbnVtYmVyO1xufVxudHlwZSBVc2VCcmVha3BvaW50UmV0dXJuPEskMSBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSBSZWNvcmQ8SyQxLCBDb21wdXRlZFJlZjxib29sZWFuPj4gJiB7XG4gIGdyZWF0ZXJPckVxdWFsOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgc21hbGxlck9yRXF1YWw6IChrOiBNYXliZVJlZk9yR2V0dGVyPEskMT4pID0+IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBncmVhdGVyOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgc21hbGxlcjogKGs6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPikgPT4gQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIGJldHdlZW46IChhOiBNYXliZVJlZk9yR2V0dGVyPEskMT4sIGI6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPikgPT4gQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIGlzR3JlYXRlcjogKGs6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPikgPT4gYm9vbGVhbjtcbiAgaXNHcmVhdGVyT3JFcXVhbDogKGs6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPikgPT4gYm9vbGVhbjtcbiAgaXNTbWFsbGVyOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBib29sZWFuO1xuICBpc1NtYWxsZXJPckVxdWFsOiAoazogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBib29sZWFuO1xuICBpc0luQmV0d2VlbjogKGE6IE1heWJlUmVmT3JHZXR0ZXI8SyQxPiwgYjogTWF5YmVSZWZPckdldHRlcjxLJDE+KSA9PiBib29sZWFuO1xuICBjdXJyZW50OiAoKSA9PiBDb21wdXRlZFJlZjxLJDFbXT47XG4gIGFjdGl2ZTogKCkgPT4gQ29tcHV0ZWRSZWY8SyQxIHwgJyc+O1xufTtcbi8qKlxuICogUmVhY3RpdmVseSB2aWV3cG9ydCBicmVha3BvaW50c1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUJyZWFrcG9pbnRzXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCcmVha3BvaW50czxLJDEgZXh0ZW5kcyBzdHJpbmc+KGJyZWFrcG9pbnRzOiBCcmVha3BvaW50czxLJDE+LCBvcHRpb25zPzogVXNlQnJlYWtwb2ludHNPcHRpb25zKTogVXNlQnJlYWtwb2ludFJldHVybjxLJDE+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQnJvYWRjYXN0Q2hhbm5lbC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQnJvYWRjYXN0Q2hhbm5lbE9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG4vKipcbiAqIFJlYWN0aXZlIEJyb2FkY2FzdENoYW5uZWxcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VCcm9hZGNhc3RDaGFubmVsXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ccm9hZGNhc3RDaGFubmVsXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VCcm9hZGNhc3RDaGFubmVsPEQsIFAkMT4ob3B0aW9uczogVXNlQnJvYWRjYXN0Q2hhbm5lbE9wdGlvbnMpOiBVc2VCcm9hZGNhc3RDaGFubmVsUmV0dXJuPEQsIFAkMT47XG5pbnRlcmZhY2UgVXNlQnJvYWRjYXN0Q2hhbm5lbFJldHVybjxELCBQJDE+IGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBjaGFubmVsOiBSZWY8QnJvYWRjYXN0Q2hhbm5lbCB8IHVuZGVmaW5lZD47XG4gIGRhdGE6IFJlZjxEPjtcbiAgcG9zdDogKGRhdGE6IFAkMSkgPT4gdm9pZDtcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG4gIGVycm9yOiBTaGFsbG93UmVmPEV2ZW50IHwgbnVsbD47XG4gIGlzQ2xvc2VkOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xufVxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQnJvd3NlckxvY2F0aW9uL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VCcm93c2VyTG9jYXRpb25PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG5pbnRlcmZhY2UgQnJvd3NlckxvY2F0aW9uU3RhdGUge1xuICByZWFkb25seSB0cmlnZ2VyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXRlPzogYW55O1xuICByZWFkb25seSBsZW5ndGg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9yaWdpbj86IHN0cmluZztcbiAgaGFzaD86IHN0cmluZztcbiAgaG9zdD86IHN0cmluZztcbiAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gIGhyZWY/OiBzdHJpbmc7XG4gIHBhdGhuYW1lPzogc3RyaW5nO1xuICBwb3J0Pzogc3RyaW5nO1xuICBwcm90b2NvbD86IHN0cmluZztcbiAgc2VhcmNoPzogc3RyaW5nO1xufVxudHlwZSBVc2VCcm93c2VyTG9jYXRpb25SZXR1cm4gPSBSZWY8QnJvd3NlckxvY2F0aW9uU3RhdGU+O1xuLyoqXG4gKiBSZWFjdGl2ZSBicm93c2VyIGxvY2F0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUJyb3dzZXJMb2NhdGlvblxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQnJvd3NlckxvY2F0aW9uKG9wdGlvbnM/OiBVc2VCcm93c2VyTG9jYXRpb25PcHRpb25zKTogVXNlQnJvd3NlckxvY2F0aW9uUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ2FjaGVkL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VDYWNoZWRPcHRpb25zPEQgZXh0ZW5kcyBib29sZWFuID0gdHJ1ZT4gZXh0ZW5kcyBDb25maWd1cmFibGVEZWVwUmVmczxEPiwgV2F0Y2hPcHRpb25zIHt9XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNhY2hlZDxULCBEIGV4dGVuZHMgYm9vbGVhbiA9IHRydWU+KHJlZlZhbHVlOiBSZWY8VD4sIGNvbXBhcmF0b3I/OiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiwgb3B0aW9ucz86IFVzZUNhY2hlZE9wdGlvbnM8RD4pOiBVc2VDYWNoZWRSZXR1cm48VCwgRD47XG50eXBlIFVzZUNhY2hlZFJldHVybjxUID0gYW55LCBEIGV4dGVuZHMgYm9vbGVhbiA9IHRydWU+ID0gU2hhbGxvd09yRGVlcFJlZjxULCBEPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUNsaXBib2FyZC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlQ2xpcGJvYXJkT3B0aW9uczxTb3VyY2U+IGV4dGVuZHMgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgLyoqXG4gICAqIEVuYWJsZWQgcmVhZGluZyBmb3IgY2xpcGJvYXJkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvcHkgc291cmNlXG4gICAqL1xuICBzb3VyY2U/OiBTb3VyY2U7XG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgdG8gcmVzZXQgc3RhdGUgb2YgYGNvcGllZGAgcmVmXG4gICAqXG4gICAqIEBkZWZhdWx0IDE1MDBcbiAgICovXG4gIGNvcGllZER1cmluZz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgZmFsbGJhY2sgdG8gZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSBpZiBjbGlwYm9hcmQgaXMgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbGVnYWN5PzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VDbGlwYm9hcmRSZXR1cm48T3B0aW9uYWw+IGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICB0ZXh0OiBSZWFkb25seTxTaGFsbG93UmVmPHN0cmluZz4+O1xuICBjb3BpZWQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8Ym9vbGVhbj4+O1xuICBjb3B5OiBPcHRpb25hbCBleHRlbmRzIHRydWUgPyAodGV4dD86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiA6ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG59XG4vKipcbiAqIFJlYWN0aXZlIENsaXBib2FyZCBBUEkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQ2xpcGJvYXJkXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ2xpcGJvYXJkKG9wdGlvbnM/OiBVc2VDbGlwYm9hcmRPcHRpb25zPHVuZGVmaW5lZD4pOiBVc2VDbGlwYm9hcmRSZXR1cm48ZmFsc2U+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDbGlwYm9hcmQob3B0aW9uczogVXNlQ2xpcGJvYXJkT3B0aW9uczxNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4+KTogVXNlQ2xpcGJvYXJkUmV0dXJuPHRydWU+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ2xpcGJvYXJkSXRlbXMvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUNsaXBib2FyZEl0ZW1zT3B0aW9uczxTb3VyY2U+IGV4dGVuZHMgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgLyoqXG4gICAqIEVuYWJsZWQgcmVhZGluZyBmb3IgY2xpcGJvYXJkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvcHkgc291cmNlXG4gICAqL1xuICBzb3VyY2U/OiBTb3VyY2U7XG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgdG8gcmVzZXQgc3RhdGUgb2YgYGNvcGllZGAgcmVmXG4gICAqXG4gICAqIEBkZWZhdWx0IDE1MDBcbiAgICovXG4gIGNvcGllZER1cmluZz86IG51bWJlcjtcbn1cbmludGVyZmFjZSBVc2VDbGlwYm9hcmRJdGVtc1JldHVybjxPcHRpb25hbD4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIGNvbnRlbnQ6IFJlYWRvbmx5PFJlZjxDbGlwYm9hcmRJdGVtcz4+O1xuICBjb3BpZWQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8Ym9vbGVhbj4+O1xuICBjb3B5OiBPcHRpb25hbCBleHRlbmRzIHRydWUgPyAoY29udGVudD86IENsaXBib2FyZEl0ZW1zKSA9PiBQcm9taXNlPHZvaWQ+IDogKHRleHQ6IENsaXBib2FyZEl0ZW1zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBDbGlwYm9hcmQgQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUNsaXBib2FyZEl0ZW1zXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ2xpcGJvYXJkSXRlbXMob3B0aW9ucz86IFVzZUNsaXBib2FyZEl0ZW1zT3B0aW9uczx1bmRlZmluZWQ+KTogVXNlQ2xpcGJvYXJkSXRlbXNSZXR1cm48ZmFsc2U+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDbGlwYm9hcmRJdGVtcyhvcHRpb25zOiBVc2VDbGlwYm9hcmRJdGVtc09wdGlvbnM8TWF5YmVSZWZPckdldHRlcjxDbGlwYm9hcmRJdGVtcz4+KTogVXNlQ2xpcGJvYXJkSXRlbXNSZXR1cm48dHJ1ZT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDbG9uZWQvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUNsb25lZE9wdGlvbnM8VCA9IGFueT4gZXh0ZW5kcyBXYXRjaE9wdGlvbnMge1xuICAvKipcbiAgICogQ3VzdG9tIGNsb25lIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2UgYEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKWAgdG8gY2xvbmUuXG4gICAqL1xuICBjbG9uZT86IChzb3VyY2U6IFQpID0+IFQ7XG4gIC8qKlxuICAgKiBNYW51YWxseSBzeW5jIHRoZSByZWZcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1hbnVhbD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlQ2xvbmVkUmV0dXJuPFQ+IHtcbiAgLyoqXG4gICAqIENsb25lZCByZWZcbiAgICovXG4gIGNsb25lZDogUmVmPFQ+O1xuICAvKipcbiAgICogUmVmIGluZGljYXRlcyB3aGV0aGVyIHRoZSBjbG9uZWQgZGF0YSBpcyBtb2RpZmllZFxuICAgKi9cbiAgaXNNb2RpZmllZDogUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogU3luYyBjbG9uZWQgZGF0YSB3aXRoIHNvdXJjZSBtYW51YWxseVxuICAgKi9cbiAgc3luYzogKCkgPT4gdm9pZDtcbn1cbnR5cGUgQ2xvbmVGbjxGLCBUID0gRj4gPSAoeDogRikgPT4gVDtcbmRlY2xhcmUgZnVuY3Rpb24gY2xvbmVGbkpTT048VD4oc291cmNlOiBUKTogVDtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ2xvbmVkPFQ+KHNvdXJjZTogTWF5YmVSZWZPckdldHRlcjxUPiwgb3B0aW9ucz86IFVzZUNsb25lZE9wdGlvbnMpOiBVc2VDbG9uZWRSZXR1cm48VD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzc3ItaGFuZGxlcnMuZC50c1xuaW50ZXJmYWNlIFN0b3JhZ2VMaWtlQXN5bmMge1xuICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IEF3YWl0YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiBBd2FpdGFibGU8dm9pZD47XG4gIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gQXdhaXRhYmxlPHZvaWQ+O1xufVxuaW50ZXJmYWNlIFN0b3JhZ2VMaWtlIHtcbiAgZ2V0SXRlbTogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gdm9pZDtcbn1cbi8qKlxuICogQGV4cGVyaW1lbnRhbCBUaGUgQVBJIGlzIG5vdCBmaW5hbGl6ZWQgeWV0LiBJdCBtaWdodCBub3QgZm9sbG93IHNlbXZlci5cbiAqL1xuaW50ZXJmYWNlIFNTUkhhbmRsZXJzTWFwIHtcbiAgZ2V0RGVmYXVsdFN0b3JhZ2U6ICgpID0+IFN0b3JhZ2VMaWtlIHwgdW5kZWZpbmVkO1xuICBnZXREZWZhdWx0U3RvcmFnZUFzeW5jOiAoKSA9PiBTdG9yYWdlTGlrZUFzeW5jIHwgdW5kZWZpbmVkO1xuICB1cGRhdGVIVE1MQXR0cnM6IChzZWxlY3Rvcjogc3RyaW5nIHwgTWF5YmVFbGVtZW50UmVmLCBhdHRyaWJ1dGU6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gZ2V0U1NSSGFuZGxlcjxUIGV4dGVuZHMga2V5b2YgU1NSSGFuZGxlcnNNYXA+KGtleTogVCwgZmFsbGJhY2s6IFNTUkhhbmRsZXJzTWFwW1RdKTogU1NSSGFuZGxlcnNNYXBbVF07XG5kZWNsYXJlIGZ1bmN0aW9uIGdldFNTUkhhbmRsZXI8VCBleHRlbmRzIGtleW9mIFNTUkhhbmRsZXJzTWFwPihrZXk6IFQsIGZhbGxiYWNrOiBTU1JIYW5kbGVyc01hcFtUXSB8IHVuZGVmaW5lZCk6IFNTUkhhbmRsZXJzTWFwW1RdIHwgdW5kZWZpbmVkO1xuZGVjbGFyZSBmdW5jdGlvbiBzZXRTU1JIYW5kbGVyPFQgZXh0ZW5kcyBrZXlvZiBTU1JIYW5kbGVyc01hcD4oa2V5OiBULCBmbjogU1NSSGFuZGxlcnNNYXBbVF0pOiB2b2lkO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3RvcmFnZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgU2VyaWFsaXplcjxUPiB7XG4gIHJlYWQ6IChyYXc6IHN0cmluZykgPT4gVDtcbiAgd3JpdGU6ICh2YWx1ZTogVCkgPT4gc3RyaW5nO1xufVxuaW50ZXJmYWNlIFNlcmlhbGl6ZXJBc3luYzxUPiB7XG4gIHJlYWQ6IChyYXc6IHN0cmluZykgPT4gQXdhaXRhYmxlPFQ+O1xuICB3cml0ZTogKHZhbHVlOiBUKSA9PiBBd2FpdGFibGU8c3RyaW5nPjtcbn1cbmRlY2xhcmUgY29uc3QgU3RvcmFnZVNlcmlhbGl6ZXJzOiBSZWNvcmQ8J2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnbnVtYmVyJyB8ICdhbnknIHwgJ3N0cmluZycgfCAnbWFwJyB8ICdzZXQnIHwgJ2RhdGUnLCBTZXJpYWxpemVyPGFueT4+O1xuZGVjbGFyZSBjb25zdCBjdXN0b21TdG9yYWdlRXZlbnROYW1lID0gXCJ2dWV1c2Utc3RvcmFnZVwiO1xuaW50ZXJmYWNlIFN0b3JhZ2VFdmVudExpa2Uge1xuICBzdG9yYWdlQXJlYTogU3RvcmFnZUxpa2UgfCBudWxsO1xuICBrZXk6IFN0b3JhZ2VFdmVudFsna2V5J107XG4gIG9sZFZhbHVlOiBTdG9yYWdlRXZlbnRbJ29sZFZhbHVlJ107XG4gIG5ld1ZhbHVlOiBTdG9yYWdlRXZlbnRbJ25ld1ZhbHVlJ107XG59XG5pbnRlcmZhY2UgVXNlU3RvcmFnZU9wdGlvbnM8VD4gZXh0ZW5kcyBDb25maWd1cmFibGVFdmVudEZpbHRlciwgQ29uZmlndXJhYmxlV2luZG93LCBDb25maWd1cmFibGVGbHVzaCB7XG4gIC8qKlxuICAgKiBXYXRjaCBmb3IgZGVlcCBjaGFuZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGRlZXA/OiBib29sZWFuO1xuICAvKipcbiAgICogTGlzdGVuIHRvIHN0b3JhZ2UgY2hhbmdlcywgdXNlZnVsIGZvciBtdWx0aXBsZSB0YWJzIGFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGxpc3RlblRvU3RvcmFnZUNoYW5nZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogV3JpdGUgdGhlIGRlZmF1bHQgdmFsdWUgdG8gdGhlIHN0b3JhZ2Ugd2hlbiBpdCBkb2VzIG5vdCBleGlzdFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB3cml0ZURlZmF1bHRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE1lcmdlIHRoZSBkZWZhdWx0IHZhbHVlIHdpdGggdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgc3RvcmFnZS5cbiAgICpcbiAgICogV2hlbiBzZXR0aW5nIGl0IHRvIHRydWUsIGl0IHdpbGwgcGVyZm9ybSBhICoqc2hhbGxvdyBtZXJnZSoqIGZvciBvYmplY3RzLlxuICAgKiBZb3UgY2FuIHBhc3MgYSBmdW5jdGlvbiB0byBwZXJmb3JtIGN1c3RvbSBtZXJnZSAoZS5nLiBkZWVwIG1lcmdlKSwgZm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtZXJnZURlZmF1bHRzPzogYm9vbGVhbiB8ICgoc3RvcmFnZVZhbHVlOiBULCBkZWZhdWx0czogVCkgPT4gVCk7XG4gIC8qKlxuICAgKiBDdXN0b20gZGF0YSBzZXJpYWxpemF0aW9uXG4gICAqL1xuICBzZXJpYWxpemVyPzogU2VyaWFsaXplcjxUPjtcbiAgLyoqXG4gICAqIE9uIGVycm9yIGNhbGxiYWNrXG4gICAqXG4gICAqIERlZmF1bHQgbG9nIGVycm9yIHRvIGBjb25zb2xlLmVycm9yYFxuICAgKi9cbiAgb25FcnJvcj86IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSBzaGFsbG93IHJlZiBhcyByZWZlcmVuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNoYWxsb3c/OiBib29sZWFuO1xuICAvKipcbiAgICogV2FpdCBmb3IgdGhlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGJlZm9yZSByZWFkaW5nIHRoZSBzdG9yYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5pdE9uTW91bnRlZD86IGJvb2xlYW47XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGRlZmF1bHRzOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZSwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPHN0cmluZz4pOiBSZW1vdmFibGVSZWY8c3RyaW5nPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgZGVmYXVsdHM6IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZSwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPGJvb2xlYW4+KTogUmVtb3ZhYmxlUmVmPGJvb2xlYW4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlKGtleTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBkZWZhdWx0czogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+LCBzdG9yYWdlPzogU3RvcmFnZUxpa2UsIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxudW1iZXI+KTogUmVtb3ZhYmxlUmVmPG51bWJlcj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0b3JhZ2U8VD4oa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGRlZmF1bHRzOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBzdG9yYWdlPzogU3RvcmFnZUxpa2UsIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxUPik6IFJlbW92YWJsZVJlZjxUPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZTxUID0gdW5rbm93bj4oa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGRlZmF1bHRzOiBNYXliZVJlZk9yR2V0dGVyPG51bGw+LCBzdG9yYWdlPzogU3RvcmFnZUxpa2UsIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxUPik6IFJlbW92YWJsZVJlZjxUPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUNvbG9yTW9kZS9pbmRleC5kLnRzXG50eXBlIEJhc2ljQ29sb3JNb2RlID0gJ2xpZ2h0JyB8ICdkYXJrJztcbnR5cGUgQmFzaWNDb2xvclNjaGVtYSA9IEJhc2ljQ29sb3JNb2RlIHwgJ2F1dG8nO1xuaW50ZXJmYWNlIFVzZUNvbG9yTW9kZU9wdGlvbnM8VCBleHRlbmRzIHN0cmluZyA9IEJhc2ljQ29sb3JNb2RlPiBleHRlbmRzIFVzZVN0b3JhZ2VPcHRpb25zPFQgfCBCYXNpY0NvbG9yTW9kZT4ge1xuICAvKipcbiAgICogQ1NTIFNlbGVjdG9yIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQgYXBwbHlpbmcgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgJ2h0bWwnXG4gICAqL1xuICBzZWxlY3Rvcj86IHN0cmluZyB8IE1heWJlRWxlbWVudFJlZjtcbiAgLyoqXG4gICAqIEhUTUwgYXR0cmlidXRlIGFwcGx5aW5nIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAnY2xhc3MnXG4gICAqL1xuICBhdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBjb2xvciBtb2RlXG4gICAqXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogTWF5YmVSZWZPckdldHRlcjxUIHwgQmFzaWNDb2xvclNjaGVtYT47XG4gIC8qKlxuICAgKiBQcmVmaXggd2hlbiBhZGRpbmcgdmFsdWUgdG8gdGhlIGF0dHJpYnV0ZVxuICAgKi9cbiAgbW9kZXM/OiBQYXJ0aWFsPFJlY29yZDxUIHwgQmFzaWNDb2xvclNjaGVtYSwgc3RyaW5nPj47XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGZvciBoYW5kbGUgdGhlIHVwZGF0ZXMuXG4gICAqIFdoZW4gc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgb25DaGFuZ2VkPzogKG1vZGU6IFQgfCBCYXNpY0NvbG9yTW9kZSwgZGVmYXVsdEhhbmRsZXI6ICgobW9kZTogVCB8IEJhc2ljQ29sb3JNb2RlKSA9PiB2b2lkKSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEN1c3RvbSBzdG9yYWdlIHJlZlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBgdXNlU3RvcmFnZWAgd2lsbCBiZSBza2lwcGVkXG4gICAqL1xuICBzdG9yYWdlUmVmPzogUmVmPFQgfCBCYXNpY0NvbG9yU2NoZW1hPjtcbiAgLyoqXG4gICAqIEtleSB0byBwZXJzaXN0IHRoZSBkYXRhIGludG8gbG9jYWxTdG9yYWdlL3Nlc3Npb25TdG9yYWdlLlxuICAgKlxuICAgKiBQYXNzIGBudWxsYCB0byBkaXNhYmxlIHBlcnNpc3RlbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0ICd2dWV1c2UtY29sb3Itc2NoZW1lJ1xuICAgKi9cbiAgc3RvcmFnZUtleT86IHN0cmluZyB8IG51bGw7XG4gIC8qKlxuICAgKiBTdG9yYWdlIG9iamVjdCwgY2FuIGJlIGxvY2FsU3RvcmFnZSBvciBzZXNzaW9uU3RvcmFnZVxuICAgKlxuICAgKiBAZGVmYXVsdCBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZTtcbiAgLyoqXG4gICAqIEVtaXQgYGF1dG9gIG1vZGUgZnJvbSBzdGF0ZVxuICAgKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHByZWZlcnJlZCBtb2RlIHdvbid0IGJlIHRyYW5zbGF0ZWQgaW50byBgbGlnaHRgIG9yIGBkYXJrYC5cbiAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgZmFjdCB0aGF0IGBhdXRvYCBtb2RlIHdhcyBzZWxlY3RlZCBuZWVkcyB0byBiZSBrbm93bi5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgc3RvcmUudmFsdWVgIHdoZW4gYGF1dG9gIG1vZGUgbmVlZHMgdG8gYmUga25vd25cbiAgICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvY29yZS91c2VDb2xvck1vZGUvI2FkdmFuY2VkLXVzYWdlXG4gICAqL1xuICBlbWl0QXV0bz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEaXNhYmxlIHRyYW5zaXRpb24gb24gc3dpdGNoXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wYWNvLm1lL3dyaXRpbmcvZGlzYWJsZS10aGVtZS10cmFuc2l0aW9uc1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkaXNhYmxlVHJhbnNpdGlvbj86IGJvb2xlYW47XG59XG50eXBlIFVzZUNvbG9yTW9kZVJldHVybjxUIGV4dGVuZHMgc3RyaW5nID0gQmFzaWNDb2xvck1vZGU+ID0gUmVmPFQgfCBCYXNpY0NvbG9yU2NoZW1hPiAmIHtcbiAgc3RvcmU6IFJlZjxUIHwgQmFzaWNDb2xvclNjaGVtYT47XG4gIHN5c3RlbTogQ29tcHV0ZWRSZWY8QmFzaWNDb2xvck1vZGU+O1xuICBzdGF0ZTogQ29tcHV0ZWRSZWY8VCB8IEJhc2ljQ29sb3JNb2RlPjtcbn07XG4vKipcbiAqIFJlYWN0aXZlIGNvbG9yIG1vZGUgd2l0aCBhdXRvIGRhdGEgcGVyc2lzdGVuY2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlQ29sb3JNb2RlXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNvbG9yTW9kZTxUIGV4dGVuZHMgc3RyaW5nID0gQmFzaWNDb2xvck1vZGU+KG9wdGlvbnM/OiBVc2VDb2xvck1vZGVPcHRpb25zPFQ+KTogVXNlQ29sb3JNb2RlUmV0dXJuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ29uZmlybURpYWxvZy9pbmRleC5kLnRzXG50eXBlIFVzZUNvbmZpcm1EaWFsb2dSZXZlYWxSZXN1bHQ8QywgRD4gPSB7XG4gIGRhdGE/OiBDO1xuICBpc0NhbmNlbGVkOiBmYWxzZTtcbn0gfCB7XG4gIGRhdGE/OiBEO1xuICBpc0NhbmNlbGVkOiB0cnVlO1xufTtcbmludGVyZmFjZSBVc2VDb25maXJtRGlhbG9nUmV0dXJuPFJldmVhbERhdGEsIENvbmZpcm1EYXRhLCBDYW5jZWxEYXRhPiB7XG4gIC8qKlxuICAgKiBSZXZlYWxpbmcgc3RhdGVcbiAgICovXG4gIGlzUmV2ZWFsZWQ6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogT3BlbnMgdGhlIGRpYWxvZy5cbiAgICogQ3JlYXRlIHByb21pc2UgYW5kIHJldHVybiBpdC4gVHJpZ2dlcnMgYG9uUmV2ZWFsYCBob29rLlxuICAgKi9cbiAgcmV2ZWFsOiAoZGF0YT86IFJldmVhbERhdGEpID0+IFByb21pc2U8VXNlQ29uZmlybURpYWxvZ1JldmVhbFJlc3VsdDxDb25maXJtRGF0YSwgQ2FuY2VsRGF0YT4+O1xuICAvKipcbiAgICogQ29uZmlybXMgYW5kIGNsb3NlcyB0aGUgZGlhbG9nLiBUcmlnZ2VycyBhIGNhbGxiYWNrIGluc2lkZSBgb25Db25maXJtYCBob29rLlxuICAgKiBSZXNvbHZlcyBwcm9taXNlIGZyb20gYHJldmVhbCgpYCB3aXRoIGBkYXRhYCBhbmQgYGlzQ2FuY2VsZWRgIHJlZiB3aXRoIGBmYWxzZWAgdmFsdWUuXG4gICAqIENhbiBhY2NlcHQgYW55IGRhdGEgYW5kIHRvIHBhc3MgaXQgdG8gYG9uQ29uZmlybWAgaG9vay5cbiAgICovXG4gIGNvbmZpcm06IChkYXRhPzogQ29uZmlybURhdGEpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYW5jZWxzIGFuZCBjbG9zZXMgdGhlIGRpYWxvZy4gVHJpZ2dlcnMgYSBjYWxsYmFjayBpbnNpZGUgYG9uQ2FuY2VsYCBob29rLlxuICAgKiBSZXNvbHZlcyBwcm9taXNlIGZyb20gYHJldmVhbCgpYCB3aXRoIGBkYXRhYCBhbmQgYGlzQ2FuY2VsZWRgIHJlZiB3aXRoIGB0cnVlYCB2YWx1ZS5cbiAgICogQ2FuIGFjY2VwdCBhbnkgZGF0YSBhbmQgdG8gcGFzcyBpdCB0byBgb25DYW5jZWxgIGhvb2suXG4gICAqL1xuICBjYW5jZWw6IChkYXRhPzogQ2FuY2VsRGF0YSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIEV2ZW50IEhvb2sgdG8gYmUgdHJpZ2dlcmVkIHJpZ2h0IGJlZm9yZSBkaWFsb2cgY3JlYXRpbmcuXG4gICAqL1xuICBvblJldmVhbDogRXZlbnRIb29rT248UmV2ZWFsRGF0YT47XG4gIC8qKlxuICAgKiBFdmVudCBIb29rIHRvIGJlIGNhbGxlZCBvbiBgY29uZmlybSgpYC5cbiAgICogR2V0cyBkYXRhIG9iamVjdCBmcm9tIGBjb25maXJtYCBmdW5jdGlvbi5cbiAgICovXG4gIG9uQ29uZmlybTogRXZlbnRIb29rT248Q29uZmlybURhdGE+O1xuICAvKipcbiAgICogRXZlbnQgSG9vayB0byBiZSBjYWxsZWQgb24gYGNhbmNlbCgpYC5cbiAgICogR2V0cyBkYXRhIG9iamVjdCBmcm9tIGBjYW5jZWxgIGZ1bmN0aW9uLlxuICAgKi9cbiAgb25DYW5jZWw6IEV2ZW50SG9va09uPENhbmNlbERhdGE+O1xufVxuLyoqXG4gKiBIb29rcyBmb3IgY3JlYXRpbmcgY29uZmlybSBkaWFsb2dzLiBVc2VmdWwgZm9yIG1vZGFsIHdpbmRvd3MsIHBvcHVwcyBhbmQgbG9naW5zLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUNvbmZpcm1EaWFsb2cvXG4gKiBAcGFyYW0gcmV2ZWFsZWQgYGJvb2xlYW5gIGByZWZgIHRoYXQgaGFuZGxlcyBhIG1vZGFsIHdpbmRvd1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ29uZmlybURpYWxvZzxSZXZlYWxEYXRhID0gYW55LCBDb25maXJtRGF0YSA9IGFueSwgQ2FuY2VsRGF0YSA9IGFueT4ocmV2ZWFsZWQ/OiBTaGFsbG93UmVmPGJvb2xlYW4+KTogVXNlQ29uZmlybURpYWxvZ1JldHVybjxSZXZlYWxEYXRhLCBDb25maXJtRGF0YSwgQ2FuY2VsRGF0YT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDb3VudGRvd24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUNvdW50ZG93bk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVTY2hlZHVsZXIge1xuICAvKipcbiAgICogIEludGVydmFsIGZvciB0aGUgY291bnRkb3duIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCBpcyAxMDAwbXMuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICovXG4gIGludGVydmFsPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+O1xuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGNvdW50ZG93biByZWFjaGVzIDAuXG4gICAqL1xuICBvbkNvbXBsZXRlPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBvbiBlYWNoIHRpY2sgb2YgdGhlIGNvdW50ZG93bi5cbiAgICovXG4gIG9uVGljaz86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgY291bnRkb3duIGltbWVkaWF0ZWx5XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlQ291bnRkb3duUmV0dXJuIGV4dGVuZHMgUGF1c2FibGUge1xuICAvKipcbiAgICogQ3VycmVudCBjb3VudGRvd24gdmFsdWUuXG4gICAqL1xuICByZW1haW5pbmc6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgY291bnRkb3duIGFuZCByZXBlYXRzTGVmdCB0byB0aGVpciBpbml0aWFsIHZhbHVlcy5cbiAgICovXG4gIHJlc2V0OiAoY291bnRkb3duPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+KSA9PiB2b2lkO1xuICAvKipcbiAgICogU3RvcHMgdGhlIGNvdW50ZG93biBhbmQgcmVzZXRzIGl0cyBzdGF0ZS5cbiAgICovXG4gIHN0b3A6ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY291bnRkb3duIGFuZCBzdGFydCBpdCBhZ2Fpbi5cbiAgICovXG4gIHN0YXJ0OiAoY291bnRkb3duPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+KSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBjb3VudGRvd24gdGltZXIgaW4gc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gaW5pdGlhbENvdW50ZG93blxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VDb3VudGRvd25cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDb3VudGRvd24oaW5pdGlhbENvdW50ZG93bjogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+LCBvcHRpb25zPzogVXNlQ291bnRkb3duT3B0aW9ucyk6IFVzZUNvdW50ZG93blJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUNzc1N1cHBvcnRzL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VDc3NTdXBwb3J0c09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICBzc3JWYWx1ZT86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlQ3NzU3VwcG9ydHNSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7fVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VDc3NTdXBwb3J0cyhwcm9wZXJ0eTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCB2YWx1ZTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBvcHRpb25zPzogVXNlQ3NzU3VwcG9ydHNPcHRpb25zKTogVXNlQ3NzU3VwcG9ydHNSZXR1cm47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUNzc1N1cHBvcnRzKGNvbmRpdGlvblRleHQ6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgb3B0aW9ucz86IFVzZUNzc1N1cHBvcnRzT3B0aW9ucyk6IFVzZUNzc1N1cHBvcnRzUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ3NzVmFyL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VDc3NWYXJPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgaW5pdGlhbFZhbHVlPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIE11dGF0aW9uT2JzZXJ2ZXIgdG8gbW9uaXRvciB2YXJpYWJsZSBjaGFuZ2VzXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBvYnNlcnZlPzogYm9vbGVhbjtcbn1cbi8qKlxuICogTWFuaXB1bGF0ZSBDU1MgdmFyaWFibGVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUNzc1ZhclxuICogQHBhcmFtIHByb3BcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlQ3NzVmFyKHByb3A6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4sIHRhcmdldD86IE1heWJlRWxlbWVudFJlZiwgb3B0aW9ucz86IFVzZUNzc1Zhck9wdGlvbnMpOiB2dWUwLlNoYWxsb3dSZWY8c3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlQ3VycmVudEVsZW1lbnQvaW5kZXguZC50c1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VDdXJyZW50RWxlbWVudDxUIGV4dGVuZHMgTWF5YmVFbGVtZW50ID0gTWF5YmVFbGVtZW50LCBSJDEgZXh0ZW5kcyBWdWVJbnN0YW5jZSA9IFZ1ZUluc3RhbmNlLCBFIGV4dGVuZHMgTWF5YmVFbGVtZW50ID0gKE1heWJlRWxlbWVudCBleHRlbmRzIFQgPyBJc0FueTxSJDFbJyRlbCddPiBleHRlbmRzIGZhbHNlID8gUiQxWyckZWwnXSA6IFQgOiBUKT4ocm9vdENvbXBvbmVudD86IE1heWJlRWxlbWVudFJlZjxSJDE+KTogX3Z1ZXVzZV9zaGFyZWQwLkNvbXB1dGVkUmVmV2l0aENvbnRyb2w8RT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VDeWNsZUxpc3QvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUN5Y2xlTGlzdE9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHN0YXRlLlxuICAgKiBBIHJlZiBjYW4gYmUgcHJvdmlkZWQgdG8gcmV1c2UuXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBNYXliZVJlZjxUPjtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGluZGV4IHdoZW5cbiAgICovXG4gIGZhbGxiYWNrSW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICovXG4gIGdldEluZGV4T2Y/OiAodmFsdWU6IFQsIGxpc3Q6IFRbXSkgPT4gbnVtYmVyO1xufVxuLyoqXG4gKiBDeWNsZSB0aHJvdWdoIGEgbGlzdCBvZiBpdGVtc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUN5Y2xlTGlzdFxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUN5Y2xlTGlzdDxUPihsaXN0OiBNYXliZVJlZk9yR2V0dGVyPFRbXT4sIG9wdGlvbnM/OiBVc2VDeWNsZUxpc3RPcHRpb25zPFQ+KTogVXNlQ3ljbGVMaXN0UmV0dXJuPFQ+O1xuaW50ZXJmYWNlIFVzZUN5Y2xlTGlzdFJldHVybjxUPiB7XG4gIHN0YXRlOiBTaGFsbG93UmVmPFQ+O1xuICBpbmRleDogV3JpdGFibGVDb21wdXRlZFJlZjxudW1iZXI+O1xuICBuZXh0OiAobj86IG51bWJlcikgPT4gVDtcbiAgcHJldjogKG4/OiBudW1iZXIpID0+IFQ7XG4gIC8qKlxuICAgKiBHbyB0byBhIHNwZWNpZmljIGluZGV4XG4gICAqL1xuICBnbzogKGk6IG51bWJlcikgPT4gVDtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZURhcmsvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURhcmtPcHRpb25zIGV4dGVuZHMgT21pdDxVc2VDb2xvck1vZGVPcHRpb25zPEJhc2ljQ29sb3JTY2hlbWE+LCAnbW9kZXMnIHwgJ29uQ2hhbmdlZCc+IHtcbiAgLyoqXG4gICAqIFZhbHVlIGFwcGx5aW5nIHRvIHRoZSB0YXJnZXQgZWxlbWVudCB3aGVuIGlzRGFyaz10cnVlXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkYXJrJ1xuICAgKi9cbiAgdmFsdWVEYXJrPzogc3RyaW5nO1xuICAvKipcbiAgICogVmFsdWUgYXBwbHlpbmcgdG8gdGhlIHRhcmdldCBlbGVtZW50IHdoZW4gaXNEYXJrPWZhbHNlXG4gICAqXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICB2YWx1ZUxpZ2h0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBmb3IgaGFuZGxlIHRoZSB1cGRhdGVzLlxuICAgKiBXaGVuIHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIG9uQ2hhbmdlZD86IChpc0Rhcms6IGJvb2xlYW4sIGRlZmF1bHRIYW5kbGVyOiAoKG1vZGU6IEJhc2ljQ29sb3JTY2hlbWEpID0+IHZvaWQpLCBtb2RlOiBCYXNpY0NvbG9yU2NoZW1hKSA9PiB2b2lkO1xufVxudHlwZSBVc2VEYXJrUmV0dXJuID0gV3JpdGFibGVDb21wdXRlZFJlZjxib29sZWFuPjtcbi8qKlxuICogUmVhY3RpdmUgZGFyayBtb2RlIHdpdGggYXV0byBkYXRhIHBlcnNpc3RlbmNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURhcmtcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRGFyayhvcHRpb25zPzogVXNlRGFya09wdGlvbnMpOiBVc2VEYXJrUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTWFudWFsUmVmSGlzdG9yeS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlUmVmSGlzdG9yeVJlY29yZDxUPiB7XG4gIHNuYXBzaG90OiBUO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cbmludGVyZmFjZSBVc2VNYW51YWxSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+IHtcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGhpc3RvcnkgdG8gYmUga2VwdC4gRGVmYXVsdCB0byB1bmxpbWl0ZWQuXG4gICAqL1xuICBjYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIENsb25lIHdoZW4gdGFraW5nIGEgc25hcHNob3QsIHNob3J0Y3V0IGZvciBkdW1wOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuXG4gICAqIERlZmF1bHQgdG8gZmFsc2VcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb25lPzogYm9vbGVhbiB8IENsb25lRm48UmF3PjtcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBkYXRhIGludG8gdGhlIGhpc3RvcnlcbiAgICovXG4gIGR1bXA/OiAodjogUmF3KSA9PiBTZXJpYWxpemVkO1xuICAvKipcbiAgICogRGVzZXJpYWxpemUgZGF0YSBmcm9tIHRoZSBoaXN0b3J5XG4gICAqL1xuICBwYXJzZT86ICh2OiBTZXJpYWxpemVkKSA9PiBSYXc7XG4gIC8qKlxuICAgKiBzZXQgZGF0YSBzb3VyY2VcbiAgICovXG4gIHNldFNvdXJjZT86IChzb3VyY2U6IFJlZjxSYXc+LCB2OiBSYXcpID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgVXNlTWFudWFsUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+IHtcbiAgLyoqXG4gICAqIEJ5cGFzc2VkIHRyYWNraW5nIHJlZiBmcm9tIHRoZSBhcmd1bWVudFxuICAgKi9cbiAgc291cmNlOiBSZWY8UmF3PjtcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGhpc3RvcnkgcmVjb3JkcyBmb3IgdW5kbywgbmV3ZXN0IGNvbWVzIHRvIGZpcnN0XG4gICAqL1xuICBoaXN0b3J5OiBSZWY8VXNlUmVmSGlzdG9yeVJlY29yZDxTZXJpYWxpemVkPltdPjtcbiAgLyoqXG4gICAqIExhc3QgaGlzdG9yeSBwb2ludCwgc291cmNlIGNhbiBiZSBkaWZmZXJlbnQgaWYgcGF1c2VkXG4gICAqL1xuICBsYXN0OiBSZWY8VXNlUmVmSGlzdG9yeVJlY29yZDxTZXJpYWxpemVkPj47XG4gIC8qKlxuICAgKiBTYW1lIGFzIHtAbGluayBVc2VNYW51YWxSZWZIaXN0b3J5UmV0dXJuLmhpc3RvcnkgfCBoaXN0b3J5fVxuICAgKi9cbiAgdW5kb1N0YWNrOiBSZWY8VXNlUmVmSGlzdG9yeVJlY29yZDxTZXJpYWxpemVkPltdPjtcbiAgLyoqXG4gICAqIFJlY29yZHMgYXJyYXkgZm9yIHJlZG9cbiAgICovXG4gIHJlZG9TdGFjazogUmVmPFVzZVJlZkhpc3RvcnlSZWNvcmQ8U2VyaWFsaXplZD5bXT47XG4gIC8qKlxuICAgKiBBIHJlZiByZXByZXNlbnRpbmcgaWYgdW5kbyBpcyBwb3NzaWJsZSAobm9uIGVtcHR5IHVuZG9TdGFjaylcbiAgICovXG4gIGNhblVuZG86IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogQSByZWYgcmVwcmVzZW50aW5nIGlmIHJlZG8gaXMgcG9zc2libGUgKG5vbiBlbXB0eSByZWRvU3RhY2spXG4gICAqL1xuICBjYW5SZWRvOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIFVuZG8gY2hhbmdlc1xuICAgKi9cbiAgdW5kbzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlZG8gY2hhbmdlc1xuICAgKi9cbiAgcmVkbzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENsZWFyIGFsbCB0aGUgaGlzdG9yeVxuICAgKi9cbiAgY2xlYXI6ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgaGlzdG9yeSByZWNvcmRcbiAgICovXG4gIGNvbW1pdDogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlc2V0IHJlZidzIHZhbHVlIHdpdGggbGF0ZXN0IGhpc3RvcnlcbiAgICovXG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBUcmFjayB0aGUgY2hhbmdlIGhpc3Rvcnkgb2YgYSByZWYsIGFsc28gcHJvdmlkZXMgdW5kbyBhbmQgcmVkbyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU1hbnVhbFJlZkhpc3RvcnlcbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTWFudWFsUmVmSGlzdG9yeTxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+KHNvdXJjZTogUmVmPFJhdz4sIG9wdGlvbnM/OiBVc2VNYW51YWxSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQ+KTogVXNlTWFudWFsUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUmVmSGlzdG9yeS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlUmVmSGlzdG9yeU9wdGlvbnM8UmF3LCBTZXJpYWxpemVkID0gUmF3PiBleHRlbmRzIENvbmZpZ3VyYWJsZUV2ZW50RmlsdGVyLCBDb25maWd1cmFibGVGbHVzaCB7XG4gIC8qKlxuICAgKiBXYXRjaCBmb3IgZGVlcCBjaGFuZ2VzLCBkZWZhdWx0IHRvIGZhbHNlXG4gICAqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIGl0IHdpbGwgYWxzbyBjcmVhdGUgY2xvbmVzIGZvciB2YWx1ZXMgc3RvcmUgaW4gdGhlIGhpc3RvcnlcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZXA/OiBib29sZWFuO1xuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgaGlzdG9yeSB0byBiZSBrZXB0LiBEZWZhdWx0IHRvIHVubGltaXRlZC5cbiAgICovXG4gIGNhcGFjaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogQ2xvbmUgd2hlbiB0YWtpbmcgYSBzbmFwc2hvdCwgc2hvcnRjdXQgZm9yIGR1bXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKS5cbiAgICogRGVmYXVsdCB0byBmYWxzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2xvbmU/OiBib29sZWFuIHwgQ2xvbmVGbjxSYXc+O1xuICAvKipcbiAgICogU2VyaWFsaXplIGRhdGEgaW50byB0aGUgaGlzdG9yeVxuICAgKi9cbiAgZHVtcD86ICh2OiBSYXcpID0+IFNlcmlhbGl6ZWQ7XG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBkYXRhIGZyb20gdGhlIGhpc3RvcnlcbiAgICovXG4gIHBhcnNlPzogKHY6IFNlcmlhbGl6ZWQpID0+IFJhdztcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgY29tbWl0IHNob3VsZCBwcm9jZWVkXG4gICAqIEBwYXJhbSBvbGRWYWx1ZSBQcmV2aW91cyB2YWx1ZVxuICAgKiBAcGFyYW0gbmV3VmFsdWUgTmV3IHZhbHVlXG4gICAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiBjb21taXQgc2hvdWxkIHByb2NlZWRcbiAgICovXG4gIHNob3VsZENvbW1pdD86IChvbGRWYWx1ZTogUmF3IHwgdW5kZWZpbmVkLCBuZXdWYWx1ZTogUmF3KSA9PiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZVJlZkhpc3RvcnlSZXR1cm48UmF3LCBTZXJpYWxpemVkPiBleHRlbmRzIFVzZU1hbnVhbFJlZkhpc3RvcnlSZXR1cm48UmF3LCBTZXJpYWxpemVkPiB7XG4gIC8qKlxuICAgKiBBIHJlZiByZXByZXNlbnRpbmcgaWYgdGhlIHRyYWNraW5nIGlzIGVuYWJsZWRcbiAgICovXG4gIGlzVHJhY2tpbmc6IFJlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIFBhdXNlIGNoYW5nZSB0cmFja2luZ1xuICAgKi9cbiAgcGF1c2U6ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXN1bWUgY2hhbmdlIHRyYWNraW5nXG4gICAqXG4gICAqIEBwYXJhbSBbY29tbWl0XSBpZiB0cnVlLCBhIGhpc3RvcnkgcmVjb3JkIHdpbGwgYmUgY3JlYXRlIGFmdGVyIHJlc3VtaW5nXG4gICAqL1xuICByZXN1bWU6IChjb21taXQ/OiBib29sZWFuKSA9PiB2b2lkO1xuICAvKipcbiAgICogQSBzdWdhciBmb3IgYXV0byBwYXVzZSBhbmQgYXV0byByZXN1bWluZyB3aXRoaW4gYSBmdW5jdGlvbiBzY29wZVxuICAgKlxuICAgKiBAcGFyYW0gZm5cbiAgICovXG4gIGJhdGNoOiAoZm46IChjYW5jZWw6IEZuKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2xlYXIgdGhlIGRhdGEgYW5kIHN0b3AgdGhlIHdhdGNoXG4gICAqL1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBUcmFjayB0aGUgY2hhbmdlIGhpc3Rvcnkgb2YgYSByZWYsIGFsc28gcHJvdmlkZXMgdW5kbyBhbmQgcmVkbyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVJlZkhpc3RvcnlcbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUmVmSGlzdG9yeTxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+KHNvdXJjZTogUmVmPFJhdz4sIG9wdGlvbnM/OiBVc2VSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQ+KTogVXNlUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRGVib3VuY2VkUmVmSGlzdG9yeS9pbmRleC5kLnRzXG4vKipcbiAqIFNob3J0aGFuZCBmb3IgW3VzZVJlZkhpc3RvcnldKGh0dHBzOi8vdnVldXNlLm9yZy91c2VSZWZIaXN0b3J5KSB3aXRoIGRlYm91bmNlIGZpbHRlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VEZWJvdW5jZWRSZWZIaXN0b3J5XG4gKiBAcGFyYW0gc291cmNlXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURlYm91bmNlZFJlZkhpc3Rvcnk8UmF3LCBTZXJpYWxpemVkID0gUmF3Pihzb3VyY2U6IFJlZjxSYXc+LCBvcHRpb25zPzogT21pdDxVc2VSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQ+LCAnZXZlbnRGaWx0ZXInPiAmIHtcbiAgZGVib3VuY2U/OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj47XG59KTogVXNlUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRGV2aWNlTW90aW9uL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VEZXZpY2VNb3Rpb25PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBDb25maWd1cmFibGVFdmVudEZpbHRlciB7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IGZvciBwZXJtaXNzaW9ucyBpbW1lZGlhdGVseSBpZiBpdCdzIG5vdCBncmFudGVkLFxuICAgKiBvdGhlcndpc2UgbGFiZWwgYW5kIGRldmljZUlkcyBjb3VsZCBiZSBlbXB0eVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWVzdFBlcm1pc3Npb25zPzogYm9vbGVhbjtcbn1cbi8qKiBAZGVwcmVjYXRlZCB1c2Uge0BsaW5rIFVzZURldmljZU1vdGlvbk9wdGlvbnN9IGluc3RlYWQgKi9cbnR5cGUgRGV2aWNlTW90aW9uT3B0aW9ucyA9IFVzZURldmljZU1vdGlvbk9wdGlvbnM7XG5pbnRlcmZhY2UgVXNlRGV2aWNlTW90aW9uUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBhY2NlbGVyYXRpb246IFJlZjxEZXZpY2VNb3Rpb25FdmVudEFjY2VsZXJhdGlvbiB8IG51bGw+O1xuICBhY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5OiBSZWY8RGV2aWNlTW90aW9uRXZlbnRBY2NlbGVyYXRpb24gfCBudWxsPjtcbiAgcm90YXRpb25SYXRlOiBSZWY8RGV2aWNlTW90aW9uRXZlbnRSb3RhdGlvblJhdGUgfCBudWxsPjtcbiAgaW50ZXJ2YWw6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgcmVxdWlyZVBlcm1pc3Npb25zOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgZW5zdXJlUGVybWlzc2lvbnM6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHBlcm1pc3Npb25HcmFudGVkOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBEZXZpY2VNb3Rpb25FdmVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VEZXZpY2VNb3Rpb25cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRGV2aWNlTW90aW9uKG9wdGlvbnM/OiBVc2VEZXZpY2VNb3Rpb25PcHRpb25zKTogVXNlRGV2aWNlTW90aW9uUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRGV2aWNlT3JpZW50YXRpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURldmljZU9yaWVudGF0aW9uT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxuaW50ZXJmYWNlIFVzZURldmljZU9yaWVudGF0aW9uUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBpc0Fic29sdXRlOiBTaGFsbG93UmVmPGJvb2xlYW4sIGJvb2xlYW4+O1xuICBhbHBoYTogUmVmPG51bWJlciB8IG51bGwsIG51bWJlciB8IG51bGw+O1xuICBiZXRhOiBSZWY8bnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbD47XG4gIGdhbW1hOiBSZWY8bnVtYmVyIHwgbnVsbCwgbnVtYmVyIHwgbnVsbD47XG59XG4vKipcbiAqIFJlYWN0aXZlIERldmljZU9yaWVudGF0aW9uRXZlbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRGV2aWNlT3JpZW50YXRpb25cbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEZXZpY2VPcmllbnRhdGlvbihvcHRpb25zPzogVXNlRGV2aWNlT3JpZW50YXRpb25PcHRpb25zKTogVXNlRGV2aWNlT3JpZW50YXRpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEZXZpY2VQaXhlbFJhdGlvL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VEZXZpY2VQaXhlbFJhdGlvT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxuaW50ZXJmYWNlIFVzZURldmljZVBpeGVsUmF0aW9SZXR1cm4ge1xuICBwaXhlbFJhdGlvOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHN0b3A6IFdhdGNoU3RvcEhhbmRsZTtcbn1cbi8qKlxuICogUmVhY3RpdmVseSB0cmFjayBgd2luZG93LmRldmljZVBpeGVsUmF0aW9gLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURldmljZVBpeGVsUmF0aW9cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURldmljZVBpeGVsUmF0aW8ob3B0aW9ucz86IFVzZURldmljZVBpeGVsUmF0aW9PcHRpb25zKTogVXNlRGV2aWNlUGl4ZWxSYXRpb1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZURldmljZXNMaXN0L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VEZXZpY2VzTGlzdE9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICBvblVwZGF0ZWQ/OiAoZGV2aWNlczogTWVkaWFEZXZpY2VJbmZvW10pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IGZvciBwZXJtaXNzaW9ucyBpbW1lZGlhdGVseSBpZiBpdCdzIG5vdCBncmFudGVkLFxuICAgKiBvdGhlcndpc2UgbGFiZWwgYW5kIGRldmljZUlkcyBjb3VsZCBiZSBlbXB0eVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWVzdFBlcm1pc3Npb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlcXVlc3QgZm9yIHR5cGVzIG9mIG1lZGlhIHBlcm1pc3Npb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IHsgYXVkaW86IHRydWUsIHZpZGVvOiB0cnVlIH1cbiAgICovXG4gIGNvbnN0cmFpbnRzPzogTWVkaWFTdHJlYW1Db25zdHJhaW50cztcbn1cbmludGVyZmFjZSBVc2VEZXZpY2VzTGlzdFJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgLyoqXG4gICAqIEFsbCBkZXZpY2VzXG4gICAqL1xuICBkZXZpY2VzOiBSZWY8TWVkaWFEZXZpY2VJbmZvW10+O1xuICB2aWRlb0lucHV0czogQ29tcHV0ZWRSZWY8TWVkaWFEZXZpY2VJbmZvW10+O1xuICBhdWRpb0lucHV0czogQ29tcHV0ZWRSZWY8TWVkaWFEZXZpY2VJbmZvW10+O1xuICBhdWRpb091dHB1dHM6IENvbXB1dGVkUmVmPE1lZGlhRGV2aWNlSW5mb1tdPjtcbiAgcGVybWlzc2lvbkdyYW50ZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGVuc3VyZVBlcm1pc3Npb25zOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBgZW51bWVyYXRlRGV2aWNlc2AgbGlzdGluZyBhdmFpbGFibGUgaW5wdXQvb3V0cHV0IGRldmljZXNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VEZXZpY2VzTGlzdFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEZXZpY2VzTGlzdChvcHRpb25zPzogVXNlRGV2aWNlc0xpc3RPcHRpb25zKTogVXNlRGV2aWNlc0xpc3RSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEaXNwbGF5TWVkaWEvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURpc3BsYXlNZWRpYU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVOYXZpZ2F0b3Ige1xuICAvKipcbiAgICogSWYgdGhlIHN0cmVhbSBpcyBlbmFibGVkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlbmFibGVkPzogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBJZiB0aGUgc3RyZWFtIHZpZGVvIG1lZGlhIGNvbnN0cmFpbnRzXG4gICAqL1xuICB2aWRlbz86IGJvb2xlYW4gfCBNZWRpYVRyYWNrQ29uc3RyYWludHMgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBJZiB0aGUgc3RyZWFtIGF1ZGlvIG1lZGlhIGNvbnN0cmFpbnRzXG4gICAqL1xuICBhdWRpbz86IGJvb2xlYW4gfCBNZWRpYVRyYWNrQ29uc3RyYWludHMgfCB1bmRlZmluZWQ7XG59XG5pbnRlcmZhY2UgVXNlRGlzcGxheU1lZGlhUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzdHJlYW06IFNoYWxsb3dSZWY8TWVkaWFTdHJlYW0gfCB1bmRlZmluZWQ+O1xuICBzdGFydDogKCkgPT4gUHJvbWlzZTxNZWRpYVN0cmVhbSB8IHVuZGVmaW5lZD47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG4gIGVuYWJsZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG59XG4vKipcbiAqIFJlYWN0aXZlIGBtZWRpYURldmljZXMuZ2V0RGlzcGxheU1lZGlhYCBzdHJlYW1pbmdcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VEaXNwbGF5TWVkaWFcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRGlzcGxheU1lZGlhKG9wdGlvbnM/OiBVc2VEaXNwbGF5TWVkaWFPcHRpb25zKTogVXNlRGlzcGxheU1lZGlhUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRG9jdW1lbnRWaXNpYmlsaXR5L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VEb2N1bWVudFZpc2liaWxpdHlPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQge31cbnR5cGUgVXNlRG9jdW1lbnRWaXNpYmlsaXR5UmV0dXJuID0gU2hhbGxvd1JlZjxEb2N1bWVudFZpc2liaWxpdHlTdGF0ZT47XG4vKipcbiAqIFJlYWN0aXZlbHkgdHJhY2sgYGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZWAuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRG9jdW1lbnRWaXNpYmlsaXR5XG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEb2N1bWVudFZpc2liaWxpdHkob3B0aW9ucz86IFVzZURvY3VtZW50VmlzaWJpbGl0eU9wdGlvbnMpOiBVc2VEb2N1bWVudFZpc2liaWxpdHlSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VEcmFnZ2FibGUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZURyYWdnYWJsZU9wdGlvbnMge1xuICAvKipcbiAgICogT25seSBzdGFydCB0aGUgZHJhZ2dpbmcgd2hlbiBjbGljayBvbiB0aGUgZWxlbWVudCBkaXJlY3RseVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZXhhY3Q/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+O1xuICAvKipcbiAgICogUHJldmVudCBldmVudHMgZGVmYXVsdHNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByZXZlbnREZWZhdWx0PzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPjtcbiAgLyoqXG4gICAqIFByZXZlbnQgZXZlbnRzIHByb3BhZ2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzdG9wUHJvcGFnYXRpb24/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciBkaXNwYXRjaCBldmVudHMgaW4gY2FwdHVyaW5nIHBoYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0byBhdHRhY2ggYHBvaW50ZXJtb3ZlYCBhbmQgYHBvaW50ZXJ1cGAgZXZlbnRzIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB3aW5kb3dcbiAgICovXG4gIGRyYWdnaW5nRWxlbWVudD86IE1heWJlUmVmT3JHZXR0ZXI8SFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50IHwgV2luZG93IHwgRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgZm9yIGNhbGN1bGF0aW5nIGJvdW5kcyAoSWYgbm90IHNldCwgaXQgd2lsbCB1c2UgdGhlIGV2ZW50J3MgdGFyZ2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBjb250YWluZXJFbGVtZW50PzogTWF5YmVSZWZPckdldHRlcjxIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEhhbmRsZSB0aGF0IHRyaWdnZXJzIHRoZSBkcmFnIGV2ZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IHRhcmdldFxuICAgKi9cbiAgaGFuZGxlPzogTWF5YmVSZWZPckdldHRlcjxIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIFBvaW50ZXIgdHlwZXMgdGhhdCBsaXN0ZW4gdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnbW91c2UnLCAndG91Y2gnLCAncGVuJ11cbiAgICovXG4gIHBvaW50ZXJUeXBlcz86IFBvaW50ZXJUeXBlW107XG4gIC8qKlxuICAgKiBJbml0aWFsIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7IHg6IDAsIHk6IDAgfVxuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogTWF5YmVSZWZPckdldHRlcjxQb3NpdGlvbj47XG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIHRoZSBkcmFnZ2luZyBzdGFydHMuIFJldHVybiBgZmFsc2VgIHRvIHByZXZlbnQgZHJhZ2dpbmcuXG4gICAqL1xuICBvblN0YXJ0PzogKHBvc2l0aW9uOiBQb3NpdGlvbiwgZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdm9pZCB8IGZhbHNlO1xuICAvKipcbiAgICogQ2FsbGJhY2sgZHVyaW5nIGRyYWdnaW5nLlxuICAgKi9cbiAgb25Nb3ZlPzogKHBvc2l0aW9uOiBQb3NpdGlvbiwgZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gZHJhZ2dpbmcgZW5kLlxuICAgKi9cbiAgb25FbmQ/OiAocG9zaXRpb246IFBvc2l0aW9uLCBldmVudDogUG9pbnRlckV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogQXhpcyB0byBkcmFnIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnYm90aCdcbiAgICovXG4gIGF4aXM/OiAneCcgfCAneScgfCAnYm90aCc7XG4gIC8qKlxuICAgKiBEaXNhYmxlZCBkcmFnIGFuZCBkcm9wLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZWQ/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+O1xuICAvKipcbiAgICogTW91c2UgYnV0dG9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIHRyaWdnZXIgZHJhZyBldmVudHMuXG4gICAqXG4gICAqIC0gYDBgOiBNYWluIGJ1dHRvbiwgdXN1YWxseSB0aGUgbGVmdCBidXR0b24gb3IgdGhlIHVuLWluaXRpYWxpemVkIHN0YXRlXG4gICAqIC0gYDFgOiBBdXhpbGlhcnkgYnV0dG9uLCB1c3VhbGx5IHRoZSB3aGVlbCBidXR0b24gb3IgdGhlIG1pZGRsZSBidXR0b24gKGlmIHByZXNlbnQpXG4gICAqIC0gYDJgOiBTZWNvbmRhcnkgYnV0dG9uLCB1c3VhbGx5IHRoZSByaWdodCBidXR0b25cbiAgICogLSBgM2A6IEZvdXJ0aCBidXR0b24sIHR5cGljYWxseSB0aGUgQnJvd3NlciBCYWNrIGJ1dHRvblxuICAgKiAtIGA0YDogRmlmdGggYnV0dG9uLCB0eXBpY2FsbHkgdGhlIEJyb3dzZXIgRm9yd2FyZCBidXR0b25cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTW91c2VFdmVudC9idXR0b24jdmFsdWVcbiAgICogQGRlZmF1bHQgWzBdXG4gICAqL1xuICBidXR0b25zPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXJbXT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlc3RyaWN0IGRyYWdnaW5nIHdpdGhpbiB0aGUgdmlzaWJsZSBhcmVhIG9mIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIElmIGVuYWJsZWQsIHRoZSBkcmFnZ2FibGUgZWxlbWVudCB3aWxsIG5vdCBsZWF2ZSB0aGUgdmlzaWJsZSBhcmVhIG9mIGl0cyBjb250YWluZXIsXG4gICAqIGVuc3VyaW5nIGl0IHJlbWFpbnMgd2l0aGluIHRoZSB2aWV3cG9ydCBvZiB0aGUgY29udGFpbmVyIGR1cmluZyB0aGUgZHJhZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlc3RyaWN0SW5WaWV3PzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGF1dG8tc2Nyb2xsIHdoZW4gZHJhZ2dpbmcgbmVhciB0aGUgZWRnZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvU2Nyb2xsPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwge1xuICAgIC8qKlxuICAgICAqIFNwZWVkIG9mIGF1dG8tc2Nyb2xsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIHNwZWVkPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXIgfCBQb3NpdGlvbj47XG4gICAgLyoqXG4gICAgICogTWFyZ2luIGZyb20gdGhlIGVkZ2UgdG8gdHJpZ2dlciBhdXRvLXNjcm9sbC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDMwXG4gICAgICovXG4gICAgbWFyZ2luPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXIgfCBQb3NpdGlvbj47XG4gICAgLyoqXG4gICAgICogRGlyZWN0aW9uIG9mIGF1dG8tc2Nyb2xsLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgJ2JvdGgnXG4gICAgICovXG4gICAgZGlyZWN0aW9uPzogJ3gnIHwgJ3knIHwgJ2JvdGgnO1xuICB9Pjtcbn1cbmludGVyZmFjZSBVc2VEcmFnZ2FibGVSZXR1cm4ge1xuICB4OiBSZWY8bnVtYmVyPjtcbiAgeTogUmVmPG51bWJlcj47XG4gIHBvc2l0aW9uOiBSZWY8UG9zaXRpb24+O1xuICBpc0RyYWdnaW5nOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgc3R5bGU6IENvbXB1dGVkUmVmPHN0cmluZz47XG59XG4vKipcbiAqIE1ha2UgZWxlbWVudHMgZHJhZ2dhYmxlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZURyYWdnYWJsZVxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VEcmFnZ2FibGUodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlRHJhZ2dhYmxlT3B0aW9ucyk6IFVzZURyYWdnYWJsZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZURyb3Bab25lL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VEcm9wWm9uZVJldHVybiB7XG4gIGZpbGVzOiBTaGFsbG93UmVmPEZpbGVbXSB8IG51bGw+O1xuICBpc092ZXJEcm9wWm9uZTogU2hhbGxvd1JlZjxib29sZWFuPjtcbn1cbmludGVyZmFjZSBVc2VEcm9wWm9uZU9wdGlvbnMge1xuICAvKipcbiAgICogQWxsb3dlZCBkYXRhIHR5cGVzLCBpZiBub3Qgc2V0LCBhbGwgZGF0YSB0eXBlcyBhcmUgYWxsb3dlZC5cbiAgICogQWxzbyBjYW4gYmUgYSBmdW5jdGlvbiB0byBjaGVjayB0aGUgZGF0YSB0eXBlcy5cbiAgICovXG4gIGRhdGFUeXBlcz86IE1heWJlUmVmPHJlYWRvbmx5IHN0cmluZ1tdPiB8ICgodHlwZXM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBib29sZWFuKTtcbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gZGF0YVR5cGVzLCBidXQgZXhwb3NlcyB0aGUgRGF0YVRyYW5zZmVySXRlbUxpc3QgZm9yIGN1c3RvbSB2YWxpZGF0aW9uLlxuICAgKiBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZGF0YVR5cGVzLlxuICAgKi9cbiAgY2hlY2tWYWxpZGl0eT86IChpdGVtczogRGF0YVRyYW5zZmVySXRlbUxpc3QpID0+IGJvb2xlYW47XG4gIG9uRHJvcD86IChmaWxlczogRmlsZVtdIHwgbnVsbCwgZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgb25FbnRlcj86IChmaWxlczogRmlsZVtdIHwgbnVsbCwgZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgb25MZWF2ZT86IChmaWxlczogRmlsZVtdIHwgbnVsbCwgZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgb25PdmVyPzogKGZpbGVzOiBGaWxlW10gfCBudWxsLCBldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogQWxsb3cgbXVsdGlwbGUgZmlsZXMgdG8gYmUgZHJvcHBlZC4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByZXZlbnQgZGVmYXVsdCBiZWhhdmlvciBmb3IgdW5oYW5kbGVkIGV2ZW50cy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBwcmV2ZW50RGVmYXVsdEZvclVuaGFuZGxlZD86IGJvb2xlYW47XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZURyb3Bab25lKHRhcmdldDogTWF5YmVSZWZPckdldHRlcjxIVE1MRWxlbWVudCB8IERvY3VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VEcm9wWm9uZU9wdGlvbnMgfCBVc2VEcm9wWm9uZU9wdGlvbnNbJ29uRHJvcCddKTogVXNlRHJvcFpvbmVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFbGVtZW50Qm91bmRpbmcvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUVsZW1lbnRCb3VuZGluZ09wdGlvbnMge1xuICAvKipcbiAgICogUmVzZXQgdmFsdWVzIHRvIDAgb24gY29tcG9uZW50IHVubW91bnRlZFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZXNldD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gd2luZG93IHJlc2l6ZSBldmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB3aW5kb3dSZXNpemU/OiBib29sZWFuO1xuICAvKipcbiAgICogTGlzdGVuIHRvIHdpbmRvdyBzY3JvbGwgZXZlbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgd2luZG93U2Nyb2xsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEltbWVkaWF0ZWx5IGNhbGwgdXBkYXRlIG9uIGNvbXBvbmVudCBtb3VudGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaW1pbmcgdG8gcmVjYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveFxuICAgKlxuICAgKiBTZXR0aW5nIHRvIGBuZXh0LWZyYW1lYCBjYW4gYmUgdXNlZnVsIHdoZW4gdXNpbmcgdGhpcyB0b2dldGhlciB3aXRoIHNvbWV0aGluZyBsaWtlIHtAbGluayB1c2VCcmVha3BvaW50c31cbiAgICogYW5kIHRoZXJlZm9yZSB0aGUgbGF5b3V0ICh3aGljaCBpbmZsdWVuY2VzIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG9ic2VydmVkIGVsZW1lbnQpIGlzIG5vdCB1cGRhdGVkIG9uIHRoZSBjdXJyZW50IHRpY2suXG4gICAqXG4gICAqIEBkZWZhdWx0ICdzeW5jJ1xuICAgKi9cbiAgdXBkYXRlVGltaW5nPzogJ3N5bmMnIHwgJ25leHQtZnJhbWUnO1xufVxuaW50ZXJmYWNlIFVzZUVsZW1lbnRCb3VuZGluZ1JldHVybiB7XG4gIGhlaWdodDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBib3R0b206IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgbGVmdDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICByaWdodDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB0b3A6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgd2lkdGg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgeDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB5OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHVwZGF0ZTogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgYm91bmRpbmcgYm94IG9mIGFuIEhUTUwgZWxlbWVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFbGVtZW50Qm91bmRpbmdcbiAqIEBwYXJhbSB0YXJnZXRcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFbGVtZW50Qm91bmRpbmcodGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiwgb3B0aW9ucz86IFVzZUVsZW1lbnRCb3VuZGluZ09wdGlvbnMpOiBVc2VFbGVtZW50Qm91bmRpbmdSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFbGVtZW50QnlQb2ludC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRWxlbWVudEJ5UG9pbnRPcHRpb25zPE11bHRpcGxlIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50LCBDb25maWd1cmFibGVTY2hlZHVsZXIge1xuICB4OiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj47XG4gIHk6IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPjtcbiAgbXVsdGlwbGU/OiBNYXliZVJlZk9yR2V0dGVyPE11bHRpcGxlPjtcbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWQgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWQgKi9cbiAgaW50ZXJ2YWw/OiAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyB8IG51bWJlcjtcbn1cbmludGVyZmFjZSBVc2VFbGVtZW50QnlQb2ludFJldHVybjxNdWx0aXBsZSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gZXh0ZW5kcyBTdXBwb3J0YWJsZSwgUGF1c2FibGUge1xuICBlbGVtZW50OiBTaGFsbG93UmVmPE11bHRpcGxlIGV4dGVuZHMgdHJ1ZSA/IEhUTUxFbGVtZW50W10gOiBIVE1MRWxlbWVudCB8IG51bGw+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBlbGVtZW50IGJ5IHBvaW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUVsZW1lbnRCeVBvaW50XG4gKiBAcGFyYW0gb3B0aW9ucyAtIFVzZUVsZW1lbnRCeVBvaW50T3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUVsZW1lbnRCeVBvaW50PE0gZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+KG9wdGlvbnM6IFVzZUVsZW1lbnRCeVBvaW50T3B0aW9uczxNPik6IFVzZUVsZW1lbnRCeVBvaW50UmV0dXJuPE0+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRWxlbWVudEhvdmVyL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VFbGVtZW50SG92ZXJPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHtcbiAgZGVsYXlFbnRlcj86IG51bWJlcjtcbiAgZGVsYXlMZWF2ZT86IG51bWJlcjtcbiAgdHJpZ2dlck9uUmVtb3ZhbD86IGJvb2xlYW47XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUVsZW1lbnRIb3ZlcihlbDogTWF5YmVSZWZPckdldHRlcjxFdmVudFRhcmdldCB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlRWxlbWVudEhvdmVyT3B0aW9ucyk6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VSZXNpemVPYnNlcnZlci9pbmRleC5kLnRzXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgaW50ZXJmYWNlIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIERPTSBsaWIuXG4gKiBVc2UgdGhlIGdsb2JhbCB7QGxpbmsgZ2xvYmFsVGhpcy5SZXNpemVPYnNlcnZlclNpemV9IGluc3RlYWQuXG4gKi9cbmludGVyZmFjZSBSZXNpemVPYnNlcnZlclNpemUge1xuICByZWFkb25seSBpbmxpbmVTaXplOiBudW1iZXI7XG4gIHJlYWRvbmx5IGJsb2NrU2l6ZTogbnVtYmVyO1xufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGludGVyZmFjZSBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBET00gbGliLlxuICogVXNlIHRoZSBnbG9iYWwge0BsaW5rIGdsb2JhbFRoaXMuUmVzaXplT2JzZXJ2ZXJFbnRyeX0gaW5zdGVhZC5cbiAqL1xuaW50ZXJmYWNlIFJlc2l6ZU9ic2VydmVyRW50cnkge1xuICByZWFkb25seSB0YXJnZXQ6IEVsZW1lbnQ7XG4gIHJlYWRvbmx5IGNvbnRlbnRSZWN0OiBET01SZWN0UmVhZE9ubHk7XG4gIHJlYWRvbmx5IGJvcmRlckJveFNpemU6IFJlYWRvbmx5QXJyYXk8UmVzaXplT2JzZXJ2ZXJTaXplPjtcbiAgcmVhZG9ubHkgY29udGVudEJveFNpemU6IFJlYWRvbmx5QXJyYXk8UmVzaXplT2JzZXJ2ZXJTaXplPjtcbiAgcmVhZG9ubHkgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogUmVhZG9ubHlBcnJheTxSZXNpemVPYnNlcnZlclNpemU+O1xufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGludGVyZmFjZSBpcyBub3cgYXZhaWxhYmxlIGluIHRoZSBET00gbGliLlxuICogVXNlIHRoZSBnbG9iYWwge0BsaW5rIGdsb2JhbFRoaXMuUmVzaXplT2JzZXJ2ZXJDYWxsYmFja30gaW5zdGVhZC5cbiAqL1xudHlwZSBSZXNpemVPYnNlcnZlckNhbGxiYWNrID0gKGVudHJpZXM6IFJlYWRvbmx5QXJyYXk8UmVzaXplT2JzZXJ2ZXJFbnRyeT4sIG9ic2VydmVyOiBSZXNpemVPYnNlcnZlcikgPT4gdm9pZDtcbmludGVyZmFjZSBVc2VSZXNpemVPYnNlcnZlck9wdGlvbnMgZXh0ZW5kcyBSZXNpemVPYnNlcnZlck9wdGlvbnMsIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxuaW50ZXJmYWNlIFVzZVJlc2l6ZU9ic2VydmVyUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZXBvcnRzIGNoYW5nZXMgdG8gdGhlIGRpbWVuc2lvbnMgb2YgYW4gRWxlbWVudCdzIGNvbnRlbnQgb3IgdGhlIGJvcmRlci1ib3hcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VSZXNpemVPYnNlcnZlclxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVJlc2l6ZU9ic2VydmVyKHRhcmdldDogTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYgfCBNYXliZUNvbXB1dGVkRWxlbWVudFJlZltdIHwgTWF5YmVSZWZPckdldHRlcjxNYXliZUVsZW1lbnRbXT4sIGNhbGxiYWNrOiBnbG9iYWxUaGlzLlJlc2l6ZU9ic2VydmVyQ2FsbGJhY2ssIG9wdGlvbnM/OiBVc2VSZXNpemVPYnNlcnZlck9wdGlvbnMpOiBVc2VSZXNpemVPYnNlcnZlclJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUVsZW1lbnRTaXplL2luZGV4LmQudHNcbmludGVyZmFjZSBFbGVtZW50U2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZUVsZW1lbnRTaXplT3B0aW9ucyBleHRlbmRzIFVzZVJlc2l6ZU9ic2VydmVyT3B0aW9ucyB7fVxuaW50ZXJmYWNlIFVzZUVsZW1lbnRTaXplUmV0dXJuIHtcbiAgd2lkdGg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgaGVpZ2h0OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIHNpemUgb2YgYW4gSFRNTCBlbGVtZW50LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUVsZW1lbnRTaXplXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRWxlbWVudFNpemUodGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiwgaW5pdGlhbFNpemU/OiBFbGVtZW50U2l6ZSwgb3B0aW9ucz86IFVzZUVsZW1lbnRTaXplT3B0aW9ucyk6IFVzZUVsZW1lbnRTaXplUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUludGVyc2VjdGlvbk9ic2VydmVyT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgaW1tZWRpYXRlbHkgb24gY3JlYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBFbGVtZW50IG9yIERvY3VtZW50IHdob3NlIGJvdW5kcyBhcmUgdXNlZCBhcyB0aGUgYm91bmRpbmcgYm94IHdoZW4gdGVzdGluZyBmb3IgaW50ZXJzZWN0aW9uLlxuICAgKi9cbiAgcm9vdD86IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmIHwgRG9jdW1lbnQ7XG4gIC8qKlxuICAgKiBBIHN0cmluZyB3aGljaCBzcGVjaWZpZXMgYSBzZXQgb2Ygb2Zmc2V0cyB0byBhZGQgdG8gdGhlIHJvb3QncyBib3VuZGluZ19ib3ggd2hlbiBjYWxjdWxhdGluZyBpbnRlcnNlY3Rpb25zLlxuICAgKi9cbiAgcm9vdE1hcmdpbj86IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEVpdGhlciBhIHNpbmdsZSBudW1iZXIgb3IgYW4gYXJyYXkgb2YgbnVtYmVycyBiZXR3ZWVuIDAuMCBhbmQgMS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGhyZXNob2xkPzogbnVtYmVyIHwgbnVtYmVyW107XG59XG5pbnRlcmZhY2UgVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSwgUGF1c2FibGUge1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBEZXRlY3RzIHRoYXQgYSB0YXJnZXQgZWxlbWVudCdzIHZpc2liaWxpdHkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcih0YXJnZXQ6IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmIHwgTWF5YmVSZWZPckdldHRlcjxNYXliZUVsZW1lbnRbXT4gfCBNYXliZUNvbXB1dGVkRWxlbWVudFJlZltdLCBjYWxsYmFjazogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjaywgb3B0aW9ucz86IFVzZUludGVyc2VjdGlvbk9ic2VydmVyT3B0aW9ucyk6IFVzZUludGVyc2VjdGlvbk9ic2VydmVyUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRWxlbWVudFZpc2liaWxpdHkvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUVsZW1lbnRWaXNpYmlsaXR5T3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdywgUGljazxVc2VJbnRlcnNlY3Rpb25PYnNlcnZlck9wdGlvbnMsICdyb290TWFyZ2luJyB8ICd0aHJlc2hvbGQnPiB7XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgaXMgdXNlZCBhcyB0aGUgdmlld3BvcnQgZm9yIGNoZWNraW5nIHZpc2liaWxpdHkgb2YgdGhlIHRhcmdldC5cbiAgICovXG4gIHNjcm9sbFRhcmdldD86IFVzZUludGVyc2VjdGlvbk9ic2VydmVyT3B0aW9uc1sncm9vdCddO1xuICAvKipcbiAgICogU3RvcCB0cmFja2luZyB3aGVuIGVsZW1lbnQgdmlzaWJpbGl0eSBjaGFuZ2VzIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb25jZT86IGJvb2xlYW47XG59XG50eXBlIFVzZUVsZW1lbnRWaXNpYmlsaXR5UmV0dXJuID0gU2hhbGxvd1JlZjxib29sZWFuPjtcbi8qKlxuICogVHJhY2tzIHRoZSB2aXNpYmlsaXR5IG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSB2aWV3cG9ydC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFbGVtZW50VmlzaWJpbGl0eVxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUVsZW1lbnRWaXNpYmlsaXR5KGVsZW1lbnQ6IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmLCBvcHRpb25zPzogVXNlRWxlbWVudFZpc2liaWxpdHlPcHRpb25zKTogVXNlRWxlbWVudFZpc2liaWxpdHlSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFdmVudEJ1cy9pbmRleC5kLnRzXG50eXBlIEV2ZW50QnVzTGlzdGVuZXI8VCA9IHVua25vd24sIFAkMSA9IGFueT4gPSAoZXZlbnQ6IFQsIHBheWxvYWQ/OiBQJDEpID0+IHZvaWQ7XG50eXBlIEV2ZW50QnVzRXZlbnRzPFQsIFAkMSA9IGFueT4gPSBTZXQ8RXZlbnRCdXNMaXN0ZW5lcjxULCBQJDE+PjtcbmludGVyZmFjZSBFdmVudEJ1c0tleTxUPiBleHRlbmRzIFN5bWJvbCB7fVxudHlwZSBFdmVudEJ1c0lkZW50aWZpZXI8VCA9IHVua25vd24+ID0gRXZlbnRCdXNLZXk8VD4gfCBzdHJpbmcgfCBudW1iZXI7XG5pbnRlcmZhY2UgVXNlRXZlbnRCdXNSZXR1cm48VCwgUCQxPiB7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYW4gZXZlbnQuIFdoZW4gY2FsbGluZyBlbWl0LCB0aGUgbGlzdGVuZXJzIHdpbGwgZXhlY3V0ZS5cbiAgICogQHBhcmFtIGxpc3RlbmVyIHdhdGNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJucyBhIHN0b3AgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBjdXJyZW50IGNhbGxiYWNrLlxuICAgKi9cbiAgb246IChsaXN0ZW5lcjogRXZlbnRCdXNMaXN0ZW5lcjxULCBQJDE+KSA9PiBGbjtcbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gYG9uYCwgYnV0IG9ubHkgZmlyZXMgb25jZVxuICAgKiBAcGFyYW0gbGlzdGVuZXIgd2F0Y2ggbGlzdGVuZXIuXG4gICAqIEByZXR1cm5zIGEgc3RvcCBmdW5jdGlvbiB0byByZW1vdmUgdGhlIGN1cnJlbnQgY2FsbGJhY2suXG4gICAqL1xuICBvbmNlOiAobGlzdGVuZXI6IEV2ZW50QnVzTGlzdGVuZXI8VCwgUCQxPikgPT4gRm47XG4gIC8qKlxuICAgKiBFbWl0IGFuIGV2ZW50LCB0aGUgY29ycmVzcG9uZGluZyBldmVudCBsaXN0ZW5lcnMgd2lsbCBleGVjdXRlLlxuICAgKiBAcGFyYW0gZXZlbnQgZGF0YSBzZW50LlxuICAgKi9cbiAgZW1pdDogKGV2ZW50PzogVCwgcGF5bG9hZD86IFAkMSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBsaXN0ZW5lci5cbiAgICogQHBhcmFtIGxpc3RlbmVyIHdhdGNoIGxpc3RlbmVyLlxuICAgKi9cbiAgb2ZmOiAobGlzdGVuZXI6IEV2ZW50QnVzTGlzdGVuZXI8VD4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDbGVhciBhbGwgZXZlbnRzXG4gICAqL1xuICByZXNldDogKCkgPT4gdm9pZDtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXZlbnRCdXM8VCA9IHVua25vd24sIFAkMSA9IGFueT4oa2V5OiBFdmVudEJ1c0lkZW50aWZpZXI8VD4pOiBVc2VFdmVudEJ1c1JldHVybjxULCBQJDE+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRXZlbnRMaXN0ZW5lci9pbmRleC5kLnRzXG5pbnRlcmZhY2UgSW5mZXJFdmVudFRhcmdldDxFdmVudHM+IHtcbiAgYWRkRXZlbnRMaXN0ZW5lcjogKGV2ZW50OiBFdmVudHMsIGZuPzogYW55LCBvcHRpb25zPzogYW55KSA9PiBhbnk7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudDogRXZlbnRzLCBmbj86IGFueSwgb3B0aW9ucz86IGFueSkgPT4gYW55O1xufVxudHlwZSBXaW5kb3dFdmVudE5hbWUgPSBrZXlvZiBXaW5kb3dFdmVudE1hcDtcbnR5cGUgRG9jdW1lbnRFdmVudE5hbWUgPSBrZXlvZiBEb2N1bWVudEV2ZW50TWFwO1xudHlwZSBTaGFkb3dSb290RXZlbnROYW1lID0ga2V5b2YgU2hhZG93Um9vdEV2ZW50TWFwO1xuaW50ZXJmYWNlIEdlbmVyYWxFdmVudExpc3RlbmVyPEUgPSBFdmVudD4ge1xuICAoZXZ0OiBFKTogdm9pZDtcbn1cbi8qKlxuICogUmVnaXN0ZXIgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lciBvbiBtb3VudGVkLCBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IG9uIHVubW91bnRlZC5cbiAqXG4gKiBPdmVybG9hZCAxOiBPbWl0dGVkIFdpbmRvdyB0YXJnZXRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFdmVudExpc3RlbmVyXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMga2V5b2YgV2luZG93RXZlbnRNYXA+KGV2ZW50OiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxFPj4sIGxpc3RlbmVyOiBNYXliZVJlZjxBcnJheWFibGU8KHRoaXM6IFdpbmRvdywgZXY6IFdpbmRvd0V2ZW50TWFwW0VdKSA9PiBhbnk+Piwgb3B0aW9ucz86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zPik6IEZuO1xuLyoqXG4gKiBSZWdpc3RlciB1c2luZyBhZGRFdmVudExpc3RlbmVyIG9uIG1vdW50ZWQsIGFuZCByZW1vdmVFdmVudExpc3RlbmVyIGF1dG9tYXRpY2FsbHkgb24gdW5tb3VudGVkLlxuICpcbiAqIE92ZXJsb2FkIDI6IEV4cGxpY2l0bHkgV2luZG93IHRhcmdldFxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBldmVudFxuICogQHBhcmFtIGxpc3RlbmVyXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUV2ZW50TGlzdGVuZXI8RSBleHRlbmRzIGtleW9mIFdpbmRvd0V2ZW50TWFwPih0YXJnZXQ6IFdpbmRvdywgZXZlbnQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEU+PiwgbGlzdGVuZXI6IE1heWJlUmVmPEFycmF5YWJsZTwodGhpczogV2luZG93LCBldjogV2luZG93RXZlbnRNYXBbRV0pID0+IGFueT4+LCBvcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+KTogRm47XG4vKipcbiAqIFJlZ2lzdGVyIHVzaW5nIGFkZEV2ZW50TGlzdGVuZXIgb24gbW91bnRlZCwgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIgYXV0b21hdGljYWxseSBvbiB1bm1vdW50ZWQuXG4gKlxuICogT3ZlcmxvYWQgMzogRXhwbGljaXRseSBEb2N1bWVudCB0YXJnZXRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFdmVudExpc3RlbmVyXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMga2V5b2YgRG9jdW1lbnRFdmVudE1hcD4odGFyZ2V0OiBEb2N1bWVudCwgZXZlbnQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEU+PiwgbGlzdGVuZXI6IE1heWJlUmVmPEFycmF5YWJsZTwodGhpczogRG9jdW1lbnQsIGV2OiBEb2N1bWVudEV2ZW50TWFwW0VdKSA9PiBhbnk+Piwgb3B0aW9ucz86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zPik6IEZuO1xuLyoqXG4gKiBSZWdpc3RlciB1c2luZyBhZGRFdmVudExpc3RlbmVyIG9uIG1vdW50ZWQsIGFuZCByZW1vdmVFdmVudExpc3RlbmVyIGF1dG9tYXRpY2FsbHkgb24gdW5tb3VudGVkLlxuICpcbiAqIE92ZXJsb2FkIDQ6IEV4cGxpY2l0bHkgU2hhZG93Um9vdCB0YXJnZXRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFdmVudExpc3RlbmVyXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMga2V5b2YgU2hhZG93Um9vdEV2ZW50TWFwPih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPFNoYWRvd1Jvb3Q+IHwgbnVsbCB8IHVuZGVmaW5lZD4sIGV2ZW50OiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxFPj4sIGxpc3RlbmVyOiBNYXliZVJlZjxBcnJheWFibGU8KHRoaXM6IFNoYWRvd1Jvb3QsIGV2OiBTaGFkb3dSb290RXZlbnRNYXBbRV0pID0+IGFueT4+LCBvcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+KTogRm47XG4vKipcbiAqIFJlZ2lzdGVyIHVzaW5nIGFkZEV2ZW50TGlzdGVuZXIgb24gbW91bnRlZCwgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIgYXV0b21hdGljYWxseSBvbiB1bm1vdW50ZWQuXG4gKlxuICogT3ZlcmxvYWQgNTogRXhwbGljaXRseSBIVE1MRWxlbWVudCB0YXJnZXRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VFdmVudExpc3RlbmVyXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXZlbnRMaXN0ZW5lcjxFIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRFdmVudE1hcD4odGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxIVE1MRWxlbWVudD4gfCBudWxsIHwgdW5kZWZpbmVkPiwgZXZlbnQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEU+PiwgbGlzdGVuZXI6IE1heWJlUmVmPCh0aGlzOiBIVE1MRWxlbWVudCwgZXY6IEhUTUxFbGVtZW50RXZlbnRNYXBbRV0pID0+IGFueT4sIG9wdGlvbnM/OiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucz4pOiBGbjtcbi8qKlxuICogUmVnaXN0ZXIgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lciBvbiBtb3VudGVkLCBhbmQgcmVtb3ZlRXZlbnRMaXN0ZW5lciBhdXRvbWF0aWNhbGx5IG9uIHVubW91bnRlZC5cbiAqXG4gKiBPdmVybG9hZCA2OiBDdXN0b20gZXZlbnQgdGFyZ2V0IHdpdGggZXZlbnQgdHlwZSBpbmZlclxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyPE5hbWVzIGV4dGVuZHMgc3RyaW5nLCBFdmVudFR5cGUgPSBFdmVudD4odGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxJbmZlckV2ZW50VGFyZ2V0PE5hbWVzPj4gfCBudWxsIHwgdW5kZWZpbmVkPiwgZXZlbnQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPE5hbWVzPj4sIGxpc3RlbmVyOiBNYXliZVJlZjxBcnJheWFibGU8R2VuZXJhbEV2ZW50TGlzdGVuZXI8RXZlbnRUeXBlPj4+LCBvcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+KTogRm47XG4vKipcbiAqIFJlZ2lzdGVyIHVzaW5nIGFkZEV2ZW50TGlzdGVuZXIgb24gbW91bnRlZCwgYW5kIHJlbW92ZUV2ZW50TGlzdGVuZXIgYXV0b21hdGljYWxseSBvbiB1bm1vdW50ZWQuXG4gKlxuICogT3ZlcmxvYWQgNzogQ3VzdG9tIGV2ZW50IHRhcmdldCBmYWxsYmFja1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50TGlzdGVuZXJcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudExpc3RlbmVyPEV2ZW50VHlwZSA9IEV2ZW50Pih0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8QXJyYXlhYmxlPEV2ZW50VGFyZ2V0PiB8IG51bGwgfCB1bmRlZmluZWQ+LCBldmVudDogTWF5YmVSZWZPckdldHRlcjxBcnJheWFibGU8c3RyaW5nPj4sIGxpc3RlbmVyOiBNYXliZVJlZjxBcnJheWFibGU8R2VuZXJhbEV2ZW50TGlzdGVuZXI8RXZlbnRUeXBlPj4+LCBvcHRpb25zPzogTWF5YmVSZWZPckdldHRlcjxib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM+KTogRm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFdmVudFNvdXJjZS9pbmRleC5kLnRzXG50eXBlIEV2ZW50U291cmNlU3RhdHVzID0gJ0NPTk5FQ1RJTkcnIHwgJ09QRU4nIHwgJ0NMT1NFRCc7XG5pbnRlcmZhY2UgVXNlRXZlbnRTb3VyY2VPcHRpb25zPERhdGE+IGV4dGVuZHMgRXZlbnRTb3VyY2VJbml0IHtcbiAgLyoqXG4gICAqIEVuYWJsZWQgYXV0byByZWNvbm5lY3RcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9SZWNvbm5lY3Q/OiBib29sZWFuIHwge1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gcmV0cnkgdGltZXMuXG4gICAgICpcbiAgICAgKiBPciB5b3UgY2FuIHBhc3MgYSBwcmVkaWNhdGUgZnVuY3Rpb24gKHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB5b3Ugd2FudCB0byByZXRyeSkuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtMVxuICAgICAqL1xuICAgIHJldHJpZXM/OiBudW1iZXIgfCAoKCkgPT4gYm9vbGVhbik7XG4gICAgLyoqXG4gICAgICogRGVsYXkgZm9yIHJlY29ubmVjdCwgaW4gbWlsbGlzZWNvbmRzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAxMDAwXG4gICAgICovXG4gICAgZGVsYXk/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogT24gbWF4aW11bSByZXRyeSB0aW1lcyByZWFjaGVkLlxuICAgICAqL1xuICAgIG9uRmFpbGVkPzogRm47XG4gIH07XG4gIC8qKlxuICAgKiBJbW1lZGlhdGVseSBvcGVuIHRoZSBjb25uZWN0aW9uIHdoZW4gY2FsbGluZyB0aGlzIGNvbXBvc2FibGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgY29ubmVjdCB0byB0aGUgd2Vic29ja2V0IHdoZW4gVVJMIGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0Nvbm5lY3Q/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGRhdGEgc2VyaWFsaXphdGlvblxuICAgKi9cbiAgc2VyaWFsaXplcj86IHtcbiAgICByZWFkOiAodj86IHN0cmluZykgPT4gRGF0YTtcbiAgfTtcbn1cbmludGVyZmFjZSBVc2VFdmVudFNvdXJjZVJldHVybjxFdmVudHMgZXh0ZW5kcyBzdHJpbmdbXSwgRGF0YSA9IGFueT4ge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBsYXRlc3QgZGF0YSByZWNlaXZlZCB2aWEgdGhlIEV2ZW50U291cmNlLFxuICAgKiBjYW4gYmUgd2F0Y2hlZCB0byByZXNwb25kIHRvIGluY29taW5nIG1lc3NhZ2VzXG4gICAqL1xuICBkYXRhOiBTaGFsbG93UmVmPERhdGEgfCBudWxsPjtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLCBjYW4gYmUgb25seSBvbmUgb2Y6XG4gICAqICdDT05ORUNUSU5HJywgJ09QRU4nICdDTE9TRUQnXG4gICAqL1xuICBzdGF0dXM6IFNoYWxsb3dSZWY8RXZlbnRTb3VyY2VTdGF0dXM+O1xuICAvKipcbiAgICogVGhlIGxhdGVzdCBuYW1lZCBldmVudFxuICAgKi9cbiAgZXZlbnQ6IFNoYWxsb3dSZWY8RXZlbnRzW251bWJlcl0gfCBudWxsPjtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGVycm9yXG4gICAqL1xuICBlcnJvcjogU2hhbGxvd1JlZjxFdmVudCB8IG51bGw+O1xuICAvKipcbiAgICogQ2xvc2VzIHRoZSBFdmVudFNvdXJjZSBjb25uZWN0aW9uIGdyYWNlZnVsbHkuXG4gICAqL1xuICBjbG9zZTogRXZlbnRTb3VyY2VbJ2Nsb3NlJ107XG4gIC8qKlxuICAgKiBSZW9wZW4gdGhlIEV2ZW50U291cmNlIGNvbm5lY3Rpb24uXG4gICAqIElmIHRoZXJlIHRoZSBjdXJyZW50IG9uZSBpcyBhY3RpdmUsIHdpbGwgY2xvc2UgaXQgYmVmb3JlIG9wZW5pbmcgYSBuZXcgb25lLlxuICAgKi9cbiAgb3BlbjogRm47XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgRXZlbnRTb3VyY2UgaW5zdGFuY2UuXG4gICAqL1xuICBldmVudFNvdXJjZTogUmVmPEV2ZW50U291cmNlIHwgbnVsbD47XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBldmVudCBJRCBzdHJpbmcsIGZvciBzZXJ2ZXItc2VudCBldmVudHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lc3NhZ2VFdmVudC9sYXN0RXZlbnRJZFxuICAgKi9cbiAgbGFzdEV2ZW50SWQ6IFNoYWxsb3dSZWY8c3RyaW5nIHwgbnVsbD47XG59XG4vKipcbiAqIFJlYWN0aXZlIHdyYXBwZXIgZm9yIEV2ZW50U291cmNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUV2ZW50U291cmNlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFNvdXJjZS9FdmVudFNvdXJjZSBFdmVudFNvdXJjZVxuICogQHBhcmFtIHVybFxuICogQHBhcmFtIGV2ZW50c1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VFdmVudFNvdXJjZTxFdmVudHMgZXh0ZW5kcyBzdHJpbmdbXSwgRGF0YSA9IGFueT4odXJsOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZyB8IFVSTCB8IHVuZGVmaW5lZD4sIGV2ZW50cz86IEV2ZW50cywgb3B0aW9ucz86IFVzZUV2ZW50U291cmNlT3B0aW9uczxEYXRhPik6IFVzZUV2ZW50U291cmNlUmV0dXJuPEV2ZW50cywgRGF0YT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VFeWVEcm9wcGVyL2luZGV4LmQudHNcbmludGVyZmFjZSBFeWVEcm9wcGVyT3Blbk9wdGlvbnMge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRTaWduYWxcbiAgICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuaW50ZXJmYWNlIEV5ZURyb3BwZXIge1xuICBuZXcgKCk6IEV5ZURyb3BwZXI7XG4gIG9wZW46IChvcHRpb25zPzogRXllRHJvcHBlck9wZW5PcHRpb25zKSA9PiBQcm9taXNlPHtcbiAgICBzUkdCSGV4OiBzdHJpbmc7XG4gIH0+O1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogJ0V5ZURyb3BwZXInO1xufVxuaW50ZXJmYWNlIFVzZUV5ZURyb3BwZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIEluaXRpYWwgc1JHQkhleC5cbiAgICpcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IHN0cmluZztcbn1cbmludGVyZmFjZSBVc2VFeWVEcm9wcGVyUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzUkdCSGV4OiBTaGFsbG93UmVmPHN0cmluZz47XG4gIG9wZW46IChvcGVuT3B0aW9ucz86IEV5ZURyb3BwZXJPcGVuT3B0aW9ucykgPT4gUHJvbWlzZTx7XG4gICAgc1JHQkhleDogc3RyaW5nO1xuICB9IHwgdW5kZWZpbmVkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgW0V5ZURyb3BwZXIgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXllRHJvcHBlcl9BUEkpXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRXllRHJvcHBlclxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRXllRHJvcHBlcihvcHRpb25zPzogVXNlRXllRHJvcHBlck9wdGlvbnMpOiBVc2VFeWVEcm9wcGVyUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRmF2aWNvbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRmF2aWNvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIHJlbD86IHN0cmluZztcbn1cbnR5cGUgVXNlRmF2aWNvblJldHVybiA9IENvbXB1dGVkUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IHwgUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+O1xuLyoqXG4gKiBSZWFjdGl2ZSBmYXZpY29uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUZhdmljb25cbiAqIEBwYXJhbSBuZXdJY29uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZhdmljb24obmV3SWNvbjogUmVhZG9ubHlSZWZPckdldHRlcjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZUZhdmljb25PcHRpb25zKTogQ29tcHV0ZWRSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZhdmljb24obmV3SWNvbj86IE1heWJlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlRmF2aWNvbk9wdGlvbnMpOiBSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VGZXRjaC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRmV0Y2hSZXR1cm48VD4ge1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBmZXRjaCByZXF1ZXN0IGhhcyBmaW5pc2hlZFxuICAgKi9cbiAgaXNGaW5pc2hlZDogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuPj47XG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzQ29kZSBvZiB0aGUgSFRUUCBmZXRjaCByZXNwb25zZVxuICAgKi9cbiAgc3RhdHVzQ29kZTogU2hhbGxvd1JlZjxudW1iZXIgfCBudWxsPjtcbiAgLyoqXG4gICAqIFRoZSByYXcgcmVzcG9uc2Ugb2YgdGhlIGZldGNoIHJlc3BvbnNlXG4gICAqL1xuICByZXNwb25zZTogU2hhbGxvd1JlZjxSZXNwb25zZSB8IG51bGw+O1xuICAvKipcbiAgICogQW55IGZldGNoIGVycm9ycyB0aGF0IG1heSBoYXZlIG9jY3VycmVkXG4gICAqL1xuICBlcnJvcjogU2hhbGxvd1JlZjxhbnk+O1xuICAvKipcbiAgICogVGhlIGZldGNoIHJlc3BvbnNlIGJvZHkgb24gc3VjY2VzcywgbWF5IGVpdGhlciBiZSBKU09OIG9yIHRleHRcbiAgICovXG4gIGRhdGE6IFNoYWxsb3dSZWY8VCB8IG51bGw+O1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSByZXF1ZXN0IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLlxuICAgKi9cbiAgaXNGZXRjaGluZzogUmVhZG9ubHk8U2hhbGxvd1JlZjxib29sZWFuPj47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZldGNoIHJlcXVlc3QgaXMgYWJsZSB0byBiZSBhYm9ydGVkXG4gICAqL1xuICBjYW5BYm9ydDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIGZldGNoIHJlcXVlc3Qgd2FzIGFib3J0ZWRcbiAgICovXG4gIGFib3J0ZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBBYm9ydCB0aGUgZmV0Y2ggcmVxdWVzdFxuICAgKi9cbiAgYWJvcnQ6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBNYW51YWxseSBjYWxsIHRoZSBmZXRjaFxuICAgKiAoZGVmYXVsdCBub3QgdGhyb3dpbmcgZXJyb3IpXG4gICAqL1xuICBleGVjdXRlOiAodGhyb3dPbkZhaWxlZD86IGJvb2xlYW4pID0+IFByb21pc2U8YW55PjtcbiAgLyoqXG4gICAqIEZpcmVzIGFmdGVyIHRoZSBmZXRjaCByZXF1ZXN0IGhhcyBmaW5pc2hlZFxuICAgKi9cbiAgb25GZXRjaFJlc3BvbnNlOiBFdmVudEhvb2tPbjxSZXNwb25zZT47XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciBhIGZldGNoIHJlcXVlc3QgZXJyb3JcbiAgICovXG4gIG9uRmV0Y2hFcnJvcjogRXZlbnRIb29rT247XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciBhIGZldGNoIGhhcyBjb21wbGV0ZWRcbiAgICovXG4gIG9uRmV0Y2hGaW5hbGx5OiBFdmVudEhvb2tPbjtcbiAgZ2V0OiAoKSA9PiBVc2VGZXRjaFJldHVybjxUPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPFQ+PjtcbiAgcG9zdDogKHBheWxvYWQ/OiBNYXliZVJlZk9yR2V0dGVyPHVua25vd24+LCB0eXBlPzogc3RyaW5nKSA9PiBVc2VGZXRjaFJldHVybjxUPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPFQ+PjtcbiAgcHV0OiAocGF5bG9hZD86IE1heWJlUmVmT3JHZXR0ZXI8dW5rbm93bj4sIHR5cGU/OiBzdHJpbmcpID0+IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuICBkZWxldGU6IChwYXlsb2FkPzogTWF5YmVSZWZPckdldHRlcjx1bmtub3duPiwgdHlwZT86IHN0cmluZykgPT4gVXNlRmV0Y2hSZXR1cm48VD4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxUPj47XG4gIHBhdGNoOiAocGF5bG9hZD86IE1heWJlUmVmT3JHZXR0ZXI8dW5rbm93bj4sIHR5cGU/OiBzdHJpbmcpID0+IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuICBoZWFkOiAocGF5bG9hZD86IE1heWJlUmVmT3JHZXR0ZXI8dW5rbm93bj4sIHR5cGU/OiBzdHJpbmcpID0+IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuICBvcHRpb25zOiAocGF5bG9hZD86IE1heWJlUmVmT3JHZXR0ZXI8dW5rbm93bj4sIHR5cGU/OiBzdHJpbmcpID0+IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuICBqc29uOiA8SlNPTiA9IGFueT4oKSA9PiBVc2VGZXRjaFJldHVybjxKU09OPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPEpTT04+PjtcbiAgdGV4dDogKCkgPT4gVXNlRmV0Y2hSZXR1cm48c3RyaW5nPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPHN0cmluZz4+O1xuICBibG9iOiAoKSA9PiBVc2VGZXRjaFJldHVybjxCbG9iPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPEJsb2I+PjtcbiAgYXJyYXlCdWZmZXI6ICgpID0+IFVzZUZldGNoUmV0dXJuPEFycmF5QnVmZmVyPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPEFycmF5QnVmZmVyPj47XG4gIGZvcm1EYXRhOiAoKSA9PiBVc2VGZXRjaFJldHVybjxGb3JtRGF0YT4gJiBQcm9taXNlTGlrZTxVc2VGZXRjaFJldHVybjxGb3JtRGF0YT4+O1xufVxudHlwZSBDb21iaW5hdGlvbiA9ICdvdmVyd3JpdGUnIHwgJ2NoYWluJztcbmludGVyZmFjZSBCZWZvcmVGZXRjaENvbnRleHQge1xuICAvKipcbiAgICogVGhlIGNvbXB1dGVkIHVybCBvZiB0aGUgY3VycmVudCByZXF1ZXN0XG4gICAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IG9wdGlvbnMgb2YgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICAgKi9cbiAgb3B0aW9uczogUmVxdWVzdEluaXQ7XG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSBjdXJyZW50IHJlcXVlc3RcbiAgICovXG4gIGNhbmNlbDogRm47XG59XG5pbnRlcmZhY2UgQWZ0ZXJGZXRjaENvbnRleHQ8VCA9IGFueT4ge1xuICByZXNwb25zZTogUmVzcG9uc2U7XG4gIGRhdGE6IFQgfCBudWxsO1xuICBjb250ZXh0OiBCZWZvcmVGZXRjaENvbnRleHQ7XG4gIGV4ZWN1dGU6ICh0aHJvd09uRmFpbGVkPzogYm9vbGVhbikgPT4gUHJvbWlzZTxhbnk+O1xufVxuaW50ZXJmYWNlIE9uRmV0Y2hFcnJvckNvbnRleHQ8VCA9IGFueSwgRSA9IGFueT4ge1xuICBlcnJvcjogRTtcbiAgZGF0YTogVCB8IG51bGw7XG4gIHJlc3BvbnNlOiBSZXNwb25zZSB8IG51bGw7XG4gIGNvbnRleHQ6IEJlZm9yZUZldGNoQ29udGV4dDtcbiAgZXhlY3V0ZTogKHRocm93T25GYWlsZWQ/OiBib29sZWFuKSA9PiBQcm9taXNlPGFueT47XG59XG5pbnRlcmZhY2UgVXNlRmV0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZldGNoIGZ1bmN0aW9uXG4gICAqL1xuICBmZXRjaD86IHR5cGVvZiB3aW5kb3cuZmV0Y2g7XG4gIC8qKlxuICAgKiBXaWxsIGF1dG9tYXRpY2FsbHkgcnVuIGZldGNoIHdoZW4gYHVzZUZldGNoYCBpcyB1c2VkXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaWxsIGF1dG9tYXRpY2FsbHkgcmVmZXRjaCB3aGVuOlxuICAgKiAtIHRoZSBVUkwgaXMgY2hhbmdlZCBpZiB0aGUgVVJMIGlzIGEgcmVmXG4gICAqIC0gdGhlIHBheWxvYWQgaXMgY2hhbmdlZCBpZiB0aGUgcGF5bG9hZCBpcyBhIHJlZlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVmZXRjaD86IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBJbml0aWFsIGRhdGEgYmVmb3JlIHRoZSByZXF1ZXN0IGZpbmlzaGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IG51bGxcbiAgICovXG4gIGluaXRpYWxEYXRhPzogYW55O1xuICAvKipcbiAgICogVGltZW91dCBmb3IgYWJvcnQgcmVxdWVzdCBhZnRlciBudW1iZXIgb2YgbWlsbGlzZWNvbmRcbiAgICogYDBgIG1lYW5zIHVzZSBicm93c2VyIGRlZmF1bHRcbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEFsbG93IHVwZGF0ZSB0aGUgYGRhdGFgIHJlZiB3aGVuIGZldGNoIGVycm9yIHdoZW5ldmVyIHByb3ZpZGVkLCBvciBtdXRhdGVkIGluIHRoZSBgb25GZXRjaEVycm9yYCBjYWxsYmFja1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgdXBkYXRlRGF0YU9uRXJyb3I/OiBib29sZWFuO1xuICAvKipcbiAgICogV2lsbCBydW4gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBmZXRjaCByZXF1ZXN0IGlzIGRpc3BhdGNoZWRcbiAgICovXG4gIGJlZm9yZUZldGNoPzogKGN0eDogQmVmb3JlRmV0Y2hDb250ZXh0KSA9PiBQcm9taXNlPFBhcnRpYWw8QmVmb3JlRmV0Y2hDb250ZXh0PiB8IHZvaWQ+IHwgUGFydGlhbDxCZWZvcmVGZXRjaENvbnRleHQ+IHwgdm9pZDtcbiAgLyoqXG4gICAqIFdpbGwgcnVuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmZXRjaCByZXF1ZXN0IGlzIHJldHVybmVkLlxuICAgKiBSdW5zIGFmdGVyIGFueSAyeHggcmVzcG9uc2VcbiAgICovXG4gIGFmdGVyRmV0Y2g/OiAoY3R4OiBBZnRlckZldGNoQ29udGV4dCkgPT4gUHJvbWlzZTxQYXJ0aWFsPEFmdGVyRmV0Y2hDb250ZXh0Pj4gfCBQYXJ0aWFsPEFmdGVyRmV0Y2hDb250ZXh0PjtcbiAgLyoqXG4gICAqIFdpbGwgcnVuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmZXRjaCByZXF1ZXN0IGlzIHJldHVybmVkLlxuICAgKiBSdW5zIGFmdGVyIGFueSA0eHggYW5kIDV4eCByZXNwb25zZVxuICAgKi9cbiAgb25GZXRjaEVycm9yPzogKGN0eDogT25GZXRjaEVycm9yQ29udGV4dCkgPT4gUHJvbWlzZTxQYXJ0aWFsPE9uRmV0Y2hFcnJvckNvbnRleHQ+PiB8IFBhcnRpYWw8T25GZXRjaEVycm9yQ29udGV4dD47XG59XG5pbnRlcmZhY2UgQ3JlYXRlRmV0Y2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCB0aGF0IHdpbGwgYmUgcHJlZml4ZWQgdG8gYWxsIHVybHMgdW5sZXNzIHVybHMgYXJlIGFic29sdXRlXG4gICAqL1xuICBiYXNlVXJsPzogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+O1xuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBpbmhlcml0IGJlaGF2aW9yIGZvciBiZWZvcmVGZXRjaCwgYWZ0ZXJGZXRjaCwgb25GZXRjaEVycm9yXG4gICAqIEBkZWZhdWx0ICdjaGFpbidcbiAgICovXG4gIGNvbWJpbmF0aW9uPzogQ29tYmluYXRpb247XG4gIC8qKlxuICAgKiBEZWZhdWx0IE9wdGlvbnMgZm9yIHRoZSB1c2VGZXRjaCBmdW5jdGlvblxuICAgKi9cbiAgb3B0aW9ucz86IFVzZUZldGNoT3B0aW9ucztcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBmZXRjaCByZXF1ZXN0XG4gICAqL1xuICBmZXRjaE9wdGlvbnM/OiBSZXF1ZXN0SW5pdDtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlRmV0Y2goY29uZmlnPzogQ3JlYXRlRmV0Y2hPcHRpb25zKTogdHlwZW9mIHVzZUZldGNoO1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGZXRjaDxUPih1cmw6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPik6IFVzZUZldGNoUmV0dXJuPFQ+ICYgUHJvbWlzZUxpa2U8VXNlRmV0Y2hSZXR1cm48VD4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGZXRjaDxUPih1cmw6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgdXNlRmV0Y2hPcHRpb25zOiBVc2VGZXRjaE9wdGlvbnMpOiBVc2VGZXRjaFJldHVybjxUPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPFQ+PjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlRmV0Y2g8VD4odXJsOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIG9wdGlvbnM6IFJlcXVlc3RJbml0LCB1c2VGZXRjaE9wdGlvbnM/OiBVc2VGZXRjaE9wdGlvbnMpOiBVc2VGZXRjaFJldHVybjxUPiAmIFByb21pc2VMaWtlPFVzZUZldGNoUmV0dXJuPFQ+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUZpbGVEaWFsb2cvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUZpbGVEaWFsb2dPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQge1xuICAvKipcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgbXVsdGlwbGU/OiBNYXliZVJlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIEBkZWZhdWx0ICcqJ1xuICAgKi9cbiAgYWNjZXB0PzogTWF5YmVSZWY8c3RyaW5nPjtcbiAgLyoqXG4gICAqIFNlbGVjdCB0aGUgaW5wdXQgc291cmNlIGZvciB0aGUgY2FwdHVyZSBmaWxlLlxuICAgKiBAc2VlIFtIVE1MSW5wdXRFbGVtZW50IENhcHR1cmVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQXR0cmlidXRlcy9jYXB0dXJlKVxuICAgKi9cbiAgY2FwdHVyZT86IE1heWJlUmVmPHN0cmluZz47XG4gIC8qKlxuICAgKiBSZXNldCB3aGVuIG9wZW4gZmlsZSBkaWFsb2cuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXNldD86IE1heWJlUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogU2VsZWN0IGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgZmlsZXMuXG4gICAqIEBzZWUgW0hUTUxJbnB1dEVsZW1lbnQgd2Via2l0ZGlyZWN0b3J5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTElucHV0RWxlbWVudC93ZWJraXRkaXJlY3RvcnkpXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXJlY3Rvcnk/OiBNYXliZVJlZjxib29sZWFuPjtcbiAgLyoqXG4gICAqIEluaXRpYWwgZmlsZXMgdG8gc2V0LlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBpbml0aWFsRmlsZXM/OiBBcnJheTxGaWxlPiB8IEZpbGVMaXN0O1xuICAvKipcbiAgICogVGhlIGlucHV0IGVsZW1lbnQgdG8gdXNlIGZvciBmaWxlIGRpYWxvZy5cbiAgICogQGRlZmF1bHQgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICAgKi9cbiAgaW5wdXQ/OiBNYXliZUVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG59XG5pbnRlcmZhY2UgVXNlRmlsZURpYWxvZ1JldHVybiB7XG4gIGZpbGVzOiBSZWY8RmlsZUxpc3QgfCBudWxsPjtcbiAgb3BlbjogKGxvY2FsT3B0aW9ucz86IFBhcnRpYWw8VXNlRmlsZURpYWxvZ09wdGlvbnM+KSA9PiB2b2lkO1xuICByZXNldDogKCkgPT4gdm9pZDtcbiAgb25DaGFuZ2U6IEV2ZW50SG9va09uPEZpbGVMaXN0IHwgbnVsbD47XG4gIG9uQ2FuY2VsOiBFdmVudEhvb2tPbjtcbn1cbi8qKlxuICogT3BlbiBmaWxlIGRpYWxvZyB3aXRoIGVhc2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRmlsZURpYWxvZ1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGaWxlRGlhbG9nKG9wdGlvbnM/OiBVc2VGaWxlRGlhbG9nT3B0aW9ucyk6IFVzZUZpbGVEaWFsb2dSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VGaWxlU3lzdGVtQWNjZXNzL2luZGV4LmQudHNcbi8qKlxuICogd2luZG93LnNob3dPcGVuRmlsZVBpY2tlciBwYXJhbWV0ZXJzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS93aW5kb3cvc2hvd09wZW5GaWxlUGlja2VyI3BhcmFtZXRlcnNcbiAqL1xuaW50ZXJmYWNlIEZpbGVTeXN0ZW1BY2Nlc3NTaG93T3BlbkZpbGVPcHRpb25zIHtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICB0eXBlcz86IEFycmF5PHtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBhY2NlcHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgfT47XG4gIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb24/OiBib29sZWFuO1xufVxuLyoqXG4gKiB3aW5kb3cuc2hvd1NhdmVGaWxlUGlja2VyIHBhcmFtZXRlcnNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL3dpbmRvdy9zaG93U2F2ZUZpbGVQaWNrZXIjcGFyYW1ldGVyc1xuICovXG5pbnRlcmZhY2UgRmlsZVN5c3RlbUFjY2Vzc1Nob3dTYXZlRmlsZU9wdGlvbnMge1xuICBzdWdnZXN0ZWROYW1lPzogc3RyaW5nO1xuICB0eXBlcz86IEFycmF5PHtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBhY2NlcHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgfT47XG4gIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb24/OiBib29sZWFuO1xufVxuLyoqXG4gKiBGaWxlSGFuZGxlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtRmlsZUhhbmRsZVxuICovXG5pbnRlcmZhY2UgRmlsZVN5c3RlbUZpbGVIYW5kbGUge1xuICBnZXRGaWxlOiAoKSA9PiBQcm9taXNlPEZpbGU+O1xuICBjcmVhdGVXcml0YWJsZTogKCkgPT4gRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbTtcbn1cbi8qKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbVxuICovXG5pbnRlcmZhY2UgRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbSBleHRlbmRzIFdyaXRhYmxlU3RyZWFtIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0vd3JpdGVcbiAgICovXG4gIHdyaXRlOiBGaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtV3JpdGU7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GaWxlU3lzdGVtV3JpdGFibGVGaWxlU3RyZWFtL3NlZWtcbiAgICovXG4gIHNlZWs6IChwb3NpdGlvbjogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbS90cnVuY2F0ZVxuICAgKi9cbiAgdHJ1bmNhdGU6IChzaXplOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD47XG59XG4vKipcbiAqIEZpbGVTdHJlYW0ud3JpdGVcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW0vd3JpdGVcbiAqL1xuaW50ZXJmYWNlIEZpbGVTeXN0ZW1Xcml0YWJsZUZpbGVTdHJlYW1Xcml0ZSB7XG4gIChkYXRhOiBzdHJpbmcgfCBCdWZmZXJTb3VyY2UgfCBCbG9iKTogUHJvbWlzZTx2b2lkPjtcbiAgKG9wdGlvbnM6IHtcbiAgICB0eXBlOiAnd3JpdGUnO1xuICAgIHBvc2l0aW9uOiBudW1iZXI7XG4gICAgZGF0YTogc3RyaW5nIHwgQnVmZmVyU291cmNlIHwgQmxvYjtcbiAgfSk6IFByb21pc2U8dm9pZD47XG4gIChvcHRpb25zOiB7XG4gICAgdHlwZTogJ3NlZWsnO1xuICAgIHBvc2l0aW9uOiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+O1xuICAob3B0aW9uczoge1xuICAgIHR5cGU6ICd0cnVuY2F0ZSc7XG4gICAgc2l6ZTogbnVtYmVyO1xuICB9KTogUHJvbWlzZTx2b2lkPjtcbn1cbi8qKlxuICogRmlsZVN0cmVhbS53cml0ZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmlsZVN5c3RlbVdyaXRhYmxlRmlsZVN0cmVhbS93cml0ZVxuICovXG50eXBlIEZpbGVTeXN0ZW1BY2Nlc3NXaW5kb3cgPSBXaW5kb3cgJiB7XG4gIHNob3dTYXZlRmlsZVBpY2tlcjogKG9wdGlvbnM6IEZpbGVTeXN0ZW1BY2Nlc3NTaG93U2F2ZUZpbGVPcHRpb25zKSA9PiBQcm9taXNlPEZpbGVTeXN0ZW1GaWxlSGFuZGxlPjtcbiAgc2hvd09wZW5GaWxlUGlja2VyOiAob3B0aW9uczogRmlsZVN5c3RlbUFjY2Vzc1Nob3dPcGVuRmlsZU9wdGlvbnMpID0+IFByb21pc2U8RmlsZVN5c3RlbUZpbGVIYW5kbGVbXT47XG59O1xudHlwZSBVc2VGaWxlU3lzdGVtQWNjZXNzQ29tbW9uT3B0aW9ucyA9IFBpY2s8RmlsZVN5c3RlbUFjY2Vzc1Nob3dPcGVuRmlsZU9wdGlvbnMsICd0eXBlcycgfCAnZXhjbHVkZUFjY2VwdEFsbE9wdGlvbic+O1xudHlwZSBVc2VGaWxlU3lzdGVtQWNjZXNzU2hvd1NhdmVGaWxlT3B0aW9ucyA9IFBpY2s8RmlsZVN5c3RlbUFjY2Vzc1Nob3dTYXZlRmlsZU9wdGlvbnMsICdzdWdnZXN0ZWROYW1lJz47XG50eXBlIFVzZUZpbGVTeXN0ZW1BY2Nlc3NPcHRpb25zID0gQ29uZmlndXJhYmxlV2luZG93ICYgVXNlRmlsZVN5c3RlbUFjY2Vzc0NvbW1vbk9wdGlvbnMgJiB7XG4gIC8qKlxuICAgKiBmaWxlIGRhdGEgdHlwZVxuICAgKi9cbiAgZGF0YVR5cGU/OiBNYXliZVJlZk9yR2V0dGVyPCdUZXh0JyB8ICdBcnJheUJ1ZmZlcicgfCAnQmxvYic+O1xufTtcbi8qKlxuICogQ3JlYXRlIGFuZCByZWFkIGFuZCB3cml0ZSBsb2NhbCBmaWxlcy5cbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUZpbGVTeXN0ZW1BY2Nlc3NcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGaWxlU3lzdGVtQWNjZXNzKCk6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NSZXR1cm48c3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBCbG9iPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlRmlsZVN5c3RlbUFjY2VzcyhvcHRpb25zOiBVc2VGaWxlU3lzdGVtQWNjZXNzT3B0aW9ucyAmIHtcbiAgZGF0YVR5cGU6ICdUZXh0Jztcbn0pOiBVc2VGaWxlU3lzdGVtQWNjZXNzUmV0dXJuPHN0cmluZz47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZpbGVTeXN0ZW1BY2Nlc3Mob3B0aW9uczogVXNlRmlsZVN5c3RlbUFjY2Vzc09wdGlvbnMgJiB7XG4gIGRhdGFUeXBlOiAnQXJyYXlCdWZmZXInO1xufSk6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NSZXR1cm48QXJyYXlCdWZmZXI+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGaWxlU3lzdGVtQWNjZXNzKG9wdGlvbnM6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NPcHRpb25zICYge1xuICBkYXRhVHlwZTogJ0Jsb2InO1xufSk6IFVzZUZpbGVTeXN0ZW1BY2Nlc3NSZXR1cm48QmxvYj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZpbGVTeXN0ZW1BY2Nlc3Mob3B0aW9uczogVXNlRmlsZVN5c3RlbUFjY2Vzc09wdGlvbnMpOiBVc2VGaWxlU3lzdGVtQWNjZXNzUmV0dXJuPHN0cmluZyB8IEFycmF5QnVmZmVyIHwgQmxvYj47XG5pbnRlcmZhY2UgVXNlRmlsZVN5c3RlbUFjY2Vzc1JldHVybjxUID0gc3RyaW5nPiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgZGF0YTogU2hhbGxvd1JlZjxUIHwgdW5kZWZpbmVkPjtcbiAgZmlsZTogU2hhbGxvd1JlZjxGaWxlIHwgdW5kZWZpbmVkPjtcbiAgZmlsZU5hbWU6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gIGZpbGVNSU1FOiBDb21wdXRlZFJlZjxzdHJpbmc+O1xuICBmaWxlU2l6ZTogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgZmlsZUxhc3RNb2RpZmllZDogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgb3BlbjogKF9vcHRpb25zPzogVXNlRmlsZVN5c3RlbUFjY2Vzc0NvbW1vbk9wdGlvbnMpID0+IEF3YWl0YWJsZTx2b2lkPjtcbiAgY3JlYXRlOiAoX29wdGlvbnM/OiBVc2VGaWxlU3lzdGVtQWNjZXNzU2hvd1NhdmVGaWxlT3B0aW9ucykgPT4gQXdhaXRhYmxlPHZvaWQ+O1xuICBzYXZlOiAoX29wdGlvbnM/OiBVc2VGaWxlU3lzdGVtQWNjZXNzU2hvd1NhdmVGaWxlT3B0aW9ucykgPT4gQXdhaXRhYmxlPHZvaWQ+O1xuICBzYXZlQXM6IChfb3B0aW9ucz86IFVzZUZpbGVTeXN0ZW1BY2Nlc3NTaG93U2F2ZUZpbGVPcHRpb25zKSA9PiBBd2FpdGFibGU8dm9pZD47XG4gIHVwZGF0ZURhdGE6ICgpID0+IEF3YWl0YWJsZTx2b2lkPjtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUZvY3VzL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VGb2N1c09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogSW5pdGlhbCB2YWx1ZS4gSWYgc2V0IHRydWUsIHRoZW4gZm9jdXMgd2lsbCBiZSBzZXQgb24gdGhlIHRhcmdldFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlcGxpY2F0ZSB0aGUgOmZvY3VzLXZpc2libGUgYmVoYXZpb3Igb2YgQ1NTXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1Zpc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJldmVudCBzY3JvbGxpbmcgdG8gdGhlIGVsZW1lbnQgd2hlbiBpdCBpcyBmb2N1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJldmVudFNjcm9sbD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgVXNlRm9jdXNSZXR1cm4ge1xuICAvKipcbiAgICogSWYgcmVhZCBhcyB0cnVlLCB0aGVuIHRoZSBlbGVtZW50IGhhcyBmb2N1cy4gSWYgcmVhZCBhcyBmYWxzZSwgdGhlbiB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGZvY3VzXG4gICAqIElmIHNldCB0byB0cnVlLCB0aGVuIHRoZSBlbGVtZW50IHdpbGwgYmUgZm9jdXNlZC4gSWYgc2V0IHRvIGZhbHNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIGJsdXJyZWQuXG4gICAqL1xuICBmb2N1c2VkOiBXcml0YWJsZUNvbXB1dGVkUmVmPGJvb2xlYW4+O1xufVxuLyoqXG4gKiBUcmFjayBvciBzZXQgdGhlIGZvY3VzIHN0YXRlIG9mIGEgRE9NIGVsZW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRm9jdXNcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50IGZvciB0aGUgZm9jdXMgYW5kIGJsdXIgZXZlbnRzLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VGb2N1cyh0YXJnZXQ6IE1heWJlRWxlbWVudFJlZiwgb3B0aW9ucz86IFVzZUZvY3VzT3B0aW9ucyk6IFVzZUZvY3VzUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRm9jdXNXaXRoaW4vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUZvY3VzV2l0aGluUmV0dXJuIHtcbiAgLyoqXG4gICAqIFRydWUgaWYgdGhlIGVsZW1lbnQgb3IgYW55IG9mIGl0cyBkZXNjZW5kYW50cyBhcmUgZm9jdXNlZFxuICAgKi9cbiAgZm9jdXNlZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG59XG4vKipcbiAqIFRyYWNrIGlmIGZvY3VzIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBlbGVtZW50XG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlRm9jdXNXaXRoaW5cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCBlbGVtZW50IHRvIHRyYWNrXG4gKiBAcGFyYW0gb3B0aW9ucyBGb2N1cyB3aXRoaW4gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUZvY3VzV2l0aGluKHRhcmdldDogTWF5YmVFbGVtZW50UmVmLCBvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogVXNlRm9jdXNXaXRoaW5SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VGcHMvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUZwc09wdGlvbnMge1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBGUFMgb24gZXZlcnkgeCBmcmFtZXMuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICBldmVyeT86IG51bWJlcjtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRnBzKG9wdGlvbnM/OiBVc2VGcHNPcHRpb25zKTogU2hhbGxvd1JlZjxudW1iZXI+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlRnVsbHNjcmVlbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlRnVsbHNjcmVlbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGV4aXQgZnVsbHNjcmVlbiB3aGVuIGNvbXBvbmVudCBpcyB1bm1vdW50ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9FeGl0PzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VGdWxsc2NyZWVuUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBpc0Z1bGxzY3JlZW46IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGVudGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBleGl0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICB0b2dnbGU6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG4vKipcbiAqIFJlYWN0aXZlIEZ1bGxzY3JlZW4gQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUZ1bGxzY3JlZW5cbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlRnVsbHNjcmVlbih0YXJnZXQ/OiBNYXliZUVsZW1lbnRSZWYsIG9wdGlvbnM/OiBVc2VGdWxsc2NyZWVuT3B0aW9ucyk6IFVzZUZ1bGxzY3JlZW5SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VHYW1lcGFkL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VHYW1lcGFkT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdywgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHt9XG5pbnRlcmZhY2UgVXNlR2FtZXBhZFJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlLCBQYXVzYWJsZSB7XG4gIG9uQ29ubmVjdGVkOiBFdmVudEhvb2tPbjxudW1iZXI+O1xuICBvbkRpc2Nvbm5lY3RlZDogRXZlbnRIb29rT248bnVtYmVyPjtcbiAgZ2FtZXBhZHM6IFJlZjxHYW1lcGFkW10+O1xufVxuLyoqXG4gKiBNYXBzIGEgc3RhbmRhcmQgc3RhbmRhcmQgZ2FtZXBhZCB0byBhbiBYYm94IDM2MCBDb250cm9sbGVyLlxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIG1hcEdhbWVwYWRUb1hib3gzNjBDb250cm9sbGVyKGdhbWVwYWQ6IFJlZjxHYW1lcGFkIHwgdW5kZWZpbmVkPik6IHZ1ZTAuQ29tcHV0ZWRSZWY8e1xuICBidXR0b25zOiB7XG4gICAgYTogR2FtZXBhZEJ1dHRvbjtcbiAgICBiOiBHYW1lcGFkQnV0dG9uO1xuICAgIHg6IEdhbWVwYWRCdXR0b247XG4gICAgeTogR2FtZXBhZEJ1dHRvbjtcbiAgfTtcbiAgYnVtcGVyOiB7XG4gICAgbGVmdDogR2FtZXBhZEJ1dHRvbjtcbiAgICByaWdodDogR2FtZXBhZEJ1dHRvbjtcbiAgfTtcbiAgdHJpZ2dlcnM6IHtcbiAgICBsZWZ0OiBHYW1lcGFkQnV0dG9uO1xuICAgIHJpZ2h0OiBHYW1lcGFkQnV0dG9uO1xuICB9O1xuICBzdGljazoge1xuICAgIGxlZnQ6IHtcbiAgICAgIGhvcml6b250YWw6IG51bWJlcjtcbiAgICAgIHZlcnRpY2FsOiBudW1iZXI7XG4gICAgICBidXR0b246IEdhbWVwYWRCdXR0b247XG4gICAgfTtcbiAgICByaWdodDoge1xuICAgICAgaG9yaXpvbnRhbDogbnVtYmVyO1xuICAgICAgdmVydGljYWw6IG51bWJlcjtcbiAgICAgIGJ1dHRvbjogR2FtZXBhZEJ1dHRvbjtcbiAgICB9O1xuICB9O1xuICBkcGFkOiB7XG4gICAgdXA6IEdhbWVwYWRCdXR0b247XG4gICAgZG93bjogR2FtZXBhZEJ1dHRvbjtcbiAgICBsZWZ0OiBHYW1lcGFkQnV0dG9uO1xuICAgIHJpZ2h0OiBHYW1lcGFkQnV0dG9uO1xuICB9O1xuICBiYWNrOiBHYW1lcGFkQnV0dG9uO1xuICBzdGFydDogR2FtZXBhZEJ1dHRvbjtcbn0gfCBudWxsPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlR2FtZXBhZChvcHRpb25zPzogVXNlR2FtZXBhZE9wdGlvbnMpOiBVc2VHYW1lcGFkUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlR2VvbG9jYXRpb24vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUdlb2xvY2F0aW9uT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UG9zaXRpb25PcHRpb25zPiwgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VHZW9sb2NhdGlvblJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgY29vcmRzOiBSZWY8T21pdDxHZW9sb2NhdGlvblBvc2l0aW9uWydjb29yZHMnXSwgJ3RvSlNPTic+PjtcbiAgbG9jYXRlZEF0OiBTaGFsbG93UmVmPG51bWJlciB8IG51bGw+O1xuICBlcnJvcjogU2hhbGxvd1JlZjxHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3IgfCBudWxsPjtcbiAgcmVzdW1lOiAoKSA9PiB2b2lkO1xuICBwYXVzZTogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogUmVhY3RpdmUgR2VvbG9jYXRpb24gQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUdlb2xvY2F0aW9uXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUdlb2xvY2F0aW9uKG9wdGlvbnM/OiBVc2VHZW9sb2NhdGlvbk9wdGlvbnMpOiBVc2VHZW9sb2NhdGlvblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUlkbGUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZUlkbGVPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBDb25maWd1cmFibGVFdmVudEZpbHRlciB7XG4gIC8qKlxuICAgKiBFdmVudCBuYW1lcyB0aGF0IGxpc3RlbiB0byBmb3IgZGV0ZWN0ZWQgdXNlciBhY3Rpdml0eVxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ21vdXNlbW92ZScsICdtb3VzZWRvd24nLCAncmVzaXplJywgJ2tleWRvd24nLCAndG91Y2hzdGFydCcsICd3aGVlbCddXG4gICAqL1xuICBldmVudHM/OiBXaW5kb3dFdmVudE5hbWVbXTtcbiAgLyoqXG4gICAqIExpc3RlbiBmb3IgZG9jdW1lbnQgdmlzaWJpbGl0eSBjaGFuZ2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgbGlzdGVuRm9yVmlzaWJpbGl0eUNoYW5nZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbml0aWFsIHN0YXRlIG9mIHRoZSByZWYgaWRsZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5pdGlhbFN0YXRlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VJZGxlUmV0dXJuIGV4dGVuZHMgU3RvcHBhYmxlIHtcbiAgaWRsZTogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgbGFzdEFjdGl2ZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICByZXNldDogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogVHJhY2tzIHdoZXRoZXIgdGhlIHVzZXIgaXMgYmVpbmcgaW5hY3RpdmUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlSWRsZVxuICogQHBhcmFtIHRpbWVvdXQgZGVmYXVsdCB0byAxIG1pbnV0ZVxuICogQHBhcmFtIG9wdGlvbnMgSWRsZU9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VJZGxlKHRpbWVvdXQ/OiBudW1iZXIsIG9wdGlvbnM/OiBVc2VJZGxlT3B0aW9ucyk6IFVzZUlkbGVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VJbWFnZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlSW1hZ2VPcHRpb25zIHtcbiAgLyoqIEFkZHJlc3Mgb2YgdGhlIHJlc291cmNlICovXG4gIHNyYzogc3RyaW5nO1xuICAvKiogSW1hZ2VzIHRvIHVzZSBpbiBkaWZmZXJlbnQgc2l0dWF0aW9ucywgZS5nLiwgaGlnaC1yZXNvbHV0aW9uIGRpc3BsYXlzLCBzbWFsbCBtb25pdG9ycywgZXRjLiAqL1xuICBzcmNzZXQ/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSBzaXplcyBmb3IgZGlmZmVyZW50IHBhZ2UgbGF5b3V0cyAqL1xuICBzaXplcz86IHN0cmluZztcbiAgLyoqIEltYWdlIGFsdGVybmF0aXZlIGluZm9ybWF0aW9uICovXG4gIGFsdD86IHN0cmluZztcbiAgLyoqIEltYWdlIGNsYXNzZXMgKi9cbiAgY2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSBsb2FkaW5nICovXG4gIGxvYWRpbmc/OiBIVE1MSW1hZ2VFbGVtZW50Wydsb2FkaW5nJ107XG4gIC8qKiBJbWFnZSBDT1JTIHNldHRpbmdzICovXG4gIGNyb3Nzb3JpZ2luPzogc3RyaW5nO1xuICAvKiogUmVmZXJyZXIgcG9saWN5IGZvciBmZXRjaCBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5ICovXG4gIHJlZmVycmVyUG9saWN5PzogSFRNTEltYWdlRWxlbWVudFsncmVmZXJyZXJQb2xpY3knXTtcbiAgLyoqIEltYWdlIHdpZHRoICovXG4gIHdpZHRoPzogSFRNTEltYWdlRWxlbWVudFsnd2lkdGgnXTtcbiAgLyoqIEltYWdlIGhlaWdodCAqL1xuICBoZWlnaHQ/OiBIVE1MSW1hZ2VFbGVtZW50WydoZWlnaHQnXTtcbiAgLyoqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjZGVjb2RpbmcgKi9cbiAgZGVjb2Rpbmc/OiBIVE1MSW1hZ2VFbGVtZW50WydkZWNvZGluZyddO1xuICAvKiogUHJvdmlkZXMgYSBoaW50IG9mIHRoZSByZWxhdGl2ZSBwcmlvcml0eSB0byB1c2Ugd2hlbiBmZXRjaGluZyB0aGUgaW1hZ2UgKi9cbiAgZmV0Y2hQcmlvcml0eT86IEhUTUxJbWFnZUVsZW1lbnRbJ2ZldGNoUHJpb3JpdHknXTtcbiAgLyoqIFByb3ZpZGVzIGEgaGludCBvZiB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgaW1hZ2UgKi9cbiAgaXNtYXA/OiBIVE1MSW1hZ2VFbGVtZW50Wydpc01hcCddO1xuICAvKiogVGhlIHBhcnRpYWwgVVJMIChzdGFydGluZyB3aXRoICMpIG9mIGFuIGltYWdlIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQgKi9cbiAgdXNlbWFwPzogSFRNTEltYWdlRWxlbWVudFsndXNlTWFwJ107XG59XG50eXBlIFVzZUltYWdlUmV0dXJuID0gVXNlQXN5bmNTdGF0ZVJldHVybjxIVE1MSW1hZ2VFbGVtZW50IHwgdW5kZWZpbmVkLCBhbnlbXSwgdHJ1ZT47XG4vKipcbiAqIFJlYWN0aXZlIGxvYWQgYW4gaW1hZ2UgaW4gdGhlIGJyb3dzZXIsIHlvdSBjYW4gd2FpdCB0aGUgcmVzdWx0IHRvIGRpc3BsYXkgaXQgb3Igc2hvdyBhIGZhbGxiYWNrLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZUltYWdlXG4gKiBAcGFyYW0gb3B0aW9ucyBJbWFnZSBhdHRyaWJ1dGVzLCBhcyB1c2VkIGluIHRoZSA8aW1nPiB0YWdcbiAqIEBwYXJhbSBhc3luY1N0YXRlT3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUltYWdlPFNoYWxsb3cgZXh0ZW5kcyB0cnVlPihvcHRpb25zOiBNYXliZVJlZk9yR2V0dGVyPFVzZUltYWdlT3B0aW9ucz4sIGFzeW5jU3RhdGVPcHRpb25zPzogVXNlQXN5bmNTdGF0ZU9wdGlvbnM8U2hhbGxvdz4pOiBVc2VJbWFnZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVNjcm9sbC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlU2Nyb2xsT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBUaHJvdHRsZSB0aW1lIGZvciBzY3JvbGwgZXZlbnQsIGl04oCZcyBkaXNhYmxlZCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0aHJvdHRsZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBjaGVjayB0aW1lIHdoZW4gc2Nyb2xsaW5nIGVuZHMuXG4gICAqIFRoaXMgY29uZmlndXJhdGlvbiB3aWxsIGJlIHNldHRpbmcgdG8gKHRocm90dGxlICsgaWRsZSkgd2hlbiB0aGUgYHRocm90dGxlYCBpcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyMDBcbiAgICovXG4gIGlkbGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPZmZzZXQgYXJyaXZlZCBzdGF0ZXMgYnkgeCBwaXhlbHNcbiAgICpcbiAgICovXG4gIG9mZnNldD86IHtcbiAgICBsZWZ0PzogbnVtYmVyO1xuICAgIHJpZ2h0PzogbnVtYmVyO1xuICAgIHRvcD86IG51bWJlcjtcbiAgICBib3R0b20/OiBudW1iZXI7XG4gIH07XG4gIC8qKlxuICAgKiBVc2UgTXV0YXRpb25PYnNlcnZlciB0byBtb25pdG9yIHNwZWNpZmljIERPTSBjaGFuZ2VzLFxuICAgKiBzdWNoIGFzIGF0dHJpYnV0ZSBtb2RpZmljYXRpb25zLCBjaGlsZCBub2RlIGFkZGl0aW9ucyBvciByZW1vdmFscywgb3Igc3VidHJlZSBjaGFuZ2VzLlxuICAgKiBAZGVmYXVsdCB7IG11dGF0aW9uOiBib29sZWFuIH1cbiAgICovXG4gIG9ic2VydmU/OiBib29sZWFuIHwge1xuICAgIG11dGF0aW9uPzogYm9vbGVhbjtcbiAgfTtcbiAgLyoqXG4gICAqIFRyaWdnZXIgaXQgd2hlbiBzY3JvbGxpbmcuXG4gICAqXG4gICAqL1xuICBvblNjcm9sbD86IChlOiBFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFRyaWdnZXIgaXQgd2hlbiBzY3JvbGxpbmcgZW5kcy5cbiAgICpcbiAgICovXG4gIG9uU3RvcD86IChlOiBFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIExpc3RlbmVyIG9wdGlvbnMgZm9yIHNjcm9sbCBldmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQge2NhcHR1cmU6IGZhbHNlLCBwYXNzaXZlOiB0cnVlfVxuICAgKi9cbiAgZXZlbnRMaXN0ZW5lck9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnM7XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHNwZWNpZnkgYSBzY3JvbGwgYmVoYXZpb3Igb2YgYGF1dG9gIChkZWZhdWx0LCBub3Qgc21vb3RoIHNjcm9sbGluZykgb3JcbiAgICogYHNtb290aGAgKGZvciBzbW9vdGggc2Nyb2xsaW5nKSB3aGljaCB0YWtlcyBlZmZlY3Qgd2hlbiBjaGFuZ2luZyB0aGUgYHhgIG9yIGB5YCByZWZzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIGJlaGF2aW9yPzogTWF5YmVSZWZPckdldHRlcjxTY3JvbGxCZWhhdmlvcj47XG4gIC8qKlxuICAgKiBPbiBlcnJvciBjYWxsYmFja1xuICAgKlxuICAgKiBEZWZhdWx0IGxvZyBlcnJvciB0byBgY29uc29sZS5lcnJvcmBcbiAgICovXG4gIG9uRXJyb3I/OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgVXNlU2Nyb2xsUmV0dXJuIHtcbiAgeDogV3JpdGFibGVDb21wdXRlZFJlZjxudW1iZXI+O1xuICB5OiBXcml0YWJsZUNvbXB1dGVkUmVmPG51bWJlcj47XG4gIGlzU2Nyb2xsaW5nOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBhcnJpdmVkU3RhdGU6IHtcbiAgICBsZWZ0OiBib29sZWFuO1xuICAgIHJpZ2h0OiBib29sZWFuO1xuICAgIHRvcDogYm9vbGVhbjtcbiAgICBib3R0b206IGJvb2xlYW47XG4gIH07XG4gIGRpcmVjdGlvbnM6IHtcbiAgICBsZWZ0OiBib29sZWFuO1xuICAgIHJpZ2h0OiBib29sZWFuO1xuICAgIHRvcDogYm9vbGVhbjtcbiAgICBib3R0b206IGJvb2xlYW47XG4gIH07XG4gIG1lYXN1cmU6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIHNjcm9sbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTY3JvbGxcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNjcm9sbChlbGVtZW50OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB8IFdpbmRvdyB8IERvY3VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VTY3JvbGxPcHRpb25zKTogVXNlU2Nyb2xsUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlSW5maW5pdGVTY3JvbGwvaW5kZXguZC50c1xudHlwZSBJbmZpbml0ZVNjcm9sbEVsZW1lbnQgPSBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBXaW5kb3cgfCBEb2N1bWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG5pbnRlcmZhY2UgVXNlSW5maW5pdGVTY3JvbGxPcHRpb25zPFQgZXh0ZW5kcyBJbmZpbml0ZVNjcm9sbEVsZW1lbnQgPSBJbmZpbml0ZVNjcm9sbEVsZW1lbnQ+IGV4dGVuZHMgVXNlU2Nyb2xsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3R0b20gb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBib3R0b20gb2YgdGhlIHZpZXdwb3J0XG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIGRpc3RhbmNlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0byBsaXN0ZW4gdGhlIHNjcm9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2JvdHRvbSdcbiAgICovXG4gIGRpcmVjdGlvbj86ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xuICAvKipcbiAgICogVGhlIGludGVydmFsIHRpbWUgYmV0d2VlbiB0d28gbG9hZCBtb3JlICh0byBhdm9pZCB0b28gbWFueSBpbnZva2VzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgMTAwXG4gICAqL1xuICBpbnRlcnZhbD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgbW9yZSBjb250ZW50IGNhbiBiZSBsb2FkZWQgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC5cbiAgICogU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgbG9hZGluZyBtb3JlIGNvbnRlbnQgaXMgYWxsb3dlZCBmb3IgdGhlIGdpdmVuIGVsZW1lbnQsXG4gICAqIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGNhbkxvYWRNb3JlPzogKGVsOiBUKSA9PiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZUluZmluaXRlU2Nyb2xsUmV0dXJuIHtcbiAgaXNMb2FkaW5nOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgcmVzZXQ6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIGluZmluaXRlIHNjcm9sbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VJbmZpbml0ZVNjcm9sbFxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUluZmluaXRlU2Nyb2xsPFQgZXh0ZW5kcyBJbmZpbml0ZVNjcm9sbEVsZW1lbnQ+KGVsZW1lbnQ6IE1heWJlUmVmT3JHZXR0ZXI8VD4sIG9uTG9hZE1vcmU6IChzdGF0ZTogVW53cmFwTmVzdGVkUmVmczxVc2VTY3JvbGxSZXR1cm4+KSA9PiBBd2FpdGFibGU8dm9pZD4sIG9wdGlvbnM/OiBVc2VJbmZpbml0ZVNjcm9sbE9wdGlvbnM8VD4pOiBVc2VJbmZpbml0ZVNjcm9sbFJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZUtleU1vZGlmaWVyL2luZGV4LmQudHNcbnR5cGUgS2V5TW9kaWZpZXIgPSAnQWx0JyB8ICdBbHRHcmFwaCcgfCAnQ2Fwc0xvY2snIHwgJ0NvbnRyb2wnIHwgJ0ZuJyB8ICdGbkxvY2snIHwgJ01ldGEnIHwgJ051bUxvY2snIHwgJ1Njcm9sbExvY2snIHwgJ1NoaWZ0JyB8ICdTeW1ib2wnIHwgJ1N5bWJvbExvY2snO1xuaW50ZXJmYWNlIFVzZU1vZGlmaWVyT3B0aW9uczxJbml0aWFsPiBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50IHtcbiAgLyoqXG4gICAqIEV2ZW50IG5hbWVzIHRoYXQgd2lsbCBwcm9tcHQgdXBkYXRlIHRvIG1vZGlmaWVyIHN0YXRlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ2tleWRvd24nLCAna2V5dXAnXVxuICAgKi9cbiAgZXZlbnRzPzogV2luZG93RXZlbnROYW1lW107XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlIG9mIHRoZSByZXR1cm5lZCByZWZcbiAgICpcbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgaW5pdGlhbD86IEluaXRpYWw7XG59XG50eXBlIFVzZUtleU1vZGlmaWVyUmV0dXJuPEluaXRpYWw+ID0gU2hhbGxvd1JlZjxJbml0aWFsIGV4dGVuZHMgYm9vbGVhbiA/IGJvb2xlYW4gOiBib29sZWFuIHwgbnVsbD47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZUtleU1vZGlmaWVyPEluaXRpYWwgZXh0ZW5kcyBib29sZWFuIHwgbnVsbD4obW9kaWZpZXI6IEtleU1vZGlmaWVyLCBvcHRpb25zPzogVXNlTW9kaWZpZXJPcHRpb25zPEluaXRpYWw+KTogVXNlS2V5TW9kaWZpZXJSZXR1cm48SW5pdGlhbD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VMb2NhbFN0b3JhZ2UvaW5kZXguZC50c1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VMb2NhbFN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8c3RyaW5nPik6IFJlbW92YWJsZVJlZjxzdHJpbmc+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VMb2NhbFN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxib29sZWFuPiwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPGJvb2xlYW4+KTogUmVtb3ZhYmxlUmVmPGJvb2xlYW4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VMb2NhbFN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8bnVtYmVyPik6IFJlbW92YWJsZVJlZjxudW1iZXI+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VMb2NhbFN0b3JhZ2U8VD4oa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxUPiwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VMb2NhbFN0b3JhZ2U8VCA9IHVua25vd24+KGtleTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8bnVsbD4sIG9wdGlvbnM/OiBVc2VTdG9yYWdlT3B0aW9uczxUPik6IFJlbW92YWJsZVJlZjxUPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1hZ2ljS2V5cy9hbGlhc01hcC5kLnRzXG5kZWNsYXJlIGNvbnN0IERlZmF1bHRNYWdpY0tleXNBbGlhc01hcDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNYWdpY0tleXMvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZU1hZ2ljS2V5c09wdGlvbnM8UmVhY3RpdmUgZXh0ZW5kcyBib29sZWFuPiB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhY3RpdmUgb2JqZWN0IGluc3RlYWQgb2YgYW4gb2JqZWN0IG9mIHJlZnNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWN0aXZlPzogUmVhY3RpdmU7XG4gIC8qKlxuICAgKiBUYXJnZXQgZm9yIGxpc3RlbmluZyBldmVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgd2luZG93XG4gICAqL1xuICB0YXJnZXQ/OiBNYXliZVJlZk9yR2V0dGVyPEV2ZW50VGFyZ2V0PjtcbiAgLyoqXG4gICAqIEFsaWFzIG1hcCBmb3Iga2V5cywgYWxsIHRoZSBrZXlzIHNob3VsZCBiZSBsb3dlcmNhc2VcbiAgICogeyB0YXJnZXQ6IGtleWNvZGUgfVxuICAgKlxuICAgKiBAZXhhbXBsZSB7IGN0cmw6IFwiY29udHJvbFwiIH1cbiAgICogQGRlZmF1bHQgPHByZWRlZmluZWQtbWFwPlxuICAgKi9cbiAgYWxpYXNNYXA/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogUmVnaXN0ZXIgcGFzc2l2ZSBsaXN0ZW5lclxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBwYXNzaXZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEN1c3RvbSBldmVudCBoYW5kbGVyIGZvciBrZXlkb3duL2tleXVwIGV2ZW50LlxuICAgKiBVc2VmdWwgd2hlbiB5b3Ugd2FudCB0byBhcHBseSBjdXN0b20gbG9naWMuXG4gICAqXG4gICAqIFdoZW4gdXNpbmcgYGUucHJldmVudERlZmF1bHQoKWAsIHlvdSB3aWxsIG5lZWQgdG8gcGFzcyBgcGFzc2l2ZTogZmFsc2VgIHRvIHVzZU1hZ2ljS2V5cygpLlxuICAgKi9cbiAgb25FdmVudEZpcmVkPzogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQgfCBib29sZWFuO1xufVxuaW50ZXJmYWNlIE1hZ2ljS2V5c0ludGVybmFsIHtcbiAgLyoqXG4gICAqIEEgU2V0IG9mIGN1cnJlbnRseSBwcmVzc2VkIGtleXMsXG4gICAqIFN0b3JlcyByYXcga2V5Q29kZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5XG4gICAqL1xuICBjdXJyZW50OiBTZXQ8c3RyaW5nPjtcbn1cbnR5cGUgVXNlTWFnaWNLZXlzUmV0dXJuPFJlYWN0aXZlIGV4dGVuZHMgYm9vbGVhbj4gPSBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWFjdGl2ZSBleHRlbmRzIHRydWUgPyBib29sZWFuIDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj4+ICYgTWFnaWNLZXlzSW50ZXJuYWw+O1xuLyoqXG4gKiBSZWFjdGl2ZSBrZXlzIHByZXNzZWQgc3RhdGUsIHdpdGggbWFnaWNhbCBrZXlzIGNvbWJpbmF0aW9uIHN1cHBvcnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTWFnaWNLZXlzXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTWFnaWNLZXlzPFQgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+KG9wdGlvbnM/OiBVc2VNYWdpY0tleXNPcHRpb25zPFQ+KTogVXNlTWFnaWNLZXlzUmV0dXJuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTWVkaWFDb250cm9scy9pbmRleC5kLnRzXG4vKipcbiAqIE1hbnkgb2YgdGhlIGpzZG9jIGRlZmluaXRpb25zIGhlcmUgYXJlIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlXG4gKiBkb2N1bWVudGF0aW9uIGZyb20gTUROKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MTWVkaWFFbGVtZW50KVxuICovXG5pbnRlcmZhY2UgVXNlTWVkaWFTb3VyY2Uge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSB1cmwgZm9yIHRoZSBtZWRpYVxuICAgKi9cbiAgc3JjOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbWVkaWEgY29kZWMgdHlwZVxuICAgKi9cbiAgdHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbWVkaWEgcXVlcnkgZm9yIHRoZSByZXNvdXJjZSdzIGludGVuZGVkIG1lZGlhLlxuICAgKi9cbiAgbWVkaWE/OiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgVXNlTWVkaWFUZXh0VHJhY2tTb3VyY2Uge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHRyYWNrIHNob3VsZCBiZSBlbmFibGVkIHVubGVzcyB0aGUgdXNlcidzIHByZWZlcmVuY2VzIGluZGljYXRlXG4gICAqIHRoYXQgYW5vdGhlciB0cmFjayBpcyBtb3JlIGFwcHJvcHJpYXRlXG4gICAqL1xuICBkZWZhdWx0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhvdyB0aGUgdGV4dCB0cmFjayBpcyBtZWFudCB0byBiZSB1c2VkLiBJZiBvbWl0dGVkIHRoZSBkZWZhdWx0IGtpbmQgaXMgc3VidGl0bGVzLlxuICAgKi9cbiAga2luZDogVGV4dFRyYWNrS2luZDtcbiAgLyoqXG4gICAqIEEgdXNlci1yZWFkYWJsZSB0aXRsZSBvZiB0aGUgdGV4dCB0cmFjayB3aGljaCBpcyB1c2VkIGJ5IHRoZSBicm93c2VyXG4gICAqIHdoZW4gbGlzdGluZyBhdmFpbGFibGUgdGV4dCB0cmFja3MuXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogQWRkcmVzcyBvZiB0aGUgdHJhY2sgKC52dHQgZmlsZSkuIE11c3QgYmUgYSB2YWxpZCBVUkwuIFRoaXMgYXR0cmlidXRlXG4gICAqIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpdHMgVVJMIHZhbHVlIG11c3QgaGF2ZSB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGRvY3VtZW50XG4gICAqL1xuICBzcmM6IHN0cmluZztcbiAgLyoqXG4gICAqIExhbmd1YWdlIG9mIHRoZSB0cmFjayB0ZXh0IGRhdGEuIEl0IG11c3QgYmUgYSB2YWxpZCBCQ1AgNDcgbGFuZ3VhZ2UgdGFnLlxuICAgKiBJZiB0aGUga2luZCBhdHRyaWJ1dGUgaXMgc2V0IHRvIHN1YnRpdGxlcywgdGhlbiBzcmNsYW5nIG11c3QgYmUgZGVmaW5lZC5cbiAgICovXG4gIHNyY0xhbmc6IHN0cmluZztcbn1cbmludGVyZmFjZSBVc2VNZWRpYUNvbnRyb2xzT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZURvY3VtZW50IHtcbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZm9yIHRoZSBtZWRpYSwgbWF5IGVpdGhlciBiZSBhIHN0cmluZywgYSBgVXNlTWVkaWFTb3VyY2VgIG9iamVjdCwgb3IgYSBsaXN0XG4gICAqIG9mIGBVc2VNZWRpYVNvdXJjZWAgb2JqZWN0cy5cbiAgICovXG4gIHNyYz86IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nIHwgVXNlTWVkaWFTb3VyY2UgfCBVc2VNZWRpYVNvdXJjZVtdPjtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB0ZXh0IHRyYWNrcyBmb3IgdGhlIG1lZGlhXG4gICAqL1xuICB0cmFja3M/OiBNYXliZVJlZk9yR2V0dGVyPFVzZU1lZGlhVGV4dFRyYWNrU291cmNlW10+O1xufVxuaW50ZXJmYWNlIFVzZU1lZGlhVGV4dFRyYWNrIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgdGV4dCB0cmFja1xuICAgKi9cbiAgaWQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHRyYWNrIGxhYmVsXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogTGFuZ3VhZ2Ugb2YgdGhlIHRyYWNrIHRleHQgZGF0YS4gSXQgbXVzdCBiZSBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAqIElmIHRoZSBraW5kIGF0dHJpYnV0ZSBpcyBzZXQgdG8gc3VidGl0bGVzLCB0aGVuIHNyY2xhbmcgbXVzdCBiZSBkZWZpbmVkLlxuICAgKi9cbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgZGlzcGxheSBtb2RlIG9mIHRoZSB0ZXh0IHRyYWNrLCBlaXRoZXIgYGRpc2FibGVkYCxcbiAgICogYGhpZGRlbmAsIG9yIGBzaG93aW5nYFxuICAgKi9cbiAgbW9kZTogVGV4dFRyYWNrTW9kZTtcbiAgLyoqXG4gICAqIEhvdyB0aGUgdGV4dCB0cmFjayBpcyBtZWFudCB0byBiZSB1c2VkLiBJZiBvbWl0dGVkIHRoZSBkZWZhdWx0IGtpbmQgaXMgc3VidGl0bGVzLlxuICAgKi9cbiAga2luZDogVGV4dFRyYWNrS2luZDtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgdHJhY2sncyBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoIHR5cGUuXG4gICAqL1xuICBpbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGV4dCB0cmFjayBjdWVzXG4gICAqL1xuICBjdWVzOiBUZXh0VHJhY2tDdWVMaXN0IHwgbnVsbDtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBhY3RpdmUgdGV4dCB0cmFjayBjdWVzXG4gICAqL1xuICBhY3RpdmVDdWVzOiBUZXh0VHJhY2tDdWVMaXN0IHwgbnVsbDtcbn1cbmludGVyZmFjZSBVc2VNZWRpYUNvbnRyb2xzUmV0dXJuIHtcbiAgY3VycmVudFRpbWU6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgZHVyYXRpb246IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgd2FpdGluZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgc2Vla2luZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgZW5kZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIHN0YWxsZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGJ1ZmZlcmVkOiBSZWY8W251bWJlciwgbnVtYmVyXVtdPjtcbiAgcGxheWluZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgcmF0ZTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICB2b2x1bWU6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgbXV0ZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIHRyYWNrczogUmVmPFVzZU1lZGlhVGV4dFRyYWNrW10+O1xuICBzZWxlY3RlZFRyYWNrOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGVuYWJsZVRyYWNrOiAodHJhY2s6IG51bWJlciB8IFVzZU1lZGlhVGV4dFRyYWNrLCBkaXNhYmxlVHJhY2tzPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgZGlzYWJsZVRyYWNrOiAodHJhY2s/OiBudW1iZXIgfCBVc2VNZWRpYVRleHRUcmFjaykgPT4gdm9pZDtcbiAgc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlOiBib29sZWFuO1xuICB0b2dnbGVQaWN0dXJlSW5QaWN0dXJlOiAoKSA9PiBQcm9taXNlPFBpY3R1cmVJblBpY3R1cmVXaW5kb3cgfCB2b2lkPjtcbiAgaXNQaWN0dXJlSW5QaWN0dXJlOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBvblNvdXJjZUVycm9yOiBFdmVudEhvb2tPbjxFdmVudD47XG4gIG9uUGxheWJhY2tFcnJvcjogRXZlbnRIb29rT248RXZlbnQ+O1xufVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VNZWRpYUNvbnRyb2xzKHRhcmdldDogTWF5YmVSZWY8SFRNTE1lZGlhRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlTWVkaWFDb250cm9sc09wdGlvbnMpOiBVc2VNZWRpYUNvbnRyb2xzUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTWVkaWFRdWVyeS9pbmRleC5kLnRzXG4vKipcbiAqIFJlYWN0aXZlIE1lZGlhIFF1ZXJ5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU1lZGlhUXVlcnlcbiAqIEBwYXJhbSBxdWVyeVxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNZWRpYVF1ZXJ5KHF1ZXJ5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cgJiB7XG4gIHNzcldpZHRoPzogbnVtYmVyO1xufSk6IHZ1ZTAuQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNZW1vaXplL2luZGV4LmQudHNcbnR5cGUgQ2FjaGVLZXkgPSBhbnk7XG4vKipcbiAqIEN1c3RvbSBtZW1vaXplIGNhY2hlIGhhbmRsZXJcbiAqL1xuaW50ZXJmYWNlIFVzZU1lbW9pemVDYWNoZTxLZXksIFZhbHVlPiB7XG4gIC8qKlxuICAgKiBHZXQgdmFsdWUgZm9yIGtleVxuICAgKi9cbiAgZ2V0OiAoa2V5OiBLZXkpID0+IFZhbHVlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogU2V0IHZhbHVlIGZvciBrZXlcbiAgICovXG4gIHNldDogKGtleTogS2V5LCB2YWx1ZTogVmFsdWUpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm4gZmxhZyBpZiBrZXkgZXhpc3RzXG4gICAqL1xuICBoYXM6IChrZXk6IEtleSkgPT4gYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlbGV0ZSB2YWx1ZSBmb3Iga2V5XG4gICAqL1xuICBkZWxldGU6IChrZXk6IEtleSkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENsZWFyIGNhY2hlXG4gICAqL1xuICBjbGVhcjogKCkgPT4gdm9pZDtcbn1cbi8qKlxuICogTWVtb2l6ZWQgZnVuY3Rpb25cbiAqL1xuaW50ZXJmYWNlIFVzZU1lbW9pemVSZXR1cm48UmVzdWx0LCBBcmdzIGV4dGVuZHMgdW5rbm93bltdPiB7XG4gIC8qKlxuICAgKiBHZXQgcmVzdWx0IGZyb20gY2FjaGUgb3IgY2FsbCBtZW1vaXplZCBmdW5jdGlvblxuICAgKi9cbiAgKC4uLmFyZ3M6IEFyZ3MpOiBSZXN1bHQ7XG4gIC8qKlxuICAgKiBDYWxsIG1lbW9pemVkIGZ1bmN0aW9uIGFuZCB1cGRhdGUgY2FjaGVcbiAgICovXG4gIGxvYWQ6ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQ7XG4gIC8qKlxuICAgKiBEZWxldGUgY2FjaGUgb2YgZ2l2ZW4gYXJndW1lbnRzXG4gICAqL1xuICBkZWxldGU6ICguLi5hcmdzOiBBcmdzKSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2xlYXIgY2FjaGVcbiAgICovXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xuICAvKipcbiAgICogR2VuZXJhdGUgY2FjaGUga2V5IGZvciBnaXZlbiBhcmd1bWVudHNcbiAgICovXG4gIGdlbmVyYXRlS2V5OiAoLi4uYXJnczogQXJncykgPT4gQ2FjaGVLZXk7XG4gIC8qKlxuICAgKiBDYWNoZSBjb250YWluZXJcbiAgICovXG4gIGNhY2hlOiBVc2VNZW1vaXplQ2FjaGU8Q2FjaGVLZXksIFJlc3VsdD47XG59XG5pbnRlcmZhY2UgVXNlTWVtb2l6ZU9wdGlvbnM8UmVzdWx0LCBBcmdzIGV4dGVuZHMgdW5rbm93bltdPiB7XG4gIGdldEtleT86ICguLi5hcmdzOiBBcmdzKSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gIGNhY2hlPzogVXNlTWVtb2l6ZUNhY2hlPENhY2hlS2V5LCBSZXN1bHQ+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBmdW5jdGlvbiByZXN1bHQgY2FjaGUgYmFzZWQgb24gYXJndW1lbnRzXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNZW1vaXplPFJlc3VsdCwgQXJncyBleHRlbmRzIHVua25vd25bXT4ocmVzb2x2ZXI6ICguLi5hcmdzOiBBcmdzKSA9PiBSZXN1bHQsIG9wdGlvbnM/OiBVc2VNZW1vaXplT3B0aW9uczxSZXN1bHQsIEFyZ3M+KTogVXNlTWVtb2l6ZVJldHVybjxSZXN1bHQsIEFyZ3M+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlTWVtb3J5L2luZGV4LmQudHNcbi8qKlxuICogUGVyZm9ybWFuY2UubWVtb3J5XG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2UvbWVtb3J5XG4gKi9cbmludGVyZmFjZSBNZW1vcnlJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGhlYXAsIGluIGJ5dGVzLCB0aGF0IGlzIGF2YWlsYWJsZSB0byB0aGUgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGpzSGVhcFNpemVMaW1pdDogbnVtYmVyO1xuICAvKipcbiAgICogIFRoZSB0b3RhbCBhbGxvY2F0ZWQgaGVhcCBzaXplLCBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHRvdGFsSlNIZWFwU2l6ZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudCBvZiBKUyBoZWFwLCBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHVzZWRKU0hlYXBTaXplOiBudW1iZXI7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnTWVtb3J5SW5mbyc7XG59XG5pbnRlcmZhY2UgVXNlTWVtb3J5T3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgdGltZXIgaW1tZWRpYXRlbHlcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyBgcmVzdW1lYFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbW1lZGlhdGVDYWxsYmFjaz86IGJvb2xlYW47XG4gIC8qKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkICovXG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZU1lbW9yeVJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgbWVtb3J5OiBSZWY8TWVtb3J5SW5mbyB8IHVuZGVmaW5lZD47XG59XG4vKipcbiAqIFJlYWN0aXZlIE1lbW9yeSBJbmZvLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU1lbW9yeVxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1lbW9yeShvcHRpb25zPzogVXNlTWVtb3J5T3B0aW9ucyk6IFVzZU1lbW9yeVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1vdW50ZWQvaW5kZXguZC50c1xuLyoqXG4gKiBNb3VudGVkIHN0YXRlIGluIHJlZi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VNb3VudGVkXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNb3VudGVkKCk6IHZ1ZTAuU2hhbGxvd1JlZjxib29sZWFuLCBib29sZWFuPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1vdXNlL2luZGV4LmQudHNcbnR5cGUgVXNlTW91c2VDb29yZFR5cGUgPSAncGFnZScgfCAnY2xpZW50JyB8ICdzY3JlZW4nIHwgJ21vdmVtZW50JztcbnR5cGUgVXNlTW91c2VTb3VyY2VUeXBlID0gJ21vdXNlJyB8ICd0b3VjaCcgfCBudWxsO1xudHlwZSBVc2VNb3VzZUV2ZW50RXh0cmFjdG9yID0gKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2gpID0+IFt4OiBudW1iZXIsIHk6IG51bWJlcl0gfCBudWxsIHwgdW5kZWZpbmVkO1xuaW50ZXJmYWNlIFVzZU1vdXNlT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdywgQ29uZmlndXJhYmxlRXZlbnRGaWx0ZXIge1xuICAvKipcbiAgICogTW91c2UgcG9zaXRpb24gYmFzZWQgYnkgcGFnZSwgY2xpZW50LCBzY3JlZW4sIG9yIHJlbGF0aXZlIHRvIHByZXZpb3VzIHBvc2l0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0ICdwYWdlJ1xuICAgKi9cbiAgdHlwZT86IFVzZU1vdXNlQ29vcmRUeXBlIHwgVXNlTW91c2VFdmVudEV4dHJhY3RvcjtcbiAgLyoqXG4gICAqIExpc3RlbiBldmVudHMgb24gYHRhcmdldGAgZWxlbWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAnV2luZG93J1xuICAgKi9cbiAgdGFyZ2V0PzogTWF5YmVSZWZPckdldHRlcjxXaW5kb3cgfCBFdmVudFRhcmdldCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogTGlzdGVuIHRvIGB0b3VjaG1vdmVgIGV2ZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB0b3VjaD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gYHNjcm9sbGAgZXZlbnRzIG9uIHdpbmRvdywgb25seSBlZmZlY3RpdmUgb24gdHlwZSBgcGFnZWBcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgc2Nyb2xsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJlc2V0IHRvIGluaXRpYWwgdmFsdWUgd2hlbiBgdG91Y2hlbmRgIGV2ZW50IGZpcmVkXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZXNldE9uVG91Y2hFbmRzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWVzXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBQb3NpdGlvbjtcbn1cbmludGVyZmFjZSBVc2VNb3VzZVJldHVybiB7XG4gIHg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgeTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBzb3VyY2VUeXBlOiBTaGFsbG93UmVmPFVzZU1vdXNlU291cmNlVHlwZT47XG59XG4vKipcbiAqIFJlYWN0aXZlIG1vdXNlIHBvc2l0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU1vdXNlXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU1vdXNlKG9wdGlvbnM/OiBVc2VNb3VzZU9wdGlvbnMpOiBVc2VNb3VzZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1vdXNlSW5FbGVtZW50L2luZGV4LmQudHNcbmludGVyZmFjZSBNb3VzZUluRWxlbWVudE9wdGlvbnMgZXh0ZW5kcyBVc2VNb3VzZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBoYW5kbGUgbW91c2UgZXZlbnRzIHdoZW4gdGhlIGN1cnNvciBpcyBvdXRzaWRlIHRoZSB0YXJnZXQgZWxlbWVudC5cbiAgICogV2hlbiBlbmFibGVkLCBtb3VzZSBwb3NpdGlvbiB3aWxsIGNvbnRpbnVlIHRvIGJlIHRyYWNrZWQgZXZlbiB3aGVuIG91dHNpZGUgdGhlIGVsZW1lbnQgYm91bmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBoYW5kbGVPdXRzaWRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpc3RlbiB0byB3aW5kb3cgcmVzaXplIGV2ZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHdpbmRvd1Njcm9sbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gd2luZG93IHNjcm9sbCBldmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB3aW5kb3dSZXNpemU/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZU1vdXNlSW5FbGVtZW50UmV0dXJuIGV4dGVuZHMgVXNlTW91c2VSZXR1cm4ge1xuICBlbGVtZW50WDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBlbGVtZW50WTogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBlbGVtZW50UG9zaXRpb25YOiBTaGFsbG93UmVmPG51bWJlcj47XG4gIGVsZW1lbnRQb3NpdGlvblk6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgZWxlbWVudEhlaWdodDogU2hhbGxvd1JlZjxudW1iZXI+O1xuICBlbGVtZW50V2lkdGg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgaXNPdXRzaWRlOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBtb3VzZSBwb3NpdGlvbiByZWxhdGVkIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTW91c2VJbkVsZW1lbnRcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTW91c2VJbkVsZW1lbnQodGFyZ2V0PzogTWF5YmVFbGVtZW50UmVmLCBvcHRpb25zPzogTW91c2VJbkVsZW1lbnRPcHRpb25zKToge1xuICB4OiBTaGFsbG93UmVmPG51bWJlcj47XG4gIHk6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgc291cmNlVHlwZTogU2hhbGxvd1JlZjxVc2VNb3VzZVNvdXJjZVR5cGU+O1xuICBlbGVtZW50WDogU2hhbGxvd1JlZjxudW1iZXIsIG51bWJlcj47XG4gIGVsZW1lbnRZOiBTaGFsbG93UmVmPG51bWJlciwgbnVtYmVyPjtcbiAgZWxlbWVudFBvc2l0aW9uWDogU2hhbGxvd1JlZjxudW1iZXIsIG51bWJlcj47XG4gIGVsZW1lbnRQb3NpdGlvblk6IFNoYWxsb3dSZWY8bnVtYmVyLCBudW1iZXI+O1xuICBlbGVtZW50SGVpZ2h0OiBTaGFsbG93UmVmPG51bWJlciwgbnVtYmVyPjtcbiAgZWxlbWVudFdpZHRoOiBTaGFsbG93UmVmPG51bWJlciwgbnVtYmVyPjtcbiAgaXNPdXRzaWRlOiBTaGFsbG93UmVmPGJvb2xlYW4sIGJvb2xlYW4+O1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufTtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU1vdXNlUHJlc3NlZC9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlTW91c2VQcmVzc2VkT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gYHRvdWNoc3RhcnRgIGB0b3VjaGVuZGAgZXZlbnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHRvdWNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpc3RlbiB0byBgZHJhZ3N0YXJ0YCBgZHJvcGAgYW5kIGBkcmFnZW5kYCBldmVudHNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZHJhZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBZGQgZXZlbnQgbGlzdGVuZXJzIHdpdGggdGhlIGBjYXB0dXJlYCBvcHRpb24gc2V0IHRvIGB0cnVlYFxuICAgKiAoc2VlIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI2NhcHR1cmUpKVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY2FwdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5pdGlhbFZhbHVlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVsZW1lbnQgdGFyZ2V0IHRvIGJlIGNhcHR1cmUgdGhlIGNsaWNrXG4gICAqL1xuICB0YXJnZXQ/OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyBwcmVzc2VkXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgb25QcmVzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCB8IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtb3VzZSBpcyByZWxlYXNlZFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIG9uUmVsZWFzZWQ/OiAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgRHJhZ0V2ZW50KSA9PiB2b2lkO1xufVxuLyoqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgVXNlTW91c2VQcmVzc2VkT3B0aW9uc30gaW5zdGVhZCAqL1xudHlwZSBNb3VzZVByZXNzZWRPcHRpb25zID0gVXNlTW91c2VQcmVzc2VkT3B0aW9ucztcbmludGVyZmFjZSBVc2VNb3VzZVByZXNzZWRSZXR1cm4ge1xuICBwcmVzc2VkOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBzb3VyY2VUeXBlOiBTaGFsbG93UmVmPFVzZU1vdXNlU291cmNlVHlwZT47XG59XG4vKipcbiAqIFJlYWN0aXZlIG1vdXNlIHByZXNzaW5nIHN0YXRlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU1vdXNlUHJlc3NlZFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VNb3VzZVByZXNzZWQob3B0aW9ucz86IFVzZU1vdXNlUHJlc3NlZE9wdGlvbnMpOiBVc2VNb3VzZVByZXNzZWRSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VNdXRhdGlvbk9ic2VydmVyL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyBleHRlbmRzIE11dGF0aW9uT2JzZXJ2ZXJJbml0LCBDb25maWd1cmFibGVXaW5kb3cge31cbmludGVyZmFjZSBVc2VNdXRhdGlvbk9ic2VydmVyUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzdG9wOiAoKSA9PiB2b2lkO1xuICB0YWtlUmVjb3JkczogKCkgPT4gTXV0YXRpb25SZWNvcmRbXSB8IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogV2F0Y2ggZm9yIGNoYW5nZXMgYmVpbmcgbWFkZSB0byB0aGUgRE9NIHRyZWUuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTXV0YXRpb25PYnNlcnZlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTXV0YXRpb25PYnNlcnZlciBNdXRhdGlvbk9ic2VydmVyIE1ETlxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIGNhbGxiYWNrXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIodGFyZ2V0OiBNYXliZUNvbXB1dGVkRWxlbWVudFJlZiB8IE1heWJlQ29tcHV0ZWRFbGVtZW50UmVmW10gfCBNYXliZVJlZk9yR2V0dGVyPE1heWJlRWxlbWVudFtdPiwgY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2ssIG9wdGlvbnM/OiBVc2VNdXRhdGlvbk9ic2VydmVyT3B0aW9ucyk6IFVzZU11dGF0aW9uT2JzZXJ2ZXJSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VOYXZpZ2F0b3JMYW5ndWFnZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgTmF2aWdhdG9yTGFuZ3VhZ2VTdGF0ZSBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgLyoqXG4gICAqXG4gICAqIElTTyA2MzktMSBzdGFuZGFyZCBMYW5ndWFnZSBDb2RlXG4gICAqXG4gICAqIEBpbmZvIFRoZSBkZXRlY3RlZCB1c2VyIGFnZW50IGxhbmd1YWdlIHByZWZlcmVuY2UgYXMgYSBsYW5ndWFnZSB0YWdcbiAgICogKHdoaWNoIGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBhIFwibG9jYWxlIGlkZW50aWZpZXJcIikuXG4gICAqIFRoaXMgY29uc2lzdHMgb2YgYSAyLTMgbGV0dGVyIGJhc2UgbGFuZ3VhZ2UgdGFnIHRoYXQgaW5kaWNhdGVzIGFcbiAgICogbGFuZ3VhZ2UsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzIHNlcGFyYXRlZCBieVxuICAgKiAnLScuIFRoZSBtb3N0IGNvbW1vbiBleHRyYSBpbmZvcm1hdGlvbiBpcyB0aGUgY291bnRyeSBvciByZWdpb25cbiAgICogdmFyaWFudCAobGlrZSAnZW4tVVMnIG9yICdmci1DQScpLlxuICAgKlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3Lmlzby5vcmcvaXNvLTYzOS1sYW5ndWFnZS1jb2Rlcy5odG1sXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvcGhwL2NvZGVfbGlzdC5waHBcbiAgICpcbiAgICovXG4gIGxhbmd1YWdlOiBTaGFsbG93UmVmPHN0cmluZyB8IHVuZGVmaW5lZD47XG59XG5pbnRlcmZhY2UgVXNlTmF2aWdhdG9yTGFuZ3VhZ2VPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG50eXBlIFVzZU5hdmlnYXRvckxhbmd1YWdlUmV0dXJuID0gUmVhZG9ubHk8TmF2aWdhdG9yTGFuZ3VhZ2VTdGF0ZT47XG4vKipcbiAqXG4gKiBSZWFjdGl2ZSB1c2VOYXZpZ2F0b3JMYW5ndWFnZVxuICpcbiAqIERldGVjdHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB1c2VyIGxhbmd1YWdlIGFuZCByZXR1cm5zIGEgcmVhY3RpdmUgbGFuZ3VhZ2VcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU5hdmlnYXRvckxhbmd1YWdlXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VOYXZpZ2F0b3JMYW5ndWFnZShvcHRpb25zPzogVXNlTmF2aWdhdG9yTGFuZ3VhZ2VPcHRpb25zKTogVXNlTmF2aWdhdG9yTGFuZ3VhZ2VSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VOZXR3b3JrL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VOZXR3b3JrT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxudHlwZSBOZXR3b3JrVHlwZSA9ICdibHVldG9vdGgnIHwgJ2NlbGx1bGFyJyB8ICdldGhlcm5ldCcgfCAnbm9uZScgfCAnd2lmaScgfCAnd2ltYXgnIHwgJ290aGVyJyB8ICd1bmtub3duJztcbnR5cGUgTmV0d29ya0VmZmVjdGl2ZVR5cGUgPSAnc2xvdy0yZycgfCAnMmcnIHwgJzNnJyB8ICc0ZycgfCB1bmRlZmluZWQ7XG5pbnRlcmZhY2UgTmV0d29ya1N0YXRlIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICAvKipcbiAgICogSWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IGNvbm5lY3RlZC5cbiAgICovXG4gIGlzT25saW5lOiBSZWFkb25seTxTaGFsbG93UmVmPGJvb2xlYW4+PjtcbiAgLyoqXG4gICAqIFRoZSB0aW1lIHNpbmNlIHRoZSB1c2VyIHdhcyBsYXN0IGNvbm5lY3RlZC5cbiAgICovXG4gIG9mZmxpbmVBdDogUmVhZG9ubHk8U2hhbGxvd1JlZjxudW1iZXIgfCB1bmRlZmluZWQ+PjtcbiAgLyoqXG4gICAqIEF0IHRoaXMgdGltZSwgaWYgdGhlIHVzZXIgaXMgb2ZmbGluZSBhbmQgcmVjb25uZWN0c1xuICAgKi9cbiAgb25saW5lQXQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPj47XG4gIC8qKlxuICAgKiBUaGUgZG93bmxvYWQgc3BlZWQgaW4gTWJwcy5cbiAgICovXG4gIGRvd25saW5rOiBSZWFkb25seTxTaGFsbG93UmVmPG51bWJlciB8IHVuZGVmaW5lZD4+O1xuICAvKipcbiAgICogVGhlIG1heCByZWFjaGFibGUgZG93bmxvYWQgc3BlZWQgaW4gTWJwcy5cbiAgICovXG4gIGRvd25saW5rTWF4OiBSZWFkb25seTxTaGFsbG93UmVmPG51bWJlciB8IHVuZGVmaW5lZD4+O1xuICAvKipcbiAgICogVGhlIGRldGVjdGVkIGVmZmVjdGl2ZSBzcGVlZCB0eXBlLlxuICAgKi9cbiAgZWZmZWN0aXZlVHlwZTogUmVhZG9ubHk8U2hhbGxvd1JlZjxOZXR3b3JrRWZmZWN0aXZlVHlwZSB8IHVuZGVmaW5lZD4+O1xuICAvKipcbiAgICogVGhlIGVzdGltYXRlZCBlZmZlY3RpdmUgcm91bmQtdHJpcCB0aW1lIG9mIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqL1xuICBydHQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPj47XG4gIC8qKlxuICAgKiBJZiB0aGUgdXNlciBhY3RpdmF0ZWQgZGF0YSBzYXZlciBtb2RlLlxuICAgKi9cbiAgc2F2ZURhdGE6IFJlYWRvbmx5PFNoYWxsb3dSZWY8Ym9vbGVhbiB8IHVuZGVmaW5lZD4+O1xuICAvKipcbiAgICogVGhlIGRldGVjdGVkIGNvbm5lY3Rpb24vbmV0d29yayB0eXBlLlxuICAgKi9cbiAgdHlwZTogUmVhZG9ubHk8U2hhbGxvd1JlZjxOZXR3b3JrVHlwZT4+O1xufVxudHlwZSBVc2VOZXR3b3JrUmV0dXJuID0gUmVhZG9ubHk8TmV0d29ya1N0YXRlPjtcbi8qKlxuICogUmVhY3RpdmUgTmV0d29yayBzdGF0dXMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTmV0d29ya1xuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU5ldHdvcmsob3B0aW9ucz86IFVzZU5ldHdvcmtPcHRpb25zKTogVXNlTmV0d29ya1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZU5vdy9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlTm93T3B0aW9uczxDb250cm9scyBleHRlbmRzIGJvb2xlYW4+IGV4dGVuZHMgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqIEV4cG9zZSBtb3JlIGNvbnRyb2xzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250cm9scz86IENvbnRyb2xzO1xuICAvKipcbiAgICogU3RhcnQgdGhlIGNsb2NrIGltbWVkaWF0ZWx5XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVwZGF0ZSBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMsIG9yIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICovXG4gIGludGVydmFsPzogJ3JlcXVlc3RBbmltYXRpb25GcmFtZScgfCBudW1iZXI7XG59XG50eXBlIFVzZU5vd1JldHVybjxDb250cm9scyBleHRlbmRzIGJvb2xlYW4+ID0gQ29udHJvbHMgZXh0ZW5kcyB0cnVlID8gKHtcbiAgbm93OiBSZWY8RGF0ZT47XG59ICYgUGF1c2FibGUpIDogUmVmPERhdGU+O1xuLyoqXG4gKiBSZWFjdGl2ZSBjdXJyZW50IERhdGUgaW5zdGFuY2UuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlTm93XG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlTm93KG9wdGlvbnM/OiBVc2VOb3dPcHRpb25zPGZhbHNlPik6IFJlZjxEYXRlPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlTm93KG9wdGlvbnM6IFVzZU5vd09wdGlvbnM8dHJ1ZT4pOiB7XG4gIG5vdzogUmVmPERhdGU+O1xufSAmIFBhdXNhYmxlO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlT2JqZWN0VXJsL2luZGV4LmQudHNcbi8qKlxuICogUmVhY3RpdmUgVVJMIHJlcHJlc2VudGluZyBhbiBvYmplY3QuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlT2JqZWN0VXJsXG4gKiBAcGFyYW0gb2JqZWN0XG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlT2JqZWN0VXJsKG9iamVjdDogTWF5YmVSZWZPckdldHRlcjxCbG9iIHwgTWVkaWFTb3VyY2UgfCBudWxsIHwgdW5kZWZpbmVkPik6IFJlYWRvbmx5PHZ1ZTAuUmVmPHN0cmluZyB8IHVuZGVmaW5lZCwgc3RyaW5nIHwgdW5kZWZpbmVkPj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VPZmZzZXRQYWdpbmF0aW9uL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VPZmZzZXRQYWdpbmF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUb3RhbCBudW1iZXIgb2YgaXRlbXMuXG4gICAqL1xuICB0b3RhbD86IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaXRlbXMgdG8gZGlzcGxheSBwZXIgcGFnZS5cbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHBhZ2VTaXplPzogTWF5YmVSZWZPckdldHRlcjxudW1iZXI+O1xuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcGFnZSBudW1iZXIuXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHBhZ2U/OiBNYXliZVJlZjxudW1iZXI+O1xuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiB0aGUgYHBhZ2VgIGNoYW5nZS5cbiAgICovXG4gIG9uUGFnZUNoYW5nZT86IChyZXR1cm5WYWx1ZTogVW53cmFwTmVzdGVkUmVmczxVc2VPZmZzZXRQYWdpbmF0aW9uUmV0dXJuPikgPT4gdW5rbm93bjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gdGhlIGBwYWdlU2l6ZWAgY2hhbmdlLlxuICAgKi9cbiAgb25QYWdlU2l6ZUNoYW5nZT86IChyZXR1cm5WYWx1ZTogVW53cmFwTmVzdGVkUmVmczxVc2VPZmZzZXRQYWdpbmF0aW9uUmV0dXJuPikgPT4gdW5rbm93bjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHdoZW4gdGhlIGBwYWdlQ291bnRgIGNoYW5nZS5cbiAgICovXG4gIG9uUGFnZUNvdW50Q2hhbmdlPzogKHJldHVyblZhbHVlOiBVbndyYXBOZXN0ZWRSZWZzPFVzZU9mZnNldFBhZ2luYXRpb25SZXR1cm4+KSA9PiB1bmtub3duO1xufVxuaW50ZXJmYWNlIFVzZU9mZnNldFBhZ2luYXRpb25SZXR1cm4ge1xuICBjdXJyZW50UGFnZTogUmVmPG51bWJlcj47XG4gIGN1cnJlbnRQYWdlU2l6ZTogUmVmPG51bWJlcj47XG4gIHBhZ2VDb3VudDogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgaXNGaXJzdFBhZ2U6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICBpc0xhc3RQYWdlOiBDb21wdXRlZFJlZjxib29sZWFuPjtcbiAgcHJldjogKCkgPT4gdm9pZDtcbiAgbmV4dDogKCkgPT4gdm9pZDtcbn1cbnR5cGUgVXNlT2Zmc2V0UGFnaW5hdGlvbkluZmluaXR5UGFnZVJldHVybiA9IE9taXQ8VXNlT2Zmc2V0UGFnaW5hdGlvblJldHVybiwgJ2lzTGFzdFBhZ2UnPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlT2Zmc2V0UGFnaW5hdGlvbihvcHRpb25zOiBPbWl0PFVzZU9mZnNldFBhZ2luYXRpb25PcHRpb25zLCAndG90YWwnPik6IFVzZU9mZnNldFBhZ2luYXRpb25JbmZpbml0eVBhZ2VSZXR1cm47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU9mZnNldFBhZ2luYXRpb24ob3B0aW9uczogVXNlT2Zmc2V0UGFnaW5hdGlvbk9wdGlvbnMpOiBVc2VPZmZzZXRQYWdpbmF0aW9uUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlT25saW5lL2luZGV4LmQudHNcbi8qKlxuICogUmVhY3RpdmUgb25saW5lIHN0YXRlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZU9ubGluZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZU9ubGluZShvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogUmVhZG9ubHk8dnVlMC5TaGFsbG93UmVmPGJvb2xlYW4+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVBhZ2VMZWF2ZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlUGFnZUxlYXZlT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7fVxudHlwZSBVc2VQYWdlTGVhdmVSZXR1cm4gPSBTaGFsbG93UmVmPGJvb2xlYW4+O1xuLyoqXG4gKiBSZWFjdGl2ZSBzdGF0ZSB0byBzaG93IHdoZXRoZXIgbW91c2UgbGVhdmVzIHRoZSBwYWdlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVBhZ2VMZWF2ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBhZ2VMZWF2ZShvcHRpb25zPzogVXNlUGFnZUxlYXZlT3B0aW9ucyk6IFVzZVBhZ2VMZWF2ZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVBhcmFsbGF4L2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VQYXJhbGxheE9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICBkZXZpY2VPcmllbnRhdGlvblRpbHRBZGp1c3Q/OiAoaTogbnVtYmVyKSA9PiBudW1iZXI7XG4gIGRldmljZU9yaWVudGF0aW9uUm9sbEFkanVzdD86IChpOiBudW1iZXIpID0+IG51bWJlcjtcbiAgbW91c2VUaWx0QWRqdXN0PzogKGk6IG51bWJlcikgPT4gbnVtYmVyO1xuICBtb3VzZVJvbGxBZGp1c3Q/OiAoaTogbnVtYmVyKSA9PiBudW1iZXI7XG59XG5pbnRlcmZhY2UgVXNlUGFyYWxsYXhSZXR1cm4ge1xuICAvKipcbiAgICogUm9sbCB2YWx1ZS4gU2NhbGVkIHRvIGAtMC41IH4gMC41YFxuICAgKi9cbiAgcm9sbDogQ29tcHV0ZWRSZWY8bnVtYmVyPjtcbiAgLyoqXG4gICAqIFRpbHQgdmFsdWUuIFNjYWxlZCB0byBgLTAuNSB+IDAuNWBcbiAgICovXG4gIHRpbHQ6IENvbXB1dGVkUmVmPG51bWJlcj47XG4gIC8qKlxuICAgKiBTZW5zb3Igc291cmNlLCBjYW4gYmUgYG1vdXNlYCBvciBgZGV2aWNlT3JpZW50YXRpb25gXG4gICAqL1xuICBzb3VyY2U6IENvbXB1dGVkUmVmPCdkZXZpY2VPcmllbnRhdGlvbicgfCAnbW91c2UnPjtcbn1cbi8qKlxuICogQ3JlYXRlIHBhcmFsbGF4IGVmZmVjdCBlYXNpbHkuIEl0IHVzZXMgYHVzZURldmljZU9yaWVudGF0aW9uYCBhbmQgZmFsbGJhY2sgdG8gYHVzZU1vdXNlYFxuICogaWYgb3JpZW50YXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBhcmFsbGF4KHRhcmdldDogTWF5YmVFbGVtZW50UmVmLCBvcHRpb25zPzogVXNlUGFyYWxsYXhPcHRpb25zKTogVXNlUGFyYWxsYXhSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQYXJlbnRFbGVtZW50L2luZGV4LmQudHNcbmRlY2xhcmUgZnVuY3Rpb24gdXNlUGFyZW50RWxlbWVudChlbGVtZW50PzogTWF5YmVSZWZPckdldHRlcjxIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPik6IFJlYWRvbmx5PFNoYWxsb3dSZWY8SFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZD4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUGVyZm9ybWFuY2VPYnNlcnZlci9pbmRleC5kLnRzXG50eXBlIFVzZVBlcmZvcm1hbmNlT2JzZXJ2ZXJPcHRpb25zID0gUGVyZm9ybWFuY2VPYnNlcnZlckluaXQgJiBDb25maWd1cmFibGVXaW5kb3cgJiB7XG4gIC8qKlxuICAgKiBTdGFydCB0aGUgb2JzZXJ2ZXIgaW1tZWRpYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbW1lZGlhdGU/OiBib29sZWFuO1xufTtcbi8qKlxuICogT2JzZXJ2ZSBwZXJmb3JtYW5jZSBtZXRyaWNzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVBlcmZvcm1hbmNlT2JzZXJ2ZXJcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUGVyZm9ybWFuY2VPYnNlcnZlcihvcHRpb25zOiBVc2VQZXJmb3JtYW5jZU9ic2VydmVyT3B0aW9ucywgY2FsbGJhY2s6IFBlcmZvcm1hbmNlT2JzZXJ2ZXJDYWxsYmFjayk6IHtcbiAgaXNTdXBwb3J0ZWQ6IFVzZVN1cHBvcnRlZFJldHVybjtcbiAgc3RhcnQ6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUGVybWlzc2lvbi9pbmRleC5kLnRzXG50eXBlIERlc2NyaXB0b3JOYW1lUG9seWZpbGwgPSAnYWNjZWxlcm9tZXRlcicgfCAnYWNjZXNzaWJpbGl0eS1ldmVudHMnIHwgJ2FtYmllbnQtbGlnaHQtc2Vuc29yJyB8ICdiYWNrZ3JvdW5kLXN5bmMnIHwgJ2NhbWVyYScgfCAnY2xpcGJvYXJkLXJlYWQnIHwgJ2NsaXBib2FyZC13cml0ZScgfCAnZ3lyb3Njb3BlJyB8ICdtYWduZXRvbWV0ZXInIHwgJ21pY3JvcGhvbmUnIHwgJ25vdGlmaWNhdGlvbnMnIHwgJ3BheW1lbnQtaGFuZGxlcicgfCAncGVyc2lzdGVudC1zdG9yYWdlJyB8ICdwdXNoJyB8ICdzcGVha2VyJyB8ICdsb2NhbC1mb250cyc7XG50eXBlIEdlbmVyYWxQZXJtaXNzaW9uRGVzY3JpcHRvciA9IFBlcm1pc3Npb25EZXNjcmlwdG9yIHwge1xuICBuYW1lOiBEZXNjcmlwdG9yTmFtZVBvbHlmaWxsO1xufTtcbmludGVyZmFjZSBVc2VQZXJtaXNzaW9uT3B0aW9uczxDb250cm9scyBleHRlbmRzIGJvb2xlYW4+IGV4dGVuZHMgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgLyoqXG4gICAqIEV4cG9zZSBtb3JlIGNvbnRyb2xzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBjb250cm9scz86IENvbnRyb2xzO1xufVxudHlwZSBVc2VQZXJtaXNzaW9uUmV0dXJuID0gUmVhZG9ubHk8U2hhbGxvd1JlZjxQZXJtaXNzaW9uU3RhdGUgfCB1bmRlZmluZWQ+PjtcbmludGVyZmFjZSBVc2VQZXJtaXNzaW9uUmV0dXJuV2l0aENvbnRyb2xzIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzdGF0ZTogVXNlUGVybWlzc2lvblJldHVybjtcbiAgcXVlcnk6ICgpID0+IFByb21pc2U8UGVybWlzc2lvblN0YXR1cyB8IHVuZGVmaW5lZD47XG59XG4vKipcbiAqIFJlYWN0aXZlIFBlcm1pc3Npb25zIEFQSS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQZXJtaXNzaW9uXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQZXJtaXNzaW9uKHBlcm1pc3Npb25EZXNjOiBHZW5lcmFsUGVybWlzc2lvbkRlc2NyaXB0b3IgfCBHZW5lcmFsUGVybWlzc2lvbkRlc2NyaXB0b3JbJ25hbWUnXSwgb3B0aW9ucz86IFVzZVBlcm1pc3Npb25PcHRpb25zPGZhbHNlPik6IFVzZVBlcm1pc3Npb25SZXR1cm47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBlcm1pc3Npb24ocGVybWlzc2lvbkRlc2M6IEdlbmVyYWxQZXJtaXNzaW9uRGVzY3JpcHRvciB8IEdlbmVyYWxQZXJtaXNzaW9uRGVzY3JpcHRvclsnbmFtZSddLCBvcHRpb25zOiBVc2VQZXJtaXNzaW9uT3B0aW9uczx0cnVlPik6IFVzZVBlcm1pc3Npb25SZXR1cm5XaXRoQ29udHJvbHM7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQb2ludGVyL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VQb2ludGVyU3RhdGUgZXh0ZW5kcyBQb3NpdGlvbiB7XG4gIHByZXNzdXJlOiBudW1iZXI7XG4gIHBvaW50ZXJJZDogbnVtYmVyO1xuICB0aWx0WDogbnVtYmVyO1xuICB0aWx0WTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgdHdpc3Q6IG51bWJlcjtcbiAgcG9pbnRlclR5cGU6IFBvaW50ZXJUeXBlIHwgbnVsbDtcbn1cbmludGVyZmFjZSBVc2VQb2ludGVyT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBQb2ludGVyIHR5cGVzIHRoYXQgbGlzdGVuIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ21vdXNlJywgJ3RvdWNoJywgJ3BlbiddXG4gICAqL1xuICBwb2ludGVyVHlwZXM/OiBQb2ludGVyVHlwZVtdO1xuICAvKipcbiAgICogSW5pdGlhbCB2YWx1ZXNcbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IE1heWJlUmVmPFBhcnRpYWw8VXNlUG9pbnRlclN0YXRlPj47XG4gIC8qKlxuICAgKiBAZGVmYXVsdCB3aW5kb3dcbiAgICovXG4gIHRhcmdldD86IE1heWJlUmVmPEV2ZW50VGFyZ2V0IHwgbnVsbCB8IHVuZGVmaW5lZD4gfCBEb2N1bWVudCB8IFdpbmRvdztcbn1cbmludGVyZmFjZSBVc2VQb2ludGVyUmV0dXJuIHtcbiAgcHJlc3N1cmU6IFJlZjxudW1iZXI+O1xuICBwb2ludGVySWQ6IFJlZjxudW1iZXI+O1xuICB0aWx0WDogUmVmPG51bWJlcj47XG4gIHRpbHRZOiBSZWY8bnVtYmVyPjtcbiAgd2lkdGg6IFJlZjxudW1iZXI+O1xuICBoZWlnaHQ6IFJlZjxudW1iZXI+O1xuICB0d2lzdDogUmVmPG51bWJlcj47XG4gIHBvaW50ZXJUeXBlOiBSZWY8UG9pbnRlclR5cGUgfCBudWxsPjtcbiAgeDogUmVmPG51bWJlcj47XG4gIHk6IFJlZjxudW1iZXI+O1xuICBpc0luc2lkZTogU2hhbGxvd1JlZjxib29sZWFuPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgcG9pbnRlciBzdGF0ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQb2ludGVyXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBvaW50ZXIob3B0aW9ucz86IFVzZVBvaW50ZXJPcHRpb25zKTogVXNlUG9pbnRlclJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVBvaW50ZXJMb2NrL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VQb2ludGVyTG9ja09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7fVxuaW50ZXJmYWNlIFVzZVBvaW50ZXJMb2NrUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBlbGVtZW50OiBTaGFsbG93UmVmPE1heWJlRWxlbWVudD47XG4gIHRyaWdnZXJFbGVtZW50OiBTaGFsbG93UmVmPE1heWJlRWxlbWVudD47XG4gIGxvY2s6IChlOiBNYXliZUVsZW1lbnRSZWYgfCBFdmVudCkgPT4gUHJvbWlzZTxNYXliZUVsZW1lbnQ+O1xuICB1bmxvY2s6ICgpID0+IFByb21pc2U8Ym9vbGVhbj47XG59XG4vKipcbiAqIFJlYWN0aXZlIHBvaW50ZXIgbG9jay5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQb2ludGVyTG9ja1xuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVBvaW50ZXJMb2NrKHRhcmdldD86IE1heWJlRWxlbWVudFJlZiwgb3B0aW9ucz86IFVzZVBvaW50ZXJMb2NrT3B0aW9ucyk6IFVzZVBvaW50ZXJMb2NrUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3dpcGUvaW5kZXguZC50c1xudHlwZSBVc2VTd2lwZURpcmVjdGlvbiA9ICd1cCcgfCAnZG93bicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ25vbmUnO1xuaW50ZXJmYWNlIFVzZVN3aXBlT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBSZWdpc3RlciBldmVudHMgYXMgcGFzc2l2ZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBwYXNzaXZlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDUwXG4gICAqL1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBvbiBzd2lwZSBzdGFydFxuICAgKi9cbiAgb25Td2lwZVN0YXJ0PzogKGU6IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBvbiBzd2lwZSBtb3Zlc1xuICAgKi9cbiAgb25Td2lwZT86IChlOiBUb3VjaEV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogQ2FsbGJhY2sgb24gc3dpcGUgZW5kc1xuICAgKi9cbiAgb25Td2lwZUVuZD86IChlOiBUb3VjaEV2ZW50LCBkaXJlY3Rpb246IFVzZVN3aXBlRGlyZWN0aW9uKSA9PiB2b2lkO1xufVxuaW50ZXJmYWNlIFVzZVN3aXBlUmV0dXJuIHtcbiAgaXNTd2lwaW5nOiBTaGFsbG93UmVmPGJvb2xlYW4+O1xuICBkaXJlY3Rpb246IENvbXB1dGVkUmVmPFVzZVN3aXBlRGlyZWN0aW9uPjtcbiAgY29vcmRzU3RhcnQ6IFJlYWRvbmx5PFBvc2l0aW9uPjtcbiAgY29vcmRzRW5kOiBSZWFkb25seTxQb3NpdGlvbj47XG4gIGxlbmd0aFg6IENvbXB1dGVkUmVmPG51bWJlcj47XG4gIGxlbmd0aFk6IENvbXB1dGVkUmVmPG51bWJlcj47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIHN3aXBlIGRldGVjdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTd2lwZVxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTd2lwZSh0YXJnZXQ6IE1heWJlUmVmT3JHZXR0ZXI8RXZlbnRUYXJnZXQgfCBudWxsIHwgdW5kZWZpbmVkPiwgb3B0aW9ucz86IFVzZVN3aXBlT3B0aW9ucyk6IFVzZVN3aXBlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUG9pbnRlclN3aXBlL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VQb2ludGVyU3dpcGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IDUwXG4gICAqL1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBvbiBzd2lwZSBzdGFydC5cbiAgICovXG4gIG9uU3dpcGVTdGFydD86IChlOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBvbiBzd2lwZSBtb3ZlLlxuICAgKi9cbiAgb25Td2lwZT86IChlOiBQb2ludGVyRXZlbnQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsYmFjayBvbiBzd2lwZSBlbmQuXG4gICAqL1xuICBvblN3aXBlRW5kPzogKGU6IFBvaW50ZXJFdmVudCwgZGlyZWN0aW9uOiBVc2VTd2lwZURpcmVjdGlvbikgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFBvaW50ZXIgdHlwZXMgdG8gbGlzdGVuIHRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ21vdXNlJywgJ3RvdWNoJywgJ3BlbiddXG4gICAqL1xuICBwb2ludGVyVHlwZXM/OiBQb2ludGVyVHlwZVtdO1xuICAvKipcbiAgICogRGlzYWJsZSB0ZXh0IHNlbGVjdGlvbiBvbiBzd2lwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUZXh0U2VsZWN0PzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBVc2VQb2ludGVyU3dpcGVSZXR1cm4ge1xuICByZWFkb25seSBpc1N3aXBpbmc6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGRpcmVjdGlvbjogUmVhZG9ubHk8U2hhbGxvd1JlZjxVc2VTd2lwZURpcmVjdGlvbj4+O1xuICByZWFkb25seSBwb3NTdGFydDogUG9zaXRpb247XG4gIHJlYWRvbmx5IHBvc0VuZDogUG9zaXRpb247XG4gIGRpc3RhbmNlWDogUmVhZG9ubHk8Q29tcHV0ZWRSZWY8bnVtYmVyPj47XG4gIGRpc3RhbmNlWTogUmVhZG9ubHk8Q29tcHV0ZWRSZWY8bnVtYmVyPj47XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIHN3aXBlIGRldGVjdGlvbiBiYXNlZCBvbiBQb2ludGVyRXZlbnRzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVBvaW50ZXJTd2lwZVxuICogQHBhcmFtIHRhcmdldFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQb2ludGVyU3dpcGUodGFyZ2V0OiBNYXliZVJlZk9yR2V0dGVyPEhUTUxFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VQb2ludGVyU3dpcGVPcHRpb25zKTogVXNlUG9pbnRlclN3aXBlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUHJlZmVycmVkQ29sb3JTY2hlbWUvaW5kZXguZC50c1xudHlwZSBDb2xvclNjaGVtZVR5cGUgPSAnZGFyaycgfCAnbGlnaHQnIHwgJ25vLXByZWZlcmVuY2UnO1xuLyoqXG4gKiBSZWFjdGl2ZSBwcmVmZXJzLWNvbG9yLXNjaGVtZSBtZWRpYSBxdWVyeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQcmVmZXJyZWRDb2xvclNjaGVtZVxuICogQHBhcmFtIFtvcHRpb25zXVxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJlZmVycmVkQ29sb3JTY2hlbWUob3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyk6IHZ1ZTAuQ29tcHV0ZWRSZWY8Q29sb3JTY2hlbWVUeXBlPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVByZWZlcnJlZENvbnRyYXN0L2luZGV4LmQudHNcbnR5cGUgQ29udHJhc3RUeXBlID0gJ21vcmUnIHwgJ2xlc3MnIHwgJ2N1c3RvbScgfCAnbm8tcHJlZmVyZW5jZSc7XG4vKipcbiAqIFJlYWN0aXZlIHByZWZlcnMtY29udHJhc3QgbWVkaWEgcXVlcnkuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUHJlZmVycmVkQ29udHJhc3RcbiAqIEBwYXJhbSBbb3B0aW9uc11cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVByZWZlcnJlZENvbnRyYXN0KG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cpOiB2dWUwLkNvbXB1dGVkUmVmPENvbnRyYXN0VHlwZT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQcmVmZXJyZWREYXJrL2luZGV4LmQudHNcbi8qKlxuICogUmVhY3RpdmUgZGFyayB0aGVtZSBwcmVmZXJlbmNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVByZWZlcnJlZERhcmtcbiAqIEBwYXJhbSBbb3B0aW9uc11cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVByZWZlcnJlZERhcmsob3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyk6IHZ1ZTAuQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQcmVmZXJyZWRMYW5ndWFnZXMvaW5kZXguZC50c1xuLyoqXG4gKiBSZWFjdGl2ZSBOYXZpZ2F0b3IgTGFuZ3VhZ2VzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVByZWZlcnJlZExhbmd1YWdlc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVByZWZlcnJlZExhbmd1YWdlcyhvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogU2hhbGxvd1JlZjxyZWFkb25seSBzdHJpbmdbXT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VQcmVmZXJyZWRSZWR1Y2VkTW90aW9uL2luZGV4LmQudHNcbnR5cGUgUmVkdWNlZE1vdGlvblR5cGUgPSAncmVkdWNlJyB8ICduby1wcmVmZXJlbmNlJztcbi8qKlxuICogUmVhY3RpdmUgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbiBtZWRpYSBxdWVyeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VQcmVmZXJyZWRSZWR1Y2VkTW90aW9uXG4gKiBAcGFyYW0gW29wdGlvbnNdXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VQcmVmZXJyZWRSZWR1Y2VkTW90aW9uKG9wdGlvbnM/OiBDb25maWd1cmFibGVXaW5kb3cpOiB2dWUwLkNvbXB1dGVkUmVmPFJlZHVjZWRNb3Rpb25UeXBlPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVByZWZlcnJlZFJlZHVjZWRUcmFuc3BhcmVuY3kvaW5kZXguZC50c1xudHlwZSBSZWR1Y2VkVHJhbnNwYXJlbmN5VHlwZSA9ICdyZWR1Y2UnIHwgJ25vLXByZWZlcmVuY2UnO1xuLyoqXG4gKiBSZWFjdGl2ZSBwcmVmZXJzLXJlZHVjZWQtdHJhbnNwYXJlbmN5IG1lZGlhIHF1ZXJ5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVByZWZlcnJlZFJlZHVjZWRUcmFuc3BhcmVuY3lcbiAqIEBwYXJhbSBbb3B0aW9uc11cbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVByZWZlcnJlZFJlZHVjZWRUcmFuc3BhcmVuY3kob3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyk6IHZ1ZTAuQ29tcHV0ZWRSZWY8UmVkdWNlZFRyYW5zcGFyZW5jeVR5cGU+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUHJldmlvdXMvaW5kZXguZC50c1xuLyoqXG4gKiBIb2xkcyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgYSByZWYuXG4gKlxuICogQHNlZSAgIHtAbGluayBodHRwczovL3Z1ZXVzZS5vcmcvdXNlUHJldmlvdXN9XG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJldmlvdXM8VD4odmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8VD4pOiBSZWFkb25seTxTaGFsbG93UmVmPFQgfCB1bmRlZmluZWQ+PjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlUHJldmlvdXM8VD4odmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8VD4sIGluaXRpYWxWYWx1ZTogVCk6IFJlYWRvbmx5PFNoYWxsb3dSZWY8VD4+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlUmFmRm4vaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVJhZkZuQ2FsbGJhY2tBcmd1bWVudHMge1xuICAvKipcbiAgICogVGltZSBlbGFwc2VkIGJldHdlZW4gdGhpcyBhbmQgdGhlIGxhc3QgZnJhbWUuXG4gICAqL1xuICBkZWx0YTogbnVtYmVyO1xuICAvKipcbiAgICogVGltZSBlbGFwc2VkIHNpbmNlIHRoZSBjcmVhdGlvbiBvZiB0aGUgd2ViIHBhZ2UuIFNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUhpZ2hSZXNUaW1lU3RhbXAjdGhlX3RpbWVfb3JpZ2luIFRpbWUgb3JpZ2lufS5cbiAgICovXG4gIHRpbWVzdGFtcDogRE9NSGlnaFJlc1RpbWVTdGFtcDtcbn1cbmludGVyZmFjZSBVc2VSYWZGbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogU3RhcnQgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSBsb29wIGltbWVkaWF0ZWx5IG9uIGNyZWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBmcmFtZSBwZXIgc2Vjb25kIHRvIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uLlxuICAgKiBTZXQgdG8gYG51bGxgIHRvIGRpc2FibGUgdGhlIGxpbWl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICBmcHNMaW1pdD86IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyIHwgbnVsbD47XG4gIC8qKlxuICAgKiBBZnRlciB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGxvb3AgZXhlY3V0ZWQgb25jZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0b3BwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBvbmNlPzogYm9vbGVhbjtcbn1cbi8qKlxuICogQ2FsbCBmdW5jdGlvbiBvbiBldmVyeSBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC4gV2l0aCBjb250cm9scyBvZiBwYXVzaW5nIGFuZCByZXN1bWluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VSYWZGblxuICogQHBhcmFtIGZuXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVJhZkZuKGZuOiAoYXJnczogVXNlUmFmRm5DYWxsYmFja0FyZ3VtZW50cykgPT4gdm9pZCwgb3B0aW9ucz86IFVzZVJhZkZuT3B0aW9ucyk6IFBhdXNhYmxlO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU1NSV2lkdGgvaW5kZXguZC50c1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTU1JXaWR0aCgpOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGZ1bmN0aW9uIHByb3ZpZGVTU1JXaWR0aCh3aWR0aDogbnVtYmVyIHwgbnVsbCwgYXBwPzogQXBwPHVua25vd24+KTogdm9pZDtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVNjcmVlbk9yaWVudGF0aW9uL2luZGV4LmQudHNcbnR5cGUgT3JpZW50YXRpb25UeXBlID0gJ3BvcnRyYWl0LXByaW1hcnknIHwgJ3BvcnRyYWl0LXNlY29uZGFyeScgfCAnbGFuZHNjYXBlLXByaW1hcnknIHwgJ2xhbmRzY2FwZS1zZWNvbmRhcnknO1xudHlwZSBPcmllbnRhdGlvbkxvY2tUeXBlID0gJ2FueScgfCAnbmF0dXJhbCcgfCAnbGFuZHNjYXBlJyB8ICdwb3J0cmFpdCcgfCAncG9ydHJhaXQtcHJpbWFyeScgfCAncG9ydHJhaXQtc2Vjb25kYXJ5JyB8ICdsYW5kc2NhcGUtcHJpbWFyeScgfCAnbGFuZHNjYXBlLXNlY29uZGFyeSc7XG5pbnRlcmZhY2UgU2NyZWVuT3JpZW50YXRpb24gZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gIGxvY2s6IChvcmllbnRhdGlvbjogT3JpZW50YXRpb25Mb2NrVHlwZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdW5sb2NrOiAoKSA9PiB2b2lkO1xuICByZWFkb25seSB0eXBlOiBPcmllbnRhdGlvblR5cGU7XG4gIHJlYWRvbmx5IGFuZ2xlOiBudW1iZXI7XG4gIGFkZEV2ZW50TGlzdGVuZXI6ICh0eXBlOiAnY2hhbmdlJywgbGlzdGVuZXI6ICh0aGlzOiB0aGlzLCBldjogRXZlbnQpID0+IGFueSwgdXNlQ2FwdHVyZT86IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgVXNlU2NyZWVuT3JpZW50YXRpb25PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93IHt9XG5pbnRlcmZhY2UgVXNlU2NyZWVuT3JpZW50YXRpb25SZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIG9yaWVudGF0aW9uOiBSZWY8T3JpZW50YXRpb25UeXBlIHwgdW5kZWZpbmVkPjtcbiAgYW5nbGU6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgbG9ja09yaWVudGF0aW9uOiAodHlwZTogT3JpZW50YXRpb25Mb2NrVHlwZSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgdW5sb2NrT3JpZW50YXRpb246ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJlYWN0aXZlIHNjcmVlbiBvcmllbnRhdGlvblxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNjcmVlbk9yaWVudGF0aW9uXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTY3JlZW5PcmllbnRhdGlvbihvcHRpb25zPzogVXNlU2NyZWVuT3JpZW50YXRpb25PcHRpb25zKTogVXNlU2NyZWVuT3JpZW50YXRpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTY3JlZW5TYWZlQXJlYS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlU2NyZWVuU2FmZUFyZWFSZXR1cm4ge1xuICB0b3A6IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgcmlnaHQ6IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgYm90dG9tOiBTaGFsbG93UmVmPHN0cmluZz47XG4gIGxlZnQ6IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgdXBkYXRlOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBgZW52KHNhZmUtYXJlYS1pbnNldC0qKWBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTY3JlZW5TYWZlQXJlYVxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNjcmVlblNhZmVBcmVhKCk6IFVzZVNjcmVlblNhZmVBcmVhUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU2NyaXB0VGFnL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VTY3JpcHRUYWdPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQge1xuICAvKipcbiAgICogTG9hZCB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBZGQgYGFzeW5jYCBhdHRyaWJ1dGUgdG8gdGhlIHNjcmlwdCB0YWdcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXN5bmM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2NyaXB0IHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgJ3RleHQvamF2YXNjcmlwdCdcbiAgICovXG4gIHR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBNYW51YWwgY29udHJvbHMgdGhlIHRpbWluZyBvZiBsb2FkaW5nIGFuZCB1bmxvYWRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1hbnVhbD86IGJvb2xlYW47XG4gIGNyb3NzT3JpZ2luPzogJ2Fub255bW91cycgfCAndXNlLWNyZWRlbnRpYWxzJztcbiAgcmVmZXJyZXJQb2xpY3k/OiAnbm8tcmVmZXJyZXInIHwgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyB8ICdvcmlnaW4nIHwgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicgfCAnc2FtZS1vcmlnaW4nIHwgJ3N0cmljdC1vcmlnaW4nIHwgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nIHwgJ3Vuc2FmZS11cmwnO1xuICBub01vZHVsZT86IGJvb2xlYW47XG4gIGRlZmVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gYXR0cmlidXRlIHRvIHRoZSBzY3JpcHQgdGFnXG4gICAqXG4gICAqL1xuICBhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKlxuICAgKiBOb25jZSB2YWx1ZSBmb3IgQ1NQIChDb250ZW50IFNlY3VyaXR5IFBvbGljeSlcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBub25jZT86IHN0cmluZztcbn1cbmludGVyZmFjZSBVc2VTY3JpcHRUYWdSZXR1cm4ge1xuICBzY3JpcHRUYWc6IFNoYWxsb3dSZWY8SFRNTFNjcmlwdEVsZW1lbnQgfCBudWxsPjtcbiAgbG9hZDogKHdhaXRGb3JTY3JpcHRMb2FkPzogYm9vbGVhbikgPT4gUHJvbWlzZTxIVE1MU2NyaXB0RWxlbWVudCB8IGJvb2xlYW4+O1xuICB1bmxvYWQ6ICgpID0+IHZvaWQ7XG59XG4vKipcbiAqIEFzeW5jIHNjcmlwdCB0YWcgbG9hZGluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTY3JpcHRUYWdcbiAqIEBwYXJhbSBzcmNcbiAqIEBwYXJhbSBvbkxvYWRlZFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTY3JpcHRUYWcoc3JjOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIG9uTG9hZGVkPzogKGVsOiBIVE1MU2NyaXB0RWxlbWVudCkgPT4gdm9pZCwgb3B0aW9ucz86IFVzZVNjcmlwdFRhZ09wdGlvbnMpOiBVc2VTY3JpcHRUYWdSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTY3JvbGxMb2NrL2luZGV4LmQudHNcbi8qKlxuICogTG9jayBzY3JvbGxpbmcgb2YgdGhlIGVsZW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlU2Nyb2xsTG9ja1xuICogQHBhcmFtIGVsZW1lbnRcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTY3JvbGxMb2NrKGVsZW1lbnQ6IE1heWJlUmVmT3JHZXR0ZXI8SFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50IHwgV2luZG93IHwgRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPiwgaW5pdGlhbFN0YXRlPzogYm9vbGVhbik6IHZ1ZTAuV3JpdGFibGVDb21wdXRlZFJlZjxib29sZWFuLCBib29sZWFuPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVNlc3Npb25TdG9yYWdlL2luZGV4LmQudHNcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU2Vzc2lvblN0b3JhZ2Uoa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8c3RyaW5nPik6IFJlbW92YWJsZVJlZjxzdHJpbmc+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTZXNzaW9uU3RvcmFnZShrZXk6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPGJvb2xlYW4+LCBvcHRpb25zPzogVXNlU3RvcmFnZU9wdGlvbnM8Ym9vbGVhbj4pOiBSZW1vdmFibGVSZWY8Ym9vbGVhbj47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNlc3Npb25TdG9yYWdlKGtleTogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+LCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPiwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPG51bWJlcj4pOiBSZW1vdmFibGVSZWY8bnVtYmVyPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU2Vzc2lvblN0b3JhZ2U8VD4oa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxUPiwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTZXNzaW9uU3RvcmFnZTxUID0gdW5rbm93bj4oa2V5OiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxudWxsPiwgb3B0aW9ucz86IFVzZVN0b3JhZ2VPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU2hhcmUvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVNoYXJlT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBmaWxlcz86IEZpbGVbXTtcbiAgdGV4dD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZVNoYXJlUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzaGFyZTogKG92ZXJyaWRlT3B0aW9ucz86IE1heWJlUmVmT3JHZXR0ZXI8VXNlU2hhcmVPcHRpb25zPikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbi8qKlxuICogUmVhY3RpdmUgV2ViIFNoYXJlIEFQSS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTaGFyZVxuICogQHBhcmFtIHNoYXJlT3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNoYXJlKHNoYXJlT3B0aW9ucz86IE1heWJlUmVmT3JHZXR0ZXI8VXNlU2hhcmVPcHRpb25zPiwgb3B0aW9ucz86IENvbmZpZ3VyYWJsZU5hdmlnYXRvcik6IFVzZVNoYXJlUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU29ydGVkL2luZGV4LmQudHNcbnR5cGUgVXNlU29ydGVkQ29tcGFyZUZuPFQgPSBhbnk+ID0gKGE6IFQsIGI6IFQpID0+IG51bWJlcjtcbnR5cGUgVXNlU29ydGVkRm48VCA9IGFueT4gPSAoYXJyOiBUW10sIGNvbXBhcmVGbjogVXNlU29ydGVkQ29tcGFyZUZuPFQ+KSA9PiBUW107XG5pbnRlcmZhY2UgVXNlU29ydGVkT3B0aW9uczxUID0gYW55PiB7XG4gIC8qKlxuICAgKiBzb3J0IGFsZ29yaXRobVxuICAgKi9cbiAgc29ydEZuPzogVXNlU29ydGVkRm48VD47XG4gIC8qKlxuICAgKiBjb21wYXJlIGZ1bmN0aW9uXG4gICAqL1xuICBjb21wYXJlRm4/OiBVc2VTb3J0ZWRDb21wYXJlRm48VD47XG4gIC8qKlxuICAgKiBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoZSBzb3VyY2UgYXJyYXlcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpcnR5PzogYm9vbGVhbjtcbn1cbi8qKlxuICogcmVhY3RpdmUgc29ydCBhcnJheVxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVNvcnRlZFxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNvcnRlZDxUID0gYW55Pihzb3VyY2U6IE1heWJlUmVmT3JHZXR0ZXI8VFtdPiwgY29tcGFyZUZuPzogVXNlU29ydGVkQ29tcGFyZUZuPFQ+KTogUmVmPFRbXT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVNvcnRlZDxUID0gYW55Pihzb3VyY2U6IE1heWJlUmVmT3JHZXR0ZXI8VFtdPiwgb3B0aW9ucz86IFVzZVNvcnRlZE9wdGlvbnM8VD4pOiBSZWY8VFtdPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU29ydGVkPFQgPSBhbnk+KHNvdXJjZTogTWF5YmVSZWZPckdldHRlcjxUW10+LCBjb21wYXJlRm4/OiBVc2VTb3J0ZWRDb21wYXJlRm48VD4sIG9wdGlvbnM/OiBPbWl0PFVzZVNvcnRlZE9wdGlvbnM8VD4sICdjb21wYXJlRm4nPik6IFJlZjxUW10+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3BlZWNoUmVjb2duaXRpb24vdHlwZXMuZC50c1xudHlwZSBTcGVlY2hSZWNvZ25pdGlvbkVycm9yQ29kZSA9ICdhYm9ydGVkJyB8ICdhdWRpby1jYXB0dXJlJyB8ICdiYWQtZ3JhbW1hcicgfCAnbGFuZ3VhZ2Utbm90LXN1cHBvcnRlZCcgfCAnbmV0d29yaycgfCAnbm8tc3BlZWNoJyB8ICdub3QtYWxsb3dlZCcgfCAnc2VydmljZS1ub3QtYWxsb3dlZCc7XG5pbnRlcmZhY2UgU3BlZWNoR3JhbW1hciB7XG4gIHNyYzogc3RyaW5nO1xuICB3ZWlnaHQ6IG51bWJlcjtcbn1cbmludGVyZmFjZSBTcGVlY2hHcmFtbWFyTGlzdCB7XG4gIHJlYWRvbmx5IGxlbmd0aDogbnVtYmVyO1xuICBhZGRGcm9tU3RyaW5nOiAoc3RyaW5nOiBzdHJpbmcsIHdlaWdodD86IG51bWJlcikgPT4gdm9pZDtcbiAgYWRkRnJvbVVSSTogKHNyYzogc3RyaW5nLCB3ZWlnaHQ/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGl0ZW06IChpbmRleDogbnVtYmVyKSA9PiBTcGVlY2hHcmFtbWFyO1xuICBbaW5kZXg6IG51bWJlcl06IFNwZWVjaEdyYW1tYXI7XG59XG5pbnRlcmZhY2UgU3BlZWNoUmVjb2duaXRpb25FcnJvckV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICByZWFkb25seSBlcnJvcjogU3BlZWNoUmVjb2duaXRpb25FcnJvckNvZGU7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbn1cbmludGVyZmFjZSBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICByZWFkb25seSByZXN1bHRJbmRleDogbnVtYmVyO1xuICByZWFkb25seSByZXN1bHRzOiBTcGVlY2hSZWNvZ25pdGlvblJlc3VsdExpc3Q7XG59XG5pbnRlcmZhY2UgU3BlZWNoUmVjb2duaXRpb25FdmVudE1hcCB7XG4gIGF1ZGlvZW5kOiBFdmVudDtcbiAgYXVkaW9zdGFydDogRXZlbnQ7XG4gIGVuZDogRXZlbnQ7XG4gIGVycm9yOiBTcGVlY2hSZWNvZ25pdGlvbkVycm9yRXZlbnQ7XG4gIG5vbWF0Y2g6IFNwZWVjaFJlY29nbml0aW9uRXZlbnQ7XG4gIHJlc3VsdDogU3BlZWNoUmVjb2duaXRpb25FdmVudDtcbiAgc291bmRlbmQ6IEV2ZW50O1xuICBzb3VuZHN0YXJ0OiBFdmVudDtcbiAgc3BlZWNoZW5kOiBFdmVudDtcbiAgc3BlZWNoc3RhcnQ6IEV2ZW50O1xuICBzdGFydDogRXZlbnQ7XG59XG5pbnRlcmZhY2UgU3BlZWNoUmVjb2duaXRpb24gZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gIGNvbnRpbnVvdXM6IGJvb2xlYW47XG4gIGdyYW1tYXJzOiBTcGVlY2hHcmFtbWFyTGlzdDtcbiAgaW50ZXJpbVJlc3VsdHM6IGJvb2xlYW47XG4gIGxhbmc6IHN0cmluZztcbiAgbWF4QWx0ZXJuYXRpdmVzOiBudW1iZXI7XG4gIG9uYXVkaW9lbmQ6ICgodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGw7XG4gIG9uYXVkaW9zdGFydDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25lbmQ6ICgodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBFdmVudCkgPT4gYW55KSB8IG51bGw7XG4gIG9uZXJyb3I6ICgodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBTcGVlY2hSZWNvZ25pdGlvbkVycm9yRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbm5vbWF0Y2g6ICgodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25yZXN1bHQ6ICgodGhpczogU3BlZWNoUmVjb2duaXRpb24sIGV2OiBTcGVlY2hSZWNvZ25pdGlvbkV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25zb3VuZGVuZDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25zb3VuZHN0YXJ0OiAoKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogRXZlbnQpID0+IGFueSkgfCBudWxsO1xuICBvbnNwZWVjaGVuZDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25zcGVlY2hzdGFydDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgb25zdGFydDogKCh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IEV2ZW50KSA9PiBhbnkpIHwgbnVsbDtcbiAgYWJvcnQ6ICgpID0+IHZvaWQ7XG4gIHN0YXJ0OiAoKSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xuICBhZGRFdmVudExpc3RlbmVyOiAoPEskMSBleHRlbmRzIGtleW9mIFNwZWVjaFJlY29nbml0aW9uRXZlbnRNYXA+KHR5cGU6IEskMSwgbGlzdGVuZXI6ICh0aGlzOiBTcGVlY2hSZWNvZ25pdGlvbiwgZXY6IFNwZWVjaFJlY29nbml0aW9uRXZlbnRNYXBbSyQxXSkgPT4gYW55LCBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkKSAmICgodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCk7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6ICg8SyQxIGV4dGVuZHMga2V5b2YgU3BlZWNoUmVjb2duaXRpb25FdmVudE1hcD4odHlwZTogSyQxLCBsaXN0ZW5lcjogKHRoaXM6IFNwZWVjaFJlY29nbml0aW9uLCBldjogU3BlZWNoUmVjb2duaXRpb25FdmVudE1hcFtLJDFdKSA9PiBhbnksIG9wdGlvbnM/OiBib29sZWFuIHwgRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQpICYgKCh0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKSA9PiB2b2lkKTtcbn1cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVNwZWVjaFJlY29nbml0aW9uL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VTcGVlY2hSZWNvZ25pdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBjb250aW51b3VzIHJlc3VsdHMgYXJlIHJldHVybmVkIGZvciBlYWNoIHJlY29nbml0aW9uLCBvciBvbmx5IGEgc2luZ2xlIHJlc3VsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgY29udGludW91cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGludGVyaW0gcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQgKHRydWUpIG9yIG5vdCAoZmFsc2UuKSBJbnRlcmltIHJlc3VsdHMgYXJlIHJlc3VsdHMgdGhhdCBhcmUgbm90IHlldCBmaW5hbFxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBpbnRlcmltUmVzdWx0cz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBmb3IgU3BlZWNoUmVjb2duaXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgJ2VuLVVTJ1xuICAgKi9cbiAgbGFuZz86IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEEgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgbWF4aW11bSByZXR1cm5lZCBhbHRlcm5hdGl2ZXMgZm9yIGVhY2ggcmVzdWx0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hSZWNvZ25pdGlvbi9tYXhBbHRlcm5hdGl2ZXNcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgbWF4QWx0ZXJuYXRpdmVzPzogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZVNwZWVjaFJlY29nbml0aW9uUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBpc0xpc3RlbmluZzogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgaXNGaW5hbDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgcmVjb2duaXRpb246IFNwZWVjaFJlY29nbml0aW9uIHwgdW5kZWZpbmVkO1xuICByZXN1bHQ6IFNoYWxsb3dSZWY8c3RyaW5nPjtcbiAgZXJyb3I6IFNoYWxsb3dSZWY8U3BlZWNoUmVjb2duaXRpb25FcnJvckV2ZW50IHwgRXJyb3IgfCB1bmRlZmluZWQ+O1xuICB0b2dnbGU6ICh2YWx1ZT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHN0YXJ0OiAoKSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBTcGVlY2hSZWNvZ25pdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTcGVlY2hSZWNvZ25pdGlvblxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3BlZWNoUmVjb2duaXRpb24gU3BlZWNoUmVjb2duaXRpb25cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3BlZWNoUmVjb2duaXRpb24ob3B0aW9ucz86IFVzZVNwZWVjaFJlY29nbml0aW9uT3B0aW9ucyk6IFVzZVNwZWVjaFJlY29nbml0aW9uUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlU3BlZWNoU3ludGhlc2lzL2luZGV4LmQudHNcbnR5cGUgVXNlU3BlZWNoU3ludGhlc2lzU3RhdHVzID0gJ2luaXQnIHwgJ3BsYXknIHwgJ3BhdXNlJyB8ICdlbmQnO1xuaW50ZXJmYWNlIFVzZVNwZWVjaFN5bnRoZXNpc09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogTGFuZ3VhZ2UgZm9yIFNwZWVjaFN5bnRoZXNpc1xuICAgKlxuICAgKiBAZGVmYXVsdCAnZW4tVVMnXG4gICAqL1xuICBsYW5nPzogTWF5YmVSZWZPckdldHRlcjxzdHJpbmc+O1xuICAvKipcbiAgICogR2V0cyBhbmQgc2V0cyB0aGUgcGl0Y2ggYXQgd2hpY2ggdGhlIHV0dGVyYW5jZSB3aWxsIGJlIHNwb2tlbiBhdC5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcGl0Y2g/OiBNYXliZVJlZk9yR2V0dGVyPFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVsncGl0Y2gnXT47XG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBzcGVlZCBhdCB3aGljaCB0aGUgdXR0ZXJhbmNlIHdpbGwgYmUgc3Bva2VuIGF0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByYXRlPzogTWF5YmVSZWZPckdldHRlcjxTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VbJ3JhdGUnXT47XG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB2b2ljZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzcGVhayB0aGUgdXR0ZXJhbmNlLlxuICAgKi9cbiAgdm9pY2U/OiBNYXliZVJlZjxTcGVlY2hTeW50aGVzaXNWb2ljZT47XG4gIC8qKlxuICAgKiBHZXRzIGFuZCBzZXRzIHRoZSB2b2x1bWUgdGhhdCB0aGUgdXR0ZXJhbmNlIHdpbGwgYmUgc3Bva2VuIGF0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICB2b2x1bWU/OiBNYXliZVJlZk9yR2V0dGVyPFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZVsndm9sdW1lJ10+O1xuICAvKipcbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgYm91bmRhcnkgZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICAgKi9cbiAgb25Cb3VuZGFyeT86IChldmVudDogU3BlZWNoU3ludGhlc2lzRXZlbnQpID0+IHZvaWQ7XG59XG5pbnRlcmZhY2UgVXNlU3BlZWNoU3ludGhlc2lzUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBpc1BsYXlpbmc6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIHN0YXR1czogU2hhbGxvd1JlZjxVc2VTcGVlY2hTeW50aGVzaXNTdGF0dXM+O1xuICB1dHRlcmFuY2U6IENvbXB1dGVkUmVmPFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZT47XG4gIGVycm9yOiBTaGFsbG93UmVmPFNwZWVjaFN5bnRoZXNpc0Vycm9yRXZlbnQgfCB1bmRlZmluZWQ+O1xuICBzdG9wOiAoKSA9PiB2b2lkO1xuICB0b2dnbGU6ICh2YWx1ZT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHNwZWFrOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSBTcGVlY2hTeW50aGVzaXMuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlU3BlZWNoU3ludGhlc2lzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TcGVlY2hTeW50aGVzaXMgU3BlZWNoU3ludGhlc2lzXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3BlZWNoU3ludGhlc2lzKHRleHQ6IE1heWJlUmVmT3JHZXR0ZXI8c3RyaW5nPiwgb3B0aW9ucz86IFVzZVNwZWVjaFN5bnRoZXNpc09wdGlvbnMpOiBVc2VTcGVlY2hTeW50aGVzaXNSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTdGVwcGVyL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VTdGVwcGVyUmV0dXJuPFN0ZXBOYW1lLCBTdGVwcywgU3RlcD4ge1xuICAvKiogTGlzdCBvZiBzdGVwcy4gKi9cbiAgc3RlcHM6IFJlYWRvbmx5PFJlZjxTdGVwcz4+O1xuICAvKiogTGlzdCBvZiBzdGVwIG5hbWVzLiAqL1xuICBzdGVwTmFtZXM6IFJlYWRvbmx5PFJlZjxTdGVwTmFtZVtdPj47XG4gIC8qKiBJbmRleCBvZiB0aGUgY3VycmVudCBzdGVwLiAqL1xuICBpbmRleDogUmVmPG51bWJlcj47XG4gIC8qKiBDdXJyZW50IHN0ZXAuICovXG4gIGN1cnJlbnQ6IENvbXB1dGVkUmVmPFN0ZXA+O1xuICAvKiogTmV4dCBzdGVwLCBvciB1bmRlZmluZWQgaWYgdGhlIGN1cnJlbnQgc3RlcCBpcyB0aGUgbGFzdCBvbmUuICovXG4gIG5leHQ6IENvbXB1dGVkUmVmPFN0ZXBOYW1lIHwgdW5kZWZpbmVkPjtcbiAgLyoqIFByZXZpb3VzIHN0ZXAsIG9yIHVuZGVmaW5lZCBpZiB0aGUgY3VycmVudCBzdGVwIGlzIHRoZSBmaXJzdCBvbmUuICovXG4gIHByZXZpb3VzOiBDb21wdXRlZFJlZjxTdGVwTmFtZSB8IHVuZGVmaW5lZD47XG4gIC8qKiBXaGV0aGVyIHRoZSBjdXJyZW50IHN0ZXAgaXMgdGhlIGZpcnN0IG9uZS4gKi9cbiAgaXNGaXJzdDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBjdXJyZW50IHN0ZXAgaXMgdGhlIGxhc3Qgb25lLiAqL1xuICBpc0xhc3Q6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICAvKiogR2V0IHRoZSBzdGVwIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguICovXG4gIGF0OiAoaW5kZXg6IG51bWJlcikgPT4gU3RlcCB8IHVuZGVmaW5lZDtcbiAgLyoqIEdldCBhIHN0ZXAgYnkgdGhlIHNwZWNpZmllZCBuYW1lLiAqL1xuICBnZXQ6IChzdGVwOiBTdGVwTmFtZSkgPT4gU3RlcCB8IHVuZGVmaW5lZDtcbiAgLyoqIEdvIHRvIHRoZSBzcGVjaWZpZWQgc3RlcC4gKi9cbiAgZ29UbzogKHN0ZXA6IFN0ZXBOYW1lKSA9PiB2b2lkO1xuICAvKiogR28gdG8gdGhlIG5leHQgc3RlcC4gRG9lcyBub3RoaW5nIGlmIHRoZSBjdXJyZW50IHN0ZXAgaXMgdGhlIGxhc3Qgb25lLiAqL1xuICBnb1RvTmV4dDogKCkgPT4gdm9pZDtcbiAgLyoqIEdvIHRvIHRoZSBwcmV2aW91cyBzdGVwLiBEb2VzIG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQgc3RlcCBpcyB0aGUgcHJldmlvdXMgb25lLiAqL1xuICBnb1RvUHJldmlvdXM6ICgpID0+IHZvaWQ7XG4gIC8qKiBHbyBiYWNrIHRvIHRoZSBnaXZlbiBzdGVwLCBvbmx5IGlmIHRoZSBjdXJyZW50IHN0ZXAgaXMgYWZ0ZXIuICovXG4gIGdvQmFja1RvOiAoc3RlcDogU3RlcE5hbWUpID0+IHZvaWQ7XG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gc3RlcCBpcyB0aGUgbmV4dCBzdGVwLiAqL1xuICBpc05leHQ6IChzdGVwOiBTdGVwTmFtZSkgPT4gYm9vbGVhbjtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBzdGVwIGlzIHRoZSBwcmV2aW91cyBzdGVwLiAqL1xuICBpc1ByZXZpb3VzOiAoc3RlcDogU3RlcE5hbWUpID0+IGJvb2xlYW47XG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gc3RlcCBpcyB0aGUgY3VycmVudCBzdGVwLiAqL1xuICBpc0N1cnJlbnQ6IChzdGVwOiBTdGVwTmFtZSkgPT4gYm9vbGVhbjtcbiAgLyoqIENoZWNrcyBpZiB0aGUgY3VycmVudCBzdGVwIGlzIGJlZm9yZSB0aGUgZ2l2ZW4gc3RlcC4gKi9cbiAgaXNCZWZvcmU6IChzdGVwOiBTdGVwTmFtZSkgPT4gYm9vbGVhbjtcbiAgLyoqIENoZWNrcyBpZiB0aGUgY3VycmVudCBzdGVwIGlzIGFmdGVyIHRoZSBnaXZlbiBzdGVwLiAqL1xuICBpc0FmdGVyOiAoc3RlcDogU3RlcE5hbWUpID0+IGJvb2xlYW47XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0ZXBwZXI8VCBleHRlbmRzIHN0cmluZyB8IG51bWJlcj4oc3RlcHM6IE1heWJlUmVmPFRbXT4sIGluaXRpYWxTdGVwPzogVCk6IFVzZVN0ZXBwZXJSZXR1cm48VCwgVFtdLCBUPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RlcHBlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oc3RlcHM6IE1heWJlUmVmPFQ+LCBpbml0aWFsU3RlcD86IGtleW9mIFQpOiBVc2VTdGVwcGVyUmV0dXJuPEV4Y2x1ZGU8a2V5b2YgVCwgc3ltYm9sPiwgVCwgVFtrZXlvZiBUXT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VTdG9yYWdlQXN5bmMvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVN0b3JhZ2VBc3luY09wdGlvbnM8VD4gZXh0ZW5kcyBPbWl0PFVzZVN0b3JhZ2VPcHRpb25zPFQ+LCAnc2VyaWFsaXplcic+IHtcbiAgLyoqXG4gICAqIEN1c3RvbSBkYXRhIHNlcmlhbGl6YXRpb25cbiAgICovXG4gIHNlcmlhbGl6ZXI/OiBTZXJpYWxpemVyQXN5bmM8VD47XG4gIC8qKlxuICAgKiBPbiBmaXJzdCB2YWx1ZSBsb2FkZWQgaG9vay5cbiAgICovXG4gIG9uUmVhZHk/OiAodmFsdWU6IFQpID0+IHZvaWQ7XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVN0b3JhZ2VBc3luYyhrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBNYXliZVJlZk9yR2V0dGVyPHN0cmluZz4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZUFzeW5jLCBvcHRpb25zPzogVXNlU3RvcmFnZUFzeW5jT3B0aW9uczxzdHJpbmc+KTogUmVtb3ZhYmxlUmVmPHN0cmluZz4gJiBQcm9taXNlPFJlbW92YWJsZVJlZjxzdHJpbmc+PjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZUFzeW5jKGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8Ym9vbGVhbj4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZUFzeW5jLCBvcHRpb25zPzogVXNlU3RvcmFnZUFzeW5jT3B0aW9uczxib29sZWFuPik6IFJlbW92YWJsZVJlZjxib29sZWFuPiAmIFByb21pc2U8UmVtb3ZhYmxlUmVmPGJvb2xlYW4+PjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlU3RvcmFnZUFzeW5jKGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlQXN5bmMsIG9wdGlvbnM/OiBVc2VTdG9yYWdlQXN5bmNPcHRpb25zPG51bWJlcj4pOiBSZW1vdmFibGVSZWY8bnVtYmVyPiAmIFByb21pc2U8UmVtb3ZhYmxlUmVmPG51bWJlcj4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlQXN5bmM8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogTWF5YmVSZWZPckdldHRlcjxUPiwgc3RvcmFnZT86IFN0b3JhZ2VMaWtlQXN5bmMsIG9wdGlvbnM/OiBVc2VTdG9yYWdlQXN5bmNPcHRpb25zPFQ+KTogUmVtb3ZhYmxlUmVmPFQ+ICYgUHJvbWlzZTxSZW1vdmFibGVSZWY8VD4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdG9yYWdlQXN5bmM8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IE1heWJlUmVmT3JHZXR0ZXI8bnVsbD4sIHN0b3JhZ2U/OiBTdG9yYWdlTGlrZUFzeW5jLCBvcHRpb25zPzogVXNlU3RvcmFnZUFzeW5jT3B0aW9uczxUPik6IFJlbW92YWJsZVJlZjxUPiAmIFByb21pc2U8UmVtb3ZhYmxlUmVmPFQ+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVN0eWxlVGFnL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VTdHlsZVRhZ09wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBNZWRpYSBxdWVyeSBmb3Igc3R5bGVzIHRvIGFwcGx5XG4gICAqL1xuICBtZWRpYT86IHN0cmluZztcbiAgLyoqXG4gICAqIExvYWQgdGhlIHN0eWxlIGltbWVkaWF0ZWx5XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBNYW51YWwgY29udHJvbHMgdGhlIHRpbWluZyBvZiBsb2FkaW5nIGFuZCB1bmxvYWRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG1hbnVhbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBET00gaWQgb2YgdGhlIHN0eWxlIHRhZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvLWluY3JlbWVudGVkXG4gICAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE5vbmNlIHZhbHVlIGZvciBDU1AgKENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KVxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIG5vbmNlPzogc3RyaW5nO1xufVxuaW50ZXJmYWNlIFVzZVN0eWxlVGFnUmV0dXJuIHtcbiAgaWQ6IHN0cmluZztcbiAgY3NzOiBTaGFsbG93UmVmPHN0cmluZz47XG4gIGxvYWQ6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbiAgaXNMb2FkZWQ6IFJlYWRvbmx5PFNoYWxsb3dSZWY8Ym9vbGVhbj4+O1xufVxuLyoqXG4gKiBJbmplY3QgPHN0eWxlPiBlbGVtZW50IGluIGhlYWQuXG4gKlxuICogT3ZlcmxvYWQ6IE9taXR0ZWQgaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VTdHlsZVRhZ1xuICogQHBhcmFtIGNzc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdHlsZVRhZyhjc3M6IE1heWJlUmVmPHN0cmluZz4sIG9wdGlvbnM/OiBVc2VTdHlsZVRhZ09wdGlvbnMpOiBVc2VTdHlsZVRhZ1JldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVN1cHBvcnRlZC9pbmRleC5kLnRzXG50eXBlIFVzZVN1cHBvcnRlZFJldHVybiA9IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VTdXBwb3J0ZWQoY2FsbGJhY2s6ICgpID0+IHVua25vd24pOiBVc2VTdXBwb3J0ZWRSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUZW1wbGF0ZVJlZnNMaXN0L2luZGV4LmQudHNcbnR5cGUgVGVtcGxhdGVSZWZzTGlzdDxUPiA9IFRbXSAmIHtcbiAgc2V0OiAoZWw6IG9iamVjdCB8IG51bGwpID0+IHZvaWQ7XG59O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUZW1wbGF0ZVJlZnNMaXN0PFQgPSBFbGVtZW50PigpOiBSZWFkb25seTxSZWY8UmVhZG9ubHk8VGVtcGxhdGVSZWZzTGlzdDxUPj4+Pjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRleHREaXJlY3Rpb24vaW5kZXguZC50c1xudHlwZSBVc2VUZXh0RGlyZWN0aW9uVmFsdWUgPSAnbHRyJyB8ICdydGwnIHwgJ2F1dG8nO1xuaW50ZXJmYWNlIFVzZVRleHREaXJlY3Rpb25PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlRG9jdW1lbnQge1xuICAvKipcbiAgICogQ1NTIFNlbGVjdG9yIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQgYXBwbHlpbmcgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgJ2h0bWwnXG4gICAqL1xuICBzZWxlY3Rvcj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9ic2VydmUgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpYCBjaGFuZ2VzIHVzaW5nIE11dGF0aW9uT2JzZXJ2ZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb2JzZXJ2ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlXG4gICAqXG4gICAqIEBkZWZhdWx0ICdsdHInXG4gICAqL1xuICBpbml0aWFsVmFsdWU/OiBVc2VUZXh0RGlyZWN0aW9uVmFsdWU7XG59XG4vKipcbiAqIFJlYWN0aXZlIGRpciBvZiB0aGUgZWxlbWVudCdzIHRleHQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlVGV4dERpcmVjdGlvblxuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGV4dERpcmVjdGlvbihvcHRpb25zPzogVXNlVGV4dERpcmVjdGlvbk9wdGlvbnMpOiB2dWUwLldyaXRhYmxlQ29tcHV0ZWRSZWY8VXNlVGV4dERpcmVjdGlvblZhbHVlLCBVc2VUZXh0RGlyZWN0aW9uVmFsdWU+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVGV4dFNlbGVjdGlvbi9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlVGV4dFNlbGVjdGlvbk9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge31cbmludGVyZmFjZSBVc2VUZXh0U2VsZWN0aW9uUmV0dXJuIHtcbiAgdGV4dDogQ29tcHV0ZWRSZWY8c3RyaW5nPjtcbiAgcmVjdHM6IENvbXB1dGVkUmVmPERPTVJlY3RbXT47XG4gIHJhbmdlczogQ29tcHV0ZWRSZWY8UmFuZ2VbXT47XG4gIHNlbGVjdGlvbjogU2hhbGxvd1JlZjxTZWxlY3Rpb24gfCBudWxsPjtcbn1cbi8qKlxuICogUmVhY3RpdmVseSB0cmFjayB1c2VyIHRleHQgc2VsZWN0aW9uIGJhc2VkIG9uIFtgV2luZG93LmdldFNlbGVjdGlvbmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvZ2V0U2VsZWN0aW9uKS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VUZXh0U2VsZWN0aW9uXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUZXh0U2VsZWN0aW9uKG9wdGlvbnM/OiBVc2VUZXh0U2VsZWN0aW9uT3B0aW9ucyk6IFVzZVRleHRTZWxlY3Rpb25SZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUZXh0YXJlYUF1dG9zaXplL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VUZXh0YXJlYUF1dG9zaXplT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKiBUZXh0YXJlYSBlbGVtZW50IHRvIGF1dG9zaXplLiAqL1xuICBlbGVtZW50PzogTWF5YmVSZWY8SFRNTFRleHRBcmVhRWxlbWVudCB8IHVuZGVmaW5lZCB8IG51bGw+O1xuICAvKiogVGV4dGFyZWEgY29udGVudC4gKi9cbiAgaW5wdXQ/OiBNYXliZVJlZjxzdHJpbmc+O1xuICAvKiogV2F0Y2ggc291cmNlcyB0aGF0IHNob3VsZCB0cmlnZ2VyIGEgdGV4dGFyZWEgcmVzaXplLiAqL1xuICB3YXRjaD86IFdhdGNoU291cmNlIHwgTXVsdGlXYXRjaFNvdXJjZXM7XG4gIC8qKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgdGV4dGFyZWEgc2l6ZSBjaGFuZ2VzLiAqL1xuICBvblJlc2l6ZT86ICgpID0+IHZvaWQ7XG4gIC8qKiBTcGVjaWZ5IHN0eWxlIHRhcmdldCB0byBhcHBseSB0aGUgaGVpZ2h0IGJhc2VkIG9uIHRleHRhcmVhIGNvbnRlbnQuIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIHVzZSB0ZXh0YXJlYSBpdCBzZWxmLiAgKi9cbiAgc3R5bGVUYXJnZXQ/OiBNYXliZVJlZjxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD47XG4gIC8qKiBTcGVjaWZ5IHRoZSBzdHlsZSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgdXNlZCB0byBtYW5pcHVsYXRlIGhlaWdodC4gQ2FuIGJlIGBoZWlnaHQgfCBtaW5IZWlnaHRgLiBEZWZhdWx0IHZhbHVlIGlzIGBoZWlnaHRgLiAqL1xuICBzdHlsZVByb3A/OiAnaGVpZ2h0JyB8ICdtaW5IZWlnaHQnO1xufVxuaW50ZXJmYWNlIFVzZVRleHRhcmVhQXV0b3NpemVSZXR1cm4ge1xuICB0ZXh0YXJlYTogUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQgfCB1bmRlZmluZWQgfCBudWxsPjtcbiAgaW5wdXQ6IFJlZjxzdHJpbmc+O1xuICB0cmlnZ2VyUmVzaXplOiAoKSA9PiB2b2lkO1xufVxuZGVjbGFyZSBmdW5jdGlvbiB1c2VUZXh0YXJlYUF1dG9zaXplKG9wdGlvbnM/OiBVc2VUZXh0YXJlYUF1dG9zaXplT3B0aW9ucyk6IFVzZVRleHRhcmVhQXV0b3NpemVSZXR1cm47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUaHJvdHRsZWRSZWZIaXN0b3J5L2luZGV4LmQudHNcbnR5cGUgVXNlVGhyb3R0bGVkUmVmSGlzdG9yeU9wdGlvbnM8UmF3LCBTZXJpYWxpemVkID0gUmF3PiA9IE9taXQ8VXNlUmVmSGlzdG9yeU9wdGlvbnM8UmF3LCBTZXJpYWxpemVkPiwgJ2V2ZW50RmlsdGVyJz4gJiB7XG4gIHRocm90dGxlPzogTWF5YmVSZWY8bnVtYmVyPjtcbiAgdHJhaWxpbmc/OiBib29sZWFuO1xufTtcbnR5cGUgVXNlVGhyb3R0bGVkUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+ID0gVXNlUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+O1xuLyoqXG4gKiBTaG9ydGhhbmQgZm9yIFt1c2VSZWZIaXN0b3J5XShodHRwczovL3Z1ZXVzZS5vcmcvdXNlUmVmSGlzdG9yeSkgd2l0aCB0aHJvdHRsZWQgZmlsdGVyLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVRocm90dGxlZFJlZkhpc3RvcnlcbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGhyb3R0bGVkUmVmSGlzdG9yeTxSYXcsIFNlcmlhbGl6ZWQgPSBSYXc+KHNvdXJjZTogUmVmPFJhdz4sIG9wdGlvbnM/OiBVc2VUaHJvdHRsZWRSZWZIaXN0b3J5T3B0aW9uczxSYXcsIFNlcmlhbGl6ZWQ+KTogVXNlVGhyb3R0bGVkUmVmSGlzdG9yeVJldHVybjxSYXcsIFNlcmlhbGl6ZWQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVGltZUFnby9pbmRleC5kLnRzXG50eXBlIFVzZVRpbWVBZ29Gb3JtYXR0ZXI8VCA9IG51bWJlcj4gPSAodmFsdWU6IFQsIGlzUGFzdDogYm9vbGVhbikgPT4gc3RyaW5nO1xudHlwZSBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdCA9ICdzZWNvbmQnIHwgJ21pbnV0ZScgfCAnaG91cicgfCAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcic7XG5pbnRlcmZhY2UgVXNlVGltZUFnb01lc3NhZ2VzQnVpbHRJbiB7XG4gIGp1c3ROb3c6IHN0cmluZztcbiAgcGFzdDogc3RyaW5nIHwgVXNlVGltZUFnb0Zvcm1hdHRlcjxzdHJpbmc+O1xuICBmdXR1cmU6IHN0cmluZyB8IFVzZVRpbWVBZ29Gb3JtYXR0ZXI8c3RyaW5nPjtcbiAgaW52YWxpZDogc3RyaW5nO1xufVxudHlwZSBVc2VUaW1lQWdvTWVzc2FnZXM8VW5pdE5hbWVzIGV4dGVuZHMgc3RyaW5nID0gVXNlVGltZUFnb1VuaXROYW1lc0RlZmF1bHQ+ID0gVXNlVGltZUFnb01lc3NhZ2VzQnVpbHRJbiAmIFJlY29yZDxVbml0TmFtZXMsIHN0cmluZyB8IFVzZVRpbWVBZ29Gb3JtYXR0ZXI8bnVtYmVyPj47XG5pbnRlcmZhY2UgRm9ybWF0VGltZUFnb09wdGlvbnM8VW5pdE5hbWVzIGV4dGVuZHMgc3RyaW5nID0gVXNlVGltZUFnb1VuaXROYW1lc0RlZmF1bHQ+IHtcbiAgLyoqXG4gICAqIE1heGltdW0gdW5pdCAob2YgZGlmZiBpbiBtaWxsaXNlY29uZHMpIHRvIGRpc3BsYXkgdGhlIGZ1bGwgZGF0ZSBpbnN0ZWFkIG9mIHJlbGF0aXZlXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgbWF4PzogVW5pdE5hbWVzIHwgbnVtYmVyO1xuICAvKipcbiAgICogRm9ybWF0dGVyIGZvciBmdWxsIGRhdGVcbiAgICovXG4gIGZ1bGxEYXRlRm9ybWF0dGVyPzogKGRhdGU6IERhdGUpID0+IHN0cmluZztcbiAgLyoqXG4gICAqIE1lc3NhZ2VzIGZvciBmb3JtYXR0aW5nIHRoZSBzdHJpbmdcbiAgICovXG4gIG1lc3NhZ2VzPzogVXNlVGltZUFnb01lc3NhZ2VzPFVuaXROYW1lcz47XG4gIC8qKlxuICAgKiBNaW5pbXVtIGRpc3BsYXkgdGltZSB1bml0IChkZWZhdWx0IGlzIG1pbnV0ZSlcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNob3dTZWNvbmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogUm91bmRpbmcgbWV0aG9kIHRvIGFwcGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAncm91bmQnXG4gICAqL1xuICByb3VuZGluZz86ICdyb3VuZCcgfCAnY2VpbCcgfCAnZmxvb3InIHwgbnVtYmVyO1xuICAvKipcbiAgICogQ3VzdG9tIHVuaXRzXG4gICAqL1xuICB1bml0cz86IFVzZVRpbWVBZ29Vbml0PFVuaXROYW1lcz5bXTtcbn1cbmludGVyZmFjZSBVc2VUaW1lQWdvT3B0aW9uczxDb250cm9scyBleHRlbmRzIGJvb2xlYW4sIFVuaXROYW1lcyBleHRlbmRzIHN0cmluZyA9IFVzZVRpbWVBZ29Vbml0TmFtZXNEZWZhdWx0PiBleHRlbmRzIEZvcm1hdFRpbWVBZ29PcHRpb25zPFVuaXROYW1lcz4sIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIC8qKlxuICAgKiBFeHBvc2UgbW9yZSBjb250cm9sc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29udHJvbHM/OiBDb250cm9scztcbiAgLyoqXG4gICAqIEludGVydmFscyB0byB1cGRhdGUsIHNldCAwIHRvIGRpc2FibGUgYXV0byB1cGRhdGVcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBgc2NoZWR1bGVyYCBvcHRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCAzMF8wMDBcbiAgICovXG4gIHVwZGF0ZUludGVydmFsPzogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZVRpbWVBZ29Vbml0PFVuaXQgZXh0ZW5kcyBzdHJpbmcgPSBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdD4ge1xuICBtYXg6IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbmFtZTogVW5pdDtcbn1cbnR5cGUgVXNlVGltZUFnb1JldHVybjxDb250cm9scyBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZT4gPSBDb250cm9scyBleHRlbmRzIHRydWUgPyB7XG4gIHRpbWVBZ286IENvbXB1dGVkUmVmPHN0cmluZz47XG59ICYgUGF1c2FibGUgOiBDb21wdXRlZFJlZjxzdHJpbmc+O1xuLyoqXG4gKiBSZWFjdGl2ZSB0aW1lIGFnbyBmb3JtYXR0ZXIuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlVGltZUFnb1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGltZUFnbzxVbml0TmFtZXMgZXh0ZW5kcyBzdHJpbmcgPSBVc2VUaW1lQWdvVW5pdE5hbWVzRGVmYXVsdD4odGltZTogTWF5YmVSZWZPckdldHRlcjxEYXRlIHwgbnVtYmVyIHwgc3RyaW5nPiwgb3B0aW9ucz86IFVzZVRpbWVBZ29PcHRpb25zPGZhbHNlLCBVbml0TmFtZXM+KTogVXNlVGltZUFnb1JldHVybjxmYWxzZT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpbWVBZ288VW5pdE5hbWVzIGV4dGVuZHMgc3RyaW5nID0gVXNlVGltZUFnb1VuaXROYW1lc0RlZmF1bHQ+KHRpbWU6IE1heWJlUmVmT3JHZXR0ZXI8RGF0ZSB8IG51bWJlciB8IHN0cmluZz4sIG9wdGlvbnM6IFVzZVRpbWVBZ29PcHRpb25zPHRydWUsIFVuaXROYW1lcz4pOiBVc2VUaW1lQWdvUmV0dXJuPHRydWU+O1xuZGVjbGFyZSBmdW5jdGlvbiBmb3JtYXRUaW1lQWdvPFVuaXROYW1lcyBleHRlbmRzIHN0cmluZyA9IFVzZVRpbWVBZ29Vbml0TmFtZXNEZWZhdWx0Pihmcm9tOiBEYXRlLCBvcHRpb25zPzogRm9ybWF0VGltZUFnb09wdGlvbnM8VW5pdE5hbWVzPiwgbm93PzogRGF0ZSB8IG51bWJlcik6IHN0cmluZztcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRpbWVBZ29JbnRsL2luZGV4LmQudHNcbnR5cGUgTG9jYWxlID0gSW50bC5Vbmljb2RlQkNQNDdMb2NhbGVJZGVudGlmaWVyIHwgSW50bC5Mb2NhbGU7XG5pbnRlcmZhY2UgRm9ybWF0VGltZUFnb0ludGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhbGUgdG8gZm9ybWF0IHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9SZWxhdGl2ZVRpbWVGb3JtYXQvUmVsYXRpdmVUaW1lRm9ybWF0I2xvY2FsZXNcbiAgICovXG4gIGxvY2FsZT86IExvY2FsZTtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9SZWxhdGl2ZVRpbWVGb3JtYXQvUmVsYXRpdmVUaW1lRm9ybWF0I29wdGlvbnNcbiAgICovXG4gIHJlbGF0aXZlVGltZUZvcm1hdE9wdGlvbnM/OiBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdE9wdGlvbnM7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYmV0d2VlbiBwYXJ0cy5cbiAgICpcbiAgICogSWdub3JlZCBpZiBgam9pblBhcnRzYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW5zZXJ0U3BhY2U/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGZ1bmN0aW9uIHRvIGpvaW4gdGhlIHBhcnRzIHJldHVybmVkIGJ5IGBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzYC5cbiAgICpcbiAgICogSWYgcHJvdmlkZWQsIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGpvaW4gbG9naWMuXG4gICAqL1xuICBqb2luUGFydHM/OiAocGFydHM6IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0UGFydFtdLCBsb2NhbGU/OiBJbnRsLlVuaWNvZGVCQ1A0N0xvY2FsZUlkZW50aWZpZXIgfCBJbnRsLkxvY2FsZSkgPT4gc3RyaW5nO1xuICAvKipcbiAgICogQ3VzdG9tIHVuaXRzXG4gICAqL1xuICB1bml0cz86IFRpbWVBZ29Vbml0W107XG59XG5pbnRlcmZhY2UgVXNlVGltZUFnb0ludGxPcHRpb25zPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbj4gZXh0ZW5kcyBGb3JtYXRUaW1lQWdvSW50bE9wdGlvbnMsIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIC8qKlxuICAgKiBFeHBvc2UgbW9yZSBjb250cm9scyBhbmQgdGhlIHJhdyBgcGFydHNgIHJlc3VsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNvbnRyb2xzPzogQ29udHJvbHM7XG4gIC8qKlxuICAgKiBVcGRhdGUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLCBzZXQgMCB0byBkaXNhYmxlIGF1dG8gdXBkYXRlXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgMzBfMDAwXG4gICAqL1xuICB1cGRhdGVJbnRlcnZhbD86IG51bWJlcjtcbn1cbnR5cGUgVXNlVGltZUFnb1JldHVybiQxPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlPiA9IENvbnRyb2xzIGV4dGVuZHMgdHJ1ZSA/IHtcbiAgdGltZUFnb0ludGw6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gIHBhcnRzOiBDb21wdXRlZFJlZjxJbnRsLlJlbGF0aXZlVGltZUZvcm1hdFBhcnRbXT47XG59ICYgUGF1c2FibGUgOiBDb21wdXRlZFJlZjxzdHJpbmc+O1xuaW50ZXJmYWNlIFRpbWVBZ29Vbml0IHtcbiAgbmFtZTogSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXRVbml0O1xuICBtczogbnVtYmVyO1xufVxuLyoqXG4gKiBBIHJlYWN0aXZlIHdyYXBwZXIgZm9yIGBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdGAuXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVGltZUFnb0ludGwodGltZTogTWF5YmVSZWZPckdldHRlcjxEYXRlIHwgbnVtYmVyIHwgc3RyaW5nPiwgb3B0aW9ucz86IFVzZVRpbWVBZ29JbnRsT3B0aW9uczxmYWxzZT4pOiBVc2VUaW1lQWdvUmV0dXJuJDE8ZmFsc2U+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUaW1lQWdvSW50bCh0aW1lOiBNYXliZVJlZk9yR2V0dGVyPERhdGUgfCBudW1iZXIgfCBzdHJpbmc+LCBvcHRpb25zOiBVc2VUaW1lQWdvSW50bE9wdGlvbnM8dHJ1ZT4pOiBVc2VUaW1lQWdvUmV0dXJuJDE8dHJ1ZT47XG4vKipcbiAqIE5vbi1yZWFjdGl2ZSB2ZXJzaW9uIG9mIHVzZVRpbWVBZ29JbnRsXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gZm9ybWF0VGltZUFnb0ludGwoZnJvbTogRGF0ZSwgb3B0aW9ucz86IEZvcm1hdFRpbWVBZ29JbnRsT3B0aW9ucywgbm93PzogRGF0ZSB8IG51bWJlcik6IHN0cmluZztcbi8qKlxuICogRm9ybWF0IHBhcnRzIGludG8gYSBzdHJpbmdcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiBmb3JtYXRUaW1lQWdvSW50bFBhcnRzKHBhcnRzOiBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdFBhcnRbXSwgb3B0aW9ucz86IEZvcm1hdFRpbWVBZ29JbnRsT3B0aW9ucyk6IHN0cmluZztcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVRpbWVvdXRQb2xsL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VUaW1lb3V0UG9sbE9wdGlvbnMge1xuICAvKipcbiAgICogU3RhcnQgdGhlIHRpbWVyIGltbWVkaWF0ZWx5XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFeGVjdXRlIHRoZSBjYWxsYmFjayBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIGByZXN1bWVgXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbW1lZGlhdGVDYWxsYmFjaz86IGJvb2xlYW47XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpbWVvdXRQb2xsKGZuOiAoKSA9PiBBd2FpdGFibGU8dm9pZD4sIGludGVydmFsOiBNYXliZVJlZk9yR2V0dGVyPG51bWJlcj4sIG9wdGlvbnM/OiBVc2VUaW1lb3V0Rm5PcHRpb25zKTogUGF1c2FibGU7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUaW1lc3RhbXAvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVRpbWVzdGFtcE9wdGlvbnM8Q29udHJvbHMgZXh0ZW5kcyBib29sZWFuPiBleHRlbmRzIENvbmZpZ3VyYWJsZVNjaGVkdWxlciB7XG4gIC8qKlxuICAgKiBFeHBvc2UgbW9yZSBjb250cm9sc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29udHJvbHM/OiBDb250cm9scztcbiAgLyoqXG4gICAqIE9mZnNldCB2YWx1ZSBhZGRpbmcgdG8gdGhlIHZhbHVlXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIG9mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdGltZXN0YW1wIGltbWVkaWF0ZWx5XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVwZGF0ZSBpbnRlcnZhbCwgb3IgdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IHJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgKi9cbiAgaW50ZXJ2YWw/OiAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyB8IG51bWJlcjtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG9uIGVhY2ggdXBkYXRlXG4gICAqL1xuICBjYWxsYmFjaz86ICh0aW1lc3RhbXA6IG51bWJlcikgPT4gdm9pZDtcbn1cbnR5cGUgVXNlVGltZXN0YW1wUmV0dXJuPENvbnRyb2xzIGV4dGVuZHMgYm9vbGVhbj4gPSBDb250cm9scyBleHRlbmRzIHRydWUgPyAoe1xuICB0aW1lc3RhbXA6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbn0gJiBQYXVzYWJsZSkgOiBTaGFsbG93UmVmPG51bWJlcj47XG4vKipcbiAqIFJlYWN0aXZlIGN1cnJlbnQgdGltZXN0YW1wLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVRpbWVzdGFtcFxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUaW1lc3RhbXAob3B0aW9ucz86IFVzZVRpbWVzdGFtcE9wdGlvbnM8ZmFsc2U+KTogU2hhbGxvd1JlZjxudW1iZXI+O1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VUaW1lc3RhbXAob3B0aW9uczogVXNlVGltZXN0YW1wT3B0aW9uczx0cnVlPik6IHtcbiAgdGltZXN0YW1wOiBTaGFsbG93UmVmPG51bWJlcj47XG59ICYgUGF1c2FibGU7XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUaXRsZS9pbmRleC5kLnRzXG50eXBlIFVzZVRpdGxlT3B0aW9uc0Jhc2UgPSB7XG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCB0aXRsZSB3aGVuIHVubW91bnRlZFxuICAgKiBAcGFyYW0gb3JpZ2luVGl0bGUgb3JpZ2luYWwgdGl0bGVcbiAgICogQHJldHVybnMgcmVzdG9yZWQgdGl0bGVcbiAgICovXG4gIHJlc3RvcmVPblVubW91bnQ/OiBmYWxzZSB8ICgob3JpZ2luYWxUaXRsZTogc3RyaW5nLCBjdXJyZW50VGl0bGU6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk7XG59ICYgKHtcbiAgLyoqXG4gICAqIE9ic2VydmUgYGRvY3VtZW50LnRpdGxlYCBjaGFuZ2VzIHVzaW5nIE11dGF0aW9uT2JzZXJ2ZVxuICAgKiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIGB0aXRsZVRlbXBsYXRlYCBvcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBvYnNlcnZlPzogYm9vbGVhbjtcbn0gfCB7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgc3RyaW5nIHRvIHBhcnNlIHRoZSB0aXRsZSAoZS5nLiwgJyVzIHwgTXkgV2Vic2l0ZScpXG4gICAqIENhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggYG9ic2VydmVgIG9wdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgJyVzJ1xuICAgKi9cbiAgdGl0bGVUZW1wbGF0ZT86IE1heWJlUmVmPHN0cmluZz4gfCAoKHRpdGxlOiBzdHJpbmcpID0+IHN0cmluZyk7XG59KTtcbnR5cGUgVXNlVGl0bGVPcHRpb25zID0gQ29uZmlndXJhYmxlRG9jdW1lbnQgJiBVc2VUaXRsZU9wdGlvbnNCYXNlO1xudHlwZSBVc2VUaXRsZVJldHVybiA9IENvbXB1dGVkUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IHwgUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+O1xuLyoqXG4gKiBSZWFjdGl2ZSBkb2N1bWVudCB0aXRsZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VUaXRsZVxuICogQHBhcmFtIG5ld1RpdGxlXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQGRlc2NyaXB0aW9uIEl0J3Mgbm90IFNTUiBjb21wYXRpYmxlLiBZb3VyIHZhbHVlIHdpbGwgYmUgYXBwbGllZCBvbmx5IG9uIGNsaWVudC1zaWRlLlxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpdGxlKG5ld1RpdGxlOiBSZWFkb25seVJlZk9yR2V0dGVyPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlVGl0bGVPcHRpb25zKTogQ29tcHV0ZWRSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRpdGxlKG5ld1RpdGxlPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4sIG9wdGlvbnM/OiBVc2VUaXRsZU9wdGlvbnMpOiBSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VUcmFuc2l0aW9uL2luZGV4LmQudHNcbi8qKlxuICogQ3ViaWMgYmV6aWVyIHBvaW50c1xuICovXG50eXBlIEN1YmljQmV6aWVyUG9pbnRzID0gW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4vKipcbiAqIEVhc2luZyBmdW5jdGlvblxuICovXG50eXBlIEVhc2luZ0Z1bmN0aW9uID0gKG46IG51bWJlcikgPT4gbnVtYmVyO1xuLyoqXG4gKiBJbnRlcnBvbGF0aW9uIGZ1bmN0aW9uXG4gKi9cbnR5cGUgSW50ZXJwb2xhdGlvbkZ1bmN0aW9uPFQ+ID0gKGZyb206IFQsIHRvOiBULCB0OiBudW1iZXIpID0+IFQ7XG4vKipcbiAqIFRyYW5zaXRpb24gb3B0aW9uc1xuICovXG5pbnRlcmZhY2UgVHJhbnNpdGlvbk9wdGlvbnM8VD4gZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogTWFudWFsbHkgYWJvcnQgYSB0cmFuc2l0aW9uXG4gICAqL1xuICBhYm9ydD86ICgpID0+IGFueTtcbiAgLyoqXG4gICAqIFRyYW5zaXRpb24gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gICAqL1xuICBkdXJhdGlvbj86IE1heWJlUmVmPG51bWJlcj47XG4gIC8qKlxuICAgKiBFYXNpbmcgZnVuY3Rpb24gb3IgY3ViaWMgYmV6aWVyIHBvaW50cyB0byBjYWxjdWxhdGUgdHJhbnNpdGlvbiBwcm9ncmVzc1xuICAgKi9cbiAgZWFzaW5nPzogTWF5YmVSZWY8RWFzaW5nRnVuY3Rpb24gfCBDdWJpY0JlemllclBvaW50cz47XG4gIC8qKlxuICAgKiBDdXN0b20gaW50ZXJwb2xhdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgaW50ZXJwb2xhdGlvbj86IEludGVycG9sYXRpb25GdW5jdGlvbjxUPjtcbiAgLyoqXG4gICAqIEVhc2luZyBmdW5jdGlvbiBvciBjdWJpYyBiZXppZXIgcG9pbnRzIHRvIGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHByb2dyZXNzXG4gICAqIEBkZXByZWNhdGVkIFRoZSBgdHJhbnNpdGlvbmAgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBgZWFzaW5nYCBpbnN0ZWFkLlxuICAgKi9cbiAgdHJhbnNpdGlvbj86IE1heWJlUmVmPEVhc2luZ0Z1bmN0aW9uIHwgQ3ViaWNCZXppZXJQb2ludHM+O1xufVxuaW50ZXJmYWNlIFVzZVRyYW5zaXRpb25PcHRpb25zPFQ+IGV4dGVuZHMgVHJhbnNpdGlvbk9wdGlvbnM8VD4ge1xuICAvKipcbiAgICogTWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHN0YXJ0aW5nIHRyYW5zaXRpb25cbiAgICovXG4gIGRlbGF5PzogTWF5YmVSZWY8bnVtYmVyPjtcbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSB0cmFuc2l0aW9uXG4gICAqL1xuICBkaXNhYmxlZD86IE1heWJlUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gZXhlY3V0ZSBhZnRlciB0cmFuc2l0aW9uIGZpbmlzaGVzXG4gICAqL1xuICBvbkZpbmlzaGVkPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGV4ZWN1dGUgYWZ0ZXIgdHJhbnNpdGlvbiBzdGFydHNcbiAgICovXG4gIG9uU3RhcnRlZD86ICgpID0+IHZvaWQ7XG59XG5kZWNsYXJlIGNvbnN0IF9UcmFuc2l0aW9uUHJlc2V0czoge1xuICByZWFkb25seSBlYXNlSW5TaW5lOiByZWFkb25seSBbMC4xMiwgMCwgMC4zOSwgMF07XG4gIHJlYWRvbmx5IGVhc2VPdXRTaW5lOiByZWFkb25seSBbMC42MSwgMSwgMC44OCwgMV07XG4gIHJlYWRvbmx5IGVhc2VJbk91dFNpbmU6IHJlYWRvbmx5IFswLjM3LCAwLCAwLjYzLCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluUXVhZDogcmVhZG9ubHkgWzAuMTEsIDAsIDAuNSwgMF07XG4gIHJlYWRvbmx5IGVhc2VPdXRRdWFkOiByZWFkb25seSBbMC41LCAxLCAwLjg5LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0UXVhZDogcmVhZG9ubHkgWzAuNDUsIDAsIDAuNTUsIDFdO1xuICByZWFkb25seSBlYXNlSW5DdWJpYzogcmVhZG9ubHkgWzAuMzIsIDAsIDAuNjcsIDBdO1xuICByZWFkb25seSBlYXNlT3V0Q3ViaWM6IHJlYWRvbmx5IFswLjMzLCAxLCAwLjY4LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0Q3ViaWM6IHJlYWRvbmx5IFswLjY1LCAwLCAwLjM1LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluUXVhcnQ6IHJlYWRvbmx5IFswLjUsIDAsIDAuNzUsIDBdO1xuICByZWFkb25seSBlYXNlT3V0UXVhcnQ6IHJlYWRvbmx5IFswLjI1LCAxLCAwLjUsIDFdO1xuICByZWFkb25seSBlYXNlSW5PdXRRdWFydDogcmVhZG9ubHkgWzAuNzYsIDAsIDAuMjQsIDFdO1xuICByZWFkb25seSBlYXNlSW5RdWludDogcmVhZG9ubHkgWzAuNjQsIDAsIDAuNzgsIDBdO1xuICByZWFkb25seSBlYXNlT3V0UXVpbnQ6IHJlYWRvbmx5IFswLjIyLCAxLCAwLjM2LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0UXVpbnQ6IHJlYWRvbmx5IFswLjgzLCAwLCAwLjE3LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluRXhwbzogcmVhZG9ubHkgWzAuNywgMCwgMC44NCwgMF07XG4gIHJlYWRvbmx5IGVhc2VPdXRFeHBvOiByZWFkb25seSBbMC4xNiwgMSwgMC4zLCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0RXhwbzogcmVhZG9ubHkgWzAuODcsIDAsIDAuMTMsIDFdO1xuICByZWFkb25seSBlYXNlSW5DaXJjOiByZWFkb25seSBbMC41NSwgMCwgMSwgMC40NV07XG4gIHJlYWRvbmx5IGVhc2VPdXRDaXJjOiByZWFkb25seSBbMCwgMC41NSwgMC40NSwgMV07XG4gIHJlYWRvbmx5IGVhc2VJbk91dENpcmM6IHJlYWRvbmx5IFswLjg1LCAwLCAwLjE1LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluQmFjazogcmVhZG9ubHkgWzAuMzYsIDAsIDAuNjYsIC0wLjU2XTtcbiAgcmVhZG9ubHkgZWFzZU91dEJhY2s6IHJlYWRvbmx5IFswLjM0LCAxLjU2LCAwLjY0LCAxXTtcbiAgcmVhZG9ubHkgZWFzZUluT3V0QmFjazogcmVhZG9ubHkgWzAuNjgsIC0wLjYsIDAuMzIsIDEuNl07XG59O1xuLyoqXG4gKiBDb21tb24gdHJhbnNpdGlvbnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZWFzaW5ncy5uZXRcbiAqL1xuZGVjbGFyZSBjb25zdCBUcmFuc2l0aW9uUHJlc2V0czogUmVjb3JkPGtleW9mIHR5cGVvZiBfVHJhbnNpdGlvblByZXNldHMsIEN1YmljQmV6aWVyUG9pbnRzPiAmIHtcbiAgbGluZWFyOiBFYXNpbmdGdW5jdGlvbjtcbn07XG4vKipcbiAqIFRyYW5zaXRpb24gZnJvbSBvbmUgdmFsdWUgdG8gYW5vdGhlci5cbiAqXG4gKiBAcGFyYW0gc291cmNlXG4gKiBAcGFyYW0gZnJvbVxuICogQHBhcmFtIHRvXG4gKiBAcGFyYW0gb3B0aW9uc1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHRyYW5zaXRpb248VD4oc291cmNlOiBSZWY8VD4sIGZyb206IE1heWJlUmVmT3JHZXR0ZXI8VD4sIHRvOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVHJhbnNpdGlvbk9wdGlvbnM8VD4pOiBQcm9taXNlTGlrZTx2b2lkPjtcbi8qKlxuICogVHJhbnNpdGlvbiBmcm9tIG9uZSB2YWx1ZSB0byBhbm90aGVyLlxuICogQGRlcHJlY2F0ZWQgVGhlIGBleGVjdXRlVHJhbnNpdGlvbmAgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGB0cmFuc2l0aW9uYCBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSBzb3VyY2VcbiAqIEBwYXJhbSBmcm9tXG4gKiBAcGFyYW0gdG9cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gZXhlY3V0ZVRyYW5zaXRpb248VD4oc291cmNlOiBSZWY8VD4sIGZyb206IE1heWJlUmVmT3JHZXR0ZXI8VD4sIHRvOiBNYXliZVJlZk9yR2V0dGVyPFQ+LCBvcHRpb25zPzogVHJhbnNpdGlvbk9wdGlvbnM8VD4pOiBQcm9taXNlTGlrZTx2b2lkPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVHJhbnNpdGlvbjxUIGV4dGVuZHMgTWF5YmVSZWZPckdldHRlcjxudW1iZXI+W10+KHNvdXJjZTogWy4uLlRdLCBvcHRpb25zPzogVXNlVHJhbnNpdGlvbk9wdGlvbnM8VD4pOiBDb21wdXRlZFJlZjx7IFtLIGluIGtleW9mIFRdOiBudW1iZXIgfT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVRyYW5zaXRpb248VCBleHRlbmRzIE1heWJlUmVmT3JHZXR0ZXI8bnVtYmVyW10+Pihzb3VyY2U6IFQsIG9wdGlvbnM/OiBVc2VUcmFuc2l0aW9uT3B0aW9uczxUPik6IENvbXB1dGVkUmVmPG51bWJlcltdPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVHJhbnNpdGlvbjxUPihzb3VyY2U6IE1heWJlUmVmT3JHZXR0ZXI8VD4sIG9wdGlvbnM/OiBVc2VUcmFuc2l0aW9uT3B0aW9uczxUPik6IENvbXB1dGVkUmVmPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVXJsU2VhcmNoUGFyYW1zL2luZGV4LmQudHNcbnR5cGUgVXJsUGFyYW1zID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCBzdHJpbmc+O1xuaW50ZXJmYWNlIFVzZVVybFNlYXJjaFBhcmFtc09wdGlvbnM8VD4gZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICAvKipcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVtb3ZlTnVsbGlzaFZhbHVlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVtb3ZlRmFsc3lWYWx1ZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IFQ7XG4gIC8qKlxuICAgKiBXcml0ZSBiYWNrIHRvIGB3aW5kb3cuaGlzdG9yeWAgYXV0b21hdGljYWxseVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB3cml0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXcml0ZSBtb2RlIGZvciBgd2luZG93Lmhpc3RvcnlgIHdoZW4gYHdyaXRlYCBpcyBlbmFibGVkXG4gICAqIC0gYHJlcGxhY2VgOiByZXBsYWNlIHRoZSBjdXJyZW50IGhpc3RvcnkgZW50cnlcbiAgICogLSBgcHVzaGA6IHB1c2ggYSBuZXcgaGlzdG9yeSBlbnRyeVxuICAgKiBAZGVmYXVsdCAncmVwbGFjZSdcbiAgICovXG4gIHdyaXRlTW9kZT86ICdyZXBsYWNlJyB8ICdwdXNoJztcbiAgLyoqXG4gICAqIEN1c3RvbSBmdW5jdGlvbiB0byBzZXJpYWxpemUgVVJMIHBhcmFtZXRlcnNcbiAgICogV2hlbiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBVUkxTZWFyY2hQYXJhbXMudG9TdHJpbmcoKVxuICAgKiBAcGFyYW0gcGFyYW1zIFRoZSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0IHRvIHNlcmlhbGl6ZVxuICAgKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBxdWVyeSBzdHJpbmcgKHNob3VsZCBub3QgaW5jbHVkZSB0aGUgbGVhZGluZyAnPycgb3IgJyMnKVxuICAgKi9cbiAgc3RyaW5naWZ5PzogKHBhcmFtczogVVJMU2VhcmNoUGFyYW1zKSA9PiBzdHJpbmc7XG59XG4vKipcbiAqIFJlYWN0aXZlIFVSTFNlYXJjaFBhcmFtc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVVybFNlYXJjaFBhcmFtc1xuICogQHBhcmFtIG1vZGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVXJsU2VhcmNoUGFyYW1zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gVXJsUGFyYW1zPihtb2RlPzogJ2hpc3RvcnknIHwgJ2hhc2gnIHwgJ2hhc2gtcGFyYW1zJywgb3B0aW9ucz86IFVzZVVybFNlYXJjaFBhcmFtc09wdGlvbnM8VD4pOiBUO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVXNlck1lZGlhL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VVc2VyTWVkaWFPcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlTmF2aWdhdG9yIHtcbiAgLyoqXG4gICAqIElmIHRoZSBzdHJlYW0gaXMgZW5hYmxlZFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlZD86IE1heWJlUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogUmVjcmVhdGUgc3RyZWFtIHdoZW4gZGV2aWNlSWRzIG9yIGNvbnN0cmFpbnRzIGNoYW5nZWRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1N3aXRjaD86IE1heWJlUmVmPGJvb2xlYW4+O1xuICAvKipcbiAgICogTWVkaWFTdHJlYW1Db25zdHJhaW50cyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXF1ZXN0ZWQgTWVkaWFTdHJlYW1cbiAgICogSWYgcHJvdmlkZWQsIHRoZSBjb25zdHJhaW50cyB3aWxsIG92ZXJyaWRlIHZpZGVvRGV2aWNlSWQgYW5kIGF1ZGlvRGV2aWNlSWRcbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbnN0cmFpbnRzPzogTWF5YmVSZWY8TWVkaWFTdHJlYW1Db25zdHJhaW50cz47XG59XG5pbnRlcmZhY2UgVXNlVXNlck1lZGlhUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBzdHJlYW06IFJlZjxNZWRpYVN0cmVhbSB8IHVuZGVmaW5lZD47XG4gIHN0YXJ0OiAoKSA9PiBQcm9taXNlPE1lZGlhU3RyZWFtIHwgdW5kZWZpbmVkPjtcbiAgc3RvcDogKCkgPT4gdm9pZDtcbiAgcmVzdGFydDogKCkgPT4gUHJvbWlzZTxNZWRpYVN0cmVhbSB8IHVuZGVmaW5lZD47XG4gIGNvbnN0cmFpbnRzOiBSZWY8TWVkaWFTdHJlYW1Db25zdHJhaW50cyB8IHVuZGVmaW5lZD47XG4gIGVuYWJsZWQ6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4gIGF1dG9Td2l0Y2g6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG59XG4vKipcbiAqIFJlYWN0aXZlIGBtZWRpYURldmljZXMuZ2V0VXNlck1lZGlhYCBzdHJlYW1pbmdcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VVc2VyTWVkaWFcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVXNlck1lZGlhKG9wdGlvbnM/OiBVc2VVc2VyTWVkaWFPcHRpb25zKTogVXNlVXNlck1lZGlhUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlVk1vZGVsL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VWTW9kZWxPcHRpb25zPFQsIFBhc3NpdmUgZXh0ZW5kcyBib29sZWFuID0gZmFsc2U+IHtcbiAgLyoqXG4gICAqIFdoZW4gcGFzc2l2ZSBpcyBzZXQgdG8gYHRydWVgLCBpdCB3aWxsIHVzZSBgd2F0Y2hgIHRvIHN5bmMgd2l0aCBwcm9wcyBhbmQgcmVmLlxuICAgKiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGB2LW1vZGVsYCBvciBgLnN5bmNgIHRvIHdvcmsuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwYXNzaXZlPzogUGFzc2l2ZTtcbiAgLyoqXG4gICAqIFdoZW4gZXZlbnROYW1lIGlzIHNldCwgaXQncyB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBlbWl0IGV2ZW50IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgZXZlbnROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQXR0ZW1wdGluZyB0byBjaGVjayBmb3IgY2hhbmdlcyBvZiBwcm9wZXJ0aWVzIGluIGEgZGVlcGx5IG5lc3RlZCBvYmplY3Qgb3IgYXJyYXkuXG4gICAqIEFwcGx5IG9ubHkgd2hlbiBgcGFzc2l2ZWAgb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWBcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlZXA/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmaW5pbmcgZGVmYXVsdCB2YWx1ZSBmb3IgcmV0dXJuIHJlZiB3aGVuIG5vIHZhbHVlIGlzIHBhc3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBUO1xuICAvKipcbiAgICogQ2xvbmUgdGhlIHByb3BzLlxuICAgKiBBY2NlcHRzIGEgY3VzdG9tIGNsb25lIGZ1bmN0aW9uLlxuICAgKiBXaGVuIHNldHRpbmcgdG8gYHRydWVgLCBpdCB3aWxsIHVzZSBgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpYCB0byBjbG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb25lPzogYm9vbGVhbiB8IENsb25lRm48VD47XG4gIC8qKlxuICAgKiBUaGUgaG9vayBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgZW1pdCBldmVudCBjYW4gYmUgdXNlZCBmb3IgZm9ybSB2YWxpZGF0aW9uLlxuICAgKiBpZiBmYWxzZSBpcyByZXR1cm5lZCwgdGhlIGVtaXQgZXZlbnQgd2lsbCBub3QgYmUgdHJpZ2dlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHNob3VsZEVtaXQ/OiAodjogVCkgPT4gYm9vbGVhbjtcbn1cbi8qKlxuICogU2hvcnRoYW5kIGZvciB2LW1vZGVsIGJpbmRpbmcsIHByb3BzICsgZW1pdCAtPiByZWZcbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VWTW9kZWxcbiAqIEBwYXJhbSBwcm9wc1xuICogQHBhcmFtIGtleSAoZGVmYXVsdCAnbW9kZWxWYWx1ZScpXG4gKiBAcGFyYW0gZW1pdFxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVZNb2RlbDxQJDEgZXh0ZW5kcyBvYmplY3QsIEskMSBleHRlbmRzIGtleW9mIFAkMSwgTmFtZSBleHRlbmRzIHN0cmluZz4ocHJvcHM6IFAkMSwga2V5PzogSyQxLCBlbWl0PzogKG5hbWU6IE5hbWUsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLCBvcHRpb25zPzogVXNlVk1vZGVsT3B0aW9uczxQJDFbSyQxXSwgZmFsc2U+KTogV3JpdGFibGVDb21wdXRlZFJlZjxQJDFbSyQxXT47XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVZNb2RlbDxQJDEgZXh0ZW5kcyBvYmplY3QsIEskMSBleHRlbmRzIGtleW9mIFAkMSwgTmFtZSBleHRlbmRzIHN0cmluZz4ocHJvcHM6IFAkMSwga2V5PzogSyQxLCBlbWl0PzogKG5hbWU6IE5hbWUsIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLCBvcHRpb25zPzogVXNlVk1vZGVsT3B0aW9uczxQJDFbSyQxXSwgdHJ1ZT4pOiBSZWY8VW53cmFwUmVmPFAkMVtLJDFdPj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VWTW9kZWxzL2luZGV4LmQudHNcbi8qKlxuICogU2hvcnRoYW5kIGZvciBwcm9wcyB2LW1vZGVsIGJpbmRpbmcuIFRoaW5rIGxpa2UgYHRvUmVmcyhwcm9wcylgIGJ1dCBjaGFuZ2VzIHdpbGwgYWxzbyBlbWl0IG91dC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VWTW9kZWxzXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEBwYXJhbSBlbWl0XG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlVk1vZGVsczxQJDEgZXh0ZW5kcyBvYmplY3QsIE5hbWUgZXh0ZW5kcyBzdHJpbmc+KHByb3BzOiBQJDEsIGVtaXQ/OiAobmFtZTogTmFtZSwgLi4uYXJnczogYW55W10pID0+IHZvaWQsIG9wdGlvbnM/OiBVc2VWTW9kZWxPcHRpb25zPGFueSwgdHJ1ZT4pOiBUb1JlZnM8UCQxPjtcbmRlY2xhcmUgZnVuY3Rpb24gdXNlVk1vZGVsczxQJDEgZXh0ZW5kcyBvYmplY3QsIE5hbWUgZXh0ZW5kcyBzdHJpbmc+KHByb3BzOiBQJDEsIGVtaXQ/OiAobmFtZTogTmFtZSwgLi4uYXJnczogYW55W10pID0+IHZvaWQsIG9wdGlvbnM/OiBVc2VWTW9kZWxPcHRpb25zPGFueSwgZmFsc2U+KTogVG9SZWZzPFAkMT47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VWaWJyYXRlL2luZGV4LmQudHNcbmludGVyZmFjZSBVc2VWaWJyYXRlT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZU5hdmlnYXRvciwgQ29uZmlndXJhYmxlU2NoZWR1bGVyIHtcbiAgLyoqXG4gICAqXG4gICAqIFZpYnJhdGlvbiBQYXR0ZXJuXG4gICAqXG4gICAqIEFuIGFycmF5IG9mIHZhbHVlcyBkZXNjcmliZXMgYWx0ZXJuYXRpbmcgcGVyaW9kcyBpbiB3aGljaCB0aGVcbiAgICogZGV2aWNlIGlzIHZpYnJhdGluZyBhbmQgbm90IHZpYnJhdGluZy4gRWFjaCB2YWx1ZSBpbiB0aGUgYXJyYXlcbiAgICogaXMgY29udmVydGVkIHRvIGFuIGludGVnZXIsIHRoZW4gaW50ZXJwcmV0ZWQgYWx0ZXJuYXRlbHkgYXNcbiAgICogdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhlIGRldmljZSBzaG91bGQgdmlicmF0ZSBhbmQgdGhlXG4gICAqIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaXQgc2hvdWxkIG5vdCBiZSB2aWJyYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICpcbiAgICovXG4gIHBhdHRlcm4/OiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxudW1iZXI+PjtcbiAgLyoqXG4gICAqIEludGVydmFsIHRvIHJ1biBhIHBlcnNpc3RlbnQgdmlicmF0aW9uLCBpbiBtc1xuICAgKlxuICAgKiBQYXNzIGAwYCB0byBkaXNhYmxlXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgYHNjaGVkdWxlcmAgb3B0aW9uIGluc3RlYWRcbiAgICogQGRlZmF1bHQgMFxuICAgKlxuICAgKi9cbiAgaW50ZXJ2YWw6IG51bWJlcjtcbn1cbmludGVyZmFjZSBVc2VWaWJyYXRlUmV0dXJuIGV4dGVuZHMgU3VwcG9ydGFibGUge1xuICBwYXR0ZXJuOiBNYXliZVJlZk9yR2V0dGVyPEFycmF5YWJsZTxudW1iZXI+PjtcbiAgaW50ZXJ2YWxDb250cm9scz86IFBhdXNhYmxlO1xuICB2aWJyYXRlOiAocGF0dGVybj86IEFycmF5YWJsZTxudW1iZXI+KSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufVxuLyoqXG4gKiBSZWFjdGl2ZSB2aWJyYXRlXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlVmlicmF0ZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVmlicmF0aW9uX0FQSVxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAX19OT19TSURFX0VGRkVDVFNfX1xuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVZpYnJhdGUob3B0aW9ucz86IFVzZVZpYnJhdGVPcHRpb25zKTogVXNlVmlicmF0ZVJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVZpcnR1YWxMaXN0L2luZGV4LmQudHNcbnR5cGUgVXNlVmlydHVhbExpc3RJdGVtU2l6ZSA9IG51bWJlciB8ICgoaW5kZXg6IG51bWJlcikgPT4gbnVtYmVyKTtcbmludGVyZmFjZSBVc2VIb3Jpem9udGFsVmlydHVhbExpc3RPcHRpb25zIGV4dGVuZHMgVXNlVmlydHVhbExpc3RPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiBpdGVtIHdpZHRoLCBhY2NlcHQgYSBwaXhlbCB2YWx1ZSBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgd2lkdGhcbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgaXRlbVdpZHRoOiBVc2VWaXJ0dWFsTGlzdEl0ZW1TaXplO1xufVxuaW50ZXJmYWNlIFVzZVZlcnRpY2FsVmlydHVhbExpc3RPcHRpb25zIGV4dGVuZHMgVXNlVmlydHVhbExpc3RPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiBpdGVtIGhlaWdodCwgYWNjZXB0IGEgcGl4ZWwgdmFsdWUgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGhlaWdodFxuICAgKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICBpdGVtSGVpZ2h0OiBVc2VWaXJ0dWFsTGlzdEl0ZW1TaXplO1xufVxuaW50ZXJmYWNlIFVzZVZpcnR1YWxMaXN0T3B0aW9uc0Jhc2Uge1xuICAvKipcbiAgICogdGhlIGV4dHJhIGJ1ZmZlciBpdGVtcyBvdXRzaWRlIG9mIHRoZSB2aWV3IGFyZWFcbiAgICpcbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgb3ZlcnNjYW4/OiBudW1iZXI7XG59XG50eXBlIFVzZVZpcnR1YWxMaXN0T3B0aW9ucyA9IFVzZUhvcml6b250YWxWaXJ0dWFsTGlzdE9wdGlvbnMgfCBVc2VWZXJ0aWNhbFZpcnR1YWxMaXN0T3B0aW9ucztcbmludGVyZmFjZSBVc2VWaXJ0dWFsTGlzdEl0ZW08VD4ge1xuICBkYXRhOiBUO1xuICBpbmRleDogbnVtYmVyO1xufVxuaW50ZXJmYWNlIFVzZVZpcnR1YWxMaXN0UmV0dXJuPFQ+IHtcbiAgbGlzdDogUmVmPFVzZVZpcnR1YWxMaXN0SXRlbTxUPltdPjtcbiAgc2Nyb2xsVG86IChpbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICBjb250YWluZXJQcm9wczoge1xuICAgIHJlZjogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD47XG4gICAgb25TY3JvbGw6ICgpID0+IHZvaWQ7XG4gICAgc3R5bGU6IFN0eWxlVmFsdWU7XG4gIH07XG4gIHdyYXBwZXJQcm9wczogQ29tcHV0ZWRSZWY8e1xuICAgIHN0eWxlOiB7XG4gICAgICB3aWR0aDogc3RyaW5nO1xuICAgICAgaGVpZ2h0OiBzdHJpbmc7XG4gICAgICBtYXJnaW5Ub3A6IHN0cmluZztcbiAgICB9IHwge1xuICAgICAgd2lkdGg6IHN0cmluZztcbiAgICAgIGhlaWdodDogc3RyaW5nO1xuICAgICAgbWFyZ2luTGVmdDogc3RyaW5nO1xuICAgICAgZGlzcGxheTogc3RyaW5nO1xuICAgIH07XG4gIH0+O1xufVxuLyoqXG4gKiBQbGVhc2UgY29uc2lkZXIgdXNpbmcgW2B2dWUtdmlydHVhbC1zY3JvbGxlcmBdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ba3J5dW0vdnVlLXZpcnR1YWwtc2Nyb2xsZXIpIGlmIHlvdSBhcmUgbG9va2luZyBmb3IgbW9yZSBmZWF0dXJlcy5cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VWaXJ0dWFsTGlzdDxUID0gYW55PihsaXN0OiBNYXliZVJlZjxyZWFkb25seSBUW10+LCBvcHRpb25zOiBVc2VWaXJ0dWFsTGlzdE9wdGlvbnMpOiBVc2VWaXJ0dWFsTGlzdFJldHVybjxUPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVdha2VMb2NrL2luZGV4LmQudHNcbnR5cGUgV2FrZUxvY2tUeXBlID0gJ3NjcmVlbic7XG5pbnRlcmZhY2UgV2FrZUxvY2tTZW50aW5lbCBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgdHlwZTogV2FrZUxvY2tUeXBlO1xuICByZWxlYXNlZDogYm9vbGVhbjtcbiAgcmVsZWFzZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbnR5cGUgVXNlV2FrZUxvY2tPcHRpb25zID0gQ29uZmlndXJhYmxlTmF2aWdhdG9yICYgQ29uZmlndXJhYmxlRG9jdW1lbnQ7XG5pbnRlcmZhY2UgVXNlV2FrZUxvY2tSZXR1cm4gZXh0ZW5kcyBTdXBwb3J0YWJsZSB7XG4gIHNlbnRpbmVsOiBTaGFsbG93UmVmPFdha2VMb2NrU2VudGluZWwgfCBudWxsPjtcbiAgaXNBY3RpdmU6IENvbXB1dGVkUmVmPGJvb2xlYW4+O1xuICByZXF1ZXN0OiAodHlwZTogV2FrZUxvY2tUeXBlKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBmb3JjZVJlcXVlc3Q6ICh0eXBlOiBXYWtlTG9ja1R5cGUpID0+IFByb21pc2U8dm9pZD47XG4gIHJlbGVhc2U6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG4vKipcbiAqIFJlYWN0aXZlIFNjcmVlbiBXYWtlIExvY2sgQVBJLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdha2VMb2NrXG4gKiBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2FrZUxvY2sob3B0aW9ucz86IFVzZVdha2VMb2NrT3B0aW9ucyk6IFVzZVdha2VMb2NrUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2ViTm90aWZpY2F0aW9uL2luZGV4LmQudHNcbmludGVyZmFjZSBXZWJOb3RpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSByZWFkLW9ubHkgcHJvcGVydHkgb2YgdGhlIE5vdGlmaWNhdGlvbiBpbnRlcmZhY2UgaW5kaWNhdGVzXG4gICAqIHRoZSB0aXRsZSBvZiB0aGUgbm90aWZpY2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBib2R5IHN0cmluZyBvZiB0aGUgbm90aWZpY2F0aW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Inc1xuICAgKiBvcHRpb25zIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIGJvZHk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBkaXJlY3Rpb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBhcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yJ3NcbiAgICogb3B0aW9ucyBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBkaXI/OiAnYXV0bycgfCAnbHRyJyB8ICdydGwnO1xuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIGNvZGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBhcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yJ3NcbiAgICogb3B0aW9ucyBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IERPTVN0cmluZ1xuICAgKi9cbiAgbGFuZz86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgbm90aWZpY2F0aW9uKGlmIGFueSkgYXMgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvcidzIG9wdGlvbnNcbiAgICogcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgdGFnPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgaW1hZ2UgdXNlZCBhcyBhbiBpY29uIG9mIHRoZSBub3RpZmljYXRpb24gYXMgc3BlY2lmaWVkXG4gICAqIGluIHRoZSBjb25zdHJ1Y3RvcidzIG9wdGlvbnMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB1c2VyIHNob3VsZCBiZSBub3RpZmllZCBhZnRlciBhIG5ldyBub3RpZmljYXRpb25cbiAgICogcmVwbGFjZXMgYW4gb2xkIG9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlbm90aWZ5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgYSBub3RpZmljYXRpb24gc2hvdWxkIHJlbWFpbiBhY3RpdmUgdW50aWwgdGhlXG4gICAqIHVzZXIgY2xpY2tzIG9yIGRpc21pc3NlcyBpdCwgcmF0aGVyIHRoYW4gY2xvc2luZyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZUludGVyYWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBzaWxlbnQgcmVhZC1vbmx5IHByb3BlcnR5IG9mIHRoZSBOb3RpZmljYXRpb24gaW50ZXJmYWNlIHNwZWNpZmllc1xuICAgKiB3aGV0aGVyIHRoZSBub3RpZmljYXRpb24gc2hvdWxkIGJlIHNpbGVudCwgaS5lLiwgbm8gc291bmRzIG9yIHZpYnJhdGlvbnNcbiAgICogc2hvdWxkIGJlIGlzc3VlZCwgcmVnYXJkbGVzcyBvZiB0aGUgZGV2aWNlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHZpYnJhdGlvbiBwYXR0ZXJuIGZvciBkZXZpY2VzIHdpdGggdmlicmF0aW9uIGhhcmR3YXJlIHRvIGVtaXQuXG4gICAqIEEgdmlicmF0aW9uIHBhdHRlcm4sIGFzIHNwZWNpZmllZCBpbiB0aGUgVmlicmF0aW9uIEFQSSBzcGVjXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3ZpYnJhdGlvbi9cbiAgICovXG4gIHZpYnJhdGU/OiBudW1iZXJbXTtcbn1cbmludGVyZmFjZSBVc2VXZWJOb3RpZmljYXRpb25PcHRpb25zIGV4dGVuZHMgQ29uZmlndXJhYmxlV2luZG93LCBXZWJOb3RpZmljYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFJlcXVlc3QgZm9yIHBlcm1pc3Npb25zIG9uTW91bnRlZCBpZiBpdCdzIG5vdCBncmFudGVkLlxuICAgKlxuICAgKiBDYW4gYmUgZGlzYWJsZWQgYW5kIGNhbGxpbmcgYGVuc3VyZVBlcm1pc3Npb25zYCB0byBncmFudCBhZnRlcndvcmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZXF1ZXN0UGVybWlzc2lvbnM/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFVzZVdlYk5vdGlmaWNhdGlvblJldHVybiBleHRlbmRzIFN1cHBvcnRhYmxlIHtcbiAgbm90aWZpY2F0aW9uOiBSZWY8Tm90aWZpY2F0aW9uIHwgbnVsbD47XG4gIGVuc3VyZVBlcm1pc3Npb25zOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICBwZXJtaXNzaW9uR3JhbnRlZDogU2hhbGxvd1JlZjxib29sZWFuPjtcbiAgc2hvdzogKG92ZXJyaWRlcz86IFdlYk5vdGlmaWNhdGlvbk9wdGlvbnMpID0+IFByb21pc2U8Tm90aWZpY2F0aW9uIHwgdW5kZWZpbmVkPjtcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG4gIG9uQ2xpY2s6IEV2ZW50SG9va09uPEV2ZW50PjtcbiAgb25TaG93OiBFdmVudEhvb2tPbjxFdmVudD47XG4gIG9uRXJyb3I6IEV2ZW50SG9va09uPEV2ZW50PjtcbiAgb25DbG9zZTogRXZlbnRIb29rT248RXZlbnQ+O1xufVxuLyoqXG4gKiBSZWFjdGl2ZSB1c2VXZWJOb3RpZmljYXRpb25cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VXZWJOb3RpZmljYXRpb25cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL25vdGlmaWNhdGlvblxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVdlYk5vdGlmaWNhdGlvbihvcHRpb25zPzogVXNlV2ViTm90aWZpY2F0aW9uT3B0aW9ucyk6IFVzZVdlYk5vdGlmaWNhdGlvblJldHVybjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVdlYlNvY2tldC9pbmRleC5kLnRzXG50eXBlIFdlYlNvY2tldFN0YXR1cyA9ICdPUEVOJyB8ICdDT05ORUNUSU5HJyB8ICdDTE9TRUQnO1xudHlwZSBXZWJTb2NrZXRIZWFydGJlYXRNZXNzYWdlID0gc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBCbG9iO1xuaW50ZXJmYWNlIFVzZVdlYlNvY2tldE9wdGlvbnMge1xuICBvbkNvbm5lY3RlZD86ICh3czogV2ViU29ja2V0KSA9PiB2b2lkO1xuICBvbkRpc2Nvbm5lY3RlZD86ICh3czogV2ViU29ja2V0LCBldmVudDogQ2xvc2VFdmVudCkgPT4gdm9pZDtcbiAgb25FcnJvcj86ICh3czogV2ViU29ja2V0LCBldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIG9uTWVzc2FnZT86ICh3czogV2ViU29ja2V0LCBldmVudDogTWVzc2FnZUV2ZW50KSA9PiB2b2lkO1xuICAvKipcbiAgICogU2VuZCBoZWFydGJlYXQgZm9yIGV2ZXJ5IHggbWlsbGlzZWNvbmRzIHBhc3NlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGVhcnRiZWF0PzogYm9vbGVhbiB8IENvbmZpZ3VyYWJsZVNjaGVkdWxlciAmIHtcbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIGZvciB0aGUgaGVhcnRiZWF0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAncGluZydcbiAgICAgKi9cbiAgICBtZXNzYWdlPzogTWF5YmVSZWZPckdldHRlcjxXZWJTb2NrZXRIZWFydGJlYXRNZXNzYWdlPjtcbiAgICAvKipcbiAgICAgKiBSZXNwb25zZSBtZXNzYWdlIGZvciB0aGUgaGVhcnRiZWF0LCBpZiB1bmRlZmluZWQgdGhlIG1lc3NhZ2Ugd2lsbCBiZSB1c2VkXG4gICAgICovXG4gICAgcmVzcG9uc2VNZXNzYWdlPzogTWF5YmVSZWZPckdldHRlcjxXZWJTb2NrZXRIZWFydGJlYXRNZXNzYWdlPjtcbiAgICAvKipcbiAgICAgKiBJbnRlcnZhbCwgaW4gbWlsbGlzZWNvbmRzXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGBzY2hlZHVsZXJgIG9wdGlvbiBpbnN0ZWFkXG4gICAgICogQGRlZmF1bHQgMTAwMFxuICAgICAqL1xuICAgIGludGVydmFsPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEhlYXJ0YmVhdCByZXNwb25zZSB0aW1lb3V0LCBpbiBtaWxsaXNlY29uZHNcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDEwMDBcbiAgICAgKi9cbiAgICBwb25nVGltZW91dD86IG51bWJlcjtcbiAgfTtcbiAgLyoqXG4gICAqIEVuYWJsZWQgYXV0byByZWNvbm5lY3RcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9SZWNvbm5lY3Q/OiBib29sZWFuIHwge1xuICAgIC8qKlxuICAgICAqIE1heGltdW0gcmV0cnkgdGltZXMuXG4gICAgICpcbiAgICAgKiBPciB5b3UgY2FuIHBhc3MgYSBwcmVkaWNhdGUgZnVuY3Rpb24gKHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB5b3Ugd2FudCB0byByZXRyeSkuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAtMVxuICAgICAqL1xuICAgIHJldHJpZXM/OiBudW1iZXIgfCAoKHJldHJpZWQ6IG51bWJlcikgPT4gYm9vbGVhbik7XG4gICAgLyoqXG4gICAgICogRGVsYXkgZm9yIHJlY29ubmVjdCwgaW4gbWlsbGlzZWNvbmRzXG4gICAgICpcbiAgICAgKiBPciB5b3UgY2FuIHBhc3MgYSBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIGRlbGF5IGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgcmV0cmllcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDEwMDBcbiAgICAgKi9cbiAgICBkZWxheT86IG51bWJlciB8ICgocmV0cmllczogbnVtYmVyKSA9PiBudW1iZXIpO1xuICAgIC8qKlxuICAgICAqIE9uIG1heGltdW0gcmV0cnkgdGltZXMgcmVhY2hlZC5cbiAgICAgKi9cbiAgICBvbkZhaWxlZD86IEZuO1xuICB9O1xuICAvKipcbiAgICogSW1tZWRpYXRlbHkgb3BlbiB0aGUgY29ubmVjdGlvbiB3aGVuIGNhbGxpbmcgdGhpcyBjb21wb3NhYmxlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGltbWVkaWF0ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGNvbm5lY3QgdG8gdGhlIHdlYnNvY2tldCB3aGVuIFVSTCBjaGFuZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9Db25uZWN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgY2xvc2UgYSBjb25uZWN0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9DbG9zZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBMaXN0IG9mIG9uZSBvciBtb3JlIHN1Yi1wcm90b2NvbCBzdHJpbmdzXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBwcm90b2NvbHM/OiBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBVc2VXZWJTb2NrZXRSZXR1cm48VD4ge1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBsYXRlc3QgZGF0YSByZWNlaXZlZCB2aWEgdGhlIHdlYnNvY2tldCxcbiAgICogY2FuIGJlIHdhdGNoZWQgdG8gcmVzcG9uZCB0byBpbmNvbWluZyBtZXNzYWdlc1xuICAgKi9cbiAgZGF0YTogUmVmPFQgfCBudWxsPjtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHdlYnNvY2tldCBzdGF0dXMsIGNhbiBiZSBvbmx5IG9uZSBvZjpcbiAgICogJ09QRU4nLCAnQ09OTkVDVElORycsICdDTE9TRUQnXG4gICAqL1xuICBzdGF0dXM6IFNoYWxsb3dSZWY8V2ViU29ja2V0U3RhdHVzPjtcbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgd2Vic29ja2V0IGNvbm5lY3Rpb24gZ3JhY2VmdWxseS5cbiAgICovXG4gIGNsb3NlOiBXZWJTb2NrZXRbJ2Nsb3NlJ107XG4gIC8qKlxuICAgKiBSZW9wZW4gdGhlIHdlYnNvY2tldCBjb25uZWN0aW9uLlxuICAgKiBJZiB0aGVyZSB0aGUgY3VycmVudCBvbmUgaXMgYWN0aXZlLCB3aWxsIGNsb3NlIGl0IGJlZm9yZSBvcGVuaW5nIGEgbmV3IG9uZS5cbiAgICovXG4gIG9wZW46IEZuO1xuICAvKipcbiAgICogU2VuZHMgZGF0YSB0aHJvdWdoIHRoZSB3ZWJzb2NrZXQgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHBhcmFtIHVzZUJ1ZmZlciB3aGVuIHRoZSBzb2NrZXQgaXMgbm90IHlldCBvcGVuLCBzdG9yZSB0aGUgZGF0YSBpbnRvIHRoZSBidWZmZXIgYW5kIHNlbnQgdGhlbSBvbmUgY29ubmVjdGVkLiBEZWZhdWx0IHRvIHRydWUuXG4gICAqL1xuICBzZW5kOiAoZGF0YTogc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBCbG9iLCB1c2VCdWZmZXI/OiBib29sZWFuKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBXZWJTb2NrZXQgaW5zdGFuY2UuXG4gICAqL1xuICB3czogUmVmPFdlYlNvY2tldCB8IHVuZGVmaW5lZD47XG59XG4vKipcbiAqIFJlYWN0aXZlIFdlYlNvY2tldCBjbGllbnQuXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlV2ViU29ja2V0XG4gKiBAcGFyYW0gdXJsXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2ViU29ja2V0PERhdGEgPSBhbnk+KHVybDogTWF5YmVSZWZPckdldHRlcjxzdHJpbmcgfCBVUkwgfCB1bmRlZmluZWQ+LCBvcHRpb25zPzogVXNlV2ViU29ja2V0T3B0aW9ucyk6IFVzZVdlYlNvY2tldFJldHVybjxEYXRhPjtcbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHVzZVdlYldvcmtlci9pbmRleC5kLnRzXG50eXBlIFBvc3RNZXNzYWdlID0gdHlwZW9mIFdvcmtlci5wcm90b3R5cGVbJ3Bvc3RNZXNzYWdlJ107XG5pbnRlcmZhY2UgVXNlV2ViV29ya2VyUmV0dXJuPERhdGEgPSBhbnk+IHtcbiAgZGF0YTogUmVmPERhdGE+O1xuICBwb3N0OiBQb3N0TWVzc2FnZTtcbiAgdGVybWluYXRlOiAoKSA9PiB2b2lkO1xuICB3b3JrZXI6IFNoYWxsb3dSZWY8V29ya2VyIHwgdW5kZWZpbmVkPjtcbn1cbnR5cGUgV29ya2VyRm4gPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiBXb3JrZXI7XG4vKipcbiAqIFNpbXBsZSBXZWIgV29ya2VycyByZWdpc3RyYXRpb24gYW5kIGNvbW11bmljYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL3Z1ZXVzZS5vcmcvdXNlV2ViV29ya2VyXG4gKiBAcGFyYW0gdXJsXG4gKiBAcGFyYW0gd29ya2VyT3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXZWJXb3JrZXI8VCA9IGFueT4odXJsOiBzdHJpbmcsIHdvcmtlck9wdGlvbnM/OiBXb3JrZXJPcHRpb25zLCBvcHRpb25zPzogQ29uZmlndXJhYmxlV2luZG93KTogVXNlV2ViV29ya2VyUmV0dXJuPFQ+O1xuLyoqXG4gKiBTaW1wbGUgV2ViIFdvcmtlcnMgcmVnaXN0cmF0aW9uIGFuZCBjb21tdW5pY2F0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdlYldvcmtlclxuICovXG5kZWNsYXJlIGZ1bmN0aW9uIHVzZVdlYldvcmtlcjxUID0gYW55Pih3b3JrZXI6IFdvcmtlciB8IFdvcmtlckZuKTogVXNlV2ViV29ya2VyUmV0dXJuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2ViV29ya2VyRm4vaW5kZXguZC50c1xudHlwZSBXZWJXb3JrZXJTdGF0dXMgPSAnUEVORElORycgfCAnU1VDQ0VTUycgfCAnUlVOTklORycgfCAnRVJST1InIHwgJ1RJTUVPVVRfRVhQSVJFRCc7XG5pbnRlcmZhY2UgVXNlV2ViV29ya2VyT3B0aW9ucyBleHRlbmRzIENvbmZpZ3VyYWJsZVdpbmRvdyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSBraWxsaW5nIHRoZSB3b3JrZXJcbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogQW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIG5lZWRlZCB0byBydW4gdGhlIHdvcmtlclxuICAgKi9cbiAgZGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBsb2NhbCBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHJ1biB0aGUgd29ya2VyXG4gICAqL1xuICBsb2NhbERlcGVuZGVuY2llcz86IEZ1bmN0aW9uW107XG59XG5pbnRlcmZhY2UgVXNlV2ViV29ya2VyRm5SZXR1cm48VCBleHRlbmRzICguLi5mbkFyZ3M6IGFueVtdKSA9PiBhbnk+IHtcbiAgd29ya2VyRm46ICguLi5mbkFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IFByb21pc2U8UmV0dXJuVHlwZTxUPj47XG4gIHdvcmtlclN0YXR1czogU2hhbGxvd1JlZjxXZWJXb3JrZXJTdGF0dXM+O1xuICB3b3JrZXJUZXJtaW5hdGU6IChzdGF0dXM/OiBXZWJXb3JrZXJTdGF0dXMpID0+IHZvaWQ7XG59XG4vKipcbiAqIFJ1biBleHBlbnNpdmUgZnVuY3Rpb24gd2l0aG91dCBibG9ja2luZyB0aGUgVUksIHVzaW5nIGEgc2ltcGxlIHN5bnRheCB0aGF0IG1ha2VzIHVzZSBvZiBQcm9taXNlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdlYldvcmtlckZuXG4gKiBAcGFyYW0gZm5cbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2ViV29ya2VyRm48VCBleHRlbmRzICguLi5mbkFyZ3M6IGFueVtdKSA9PiBhbnk+KGZuOiBULCBvcHRpb25zPzogVXNlV2ViV29ya2VyT3B0aW9ucyk6IFVzZVdlYldvcmtlckZuUmV0dXJuPFQ+O1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2luZG93Rm9jdXMvaW5kZXguZC50c1xuLyoqXG4gKiBSZWFjdGl2ZWx5IHRyYWNrIHdpbmRvdyBmb2N1cyB3aXRoIGB3aW5kb3cub25mb2N1c2AgYW5kIGB3aW5kb3cub25ibHVyYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VXaW5kb3dGb2N1c1xuICpcbiAqIEBfX05PX1NJREVfRUZGRUNUU19fXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2luZG93Rm9jdXMob3B0aW9ucz86IENvbmZpZ3VyYWJsZVdpbmRvdyk6IFNoYWxsb3dSZWY8Ym9vbGVhbj47XG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiB1c2VXaW5kb3dTY3JvbGwvaW5kZXguZC50c1xuaW50ZXJmYWNlIFVzZVdpbmRvd1Njcm9sbE9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3csIFVzZVNjcm9sbE9wdGlvbnMge31cbmludGVyZmFjZSBVc2VXaW5kb3dTY3JvbGxSZXR1cm4gZXh0ZW5kcyBVc2VTY3JvbGxSZXR1cm4ge31cbi8qKlxuICogUmVhY3RpdmUgd2luZG93IHNjcm9sbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vdnVldXNlLm9yZy91c2VXaW5kb3dTY3JvbGxcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gdXNlV2luZG93U2Nyb2xsKG9wdGlvbnM/OiBVc2VXaW5kb3dTY3JvbGxPcHRpb25zKTogVXNlV2luZG93U2Nyb2xsUmV0dXJuO1xuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gdXNlV2luZG93U2l6ZS9pbmRleC5kLnRzXG5pbnRlcmZhY2UgVXNlV2luZG93U2l6ZU9wdGlvbnMgZXh0ZW5kcyBDb25maWd1cmFibGVXaW5kb3cge1xuICBpbml0aWFsV2lkdGg/OiBudW1iZXI7XG4gIGluaXRpYWxIZWlnaHQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gd2luZG93IGBvcmllbnRhdGlvbmNoYW5nZWAgZXZlbnRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgbGlzdGVuT3JpZW50YXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc2Nyb2xsYmFyIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgd2lkdGggYW5kIGhlaWdodFxuICAgKiBPbmx5IGVmZmVjdGl2ZSB3aGVuIGB0eXBlYCBpcyBgJ2lubmVyJ2BcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgaW5jbHVkZVNjcm9sbGJhcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBVc2UgYHdpbmRvdy5pbm5lcldpZHRoYCBvciBgd2luZG93Lm91dGVyV2lkdGhgIG9yIGB3aW5kb3cudmlzdWFsVmlld3BvcnRgXG4gICAqIHZpc3VhbFZpZXdwb3J0IGRvY3VtZW50YXRpb24gZnJvbSBNRE4oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvemgtQ04vZG9jcy9XZWIvQVBJL1Zpc3VhbFZpZXdwb3J0KVxuICAgKiBAZGVmYXVsdCAnaW5uZXInXG4gICAqL1xuICB0eXBlPzogJ2lubmVyJyB8ICdvdXRlcicgfCAndmlzdWFsJztcbn1cbmludGVyZmFjZSBVc2VXaW5kb3dTaXplUmV0dXJuIHtcbiAgd2lkdGg6IFNoYWxsb3dSZWY8bnVtYmVyPjtcbiAgaGVpZ2h0OiBTaGFsbG93UmVmPG51bWJlcj47XG59XG4vKipcbiAqIFJlYWN0aXZlIHdpbmRvdyBzaXplLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly92dWV1c2Uub3JnL3VzZVdpbmRvd1NpemVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKlxuICogQF9fTk9fU0lERV9FRkZFQ1RTX19cbiAqL1xuZGVjbGFyZSBmdW5jdGlvbiB1c2VXaW5kb3dTaXplKG9wdGlvbnM/OiBVc2VXaW5kb3dTaXplT3B0aW9ucyk6IFVzZVdpbmRvd1NpemVSZXR1cm47XG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEFmdGVyRmV0Y2hDb250ZXh0LCBBc3luY0NvbXB1dGVkT25DYW5jZWwsIEFzeW5jQ29tcHV0ZWRPcHRpb25zLCBCYXNpY0NvbG9yTW9kZSwgQmFzaWNDb2xvclNjaGVtYSwgQmF0dGVyeU1hbmFnZXIsIEJlZm9yZUZldGNoQ29udGV4dCwgQnJlYWtwb2ludHMsIEJyb3dzZXJMb2NhdGlvblN0YXRlLCBDbG9uZUZuLCBDb2xvclNjaGVtZVR5cGUsIENvbXB1dGVkSW5qZWN0R2V0dGVyLCBDb21wdXRlZEluamVjdEdldHRlcldpdGhEZWZhdWx0LCBDb21wdXRlZEluamVjdFNldHRlciwgQ29uZmlndXJhYmxlRGVlcFJlZnMsIENvbmZpZ3VyYWJsZURvY3VtZW50LCBDb25maWd1cmFibGVEb2N1bWVudE9yU2hhZG93Um9vdCwgQ29uZmlndXJhYmxlTG9jYXRpb24sIENvbmZpZ3VyYWJsZU5hdmlnYXRvciwgQ29uZmlndXJhYmxlU2NoZWR1bGVyLCBDb25maWd1cmFibGVXaW5kb3csIENvbnRyYXN0VHlwZSwgQ3JlYXRlRmV0Y2hPcHRpb25zLCBDcmVhdGVSZXVzYWJsZVRlbXBsYXRlT3B0aW9ucywgQ3ViaWNCZXppZXJQb2ludHMsIERlZmF1bHRNYWdpY0tleXNBbGlhc01hcCwgRGVmaW5lVGVtcGxhdGVDb21wb25lbnQsIERldmljZU1vdGlvbk9wdGlvbnMsIERvY3VtZW50RXZlbnROYW1lLCBFYXNpbmdGdW5jdGlvbiwgRWxlbWVudFNpemUsIEV2ZW50QnVzRXZlbnRzLCBFdmVudEJ1c0lkZW50aWZpZXIsIEV2ZW50QnVzS2V5LCBFdmVudEJ1c0xpc3RlbmVyLCBFdmVudFNvdXJjZVN0YXR1cywgRXllRHJvcHBlciwgRXllRHJvcHBlck9wZW5PcHRpb25zLCBGaWxlU3lzdGVtQWNjZXNzU2hvd09wZW5GaWxlT3B0aW9ucywgRmlsZVN5c3RlbUFjY2Vzc1Nob3dTYXZlRmlsZU9wdGlvbnMsIEZpbGVTeXN0ZW1BY2Nlc3NXaW5kb3csIEZpbGVTeXN0ZW1GaWxlSGFuZGxlLCBGb3JtYXRUaW1lQWdvSW50bE9wdGlvbnMsIEZvcm1hdFRpbWVBZ29PcHRpb25zLCBHZW5lcmFsRXZlbnRMaXN0ZW5lciwgR2VuZXJhbFBlcm1pc3Npb25EZXNjcmlwdG9yLCBJbnRlcnBvbGF0aW9uRnVuY3Rpb24sIEtleUZpbHRlciwgS2V5TW9kaWZpZXIsIEtleVByZWRpY2F0ZSwgS2V5U3Ryb2tlRXZlbnROYW1lLCBNYWdpY0tleXNJbnRlcm5hbCwgTWF5YmVDb21wdXRlZEVsZW1lbnRSZWYsIE1heWJlRWxlbWVudCwgTWF5YmVFbGVtZW50UmVmLCBNZW1vcnlJbmZvLCBNb3VzZUluRWxlbWVudE9wdGlvbnMsIE1vdXNlUHJlc3NlZE9wdGlvbnMsIE5hdmlnYXRvckxhbmd1YWdlU3RhdGUsIE5ldHdvcmtFZmZlY3RpdmVUeXBlLCBOZXR3b3JrU3RhdGUsIE5ldHdvcmtUeXBlLCBPbkNsaWNrT3V0c2lkZUhhbmRsZXIsIE9uQ2xpY2tPdXRzaWRlT3B0aW9ucywgT25DbGlja091dHNpZGVSZXR1cm4sIE9uRWxlbWVudFJlbW92YWxPcHRpb25zLCBPbkZldGNoRXJyb3JDb250ZXh0LCBPbktleVN0cm9rZU9wdGlvbnMsIE9uTG9uZ1ByZXNzTW9kaWZpZXJzLCBPbkxvbmdQcmVzc09wdGlvbnMsIE9uTG9uZ1ByZXNzUmV0dXJuLCBPcmllbnRhdGlvbkxvY2tUeXBlLCBPcmllbnRhdGlvblR5cGUsIFBvaW50ZXJUeXBlLCBQb3NpdGlvbiwgUmVkdWNlZE1vdGlvblR5cGUsIFJlZHVjZWRUcmFuc3BhcmVuY3lUeXBlLCBSZW5kZXJhYmxlQ29tcG9uZW50LCBSZXNpemVPYnNlcnZlckNhbGxiYWNrLCBSZXNpemVPYnNlcnZlckVudHJ5LCBSZXNpemVPYnNlcnZlclNpemUsIFJldXNhYmxlVGVtcGxhdGVQYWlyLCBSZXVzZVRlbXBsYXRlQ29tcG9uZW50LCBTU1JIYW5kbGVyc01hcCwgU2NyZWVuT3JpZW50YXRpb24sIFNlcmlhbGl6ZXIsIFNlcmlhbGl6ZXJBc3luYywgU2hhZG93Um9vdEV2ZW50TmFtZSwgU3RvcmFnZUV2ZW50TGlrZSwgU3RvcmFnZUxpa2UsIFN0b3JhZ2VMaWtlQXN5bmMsIFN0b3JhZ2VTZXJpYWxpemVycywgU3VwcG9ydGFibGUsIFRlbXBsYXRlUHJvbWlzZSwgVGVtcGxhdGVQcm9taXNlT3B0aW9ucywgVGVtcGxhdGVQcm9taXNlUHJvcHMsIFRlbXBsYXRlUmVmc0xpc3QsIFRpbWVBZ29Vbml0LCBUb0RhdGFVUkxPcHRpb25zLCBUcmFuc2l0aW9uT3B0aW9ucywgVHJhbnNpdGlvblByZXNldHMsIFVuUmVmRWxlbWVudFJldHVybiwgVW5yZWZGbiwgVXJsUGFyYW1zLCBVc2VBY3RpdmVFbGVtZW50T3B0aW9ucywgVXNlQWN0aXZlRWxlbWVudFJldHVybiwgVXNlQW5pbWF0ZUtleWZyYW1lcywgVXNlQW5pbWF0ZU9wdGlvbnMsIFVzZUFuaW1hdGVSZXR1cm4sIFVzZUFzeW5jUXVldWVPcHRpb25zLCBVc2VBc3luY1F1ZXVlUmVzdWx0LCBVc2VBc3luY1F1ZXVlUmV0dXJuLCBVc2VBc3luY1F1ZXVlVGFzaywgVXNlQXN5bmNTdGF0ZU9wdGlvbnMsIFVzZUFzeW5jU3RhdGVSZXR1cm4sIFVzZUFzeW5jU3RhdGVSZXR1cm5CYXNlLCBVc2VCYXNlNjRPYmplY3RPcHRpb25zLCBVc2VCYXNlNjRPcHRpb25zLCBVc2VCYXNlNjRSZXR1cm4sIFVzZUJhdHRlcnlPcHRpb25zLCBVc2VCYXR0ZXJ5UmV0dXJuLCBVc2VCbHVldG9vdGhPcHRpb25zLCBVc2VCbHVldG9vdGhSZXF1ZXN0RGV2aWNlT3B0aW9ucywgVXNlQmx1ZXRvb3RoUmV0dXJuLCBVc2VCcmVha3BvaW50UmV0dXJuLCBVc2VCcmVha3BvaW50c09wdGlvbnMsIFVzZUJyb2FkY2FzdENoYW5uZWxPcHRpb25zLCBVc2VCcm9hZGNhc3RDaGFubmVsUmV0dXJuLCBVc2VCcm93c2VyTG9jYXRpb25PcHRpb25zLCBVc2VCcm93c2VyTG9jYXRpb25SZXR1cm4sIFVzZUNhY2hlZE9wdGlvbnMsIFVzZUNhY2hlZFJldHVybiwgVXNlQ2xpcGJvYXJkSXRlbXNPcHRpb25zLCBVc2VDbGlwYm9hcmRJdGVtc1JldHVybiwgVXNlQ2xpcGJvYXJkT3B0aW9ucywgVXNlQ2xpcGJvYXJkUmV0dXJuLCBVc2VDbG9uZWRPcHRpb25zLCBVc2VDbG9uZWRSZXR1cm4sIFVzZUNvbG9yTW9kZU9wdGlvbnMsIFVzZUNvbG9yTW9kZVJldHVybiwgVXNlQ29uZmlybURpYWxvZ1JldHVybiwgVXNlQ29uZmlybURpYWxvZ1JldmVhbFJlc3VsdCwgVXNlQ291bnRkb3duT3B0aW9ucywgVXNlQ291bnRkb3duUmV0dXJuLCBVc2VDc3NTdXBwb3J0c09wdGlvbnMsIFVzZUNzc1N1cHBvcnRzUmV0dXJuLCBVc2VDc3NWYXJPcHRpb25zLCBVc2VDeWNsZUxpc3RPcHRpb25zLCBVc2VDeWNsZUxpc3RSZXR1cm4sIFVzZURhcmtPcHRpb25zLCBVc2VEYXJrUmV0dXJuLCBVc2VEZXZpY2VNb3Rpb25PcHRpb25zLCBVc2VEZXZpY2VNb3Rpb25SZXR1cm4sIFVzZURldmljZU9yaWVudGF0aW9uT3B0aW9ucywgVXNlRGV2aWNlT3JpZW50YXRpb25SZXR1cm4sIFVzZURldmljZVBpeGVsUmF0aW9PcHRpb25zLCBVc2VEZXZpY2VQaXhlbFJhdGlvUmV0dXJuLCBVc2VEZXZpY2VzTGlzdE9wdGlvbnMsIFVzZURldmljZXNMaXN0UmV0dXJuLCBVc2VEaXNwbGF5TWVkaWFPcHRpb25zLCBVc2VEaXNwbGF5TWVkaWFSZXR1cm4sIFVzZURvY3VtZW50VmlzaWJpbGl0eU9wdGlvbnMsIFVzZURvY3VtZW50VmlzaWJpbGl0eVJldHVybiwgVXNlRHJhZ2dhYmxlT3B0aW9ucywgVXNlRHJhZ2dhYmxlUmV0dXJuLCBVc2VEcm9wWm9uZU9wdGlvbnMsIFVzZURyb3Bab25lUmV0dXJuLCBVc2VFbGVtZW50Qm91bmRpbmdPcHRpb25zLCBVc2VFbGVtZW50Qm91bmRpbmdSZXR1cm4sIFVzZUVsZW1lbnRCeVBvaW50T3B0aW9ucywgVXNlRWxlbWVudEJ5UG9pbnRSZXR1cm4sIFVzZUVsZW1lbnRIb3Zlck9wdGlvbnMsIFVzZUVsZW1lbnRTaXplT3B0aW9ucywgVXNlRWxlbWVudFNpemVSZXR1cm4sIFVzZUVsZW1lbnRWaXNpYmlsaXR5T3B0aW9ucywgVXNlRWxlbWVudFZpc2liaWxpdHlSZXR1cm4sIFVzZUV2ZW50QnVzUmV0dXJuLCBVc2VFdmVudFNvdXJjZU9wdGlvbnMsIFVzZUV2ZW50U291cmNlUmV0dXJuLCBVc2VFeWVEcm9wcGVyT3B0aW9ucywgVXNlRXllRHJvcHBlclJldHVybiwgVXNlRmF2aWNvbk9wdGlvbnMsIFVzZUZhdmljb25SZXR1cm4sIFVzZUZldGNoT3B0aW9ucywgVXNlRmV0Y2hSZXR1cm4sIFVzZUZpbGVEaWFsb2dPcHRpb25zLCBVc2VGaWxlRGlhbG9nUmV0dXJuLCBVc2VGaWxlU3lzdGVtQWNjZXNzQ29tbW9uT3B0aW9ucywgVXNlRmlsZVN5c3RlbUFjY2Vzc09wdGlvbnMsIFVzZUZpbGVTeXN0ZW1BY2Nlc3NSZXR1cm4sIFVzZUZpbGVTeXN0ZW1BY2Nlc3NTaG93U2F2ZUZpbGVPcHRpb25zLCBVc2VGb2N1c09wdGlvbnMsIFVzZUZvY3VzUmV0dXJuLCBVc2VGb2N1c1dpdGhpblJldHVybiwgVXNlRnBzT3B0aW9ucywgVXNlRnVsbHNjcmVlbk9wdGlvbnMsIFVzZUZ1bGxzY3JlZW5SZXR1cm4sIFVzZUdhbWVwYWRPcHRpb25zLCBVc2VHYW1lcGFkUmV0dXJuLCBVc2VHZW9sb2NhdGlvbk9wdGlvbnMsIFVzZUdlb2xvY2F0aW9uUmV0dXJuLCBVc2VIb3Jpem9udGFsVmlydHVhbExpc3RPcHRpb25zLCBVc2VJZGxlT3B0aW9ucywgVXNlSWRsZVJldHVybiwgVXNlSW1hZ2VPcHRpb25zLCBVc2VJbWFnZVJldHVybiwgVXNlSW5maW5pdGVTY3JvbGxPcHRpb25zLCBVc2VJbmZpbml0ZVNjcm9sbFJldHVybiwgVXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJPcHRpb25zLCBVc2VJbnRlcnNlY3Rpb25PYnNlcnZlclJldHVybiwgVXNlS2V5TW9kaWZpZXJSZXR1cm4sIFVzZU1hZ2ljS2V5c09wdGlvbnMsIFVzZU1hZ2ljS2V5c1JldHVybiwgVXNlTWFudWFsUmVmSGlzdG9yeU9wdGlvbnMsIFVzZU1hbnVhbFJlZkhpc3RvcnlSZXR1cm4sIFVzZU1lZGlhQ29udHJvbHNSZXR1cm4sIFVzZU1lZGlhU291cmNlLCBVc2VNZWRpYVRleHRUcmFjaywgVXNlTWVkaWFUZXh0VHJhY2tTb3VyY2UsIFVzZU1lbW9pemVDYWNoZSwgVXNlTWVtb2l6ZU9wdGlvbnMsIFVzZU1lbW9pemVSZXR1cm4sIFVzZU1lbW9yeU9wdGlvbnMsIFVzZU1lbW9yeVJldHVybiwgVXNlTW9kaWZpZXJPcHRpb25zLCBVc2VNb3VzZUNvb3JkVHlwZSwgVXNlTW91c2VFdmVudEV4dHJhY3RvciwgVXNlTW91c2VJbkVsZW1lbnRSZXR1cm4sIFVzZU1vdXNlT3B0aW9ucywgVXNlTW91c2VQcmVzc2VkT3B0aW9ucywgVXNlTW91c2VQcmVzc2VkUmV0dXJuLCBVc2VNb3VzZVJldHVybiwgVXNlTW91c2VTb3VyY2VUeXBlLCBVc2VNdXRhdGlvbk9ic2VydmVyT3B0aW9ucywgVXNlTXV0YXRpb25PYnNlcnZlclJldHVybiwgVXNlTmF2aWdhdG9yTGFuZ3VhZ2VPcHRpb25zLCBVc2VOYXZpZ2F0b3JMYW5ndWFnZVJldHVybiwgVXNlTmV0d29ya09wdGlvbnMsIFVzZU5ldHdvcmtSZXR1cm4sIFVzZU5vd09wdGlvbnMsIFVzZU5vd1JldHVybiwgVXNlT2Zmc2V0UGFnaW5hdGlvbkluZmluaXR5UGFnZVJldHVybiwgVXNlT2Zmc2V0UGFnaW5hdGlvbk9wdGlvbnMsIFVzZU9mZnNldFBhZ2luYXRpb25SZXR1cm4sIFVzZU9uTG9uZ1ByZXNzUmV0dXJuLCBVc2VQYWdlTGVhdmVPcHRpb25zLCBVc2VQYWdlTGVhdmVSZXR1cm4sIFVzZVBhcmFsbGF4T3B0aW9ucywgVXNlUGFyYWxsYXhSZXR1cm4sIFVzZVBlcmZvcm1hbmNlT2JzZXJ2ZXJPcHRpb25zLCBVc2VQZXJtaXNzaW9uT3B0aW9ucywgVXNlUGVybWlzc2lvblJldHVybiwgVXNlUGVybWlzc2lvblJldHVybldpdGhDb250cm9scywgVXNlUG9pbnRlckxvY2tPcHRpb25zLCBVc2VQb2ludGVyTG9ja1JldHVybiwgVXNlUG9pbnRlck9wdGlvbnMsIFVzZVBvaW50ZXJSZXR1cm4sIFVzZVBvaW50ZXJTdGF0ZSwgVXNlUG9pbnRlclN3aXBlT3B0aW9ucywgVXNlUG9pbnRlclN3aXBlUmV0dXJuLCBVc2VSYWZGbkNhbGxiYWNrQXJndW1lbnRzLCBVc2VSYWZGbk9wdGlvbnMsIFVzZVJlZkhpc3RvcnlPcHRpb25zLCBVc2VSZWZIaXN0b3J5UmVjb3JkLCBVc2VSZWZIaXN0b3J5UmV0dXJuLCBVc2VSZXNpemVPYnNlcnZlck9wdGlvbnMsIFVzZVJlc2l6ZU9ic2VydmVyUmV0dXJuLCBVc2VTY3JlZW5PcmllbnRhdGlvbk9wdGlvbnMsIFVzZVNjcmVlbk9yaWVudGF0aW9uUmV0dXJuLCBVc2VTY3JlZW5TYWZlQXJlYVJldHVybiwgVXNlU2NyaXB0VGFnT3B0aW9ucywgVXNlU2NyaXB0VGFnUmV0dXJuLCBVc2VTY3JvbGxPcHRpb25zLCBVc2VTY3JvbGxSZXR1cm4sIFVzZVNoYXJlT3B0aW9ucywgVXNlU2hhcmVSZXR1cm4sIFVzZVNvcnRlZENvbXBhcmVGbiwgVXNlU29ydGVkRm4sIFVzZVNvcnRlZE9wdGlvbnMsIFVzZVNwZWVjaFJlY29nbml0aW9uT3B0aW9ucywgVXNlU3BlZWNoUmVjb2duaXRpb25SZXR1cm4sIFVzZVNwZWVjaFN5bnRoZXNpc09wdGlvbnMsIFVzZVNwZWVjaFN5bnRoZXNpc1JldHVybiwgVXNlU3BlZWNoU3ludGhlc2lzU3RhdHVzLCBVc2VTdGVwcGVyUmV0dXJuLCBVc2VTdG9yYWdlQXN5bmNPcHRpb25zLCBVc2VTdG9yYWdlT3B0aW9ucywgVXNlU3R5bGVUYWdPcHRpb25zLCBVc2VTdHlsZVRhZ1JldHVybiwgVXNlU3VwcG9ydGVkUmV0dXJuLCBVc2VTd2lwZURpcmVjdGlvbiwgVXNlU3dpcGVPcHRpb25zLCBVc2VTd2lwZVJldHVybiwgVXNlVGV4dERpcmVjdGlvbk9wdGlvbnMsIFVzZVRleHREaXJlY3Rpb25WYWx1ZSwgVXNlVGV4dFNlbGVjdGlvbk9wdGlvbnMsIFVzZVRleHRTZWxlY3Rpb25SZXR1cm4sIFVzZVRleHRhcmVhQXV0b3NpemVPcHRpb25zLCBVc2VUZXh0YXJlYUF1dG9zaXplUmV0dXJuLCBVc2VUaHJvdHRsZWRSZWZIaXN0b3J5T3B0aW9ucywgVXNlVGhyb3R0bGVkUmVmSGlzdG9yeVJldHVybiwgVXNlVGltZUFnb0Zvcm1hdHRlciwgVXNlVGltZUFnb0ludGxPcHRpb25zLCBVc2VUaW1lQWdvTWVzc2FnZXMsIFVzZVRpbWVBZ29NZXNzYWdlc0J1aWx0SW4sIFVzZVRpbWVBZ29PcHRpb25zLCBVc2VUaW1lQWdvUmV0dXJuLCBVc2VUaW1lQWdvVW5pdCwgVXNlVGltZUFnb1VuaXROYW1lc0RlZmF1bHQsIFVzZVRpbWVvdXRQb2xsT3B0aW9ucywgVXNlVGltZXN0YW1wT3B0aW9ucywgVXNlVGltZXN0YW1wUmV0dXJuLCBVc2VUaXRsZU9wdGlvbnMsIFVzZVRpdGxlT3B0aW9uc0Jhc2UsIFVzZVRpdGxlUmV0dXJuLCBVc2VUcmFuc2l0aW9uT3B0aW9ucywgVXNlVXJsU2VhcmNoUGFyYW1zT3B0aW9ucywgVXNlVXNlck1lZGlhT3B0aW9ucywgVXNlVXNlck1lZGlhUmV0dXJuLCBVc2VWTW9kZWxPcHRpb25zLCBVc2VWZXJ0aWNhbFZpcnR1YWxMaXN0T3B0aW9ucywgVXNlVmlicmF0ZU9wdGlvbnMsIFVzZVZpYnJhdGVSZXR1cm4sIFVzZVZpcnR1YWxMaXN0SXRlbSwgVXNlVmlydHVhbExpc3RPcHRpb25zLCBVc2VWaXJ0dWFsTGlzdE9wdGlvbnNCYXNlLCBVc2VWaXJ0dWFsTGlzdFJldHVybiwgVXNlV2FrZUxvY2tPcHRpb25zLCBVc2VXYWtlTG9ja1JldHVybiwgVXNlV2ViTm90aWZpY2F0aW9uT3B0aW9ucywgVXNlV2ViTm90aWZpY2F0aW9uUmV0dXJuLCBVc2VXZWJTb2NrZXRPcHRpb25zLCBVc2VXZWJTb2NrZXRSZXR1cm4sIFVzZVdlYldvcmtlckZuUmV0dXJuLCBVc2VXZWJXb3JrZXJPcHRpb25zLCBVc2VXZWJXb3JrZXJSZXR1cm4sIFVzZVdpbmRvd1Njcm9sbE9wdGlvbnMsIFVzZVdpbmRvd1Njcm9sbFJldHVybiwgVXNlV2luZG93U2l6ZU9wdGlvbnMsIFVzZVdpbmRvd1NpemVSZXR1cm4sIFZ1ZUluc3RhbmNlLCBXYWtlTG9ja1NlbnRpbmVsLCBXZWJOb3RpZmljYXRpb25PcHRpb25zLCBXZWJTb2NrZXRIZWFydGJlYXRNZXNzYWdlLCBXZWJTb2NrZXRTdGF0dXMsIFdlYldvcmtlclN0YXR1cywgV2luZG93RXZlbnROYW1lLCBXcml0YWJsZUNvbXB1dGVkSW5qZWN0T3B0aW9ucywgV3JpdGFibGVDb21wdXRlZEluamVjdE9wdGlvbnNXaXRoRGVmYXVsdCwgYXN5bmNDb21wdXRlZCwgYnJlYWtwb2ludHNBbnREZXNpZ24sIGJyZWFrcG9pbnRzQm9vdHN0cmFwVjUsIGJyZWFrcG9pbnRzRWxlbWVudCwgYnJlYWtwb2ludHNNYXN0ZXJDc3MsIGJyZWFrcG9pbnRzUHJpbWVGbGV4LCBicmVha3BvaW50c1F1YXNhciwgYnJlYWtwb2ludHNTZW1hdGljLCBicmVha3BvaW50c1RhaWx3aW5kLCBicmVha3BvaW50c1Z1ZXRpZnksIGJyZWFrcG9pbnRzVnVldGlmeVYyLCBicmVha3BvaW50c1Z1ZXRpZnlWMywgY2xvbmVGbkpTT04sIGNvbXB1dGVkQXN5bmMsIGNvbXB1dGVkSW5qZWN0LCBjcmVhdGVGZXRjaCwgY3JlYXRlUmV1c2FibGVUZW1wbGF0ZSwgY3JlYXRlVGVtcGxhdGVQcm9taXNlLCBjcmVhdGVVbnJlZkZuLCBjdXN0b21TdG9yYWdlRXZlbnROYW1lLCBkZWZhdWx0RG9jdW1lbnQsIGRlZmF1bHRMb2NhdGlvbiwgZGVmYXVsdE5hdmlnYXRvciwgZGVmYXVsdFdpbmRvdywgZXhlY3V0ZVRyYW5zaXRpb24sIGZvcm1hdFRpbWVBZ28sIGZvcm1hdFRpbWVBZ29JbnRsLCBmb3JtYXRUaW1lQWdvSW50bFBhcnRzLCBnZXRTU1JIYW5kbGVyLCBtYXBHYW1lcGFkVG9YYm94MzYwQ29udHJvbGxlciwgb25DbGlja091dHNpZGUsIG9uRWxlbWVudFJlbW92YWwsIG9uS2V5RG93biwgb25LZXlQcmVzc2VkLCBvbktleVN0cm9rZSwgb25LZXlVcCwgb25Mb25nUHJlc3MsIG9uU3RhcnRUeXBpbmcsIHByb3ZpZGVTU1JXaWR0aCwgc2V0U1NSSGFuZGxlciwgdGVtcGxhdGVSZWYsIHRyYW5zaXRpb24sIHVucmVmRWxlbWVudCwgdXNlQWN0aXZlRWxlbWVudCwgdXNlQW5pbWF0ZSwgdXNlQXN5bmNRdWV1ZSwgdXNlQXN5bmNTdGF0ZSwgdXNlQmFzZTY0LCB1c2VCYXR0ZXJ5LCB1c2VCbHVldG9vdGgsIHVzZUJyZWFrcG9pbnRzLCB1c2VCcm9hZGNhc3RDaGFubmVsLCB1c2VCcm93c2VyTG9jYXRpb24sIHVzZUNhY2hlZCwgdXNlQ2xpcGJvYXJkLCB1c2VDbGlwYm9hcmRJdGVtcywgdXNlQ2xvbmVkLCB1c2VDb2xvck1vZGUsIHVzZUNvbmZpcm1EaWFsb2csIHVzZUNvdW50ZG93biwgdXNlQ3NzU3VwcG9ydHMsIHVzZUNzc1ZhciwgdXNlQ3VycmVudEVsZW1lbnQsIHVzZUN5Y2xlTGlzdCwgdXNlRGFyaywgdXNlRGVib3VuY2VkUmVmSGlzdG9yeSwgdXNlRGV2aWNlTW90aW9uLCB1c2VEZXZpY2VPcmllbnRhdGlvbiwgdXNlRGV2aWNlUGl4ZWxSYXRpbywgdXNlRGV2aWNlc0xpc3QsIHVzZURpc3BsYXlNZWRpYSwgdXNlRG9jdW1lbnRWaXNpYmlsaXR5LCB1c2VEcmFnZ2FibGUsIHVzZURyb3Bab25lLCB1c2VFbGVtZW50Qm91bmRpbmcsIHVzZUVsZW1lbnRCeVBvaW50LCB1c2VFbGVtZW50SG92ZXIsIHVzZUVsZW1lbnRTaXplLCB1c2VFbGVtZW50VmlzaWJpbGl0eSwgdXNlRXZlbnRCdXMsIHVzZUV2ZW50TGlzdGVuZXIsIHVzZUV2ZW50U291cmNlLCB1c2VFeWVEcm9wcGVyLCB1c2VGYXZpY29uLCB1c2VGZXRjaCwgdXNlRmlsZURpYWxvZywgdXNlRmlsZVN5c3RlbUFjY2VzcywgdXNlRm9jdXMsIHVzZUZvY3VzV2l0aGluLCB1c2VGcHMsIHVzZUZ1bGxzY3JlZW4sIHVzZUdhbWVwYWQsIHVzZUdlb2xvY2F0aW9uLCB1c2VJZGxlLCB1c2VJbWFnZSwgdXNlSW5maW5pdGVTY3JvbGwsIHVzZUludGVyc2VjdGlvbk9ic2VydmVyLCB1c2VLZXlNb2RpZmllciwgdXNlTG9jYWxTdG9yYWdlLCB1c2VNYWdpY0tleXMsIHVzZU1hbnVhbFJlZkhpc3RvcnksIHVzZU1lZGlhQ29udHJvbHMsIHVzZU1lZGlhUXVlcnksIHVzZU1lbW9pemUsIHVzZU1lbW9yeSwgdXNlTW91bnRlZCwgdXNlTW91c2UsIHVzZU1vdXNlSW5FbGVtZW50LCB1c2VNb3VzZVByZXNzZWQsIHVzZU11dGF0aW9uT2JzZXJ2ZXIsIHVzZU5hdmlnYXRvckxhbmd1YWdlLCB1c2VOZXR3b3JrLCB1c2VOb3csIHVzZU9iamVjdFVybCwgdXNlT2Zmc2V0UGFnaW5hdGlvbiwgdXNlT25saW5lLCB1c2VQYWdlTGVhdmUsIHVzZVBhcmFsbGF4LCB1c2VQYXJlbnRFbGVtZW50LCB1c2VQZXJmb3JtYW5jZU9ic2VydmVyLCB1c2VQZXJtaXNzaW9uLCB1c2VQb2ludGVyLCB1c2VQb2ludGVyTG9jaywgdXNlUG9pbnRlclN3aXBlLCB1c2VQcmVmZXJyZWRDb2xvclNjaGVtZSwgdXNlUHJlZmVycmVkQ29udHJhc3QsIHVzZVByZWZlcnJlZERhcmssIHVzZVByZWZlcnJlZExhbmd1YWdlcywgdXNlUHJlZmVycmVkUmVkdWNlZE1vdGlvbiwgdXNlUHJlZmVycmVkUmVkdWNlZFRyYW5zcGFyZW5jeSwgdXNlUHJldmlvdXMsIHVzZVJhZkZuLCB1c2VSZWZIaXN0b3J5LCB1c2VSZXNpemVPYnNlcnZlciwgdXNlU1NSV2lkdGgsIHVzZVNjcmVlbk9yaWVudGF0aW9uLCB1c2VTY3JlZW5TYWZlQXJlYSwgdXNlU2NyaXB0VGFnLCB1c2VTY3JvbGwsIHVzZVNjcm9sbExvY2ssIHVzZVNlc3Npb25TdG9yYWdlLCB1c2VTaGFyZSwgdXNlU29ydGVkLCB1c2VTcGVlY2hSZWNvZ25pdGlvbiwgdXNlU3BlZWNoU3ludGhlc2lzLCB1c2VTdGVwcGVyLCB1c2VTdG9yYWdlLCB1c2VTdG9yYWdlQXN5bmMsIHVzZVN0eWxlVGFnLCB1c2VTdXBwb3J0ZWQsIHVzZVN3aXBlLCB1c2VUZW1wbGF0ZVJlZnNMaXN0LCB1c2VUZXh0RGlyZWN0aW9uLCB1c2VUZXh0U2VsZWN0aW9uLCB1c2VUZXh0YXJlYUF1dG9zaXplLCB1c2VUaHJvdHRsZWRSZWZIaXN0b3J5LCB1c2VUaW1lQWdvLCB1c2VUaW1lQWdvSW50bCwgdXNlVGltZW91dFBvbGwsIHVzZVRpbWVzdGFtcCwgdXNlVGl0bGUsIHVzZVRyYW5zaXRpb24sIHVzZVVybFNlYXJjaFBhcmFtcywgdXNlVXNlck1lZGlhLCB1c2VWTW9kZWwsIHVzZVZNb2RlbHMsIHVzZVZpYnJhdGUsIHVzZVZpcnR1YWxMaXN0LCB1c2VXYWtlTG9jaywgdXNlV2ViTm90aWZpY2F0aW9uLCB1c2VXZWJTb2NrZXQsIHVzZVdlYldvcmtlciwgdXNlV2ViV29ya2VyRm4sIHVzZVdpbmRvd0ZvY3VzLCB1c2VXaW5kb3dTY3JvbGwsIHVzZVdpbmRvd1NpemUgfTsiLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1c2VCcmVha3BvaW50cygpOiBpbXBvcnQoXCJAdnVldXNlL2NvcmVcIikuVXNlQnJlYWtwb2ludFJldHVybjxcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcInhsXCIgfCBcIjJ4bFwiPjtcbiIsImltcG9ydCB0eXBlIHsgTWF5YmVSZWYgfSBmcm9tICd2dWUnO1xuZXhwb3J0IGludGVyZmFjZSBSR0Ige1xuICAgIHI6IG51bWJlcjtcbiAgICBnOiBudW1iZXI7XG4gICAgYjogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBSR0JBIGV4dGVuZHMgUkdCIHtcbiAgICBhOiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEhTTCB7XG4gICAgaDogbnVtYmVyO1xuICAgIHM6IG51bWJlcjtcbiAgICBsOiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9LTENIIHtcbiAgICBsOiBudW1iZXI7XG4gICAgYzogbnVtYmVyO1xuICAgIGg6IG51bWJlcjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGV4dHJhY1JHQihjb2xvcjogc3RyaW5nKTogUkdCO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXh0cmFjdFJHQkEoY29sb3I6IHN0cmluZyk6IFJHQkE7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBoZXhUb1JHQihoZXg6IHN0cmluZyk6IFJHQjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGhzbFRvUmdiKGhzbDogc3RyaW5nKTogUkdCO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmdiVG9Ic2wocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IEhTTDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJnYlRvSGV4KHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZ2JhVG9TdHJpbmcocmdiYTogUkdCQSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGV4dHJhY3RPS0xDSChjb2xvcjogc3RyaW5nKTogT0tMQ0g7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBva2xjaFRvUmdiKGNvbG9yOiBzdHJpbmcpOiBSR0I7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiByZ2JUb09rbGNoKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpOiBPS0xDSDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUNvbG9yVHlwZShwYXlsb2FkPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZVJHQihwYXlsb2FkPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxSR0IgfCBudWxsLCBSR0IgfCBudWxsPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZVJHQkEocGF5bG9hZD86IE1heWJlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KTogaW1wb3J0KFwidnVlXCIpLldyaXRhYmxlQ29tcHV0ZWRSZWY8UkdCQSB8IG51bGwsIFJHQkEgfCBudWxsPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUhTTChwYXlsb2FkPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxIU0wgfCBudWxsLCBIU0wgfCBudWxsPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUhleChwYXlsb2FkPzogTWF5YmVSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4pOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUNvbG9yKHBheWxvYWQ/OiBNYXliZVJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPik6IHtcbiAgICB0eXBlOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsPjtcbiAgICBjb2xvcjogaW1wb3J0KFwidnVlXCIpLlJlZjxzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPjtcbiAgICBoZXg6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPHN0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGw+O1xuICAgIHJnYjogaW1wb3J0KFwidnVlXCIpLldyaXRhYmxlQ29tcHV0ZWRSZWY8UkdCIHwgbnVsbCwgUkdCIHwgbnVsbD47XG4gICAgaHNsOiBpbXBvcnQoXCJ2dWVcIikuV3JpdGFibGVDb21wdXRlZFJlZjxIU0wgfCBudWxsLCBIU0wgfCBudWxsPjtcbiAgICBva2xjaDogaW1wb3J0KFwidnVlXCIpLldyaXRhYmxlQ29tcHV0ZWRSZWY8T0tMQ0ggfCBudWxsLCBPS0xDSCB8IG51bGw+O1xuICAgIHJnYmE6IGltcG9ydChcInZ1ZVwiKS5Xcml0YWJsZUNvbXB1dGVkUmVmPFJHQkEgfCBudWxsLCBSR0JBIHwgbnVsbD47XG59O1xuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRW1taXR0ZXJMaXN0ZW5lck9wdGlvbnMge1xuICAgIGV2ZW50OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyTGlzdGVuZXIge1xuICAgIChkYXRhOiBhbnksIG9wdGlvbnM6IEVtbWl0dGVyTGlzdGVuZXJPcHRpb25zKTogdm9pZDtcbn1cbmludGVyZmFjZSBFbW1pdHRlckhhbmRsZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBsaXN0ZW5lcjogRW1taXR0ZXJMaXN0ZW5lcjtcbiAgICBvcmlnaW5hbExpc3RlbmVyPzogRW1taXR0ZXJMaXN0ZW5lcjtcbn1cbmludGVyZmFjZSBPbk9wdGlvbnMge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHVuaXF1ZT86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgT25EZWJvdW5jZU9wdGlvbnMgZXh0ZW5kcyBPbk9wdGlvbnMge1xuICAgIGRlYm91bmNlPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBFbW1pdHRlclNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtbWl0dGVyU2VydmljZTxFdmVudHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBoYW5kbGVyczogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBFbW1pdHRlclNlcnZpY2VPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zPzogRW1taXR0ZXJTZXJ2aWNlT3B0aW9ucyk6IEVtbWl0dGVyU2VydmljZTxFdmVudHM+O1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdm9pZDtcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdm9pZDtcbiAgICBvbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25jZTxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkRlYm91bmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2UoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbkRlYm91bmNlT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkFueU9mPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50czogS1tdLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9uQW55T2YoZXZlbnRzOiBzdHJpbmdbXSwgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IEVtbWl0dGVySGFuZGxlclsnbGlzdGVuZXInXSk6IHZvaWQ7XG4gICAgZW1pdDxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgYXJnczogRXZlbnRzW0tdKTogdm9pZDtcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiB2b2lkO1xuICAgIGVtaXRBbmRXYWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXRBbmRXYWl0KGV2ZW50OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3QoKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgbGlzdEJ5RXZlbnQoZXZlbnQ6IHN0cmluZyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIHJlbW92ZShwYXlsb2FkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQ7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBoYXNIYW5kbGVycygpOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRHcmlkVW5pdCB7XG4gICAgYmFzZT86IG51bWJlcjtcbiAgICBzbT86IG51bWJlcjtcbiAgICBtZD86IG51bWJlcjtcbiAgICBsZz86IG51bWJlcjtcbiAgICB4bD86IG51bWJlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhc2hib2FyZFdpZGdldERhdGEge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlZmluaXRpb25faWQ6IHN0cmluZztcbiAgICBjb2x1bW5zOiBEYXNoYm9hcmRHcmlkVW5pdDtcbiAgICByb3dzOiBEYXNoYm9hcmRHcmlkVW5pdDtcbiAgICB4OiBEYXNoYm9hcmRHcmlkVW5pdDtcbiAgICB5OiBEYXNoYm9hcmRHcmlkVW5pdDtcbiAgICBvcmRlcjogbnVtYmVyO1xuICAgIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGFydGlhbDxEYXNoYm9hcmRXaWRnZXREYXRhPik7XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIERhc2hib2FyZFdpZGdldEFjdGlvbiB7XG4gICAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbXBvbmVudDogYW55O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGNvbXBvbmVudCgpOiBhbnk7XG4gICAgYWN0aW9ucygpOiBEYXNoYm9hcmRXaWRnZXRBY3Rpb25bXTtcbn1cbiIsImltcG9ydCBFbW1pdHRlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgRGFzaGJvYXJkV2lkZ2V0RGF0YSBmcm9tICcuL0Rhc2hib2FyZFdpZGdldERhdGEnO1xuaW1wb3J0IERhc2hib2FyZFdpZGdldERlZmluaXRpb24gZnJvbSAnLi9EYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IERBU0hCT0FSRF9ST1dfSEVJR0hUID0gODA7XG5pbnRlcmZhY2UgRGFzaGJvYXJkV2lkZ2V0T3B0aW9ucyB7XG4gICAgZGF0YTogRGFzaGJvYXJkV2lkZ2V0RGF0YTtcbiAgICBkZWZpbml0aW9uOiBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uO1xufVxuaW50ZXJmYWNlIFN0eWxlc09wdGlvbnMge1xuICAgIGNvbnRpYW5lcldpZHRoOiBudW1iZXI7XG4gICAgYnJlYWtwb2ludD86ICdiYXNlJyB8ICdzbScgfCAnbWQnIHwgJ3hsJztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhc2hib2FyZFdpZGdldCB7XG4gICAgZGF0YTogRGFzaGJvYXJkV2lkZ2V0RGF0YTtcbiAgICBkZWZpbml0aW9uOiBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoeyBkYXRhLCBkZWZpbml0aW9uIH06IERhc2hib2FyZFdpZGdldE9wdGlvbnMpO1xuICAgIHN0YXRpYyBmcm9tRGF0YShkYXRhOiBEYXNoYm9hcmRXaWRnZXREYXRhKTogRGFzaGJvYXJkV2lkZ2V0O1xuICAgIHNldEVtbWl0dGVyKGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2UpOiB2b2lkO1xuICAgIGdldCBpZCgpOiBzdHJpbmc7XG4gICAgZ2V0IG5hbWUoKTogc3RyaW5nO1xuICAgIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpO1xuICAgIGdldCBvcHRpb25zKCk6IERhc2hib2FyZFdpZGdldERhdGFbJ29wdGlvbnMnXTtcbiAgICBnZXQgZGVmaW5pdGlvbl9pZCgpOiBzdHJpbmc7XG4gICAgY29tcG9uZW50KCk6IGFueTtcbiAgICBhY3Rpb25zKCk6IGltcG9ydChcIi4vRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvblwiKS5EYXNoYm9hcmRXaWRnZXRBY3Rpb25bXTtcbiAgICBnZXQgY29sdW1ucygpOiBEYXNoYm9hcmRXaWRnZXREYXRhWydjb2x1bW5zJ107XG4gICAgc2V0IGNvbHVtbnMocGF5bG9hZDogRGFzaGJvYXJkV2lkZ2V0RGF0YVsnY29sdW1ucyddKTtcbiAgICBnZXQgcm93cygpOiBEYXNoYm9hcmRXaWRnZXREYXRhWydyb3dzJ107XG4gICAgc2V0IHJvd3MocGF5bG9hZDogRGFzaGJvYXJkV2lkZ2V0RGF0YVsncm93cyddKTtcbiAgICBnZXQgeCgpOiBEYXNoYm9hcmRXaWRnZXREYXRhWyd4J107XG4gICAgc2V0IHgocGF5bG9hZDogRGFzaGJvYXJkV2lkZ2V0RGF0YVsneCddKTtcbiAgICBnZXQgeSgpOiBEYXNoYm9hcmRXaWRnZXREYXRhWyd5J107XG4gICAgc2V0IHkocGF5bG9hZDogRGFzaGJvYXJkV2lkZ2V0RGF0YVsneSddKTtcbiAgICBnZXQgY2xhc3NlcygpOiBzdHJpbmc7XG4gICAgY29tcHV0ZVN0eWxlcyhvcHRpb25zOiBTdHlsZXNPcHRpb25zKTogc3RyaW5nO1xuICAgIHVwZGF0ZShwYXlsb2FkOiBQYXJ0aWFsPERhc2hib2FyZFdpZGdldERhdGE+KTogdm9pZDtcbiAgICBzZXRPcHRpb24oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldFgoYnJlYWtwb2ludDogJ2Jhc2UnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJywgdmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkO1xuICAgIHNldFkoYnJlYWtwb2ludDogJ2Jhc2UnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJywgdmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQpOiB2b2lkO1xuICAgIHNldENvbHVtbihicmVha3BvaW50OiAnYmFzZScgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnLCB2YWx1ZT86IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQ7XG4gICAgc2V0Um93KGJyZWFrcG9pbnQ6ICdiYXNlJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcsIHZhbHVlPzogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBudW1iZXI6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGJvb2xlYW46ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQm9vbGVhblNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgYm9vbGVhbiwgYm9vbGVhbj5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRhdGU6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuRGF0ZVNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgRGF0ZSwgRGF0ZT4sIHYuVHJhbnNmb3JtQWN0aW9uPERhdGUsIHN0cmluZz5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGRhdGV0aW1lOiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkRhdGVTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IERhdGUsIHN0cmluZyB8IG51bGw+XT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhcnJheTogPFQgZXh0ZW5kcyB2LkJhc2VTY2hlbWE8YW55LCBhbnksIGFueT4+KHNjaGVtYT86IFQpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8VCwgdW5kZWZpbmVkPl0+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYXJyYXlOdW1iZXI6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5CYXNlU2NoZW1hPGFueSwgYW55LCBhbnk+LCB1bmRlZmluZWQ+XT4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueVtdLCBudW1iZXJbXT5dPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG9iamVjdDogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5SZWNvcmRTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BbnlTY2hlbWEsIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCB7XG4gICAgW3g6IHN0cmluZ106IGFueTtcbn0sIHtcbiAgICBbeDogc3RyaW5nXTogYW55O1xufT4sIHYuVHJhbnNmb3JtQWN0aW9uPHtcbiAgICBbeDogc3RyaW5nXTogYW55O1xufSwgUmVjb3JkPHN0cmluZywgYW55Pj5dPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVybCgpOiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlJlY29yZFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFueVNjaGVtYSwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHtcbiAgICBbeDogc3RyaW5nXTogYW55O1xufSwge1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG59Piwgdi5UcmFuc2Zvcm1BY3Rpb248e1xuICAgIFt4OiBzdHJpbmddOiBhbnk7XG59LCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+O1xuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIHVybCB7XG4gICAgdmFyIG51bWJlcjogKCkgPT4gdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+O1xuICAgIHZhciBib29sZWFuOiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkJvb2xlYW5TY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IGJvb2xlYW4sIGJvb2xlYW4+XT47XG4gICAgdmFyIGRhdGU6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuRGF0ZVNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgRGF0ZSwgRGF0ZT4sIHYuVHJhbnNmb3JtQWN0aW9uPERhdGUsIHN0cmluZz5dPjtcbiAgICB2YXIgZGF0ZXRpbWU6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuRGF0ZVNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgRGF0ZSwgc3RyaW5nIHwgbnVsbD5dPjtcbiAgICB2YXIgYXJyYXk6IDxUIGV4dGVuZHMgdi5CYXNlU2NoZW1hPGFueSwgYW55LCBhbnk+PihzY2hlbWE/OiBUKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPFQsIHVuZGVmaW5lZD5dPjtcbiAgICB2YXIgYXJyYXlOdW1iZXI6ICgpID0+IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5CYXNlU2NoZW1hPGFueSwgYW55LCBhbnk+LCB1bmRlZmluZWQ+XT4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueVtdLCBudW1iZXJbXT5dPjtcbiAgICB2YXIgb2JqZWN0OiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlJlY29yZFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFueVNjaGVtYSwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHtcbiAgICAgICAgW3g6IHN0cmluZ106IGFueTtcbiAgICB9LCB7XG4gICAgICAgIFt4OiBzdHJpbmddOiBhbnk7XG4gICAgfT4sIHYuVHJhbnNmb3JtQWN0aW9uPHtcbiAgICAgICAgW3g6IHN0cmluZ106IGFueTtcbiAgICB9LCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+O1xufVxuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGtleVZhbHVlOiAoKSA9PiB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT47XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uUGFyYW1zIHtcbiAgICBtYXhMaW1pdD86IG51bWJlcjtcbiAgICBvcmRlckZpZWxkcz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgYmFzZTogKG9wdGlvbnM/OiBQYWdpbmF0aW9uUGFyYW1zKSA9PiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgcGFnZTogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248YW55LCBudW1iZXI+LCB2LkludGVnZXJBY3Rpb248bnVtYmVyLCB1bmRlZmluZWQ+XT4sIDE+O1xuICAgIHJlYWRvbmx5IGxpbWl0OiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgbnVtYmVyPjtcbiAgICByZWFkb25seSBvcmRlckJ5OiB2Lk51bGxpc2hTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPHN0cmluZ1tdLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4gfCB2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiwgcmVhZG9ubHkgW10+O1xuICAgIHJlYWRvbmx5IG9yZGVyRGlyZWN0aW9uOiB2Lk51bGxpc2hTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJhc2NcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiZGVzY1wiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+LCByZWFkb25seSBbXT47XG59LCB1bmRlZmluZWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcGFnaW5hdGlvbihvcHRpb25zPzogUGFnaW5hdGlvblBhcmFtcyk6IHYuT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBwYWdlOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgMT47XG4gICAgcmVhZG9ubHkgbGltaXQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPGFueSwgbnVtYmVyPiwgdi5JbnRlZ2VyQWN0aW9uPG51bWJlciwgdW5kZWZpbmVkPl0+LCBudW1iZXI+O1xuICAgIHJlYWRvbmx5IG9yZGVyQnk6IHYuTnVsbGlzaFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuUGlja2xpc3RTY2hlbWE8c3RyaW5nW10sIHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dPiB8IHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+LCByZWFkb25seSBbXT47XG4gICAgcmVhZG9ubHkgb3JkZXJEaXJlY3Rpb246IHYuTnVsbGlzaFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuVW5pb25TY2hlbWE8W3YuTGl0ZXJhbFNjaGVtYTxcImFzY1wiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJkZXNjXCIsIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbn0sIHVuZGVmaW5lZD47XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgcGFnaW5hdGlvbiB7XG4gICAgdmFyIGJhc2U6IChvcHRpb25zPzogUGFnaW5hdGlvblBhcmFtcykgPT4gdi5PYmplY3RTY2hlbWE8e1xuICAgICAgICByZWFkb25seSBwYWdlOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgMT47XG4gICAgICAgIHJlYWRvbmx5IGxpbWl0OiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxhbnksIG51bWJlcj4sIHYuSW50ZWdlckFjdGlvbjxudW1iZXIsIHVuZGVmaW5lZD5dPiwgbnVtYmVyPjtcbiAgICAgICAgcmVhZG9ubHkgb3JkZXJCeTogdi5OdWxsaXNoU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuVW5pb25TY2hlbWE8W3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuQXJyYXlTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZyB8IHN0cmluZ1tdLCBzdHJpbmdbXT4sIHYuQXJyYXlTY2hlbWE8di5QaWNrbGlzdFNjaGVtYTxzdHJpbmdbXSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPl0+IHwgdi5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nIHwgc3RyaW5nW10sIHN0cmluZ1tdPiwgdi5BcnJheVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbiAgICAgICAgcmVhZG9ubHkgb3JkZXJEaXJlY3Rpb246IHYuTnVsbGlzaFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LkFycmF5U2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcgfCBzdHJpbmdbXSwgc3RyaW5nW10+LCB2LkFycmF5U2NoZW1hPHYuVW5pb25TY2hlbWE8W3YuTGl0ZXJhbFNjaGVtYTxcImFzY1wiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJkZXNjXCIsIHVuZGVmaW5lZD5dLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+XT4sIHJlYWRvbmx5IFtdPjtcbiAgICB9LCB1bmRlZmluZWQ+O1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi91cmxWYWxpZGF0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXlWYWx1ZVZhbGlkYXRvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb25WYWxpZGF0b3IudHMnO1xuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmltcG9ydCAqIGFzIGV4dHJhcyBmcm9tICcjc2hhcmVkL3ZhbGlkYXRvcnMvaW5kZXgudHMnO1xuZXhwb3J0IHR5cGUgVmFsaWJvdCA9IHR5cGVvZiB2ICYge1xuICAgIGV4dHJhczogdHlwZW9mIGV4dHJhcztcbn07XG5leHBvcnQgdHlwZSBWYWxpYm90U2NoZW1hID0gdi5CYXNlU2NoZW1hPHVua25vd24sIHVua25vd24sIHYuQmFzZUlzc3VlPHVua25vd24+PjtcbmV4cG9ydCB0eXBlIFZhbGlib3RPYmplY3RTY2hlbWEgPSB2Lk9iamVjdFNjaGVtYTxhbnksIGFueT47XG5leHBvcnQgdHlwZSBWYWxpYm90U2NoZW1hQXN5bmMgPSB2LkJhc2VTY2hlbWFBc3luYzx1bmtub3duLCB1bmtub3duLCB2LkJhc2VJc3N1ZTx1bmtub3duPj47XG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRvckNhbGxiYWNrPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPiB7XG4gICAgKF92OiBWYWxpYm90KTogVDtcbn1cbmV4cG9ydCB0eXBlIFZhbGlkYXRvckNhbGxiYWNrQXN5bmM8VCBleHRlbmRzIFZhbGlib3RTY2hlbWFBc3luYz4gPSB7XG4gICAgKF92OiBWYWxpYm90KTogVDtcbn07XG5leHBvcnQgdHlwZSBWYWxpZGF0b3JSZXN1bHQ8VCBleHRlbmRzIHYuQmFzZVNjaGVtYTxhbnksIGFueSwgYW55Pj4gPSB2LkluZmVyT3V0cHV0PFQ+O1xuZXhwb3J0IHR5cGUgVmFsaWRhdGVQYXlsb2FkPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hID0gVmFsaWJvdFNjaGVtYT4gPSBWYWxpZGF0b3JDYWxsYmFjazxUPiB8IFQ7XG5leHBvcnQgdHlwZSBWYWxpZGF0ZVJlc3VsdDxUIGV4dGVuZHMgVmFsaWRhdGVQYXlsb2FkPiA9IFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hID8gdi5JbmZlck91dHB1dDxUPiA6IFQgZXh0ZW5kcyBWYWxpZGF0b3JDYWxsYmFjazxpbmZlciBVPiA/IHYuSW5mZXJPdXRwdXQ8VT4gOiB1bmtub3duO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdG9yU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHY6IFZhbGlib3Q7XG4gICAgY3JlYXRlPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPihjYjogVmFsaWRhdG9yQ2FsbGJhY2s8VD4pOiBUO1xuICAgIHZhbGlkYXRlPFQgZXh0ZW5kcyBWYWxpYm90U2NoZW1hPihwYXlsb2FkOiBhbnksIGNiOiBWYWxpZGF0ZVBheWxvYWQ8VD4pOiB2LkluZmVyT3V0cHV0PFQ+O1xuICAgIHZhbGlkYXRlQXN5bmM8VCBleHRlbmRzIFZhbGlib3RTY2hlbWFBc3luYz4ocGF5bG9hZDogYW55LCBjYjogVmFsaWRhdG9yQ2FsbGJhY2tBc3luYzxUPiB8IFQpOiBQcm9taXNlPHYuSW5mZXJPdXRwdXQ8VD4+O1xuICAgIGlzVmFsaWQ8VCBleHRlbmRzIFZhbGlib3RTY2hlbWE+KHBheWxvYWQ6IGFueSwgY2I6IFZhbGlkYXRlUGF5bG9hZDxUPik6IGJvb2xlYW47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFZhbGlkYXRvclJlc3VsdCB9IGZyb20gJyNzaGFyZWQvc2VydmljZXMvVmFsaWRhdG9yU2VydmljZS50cyc7XG5leHBvcnQgdHlwZSBEYXNoYm9hcmRTY2hlbWEgPSBWYWxpZGF0b3JSZXN1bHQ8UmV0dXJuVHlwZTx0eXBlb2YgZGFzaGJvYXJkU2NoZW1hPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkYXNoYm9hcmRTY2hlbWEoKTogaW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IG5hbWU6IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZGVsZXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IG1ldGFzOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuUmVjb3JkU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIGltcG9ydChcInZhbGlib3RcIikuQW55U2NoZW1hLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbmV4cG9ydCBkZWNsYXJlIG5hbWVzcGFjZSBkYXNoYm9hcmRTY2hlbWEge1xuICAgIHZhciBjcmVhdGU6IE9taXQ8aW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RTY2hlbWE8e1xuICAgICAgICByZWFkb25seSBpZDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgbmFtZTogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgZGVsZXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBtZXRhczogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlJlY29yZFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLkFueVNjaGVtYSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICB9LCB1bmRlZmluZWQ+LCBcImVudHJpZXNcIiB8IFwifnR5cGVzXCIgfCBcIn5ydW5cIiB8IFwifnN0YW5kYXJkXCI+ICYge1xuICAgICAgICByZWFkb25seSBlbnRyaWVzOiBQaWNrPHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlkOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgbmFtZTogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bGxhYmxlU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSBjcmVhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IGRlbGV0ZWRfYXQ6IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IG1ldGFzOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuUmVjb3JkU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIGltcG9ydChcInZhbGlib3RcIikuQW55U2NoZW1hLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICB9LCBcImRlc2NyaXB0aW9uXCIgfCBcIm5hbWVcIj47XG4gICAgICAgIHJlYWRvbmx5IFwifnN0YW5kYXJkXCI6IGltcG9ydChcInZhbGlib3RcIikuU3RhbmRhcmRQcm9wczx7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIH0+O1xuICAgICAgICByZWFkb25seSBcIn5ydW5cIjogKGRhdGFzZXQ6IGltcG9ydChcInZhbGlib3RcIikuVW5rbm93bkRhdGFzZXQsIGNvbmZpZzogaW1wb3J0KFwidmFsaWJvdFwiKS5Db25maWc8aW1wb3J0KFwidmFsaWJvdFwiKS5CYXNlSXNzdWU8dW5rbm93bj4+KSA9PiBpbXBvcnQoXCJ2YWxpYm90XCIpLk91dHB1dERhdGFzZXQ8e1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIH0sIGltcG9ydChcInZhbGlib3RcIikuT2JqZWN0SXNzdWUgfCBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ0lzc3VlPjtcbiAgICAgICAgcmVhZG9ubHkgXCJ+dHlwZXNcIj86IHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlucHV0OiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRvbmx5IG91dHB1dDoge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkb25seSBpc3N1ZTogaW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RJc3N1ZSB8IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nSXNzdWU7XG4gICAgICAgIH0gfCB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICB2YXIgdXBkYXRlOiBPbWl0PE9taXQ8aW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RTY2hlbWE8e1xuICAgICAgICByZWFkb25seSBpZDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgbmFtZTogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgcmVhZG9ubHkgZGVsZXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICByZWFkb25seSBtZXRhczogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlJlY29yZFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLkFueVNjaGVtYSwgdW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICB9LCB1bmRlZmluZWQ+LCBcImVudHJpZXNcIiB8IFwifnR5cGVzXCIgfCBcIn5ydW5cIiB8IFwifnN0YW5kYXJkXCI+ICYge1xuICAgICAgICByZWFkb25seSBlbnRyaWVzOiBQaWNrPHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlkOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgbmFtZTogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk51bGxhYmxlU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgICAgICAgICByZWFkb25seSBjcmVhdGVkX2F0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IGRlbGV0ZWRfYXQ6IGltcG9ydChcInZhbGlib3RcIikuTnVsbGFibGVTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICAgICAgICAgIHJlYWRvbmx5IG1ldGFzOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuUmVjb3JkU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIGltcG9ydChcInZhbGlib3RcIikuQW55U2NoZW1hLCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICB9LCBcImRlc2NyaXB0aW9uXCIgfCBcIm5hbWVcIj47XG4gICAgICAgIHJlYWRvbmx5IFwifnN0YW5kYXJkXCI6IGltcG9ydChcInZhbGlib3RcIikuU3RhbmRhcmRQcm9wczx7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIH0+O1xuICAgICAgICByZWFkb25seSBcIn5ydW5cIjogKGRhdGFzZXQ6IGltcG9ydChcInZhbGlib3RcIikuVW5rbm93bkRhdGFzZXQsIGNvbmZpZzogaW1wb3J0KFwidmFsaWJvdFwiKS5Db25maWc8aW1wb3J0KFwidmFsaWJvdFwiKS5CYXNlSXNzdWU8dW5rbm93bj4+KSA9PiBpbXBvcnQoXCJ2YWxpYm90XCIpLk91dHB1dERhdGFzZXQ8e1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIH0sIGltcG9ydChcInZhbGlib3RcIikuT2JqZWN0SXNzdWUgfCBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ0lzc3VlPjtcbiAgICAgICAgcmVhZG9ubHkgXCJ+dHlwZXNcIj86IHtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlucHV0OiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRvbmx5IG91dHB1dDoge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkb25seSBpc3N1ZTogaW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RJc3N1ZSB8IGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nSXNzdWU7XG4gICAgICAgIH0gfCB1bmRlZmluZWQ7XG4gICAgfSwgXCJlbnRyaWVzXCIgfCBcIn50eXBlc1wiIHwgXCJ+cnVuXCIgfCBcIn5zdGFuZGFyZFwiPiAmIHtcbiAgICAgICAgcmVhZG9ubHkgZW50cmllczoge1xuICAgICAgICAgICAgcmVhZG9ubHkgZGVzY3JpcHRpb246IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5OdWxsYWJsZVNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICAgICAgcmVhZG9ubHkgbmFtZTogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgICAgICB9O1xuICAgICAgICByZWFkb25seSBcIn5zdGFuZGFyZFwiOiBpbXBvcnQoXCJ2YWxpYm90XCIpLlN0YW5kYXJkUHJvcHM8e1xuICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfT47XG4gICAgICAgIHJlYWRvbmx5IFwifnJ1blwiOiAoZGF0YXNldDogaW1wb3J0KFwidmFsaWJvdFwiKS5Vbmtub3duRGF0YXNldCwgY29uZmlnOiBpbXBvcnQoXCJ2YWxpYm90XCIpLkNvbmZpZzxpbXBvcnQoXCJ2YWxpYm90XCIpLkJhc2VJc3N1ZTx1bmtub3duPj4pID0+IGltcG9ydChcInZhbGlib3RcIikuT3V0cHV0RGF0YXNldDx7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdElzc3VlIHwgaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdJc3N1ZT47XG4gICAgICAgIHJlYWRvbmx5IFwifnR5cGVzXCI/OiB7XG4gICAgICAgICAgICByZWFkb25seSBpbnB1dDoge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRvbmx5IG91dHB1dDoge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRvbmx5IGlzc3VlOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdElzc3VlIHwgaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdJc3N1ZTtcbiAgICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICB9O1xufVxuIiwiaW1wb3J0IEVtbWl0dGVyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS50cyc7XG5pbXBvcnQgRGFzaGJvYXJkV2lkZ2V0RGF0YSBmcm9tICcuL0Rhc2hib2FyZFdpZGdldERhdGEnO1xuaW1wb3J0IERhc2hib2FyZFdpZGdldCBmcm9tICcuL0Rhc2hib2FyZFdpZGdldCc7XG5pbXBvcnQgdHlwZSB7IERhc2hib2FyZFNjaGVtYSB9IGZyb20gJyNzaGFyZWQvc2NoZW1hcy9kYXNoYm9hcmRTY2hlbWEudHMnO1xuZXhwb3J0IGludGVyZmFjZSBEYXNoYm9hcmRPcHRpb25zIHtcbiAgICBkYXNoYm9hcmQ6IERhc2hib2FyZFNjaGVtYTtcbiAgICB3aWRnZXRzPzogRGFzaGJvYXJkV2lkZ2V0RGF0YVtdO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGFzaGJvYXJkIHtcbiAgICBuYW1lOiBEYXNoYm9hcmRTY2hlbWFbJ25hbWUnXTtcbiAgICBkZXNjcmlwdGlvbjogRGFzaGJvYXJkU2NoZW1hWydkZXNjcmlwdGlvbiddO1xuICAgIHdpZGdldHM6IERhc2hib2FyZFdpZGdldFtdO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIHNldE5hbWUobmFtZTogc3RyaW5nKTogdGhpcztcbiAgICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogdGhpcztcbiAgICBzZXRDb250YWluZXJXaWR0aCh3aWR0aDogbnVtYmVyKTogdGhpcztcbiAgICBzZXRXaWRnZXRzKHdpZGdldHM6IERhc2hib2FyZFdpZGdldERhdGFbXSk6IHRoaXM7XG4gICAgZmluZExhc3RSb3coKTogbnVtYmVyO1xuICAgIGFkZFdpZGdldChwYXlsb2FkPzogUGFydGlhbDxEYXNoYm9hcmRXaWRnZXREYXRhPik6IHZvaWQ7XG4gICAgcmVtb3ZlV2lkZ2V0KGluZGV4OiBudW1iZXIpOiB2b2lkO1xuICAgIHJlbW92ZVdpZGdldEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQ7XG4gICAgdXBkYXRlV2lkZ2V0KGluZGV4OiBudW1iZXIsIHdpZGdldDogRGFzaGJvYXJkV2lkZ2V0KTogdm9pZDtcbiAgICBkdXBsaWNhdGVXaWRnZXQoaW5kZXg6IG51bWJlcik6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSBEYXNoYm9hcmRFbnRpdHkgZnJvbSAnI2NsaWVudC9lbnRpdGllcy9EYXNoYm9hcmQudHMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJvdmlkZURhc2hib2FyZChlbnRpdHk6IFJlZjxEYXNoYm9hcmRFbnRpdHk+KTogdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZURhc2hib2FyZCgpOiBSZWY8RGFzaGJvYXJkRW50aXR5PjtcbiIsImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB0eXBlIERhc2hib2FyZFdpZGdldCBmcm9tICcjY2xpZW50L2VudGl0aWVzL0Rhc2hib2FyZFdpZGdldC50cyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcm92aWRlRGFzaGJvYXJkV2lkZ2V0KGVudGl0eTogUmVmPERhc2hib2FyZFdpZGdldD4pOiB2b2lkO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXNlRGFzaGJvYXJkV2lkZ2V0KCk6IFJlZjxEYXNoYm9hcmRXaWRnZXQ+O1xuIiwiaW1wb3J0IHR5cGUgeyBNYXliZVJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmV4cG9ydCBpbnRlcmZhY2UgVXNlRmV0Y2hQYWdpbmF0aW9uT3B0aW9ucyB7XG4gICAga2V5Pzogc3RyaW5nO1xuICAgIHF1ZXJ5PzogTWF5YmVSZWY8UmVjb3JkPHN0cmluZywgYW55Pj47XG4gICAgcGFnZT86IE1heWJlUmVmPG51bWJlcj47XG4gICAgc2VyaWFsaXplPzogKGl0ZW06IGFueSkgPT4gYW55O1xuICAgIHJlZmluZT86IChpdGVtczogYW55W10pID0+IGFueVtdO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9yZGVyQnk/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw7XG4gICAgb3JkZXJEaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJyB8ICgnYXNjJyB8ICdkZXNjJylbXSB8IG51bGw7XG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG4gICAgaW1tZWRpYXRlPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZUZldGNoUGFnaW5hdGlvbjxUID0gYW55Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IFVzZUZldGNoUGFnaW5hdGlvbk9wdGlvbnMpOiB7XG4gICAgcGFnZTogUmVmPG51bWJlciwgbnVtYmVyPjtcbiAgICBsaW1pdDogUmVmPG51bWJlciwgbnVtYmVyPjtcbiAgICBvcmRlckJ5OiBSZWY8c3RyaW5nIHwgc3RyaW5nW10gfCBudWxsLCBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw+O1xuICAgIG9yZGVyRGlyZWN0aW9uOiBSZWY8XCJhc2NcIiB8IFwiZGVzY1wiIHwgKFwiYXNjXCIgfCBcImRlc2NcIilbXSB8IG51bGwsIFwiYXNjXCIgfCBcImRlc2NcIiB8IChcImFzY1wiIHwgXCJkZXNjXCIpW10gfCBudWxsPjtcbiAgICB0b3RhbDogaW1wb3J0KFwidnVlXCIpLkNvbXB1dGVkUmVmPG51bWJlcj47XG4gICAgdG90YWxQYWdlczogaW1wb3J0KFwidnVlXCIpLkNvbXB1dGVkUmVmPG51bWJlcj47XG4gICAgaXRlbXM6IGltcG9ydChcInZ1ZVwiKS5Db21wdXRlZFJlZjxUW10+O1xuICAgIGxvYWRpbmc6IFJlZjxib29sZWFuLCBib29sZWFuPjtcbiAgICBsb2FkOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlc2V0OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIHF1ZXJ5OiBSZWY8UmVjb3JkPHN0cmluZywgYW55PiwgUmVjb3JkPHN0cmluZywgYW55Pj47XG4gICAgaHlkcmF0ZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG4iLCJpbnRlcmZhY2UgRW50cnkge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgc291cmNlOiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZW50cmllczogTWFwPHN0cmluZywgRW50cnk+O1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgbGlzdCgpOiBFbnRyeVtdO1xuICAgIHBhcnNlVmFsdWUodmFsdWU6IGFueSk6IGFueTtcbiAgICBsb2FkRnJvbVJlY29yZChyZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgbG9hZEZyb21FbnRyaWVzKGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZ2V0PFQgPSBhbnkgfCB1bmRlZmluZWQ+KGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBUO1xuICAgIGdldE9uZTxUID0gYW55IHwgdW5kZWZpbmVkPihrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogVDtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdW5zZXQoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgIGNsZWFyKCk6IHZvaWQ7XG4gICAgZHVtcCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IHt9O1xuIiwidHlwZSBDb25zdHJ1Y3RvcjxUID0gb2JqZWN0PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG50eXBlIEVudHJ5S2V5ID0gc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWluZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGVudHJpZXM7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHByaXZhdGUgZ2V0S2V5O1xuICAgIHNldChwYXlsb2FkOiBFbnRyeUtleSwgdmFsdWU6IGFueSk6IHRoaXM7XG4gICAgaGFzKHBheWxvYWQ6IEVudHJ5S2V5KTogYm9vbGVhbjtcbiAgICBnZXQ8VD4ocGF5bG9hZDogRW50cnlLZXkpOiBUO1xuICAgIHVuc2V0KHBheWxvYWQ6IEVudHJ5S2V5KTogdm9pZDtcbiAgICBzaW5nbGV0b248VD4oY2xhc3NDb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4pOiBUO1xuICAgIGxvYWQoZW50cmllczogUmVjb3JkPGFueSwgYW55Pik6IHZvaWQ7XG4gICAgcHJveHk8VCA9IHVua25vd24+KGtleTogRW50cnlLZXkpOiBUO1xuICAgIGtleXMoKTogRW50cnlLZXlbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUlkKHByZWZpeD86IHN0cmluZyk6IHN0cmluZztcbiIsImltcG9ydCB7IGRlZmluZUFiaWxpdHkgfSBmcm9tICdAY2FzbC9hYmlsaXR5JztcbmltcG9ydCBQZXJtaXNzaW9uIGZyb20gJy4vUGVybWlzc2lvbkVudGl0eS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNsRW50aXR5IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgYWJpbGl0eTogUmV0dXJuVHlwZTx0eXBlb2YgZGVmaW5lQWJpbGl0eT47XG4gICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8QWNsRW50aXR5Pik7XG4gICAgY2FuKGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIGNhbm5vdChhY3Rpb246IHN0cmluZywgc3ViamVjdDogYW55LCBvYmplY3Q/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbjtcbiAgICBzdWJqZWN0KHN1YmplY3Q6IHN0cmluZywgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiAmIGltcG9ydChcIkBjYXNsL2FiaWxpdHlcIikuRm9yY2VkU3ViamVjdDxzdHJpbmc+O1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNYW5pZmVzdEJ1aWxkSW1wb3J0IHtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG8/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dsb2JhbF9pbXBvcnQnO1xufVxuZXhwb3J0IGludGVyZmFjZSBNb2R1bGVNYW5pZmVzdEJ1aWxkIHtcbiAgICBpbXBvcnRzPzogTW9kdWxlTWFuaWZlc3RCdWlsZEltcG9ydFtdO1xufVxuZGVjbGFyZSBjb25zdCBNb2R1bGVNYW5pZmVzdF9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZU1hbmlmZXN0IGV4dGVuZHMgTW9kdWxlTWFuaWZlc3RfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYXV0aG9yPzogc3RyaW5nO1xuICAgIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgYnVpbGQ/OiBNb2R1bGVNYW5pZmVzdEJ1aWxkO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIE1vZHVsZU1hbmlmZXN0IGZyb20gJy4vTW9kdWxlTWFuaWZlc3RFbnRpdHkudHMnO1xuaW1wb3J0IExpZmVjeWNsZUhvb2sgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLnRzJztcbmludGVyZmFjZSBNb2R1bGVVcGdyYWRlSW5mbyB7XG4gICAgc291cmNlOiAnZ2l0JyB8ICd6aXAnO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmRlY2xhcmUgY29uc3QgTW9kdWxlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yPHt9PiAmIHR5cGVvZiBMaWZlY3ljbGVIb29rO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlIGV4dGVuZHMgTW9kdWxlX2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgZGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGJ1aWxkOiBNb2R1bGVNYW5pZmVzdFsnYnVpbGQnXTtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgICB1cGdyYWRlX2luZm8/OiBNb2R1bGVVcGdyYWRlSW5mbztcbiAgICBzZXREYXRhKGRhdGE6IFBhcnRpYWw8TW9kdWxlIHwgTW9kdWxlTWFuaWZlc3Q+KTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgY29uc3QgUGx1Z2luRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luRW50aXR5IGV4dGVuZHMgUGx1Z2luRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGFsaWFzZXM6IHN0cmluZ1tdO1xuICAgIHZlcnNpb25fY2hhbm5lbDogc3RyaW5nO1xuICAgIHZlcnNpb25fYXZhaWxhYmxlX2NoYW5uZWxzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgVmFsaWJvdE9iamVjdFNjaGVtYSwgdHlwZSBWYWxpYm90U2NoZW1hLCB0eXBlIFZhbGlkYXRlUGF5bG9hZCwgdHlwZSBWYWxpZGF0b3JSZXN1bHQgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCB7IHRvVHlwZWRTY2hlbWEgYXMgdmVlVmFsaWRhdGVUb1R5cGVkU2NoZW1hIH0gZnJvbSAnQHZlZS12YWxpZGF0ZS92YWxpYm90JztcbmltcG9ydCB7IHR5cGUgRm9ybUNvbnRleHQsIHR5cGUgRm9ybU9wdGlvbnMsIHR5cGUgR2VuZXJpY09iamVjdCB9IGZyb20gJ3ZlZS12YWxpZGF0ZSc7XG5leHBvcnQgaW50ZXJmYWNlIFZhbGlib3RGb3JtT3B0aW9uczxUIGV4dGVuZHMgVmFsaWJvdFNjaGVtYSA9IFZhbGlib3RTY2hlbWE+IGV4dGVuZHMgT21pdDxGb3JtT3B0aW9uczxWYWxpZGF0ZVBheWxvYWQ8VD4sIFZhbGlkYXRvclJlc3VsdDxUPj4sICd2YWxpZGF0aW9uU2NoZW1hJz4ge1xufVxuZXhwb3J0IGludGVyZmFjZSBWYWxpYm90Rm9ybVJlc3VsdE9iamVjdDxUIGV4dGVuZHMgVmFsaWJvdE9iamVjdFNjaGVtYT4gZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBGb3JtQ29udGV4dDxWYWxpZGF0b3JSZXN1bHQ8VD4+IHtcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHVzZUZvcm06IHR5cGVvZiB1c2VWYWxpYm90Rm9ybTtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRvVHlwZWRTY2hlbWE6IHR5cGVvZiB2ZWVWYWxpZGF0ZVRvVHlwZWRTY2hlbWE7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1c2VWYWxpYm90Rm9ybTxUIGV4dGVuZHMgVmFsaWJvdE9iamVjdFNjaGVtYSA9IFZhbGlib3RPYmplY3RTY2hlbWE+KHNjaGVtYTogVCwgb3B0aW9ucz86IFZhbGlib3RGb3JtT3B0aW9uczxUPik6IEZvcm1Db250ZXh0PFZhbGlkYXRvclJlc3VsdDxUPj47XG4iLCJpbXBvcnQgKiBhcyBVbmhlYWRWdWUgZnJvbSAnQHVuaGVhZC92dWUnO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgVU5IRUFEX1ZVRV9DT05UQUlORVJfS0VZID0gXCJ1bmhlYWQtdnVlXCI7XG5kZWNsYXJlIGNvbnN0IHVuaGVhZFZ1ZTogdHlwZW9mIFVuaGVhZFZ1ZTtcbmV4cG9ydCBkZWZhdWx0IHVuaGVhZFZ1ZTtcbiIsImltcG9ydCB1bmhlYWRWdWUgZnJvbSAnI2NsaWVudC9mYWNhZGVzL3VuaGVhZFZ1ZS50cyc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCB1c2VIZWFkOiB0eXBlb2YgdW5oZWFkVnVlLnVzZUhlYWQ7XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1c2VMYXlvdXRPcHRpb25zKCk6IGltcG9ydChcInZ1ZVwiKS5SZWY8YW55LCBhbnk+O1xuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG59XG5pbnRlcmZhY2UgTG9hZGluZ1JlZiBleHRlbmRzIFJlZjxib29sZWFuPiB7XG4gICAgc2V0OiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1c2VMb2FkaW5nKGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiBPcHRpb25zKTogTG9hZGluZ1JlZjtcbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgTWVudUJhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBvcmRlcj86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWVudVNpbmdsZSBleHRlbmRzIE1lbnVCYXNlIHtcbiAgICBpY29uOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICB0YXJnZXQ/OiAnX2JsYW5rJyB8ICdfc2VsZicgfCAnX3BhcmVudCcgfCAnX3RvcCc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1lbnVXaXRoQ2hpbGRyZW4gZXh0ZW5kcyBNZW51QmFzZSB7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIGNoaWxkcmVuOiBPbWl0PE1lbnVTaW5nbGUsICdpY29uJz5bXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUdyb3VwIGV4dGVuZHMgTWVudUJhc2Uge1xuICAgIGdyb3VwOiBib29sZWFuO1xuICAgIGl0ZW1zOiBNZW51SXRlbVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHRvPzogc3RyaW5nO1xuICAgIHRhcmdldD86ICdfYmxhbmsnIHwgJ19zZWxmJyB8ICdfcGFyZW50JyB8ICdfdG9wJztcbiAgICBncm91cD86IHN0cmluZztcbiAgICBvcmRlcj86IG51bWJlcjtcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHBhcmVudD86IHN0cmluZztcbiAgICBsYXlvdXQ/OiBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBVc2VNZW51ID0gUmV0dXJuVHlwZTx0eXBlb2YgdXNlTWVudT47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1c2VNZW51KCk6IHtcbiAgICBpdGVtczogaW1wb3J0KFwidnVlXCIpLkNvbXB1dGVkUmVmPHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgICAgdG8/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRhcmdldD86IFwiX2JsYW5rXCIgfCBcIl9zZWxmXCIgfCBcIl9wYXJlbnRcIiB8IFwiX3RvcFwiIHwgdW5kZWZpbmVkO1xuICAgICAgICBncm91cD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgb3JkZXI/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGljb24/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHBhcmVudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGF5b3V0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH1bXT47XG4gICAgYWRkOiAoLi4uaXRlbTogTWVudUl0ZW1bXSkgPT4gdm9pZDtcbiAgICByZW1vdmU6IChpdGVtOiBNZW51SXRlbSB8IE1lbnVJdGVtW1wiaWRcIl0pID0+IHZvaWQ7XG4gICAgcmVtb3ZlR3JvdXA6IChncm91cElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgcmVtb3ZlTWFueTogKGl0ZW1JZHM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICAgIHJlbW92ZU1hbnlHcm91cDogKGdyb3VwSWRzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgICBjbGVhcjogKCkgPT4gdm9pZDtcbn07XG4iLCJpbXBvcnQgeyB1c2VSb3V0ZVF1ZXJ5IGFzIHZ1ZVVzZXJSb3V0ZVF1ZXJ5IH0gZnJvbSAnQHZ1ZXVzZS9yb3V0ZXInO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgdXNlUm91dGVRdWVyeTogdHlwZW9mIHZ1ZVVzZXJSb3V0ZVF1ZXJ5O1xuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuZXhwb3J0IGludGVyZmFjZSBVc2VTdGF0ZU9wdGlvbnMge1xuICAgIGRlZmF1bHQ/OiAoKSA9PiBhbnk7XG4gICAgdHJhbnNmb3JtPzogKHZhbHVlOiBhbnkpID0+IGFueTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVzZVN0YXRlPFQ+KGtleTogc3RyaW5nLCBvcHRpb25zPzogVXNlU3RhdGVPcHRpb25zKTogUmVmPFQ+O1xuIiwiaW1wb3J0IEFjbEVudGl0eSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0FjbEVudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IGFjbDogQWNsRW50aXR5O1xuZXhwb3J0IGRlZmF1bHQgYWNsO1xuIiwiaW1wb3J0IEF1dGhTZXJ2aWNlIGZyb20gJyNjbGllbnQvc2VydmljZXMvQXV0aFNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBhdXRoOiBBdXRoU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGF1dGg7XG4iLCJpbXBvcnQgQ29uZmlnU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBjb25maWc6IENvbmZpZ1NlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBjb25maWc7XG4iLCJpbXBvcnQgQ29udGFpbmVyU2VydmljZSBmcm9tIFwiI3NoYXJlZC9zZXJ2aWNlcy9Db250YWluZXJTZXJ2aWNlLnRzXCI7XG5kZWNsYXJlIGNvbnN0IF9kZWZhdWx0OiBDb250YWluZXJTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgX2RlZmF1bHQ7XG4iLCJpbXBvcnQgdHlwZSBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uIGZyb20gJyNjbGllbnQvZW50aXRpZXMvRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbi50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXNoYm9hcmRXaWRnZXRSZWdpc3RyeSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM7XG4gICAgcmVnaXN0ZXIoLi4uZGVmaW5pdGlvbjogRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbltdKTogdm9pZDtcbiAgICBnZXQoaWQ6IHN0cmluZyk6IERhc2hib2FyZFdpZGdldERlZmluaXRpb24gfCBudWxsO1xuICAgIGxpc3QoKTogRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbltdO1xufVxuIiwiaW1wb3J0IERhc2hib2FyZFdpZGdldFJlZ2lzdHJ5IGZyb20gJyNjbGllbnQvcmVnaXN0cnkvRGFzaGJvYXJkV2lkZ2V0UmVnaXN0cnkudHMnO1xuZGVjbGFyZSBjb25zdCBkYXNoYm9hcmRSZWdpc3RyeTogRGFzaGJvYXJkV2lkZ2V0UmVnaXN0cnk7XG5leHBvcnQgZGVmYXVsdCBkYXNoYm9hcmRSZWdpc3RyeTtcbiIsImltcG9ydCB7IEVtbWl0dGVyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuZGVjbGFyZSBjb25zdCBlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlZmF1bHQgZW1taXR0ZXI7XG4iLCJpbXBvcnQgRmV0Y2hTZXJ2aWNlIGZyb20gJyNjbGllbnQvc2VydmljZXMvRmV0Y2hTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgZmV0Y2hlcjogRmV0Y2hTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgZmV0Y2hlcjtcbiIsImRlY2xhcmUgY29uc3QgbGF5b3V0OiBhbnk7XG5leHBvcnQgZGVmYXVsdCBsYXlvdXQ7XG4iLCJpbXBvcnQgTGlmZWN5Y2xlU2VydmljZSBmcm9tICcjY2xpZW50L3NlcnZpY2VzL0xpZmVjeWNsZVNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBsaWZlY3ljbGU6IExpZmVjeWNsZVNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBsaWZlY3ljbGU7XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iLCJpbXBvcnQgTWVudVNlcnZpY2UgZnJvbSAnI2NsaWVudC9zZXJ2aWNlcy9NZW51U2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IG1lbnU6IE1lbnVTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgbWVudTtcbiIsImltcG9ydCB0eXBlIHsgUm91dGVMb2NhdGlvbk5vcm1hbGl6ZWRHZW5lcmljIH0gZnJvbSAndnVlLXJvdXRlcic7XG5kZWNsYXJlIGNvbnN0IHJvdXRlOiBSb3V0ZUxvY2F0aW9uTm9ybWFsaXplZEdlbmVyaWM7XG5leHBvcnQgZGVmYXVsdCByb3V0ZTtcbiIsImltcG9ydCB0eXBlIHsgUm91dGVyIH0gZnJvbSAnI2NsaWVudC9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3Qgcm91dGVyOiBSb3V0ZXI7XG5leHBvcnQgZGVmYXVsdCByb3V0ZXI7XG4iLCJpbXBvcnQgVG9hc3RTZXJ2aWNlIGZyb20gJyNjbGllbnQvc2VydmljZXMvVG9hc3RTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgdG9hc3Q6IFRvYXN0U2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IHRvYXN0O1xuIiwiaW1wb3J0ICogYXMgVmVlVmFsaWRhdGUgZnJvbSAndmVlLXZhbGlkYXRlJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFZFRV9WQUxJREFURV9DT05UQUlORVJfS0VZID0gXCJ2ZWUtdmFsaWRhdGVcIjtcbmRlY2xhcmUgY29uc3QgdmVlVmFsaWRhdGU6IHR5cGVvZiBWZWVWYWxpZGF0ZTtcbmV4cG9ydCBkZWZhdWx0IHZlZVZhbGlkYXRlO1xuIiwiaW1wb3J0ICogYXMgVnVlIGZyb20gJ3Z1ZSc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBWVUVfQ09OVEFJTkVSX0tFWSA9IFwiVnVlXCI7XG5kZWNsYXJlIGNvbnN0IHZ1ZTogdHlwZW9mIFZ1ZTtcbmV4cG9ydCBkZWZhdWx0IHZ1ZTtcbiIsImltcG9ydCAqIGFzIFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJztcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IFZVRV9ST1VURVJfQ09OVEFJTkVSX0tFWSA9IFwiVnVlUm91dGVyXCI7XG5kZWNsYXJlIGNvbnN0IHZ1ZVJvdXRlcjogdHlwZW9mIFZ1ZVJvdXRlcjtcbmV4cG9ydCBkZWZhdWx0IHZ1ZVJvdXRlcjtcbiIsImltcG9ydCBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uIGZyb20gJy4vRGFzaGJvYXJkV2lkZ2V0RGVmaW5pdGlvbic7XG5pbXBvcnQgdHlwZSBEYXNoYm9hcmRXaWRnZXREYXRhIGZyb20gJy4vRGFzaGJvYXJkV2lkZ2V0RGF0YSc7XG4vKipcbiAgICAqIENvbXBvbmVudCB0byBiZSB1c2VkIGZvciBjaGFydCB3aWRnZXRzIGluIHRoZSBkYXNoYm9hcmQuXG4gICAgKiBQbHVnaW5zIGNhbiBleHRlbmQgdGhpcyBjbGFzcyB0byBjcmVhdGUgdGhlaXIgb3duIGNoYXJ0IHdpZGdldHMuXG4gICAgKiBAZXhhbXBsZVxuICAgICogY2xhc3MgTXlDaGFydFdpZGdldCBleHRlbmRzIERhc2hib2FyZFdpZGdldERlZmluaXRpb25DaGFydCB7XG4gICAgKiAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgKiAgICAgICAgIHN1cGVyKClcbiAgICAqICAgICAgICAgdGhpcy5uYW1lID0gJ015IENoYXJ0IFdpZGdldCdcbiAgICAqICAgICAgICAgdGhpcy5pZCA9ICdteS1jaGFydC13aWRnZXQnXG4gICAgKiAgICAgfVxuICAgICogfVxuICAgICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uQ2hhcnQgZXh0ZW5kcyBEYXNoYm9hcmRXaWRnZXREZWZpbml0aW9uIHtcbiAgICBwcml2YXRlIHN0YXRpYyByZW5kZXJlcjtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIHN0YXRpYyBzZXRSZW5kZXJlcihyZW5kZXJlcjogYW55KTogdm9pZDtcbiAgICBjb21wb25lbnQoKTogYW55O1xuICAgIGNoYXJ0T3B0aW9ucyhwYXlsb2FkOiBEYXNoYm9hcmRXaWRnZXREYXRhWydvcHRpb25zJ10pOiBQcm9taXNlPGFueT47XG59XG4iLCJpbXBvcnQgQmFzZSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL01vZHVsZUVudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IE1vZHVsZV9iYXNlOiB0eXBlb2YgQmFzZTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZSBleHRlbmRzIE1vZHVsZV9iYXNlIHtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGx1Z2luRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgQXV0b09wdGlvbnMgfSBmcm9tICcjY2xpZW50L3NlcnZpY2VzL1JvdXRlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRpdHlfYmFzZTogdHlwZW9mIEJhc2U7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRpdHlfYmFzZSB7XG4gICAgYWRkUGFnZXNGb2xkZXIoaW1wb3J0czogYW55LCBvcHRpb25zPzogQXV0b09wdGlvbnMpOiB2b2lkO1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgQXV0b09wdGlvbnMgfSBmcm9tICcjY2xpZW50L3NlcnZpY2VzL1JvdXRlclNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBEZWZpbmVDb21wb25lbnQgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZVJlY29yZFJhdyB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuLyoqIEBkZXByZWNhdGVkIFVzZSBhdXRvIGZyb20gUm91dGVyU2VydmljZSBpbnN0ZWFkICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBhdXRvUm91dGVzKGltcG9ydHM6IFJlY29yZDxzdHJpbmcsIERlZmluZUNvbXBvbmVudCB8ICgoKSA9PiBQcm9taXNlPERlZmluZUNvbXBvbmVudD4pPiwgb3B0aW9ucz86IEF1dG9PcHRpb25zKTogUm91dGVSZWNvcmRSYXdbXTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgRGF0YVRhYmxlQ29sdW1uPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGZpZWxkPzoga2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpIHwgKHN0cmluZyAmIHt9KTtcbiAgICBzb3J0YWJsZT86IGJvb2xlYW47XG4gICAgd2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmVDb2x1bW5zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+Pihjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW48VD5bXSk6IERhdGFUYWJsZUNvbHVtbjxUPltdO1xuIiwiZXhwb3J0IGludGVyZmFjZSBEZWZpbmVGb3JtRmllbGQge1xuICAgIGNvbXBvbmVudDogJ3RleHQtZmllbGQnIHwgJ3RleHRhcmVhJyB8ICdzZWxlY3QnIHwgJ2F1dG9jb21wbGV0ZScgfCAnc3dpdGNoJyB8ICdmaWxlLXVwbG9hZCcgfCAnaW1hZ2UtdXBsb2FkJyB8ICdjb2xvci1waWNrZXInIHwgJ3N0cmluZy1saXN0LWlucHV0JyB8ICdqc29uLWlucHV0JyB8ICdkYXRlLXBpY2tlcicgfCAnaGlkZGVuJztcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmVGb3JtRmllbGRzKGZpZWxkOiBSZWNvcmQ8c3RyaW5nLCBEZWZpbmVGb3JtRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmaW5lRm9ybUZpZWxkPjtcbiIsIi8qKiBAZGVwcmVjYXRlZCBVc2UgZmV0Y2hlciBmYWNhZGUgKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0ICRmZXRjaDogaW1wb3J0KFwiLi5cIikuRmV0Y2hTZXJ2aWNlO1xuIiwiaW50ZXJmYWNlIFBpY2tPcHRpb25zIHtcbiAgICBhY2NlcHQ/OiBzdHJpbmc7XG4gICAgbXVsdGlwbGU/OiBib29sZWFuO1xufVxudHlwZSBQaWNrUmVzdWx0PFQgZXh0ZW5kcyBQaWNrT3B0aW9ucz4gPSBUWydtdWx0aXBsZSddIGV4dGVuZHMgdHJ1ZSA/IEZpbGVbXSA6IEZpbGUgfCBudWxsO1xuZGVjbGFyZSBmdW5jdGlvbiBwaWNrPFQgZXh0ZW5kcyBQaWNrT3B0aW9ucz4ob3B0aW9uczogVCk6IFByb21pc2U8UGlja1Jlc3VsdDxUPj47XG5kZWNsYXJlIGZ1bmN0aW9uIHRvVWludDhBcnJheShmaWxlOiBGaWxlKTogUHJvbWlzZTxVaW50OEFycmF5PjtcbmludGVyZmFjZSBVcGxvYWRPcHRpb25zIHtcbiAgICBkcml2ZUlkOiBzdHJpbmc7XG4gICAgZmlsZTogRmlsZTtcbiAgICBkaXJlY3Rvcnk/OiBzdHJpbmc7XG59XG5kZWNsYXJlIGZ1bmN0aW9uIHVwbG9hZChvcHRpb25zOiBVcGxvYWRPcHRpb25zKTogUHJvbWlzZTxhbnk+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgJGZpbGU6IHtcbiAgICBwaWNrOiB0eXBlb2YgcGljaztcbiAgICB1cGxvYWQ6IHR5cGVvZiB1cGxvYWQ7XG4gICAgdG9VaW50OEFycmF5OiB0eXBlb2YgdG9VaW50OEFycmF5O1xufTtcbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlVG8odG86IHN0cmluZyk6IHN0cmluZztcbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0ICR0b2FzdDogKChtZXNzYWdlOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXIpICYge1xuICAgIHN1Y2Nlc3M6IChtZXNzYWdlOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gICAgaW5mbzogKG1lc3NhZ2U6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50KSB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQsIGRhdGE/OiBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLkV4dGVybmFsVG9hc3QpID0+IHN0cmluZyB8IG51bWJlcjtcbiAgICB3YXJuaW5nOiAobWVzc2FnZTogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQpIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCwgZGF0YT86IGltcG9ydChcInZ1ZS1zb25uZXJcIikuRXh0ZXJuYWxUb2FzdCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xuICAgIGVycm9yOiAobWVzc2FnZTogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQpIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCwgZGF0YT86IGltcG9ydChcInZ1ZS1zb25uZXJcIikuRXh0ZXJuYWxUb2FzdCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xuICAgIGN1c3RvbTogKGNvbXBvbmVudDogaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCwgZGF0YT86IGltcG9ydChcInZ1ZS1zb25uZXJcIikuRXh0ZXJuYWxUb2FzdCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xuICAgIG1lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCkgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50LCBkYXRhPzogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5FeHRlcm5hbFRvYXN0KSA9PiBzdHJpbmcgfCBudW1iZXI7XG4gICAgcHJvbWlzZTogPFRvYXN0RGF0YT4ocHJvbWlzZTogUHJvbWlzZTxUb2FzdERhdGE+IHwgKCgpID0+IFByb21pc2U8VG9hc3REYXRhPiksIGRhdGE/OiAoe1xuICAgICAgICBpZD86IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWNvbj86IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQgfCB1bmRlZmluZWQ7XG4gICAgICAgIHRvYXN0ZXJJZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29tcG9uZW50PzogaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29tcG9uZW50UHJvcHM/OiBhbnk7XG4gICAgICAgIHJpY2hDb2xvcnM/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBpbnZlcnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBjbG9zZUJ1dHRvbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGRpc21pc3NpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHVyYXRpb24/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGltcG9ydGFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGFjdGlvbj86IChpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLkFjdGlvbiB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQpIHwgdW5kZWZpbmVkO1xuICAgICAgICBjYW5jZWw/OiAoaW1wb3J0KFwidnVlLXNvbm5lclwiKS5BY3Rpb24gfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50KSB8IHVuZGVmaW5lZDtcbiAgICAgICAgb25EaXNtaXNzPzogKCh0b2FzdDogaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Ub2FzdFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgICBvbkF1dG9DbG9zZT86ICgodG9hc3Q6IGltcG9ydChcInZ1ZS1zb25uZXJcIikuVG9hc3RUKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAgICAgY2FuY2VsQnV0dG9uU3R5bGU/OiBpbXBvcnQoXCJ2dWVcIikuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgICAgICAgYWN0aW9uQnV0dG9uU3R5bGU/OiBpbXBvcnQoXCJ2dWVcIikuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgICAgICAgc3R5bGU/OiBpbXBvcnQoXCJ2dWVcIikuQ1NTUHJvcGVydGllcyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdW5zdHlsZWQ/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgICBjbGFzcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgY2xhc3Nlcz86IGltcG9ydChcInZ1ZS1zb25uZXJcIikuVG9hc3RDbGFzc2VzIHwgdW5kZWZpbmVkO1xuICAgICAgICBkZXNjcmlwdGlvbkNsYXNzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBwb3NpdGlvbj86IChcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIiB8IFwidG9wLWNlbnRlclwiIHwgXCJib3R0b20tY2VudGVyXCIpIHwgdW5kZWZpbmVkO1xuICAgICAgICBjbG9zZUJ1dHRvblBvc2l0aW9uPzogKFwidG9wLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcImJvdHRvbS1yaWdodFwiKSB8IHVuZGVmaW5lZDtcbiAgICAgICAgdGVzdElkPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH0gJiB7XG4gICAgICAgIGxvYWRpbmc/OiBzdHJpbmcgfCBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50O1xuICAgICAgICBzdWNjZXNzPzogKHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQgfCAoKGRhdGE6IFRvYXN0RGF0YSkgPT4gaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8IHN0cmluZyB8IFByb21pc2U8aW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8IHN0cmluZz4pKSB8IChpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlByb21pc2VJRXh0ZW5kZWRSZXN1bHQgfCAoKGRhdGE6IFRvYXN0RGF0YSkgPT4gaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Qcm9taXNlSUV4dGVuZGVkUmVzdWx0IHwgUHJvbWlzZTxpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlByb21pc2VJRXh0ZW5kZWRSZXN1bHQ+KSkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGVycm9yPzogKHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQgfCAoKGRhdGE6IGFueSkgPT4gaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8IHN0cmluZyB8IFByb21pc2U8aW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8IHN0cmluZz4pKSB8IChpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlByb21pc2VJRXh0ZW5kZWRSZXN1bHQgfCAoKGRhdGE6IGFueSkgPT4gaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Qcm9taXNlSUV4dGVuZGVkUmVzdWx0IHwgUHJvbWlzZTxpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlByb21pc2VJRXh0ZW5kZWRSZXN1bHQ+KSk7XG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCB8ICgoZGF0YTogYW55KSA9PiBpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgc3RyaW5nIHwgUHJvbWlzZTxpbXBvcnQoXCJ2dWVcIikuQ29tcG9uZW50IHwgc3RyaW5nPik7XG4gICAgICAgIGZpbmFsbHk/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICB9KSB8IHVuZGVmaW5lZCkgPT4gKHN0cmluZyAmIHtcbiAgICAgICAgdW53cmFwOiAoKSA9PiBQcm9taXNlPFRvYXN0RGF0YT47XG4gICAgfSkgfCAobnVtYmVyICYge1xuICAgICAgICB1bndyYXA6ICgpID0+IFByb21pc2U8VG9hc3REYXRhPjtcbiAgICB9KSB8IHtcbiAgICAgICAgdW53cmFwOiAoKSA9PiBQcm9taXNlPFRvYXN0RGF0YT47XG4gICAgfSB8IHVuZGVmaW5lZDtcbiAgICBkaXNtaXNzOiAoaWQ/OiBudW1iZXIgfCBzdHJpbmcpID0+IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBsb2FkaW5nOiAobWVzc2FnZTogc3RyaW5nIHwgKCgpID0+IHN0cmluZyB8IGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQpIHwgaW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudCwgZGF0YT86IGltcG9ydChcInZ1ZS1zb25uZXJcIikuRXh0ZXJuYWxUb2FzdCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xufSAmIHtcbiAgICBnZXRIaXN0b3J5OiAoKSA9PiAoaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Ub2FzdFQ8aW1wb3J0KFwidnVlXCIpLkNvbXBvbmVudD4gfCBpbXBvcnQoXCJ2dWUtc29ubmVyXCIpLlRvYXN0VG9EaXNtaXNzKVtdO1xuICAgIGdldFRvYXN0czogKCkgPT4gKGltcG9ydChcInZ1ZS1zb25uZXJcIikuVG9hc3RUPGltcG9ydChcInZ1ZVwiKS5Db21wb25lbnQ+IHwgaW1wb3J0KFwidnVlLXNvbm5lclwiKS5Ub2FzdFRvRGlzbWlzcylbXTtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4JztcbmltcG9ydCB7IHR5cGUgQ2xhc3NOYW1lVmFsdWUgfSBmcm9tICd0YWlsd2luZC1tZXJnZSc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB0d01lcmdlKC4uLmlucHV0czogQ2xhc3NOYW1lVmFsdWVbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNsc3goLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSk6IHN0cmluZztcbiIsImltcG9ydCB0eXBlIHsgTmF2aWdhdGlvbkd1YXJkLCBSb3V0ZUxvY2F0aW9uTm9ybWFsaXplZCB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuZXhwb3J0IGludGVyZmFjZSBBdXRoR3VhcmRPcHRpb25zIHtcbiAgICByZWRpcmVjdDogc3RyaW5nIHwgKCh0bzogUm91dGVMb2NhdGlvbk5vcm1hbGl6ZWQpID0+IHN0cmluZyk7XG4gICAgZXhjbHVkZT86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlQXV0aEd1YXJkKG9wdGlvbnM6IEF1dGhHdWFyZE9wdGlvbnMpOiBOYXZpZ2F0aW9uR3VhcmQ7XG5kZWNsYXJlIGNvbnN0IGF1dGhHdWFyZDogTmF2aWdhdGlvbkd1YXJkO1xuZXhwb3J0IGRlZmF1bHQgYXV0aEd1YXJkO1xuIiwiZXhwb3J0IGludGVyZmFjZSBHdWVzdEd1YXJkT3B0aW9ucyB7XG4gICAgcmVkaXJlY3Q6IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUd1ZXN0R3VhcmQob3B0aW9uczogR3Vlc3RHdWFyZE9wdGlvbnMpOiAoKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGNvbnN0IGd1ZXN0R3VhcmQ6ICgpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbmV4cG9ydCBkZWZhdWx0IGd1ZXN0R3VhcmQ7XG4iLCJpbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25HdWFyZCB9IGZyb20gJ3Z1ZS1yb3V0ZXInO1xuZGVjbGFyZSBjb25zdCBzZXR1cEd1YXJkOiBOYXZpZ2F0aW9uR3VhcmQ7XG5leHBvcnQgZGVmYXVsdCBzZXR1cEd1YXJkO1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlsxN10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFXLGdCQUFjO0NBQUM7RUFBSyxNQUFHLENBQUcsRUFBRTtDQUFFO0VBQUM7RUFBSTtFQUFFO0VBQUs7Q0FBQzs7OztBQ0R0RCxJQUFJLHdCQUFzQjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxtQkFBZ0I7Q0FBQTtPQUFVLENBQU0sUUFBUSxzQkFBZ0I7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDVELElBQUksWUFBWTtDQUFDO0VBQUssTUFBSTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksT0FBSTtDQUFBO09BQVksQ0FBQSxVQUFVO0NBQU07RUFBQztFQUFFO0VBQU07RUFBRztFQUFBO0NBQUE7Ozs7QUNDaEQsSUFBSSxrQkFBa0I7Q0FBQztFQUFHLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGFBQVU7Q0FBSTtPQUFXO0VBQUM7RUFBTTtFQUFZO0VBQU07RUFBTTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSDVELElBQUEsZ0JBQVU7Q0FBQTtPQUFjLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN4QixJQUFJLGNBQVc7Q0FBQTtPQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0ZyQixJQUFPLGVBQVU7Q0FBQTtPQUFvQjtFQUFDO0VBQUE7RUFBWTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNsRCxJQUFJLGVBQWU7Q0FBQTtFQUFBLE1BQVE7RUFBRztFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQy9CLElBQUEsc0JBQXFCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBNEI7RUFBQTtFQUFhO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQTlELElBQUEsbUJBQXFCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBeUI7RUFBQTtFQUFhO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0QzRCxJQUFBLGdCQUFvQjtDQUFDO09BQUE7RUFBQTtFQUFjO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEbkMsSUFBQSxnQkFBb0I7Q0FBQztPQUFBLENBQUEsT0FBYyxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FuQyxJQUFBLGdCQUFvQjtDQUFDO09BQUE7RUFBQTtFQUFjO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0duQyxJQUFJLGtCQUFrQjtDQUFDO09BQVcsRUFBRTtDQUFDLEVBQUE7Q0FBSTtBQUN6QyxJQUFBLGNBQVU7Q0FBQTtPQUFZLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3RCLElBQVcsMEJBQW9CO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQy9CLElBQUkscUJBQW1CO0NBQUE7T0FBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNML0IsSUFBQSxtQkFBcUI7Q0FBQTtPQUFBLENBQUEsUUFBaUIsbUJBQVE7Q0FBb0I7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBbkUsSUFBSSxnQkFBYztDQUFHO0VBQUksTUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxhQUFVO0NBQUE7T0FBTSxDQUFPLGNBQVk7Q0FBSTtFQUFDO0VBQUk7RUFBQTtFQUFRO0VBQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Q1RCxJQUFPLGFBQVU7Q0FBQTtPQUFXLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFJLGNBQVM7Q0FBTTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0NuQixJQUFPLFNBQVU7Q0FBQTtPQUFjLENBQUMsTUFBQSxTQUFVO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFDLElBQVUsY0FBVztDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNyQixJQUFBLE9BQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBTyxlQUFVO0NBQUE7T0FBWSxDQUFBLE9BQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ043QixJQUFBLGVBQWU7Q0FBSztPQUFDLENBQUEsUUFBYSxPQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDaUlsQyxJQUFJLHNCQUFrQjtDQUFBO0VBQVUsUUFBQztFQUFBO0VBQVM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7Ozs7Ozs7OztBRS9IMUMsSUFBTyxNQUFNO0NBQUE7T0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2IsSUFBTyxPQUFNO0NBQUE7T0FBQSxDQUFBLElBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2IsSUFBTyxNQUFNO0NBQUE7T0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2IsSUFBQSxRQUFBO0NBQUE7T0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBTyxZQUFlO0NBQUE7T0FBWSxDQUFBLElBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2xDLElBQU8sY0FBTTtDQUFBO09BQUEsQ0FBQSxLQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNiLElBQUEsV0FBQTtDQUFBO09BQUEsQ0FBQSxJQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNBLElBQU8sV0FBYztDQUFBO09BQUEsQ0FBQSxJQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNyQixJQUFPLFdBQU07Q0FBQTtPQUFBLENBQUEsSUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2IsSUFBTyxXQUFNO0NBQUE7T0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2IsSUFBTyxlQUFNO0NBQUE7T0FBQSxDQUFBLEtBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2IsSUFBQSxlQUFBO0NBQUE7T0FBQSxDQUFBLE1BQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ0EsSUFBTyxhQUFnQjtDQUFBO09BQUEsQ0FBQSxJQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUN2QixJQUFPLGFBQU07Q0FBQTtPQUFBLENBQUEsTUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2IsSUFBTyxlQUFNO0NBQUE7T0FBQSxDQUFBLFVBQUEsTUFBQSxvQkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNiLElBQU8sU0FBTTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2IsSUFBQSxVQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFPLFNBQVE7Q0FBQTtPQUFTO0VBQUE7RUFBaUI7RUFBTTtFQUFHLE1BQUc7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDckQsSUFBTyxTQUFRO0NBQUE7T0FBUyxDQUFBLFVBQWtCLE1BQUMsb0JBQWE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDeEQsSUFBTyxXQUFRO0NBQVE7T0FBVTtFQUFBO0VBQVcsTUFBTTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ3BCbEQsSUFBTywwQkFBVTtDQUFBO09BQXdCLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN6QyxJQUFXLG1CQUFNO0NBQUE7T0FBQSxDQUFBLHdCQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2pCLElBQUEsa0JBQUE7Q0FBQTtPQUFBLENBQUEsa0JBQUEsaUJBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFBLFlBQWdCO0NBQUM7T0FBQSxFQUFBO0NBQUEsQ0FBZ0IsSUFBQyxHQUFBO0NBQUE7QUFDbEMsSUFBSSxvQkFBb0I7Q0FBQztPQUFBLENBQUEsVUFBQTtDQUF3QixDQUFDLElBQUMsR0FBSTtDQUFBO0FBQ3ZELElBQUEseUJBQUE7Q0FBQTtPQUFBLENBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUEsa0JBQVU7Q0FBQTtFQUFnQixRQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNQMUIsSUFBTyxvQkFBVTtDQUFBO09BQWtCLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ25DLElBQUksc0JBQWE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RqQixJQUFPLHdCQUFVO0NBQUE7T0FBc0IsQ0FBQSxPQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3ZDLElBQUksNEJBQTJCO0NBQUE7T0FBQSxDQUFBLHNCQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0cvQixJQUFVLHVCQUF1QjtDQUFBO09BQUEsRUFBQTtDQUFBLEVBQUE7Q0FBQTtBQUNqQyxJQUFJLHlCQUF5QjtDQUFBO09BQUEsQ0FBQSxxQkFBQSwwQkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzdCLElBQUksZ0JBQVk7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBeUI7Q0FBQTtBQUN6QyxJQUFBLGtCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNOQSxJQUFPLFNBQWE7Q0FBQztPQUFZO0VBQUMsRUFBRTtFQUFDLEVBQWU7RUFBWSxFQUFBO0VBQWUsRUFBQTtFQUFhLEVBQVU7RUFBSSxFQUFhO0VBQWE7Q0FBQTtFQUFBO0VBQVM7RUFBSTtFQUFDO0VBQUE7RUFBQTtFQUFlO0VBQUk7RUFBRTtFQUFNO0VBQUk7RUFBQztFQUFBO0NBQUE7QUFDbEwsSUFBTyxVQUFjO0NBQUE7T0FBYTtFQUFDLEVBQUU7RUFBQyxFQUFlO0VBQVksRUFBQTtFQUFlLEVBQUE7RUFBc0IsRUFBRTtFQUFHO0NBQWM7RUFBQTtFQUFBO0VBQVM7RUFBSTtFQUFBO0VBQUE7RUFBWTtFQUFFO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEosSUFBTyxPQUFRO0NBQUE7T0FBZ0I7RUFBQyxFQUFFO0VBQUMsRUFBZTtFQUFZLEVBQUE7RUFBZTtFQUFBO0VBQVksRUFBQztFQUFjO0VBQVUsRUFBQztFQUFhLEVBQUE7RUFBYztDQUFBO0VBQUE7RUFBZTtFQUFDO0VBQU87RUFBRTtFQUFNO0VBQUk7RUFBSTtFQUFDO0VBQUE7RUFBQTtFQUFlO0VBQUM7RUFBTTtFQUFBO0VBQVE7Q0FBQztBQUNyTixJQUFPLFdBQWM7Q0FBQTtPQUFjO0VBQUMsRUFBRTtFQUFDLEVBQWU7RUFBWSxFQUFBO0VBQWU7RUFBQSxFQUFBO0VBQXlCLEVBQUU7RUFBVztDQUFBO0VBQUE7RUFBVztFQUFFO0VBQUE7RUFBVTtFQUFJO0VBQUE7RUFBQTtFQUFBO0VBQWdCO0VBQUE7RUFBTztDQUFDO0FBQzFLLElBQU8sUUFBUTtDQUFLO0VBQU0sTUFBSztFQUFBLEVBQUE7RUFBVTtFQUFBLEVBQVU7RUFBYyxFQUFFO0VBQWMsRUFBRTtFQUFFLEVBQUE7RUFBMEIsRUFBQztFQUFlO0VBQUEsRUFBQTtFQUFhLEVBQVU7RUFBZTtDQUFFO0VBQUM7RUFBQTtFQUFBO0VBQVk7RUFBQztFQUFBO0VBQVc7RUFBQztFQUFBO0VBQVc7RUFBRTtFQUFBO0VBQVU7RUFBSTtFQUFBO0VBQUE7RUFBQTtFQUFnQjtFQUFBO0VBQVE7RUFBQztDQUFBO0FBQ3JQLElBQU8sY0FBYztDQUFBO09BQWlCO0VBQUMsRUFBRTtFQUFDLEVBQWU7RUFBWSxFQUFBO0VBQWUsRUFBQTtFQUFZLEVBQUE7RUFBZSxFQUFBO0VBQXVCLEVBQUU7RUFBYSxFQUFFO0VBQWMsRUFBQTtFQUFxQixFQUFFO0VBQWU7Q0FBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQWdCO0VBQU07RUFBRztFQUFBO0VBQVM7RUFBQztFQUFPO0VBQUk7RUFBRTtFQUFBO0VBQUE7RUFBYztFQUFBO0VBQUE7RUFBVztFQUFLO0VBQUc7Q0FBQztBQUM5UixJQUFPLFNBQWE7Q0FBQztPQUFZO0VBQUMsRUFBRTtFQUFDLEVBQWU7RUFBWSxFQUFBO0VBQWUsRUFBQTtFQUFhLEVBQUE7RUFBYyxFQUFBO0VBQWU7RUFBYSxFQUFBO0VBQWMsRUFBVTtFQUFjO0NBQUE7RUFBQTtFQUFBO0VBQVk7RUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFnQjtFQUFNO0VBQUc7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbk4sSUFBUSxNQUFTO0NBQUE7T0FBRztFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEIsSUFBRyxNQUFBO0NBQUE7RUFBQSxNQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDUkgsSUFBTyxXQUFjO0NBQUE7T0FBYztFQUFDLEVBQUU7RUFBQztFQUFlLEVBQVE7RUFBaUIsRUFBQTtFQUFjO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBZ0I7RUFBTTtFQUFFO0VBQU07RUFBQztDQUFBOzs7O0FDQTVILElBQU8sbUJBQVU7Q0FBQTtPQUFpQixFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNsQyxJQUFJLE9BQVc7Q0FBQTtPQUFNO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3JCLElBQUksYUFBb0I7Q0FBQztPQUFDO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUEsYUFBQTtDQUFBO09BQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFRkEsSUFBVyxVQUFVO0NBQUM7T0FBVyxDQUFBLEdBQUEsZ0JBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakMsSUFBVyxnQkFBYztDQUFBO09BQUEsQ0FBQSxFQUFBLFdBQUEsRUFBQSxXQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDekIsSUFBQyxzQkFBQTtDQUFBO09BQUEsQ0FBQSxFQUFBLGFBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBRUQsSUFBVyxvQkFBb0I7Q0FBQztFQUFJLE1BQUE7RUFBQTtFQUFzQjtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBRTFELElBQU8sa0JBQVU7Q0FBQTtFQUFrQixNQUFFO0VBQUEsRUFBQTtFQUFRO0VBQWEsRUFBRTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVELElBQVMsa0JBQVc7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNQcEIsSUFBTyxrQkFBaUI7Q0FBQTtPQUFpQjtFQUFDO0VBQWlCO0VBQUU7RUFBYTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxRSxJQUFJLGtCQUFxQjtDQUFBO09BQVU7RUFBQSxFQUFhO0VBQVUsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFELElBQUksa0JBQXVCO0NBQUE7T0FBVTtFQUFBLEVBQWE7RUFBVSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQTVELElBQU8sbUJBQVU7Q0FBQTtPQUFpQixDQUFBLGlCQUFBLG9CQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbEMsSUFBSSxZQUFXO0NBQUE7T0FBQTtFQUFBO0VBQWU7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSDlCLElBQU8sbUJBQWlCO0NBQUE7T0FBaUIsQ0FBQSxXQUFZLElBQUE7Q0FBQTtFQUFBO0VBQWlCO0VBQUU7RUFBSTtDQUFBO0FBQzVFLElBQU8sZUFBaUI7Q0FBQTtPQUFhLENBQUMsV0FBTSxJQUFlO0NBQUMsQ0FBQSxJQUFBLEdBQUE7Q0FBQTs7OztBQ0Q1RCxJQUFPLHlCQUFpQjtDQUFBO09BQXVCLENBQUEsaUJBQVksSUFBQTtDQUFBO0VBQUE7RUFBaUI7RUFBRTtFQUFJO0NBQUE7QUFDbEYsSUFBTyxxQkFBaUI7Q0FBQTtPQUFtQixDQUFDLGlCQUFNLElBQWU7Q0FBQyxDQUFBLElBQUEsR0FBQTtDQUFBOzs7O0FDRGxFLElBQVUsNEJBQU07Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBVyxxQkFBaUI7Q0FBQTtFQUFRLE1BQUs7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIekMsSUFBQSxRQUFVO0NBQUE7T0FBTSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hCLElBQUksZ0JBQVc7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEZixJQUFJLGNBQWM7Q0FBQztFQUFFLE1BQVEsQ0FBQyxFQUFDO0NBQUc7RUFBQztFQUFJO0VBQUk7RUFBRTtDQUFBO0FBQzdDLElBQUksV0FBVztDQUFDO09BQVMsQ0FBQSxZQUFTO0NBQUEsQ0FBQSxHQUFXO0NBQUE7QUFDN0MsSUFBQSxtQkFBcUI7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFpQjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Z0QyxJQUFPLFdBQVE7Q0FBUTtPQUFVLEVBQUE7Q0FBQSxDQUFNLEdBQUc7Q0FBQTs7OztBQ0kxQyxJQUFJLFlBQU87Q0FBQTtPQUFBO0VBQUE7RUFBNkI7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsaUJBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIeEMsSUFBVSw0QkFBTTtDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoQixJQUFTLHNCQUFNO0NBQUE7T0FBQSxDQUFBLDBCQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNmLElBQUksc0JBQXFCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN6QixJQUFBLGlCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDREEsSUFBSSxvQkFBb0I7Q0FBQztPQUFBLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3pCLElBQUksZ0JBQWM7Q0FBQztFQUFHLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEIsSUFBQSxXQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0pBLElBQUksc0JBQW9CO0NBQUM7RUFBQyxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGlCQUFlO0NBQUM7T0FBVSxDQUFBLG9CQUFrQjtDQUFBO0VBQUE7RUFBUztFQUFHO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDNUQsSUFBTyxxQkFBVTtDQUFBO0VBQW9CLE1BQUM7RUFBQTtFQUFRO0VBQWdCO0VBQWM7RUFBYztFQUFBO0VBQVk7RUFBb0I7RUFBQTtDQUFBO0VBQUE7RUFBZ0I7RUFBSTtFQUFFO0VBQUE7RUFBQTtFQUFBO0VBQWtCO0VBQUM7RUFBQTtDQUFBO0FBQ25LLElBQUEsMEJBQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFPLFVBQVU7Q0FBQTtPQUFBLENBQUEsZUFBMEI7Q0FBTyxDQUFDLEdBQUE7Q0FBQTtBQUNuRCxJQUFBLGdCQUFBO0NBQUE7T0FBQSxDQUFBLGdCQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDQSxJQUFPLGlCQUFxQjtDQUFDO0VBQUMsTUFBTztFQUFBO0VBQWM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNObkQsSUFBTywyQkFBYztDQUFBO09BQTRCLEVBQUE7Q0FBQSxFQUFNO0NBQUM7QUFDeEQsSUFBQSxZQUFjO0NBQUE7T0FBVyxDQUFBLFVBQU87Q0FBQSxDQUFTLEdBQUE7Q0FBQTs7OztBQ0R6QyxJQUFPLFVBQWM7Q0FBQTtPQUFTLENBQUEsVUFBTyxRQUFVO0NBQUEsQ0FBTyxJQUFBLEdBQUE7Q0FBQTs7Ozs7Ozs7Ozs7O0FFQXRELElBQUEsVUFBVTtDQUFBO09BQVEsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ2xCLElBQUksYUFBVTtDQUFBO09BQU0sQ0FBQSxJQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BCLElBQUEsYUFBQTtDQUFBO09BQUEsQ0FBQSxTQUFBLFdBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0ZBLElBQVEsV0FBTTtDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNkLElBQVcsYUFBTTtDQUFBO09BQUEsQ0FBQSxTQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakIsSUFBVyxtQkFBTztDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbEIsSUFBQSxZQUFBO0NBQUE7T0FBQSxDQUFBLFVBQUEsU0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBTyxXQUFVO0NBQUE7T0FBVyxFQUFPO0NBQUM7RUFBQTtFQUFBO0VBQVM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzdDLElBQVUsVUFBTTtDQUFBO09BQUEsQ0FBQSxTQUFBLFdBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2hCLElBQVEsVUFBTTtDQUFBO09BQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ05kLElBQU8sZ0JBQWM7Q0FBQTtPQUFlLENBQUEsZ0JBQU87Q0FBQSxDQUFpQixHQUFBO0NBQUE7Ozs7QUNBNUQsSUFBTyxrQkFBVTtDQUFBO09BQWdCLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakMsSUFBVyxXQUFTO0NBQUc7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEdkIsSUFBQSxNQUFRO0NBQUE7T0FBVyxDQUFBLFVBQVM7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0E1QixJQUFBLE9BQVE7Q0FBQTtPQUFZLENBQUEsWUFBVztDQUFBLENBQUEsR0FBQTtDQUFBOzs7O0FDQS9CLElBQUEsU0FBYTtDQUFDO09BQVEsQ0FBQSxjQUFhO0NBQUEsQ0FBQSxHQUFBO0NBQUE7Ozs7QUNBbkMsSUFBQSxXQUFjO0NBQUE7T0FBVSxDQUFBLGlCQUFnQjtDQUFBLENBQUEsR0FBQTtDQUFBOzs7O0FDQXhDLElBQUEsMEJBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQXdCO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQTdDLElBQUEsb0JBQWM7Q0FBQTtPQUFtQixDQUFBLHdCQUF1QjtDQUFBLENBQUEsR0FBQTtDQUFBOzs7O0FDQXhELElBQUEsV0FBYztDQUFBO09BQVUsQ0FBQSxRQUFBLGdCQUF1QjtDQUFPLENBQUMsSUFBSSxHQUFDO0NBQUE7Ozs7QUNBNUQsSUFBQSxVQUFjO0NBQUE7T0FBUyxDQUFBLGFBQVk7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0RuQyxJQUFBLFNBQWE7Q0FBQztPQUFXLEVBQUE7Q0FBQSxFQUFBO0NBQUE7Ozs7QUNDekIsSUFBQSxZQUFjO0NBQUE7T0FBVyxDQUFBLGlCQUFnQjtDQUFBLENBQUEsR0FBQTtDQUFBOzs7O0FDQXpDLElBQUEsU0FBYTtDQUFDO09BQVEsQ0FBQSxjQUFhO0NBQUEsQ0FBQSxHQUFBO0NBQUE7Ozs7QUNBbkMsSUFBQSxPQUFRO0NBQUE7T0FBWSxDQUFBLFlBQVc7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0EvQixJQUFBLFFBQVE7Q0FBSztPQUFRLENBQUEsK0JBQThCO0NBQUEsQ0FBQSxHQUFBO0NBQUE7Ozs7QUNBbkQsSUFBQSxTQUFhO0NBQUM7T0FBUSxDQUFBLE9BQU07Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0E1QixJQUFBLFFBQVE7Q0FBSztPQUFRLENBQUEsYUFBWTtDQUFBLENBQUEsR0FBQTtDQUFBOzs7O0FDQWpDLElBQU8sNkJBQWM7Q0FBQTtPQUE4QixFQUFBO0NBQUksRUFBQTtDQUFBO0FBQ3ZELElBQUEsY0FBYztDQUFBO09BQWEsQ0FBQSxZQUFPO0NBQUEsQ0FBVyxHQUFBO0NBQUE7Ozs7QUNEN0MsSUFBTyxvQkFBYztDQUFBO09BQXFCLEVBQUE7Q0FBSSxFQUFBO0NBQUE7QUFDOUMsSUFBQSxNQUFRO0NBQUE7T0FBVyxDQUFBLE1BQU87Q0FBQSxDQUFHLEdBQUE7Q0FBQTs7OztBQ0Q3QixJQUFPLDJCQUFjO0NBQUE7T0FBNEIsRUFBQTtDQUFBLEVBQUE7Q0FBQTtBQUNqRCxJQUFBLFlBQWM7Q0FBQTtPQUFXLENBQUEsVUFBTztDQUFBLENBQVMsR0FBQTtDQUFBOzs7O0FDQXpDLElBQUUsaUNBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RGLElBQUEsY0FBYztDQUFBO09BQWEsQ0FBQSxTQUFPO0NBQUEsQ0FBSSxHQUFBO0NBQUE7QUFDdEMsSUFBQSxTQUFPO0NBQU87T0FBTyxDQUFBLFlBQWU7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0FwQyxJQUFBLG9CQUFjO0NBQUE7T0FBbUIsQ0FBQSxlQUFPO0NBQUEsQ0FBSSxHQUFBO0NBQUE7QUFDNUMsSUFBQSxlQUFlO0NBQUs7T0FBQztFQUFBO0VBQXFCO0VBQUE7RUFBa0I7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0E1RCxJQUFLLGFBQW1CO0NBQUM7T0FBSztFQUFBO0VBQXVCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIckQsSUFBTyxrQkFBVTtDQUFBO0VBQWlCLE1BQUM7RUFBQTtFQUFRO0VBQWE7RUFBRTtFQUFHO0NBQUU7RUFBQztFQUFDO0VBQU87RUFBQTtFQUFRO0VBQUk7RUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0RixJQUFTLGdCQUFNO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEZixJQUFPLGtCQUFVO0NBQUE7T0FBZ0IsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDakMsSUFBSSxtQkFBMEI7Q0FBQztPQUFVO0VBQUM7RUFBYTtFQUFZO0VBQWdCO0VBQUs7Q0FBQTtFQUFNO0VBQUk7RUFBQztFQUFNO0VBQUE7RUFBUTtDQUFDOzs7O0FDQWxILElBQU8sU0FBYTtDQUFDO09BQVEsQ0FBQSxhQUFhO0NBQUEsQ0FBWSxHQUFBO0NBQUE7Ozs7QUNEdEQsSUFBQSxjQUFVO0NBQUE7T0FBWSxFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUN0QixJQUFJLGFBQVM7Q0FBQTtFQUFNLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuQixJQUFJLE9BQUE7Q0FBUTtFQUFHLE1BQU87RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFBLGVBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUksZ0JBQWM7Q0FBQTtPQUFRLENBQUEsS0FBWTtDQUFFO0VBQUM7RUFBRztFQUFBO0VBQVM7RUFBRTtDQUFBO0FBQ3ZELElBQUEsU0FBUTtDQUFBO09BQWdCLENBQUEsZUFBUSxRQUFhO0NBQUE7RUFBTztFQUFJO0VBQUU7RUFBQTtDQUFBO0FBQzFELElBQVEsUUFBUztDQUFBO09BQWE7RUFBQTtFQUFNO0VBQU87RUFBUTtDQUFVO0VBQUM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ045RCxJQUFPLFVBQVE7Q0FBQTtPQUFpQixFQUFHO0NBQUMsQ0FBQSxHQUFBO0NBQU07Ozs7QUNFMUMsSUFBVyxTQUFTO0NBQUE7RUFBTSxjQUFVO0VBQUEsTUFBUztFQUFZLE1BQUU7RUFBYSxjQUFjO0VBQWlCLE1BQUM7RUFBWSxNQUFTO0VBQUEsY0FBMEI7RUFBTyxNQUFBO0VBQUEsTUFBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsY0FBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsY0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxjQUFBO0VBQUEsTUFBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsY0FBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxjQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUE7RUFBQSxjQUFBO0VBQUE7RUFBQSxjQUFBO0VBQUEsY0FBQTtFQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUE7RUFBQSxjQUFBO0VBQUEsY0FBQTtFQUFBLGNBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsY0FBQTtFQUFBLGNBQUE7RUFBQSxNQUFBO0VBQUEsY0FBQTtFQUFBLGNBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBOUosSUFBTyxVQUFRO0NBQUE7T0FBa0IsQ0FBQyxlQUFTO0NBQUEsQ0FBQSxJQUFBLEdBQWdCO0NBQUM7QUFDNUQsSUFBTyxPQUFRO0NBQUE7T0FBZSxDQUFDLFdBQVM7Q0FBQSxDQUFBLElBQUEsR0FBWTtDQUFDO0FBQ3JELElBQU8sS0FBUTtDQUFBO09BQWEsQ0FBQyxXQUFTO0NBQUEsQ0FBQSxJQUFBLEdBQVk7Q0FBQzs7OztBQ0huRCxJQUFPLG1CQUFVO0NBQUE7T0FBaUIsQ0FBQSx3QkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2xDLElBQUksa0JBQXlCO0NBQUE7T0FBQSxDQUFBLGtCQUE0QixnQkFBTztDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoRSxJQUFJLFlBQVU7Q0FBQTtPQUFRLENBQUEsZ0JBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0h0QixJQUFPLG9CQUFVO0NBQUE7T0FBa0IsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ25DLElBQUksbUJBQWdCO0NBQUE7T0FBQSxDQUFBLGtCQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNwQixJQUFBLGFBQUE7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxFQUFBO0NBQUE7Ozs7QUNEQSxJQUFBLGFBQWM7Q0FBQTtPQUFZLENBQUEsZ0JBQWU7Q0FBQSxDQUFBLEdBQUE7Q0FBQSJ9