speechrecorderng 2.25.6 → 2.25.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/audio/audio_display.mjs +6 -6
- package/esm2020/lib/audio/audio_player.mjs +6 -6
- package/esm2020/lib/audio/format.mjs +1 -1
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
- package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
- package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
- package/esm2020/lib/audio/ui/container.mjs +4 -4
- package/esm2020/lib/audio/ui/livelevel.mjs +4 -4
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
- package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
- package/esm2020/lib/dsp/utils.mjs +1 -1
- package/esm2020/lib/io/BinaryWriter.mjs +1 -1
- package/esm2020/lib/math/complex.mjs +1 -1
- package/esm2020/lib/math/dft.mjs +1 -1
- package/esm2020/lib/math/utils.mjs +1 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +82 -77
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +10 -5
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +67 -54
- package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/prompting.mjs +33 -29
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +15 -12
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +12 -12
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +7 -6
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/session.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +76 -72
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
- package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
- package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -1
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
- package/esm2020/lib/speechrecorderng.component.mjs +4 -4
- package/esm2020/lib/speechrecorderng.module.mjs +8 -8
- package/esm2020/lib/spr.config.mjs +4 -4
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
- package/esm2020/lib/ui/message_dialog.mjs +4 -4
- package/esm2020/lib/ui/recordingitem_display.mjs +31 -27
- package/esm2020/lib/ui/responsive_component.mjs +24 -0
- package/esm2020/lib/utils/css_utils.mjs +1 -1
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
- package/fesm2015/speechrecorderng.mjs +401 -345
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +401 -345
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/speechrecorder/session/audiorecorder.d.ts +6 -4
- package/lib/speechrecorder/session/basicrecorder.d.ts +8 -3
- package/lib/speechrecorder/session/controlpanel.d.ts +9 -3
- package/lib/speechrecorder/session/prompting.d.ts +5 -1
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +5 -2
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -1
- package/lib/speechrecorder/session/sessionmanager.d.ts +6 -6
- package/lib/speechrecorderng.module.d.ts +17 -18
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/recordingitem_display.d.ts +8 -4
- package/lib/ui/responsive_component.d.ts +9 -0
- package/package.json +1 -1
|
@@ -13,6 +13,7 @@ import { SequenceAudioFloat32ChunkerOutStream, SequenceAudioFloat32OutStreamMult
|
|
|
13
13
|
import { AudioContextProvider } from "../../audio/context";
|
|
14
14
|
import { UUID } from "../../utils/utils";
|
|
15
15
|
import { WakeLockManager } from "../../utils/wake_lock";
|
|
16
|
+
import { ResponsiveComponent } from "../../ui/responsive_component";
|
|
16
17
|
export const FORCE_REQUEST_AUDIO_PERMISSIONS = false;
|
|
17
18
|
export const RECFILE_API_CTX = 'recfile';
|
|
18
19
|
export const MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour
|
|
@@ -59,8 +60,11 @@ export class ChunkManager {
|
|
|
59
60
|
return frameLen;
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
|
-
let BasicRecorder = class BasicRecorder {
|
|
63
|
-
constructor(dialog, sessionService, uploader, config) {
|
|
63
|
+
let BasicRecorder = class BasicRecorder extends ResponsiveComponent {
|
|
64
|
+
constructor(bpo, changeDetectorRef, dialog, sessionService, uploader, config) {
|
|
65
|
+
super(bpo);
|
|
66
|
+
this.bpo = bpo;
|
|
67
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
64
68
|
this.dialog = dialog;
|
|
65
69
|
this.sessionService = sessionService;
|
|
66
70
|
this.uploader = uploader;
|
|
@@ -80,6 +84,7 @@ let BasicRecorder = class BasicRecorder {
|
|
|
80
84
|
this.uploadStatus = 'ok';
|
|
81
85
|
this.audioSignalCollapsed = true;
|
|
82
86
|
this.peakLevelInDb = MIN_DB_LEVEL;
|
|
87
|
+
this._controlAudioPlayer = null;
|
|
83
88
|
this.displayAudioClip = null;
|
|
84
89
|
this.audioFetchSubscription = null;
|
|
85
90
|
this.destroyed = false;
|
|
@@ -189,7 +194,7 @@ let BasicRecorder = class BasicRecorder {
|
|
|
189
194
|
type: 'error',
|
|
190
195
|
title: 'Error',
|
|
191
196
|
msg: "This session is sealed. Recordings cannot be added anymore.",
|
|
192
|
-
|
|
197
|
+
advice: 'Please ask your experimenter what to do (e.g start a new session).',
|
|
193
198
|
}
|
|
194
199
|
});
|
|
195
200
|
}
|
|
@@ -465,7 +470,7 @@ let BasicRecorder = class BasicRecorder {
|
|
|
465
470
|
};
|
|
466
471
|
BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS = 30;
|
|
467
472
|
BasicRecorder = __decorate([
|
|
468
|
-
__param(
|
|
473
|
+
__param(5, Inject(SPEECHRECORDER_CONFIG))
|
|
469
474
|
], BasicRecorder);
|
|
470
475
|
export { BasicRecorder };
|
|
471
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNyZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBYSxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUkzRixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxxQkFBcUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUc3RSxPQUFPLEVBQ0wsb0NBQW9DLEVBRXBDLHVDQUF1QyxFQUN4QyxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUN2QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUMsS0FBSyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGVBQWUs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QUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsR0FBQyw0Q0FBNEMsRUFBQyxTQUFjLGVBQWU7UUFDbEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDOUIsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYsQ0FBQTtBQTFjd0Isd0NBQTBCLEdBQUMsRUFBRyxDQUFBO0FBWmpDLGFBQWE7SUE4RGxCLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7R0E5RHhCLGFBQWEsQ0FzZGxDO1NBdGRxQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc3BvcnRBY3Rpb25zfSBmcm9tIFwiLi9jb250cm9scGFuZWxcIjtcclxuaW1wb3J0IHtCcm93c2VyLCBVc2VyQWdlbnQsIFVzZXJBZ2VudEJ1aWxkZXJ9IGZyb20gXCIuLi8uLi91dGlscy91YS1wYXJzZXJcIjtcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtNZXNzYWdlRGlhbG9nfSBmcm9tIFwiLi4vLi4vdWkvbWVzc2FnZV9kaWFsb2dcIjtcclxuaW1wb3J0IHtTZXNzaW9ufSBmcm9tIFwiLi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2FwdHVyZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NhcHR1cmUvY2FwdHVyZVwiO1xyXG5pbXBvcnQge0F1ZGlvRGV2aWNlLCBBdXRvR2FpbkNvbnRyb2xDb25maWd9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3RcIjtcclxuaW1wb3J0IHtMZXZlbEluZm9zLCBMZXZlbE1lYXN1cmUsIFN0cmVhbUxldmVsTWVhc3VyZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcbmltcG9ydCB7QXVkaW9QbGF5ZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXJcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge01JTl9EQl9MRVZFTH0gZnJvbSBcIi4uLy4uL3VpL3JlY29yZGluZ2l0ZW1fZGlzcGxheVwiO1xyXG5pbXBvcnQge1VwbG9hZH0gZnJvbSBcIi4uLy4uL25ldC91cGxvYWRlclwiO1xyXG5pbXBvcnQge0luamVjdH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtTUEVFQ0hSRUNPUkRFUl9DT05GSUcsIFNwZWVjaFJlY29yZGVyQ29uZmlnfSBmcm9tIFwiLi4vLi4vc3ByLmNvbmZpZ1wiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuLi9zcHJ1cGxvYWRlclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0sXHJcbiAgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0sXHJcbiAgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1NdWx0aXBsaWVyXHJcbn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge1NwclJlY29yZGluZ0ZpbGV9IGZyb20gXCIuLi9yZWNvcmRpbmdcIjtcclxuaW1wb3J0IHtBdWRpb0NvbnRleHRQcm92aWRlcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NvbnRleHRcIjtcclxuaW1wb3J0IHtVVUlEfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuaW1wb3J0IHtXYWtlTG9ja01hbmFnZXJ9IGZyb20gXCIuLi8uLi91dGlscy93YWtlX2xvY2tcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBGT1JDRV9SRVFVRVNUX0FVRElPX1BFUk1JU1NJT05TPWZhbHNlO1xyXG5leHBvcnQgY29uc3QgUkVDRklMRV9BUElfQ1RYID0gJ3JlY2ZpbGUnO1xyXG5leHBvcnQgY29uc3QgTUFYX1JFQ09SRElOR19USU1FX01TID0gMTAwMCAqIDYwICogNjAgKiA2MDsgLy8gMSBob3VyXHJcblxyXG5leHBvcnQgY29uc3QgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTID0gMC4xOyAgLy8gMTAwbXNcclxuXHJcbmV4cG9ydCBjb25zdCBOT1NMRUVQX1ZJREVPX1RJVExFPSdObyBTbGVlcCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENodW5rQXVkaW9CdWZmZXJSZWNlaXZlcntcclxuICBwb3N0QXVkaW9TdHJlYW1TdGFydCgpOnZvaWQ7XHJcbiAgcG9zdENodW5rQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIsY2h1bmtJZHg6bnVtYmVyKTp2b2lkO1xyXG4gIHBvc3RBdWRpb1N0cmVhbUVuZChjaHVua0NvdW50Om51bWJlcik6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENodW5rTWFuYWdlciBpbXBsZW1lbnRzIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFte1xyXG5cclxuICBzZXQgcmVjb3JkaW5nRmlsZSh2YWx1ZTogU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgdGhpcy5fcmYgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hhbm5lbHM6bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSBzYW1wbGVSYXRlOm51bWJlcj0tMTtcclxuXHJcbiAgcHJpdmF0ZSBfcmYhOlNwclJlY29yZGluZ0ZpbGU7XHJcblxyXG4gIHByaXZhdGUgY2h1bmtJZHg6bnVtYmVyPTA7XHJcblxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXI6Q2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIC8vIE5vdGhpbmcgdG8gZG9cclxuICB9XHJcblxyXG4gIGZsdXNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdEF1ZGlvU3RyZWFtRW5kKHRoaXMuY2h1bmtJZHgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dFN0cmVhbSgpOiB2b2lkIHtcclxuICAgIC8vIHJlc2V0IGNodW5rIGNvdW50ZXJcclxuICAgIHRoaXMuY2h1bmtJZHg9MDtcclxuICAgIHRoaXMuY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLnBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5uZWxzPWNoYW5uZWxzO1xyXG4gICAgdGhpcy5zYW1wbGVSYXRlPXNhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBhQ3R4PUF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICBsZXQgYkNocz1idWZmZXJzLmxlbmd0aDtcclxuICAgIGxldCBmcmFtZUxlbj0wO1xyXG4gICAgaWYoYUN0eCAmJiBiQ2hzPjApIHtcclxuICAgICAgZnJhbWVMZW49YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICAgIGxldCBhZCA9IGFDdHguY3JlYXRlQnVmZmVyKHRoaXMuY2hhbm5lbHMsIGZyYW1lTGVuLCB0aGlzLnNhbXBsZVJhdGUpO1xyXG4gICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgdGhpcy5jaGFubmVsczsgY2grKykge1xyXG4gICAgICAgIGFkLmNvcHlUb0NoYW5uZWwoYnVmZmVyc1tjaF0sY2gpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLnBvc3RDaHVua0F1ZGlvQnVmZmVyKGFkLHRoaXMuY2h1bmtJZHgpO1xyXG4gICAgICB0aGlzLmNodW5rSWR4Kys7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZnJhbWVMZW47XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljUmVjb3JkZXIge1xyXG4gIGdldCB1cGxvYWRDaHVua1NpemVTZWNvbmRzKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VwbG9hZENodW5rU2l6ZVNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgdXBsb2FkQ2h1bmtTaXplU2Vjb25kcyh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgbGV0IG9sZFZhbHVlPXRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcztcclxuICAgIHRoaXMuX3VwbG9hZENodW5rU2l6ZVNlY29uZHMgPSB2YWx1ZTtcclxuICAgIGlmKHZhbHVlIT09b2xkVmFsdWUpe1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUz0zMDtcclxuICBwcm90ZWN0ZWQgdXNlckFnZW50OlVzZXJBZ2VudDtcclxuICBzdGF0dXNNc2c6IHN0cmluZz0nJztcclxuICBzdGF0dXNBbGVydFR5cGUhOiBzdHJpbmc7XHJcbiAgc3RhdHVzV2FpdGluZzogYm9vbGVhbj1mYWxzZTtcclxuICByZWFkb25seT1mYWxzZTtcclxuICBwcm90ZWN0ZWQgcmZVdWlkOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgcHJvY2Vzc2luZ1JlY29yZGluZz1mYWxzZTtcclxuICBhYzogQXVkaW9DYXB0dXJlfG51bGw9bnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIF93YWtlTG9jazpib29sZWFuPWZhbHNlO1xyXG4gIC8vIFByb3BlcnR5IGF1ZGlvRGV2aWNlcyBmcm9tIHByb2plY3QgY29uZmlnOiBsaXN0IG9mIG5hbWVzIG9mIGFsbG93ZWQgYXVkaW8gZGV2aWNlcy5cclxuICBwcm90ZWN0ZWQgX2F1ZGlvRGV2aWNlczogQXJyYXk8QXVkaW9EZXZpY2U+IHwgbnVsbHwgdW5kZWZpbmVkO1xyXG4gIHByb3RlY3RlZCBfc2VsZWN0ZWREZXZpY2VJZDpzdHJpbmd8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgc2VsQ2FwdHVyZURldmljZUlkOiBDb25zdHJhaW5ET01TdHJpbmcgfCBudWxsO1xyXG4gIHByb3RlY3RlZCBfY2hhbm5lbENvdW50ID0gMjtcclxuICBwcm90ZWN0ZWQgX2F1dG9HYWluQ29udHJvbENvbmZpZ3M6IEFycmF5PEF1dG9HYWluQ29udHJvbENvbmZpZz4gfCBudWxsfCB1bmRlZmluZWQ7XHJcblxyXG4gIF9zZXNzaW9uOiBTZXNzaW9ufG51bGw9bnVsbDtcclxuXHJcbiAgdHJhbnNwb3J0QWN0aW9uczogVHJhbnNwb3J0QWN0aW9ucztcclxuICBwbGF5U3RhcnRBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuXHJcbiAgcHJvdGVjdGVkIHN0YXJ0ZWREYXRlOkRhdGV8bnVsbD1udWxsO1xyXG5cclxuICB1cGxvYWRQcm9ncmVzczogbnVtYmVyID0gMTAwO1xyXG4gIHVwbG9hZFN0YXR1czogc3RyaW5nID0gJ29rJ1xyXG4gIGF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuXHJcbiAgcHJvdGVjdGVkIHN0cmVhbUxldmVsTWVhc3VyZTogU3RyZWFtTGV2ZWxNZWFzdXJlO1xyXG4gIHByb3RlY3RlZCBsZXZlbE1lYXN1cmU6IExldmVsTWVhc3VyZTtcclxuICBwZWFrTGV2ZWxJbkRiOm51bWJlcj1NSU5fREJfTEVWRUw7XHJcbiAgcHJvdGVjdGVkIF9jb250cm9sQXVkaW9QbGF5ZXIhOiBBdWRpb1BsYXllcjtcclxuICBkaXNwbGF5QXVkaW9DbGlwOiBBdWRpb0NsaXAgfCBudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIGF1ZGlvRmV0Y2hTdWJzY3JpcHRpb246U3Vic2NyaXB0aW9ufG51bGw9bnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIGRlc3Ryb3llZD1mYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIG5hdmlnYXRpb25EaXNhYmxlZD10cnVlO1xyXG5cclxuICAvLyBEZWZhdWx0OiBEaXNhYmxlZCBjaHVua2VkIHVwbG9hZFxyXG4gIHByaXZhdGUgX3VwbG9hZENodW5rU2l6ZVNlY29uZHM6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIF9zY3JlZW5Mb2NrZWQ9ZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgd2FrZUxvY2tNYW5hZ2VyPzpXYWtlTG9ja01hbmFnZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOiBTcGVlY2hSZWNvcmRlclVwbG9hZGVyLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHB1YmxpYyBjb25maWc/OiBTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG4gICAgdGhpcy51c2VyQWdlbnQ9VXNlckFnZW50QnVpbGRlci51c2VyQWdlbnQoKTtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJEZXRlY3RlZCBwbGF0Zm9ybTogXCIrdGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRQbGF0Zm9ybSk7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiRGV0ZWN0ZWQgYnJvd3NlcjogXCIrdGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyKTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucyA9IG5ldyBUcmFuc3BvcnRBY3Rpb25zKCk7XHJcbiAgICB0aGlzLnBsYXlTdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1BsYXknKTtcclxuICAgIHRoaXMubGV2ZWxNZWFzdXJlID0gbmV3IExldmVsTWVhc3VyZSgpO1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUgPSBuZXcgU3RyZWFtTGV2ZWxNZWFzdXJlKCk7XHJcbiAgICB0aGlzLnNlbENhcHR1cmVEZXZpY2VJZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgd2FrZUxvY2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2FrZUxvY2s7XHJcbiAgfVxyXG5cclxuICBzZXQgd2FrZUxvY2sodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3dha2VMb2NrID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBlbmFibGVXYWtlTG9ja0NvbmQoKXtcclxuICAgIGlmKHRoaXMud2FrZUxvY2s9PT10cnVlKSB7XHJcbiAgICAgIGlmKCF0aGlzLndha2VMb2NrTWFuYWdlcil7XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXI9bmV3IFdha2VMb2NrTWFuYWdlcigpO1xyXG4gICAgICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyLmJlaGF2aW9yU3ViamVjdC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAodikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NjcmVlbkxvY2tlZCA9IHY7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldha2UgbG9jayBlcnJvciFcIilcclxuICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5Mb2NrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXIuZW5hYmxlV2FrZUxvY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVXYWtlTG9ja0NvbmQoKXtcclxuICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyPy5kaXNhYmxlV2FrZUxvY2soKTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JlZW5Mb2NrZWQoKXtcclxuICAgIHJldHVybiB0aGlzLl9zY3JlZW5Mb2NrZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgYXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlczogQXJyYXk8QXVkaW9EZXZpY2U+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYXVkaW9EZXZpY2VzID0gYXVkaW9EZXZpY2VzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGF1dG9HYWluQ29udHJvbENvbmZpZ3MoYXV0b0dhaW5Db250cm9sQ29uZmlnczogQXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPnxudWxsfHVuZGVmaW5lZCl7XHJcbiAgICB0aGlzLl9hdXRvR2FpbkNvbnRyb2xDb25maWdzPWF1dG9HYWluQ29udHJvbENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbENvdW50KGNoYW5uZWxDb3VudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9ufG51bGwpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlc3Npb24oKTpTZXNzaW9ufG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlYWR5Lic7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVTdHJlYW1DYXB0dXJlU3RyZWFtKCkge1xyXG4gICAgbGV0IG91dFN0cmVhbTtcclxuICAgIGlmICh0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHMpIHtcclxuICAgICAgLy8gTXVsdGlwbHkgdGhlIGNhcHR1cmUgc3RyZWFtIHRvLi4uXHJcbiAgICAgIGxldCBzYXNtID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtTXVsdGlwbGllcigpO1xyXG5cclxuICAgICAgLy8gLi4udXBsb2FkIGF1ZGlvIGRhdGEgaW4gY2h1bmtzLi4uXHJcbiAgICAgIGxldCBjaE1uZyA9IG5ldyBDaHVua01hbmFnZXIodGhpcyk7ICAvLyBUaGUgY2h1bmsgbWFuYWdlciBjb25uZWN0cyB0aGUgY2h1bmtlZCBhdWRpbyBzdHJlYW0gdG8gdGhpcyBjbGFzcyB0byB1cGxvYWQgdGhlIGNodW5rc1xyXG4gICAgICBsZXQgY2hPc1VwbG9hZCA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0oY2hNbmcsIHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcyk7IC8vIFRoZSBhdWRpbyBzdHJlYW0gY2h1bmtlciBpdHNlbGZcclxuICAgICAgc2FzbS5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMucHVzaChjaE9zVXBsb2FkKTtcclxuXHJcbiAgICAgIC8vIC4uLmFuZCB0byBtZWFzdXJlIHRoZSBsZXZlbFxyXG4gICAgICBsZXQgY2hPc0x2bE1lYXMgPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtKHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMpXHJcbiAgICAgIHNhc20uc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zLnB1c2goY2hPc0x2bE1lYXMpO1xyXG5cclxuICAgICAgb3V0U3RyZWFtID0gc2FzbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dFN0cmVhbSA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0odGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUyk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuYXVkaW9PdXRTdHJlYW0gPSBvdXRTdHJlYW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnU3RhcnRpbmcgc2Vzc2lvbi4uLic7XHJcbiAgICB0aGlzLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnNlYWxlZCkge1xyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBzZWFsZWQhJztcclxuICAgICAgICAvL2xldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlc3Npb25TZWFsZWREaWFsb2csIHt9KTtcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogXCJUaGlzIHNlc3Npb24gaXMgc2VhbGVkLiBSZWNvcmRpbmdzIGNhbm5vdCBiZSBhZGRlZCBhbnltb3JlLlwiLFxyXG4gICAgICAgICAgICBhZHZpc2U6ICdQbGVhc2UgYXNrIHlvdXIgZXhwZXJpbWVudGVyIHdoYXQgdG8gZG8gKGUuZyBzdGFydCBhIG5ldyBzZXNzaW9uKS4nLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5zdGF0dXMgPT09IFwiQ1JFQVRFRFwiKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiTE9BREVEXCI7XHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLmxvYWRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5sb2FkZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnJlc3RhcnRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgYm9keS5yZXN0YXJ0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5yZXN0YXJ0ZWREYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBicm93c2VyIGNvbXBhdGliaWxpdHlcclxuICAgIGlmKHRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuU2FmYXJpICYmIHRoaXMuX2NoYW5uZWxDb3VudD4xKXtcclxuICAgICAgbGV0IGVNc2c9XCJFcnJvcjogU2FmYXJpIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzdGVyZW8gcmVjb3JkaW5ncy5cIjtcclxuICAgICAgY29uc29sZS5lcnJvcihlTXNnKTtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnQnJvd3NlciBub3Qgc3VwcG9ydGVkJyxcclxuICAgICAgICAgIG1zZzogZU1zZyxcclxuICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIsIGUuZy4gTW96aWxsYSBGaXJlZm94LlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJTZXNzaW9uIElEOiBcIit0aGlzLl9zZXNzaW9uLnNlc3Npb24rIFwiIHN0YXR1czogXCIrdGhpcy5fc2Vzc2lvbi5zdGF0dXMpXHJcbiAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkPXVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5hYyAmJiAoRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUyB8fCAodGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSkpIHtcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVxdWVzdGluZyBhdWRpbyBwZXJtaXNzaW9ucy4uLic7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG5cclxuICAgICAgdGhpcy5hYy5kZXZpY2VJbmZvcygobWRpcykgPT4ge1xyXG4gICAgICAgIGxldCBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBhdWRpb1BsYXlEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChtZGlzKSB7XHJcbiAgICAgICAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWMucHJpbnREZXZpY2VzKG1kaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1kaXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbWRpID0gbWRpc1ttZGlpXTtcclxuICAgICAgICAgICAgICBsZXQga2luZD1tZGkua2luZDtcclxuICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKGtpbmQ9PT0gXCJhdWRpb291dHB1dFwiKXtcclxuICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgdGhpcy5fc2Vzc2lvbi50eXBlICE9PSAnVEVTVF9ERUZfQScgJiYgdGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBmZGk6IE1lZGlhRGV2aWNlSW5mbyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBhZEkgPSAwOyBhZEkgPCB0aGlzLl9hdWRpb0RldmljZXMubGVuZ3RoOyBhZEkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBhZCA9IHRoaXMuX2F1ZGlvRGV2aWNlc1thZEldO1xyXG4gICAgICAgICAgICAgIGlmIChhZC5wbGF5YmFjaykge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJvamVjdCBhdWRpbyBkZXZpY2UgY29uZmlnIGZvciBwbGF5YmFjayBkZXZpY2VcclxuICAgICAgICAgICAgICAgIC8vIG5vdCB1c2VkIGZvciBub3dcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZGkgPSBtZGlzW21kaWldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGtpbmQ9bWRpLmtpbmQ7XHJcbiAgICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvQ2FwdHVyZURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihraW5kPT09IFwiYXVkaW9vdXRwdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWQucmVnZXgpIHtcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoPzogXFwnXCIrbWRpLmxhYmVsK1wiXFwnIFxcJ1wiK2FkLm5hbWUrXCJcXCdcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtZGkubGFiZWwubWF0Y2goYWQubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmZGkgPSBtZGk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoIVwiKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG1kaS5sYWJlbC50cmltKCkgPT09IGFkLm5hbWUudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmRpID0gbWRpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmZGkpIHtcclxuICAgICAgICAgICAgICAvLyBtYXRjaGluZyBkZXZpY2UgZm91bmRcclxuXHJcbiAgICAgICAgICAgICAgLy8gTm90IGFibGUgdG8gb3BlbiBkZXZpY2UgaGVyZSBzaW5jZSBDaHJvbWUgNzFcclxuICAgICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgICAvLyBzZXNzaW9ubWFuYWdlci50czo3MTIgT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIDEgY2hhbm5lbHNcclxuICAgICAgICAgICAgICAvLyBjYXB0dXJlLnRzOjEyOCBUaGUgQXVkaW9Db250ZXh0IHdhcyBub3QgYWxsb3dlZCB0byBzdGFydC4gSXQgbXVzdCBiZSByZXN1bWVkIChvciBjcmVhdGVkKSBhZnRlciBhIHVzZXIgZ2VzdHVyZSBvbiB0aGUgcGFnZS4gaHR0cHM6Ly9nb28uZ2wvN0s3V0x1XHJcbiAgICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG5cclxuICAgICAgICAgICAgICAvL3RoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIGZkaS5kZXZpY2VJZCk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2V0IHNlbGVjdGVkIGF1ZGlvIGRldmljZTogXFwnXCIgKyBmZGkubGFiZWwgKyBcIlxcJyBJZDogXFwnXCIgKyBmZGkuZGV2aWNlSWQgKyBcIlxcJ1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkID0gZmRpLmRldmljZUlkO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGRldmljZSBub3QgZm91bmRcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVxdWlyZWQgYXVkaW8gZGV2aWNlIG5vdCBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVpcmVkIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJSZXF1aXJlZCBhdWRpbyBkZXZpY2Ugbm90IGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhIHN1aXRhYmxlIGF1ZGlvIGRldmljZSBmb3IgdGhpcyBwcm9qZWN0IGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoIWF1ZGlvQ2FwdHVyZURldmljZUF2YWlsICYmICFhdWRpb1BsYXlEZXZpY2VBdmFpbCl7XHJcbiAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IE5vIGF1ZGlvIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICd3YXJuJztcclxuICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJObyBhdWRpbyBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICFhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBjYXB0dXJlIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm5pbmcnO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGNhcHR1cmUgZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IFwiTm8gYXVkaW8gY2FwdHVyZSBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYW4gYXVkaW8gY2FwdHVyZSBkZXZpY2UgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKSBvciB0cnkgdG8gY29udGludWUgYW55d2F5LlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIFNhZmFyaSBkb2VzIG5vdCBsaXN0IHBsYXliYWNrIGRldmljZXNcclxuICAgICAgICAgICAgICBpZiAoIWF1ZGlvUGxheURldmljZUF2YWlsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IGVudW1lcmF0ZSBhdWRpb291dHB1dCBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGlzIHdhcm5pbmcsIGJlY2F1c2UgaXQgd291bGQgYWx3YXlzIGFwcGVhciBvbiBGaXJlZm94XHJcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTg1MTIgaXMgZml4ZWQgdGhlIHdhcm5pbmcgY2FuIGJlIGVuYWJsZWQgZm9yIEZpcmVmb3ggYXMgd2VsbFxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFscmVhZHkgaW1wbGVtbmV0ZWQgYnV0IGtlcHQgYmVoaW5kIGEgcHJlZmVyZW5jZSBzZXR0aW5nIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExNTI0MDFcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IGRldmljZXMgYXJlIGxpc3RlZCBpZiBhYm91dDpjb25maWcgbWVkaWEuc2V0c2lua2lkLmVuYWJsZWQ9dHJ1ZVxyXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRlZmF1bHQgc2V0dGluZyBpcyBmYWxzZVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTYW1lIHByb2JsZW0gd2l0aCBTYWZhcmlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLlNhZmFyaSB8fCB0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLkZpcmVmb3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG5vIGRldmljZSBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm4nO1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbXNnOiBcIk5vIGF1ZGlvIHBsYXliYWNrIGRldmljZSBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIHBsYXliYWNrIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBOb3QgYWJsZSB0byBvcGVuIGRldmljZSBoZXJlIHNpbmNlIENocm9tZSA3MVxyXG4gICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgLy8gc2Vzc2lvbm1hbmFnZXIudHM6NzEyIE9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciAxIGNoYW5uZWxzXHJcbiAgICAgICAgICAgIC8vIGNhcHR1cmUudHM6MTI4IFRoZSBBdWRpb0NvbnRleHQgd2FzIG5vdCBhbGxvd2VkIHRvIHN0YXJ0LiBJdCBtdXN0IGJlIHJlc3VtZWQgKG9yIGNyZWF0ZWQpIGFmdGVyIGEgdXNlciBnZXN0dXJlIG9uIHRoZSBwYWdlLiBodHRwczovL2dvby5nbC83SzdXTHVcclxuICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiK3RoaXMuX2NoYW5uZWxDb3VudCtcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICAgICAgLy90aGlzLmFjLm9wZW4odGhpcy5fY2hhbm5lbENvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFydCBnZXN0dXJlIGFueXdheVxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRJdGVtKCkge1xyXG4gICAgdGhpcy5zdGFydGVkRGF0ZT1udWxsO1xyXG4gICAgdGhpcy5lbmFibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgIHRoaXMucmZVdWlkPVVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIC8vdGhpcy5lbmFibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgIGlmKCF0aGlzLnN0YXJ0ZWREYXRlKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwb3N0UmVjb3JkaW5nKHdhdkZpbGU6IFVpbnQ4QXJyYXksIHJlY1VybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgd2F2QmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKHdhdkJsb2IsIHJlY1VybCk7XHJcbiAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICB9XHJcblxyXG4gIHBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5yZlV1aWQpIHtcclxuICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkICsgJy9wcmVwYXJlQ2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAvLyBOb3RlOiBBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG11c3QgYmUgc2V0XHJcbiAgICAgIGZkLnNldCgndXVpZCcsdGhpcy5yZlV1aWQpO1xyXG4gICAgICBpZighdGhpcy5zdGFydGVkRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBmZC5zZXQoJ3N0YXJ0ZWREYXRlJyx0aGlzLnN0YXJ0ZWREYXRlLnRvSlNPTigpKTtcclxuXHJcbiAgICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCk7XHJcbiAgICAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWNvcmRpbmcgZmlsZSBVVUlEIG5vdCBzZXQhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIsIGNodW5rSWR4OiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICBwb3N0QXVkaW9TdHJlYW1FbmQoY2h1bmtDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgaWYodGhpcy5yZlV1aWQpIHtcclxuICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkKycvY29uY2F0Q2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZD1uZXcgRm9ybURhdGEoKTtcclxuICAgICAgZmQuc2V0KCd1dWlkJyx0aGlzLnJmVXVpZCk7XHJcbiAgICAgIGZkLnNldCgnY2h1bmtDb3VudCcsY2h1bmtDb3VudC50b1N0cmluZygpKTtcclxuICAgICAgbGV0IHVsID0gbmV3IFVwbG9hZCggZmQscmVjVXJsKTtcclxuICAgICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlJlY29yZGluZyBmaWxlIFVVSUQgbm90IHNldCFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgY2xvc2VkKCkge1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIGNsb3NlZC4nO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVjb3JkaW5nLic7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICdSZWNvcmRpbmcgZXJyb3InLFxyXG4gICAgICAgIG1zZzogbXNnLFxyXG4gICAgICAgIGFkdmljZTogYWR2aWNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
476
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNyZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBYSxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUkzRixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQW9CLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFHN0UsT0FBTyxFQUNMLG9DQUFvQyxFQUVwQyx1Q0FBdUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWxFLE1BQU0sQ0FBQyxNQUFNLCtC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QUcsSUFBSSxNQUFNLENBQUUsRUFBRSxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9CO2FBQUk7WUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUE7U0FDOUM7SUFDSCxDQUFDO0lBSUQsTUFBTTtRQUNKLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLEdBQUMsNENBQTRDLEVBQUMsU0FBYyxlQUFlO1FBQ2xGLElBQUksQ0FBQyxTQUFTLEdBQUcsbUJBQW1CLENBQUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzlCLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsT0FBTztnQkFDYixLQUFLLEVBQUUsaUJBQWlCO2dCQUN4QixHQUFHLEVBQUUsR0FBRztnQkFDUixNQUFNLEVBQUUsTUFBTTthQUNmO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUVGLENBQUE7QUE1Y3dCLHdDQUEwQixHQUFDLEVBQUcsQ0FBQTtBQVpqQyxhQUFhO0lBK0RsQixXQUFBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0dBL0R4QixhQUFhLENBd2RsQztTQXhkcUIsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNwb3J0QWN0aW9uc30gZnJvbSBcIi4vY29udHJvbHBhbmVsXCI7XHJcbmltcG9ydCB7QnJvd3NlciwgVXNlckFnZW50LCBVc2VyQWdlbnRCdWlsZGVyfSBmcm9tIFwiLi4vLi4vdXRpbHMvdWEtcGFyc2VyXCI7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7TWVzc2FnZURpYWxvZ30gZnJvbSBcIi4uLy4uL3VpL21lc3NhZ2VfZGlhbG9nXCI7XHJcbmltcG9ydCB7U2Vzc2lvbn0gZnJvbSBcIi4vc2Vzc2lvblwiO1xyXG5pbXBvcnQge1Nlc3Npb25TZXJ2aWNlfSBmcm9tIFwiLi9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdWRpb0NhcHR1cmV9IGZyb20gXCIuLi8uLi9hdWRpby9jYXB0dXJlL2NhcHR1cmVcIjtcclxuaW1wb3J0IHtBdWRpb0RldmljZSwgQXV0b0dhaW5Db250cm9sQ29uZmlnfSBmcm9tIFwiLi4vcHJvamVjdC9wcm9qZWN0XCI7XHJcbmltcG9ydCB7TGV2ZWxJbmZvcywgTGV2ZWxNZWFzdXJlLCBTdHJlYW1MZXZlbE1lYXN1cmV9IGZyb20gXCIuLi8uLi9hdWRpby9kc3AvbGV2ZWxfbWVhc3VyZVwiO1xyXG5pbXBvcnQge0F1ZGlvUGxheWVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGxheWJhY2svcGxheWVyXCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcH0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BlcnNpc3RvclwiO1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uLy4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtNSU5fREJfTEVWRUx9IGZyb20gXCIuLi8uLi91aS9yZWNvcmRpbmdpdGVtX2Rpc3BsYXlcIjtcclxuaW1wb3J0IHtVcGxvYWR9IGZyb20gXCIuLi8uLi9uZXQvdXBsb2FkZXJcIjtcclxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4uL3NwcnVwbG9hZGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbSxcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSxcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbU11bHRpcGxpZXJcclxufSBmcm9tIFwiLi4vLi4vYXVkaW8vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7U3ByUmVjb3JkaW5nRmlsZX0gZnJvbSBcIi4uL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vY29udGV4dFwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge1dha2VMb2NrTWFuYWdlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3dha2VfbG9ja1wiO1xyXG5pbXBvcnQge1Jlc3BvbnNpdmVDb21wb25lbnR9IGZyb20gXCIuLi8uLi91aS9yZXNwb25zaXZlX2NvbXBvbmVudFwiO1xyXG5pbXBvcnQge0JyZWFrcG9pbnRPYnNlcnZlcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9sYXlvdXRcIjtcclxuZXhwb3J0IGNvbnN0IEZPUkNFX1JFUVVFU1RfQVVESU9fUEVSTUlTU0lPTlM9ZmFsc2U7XHJcbmV4cG9ydCBjb25zdCBSRUNGSUxFX0FQSV9DVFggPSAncmVjZmlsZSc7XHJcbmV4cG9ydCBjb25zdCBNQVhfUkVDT1JESU5HX1RJTUVfTVMgPSAxMDAwICogNjAgKiA2MCAqIDYwOyAvLyAxIGhvdXJcclxuXHJcbmV4cG9ydCBjb25zdCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMgPSAwLjE7ICAvLyAxMDBtc1xyXG5cclxuZXhwb3J0IGNvbnN0IE5PU0xFRVBfVklERU9fVElUTEU9J05vIFNsZWVwJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVye1xyXG4gIHBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk6dm9pZDtcclxuICBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcixjaHVua0lkeDpudW1iZXIpOnZvaWQ7XHJcbiAgcG9zdEF1ZGlvU3RyZWFtRW5kKGNodW5rQ291bnQ6bnVtYmVyKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2h1bmtNYW5hZ2VyIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW17XHJcblxyXG4gIHNldCByZWNvcmRpbmdGaWxlKHZhbHVlOiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICB0aGlzLl9yZiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFubmVsczpudW1iZXI9MDtcclxuICBwcml2YXRlIHNhbXBsZVJhdGU6bnVtYmVyPS0xO1xyXG5cclxuICBwcml2YXRlIF9yZiE6U3ByUmVjb3JkaW5nRmlsZTtcclxuXHJcbiAgcHJpdmF0ZSBjaHVua0lkeDpudW1iZXI9MDtcclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNodW5rQXVkaW9CdWZmZXJSZWNlaXZlcjpDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgLy8gTm90aGluZyB0byBkb1xyXG4gIH1cclxuXHJcbiAgZmx1c2goKTogdm9pZCB7XHJcbiAgICB0aGlzLmNodW5rQXVkaW9CdWZmZXJSZWNlaXZlci5wb3N0QXVkaW9TdHJlYW1FbmQodGhpcy5jaHVua0lkeCk7XHJcbiAgfVxyXG5cclxuICBuZXh0U3RyZWFtKCk6IHZvaWQge1xyXG4gICAgLy8gcmVzZXQgY2h1bmsgY291bnRlclxyXG4gICAgdGhpcy5jaHVua0lkeD0wO1xyXG4gICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdEF1ZGlvU3RyZWFtU3RhcnQoKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1hdChjaGFubmVsczogbnVtYmVyLCBzYW1wbGVSYXRlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbm5lbHM9Y2hhbm5lbHM7XHJcbiAgICB0aGlzLnNhbXBsZVJhdGU9c2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIHdyaXRlKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IGFDdHg9QXVkaW9Db250ZXh0UHJvdmlkZXIuYXVkaW9Db250ZXh0SW5zdGFuY2UoKTtcclxuICAgIGxldCBiQ2hzPWJ1ZmZlcnMubGVuZ3RoO1xyXG4gICAgbGV0IGZyYW1lTGVuPTA7XHJcbiAgICBpZihhQ3R4ICYmIGJDaHM+MCkge1xyXG4gICAgICBmcmFtZUxlbj1idWZmZXJzWzBdLmxlbmd0aDtcclxuICAgICAgbGV0IGFkID0gYUN0eC5jcmVhdGVCdWZmZXIodGhpcy5jaGFubmVscywgZnJhbWVMZW4sIHRoaXMuc2FtcGxlUmF0ZSk7XHJcbiAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxzOyBjaCsrKSB7XHJcbiAgICAgICAgYWQuY29weVRvQ2hhbm5lbChidWZmZXJzW2NoXSxjaCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdENodW5rQXVkaW9CdWZmZXIoYWQsdGhpcy5jaHVua0lkeCk7XHJcbiAgICAgIHRoaXMuY2h1bmtJZHgrKztcclxuICAgIH1cclxuICAgIHJldHVybiBmcmFtZUxlbjtcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzaWNSZWNvcmRlciAgZXh0ZW5kcyBSZXNwb25zaXZlQ29tcG9uZW50e1xyXG4gIGdldCB1cGxvYWRDaHVua1NpemVTZWNvbmRzKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VwbG9hZENodW5rU2l6ZVNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgdXBsb2FkQ2h1bmtTaXplU2Vjb25kcyh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgbGV0IG9sZFZhbHVlPXRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcztcclxuICAgIHRoaXMuX3VwbG9hZENodW5rU2l6ZVNlY29uZHMgPSB2YWx1ZTtcclxuICAgIGlmKHZhbHVlIT09b2xkVmFsdWUpe1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUz0zMDtcclxuICBwcm90ZWN0ZWQgdXNlckFnZW50OlVzZXJBZ2VudDtcclxuICBzdGF0dXNNc2c6IHN0cmluZz0nJztcclxuICBzdGF0dXNBbGVydFR5cGUhOiBzdHJpbmc7XHJcbiAgc3RhdHVzV2FpdGluZzogYm9vbGVhbj1mYWxzZTtcclxuICByZWFkb25seT1mYWxzZTtcclxuICBwcm90ZWN0ZWQgcmZVdWlkOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgcHJvY2Vzc2luZ1JlY29yZGluZz1mYWxzZTtcclxuICBhYzogQXVkaW9DYXB0dXJlfG51bGw9bnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIF93YWtlTG9jazpib29sZWFuPWZhbHNlO1xyXG4gIC8vIFByb3BlcnR5IGF1ZGlvRGV2aWNlcyBmcm9tIHByb2plY3QgY29uZmlnOiBsaXN0IG9mIG5hbWVzIG9mIGFsbG93ZWQgYXVkaW8gZGV2aWNlcy5cclxuICBwcm90ZWN0ZWQgX2F1ZGlvRGV2aWNlczogQXJyYXk8QXVkaW9EZXZpY2U+IHwgbnVsbHwgdW5kZWZpbmVkO1xyXG4gIHByb3RlY3RlZCBfc2VsZWN0ZWREZXZpY2VJZDpzdHJpbmd8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgc2VsQ2FwdHVyZURldmljZUlkOiBDb25zdHJhaW5ET01TdHJpbmcgfCBudWxsO1xyXG4gIHByb3RlY3RlZCBfY2hhbm5lbENvdW50ID0gMjtcclxuICBwcm90ZWN0ZWQgX2F1dG9HYWluQ29udHJvbENvbmZpZ3M6IEFycmF5PEF1dG9HYWluQ29udHJvbENvbmZpZz4gfCBudWxsfCB1bmRlZmluZWQ7XHJcblxyXG4gIF9zZXNzaW9uOiBTZXNzaW9ufG51bGw9bnVsbDtcclxuXHJcbiAgdHJhbnNwb3J0QWN0aW9uczogVHJhbnNwb3J0QWN0aW9ucztcclxuICBwbGF5U3RhcnRBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuXHJcbiAgcHJvdGVjdGVkIHN0YXJ0ZWREYXRlOkRhdGV8bnVsbD1udWxsO1xyXG5cclxuICB1cGxvYWRQcm9ncmVzczogbnVtYmVyID0gMTAwO1xyXG4gIHVwbG9hZFN0YXR1czogc3RyaW5nID0gJ29rJ1xyXG4gIGF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuXHJcbiAgcHJvdGVjdGVkIHN0cmVhbUxldmVsTWVhc3VyZTogU3RyZWFtTGV2ZWxNZWFzdXJlO1xyXG4gIHByb3RlY3RlZCBsZXZlbE1lYXN1cmU6IExldmVsTWVhc3VyZTtcclxuICBwZWFrTGV2ZWxJbkRiOm51bWJlcj1NSU5fREJfTEVWRUw7XHJcbiAgcHJvdGVjdGVkIF9jb250cm9sQXVkaW9QbGF5ZXI6IEF1ZGlvUGxheWVyfG51bGw9bnVsbDtcclxuICBkaXNwbGF5QXVkaW9DbGlwOiBBdWRpb0NsaXAgfCBudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIGF1ZGlvRmV0Y2hTdWJzY3JpcHRpb246U3Vic2NyaXB0aW9ufG51bGw9bnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIGRlc3Ryb3llZD1mYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIG5hdmlnYXRpb25EaXNhYmxlZD10cnVlO1xyXG5cclxuICAvLyBEZWZhdWx0OiBEaXNhYmxlZCBjaHVua2VkIHVwbG9hZFxyXG4gIHByaXZhdGUgX3VwbG9hZENodW5rU2l6ZVNlY29uZHM6bnVtYmVyfG51bGw9bnVsbDtcclxuXHJcbiAgcHJvdGVjdGVkIF9zY3JlZW5Mb2NrZWQ9ZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgd2FrZUxvY2tNYW5hZ2VyPzpXYWtlTG9ja01hbmFnZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBicG86QnJlYWtwb2ludE9ic2VydmVyLHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2Vzc2lvblNlcnZpY2U6U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgdXBsb2FkZXI6IFNwZWVjaFJlY29yZGVyVXBsb2FkZXIsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KFNQRUVDSFJFQ09SREVSX0NPTkZJRykgcHVibGljIGNvbmZpZz86IFNwZWVjaFJlY29yZGVyQ29uZmlnKSB7XHJcbiAgICBzdXBlcihicG8pO1xyXG4gICAgdGhpcy51c2VyQWdlbnQ9VXNlckFnZW50QnVpbGRlci51c2VyQWdlbnQoKTtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJEZXRlY3RlZCBwbGF0Zm9ybTogXCIrdGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRQbGF0Zm9ybSk7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwiRGV0ZWN0ZWQgYnJvd3NlcjogXCIrdGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyKTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucyA9IG5ldyBUcmFuc3BvcnRBY3Rpb25zKCk7XHJcbiAgICB0aGlzLnBsYXlTdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1BsYXknKTtcclxuICAgIHRoaXMubGV2ZWxNZWFzdXJlID0gbmV3IExldmVsTWVhc3VyZSgpO1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUgPSBuZXcgU3RyZWFtTGV2ZWxNZWFzdXJlKCk7XHJcbiAgICB0aGlzLnNlbENhcHR1cmVEZXZpY2VJZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgd2FrZUxvY2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2FrZUxvY2s7XHJcbiAgfVxyXG5cclxuICBzZXQgd2FrZUxvY2sodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3dha2VMb2NrID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBlbmFibGVXYWtlTG9ja0NvbmQoKXtcclxuICAgIGlmKHRoaXMud2FrZUxvY2s9PT10cnVlKSB7XHJcbiAgICAgIGlmKCF0aGlzLndha2VMb2NrTWFuYWdlcil7XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXI9bmV3IFdha2VMb2NrTWFuYWdlcigpO1xyXG4gICAgICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyLmJlaGF2aW9yU3ViamVjdC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAodikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NjcmVlbkxvY2tlZCA9IHY7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldha2UgbG9jayBlcnJvciFcIilcclxuICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5Mb2NrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXIuZW5hYmxlV2FrZUxvY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVXYWtlTG9ja0NvbmQoKXtcclxuICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyPy5kaXNhYmxlV2FrZUxvY2soKTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JlZW5Mb2NrZWQoKXtcclxuICAgIHJldHVybiB0aGlzLl9zY3JlZW5Mb2NrZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgYXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlczogQXJyYXk8QXVkaW9EZXZpY2U+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYXVkaW9EZXZpY2VzID0gYXVkaW9EZXZpY2VzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGF1dG9HYWluQ29udHJvbENvbmZpZ3MoYXV0b0dhaW5Db250cm9sQ29uZmlnczogQXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPnxudWxsfHVuZGVmaW5lZCl7XHJcbiAgICB0aGlzLl9hdXRvR2FpbkNvbnRyb2xDb25maWdzPWF1dG9HYWluQ29udHJvbENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbENvdW50KGNoYW5uZWxDb3VudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9ufG51bGwpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlc3Npb24oKTpTZXNzaW9ufG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlYWR5Lic7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVTdHJlYW1DYXB0dXJlU3RyZWFtKCkge1xyXG4gICAgbGV0IG91dFN0cmVhbTtcclxuICAgIGlmICh0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHMpIHtcclxuICAgICAgLy8gTXVsdGlwbHkgdGhlIGNhcHR1cmUgc3RyZWFtIHRvLi4uXHJcbiAgICAgIGxldCBzYXNtID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtTXVsdGlwbGllcigpO1xyXG5cclxuICAgICAgLy8gLi4udXBsb2FkIGF1ZGlvIGRhdGEgaW4gY2h1bmtzLi4uXHJcbiAgICAgIGxldCBjaE1uZyA9IG5ldyBDaHVua01hbmFnZXIodGhpcyk7ICAvLyBUaGUgY2h1bmsgbWFuYWdlciBjb25uZWN0cyB0aGUgY2h1bmtlZCBhdWRpbyBzdHJlYW0gdG8gdGhpcyBjbGFzcyB0byB1cGxvYWQgdGhlIGNodW5rc1xyXG4gICAgICBsZXQgY2hPc1VwbG9hZCA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0oY2hNbmcsIHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcyk7IC8vIFRoZSBhdWRpbyBzdHJlYW0gY2h1bmtlciBpdHNlbGZcclxuICAgICAgc2FzbS5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMucHVzaChjaE9zVXBsb2FkKTtcclxuXHJcbiAgICAgIC8vIC4uLmFuZCB0byBtZWFzdXJlIHRoZSBsZXZlbFxyXG4gICAgICBsZXQgY2hPc0x2bE1lYXMgPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtKHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMpXHJcbiAgICAgIHNhc20uc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zLnB1c2goY2hPc0x2bE1lYXMpO1xyXG5cclxuICAgICAgb3V0U3RyZWFtID0gc2FzbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dFN0cmVhbSA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0odGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUyk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuYXVkaW9PdXRTdHJlYW0gPSBvdXRTdHJlYW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnU3RhcnRpbmcgc2Vzc2lvbi4uLic7XHJcbiAgICB0aGlzLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnNlYWxlZCkge1xyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBzZWFsZWQhJztcclxuICAgICAgICAvL2xldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlc3Npb25TZWFsZWREaWFsb2csIHt9KTtcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogXCJUaGlzIHNlc3Npb24gaXMgc2VhbGVkLiBSZWNvcmRpbmdzIGNhbm5vdCBiZSBhZGRlZCBhbnltb3JlLlwiLFxyXG4gICAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgYXNrIHlvdXIgZXhwZXJpbWVudGVyIHdoYXQgdG8gZG8gKGUuZyBzdGFydCBhIG5ldyBzZXNzaW9uKS4nLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5zdGF0dXMgPT09IFwiQ1JFQVRFRFwiKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiTE9BREVEXCI7XHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLmxvYWRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5sb2FkZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnJlc3RhcnRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgYm9keS5yZXN0YXJ0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5yZXN0YXJ0ZWREYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBicm93c2VyIGNvbXBhdGliaWxpdHlcclxuICAgIGlmKHRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuU2FmYXJpICYmIHRoaXMuX2NoYW5uZWxDb3VudD4xKXtcclxuICAgICAgbGV0IGVNc2c9XCJFcnJvcjogU2FmYXJpIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzdGVyZW8gcmVjb3JkaW5ncy5cIjtcclxuICAgICAgY29uc29sZS5lcnJvcihlTXNnKTtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnQnJvd3NlciBub3Qgc3VwcG9ydGVkJyxcclxuICAgICAgICAgIG1zZzogZU1zZyxcclxuICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIsIGUuZy4gTW96aWxsYSBGaXJlZm94LlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJTZXNzaW9uIElEOiBcIit0aGlzLl9zZXNzaW9uLnNlc3Npb24rIFwiIHN0YXR1czogXCIrdGhpcy5fc2Vzc2lvbi5zdGF0dXMpXHJcbiAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkPXVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5hYyAmJiAoRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUyB8fCAodGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSkpIHtcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVxdWVzdGluZyBhdWRpbyBwZXJtaXNzaW9ucy4uLic7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG5cclxuICAgICAgdGhpcy5hYy5kZXZpY2VJbmZvcygobWRpcykgPT4ge1xyXG4gICAgICAgIGxldCBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBhdWRpb1BsYXlEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChtZGlzKSB7XHJcbiAgICAgICAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWMucHJpbnREZXZpY2VzKG1kaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1kaXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbWRpID0gbWRpc1ttZGlpXTtcclxuICAgICAgICAgICAgICBsZXQga2luZD1tZGkua2luZDtcclxuICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKGtpbmQ9PT0gXCJhdWRpb291dHB1dFwiKXtcclxuICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgdGhpcy5fc2Vzc2lvbi50eXBlICE9PSAnVEVTVF9ERUZfQScgJiYgdGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBmZGk6IE1lZGlhRGV2aWNlSW5mbyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBhZEkgPSAwOyBhZEkgPCB0aGlzLl9hdWRpb0RldmljZXMubGVuZ3RoOyBhZEkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBhZCA9IHRoaXMuX2F1ZGlvRGV2aWNlc1thZEldO1xyXG4gICAgICAgICAgICAgIGlmIChhZC5wbGF5YmFjaykge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJvamVjdCBhdWRpbyBkZXZpY2UgY29uZmlnIGZvciBwbGF5YmFjayBkZXZpY2VcclxuICAgICAgICAgICAgICAgIC8vIG5vdCB1c2VkIGZvciBub3dcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZGkgPSBtZGlzW21kaWldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGtpbmQ9bWRpLmtpbmQ7XHJcbiAgICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvQ2FwdHVyZURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihraW5kPT09IFwiYXVkaW9vdXRwdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWQucmVnZXgpIHtcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoPzogXFwnXCIrbWRpLmxhYmVsK1wiXFwnIFxcJ1wiK2FkLm5hbWUrXCJcXCdcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtZGkubGFiZWwubWF0Y2goYWQubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmZGkgPSBtZGk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoIVwiKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG1kaS5sYWJlbC50cmltKCkgPT09IGFkLm5hbWUudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmRpID0gbWRpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmZGkpIHtcclxuICAgICAgICAgICAgICAvLyBtYXRjaGluZyBkZXZpY2UgZm91bmRcclxuXHJcbiAgICAgICAgICAgICAgLy8gTm90IGFibGUgdG8gb3BlbiBkZXZpY2UgaGVyZSBzaW5jZSBDaHJvbWUgNzFcclxuICAgICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgICAvLyBzZXNzaW9ubWFuYWdlci50czo3MTIgT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIDEgY2hhbm5lbHNcclxuICAgICAgICAgICAgICAvLyBjYXB0dXJlLnRzOjEyOCBUaGUgQXVkaW9Db250ZXh0IHdhcyBub3QgYWxsb3dlZCB0byBzdGFydC4gSXQgbXVzdCBiZSByZXN1bWVkIChvciBjcmVhdGVkKSBhZnRlciBhIHVzZXIgZ2VzdHVyZSBvbiB0aGUgcGFnZS4gaHR0cHM6Ly9nb28uZ2wvN0s3V0x1XHJcbiAgICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG5cclxuICAgICAgICAgICAgICAvL3RoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIGZkaS5kZXZpY2VJZCk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2V0IHNlbGVjdGVkIGF1ZGlvIGRldmljZTogXFwnXCIgKyBmZGkubGFiZWwgKyBcIlxcJyBJZDogXFwnXCIgKyBmZGkuZGV2aWNlSWQgKyBcIlxcJ1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkID0gZmRpLmRldmljZUlkO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGRldmljZSBub3QgZm91bmRcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVxdWlyZWQgYXVkaW8gZGV2aWNlIG5vdCBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVpcmVkIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJSZXF1aXJlZCBhdWRpbyBkZXZpY2Ugbm90IGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhIHN1aXRhYmxlIGF1ZGlvIGRldmljZSBmb3IgdGhpcyBwcm9qZWN0IGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoIWF1ZGlvQ2FwdHVyZURldmljZUF2YWlsICYmICFhdWRpb1BsYXlEZXZpY2VBdmFpbCl7XHJcbiAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IE5vIGF1ZGlvIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICd3YXJuJztcclxuICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJObyBhdWRpbyBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICFhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBjYXB0dXJlIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm5pbmcnO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGNhcHR1cmUgZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IFwiTm8gYXVkaW8gY2FwdHVyZSBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYW4gYXVkaW8gY2FwdHVyZSBkZXZpY2UgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKSBvciB0cnkgdG8gY29udGludWUgYW55d2F5LlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIFNhZmFyaSBkb2VzIG5vdCBsaXN0IHBsYXliYWNrIGRldmljZXNcclxuICAgICAgICAgICAgICBpZiAoIWF1ZGlvUGxheURldmljZUF2YWlsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IGVudW1lcmF0ZSBhdWRpb291dHB1dCBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGlzIHdhcm5pbmcsIGJlY2F1c2UgaXQgd291bGQgYWx3YXlzIGFwcGVhciBvbiBGaXJlZm94XHJcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTg1MTIgaXMgZml4ZWQgdGhlIHdhcm5pbmcgY2FuIGJlIGVuYWJsZWQgZm9yIEZpcmVmb3ggYXMgd2VsbFxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFscmVhZHkgaW1wbGVtbmV0ZWQgYnV0IGtlcHQgYmVoaW5kIGEgcHJlZmVyZW5jZSBzZXR0aW5nIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExNTI0MDFcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IGRldmljZXMgYXJlIGxpc3RlZCBpZiBhYm91dDpjb25maWcgbWVkaWEuc2V0c2lua2lkLmVuYWJsZWQ9dHJ1ZVxyXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRlZmF1bHQgc2V0dGluZyBpcyBmYWxzZVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTYW1lIHByb2JsZW0gd2l0aCBTYWZhcmlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLlNhZmFyaSB8fCB0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLkZpcmVmb3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG5vIGRldmljZSBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm4nO1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbXNnOiBcIk5vIGF1ZGlvIHBsYXliYWNrIGRldmljZSBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIHBsYXliYWNrIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBOb3QgYWJsZSB0byBvcGVuIGRldmljZSBoZXJlIHNpbmNlIENocm9tZSA3MVxyXG4gICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgLy8gc2Vzc2lvbm1hbmFnZXIudHM6NzEyIE9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciAxIGNoYW5uZWxzXHJcbiAgICAgICAgICAgIC8vIGNhcHR1cmUudHM6MTI4IFRoZSBBdWRpb0NvbnRleHQgd2FzIG5vdCBhbGxvd2VkIHRvIHN0YXJ0LiBJdCBtdXN0IGJlIHJlc3VtZWQgKG9yIGNyZWF0ZWQpIGFmdGVyIGEgdXNlciBnZXN0dXJlIG9uIHRoZSBwYWdlLiBodHRwczovL2dvby5nbC83SzdXTHVcclxuICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiK3RoaXMuX2NoYW5uZWxDb3VudCtcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICAgICAgLy90aGlzLmFjLm9wZW4odGhpcy5fY2hhbm5lbENvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFydCBnZXN0dXJlIGFueXdheVxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRJdGVtKCkge1xyXG4gICAgdGhpcy5zdGFydGVkRGF0ZT1udWxsO1xyXG4gICAgdGhpcy5lbmFibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgIHRoaXMucmZVdWlkPVVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIC8vdGhpcy5lbmFibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgIGlmKCF0aGlzLnN0YXJ0ZWREYXRlKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwb3N0UmVjb3JkaW5nKHdhdkZpbGU6IFVpbnQ4QXJyYXksIHJlY1VybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgd2F2QmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKHdhdkJsb2IsIHJlY1VybCk7XHJcbiAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICB9XHJcblxyXG4gIHBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5yZlV1aWQpIHtcclxuICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkICsgJy9wcmVwYXJlQ2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAvLyBOb3RlOiBBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG11c3QgYmUgc2V0XHJcbiAgICAgIGZkLnNldCgndXVpZCcsdGhpcy5yZlV1aWQpO1xyXG4gICAgICBpZighdGhpcy5zdGFydGVkRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBmZC5zZXQoJ3N0YXJ0ZWREYXRlJyx0aGlzLnN0YXJ0ZWREYXRlLnRvSlNPTigpKTtcclxuXHJcbiAgICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCk7XHJcbiAgICAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWNvcmRpbmcgZmlsZSBVVUlEIG5vdCBzZXQhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIsIGNodW5rSWR4OiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICBwb3N0QXVkaW9TdHJlYW1FbmQoY2h1bmtDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgaWYodGhpcy5yZlV1aWQpIHtcclxuICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkKycvY29uY2F0Q2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZD1uZXcgRm9ybURhdGEoKTtcclxuICAgICAgZmQuc2V0KCd1dWlkJyx0aGlzLnJmVXVpZCk7XHJcbiAgICAgIGZkLnNldCgnY2h1bmtDb3VudCcsY2h1bmtDb3VudC50b1N0cmluZygpKTtcclxuICAgICAgbGV0IHVsID0gbmV3IFVwbG9hZCggZmQscmVjVXJsKTtcclxuICAgICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlJlY29yZGluZyBmaWxlIFVVSUQgbm90IHNldCFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgY2xvc2VkKCkge1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIGNsb3NlZC4nO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVjb3JkaW5nLic7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICdSZWNvcmRpbmcgZXJyb3InLFxyXG4gICAgICAgIG1zZzogbXNnLFxyXG4gICAgICAgIGFkdmljZTogYWR2aWNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|