@firestitch/report 18.3.0 → 18.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,6 +13,7 @@ export declare class ReportData<T = any> {
13
13
  createFolder(name: string, parentReportFolderId?: number, config?: RequestConfig): Observable<T>;
14
14
  updateFolder(reportFolderId: number, folder: Record<string, unknown>, config?: RequestConfig): Observable<T>;
15
15
  deleteFolder(reportFolderId: number, config?: RequestConfig): Observable<T>;
16
+ undeleteFolder(reportFolderId: number, config?: RequestConfig): Observable<T>;
16
17
  rename(reportId: number, name: string, config?: RequestConfig): Observable<T>;
17
18
  update(reportId: number, settings: Record<string, unknown>, config?: RequestConfig): Observable<T>;
18
19
  addPage(reportId: number, config?: RequestConfig): Observable<T>;
@@ -220,6 +220,7 @@ export interface ReportFolder {
220
220
  id: number;
221
221
  name: string;
222
222
  parentReportFolderId: number | null;
223
+ state?: ReportState;
223
224
  }
224
225
  export interface ReportTree {
225
226
  reports: ReportListItem[];
@@ -236,15 +237,13 @@ export interface ReportNode {
236
237
  type: ReportNodeType;
237
238
  children: ReportNode[];
238
239
  report?: ReportListItem;
240
+ stateDeleted: boolean;
241
+ deleted: boolean;
239
242
  }
240
243
  export declare enum ReportState {
241
244
  Active = "active",
242
245
  Deleted = "deleted"
243
246
  }
244
- export declare const ReportStates: {
245
- name: string;
246
- value: ReportState;
247
- }[];
248
247
  export interface ReportChatResponse {
249
248
  reportChanged?: boolean;
250
249
  reportRenamed?: boolean;
@@ -4,7 +4,6 @@ import { ITreeConfig } from '@firestitch/tree';
4
4
  import { ReportListItem, ReportNode, ReportNodeType } from '../../interfaces/report.interface';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class FsAiReportsComponent implements OnInit {
7
- static readonly EXPAND_LEVEL = 10;
8
7
  readonly basePath: import("@angular/core").InputSignal<string>;
9
8
  readonly openPattern: import("@angular/core").InputSignal<string>;
10
9
  readonly createPattern: import("@angular/core").InputSignal<string>;
@@ -21,11 +20,11 @@ export declare class FsAiReportsComponent implements OnInit {
21
20
  private _dialog;
22
21
  private _destroyRef;
23
22
  private _query;
23
+ private _expandedBeforeSearch;
24
24
  constructor();
25
25
  ngOnInit(): void;
26
26
  openLink(report: ReportListItem): unknown[];
27
- isDeleted(report: ReportListItem): boolean;
28
- createReport(): void;
27
+ createReport(reportFolderId?: number): void;
29
28
  openSettings(): void;
30
29
  private _initFilterConfig;
31
30
  private _initTreeConfig;
@@ -33,11 +32,14 @@ export declare class FsAiReportsComponent implements OnInit {
33
32
  private _isDeletedNode;
34
33
  private _search;
35
34
  private _load;
35
+ private _expandedKeys;
36
+ private _expandKeys;
36
37
  private _buildNodes;
37
38
  private _move;
38
39
  private _createFolder;
39
40
  private _rename;
40
41
  private _delete;
42
+ private _deleteFolderMessage;
41
43
  private _restore;
42
44
  private _patternCommands;
43
45
  static ɵfac: i0.ɵɵFactoryDeclaration<FsAiReportsComponent, never>;
@@ -55,14 +55,23 @@ export class ReportData {
55
55
  ...config,
56
56
  });
57
57
  }
58
- // A real delete the backend refuses while the folder still holds a
59
- // sub-folder or an active report, so there is no undelete counterpart.
58
+ // Soft-delete, whatever the folder holds: its contents leave the listing with
59
+ // it, and undeleteFolder() brings the lot back.
60
60
  deleteFolder(reportFolderId, config = {}) {
61
61
  return this._api.delete(this._path(`folders/${reportFolderId}`), {}, {
62
62
  key: 'folder',
63
63
  ...config,
64
64
  });
65
65
  }
66
+ // Restore a soft-deleted folder through its own action endpoint — the folder
67
+ // PUT does not accept `state`. Any deleted folder above it is restored too, so
68
+ // it lands back where it was.
69
+ undeleteFolder(reportFolderId, config = {}) {
70
+ return this._api.post(this._path(`folders/${reportFolderId}/undelete`), {}, {
71
+ key: 'folder',
72
+ ...config,
73
+ });
74
+ }
66
75
  rename(reportId, name, config = {}) {
67
76
  return this._api.put(this._path(`${reportId}`), { name }, {
68
77
  key: 'report',
@@ -148,7 +157,8 @@ export class ReportData {
148
157
  });
149
158
  }
150
159
  // Restore a soft-deleted report through its own action endpoint — the report
151
- // PUT does not accept `state`.
160
+ // PUT does not accept `state`. Its folder is restored too when it is deleted,
161
+ // or inside one that is, so the report lands back where it was.
152
162
  undelete(reportId, config = {}) {
153
163
  return this._api.post(this._path(`${reportId}/undelete`), {}, {
154
164
  key: 'report',
@@ -343,4 +353,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
343
353
  providedIn: 'root',
344
354
  }]
345
355
  }] });
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLGlCQUFpQixDQUFDOztBQWN2RCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLHFGQUFxRjtBQUlyRixNQUFNLE9BQU8sVUFBVTtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUN2RSxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBRTVCLGtGQUFrRjtJQUNsRixrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDWixLQUFLLEVBQ0w7WUFDRSxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUN2RSxJQUFJLENBQUMsUUFBYSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQ1osS0FBSyxFQUNMLE1BQU0sQ0FD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LE9BQU8sRUFBRSxDQUFDLEVBQ2pELE9BQU8sRUFDUDtZQUNFLEdBQUcsRUFBRSxhQUFhO1lBQ2xCLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7d0dBdGxCVSxVQUFVOzRHQUFWLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0FwaSwgUmVxdWVzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2FwaSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGF0YVN0YXRlLFxuICBGaWx0ZXJHcm91cERlZmF1bHQsXG4gIFJlcG9ydENvbXBvbmVudFNxbCxcbiAgUmVwb3J0RmlsdGVyTGV2ZWwsXG4gIFJlcG9ydFRyZWUsXG4gIFJlc29sdmVkRmlsdGVyVmFsdWUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwb3J0LmludGVyZmFjZSc7XG5cblxuLy8gQVBJIGdhdGV3YXkgZm9yIHRoZSBSZXBvcnRzIG1vZHVsZS4gRXZlcnkgZW5kcG9pbnQgaGFuZ3Mgb2ZmIFtiYXNlUGF0aF0sXG4vLyB3aGljaCBkZWZhdWx0cyB0byBcInJlcG9ydHNcIiAodGhlIGZyYW1ld29yayByZXBvcnRzIGJhY2tlbmQgYXQgL2FwaS9yZXBvcnRzKVxuLy8gYW5kIGNhbiBiZSByZXBvaW50ZWQgYnkgdGhlIGhvc3Qgc28gdGhlIHBhY2thZ2Ugc3RheXMgc2VsZi1jb250YWluZWQgYW5kIHBvcnRhYmxlLlxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydERhdGE8VCA9IGFueT4ge1xuICBwcml2YXRlIF9hcGkgPSBpbmplY3QoRnNBcGkpO1xuXG4gIC8vIFRoZSBBUEkgcm9vdCBmb3IgZXZlcnkgcmVwb3J0cyBlbmRwb2ludC4gRGVmYXVsdHMgdG8gdGhlIGZyYW1ld29yayByZXBvcnRzXG4gIC8vIGNvbnRleHQ7IHNldCBpdCBvbmNlIChlLmcuIGZyb20gdGhlIGhvc3QncyByZXBvcnQgcGFnZSkgdG8gbW91bnQgZWxzZXdoZXJlLlxuICBwdWJsaWMgYmFzZVBhdGggPSAncmVwb3J0cyc7XG5cbiAgLy8gQnVpbGQgYW4gZW5kcG9pbnQgcGF0aCB1bmRlciB0aGUgY29uZmlndXJlZCBiYXNlLCBlLmcuIF9wYXRoKCkgPT4gXCJhaS9yZXBvcnRzXCIsXG4gIC8vIF9wYXRoKGAke2lkfS9wYWdlc2ApID0+IFwiYWkvcmVwb3J0cy8xMjMvcGFnZXNcIi5cbiAgcHJpdmF0ZSBfcGF0aChzdWZmaXggPSAnJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1ZmZpeCA/IGAke3RoaXMuYmFzZVBhdGh9LyR7c3VmZml4fWAgOiB0aGlzLmJhc2VQYXRoO1xuICB9XG5cbiAgcHVibGljIHJlcG9ydHMocXVlcnk6IGFueSA9IHt9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aCgpLFxuICAgICAgcXVlcnksXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydHMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBCb3RoIGhhbHZlcyBvZiB0aGUgbGlzdGluZyDigJQgcmVwb3J0cyBBTkQgdGhlIGZvbGRlcnMgdGhleSBhcmUgZmlsZWQgaW50byDigJRcbiAgLy8gZnJvbSB0aGUgb25lIEdFVC4gTm8gYGtleWAsIGJlY2F1c2UgdGhlIHdob2xlIHBheWxvYWQgaXMgdGhlIGFuc3dlciBoZXJlO1xuICAvLyByZXBvcnRzKCkga2VlcHMgaXRzICdyZXBvcnRzJyBrZXkgZm9yIGNhbGxlcnMgdGhhdCBvbmx5IHdhbnQgdGhlIGZsYXQgbGlzdC5cbiAgcHVibGljIHRyZWUocXVlcnk6IGFueSA9IHt9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8UmVwb3J0VHJlZT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aCgpLFxuICAgICAgcXVlcnksXG4gICAgICBjb25maWcsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGUobmFtZTogc3RyaW5nLCByZXBvcnRGb2xkZXJJZDogbnVtYmVyID0gbnVsbCwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKCksXG4gICAgICB7IG5hbWUsIHJlcG9ydEZvbGRlcklkIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZpbGUgYSByZXBvcnQgdW5kZXIgYSBmb2xkZXIsIG9yIHBhc3MgbnVsbCB0byBtb3ZlIGl0IHRvIHRoZSByb290LiBTZW50XG4gIC8vIGV4cGxpY2l0bHkgKG5ldmVyIG9taXR0ZWQpIHNvIHRoZSBiYWNrZW5kIGNhbiB0ZWxsIFwibW92ZSB0byByb290XCIgZnJvbVxuICAvLyBcImxlYXZlIHRoZSBmb2xkZXIgYWxvbmVcIi5cbiAgcHVibGljIG1vdmVSZXBvcnQocmVwb3J0SWQ6IG51bWJlciwgcmVwb3J0Rm9sZGVySWQ6IG51bWJlciB8IG51bGwsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfWApLFxuICAgICAgeyByZXBvcnRGb2xkZXJJZCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRm9sZGVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyID0gbnVsbCxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aCgnZm9sZGVycycpLFxuICAgICAgeyBuYW1lLCBwYXJlbnRSZXBvcnRGb2xkZXJJZCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBSZW5hbWUgYW5kL29yIG1vdmUgYSBmb2xkZXIuIE9ubHkgdGhlIGtleXMgcGFzc2VkIGFyZSBhY3RlZCBvbiBzZXJ2ZXItc2lkZSxcbiAgLy8gc28gYSByZW5hbWUgbmV2ZXIgZGlzdHVyYnMgdGhlIHBhcmVudCBhbmQgYSBkcmFnIG5ldmVyIGRpc3R1cmJzIHRoZSBuYW1lLlxuICBwdWJsaWMgdXBkYXRlRm9sZGVyKFxuICAgIHJlcG9ydEZvbGRlcklkOiBudW1iZXIsXG4gICAgZm9sZGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGBmb2xkZXJzLyR7cmVwb3J0Rm9sZGVySWR9YCksXG4gICAgICBmb2xkZXIsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZvbGRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEEgcmVhbCBkZWxldGUg4oCUIHRoZSBiYWNrZW5kIHJlZnVzZXMgd2hpbGUgdGhlIGZvbGRlciBzdGlsbCBob2xkcyBhXG4gIC8vIHN1Yi1mb2xkZXIgb3IgYW4gYWN0aXZlIHJlcG9ydCwgc28gdGhlcmUgaXMgbm8gdW5kZWxldGUgY291bnRlcnBhcnQuXG4gIHB1YmxpYyBkZWxldGVGb2xkZXIocmVwb3J0Rm9sZGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYGZvbGRlcnMvJHtyZXBvcnRGb2xkZXJJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVuYW1lKHJlcG9ydElkOiBudW1iZXIsIG5hbWU6IHN0cmluZywgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7IG5hbWUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVwb3J0IHNldHRpbmdzOiBhbnkgc3Vic2V0IG9mIHsgbmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCBsYXlvdXQsXG4gIC8vIHN0eWxlcywgaGVhZGVyRm9vdGVyIH0g4oCUIHN0eWxlcyBjYXJyeSB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoaWMgY29uZmlnIChlLmcuXG4gIC8vIGhlYWRpbmcgc2l6ZSksIGhlYWRlckZvb3RlciB0aGUgaGVhZGVyL2Zvb3RlciBiYW5kIGRlcHRocyBpbiBpbmNoZXMuIFRoZVxuICAvLyBwYWdlIHNpemUgaXMgaW4gaW5jaGVzIGFuZCB3aWR0aC9oZWlnaHQgZ28gdG9nZXRoZXIuXG4gIHB1YmxpYyB1cGRhdGUocmVwb3J0SWQ6IG51bWJlciwgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBcHBlbmQgYSBibGFuayBwYWdlIHRvIHRoZSByZXBvcnQ7IHJlc29sdmVzIHRvIHRoZSBuZXcgcGFnZS5cbiAgcHVibGljIGFkZFBhZ2UocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBbnkgc3Vic2V0IG9mIHsgbmFtZSwgbWFzdGVySGlkZGVuIH0uIEFuIGVtcHR5IG5hbWUgaXMgc3RvcmVkIGFzIG51bGxcbiAgLy8gc2VydmVyLXNpZGUsIHdoaWNoIHB1dHMgdGhlIHRhYiBiYWNrIG9uIGl0cyBwb3NpdGlvbmFsIFwiUGFnZSBOXCIgbGFiZWw7XG4gIC8vIG1hc3RlckhpZGRlbiBoaWRlcyB0aGUgcmVwb3J0J3MgaGVhZGVyIGFuZCBmb290ZXIgb24gdGhpcyBwYWdlLlxuICBwdWJsaWMgdXBkYXRlUGFnZShcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBhZ2VJZDogbnVtYmVyLFxuICAgIHBhZ2U6IHsgbmFtZT86IHN0cmluZzsgbWFzdGVySGlkZGVuPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3BhZ2VzLyR7cGFnZUlkfWApLFxuICAgICAgcGFnZSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncGFnZScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIERlbGV0ZSBhIHBhZ2UgYW5kIGV2ZXJ5dGhpbmcgb24gaXQuIFJlZnVzZWQgc2VydmVyLXNpZGUgZm9yIHRoZSBsYXN0XG4gIC8vIHJlbWFpbmluZyBwYWdlIOKAlCBhIHJlcG9ydCB3aXRoIG5vIGNhbnZhcyBpcyBhIGRlbGV0ZWQgcmVwb3J0LCBub3QgYSBwYWdlXG4gIC8vIG9wZXJhdGlvbi5cbiAgcHVibGljIGRlbGV0ZVBhZ2UocmVwb3J0SWQ6IG51bWJlciwgcGFnZUlkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlcy8ke3BhZ2VJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGVyc2lzdCB0aGUgdGFiIG9yZGVyIGFmdGVyIGEgZHJhZyDigJQgdGhlIHdob2xlIGxpc3QsIGluIGl0cyBuZXcgb3JkZXIsIHNvXG4gIC8vIHRoZSBzZXF1ZW5jZSBzdGF5cyBnYXBsZXNzIHdpdGhvdXQgdGhlIHNlcnZlciBpbmZlcnJpbmcgdGhlIG1vdmUuXG4gIHB1YmxpYyBzYXZlUGFnZVBvc2l0aW9ucyhcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBvc2l0aW9uczogeyBwYWdlSWQ6IG51bWJlcjsgb3JkZXI6IG51bWJlciB9W10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vcGFnZXMvcG9zaXRpb25zYCksXG4gICAgICB7IHBvc2l0aW9ucyB9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBzZXR0aW5nczogYW55IHN1YnNldCBvZiB7IHRpdGxlLCBwYWRkaW5nIH0g4oCUIHRoZSBodW1hbi1mYWNpbmdcbiAgLy8gZGlhbG9nIGVkaXRzIOKAlCBvciBhIHRleHQgYmxvY2sncyB7IGh0bWwgfSBmcm9tIGl0cyBpbmxpbmUgZWRpdG9yOyBnZW9tZXRyeVxuICAvLyAoeC95L3cvaC9mbG93V2lkdGgpIGlzIHBlcnNpc3RlZCB2aWEgc2F2ZVBvc2l0aW9ucyBmcm9tIHRoZSBjYW52YXMgaW5zdGVhZC5cbiAgcHVibGljIHVwZGF0ZUNvbXBvbmVudChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vc2V0dGluZ3NgKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb21wb25lbnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBQbGFjZSBhIHRleHQgYmxvY2sg4oCUIG9uIGEgcGFnZSwgb3IgaW4gdGhlIGhlYWRlci9mb290ZXIgd2hlbiBwYWdlSWQgaXNcbiAgLy8gb21pdHRlZC4gVGhlIG9ubHkgY29tcG9uZW50IHRoZSBVSSBjcmVhdGVzIGl0c2VsZjogY2hhcnRzLCBsaXN0cyBhbmQgS1BJc1xuICAvLyBuZWVkIGEgcXVlcnkgYW5kIGNvbWUgZnJvbSB0aGUgY2hhdC4gUmVzb2x2ZXMgdG8geyBpZCB9LlxuICBwdWJsaWMgYWRkVGV4dChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHRleHQ6IHsgcGFnZUlkPzogbnVtYmVyOyBodG1sPzogc3RyaW5nOyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50c2ApLFxuICAgICAgdGV4dCxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRGVsZXRlIG9uZSBjb21wb25lbnQgZnJvbSB0aGUgY2FudmFzLCB0b2dldGhlciB3aXRoIGl0cyBmaWx0ZXJzIGFuZCBhbnlcbiAgLy8gZmlsdGVyIGdyb3VwIHRoZXkgbGVhdmUgZW1wdHkuIFNvZnQgc2VydmVyLXNpZGUsIGJ1dCB0aGVyZSBpcyBubyByZXN0b3JlXG4gIC8vIGFueXdoZXJlIGluIHRoZSBVSSwgc28gdGhlIGRpYWxvZydzIGNvbmZpcm0gcHJlc2VudHMgaXQgYXMgcGVybWFuZW50LlxuICBwdWJsaWMgZGVsZXRlQ29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU29mdC1kZWxldGU6IHRoZSByZXBvcnQgbGVhdmVzIHRoZSBsaXN0aW5nIGJ1dCBrZWVwcyBpdHMgcGFnZXMgYW5kXG4gIC8vIGNvbXBvbmVudHMsIHNvIHVuZGVsZXRlKCkgYnJpbmdzIGJhY2sgdGhlIHNhbWUgZG9jdW1lbnQuXG4gIHB1YmxpYyBkZWxldGUocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVzdG9yZSBhIHNvZnQtZGVsZXRlZCByZXBvcnQgdGhyb3VnaCBpdHMgb3duIGFjdGlvbiBlbmRwb2ludCDigJQgdGhlIHJlcG9ydFxuICAvLyBQVVQgZG9lcyBub3QgYWNjZXB0IGBzdGF0ZWAuXG4gIHB1YmxpYyB1bmRlbGV0ZShyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3VuZGVsZXRlYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGFzc2VtYmxlZCBzdHJ1Y3R1cmU6IHBhZ2VzIOKGkiBjb21wb25lbnRzICgrIHRoZWlyIGZpbHRlcnMpIGFuZCB0aGVcbiAgLy8gcmVwb3J0J3MgZmlsdGVyIGdyb3Vwcy5cbiAgcHVibGljIGdldChyZXBvcnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBQZXJzaXN0IGdlb21ldHJ5IGZvciB0aGUgbW92ZWQgY29tcG9uZW50cyBvbmx5IOKAlCBhbnkgc3Vic2V0IG9mXG4gIC8vIHsgeCwgeSwgdywgaCB9IChpbmNoZXMpLCBmbG93V2lkdGggKHBlcmNlbnQpIGFuZCBvcmRlciAoZmxvdyBwb3NpdGlvbikuXG4gIHB1YmxpYyBzYXZlUG9zaXRpb25zKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgcG9zaXRpb25zOiAoeyBjb21wb25lbnRJZDogbnVtYmVyIH0gJiBQYXJ0aWFsPHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyOyBmbG93V2lkdGg6IG51bWJlcjsgb3JkZXI6IG51bWJlciB9PilbXSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzL3Bvc2l0aW9uc2ApLFxuICAgICAgeyBwb3NpdGlvbnMgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBPbmUgY29tcG9uZW50J3MgZGF0YS4gVGhlIGJvZHkgY2FycmllcyBldmVyeXRoaW5nIHNlc3Npb24tc2NvcGVkOiB0aGVcbiAgLy8gcmVzb2x2ZWQgZmlsdGVyIHZhbHVlcyBhbmQgdGhlIGNvbXBvbmVudCdzIG93biBpbnRlcmFjdGlvbiBzdGF0ZS5cbiAgLy9cbiAgLy8gYGlzRXhwb3J0YCBtYXJrcyB0aGUgcmVhZCBhcyBwYXJ0IG9mIGEgUERGL1Bvd2VyUG9pbnQgcmVuZGVyLiBUaGUgc2VydmVyXG4gIC8vIGdpdmVzIHRob3NlIGEgbG9uZ2VyIHBlci1zdGF0ZW1lbnQgY2VpbGluZyB0aGFuIGFuIG9uLXNjcmVlbiB0aWxlLCBiZWNhdXNlXG4gIC8vIGEgcmVhZGVyIHdhdGNoaW5nIGFuIGV4cG9ydCBwcm9ncmVzcyBiYXIgY2FuIHdhaXQgZm9yIGEgcXVlcnkgbm9ib2R5IHdvdWxkXG4gIC8vIHRvbGVyYXRlIHdhaXRpbmcgZm9yIG9uIGEgZGFzaGJvYXJkLlxuICBwdWJsaWMgY29tcG9uZW50RGF0YShcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdID0gW10sXG4gICAgc3RhdGU6IENvbXBvbmVudERhdGFTdGF0ZSA9IHt9LFxuICAgIGlzRXhwb3J0ID0gZmFsc2UsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZGF0YWApLFxuICAgICAgeyBmaWx0ZXJzLCBzdGF0ZSwgZXhwb3J0OiBpc0V4cG9ydCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdkYXRhJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0cyB0aGUgY29tcG9uZW50J3MgRlVMTCBmaWx0ZXJlZCBkYXRhc2V0IHRvIENTViBzZXJ2ZXItc2lkZSBhbmRcbiAgLy8gcmVzb2x2ZXMgdG8gYSBwcmVzaWduZWQgZG93bmxvYWQgVVJMLiBUaGUgYmFja2VuZCBzdHJlYW1zIHBlcmNlbnRhZ2VcbiAgLy8gcHJvZ3Jlc3Mgd2hpbGUgY2h1bmtpbmc7IGNvbnN1bWUgdGhyb3VnaCBGc1Byb2Nlc3MuZG93bmxvYWQuXG4gIHB1YmxpYyBleHBvcnRDb21wb25lbnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSB7fSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9leHBvcnRgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAndXJsJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwb3J0cyBFVkVSWSBjb21wb25lbnQgb24gdGhlIHJlcG9ydCDigJQgb3Igb24gb25lIHBhZ2Ug4oCUIHNlcnZlci1zaWRlIGFuZFxuICAvLyByZXNvbHZlcyB0byBhIHByZXNpZ25lZCBVUkwgZm9yIGEgemlwIG9mIG9uZSBDU1YgcGVyIGNvbXBvbmVudCwgZm9sZGVyZWQgYnlcbiAgLy8gcGFnZS4gYGZpbHRlcnNgIGNhcnJpZXMgdGhlIHJlc29sdmVkIHZhbHVlcyBmb3IgZXZlcnkgY29tcG9uZW50IHRvZ2V0aGVyO1xuICAvLyBlYWNoIG9uZSBwaWNrcyBvdXQgaXRzIG93bi4gU2FtZSBrZWVwLWFsaXZlIGNvbnRyYWN0IGFzIGV4cG9ydENvbXBvbmVudCxcbiAgLy8gb3ZlciBhIGxvbmdlciBydW47IGNvbnN1bWUgdGhyb3VnaCBGc1Byb2Nlc3MuZG93bmxvYWQuXG4gIHB1YmxpYyBleHBvcnRSZXBvcnQoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXSxcbiAgICBwYWdlSWQ6IG51bWJlciB8IG51bGwgPSBudWxsLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9leHBvcnRgKSxcbiAgICAgIHsgZmlsdGVycywgLi4uKHBhZ2VJZCA/IHsgcGFnZUlkIH0gOiB7fSkgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAndXJsJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRGlzdGluY3Qgb3B0aW9ucyBmb3IgYSBzZWxlY3QgZmlsdGVyIChkcml2ZXMgbXVsdGlzZWxlY3QgY29udHJvbHMpLlxuICBwdWJsaWMgZmlsdGVyT3B0aW9ucyhyZXBvcnRJZDogbnVtYmVyLCBmaWx0ZXJJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZmlsdGVycy8ke2ZpbHRlcklkfS9vcHRpb25zYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnb3B0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBzdGF0ZW1lbnQgYSBjb21wb25lbnQgcnVucywgZm9yIHRoZSBTUUwgdGFiLlxuICAvL1xuICAvLyBGZXRjaGVkIHJhdGhlciB0aGFuIHJlYWQgb2ZmIHRoZSBjb21wb25lbnQsIGJlY2F1c2UgYSBERVJJVkVEIGNvbXBvbmVudCBoYXNcbiAgLy8gbm8gc3RvcmVkIFNRTCDigJQgaXQgc3RvcmVzIGEgZG9jdW1lbnQsIGFuZCBpdHMgc3RhdGVtZW50IG9ubHkgZXhpc3RzIG9uY2VcbiAgLy8gdGhlIGJhY2tlbmQgY29tcGlsZXMgdGhhdCBkb2N1bWVudC4gQ29tcGlsZWQgcGVyIHJlcXVlc3QsIGZvciB0aGUgb25lXG4gIC8vIGNvbXBvbmVudCBiZWluZyBsb29rZWQgYXQsIHNvIG9wZW5pbmcgYSByZXBvcnQgbmV2ZXIgcGF5cyBmb3IgaXQuXG4gIC8vXG4gIC8vIGBrZXk6IG51bGxgIGJlY2F1c2UgdGhlIHdob2xlIGVudmVsb3BlIGlzIHRoZSBhbnN3ZXIgaGVyZTogYSBzdGFsZSBkb2N1bWVudFxuICAvLyBjb21lcyBiYWNrIGFzIHsgc3FsOiBudWxsLCBlcnJvciwgZXJyb3JUeXBlIH0gYW5kIHVud3JhcHBpbmcgb25lIGZpZWxkXG4gIC8vIHdvdWxkIHRocm93IHRoZSBkaWFnbm9zaXMgYXdheS5cbiAgcHVibGljIGNvbXBvbmVudFNxbChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8UmVwb3J0Q29tcG9uZW50U3FsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L3NxbGApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGNvbXBvbmVudCBTUUwncyBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW5zIOKAlCBkcml2ZXMgdGhlIGNvbHVtbiBwaWNrZXJcbiAgLy8gaW4gdGhlIGZpbHRlciBVSSBzbyBhIGNvbHVtbiBuYW1lIGlzIG5ldmVyIHR5cGVkIGJ5IGhhbmQuXG4gIHB1YmxpYyBjb21wb25lbnRDb2x1bW5zKHJlcG9ydElkOiBudW1iZXIsIGNvbXBvbmVudElkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2NvbHVtbnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb2x1bW5zJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gTWFrZSBvbmUgY29sdW1uIGZpbHRlcmFibGUuIGBsZXZlbGAgKGNvbXBvbmVudCB8IHJlcG9ydCkgcGxhY2VzIGEgbmV3XG4gIC8vIGdyb3VwOyBgZ3JvdXBJZGAgaW5zdGVhZCBsaW5rcyBpbnRvIGFuIGV4aXN0aW5nIGdyb3VwLiBBIHNlbGVjdCBmaWx0ZXInc1xuICAvLyBvcHRpb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbXBvbmVudCBTUUwgd2hlbiBvcHRpb25zU3FsIGlzIG9taXR0ZWQuXG4gIHB1YmxpYyBhZGRGaWx0ZXIoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcjogeyBmaWx0ZXJDb2x1bW46IHN0cmluZzsgdHlwZT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGxldmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBncm91cElkPzogbnVtYmVyIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZmlsdGVyc2ApLFxuICAgICAgZmlsdGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGUgYSBmaWx0ZXIg4oCUIGFueSBzdWJzZXQgb2YgeyBsYWJlbCwgb3B0aW9uc1NxbCwgZW5hYmxlZCB9LlxuICBwdWJsaWMgdXBkYXRlRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZmlsdGVySWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiB7IGxhYmVsPzogc3RyaW5nOyBvcHRpb25zU3FsPzogc3RyaW5nOyBlbmFibGVkPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH1gKSxcbiAgICAgIGNoYW5nZXMsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhIGZpbHRlciAoaXRzIGdyb3VwIGdvZXMgdG9vIHdoZW4gbm90aGluZyBlbHNlIHVzZXMgaXQpLlxuICBwdWJsaWMgZGVsZXRlRmlsdGVyKHJlcG9ydElkOiBudW1iZXIsIGZpbHRlcklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJzLyR7ZmlsdGVySWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQgKG9wZXJhdG9yLWF1dGhvcmVkIGFnZW50IGluc3RydWN0aW9ucylcbiAgLy8gYW5kIGl0cyBmdWxsIHZlcnNpb24gaGlzdG9yeTogeyBpbnN0cnVjdGlvbnMsIHZlcnNpb25zIH0uXG4gIHB1YmxpYyBpbnN0cnVjdGlvbnMoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoJ2luc3RydWN0aW9ucycpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU2F2ZSBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCAoYXBwZW5kLW9ubHk7IGFuIHVuY2hhbmdlZCBzYXZlIGlzIGFcbiAgLy8gbm8tb3Agc2VydmVyLXNpZGUpLiBSZXNvbHZlcyB0byB0aGUgc2FtZSB7IGluc3RydWN0aW9ucywgdmVyc2lvbnMgfSBzaGFwZS5cbiAgcHVibGljIHNhdmVJbnN0cnVjdGlvbnMoY29udGVudDogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aCgnaW5zdHJ1Y3Rpb25zJyksXG4gICAgICB7IGNvbnRlbnQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBNYWtlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQgY3VycmVudCAobm8gbmV3IHJvdyBpcyBjcmVhdGVkKS5cbiAgcHVibGljIHJlc3RvcmVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbklkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgaW5zdHJ1Y3Rpb25zLyR7aW5zdHJ1Y3Rpb25JZH0vcmVzdG9yZWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUnVuIGEgc2VtYW50aWMtZGF0YWJhc2UgYnVpbGQsIHN0cmVhbWVkOiBlbWl0cyBhbiBldmVudCBwZXIgTkRKU09OIGZyYW1lXG4gIC8vICh7IGtpbmQ6ICdsb2cnLCBsaW5lLCBwZXJjZW50IH0gZmVlZCBsaW5lcyBhbmQgeyBraW5kOiAnc2VjdGlvbicgfSBwaGFzZVxuICAvLyBtYXJrZXJzKSBhbmQgY29tcGxldGVzIHdoZW4gdGhlIGJ1aWxkIGVuZHMuIEZlZWQgdGhlIGxpbmVzIGludG8gRnNQcm9jZXNzLlxuICBwdWJsaWMgc2VtYW50aWNCdWlsZChjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5zdHJlYW0oXG4gICAgICAnUE9TVCcsXG4gICAgICB0aGlzLl9wYXRoKCdzZW1hbnRpYy9idWlsZCcpLFxuICAgICAgeyBzdHJlYW06IHRydWUgfSxcbiAgICAgIGNvbmZpZyxcbiAgICApO1xuICB9XG5cbiAgLy8gTGF0ZXN0IGJ1aWxkIHN0YXR1cyArIGVudGl0eSBzY29yZWJvYXJkOiB7IGJ1aWxkLCBkZXRhaWwgfS5cbiAgcHVibGljIHNlbWFudGljQnVpbGRTdGF0dXMoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoJ3NlbWFudGljL2J1aWxkJyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiBudWxsLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTdG9wIHRoZSBydW5uaW5nIGJ1aWxkICh0aGUgY3VycmVudCBzZW1hbnRpYyBkYXRhYmFzZSBzdGF5cyBpbiBwbGFjZSkuXG4gIHB1YmxpYyBzZW1hbnRpY0J1aWxkU3RvcChjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoJ3NlbWFudGljL2J1aWxkL3N0b3AnKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdidWlsZCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIE9uZSBlbnRpdHkncyBjYWNoZWQgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9ucyDigJQgbG9hZGVkIG9uIGV4cGFuZCwgb25lXG4gIC8vIGVudGl0eSBhdCBhIHRpbWUsIGJlY2F1c2UgdGhlIGZ1bGwgc2V0IGFjcm9zcyBhbGwgZW50aXRpZXMgaXMgZmFyIHRvbyBiaWdcbiAgLy8gdG8gc2hpcCBpbnNpZGUgdGhlIHNjb3JlYm9hcmQgY2FsbC5cbiAgcHVibGljIHNlbWFudGljRW50aXR5RnVuY3Rpb25zKGVudGl0eTogc3RyaW5nLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgc2VtYW50aWMvZW50aXRpZXMvJHtlbnRpdHl9L2Z1bmN0aW9uc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2VudGl0eUZ1bmN0aW9ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSByZXBvcnQgbW9kdWxlJ3MgR2VuZXJhbCBzZXR0aW5ncyAoc2VtYW50aWMtYnVpbGQgY29uY3VycmVuY3kgKyBpdHMgYm91bmRzKS5cbiAgcHVibGljIHNldHRpbmdzKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdzZXR0aW5ncycpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NldHRpbmdzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU2F2ZSB0aGUgR2VuZXJhbCBzZXR0aW5nczsgcmVzb2x2ZXMgdG8gdGhlIHNhbWUgeyBzZXR0aW5ncyB9IHNoYXBlLlxuICBwdWJsaWMgc2F2ZVNldHRpbmdzKHNldHRpbmdzOiB7IHNlbWFudGljQnVpbGRDb25jdXJyZW5jeTogbnVtYmVyIH0sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKCdzZXR0aW5ncycpLFxuICAgICAgc2V0dGluZ3MsXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NldHRpbmdzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVXBkYXRlIGEgZmlsdGVyIGdyb3VwIOKAlCBpdHMgZXhwb3N1cmUgbGV2ZWwgKCdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCcpXG4gIC8vIGFuZC9vciBpdHMgZGVmYXVsdCB2YWx1ZSAodGhlIHZhbHVlIHNlZWRpbmcgdGhlIHJlcG9ydCBiYXIgb24gb3BlbikuIFNlbmRcbiAgLy8gYGRlZmF1bHQ6IG51bGxgIChvciBhbiBlbXB0eSBkZWZhdWx0KSB0byBjbGVhciBpdC4gT25seSB0aGUga2V5cyBwcm92aWRlZFxuICAvLyBhcmUgY2hhbmdlZC5cbiAgcHVibGljIHVwZGF0ZUZpbHRlckdyb3VwKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZ3JvdXBJZDogbnVtYmVyLFxuICAgIGNoYW5nZXM6IHsgbGV2ZWw/OiBSZXBvcnRGaWx0ZXJMZXZlbDsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwgfSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJncm91cHMvJHtncm91cElkfWApLFxuICAgICAgY2hhbmdlcyxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyR3JvdXAnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGF0YS9yZXBvcnQuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLGlCQUFpQixDQUFDOztBQWN2RCwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLHFGQUFxRjtBQUlyRixNQUFNLE9BQU8sVUFBVTtJQUNiLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUN2RSxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBRTVCLGtGQUFrRjtJQUNsRixrREFBa0Q7SUFDMUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDL0QsQ0FBQztJQUVNLE9BQU8sQ0FBQyxRQUFhLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDWixLQUFLLEVBQ0w7WUFDRSxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUN2RSxJQUFJLENBQUMsUUFBYSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsS0FBSyxFQUFFLEVBQ1osS0FBSyxFQUNMLE1BQU0sQ0FD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RSxHQUFHLEVBQUUsVUFBVTtZQUNmLEdBQUcsTUFBTTtTQUNWLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCwrRUFBK0U7SUFDL0UsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSxlQUFlO0lBQ1IsaUJBQWlCLENBQ3RCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUEyRSxFQUMzRSxTQUF3QixFQUFFO1FBRTFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLGlCQUFpQixPQUFPLEVBQUUsQ0FBQyxFQUNqRCxPQUFPLEVBQ1A7WUFDRSxHQUFHLEVBQUUsYUFBYTtZQUNsQixHQUFHLE1BQU07U0FDVixDQUNGLENBQUM7SUFDSixDQUFDO3dHQXJtQlUsVUFBVTs0R0FBVixVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNBcGksIFJlcXVlc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9hcGknO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIENvbXBvbmVudERhdGFTdGF0ZSxcbiAgRmlsdGVyR3JvdXBEZWZhdWx0LFxuICBSZXBvcnRDb21wb25lbnRTcWwsXG4gIFJlcG9ydEZpbHRlckxldmVsLFxuICBSZXBvcnRUcmVlLFxuICBSZXNvbHZlZEZpbHRlclZhbHVlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbi8vIEFQSSBnYXRld2F5IGZvciB0aGUgUmVwb3J0cyBtb2R1bGUuIEV2ZXJ5IGVuZHBvaW50IGhhbmdzIG9mZiBbYmFzZVBhdGhdLFxuLy8gd2hpY2ggZGVmYXVsdHMgdG8gXCJyZXBvcnRzXCIgKHRoZSBmcmFtZXdvcmsgcmVwb3J0cyBiYWNrZW5kIGF0IC9hcGkvcmVwb3J0cylcbi8vIGFuZCBjYW4gYmUgcmVwb2ludGVkIGJ5IHRoZSBob3N0IHNvIHRoZSBwYWNrYWdlIHN0YXlzIHNlbGYtY29udGFpbmVkIGFuZCBwb3J0YWJsZS5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnREYXRhPFQgPSBhbnk+IHtcbiAgcHJpdmF0ZSBfYXBpID0gaW5qZWN0KEZzQXBpKTtcblxuICAvLyBUaGUgQVBJIHJvb3QgZm9yIGV2ZXJ5IHJlcG9ydHMgZW5kcG9pbnQuIERlZmF1bHRzIHRvIHRoZSBmcmFtZXdvcmsgcmVwb3J0c1xuICAvLyBjb250ZXh0OyBzZXQgaXQgb25jZSAoZS5nLiBmcm9tIHRoZSBob3N0J3MgcmVwb3J0IHBhZ2UpIHRvIG1vdW50IGVsc2V3aGVyZS5cbiAgcHVibGljIGJhc2VQYXRoID0gJ3JlcG9ydHMnO1xuXG4gIC8vIEJ1aWxkIGFuIGVuZHBvaW50IHBhdGggdW5kZXIgdGhlIGNvbmZpZ3VyZWQgYmFzZSwgZS5nLiBfcGF0aCgpID0+IFwiYWkvcmVwb3J0c1wiLFxuICAvLyBfcGF0aChgJHtpZH0vcGFnZXNgKSA9PiBcImFpL3JlcG9ydHMvMTIzL3BhZ2VzXCIuXG4gIHByaXZhdGUgX3BhdGgoc3VmZml4ID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdWZmaXggPyBgJHt0aGlzLmJhc2VQYXRofS8ke3N1ZmZpeH1gIDogdGhpcy5iYXNlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyByZXBvcnRzKHF1ZXJ5OiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoKSxcbiAgICAgIHF1ZXJ5LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnRzJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gQm90aCBoYWx2ZXMgb2YgdGhlIGxpc3Rpbmcg4oCUIHJlcG9ydHMgQU5EIHRoZSBmb2xkZXJzIHRoZXkgYXJlIGZpbGVkIGludG8g4oCUXG4gIC8vIGZyb20gdGhlIG9uZSBHRVQuIE5vIGBrZXlgLCBiZWNhdXNlIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHRoZSBhbnN3ZXIgaGVyZTtcbiAgLy8gcmVwb3J0cygpIGtlZXBzIGl0cyAncmVwb3J0cycga2V5IGZvciBjYWxsZXJzIHRoYXQgb25seSB3YW50IHRoZSBmbGF0IGxpc3QuXG4gIHB1YmxpYyB0cmVlKHF1ZXJ5OiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFJlcG9ydFRyZWU+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoKSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgY29uZmlnLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlKG5hbWU6IHN0cmluZywgcmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IG51bGwsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aCgpLFxuICAgICAgeyBuYW1lLCByZXBvcnRGb2xkZXJJZCB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBGaWxlIGEgcmVwb3J0IHVuZGVyIGEgZm9sZGVyLCBvciBwYXNzIG51bGwgdG8gbW92ZSBpdCB0byB0aGUgcm9vdC4gU2VudFxuICAvLyBleHBsaWNpdGx5IChuZXZlciBvbWl0dGVkKSBzbyB0aGUgYmFja2VuZCBjYW4gdGVsbCBcIm1vdmUgdG8gcm9vdFwiIGZyb21cbiAgLy8gXCJsZWF2ZSB0aGUgZm9sZGVyIGFsb25lXCIuXG4gIHB1YmxpYyBtb3ZlUmVwb3J0KHJlcG9ydElkOiBudW1iZXIsIHJlcG9ydEZvbGRlcklkOiBudW1iZXIgfCBudWxsLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHsgcmVwb3J0Rm9sZGVySWQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUZvbGRlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50UmVwb3J0Rm9sZGVySWQ6IG51bWJlciA9IG51bGwsXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoJ2ZvbGRlcnMnKSxcbiAgICAgIHsgbmFtZSwgcGFyZW50UmVwb3J0Rm9sZGVySWQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZm9sZGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVuYW1lIGFuZC9vciBtb3ZlIGEgZm9sZGVyLiBPbmx5IHRoZSBrZXlzIHBhc3NlZCBhcmUgYWN0ZWQgb24gc2VydmVyLXNpZGUsXG4gIC8vIHNvIGEgcmVuYW1lIG5ldmVyIGRpc3R1cmJzIHRoZSBwYXJlbnQgYW5kIGEgZHJhZyBuZXZlciBkaXN0dXJicyB0aGUgbmFtZS5cbiAgcHVibGljIHVwZGF0ZUZvbGRlcihcbiAgICByZXBvcnRGb2xkZXJJZDogbnVtYmVyLFxuICAgIGZvbGRlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgZm9sZGVycy8ke3JlcG9ydEZvbGRlcklkfWApLFxuICAgICAgZm9sZGVyLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTb2Z0LWRlbGV0ZSwgd2hhdGV2ZXIgdGhlIGZvbGRlciBob2xkczogaXRzIGNvbnRlbnRzIGxlYXZlIHRoZSBsaXN0aW5nIHdpdGhcbiAgLy8gaXQsIGFuZCB1bmRlbGV0ZUZvbGRlcigpIGJyaW5ncyB0aGUgbG90IGJhY2suXG4gIHB1YmxpYyBkZWxldGVGb2xkZXIocmVwb3J0Rm9sZGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYGZvbGRlcnMvJHtyZXBvcnRGb2xkZXJJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBSZXN0b3JlIGEgc29mdC1kZWxldGVkIGZvbGRlciB0aHJvdWdoIGl0cyBvd24gYWN0aW9uIGVuZHBvaW50IOKAlCB0aGUgZm9sZGVyXG4gIC8vIFBVVCBkb2VzIG5vdCBhY2NlcHQgYHN0YXRlYC4gQW55IGRlbGV0ZWQgZm9sZGVyIGFib3ZlIGl0IGlzIHJlc3RvcmVkIHRvbywgc29cbiAgLy8gaXQgbGFuZHMgYmFjayB3aGVyZSBpdCB3YXMuXG4gIHB1YmxpYyB1bmRlbGV0ZUZvbGRlcihyZXBvcnRGb2xkZXJJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYGZvbGRlcnMvJHtyZXBvcnRGb2xkZXJJZH0vdW5kZWxldGVgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdmb2xkZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVuYW1lKHJlcG9ydElkOiBudW1iZXIsIG5hbWU6IHN0cmluZywgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7IG5hbWUgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVwb3J0IHNldHRpbmdzOiBhbnkgc3Vic2V0IG9mIHsgbmFtZSwgcGFnZVdpZHRoLCBwYWdlSGVpZ2h0LCBsYXlvdXQsXG4gIC8vIHN0eWxlcywgaGVhZGVyRm9vdGVyIH0g4oCUIHN0eWxlcyBjYXJyeSB0aGUgcmVwb3J0J3MgdHlwb2dyYXBoaWMgY29uZmlnIChlLmcuXG4gIC8vIGhlYWRpbmcgc2l6ZSksIGhlYWRlckZvb3RlciB0aGUgaGVhZGVyL2Zvb3RlciBiYW5kIGRlcHRocyBpbiBpbmNoZXMuIFRoZVxuICAvLyBwYWdlIHNpemUgaXMgaW4gaW5jaGVzIGFuZCB3aWR0aC9oZWlnaHQgZ28gdG9nZXRoZXIuXG4gIHB1YmxpYyB1cGRhdGUocmVwb3J0SWQ6IG51bWJlciwgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH1gKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdyZXBvcnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBcHBlbmQgYSBibGFuayBwYWdlIHRvIHRoZSByZXBvcnQ7IHJlc29sdmVzIHRvIHRoZSBuZXcgcGFnZS5cbiAgcHVibGljIGFkZFBhZ2UocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3BhZ2UnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBBbnkgc3Vic2V0IG9mIHsgbmFtZSwgbWFzdGVySGlkZGVuIH0uIEFuIGVtcHR5IG5hbWUgaXMgc3RvcmVkIGFzIG51bGxcbiAgLy8gc2VydmVyLXNpZGUsIHdoaWNoIHB1dHMgdGhlIHRhYiBiYWNrIG9uIGl0cyBwb3NpdGlvbmFsIFwiUGFnZSBOXCIgbGFiZWw7XG4gIC8vIG1hc3RlckhpZGRlbiBoaWRlcyB0aGUgcmVwb3J0J3MgaGVhZGVyIGFuZCBmb290ZXIgb24gdGhpcyBwYWdlLlxuICBwdWJsaWMgdXBkYXRlUGFnZShcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBhZ2VJZDogbnVtYmVyLFxuICAgIHBhZ2U6IHsgbmFtZT86IHN0cmluZzsgbWFzdGVySGlkZGVuPzogYm9vbGVhbiB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L3BhZ2VzLyR7cGFnZUlkfWApLFxuICAgICAgcGFnZSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncGFnZScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIERlbGV0ZSBhIHBhZ2UgYW5kIGV2ZXJ5dGhpbmcgb24gaXQuIFJlZnVzZWQgc2VydmVyLXNpZGUgZm9yIHRoZSBsYXN0XG4gIC8vIHJlbWFpbmluZyBwYWdlIOKAlCBhIHJlcG9ydCB3aXRoIG5vIGNhbnZhcyBpcyBhIGRlbGV0ZWQgcmVwb3J0LCBub3QgYSBwYWdlXG4gIC8vIG9wZXJhdGlvbi5cbiAgcHVibGljIGRlbGV0ZVBhZ2UocmVwb3J0SWQ6IG51bWJlciwgcGFnZUlkOiBudW1iZXIsIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9wYWdlcy8ke3BhZ2VJZH1gKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdwYWdlJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGVyc2lzdCB0aGUgdGFiIG9yZGVyIGFmdGVyIGEgZHJhZyDigJQgdGhlIHdob2xlIGxpc3QsIGluIGl0cyBuZXcgb3JkZXIsIHNvXG4gIC8vIHRoZSBzZXF1ZW5jZSBzdGF5cyBnYXBsZXNzIHdpdGhvdXQgdGhlIHNlcnZlciBpbmZlcnJpbmcgdGhlIG1vdmUuXG4gIHB1YmxpYyBzYXZlUGFnZVBvc2l0aW9ucyhcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBvc2l0aW9uczogeyBwYWdlSWQ6IG51bWJlcjsgb3JkZXI6IG51bWJlciB9W10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vcGFnZXMvcG9zaXRpb25zYCksXG4gICAgICB7IHBvc2l0aW9ucyB9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBzZXR0aW5nczogYW55IHN1YnNldCBvZiB7IHRpdGxlLCBwYWRkaW5nIH0g4oCUIHRoZSBodW1hbi1mYWNpbmdcbiAgLy8gZGlhbG9nIGVkaXRzIOKAlCBvciBhIHRleHQgYmxvY2sncyB7IGh0bWwgfSBmcm9tIGl0cyBpbmxpbmUgZWRpdG9yOyBnZW9tZXRyeVxuICAvLyAoeC95L3cvaC9mbG93V2lkdGgpIGlzIHBlcnNpc3RlZCB2aWEgc2F2ZVBvc2l0aW9ucyBmcm9tIHRoZSBjYW52YXMgaW5zdGVhZC5cbiAgcHVibGljIHVwZGF0ZUNvbXBvbmVudChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgc2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vc2V0dGluZ3NgKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdjb21wb25lbnQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBQbGFjZSBhIHRleHQgYmxvY2sg4oCUIG9uIGEgcGFnZSwgb3IgaW4gdGhlIGhlYWRlci9mb290ZXIgd2hlbiBwYWdlSWQgaXNcbiAgLy8gb21pdHRlZC4gVGhlIG9ubHkgY29tcG9uZW50IHRoZSBVSSBjcmVhdGVzIGl0c2VsZjogY2hhcnRzLCBsaXN0cyBhbmQgS1BJc1xuICAvLyBuZWVkIGEgcXVlcnkgYW5kIGNvbWUgZnJvbSB0aGUgY2hhdC4gUmVzb2x2ZXMgdG8geyBpZCB9LlxuICBwdWJsaWMgYWRkVGV4dChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHRleHQ6IHsgcGFnZUlkPzogbnVtYmVyOyBodG1sPzogc3RyaW5nOyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50c2ApLFxuICAgICAgdGV4dCxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gRGVsZXRlIG9uZSBjb21wb25lbnQgZnJvbSB0aGUgY2FudmFzLCB0b2dldGhlciB3aXRoIGl0cyBmaWx0ZXJzIGFuZCBhbnlcbiAgLy8gZmlsdGVyIGdyb3VwIHRoZXkgbGVhdmUgZW1wdHkuIFNvZnQgc2VydmVyLXNpZGUsIGJ1dCB0aGVyZSBpcyBubyByZXN0b3JlXG4gIC8vIGFueXdoZXJlIGluIHRoZSBVSSwgc28gdGhlIGRpYWxvZydzIGNvbmZpcm0gcHJlc2VudHMgaXQgYXMgcGVybWFuZW50LlxuICBwdWJsaWMgZGVsZXRlQ29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5kZWxldGUoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29tcG9uZW50JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU29mdC1kZWxldGU6IHRoZSByZXBvcnQgbGVhdmVzIHRoZSBsaXN0aW5nIGJ1dCBrZWVwcyBpdHMgcGFnZXMgYW5kXG4gIC8vIGNvbXBvbmVudHMsIHNvIHVuZGVsZXRlKCkgYnJpbmdzIGJhY2sgdGhlIHNhbWUgZG9jdW1lbnQuXG4gIHB1YmxpYyBkZWxldGUocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUmVzdG9yZSBhIHNvZnQtZGVsZXRlZCByZXBvcnQgdGhyb3VnaCBpdHMgb3duIGFjdGlvbiBlbmRwb2ludCDigJQgdGhlIHJlcG9ydFxuICAvLyBQVVQgZG9lcyBub3QgYWNjZXB0IGBzdGF0ZWAuIEl0cyBmb2xkZXIgaXMgcmVzdG9yZWQgdG9vIHdoZW4gaXQgaXMgZGVsZXRlZCxcbiAgLy8gb3IgaW5zaWRlIG9uZSB0aGF0IGlzLCBzbyB0aGUgcmVwb3J0IGxhbmRzIGJhY2sgd2hlcmUgaXQgd2FzLlxuICBwdWJsaWMgdW5kZWxldGUocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS91bmRlbGV0ZWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3JlcG9ydCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBhc3NlbWJsZWQgc3RydWN0dXJlOiBwYWdlcyDihpIgY29tcG9uZW50cyAoKyB0aGVpciBmaWx0ZXJzKSBhbmQgdGhlXG4gIC8vIHJlcG9ydCdzIGZpbHRlciBncm91cHMuXG4gIHB1YmxpYyBnZXQocmVwb3J0SWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9YCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAncmVwb3J0JyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gUGVyc2lzdCBnZW9tZXRyeSBmb3IgdGhlIG1vdmVkIGNvbXBvbmVudHMgb25seSDigJQgYW55IHN1YnNldCBvZlxuICAvLyB7IHgsIHksIHcsIGggfSAoaW5jaGVzKSwgZmxvd1dpZHRoIChwZXJjZW50KSBhbmQgb3JkZXIgKGZsb3cgcG9zaXRpb24pLlxuICBwdWJsaWMgc2F2ZVBvc2l0aW9ucyhcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIHBvc2l0aW9uczogKHsgY29tcG9uZW50SWQ6IG51bWJlciB9ICYgUGFydGlhbDx7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB3OiBudW1iZXI7IGg6IG51bWJlcjsgZmxvd1dpZHRoOiBudW1iZXI7IG9yZGVyOiBudW1iZXIgfT4pW10sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy9wb3NpdGlvbnNgKSxcbiAgICAgIHsgcG9zaXRpb25zIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gT25lIGNvbXBvbmVudCdzIGRhdGEuIFRoZSBib2R5IGNhcnJpZXMgZXZlcnl0aGluZyBzZXNzaW9uLXNjb3BlZDogdGhlXG4gIC8vIHJlc29sdmVkIGZpbHRlciB2YWx1ZXMgYW5kIHRoZSBjb21wb25lbnQncyBvd24gaW50ZXJhY3Rpb24gc3RhdGUuXG4gIC8vXG4gIC8vIGBpc0V4cG9ydGAgbWFya3MgdGhlIHJlYWQgYXMgcGFydCBvZiBhIFBERi9Qb3dlclBvaW50IHJlbmRlci4gVGhlIHNlcnZlclxuICAvLyBnaXZlcyB0aG9zZSBhIGxvbmdlciBwZXItc3RhdGVtZW50IGNlaWxpbmcgdGhhbiBhbiBvbi1zY3JlZW4gdGlsZSwgYmVjYXVzZVxuICAvLyBhIHJlYWRlciB3YXRjaGluZyBhbiBleHBvcnQgcHJvZ3Jlc3MgYmFyIGNhbiB3YWl0IGZvciBhIHF1ZXJ5IG5vYm9keSB3b3VsZFxuICAvLyB0b2xlcmF0ZSB3YWl0aW5nIGZvciBvbiBhIGRhc2hib2FyZC5cbiAgcHVibGljIGNvbXBvbmVudERhdGEoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcnM6IFJlc29sdmVkRmlsdGVyVmFsdWVbXSA9IFtdLFxuICAgIHN0YXRlOiBDb21wb25lbnREYXRhU3RhdGUgPSB7fSxcbiAgICBpc0V4cG9ydCA9IGZhbHNlLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2RhdGFgKSxcbiAgICAgIHsgZmlsdGVycywgc3RhdGUsIGV4cG9ydDogaXNFeHBvcnQgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZGF0YScsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEV4cG9ydHMgdGhlIGNvbXBvbmVudCdzIEZVTEwgZmlsdGVyZWQgZGF0YXNldCB0byBDU1Ygc2VydmVyLXNpZGUgYW5kXG4gIC8vIHJlc29sdmVzIHRvIGEgcHJlc2lnbmVkIGRvd25sb2FkIFVSTC4gVGhlIGJhY2tlbmQgc3RyZWFtcyBwZXJjZW50YWdlXG4gIC8vIHByb2dyZXNzIHdoaWxlIGNodW5raW5nOyBjb25zdW1lIHRocm91Z2ggRnNQcm9jZXNzLmRvd25sb2FkLlxuICBwdWJsaWMgZXhwb3J0Q29tcG9uZW50KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBmaWx0ZXJzOiBSZXNvbHZlZEZpbHRlclZhbHVlW10gPSBbXSxcbiAgICBzdGF0ZTogQ29tcG9uZW50RGF0YVN0YXRlID0ge30sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2NvbXBvbmVudHMvJHtjb21wb25lbnRJZH0vZXhwb3J0YCksXG4gICAgICB7IGZpbHRlcnMsIHN0YXRlIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3VybCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIEV4cG9ydHMgRVZFUlkgY29tcG9uZW50IG9uIHRoZSByZXBvcnQg4oCUIG9yIG9uIG9uZSBwYWdlIOKAlCBzZXJ2ZXItc2lkZSBhbmRcbiAgLy8gcmVzb2x2ZXMgdG8gYSBwcmVzaWduZWQgVVJMIGZvciBhIHppcCBvZiBvbmUgQ1NWIHBlciBjb21wb25lbnQsIGZvbGRlcmVkIGJ5XG4gIC8vIHBhZ2UuIGBmaWx0ZXJzYCBjYXJyaWVzIHRoZSByZXNvbHZlZCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvbXBvbmVudCB0b2dldGhlcjtcbiAgLy8gZWFjaCBvbmUgcGlja3Mgb3V0IGl0cyBvd24uIFNhbWUga2VlcC1hbGl2ZSBjb250cmFjdCBhcyBleHBvcnRDb21wb25lbnQsXG4gIC8vIG92ZXIgYSBsb25nZXIgcnVuOyBjb25zdW1lIHRocm91Z2ggRnNQcm9jZXNzLmRvd25sb2FkLlxuICBwdWJsaWMgZXhwb3J0UmVwb3J0KFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgZmlsdGVyczogUmVzb2x2ZWRGaWx0ZXJWYWx1ZVtdID0gW10sXG4gICAgcGFnZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbCxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZXhwb3J0YCksXG4gICAgICB7IGZpbHRlcnMsIC4uLihwYWdlSWQgPyB7IHBhZ2VJZCB9IDoge30pIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogJ3VybCcsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIERpc3RpbmN0IG9wdGlvbnMgZm9yIGEgc2VsZWN0IGZpbHRlciAoZHJpdmVzIG11bHRpc2VsZWN0IGNvbnRyb2xzKS5cbiAgcHVibGljIGZpbHRlck9wdGlvbnMocmVwb3J0SWQ6IG51bWJlciwgZmlsdGVySWQ6IG51bWJlciwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoYCR7cmVwb3J0SWR9L2ZpbHRlcnMvJHtmaWx0ZXJJZH0vb3B0aW9uc2ApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ29wdGlvbnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgc3RhdGVtZW50IGEgY29tcG9uZW50IHJ1bnMsIGZvciB0aGUgU1FMIHRhYi5cbiAgLy9cbiAgLy8gRmV0Y2hlZCByYXRoZXIgdGhhbiByZWFkIG9mZiB0aGUgY29tcG9uZW50LCBiZWNhdXNlIGEgREVSSVZFRCBjb21wb25lbnQgaGFzXG4gIC8vIG5vIHN0b3JlZCBTUUwg4oCUIGl0IHN0b3JlcyBhIGRvY3VtZW50LCBhbmQgaXRzIHN0YXRlbWVudCBvbmx5IGV4aXN0cyBvbmNlXG4gIC8vIHRoZSBiYWNrZW5kIGNvbXBpbGVzIHRoYXQgZG9jdW1lbnQuIENvbXBpbGVkIHBlciByZXF1ZXN0LCBmb3IgdGhlIG9uZVxuICAvLyBjb21wb25lbnQgYmVpbmcgbG9va2VkIGF0LCBzbyBvcGVuaW5nIGEgcmVwb3J0IG5ldmVyIHBheXMgZm9yIGl0LlxuICAvL1xuICAvLyBga2V5OiBudWxsYCBiZWNhdXNlIHRoZSB3aG9sZSBlbnZlbG9wZSBpcyB0aGUgYW5zd2VyIGhlcmU6IGEgc3RhbGUgZG9jdW1lbnRcbiAgLy8gY29tZXMgYmFjayBhcyB7IHNxbDogbnVsbCwgZXJyb3IsIGVycm9yVHlwZSB9IGFuZCB1bndyYXBwaW5nIG9uZSBmaWVsZFxuICAvLyB3b3VsZCB0aHJvdyB0aGUgZGlhZ25vc2lzIGF3YXkuXG4gIHB1YmxpYyBjb21wb25lbnRTcWwoXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBjb21wb25lbnRJZDogbnVtYmVyLFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFJlcG9ydENvbXBvbmVudFNxbD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9zcWxgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBjb21wb25lbnQgU1FMJ3MgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1ucyDigJQgZHJpdmVzIHRoZSBjb2x1bW4gcGlja2VyXG4gIC8vIGluIHRoZSBmaWx0ZXIgVUkgc28gYSBjb2x1bW4gbmFtZSBpcyBuZXZlciB0eXBlZCBieSBoYW5kLlxuICBwdWJsaWMgY29tcG9uZW50Q29sdW1ucyhyZXBvcnRJZDogbnVtYmVyLCBjb21wb25lbnRJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vY29tcG9uZW50cy8ke2NvbXBvbmVudElkfS9jb2x1bW5zYCksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnY29sdW1ucycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIE1ha2Ugb25lIGNvbHVtbiBmaWx0ZXJhYmxlLiBgbGV2ZWxgIChjb21wb25lbnQgfCByZXBvcnQpIHBsYWNlcyBhIG5ld1xuICAvLyBncm91cDsgYGdyb3VwSWRgIGluc3RlYWQgbGlua3MgaW50byBhbiBleGlzdGluZyBncm91cC4gQSBzZWxlY3QgZmlsdGVyJ3NcbiAgLy8gb3B0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnQgU1FMIHdoZW4gb3B0aW9uc1NxbCBpcyBvbWl0dGVkLlxuICBwdWJsaWMgYWRkRmlsdGVyKFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBmaWx0ZXI6IHsgZmlsdGVyQ29sdW1uOiBzdHJpbmc7IHR5cGU/OiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nOyBsZXZlbD86IHN0cmluZzsgb3B0aW9uc1NxbD86IHN0cmluZzsgZ3JvdXBJZD86IG51bWJlciB9LFxuICAgIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9jb21wb25lbnRzLyR7Y29tcG9uZW50SWR9L2ZpbHRlcnNgKSxcbiAgICAgIGZpbHRlcixcbiAgICAgIHtcbiAgICAgICAga2V5OiAnZmlsdGVyJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVXBkYXRlIGEgZmlsdGVyIOKAlCBhbnkgc3Vic2V0IG9mIHsgbGFiZWwsIG9wdGlvbnNTcWwsIGVuYWJsZWQgfS5cbiAgcHVibGljIHVwZGF0ZUZpbHRlcihcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGZpbHRlcklkOiBudW1iZXIsXG4gICAgY2hhbmdlczogeyBsYWJlbD86IHN0cmluZzsgb3B0aW9uc1NxbD86IHN0cmluZzsgZW5hYmxlZD86IGJvb2xlYW4gfSxcbiAgICBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wdXQoXG4gICAgICB0aGlzLl9wYXRoKGAke3JlcG9ydElkfS9maWx0ZXJzLyR7ZmlsdGVySWR9YCksXG4gICAgICBjaGFuZ2VzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdmaWx0ZXInLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBSZW1vdmUgYSBmaWx0ZXIgKGl0cyBncm91cCBnb2VzIHRvbyB3aGVuIG5vdGhpbmcgZWxzZSB1c2VzIGl0KS5cbiAgcHVibGljIGRlbGV0ZUZpbHRlcihyZXBvcnRJZDogbnVtYmVyLCBmaWx0ZXJJZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZGVsZXRlKFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZmlsdGVycy8ke2ZpbHRlcklkfWApLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlcicsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBnbG9iYWwgQUkga25vd2xlZGdlIGRvY3VtZW50IChvcGVyYXRvci1hdXRob3JlZCBhZ2VudCBpbnN0cnVjdGlvbnMpXG4gIC8vIGFuZCBpdHMgZnVsbCB2ZXJzaW9uIGhpc3Rvcnk6IHsgaW5zdHJ1Y3Rpb25zLCB2ZXJzaW9ucyB9LlxuICBwdWJsaWMgaW5zdHJ1Y3Rpb25zKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdpbnN0cnVjdGlvbnMnKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNhdmUgYSBuZXcgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQgKGFwcGVuZC1vbmx5OyBhbiB1bmNoYW5nZWQgc2F2ZSBpcyBhXG4gIC8vIG5vLW9wIHNlcnZlci1zaWRlKS4gUmVzb2x2ZXMgdG8gdGhlIHNhbWUgeyBpbnN0cnVjdGlvbnMsIHZlcnNpb25zIH0gc2hhcGUuXG4gIHB1YmxpYyBzYXZlSW5zdHJ1Y3Rpb25zKGNvbnRlbnQ6IHN0cmluZywgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnB1dChcbiAgICAgIHRoaXMuX3BhdGgoJ2luc3RydWN0aW9ucycpLFxuICAgICAgeyBjb250ZW50IH0sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gTWFrZSBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IGN1cnJlbnQgKG5vIG5ldyByb3cgaXMgY3JlYXRlZCkuXG4gIHB1YmxpYyByZXN0b3JlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25JZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChcbiAgICAgIHRoaXMuX3BhdGgoYGluc3RydWN0aW9ucy8ke2luc3RydWN0aW9uSWR9L3Jlc3RvcmVgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6IG51bGwsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJ1biBhIHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkLCBzdHJlYW1lZDogZW1pdHMgYW4gZXZlbnQgcGVyIE5ESlNPTiBmcmFtZVxuICAvLyAoeyBraW5kOiAnbG9nJywgbGluZSwgcGVyY2VudCB9IGZlZWQgbGluZXMgYW5kIHsga2luZDogJ3NlY3Rpb24nIH0gcGhhc2VcbiAgLy8gbWFya2VycykgYW5kIGNvbXBsZXRlcyB3aGVuIHRoZSBidWlsZCBlbmRzLiBGZWVkIHRoZSBsaW5lcyBpbnRvIEZzUHJvY2Vzcy5cbiAgcHVibGljIHNlbWFudGljQnVpbGQoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuc3RyZWFtKFxuICAgICAgJ1BPU1QnLFxuICAgICAgdGhpcy5fcGF0aCgnc2VtYW50aWMvYnVpbGQnKSxcbiAgICAgIHsgc3RyZWFtOiB0cnVlIH0sXG4gICAgICBjb25maWcsXG4gICAgKTtcbiAgfVxuXG4gIC8vIExhdGVzdCBidWlsZCBzdGF0dXMgKyBlbnRpdHkgc2NvcmVib2FyZDogeyBidWlsZCwgZGV0YWlsIH0uXG4gIHB1YmxpYyBzZW1hbnRpY0J1aWxkU3RhdHVzKGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoXG4gICAgICB0aGlzLl9wYXRoKCdzZW1hbnRpYy9idWlsZCcpLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGtleTogbnVsbCxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gU3RvcCB0aGUgcnVubmluZyBidWlsZCAodGhlIGN1cnJlbnQgc2VtYW50aWMgZGF0YWJhc2Ugc3RheXMgaW4gcGxhY2UpLlxuICBwdWJsaWMgc2VtYW50aWNCdWlsZFN0b3AoY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoXG4gICAgICB0aGlzLl9wYXRoKCdzZW1hbnRpYy9idWlsZC9zdG9wJyksXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnYnVpbGQnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBPbmUgZW50aXR5J3MgY2FjaGVkIEFJLWNsYXNzaWZpZWQgY29kZSBmdW5jdGlvbnMg4oCUIGxvYWRlZCBvbiBleHBhbmQsIG9uZVxuICAvLyBlbnRpdHkgYXQgYSB0aW1lLCBiZWNhdXNlIHRoZSBmdWxsIHNldCBhY3Jvc3MgYWxsIGVudGl0aWVzIGlzIGZhciB0b28gYmlnXG4gIC8vIHRvIHNoaXAgaW5zaWRlIHRoZSBzY29yZWJvYXJkIGNhbGwuXG4gIHB1YmxpYyBzZW1hbnRpY0VudGl0eUZ1bmN0aW9ucyhlbnRpdHk6IHN0cmluZywgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldChcbiAgICAgIHRoaXMuX3BhdGgoYHNlbWFudGljL2VudGl0aWVzLyR7ZW50aXR5fS9mdW5jdGlvbnNgKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdlbnRpdHlGdW5jdGlvbnMnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBUaGUgcmVwb3J0IG1vZHVsZSdzIEdlbmVyYWwgc2V0dGluZ3MgKHNlbWFudGljLWJ1aWxkIGNvbmN1cnJlbmN5ICsgaXRzIGJvdW5kcykuXG4gIHB1YmxpYyBzZXR0aW5ncyhjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkuZ2V0KFxuICAgICAgdGhpcy5fcGF0aCgnc2V0dGluZ3MnKSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdzZXR0aW5ncycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNhdmUgdGhlIEdlbmVyYWwgc2V0dGluZ3M7IHJlc29sdmVzIHRvIHRoZSBzYW1lIHsgc2V0dGluZ3MgfSBzaGFwZS5cbiAgcHVibGljIHNhdmVTZXR0aW5ncyhzZXR0aW5nczogeyBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlciB9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aCgnc2V0dGluZ3MnKSxcbiAgICAgIHNldHRpbmdzLFxuICAgICAge1xuICAgICAgICBrZXk6ICdzZXR0aW5ncycsXG4gICAgICAgIC4uLmNvbmZpZyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBhIGZpbHRlciBncm91cCDigJQgaXRzIGV4cG9zdXJlIGxldmVsICgnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnKVxuICAvLyBhbmQvb3IgaXRzIGRlZmF1bHQgdmFsdWUgKHRoZSB2YWx1ZSBzZWVkaW5nIHRoZSByZXBvcnQgYmFyIG9uIG9wZW4pLiBTZW5kXG4gIC8vIGBkZWZhdWx0OiBudWxsYCAob3IgYW4gZW1wdHkgZGVmYXVsdCkgdG8gY2xlYXIgaXQuIE9ubHkgdGhlIGtleXMgcHJvdmlkZWRcbiAgLy8gYXJlIGNoYW5nZWQuXG4gIHB1YmxpYyB1cGRhdGVGaWx0ZXJHcm91cChcbiAgICByZXBvcnRJZDogbnVtYmVyLFxuICAgIGdyb3VwSWQ6IG51bWJlcixcbiAgICBjaGFuZ2VzOiB7IGxldmVsPzogUmVwb3J0RmlsdGVyTGV2ZWw7IGRlZmF1bHQ/OiBGaWx0ZXJHcm91cERlZmF1bHQgfCBudWxsIH0sXG4gICAgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30sXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucHV0KFxuICAgICAgdGhpcy5fcGF0aChgJHtyZXBvcnRJZH0vZmlsdGVyZ3JvdXBzLyR7Z3JvdXBJZH1gKSxcbiAgICAgIGNoYW5nZXMsXG4gICAgICB7XG4gICAgICAgIGtleTogJ2ZpbHRlckdyb3VwJyxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -18,17 +18,13 @@ export var ReportNodeType;
18
18
  ReportNodeType["Folder"] = "folder";
19
19
  ReportNodeType["Report"] = "report";
20
20
  })(ReportNodeType || (ReportNodeType = {}));
