@decohere/flux 0.0.1-dev.66 → 0.0.1-dev.68
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/commonjs/src/hot-reload-server.js +66 -11
- package/commonjs/src/index.js +4 -1
- package/commonjs/src/serve.action.js +3 -2
- package/commonjs/src/serve.command.js +3 -1
- package/es6/src/hot-reload-server.js +52 -8
- package/es6/src/index.js +2 -2
- package/es6/src/serve.action.js +3 -2
- package/es6/src/serve.command.js +3 -1
- package/package.json +6 -6
- package/types/src/hot-reload-server.d.ts +15 -1
- package/types/src/index.d.ts +1 -1
- package/types/src/serve.action.d.ts +1 -0
|
@@ -2,10 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get DEFAULT_REBOOT_DEBOUNCE_MS () {
|
|
13
|
+
return DEFAULT_REBOOT_DEBOUNCE_MS;
|
|
14
|
+
},
|
|
15
|
+
get HotReloadServer () {
|
|
8
16
|
return HotReloadServer;
|
|
17
|
+
},
|
|
18
|
+
get resolveRebootDebounceMs () {
|
|
19
|
+
return resolveRebootDebounceMs;
|
|
9
20
|
}
|
|
10
21
|
});
|
|
11
22
|
const _nodeevents = require("node:events");
|
|
@@ -65,7 +76,14 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
65
76
|
}
|
|
66
77
|
const currentFilePath = _io.io.fileUrlToPath(require("url").pathToFileURL(__filename).toString());
|
|
67
78
|
const VERSION_URL_PARAM = "version";
|
|
68
|
-
const
|
|
79
|
+
const DEFAULT_REBOOT_DEBOUNCE_MS = 250;
|
|
80
|
+
function resolveRebootDebounceMs(value) {
|
|
81
|
+
const delay = value ?? DEFAULT_REBOOT_DEBOUNCE_MS;
|
|
82
|
+
if (!Number.isFinite(delay) || delay < 0) {
|
|
83
|
+
throw new Error(`rebootDebounceMs must be a non-negative number, got ${String(value)}`);
|
|
84
|
+
}
|
|
85
|
+
return delay;
|
|
86
|
+
}
|
|
69
87
|
/** Process-wide: Node's ESM cache is process-global, including across HotReloadServer instances. */ let moduleVersionSeq = 0;
|
|
70
88
|
class HotReloadServer extends _nodeevents.EventEmitter {
|
|
71
89
|
// ── State ────────────────────────────────────────────────────────────────
|
|
@@ -85,6 +103,11 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
85
103
|
aliasPaths = {};
|
|
86
104
|
aliasBaseUrl = _nodepath.default.resolve(".");
|
|
87
105
|
rebootTail = Promise.resolve();
|
|
106
|
+
rebootDebounceGen = 0;
|
|
107
|
+
rebootInFlight = false;
|
|
108
|
+
rebootFollowUp = false;
|
|
109
|
+
rebootQueued = false;
|
|
110
|
+
scheduleReboot = ()=>{};
|
|
88
111
|
// ── Public API ───────────────────────────────────────────────────────────
|
|
89
112
|
async start(options) {
|
|
90
113
|
this.disposed = false;
|
|
@@ -92,6 +115,10 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
92
115
|
this.moduleCache.clear();
|
|
93
116
|
this.transpileCache.clear();
|
|
94
117
|
this.rebootTail = Promise.resolve();
|
|
118
|
+
this.rebootInFlight = false;
|
|
119
|
+
this.rebootFollowUp = false;
|
|
120
|
+
this.rebootQueued = false;
|
|
121
|
+
this.bindScheduleReboot(resolveRebootDebounceMs(options.rebootDebounceMs));
|
|
95
122
|
const { buildConfig } = options;
|
|
96
123
|
this.buildConfig = buildConfig;
|
|
97
124
|
this.workspace = await this.resolveWorkspace(options);
|
|
@@ -110,6 +137,7 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
110
137
|
async dispose() {
|
|
111
138
|
if (this.disposed) return;
|
|
112
139
|
this.disposed = true;
|
|
140
|
+
this.rebootDebounceGen += 1;
|
|
113
141
|
this.watchSubscription?.unsubscribe();
|
|
114
142
|
this.workspace?.[Symbol.dispose]();
|
|
115
143
|
await this.rebootTail;
|
|
@@ -128,15 +156,42 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
128
156
|
this.logger.error("There was an error booting the entry point. Your application may not function as expected", error);
|
|
129
157
|
}
|
|
130
158
|
}
|
|
131
|
-
|
|
159
|
+
bindScheduleReboot(delayMs) {
|
|
160
|
+
const gen = ++this.rebootDebounceGen;
|
|
161
|
+
this.scheduleReboot = (0, _system.debounce)(async ()=>{
|
|
162
|
+
if (this.disposed || gen !== this.rebootDebounceGen) return;
|
|
163
|
+
this.requestReboot();
|
|
164
|
+
}, delayMs);
|
|
165
|
+
}
|
|
166
|
+
requestReboot() {
|
|
167
|
+
if (this.disposed) return;
|
|
168
|
+
if (this.rebootInFlight) {
|
|
169
|
+
this.rebootFollowUp = true;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (this.rebootQueued) return;
|
|
173
|
+
this.rebootQueued = true;
|
|
132
174
|
this.rebootTail = this.rebootTail.then(()=>this.runReboot(), ()=>this.runReboot());
|
|
133
|
-
}
|
|
175
|
+
}
|
|
134
176
|
async runReboot() {
|
|
177
|
+
this.rebootQueued = false;
|
|
135
178
|
if (this.disposed) return;
|
|
136
|
-
this.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
179
|
+
this.rebootInFlight = true;
|
|
180
|
+
try {
|
|
181
|
+
do {
|
|
182
|
+
this.rebootFollowUp = false;
|
|
183
|
+
if (this.disposed) return;
|
|
184
|
+
this.logger.trace("Rebooting entry module");
|
|
185
|
+
await this.disposeEntry();
|
|
186
|
+
await this.bootEntry();
|
|
187
|
+
this.emit("reboot");
|
|
188
|
+
}while (this.rebootFollowUp && !this.disposed)
|
|
189
|
+
} finally{
|
|
190
|
+
const needsFollowUp = this.rebootFollowUp && !this.disposed;
|
|
191
|
+
this.rebootFollowUp = false;
|
|
192
|
+
this.rebootInFlight = false;
|
|
193
|
+
if (needsFollowUp) this.requestReboot();
|
|
194
|
+
}
|
|
140
195
|
}
|
|
141
196
|
async disposeEntry() {
|
|
142
197
|
const entry = this.entryModule;
|
|
@@ -394,4 +449,4 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
394
449
|
}
|
|
395
450
|
}
|
|
396
451
|
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMb2FkRm5PdXRwdXQsXG5cdExvYWRIb29rQ29udGV4dCxcblx0UmVzb2x2ZUZuT3V0cHV0LFxuXHRSZXNvbHZlSG9va0NvbnRleHQsXG59IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJIb29rcyB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQnVpbGRUYXJnZXRzLCBTd2NUcmFuc3BpbGVyLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCJAZGVjb2hlcmUvZm9yZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCwgUHJvamVjdEZpbGVFdmVudCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBwYWNrYWdlQWxpYXNlcywgV29ya3NwYWNlRmFjdG9yeSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgRmlsZUV4LCBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcmV3cml0ZVNlcnZlU3BlY2lmaWVyIH0gZnJvbSBcIi4vcmV3cml0ZS1zZXJ2ZS1zcGVjaWZpZXIuanNcIjtcblxudHlwZSBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHsgc291cmNlOiBzdHJpbmcgfSB8IG51bGw7XG5cbmNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IFZFUlNJT05fVVJMX1BBUkFNID0gXCJ2ZXJzaW9uXCI7XG5jb25zdCBSRUJPT1RfREVCT1VOQ0VfTVMgPSAyNTA7XG5cbi8qKiBQcm9jZXNzLXdpZGU6IE5vZGUncyBFU00gY2FjaGUgaXMgcHJvY2Vzcy1nbG9iYWwsIGluY2x1ZGluZyBhY3Jvc3MgSG90UmVsb2FkU2VydmVyIGluc3RhbmNlcy4gKi9cbmxldCBtb2R1bGVWZXJzaW9uU2VxID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBIb3RSZWxvYWRTZXJ2ZXJFdmVudHMge1xuXHRzdGFydDogW107XG5cdHJlYm9vdDogW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyT3B0aW9ucyB7XG5cdC8qKiBCdWlsZCBjb25maWd1cmF0aW9uIG5hbWUuICovXG5cdGJ1aWxkQ29uZmlnOiBzdHJpbmc7XG5cdC8qKiBOYW1lIG9mIHRoZSBwcm9qZWN0IHRvIHNlcnZlLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlLiAqL1xuXHRwcm9qZWN0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogUHJlLWJ1aWx0IFdvcmtzcGFjZSBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBydW5uaW5nIFdvcmtzcGFjZUZhY3RvcnkuXG5cdCAqIFVzZWZ1bCBpbiB0ZXN0cyB0byBieXBhc3MgZmlsZXN5c3RlbS1iYXNlZCB3b3Jrc3BhY2UgZGlzY292ZXJ5LlxuXHQgKi9cblx0d29ya3NwYWNlPzogV29ya3NwYWNlO1xufVxuXG50eXBlIEZpbGVJbmZvID0geyBwcm9qZWN0OiBQcm9qZWN0IH07XG5cbmV4cG9ydCBjbGFzcyBIb3RSZWxvYWRTZXJ2ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SG90UmVsb2FkU2VydmVyRXZlbnRzPiB7XG5cdC8vIOKUgOKUgCBTdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoSG90UmVsb2FkU2VydmVyLm5hbWUpO1xuXHRwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cdHByaXZhdGUgaG9va3NSZWdpc3RlcmVkID0gZmFsc2U7XG5cdHByaXZhdGUgZW50cnlNb2R1bGVQYXRoITogc3RyaW5nO1xuXHRwcml2YXRlIGVudHJ5TW9kdWxlPzogQXN5bmNEaXNwb3NhYmxlO1xuXHRwcml2YXRlIHdvcmtzcGFjZT86IFdvcmtzcGFjZTtcblx0cHJpdmF0ZSBidWlsZENvbmZpZyA9IFwiZGVidWdcIjtcblx0cHJpdmF0ZSB3YXRjaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblx0LyoqIE1hcCBmcm9tIGFic29sdXRlIC50cyBzb3VyY2UgZmlsZSBwYXRoIHRvIHByb2plY3QgaW5mbyAqL1xuXHRwcml2YXRlIGZpbGVJbmZvTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZpbGVJbmZvPigpO1xuXHRwcml2YXRlIG1vZHVsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KCk7XG5cdHByaXZhdGUgZGVwZW5kZW5jaWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuXHRwcml2YXRlIHRyYW5zcGlsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblx0cHJpdmF0ZSB0cmFuc3BpbGVyID0gbmV3IFN3Y1RyYW5zcGlsZXIoKTtcblx0cHJpdmF0ZSBhbGlhc1BhdGhzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0cHJpdmF0ZSBhbGlhc0Jhc2VVcmwgPSBwYXRoLnJlc29sdmUoXCIuXCIpO1xuXHRwcml2YXRlIHJlYm9vdFRhaWw6IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuXHQvLyDilIDilIAgUHVibGljIEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwdWJsaWMgYXN5bmMgc3RhcnQob3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucykge1xuXHRcdHRoaXMuZGlzcG9zZWQgPSBmYWxzZTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLnRyYW5zcGlsZUNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5yZWJvb3RUYWlsID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRjb25zdCB7IGJ1aWxkQ29uZmlnIH0gPSBvcHRpb25zO1xuXHRcdHRoaXMuYnVpbGRDb25maWcgPSBidWlsZENvbmZpZztcblx0XHR0aGlzLndvcmtzcGFjZSA9IGF3YWl0IHRoaXMucmVzb2x2ZVdvcmtzcGFjZShvcHRpb25zKTtcblx0XHRjb25zdCBwcm9qZWN0ID0gdGhpcy5yZXNvbHZlUHJvamVjdChidWlsZENvbmZpZywgb3B0aW9ucy5wcm9qZWN0KTtcblxuXHRcdHRoaXMuZW50cnlNb2R1bGVQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3QuZ2V0U291cmNlRW50cnlQYXRoKCkpO1xuXHRcdHRoaXMuZmlsZUluZm9NYXAgPSBhd2FpdCB0aGlzLmJ1aWxkRmlsZUluZm9NYXAoYnVpbGRDb25maWcpO1xuXHRcdHRoaXMuYWxpYXNQYXRocyA9IGF3YWl0IHRoaXMuYnVpbGRBbGlhc1BhdGhzKCk7XG5cblx0XHR0aGlzLnJlZ2lzdGVySG9va3MoKTtcblx0XHR0aGlzLmludmFsaWRhdGVBbGxTb3VyY2VGaWxlcygpO1xuXG5cdFx0YXdhaXQgdGhpcy53b3Jrc3BhY2Uud2F0Y2goYnVpbGRDb25maWcpO1xuXHRcdHRoaXMud2F0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLndvcmtzcGFjZS5wcm9qZWN0RmlsZUNoYW5nZWQkLnN1YnNjcmliZSh0aGlzLm9uRmlsZUNoYW5nZSk7XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShgU2VydmluZyAke3RoaXMuZW50cnlNb2R1bGVQYXRofWApO1xuXHRcdGF3YWl0IHRoaXMuYm9vdEVudHJ5KCk7XG5cdFx0dGhpcy5lbWl0KFwic3RhcnRcIik7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMud2F0Y2hTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy53b3Jrc3BhY2U/LltTeW1ib2wuZGlzcG9zZV0oKTtcblx0XHRhd2FpdCB0aGlzLnJlYm9vdFRhaWw7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlRW50cnkoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlKCk7XG5cdH1cblxuXHQvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgYXN5bmMgYm9vdEVudHJ5KCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzLnZlcnNpb25Nb2R1bGUoaW8ucGF0aFRvRmlsZVVybCh0aGlzLmVudHJ5TW9kdWxlUGF0aCkpO1xuXHRcdFx0dGhpcy5lbnRyeU1vZHVsZSA9IChhd2FpdCBpbXBvcnQodXJsKSk/LmRlZmF1bHQ7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuZW50cnlNb2R1bGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XCJUaGVyZSB3YXMgYW4gZXJyb3IgYm9vdGluZyB0aGUgZW50cnkgcG9pbnQuIFlvdXIgYXBwbGljYXRpb24gbWF5IG5vdCBmdW5jdGlvbiBhcyBleHBlY3RlZFwiLFxuXHRcdFx0XHRlcnJvcixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzY2hlZHVsZVJlYm9vdCA9IGRlYm91bmNlKGFzeW5jICgpID0+IHtcblx0XHR0aGlzLnJlYm9vdFRhaWwgPSB0aGlzLnJlYm9vdFRhaWwudGhlbihcblx0XHRcdCgpID0+IHRoaXMucnVuUmVib290KCksXG5cdFx0XHQoKSA9PiB0aGlzLnJ1blJlYm9vdCgpLFxuXHRcdCk7XG5cdH0sIFJFQk9PVF9ERUJPVU5DRV9NUyk7XG5cblx0cHJpdmF0ZSBhc3luYyBydW5SZWJvb3QoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHR0aGlzLmxvZ2dlci50cmFjZShcIlJlYm9vdGluZyBlbnRyeSBtb2R1bGVcIik7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlRW50cnkoKTtcblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyeSgpO1xuXHRcdHRoaXMuZW1pdChcInJlYm9vdFwiKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUVudHJ5KCkge1xuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyeU1vZHVsZTtcblx0XHR0aGlzLmVudHJ5TW9kdWxlID0gdW5kZWZpbmVkO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBlbnRyeT8uW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFwiRW50cnkgYXN5bmNEaXNwb3NlIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0Ly8g4pSA4pSAIFNldHVwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgYXN5bmMgcmVzb2x2ZVdvcmtzcGFjZShvcHRpb25zOiBIb3RSZWxvYWRTZXJ2ZXJPcHRpb25zKTogUHJvbWlzZTxXb3Jrc3BhY2U+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b3B0aW9ucy53b3Jrc3BhY2UgPz9cblx0XHRcdFdvcmtzcGFjZUZhY3RvcnkuY3JlYXRlKHsgLi4uV29ya3NwYWNlRGVmYXVsdHMsIHJvb3REaXI6IHByb2Nlc3MuY3dkKCkgfSlcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUHJvamVjdChidWlsZENvbmZpZzogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogUHJvamVjdCB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZT8uZ2V0UHJvamVjdHMoYnVpbGRDb25maWcpID8/IFtdO1xuXHRcdGNvbnN0IGZvdW5kID0gbmFtZSA9PSBudWxsID8gcHJvamVjdHMuYXQoMCkgOiBwcm9qZWN0cy5maW5kKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpO1xuXHRcdGlmIChmb3VuZCA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdG5hbWUgPT0gbnVsbFxuXHRcdFx0XHRcdD8gYE5vIHByb2plY3RzIGZvdW5kIGZvciBjb25maWd1cmF0aW9uOiAke2J1aWxkQ29uZmlnfWBcblx0XHRcdFx0XHQ6IGBQcm9qZWN0IFwiJHtuYW1lfVwiIG5vdCBmb3VuZCBpbiB3b3Jrc3BhY2VgLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZEZpbGVJbmZvTWFwKGJ1aWxkQ29uZmlnOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIEZpbGVJbmZvPj4ge1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy53b3Jrc3BhY2U/LmdldFByb2plY3RzKGJ1aWxkQ29uZmlnKSA/PyBbXTtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRwcm9qZWN0cy5tYXAoYXN5bmMgKHByb2plY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsZXMgPSBhd2FpdCBwcm9qZWN0LmdldEFsbEZpbGVzKCk7XG5cdFx0XHRcdHJldHVybiBmaWxlcy5tYXAoKGZpbGUpOiBbc3RyaW5nLCBGaWxlSW5mb10gPT4gW2ZpbGUuZnVsbFBhdGgsIHsgcHJvamVjdCB9XSk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHRcdHJldHVybiBuZXcgTWFwKGVudHJpZXMuZmxhdCgpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXJIb29rcygpIHtcblx0XHRpZiAodGhpcy5ob29rc1JlZ2lzdGVyZWQpIHJldHVybjtcblx0XHR0aGlzLmhvb2tzUmVnaXN0ZXJlZCA9IHRydWU7XG5cdFx0cmVnaXN0ZXJIb29rcyh7XG5cdFx0XHRyZXNvbHZlOiAoXG5cdFx0XHRcdHNwZWNpZmllcjogc3RyaW5nLFxuXHRcdFx0XHRjb250ZXh0OiBSZXNvbHZlSG9va0NvbnRleHQsXG5cdFx0XHRcdG5leHQ6IChzcGVjaWZpZXI6IHN0cmluZywgY29udGV4dD86IFBhcnRpYWw8UmVzb2x2ZUhvb2tDb250ZXh0PikgPT4gUmVzb2x2ZUZuT3V0cHV0LFxuXHRcdFx0KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm4gbmV4dChzcGVjaWZpZXIsIGNvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRVcmwgPSBjb250ZXh0LnBhcmVudFVSTCA/PyBcIlwiO1xuXHRcdFx0XHRjb25zdCByZXdyaXR0ZW4gPVxuXHRcdFx0XHRcdHJld3JpdGVTZXJ2ZVNwZWNpZmllcih7XG5cdFx0XHRcdFx0XHRzcGVjaWZpZXIsXG5cdFx0XHRcdFx0XHRwYXJlbnRVcmwsXG5cdFx0XHRcdFx0XHRpc1dhdGNoZWRUczogKGZpbGVQYXRoKSA9PiB0aGlzLmZpbGVJbmZvTWFwLmhhcyhmaWxlUGF0aCksXG5cdFx0XHRcdFx0XHRyZXNvbHZlQmFyZTogKGJhcmUpID0+XG5cdFx0XHRcdFx0XHRcdHBhY2thZ2VBbGlhc2VzLnJlc29sdmVQYXRoKGJhcmUsIHRoaXMuYWxpYXNQYXRocywgdGhpcy5hbGlhc0Jhc2VVcmwpLFxuXHRcdFx0XHRcdFx0dmVyc2lvbkZpbGVVcmw6IChmaWxlVXJsKSA9PiB0aGlzLmdldENhY2hlZE9yTmV3KGZpbGVVcmwpLFxuXHRcdFx0XHRcdH0pID8/IHNwZWNpZmllcjtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gbmV4dChyZXdyaXR0ZW4sIGNvbnRleHQpIGFzIFJlc29sdmVGbk91dHB1dDtcblx0XHRcdFx0dGhpcy5vblBvc3RSZXNvbHZlKHJlc3VsdCwgcGFyZW50VXJsKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRsb2FkOiAoXG5cdFx0XHRcdHVybDogc3RyaW5nLFxuXHRcdFx0XHRjb250ZXh0OiBMb2FkSG9va0NvbnRleHQsXG5cdFx0XHRcdG5leHQ6ICh1cmw6IHN0cmluZywgY29udGV4dD86IFBhcnRpYWw8TG9hZEhvb2tDb250ZXh0PikgPT4gTG9hZEZuT3V0cHV0LFxuXHRcdFx0KTogTG9hZEZuT3V0cHV0ID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybiBuZXh0KHVybCwgY29udGV4dCk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMubG9hZFRzKHVybCk7XG5cdFx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbClcblx0XHRcdFx0XHRyZXR1cm4geyBmb3JtYXQ6IFwibW9kdWxlXCIsIHNvdXJjZTogcmVzdWx0LnNvdXJjZSwgc2hvcnRDaXJjdWl0OiB0cnVlIH07XG5cdFx0XHRcdHJldHVybiBuZXh0KHVybCwgY29udGV4dCk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0Ly8g4pSA4pSAIE1vZHVsZSBob29rcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGFzeW5jIGJ1aWxkQWxpYXNQYXRocygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj4ge1xuXHRcdGNvbnN0IHdvcmtzcGFjZSA9IHRoaXMud29ya3NwYWNlO1xuXHRcdGlmICh3b3Jrc3BhY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG5cdFx0Y29uc3QgcGFja2FnZUFsaWFzZXMgPSB3b3Jrc3BhY2UuZ2V0UGFja2FnZUFsaWFzZXModGhpcy5idWlsZENvbmZpZyk7XG5cdFx0dGhpcy5hbGlhc0Jhc2VVcmwgPSBwYWNrYWdlQWxpYXNlcy5iYXNlVXJsO1xuXHRcdHJldHVybiBwYWNrYWdlQWxpYXNlcy5wYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKiBQb3N0LW5leHQgZGVwZW5kZW5jeSB0cmFja2VyOiByZWNvcmRzIHdoaWNoIHNvdXJjZSBmaWxlcyBpbXBvcnQgd2hpY2hcblx0ICogb3RoZXIgc291cmNlIGZpbGVzIHNvIHRoYXQgcmVsb2FkSWZBZmZlY3RlZCBjYW4gdHJhdmVyc2UgdGhlIGdyYXBoLlxuXHQgKi9cblx0cHJpdmF0ZSBvblBvc3RSZXNvbHZlID0gKHJlc3VsdDogUmVzb2x2ZUZuT3V0cHV0LCBwYXJlbnRVcmw6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHsgdXJsIH0gPSByZXN1bHQ7XG5cdFx0Y29uc3QgcGFyZW50VXJsQ2xlYW4gPSBwYXJlbnRVcmwuc3BsaXQoXCI/XCIpWzBdO1xuXG5cdFx0bGV0IGZpbGVQYXRoOiBzdHJpbmc7XG5cdFx0bGV0IHBhcmVudFBhdGg6IHN0cmluZztcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybCk7XG5cdFx0XHR1cmxPYmouc2VhcmNoID0gXCJcIjtcblx0XHRcdGZpbGVQYXRoID0gaW8uZmlsZVVybFRvUGF0aCh1cmxPYmoudG9TdHJpbmcoKSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHBhcmVudFBhdGggPSBpby5maWxlVXJsVG9QYXRoKHBhcmVudFVybENsZWFuKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHBhcmVudFBhdGggPSBcIlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzU291cmNlID0gdGhpcy5maWxlSW5mb01hcC5oYXMoZmlsZVBhdGgpO1xuXHRcdGNvbnN0IHBhcmVudElzU291cmNlID0gdGhpcy5maWxlSW5mb01hcC5oYXMocGFyZW50UGF0aCk7XG5cblx0XHRpZiAoaXNTb3VyY2UgfHwgcGFyZW50SXNTb3VyY2UpIHtcblx0XHRcdHRoaXMudHJhY2tEZXBlbmRlbmN5KGZpbGVQYXRoLCBwYXJlbnRQYXRoKTtcblx0XHR9XG5cdH07XG5cblx0cHJpdmF0ZSBsb2FkVHM6IExvYWREZWxlZ2F0ZSA9ICh1cmw6IHN0cmluZykgPT4ge1xuXHRcdGlmICghdXJsLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCBjbGVhblBhdGggPSBuZXcgVVJMKHVybCkucGF0aG5hbWU7XG5cdFx0Y29uc3QgZmlsZUluZm8gPSB0aGlzLmZpbGVJbmZvTWFwLmdldChjbGVhblBhdGgpO1xuXHRcdGlmIChmaWxlSW5mbyA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMudHJhbnNwaWxlQ2FjaGUuZ2V0KGNsZWFuUGF0aCk7XG5cdFx0aWYgKGNhY2hlZCAhPSBudWxsKSByZXR1cm4geyBzb3VyY2U6IGNhY2hlZCB9O1xuXG5cdFx0Y29uc3QgeyBwcm9qZWN0IH0gPSBmaWxlSW5mbztcblx0XHRjb25zdCB0c0NvbmZpZyA9IHByb2plY3QuZ2V0VHNDb25maWdTeW5jKCk7XG5cdFx0Y29uc3QgdXNlckNvbmZpZyA9IHByb2plY3QuZ2V0U3djQ29uZmlnU3luYygpO1xuXG5cdFx0Y29uc3QgZmlsZSA9IG5ldyBGaWxlRXgoeyBmdWxsUGF0aDogY2xlYW5QYXRoIH0pO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gdGhpcy50cmFuc3BpbGVyLnRyYW5zZm9ybUZpbGVTeW5jKGZpbGUsIEJ1aWxkVGFyZ2V0cy5lczYsIHtcblx0XHRcdHRzQ29uZmlnLFxuXHRcdFx0YWxpYXNQYXRoczogdHJ1ZSxcblx0XHRcdHVzZXJDb25maWcsXG5cdFx0XHR3b3Jrc3BhY2U6IHRoaXMud29ya3NwYWNlLFxuXHRcdFx0cHJvamVjdHM6IHRoaXMud29ya3NwYWNlPy5nZXRQcm9qZWN0cyh0aGlzLmJ1aWxkQ29uZmlnKSxcblx0XHR9KTtcblxuXHRcdGlmIChyZXNwb25zZS5vdXRjb21lICE9PSBcInN1Y2Nlc3NcIikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byB0cmFuc3BpbGUgJHtjbGVhblBhdGh9YCwgcmVzcG9uc2UpO1xuXHRcdFx0Ly8gRG8gbm90IGZhbGwgdGhyb3VnaCB0byBuZXh0KCk6IFZpdGVzdC9Ob2RlIGxvYWRlcnMgY2FuIGRlYWRsb2NrIG9uIGFcblx0XHRcdC8vIHZlcnNpb25lZCAudHMgVVJMLiBGYWlsIHRoZSBpbXBvcnQgc28gYm9vdEVudHJ5IGNhbiBjYXRjaCBhbmQgY29udGludWUuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB0cmFuc3BpbGUgJHtjbGVhblBhdGh9YCk7XG5cdFx0fVxuXG5cdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5zZXQoY2xlYW5QYXRoLCByZXNwb25zZS5jb2RlKTtcblx0XHRyZXR1cm4geyBzb3VyY2U6IHJlc3BvbnNlLmNvZGUgfTtcblx0fTtcblxuXHQvLyDilIDilIAgRmlsZSB3YXRjaGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIG9uRmlsZUNoYW5nZSA9IChldnQ6IFByb2plY3RGaWxlRXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGZpbGUsIGV2ZW50TmFtZSwgcHJvamVjdCB9ID0gZXZ0O1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gZmlsZS5mdWxsUGF0aDtcblxuXHRcdHRoaXMubG9nZ2VyLnRyYWNlKGBGaWxlICR7ZXZlbnROYW1lfTogJHtmdWxsUGF0aH1gKTtcblxuXHRcdGlmIChldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLnVubGluaykge1xuXHRcdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUoZnVsbFBhdGgpO1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZnVsbFBhdGgsIG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLmFkZCkge1xuXHRcdFx0aWYgKHByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSB7XG5cdFx0XHRcdHRoaXMuZmlsZUluZm9NYXAuc2V0KGZ1bGxQYXRoLCB7IHByb2plY3QgfSk7XG5cdFx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZ1bGxQYXRoLCBudWxsKTtcblx0XHRcdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBjaGFuZ2Vcblx0XHRpZiAoIXByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSByZXR1cm47XG5cdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUoZnVsbFBhdGgpO1xuXHRcdHRoaXMudHJhbnNwaWxlci5pbnZhbGlkYXRlQ29udGVudENhY2hlKG5ldyBGaWxlRXgoeyBmdWxsUGF0aCB9KSk7XG5cdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0fTtcblxuXHRwcml2YXRlIHJlbG9hZElmQWZmZWN0ZWQoZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChmdWxsUGF0aCk7XG5cdFx0Y29uc3QgbW9kdWxlcyA9IFsuLi5uZXcgU2V0KFsuLi5kZXBzLCBmdWxsUGF0aF0pXTtcblxuXHRcdGlmICghbW9kdWxlcy5pbmNsdWRlcyh0aGlzLmVudHJ5TW9kdWxlUGF0aCkpIHtcblx0XHRcdHRoaXMubG9nZ2VyLnRyYWNlKGBDaGFuZ2UgaW4gJHtmdWxsUGF0aH0gZG9lcyBub3QgYWZmZWN0IGVudHJ5IOKAlCBza2lwcGluZyByZWxvYWRgKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShcblx0XHRcdGBDaGFuZ2UgaW4gJHtmdWxsUGF0aH0gYWZmZWN0cyAke21vZHVsZXMubGVuZ3RofSBtb2R1bGUocykg4oCUIHNjaGVkdWxpbmcgcmVsb2FkYCxcblx0XHQpO1xuXHRcdHRoaXMuaW52YWxpZGF0ZU1vZHVsZSguLi5tb2R1bGVzKTtcblx0XHR0aGlzLnNjaGVkdWxlUmVib290KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyDilIDilIAgRGVwZW5kZW5jeSBncmFwaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGdldERlcGVuZGVuY3lHcmFwaChtb2R1bGVJZDogc3RyaW5nLCBwYXJlbnRNb2R1bGVzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10ge1xuXHRcdGlmICh0aGlzLmlzU2VsZihtb2R1bGVJZCkpIHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZHVsZURlcHMgPSB0aGlzLmRlcGVuZGVuY2llcy5nZXQobW9kdWxlSWQpID8/IFtdO1xuXHRcdGlmIChwYXJlbnRNb2R1bGVzLmluY2x1ZGVzKG1vZHVsZUlkKSkge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZDogJHttb2R1bGVJZH1gKTtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRsZXQgc3ViRGVwczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGRlcCBvZiBtb2R1bGVEZXBzKSB7XG5cdFx0XHRpZiAoIXRoaXMuZmlsZUluZm9NYXAuaGFzKGRlcCkpIGNvbnRpbnVlO1xuXHRcdFx0Y29uc3Qgc3VicyA9IHRoaXMuZ2V0RGVwZW5kZW5jeUdyYXBoKGRlcCwgW21vZHVsZUlkLCAuLi5wYXJlbnRNb2R1bGVzXSk7XG5cdFx0XHRzdWJEZXBzID0gWy4uLnN1YkRlcHMsIC4uLnN1YnNdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbLi4ubmV3IFNldChbLi4ubW9kdWxlRGVwcywgLi4uc3ViRGVwc10pXTtcblx0fVxuXG5cdHByaXZhdGUgdHJhY2tEZXBlbmRlbmN5KGZpbGVQYXRoOiBzdHJpbmcsIHBhcmVudFBhdGg6IHN0cmluZykge1xuXHRcdGlmICghcGFyZW50UGF0aCkgcmV0dXJuO1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmRlcGVuZGVuY2llcy5nZXQoZmlsZVBhdGgpID8/IFtdO1xuXHRcdGNvbnN0IHVwZGF0ZWREZXBzID0gbmV3IFNldChbLi4uZGVwcywgcGFyZW50UGF0aF0pO1xuXHRcdHRoaXMuZGVwZW5kZW5jaWVzLnNldChmaWxlUGF0aCwgWy4uLnVwZGF0ZWREZXBzXSk7XG5cdH1cblxuXHQvLyDilIDilIAgTW9kdWxlIGNhY2hlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgZ2V0Q2FjaGVkT3JOZXcobW9kdWxlVXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgobW9kdWxlVXJsKTtcblx0XHRjb25zdCBjYWNoZWQgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmaWxlUGF0aCk7XG5cdFx0Y29uc3QgdmVyc2lvbmVkID0gY2FjaGVkID8/IHRoaXMudmVyc2lvbk1vZHVsZShtb2R1bGVVcmwpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZpbGVQYXRoLCB2ZXJzaW9uZWQpO1xuXHRcdHJldHVybiB2ZXJzaW9uZWQ7XG5cdH1cblxuXHRwcml2YXRlIHZlcnNpb25Nb2R1bGUobW9kdWxlVXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCB2ZXJzaW9uZWRVcmwgPSBuZXcgVVJMKG1vZHVsZVVybCk7XG5cdFx0dmVyc2lvbmVkVXJsLnNlYXJjaFBhcmFtcy5zZXQoVkVSU0lPTl9VUkxfUEFSQU0sIFN0cmluZygrK21vZHVsZVZlcnNpb25TZXEpKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkVXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRwcml2YXRlIGludmFsaWRhdGVNb2R1bGUoLi4ubW9kdWxlczogc3RyaW5nW10pIHtcblx0XHRmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG5cdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChtb2R1bGUsIG51bGwpO1xuXHRcdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUobW9kdWxlKTtcblx0XHRcdC8vIFBydW5lIHN0YWxlIG91dGdvaW5nIGVkZ2VzOiByZW1vdmUgdGhpcyBtb2R1bGUgYXMgYSBwYXJlbnQgZnJvbSBhbGwgZGVwZW5kZW5jeSBsaXN0c1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCBwYXJlbnRzXSBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHBhcmVudHMuZmlsdGVyKChwKSA9PiBwICE9PSBtb2R1bGUpO1xuXHRcdFx0XHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuZGVsZXRlKGtleSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuc2V0KGtleSwgZmlsdGVyZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKSB7XG5cdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmZpbGVJbmZvTWFwLmtleXMoKSkge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZmlsZVBhdGgsIG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8vIOKUgOKUgCBVdGlsaXRpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBpc1NlbGYoZmlsZVBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiBjdXJyZW50RmlsZVBhdGggPT09IHBhdGgucmVzb2x2ZShmaWxlUGF0aCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJIb3RSZWxvYWRTZXJ2ZXIiLCJjdXJyZW50RmlsZVBhdGgiLCJpbyIsImZpbGVVcmxUb1BhdGgiLCJWRVJTSU9OX1VSTF9QQVJBTSIsIlJFQk9PVF9ERUJPVU5DRV9NUyIsIm1vZHVsZVZlcnNpb25TZXEiLCJFdmVudEVtaXR0ZXIiLCJsb2dnZXIiLCJzY3JpYmUiLCJuYW1lIiwiZGlzcG9zZWQiLCJob29rc1JlZ2lzdGVyZWQiLCJlbnRyeU1vZHVsZVBhdGgiLCJlbnRyeU1vZHVsZSIsIndvcmtzcGFjZSIsImJ1aWxkQ29uZmlnIiwid2F0Y2hTdWJzY3JpcHRpb24iLCJmaWxlSW5mb01hcCIsIk1hcCIsIm1vZHVsZUNhY2hlIiwiZGVwZW5kZW5jaWVzIiwidHJhbnNwaWxlQ2FjaGUiLCJ0cmFuc3BpbGVyIiwiU3djVHJhbnNwaWxlciIsImFsaWFzUGF0aHMiLCJhbGlhc0Jhc2VVcmwiLCJwYXRoIiwicmVzb2x2ZSIsInJlYm9vdFRhaWwiLCJQcm9taXNlIiwic3RhcnQiLCJvcHRpb25zIiwiY2xlYXIiLCJyZXNvbHZlV29ya3NwYWNlIiwicHJvamVjdCIsInJlc29sdmVQcm9qZWN0IiwiZ2V0U291cmNlRW50cnlQYXRoIiwiYnVpbGRGaWxlSW5mb01hcCIsImJ1aWxkQWxpYXNQYXRocyIsInJlZ2lzdGVySG9va3MiLCJpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMiLCJ3YXRjaCIsInByb2plY3RGaWxlQ2hhbmdlZCQiLCJzdWJzY3JpYmUiLCJvbkZpbGVDaGFuZ2UiLCJ0cmFjZSIsImJvb3RFbnRyeSIsImVtaXQiLCJkaXNwb3NlIiwidW5zdWJzY3JpYmUiLCJTeW1ib2wiLCJkaXNwb3NlRW50cnkiLCJhc3luY0Rpc3Bvc2UiLCJ1cmwiLCJ2ZXJzaW9uTW9kdWxlIiwicGF0aFRvRmlsZVVybCIsImRlZmF1bHQiLCJlcnJvciIsInVuZGVmaW5lZCIsInNjaGVkdWxlUmVib290IiwiZGVib3VuY2UiLCJ0aGVuIiwicnVuUmVib290IiwiZW50cnkiLCJXb3Jrc3BhY2VGYWN0b3J5IiwiY3JlYXRlIiwiV29ya3NwYWNlRGVmYXVsdHMiLCJyb290RGlyIiwicHJvY2VzcyIsImN3ZCIsInByb2plY3RzIiwiZ2V0UHJvamVjdHMiLCJmb3VuZCIsImF0IiwiZmluZCIsInAiLCJFcnJvciIsImVudHJpZXMiLCJhbGwiLCJtYXAiLCJmaWxlcyIsImdldEFsbEZpbGVzIiwiZmlsZSIsImZ1bGxQYXRoIiwiZmxhdCIsInNwZWNpZmllciIsImNvbnRleHQiLCJuZXh0IiwicGFyZW50VXJsIiwicGFyZW50VVJMIiwicmV3cml0dGVuIiwicmV3cml0ZVNlcnZlU3BlY2lmaWVyIiwiaXNXYXRjaGVkVHMiLCJmaWxlUGF0aCIsImhhcyIsInJlc29sdmVCYXJlIiwiYmFyZSIsInBhY2thZ2VBbGlhc2VzIiwicmVzb2x2ZVBhdGgiLCJ2ZXJzaW9uRmlsZVVybCIsImZpbGVVcmwiLCJnZXRDYWNoZWRPck5ldyIsInJlc3VsdCIsIm9uUG9zdFJlc29sdmUiLCJsb2FkIiwibG9hZFRzIiwiZm9ybWF0Iiwic291cmNlIiwic2hvcnRDaXJjdWl0IiwiZ2V0UGFja2FnZUFsaWFzZXMiLCJiYXNlVXJsIiwicGF0aHMiLCJwYXJlbnRVcmxDbGVhbiIsInNwbGl0IiwicGFyZW50UGF0aCIsInVybE9iaiIsIlVSTCIsInNlYXJjaCIsInRvU3RyaW5nIiwiaXNTb3VyY2UiLCJwYXJlbnRJc1NvdXJjZSIsInRyYWNrRGVwZW5kZW5jeSIsInN0YXJ0c1dpdGgiLCJjbGVhblBhdGgiLCJwYXRobmFtZSIsImZpbGVJbmZvIiwiZ2V0IiwiY2FjaGVkIiwidHNDb25maWciLCJnZXRUc0NvbmZpZ1N5bmMiLCJ1c2VyQ29uZmlnIiwiZ2V0U3djQ29uZmlnU3luYyIsIkZpbGVFeCIsInJlc3BvbnNlIiwidHJhbnNmb3JtRmlsZVN5bmMiLCJCdWlsZFRhcmdldHMiLCJlczYiLCJvdXRjb21lIiwic2V0IiwiY29kZSIsImV2dCIsImV2ZW50TmFtZSIsIldhdGNoRXZlbnRzIiwidW5saW5rIiwiZGVsZXRlIiwiYWRkIiwiaXNTb3VyY2VGaWxlIiwicmVsb2FkSWZBZmZlY3RlZCIsImludmFsaWRhdGVDb250ZW50Q2FjaGUiLCJkZXBzIiwiZ2V0RGVwZW5kZW5jeUdyYXBoIiwibW9kdWxlcyIsIlNldCIsImluY2x1ZGVzIiwibGVuZ3RoIiwiaW52YWxpZGF0ZU1vZHVsZSIsIm1vZHVsZUlkIiwicGFyZW50TW9kdWxlcyIsImlzU2VsZiIsIm1vZHVsZURlcHMiLCJzdWJEZXBzIiwiZGVwIiwic3VicyIsInVwZGF0ZWREZXBzIiwibW9kdWxlVXJsIiwidmVyc2lvbmVkIiwidmVyc2lvbmVkVXJsIiwic2VhcmNoUGFyYW1zIiwiU3RyaW5nIiwibW9kdWxlIiwia2V5IiwicGFyZW50cyIsImZpbHRlcmVkIiwiZmlsdGVyIiwia2V5cyJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE4Q2FBOzs7ZUFBQUE7Ozs0QkE5Q2dCOzRCQU9DO2lFQUNiO3VCQUM4QztzQkFFZDtvQkFDdEI7d0JBQ0Y7d0JBQ1c7dUNBRUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSXRDLE1BQU1DLGtCQUFrQkMsTUFBRSxDQUFDQyxhQUFhLENBQUM7QUFDekMsTUFBTUMsb0JBQW9CO0FBQzFCLE1BQU1DLHFCQUFxQjtBQUUzQixrR0FBa0csR0FDbEcsSUFBSUMsbUJBQW1CO0FBcUJoQixNQUFNTix3QkFBd0JPLHdCQUFZO0lBQ2hELDRFQUE0RTtJQUMzREMsU0FBaUJDLGNBQU0sQ0FBQ0QsTUFBTSxDQUFD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
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMb2FkRm5PdXRwdXQsXG5cdExvYWRIb29rQ29udGV4dCxcblx0UmVzb2x2ZUZuT3V0cHV0LFxuXHRSZXNvbHZlSG9va0NvbnRleHQsXG59IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJIb29rcyB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQnVpbGRUYXJnZXRzLCBTd2NUcmFuc3BpbGVyLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCJAZGVjb2hlcmUvZm9yZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCwgUHJvamVjdEZpbGVFdmVudCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBwYWNrYWdlQWxpYXNlcywgV29ya3NwYWNlRmFjdG9yeSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgRmlsZUV4LCBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcmV3cml0ZVNlcnZlU3BlY2lmaWVyIH0gZnJvbSBcIi4vcmV3cml0ZS1zZXJ2ZS1zcGVjaWZpZXIuanNcIjtcblxudHlwZSBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHsgc291cmNlOiBzdHJpbmcgfSB8IG51bGw7XG5cbmNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IFZFUlNJT05fVVJMX1BBUkFNID0gXCJ2ZXJzaW9uXCI7XG4vKiogRGVmYXVsdCBxdWlldCB3aW5kb3cgYmVmb3JlIGEgZmlsZS1jaGFuZ2UgcmVib290LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TID0gMjUwO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlYm9vdERlYm91bmNlTXModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG5cdGNvbnN0IGRlbGF5ID0gdmFsdWUgPz8gREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVM7XG5cdGlmICghTnVtYmVyLmlzRmluaXRlKGRlbGF5KSB8fCBkZWxheSA8IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHJlYm9vdERlYm91bmNlTXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyh2YWx1ZSl9YCk7XG5cdH1cblx0cmV0dXJuIGRlbGF5O1xufVxuXG4vKiogUHJvY2Vzcy13aWRlOiBOb2RlJ3MgRVNNIGNhY2hlIGlzIHByb2Nlc3MtZ2xvYmFsLCBpbmNsdWRpbmcgYWNyb3NzIEhvdFJlbG9hZFNlcnZlciBpbnN0YW5jZXMuICovXG5sZXQgbW9kdWxlVmVyc2lvblNlcSA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyRXZlbnRzIHtcblx0c3RhcnQ6IFtdO1xuXHRyZWJvb3Q6IFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvdFJlbG9hZFNlcnZlck9wdGlvbnMge1xuXHQvKiogQnVpbGQgY29uZmlndXJhdGlvbiBuYW1lLiAqL1xuXHRidWlsZENvbmZpZzogc3RyaW5nO1xuXHQvKiogTmFtZSBvZiB0aGUgcHJvamVjdCB0byBzZXJ2ZS4gRGVmYXVsdHMgdG8gdGhlIGZpcnN0IHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZS4gKi9cblx0cHJvamVjdD86IHN0cmluZztcblx0LyoqXG5cdCAqIFByZS1idWlsdCBXb3Jrc3BhY2UgaW5zdGFuY2UgdG8gdXNlIGluc3RlYWQgb2YgcnVubmluZyBXb3Jrc3BhY2VGYWN0b3J5LlxuXHQgKiBVc2VmdWwgaW4gdGVzdHMgdG8gYnlwYXNzIGZpbGVzeXN0ZW0tYmFzZWQgd29ya3NwYWNlIGRpc2NvdmVyeS5cblx0ICovXG5cdHdvcmtzcGFjZT86IFdvcmtzcGFjZTtcblx0LyoqXG5cdCAqIFF1aWV0IHdpbmRvdyBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIGxhc3QgYWZmZWN0aW5nIHNhdmUgYmVmb3JlIGEgcmVib290LlxuXHQgKiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVN9LiBSYWlzZSB0aGlzIGZvciBhZ2VudCBzYXZlIHRyYWlucy5cblx0ICovXG5cdHJlYm9vdERlYm91bmNlTXM/OiBudW1iZXI7XG59XG5cbnR5cGUgRmlsZUluZm8gPSB7IHByb2plY3Q6IFByb2plY3QgfTtcblxuZXhwb3J0IGNsYXNzIEhvdFJlbG9hZFNlcnZlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxIb3RSZWxvYWRTZXJ2ZXJFdmVudHM+IHtcblx0Ly8g4pSA4pSAIFN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXHRwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihIb3RSZWxvYWRTZXJ2ZXIubmFtZSk7XG5cdHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBob29rc1JlZ2lzdGVyZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBlbnRyeU1vZHVsZVBhdGghOiBzdHJpbmc7XG5cdHByaXZhdGUgZW50cnlNb2R1bGU/OiBBc3luY0Rpc3Bvc2FibGU7XG5cdHByaXZhdGUgd29ya3NwYWNlPzogV29ya3NwYWNlO1xuXHRwcml2YXRlIGJ1aWxkQ29uZmlnID0gXCJkZWJ1Z1wiO1xuXHRwcml2YXRlIHdhdGNoU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXHQvKiogTWFwIGZyb20gYWJzb2x1dGUgLnRzIHNvdXJjZSBmaWxlIHBhdGggdG8gcHJvamVjdCBpbmZvICovXG5cdHByaXZhdGUgZmlsZUluZm9NYXAgPSBuZXcgTWFwPHN0cmluZywgRmlsZUluZm8+KCk7XG5cdHByaXZhdGUgbW9kdWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD4oKTtcblx0cHJpdmF0ZSBkZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG5cdHByaXZhdGUgdHJhbnNwaWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXHRwcml2YXRlIHRyYW5zcGlsZXIgPSBuZXcgU3djVHJhbnNwaWxlcigpO1xuXHRwcml2YXRlIGFsaWFzUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRwcml2YXRlIGFsaWFzQmFzZVVybCA9IHBhdGgucmVzb2x2ZShcIi5cIik7XG5cdHByaXZhdGUgcmVib290VGFpbDogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRwcml2YXRlIHJlYm9vdERlYm91bmNlR2VuID0gMDtcblx0cHJpdmF0ZSByZWJvb3RJbkZsaWdodCA9IGZhbHNlO1xuXHRwcml2YXRlIHJlYm9vdEZvbGxvd1VwID0gZmFsc2U7XG5cdHByaXZhdGUgcmVib290UXVldWVkID0gZmFsc2U7XG5cdHByaXZhdGUgc2NoZWR1bGVSZWJvb3Q6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuXHQvLyDilIDilIAgUHVibGljIEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwdWJsaWMgYXN5bmMgc3RhcnQob3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucykge1xuXHRcdHRoaXMuZGlzcG9zZWQgPSBmYWxzZTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLnRyYW5zcGlsZUNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5yZWJvb3RUYWlsID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IGZhbHNlO1xuXHRcdHRoaXMucmVib290Rm9sbG93VXAgPSBmYWxzZTtcblx0XHR0aGlzLnJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRcdHRoaXMuYmluZFNjaGVkdWxlUmVib290KHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKG9wdGlvbnMucmVib290RGVib3VuY2VNcykpO1xuXG5cdFx0Y29uc3QgeyBidWlsZENvbmZpZyB9ID0gb3B0aW9ucztcblx0XHR0aGlzLmJ1aWxkQ29uZmlnID0gYnVpbGRDb25maWc7XG5cdFx0dGhpcy53b3Jrc3BhY2UgPSBhd2FpdCB0aGlzLnJlc29sdmVXb3Jrc3BhY2Uob3B0aW9ucyk7XG5cdFx0Y29uc3QgcHJvamVjdCA9IHRoaXMucmVzb2x2ZVByb2plY3QoYnVpbGRDb25maWcsIG9wdGlvbnMucHJvamVjdCk7XG5cblx0XHR0aGlzLmVudHJ5TW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0LmdldFNvdXJjZUVudHJ5UGF0aCgpKTtcblx0XHR0aGlzLmZpbGVJbmZvTWFwID0gYXdhaXQgdGhpcy5idWlsZEZpbGVJbmZvTWFwKGJ1aWxkQ29uZmlnKTtcblx0XHR0aGlzLmFsaWFzUGF0aHMgPSBhd2FpdCB0aGlzLmJ1aWxkQWxpYXNQYXRocygpO1xuXG5cdFx0dGhpcy5yZWdpc3Rlckhvb2tzKCk7XG5cdFx0dGhpcy5pbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKTtcblxuXHRcdGF3YWl0IHRoaXMud29ya3NwYWNlLndhdGNoKGJ1aWxkQ29uZmlnKTtcblx0XHR0aGlzLndhdGNoU3Vic2NyaXB0aW9uID0gdGhpcy53b3Jrc3BhY2UucHJvamVjdEZpbGVDaGFuZ2VkJC5zdWJzY3JpYmUodGhpcy5vbkZpbGVDaGFuZ2UpO1xuXG5cdFx0dGhpcy5sb2dnZXIudHJhY2UoYFNlcnZpbmcgJHt0aGlzLmVudHJ5TW9kdWxlUGF0aH1gKTtcblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyeSgpO1xuXHRcdHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGRpc3Bvc2UoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHR0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnJlYm9vdERlYm91bmNlR2VuICs9IDE7XG5cdFx0dGhpcy53YXRjaFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLndvcmtzcGFjZT8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuXHRcdGF3YWl0IHRoaXMucmVib290VGFpbDtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VFbnRyeSgpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBhc3luYyBib290RW50cnkoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXMudmVyc2lvbk1vZHVsZShpby5wYXRoVG9GaWxlVXJsKHRoaXMuZW50cnlNb2R1bGVQYXRoKSk7XG5cdFx0XHR0aGlzLmVudHJ5TW9kdWxlID0gKGF3YWl0IGltcG9ydCh1cmwpKT8uZGVmYXVsdDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5lbnRyeU1vZHVsZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcIlRoZXJlIHdhcyBhbiBlcnJvciBib290aW5nIHRoZSBlbnRyeSBwb2ludC4gWW91ciBhcHBsaWNhdGlvbiBtYXkgbm90IGZ1bmN0aW9uIGFzIGV4cGVjdGVkXCIsXG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGJpbmRTY2hlZHVsZVJlYm9vdChkZWxheU1zOiBudW1iZXIpIHtcblx0XHRjb25zdCBnZW4gPSArK3RoaXMucmVib290RGVib3VuY2VHZW47XG5cdFx0dGhpcy5zY2hlZHVsZVJlYm9vdCA9IGRlYm91bmNlKGFzeW5jICgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkIHx8IGdlbiAhPT0gdGhpcy5yZWJvb3REZWJvdW5jZUdlbikgcmV0dXJuO1xuXHRcdFx0dGhpcy5yZXF1ZXN0UmVib290KCk7XG5cdFx0fSwgZGVsYXlNcyk7XG5cdH1cblxuXHRwcml2YXRlIHJlcXVlc3RSZWJvb3QoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHRpZiAodGhpcy5yZWJvb3RJbkZsaWdodCkge1xuXHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlYm9vdFF1ZXVlZCkgcmV0dXJuO1xuXHRcdHRoaXMucmVib290UXVldWVkID0gdHJ1ZTtcblx0XHR0aGlzLnJlYm9vdFRhaWwgPSB0aGlzLnJlYm9vdFRhaWwudGhlbihcblx0XHRcdCgpID0+IHRoaXMucnVuUmVib290KCksXG5cdFx0XHQoKSA9PiB0aGlzLnJ1blJlYm9vdCgpLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJ1blJlYm9vdCgpIHtcblx0XHR0aGlzLnJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG5cdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGRvIHtcblx0XHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IGZhbHNlO1xuXHRcdFx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci50cmFjZShcIlJlYm9vdGluZyBlbnRyeSBtb2R1bGVcIik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZGlzcG9zZUVudHJ5KCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuYm9vdEVudHJ5KCk7XG5cdFx0XHRcdHRoaXMuZW1pdChcInJlYm9vdFwiKTtcblx0XHRcdH0gd2hpbGUgKHRoaXMucmVib290Rm9sbG93VXAgJiYgIXRoaXMuZGlzcG9zZWQpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRjb25zdCBuZWVkc0ZvbGxvd1VwID0gdGhpcy5yZWJvb3RGb2xsb3dVcCAmJiAhdGhpcy5kaXNwb3NlZDtcblx0XHRcdHRoaXMucmVib290Rm9sbG93VXAgPSBmYWxzZTtcblx0XHRcdHRoaXMucmVib290SW5GbGlnaHQgPSBmYWxzZTtcblx0XHRcdGlmIChuZWVkc0ZvbGxvd1VwKSB0aGlzLnJlcXVlc3RSZWJvb3QoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3Bvc2VFbnRyeSgpIHtcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuZW50cnlNb2R1bGU7XG5cdFx0dGhpcy5lbnRyeU1vZHVsZSA9IHVuZGVmaW5lZDtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgZW50cnk/LltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcIkVudHJ5IGFzeW5jRGlzcG9zZSBmYWlsZWRcIiwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdC8vIOKUgOKUgCBTZXR1cCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGFzeW5jIHJlc29sdmVXb3Jrc3BhY2Uob3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V29ya3NwYWNlPiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG9wdGlvbnMud29ya3NwYWNlID8/XG5cdFx0XHRXb3Jrc3BhY2VGYWN0b3J5LmNyZWF0ZSh7IC4uLldvcmtzcGFjZURlZmF1bHRzLCByb290RGlyOiBwcm9jZXNzLmN3ZCgpIH0pXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVByb2plY3QoYnVpbGRDb25maWc6IHN0cmluZywgbmFtZT86IHN0cmluZyk6IFByb2plY3Qge1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy53b3Jrc3BhY2U/LmdldFByb2plY3RzKGJ1aWxkQ29uZmlnKSA/PyBbXTtcblx0XHRjb25zdCBmb3VuZCA9IG5hbWUgPT0gbnVsbCA/IHByb2plY3RzLmF0KDApIDogcHJvamVjdHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAoZm91bmQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRuYW1lID09IG51bGxcblx0XHRcdFx0XHQ/IGBObyBwcm9qZWN0cyBmb3VuZCBmb3IgY29uZmlndXJhdGlvbjogJHtidWlsZENvbmZpZ31gXG5cdFx0XHRcdFx0OiBgUHJvamVjdCBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gd29ya3NwYWNlYCxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYnVpbGRGaWxlSW5mb01hcChidWlsZENvbmZpZzogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBGaWxlSW5mbz4+IHtcblx0XHRjb25zdCBwcm9qZWN0cyA9IHRoaXMud29ya3NwYWNlPy5nZXRQcm9qZWN0cyhidWlsZENvbmZpZykgPz8gW107XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0cHJvamVjdHMubWFwKGFzeW5jIChwcm9qZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbGVzID0gYXdhaXQgcHJvamVjdC5nZXRBbGxGaWxlcygpO1xuXHRcdFx0XHRyZXR1cm4gZmlsZXMubWFwKChmaWxlKTogW3N0cmluZywgRmlsZUluZm9dID0+IFtmaWxlLmZ1bGxQYXRoLCB7IHByb2plY3QgfV0pO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0XHRyZXR1cm4gbmV3IE1hcChlbnRyaWVzLmZsYXQoKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVySG9va3MoKSB7XG5cdFx0aWYgKHRoaXMuaG9va3NSZWdpc3RlcmVkKSByZXR1cm47XG5cdFx0dGhpcy5ob29rc1JlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHJlZ2lzdGVySG9va3Moe1xuXHRcdFx0cmVzb2x2ZTogKFxuXHRcdFx0XHRzcGVjaWZpZXI6IHN0cmluZyxcblx0XHRcdFx0Y29udGV4dDogUmVzb2x2ZUhvb2tDb250ZXh0LFxuXHRcdFx0XHRuZXh0OiAoc3BlY2lmaWVyOiBzdHJpbmcsIGNvbnRleHQ/OiBQYXJ0aWFsPFJlc29sdmVIb29rQ29udGV4dD4pID0+IFJlc29sdmVGbk91dHB1dCxcblx0XHRcdCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuIG5leHQoc3BlY2lmaWVyLCBjb250ZXh0KTtcblx0XHRcdFx0Y29uc3QgcGFyZW50VXJsID0gY29udGV4dC5wYXJlbnRVUkwgPz8gXCJcIjtcblx0XHRcdFx0Y29uc3QgcmV3cml0dGVuID1cblx0XHRcdFx0XHRyZXdyaXRlU2VydmVTcGVjaWZpZXIoe1xuXHRcdFx0XHRcdFx0c3BlY2lmaWVyLFxuXHRcdFx0XHRcdFx0cGFyZW50VXJsLFxuXHRcdFx0XHRcdFx0aXNXYXRjaGVkVHM6IChmaWxlUGF0aCkgPT4gdGhpcy5maWxlSW5mb01hcC5oYXMoZmlsZVBhdGgpLFxuXHRcdFx0XHRcdFx0cmVzb2x2ZUJhcmU6IChiYXJlKSA9PlxuXHRcdFx0XHRcdFx0XHRwYWNrYWdlQWxpYXNlcy5yZXNvbHZlUGF0aChiYXJlLCB0aGlzLmFsaWFzUGF0aHMsIHRoaXMuYWxpYXNCYXNlVXJsKSxcblx0XHRcdFx0XHRcdHZlcnNpb25GaWxlVXJsOiAoZmlsZVVybCkgPT4gdGhpcy5nZXRDYWNoZWRPck5ldyhmaWxlVXJsKSxcblx0XHRcdFx0XHR9KSA/PyBzcGVjaWZpZXI7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG5leHQocmV3cml0dGVuLCBjb250ZXh0KSBhcyBSZXNvbHZlRm5PdXRwdXQ7XG5cdFx0XHRcdHRoaXMub25Qb3N0UmVzb2x2ZShyZXN1bHQsIHBhcmVudFVybCk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0bG9hZDogKFxuXHRcdFx0XHR1cmw6IHN0cmluZyxcblx0XHRcdFx0Y29udGV4dDogTG9hZEhvb2tDb250ZXh0LFxuXHRcdFx0XHRuZXh0OiAodXJsOiBzdHJpbmcsIGNvbnRleHQ/OiBQYXJ0aWFsPExvYWRIb29rQ29udGV4dD4pID0+IExvYWRGbk91dHB1dCxcblx0XHRcdCk6IExvYWRGbk91dHB1dCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm4gbmV4dCh1cmwsIGNvbnRleHQpO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmxvYWRUcyh1cmwpO1xuXHRcdFx0XHRpZiAocmVzdWx0ICE9IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIHsgZm9ybWF0OiBcIm1vZHVsZVwiLCBzb3VyY2U6IHJlc3VsdC5zb3VyY2UsIHNob3J0Q2lyY3VpdDogdHJ1ZSB9O1xuXHRcdFx0XHRyZXR1cm4gbmV4dCh1cmwsIGNvbnRleHQpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8vIOKUgOKUgCBNb2R1bGUgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZEFsaWFzUGF0aHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IHtcblx0XHRjb25zdCB3b3Jrc3BhY2UgPSB0aGlzLndvcmtzcGFjZTtcblx0XHRpZiAod29ya3NwYWNlID09IG51bGwpIHJldHVybiB7fTtcblxuXHRcdGNvbnN0IHBhY2thZ2VBbGlhc2VzID0gd29ya3NwYWNlLmdldFBhY2thZ2VBbGlhc2VzKHRoaXMuYnVpbGRDb25maWcpO1xuXHRcdHRoaXMuYWxpYXNCYXNlVXJsID0gcGFja2FnZUFsaWFzZXMuYmFzZVVybDtcblx0XHRyZXR1cm4gcGFja2FnZUFsaWFzZXMucGF0aHM7XG5cdH1cblxuXHQvKipcblx0ICogUG9zdC1uZXh0IGRlcGVuZGVuY3kgdHJhY2tlcjogcmVjb3JkcyB3aGljaCBzb3VyY2UgZmlsZXMgaW1wb3J0IHdoaWNoXG5cdCAqIG90aGVyIHNvdXJjZSBmaWxlcyBzbyB0aGF0IHJlbG9hZElmQWZmZWN0ZWQgY2FuIHRyYXZlcnNlIHRoZSBncmFwaC5cblx0ICovXG5cdHByaXZhdGUgb25Qb3N0UmVzb2x2ZSA9IChyZXN1bHQ6IFJlc29sdmVGbk91dHB1dCwgcGFyZW50VXJsOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCB7IHVybCB9ID0gcmVzdWx0O1xuXHRcdGNvbnN0IHBhcmVudFVybENsZWFuID0gcGFyZW50VXJsLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdGxldCBmaWxlUGF0aDogc3RyaW5nO1xuXHRcdGxldCBwYXJlbnRQYXRoOiBzdHJpbmc7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuXHRcdFx0dXJsT2JqLnNlYXJjaCA9IFwiXCI7XG5cdFx0XHRmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgodXJsT2JqLnRvU3RyaW5nKCkpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRwYXJlbnRQYXRoID0gaW8uZmlsZVVybFRvUGF0aChwYXJlbnRVcmxDbGVhbik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRwYXJlbnRQYXRoID0gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBpc1NvdXJjZSA9IHRoaXMuZmlsZUluZm9NYXAuaGFzKGZpbGVQYXRoKTtcblx0XHRjb25zdCBwYXJlbnRJc1NvdXJjZSA9IHRoaXMuZmlsZUluZm9NYXAuaGFzKHBhcmVudFBhdGgpO1xuXG5cdFx0aWYgKGlzU291cmNlIHx8IHBhcmVudElzU291cmNlKSB7XG5cdFx0XHR0aGlzLnRyYWNrRGVwZW5kZW5jeShmaWxlUGF0aCwgcGFyZW50UGF0aCk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgbG9hZFRzOiBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHtcblx0XHRpZiAoIXVybC5zdGFydHNXaXRoKFwiZmlsZTpcIikpIHJldHVybiBudWxsO1xuXG5cdFx0Y29uc3QgY2xlYW5QYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lO1xuXHRcdGNvbnN0IGZpbGVJbmZvID0gdGhpcy5maWxlSW5mb01hcC5nZXQoY2xlYW5QYXRoKTtcblx0XHRpZiAoZmlsZUluZm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCBjYWNoZWQgPSB0aGlzLnRyYW5zcGlsZUNhY2hlLmdldChjbGVhblBhdGgpO1xuXHRcdGlmIChjYWNoZWQgIT0gbnVsbCkgcmV0dXJuIHsgc291cmNlOiBjYWNoZWQgfTtcblxuXHRcdGNvbnN0IHsgcHJvamVjdCB9ID0gZmlsZUluZm87XG5cdFx0Y29uc3QgdHNDb25maWcgPSBwcm9qZWN0LmdldFRzQ29uZmlnU3luYygpO1xuXHRcdGNvbnN0IHVzZXJDb25maWcgPSBwcm9qZWN0LmdldFN3Y0NvbmZpZ1N5bmMoKTtcblxuXHRcdGNvbnN0IGZpbGUgPSBuZXcgRmlsZUV4KHsgZnVsbFBhdGg6IGNsZWFuUGF0aCB9KTtcblx0XHRjb25zdCByZXNwb25zZSA9IHRoaXMudHJhbnNwaWxlci50cmFuc2Zvcm1GaWxlU3luYyhmaWxlLCBCdWlsZFRhcmdldHMuZXM2LCB7XG5cdFx0XHR0c0NvbmZpZyxcblx0XHRcdGFsaWFzUGF0aHM6IHRydWUsXG5cdFx0XHR1c2VyQ29uZmlnLFxuXHRcdFx0d29ya3NwYWNlOiB0aGlzLndvcmtzcGFjZSxcblx0XHRcdHByb2plY3RzOiB0aGlzLndvcmtzcGFjZT8uZ2V0UHJvamVjdHModGhpcy5idWlsZENvbmZpZyksXG5cdFx0fSk7XG5cblx0XHRpZiAocmVzcG9uc2Uub3V0Y29tZSAhPT0gXCJzdWNjZXNzXCIpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdHJhbnNwaWxlICR7Y2xlYW5QYXRofWAsIHJlc3BvbnNlKTtcblx0XHRcdC8vIERvIG5vdCBmYWxsIHRocm91Z2ggdG8gbmV4dCgpOiBWaXRlc3QvTm9kZSBsb2FkZXJzIGNhbiBkZWFkbG9jayBvbiBhXG5cdFx0XHQvLyB2ZXJzaW9uZWQgLnRzIFVSTC4gRmFpbCB0aGUgaW1wb3J0IHNvIGJvb3RFbnRyeSBjYW4gY2F0Y2ggYW5kIGNvbnRpbnVlLlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdHJhbnNwaWxlICR7Y2xlYW5QYXRofWApO1xuXHRcdH1cblxuXHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuc2V0KGNsZWFuUGF0aCwgcmVzcG9uc2UuY29kZSk7XG5cdFx0cmV0dXJuIHsgc291cmNlOiByZXNwb25zZS5jb2RlIH07XG5cdH07XG5cblx0Ly8g4pSA4pSAIEZpbGUgd2F0Y2hpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBvbkZpbGVDaGFuZ2UgPSAoZXZ0OiBQcm9qZWN0RmlsZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgeyBmaWxlLCBldmVudE5hbWUsIHByb2plY3QgfSA9IGV2dDtcblx0XHRjb25zdCBmdWxsUGF0aCA9IGZpbGUuZnVsbFBhdGg7XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShgRmlsZSAke2V2ZW50TmFtZX06ICR7ZnVsbFBhdGh9YCk7XG5cblx0XHRpZiAoZXZlbnROYW1lID09PSBpby5XYXRjaEV2ZW50cy51bmxpbmspIHtcblx0XHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKGZ1bGxQYXRoKTtcblx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZ1bGxQYXRoLCBudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoZXZlbnROYW1lID09PSBpby5XYXRjaEV2ZW50cy5hZGQpIHtcblx0XHRcdGlmIChwcm9qZWN0LmlzU291cmNlRmlsZShmaWxlKSkge1xuXHRcdFx0XHR0aGlzLmZpbGVJbmZvTWFwLnNldChmdWxsUGF0aCwgeyBwcm9qZWN0IH0pO1xuXHRcdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmdWxsUGF0aCwgbnVsbCk7XG5cdFx0XHRcdHRoaXMucmVsb2FkSWZBZmZlY3RlZChmdWxsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gY2hhbmdlXG5cdFx0aWYgKCFwcm9qZWN0LmlzU291cmNlRmlsZShmaWxlKSkgcmV0dXJuO1xuXHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKGZ1bGxQYXRoKTtcblx0XHR0aGlzLnRyYW5zcGlsZXIuaW52YWxpZGF0ZUNvbnRlbnRDYWNoZShuZXcgRmlsZUV4KHsgZnVsbFBhdGggfSkpO1xuXHRcdHRoaXMucmVsb2FkSWZBZmZlY3RlZChmdWxsUGF0aCk7XG5cdH07XG5cblx0cHJpdmF0ZSByZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5nZXREZXBlbmRlbmN5R3JhcGgoZnVsbFBhdGgpO1xuXHRcdGNvbnN0IG1vZHVsZXMgPSBbLi4ubmV3IFNldChbLi4uZGVwcywgZnVsbFBhdGhdKV07XG5cblx0XHRpZiAoIW1vZHVsZXMuaW5jbHVkZXModGhpcy5lbnRyeU1vZHVsZVBhdGgpKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci50cmFjZShgQ2hhbmdlIGluICR7ZnVsbFBhdGh9IGRvZXMgbm90IGFmZmVjdCBlbnRyeSDigJQgc2tpcHBpbmcgcmVsb2FkYCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5sb2dnZXIudHJhY2UoXG5cdFx0XHRgQ2hhbmdlIGluICR7ZnVsbFBhdGh9IGFmZmVjdHMgJHttb2R1bGVzLmxlbmd0aH0gbW9kdWxlKHMpIOKAlCBzY2hlZHVsaW5nIHJlbG9hZGAsXG5cdFx0KTtcblx0XHR0aGlzLmludmFsaWRhdGVNb2R1bGUoLi4ubW9kdWxlcyk7XG5cdFx0dGhpcy5zY2hlZHVsZVJlYm9vdCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8g4pSA4pSAIERlcGVuZGVuY3kgZ3JhcGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBnZXREZXBlbmRlbmN5R3JhcGgobW9kdWxlSWQ6IHN0cmluZywgcGFyZW50TW9kdWxlczogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcblx0XHRpZiAodGhpcy5pc1NlbGYobW9kdWxlSWQpKSByZXR1cm4gW107XG5cblx0XHRjb25zdCBtb2R1bGVEZXBzID0gdGhpcy5kZXBlbmRlbmNpZXMuZ2V0KG1vZHVsZUlkKSA/PyBbXTtcblx0XHRpZiAocGFyZW50TW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVJZCkpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQ6ICR7bW9kdWxlSWR9YCk7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0bGV0IHN1YkRlcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBkZXAgb2YgbW9kdWxlRGVwcykge1xuXHRcdFx0aWYgKCF0aGlzLmZpbGVJbmZvTWFwLmhhcyhkZXApKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IHN1YnMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChkZXAsIFttb2R1bGVJZCwgLi4ucGFyZW50TW9kdWxlc10pO1xuXHRcdFx0c3ViRGVwcyA9IFsuLi5zdWJEZXBzLCAuLi5zdWJzXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gWy4uLm5ldyBTZXQoWy4uLm1vZHVsZURlcHMsIC4uLnN1YkRlcHNdKV07XG5cdH1cblxuXHRwcml2YXRlIHRyYWNrRGVwZW5kZW5jeShmaWxlUGF0aDogc3RyaW5nLCBwYXJlbnRQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAoIXBhcmVudFBhdGgpIHJldHVybjtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5kZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSA/PyBbXTtcblx0XHRjb25zdCB1cGRhdGVkRGVwcyA9IG5ldyBTZXQoWy4uLmRlcHMsIHBhcmVudFBhdGhdKTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5zZXQoZmlsZVBhdGgsIFsuLi51cGRhdGVkRGVwc10pO1xuXHR9XG5cblx0Ly8g4pSA4pSAIE1vZHVsZSBjYWNoZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGdldENhY2hlZE9yTmV3KG1vZHVsZVVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBpby5maWxlVXJsVG9QYXRoKG1vZHVsZVVybCk7XG5cdFx0Y29uc3QgY2FjaGVkID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoZmlsZVBhdGgpO1xuXHRcdGNvbnN0IHZlcnNpb25lZCA9IGNhY2hlZCA/PyB0aGlzLnZlcnNpb25Nb2R1bGUobW9kdWxlVXJsKTtcblx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmaWxlUGF0aCwgdmVyc2lvbmVkKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkO1xuXHR9XG5cblx0cHJpdmF0ZSB2ZXJzaW9uTW9kdWxlKG1vZHVsZVVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgdmVyc2lvbmVkVXJsID0gbmV3IFVSTChtb2R1bGVVcmwpO1xuXHRcdHZlcnNpb25lZFVybC5zZWFyY2hQYXJhbXMuc2V0KFZFUlNJT05fVVJMX1BBUkFNLCBTdHJpbmcoKyttb2R1bGVWZXJzaW9uU2VxKSk7XG5cdFx0cmV0dXJuIHZlcnNpb25lZFVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlTW9kdWxlKC4uLm1vZHVsZXM6IHN0cmluZ1tdKSB7XG5cdFx0Zm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQobW9kdWxlLCBudWxsKTtcblx0XHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKG1vZHVsZSk7XG5cdFx0XHQvLyBQcnVuZSBzdGFsZSBvdXRnb2luZyBlZGdlczogcmVtb3ZlIHRoaXMgbW9kdWxlIGFzIGEgcGFyZW50IGZyb20gYWxsIGRlcGVuZGVuY3kgbGlzdHNcblx0XHRcdGZvciAoY29uc3QgW2tleSwgcGFyZW50c10gb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyZWQgPSBwYXJlbnRzLmZpbHRlcigocCkgPT4gcCAhPT0gbW9kdWxlKTtcblx0XHRcdFx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzLmRlbGV0ZShrZXkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzLnNldChrZXksIGZpbHRlcmVkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaW52YWxpZGF0ZUFsbFNvdXJjZUZpbGVzKCkge1xuXHRcdGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5maWxlSW5mb01hcC5rZXlzKCkpIHtcblx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZpbGVQYXRoLCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvLyDilIDilIAgVXRpbGl0aWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgaXNTZWxmKGZpbGVQYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gY3VycmVudEZpbGVQYXRoID09PSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMiLCJIb3RSZWxvYWRTZXJ2ZXIiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsImN1cnJlbnRGaWxlUGF0aCIsImlvIiwiZmlsZVVybFRvUGF0aCIsIlZFUlNJT05fVVJMX1BBUkFNIiwidmFsdWUiLCJkZWxheSIsIk51bWJlciIsImlzRmluaXRlIiwiRXJyb3IiLCJTdHJpbmciLCJtb2R1bGVWZXJzaW9uU2VxIiwiRXZlbnRFbWl0dGVyIiwibG9nZ2VyIiwic2NyaWJlIiwibmFtZSIsImRpc3Bvc2VkIiwiaG9va3NSZWdpc3RlcmVkIiwiZW50cnlNb2R1bGVQYXRoIiwiZW50cnlNb2R1bGUiLCJ3b3Jrc3BhY2UiLCJidWlsZENvbmZpZyIsIndhdGNoU3Vic2NyaXB0aW9uIiwiZmlsZUluZm9NYXAiLCJNYXAiLCJtb2R1bGVDYWNoZSIsImRlcGVuZGVuY2llcyIsInRyYW5zcGlsZUNhY2hlIiwidHJhbnNwaWxlciIsIlN3Y1RyYW5zcGlsZXIiLCJhbGlhc1BhdGhzIiwiYWxpYXNCYXNlVXJsIiwicGF0aCIsInJlc29sdmUiLCJyZWJvb3RUYWlsIiwiUHJvbWlzZSIsInJlYm9vdERlYm91bmNlR2VuIiwicmVib290SW5GbGlnaHQiLCJyZWJvb3RGb2xsb3dVcCIsInJlYm9vdFF1ZXVlZCIsInNjaGVkdWxlUmVib290Iiwic3RhcnQiLCJvcHRpb25zIiwiY2xlYXIiLCJiaW5kU2NoZWR1bGVSZWJvb3QiLCJyZWJvb3REZWJvdW5jZU1zIiwicmVzb2x2ZVdvcmtzcGFjZSIsInByb2plY3QiLCJyZXNvbHZlUHJvamVjdCIsImdldFNvdXJjZUVudHJ5UGF0aCIsImJ1aWxkRmlsZUluZm9NYXAiLCJidWlsZEFsaWFzUGF0aHMiLCJyZWdpc3Rlckhvb2tzIiwiaW52YWxpZGF0ZUFsbFNvdXJjZUZpbGVzIiwid2F0Y2giLCJwcm9qZWN0RmlsZUNoYW5nZWQkIiwic3Vic2NyaWJlIiwib25GaWxlQ2hhbmdlIiwidHJhY2UiLCJib290RW50cnkiLCJlbWl0IiwiZGlzcG9zZSIsInVuc3Vic2NyaWJlIiwiU3ltYm9sIiwiZGlzcG9zZUVudHJ5IiwiYXN5bmNEaXNwb3NlIiwidXJsIiwidmVyc2lvbk1vZHVsZSIsInBhdGhUb0ZpbGVVcmwiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJkZWxheU1zIiwiZ2VuIiwiZGVib3VuY2UiLCJyZXF1ZXN0UmVib290IiwidGhlbiIsInJ1blJlYm9vdCIsIm5lZWRzRm9sbG93VXAiLCJlbnRyeSIsIldvcmtzcGFjZUZhY3RvcnkiLCJjcmVhdGUiLCJXb3Jrc3BhY2VEZWZhdWx0cyIsInJvb3REaXIiLCJwcm9jZXNzIiwiY3dkIiwicHJvamVjdHMiLCJnZXRQcm9qZWN0cyIsImZvdW5kIiwiYXQiLCJmaW5kIiwicCIsImVudHJpZXMiLCJhbGwiLCJtYXAiLCJmaWxlcyIsImdldEFsbEZpbGVzIiwiZmlsZSIsImZ1bGxQYXRoIiwiZmxhdCIsInNwZWNpZmllciIsImNvbnRleHQiLCJuZXh0IiwicGFyZW50VXJsIiwicGFyZW50VVJMIiwicmV3cml0dGVuIiwicmV3cml0ZVNlcnZlU3BlY2lmaWVyIiwiaXNXYXRjaGVkVHMiLCJmaWxlUGF0aCIsImhhcyIsInJlc29sdmVCYXJlIiwiYmFyZSIsInBhY2thZ2VBbGlhc2VzIiwicmVzb2x2ZVBhdGgiLCJ2ZXJzaW9uRmlsZVVybCIsImZpbGVVcmwiLCJnZXRDYWNoZWRPck5ldyIsInJlc3VsdCIsIm9uUG9zdFJlc29sdmUiLCJsb2FkIiwibG9hZFRzIiwiZm9ybWF0Iiwic291cmNlIiwic2hvcnRDaXJjdWl0IiwiZ2V0UGFja2FnZUFsaWFzZXMiLCJiYXNlVXJsIiwicGF0aHMiLCJwYXJlbnRVcmxDbGVhbiIsInNwbGl0IiwicGFyZW50UGF0aCIsInVybE9iaiIsIlVSTCIsInNlYXJjaCIsInRvU3RyaW5nIiwiaXNTb3VyY2UiLCJwYXJlbnRJc1NvdXJjZSIsInRyYWNrRGVwZW5kZW5jeSIsInN0YXJ0c1dpdGgiLCJjbGVhblBhdGgiLCJwYXRobmFtZSIsImZpbGVJbmZvIiwiZ2V0IiwiY2FjaGVkIiwidHNDb25maWciLCJnZXRUc0NvbmZpZ1N5bmMiLCJ1c2VyQ29uZmlnIiwiZ2V0U3djQ29uZmlnU3luYyIsIkZpbGVFeCIsInJlc3BvbnNlIiwidHJhbnNmb3JtRmlsZVN5bmMiLCJCdWlsZFRhcmdldHMiLCJlczYiLCJvdXRjb21lIiwic2V0IiwiY29kZSIsImV2dCIsImV2ZW50TmFtZSIsIldhdGNoRXZlbnRzIiwidW5saW5rIiwiZGVsZXRlIiwiYWRkIiwiaXNTb3VyY2VGaWxlIiwicmVsb2FkSWZBZmZlY3RlZCIsImludmFsaWRhdGVDb250ZW50Q2FjaGUiLCJkZXBzIiwiZ2V0RGVwZW5kZW5jeUdyYXBoIiwibW9kdWxlcyIsIlNldCIsImluY2x1ZGVzIiwibGVuZ3RoIiwiaW52YWxpZGF0ZU1vZHVsZSIsIm1vZHVsZUlkIiwicGFyZW50TW9kdWxlcyIsImlzU2VsZiIsIm1vZHVsZURlcHMiLCJzdWJEZXBzIiwiZGVwIiwic3VicyIsInVwZGF0ZWREZXBzIiwibW9kdWxlVXJsIiwidmVyc2lvbmVkIiwidmVyc2lvbmVkVXJsIiwic2VhcmNoUGFyYW1zIiwibW9kdWxlIiwia2V5IiwicGFyZW50cyIsImZpbHRlcmVkIiwiZmlsdGVyIiwia2V5cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUF1QmFBO2VBQUFBOztRQXFDQUM7ZUFBQUE7O1FB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
|
package/commonjs/src/index.js
CHANGED
|
@@ -9,6 +9,9 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
get DEFAULT_REBOOT_DEBOUNCE_MS () {
|
|
13
|
+
return _hotreloadserver.DEFAULT_REBOOT_DEBOUNCE_MS;
|
|
14
|
+
},
|
|
12
15
|
get FluxModule () {
|
|
13
16
|
return _fluxmodule.FluxModule;
|
|
14
17
|
},
|
|
@@ -19,4 +22,4 @@ _export(exports, {
|
|
|
19
22
|
const _fluxmodule = require("./flux.module.js");
|
|
20
23
|
const _hotreloadserver = require("./hot-reload-server.js");
|
|
21
24
|
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZsdXhNb2R1bGUgfSBmcm9tIFwiLi9mbHV4Lm1vZHVsZS5qc1wiO1xuZXhwb3J0IHR5cGUgeyBIb3RSZWxvYWRTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmV4cG9ydCB7IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TLCBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZU9wdGlvbnMgfSBmcm9tIFwiLi9zZXJ2ZS5hY3Rpb24uanNcIjtcbiJdLCJuYW1lcyI6WyJERUZBVUxUX1JFQk9PVF9ERUJPVU5DRV9NUyIsIkZsdXhNb2R1bGUiLCJIb3RSZWxvYWRTZXJ2ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBRVNBO2VBQUFBLDJDQUEwQjs7UUFGMUJDO2VBQUFBLHNCQUFVOztRQUVrQkM7ZUFBQUEsZ0NBQWU7Ozs0QkFGekI7aUNBRWlDIn0=
|
|
@@ -32,7 +32,8 @@ class ServeAction {
|
|
|
32
32
|
await this.server.start({
|
|
33
33
|
workspace: this.workspace,
|
|
34
34
|
buildConfig: options.configuration,
|
|
35
|
-
project: options.project
|
|
35
|
+
project: options.project,
|
|
36
|
+
rebootDebounceMs: options.rebootDebounceMs
|
|
36
37
|
});
|
|
37
38
|
return _cli.ActionResponse.Blocking(ServeAction.name);
|
|
38
39
|
}
|
|
@@ -46,4 +47,4 @@ ServeAction = _ts_decorate([
|
|
|
46
47
|
])
|
|
47
48
|
], ServeAction);
|
|
48
49
|
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJ2ZU9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcblx0cHJvamVjdD86IHN0cmluZztcblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBIb3RSZWxvYWRTZXJ2ZXIsXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0KSB7fVxuXG5cdHB1YmxpYyBhc3luYyBydW4ob3B0aW9uczogU2VydmVPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdHdvcmtzcGFjZTogdGhpcy53b3Jrc3BhY2UsXG5cdFx0XHRidWlsZENvbmZpZzogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuXHRcdFx0cHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuXHRcdFx0cmVib290RGVib3VuY2VNczogb3B0aW9ucy5yZWJvb3REZWJvdW5jZU1zLFxuXHRcdH0pO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNlcnZlQWN0aW9uIiwic2VydmVyIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsInN0YXJ0IiwiYnVpbGRDb25maWciLCJjb25maWd1cmF0aW9uIiwicHJvamVjdCIsInJlYm9vdERlYm91bmNlTXMiLCJBY3Rpb25SZXNwb25zZSIsIkJsb2NraW5nIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7OzsrQkFjYUE7OztlQUFBQTs7OzRCQWRjO3NCQUVEO3FCQUNrQjtpQ0FFWjs7Ozs7Ozs7OztBQVN6QixNQUFNQTs7O0lBQ1osWUFDQyxBQUFpQkMsTUFBdUIsRUFDeEMsQUFBaUJDLFNBQW9CLENBQ3BDO2FBRmdCRCxTQUFBQTthQUNBQyxZQUFBQTtJQUNmO0lBRUgsTUFBYUMsSUFBSUMsT0FBcUIsRUFBMkI7UUFDaEUsTUFBTSxJQUFJLENBQUNILE1BQU0sQ0FBQ0ksS0FBSyxDQUFDO1lBQ3ZCSCxXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6QkksYUFBYUYsUUFBUUcsYUFBYTtZQUNsQ0MsU0FBU0osUUFBUUksT0FBTztZQUN4QkMsa0JBQWtCTCxRQUFRSyxnQkFBZ0I7UUFDM0M7UUFDQSxPQUFPQyxtQkFBYyxDQUFDQyxRQUFRLENBQUNYLFlBQVlZLElBQUk7SUFDaEQ7QUFDRCJ9
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "ServeCommand", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _cli = require("@decohere/nexus/cli");
|
|
12
|
+
const _hotreloadserver = require("./hot-reload-server.js");
|
|
12
13
|
const _serveaction = require("./serve.action.js");
|
|
13
14
|
class ServeCommand extends _cli.DecohereCommand {
|
|
14
15
|
get actions() {
|
|
@@ -21,7 +22,8 @@ class ServeCommand extends _cli.DecohereCommand {
|
|
|
21
22
|
this.description("Serve a project in a workspace configuration");
|
|
22
23
|
this.addOption(new _cli.ConfigurationOption("debug"));
|
|
23
24
|
this.addOption(new _cli.ProjectOption());
|
|
25
|
+
this.option("--reboot-debounce-ms <ms>", "Quiet window in milliseconds after the last affecting save before a reboot", (value)=>(0, _hotreloadserver.resolveRebootDebounceMs)(Number(value)), _hotreloadserver.DEFAULT_REBOOT_DEBOUNCE_MS);
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhdGlvbk9wdGlvbiwgRGVjb2hlcmVDb21tYW5kLCBQcm9qZWN0T3B0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TLCByZXNvbHZlUmVib290RGVib3VuY2VNcyB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZUFjdGlvbiB9IGZyb20gXCIuL3NlcnZlLmFjdGlvbi5qc1wiO1xuXG5leHBvcnQgY2xhc3MgU2VydmVDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbU2VydmVBY3Rpb25dO1xuXHR9XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJTZXJ2ZSBhIHByb2plY3QgaW4gYSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvblwiKTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgQ29uZmlndXJhdGlvbk9wdGlvbihcImRlYnVnXCIpKTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgUHJvamVjdE9wdGlvbigpKTtcblx0XHR0aGlzLm9wdGlvbihcblx0XHRcdFwiLS1yZWJvb3QtZGVib3VuY2UtbXMgPG1zPlwiLFxuXHRcdFx0XCJRdWlldCB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGFmZmVjdGluZyBzYXZlIGJlZm9yZSBhIHJlYm9vdFwiLFxuXHRcdFx0KHZhbHVlOiBzdHJpbmcpID0+IHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKE51bWJlcih2YWx1ZSkpLFxuXHRcdFx0REVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsXG5cdFx0KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlNlcnZlQ29tbWFuZCIsIkRlY29oZXJlQ29tbWFuZCIsImFjdGlvbnMiLCJTZXJ2ZUFjdGlvbiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIkNvbmZpZ3VyYXRpb25PcHRpb24iLCJQcm9qZWN0T3B0aW9uIiwib3B0aW9uIiwidmFsdWUiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsIk51bWJlciIsIkRFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TIl0sIm1hcHBpbmdzIjoiOzs7OytCQUlhQTs7O2VBQUFBOzs7cUJBSnVEO2lDQUNBOzZCQUN4QztBQUVyQixNQUFNQSxxQkFBcUJDLG9CQUFlO0lBQ2hELElBQW9CQyxVQUFVO1FBQzdCLE9BQU87WUFBQ0Msd0JBQVc7U0FBQztJQUNyQjtJQUVBLFlBQW1CQyxJQUFZLENBQUU7UUFDaEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUlDLHdCQUFtQixDQUFDO1FBQ3ZDLElBQUksQ0FBQ0QsU0FBUyxDQUFDLElBQUlFLGtCQUFhO1FBQ2hDLElBQUksQ0FBQ0MsTUFBTSxDQUNWLDZCQUNBLDhFQUNBLENBQUNDLFFBQWtCQyxJQUFBQSx3Q0FBdUIsRUFBQ0MsT0FBT0YsU0FDbERHLDJDQUEwQjtJQUU1QjtBQUNEIn0=
|
|
@@ -9,7 +9,14 @@ import { scribe } from "@decohere/scribe";
|
|
|
9
9
|
import { rewriteServeSpecifier } from "./rewrite-serve-specifier.js";
|
|
10
10
|
const currentFilePath = io.fileUrlToPath(import.meta.url);
|
|
11
11
|
const VERSION_URL_PARAM = "version";
|
|
12
|
-
const
|
|
12
|
+
/** Default quiet window before a file-change reboot. */ export const DEFAULT_REBOOT_DEBOUNCE_MS = 250;
|
|
13
|
+
export function resolveRebootDebounceMs(value) {
|
|
14
|
+
const delay = value ?? DEFAULT_REBOOT_DEBOUNCE_MS;
|
|
15
|
+
if (!Number.isFinite(delay) || delay < 0) {
|
|
16
|
+
throw new Error(`rebootDebounceMs must be a non-negative number, got ${String(value)}`);
|
|
17
|
+
}
|
|
18
|
+
return delay;
|
|
19
|
+
}
|
|
13
20
|
/** Process-wide: Node's ESM cache is process-global, including across HotReloadServer instances. */ let moduleVersionSeq = 0;
|
|
14
21
|
export class HotReloadServer extends EventEmitter {
|
|
15
22
|
// ── State ────────────────────────────────────────────────────────────────
|
|
@@ -29,6 +36,11 @@ export class HotReloadServer extends EventEmitter {
|
|
|
29
36
|
aliasPaths = {};
|
|
30
37
|
aliasBaseUrl = path.resolve(".");
|
|
31
38
|
rebootTail = Promise.resolve();
|
|
39
|
+
rebootDebounceGen = 0;
|
|
40
|
+
rebootInFlight = false;
|
|
41
|
+
rebootFollowUp = false;
|
|
42
|
+
rebootQueued = false;
|
|
43
|
+
scheduleReboot = ()=>{};
|
|
32
44
|
// ── Public API ───────────────────────────────────────────────────────────
|
|
33
45
|
async start(options) {
|
|
34
46
|
this.disposed = false;
|
|
@@ -36,6 +48,10 @@ export class HotReloadServer extends EventEmitter {
|
|
|
36
48
|
this.moduleCache.clear();
|
|
37
49
|
this.transpileCache.clear();
|
|
38
50
|
this.rebootTail = Promise.resolve();
|
|
51
|
+
this.rebootInFlight = false;
|
|
52
|
+
this.rebootFollowUp = false;
|
|
53
|
+
this.rebootQueued = false;
|
|
54
|
+
this.bindScheduleReboot(resolveRebootDebounceMs(options.rebootDebounceMs));
|
|
39
55
|
const { buildConfig } = options;
|
|
40
56
|
this.buildConfig = buildConfig;
|
|
41
57
|
this.workspace = await this.resolveWorkspace(options);
|
|
@@ -54,6 +70,7 @@ export class HotReloadServer extends EventEmitter {
|
|
|
54
70
|
async dispose() {
|
|
55
71
|
if (this.disposed) return;
|
|
56
72
|
this.disposed = true;
|
|
73
|
+
this.rebootDebounceGen += 1;
|
|
57
74
|
this.watchSubscription?.unsubscribe();
|
|
58
75
|
this.workspace?.[Symbol.dispose]();
|
|
59
76
|
await this.rebootTail;
|
|
@@ -72,15 +89,42 @@ export class HotReloadServer extends EventEmitter {
|
|
|
72
89
|
this.logger.error("There was an error booting the entry point. Your application may not function as expected", error);
|
|
73
90
|
}
|
|
74
91
|
}
|
|
75
|
-
|
|
92
|
+
bindScheduleReboot(delayMs) {
|
|
93
|
+
const gen = ++this.rebootDebounceGen;
|
|
94
|
+
this.scheduleReboot = debounce(async ()=>{
|
|
95
|
+
if (this.disposed || gen !== this.rebootDebounceGen) return;
|
|
96
|
+
this.requestReboot();
|
|
97
|
+
}, delayMs);
|
|
98
|
+
}
|
|
99
|
+
requestReboot() {
|
|
100
|
+
if (this.disposed) return;
|
|
101
|
+
if (this.rebootInFlight) {
|
|
102
|
+
this.rebootFollowUp = true;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (this.rebootQueued) return;
|
|
106
|
+
this.rebootQueued = true;
|
|
76
107
|
this.rebootTail = this.rebootTail.then(()=>this.runReboot(), ()=>this.runReboot());
|
|
77
|
-
}
|
|
108
|
+
}
|
|
78
109
|
async runReboot() {
|
|
110
|
+
this.rebootQueued = false;
|
|
79
111
|
if (this.disposed) return;
|
|
80
|
-
this.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
112
|
+
this.rebootInFlight = true;
|
|
113
|
+
try {
|
|
114
|
+
do {
|
|
115
|
+
this.rebootFollowUp = false;
|
|
116
|
+
if (this.disposed) return;
|
|
117
|
+
this.logger.trace("Rebooting entry module");
|
|
118
|
+
await this.disposeEntry();
|
|
119
|
+
await this.bootEntry();
|
|
120
|
+
this.emit("reboot");
|
|
121
|
+
}while (this.rebootFollowUp && !this.disposed)
|
|
122
|
+
} finally{
|
|
123
|
+
const needsFollowUp = this.rebootFollowUp && !this.disposed;
|
|
124
|
+
this.rebootFollowUp = false;
|
|
125
|
+
this.rebootInFlight = false;
|
|
126
|
+
if (needsFollowUp) this.requestReboot();
|
|
127
|
+
}
|
|
84
128
|
}
|
|
85
129
|
async disposeEntry() {
|
|
86
130
|
const entry = this.entryModule;
|
|
@@ -338,4 +382,4 @@ export class HotReloadServer extends EventEmitter {
|
|
|
338
382
|
}
|
|
339
383
|
}
|
|
340
384
|
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMb2FkRm5PdXRwdXQsXG5cdExvYWRIb29rQ29udGV4dCxcblx0UmVzb2x2ZUZuT3V0cHV0LFxuXHRSZXNvbHZlSG9va0NvbnRleHQsXG59IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJIb29rcyB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQnVpbGRUYXJnZXRzLCBTd2NUcmFuc3BpbGVyLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCJAZGVjb2hlcmUvZm9yZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCwgUHJvamVjdEZpbGVFdmVudCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBwYWNrYWdlQWxpYXNlcywgV29ya3NwYWNlRmFjdG9yeSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgRmlsZUV4LCBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcmV3cml0ZVNlcnZlU3BlY2lmaWVyIH0gZnJvbSBcIi4vcmV3cml0ZS1zZXJ2ZS1zcGVjaWZpZXIuanNcIjtcblxudHlwZSBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHsgc291cmNlOiBzdHJpbmcgfSB8IG51bGw7XG5cbmNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IFZFUlNJT05fVVJMX1BBUkFNID0gXCJ2ZXJzaW9uXCI7XG5jb25zdCBSRUJPT1RfREVCT1VOQ0VfTVMgPSAyNTA7XG5cbi8qKiBQcm9jZXNzLXdpZGU6IE5vZGUncyBFU00gY2FjaGUgaXMgcHJvY2Vzcy1nbG9iYWwsIGluY2x1ZGluZyBhY3Jvc3MgSG90UmVsb2FkU2VydmVyIGluc3RhbmNlcy4gKi9cbmxldCBtb2R1bGVWZXJzaW9uU2VxID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBIb3RSZWxvYWRTZXJ2ZXJFdmVudHMge1xuXHRzdGFydDogW107XG5cdHJlYm9vdDogW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyT3B0aW9ucyB7XG5cdC8qKiBCdWlsZCBjb25maWd1cmF0aW9uIG5hbWUuICovXG5cdGJ1aWxkQ29uZmlnOiBzdHJpbmc7XG5cdC8qKiBOYW1lIG9mIHRoZSBwcm9qZWN0IHRvIHNlcnZlLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlLiAqL1xuXHRwcm9qZWN0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogUHJlLWJ1aWx0IFdvcmtzcGFjZSBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBydW5uaW5nIFdvcmtzcGFjZUZhY3RvcnkuXG5cdCAqIFVzZWZ1bCBpbiB0ZXN0cyB0byBieXBhc3MgZmlsZXN5c3RlbS1iYXNlZCB3b3Jrc3BhY2UgZGlzY292ZXJ5LlxuXHQgKi9cblx0d29ya3NwYWNlPzogV29ya3NwYWNlO1xufVxuXG50eXBlIEZpbGVJbmZvID0geyBwcm9qZWN0OiBQcm9qZWN0IH07XG5cbmV4cG9ydCBjbGFzcyBIb3RSZWxvYWRTZXJ2ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SG90UmVsb2FkU2VydmVyRXZlbnRzPiB7XG5cdC8vIOKUgOKUgCBTdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoSG90UmVsb2FkU2VydmVyLm5hbWUpO1xuXHRwcml2YXRlIGRpc3Bvc2VkID0gZmFsc2U7XG5cdHByaXZhdGUgaG9va3NSZWdpc3RlcmVkID0gZmFsc2U7XG5cdHByaXZhdGUgZW50cnlNb2R1bGVQYXRoITogc3RyaW5nO1xuXHRwcml2YXRlIGVudHJ5TW9kdWxlPzogQXN5bmNEaXNwb3NhYmxlO1xuXHRwcml2YXRlIHdvcmtzcGFjZT86IFdvcmtzcGFjZTtcblx0cHJpdmF0ZSBidWlsZENvbmZpZyA9IFwiZGVidWdcIjtcblx0cHJpdmF0ZSB3YXRjaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblx0LyoqIE1hcCBmcm9tIGFic29sdXRlIC50cyBzb3VyY2UgZmlsZSBwYXRoIHRvIHByb2plY3QgaW5mbyAqL1xuXHRwcml2YXRlIGZpbGVJbmZvTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZpbGVJbmZvPigpO1xuXHRwcml2YXRlIG1vZHVsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KCk7XG5cdHByaXZhdGUgZGVwZW5kZW5jaWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuXHRwcml2YXRlIHRyYW5zcGlsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblx0cHJpdmF0ZSB0cmFuc3BpbGVyID0gbmV3IFN3Y1RyYW5zcGlsZXIoKTtcblx0cHJpdmF0ZSBhbGlhc1BhdGhzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0cHJpdmF0ZSBhbGlhc0Jhc2VVcmwgPSBwYXRoLnJlc29sdmUoXCIuXCIpO1xuXHRwcml2YXRlIHJlYm9vdFRhaWw6IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuXHQvLyDilIDilIAgUHVibGljIEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwdWJsaWMgYXN5bmMgc3RhcnQob3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucykge1xuXHRcdHRoaXMuZGlzcG9zZWQgPSBmYWxzZTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLnRyYW5zcGlsZUNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5yZWJvb3RUYWlsID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRjb25zdCB7IGJ1aWxkQ29uZmlnIH0gPSBvcHRpb25zO1xuXHRcdHRoaXMuYnVpbGRDb25maWcgPSBidWlsZENvbmZpZztcblx0XHR0aGlzLndvcmtzcGFjZSA9IGF3YWl0IHRoaXMucmVzb2x2ZVdvcmtzcGFjZShvcHRpb25zKTtcblx0XHRjb25zdCBwcm9qZWN0ID0gdGhpcy5yZXNvbHZlUHJvamVjdChidWlsZENvbmZpZywgb3B0aW9ucy5wcm9qZWN0KTtcblxuXHRcdHRoaXMuZW50cnlNb2R1bGVQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3QuZ2V0U291cmNlRW50cnlQYXRoKCkpO1xuXHRcdHRoaXMuZmlsZUluZm9NYXAgPSBhd2FpdCB0aGlzLmJ1aWxkRmlsZUluZm9NYXAoYnVpbGRDb25maWcpO1xuXHRcdHRoaXMuYWxpYXNQYXRocyA9IGF3YWl0IHRoaXMuYnVpbGRBbGlhc1BhdGhzKCk7XG5cblx0XHR0aGlzLnJlZ2lzdGVySG9va3MoKTtcblx0XHR0aGlzLmludmFsaWRhdGVBbGxTb3VyY2VGaWxlcygpO1xuXG5cdFx0YXdhaXQgdGhpcy53b3Jrc3BhY2Uud2F0Y2goYnVpbGRDb25maWcpO1xuXHRcdHRoaXMud2F0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLndvcmtzcGFjZS5wcm9qZWN0RmlsZUNoYW5nZWQkLnN1YnNjcmliZSh0aGlzLm9uRmlsZUNoYW5nZSk7XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShgU2VydmluZyAke3RoaXMuZW50cnlNb2R1bGVQYXRofWApO1xuXHRcdGF3YWl0IHRoaXMuYm9vdEVudHJ5KCk7XG5cdFx0dGhpcy5lbWl0KFwic3RhcnRcIik7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMud2F0Y2hTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy53b3Jrc3BhY2U/LltTeW1ib2wuZGlzcG9zZV0oKTtcblx0XHRhd2FpdCB0aGlzLnJlYm9vdFRhaWw7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlRW50cnkoKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlKCk7XG5cdH1cblxuXHQvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgYXN5bmMgYm9vdEVudHJ5KCkge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzLnZlcnNpb25Nb2R1bGUoaW8ucGF0aFRvRmlsZVVybCh0aGlzLmVudHJ5TW9kdWxlUGF0aCkpO1xuXHRcdFx0dGhpcy5lbnRyeU1vZHVsZSA9IChhd2FpdCBpbXBvcnQodXJsKSk/LmRlZmF1bHQ7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMuZW50cnlNb2R1bGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcblx0XHRcdFx0XCJUaGVyZSB3YXMgYW4gZXJyb3IgYm9vdGluZyB0aGUgZW50cnkgcG9pbnQuIFlvdXIgYXBwbGljYXRpb24gbWF5IG5vdCBmdW5jdGlvbiBhcyBleHBlY3RlZFwiLFxuXHRcdFx0XHRlcnJvcixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBzY2hlZHVsZVJlYm9vdCA9IGRlYm91bmNlKGFzeW5jICgpID0+IHtcblx0XHR0aGlzLnJlYm9vdFRhaWwgPSB0aGlzLnJlYm9vdFRhaWwudGhlbihcblx0XHRcdCgpID0+IHRoaXMucnVuUmVib290KCksXG5cdFx0XHQoKSA9PiB0aGlzLnJ1blJlYm9vdCgpLFxuXHRcdCk7XG5cdH0sIFJFQk9PVF9ERUJPVU5DRV9NUyk7XG5cblx0cHJpdmF0ZSBhc3luYyBydW5SZWJvb3QoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHR0aGlzLmxvZ2dlci50cmFjZShcIlJlYm9vdGluZyBlbnRyeSBtb2R1bGVcIik7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlRW50cnkoKTtcblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyeSgpO1xuXHRcdHRoaXMuZW1pdChcInJlYm9vdFwiKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUVudHJ5KCkge1xuXHRcdGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyeU1vZHVsZTtcblx0XHR0aGlzLmVudHJ5TW9kdWxlID0gdW5kZWZpbmVkO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBlbnRyeT8uW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFwiRW50cnkgYXN5bmNEaXNwb3NlIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0Ly8g4pSA4pSAIFNldHVwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgYXN5bmMgcmVzb2x2ZVdvcmtzcGFjZShvcHRpb25zOiBIb3RSZWxvYWRTZXJ2ZXJPcHRpb25zKTogUHJvbWlzZTxXb3Jrc3BhY2U+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b3B0aW9ucy53b3Jrc3BhY2UgPz9cblx0XHRcdFdvcmtzcGFjZUZhY3RvcnkuY3JlYXRlKHsgLi4uV29ya3NwYWNlRGVmYXVsdHMsIHJvb3REaXI6IHByb2Nlc3MuY3dkKCkgfSlcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUHJvamVjdChidWlsZENvbmZpZzogc3RyaW5nLCBuYW1lPzogc3RyaW5nKTogUHJvamVjdCB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZT8uZ2V0UHJvamVjdHMoYnVpbGRDb25maWcpID8/IFtdO1xuXHRcdGNvbnN0IGZvdW5kID0gbmFtZSA9PSBudWxsID8gcHJvamVjdHMuYXQoMCkgOiBwcm9qZWN0cy5maW5kKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpO1xuXHRcdGlmIChmb3VuZCA9PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdG5hbWUgPT0gbnVsbFxuXHRcdFx0XHRcdD8gYE5vIHByb2plY3RzIGZvdW5kIGZvciBjb25maWd1cmF0aW9uOiAke2J1aWxkQ29uZmlnfWBcblx0XHRcdFx0XHQ6IGBQcm9qZWN0IFwiJHtuYW1lfVwiIG5vdCBmb3VuZCBpbiB3b3Jrc3BhY2VgLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvdW5kO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZEZpbGVJbmZvTWFwKGJ1aWxkQ29uZmlnOiBzdHJpbmcpOiBQcm9taXNlPE1hcDxzdHJpbmcsIEZpbGVJbmZvPj4ge1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy53b3Jrc3BhY2U/LmdldFByb2plY3RzKGJ1aWxkQ29uZmlnKSA/PyBbXTtcblx0XHRjb25zdCBlbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRwcm9qZWN0cy5tYXAoYXN5bmMgKHByb2plY3QpID0+IHtcblx0XHRcdFx0Y29uc3QgZmlsZXMgPSBhd2FpdCBwcm9qZWN0LmdldEFsbEZpbGVzKCk7XG5cdFx0XHRcdHJldHVybiBmaWxlcy5tYXAoKGZpbGUpOiBbc3RyaW5nLCBGaWxlSW5mb10gPT4gW2ZpbGUuZnVsbFBhdGgsIHsgcHJvamVjdCB9XSk7XG5cdFx0XHR9KSxcblx0XHQpO1xuXHRcdHJldHVybiBuZXcgTWFwKGVudHJpZXMuZmxhdCgpKTtcblx0fVxuXG5cdHByaXZhdGUgcmVnaXN0ZXJIb29rcygpIHtcblx0XHRpZiAodGhpcy5ob29rc1JlZ2lzdGVyZWQpIHJldHVybjtcblx0XHR0aGlzLmhvb2tzUmVnaXN0ZXJlZCA9IHRydWU7XG5cdFx0cmVnaXN0ZXJIb29rcyh7XG5cdFx0XHRyZXNvbHZlOiAoXG5cdFx0XHRcdHNwZWNpZmllcjogc3RyaW5nLFxuXHRcdFx0XHRjb250ZXh0OiBSZXNvbHZlSG9va0NvbnRleHQsXG5cdFx0XHRcdG5leHQ6IChzcGVjaWZpZXI6IHN0cmluZywgY29udGV4dD86IFBhcnRpYWw8UmVzb2x2ZUhvb2tDb250ZXh0PikgPT4gUmVzb2x2ZUZuT3V0cHV0LFxuXHRcdFx0KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm4gbmV4dChzcGVjaWZpZXIsIGNvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRVcmwgPSBjb250ZXh0LnBhcmVudFVSTCA/PyBcIlwiO1xuXHRcdFx0XHRjb25zdCByZXdyaXR0ZW4gPVxuXHRcdFx0XHRcdHJld3JpdGVTZXJ2ZVNwZWNpZmllcih7XG5cdFx0XHRcdFx0XHRzcGVjaWZpZXIsXG5cdFx0XHRcdFx0XHRwYXJlbnRVcmwsXG5cdFx0XHRcdFx0XHRpc1dhdGNoZWRUczogKGZpbGVQYXRoKSA9PiB0aGlzLmZpbGVJbmZvTWFwLmhhcyhmaWxlUGF0aCksXG5cdFx0XHRcdFx0XHRyZXNvbHZlQmFyZTogKGJhcmUpID0+XG5cdFx0XHRcdFx0XHRcdHBhY2thZ2VBbGlhc2VzLnJlc29sdmVQYXRoKGJhcmUsIHRoaXMuYWxpYXNQYXRocywgdGhpcy5hbGlhc0Jhc2VVcmwpLFxuXHRcdFx0XHRcdFx0dmVyc2lvbkZpbGVVcmw6IChmaWxlVXJsKSA9PiB0aGlzLmdldENhY2hlZE9yTmV3KGZpbGVVcmwpLFxuXHRcdFx0XHRcdH0pID8/IHNwZWNpZmllcjtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gbmV4dChyZXdyaXR0ZW4sIGNvbnRleHQpIGFzIFJlc29sdmVGbk91dHB1dDtcblx0XHRcdFx0dGhpcy5vblBvc3RSZXNvbHZlKHJlc3VsdCwgcGFyZW50VXJsKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRsb2FkOiAoXG5cdFx0XHRcdHVybDogc3RyaW5nLFxuXHRcdFx0XHRjb250ZXh0OiBMb2FkSG9va0NvbnRleHQsXG5cdFx0XHRcdG5leHQ6ICh1cmw6IHN0cmluZywgY29udGV4dD86IFBhcnRpYWw8TG9hZEhvb2tDb250ZXh0PikgPT4gTG9hZEZuT3V0cHV0LFxuXHRcdFx0KTogTG9hZEZuT3V0cHV0ID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybiBuZXh0KHVybCwgY29udGV4dCk7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMubG9hZFRzKHVybCk7XG5cdFx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbClcblx0XHRcdFx0XHRyZXR1cm4geyBmb3JtYXQ6IFwibW9kdWxlXCIsIHNvdXJjZTogcmVzdWx0LnNvdXJjZSwgc2hvcnRDaXJjdWl0OiB0cnVlIH07XG5cdFx0XHRcdHJldHVybiBuZXh0KHVybCwgY29udGV4dCk7XG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0Ly8g4pSA4pSAIE1vZHVsZSBob29rcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGFzeW5jIGJ1aWxkQWxpYXNQYXRocygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj4ge1xuXHRcdGNvbnN0IHdvcmtzcGFjZSA9IHRoaXMud29ya3NwYWNlO1xuXHRcdGlmICh3b3Jrc3BhY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuXG5cdFx0Y29uc3QgcGFja2FnZUFsaWFzZXMgPSB3b3Jrc3BhY2UuZ2V0UGFja2FnZUFsaWFzZXModGhpcy5idWlsZENvbmZpZyk7XG5cdFx0dGhpcy5hbGlhc0Jhc2VVcmwgPSBwYWNrYWdlQWxpYXNlcy5iYXNlVXJsO1xuXHRcdHJldHVybiBwYWNrYWdlQWxpYXNlcy5wYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKiBQb3N0LW5leHQgZGVwZW5kZW5jeSB0cmFja2VyOiByZWNvcmRzIHdoaWNoIHNvdXJjZSBmaWxlcyBpbXBvcnQgd2hpY2hcblx0ICogb3RoZXIgc291cmNlIGZpbGVzIHNvIHRoYXQgcmVsb2FkSWZBZmZlY3RlZCBjYW4gdHJhdmVyc2UgdGhlIGdyYXBoLlxuXHQgKi9cblx0cHJpdmF0ZSBvblBvc3RSZXNvbHZlID0gKHJlc3VsdDogUmVzb2x2ZUZuT3V0cHV0LCBwYXJlbnRVcmw6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHsgdXJsIH0gPSByZXN1bHQ7XG5cdFx0Y29uc3QgcGFyZW50VXJsQ2xlYW4gPSBwYXJlbnRVcmwuc3BsaXQoXCI/XCIpWzBdO1xuXG5cdFx0bGV0IGZpbGVQYXRoOiBzdHJpbmc7XG5cdFx0bGV0IHBhcmVudFBhdGg6IHN0cmluZztcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybCk7XG5cdFx0XHR1cmxPYmouc2VhcmNoID0gXCJcIjtcblx0XHRcdGZpbGVQYXRoID0gaW8uZmlsZVVybFRvUGF0aCh1cmxPYmoudG9TdHJpbmcoKSk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHBhcmVudFBhdGggPSBpby5maWxlVXJsVG9QYXRoKHBhcmVudFVybENsZWFuKTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdHBhcmVudFBhdGggPSBcIlwiO1xuXHRcdH1cblxuXHRcdGNvbnN0IGlzU291cmNlID0gdGhpcy5maWxlSW5mb01hcC5oYXMoZmlsZVBhdGgpO1xuXHRcdGNvbnN0IHBhcmVudElzU291cmNlID0gdGhpcy5maWxlSW5mb01hcC5oYXMocGFyZW50UGF0aCk7XG5cblx0XHRpZiAoaXNTb3VyY2UgfHwgcGFyZW50SXNTb3VyY2UpIHtcblx0XHRcdHRoaXMudHJhY2tEZXBlbmRlbmN5KGZpbGVQYXRoLCBwYXJlbnRQYXRoKTtcblx0XHR9XG5cdH07XG5cblx0cHJpdmF0ZSBsb2FkVHM6IExvYWREZWxlZ2F0ZSA9ICh1cmw6IHN0cmluZykgPT4ge1xuXHRcdGlmICghdXJsLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCBjbGVhblBhdGggPSBuZXcgVVJMKHVybCkucGF0aG5hbWU7XG5cdFx0Y29uc3QgZmlsZUluZm8gPSB0aGlzLmZpbGVJbmZvTWFwLmdldChjbGVhblBhdGgpO1xuXHRcdGlmIChmaWxlSW5mbyA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuXHRcdGNvbnN0IGNhY2hlZCA9IHRoaXMudHJhbnNwaWxlQ2FjaGUuZ2V0KGNsZWFuUGF0aCk7XG5cdFx0aWYgKGNhY2hlZCAhPSBudWxsKSByZXR1cm4geyBzb3VyY2U6IGNhY2hlZCB9O1xuXG5cdFx0Y29uc3QgeyBwcm9qZWN0IH0gPSBmaWxlSW5mbztcblx0XHRjb25zdCB0c0NvbmZpZyA9IHByb2plY3QuZ2V0VHNDb25maWdTeW5jKCk7XG5cdFx0Y29uc3QgdXNlckNvbmZpZyA9IHByb2plY3QuZ2V0U3djQ29uZmlnU3luYygpO1xuXG5cdFx0Y29uc3QgZmlsZSA9IG5ldyBGaWxlRXgoeyBmdWxsUGF0aDogY2xlYW5QYXRoIH0pO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gdGhpcy50cmFuc3BpbGVyLnRyYW5zZm9ybUZpbGVTeW5jKGZpbGUsIEJ1aWxkVGFyZ2V0cy5lczYsIHtcblx0XHRcdHRzQ29uZmlnLFxuXHRcdFx0YWxpYXNQYXRoczogdHJ1ZSxcblx0XHRcdHVzZXJDb25maWcsXG5cdFx0XHR3b3Jrc3BhY2U6IHRoaXMud29ya3NwYWNlLFxuXHRcdFx0cHJvamVjdHM6IHRoaXMud29ya3NwYWNlPy5nZXRQcm9qZWN0cyh0aGlzLmJ1aWxkQ29uZmlnKSxcblx0XHR9KTtcblxuXHRcdGlmIChyZXNwb25zZS5vdXRjb21lICE9PSBcInN1Y2Nlc3NcIikge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byB0cmFuc3BpbGUgJHtjbGVhblBhdGh9YCwgcmVzcG9uc2UpO1xuXHRcdFx0Ly8gRG8gbm90IGZhbGwgdGhyb3VnaCB0byBuZXh0KCk6IFZpdGVzdC9Ob2RlIGxvYWRlcnMgY2FuIGRlYWRsb2NrIG9uIGFcblx0XHRcdC8vIHZlcnNpb25lZCAudHMgVVJMLiBGYWlsIHRoZSBpbXBvcnQgc28gYm9vdEVudHJ5IGNhbiBjYXRjaCBhbmQgY29udGludWUuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byB0cmFuc3BpbGUgJHtjbGVhblBhdGh9YCk7XG5cdFx0fVxuXG5cdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5zZXQoY2xlYW5QYXRoLCByZXNwb25zZS5jb2RlKTtcblx0XHRyZXR1cm4geyBzb3VyY2U6IHJlc3BvbnNlLmNvZGUgfTtcblx0fTtcblxuXHQvLyDilIDilIAgRmlsZSB3YXRjaGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIG9uRmlsZUNoYW5nZSA9IChldnQ6IFByb2plY3RGaWxlRXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGZpbGUsIGV2ZW50TmFtZSwgcHJvamVjdCB9ID0gZXZ0O1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gZmlsZS5mdWxsUGF0aDtcblxuXHRcdHRoaXMubG9nZ2VyLnRyYWNlKGBGaWxlICR7ZXZlbnROYW1lfTogJHtmdWxsUGF0aH1gKTtcblxuXHRcdGlmIChldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLnVubGluaykge1xuXHRcdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUoZnVsbFBhdGgpO1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZnVsbFBhdGgsIG51bGwpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLmFkZCkge1xuXHRcdFx0aWYgKHByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSB7XG5cdFx0XHRcdHRoaXMuZmlsZUluZm9NYXAuc2V0KGZ1bGxQYXRoLCB7IHByb2plY3QgfSk7XG5cdFx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZ1bGxQYXRoLCBudWxsKTtcblx0XHRcdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBjaGFuZ2Vcblx0XHRpZiAoIXByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSByZXR1cm47XG5cdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUoZnVsbFBhdGgpO1xuXHRcdHRoaXMudHJhbnNwaWxlci5pbnZhbGlkYXRlQ29udGVudENhY2hlKG5ldyBGaWxlRXgoeyBmdWxsUGF0aCB9KSk7XG5cdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0fTtcblxuXHRwcml2YXRlIHJlbG9hZElmQWZmZWN0ZWQoZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChmdWxsUGF0aCk7XG5cdFx0Y29uc3QgbW9kdWxlcyA9IFsuLi5uZXcgU2V0KFsuLi5kZXBzLCBmdWxsUGF0aF0pXTtcblxuXHRcdGlmICghbW9kdWxlcy5pbmNsdWRlcyh0aGlzLmVudHJ5TW9kdWxlUGF0aCkpIHtcblx0XHRcdHRoaXMubG9nZ2VyLnRyYWNlKGBDaGFuZ2UgaW4gJHtmdWxsUGF0aH0gZG9lcyBub3QgYWZmZWN0IGVudHJ5IOKAlCBza2lwcGluZyByZWxvYWRgKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShcblx0XHRcdGBDaGFuZ2UgaW4gJHtmdWxsUGF0aH0gYWZmZWN0cyAke21vZHVsZXMubGVuZ3RofSBtb2R1bGUocykg4oCUIHNjaGVkdWxpbmcgcmVsb2FkYCxcblx0XHQpO1xuXHRcdHRoaXMuaW52YWxpZGF0ZU1vZHVsZSguLi5tb2R1bGVzKTtcblx0XHR0aGlzLnNjaGVkdWxlUmVib290KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyDilIDilIAgRGVwZW5kZW5jeSBncmFwaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGdldERlcGVuZGVuY3lHcmFwaChtb2R1bGVJZDogc3RyaW5nLCBwYXJlbnRNb2R1bGVzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10ge1xuXHRcdGlmICh0aGlzLmlzU2VsZihtb2R1bGVJZCkpIHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZHVsZURlcHMgPSB0aGlzLmRlcGVuZGVuY2llcy5nZXQobW9kdWxlSWQpID8/IFtdO1xuXHRcdGlmIChwYXJlbnRNb2R1bGVzLmluY2x1ZGVzKG1vZHVsZUlkKSkge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZDogJHttb2R1bGVJZH1gKTtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRsZXQgc3ViRGVwczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGRlcCBvZiBtb2R1bGVEZXBzKSB7XG5cdFx0XHRpZiAoIXRoaXMuZmlsZUluZm9NYXAuaGFzKGRlcCkpIGNvbnRpbnVlO1xuXHRcdFx0Y29uc3Qgc3VicyA9IHRoaXMuZ2V0RGVwZW5kZW5jeUdyYXBoKGRlcCwgW21vZHVsZUlkLCAuLi5wYXJlbnRNb2R1bGVzXSk7XG5cdFx0XHRzdWJEZXBzID0gWy4uLnN1YkRlcHMsIC4uLnN1YnNdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbLi4ubmV3IFNldChbLi4ubW9kdWxlRGVwcywgLi4uc3ViRGVwc10pXTtcblx0fVxuXG5cdHByaXZhdGUgdHJhY2tEZXBlbmRlbmN5KGZpbGVQYXRoOiBzdHJpbmcsIHBhcmVudFBhdGg6IHN0cmluZykge1xuXHRcdGlmICghcGFyZW50UGF0aCkgcmV0dXJuO1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmRlcGVuZGVuY2llcy5nZXQoZmlsZVBhdGgpID8/IFtdO1xuXHRcdGNvbnN0IHVwZGF0ZWREZXBzID0gbmV3IFNldChbLi4uZGVwcywgcGFyZW50UGF0aF0pO1xuXHRcdHRoaXMuZGVwZW5kZW5jaWVzLnNldChmaWxlUGF0aCwgWy4uLnVwZGF0ZWREZXBzXSk7XG5cdH1cblxuXHQvLyDilIDilIAgTW9kdWxlIGNhY2hlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgZ2V0Q2FjaGVkT3JOZXcobW9kdWxlVXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgobW9kdWxlVXJsKTtcblx0XHRjb25zdCBjYWNoZWQgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmaWxlUGF0aCk7XG5cdFx0Y29uc3QgdmVyc2lvbmVkID0gY2FjaGVkID8/IHRoaXMudmVyc2lvbk1vZHVsZShtb2R1bGVVcmwpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZpbGVQYXRoLCB2ZXJzaW9uZWQpO1xuXHRcdHJldHVybiB2ZXJzaW9uZWQ7XG5cdH1cblxuXHRwcml2YXRlIHZlcnNpb25Nb2R1bGUobW9kdWxlVXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCB2ZXJzaW9uZWRVcmwgPSBuZXcgVVJMKG1vZHVsZVVybCk7XG5cdFx0dmVyc2lvbmVkVXJsLnNlYXJjaFBhcmFtcy5zZXQoVkVSU0lPTl9VUkxfUEFSQU0sIFN0cmluZygrK21vZHVsZVZlcnNpb25TZXEpKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkVXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRwcml2YXRlIGludmFsaWRhdGVNb2R1bGUoLi4ubW9kdWxlczogc3RyaW5nW10pIHtcblx0XHRmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG5cdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChtb2R1bGUsIG51bGwpO1xuXHRcdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUobW9kdWxlKTtcblx0XHRcdC8vIFBydW5lIHN0YWxlIG91dGdvaW5nIGVkZ2VzOiByZW1vdmUgdGhpcyBtb2R1bGUgYXMgYSBwYXJlbnQgZnJvbSBhbGwgZGVwZW5kZW5jeSBsaXN0c1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCBwYXJlbnRzXSBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHBhcmVudHMuZmlsdGVyKChwKSA9PiBwICE9PSBtb2R1bGUpO1xuXHRcdFx0XHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuZGVsZXRlKGtleSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuc2V0KGtleSwgZmlsdGVyZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKSB7XG5cdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmZpbGVJbmZvTWFwLmtleXMoKSkge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZmlsZVBhdGgsIG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8vIOKUgOKUgCBVdGlsaXRpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBpc1NlbGYoZmlsZVBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiBjdXJyZW50RmlsZVBhdGggPT09IHBhdGgucmVzb2x2ZShmaWxlUGF0aCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJFdmVudEVtaXR0ZXIiLCJyZWdpc3Rlckhvb2tzIiwicGF0aCIsIkJ1aWxkVGFyZ2V0cyIsIlN3Y1RyYW5zcGlsZXIiLCJXb3Jrc3BhY2VEZWZhdWx0cyIsInBhY2thZ2VBbGlhc2VzIiwiV29ya3NwYWNlRmFjdG9yeSIsIkZpbGVFeCIsImlvIiwiZGVib3VuY2UiLCJzY3JpYmUiLCJyZXdyaXRlU2VydmVTcGVjaWZpZXIiLCJjdXJyZW50RmlsZVBhdGgiLCJmaWxlVXJsVG9QYXRoIiwidXJsIiwiVkVSU0lPTl9VUkxfUEFSQU0iLCJSRUJPT1RfREVCT1VOQ0VfTVMiLCJtb2R1bGVWZXJzaW9uU2VxIiwiSG90UmVsb2FkU2VydmVyIiwibG9nZ2VyIiwibmFtZSIsImRpc3Bvc2VkIiwiaG9va3NSZWdpc3RlcmVkIiwiZW50cnlNb2R1bGVQYXRoIiwiZW50cnlNb2R1bGUiLCJ3b3Jrc3BhY2UiLCJidWlsZENvbmZpZyIsIndhdGNoU3Vic2NyaXB0aW9uIiwiZmlsZUluZm9NYXAiLCJNYXAiLCJtb2R1bGVDYWNoZSIsImRlcGVuZGVuY2llcyIsInRyYW5zcGlsZUNhY2hlIiwidHJhbnNwaWxlciIsImFsaWFzUGF0aHMiLCJhbGlhc0Jhc2VVcmwiLCJyZXNvbHZlIiwicmVib290VGFpbCIsIlByb21pc2UiLCJzdGFydCIsIm9wdGlvbnMiLCJjbGVhciIsInJlc29sdmVXb3Jrc3BhY2UiLCJwcm9qZWN0IiwicmVzb2x2ZVByb2plY3QiLCJnZXRTb3VyY2VFbnRyeVBhdGgiLCJidWlsZEZpbGVJbmZvTWFwIiwiYnVpbGRBbGlhc1BhdGhzIiwiaW52YWxpZGF0ZUFsbFNvdXJjZUZpbGVzIiwid2F0Y2giLCJwcm9qZWN0RmlsZUNoYW5nZWQkIiwic3Vic2NyaWJlIiwib25GaWxlQ2hhbmdlIiwidHJhY2UiLCJib290RW50cnkiLCJlbWl0IiwiZGlzcG9zZSIsInVuc3Vic2NyaWJlIiwiU3ltYm9sIiwiZGlzcG9zZUVudHJ5IiwiYXN5bmNEaXNwb3NlIiwidmVyc2lvbk1vZHVsZSIsInBhdGhUb0ZpbGVVcmwiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJzY2hlZHVsZVJlYm9vdCIsInRoZW4iLCJydW5SZWJvb3QiLCJlbnRyeSIsImNyZWF0ZSIsInJvb3REaXIiLCJwcm9jZXNzIiwiY3dkIiwicHJvamVjdHMiLCJnZXRQcm9qZWN0cyIsImZvdW5kIiwiYXQiLCJmaW5kIiwicCIsIkVycm9yIiwiZW50cmllcyIsImFsbCIsIm1hcCIsImZpbGVzIiwiZ2V0QWxsRmlsZXMiLCJmaWxlIiwiZnVsbFBhdGgiLCJmbGF0Iiwic3BlY2lmaWVyIiwiY29udGV4dCIsIm5leHQiLCJwYXJlbnRVcmwiLCJwYXJlbnRVUkwiLCJyZXdyaXR0ZW4iLCJpc1dhdGNoZWRUcyIsImZpbGVQYXRoIiwiaGFzIiwicmVzb2x2ZUJhcmUiLCJiYXJlIiwicmVzb2x2ZVBhdGgiLCJ2ZXJzaW9uRmlsZVVybCIsImZpbGVVcmwiLCJnZXRDYWNoZWRPck5ldyIsInJlc3VsdCIsIm9uUG9zdFJlc29sdmUiLCJsb2FkIiwibG9hZFRzIiwiZm9ybWF0Iiwic291cmNlIiwic2hvcnRDaXJjdWl0IiwiZ2V0UGFja2FnZUFsaWFzZXMiLCJiYXNlVXJsIiwicGF0aHMiLCJwYXJlbnRVcmxDbGVhbiIsInNwbGl0IiwicGFyZW50UGF0aCIsInVybE9iaiIsIlVSTCIsInNlYXJjaCIsInRvU3RyaW5nIiwiaXNTb3VyY2UiLCJwYXJlbnRJc1NvdXJjZSIsInRyYWNrRGVwZW5kZW5jeSIsInN0YXJ0c1dpdGgiLCJjbGVhblBhdGgiLCJwYXRobmFtZSIsImZpbGVJbmZvIiwiZ2V0IiwiY2FjaGVkIiwidHNDb25maWciLCJnZXRUc0NvbmZpZ1N5bmMiLCJ1c2VyQ29uZmlnIiwiZ2V0U3djQ29uZmlnU3luYyIsInJlc3BvbnNlIiwidHJhbnNmb3JtRmlsZVN5bmMiLCJlczYiLCJvdXRjb21lIiwic2V0IiwiY29kZSIsImV2dCIsImV2ZW50TmFtZSIsIldhdGNoRXZlbnRzIiwidW5saW5rIiwiZGVsZXRlIiwiYWRkIiwiaXNTb3VyY2VGaWxlIiwicmVsb2FkSWZBZmZlY3RlZCIsImludmFsaWRhdGVDb250ZW50Q2FjaGUiLCJkZXBzIiwiZ2V0RGVwZW5kZW5jeUdyYXBoIiwibW9kdWxlcyIsIlNldCIsImluY2x1ZGVzIiwibGVuZ3RoIiwiaW52YWxpZGF0ZU1vZHVsZSIsIm1vZHVsZUlkIiwicGFyZW50TW9kdWxlcyIsImlzU2VsZiIsIm1vZHVsZURlcHMiLCJzdWJEZXBzIiwiZGVwIiwic3VicyIsInVwZGF0ZWREZXBzIiwibW9kdWxlVXJsIiwidmVyc2lvbmVkIiwidmVyc2lvbmVkVXJsIiwic2VhcmNoUGFyYW1zIiwiU3RyaW5nIiwibW9kdWxlIiwia2V5IiwicGFyZW50cyIsImZpbHRlcmVkIiwiZmlsdGVyIiwia2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxRQUFRLGNBQWM7QUFPM0MsU0FBU0MsYUFBYSxRQUFRLGNBQWM7QUFDNUMsT0FBT0MsVUFBVSxZQUFZO0FBQzdCLFNBQVNDLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxpQkFBaUIsUUFBUSxrQkFBa0I7QUFFakYsU0FBU0MsY0FBYyxFQUFFQyxnQkFBZ0IsUUFBUSxpQkFBaUI7QUFDbEUsU0FBU0MsTUFBTSxFQUFFQyxFQUFFLFFBQVEscUJBQXFCO0FBQ2hELFNBQVNDLFFBQVEsUUFBUSx5QkFBeUI7QUFDbEQsU0FBc0JDLE1BQU0sUUFBUSxtQkFBbUI7QUFFdkQsU0FBU0MscUJBQXFCLFFBQVEsK0JBQStCO0FBSXJFLE1BQU1D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
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMb2FkRm5PdXRwdXQsXG5cdExvYWRIb29rQ29udGV4dCxcblx0UmVzb2x2ZUZuT3V0cHV0LFxuXHRSZXNvbHZlSG9va0NvbnRleHQsXG59IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJIb29rcyB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQnVpbGRUYXJnZXRzLCBTd2NUcmFuc3BpbGVyLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCJAZGVjb2hlcmUvZm9yZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCwgUHJvamVjdEZpbGVFdmVudCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBwYWNrYWdlQWxpYXNlcywgV29ya3NwYWNlRmFjdG9yeSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgRmlsZUV4LCBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcmV3cml0ZVNlcnZlU3BlY2lmaWVyIH0gZnJvbSBcIi4vcmV3cml0ZS1zZXJ2ZS1zcGVjaWZpZXIuanNcIjtcblxudHlwZSBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHsgc291cmNlOiBzdHJpbmcgfSB8IG51bGw7XG5cbmNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IFZFUlNJT05fVVJMX1BBUkFNID0gXCJ2ZXJzaW9uXCI7XG4vKiogRGVmYXVsdCBxdWlldCB3aW5kb3cgYmVmb3JlIGEgZmlsZS1jaGFuZ2UgcmVib290LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TID0gMjUwO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlYm9vdERlYm91bmNlTXModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG5cdGNvbnN0IGRlbGF5ID0gdmFsdWUgPz8gREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVM7XG5cdGlmICghTnVtYmVyLmlzRmluaXRlKGRlbGF5KSB8fCBkZWxheSA8IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHJlYm9vdERlYm91bmNlTXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyh2YWx1ZSl9YCk7XG5cdH1cblx0cmV0dXJuIGRlbGF5O1xufVxuXG4vKiogUHJvY2Vzcy13aWRlOiBOb2RlJ3MgRVNNIGNhY2hlIGlzIHByb2Nlc3MtZ2xvYmFsLCBpbmNsdWRpbmcgYWNyb3NzIEhvdFJlbG9hZFNlcnZlciBpbnN0YW5jZXMuICovXG5sZXQgbW9kdWxlVmVyc2lvblNlcSA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyRXZlbnRzIHtcblx0c3RhcnQ6IFtdO1xuXHRyZWJvb3Q6IFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvdFJlbG9hZFNlcnZlck9wdGlvbnMge1xuXHQvKiogQnVpbGQgY29uZmlndXJhdGlvbiBuYW1lLiAqL1xuXHRidWlsZENvbmZpZzogc3RyaW5nO1xuXHQvKiogTmFtZSBvZiB0aGUgcHJvamVjdCB0byBzZXJ2ZS4gRGVmYXVsdHMgdG8gdGhlIGZpcnN0IHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZS4gKi9cblx0cHJvamVjdD86IHN0cmluZztcblx0LyoqXG5cdCAqIFByZS1idWlsdCBXb3Jrc3BhY2UgaW5zdGFuY2UgdG8gdXNlIGluc3RlYWQgb2YgcnVubmluZyBXb3Jrc3BhY2VGYWN0b3J5LlxuXHQgKiBVc2VmdWwgaW4gdGVzdHMgdG8gYnlwYXNzIGZpbGVzeXN0ZW0tYmFzZWQgd29ya3NwYWNlIGRpc2NvdmVyeS5cblx0ICovXG5cdHdvcmtzcGFjZT86IFdvcmtzcGFjZTtcblx0LyoqXG5cdCAqIFF1aWV0IHdpbmRvdyBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgdGhlIGxhc3QgYWZmZWN0aW5nIHNhdmUgYmVmb3JlIGEgcmVib290LlxuXHQgKiBEZWZhdWx0cyB0byB7QGxpbmsgREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVN9LiBSYWlzZSB0aGlzIGZvciBhZ2VudCBzYXZlIHRyYWlucy5cblx0ICovXG5cdHJlYm9vdERlYm91bmNlTXM/OiBudW1iZXI7XG59XG5cbnR5cGUgRmlsZUluZm8gPSB7IHByb2plY3Q6IFByb2plY3QgfTtcblxuZXhwb3J0IGNsYXNzIEhvdFJlbG9hZFNlcnZlciBleHRlbmRzIEV2ZW50RW1pdHRlcjxIb3RSZWxvYWRTZXJ2ZXJFdmVudHM+IHtcblx0Ly8g4pSA4pSAIFN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXHRwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyID0gc2NyaWJlLmxvZ2dlcihIb3RSZWxvYWRTZXJ2ZXIubmFtZSk7XG5cdHByaXZhdGUgZGlzcG9zZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBob29rc1JlZ2lzdGVyZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBlbnRyeU1vZHVsZVBhdGghOiBzdHJpbmc7XG5cdHByaXZhdGUgZW50cnlNb2R1bGU/OiBBc3luY0Rpc3Bvc2FibGU7XG5cdHByaXZhdGUgd29ya3NwYWNlPzogV29ya3NwYWNlO1xuXHRwcml2YXRlIGJ1aWxkQ29uZmlnID0gXCJkZWJ1Z1wiO1xuXHRwcml2YXRlIHdhdGNoU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXHQvKiogTWFwIGZyb20gYWJzb2x1dGUgLnRzIHNvdXJjZSBmaWxlIHBhdGggdG8gcHJvamVjdCBpbmZvICovXG5cdHByaXZhdGUgZmlsZUluZm9NYXAgPSBuZXcgTWFwPHN0cmluZywgRmlsZUluZm8+KCk7XG5cdHByaXZhdGUgbW9kdWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgbnVsbD4oKTtcblx0cHJpdmF0ZSBkZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG5cdHByaXZhdGUgdHJhbnNwaWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXHRwcml2YXRlIHRyYW5zcGlsZXIgPSBuZXcgU3djVHJhbnNwaWxlcigpO1xuXHRwcml2YXRlIGFsaWFzUGF0aHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXHRwcml2YXRlIGFsaWFzQmFzZVVybCA9IHBhdGgucmVzb2x2ZShcIi5cIik7XG5cdHByaXZhdGUgcmVib290VGFpbDogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRwcml2YXRlIHJlYm9vdERlYm91bmNlR2VuID0gMDtcblx0cHJpdmF0ZSByZWJvb3RJbkZsaWdodCA9IGZhbHNlO1xuXHRwcml2YXRlIHJlYm9vdEZvbGxvd1VwID0gZmFsc2U7XG5cdHByaXZhdGUgcmVib290UXVldWVkID0gZmFsc2U7XG5cdHByaXZhdGUgc2NoZWR1bGVSZWJvb3Q6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuXHQvLyDilIDilIAgUHVibGljIEFQSSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwdWJsaWMgYXN5bmMgc3RhcnQob3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucykge1xuXHRcdHRoaXMuZGlzcG9zZWQgPSBmYWxzZTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuY2xlYXIoKTtcblx0XHR0aGlzLnRyYW5zcGlsZUNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5yZWJvb3RUYWlsID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IGZhbHNlO1xuXHRcdHRoaXMucmVib290Rm9sbG93VXAgPSBmYWxzZTtcblx0XHR0aGlzLnJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRcdHRoaXMuYmluZFNjaGVkdWxlUmVib290KHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKG9wdGlvbnMucmVib290RGVib3VuY2VNcykpO1xuXG5cdFx0Y29uc3QgeyBidWlsZENvbmZpZyB9ID0gb3B0aW9ucztcblx0XHR0aGlzLmJ1aWxkQ29uZmlnID0gYnVpbGRDb25maWc7XG5cdFx0dGhpcy53b3Jrc3BhY2UgPSBhd2FpdCB0aGlzLnJlc29sdmVXb3Jrc3BhY2Uob3B0aW9ucyk7XG5cdFx0Y29uc3QgcHJvamVjdCA9IHRoaXMucmVzb2x2ZVByb2plY3QoYnVpbGRDb25maWcsIG9wdGlvbnMucHJvamVjdCk7XG5cblx0XHR0aGlzLmVudHJ5TW9kdWxlUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0LmdldFNvdXJjZUVudHJ5UGF0aCgpKTtcblx0XHR0aGlzLmZpbGVJbmZvTWFwID0gYXdhaXQgdGhpcy5idWlsZEZpbGVJbmZvTWFwKGJ1aWxkQ29uZmlnKTtcblx0XHR0aGlzLmFsaWFzUGF0aHMgPSBhd2FpdCB0aGlzLmJ1aWxkQWxpYXNQYXRocygpO1xuXG5cdFx0dGhpcy5yZWdpc3Rlckhvb2tzKCk7XG5cdFx0dGhpcy5pbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKTtcblxuXHRcdGF3YWl0IHRoaXMud29ya3NwYWNlLndhdGNoKGJ1aWxkQ29uZmlnKTtcblx0XHR0aGlzLndhdGNoU3Vic2NyaXB0aW9uID0gdGhpcy53b3Jrc3BhY2UucHJvamVjdEZpbGVDaGFuZ2VkJC5zdWJzY3JpYmUodGhpcy5vbkZpbGVDaGFuZ2UpO1xuXG5cdFx0dGhpcy5sb2dnZXIudHJhY2UoYFNlcnZpbmcgJHt0aGlzLmVudHJ5TW9kdWxlUGF0aH1gKTtcblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyeSgpO1xuXHRcdHRoaXMuZW1pdChcInN0YXJ0XCIpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGRpc3Bvc2UoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHR0aGlzLmRpc3Bvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnJlYm9vdERlYm91bmNlR2VuICs9IDE7XG5cdFx0dGhpcy53YXRjaFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLndvcmtzcGFjZT8uW1N5bWJvbC5kaXNwb3NlXSgpO1xuXHRcdGF3YWl0IHRoaXMucmVib290VGFpbDtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VFbnRyeSgpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBhc3luYyBib290RW50cnkoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXMudmVyc2lvbk1vZHVsZShpby5wYXRoVG9GaWxlVXJsKHRoaXMuZW50cnlNb2R1bGVQYXRoKSk7XG5cdFx0XHR0aGlzLmVudHJ5TW9kdWxlID0gKGF3YWl0IGltcG9ydCh1cmwpKT8uZGVmYXVsdDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhpcy5lbnRyeU1vZHVsZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcIlRoZXJlIHdhcyBhbiBlcnJvciBib290aW5nIHRoZSBlbnRyeSBwb2ludC4gWW91ciBhcHBsaWNhdGlvbiBtYXkgbm90IGZ1bmN0aW9uIGFzIGV4cGVjdGVkXCIsXG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGJpbmRTY2hlZHVsZVJlYm9vdChkZWxheU1zOiBudW1iZXIpIHtcblx0XHRjb25zdCBnZW4gPSArK3RoaXMucmVib290RGVib3VuY2VHZW47XG5cdFx0dGhpcy5zY2hlZHVsZVJlYm9vdCA9IGRlYm91bmNlKGFzeW5jICgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkIHx8IGdlbiAhPT0gdGhpcy5yZWJvb3REZWJvdW5jZUdlbikgcmV0dXJuO1xuXHRcdFx0dGhpcy5yZXF1ZXN0UmVib290KCk7XG5cdFx0fSwgZGVsYXlNcyk7XG5cdH1cblxuXHRwcml2YXRlIHJlcXVlc3RSZWJvb3QoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHRpZiAodGhpcy5yZWJvb3RJbkZsaWdodCkge1xuXHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlYm9vdFF1ZXVlZCkgcmV0dXJuO1xuXHRcdHRoaXMucmVib290UXVldWVkID0gdHJ1ZTtcblx0XHR0aGlzLnJlYm9vdFRhaWwgPSB0aGlzLnJlYm9vdFRhaWwudGhlbihcblx0XHRcdCgpID0+IHRoaXMucnVuUmVib290KCksXG5cdFx0XHQoKSA9PiB0aGlzLnJ1blJlYm9vdCgpLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJ1blJlYm9vdCgpIHtcblx0XHR0aGlzLnJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG5cdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGRvIHtcblx0XHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IGZhbHNlO1xuXHRcdFx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdFx0XHR0aGlzLmxvZ2dlci50cmFjZShcIlJlYm9vdGluZyBlbnRyeSBtb2R1bGVcIik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZGlzcG9zZUVudHJ5KCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuYm9vdEVudHJ5KCk7XG5cdFx0XHRcdHRoaXMuZW1pdChcInJlYm9vdFwiKTtcblx0XHRcdH0gd2hpbGUgKHRoaXMucmVib290Rm9sbG93VXAgJiYgIXRoaXMuZGlzcG9zZWQpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRjb25zdCBuZWVkc0ZvbGxvd1VwID0gdGhpcy5yZWJvb3RGb2xsb3dVcCAmJiAhdGhpcy5kaXNwb3NlZDtcblx0XHRcdHRoaXMucmVib290Rm9sbG93VXAgPSBmYWxzZTtcblx0XHRcdHRoaXMucmVib290SW5GbGlnaHQgPSBmYWxzZTtcblx0XHRcdGlmIChuZWVkc0ZvbGxvd1VwKSB0aGlzLnJlcXVlc3RSZWJvb3QoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3Bvc2VFbnRyeSgpIHtcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuZW50cnlNb2R1bGU7XG5cdFx0dGhpcy5lbnRyeU1vZHVsZSA9IHVuZGVmaW5lZDtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgZW50cnk/LltTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcIkVudHJ5IGFzeW5jRGlzcG9zZSBmYWlsZWRcIiwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdC8vIOKUgOKUgCBTZXR1cCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGFzeW5jIHJlc29sdmVXb3Jrc3BhY2Uob3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucyk6IFByb21pc2U8V29ya3NwYWNlPiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdG9wdGlvbnMud29ya3NwYWNlID8/XG5cdFx0XHRXb3Jrc3BhY2VGYWN0b3J5LmNyZWF0ZSh7IC4uLldvcmtzcGFjZURlZmF1bHRzLCByb290RGlyOiBwcm9jZXNzLmN3ZCgpIH0pXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVByb2plY3QoYnVpbGRDb25maWc6IHN0cmluZywgbmFtZT86IHN0cmluZyk6IFByb2plY3Qge1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy53b3Jrc3BhY2U/LmdldFByb2plY3RzKGJ1aWxkQ29uZmlnKSA/PyBbXTtcblx0XHRjb25zdCBmb3VuZCA9IG5hbWUgPT0gbnVsbCA/IHByb2plY3RzLmF0KDApIDogcHJvamVjdHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBuYW1lKTtcblx0XHRpZiAoZm91bmQgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRuYW1lID09IG51bGxcblx0XHRcdFx0XHQ/IGBObyBwcm9qZWN0cyBmb3VuZCBmb3IgY29uZmlndXJhdGlvbjogJHtidWlsZENvbmZpZ31gXG5cdFx0XHRcdFx0OiBgUHJvamVjdCBcIiR7bmFtZX1cIiBub3QgZm91bmQgaW4gd29ya3NwYWNlYCxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYnVpbGRGaWxlSW5mb01hcChidWlsZENvbmZpZzogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBGaWxlSW5mbz4+IHtcblx0XHRjb25zdCBwcm9qZWN0cyA9IHRoaXMud29ya3NwYWNlPy5nZXRQcm9qZWN0cyhidWlsZENvbmZpZykgPz8gW107XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0cHJvamVjdHMubWFwKGFzeW5jIChwcm9qZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbGVzID0gYXdhaXQgcHJvamVjdC5nZXRBbGxGaWxlcygpO1xuXHRcdFx0XHRyZXR1cm4gZmlsZXMubWFwKChmaWxlKTogW3N0cmluZywgRmlsZUluZm9dID0+IFtmaWxlLmZ1bGxQYXRoLCB7IHByb2plY3QgfV0pO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0XHRyZXR1cm4gbmV3IE1hcChlbnRyaWVzLmZsYXQoKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVySG9va3MoKSB7XG5cdFx0aWYgKHRoaXMuaG9va3NSZWdpc3RlcmVkKSByZXR1cm47XG5cdFx0dGhpcy5ob29rc1JlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHJlZ2lzdGVySG9va3Moe1xuXHRcdFx0cmVzb2x2ZTogKFxuXHRcdFx0XHRzcGVjaWZpZXI6IHN0cmluZyxcblx0XHRcdFx0Y29udGV4dDogUmVzb2x2ZUhvb2tDb250ZXh0LFxuXHRcdFx0XHRuZXh0OiAoc3BlY2lmaWVyOiBzdHJpbmcsIGNvbnRleHQ/OiBQYXJ0aWFsPFJlc29sdmVIb29rQ29udGV4dD4pID0+IFJlc29sdmVGbk91dHB1dCxcblx0XHRcdCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuIG5leHQoc3BlY2lmaWVyLCBjb250ZXh0KTtcblx0XHRcdFx0Y29uc3QgcGFyZW50VXJsID0gY29udGV4dC5wYXJlbnRVUkwgPz8gXCJcIjtcblx0XHRcdFx0Y29uc3QgcmV3cml0dGVuID1cblx0XHRcdFx0XHRyZXdyaXRlU2VydmVTcGVjaWZpZXIoe1xuXHRcdFx0XHRcdFx0c3BlY2lmaWVyLFxuXHRcdFx0XHRcdFx0cGFyZW50VXJsLFxuXHRcdFx0XHRcdFx0aXNXYXRjaGVkVHM6IChmaWxlUGF0aCkgPT4gdGhpcy5maWxlSW5mb01hcC5oYXMoZmlsZVBhdGgpLFxuXHRcdFx0XHRcdFx0cmVzb2x2ZUJhcmU6IChiYXJlKSA9PlxuXHRcdFx0XHRcdFx0XHRwYWNrYWdlQWxpYXNlcy5yZXNvbHZlUGF0aChiYXJlLCB0aGlzLmFsaWFzUGF0aHMsIHRoaXMuYWxpYXNCYXNlVXJsKSxcblx0XHRcdFx0XHRcdHZlcnNpb25GaWxlVXJsOiAoZmlsZVVybCkgPT4gdGhpcy5nZXRDYWNoZWRPck5ldyhmaWxlVXJsKSxcblx0XHRcdFx0XHR9KSA/PyBzcGVjaWZpZXI7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG5leHQocmV3cml0dGVuLCBjb250ZXh0KSBhcyBSZXNvbHZlRm5PdXRwdXQ7XG5cdFx0XHRcdHRoaXMub25Qb3N0UmVzb2x2ZShyZXN1bHQsIHBhcmVudFVybCk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0bG9hZDogKFxuXHRcdFx0XHR1cmw6IHN0cmluZyxcblx0XHRcdFx0Y29udGV4dDogTG9hZEhvb2tDb250ZXh0LFxuXHRcdFx0XHRuZXh0OiAodXJsOiBzdHJpbmcsIGNvbnRleHQ/OiBQYXJ0aWFsPExvYWRIb29rQ29udGV4dD4pID0+IExvYWRGbk91dHB1dCxcblx0XHRcdCk6IExvYWRGbk91dHB1dCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm4gbmV4dCh1cmwsIGNvbnRleHQpO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmxvYWRUcyh1cmwpO1xuXHRcdFx0XHRpZiAocmVzdWx0ICE9IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIHsgZm9ybWF0OiBcIm1vZHVsZVwiLCBzb3VyY2U6IHJlc3VsdC5zb3VyY2UsIHNob3J0Q2lyY3VpdDogdHJ1ZSB9O1xuXHRcdFx0XHRyZXR1cm4gbmV4dCh1cmwsIGNvbnRleHQpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8vIOKUgOKUgCBNb2R1bGUgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZEFsaWFzUGF0aHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IHtcblx0XHRjb25zdCB3b3Jrc3BhY2UgPSB0aGlzLndvcmtzcGFjZTtcblx0XHRpZiAod29ya3NwYWNlID09IG51bGwpIHJldHVybiB7fTtcblxuXHRcdGNvbnN0IHBhY2thZ2VBbGlhc2VzID0gd29ya3NwYWNlLmdldFBhY2thZ2VBbGlhc2VzKHRoaXMuYnVpbGRDb25maWcpO1xuXHRcdHRoaXMuYWxpYXNCYXNlVXJsID0gcGFja2FnZUFsaWFzZXMuYmFzZVVybDtcblx0XHRyZXR1cm4gcGFja2FnZUFsaWFzZXMucGF0aHM7XG5cdH1cblxuXHQvKipcblx0ICogUG9zdC1uZXh0IGRlcGVuZGVuY3kgdHJhY2tlcjogcmVjb3JkcyB3aGljaCBzb3VyY2UgZmlsZXMgaW1wb3J0IHdoaWNoXG5cdCAqIG90aGVyIHNvdXJjZSBmaWxlcyBzbyB0aGF0IHJlbG9hZElmQWZmZWN0ZWQgY2FuIHRyYXZlcnNlIHRoZSBncmFwaC5cblx0ICovXG5cdHByaXZhdGUgb25Qb3N0UmVzb2x2ZSA9IChyZXN1bHQ6IFJlc29sdmVGbk91dHB1dCwgcGFyZW50VXJsOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCB7IHVybCB9ID0gcmVzdWx0O1xuXHRcdGNvbnN0IHBhcmVudFVybENsZWFuID0gcGFyZW50VXJsLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdGxldCBmaWxlUGF0aDogc3RyaW5nO1xuXHRcdGxldCBwYXJlbnRQYXRoOiBzdHJpbmc7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuXHRcdFx0dXJsT2JqLnNlYXJjaCA9IFwiXCI7XG5cdFx0XHRmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgodXJsT2JqLnRvU3RyaW5nKCkpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRwYXJlbnRQYXRoID0gaW8uZmlsZVVybFRvUGF0aChwYXJlbnRVcmxDbGVhbik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRwYXJlbnRQYXRoID0gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBpc1NvdXJjZSA9IHRoaXMuZmlsZUluZm9NYXAuaGFzKGZpbGVQYXRoKTtcblx0XHRjb25zdCBwYXJlbnRJc1NvdXJjZSA9IHRoaXMuZmlsZUluZm9NYXAuaGFzKHBhcmVudFBhdGgpO1xuXG5cdFx0aWYgKGlzU291cmNlIHx8IHBhcmVudElzU291cmNlKSB7XG5cdFx0XHR0aGlzLnRyYWNrRGVwZW5kZW5jeShmaWxlUGF0aCwgcGFyZW50UGF0aCk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgbG9hZFRzOiBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHtcblx0XHRpZiAoIXVybC5zdGFydHNXaXRoKFwiZmlsZTpcIikpIHJldHVybiBudWxsO1xuXG5cdFx0Y29uc3QgY2xlYW5QYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lO1xuXHRcdGNvbnN0IGZpbGVJbmZvID0gdGhpcy5maWxlSW5mb01hcC5nZXQoY2xlYW5QYXRoKTtcblx0XHRpZiAoZmlsZUluZm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCBjYWNoZWQgPSB0aGlzLnRyYW5zcGlsZUNhY2hlLmdldChjbGVhblBhdGgpO1xuXHRcdGlmIChjYWNoZWQgIT0gbnVsbCkgcmV0dXJuIHsgc291cmNlOiBjYWNoZWQgfTtcblxuXHRcdGNvbnN0IHsgcHJvamVjdCB9ID0gZmlsZUluZm87XG5cdFx0Y29uc3QgdHNDb25maWcgPSBwcm9qZWN0LmdldFRzQ29uZmlnU3luYygpO1xuXHRcdGNvbnN0IHVzZXJDb25maWcgPSBwcm9qZWN0LmdldFN3Y0NvbmZpZ1N5bmMoKTtcblxuXHRcdGNvbnN0IGZpbGUgPSBuZXcgRmlsZUV4KHsgZnVsbFBhdGg6IGNsZWFuUGF0aCB9KTtcblx0XHRjb25zdCByZXNwb25zZSA9IHRoaXMudHJhbnNwaWxlci50cmFuc2Zvcm1GaWxlU3luYyhmaWxlLCBCdWlsZFRhcmdldHMuZXM2LCB7XG5cdFx0XHR0c0NvbmZpZyxcblx0XHRcdGFsaWFzUGF0aHM6IHRydWUsXG5cdFx0XHR1c2VyQ29uZmlnLFxuXHRcdFx0d29ya3NwYWNlOiB0aGlzLndvcmtzcGFjZSxcblx0XHRcdHByb2plY3RzOiB0aGlzLndvcmtzcGFjZT8uZ2V0UHJvamVjdHModGhpcy5idWlsZENvbmZpZyksXG5cdFx0fSk7XG5cblx0XHRpZiAocmVzcG9uc2Uub3V0Y29tZSAhPT0gXCJzdWNjZXNzXCIpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdHJhbnNwaWxlICR7Y2xlYW5QYXRofWAsIHJlc3BvbnNlKTtcblx0XHRcdC8vIERvIG5vdCBmYWxsIHRocm91Z2ggdG8gbmV4dCgpOiBWaXRlc3QvTm9kZSBsb2FkZXJzIGNhbiBkZWFkbG9jayBvbiBhXG5cdFx0XHQvLyB2ZXJzaW9uZWQgLnRzIFVSTC4gRmFpbCB0aGUgaW1wb3J0IHNvIGJvb3RFbnRyeSBjYW4gY2F0Y2ggYW5kIGNvbnRpbnVlLlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdHJhbnNwaWxlICR7Y2xlYW5QYXRofWApO1xuXHRcdH1cblxuXHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuc2V0KGNsZWFuUGF0aCwgcmVzcG9uc2UuY29kZSk7XG5cdFx0cmV0dXJuIHsgc291cmNlOiByZXNwb25zZS5jb2RlIH07XG5cdH07XG5cblx0Ly8g4pSA4pSAIEZpbGUgd2F0Y2hpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBvbkZpbGVDaGFuZ2UgPSAoZXZ0OiBQcm9qZWN0RmlsZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgeyBmaWxlLCBldmVudE5hbWUsIHByb2plY3QgfSA9IGV2dDtcblx0XHRjb25zdCBmdWxsUGF0aCA9IGZpbGUuZnVsbFBhdGg7XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShgRmlsZSAke2V2ZW50TmFtZX06ICR7ZnVsbFBhdGh9YCk7XG5cblx0XHRpZiAoZXZlbnROYW1lID09PSBpby5XYXRjaEV2ZW50cy51bmxpbmspIHtcblx0XHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKGZ1bGxQYXRoKTtcblx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZ1bGxQYXRoLCBudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoZXZlbnROYW1lID09PSBpby5XYXRjaEV2ZW50cy5hZGQpIHtcblx0XHRcdGlmIChwcm9qZWN0LmlzU291cmNlRmlsZShmaWxlKSkge1xuXHRcdFx0XHR0aGlzLmZpbGVJbmZvTWFwLnNldChmdWxsUGF0aCwgeyBwcm9qZWN0IH0pO1xuXHRcdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmdWxsUGF0aCwgbnVsbCk7XG5cdFx0XHRcdHRoaXMucmVsb2FkSWZBZmZlY3RlZChmdWxsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gY2hhbmdlXG5cdFx0aWYgKCFwcm9qZWN0LmlzU291cmNlRmlsZShmaWxlKSkgcmV0dXJuO1xuXHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKGZ1bGxQYXRoKTtcblx0XHR0aGlzLnRyYW5zcGlsZXIuaW52YWxpZGF0ZUNvbnRlbnRDYWNoZShuZXcgRmlsZUV4KHsgZnVsbFBhdGggfSkpO1xuXHRcdHRoaXMucmVsb2FkSWZBZmZlY3RlZChmdWxsUGF0aCk7XG5cdH07XG5cblx0cHJpdmF0ZSByZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5nZXREZXBlbmRlbmN5R3JhcGgoZnVsbFBhdGgpO1xuXHRcdGNvbnN0IG1vZHVsZXMgPSBbLi4ubmV3IFNldChbLi4uZGVwcywgZnVsbFBhdGhdKV07XG5cblx0XHRpZiAoIW1vZHVsZXMuaW5jbHVkZXModGhpcy5lbnRyeU1vZHVsZVBhdGgpKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci50cmFjZShgQ2hhbmdlIGluICR7ZnVsbFBhdGh9IGRvZXMgbm90IGFmZmVjdCBlbnRyeSDigJQgc2tpcHBpbmcgcmVsb2FkYCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5sb2dnZXIudHJhY2UoXG5cdFx0XHRgQ2hhbmdlIGluICR7ZnVsbFBhdGh9IGFmZmVjdHMgJHttb2R1bGVzLmxlbmd0aH0gbW9kdWxlKHMpIOKAlCBzY2hlZHVsaW5nIHJlbG9hZGAsXG5cdFx0KTtcblx0XHR0aGlzLmludmFsaWRhdGVNb2R1bGUoLi4ubW9kdWxlcyk7XG5cdFx0dGhpcy5zY2hlZHVsZVJlYm9vdCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8g4pSA4pSAIERlcGVuZGVuY3kgZ3JhcGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBnZXREZXBlbmRlbmN5R3JhcGgobW9kdWxlSWQ6IHN0cmluZywgcGFyZW50TW9kdWxlczogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcblx0XHRpZiAodGhpcy5pc1NlbGYobW9kdWxlSWQpKSByZXR1cm4gW107XG5cblx0XHRjb25zdCBtb2R1bGVEZXBzID0gdGhpcy5kZXBlbmRlbmNpZXMuZ2V0KG1vZHVsZUlkKSA/PyBbXTtcblx0XHRpZiAocGFyZW50TW9kdWxlcy5pbmNsdWRlcyhtb2R1bGVJZCkpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQ6ICR7bW9kdWxlSWR9YCk7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0bGV0IHN1YkRlcHM6IHN0cmluZ1tdID0gW107XG5cdFx0Zm9yIChjb25zdCBkZXAgb2YgbW9kdWxlRGVwcykge1xuXHRcdFx0aWYgKCF0aGlzLmZpbGVJbmZvTWFwLmhhcyhkZXApKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IHN1YnMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChkZXAsIFttb2R1bGVJZCwgLi4ucGFyZW50TW9kdWxlc10pO1xuXHRcdFx0c3ViRGVwcyA9IFsuLi5zdWJEZXBzLCAuLi5zdWJzXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gWy4uLm5ldyBTZXQoWy4uLm1vZHVsZURlcHMsIC4uLnN1YkRlcHNdKV07XG5cdH1cblxuXHRwcml2YXRlIHRyYWNrRGVwZW5kZW5jeShmaWxlUGF0aDogc3RyaW5nLCBwYXJlbnRQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAoIXBhcmVudFBhdGgpIHJldHVybjtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5kZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSA/PyBbXTtcblx0XHRjb25zdCB1cGRhdGVkRGVwcyA9IG5ldyBTZXQoWy4uLmRlcHMsIHBhcmVudFBhdGhdKTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5zZXQoZmlsZVBhdGgsIFsuLi51cGRhdGVkRGVwc10pO1xuXHR9XG5cblx0Ly8g4pSA4pSAIE1vZHVsZSBjYWNoZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGdldENhY2hlZE9yTmV3KG1vZHVsZVVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBpby5maWxlVXJsVG9QYXRoKG1vZHVsZVVybCk7XG5cdFx0Y29uc3QgY2FjaGVkID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoZmlsZVBhdGgpO1xuXHRcdGNvbnN0IHZlcnNpb25lZCA9IGNhY2hlZCA/PyB0aGlzLnZlcnNpb25Nb2R1bGUobW9kdWxlVXJsKTtcblx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmaWxlUGF0aCwgdmVyc2lvbmVkKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkO1xuXHR9XG5cblx0cHJpdmF0ZSB2ZXJzaW9uTW9kdWxlKG1vZHVsZVVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgdmVyc2lvbmVkVXJsID0gbmV3IFVSTChtb2R1bGVVcmwpO1xuXHRcdHZlcnNpb25lZFVybC5zZWFyY2hQYXJhbXMuc2V0KFZFUlNJT05fVVJMX1BBUkFNLCBTdHJpbmcoKyttb2R1bGVWZXJzaW9uU2VxKSk7XG5cdFx0cmV0dXJuIHZlcnNpb25lZFVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlTW9kdWxlKC4uLm1vZHVsZXM6IHN0cmluZ1tdKSB7XG5cdFx0Zm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQobW9kdWxlLCBudWxsKTtcblx0XHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKG1vZHVsZSk7XG5cdFx0XHQvLyBQcnVuZSBzdGFsZSBvdXRnb2luZyBlZGdlczogcmVtb3ZlIHRoaXMgbW9kdWxlIGFzIGEgcGFyZW50IGZyb20gYWxsIGRlcGVuZGVuY3kgbGlzdHNcblx0XHRcdGZvciAoY29uc3QgW2tleSwgcGFyZW50c10gb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcblx0XHRcdFx0Y29uc3QgZmlsdGVyZWQgPSBwYXJlbnRzLmZpbHRlcigocCkgPT4gcCAhPT0gbW9kdWxlKTtcblx0XHRcdFx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzLmRlbGV0ZShrZXkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZGVwZW5kZW5jaWVzLnNldChrZXksIGZpbHRlcmVkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaW52YWxpZGF0ZUFsbFNvdXJjZUZpbGVzKCkge1xuXHRcdGZvciAoY29uc3QgZmlsZVBhdGggb2YgdGhpcy5maWxlSW5mb01hcC5rZXlzKCkpIHtcblx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZpbGVQYXRoLCBudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvLyDilIDilIAgVXRpbGl0aWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgaXNTZWxmKGZpbGVQYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gY3VycmVudEZpbGVQYXRoID09PSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRXZlbnRFbWl0dGVyIiwicmVnaXN0ZXJIb29rcyIsInBhdGgiLCJCdWlsZFRhcmdldHMiLCJTd2NUcmFuc3BpbGVyIiwiV29ya3NwYWNlRGVmYXVsdHMiLCJwYWNrYWdlQWxpYXNlcyIsIldvcmtzcGFjZUZhY3RvcnkiLCJGaWxlRXgiLCJpbyIsImRlYm91bmNlIiwic2NyaWJlIiwicmV3cml0ZVNlcnZlU3BlY2lmaWVyIiwiY3VycmVudEZpbGVQYXRoIiwiZmlsZVVybFRvUGF0aCIsInVybCIsIlZFUlNJT05fVVJMX1BBUkFNIiwiREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsInZhbHVlIiwiZGVsYXkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIkVycm9yIiwiU3RyaW5nIiwibW9kdWxlVmVyc2lvblNlcSIsIkhvdFJlbG9hZFNlcnZlciIsImxvZ2dlciIsIm5hbWUiLCJkaXNwb3NlZCIsImhvb2tzUmVnaXN0ZXJlZCIsImVudHJ5TW9kdWxlUGF0aCIsImVudHJ5TW9kdWxlIiwid29ya3NwYWNlIiwiYnVpbGRDb25maWciLCJ3YXRjaFN1YnNjcmlwdGlvbiIsImZpbGVJbmZvTWFwIiwiTWFwIiwibW9kdWxlQ2FjaGUiLCJkZXBlbmRlbmNpZXMiLCJ0cmFuc3BpbGVDYWNoZSIsInRyYW5zcGlsZXIiLCJhbGlhc1BhdGhzIiwiYWxpYXNCYXNlVXJsIiwicmVzb2x2ZSIsInJlYm9vdFRhaWwiLCJQcm9taXNlIiwicmVib290RGVib3VuY2VHZW4iLCJyZWJvb3RJbkZsaWdodCIsInJlYm9vdEZvbGxvd1VwIiwicmVib290UXVldWVkIiwic2NoZWR1bGVSZWJvb3QiLCJzdGFydCIsIm9wdGlvbnMiLCJjbGVhciIsImJpbmRTY2hlZHVsZVJlYm9vdCIsInJlYm9vdERlYm91bmNlTXMiLCJyZXNvbHZlV29ya3NwYWNlIiwicHJvamVjdCIsInJlc29sdmVQcm9qZWN0IiwiZ2V0U291cmNlRW50cnlQYXRoIiwiYnVpbGRGaWxlSW5mb01hcCIsImJ1aWxkQWxpYXNQYXRocyIsImludmFsaWRhdGVBbGxTb3VyY2VGaWxlcyIsIndhdGNoIiwicHJvamVjdEZpbGVDaGFuZ2VkJCIsInN1YnNjcmliZSIsIm9uRmlsZUNoYW5nZSIsInRyYWNlIiwiYm9vdEVudHJ5IiwiZW1pdCIsImRpc3Bvc2UiLCJ1bnN1YnNjcmliZSIsIlN5bWJvbCIsImRpc3Bvc2VFbnRyeSIsImFzeW5jRGlzcG9zZSIsInZlcnNpb25Nb2R1bGUiLCJwYXRoVG9GaWxlVXJsIiwiZGVmYXVsdCIsImVycm9yIiwidW5kZWZpbmVkIiwiZGVsYXlNcyIsImdlbiIsInJlcXVlc3RSZWJvb3QiLCJ0aGVuIiwicnVuUmVib290IiwibmVlZHNGb2xsb3dVcCIsImVudHJ5IiwiY3JlYXRlIiwicm9vdERpciIsInByb2Nlc3MiLCJjd2QiLCJwcm9qZWN0cyIsImdldFByb2plY3RzIiwiZm91bmQiLCJhdCIsImZpbmQiLCJwIiwiZW50cmllcyIsImFsbCIsIm1hcCIsImZpbGVzIiwiZ2V0QWxsRmlsZXMiLCJmaWxlIiwiZnVsbFBhdGgiLCJmbGF0Iiwic3BlY2lmaWVyIiwiY29udGV4dCIsIm5leHQiLCJwYXJlbnRVcmwiLCJwYXJlbnRVUkwiLCJyZXdyaXR0ZW4iLCJpc1dhdGNoZWRUcyIsImZpbGVQYXRoIiwiaGFzIiwicmVzb2x2ZUJhcmUiLCJiYXJlIiwicmVzb2x2ZVBhdGgiLCJ2ZXJzaW9uRmlsZVVybCIsImZpbGVVcmwiLCJnZXRDYWNoZWRPck5ldyIsInJlc3VsdCIsIm9uUG9zdFJlc29sdmUiLCJsb2FkIiwibG9hZFRzIiwiZm9ybWF0Iiwic291cmNlIiwic2hvcnRDaXJjdWl0IiwiZ2V0UGFja2FnZUFsaWFzZXMiLCJiYXNlVXJsIiwicGF0aHMiLCJwYXJlbnRVcmxDbGVhbiIsInNwbGl0IiwicGFyZW50UGF0aCIsInVybE9iaiIsIlVSTCIsInNlYXJjaCIsInRvU3RyaW5nIiwiaXNTb3VyY2UiLCJwYXJlbnRJc1NvdXJjZSIsInRyYWNrRGVwZW5kZW5jeSIsInN0YXJ0c1dpdGgiLCJjbGVhblBhdGgiLCJwYXRobmFtZSIsImZpbGVJbmZvIiwiZ2V0IiwiY2FjaGVkIiwidHNDb25maWciLCJnZXRUc0NvbmZpZ1N5bmMiLCJ1c2VyQ29uZmlnIiwiZ2V0U3djQ29uZmlnU3luYyIsInJlc3BvbnNlIiwidHJhbnNmb3JtRmlsZVN5bmMiLCJlczYiLCJvdXRjb21lIiwic2V0IiwiY29kZSIsImV2dCIsImV2ZW50TmFtZSIsIldhdGNoRXZlbnRzIiwidW5saW5rIiwiZGVsZXRlIiwiYWRkIiwiaXNTb3VyY2VGaWxlIiwicmVsb2FkSWZBZmZlY3RlZCIsImludmFsaWRhdGVDb250ZW50Q2FjaGUiLCJkZXBzIiwiZ2V0RGVwZW5kZW5jeUdyYXBoIiwibW9kdWxlcyIsIlNldCIsImluY2x1ZGVzIiwibGVuZ3RoIiwiaW52YWxpZGF0ZU1vZHVsZSIsIm1vZHVsZUlkIiwicGFyZW50TW9kdWxlcyIsImlzU2VsZiIsIm1vZHVsZURlcHMiLCJzdWJEZXBzIiwiZGVwIiwic3VicyIsInVwZGF0ZWREZXBzIiwibW9kdWxlVXJsIiwidmVyc2lvbmVkIiwidmVyc2lvbmVkVXJsIiwic2VhcmNoUGFyYW1zIiwibW9kdWxlIiwia2V5IiwicGFyZW50cyIsImZpbHRlcmVkIiwiZmlsdGVyIiwia2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxRQUFRLGNBQWM7QUFPM0MsU0FBU0MsYUFB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
|
package/es6/src/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { FluxModule } from "./flux.module.js";
|
|
2
|
-
export { HotReloadServer } from "./hot-reload-server.js";
|
|
2
|
+
export { DEFAULT_REBOOT_DEBOUNCE_MS, HotReloadServer } from "./hot-reload-server.js";
|
|
3
3
|
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZsdXhNb2R1bGUgfSBmcm9tIFwiLi9mbHV4Lm1vZHVsZS5qc1wiO1xuZXhwb3J0IHR5cGUgeyBIb3RSZWxvYWRTZXJ2ZXJPcHRpb25zIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmV4cG9ydCB7IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TLCBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZU9wdGlvbnMgfSBmcm9tIFwiLi9zZXJ2ZS5hY3Rpb24uanNcIjtcbiJdLCJuYW1lcyI6WyJGbHV4TW9kdWxlIiwiREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMiLCJIb3RSZWxvYWRTZXJ2ZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxtQkFBbUI7QUFFOUMsU0FBU0MsMEJBQTBCLEVBQUVDLGVBQWUsUUFBUSx5QkFBeUIifQ==
|
package/es6/src/serve.action.js
CHANGED
|
@@ -24,7 +24,8 @@ export class ServeAction {
|
|
|
24
24
|
await this.server.start({
|
|
25
25
|
workspace: this.workspace,
|
|
26
26
|
buildConfig: options.configuration,
|
|
27
|
-
project: options.project
|
|
27
|
+
project: options.project,
|
|
28
|
+
rebootDebounceMs: options.rebootDebounceMs
|
|
28
29
|
});
|
|
29
30
|
return ActionResponse.Blocking(ServeAction.name);
|
|
30
31
|
}
|
|
@@ -38,4 +39,4 @@ ServeAction = _ts_decorate([
|
|
|
38
39
|
])
|
|
39
40
|
], ServeAction);
|
|
40
41
|
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdHlsZS91c2VJbXBvcnRUeXBlOiA8REk+XG5pbXBvcnQgeyBIb3RSZWxvYWRTZXJ2ZXIgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuXG5leHBvcnQgdHlwZSBTZXJ2ZU9wdGlvbnMgPSB7XG5cdGNvbmZpZ3VyYXRpb246IHN0cmluZztcblx0cHJvamVjdD86IHN0cmluZztcblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbjxTZXJ2ZU9wdGlvbnM+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgc2VydmVyOiBIb3RSZWxvYWRTZXJ2ZXIsXG5cdFx0cHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2U6IFdvcmtzcGFjZSxcblx0KSB7fVxuXG5cdHB1YmxpYyBhc3luYyBydW4ob3B0aW9uczogU2VydmVPcHRpb25zKTogUHJvbWlzZTxBY3Rpb25SZXNwb25zZT4ge1xuXHRcdGF3YWl0IHRoaXMuc2VydmVyLnN0YXJ0KHtcblx0XHRcdHdvcmtzcGFjZTogdGhpcy53b3Jrc3BhY2UsXG5cdFx0XHRidWlsZENvbmZpZzogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuXHRcdFx0cHJvamVjdDogb3B0aW9ucy5wcm9qZWN0LFxuXHRcdFx0cmVib290RGVib3VuY2VNczogb3B0aW9ucy5yZWJvb3REZWJvdW5jZU1zLFxuXHRcdH0pO1xuXHRcdHJldHVybiBBY3Rpb25SZXNwb25zZS5CbG9ja2luZyhTZXJ2ZUFjdGlvbi5uYW1lKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbImluamVjdGFibGUiLCJXb3Jrc3BhY2UiLCJBY3Rpb25SZXNwb25zZSIsIkhvdFJlbG9hZFNlcnZlciIsIlNlcnZlQWN0aW9uIiwic2VydmVyIiwid29ya3NwYWNlIiwicnVuIiwib3B0aW9ucyIsInN0YXJ0IiwiYnVpbGRDb25maWciLCJjb25maWd1cmF0aW9uIiwicHJvamVjdCIsInJlYm9vdERlYm91bmNlTXMiLCJCbG9ja2luZyIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLFNBQVNBLFVBQVUsUUFBUSxnQ0FBZ0M7QUFDM0QsOENBQThDO0FBQzlDLFNBQVNDLFNBQVMsUUFBUSxpQkFBaUI7QUFDM0MsU0FBc0JDLGNBQWMsUUFBUSxzQkFBc0I7QUFDbEUsOENBQThDO0FBQzlDLFNBQVNDLGVBQWUsUUFBUSx5QkFBeUI7QUFTekQsT0FBTyxNQUFNQzs7O0lBQ1osWUFDQyxBQUFpQkMsTUFBdUIsRUFDeEMsQUFBaUJDLFNBQW9CLENBQ3BDO2FBRmdCRCxTQUFBQTthQUNBQyxZQUFBQTtJQUNmO0lBRUgsTUFBYUMsSUFBSUMsT0FBcUIsRUFBMkI7UUFDaEUsTUFBTSxJQUFJLENBQUNILE1BQU0sQ0FBQ0ksS0FBSyxDQUFDO1lBQ3ZCSCxXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6QkksYUFBYUYsUUFBUUcsYUFBYTtZQUNsQ0MsU0FBU0osUUFBUUksT0FBTztZQUN4QkMsa0JBQWtCTCxRQUFRSyxnQkFBZ0I7UUFDM0M7UUFDQSxPQUFPWCxlQUFlWSxRQUFRLENBQUNWLFlBQVlXLElBQUk7SUFDaEQ7QUFDRCJ9
|
package/es6/src/serve.command.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ConfigurationOption, DecohereCommand, ProjectOption } from "@decohere/nexus/cli";
|
|
2
|
+
import { DEFAULT_REBOOT_DEBOUNCE_MS, resolveRebootDebounceMs } from "./hot-reload-server.js";
|
|
2
3
|
import { ServeAction } from "./serve.action.js";
|
|
3
4
|
export class ServeCommand extends DecohereCommand {
|
|
4
5
|
get actions() {
|
|
@@ -11,7 +12,8 @@ export class ServeCommand extends DecohereCommand {
|
|
|
11
12
|
this.description("Serve a project in a workspace configuration");
|
|
12
13
|
this.addOption(new ConfigurationOption("debug"));
|
|
13
14
|
this.addOption(new ProjectOption());
|
|
15
|
+
this.option("--reboot-debounce-ms <ms>", "Quiet window in milliseconds after the last affecting save before a reboot", (value)=>resolveRebootDebounceMs(Number(value)), DEFAULT_REBOOT_DEBOUNCE_MS);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL3NlcnZlLmNvbW1hbmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJhdGlvbk9wdGlvbiwgRGVjb2hlcmVDb21tYW5kLCBQcm9qZWN0T3B0aW9uIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TLCByZXNvbHZlUmVib290RGVib3VuY2VNcyB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5pbXBvcnQgeyBTZXJ2ZUFjdGlvbiB9IGZyb20gXCIuL3NlcnZlLmFjdGlvbi5qc1wiO1xuXG5leHBvcnQgY2xhc3MgU2VydmVDb21tYW5kIGV4dGVuZHMgRGVjb2hlcmVDb21tYW5kIHtcblx0cHVibGljIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkge1xuXHRcdHJldHVybiBbU2VydmVBY3Rpb25dO1xuXHR9XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJTZXJ2ZSBhIHByb2plY3QgaW4gYSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvblwiKTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgQ29uZmlndXJhdGlvbk9wdGlvbihcImRlYnVnXCIpKTtcblx0XHR0aGlzLmFkZE9wdGlvbihuZXcgUHJvamVjdE9wdGlvbigpKTtcblx0XHR0aGlzLm9wdGlvbihcblx0XHRcdFwiLS1yZWJvb3QtZGVib3VuY2UtbXMgPG1zPlwiLFxuXHRcdFx0XCJRdWlldCB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGFmZmVjdGluZyBzYXZlIGJlZm9yZSBhIHJlYm9vdFwiLFxuXHRcdFx0KHZhbHVlOiBzdHJpbmcpID0+IHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKE51bWJlcih2YWx1ZSkpLFxuXHRcdFx0REVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsXG5cdFx0KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkNvbmZpZ3VyYXRpb25PcHRpb24iLCJEZWNvaGVyZUNvbW1hbmQiLCJQcm9qZWN0T3B0aW9uIiwiREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsIlNlcnZlQWN0aW9uIiwiU2VydmVDb21tYW5kIiwiYWN0aW9ucyIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIm9wdGlvbiIsInZhbHVlIiwiTnVtYmVyIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxtQkFBbUIsRUFBRUMsZUFBZSxFQUFFQyxhQUFhLFFBQVEsc0JBQXNCO0FBQzFGLFNBQVNDLDBCQUEwQixFQUFFQyx1QkFBdUIsUUFBUSx5QkFBeUI7QUFDN0YsU0FBU0MsV0FBVyxRQUFRLG9CQUFvQjtBQUVoRCxPQUFPLE1BQU1DLHFCQUFxQkw7SUFDakMsSUFBb0JNLFVBQVU7UUFDN0IsT0FBTztZQUFDRjtTQUFZO0lBQ3JCO0lBRUEsWUFBbUJHLElBQVksQ0FBRTtRQUNoQyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDQyxXQUFXLENBQUM7UUFDakIsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSVYsb0JBQW9CO1FBQ3ZDLElBQUksQ0FBQ1UsU0FBUyxDQUFDLElBQUlSO1FBQ25CLElBQUksQ0FBQ1MsTUFBTSxDQUNWLDZCQUNBLDhFQUNBLENBQUNDLFFBQWtCUix3QkFBd0JTLE9BQU9ELFNBQ2xEVDtJQUVGO0FBQ0QifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decohere/flux",
|
|
3
|
-
"version": "0.0.1-dev.
|
|
3
|
+
"version": "0.0.1-dev.68",
|
|
4
4
|
"description": "Hot module reload server for Node.js ESM applications",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@decohere/crucible": "0.0.1-dev.
|
|
29
|
-
"@decohere/forge": "0.0.1-dev.
|
|
30
|
-
"@decohere/mesh": "0.0.1-dev.
|
|
31
|
-
"@decohere/nexus": "0.0.1-dev.
|
|
32
|
-
"@decohere/scribe": "0.0.1-dev.
|
|
28
|
+
"@decohere/crucible": "0.0.1-dev.68",
|
|
29
|
+
"@decohere/forge": "0.0.1-dev.68",
|
|
30
|
+
"@decohere/mesh": "0.0.1-dev.68",
|
|
31
|
+
"@decohere/nexus": "0.0.1-dev.68",
|
|
32
|
+
"@decohere/scribe": "0.0.1-dev.68",
|
|
33
33
|
"rxjs": "^7.8.2"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import type { Workspace } from "@decohere/mesh";
|
|
3
|
+
/** Default quiet window before a file-change reboot. */
|
|
4
|
+
export declare const DEFAULT_REBOOT_DEBOUNCE_MS = 250;
|
|
5
|
+
export declare function resolveRebootDebounceMs(value: number | undefined): number;
|
|
3
6
|
export interface HotReloadServerEvents {
|
|
4
7
|
start: [];
|
|
5
8
|
reboot: [];
|
|
@@ -14,6 +17,11 @@ export interface HotReloadServerOptions {
|
|
|
14
17
|
* Useful in tests to bypass filesystem-based workspace discovery.
|
|
15
18
|
*/
|
|
16
19
|
workspace?: Workspace;
|
|
20
|
+
/**
|
|
21
|
+
* Quiet window in milliseconds after the last affecting save before a reboot.
|
|
22
|
+
* Defaults to {@link DEFAULT_REBOOT_DEBOUNCE_MS}. Raise this for agent save trains.
|
|
23
|
+
*/
|
|
24
|
+
rebootDebounceMs?: number;
|
|
17
25
|
}
|
|
18
26
|
export declare class HotReloadServer extends EventEmitter<HotReloadServerEvents> {
|
|
19
27
|
private readonly logger;
|
|
@@ -33,11 +41,17 @@ export declare class HotReloadServer extends EventEmitter<HotReloadServerEvents>
|
|
|
33
41
|
private aliasPaths;
|
|
34
42
|
private aliasBaseUrl;
|
|
35
43
|
private rebootTail;
|
|
44
|
+
private rebootDebounceGen;
|
|
45
|
+
private rebootInFlight;
|
|
46
|
+
private rebootFollowUp;
|
|
47
|
+
private rebootQueued;
|
|
48
|
+
private scheduleReboot;
|
|
36
49
|
start(options: HotReloadServerOptions): Promise<void>;
|
|
37
50
|
dispose(): Promise<void>;
|
|
38
51
|
[Symbol.asyncDispose](): Promise<void>;
|
|
39
52
|
private bootEntry;
|
|
40
|
-
private
|
|
53
|
+
private bindScheduleReboot;
|
|
54
|
+
private requestReboot;
|
|
41
55
|
private runReboot;
|
|
42
56
|
private disposeEntry;
|
|
43
57
|
private resolveWorkspace;
|
package/types/src/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { FluxModule } from "./flux.module.js";
|
|
2
2
|
export type { HotReloadServerOptions } from "./hot-reload-server.js";
|
|
3
|
-
export { HotReloadServer } from "./hot-reload-server.js";
|
|
3
|
+
export { DEFAULT_REBOOT_DEBOUNCE_MS, HotReloadServer } from "./hot-reload-server.js";
|
|
4
4
|
export type { ServeOptions } from "./serve.action.js";
|