21
- // Reports are soft-deletable: a deleted report leaves the listing but keeps its
22
- // pages and components, and the listing's "Show Deleted" mode restores it.
23
- // Folders have no equivalent they are only deletable once empty, so they hard
24
- // delete and there is nothing to restore.
21
+ // Reports and folders are both soft-deletable. A deleted report keeps its pages
22
+ // and components; a deleted folder keeps everything filed under it, which leaves
23
+ // the listing with it and comes back with it. "Show Deleted" shows the whole
24
+ // tree, live and deleted together, so any of it can be restored in place.
25
25
  export var ReportState;
26
26
  (function (ReportState) {
27
27
  ReportState["Active"] = "active";
28
28
  ReportState["Deleted"] = "deleted";
29
29
  })(ReportState || (ReportState = {}));
30
- export const ReportStates = [
31
- { name: 'Active', value: ReportState.Active },
32
- { name: 'Deleted', value: ReportState.Deleted },
33
- ];
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQXdLbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUEyTUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFnQkQsZ0ZBQWdGO0FBQ2hGLDJFQUEyRTtBQUMzRSxnRkFBZ0Y7QUFDaEYsMENBQTBDO0FBQzFDLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtJQUM3QyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Q0FDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBhc3NlbWJsZWQgcmVwb3J0IHN0cnVjdHVyZSByZXR1cm5lZCBieSBHRVQgL2FwaS9yZXBvcnRzLzppZCDigJQgY29tcG9zZWRcbi8vIHNlcnZlci1zaWRlIGZyb20gdGhlIG5vcm1hbGl6ZWQgdGFibGVzIChyZXBvcnRzIOKGkiByZXBvcnRfcGFnZXMg4oaSXG4vLyByZXBvcnRfY29tcG9uZW50cyArIHJlcG9ydF9maWx0ZXJzLCBwbHVzIHJlcG9ydF9maWx0ZXJfZ3JvdXBzKS4gQWxsIGtleXMgYXJlXG4vLyBjYW1lbENhc2U7IGNvbXBvbmVudCBgY29uZmlnYCBpcyB0aGUgc3RhbmRhcmQgZm9ybWF0IHRoZSByZW5kZXJlciBtYXBzIHRvXG4vLyBFQ2hhcnRzIG9wdGlvbnMgLyBGc0xpc3QgY29uZmlnLlxuXG4vLyBMYXlvdXQgbW9kZXM6IEZyZWVmb3JtID0gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGNvbXBvbmVudHMgKGRyYWcgYW55d2hlcmUpO1xuLy8gRmxvdyA9IGNvbXBvbmVudHMgZmxvdyBsaWtlIHJvd3MsIGVhY2ggdGFraW5nIGZsb3dXaWR0aCAlIG9mIHRoZSBwYWdlIHdpZHRoLlxuZXhwb3J0IHR5cGUgUmVwb3J0TGF5b3V0ID0gJ2ZyZWVmb3JtJyB8ICdmbG93JztcblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnQge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGxheW91dDogUmVwb3J0TGF5b3V0O1xuICAvLyBJQU5BIHRpbWV6b25lIChlLmcuIEFtZXJpY2EvTmV3X1lvcmspIGFuY2hvcmluZyBkYXRlIGZpbHRlcmluZyArIGNoYXJ0IGRhdGVcbiAgLy8gYnVja2V0aW5nLiBudWxsIGZhbGxzIGJhY2sgdG8gdGhlIGFjY291bnQgem9uZSB0aGVuIFVUQyAocmVzb2x2ZWQgc2VydmVyLXNpZGUpLlxuICB0aW1lem9uZTogc3RyaW5nIHwgbnVsbDtcbiAgLy8gUmVwb3J0LWxldmVsIGNvbmZpZzogdHlwb2dyYXBoaWMgc3R5bGVzLCBldGMuIChjYW1lbENhc2UgSlNPTiBjb2x1bW4pLlxuICBjb25maWc6IFJlcG9ydENvbmZpZztcbiAgLy8gVGhlIHBhZ2UgaW4gSU5DSEVTICh0aGUgcmVwb3J0J3MgbmF0aXZlIHVuaXQg4oCUIFBERnMgYW5kIFBvd2VyUG9pbnQgYXJlXG4gIC8vIGluY2gtYmFzZWQsIHNvIGV4cG9ydHMgYXJlIGRpbWVuc2lvbmFsbHkgZXhhY3QpLiBPcmllbnRhdGlvbiBpcyBub3QgYSBmaWVsZFxuICAvLyBvZiBpdHMgb3duOiBhIHBhZ2Ugd2lkZXIgdGhhbiBpdCBpcyB0YWxsIElTIGxhbmRzY2FwZS5cbiAgcGFnZVdpZHRoOiBudW1iZXI7XG4gIHBhZ2VIZWlnaHQ6IG51bWJlcjtcbiAgcGFnZXM6IFJlcG9ydFBhZ2VbXTtcbiAgLy8gVGhlIGhlYWRlciBhbmQgZm9vdGVyOiB0aGUgcmVwb3J0J3MgbWFzdGVyIHBhZ2UsIHdob3NlIGNvbXBvbmVudHMgZHJhd1xuICAvLyB1bmRlciBldmVyeSBwYWdlIHRoYXQgZG9lcyBub3QgaGlkZSB0aGVtIChQb3dlclBvaW50J3Mgc2xpZGUgbWFzdGVyKS4gTnVsbFxuICAvLyB1bnRpbCBhbnl0aGluZyBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlbS5cbiAgbWFzdGVyOiBSZXBvcnRNYXN0ZXIgfCBudWxsO1xuICBmaWx0ZXJHcm91cHM6IFJlcG9ydEZpbHRlckdyb3VwW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0TWFzdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG59XG5cbi8vIFRoZSBkZXB0aCBvZiB0aGUgaGVhZGVyIGJhbmQgKHRvcCBvZiBldmVyeSBwYWdlKSBhbmQgdGhlIGZvb3RlciBiYW5kIChib3R0b21cbi8vIG9mIGV2ZXJ5IHBhZ2UpLCBpbiBJTkNIRVMuIFRoZSBiYW5kcyBob2xkIG5vIGNvbnRlbnQgb2YgdGhlaXIgb3duIOKAlCB0aGVcbi8vIG1hc3RlcidzIGNvbXBvbmVudHMgc2l0IGluIHRoZW0g4oCUIHRoZXkgYXJlIHRoZSByZXNlcnZlZCBtYXJnaW5zIHRoZSBlZGl0b3Jcbi8vIGRyYXdzIGFzIGd1aWRlcyBhbmQgc25hcHMgdG8uIEFsd2F5cyBhcnJpdmVzIHJlc29sdmVkICgwID0gbm8gYmFuZCkuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEhlYWRlckZvb3RlciB7XG4gIGhlYWRlckhlaWdodDogbnVtYmVyO1xuICBmb290ZXJIZWlnaHQ6IG51bWJlcjtcbn1cblxuLy8gUmVwb3J0LWxldmVsIHN0eWxpbmcuIFNpemVzIGFyZSBpbiBQT0lOVFMgKDEvNzJcIikg4oCUIHRoZSByZXBvcnQncyB0eXBvZ3JhcGh5XG4vLyBtYXBzIDE6MSB0byBQREYgKDcycHQvaW4pIGFuZCBQb3dlclBvaW50IChwb2ludCBmb250IHNpemVzKSwgc28gYSBwb2ludFxuLy8gdmFsdWUgaXMgZGltZW5zaW9uYWxseSBleGFjdCBvbiBzY3JlZW4gYW5kIGluIGV2ZXJ5IGV4cG9ydC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29uZmlnIHtcbiAgc3R5bGVzPzogUmVwb3J0U3R5bGVzO1xuICAvLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbC4gT3B0aW9uYWwgb24gdGhlIHR5cGUgYmVjYXVzZSBhIFJlcG9ydENvbmZpZ1xuICAvLyBsaXRlcmFsIG5lZWQgbm90IGNhcnJ5IGl0OyB0aGUgQVBJIGFsd2F5cyBzZW5kcyBpdCwgcmVzb2x2ZWQuXG4gIGdyb3VwQnk/OiBSZXBvcnRHcm91cEJ5O1xuICAvLyBSZXNvbHZlZCBieSB0aGUgQVBJIGxpa2UgZ3JvdXBCeS5cbiAgaGVhZGVyRm9vdGVyPzogUmVwb3J0SGVhZGVyRm9vdGVyO1xufVxuXG4vLyBUaGUgcmVwb3J0J3MgZ3JvdXAtYnkgY29udHJvbCDigJQgdGhlIG9uZSBzd2l0Y2ggdGhhdCByZS1idWNrZXRzIGV2ZXJ5XG4vLyB0aW1lLXNlcmllcyBjaGFydCBvbiB0aGUgcmVwb3J0IGJldHdlZW4gZGF5LCB3ZWVrLCBtb250aCwgcXVhcnRlciBhbmQgeWVhci5cbi8vXG4vLyBJdCBpcyBOT1QgYSBmaWx0ZXI6IGEgZmlsdGVyIG5hcnJvd3Mgd2hpY2ggcm93cyBhcmUgY291bnRlZCwgdGhpcyBjaGFuZ2VzIGhvd1xuLy8gdGhlIHN1cnZpdmluZyByb3dzIGFyZSBidWNrZXRlZC4gSXQgc2hhcmVzIHRoZSByZXBvcnQncyBmaWx0ZXIgYmFyIGJlY2F1c2Vcbi8vIHRoYXQgaXMgdGhlIG9uZSByb3cgb2YgY29udHJvbHMgYSB2aWV3ZXIgcmVhZHMgYSByZXBvcnQgdGhyb3VnaCDigJQgdGhlXG4vLyBzZXBhcmF0aW9uIHRoYXQgbWF0dGVycyBpcyBpbiB0aGUgbW9kZWwsIG5vdCBpbiB3aGVyZSB0aGUgY29udHJvbCBpcyBwYWludGVkLlxuLy9cbi8vIEFsd2F5cyBhcnJpdmVzIFJFU09MVkVEICh0aGUgYmFja2VuZCBmaWxscyBhbiBhYnNlbnQgb3IgcGFydGlhbCBzdG9yZWQgYmxvY2tcbi8vIGluIGZyb20gaXRzIG93biBkZWZhdWx0cyksIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVmYXVsdCBoZXJlIOKAlCByZW5kZXIgd2hhdFxuLy8geW91IGFyZSBnaXZlbi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0R3JvdXBCeSB7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGdyYW51bGFyaXRpZXM6IENoYXJ0R3JhbnVsYXJpdHlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTdHlsZXMge1xuICBoZWFkaW5nPzogeyBzaXplPzogbnVtYmVyIH07XG59XG5cbi8vIENvbnRlbnQgcGFkZGluZyBhcm91bmQgYSBjb21wb25lbnQncyBib2R5LCBpbiBJTkNIRVMgKHRoZSBnZW9tZXRyeSB1bml0KS5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50UGFkZGluZyB7XG4gIHRvcD86IG51bWJlcjtcbiAgcmlnaHQ/OiBudW1iZXI7XG4gIGJvdHRvbT86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRQYWdlIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgb3JkZXI6IG51bWJlcjtcbiAgLy8gVGhlIHBhZ2Ugb3B0cyBvdXQgb2YgdGhlIHJlcG9ydCdzIGhlYWRlciBhbmQgZm9vdGVyIChhIHRpdGxlIHBhZ2UpLlxuICBtYXN0ZXJIaWRkZW46IGJvb2xlYW47XG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudFtdO1xufVxuXG4vLyAndGV4dCcgaXMgYXV0aG9yZWQgcmljaCB0ZXh0IHdpdGggbm8gcXVlcnkgYmVoaW5kIGl0IOKAlCBpdCBuZXZlciBmZXRjaGVzIGRhdGEuXG5leHBvcnQgdHlwZSBSZXBvcnRDb21wb25lbnRUeXBlID0gJ2NoYXJ0JyB8ICdsaXN0JyB8ICdrcGknIHwgJ3RleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudCB7XG4gIGlkOiBudW1iZXI7XG4gIHR5cGU6IFJlcG9ydENvbXBvbmVudFR5cGU7XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICAvLyBHZW9tZXRyeSBpbiBJTkNIRVMuIEZyZWVmb3JtOiBhYnNvbHV0ZSBwb3NpdGlvbiBvbiB0aGUgcGFnZSBjYW52YXMuXG4gIC8vIEZsb3c6IG9ubHkgZmxvd1dpZHRoL29yZGVyIGFwcGx5OyB4L3kgYXJlIHJlbWVtYmVyZWQgZm9yIGEgc3dpdGNoIGJhY2sgdG9cbiAgLy8gZnJlZWZvcm0uXG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB3OiBudW1iZXI7XG4gIGg6IG51bWJlcjtcbiAgLy8gSGVpZ2h0IG1vZGUsIERFUklWRUQgZnJvbSB0eXBlIHNlcnZlci1zaWRlIChub3Qgc3RvcmVkLCByZWFkLW9ubHkpOiBsaXN0c1xuICAvLyBhbmQgS1BJIHRpbGVzIGFyZSBhdXRvICh0aGUgYm94IHNpemVzIHRvIGl0cyBjb250ZW50LCBgaGAgaWdub3JlZCk7IGNoYXJ0c1xuICAvLyBhcmUgYWx3YXlzIGZpeGVkICh1c2UgYGhgKSBzbyB0aGV5IGZpdCB0aGUgYm94IGFuZCBuZXZlciBvdmVyZmxvdy5cbiAgYXV0b0hlaWdodDogYm9vbGVhbjtcbiAgLy8gRmxvdyBsYXlvdXQ6ICUgb2YgdGhlIHBhZ2UgY29udGVudCB3aWR0aCB0aGlzIGNvbXBvbmVudCB0YWtlcy5cbiAgZmxvd1dpZHRoOiBudW1iZXI7XG4gIC8vIEZsb3cgbGF5b3V0IG9yZGVyaW5nLlxuICBvcmRlcjogbnVtYmVyO1xuICAvLyBUaGUgc3RvcmVkIFNRTCBvZiBhIGxlZ2FjeSBzcWwtbW9kZSBjb21wb25lbnQuIE5VTEwgZm9yIGEgZGVyaXZlZCBvbmUsXG4gIC8vIHdob3NlIHN0YXRlbWVudCBkb2VzIG5vdCBleGlzdCB1bnRpbCBpdHMgZG9jdW1lbnQgaXMgY29tcGlsZWQg4oCUIHRoZSBTUUwgdGFiXG4gIC8vIGZldGNoZXMgdGhhdCBzZXBhcmF0ZWx5IChzZWUgUmVwb3J0Q29tcG9uZW50U3FsKS5cbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBjb25maWc6IENoYXJ0Q29uZmlnICYgTGlzdENvbmZpZyAmIEtwaUNvbmZpZyAmIFRleHRDb25maWcgJiBDb21wb25lbnRMYXlvdXRDb25maWcgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZmlsdGVyczogUmVwb3J0RmlsdGVyW107XG59XG5cbi8vIFdoYXQgdGhlIFNRTCB0YWIgZmV0Y2hlczogdGhlIHN0YXRlbWVudCBhIGNvbXBvbmVudCBydW5zLlxuLy9cbi8vIEZvciBhIGRlcml2ZWQgY29tcG9uZW50IGBiYXNlbGluZWAgaXMgdHJ1ZSBhbmQgYHNxbGAgaXMgd2hhdCBpdHMgZG9jdW1lbnRcbi8vIGNvbXBpbGVzIHRvIHdpdGggTk8gdmlld2VyIHN0YXRlIOKAlCBubyBmaWx0ZXJzLCBVVEMsIHRoZSBhdXRob3JlZCBncmFpbi4gVGhlXG4vLyBudW1iZXJzIG9uIHNjcmVlbiBjb21lIGZyb20gdGhhdCBzdGF0ZW1lbnQgcGx1cyB3aGF0ZXZlciB0aGUgdmlld2VyIHBpY2tlZCxcbi8vIHNvIHRoZSB0d28gY2FuIGxlZ2l0aW1hdGVseSBkaWZmZXIgYW5kIHRoZSB0YWIgc2F5cyBzbyByYXRoZXIgdGhhbiBpbXBseWluZ1xuLy8gdGhleSBtYXRjaC5cbi8vXG4vLyBgZXJyb3JgIGlzIG5vdCBhIGZhaWx1cmUgb2YgdGhlIHJlcXVlc3Q6IGEgZG9jdW1lbnQgdGhhdCBubyBsb25nZXIgY29tcGlsZXNcbi8vIGlzIHByZWNpc2VseSB3aGF0IHNvbWVvbmUgb3BlbnMgdGhpcyB0YWIgdG8gZGlzY292ZXIsIHNvIGl0IGFycml2ZXMgYXMgYVxuLy8gbWVzc2FnZSB0byByZW5kZXIgd2l0aCBgZXJyb3JUeXBlYCBuYW1pbmcgd2hpY2gga2luZCAoJ3N0YWxlLXF1ZXJ5JyBvclxuLy8gJ3NlbnNpdGl2ZS1jb2x1bW4nKSwgYW5kIGBzcWxgIG51bGwuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENvbXBvbmVudFNxbCB7XG4gIHNxbDogc3RyaW5nIHwgbnVsbDtcbiAgb3JpZ2luOiAnc3FsJyB8ICdkYnEnIHwgJ2Rlcml2ZWQnO1xuICBiYXNlbGluZTogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG4gIGVycm9yVHlwZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gQSB0ZXh0IGJsb2NrJ3MgY29udGVudDogYW4gaHRtbCBmcmFnbWVudCB0aGUgc2VydmVyIGhhcyBhbHJlYWR5IHJlYnVpbHQgZnJvbVxuLy8gYW4gYWxsb3dsaXN0LCB3aGljaCBtYXkgY2Fycnkge3twYWdlLm51bWJlcn19LCB7e3BhZ2UubmFtZX19IGFuZFxuLy8ge3tyZXBvcnQubmFtZX19IHRva2VucyAoc2VlIHRleHQudHMpLlxuZXhwb3J0IGludGVyZmFjZSBUZXh0Q29uZmlnIHtcbiAgaHRtbD86IHN0cmluZztcbn1cblxuLy8gQ3Jvc3MtdHlwZSBsYXlvdXQvc3R5bGUga2V5cyBjYXJyaWVkIGluIGEgY29tcG9uZW50J3MgY29uZmlnIChhbG9uZ3NpZGUgdGhlXG4vLyB0eXBlLXNwZWNpZmljIGNoYXJ0L2xpc3Qva3BpIGtleXMpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRMYXlvdXRDb25maWcge1xuICBwYWRkaW5nPzogQ29tcG9uZW50UGFkZGluZztcbn1cblxuLy8gVGhlIHByZXNlbnRhdGlvbiBzZXR0aW5ncyBhIGNvbXBvbmVudCdzIHNldHRpbmdzIGRpYWxvZyBlZGl0cy4gTmVpdGhlciBmaWVsZFxuLy8gaXMgcGFydCBvZiB3aGF0IHRoZSBjb21wb25lbnQgcXVlcmllcywgc28gYSBjaGFuZ2UgdG8gdGhlbSByZXBhaW50cyB3aXRob3V0XG4vLyByZS1ydW5uaW5nIGFueXRoaW5nLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRTZXR0aW5ncyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHBhZGRpbmc6IENvbXBvbmVudFBhZGRpbmc7XG59XG5cbi8vIFdoZXJlIGEgY2hhcnQncyBsZWdlbmQgc2l0cyByZWxhdGl2ZSB0byB0aGUgcGxvdCwgb3IgJ2hpZGRlbicgdG8gZHJvcCBpdC5cbmV4cG9ydCB0eXBlIExlZ2VuZFBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnaGlkZGVuJztcblxuZXhwb3J0IHR5cGUgQ2hhcnRHcmFudWxhcml0eSA9ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICdxdWFydGVyJyB8ICd5ZWFyJztcblxuLy8gSG93IGVhY2ggZ3JhbnVsYXJpdHkgcmVhZHMgaW4gdGhlIGdyb3VwLWJ5IGNvbnRyb2wgYW5kIG9uIGFuIGV4cG9ydCBjb3ZlclxuLy8gc2hlZXQuIFdISUNIIG9mIHRoZW0gYSBnaXZlbiByZXBvcnQgb2ZmZXJzIGNvbWVzIGZyb20gaXRzIFJlcG9ydEdyb3VwQnk7XG4vLyB0aGlzIGlzIG9ubHkgdGhlIG5hbWluZy4gJ3llYXInIHJlYWRzIGFzIFwiQW5udWFsbHlcIi5cbmV4cG9ydCBjb25zdCBHUkFOVUxBUklUWV9PUFRJT05TOiB7IHZhbHVlOiBDaGFydEdyYW51bGFyaXR5OyBuYW1lOiBzdHJpbmcgfVtdID0gW1xuICB7IHZhbHVlOiAnZGF5JywgbmFtZTogJ0RheScgfSxcbiAgeyB2YWx1ZTogJ3dlZWsnLCBuYW1lOiAnV2VlaycgfSxcbiAgeyB2YWx1ZTogJ21vbnRoJywgbmFtZTogJ01vbnRoJyB9LFxuICB7IHZhbHVlOiAncXVhcnRlcicsIG5hbWU6ICdRdWFydGVyJyB9LFxuICB7IHZhbHVlOiAneWVhcicsIG5hbWU6ICdBbm51YWxseScgfSxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRDb25maWcge1xuICBjaGFydFR5cGU/OiAnYmFyJyB8ICdsaW5lJyB8ICdhcmVhJyB8ICdwaWUnIHwgJ2RvbnV0JztcbiAgLy8gRm9yIGtpbmQgJ3RpbWUnLCB0aGUgc2VydmVyIGJ1Y2tldHMgdGhlIHJhdyBkYXRldGltZSBjb2x1bW4gdG8gYGdyYW51bGFyaXR5YFxuICAvLyBpbiB0aGUgcmVwb3J0J3MgdGltZXpvbmUgKHRoZSBTUUwgZXhwb3NlcyB0aGUgcmF3IGNvbHVtbiwgdW5idWNrZXRlZCkuXG4gIHhBeGlzPzogeyBjb2x1bW46IHN0cmluZzsga2luZD86ICdjYXRlZ29yeScgfCAndGltZSc7IGdyYW51bGFyaXR5PzogQ2hhcnRHcmFudWxhcml0eTsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgbWVhc3VyZXM/OiBDaGFydE1lYXN1cmVbXTtcbiAgc3BsaXRCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XG4gIC8vIFNpbmdsZS1kaW1lbnNpb24gYmFyIGNoYXJ0cyBvbmx5OiBjb2xvciBlYWNoIGJhciBieSBpdHMgb3duIGNhdGVnb3J5IGFuZFxuICAvLyBzaG93IGEgbGVnZW5kLCBXSVRIT1VUIHNwbGl0dGluZyBpbnRvIG11bHRpcGxlIHNlcmllcyAod2hpY2ggc2xpdmVycyB0aGVcbiAgLy8gYmFycykuIHYxIGV4cGVjdHMgY29sb3JCeS5jb2x1bW4gPT09IHhBeGlzLmNvbHVtbi4gSWdub3JlZCB3aGVuIHNwbGl0QnkgaXNcbiAgLy8gc2V0IG9yIHRoZSBjaGFydCBpc24ndCBhIGJhciBjaGFydC5cbiAgY29sb3JCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XG4gIG9yaWVudGF0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcbiAgc3RhY2tlZD86IGJvb2xlYW47XG4gIGxlZ2VuZD86IExlZ2VuZFBvc2l0aW9uO1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRNZWFzdXJlIHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGFnZ3JlZ2F0aW9uPzogJ3N1bScgfCAnY291bnQnIHwgJ2F2ZycgfCAnbWluJyB8ICdtYXgnO1xuICBsYWJlbD86IHN0cmluZztcbiAgLy8gQXBwbGllZCB0byBhIEtQSSdzIHNpbmdsZSB2YWx1ZSBvbmx5IOKAlCBpdCBpcyBhZ2dyZWdhdGVkIHNlcnZlci1zaWRlIGFmdGVyXG4gIC8vIHRoZSBTUUwgcnVucywgc28gdGhlIFNRTCBjYW5ub3QgZm9ybWF0IGl0LiBDaGFydCBtZWFzdXJlcyBzdGF5IG51bWVyaWMuXG4gIGZvcm1hdD86ICdudW1iZXInIHwgJ3BlcmNlbnQnIHwgJ2N1cnJlbmN5JztcbiAgLy8gSG93IG1hbnkgZGVjaW1hbCBwbGFjZXMgdGhlIHZhbHVlIGlzIHNob3duIHRvLiBGaXhlZCByYXRoZXIgdGhhbiBtYXhpbXVtOlxuICAvLyBhIGNvbHVtbiBvZiByYXRlcyBpcyB1bnJlYWRhYmxlIHdoZW4gZWFjaCBvbmUgc2hvd3MgYSBkaWZmZXJlbnQgbnVtYmVyIG9mXG4gIC8vIGRlY2ltYWxzLiBPbWl0dGVkIGxlYXZlcyB0aGUgbG9jYWxlJ3Mgb3duIGRlZmF1bHQsIHdoaWNoIGlzIHdoYXQgZXZlcnlcbiAgLy8gcmVwb3J0IGF1dGhvcmVkIGJlZm9yZSB0aGlzIGRpZC5cbiAgLy9cbiAgLy8gSXQgY2Fubm90IGJlIGFwcGxpZWQgaW4gdGhlIFNRTDogdGhlIHZhbHVlIGlzIGFnZ3JlZ2F0ZWQgYWZ0ZXIgdGhlIHJlcG9ydCdzXG4gIC8vIGZpbHRlcnMgcnVuLCBzbyBwcmUtcm91bmRpbmcgd291bGQgYnJlYWsgbGl2ZSByZS1maWx0ZXJpbmcgYnkgZGF0ZSByYW5nZSBvclxuICAvLyBwYXJ0bmVyLlxuICBwcmVjaXNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdENvbmZpZyB7XG4gIC8vIEEgbGlzdCBjZWxsIHJlbmRlcnMgdGhlIHZhbHVlIHZlcmJhdGltOiBwZXJjZW50IHNpZ25zLCBjdXJyZW5jeSBzeW1ib2xzLFxuICAvLyB0aG91c2FuZHMgc2VwYXJhdG9ycyBhbmQgZGVjaW1hbCBwbGFjZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSBjb21wb25lbnQnc1xuICAvLyBTUUwgKHRoZSBiYWNrZW5kIHJlamVjdHMgYW55IG90aGVyIGBmb3JtYXRgIGhlcmUpLiBgZGF0ZWAgaXMgdGhlIGV4Y2VwdGlvblxuICAvLyDigJQgYSBkYXRlIGNvbHVtbiBzdGF5cyBhIFJBVyB0aW1lc3RhbXAgc28gdGhlIHJlcG9ydCB0aW1lem9uZSBhbmQgaXRzXG4gIC8vIGRhdGVSYW5nZSBmaWx0ZXJzIGtlZXAgd29ya2luZywgYW5kIHRoZSB2aWV3ZXIgbG9jYWxpc2VzIGl0IGF0IHJlbmRlci5cbiAgLy8gQSBTUUwtZm9ybWF0dGVkIGNvbHVtbiBpcyB0ZXh0LCBzbyBpdCBuYW1lcyBgc29ydENvbHVtbmA6IHRoZSByYXcgbnVtZXJpY1xuICAvLyBhbGlhcyB0aGUgcXVlcnkgYWxzbyBvdXRwdXRzLCB3aGljaCB0aGUgc2VydmVyIG9yZGVycyBieSBpbnN0ZWFkLlxuICBjb2x1bW5zPzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IGZvcm1hdD86ICdkYXRlJzsgc29ydENvbHVtbj86IHN0cmluZyB9W107XG4gIC8vIEEgY3Jvc3MtdGFiOiBgcm93QnlgIHN0YXlzIGRvd24gdGhlIHNpZGUgYW5kIGV2ZXJ5IHZhbHVlIG9mIGBwaXZvdEJ5YFxuICAvLyBiZWNvbWVzIGEgY29sdW1uLiBUaGUgdHdvIGFyZSBzZXQgdG9nZXRoZXIsIGBjb2x1bW5zYCBpcyBvbWl0dGVkICh0aGVcbiAgLy8gYmFja2VuZCByZWplY3RzIGF1dGhvcmluZyBib3RoKSwgYW5kIHRoZSBjb2x1bW4gc2V0IGFycml2ZXMgd2l0aCB0aGUgcm93c1xuICAvLyBpbiBDb21wb25lbnREYXRhLmNvbHVtbnMgYmVjYXVzZSBvbmx5IHRoZSByZXN1bHQga25vd3MgdGhlIHBpdm90IHZhbHVlcy5cbiAgcm93Qnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBwaXZvdEJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgc29ydD86IFJlcG9ydFNvcnQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtwaUNvbmZpZyB7XG4gIG1lYXN1cmU/OiBDaGFydE1lYXN1cmU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U29ydCB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBkaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbn1cblxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyVHlwZSA9ICdkYXRlUmFuZ2UnIHwgJ3NlbGVjdCcgfCAna2V5d29yZCc7XG5cbi8vIFdoZXJlIGEgZmlsdGVyIGdyb3VwJ3MgY29udHJvbCBpcyBleHBvc2VkLiBBIGdyb3VwIGNhbiBiZSBzaG93biBvbiBpdHNcbi8vIGNvbXBvbmVudHMsIGluIHRoZSByZXBvcnQgYmFyLCBvciBCT1RIIGF0IG9uY2UgKHRoZSB0d28gYXJlIGluZGVwZW5kZW50XG4vLyB0b2dnbGVzIGluIHRoZSBVSSk7IGEgY29sdW1uIHdpdGggbmVpdGhlciBleHBvc2VkIHNpbXBseSBoYXMgbm8gZmlsdGVyLlxuZXhwb3J0IHR5cGUgUmVwb3J0RmlsdGVyTGV2ZWwgPSAnY29tcG9uZW50JyB8ICdyZXBvcnQnIHwgJ2JvdGgnO1xuXG4vLyBPbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIG9mIGEgY29tcG9uZW50J3MgU1FMLCB3aXRoIHRoZSBmaWx0ZXIgaW50ZXJmYWNlXG4vLyBJTkZFUlJFRCBmcm9tIGl0cyBkYXRhICh0aGUgaHVtYW4gbmV2ZXIgcGlja3MgdGhlIGludGVyZmFjZSDigJQgaXQgZm9sbG93cyB0aGVcbi8vIGNvbHVtbidzIHR5cGUpLiBEcml2ZXMgdGhlIEZpbHRlcnMgdGFiIGxpc3RpbmcuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlcmFibGVDb2x1bW4ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbn1cblxuLy8gR3JvdW5kIHRydXRoOiBvbmUgZmlsdGVyYWJsZSBvdXRwdXQgY29sdW1uIE9OIG9uZSBjb21wb25lbnQncyBTUUwuIEFsd2F5cyBhXG4vLyBtZW1iZXIgb2YgYSBmaWx0ZXIgZ3JvdXAg4oCUIHRoZSB1bml0IHRoYXQgbGlua3MgZXF1aXZhbGVudCBmaWx0ZXJzIGFjcm9zc1xuLy8gY29tcG9uZW50cyBhbmQgZGVjaWRlcyB3aGVyZSB0aGUgY29udHJvbCByZW5kZXJzIChjb21wb25lbnQgdnMgcmVwb3J0IGJhcikuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEZpbHRlciB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbXBvbmVudElkOiBudW1iZXI7XG4gIGZpbHRlckdyb3VwSWQ6IG51bWJlcjtcbiAgZmlsdGVyQ29sdW1uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBlbmFibGVkOiBib29sZWFuO1xuICBoYXNPcHRpb25zOiBib29sZWFuO1xuICBjb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vLyBPbmUgY2hvaWNlIGluIGEgc2VsZWN0IGZpbHRlcidzIG9wdGlvbiBsaXN0LiBUaGUgdmFsdWUgaXMgd2hhdCB0aGUgZmlsdGVyXG4vLyBtYXRjaGVzIG9uIGFuZCBnZXRzIHN0b3JlZCBpbiBhIHNhdmVkIGRlZmF1bHQg4oCUIGZvciBhbiBlbnRpdHkgdGhhdCBpcyBpdHNcbi8vIHN0YWJsZSBpZCwgbmV2ZXIgaXRzIG5hbWUsIHNvIHJlbmFtaW5nIHRoZSBlbnRpdHkgbW92ZXMgdGhlIGxhYmVsIHdpdGhvdXRcbi8vIGJyZWFraW5nIHRoZSBkZWZhdWx0LiBUaGUgbGFiZWwgaXMgb25seSBldmVyIHdoYXQgdGhlIHZpZXdlciByZWFkcy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyT3B0aW9uIHtcbiAgdmFsdWU6IHVua25vd247XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyR3JvdXAge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgdHlwZTogUmVwb3J0RmlsdGVyVHlwZTtcbiAgbGV2ZWw6IFJlcG9ydEZpbHRlckxldmVsO1xuICBvcmRlcjogbnVtYmVyO1xuICBjb25maWc6IHsgZGVmYXVsdD86IEZpbHRlckdyb3VwRGVmYXVsdCB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZpbHRlcnM6IFJlcG9ydEZpbHRlcltdO1xufVxuXG4vLyBBIGZpbHRlciBncm91cCdzIGF1dGhvcmVkIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSB0aGF0IHNlZWRzIHRoZSByZXBvcnQgYmFyIG9uXG4vLyBldmVyeSBvcGVuLiBTaGFwZSBmb2xsb3dzIHRoZSBncm91cCdzIHR5cGU6IGRhdGVSYW5nZSB1c2VzIHN0YXJ0L2VuZCAoYSBmaXhlZFxuLy8gY2FsZW5kYXItZGF5IHJhbmdlKSBvciBhIHJlbGF0aXZlIHByZXNldDsgc2VsZWN0IHVzZXMgdmFsdWVzOyBrZXl3b3JkIHVzZXNcbi8vIHZhbHVlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cERlZmF1bHQge1xuICAvLyBkYXRlUmFuZ2UgcmVsYXRpdmUgcHJlc2V0LCByZXNvbHZlZCBhZ2FpbnN0IFwibm93XCIgb24gZXZlcnkgb3Blbi4gT25lIG9mOlxuICAvLyB0aGlzV2VlaywgbGFzdFdlZWssIGxhc3Q3RGF5cywgbGFzdDMwRGF5cywgbGFzdDNNb250aHMsIGxhc3Q2TW9udGhzLFxuICAvLyBsYXN0MTJNb250aHMsIHRoaXNNb250aCwgdGhpc1F1YXJ0ZXIsIHRoaXNZZWFyL3llYXJUb0RhdGUuIFRoZSB3ZWVrIG9uZXNcbiAgLy8gYXJlIHdob2xlIGNhbGVuZGFyIGRheXMsIFN1bmRheSB0byBTYXR1cmRheSwgaW4gdGhlIHJlcG9ydCdzIHRpbWV6b25lLlxuICByZWxhdGl2ZT86IHN0cmluZztcbiAgc3RhcnQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBzdGFydCAoeXl5eS1NTS1kZClcbiAgZW5kPzogc3RyaW5nOyAvLyBkYXRlUmFuZ2UgZml4ZWQgZW5kICh5eXl5LU1NLWRkKVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdCBkZWZhdWx0IHBpY2tlZCB2YWx1ZXNcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmQgZGVmYXVsdCB0ZXh0XG59XG5cbi8vIFRoZSBzZXNzaW9uIHZhbHVlIG9mIGEgZmlsdGVyIGdyb3VwIChuZXZlciBwZXJzaXN0ZWQpOiBzaGFwZSBkZXBlbmRzIG9uIHRoZVxuLy8gZ3JvdXAncyB0eXBlLlxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cFZhbHVlIHtcbiAgc3RhcnQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDsgLy8gZGF0ZVJhbmdlXG4gIGVuZD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgdmFsdWVzPzogdW5rbm93bltdOyAvLyBzZWxlY3RcbiAgdmFsdWU/OiBzdHJpbmc7IC8vIGtleXdvcmRcbn1cblxuLy8gT25lIHJlc29sdmVkIGZpbHRlciBzZW50IHdpdGggYSBjb21wb25lbnQncyBkYXRhIHJlcXVlc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRmlsdGVyVmFsdWUge1xuICBmaWx0ZXJJZDogbnVtYmVyO1xuICBzdGFydD86IHN0cmluZztcbiAgZW5kPzogc3RyaW5nO1xuICB2YWx1ZXM/OiB1bmtub3duW107XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG4vLyBQZXItY29tcG9uZW50IGludGVyYWN0aW9uIHN0YXRlIHNlbnQgd2l0aCB0aGUgZGF0YSByZXF1ZXN0OiBsaXN0cyBzZW5kXG4vLyBzb3J0L3BhZ2luZzsgdGltZS1zZXJpZXMgY2hhcnRzIHNlbmQgdGhlIGdyYWluIHBpY2tlZCBvbiB0aGUgcmVwb3J0J3MgZ3JvdXAtYnlcbi8vIGNvbnRyb2wsIHdoaWNoIG92ZXJyaWRlcyB0aGUgYXV0aG9yZWQgZ3JhbnVsYXJpdHkgZm9yIHRoYXQgcmVxdWVzdCBvbmx5LiBUaGVcbi8vIHdpcmUga2V5IHN0YXlzIGBmcmVxdWVuY3lgIOKAlCBpdCBpcyB0aGUgYnVja2V0aW5nIGZyZXF1ZW5jeSB0aGUgc2VydmVyIGFwcGxpZXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFTdGF0ZSB7XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBwYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgZnJlcXVlbmN5PzogQ2hhcnRHcmFudWxhcml0eTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREYXRhIHtcbiAgY29sdW1uczogc3RyaW5nW107XG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG4gIHBhZ2luZz86IHsgdG90YWw6IG51bWJlcjsgcGFnZTogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH07XG4gIHRydW5jYXRlZDogYm9vbGVhbjtcbiAgLy8gVGhlIGVmZmVjdGl2ZSB0aW1lIGJ1Y2tldCB0aGUgcm93cyB3ZXJlIGdyb3VwZWQgaW50byAoYWZ0ZXIgYW55IGdyb3VwLWJ5XG4gIC8vIG92ZXJyaWRlKSwgb3IgbnVsbCBmb3IgYSBub24tdGltZSBheGlzLiBEcml2ZXMgdGhlIGNvbXBhY3QgeC1heGlzIGxhYmVscy5cbiAgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5IHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRMaXN0SXRlbSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbW9kaWZ5RGF0ZTogc3RyaW5nO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xuICAvLyBUaGUgZm9sZGVyIHRoZSByZXBvcnQgaXMgZmlsZWQgdW5kZXIuIG51bGwgaXMgYSByZWFsLCBjb21tb24gdmFsdWUg4oCUIHRoZVxuICAvLyByZXBvcnQgc2l0cyBhdCB0aGUgcm9vdCBvZiB0aGUgbGlzdGluZyB0cmVlIGFsb25nc2lkZSB0aGUgZm9sZGVycy5cbiAgLy9cbiAgLy8gT3B0aW9uYWwgbGlrZSBgc3RhdGVgIGJlc2lkZSBpdDogdGhlIGJhY2tlbmQgYWx3YXlzIHNlbmRzIGl0LCBidXQgbWFraW5nIGl0XG4gIC8vIHJlcXVpcmVkIGlzIGEgYnJlYWtpbmcgdHlwZSBjaGFuZ2UgZm9yIGV2ZXJ5IGNvbnN1bWVyIGhvbGRpbmcgYVxuICAvLyBSZXBvcnRMaXN0SXRlbSBsaXRlcmFsIChmaXh0dXJlcywgbW9ja3MpIGFuZCBidXlzIG5vdGhpbmcg4oCUIHRoZSBsaXN0aW5nXG4gIC8vIHJlYWRzIGl0IGFzIGA/PyBudWxsYCBlaXRoZXIgd2F5LlxuICByZXBvcnRGb2xkZXJJZD86IG51bWJlciB8IG51bGw7XG59XG5cbi8vIE9uZSBmb2xkZXIgaW4gdGhlIGxpc3RpbmcgdHJlZSDigJQgYW4gYXVkaWVuY2UgYnVja2V0IChcIk1hbmFnZW1lbnRcIixcbi8vIFwiT3BlcmF0aW9uc1wiKSByZXBvcnRzIGFyZSBmaWxlZCBpbnRvLiBGb2xkZXJzIG5lc3QgdmlhIHBhcmVudFJlcG9ydEZvbGRlcklkO1xuLy8gcmVwb3J0cyBuZXZlciBkbywgc28gdGhlIHRyZWUncyBvbmx5IGJyYW5jaCBub2RlcyBhcmUgZm9sZGVycy5cbi8vXG4vLyBObyBzdGF0ZTogYSBmb2xkZXIgaXMgb25seSBkZWxldGFibGUgb25jZSBpdCBpcyBlbXB0eSwgc28gdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc29mdC1kZWxldGUgYW5kIFwiU2hvdyBEZWxldGVkXCIgaXMgYSByZXBvcnRzLW9ubHkgY29uY2VwdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Rm9sZGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXJlbnRSZXBvcnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gR0VUIC9hcGkvcmVwb3J0cyByZXR1cm5zIGJvdGggaGFsdmVzIGZsYXQ7IHRoZSBsaXN0aW5nIG5lc3RzIHRoZW0gaXRzZWxmLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRUcmVlIHtcbiAgcmVwb3J0czogUmVwb3J0TGlzdEl0ZW1bXTtcbiAgZm9sZGVyczogUmVwb3J0Rm9sZGVyW107XG59XG5cbmV4cG9ydCBlbnVtIFJlcG9ydE5vZGVUeXBlIHtcbiAgRm9sZGVyID0gJ2ZvbGRlcicsXG4gIFJlcG9ydCA9ICdyZXBvcnQnLFxufVxuXG4vLyBPbmUgbm9kZSBhcyBmcy10cmVlIHNlZXMgaXQuIEZvbGRlcnMgYW5kIHJlcG9ydHMgc2hhcmUgb25lIGlkIHNwYWNlIGluIHRoZVxuLy8gdmlldywgc28gdGhlIGlkcyBhcmUgcHJlZml4ZWQgKCdmOjEyJyAvICdyOjM0Jykg4oCUIGBpZGAgaXMgdGhlIG9yaWdpbmFsLFxuLy8gcGVyLXRhYmxlIGlkIHRoYXQgdGhlIEFQSSBlbmRwb2ludHMgdGFrZS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Tm9kZSB7XG4gIGtleTogc3RyaW5nO1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFJlcG9ydE5vZGVUeXBlO1xuICAvLyBPbmx5IGV2ZXIgcG9wdWxhdGVkIG9uIGEgZm9sZGVyOyBhIHJlcG9ydCBpcyBhbHdheXMgYSBsZWFmLlxuICBjaGlsZHJlbjogUmVwb3J0Tm9kZVtdO1xuICAvLyBQcmVzZW50IG9uIHJlcG9ydCBub2RlcyBvbmx5LlxuICByZXBvcnQ/OiBSZXBvcnRMaXN0SXRlbTtcbn1cblxuLy8gUmVwb3J0cyBhcmUgc29mdC1kZWxldGFibGU6IGEgZGVsZXRlZCByZXBvcnQgbGVhdmVzIHRoZSBsaXN0aW5nIGJ1dCBrZWVwcyBpdHNcbi8vIHBhZ2VzIGFuZCBjb21wb25lbnRzLCBhbmQgdGhlIGxpc3RpbmcncyBcIlNob3cgRGVsZXRlZFwiIG1vZGUgcmVzdG9yZXMgaXQuXG4vLyBGb2xkZXJzIGhhdmUgbm8gZXF1aXZhbGVudCDigJQgdGhleSBhcmUgb25seSBkZWxldGFibGUgb25jZSBlbXB0eSwgc28gdGhleSBoYXJkXG4vLyBkZWxldGUgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVzdG9yZS5cbmV4cG9ydCBlbnVtIFJlcG9ydFN0YXRlIHtcbiAgQWN0aXZlID0gJ2FjdGl2ZScsXG4gIERlbGV0ZWQgPSAnZGVsZXRlZCcsXG59XG5cbmV4cG9ydCBjb25zdCBSZXBvcnRTdGF0ZXMgPSBbXG4gIHsgbmFtZTogJ0FjdGl2ZScsIHZhbHVlOiBSZXBvcnRTdGF0ZS5BY3RpdmUgfSxcbiAgeyBuYW1lOiAnRGVsZXRlZCcsIHZhbHVlOiBSZXBvcnRTdGF0ZS5EZWxldGVkIH0sXG5dO1xuXG4vLyBUaGUgY2hhdCB0dXJuIGZsYWdzIHRoaXMgY29udGV4dCdzIGJhY2tlbmQgYWRkcyAoUmVwb3J0c1xcQWlWaWV3KS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q2hhdFJlc3BvbnNlIHtcbiAgcmVwb3J0Q2hhbmdlZD86IGJvb2xlYW47XG4gIHJlcG9ydFJlbmFtZWQ/OiBib29sZWFuO1xufVxuXG4vLyBPbmUgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIEFJIGtub3dsZWRnZSBkb2N1bWVudCDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkXG4vLyBtYXJrZG93biBhcHBlbmRlZCB0byB0aGUgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSB0dXJuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRJbnN0cnVjdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgY3VycmVudDogYm9vbGVhbjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgbW9kaWZ5RGF0ZTogRGF0ZTtcbiAgYWNjb3VudElkOiBudW1iZXIgfCBudWxsO1xuICBhY2NvdW50TmFtZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gR0VUL1BVVCBpbnN0cnVjdGlvbnMgcGF5bG9hZDogdGhlIGN1cnJlbnQgdmVyc2lvbiAobnVsbCB1bnRpbCBvbmUgaXNcbi8vIGF1dGhvcmVkKSBwbHVzIHRoZSBmdWxsIGhpc3RvcnksIG5ld2VzdCBmaXJzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb25zIHtcbiAgaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbiB8IG51bGw7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG4vLyBUaGUgbGF0ZXN0IHNlbWFudGljLWRhdGFiYXNlIGJ1aWxkIChhbiBmZl9wcm9jZXNzZXMgcm93KSDigJQgZW5vdWdoIGZvciB0aGVcbi8vIHNldHRpbmdzIGRpYWxvZyB0byBzYXkgd2hhdCBzdGF0ZSB0aGUgYnVpbGQgaXMgaW4gYW5kIHdoZW4gaXQgbGFzdCByYW4uXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGQge1xuICBpZDogbnVtYmVyO1xuICBzdGF0ZTogc3RyaW5nO1xuICBwZXJjZW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgY3JlYXRlRGF0ZTogRGF0ZTtcbiAgc3RhcnREYXRlOiBEYXRlO1xuICBlbmREYXRlOiBEYXRlO1xufVxuXG4vLyBBIGJ1aWxkIHN0YWdlJ3Mgc3RhdGUgb24gdGhlIGVudGl0eSBzY29yZWJvYXJkOiAnZG9uZScgPSBidWlsdCwgJ21pc3NpbmcnID1cbi8vIHN0aWxsIG5lZWRzIGJ1aWxkaW5nIChhIG1pc3Npbmcgc3RhZ2UgaXMgdW5idWlsdCBjb250ZW50LCBuZXZlciBhbiBlcnJvcikuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0J1aWxkU3RhZ2UgPSAnZG9uZScgfCAnbWlzc2luZyc7XG5cbi8vIE9uZSBlbnVtIGNvbHVtbiBvZiBhbiBlbnRpdHksIHdpdGggdGhlIGFsbG93ZWQgdmFsdWVzIHRoZSBidWlsZCBpbmxpbmVkLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW51bSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB2YWx1ZXM6IHN0cmluZ1tdO1xufVxuXG4vLyBPbmUgZW50aXR5IHJvdyBvZiB0aGUgc2NvcmVib2FyZCAoYW4gZW50aXR5ID0gYSB0YWJsZSArIGEgbW9kZWwgKyBhXG4vLyBoYW5kbGVyKTogaXRzIHRhYmxlL3NoYXBlIGNvdW50cywgaW5saW5lZCBlbnVtIHZhbHVlcywgY29tcHV0ZWQgZmllbGRzLCBob3dcbi8vIG1hbnkgY29kZSBmdW5jdGlvbnMgd2VyZSBjYWNoZWQgKHNwbGl0IG1vZGVsIHZzIGhhbmRsZXIpLCBhbmQgdGhlIHBlci1zdGFnZVxuLy8gYnVpbHQvbWlzc2luZyBzdGF0ZS5cbi8vXG4vLyBgbW9kZWxgL2BoYW5kbGVyYCBhcmUgdGhlIGNsYXNzZXMgdGhlIGZ1bmN0aW9ucyB3ZXJlIHJlYWQgZnJvbSDigJQgd2hhdCBhXG4vLyByZWFkZXIgcmVjb2duaXplcyB0aGUgcm93IGJ5LCB3aGVyZSBga2V5YCBpcyB3aGF0IHRoZSByZXBvcnQgQUkgYWRkcmVzc2VzIGl0XG4vLyBieSBpbiBkZXNjcmliZV9lbnRpdHkgLyBjb21waWxlX3F1ZXJ5LlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkRW50aXR5IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyOiBzdHJpbmcgfCBudWxsO1xuICBjb2x1bW5zOiBudW1iZXI7XG4gIHJlbGF0aW9uc2hpcHM6IG51bWJlcjtcbiAgZW51bXM6IFNlbWFudGljQnVpbGRFbnVtW107XG4gIGNvbXB1dGVkRmllbGRzOiBzdHJpbmdbXTtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBtb2RlbEZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgaGFuZGxlckZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgc3RhZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZW1hbnRpY0J1aWxkU3RhZ2U+O1xufVxuXG4vLyBPbmUgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIHRoZSBidWlsZCByZWFkOiBkb21haW4gbG9naWMgd2l0aCBubyB0YWJsZSBvZiBpdHNcbi8vIG93biAoYSBzdW1tYXJ5IG1vZGVsLCBhIGNhbGN1bGF0aW9uIHNlcnZpY2UpLiBUaGUgcmVwb3J0IEFJIHJlYWRzIGl0cyBjb2RlXG4vLyBleGFjdGx5IGxpa2UgYW4gZW50aXR5J3MsIGJ1dCBpdCBjYW4gbmV2ZXIgYmUgcXVlcmllZCDigJQgdGhlcmUgaXMgbm90aGluZyB0b1xuLy8gc2VsZWN0IGZyb20g4oCUIHNvIGl0IGNhcnJpZXMgbm8gdGFibGUsIGNvbHVtbnMgb3IgcmVsYXRpb25zaGlwcy5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZENsYXNzIHtcbiAga2V5OiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbkNvdW50OiBudW1iZXI7XG59XG5cbi8vIFdoYXQgdGhlIGJ1aWxkIGRlY2lkZWQgYSBwaHlzaWNhbCB0YWJsZSBpcy4gRW50aXR5IGFuZCBqdW5jdGlvbiBhcmUgYm90aFxuLy8gcmVhY2hhYmxlIGJ5IHRoZSByZXBvcnQgQUkg4oCUIGFuIGVudGl0eSBkaXJlY3RseSwgYSBqdW5jdGlvbiB0aHJvdWdoIHRoZVxuLy8gbWFueS10by1tYW55IGl0IGJyaWRnZXMuIEV4Y2x1ZGVkIGlzIG5vdCByZWFjaGFibGUgYXQgYWxsLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNUYWJsZUNsYXNzaWZpY2F0aW9uID0gJ2VudGl0eScgfCAnanVuY3Rpb24nIHwgJ2V4Y2x1ZGVkJztcblxuLy8gT25lIHBoeXNpY2FsIHRhYmxlIGFzIHRoZSBidWlsZCBjbGFzc2lmaWVkIGl0LiBgcmVhc29uYCBhbnN3ZXJzIGEgc2luZ2xlXG4vLyBxdWVzdGlvbiDigJQgd2h5IGNhbid0IHRoZSByZXBvcnQgQUkgc2VlIHRoaXMgdGFibGU/IOKAlCBhbmQgaXMgbnVsbCB3aGVuIGl0IGNhbi5cbi8vIEEganVuY3Rpb24gd2l0aCBhIHJlYXNvbiBicmlkZ2VkIG5vdGhpbmcsIHNvIGl0IGlzIGp1c3QgYXMgaW52aXNpYmxlIGFzIGFuXG4vLyBleGNsdWRlZCB0YWJsZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZFRhYmxlIHtcbiAgdGFibGU6IHN0cmluZztcbiAgY2xhc3NpZmljYXRpb246IFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbjtcbiAgbW9kZWw6IHN0cmluZyB8IG51bGw7XG4gIHJlYXNvbjogc3RyaW5nIHwgbnVsbDtcbn1cblxuLy8gVGhlIGJ1aWxkIHNjb3JlYm9hcmQgc2hpcHBlZCBhbG9uZ3NpZGUgdGhlIGJ1aWxkIHN0YXR1czogdGhlIHN1bW1hcnkgY291bnRzLFxuLy8gdGhlIGZ1bGwgYnJlYWtkb3duIHRoZSBzZXR0aW5ncyBkaWFsb2cgZHJpbGxzIGludG8g4oCUIEJPVEgga2luZHMgb2YgdW5pdCB0aGVcbi8vIGJ1aWxkIGNhY2hlcywgdGFibGUtYmFja2VkIGVudGl0aWVzIGFuZCBzdGFuZGFsb25lIGNvZGUgY2xhc3NlcyDigJQgYW5kIHRoZVxuLy8gY2F0YWxvZyBvZiBldmVyeSB0YWJsZSB0aGUgYnVpbGQgc2F3LCBzbyB0aGUgdGFiIGNhbiBzaG93IHdoYXQgdGhlIHJlcG9ydCBBSVxuLy8gY2FuJ3Qgc2VlLCBub3QganVzdCB3aGF0IGl0IGNhbi5cbi8vXG4vLyBgZnVuY3Rpb25Db3VudGAgc3BhbnMgZW50aXRpZXMgYW5kIGNsYXNzZXMgYWxpa2U6IGl0IGlzIHRoZSBzYW1lIHRvdGFsIHRoZVxuLy8gYnVpbGQgaXRzZWxmIHJlcG9ydHMgd2hlbiBpdCBmaW5pc2hlcy5cbi8vXG4vLyBgdGFibGVzYCBpcyBlbXB0eSBmb3IgYW4gYXJ0aWZhY3QgYnVpbHQgYmVmb3JlIHRoZSBjYXRhbG9nIGV4aXN0ZWQuIFJlYWQgdGhhdFxuLy8gYXMgXCJubyBjYXRhbG9nXCIsIG5ldmVyIGFzIFwibm90aGluZyB3YXMgZXhjbHVkZWRcIi5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZERldGFpbCB7XG4gIC8vIFdoZXRoZXIgdGhlIGFydGlmYWN0IHdhcyBwcm9kdWNlZCBieSBhIGJ1aWxkIHRoYXQgcmFuIHRvIHRoZSBlbmQuIFJlYWQgaXRcbiAgLy8gYmVzaWRlIGBnZW5lcmF0ZWRBdGAsIG5ldmVyIGluc3RlYWQgb2YgaXQ6IHRoZSBzdHJ1Y3R1cmFsIGFydGlmYWN0IGlzXG4gIC8vIHB1Ymxpc2hlZCBCRUZPUkUgdGhlIEFJIGZ1bmN0aW9uIHBhc3MsIHNvIGEgYnVpbGQgd2hvc2UgQUkgcGFzcyBmYWlsZWQgc3RpbGxcbiAgLy8gY2FycmllcyBhIGRhdGUgYW5kIGEgZnVsbCBzZXQgb2YgY291bnRzLiBUaGUgZGF0ZSBzYXlzIHNvbWV0aGluZyB3YXNcbiAgLy8gd3JpdHRlbjsgb25seSB0aGlzIHNheXMgdGhlIGJ1aWxkIGZpbmlzaGVkIHdyaXRpbmcgaXQuXG4gIGNvbXBsZXRlOiBib29sZWFuO1xuICBnZW5lcmF0ZWRBdDogRGF0ZSB8IG51bGw7XG4gIGVudGl0eUNvdW50OiBudW1iZXI7XG4gIGNsYXNzQ291bnQ6IG51bWJlcjtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBlbnRpdGllczogU2VtYW50aWNCdWlsZEVudGl0eVtdO1xuICBjbGFzc2VzOiBTZW1hbnRpY0J1aWxkQ2xhc3NbXTtcbiAgdGFibGVDb3VudDogbnVtYmVyO1xuICBqdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIHVubGlua2VkSnVuY3Rpb25Db3VudDogbnVtYmVyO1xuICBleGNsdWRlZENvdW50OiBudW1iZXI7XG4gIHRhYmxlczogU2VtYW50aWNCdWlsZFRhYmxlW107XG59XG5cbi8vIFdoaWNoIGNsYXNzIGEgY2FjaGVkIGZ1bmN0aW9uIHdhcyByZWFkIGZyb20uIEFuIGVudGl0eSdzIGNhY2hlIHNwbGl0cyBpbnRvXG4vLyAnbW9kZWwnIGFuZCAnaGFuZGxlcic7IGEgc3RhbmRhbG9uZSBjb2RlIGNsYXNzIGhhcyBvbmUgZ3JvdXAsICdjbGFzcycuXG5leHBvcnQgdHlwZSBTZW1hbnRpY0Z1bmN0aW9uU291cmNlID0gJ21vZGVsJyB8ICdoYW5kbGVyJyB8ICdjbGFzcyc7XG5cbi8vIE9uZSBBSS1jbGFzc2lmaWVkIGNvZGUgZnVuY3Rpb24gZnJvbSBhIG1vZGVsLCBoYW5kbGVyIG9yIHN0YW5kYWxvbmUgY2xhc3M6XG4vLyB3aGF0IGtpbmQgb2YgbG9naWMgaXQgaXMsIHdoYXQgaXQgZG9lcywgYW5kIHdoYXQgaXQgcHJvZHVjZXMg4oCUIHRoZSBidWlsZCdzXG4vLyBjYWNoZWQgXCJ3aGF0IHRoZSBjb2RlIGRvZXNcIiBrbm93bGVkZ2Ugc2hvd24gaW4gdGhlIGZ1bmN0aW9ucyBkaWFsb2cuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb24ge1xuICBjbGFzczogc3RyaW5nO1xuICBtZXRob2Q6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gIGtpbmQ6IHN0cmluZztcbiAgc3VtbWFyeTogc3RyaW5nO1xuICBwcm9kdWNlczogc3RyaW5nO1xuICBzb3VyY2U6IFNlbWFudGljRnVuY3Rpb25Tb3VyY2U7XG59XG5cbi8vIE9uZSBlbnRpdHkncyBjYWNoZWQgY29kZS1mdW5jdGlvbiBrbm93bGVkZ2UsIGZldGNoZWQgd2hlbiBhIGZ1bmN0aW9ucyBkaWFsb2dcbi8vIG9wZW5zICh0aGUgZnVsbCBzZXQgYWNyb3NzIGFsbCBlbnRpdGllcyBpcyB0b28gYmlnIHRvIHNoaXAgd2l0aCB0aGVcbi8vIHNjb3JlYm9hcmQpLiBPbmUgcGF5bG9hZCBzZXJ2ZXMgYm90aCBkaWFsb2dzIOKAlCBjb25zdW1lcnMgZmlsdGVyIGJ5IHNvdXJjZS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNFbnRpdHlGdW5jdGlvbnMge1xuICBlbnRpdHk6IHN0cmluZztcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xuICBtb2RlbENsYXNzOiBzdHJpbmcgfCBudWxsO1xuICBoYW5kbGVyQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIGZ1bmN0aW9uczogU2VtYW50aWNFbnRpdHlGdW5jdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRTdGF0dXMge1xuICBidWlsZDogU2VtYW50aWNCdWlsZCB8IG51bGw7XG4gIGRldGFpbDogU2VtYW50aWNCdWlsZERldGFpbDtcbn1cblxuLy8gVGhlIHJlcG9ydCBtb2R1bGUncyBHZW5lcmFsIHNldHRpbmdzIChhIHNtYWxsIGdsb2JhbCBrZXkvdmFsdWUgc3RvcmUsIHRoZVxuLy8gcmVwb3J0aW5nIGNvdW50ZXJwYXJ0IG9mIHRoZSBhcHAtd2lkZSBzZXR0aW5ncykuIEVhY2ggdmFsdWUgc2hpcHMgd2l0aCB0aGVcbi8vIHNhZmUgYmFuZCBpdHMgZWRpdG9yIGZpZWxkIGlzIGJvdW5kZWQgdG8uXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFNldHRpbmdzIHtcbiAgLy8gSG93IG1hbnkgc3VtbWFyeSBjYWxscyB0aGUgc2VtYW50aWMgYnVpbGQgcnVucyBhdCBvbmNlLlxuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IG51bWJlcjtcbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWluOiBudW1iZXI7XG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1heDogbnVtYmVyO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkVBQTZFO0FBQzdFLG1FQUFtRTtBQUNuRSwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLG1DQUFtQztBQXdLbkMsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx1REFBdUQ7QUFDdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdEO0lBQzlFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0lBQzdCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQy9CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3JDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0NBQ3BDLENBQUM7QUE0TUYsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUF1QkQsZ0ZBQWdGO0FBQ2hGLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBTixJQUFZLFdBR1g7QUFIRCxXQUFZLFdBQVc7SUFDckIsZ0NBQWlCLENBQUE7SUFDakIsa0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUhXLFdBQVcsS0FBWCxXQUFXLFFBR3RCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIGFzc2VtYmxlZCByZXBvcnQgc3RydWN0dXJlIHJldHVybmVkIGJ5IEdFVCAvYXBpL3JlcG9ydHMvOmlkIOKAlCBjb21wb3NlZFxuLy8gc2VydmVyLXNpZGUgZnJvbSB0aGUgbm9ybWFsaXplZCB0YWJsZXMgKHJlcG9ydHMg4oaSIHJlcG9ydF9wYWdlcyDihpJcbi8vIHJlcG9ydF9jb21wb25lbnRzICsgcmVwb3J0X2ZpbHRlcnMsIHBsdXMgcmVwb3J0X2ZpbHRlcl9ncm91cHMpLiBBbGwga2V5cyBhcmVcbi8vIGNhbWVsQ2FzZTsgY29tcG9uZW50IGBjb25maWdgIGlzIHRoZSBzdGFuZGFyZCBmb3JtYXQgdGhlIHJlbmRlcmVyIG1hcHMgdG9cbi8vIEVDaGFydHMgb3B0aW9ucyAvIEZzTGlzdCBjb25maWcuXG5cbi8vIExheW91dCBtb2RlczogRnJlZWZvcm0gPSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgY29tcG9uZW50cyAoZHJhZyBhbnl3aGVyZSk7XG4vLyBGbG93ID0gY29tcG9uZW50cyBmbG93IGxpa2Ugcm93cywgZWFjaCB0YWtpbmcgZmxvd1dpZHRoICUgb2YgdGhlIHBhZ2Ugd2lkdGguXG5leHBvcnQgdHlwZSBSZXBvcnRMYXlvdXQgPSAnZnJlZWZvcm0nIHwgJ2Zsb3cnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydCB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgbGF5b3V0OiBSZXBvcnRMYXlvdXQ7XG4gIC8vIElBTkEgdGltZXpvbmUgKGUuZy4gQW1lcmljYS9OZXdfWW9yaykgYW5jaG9yaW5nIGRhdGUgZmlsdGVyaW5nICsgY2hhcnQgZGF0ZVxuICAvLyBidWNrZXRpbmcuIG51bGwgZmFsbHMgYmFjayB0byB0aGUgYWNjb3VudCB6b25lIHRoZW4gVVRDIChyZXNvbHZlZCBzZXJ2ZXItc2lkZSkuXG4gIHRpbWV6b25lOiBzdHJpbmcgfCBudWxsO1xuICAvLyBSZXBvcnQtbGV2ZWwgY29uZmlnOiB0eXBvZ3JhcGhpYyBzdHlsZXMsIGV0Yy4gKGNhbWVsQ2FzZSBKU09OIGNvbHVtbikuXG4gIGNvbmZpZzogUmVwb3J0Q29uZmlnO1xuICAvLyBUaGUgcGFnZSBpbiBJTkNIRVMgKHRoZSByZXBvcnQncyBuYXRpdmUgdW5pdCDigJQgUERGcyBhbmQgUG93ZXJQb2ludCBhcmVcbiAgLy8gaW5jaC1iYXNlZCwgc28gZXhwb3J0cyBhcmUgZGltZW5zaW9uYWxseSBleGFjdCkuIE9yaWVudGF0aW9uIGlzIG5vdCBhIGZpZWxkXG4gIC8vIG9mIGl0cyBvd246IGEgcGFnZSB3aWRlciB0aGFuIGl0IGlzIHRhbGwgSVMgbGFuZHNjYXBlLlxuICBwYWdlV2lkdGg6IG51bWJlcjtcbiAgcGFnZUhlaWdodDogbnVtYmVyO1xuICBwYWdlczogUmVwb3J0UGFnZVtdO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXI6IHRoZSByZXBvcnQncyBtYXN0ZXIgcGFnZSwgd2hvc2UgY29tcG9uZW50cyBkcmF3XG4gIC8vIHVuZGVyIGV2ZXJ5IHBhZ2UgdGhhdCBkb2VzIG5vdCBoaWRlIHRoZW0gKFBvd2VyUG9pbnQncyBzbGlkZSBtYXN0ZXIpLiBOdWxsXG4gIC8vIHVudGlsIGFueXRoaW5nIGhhcyBiZWVuIHBsYWNlZCBpbiB0aGVtLlxuICBtYXN0ZXI6IFJlcG9ydE1hc3RlciB8IG51bGw7XG4gIGZpbHRlckdyb3VwczogUmVwb3J0RmlsdGVyR3JvdXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRNYXN0ZXIge1xuICBpZDogbnVtYmVyO1xuICBjb21wb25lbnRzOiBSZXBvcnRDb21wb25lbnRbXTtcbn1cblxuLy8gVGhlIGRlcHRoIG9mIHRoZSBoZWFkZXIgYmFuZCAodG9wIG9mIGV2ZXJ5IHBhZ2UpIGFuZCB0aGUgZm9vdGVyIGJhbmQgKGJvdHRvbVxuLy8gb2YgZXZlcnkgcGFnZSksIGluIElOQ0hFUy4gVGhlIGJhbmRzIGhvbGQgbm8gY29udGVudCBvZiB0aGVpciBvd24g4oCUIHRoZVxuLy8gbWFzdGVyJ3MgY29tcG9uZW50cyBzaXQgaW4gdGhlbSDigJQgdGhleSBhcmUgdGhlIHJlc2VydmVkIG1hcmdpbnMgdGhlIGVkaXRvclxuLy8gZHJhd3MgYXMgZ3VpZGVzIGFuZCBzbmFwcyB0by4gQWx3YXlzIGFycml2ZXMgcmVzb2x2ZWQgKDAgPSBubyBiYW5kKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SGVhZGVyRm9vdGVyIHtcbiAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XG4gIGZvb3RlckhlaWdodDogbnVtYmVyO1xufVxuXG4vLyBSZXBvcnQtbGV2ZWwgc3R5bGluZy4gU2l6ZXMgYXJlIGluIFBPSU5UUyAoMS83MlwiKSDigJQgdGhlIHJlcG9ydCdzIHR5cG9ncmFwaHlcbi8vIG1hcHMgMToxIHRvIFBERiAoNzJwdC9pbikgYW5kIFBvd2VyUG9pbnQgKHBvaW50IGZvbnQgc2l6ZXMpLCBzbyBhIHBvaW50XG4vLyB2YWx1ZSBpcyBkaW1lbnNpb25hbGx5IGV4YWN0IG9uIHNjcmVlbiBhbmQgaW4gZXZlcnkgZXhwb3J0LlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb25maWcge1xuICBzdHlsZXM/OiBSZXBvcnRTdHlsZXM7XG4gIC8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sLiBPcHRpb25hbCBvbiB0aGUgdHlwZSBiZWNhdXNlIGEgUmVwb3J0Q29uZmlnXG4gIC8vIGxpdGVyYWwgbmVlZCBub3QgY2FycnkgaXQ7IHRoZSBBUEkgYWx3YXlzIHNlbmRzIGl0LCByZXNvbHZlZC5cbiAgZ3JvdXBCeT86IFJlcG9ydEdyb3VwQnk7XG4gIC8vIFJlc29sdmVkIGJ5IHRoZSBBUEkgbGlrZSBncm91cEJ5LlxuICBoZWFkZXJGb290ZXI/OiBSZXBvcnRIZWFkZXJGb290ZXI7XG59XG5cbi8vIFRoZSByZXBvcnQncyBncm91cC1ieSBjb250cm9sIOKAlCB0aGUgb25lIHN3aXRjaCB0aGF0IHJlLWJ1Y2tldHMgZXZlcnlcbi8vIHRpbWUtc2VyaWVzIGNoYXJ0IG9uIHRoZSByZXBvcnQgYmV0d2VlbiBkYXksIHdlZWssIG1vbnRoLCBxdWFydGVyIGFuZCB5ZWFyLlxuLy9cbi8vIEl0IGlzIE5PVCBhIGZpbHRlcjogYSBmaWx0ZXIgbmFycm93cyB3aGljaCByb3dzIGFyZSBjb3VudGVkLCB0aGlzIGNoYW5nZXMgaG93XG4vLyB0aGUgc3Vydml2aW5nIHJvd3MgYXJlIGJ1Y2tldGVkLiBJdCBzaGFyZXMgdGhlIHJlcG9ydCdzIGZpbHRlciBiYXIgYmVjYXVzZVxuLy8gdGhhdCBpcyB0aGUgb25lIHJvdyBvZiBjb250cm9scyBhIHZpZXdlciByZWFkcyBhIHJlcG9ydCB0aHJvdWdoIOKAlCB0aGVcbi8vIHNlcGFyYXRpb24gdGhhdCBtYXR0ZXJzIGlzIGluIHRoZSBtb2RlbCwgbm90IGluIHdoZXJlIHRoZSBjb250cm9sIGlzIHBhaW50ZWQuXG4vL1xuLy8gQWx3YXlzIGFycml2ZXMgUkVTT0xWRUQgKHRoZSBiYWNrZW5kIGZpbGxzIGFuIGFic2VudCBvciBwYXJ0aWFsIHN0b3JlZCBibG9ja1xuLy8gaW4gZnJvbSBpdHMgb3duIGRlZmF1bHRzKSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkZWZhdWx0IGhlcmUg4oCUIHJlbmRlciB3aGF0XG4vLyB5b3UgYXJlIGdpdmVuLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRHcm91cEJ5IHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgbGFiZWw6IHN0cmluZztcbiAgZ3JhbnVsYXJpdGllczogQ2hhcnRHcmFudWxhcml0eVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFN0eWxlcyB7XG4gIGhlYWRpbmc/OiB7IHNpemU/OiBudW1iZXIgfTtcbn1cblxuLy8gQ29udGVudCBwYWRkaW5nIGFyb3VuZCBhIGNvbXBvbmVudCdzIGJvZHksIGluIElOQ0hFUyAodGhlIGdlb21ldHJ5IHVuaXQpLlxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQYWRkaW5nIHtcbiAgdG9wPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICBsZWZ0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBhZ2Uge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICBvcmRlcjogbnVtYmVyO1xuICAvLyBUaGUgcGFnZSBvcHRzIG91dCBvZiB0aGUgcmVwb3J0J3MgaGVhZGVyIGFuZCBmb290ZXIgKGEgdGl0bGUgcGFnZSkuXG4gIG1hc3RlckhpZGRlbjogYm9vbGVhbjtcbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50W107XG59XG5cbi8vICd0ZXh0JyBpcyBhdXRob3JlZCByaWNoIHRleHQgd2l0aCBubyBxdWVyeSBiZWhpbmQgaXQg4oCUIGl0IG5ldmVyIGZldGNoZXMgZGF0YS5cbmV4cG9ydCB0eXBlIFJlcG9ydENvbXBvbmVudFR5cGUgPSAnY2hhcnQnIHwgJ2xpc3QnIHwgJ2twaScgfCAndGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50IHtcbiAgaWQ6IG51bWJlcjtcbiAgdHlwZTogUmVwb3J0Q29tcG9uZW50VHlwZTtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIC8vIEdlb21ldHJ5IGluIElOQ0hFUy4gRnJlZWZvcm06IGFic29sdXRlIHBvc2l0aW9uIG9uIHRoZSBwYWdlIGNhbnZhcy5cbiAgLy8gRmxvdzogb25seSBmbG93V2lkdGgvb3JkZXIgYXBwbHk7IHgveSBhcmUgcmVtZW1iZXJlZCBmb3IgYSBzd2l0Y2ggYmFjayB0b1xuICAvLyBmcmVlZm9ybS5cbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHc6IG51bWJlcjtcbiAgaDogbnVtYmVyO1xuICAvLyBIZWlnaHQgbW9kZSwgREVSSVZFRCBmcm9tIHR5cGUgc2VydmVyLXNpZGUgKG5vdCBzdG9yZWQsIHJlYWQtb25seSk6IGxpc3RzXG4gIC8vIGFuZCBLUEkgdGlsZXMgYXJlIGF1dG8gKHRoZSBib3ggc2l6ZXMgdG8gaXRzIGNvbnRlbnQsIGBoYCBpZ25vcmVkKTsgY2hhcnRzXG4gIC8vIGFyZSBhbHdheXMgZml4ZWQgKHVzZSBgaGApIHNvIHRoZXkgZml0IHRoZSBib3ggYW5kIG5ldmVyIG92ZXJmbG93LlxuICBhdXRvSGVpZ2h0OiBib29sZWFuO1xuICAvLyBGbG93IGxheW91dDogJSBvZiB0aGUgcGFnZSBjb250ZW50IHdpZHRoIHRoaXMgY29tcG9uZW50IHRha2VzLlxuICBmbG93V2lkdGg6IG51bWJlcjtcbiAgLy8gRmxvdyBsYXlvdXQgb3JkZXJpbmcuXG4gIG9yZGVyOiBudW1iZXI7XG4gIC8vIFRoZSBzdG9yZWQgU1FMIG9mIGEgbGVnYWN5IHNxbC1tb2RlIGNvbXBvbmVudC4gTlVMTCBmb3IgYSBkZXJpdmVkIG9uZSxcbiAgLy8gd2hvc2Ugc3RhdGVtZW50IGRvZXMgbm90IGV4aXN0IHVudGlsIGl0cyBkb2N1bWVudCBpcyBjb21waWxlZCDigJQgdGhlIFNRTCB0YWJcbiAgLy8gZmV0Y2hlcyB0aGF0IHNlcGFyYXRlbHkgKHNlZSBSZXBvcnRDb21wb25lbnRTcWwpLlxuICBzcWw6IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZzogQ2hhcnRDb25maWcgJiBMaXN0Q29uZmlnICYgS3BpQ29uZmlnICYgVGV4dENvbmZpZyAmIENvbXBvbmVudExheW91dENvbmZpZyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmaWx0ZXJzOiBSZXBvcnRGaWx0ZXJbXTtcbn1cblxuLy8gV2hhdCB0aGUgU1FMIHRhYiBmZXRjaGVzOiB0aGUgc3RhdGVtZW50IGEgY29tcG9uZW50IHJ1bnMuXG4vL1xuLy8gRm9yIGEgZGVyaXZlZCBjb21wb25lbnQgYGJhc2VsaW5lYCBpcyB0cnVlIGFuZCBgc3FsYCBpcyB3aGF0IGl0cyBkb2N1bWVudFxuLy8gY29tcGlsZXMgdG8gd2l0aCBOTyB2aWV3ZXIgc3RhdGUg4oCUIG5vIGZpbHRlcnMsIFVUQywgdGhlIGF1dGhvcmVkIGdyYWluLiBUaGVcbi8vIG51bWJlcnMgb24gc2NyZWVuIGNvbWUgZnJvbSB0aGF0IHN0YXRlbWVudCBwbHVzIHdoYXRldmVyIHRoZSB2aWV3ZXIgcGlja2VkLFxuLy8gc28gdGhlIHR3byBjYW4gbGVnaXRpbWF0ZWx5IGRpZmZlciBhbmQgdGhlIHRhYiBzYXlzIHNvIHJhdGhlciB0aGFuIGltcGx5aW5nXG4vLyB0aGV5IG1hdGNoLlxuLy9cbi8vIGBlcnJvcmAgaXMgbm90IGEgZmFpbHVyZSBvZiB0aGUgcmVxdWVzdDogYSBkb2N1bWVudCB0aGF0IG5vIGxvbmdlciBjb21waWxlc1xuLy8gaXMgcHJlY2lzZWx5IHdoYXQgc29tZW9uZSBvcGVucyB0aGlzIHRhYiB0byBkaXNjb3Zlciwgc28gaXQgYXJyaXZlcyBhcyBhXG4vLyBtZXNzYWdlIHRvIHJlbmRlciB3aXRoIGBlcnJvclR5cGVgIG5hbWluZyB3aGljaCBraW5kICgnc3RhbGUtcXVlcnknIG9yXG4vLyAnc2Vuc2l0aXZlLWNvbHVtbicpLCBhbmQgYHNxbGAgbnVsbC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Q29tcG9uZW50U3FsIHtcbiAgc3FsOiBzdHJpbmcgfCBudWxsO1xuICBvcmlnaW46ICdzcWwnIHwgJ2RicScgfCAnZGVyaXZlZCc7XG4gIGJhc2VsaW5lOiBib29sZWFuO1xuICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbiAgZXJyb3JUeXBlOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBBIHRleHQgYmxvY2sncyBjb250ZW50OiBhbiBodG1sIGZyYWdtZW50IHRoZSBzZXJ2ZXIgaGFzIGFscmVhZHkgcmVidWlsdCBmcm9tXG4vLyBhbiBhbGxvd2xpc3QsIHdoaWNoIG1heSBjYXJyeSB7e3BhZ2UubnVtYmVyfX0sIHt7cGFnZS5uYW1lfX0gYW5kXG4vLyB7e3JlcG9ydC5uYW1lfX0gdG9rZW5zIChzZWUgdGV4dC50cykuXG5leHBvcnQgaW50ZXJmYWNlIFRleHRDb25maWcge1xuICBodG1sPzogc3RyaW5nO1xufVxuXG4vLyBDcm9zcy10eXBlIGxheW91dC9zdHlsZSBrZXlzIGNhcnJpZWQgaW4gYSBjb21wb25lbnQncyBjb25maWcgKGFsb25nc2lkZSB0aGVcbi8vIHR5cGUtc3BlY2lmaWMgY2hhcnQvbGlzdC9rcGkga2V5cykuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudExheW91dENvbmZpZyB7XG4gIHBhZGRpbmc/OiBDb21wb25lbnRQYWRkaW5nO1xufVxuXG4vLyBUaGUgcHJlc2VudGF0aW9uIHNldHRpbmdzIGEgY29tcG9uZW50J3Mgc2V0dGluZ3MgZGlhbG9nIGVkaXRzLiBOZWl0aGVyIGZpZWxkXG4vLyBpcyBwYXJ0IG9mIHdoYXQgdGhlIGNvbXBvbmVudCBxdWVyaWVzLCBzbyBhIGNoYW5nZSB0byB0aGVtIHJlcGFpbnRzIHdpdGhvdXRcbi8vIHJlLXJ1bm5pbmcgYW55dGhpbmcuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFNldHRpbmdzIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgcGFkZGluZzogQ29tcG9uZW50UGFkZGluZztcbn1cblxuLy8gV2hlcmUgYSBjaGFydCdzIGxlZ2VuZCBzaXRzIHJlbGF0aXZlIHRvIHRoZSBwbG90LCBvciAnaGlkZGVuJyB0byBkcm9wIGl0LlxuZXhwb3J0IHR5cGUgTGVnZW5kUG9zaXRpb24gPSAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdoaWRkZW4nO1xuXG5leHBvcnQgdHlwZSBDaGFydEdyYW51bGFyaXR5ID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3F1YXJ0ZXInIHwgJ3llYXInO1xuXG4vLyBIb3cgZWFjaCBncmFudWxhcml0eSByZWFkcyBpbiB0aGUgZ3JvdXAtYnkgY29udHJvbCBhbmQgb24gYW4gZXhwb3J0IGNvdmVyXG4vLyBzaGVldC4gV0hJQ0ggb2YgdGhlbSBhIGdpdmVuIHJlcG9ydCBvZmZlcnMgY29tZXMgZnJvbSBpdHMgUmVwb3J0R3JvdXBCeTtcbi8vIHRoaXMgaXMgb25seSB0aGUgbmFtaW5nLiAneWVhcicgcmVhZHMgYXMgXCJBbm51YWxseVwiLlxuZXhwb3J0IGNvbnN0IEdSQU5VTEFSSVRZX09QVElPTlM6IHsgdmFsdWU6IENoYXJ0R3JhbnVsYXJpdHk7IG5hbWU6IHN0cmluZyB9W10gPSBbXG4gIHsgdmFsdWU6ICdkYXknLCBuYW1lOiAnRGF5JyB9LFxuICB7IHZhbHVlOiAnd2VlaycsIG5hbWU6ICdXZWVrJyB9LFxuICB7IHZhbHVlOiAnbW9udGgnLCBuYW1lOiAnTW9udGgnIH0sXG4gIHsgdmFsdWU6ICdxdWFydGVyJywgbmFtZTogJ1F1YXJ0ZXInIH0sXG4gIHsgdmFsdWU6ICd5ZWFyJywgbmFtZTogJ0FubnVhbGx5JyB9LFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBDaGFydENvbmZpZyB7XG4gIGNoYXJ0VHlwZT86ICdiYXInIHwgJ2xpbmUnIHwgJ2FyZWEnIHwgJ3BpZScgfCAnZG9udXQnO1xuICAvLyBGb3Iga2luZCAndGltZScsIHRoZSBzZXJ2ZXIgYnVja2V0cyB0aGUgcmF3IGRhdGV0aW1lIGNvbHVtbiB0byBgZ3JhbnVsYXJpdHlgXG4gIC8vIGluIHRoZSByZXBvcnQncyB0aW1lem9uZSAodGhlIFNRTCBleHBvc2VzIHRoZSByYXcgY29sdW1uLCB1bmJ1Y2tldGVkKS5cbiAgeEF4aXM/OiB7IGNvbHVtbjogc3RyaW5nOyBraW5kPzogJ2NhdGVnb3J5JyB8ICd0aW1lJzsgZ3JhbnVsYXJpdHk/OiBDaGFydEdyYW51bGFyaXR5OyBsYWJlbD86IHN0cmluZyB9O1xuICBtZWFzdXJlcz86IENoYXJ0TWVhc3VyZVtdO1xuICBzcGxpdEJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgLy8gU2luZ2xlLWRpbWVuc2lvbiBiYXIgY2hhcnRzIG9ubHk6IGNvbG9yIGVhY2ggYmFyIGJ5IGl0cyBvd24gY2F0ZWdvcnkgYW5kXG4gIC8vIHNob3cgYSBsZWdlbmQsIFdJVEhPVVQgc3BsaXR0aW5nIGludG8gbXVsdGlwbGUgc2VyaWVzICh3aGljaCBzbGl2ZXJzIHRoZVxuICAvLyBiYXJzKS4gdjEgZXhwZWN0cyBjb2xvckJ5LmNvbHVtbiA9PT0geEF4aXMuY29sdW1uLiBJZ25vcmVkIHdoZW4gc3BsaXRCeSBpc1xuICAvLyBzZXQgb3IgdGhlIGNoYXJ0IGlzbid0IGEgYmFyIGNoYXJ0LlxuICBjb2xvckJ5PzogeyBjb2x1bW46IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfTtcbiAgb3JpZW50YXRpb24/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgbGVnZW5kPzogTGVnZW5kUG9zaXRpb247XG4gIHNvcnQ/OiBSZXBvcnRTb3J0O1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFydE1lYXN1cmUge1xuICBjb2x1bW46IHN0cmluZztcbiAgYWdncmVnYXRpb24/OiAnc3VtJyB8ICdjb3VudCcgfCAnYXZnJyB8ICdtaW4nIHwgJ21heCc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICAvLyBBcHBsaWVkIHRvIGEgS1BJJ3Mgc2luZ2xlIHZhbHVlIG9ubHkg4oCUIGl0IGlzIGFnZ3JlZ2F0ZWQgc2VydmVyLXNpZGUgYWZ0ZXJcbiAgLy8gdGhlIFNRTCBydW5zLCBzbyB0aGUgU1FMIGNhbm5vdCBmb3JtYXQgaXQuIENoYXJ0IG1lYXN1cmVzIHN0YXkgbnVtZXJpYy5cbiAgZm9ybWF0PzogJ251bWJlcicgfCAncGVyY2VudCcgfCAnY3VycmVuY3knO1xuICAvLyBIb3cgbWFueSBkZWNpbWFsIHBsYWNlcyB0aGUgdmFsdWUgaXMgc2hvd24gdG8uIEZpeGVkIHJhdGhlciB0aGFuIG1heGltdW06XG4gIC8vIGEgY29sdW1uIG9mIHJhdGVzIGlzIHVucmVhZGFibGUgd2hlbiBlYWNoIG9uZSBzaG93cyBhIGRpZmZlcmVudCBudW1iZXIgb2ZcbiAgLy8gZGVjaW1hbHMuIE9taXR0ZWQgbGVhdmVzIHRoZSBsb2NhbGUncyBvd24gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCBldmVyeVxuICAvLyByZXBvcnQgYXV0aG9yZWQgYmVmb3JlIHRoaXMgZGlkLlxuICAvL1xuICAvLyBJdCBjYW5ub3QgYmUgYXBwbGllZCBpbiB0aGUgU1FMOiB0aGUgdmFsdWUgaXMgYWdncmVnYXRlZCBhZnRlciB0aGUgcmVwb3J0J3NcbiAgLy8gZmlsdGVycyBydW4sIHNvIHByZS1yb3VuZGluZyB3b3VsZCBicmVhayBsaXZlIHJlLWZpbHRlcmluZyBieSBkYXRlIHJhbmdlIG9yXG4gIC8vIHBhcnRuZXIuXG4gIHByZWNpc2lvbj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0Q29uZmlnIHtcbiAgLy8gQSBsaXN0IGNlbGwgcmVuZGVycyB0aGUgdmFsdWUgdmVyYmF0aW06IHBlcmNlbnQgc2lnbnMsIGN1cnJlbmN5IHN5bWJvbHMsXG4gIC8vIHRob3VzYW5kcyBzZXBhcmF0b3JzIGFuZCBkZWNpbWFsIHBsYWNlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIGNvbXBvbmVudCdzXG4gIC8vIFNRTCAodGhlIGJhY2tlbmQgcmVqZWN0cyBhbnkgb3RoZXIgYGZvcm1hdGAgaGVyZSkuIGBkYXRlYCBpcyB0aGUgZXhjZXB0aW9uXG4gIC8vIOKAlCBhIGRhdGUgY29sdW1uIHN0YXlzIGEgUkFXIHRpbWVzdGFtcCBzbyB0aGUgcmVwb3J0IHRpbWV6b25lIGFuZCBpdHNcbiAgLy8gZGF0ZVJhbmdlIGZpbHRlcnMga2VlcCB3b3JraW5nLCBhbmQgdGhlIHZpZXdlciBsb2NhbGlzZXMgaXQgYXQgcmVuZGVyLlxuICAvLyBBIFNRTC1mb3JtYXR0ZWQgY29sdW1uIGlzIHRleHQsIHNvIGl0IG5hbWVzIGBzb3J0Q29sdW1uYDogdGhlIHJhdyBudW1lcmljXG4gIC8vIGFsaWFzIHRoZSBxdWVyeSBhbHNvIG91dHB1dHMsIHdoaWNoIHRoZSBzZXJ2ZXIgb3JkZXJzIGJ5IGluc3RlYWQuXG4gIGNvbHVtbnM/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgZm9ybWF0PzogJ2RhdGUnOyBzb3J0Q29sdW1uPzogc3RyaW5nIH1bXTtcbiAgLy8gQSBjcm9zcy10YWI6IGByb3dCeWAgc3RheXMgZG93biB0aGUgc2lkZSBhbmQgZXZlcnkgdmFsdWUgb2YgYHBpdm90QnlgXG4gIC8vIGJlY29tZXMgYSBjb2x1bW4uIFRoZSB0d28gYXJlIHNldCB0b2dldGhlciwgYGNvbHVtbnNgIGlzIG9taXR0ZWQgKHRoZVxuICAvLyBiYWNrZW5kIHJlamVjdHMgYXV0aG9yaW5nIGJvdGgpLCBhbmQgdGhlIGNvbHVtbiBzZXQgYXJyaXZlcyB3aXRoIHRoZSByb3dzXG4gIC8vIGluIENvbXBvbmVudERhdGEuY29sdW1ucyBiZWNhdXNlIG9ubHkgdGhlIHJlc3VsdCBrbm93cyB0aGUgcGl2b3QgdmFsdWVzLlxuICByb3dCeT86IHsgY29sdW1uOiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH07XG4gIHBpdm90Qnk/OiB7IGNvbHVtbjogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9O1xuICBzb3J0PzogUmVwb3J0U29ydDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgS3BpQ29uZmlnIHtcbiAgbWVhc3VyZT86IENoYXJ0TWVhc3VyZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTb3J0IHtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xufVxuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJUeXBlID0gJ2RhdGVSYW5nZScgfCAnc2VsZWN0JyB8ICdrZXl3b3JkJztcblxuLy8gV2hlcmUgYSBmaWx0ZXIgZ3JvdXAncyBjb250cm9sIGlzIGV4cG9zZWQuIEEgZ3JvdXAgY2FuIGJlIHNob3duIG9uIGl0c1xuLy8gY29tcG9uZW50cywgaW4gdGhlIHJlcG9ydCBiYXIsIG9yIEJPVEggYXQgb25jZSAodGhlIHR3byBhcmUgaW5kZXBlbmRlbnRcbi8vIHRvZ2dsZXMgaW4gdGhlIFVJKTsgYSBjb2x1bW4gd2l0aCBuZWl0aGVyIGV4cG9zZWQgc2ltcGx5IGhhcyBubyBmaWx0ZXIuXG5leHBvcnQgdHlwZSBSZXBvcnRGaWx0ZXJMZXZlbCA9ICdjb21wb25lbnQnIHwgJ3JlcG9ydCcgfCAnYm90aCc7XG5cbi8vIE9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gb2YgYSBjb21wb25lbnQncyBTUUwsIHdpdGggdGhlIGZpbHRlciBpbnRlcmZhY2Vcbi8vIElORkVSUkVEIGZyb20gaXRzIGRhdGEgKHRoZSBodW1hbiBuZXZlciBwaWNrcyB0aGUgaW50ZXJmYWNlIOKAlCBpdCBmb2xsb3dzIHRoZVxuLy8gY29sdW1uJ3MgdHlwZSkuIERyaXZlcyB0aGUgRmlsdGVycyB0YWIgbGlzdGluZy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyYWJsZUNvbHVtbiB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xufVxuXG4vLyBHcm91bmQgdHJ1dGg6IG9uZSBmaWx0ZXJhYmxlIG91dHB1dCBjb2x1bW4gT04gb25lIGNvbXBvbmVudCdzIFNRTC4gQWx3YXlzIGFcbi8vIG1lbWJlciBvZiBhIGZpbHRlciBncm91cCDigJQgdGhlIHVuaXQgdGhhdCBsaW5rcyBlcXVpdmFsZW50IGZpbHRlcnMgYWNyb3NzXG4vLyBjb21wb25lbnRzIGFuZCBkZWNpZGVzIHdoZXJlIHRoZSBjb250cm9sIHJlbmRlcnMgKGNvbXBvbmVudCB2cyByZXBvcnQgYmFyKS5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0RmlsdGVyIHtcbiAgaWQ6IG51bWJlcjtcbiAgY29tcG9uZW50SWQ6IG51bWJlcjtcbiAgZmlsdGVyR3JvdXBJZDogbnVtYmVyO1xuICBmaWx0ZXJDb2x1bW46IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGhhc09wdGlvbnM6IGJvb2xlYW47XG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vIE9uZSBjaG9pY2UgaW4gYSBzZWxlY3QgZmlsdGVyJ3Mgb3B0aW9uIGxpc3QuIFRoZSB2YWx1ZSBpcyB3aGF0IHRoZSBmaWx0ZXJcbi8vIG1hdGNoZXMgb24gYW5kIGdldHMgc3RvcmVkIGluIGEgc2F2ZWQgZGVmYXVsdCDigJQgZm9yIGFuIGVudGl0eSB0aGF0IGlzIGl0c1xuLy8gc3RhYmxlIGlkLCBuZXZlciBpdHMgbmFtZSwgc28gcmVuYW1pbmcgdGhlIGVudGl0eSBtb3ZlcyB0aGUgbGFiZWwgd2l0aG91dFxuLy8gYnJlYWtpbmcgdGhlIGRlZmF1bHQuIFRoZSBsYWJlbCBpcyBvbmx5IGV2ZXIgd2hhdCB0aGUgdmlld2VyIHJlYWRzLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJPcHRpb24ge1xuICB2YWx1ZTogdW5rbm93bjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGaWx0ZXJHcm91cCB7XG4gIGlkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICB0eXBlOiBSZXBvcnRGaWx0ZXJUeXBlO1xuICBsZXZlbDogUmVwb3J0RmlsdGVyTGV2ZWw7XG4gIG9yZGVyOiBudW1iZXI7XG4gIGNvbmZpZzogeyBkZWZhdWx0PzogRmlsdGVyR3JvdXBEZWZhdWx0IH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZmlsdGVyczogUmVwb3J0RmlsdGVyW107XG59XG5cbi8vIEEgZmlsdGVyIGdyb3VwJ3MgYXV0aG9yZWQgZGVmYXVsdCDigJQgdGhlIHZhbHVlIHRoYXQgc2VlZHMgdGhlIHJlcG9ydCBiYXIgb25cbi8vIGV2ZXJ5IG9wZW4uIFNoYXBlIGZvbGxvd3MgdGhlIGdyb3VwJ3MgdHlwZTogZGF0ZVJhbmdlIHVzZXMgc3RhcnQvZW5kIChhIGZpeGVkXG4vLyBjYWxlbmRhci1kYXkgcmFuZ2UpIG9yIGEgcmVsYXRpdmUgcHJlc2V0OyBzZWxlY3QgdXNlcyB2YWx1ZXM7IGtleXdvcmQgdXNlc1xuLy8gdmFsdWUuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwRGVmYXVsdCB7XG4gIC8vIGRhdGVSYW5nZSByZWxhdGl2ZSBwcmVzZXQsIHJlc29sdmVkIGFnYWluc3QgXCJub3dcIiBvbiBldmVyeSBvcGVuLiBPbmUgb2Y6XG4gIC8vIHRoaXNXZWVrLCBsYXN0V2VlaywgbGFzdDdEYXlzLCBsYXN0MzBEYXlzLCBsYXN0M01vbnRocywgbGFzdDZNb250aHMsXG4gIC8vIGxhc3QxMk1vbnRocywgdGhpc01vbnRoLCB0aGlzUXVhcnRlciwgdGhpc1llYXIveWVhclRvRGF0ZS4gVGhlIHdlZWsgb25lc1xuICAvLyBhcmUgd2hvbGUgY2FsZW5kYXIgZGF5cywgU3VuZGF5IHRvIFNhdHVyZGF5LCBpbiB0aGUgcmVwb3J0J3MgdGltZXpvbmUuXG4gIHJlbGF0aXZlPzogc3RyaW5nO1xuICBzdGFydD86IHN0cmluZzsgLy8gZGF0ZVJhbmdlIGZpeGVkIHN0YXJ0ICh5eXl5LU1NLWRkKVxuICBlbmQ/OiBzdHJpbmc7IC8vIGRhdGVSYW5nZSBmaXhlZCBlbmQgKHl5eXktTU0tZGQpXG4gIHZhbHVlcz86IHVua25vd25bXTsgLy8gc2VsZWN0IGRlZmF1bHQgcGlja2VkIHZhbHVlc1xuICB2YWx1ZT86IHN0cmluZzsgLy8ga2V5d29yZCBkZWZhdWx0IHRleHRcbn1cblxuLy8gVGhlIHNlc3Npb24gdmFsdWUgb2YgYSBmaWx0ZXIgZ3JvdXAgKG5ldmVyIHBlcnNpc3RlZCk6IHNoYXBlIGRlcGVuZHMgb24gdGhlXG4vLyBncm91cCdzIHR5cGUuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwVmFsdWUge1xuICBzdGFydD86IERhdGUgfCBzdHJpbmcgfCBudWxsOyAvLyBkYXRlUmFuZ2VcbiAgZW5kPzogRGF0ZSB8IHN0cmluZyB8IG51bGw7IC8vIGRhdGVSYW5nZVxuICB2YWx1ZXM/OiB1bmtub3duW107IC8vIHNlbGVjdFxuICB2YWx1ZT86IHN0cmluZzsgLy8ga2V5d29yZFxufVxuXG4vLyBPbmUgcmVzb2x2ZWQgZmlsdGVyIHNlbnQgd2l0aCBhIGNvbXBvbmVudCdzIGRhdGEgcmVxdWVzdC5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRGaWx0ZXJWYWx1ZSB7XG4gIGZpbHRlcklkOiBudW1iZXI7XG4gIHN0YXJ0Pzogc3RyaW5nO1xuICBlbmQ/OiBzdHJpbmc7XG4gIHZhbHVlcz86IHVua25vd25bXTtcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbi8vIFBlci1jb21wb25lbnQgaW50ZXJhY3Rpb24gc3RhdGUgc2VudCB3aXRoIHRoZSBkYXRhIHJlcXVlc3Q6IGxpc3RzIHNlbmRcbi8vIHNvcnQvcGFnaW5nOyB0aW1lLXNlcmllcyBjaGFydHMgc2VuZCB0aGUgZ3JhaW4gcGlja2VkIG9uIHRoZSByZXBvcnQncyBncm91cC1ieVxuLy8gY29udHJvbCwgd2hpY2ggb3ZlcnJpZGVzIHRoZSBhdXRob3JlZCBncmFudWxhcml0eSBmb3IgdGhhdCByZXF1ZXN0IG9ubHkuIFRoZVxuLy8gd2lyZSBrZXkgc3RheXMgYGZyZXF1ZW5jeWAg4oCUIGl0IGlzIHRoZSBidWNrZXRpbmcgZnJlcXVlbmN5IHRoZSBzZXJ2ZXIgYXBwbGllcy5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YVN0YXRlIHtcbiAgc29ydD86IFJlcG9ydFNvcnQ7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBmcmVxdWVuY3k/OiBDaGFydEdyYW51bGFyaXR5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGEge1xuICBjb2x1bW5zOiBzdHJpbmdbXTtcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgcGFnaW5nPzogeyB0b3RhbDogbnVtYmVyOyBwYWdlOiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfTtcbiAgdHJ1bmNhdGVkOiBib29sZWFuO1xuICAvLyBUaGUgZWZmZWN0aXZlIHRpbWUgYnVja2V0IHRoZSByb3dzIHdlcmUgZ3JvdXBlZCBpbnRvIChhZnRlciBhbnkgZ3JvdXAtYnlcbiAgLy8gb3ZlcnJpZGUpLCBvciBudWxsIGZvciBhIG5vbi10aW1lIGF4aXMuIERyaXZlcyB0aGUgY29tcGFjdCB4LWF4aXMgbGFiZWxzLlxuICBncmFudWxhcml0eT86IENoYXJ0R3JhbnVsYXJpdHkgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydExpc3RJdGVtIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBtb2RpZnlEYXRlOiBzdHJpbmc7XG4gIHN0YXRlPzogUmVwb3J0U3RhdGU7XG4gIC8vIFRoZSBmb2xkZXIgdGhlIHJlcG9ydCBpcyBmaWxlZCB1bmRlci4gbnVsbCBpcyBhIHJlYWwsIGNvbW1vbiB2YWx1ZSDigJQgdGhlXG4gIC8vIHJlcG9ydCBzaXRzIGF0IHRoZSByb290IG9mIHRoZSBsaXN0aW5nIHRyZWUgYWxvbmdzaWRlIHRoZSBmb2xkZXJzLlxuICAvL1xuICAvLyBPcHRpb25hbCBsaWtlIGBzdGF0ZWAgYmVzaWRlIGl0OiB0aGUgYmFja2VuZCBhbHdheXMgc2VuZHMgaXQsIGJ1dCBtYWtpbmcgaXRcbiAgLy8gcmVxdWlyZWQgaXMgYSBicmVha2luZyB0eXBlIGNoYW5nZSBmb3IgZXZlcnkgY29uc3VtZXIgaG9sZGluZyBhXG4gIC8vIFJlcG9ydExpc3RJdGVtIGxpdGVyYWwgKGZpeHR1cmVzLCBtb2NrcykgYW5kIGJ1eXMgbm90aGluZyDigJQgdGhlIGxpc3RpbmdcbiAgLy8gcmVhZHMgaXQgYXMgYD8/IG51bGxgIGVpdGhlciB3YXkuXG4gIHJlcG9ydEZvbGRlcklkPzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gT25lIGZvbGRlciBpbiB0aGUgbGlzdGluZyB0cmVlIOKAlCBhbiBhdWRpZW5jZSBidWNrZXQgKFwiTWFuYWdlbWVudFwiLFxuLy8gXCJPcGVyYXRpb25zXCIpIHJlcG9ydHMgYXJlIGZpbGVkIGludG8uIEZvbGRlcnMgbmVzdCB2aWEgcGFyZW50UmVwb3J0Rm9sZGVySWQ7XG4vLyByZXBvcnRzIG5ldmVyIGRvLCBzbyB0aGUgdHJlZSdzIG9ubHkgYnJhbmNoIG5vZGVzIGFyZSBmb2xkZXJzLlxuLy9cbi8vIGBzdGF0ZWAgaXMgdGhlIGZvbGRlcidzIE9XTiBzdGF0ZS4gRGVsZXRpbmcgYSBmb2xkZXIgd3JpdGVzIG9ubHkgdGhhdCwgYW5kXG4vLyBldmVyeXRoaW5nIGJlbG93IGl0IGNvdW50cyBhcyBkZWxldGVkIGJ5IHBvc2l0aW9uIOKAlCBzZWUgUmVwb3J0Tm9kZS5kZWxldGVkLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRGb2xkZXIge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHBhcmVudFJlcG9ydEZvbGRlcklkOiBudW1iZXIgfCBudWxsO1xuICBzdGF0ZT86IFJlcG9ydFN0YXRlO1xufVxuXG4vLyBHRVQgL2FwaS9yZXBvcnRzIHJldHVybnMgYm90aCBoYWx2ZXMgZmxhdDsgdGhlIGxpc3RpbmcgbmVzdHMgdGhlbSBpdHNlbGYuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFRyZWUge1xuICByZXBvcnRzOiBSZXBvcnRMaXN0SXRlbVtdO1xuICBmb2xkZXJzOiBSZXBvcnRGb2xkZXJbXTtcbn1cblxuZXhwb3J0IGVudW0gUmVwb3J0Tm9kZVR5cGUge1xuICBGb2xkZXIgPSAnZm9sZGVyJyxcbiAgUmVwb3J0ID0gJ3JlcG9ydCcsXG59XG5cbi8vIE9uZSBub2RlIGFzIGZzLXRyZWUgc2VlcyBpdC4gRm9sZGVycyBhbmQgcmVwb3J0cyBzaGFyZSBvbmUgaWQgc3BhY2UgaW4gdGhlXG4vLyB2aWV3LCBzbyB0aGUgaWRzIGFyZSBwcmVmaXhlZCAoJ2Y6MTInIC8gJ3I6MzQnKSDigJQgYGlkYCBpcyB0aGUgb3JpZ2luYWwsXG4vLyBwZXItdGFibGUgaWQgdGhhdCB0aGUgQVBJIGVuZHBvaW50cyB0YWtlLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnROb2RlIHtcbiAga2V5OiBzdHJpbmc7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogUmVwb3J0Tm9kZVR5cGU7XG4gIC8vIE9ubHkgZXZlciBwb3B1bGF0ZWQgb24gYSBmb2xkZXI7IGEgcmVwb3J0IGlzIGFsd2F5cyBhIGxlYWYuXG4gIGNoaWxkcmVuOiBSZXBvcnROb2RlW107XG4gIC8vIFByZXNlbnQgb24gcmVwb3J0IG5vZGVzIG9ubHkuXG4gIHJlcG9ydD86IFJlcG9ydExpc3RJdGVtO1xuICAvLyBUaGUgbm9kZSdzIG93biByb3cgaXMgZGVsZXRlZC4gV2hhdCBlYXJucyB0aGUgXCJEZWxldGVkXCIgY2hpcCDigJQgdGhpcyBpc1xuICAvLyB3aGF0IHNvbWVib2R5IGFjdHVhbGx5IGRlbGV0ZWQuXG4gIHN0YXRlRGVsZXRlZDogYm9vbGVhbjtcbiAgLy8gRGVsZXRlZCBpdHNlbGYgT1IgYW55d2hlcmUgYmVsb3cgYSBkZWxldGVkIGZvbGRlci4gT25seSBldmVyIHRydWUgaW4gU2hvd1xuICAvLyBEZWxldGVkIG1vZGUgKHRoZSBkZWZhdWx0IGxpc3RpbmcgbmV2ZXIgcmV0dXJucyBzdWNoIGEgbm9kZSksIGFuZCBpdCBpcyB3aGF0XG4gIC8vIHN3YXBzIHRoZSByb3cncyBhY3Rpb25zIGZvciBSZXN0b3JlLlxuICBkZWxldGVkOiBib29sZWFuO1xufVxuXG4vLyBSZXBvcnRzIGFuZCBmb2xkZXJzIGFyZSBib3RoIHNvZnQtZGVsZXRhYmxlLiBBIGRlbGV0ZWQgcmVwb3J0IGtlZXBzIGl0cyBwYWdlc1xuLy8gYW5kIGNvbXBvbmVudHM7IGEgZGVsZXRlZCBmb2xkZXIga2VlcHMgZXZlcnl0aGluZyBmaWxlZCB1bmRlciBpdCwgd2hpY2ggbGVhdmVzXG4vLyB0aGUgbGlzdGluZyB3aXRoIGl0IGFuZCBjb21lcyBiYWNrIHdpdGggaXQuIFwiU2hvdyBEZWxldGVkXCIgc2hvd3MgdGhlIHdob2xlXG4vLyB0cmVlLCBsaXZlIGFuZCBkZWxldGVkIHRvZ2V0aGVyLCBzbyBhbnkgb2YgaXQgY2FuIGJlIHJlc3RvcmVkIGluIHBsYWNlLlxuZXhwb3J0IGVudW0gUmVwb3J0U3RhdGUge1xuICBBY3RpdmUgPSAnYWN0aXZlJyxcbiAgRGVsZXRlZCA9ICdkZWxldGVkJyxcbn1cblxuLy8gVGhlIGNoYXQgdHVybiBmbGFncyB0aGlzIGNvbnRleHQncyBiYWNrZW5kIGFkZHMgKFJlcG9ydHNcXEFpVmlldykuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydENoYXRSZXNwb25zZSB7XG4gIHJlcG9ydENoYW5nZWQ/OiBib29sZWFuO1xuICByZXBvcnRSZW5hbWVkPzogYm9vbGVhbjtcbn1cblxuLy8gT25lIHZlcnNpb24gb2YgdGhlIGdsb2JhbCBBSSBrbm93bGVkZ2UgZG9jdW1lbnQg4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZFxuLy8gbWFya2Rvd24gYXBwZW5kZWQgdG8gdGhlIHJlcG9ydCBhZ2VudCdzIHN5c3RlbSBpbnN0cnVjdGlvbnMgb24gZXZlcnkgdHVybi5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0SW5zdHJ1Y3Rpb24ge1xuICBpZDogbnVtYmVyO1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGN1cnJlbnQ6IGJvb2xlYW47XG4gIGNyZWF0ZURhdGU6IERhdGU7XG4gIG1vZGlmeURhdGU6IERhdGU7XG4gIGFjY291bnRJZDogbnVtYmVyIHwgbnVsbDtcbiAgYWNjb3VudE5hbWU6IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIEdFVC9QVVQgaW5zdHJ1Y3Rpb25zIHBheWxvYWQ6IHRoZSBjdXJyZW50IHZlcnNpb24gKG51bGwgdW50aWwgb25lIGlzXG4vLyBhdXRob3JlZCkgcGx1cyB0aGUgZnVsbCBoaXN0b3J5LCBuZXdlc3QgZmlyc3QuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEluc3RydWN0aW9ucyB7XG4gIGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb24gfCBudWxsO1xuICB2ZXJzaW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25bXTtcbn1cblxuLy8gVGhlIGxhdGVzdCBzZW1hbnRpYy1kYXRhYmFzZSBidWlsZCAoYW4gZmZfcHJvY2Vzc2VzIHJvdykg4oCUIGVub3VnaCBmb3IgdGhlXG4vLyBzZXR0aW5ncyBkaWFsb2cgdG8gc2F5IHdoYXQgc3RhdGUgdGhlIGJ1aWxkIGlzIGluIGFuZCB3aGVuIGl0IGxhc3QgcmFuLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkIHtcbiAgaWQ6IG51bWJlcjtcbiAgc3RhdGU6IHN0cmluZztcbiAgcGVyY2VudDogbnVtYmVyIHwgc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNyZWF0ZURhdGU6IERhdGU7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgZW5kRGF0ZTogRGF0ZTtcbn1cblxuLy8gQSBidWlsZCBzdGFnZSdzIHN0YXRlIG9uIHRoZSBlbnRpdHkgc2NvcmVib2FyZDogJ2RvbmUnID0gYnVpbHQsICdtaXNzaW5nJyA9XG4vLyBzdGlsbCBuZWVkcyBidWlsZGluZyAoYSBtaXNzaW5nIHN0YWdlIGlzIHVuYnVpbHQgY29udGVudCwgbmV2ZXIgYW4gZXJyb3IpLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNCdWlsZFN0YWdlID0gJ2RvbmUnIHwgJ21pc3NpbmcnO1xuXG4vLyBPbmUgZW51bSBjb2x1bW4gb2YgYW4gZW50aXR5LCB3aXRoIHRoZSBhbGxvd2VkIHZhbHVlcyB0aGUgYnVpbGQgaW5saW5lZC5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudW0ge1xuICBjb2x1bW46IHN0cmluZztcbiAgdmFsdWVzOiBzdHJpbmdbXTtcbn1cblxuLy8gT25lIGVudGl0eSByb3cgb2YgdGhlIHNjb3JlYm9hcmQgKGFuIGVudGl0eSA9IGEgdGFibGUgKyBhIG1vZGVsICsgYVxuLy8gaGFuZGxlcik6IGl0cyB0YWJsZS9zaGFwZSBjb3VudHMsIGlubGluZWQgZW51bSB2YWx1ZXMsIGNvbXB1dGVkIGZpZWxkcywgaG93XG4vLyBtYW55IGNvZGUgZnVuY3Rpb25zIHdlcmUgY2FjaGVkIChzcGxpdCBtb2RlbCB2cyBoYW5kbGVyKSwgYW5kIHRoZSBwZXItc3RhZ2Vcbi8vIGJ1aWx0L21pc3Npbmcgc3RhdGUuXG4vL1xuLy8gYG1vZGVsYC9gaGFuZGxlcmAgYXJlIHRoZSBjbGFzc2VzIHRoZSBmdW5jdGlvbnMgd2VyZSByZWFkIGZyb20g4oCUIHdoYXQgYVxuLy8gcmVhZGVyIHJlY29nbml6ZXMgdGhlIHJvdyBieSwgd2hlcmUgYGtleWAgaXMgd2hhdCB0aGUgcmVwb3J0IEFJIGFkZHJlc3NlcyBpdFxuLy8gYnkgaW4gZGVzY3JpYmVfZW50aXR5IC8gY29tcGlsZV9xdWVyeS5cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNCdWlsZEVudGl0eSB7XG4gIGtleTogc3RyaW5nO1xuICB0YWJsZTogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaGFuZGxlcjogc3RyaW5nIHwgbnVsbDtcbiAgY29sdW1uczogbnVtYmVyO1xuICByZWxhdGlvbnNoaXBzOiBudW1iZXI7XG4gIGVudW1zOiBTZW1hbnRpY0J1aWxkRW51bVtdO1xuICBjb21wdXRlZEZpZWxkczogc3RyaW5nW107XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgbW9kZWxGdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIGhhbmRsZXJGdW5jdGlvbkNvdW50OiBudW1iZXI7XG4gIHN0YWdlczogUmVjb3JkPHN0cmluZywgU2VtYW50aWNCdWlsZFN0YWdlPjtcbn1cblxuLy8gT25lIHN0YW5kYWxvbmUgY29kZSBjbGFzcyB0aGUgYnVpbGQgcmVhZDogZG9tYWluIGxvZ2ljIHdpdGggbm8gdGFibGUgb2YgaXRzXG4vLyBvd24gKGEgc3VtbWFyeSBtb2RlbCwgYSBjYWxjdWxhdGlvbiBzZXJ2aWNlKS4gVGhlIHJlcG9ydCBBSSByZWFkcyBpdHMgY29kZVxuLy8gZXhhY3RseSBsaWtlIGFuIGVudGl0eSdzLCBidXQgaXQgY2FuIG5ldmVyIGJlIHF1ZXJpZWQg4oCUIHRoZXJlIGlzIG5vdGhpbmcgdG9cbi8vIHNlbGVjdCBmcm9tIOKAlCBzbyBpdCBjYXJyaWVzIG5vIHRhYmxlLCBjb2x1bW5zIG9yIHJlbGF0aW9uc2hpcHMuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRDbGFzcyB7XG4gIGtleTogc3RyaW5nO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb25Db3VudDogbnVtYmVyO1xufVxuXG4vLyBXaGF0IHRoZSBidWlsZCBkZWNpZGVkIGEgcGh5c2ljYWwgdGFibGUgaXMuIEVudGl0eSBhbmQganVuY3Rpb24gYXJlIGJvdGhcbi8vIHJlYWNoYWJsZSBieSB0aGUgcmVwb3J0IEFJIOKAlCBhbiBlbnRpdHkgZGlyZWN0bHksIGEganVuY3Rpb24gdGhyb3VnaCB0aGVcbi8vIG1hbnktdG8tbWFueSBpdCBicmlkZ2VzLiBFeGNsdWRlZCBpcyBub3QgcmVhY2hhYmxlIGF0IGFsbC5cbmV4cG9ydCB0eXBlIFNlbWFudGljVGFibGVDbGFzc2lmaWNhdGlvbiA9ICdlbnRpdHknIHwgJ2p1bmN0aW9uJyB8ICdleGNsdWRlZCc7XG5cbi8vIE9uZSBwaHlzaWNhbCB0YWJsZSBhcyB0aGUgYnVpbGQgY2xhc3NpZmllZCBpdC4gYHJlYXNvbmAgYW5zd2VycyBhIHNpbmdsZVxuLy8gcXVlc3Rpb24g4oCUIHdoeSBjYW4ndCB0aGUgcmVwb3J0IEFJIHNlZSB0aGlzIHRhYmxlPyDigJQgYW5kIGlzIG51bGwgd2hlbiBpdCBjYW4uXG4vLyBBIGp1bmN0aW9uIHdpdGggYSByZWFzb24gYnJpZGdlZCBub3RoaW5nLCBzbyBpdCBpcyBqdXN0IGFzIGludmlzaWJsZSBhcyBhblxuLy8gZXhjbHVkZWQgdGFibGUuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGRUYWJsZSB7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIGNsYXNzaWZpY2F0aW9uOiBTZW1hbnRpY1RhYmxlQ2xhc3NpZmljYXRpb247XG4gIG1vZGVsOiBzdHJpbmcgfCBudWxsO1xuICByZWFzb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8vIFRoZSBidWlsZCBzY29yZWJvYXJkIHNoaXBwZWQgYWxvbmdzaWRlIHRoZSBidWlsZCBzdGF0dXM6IHRoZSBzdW1tYXJ5IGNvdW50cyxcbi8vIHRoZSBmdWxsIGJyZWFrZG93biB0aGUgc2V0dGluZ3MgZGlhbG9nIGRyaWxscyBpbnRvIOKAlCBCT1RIIGtpbmRzIG9mIHVuaXQgdGhlXG4vLyBidWlsZCBjYWNoZXMsIHRhYmxlLWJhY2tlZCBlbnRpdGllcyBhbmQgc3RhbmRhbG9uZSBjb2RlIGNsYXNzZXMg4oCUIGFuZCB0aGVcbi8vIGNhdGFsb2cgb2YgZXZlcnkgdGFibGUgdGhlIGJ1aWxkIHNhdywgc28gdGhlIHRhYiBjYW4gc2hvdyB3aGF0IHRoZSByZXBvcnQgQUlcbi8vIGNhbid0IHNlZSwgbm90IGp1c3Qgd2hhdCBpdCBjYW4uXG4vL1xuLy8gYGZ1bmN0aW9uQ291bnRgIHNwYW5zIGVudGl0aWVzIGFuZCBjbGFzc2VzIGFsaWtlOiBpdCBpcyB0aGUgc2FtZSB0b3RhbCB0aGVcbi8vIGJ1aWxkIGl0c2VsZiByZXBvcnRzIHdoZW4gaXQgZmluaXNoZXMuXG4vL1xuLy8gYHRhYmxlc2AgaXMgZW1wdHkgZm9yIGFuIGFydGlmYWN0IGJ1aWx0IGJlZm9yZSB0aGUgY2F0YWxvZyBleGlzdGVkLiBSZWFkIHRoYXRcbi8vIGFzIFwibm8gY2F0YWxvZ1wiLCBuZXZlciBhcyBcIm5vdGhpbmcgd2FzIGV4Y2x1ZGVkXCIuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljQnVpbGREZXRhaWwge1xuICAvLyBXaGV0aGVyIHRoZSBhcnRpZmFjdCB3YXMgcHJvZHVjZWQgYnkgYSBidWlsZCB0aGF0IHJhbiB0byB0aGUgZW5kLiBSZWFkIGl0XG4gIC8vIGJlc2lkZSBgZ2VuZXJhdGVkQXRgLCBuZXZlciBpbnN0ZWFkIG9mIGl0OiB0aGUgc3RydWN0dXJhbCBhcnRpZmFjdCBpc1xuICAvLyBwdWJsaXNoZWQgQkVGT1JFIHRoZSBBSSBmdW5jdGlvbiBwYXNzLCBzbyBhIGJ1aWxkIHdob3NlIEFJIHBhc3MgZmFpbGVkIHN0aWxsXG4gIC8vIGNhcnJpZXMgYSBkYXRlIGFuZCBhIGZ1bGwgc2V0IG9mIGNvdW50cy4gVGhlIGRhdGUgc2F5cyBzb21ldGhpbmcgd2FzXG4gIC8vIHdyaXR0ZW47IG9ubHkgdGhpcyBzYXlzIHRoZSBidWlsZCBmaW5pc2hlZCB3cml0aW5nIGl0LlxuICBjb21wbGV0ZTogYm9vbGVhbjtcbiAgZ2VuZXJhdGVkQXQ6IERhdGUgfCBudWxsO1xuICBlbnRpdHlDb3VudDogbnVtYmVyO1xuICBjbGFzc0NvdW50OiBudW1iZXI7XG4gIGZ1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgZW50aXRpZXM6IFNlbWFudGljQnVpbGRFbnRpdHlbXTtcbiAgY2xhc3NlczogU2VtYW50aWNCdWlsZENsYXNzW107XG4gIHRhYmxlQ291bnQ6IG51bWJlcjtcbiAganVuY3Rpb25Db3VudDogbnVtYmVyO1xuICB1bmxpbmtlZEp1bmN0aW9uQ291bnQ6IG51bWJlcjtcbiAgZXhjbHVkZWRDb3VudDogbnVtYmVyO1xuICB0YWJsZXM6IFNlbWFudGljQnVpbGRUYWJsZVtdO1xufVxuXG4vLyBXaGljaCBjbGFzcyBhIGNhY2hlZCBmdW5jdGlvbiB3YXMgcmVhZCBmcm9tLiBBbiBlbnRpdHkncyBjYWNoZSBzcGxpdHMgaW50b1xuLy8gJ21vZGVsJyBhbmQgJ2hhbmRsZXInOyBhIHN0YW5kYWxvbmUgY29kZSBjbGFzcyBoYXMgb25lIGdyb3VwLCAnY2xhc3MnLlxuZXhwb3J0IHR5cGUgU2VtYW50aWNGdW5jdGlvblNvdXJjZSA9ICdtb2RlbCcgfCAnaGFuZGxlcicgfCAnY2xhc3MnO1xuXG4vLyBPbmUgQUktY2xhc3NpZmllZCBjb2RlIGZ1bmN0aW9uIGZyb20gYSBtb2RlbCwgaGFuZGxlciBvciBzdGFuZGFsb25lIGNsYXNzOlxuLy8gd2hhdCBraW5kIG9mIGxvZ2ljIGl0IGlzLCB3aGF0IGl0IGRvZXMsIGFuZCB3aGF0IGl0IHByb2R1Y2VzIOKAlCB0aGUgYnVpbGQnc1xuLy8gY2FjaGVkIFwid2hhdCB0aGUgY29kZSBkb2VzXCIga25vd2xlZGdlIHNob3duIGluIHRoZSBmdW5jdGlvbnMgZGlhbG9nLlxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0VudGl0eUZ1bmN0aW9uIHtcbiAgY2xhc3M6IHN0cmluZztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xuICBraW5kOiBzdHJpbmc7XG4gIHN1bW1hcnk6IHN0cmluZztcbiAgcHJvZHVjZXM6IHN0cmluZztcbiAgc291cmNlOiBTZW1hbnRpY0Z1bmN0aW9uU291cmNlO1xufVxuXG4vLyBPbmUgZW50aXR5J3MgY2FjaGVkIGNvZGUtZnVuY3Rpb24ga25vd2xlZGdlLCBmZXRjaGVkIHdoZW4gYSBmdW5jdGlvbnMgZGlhbG9nXG4vLyBvcGVucyAodGhlIGZ1bGwgc2V0IGFjcm9zcyBhbGwgZW50aXRpZXMgaXMgdG9vIGJpZyB0byBzaGlwIHdpdGggdGhlXG4vLyBzY29yZWJvYXJkKS4gT25lIHBheWxvYWQgc2VydmVzIGJvdGggZGlhbG9ncyDigJQgY29uc3VtZXJzIGZpbHRlciBieSBzb3VyY2UuXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljRW50aXR5RnVuY3Rpb25zIHtcbiAgZW50aXR5OiBzdHJpbmc7XG4gIGdlbmVyYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgbW9kZWxDbGFzczogc3RyaW5nIHwgbnVsbDtcbiAgaGFuZGxlckNsYXNzOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbnM6IFNlbWFudGljRW50aXR5RnVuY3Rpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0J1aWxkU3RhdHVzIHtcbiAgYnVpbGQ6IFNlbWFudGljQnVpbGQgfCBudWxsO1xuICBkZXRhaWw6IFNlbWFudGljQnVpbGREZXRhaWw7XG59XG5cbi8vIFRoZSByZXBvcnQgbW9kdWxlJ3MgR2VuZXJhbCBzZXR0aW5ncyAoYSBzbWFsbCBnbG9iYWwga2V5L3ZhbHVlIHN0b3JlLCB0aGVcbi8vIHJlcG9ydGluZyBjb3VudGVycGFydCBvZiB0aGUgYXBwLXdpZGUgc2V0dGluZ3MpLiBFYWNoIHZhbHVlIHNoaXBzIHdpdGggdGhlXG4vLyBzYWZlIGJhbmQgaXRzIGVkaXRvciBmaWVsZCBpcyBib3VuZGVkIHRvLlxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRTZXR0aW5ncyB7XG4gIC8vIEhvdyBtYW55IHN1bW1hcnkgY2FsbHMgdGhlIHNlbWFudGljIGJ1aWxkIHJ1bnMgYXQgb25jZS5cbiAgc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5OiBudW1iZXI7XG4gIHNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1pbjogbnVtYmVyO1xuICBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNYXg6IG51bWJlcjtcbn1cbiJdfQ==