@aquera/ngx-smart-table 0.0.17-patch-0.7 → 0.0.17-patch-0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/editors/nile-select-editor.mjs +119 -6
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +9 -3
- package/fesm2015/aquera-ngx-smart-table.mjs +135 -12
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +126 -7
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/editors/nile-select-editor.d.ts +11 -0
- package/package.json +1 -1
|
@@ -135,15 +135,128 @@ export class NileSelectEditor {
|
|
|
135
135
|
// Clear container and append select
|
|
136
136
|
context.container.innerHTML = '';
|
|
137
137
|
context.container.appendChild(this.select);
|
|
138
|
-
// Focus
|
|
138
|
+
// Focus after mount; open dropdown only once nile-popup exists (avoids null this.popup in nile-select)
|
|
139
|
+
const openOnEdit = this.options.openDropdownOnEdit !== false;
|
|
139
140
|
setTimeout(() => {
|
|
141
|
+
void this.activateSelectAfterMount(openOnEdit);
|
|
142
|
+
}, 50);
|
|
143
|
+
}
|
|
144
|
+
async activateSelectAfterMount(openOnEdit) {
|
|
145
|
+
try {
|
|
146
|
+
this.select?.focus();
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// ignore
|
|
150
|
+
}
|
|
151
|
+
if (!openOnEdit || !this.select || this.options.disabled) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
await this.openNileSelectDropdownSafely();
|
|
155
|
+
}
|
|
156
|
+
/** Lit @query('nile-popup') / .select — must exist before handleOpenChange touches this.popup.popup */
|
|
157
|
+
isNileSelectPopupMounted(select) {
|
|
158
|
+
return !!select.shadowRoot?.querySelector('nile-popup');
|
|
159
|
+
}
|
|
160
|
+
async invokeShowHandlingPromise(host) {
|
|
161
|
+
if (typeof host.show !== 'function') {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const out = host.show();
|
|
166
|
+
if (out != null && typeof out.then === 'function') {
|
|
167
|
+
await out.catch(() => undefined);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// sync throw from show()
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async openNileSelectDropdownSafely() {
|
|
175
|
+
const select = this.select;
|
|
176
|
+
if (!select) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
await customElements.whenDefined('nile-select');
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// ignore
|
|
184
|
+
}
|
|
185
|
+
if (this.options.enableVirtualScroll) {
|
|
140
186
|
try {
|
|
141
|
-
|
|
187
|
+
await customElements.whenDefined('nile-virtual-select');
|
|
142
188
|
}
|
|
143
|
-
catch
|
|
144
|
-
//
|
|
189
|
+
catch {
|
|
190
|
+
// ignore — not registered in all environments
|
|
145
191
|
}
|
|
146
|
-
|
|
192
|
+
// Same idea as nile-popup: inner host may not exist until Lit finishes a pass (or several).
|
|
193
|
+
const maxVirtualWaitPasses = 50;
|
|
194
|
+
for (let i = 0; i < maxVirtualWaitPasses; i++) {
|
|
195
|
+
const vs = select.shadowRoot?.querySelector('nile-virtual-select');
|
|
196
|
+
if (vs) {
|
|
197
|
+
await this.invokeShowHandlingPromise(vs);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
const lit = select;
|
|
201
|
+
if (lit.updateComplete?.then) {
|
|
202
|
+
try {
|
|
203
|
+
await lit.updateComplete;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// ignore
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
await new Promise(resolve => requestAnimationFrame(() => resolve()));
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const maxWaitPasses = 50;
|
|
214
|
+
for (let i = 0; i < maxWaitPasses; i++) {
|
|
215
|
+
if (this.isNileSelectPopupMounted(select)) {
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
const lit = select;
|
|
219
|
+
if (lit.updateComplete?.then) {
|
|
220
|
+
try {
|
|
221
|
+
await lit.updateComplete;
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// ignore
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
await new Promise(resolve => requestAnimationFrame(() => resolve()));
|
|
228
|
+
}
|
|
229
|
+
if (!this.isNileSelectPopupMounted(select)) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const host = select;
|
|
233
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
234
|
+
if (!this.isNileSelectPopupMounted(select)) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
try {
|
|
238
|
+
if (typeof host.show === 'function') {
|
|
239
|
+
await this.invokeShowHandlingPromise(host);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
host.open = true;
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
// ignore
|
|
248
|
+
}
|
|
249
|
+
await new Promise(resolve => setTimeout(resolve, 40));
|
|
250
|
+
const lit = select;
|
|
251
|
+
if (lit.updateComplete?.then) {
|
|
252
|
+
try {
|
|
253
|
+
await lit.updateComplete;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
// ignore
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
147
260
|
}
|
|
148
261
|
/**
|
|
149
262
|
* Set the initial value for the select
|
|
@@ -508,4 +621,4 @@ export class NileSelectEditor {
|
|
|
508
621
|
return (Array.isArray(value) ? (value.length > 0 ? value[0] : '') : (value || ''));
|
|
509
622
|
}
|
|
510
623
|
}
|
|
511
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQW1GRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQTZCLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBVDdELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUd2QixtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBQy9DLGtCQUFhLEdBQWEsRUFBRSxDQUFDLENBQUUsMkNBQTJDO1FBQzFFLHNCQUFpQixHQUFHLEtB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QUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQWlCLENBQUM7SUFDckcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGxpbWl0XG4gKi9cbmxldCBkcm9wZG93blN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3REcm9wZG93blN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1kcm9wZG93bi1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTGltaXQgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGFuZCBlbmFibGUgc2Nyb2xsaW5nICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQge1xuICAgICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fbGlzdGJveCB7XG4gICAgICBtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtaGVpZ2h0OiAyNjBweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fZm9vdGVyIHtcbiAgICAgIGhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBQcmV2ZW50IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gLSB0YXJnZXQgdGhlIG9wdGlvbnMgY29udGFpbmVyICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fb3B0aW9ucyB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbiB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIG5pbGUtb3B0aW9uOjpwYXJ0KGJhc2UpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogRml4IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gYnkgY2hhbmdpbmcgZmxleCBkaXJlY3Rpb24gKi9cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChvcHRpb25fbGFiZWxfY29udGFpbmVyKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbWJvYm94IHN0eWxpbmcgdXNpbmcgOjpwYXJ0KCkgc2VsZWN0b3IgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgLyogVGFnIHNwYWNpbmcgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWcpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgcGFkZGluZzogMXB4IDJweDtcbiAgICB9XG4gICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KHRhZykge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVTZWxlY3QgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGZvciBzaW5nbGUgc2VsZWN0aW9uLCBzdHJpbmdbXSBmb3IgbXVsdGlwbGUpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlU2VsZWN0RWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIGFjY2VwdHNJbml0aWFsS2V5cHJlc3MgPSBmYWxzZTtcbiAgXG4gIHByaXZhdGUgc2VsZWN0PzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcbiAgcHJpdmF0ZSBvcHRpb25zU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGN1cnJlbnRPcHRpb25zOiAoU2VsZWN0T3B0aW9uIHwgc3RyaW5nKVtdID0gW107XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlczogc3RyaW5nW10gPSBbXTsgIC8vIFRyYWNrIHNlbGVjdGVkIHZhbHVlcyBmb3IgdmlydHVhbCBzY3JvbGxcbiAgcHJpdmF0ZSBoYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlOyAgICAgLy8gV2hldGhlciBhIG5pbGUtY2hhbmdlIGV2ZW50IGhhcyBmaXJlZFxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMpIHtcbiAgICAvLyBIYW5kbGUgT2JzZXJ2YWJsZSBvcHRpb25zXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShvcHRpb25zLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSBvcHRpb25zLm9wdGlvbnMuc3Vic2NyaWJlKG9wdHMgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0cztcbiAgICAgICAgLy8gSWYgZWRpdG9yIGlzIGFscmVhZHkgYWN0aXZlLCB1cGRhdGUgdGhlIERPTVxuICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0YXRpYyBvcHRpb25zXG4gICAgICB0aGlzLmN1cnJlbnRPcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IFtdO1xuICAgICAgaWYgKHRoaXMuY3VycmVudE9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTmlsZVNlbGVjdEVkaXRvcjogb3B0aW9ucyBhcnJheSBpcyBlbXB0eScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3IgcmVxdWlyZXMgYSBjb250YWluZXIgZWxlbWVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBkcm9wZG93biBoZWlnaHQgc3R5bGVzIG9uY2VcbiAgICBpbmplY3REcm9wZG93blN0eWxlcygpO1xuXG4gICAgLy8gQ3JlYXRlIE5pbGVTZWxlY3QgY3VzdG9tIGVsZW1lbnQgdXNpbmcgZG9jdW1lbnQuY3JlYXRlRWxlbWVudFxuICAgIHRoaXMuc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1zZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlXG4gICAgdGhpcy5zZXRJbml0aWFsVmFsdWUoY29udGV4dC52YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcblxuICAgIC8vIENyZWF0ZSBhbmQgYXBwZW5kIG9wdGlvbnMgd2l0aCBjdXJyZW50IG9wdGlvbnNcbiAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgc2VsZWN0XG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpO1xuXG4gICAgLy8gRm9jdXMgdGhlIHNlbGVjdCBhZnRlciByZW5kZXJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5mb2N1cygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3JzXG4gICAgICB9XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIHNlbGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG4gICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHNlbGVjdGlvbiAtIHZhbHVlIHNob3VsZCBiZSBhcnJheVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFsuLi52YWx1ZV07ICAvLyBJbml0aWFsaXplIHRyYWNrZWQgdmFsdWVzXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW1N0cmluZyh2YWx1ZSldO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdC52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFuZGxlIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdmFsdWUgPyBTdHJpbmcodmFsdWUpIDogJyc7XG4gICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSB2YWx1ZSA/IFtTdHJpbmcodmFsdWUpXSA6IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlU2VsZWN0IGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEJhc2ljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNpemUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnNpemUgPSB0aGlzLm9wdGlvbnMuc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9ICdzbWFsbCc7IC8vIERlZmF1bHQgZm9yIHRhYmxlIGNlbGxzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5zZWxlY3QubXVsdGlwbGUgPSB0aGlzLm9wdGlvbnMubXVsdGlwbGU7XG4gICAgfVxuXG4gICAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jbGVhcmFibGUgPSB0aGlzLm9wdGlvbnMuY2xlYXJhYmxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmRpc2FibGVkID0gdGhpcy5vcHRpb25zLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVpcmVkID0gdGhpcy5vcHRpb25zLnJlcXVpcmVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2VhcmNoRW5hYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3Quc2VhcmNoRW5hYmxlZCA9IHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zLndhcm5pbmcpIHtcbiAgICAgIHRoaXMuc2VsZWN0Lndhcm5pbmcgPSB0aGlzLm9wdGlvbnMud2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnN1Y2Nlc3MgPSB0aGlzLm9wdGlvbnMuc3VjY2VzcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5zZWxlY3QuZXJyb3JNZXNzYWdlID0gdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhlbHBUZXh0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5oZWxwVGV4dCA9IHRoaXMub3B0aW9ucy5oZWxwVGV4dDtcbiAgICB9XG5cbiAgICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QubWF4T3B0aW9uc1Zpc2libGUgPSB0aGlzLm9wdGlvbnMubWF4T3B0aW9uc1Zpc2libGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZmlsbGVkID0gdGhpcy5vcHRpb25zLmZpbGxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBpbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBpbGwgPSB0aGlzLm9wdGlvbnMucGlsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmhvaXN0KSB7XG4gICAgICB0aGlzLnNlbGVjdC5ob2lzdCA9IHRoaXMub3B0aW9ucy5ob2lzdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5zZWxlY3QucGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnBsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVuYWJsZVZpcnR1YWxTY3JvbGwgPSB0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZUxvY2FsU2VhcmNoID0gdGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaDtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcG9ydGFsIG1vZGUgYnkgZGVmYXVsdCB0byBwcmV2ZW50IGRyb3Bkb3duIGNsaXBwaW5nIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3QucG9ydGFsID0gdGhpcy5vcHRpb25zLnBvcnRhbCAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcmV2ZW50IHdpZHRoIHN5bmNpbmcgaXNzdWVzIGluIHRhYmxlIGNlbGxzXG4gICAgdGhpcy5zZWxlY3Qubm9XaWR0aFN5bmMgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBvcHRpb25zIGR5bmFtaWNhbGx5IHdoaWxlIGVkaXRvciBpcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBGb3IgdmlydHVhbCBzY3JvbGwgbW9kZSwganVzdCB1cGRhdGUgdGhlIGRhdGEgcHJvcGVydHkgKG5vIERPTSBjaGlsZHJlbiB0byBjbGVhcilcbiAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHRoaXMuY3JlYXRlQW5kQXBwZW5kT3B0aW9ucyh0aGlzLmN1cnJlbnRPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhbmRhcmQgbW9kZTogY2xlYXIgZXhpc3RpbmcgbmlsZS1vcHRpb24gZWxlbWVudHMgZmlyc3RcbiAgICAgIHdoaWxlICh0aGlzLnNlbGVjdC5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnJlbW92ZUNoaWxkKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBcbiAgICAvLyBUcmlnZ2VyIHVwZGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudFxuICAgIGlmICh0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBOaWxlT3B0aW9uIGVsZW1lbnRzIGFuZCBhcHBlbmQgdGhlbSB0byB0aGUgc2VsZWN0XG4gICAqIFdoZW4gZW5hYmxlVmlydHVhbFNjcm9sbCBpcyB0cnVlLCB1c2VzIGRhdGEgcHJvcGVydHkgaW5zdGVhZCBvZiBET00gZWxlbWVudHNcbiAgICogQHNlZSBodHRwczovL25pbGUuYXF1ZXJhbGFicy5jb20vc2VsZWN0LXZpcnR1YWw/dGhlbWU9ZW50ZXJwcmlzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHJlbmRlclxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBbmRBcHBlbmRPcHRpb25zKG9wdGlvbnM6IChTZWxlY3RPcHRpb24gfCBzdHJpbmcpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICAvLyBWaXJ0dWFsIHNjcm9sbCBtb2RlOiB1c2UgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgY29uc3QgdmlydHVhbERhdGEgPSBvcHRpb25zLm1hcChvcHQgPT4gXG4gICAgICAgIHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnIFxuICAgICAgICAgID8geyB2YWx1ZTogb3B0LCBsYWJlbDogb3B0IH1cbiAgICAgICAgICA6IHsgdmFsdWU6IG9wdC52YWx1ZSwgbGFiZWw6IG9wdC5sYWJlbCwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9XG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3QuZGF0YSA9IHZpcnR1YWxEYXRhO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0YW5kYXJkIG1vZGU6IGNyZWF0ZSBuaWxlLW9wdGlvbiBlbGVtZW50c1xuICAgIG9wdGlvbnMuZm9yRWFjaChvcHQgPT4ge1xuICAgICAgY29uc3QgbmlsZU9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtb3B0aW9uJykgYXMgYW55O1xuXG4gICAgICAvLyBBdXRvLWRldGVjdCBmb3JtYXQ6IHN0cmluZyBvciBTZWxlY3RPcHRpb24gb2JqZWN0XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdDtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0KTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5pbGVPcHRpb24udmFsdWUgPSBvcHQudmFsdWU7XG4gICAgICAgIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCd2YWx1ZScsIG9wdC52YWx1ZSk7XG4gICAgICAgIG5pbGVPcHRpb24udGV4dENvbnRlbnQgPSBvcHQubGFiZWw7XG4gICAgICAgIFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgbmlsZU9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBwcmVmaXggaWYgcHJvdmlkZWQgKGNvdWxkIGJlIGljb24gbmFtZSBvciBjb250ZW50KVxuICAgICAgICBpZiAob3B0LnByZWZpeCkge1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ3ByZWZpeCcpO1xuICAgICAgICAgIC8vIG5pbGVPcHRpb24uaW5uZXJIVE1MID0gYDxuaWxlLWljb24gbmFtZT1cIiR7b3B0LnByZWZpeH1cIj48L25pbGUtaWNvbj5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0IS5hcHBlbmRDaGlsZChuaWxlT3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucy52YWxpZGF0ZU9uU2F2ZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIChrZXlkb3duIGlzIG5vdCByZXBsYWNlZCBieSBjdXN0b20gZXZlbnRzKVxuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtY2hhbmdlIGN1c3RvbSBldmVudCBhcyBzYXZlIHRyaWdnZXIgLSBPTkxZIGZvciBzaW5nbGUtc2VsZWN0XG4gICAgLy8gTXVsdGktc2VsZWN0IHNob3VsZCBzdGF5IG9wZW4gdW50aWwgdXNlciBjbGlja3Mgb3V0c2lkZVxuICAgIGlmICghdGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3QucmVwb3J0VmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbXVsdGktc2VsZWN0LCB0cmFjayB2YWx1ZSBjaGFuZ2VzIChuZWVkZWQgZm9yIHZpcnR1YWwgc2Nyb2xsIHdoZXJlIHZhbHVlIHByb3BlcnR5IGRvZXNuJ3QgdXBkYXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHRyYWNrVmFsdWVIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjdXN0b21FdmVudC5kZXRhaWw/LnZhbHVlO1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlT2NjdXJyZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gbmV3VmFsdWUgPyBbbmV3VmFsdWVdIDogW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCB0cmFja1ZhbHVlSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogdHJhY2tWYWx1ZUhhbmRsZXIgfSk7XG4gICAgfVxuXG4gICAgLy8gVHJhY2sgaWYgc2F2ZSB3YXMgYWxyZWFkeSB0cmlnZ2VyZWQgKHRvIHByZXZlbnQgZG91YmxlIHNhdmUpXG4gICAgbGV0IHNhdmVUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICBcbiAgICAvLyBVc2UgbW91c2Vkb3duIG9uIGRvY3VtZW50IHRvIGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0aGUgc2VsZWN0IGFuZCBwb3J0YWxcbiAgICBjb25zdCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHNhdmVUcmlnZ2VyZWQpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gVXNlIGNvbXBvc2VkUGF0aCB0byB0cmF2ZXJzZSBzaGFkb3cgRE9NIGJvdW5kYXJpZXNcbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjbGljayBpcyBpbnNpZGUgdGhlIHNlbGVjdCBlbGVtZW50IG9yIGFueSBuaWxlLXNlbGVjdCByZWxhdGVkIGVsZW1lbnRzXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSBjb250aW51ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgb3VyIHNlbGVjdCBlbGVtZW50XG4gICAgICAgIGlmIChlbGVtZW50ID09PSB0aGlzLnNlbGVjdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIG5pbGUtc2VsZWN0IHBvcnRhbHMgKHZhcmlvdXMgY2xhc3MgbmFtZXMpXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ25pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX2xpc3Rib3gnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdzZWxlY3RfX29wdGlvbnMnKSB8fFxuICAgICAgICAgICAgZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnbmlsZS1vcHRpb24nIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLXNlbGVjdCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciBhbnkgZWxlbWVudCB3aXRoIG5pbGUtc2VsZWN0IGluIGl0cyBjbGFzc1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgJiYgdHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJyAmJiBcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCduaWxlLXNlbGVjdCcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFsc28gY2hlY2sgcG9ydGFsIGNvbnRhaW5lcnMgZGlyZWN0bHlcbiAgICAgIGNvbnN0IHBvcnRhbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCwgW2NsYXNzKj1cInNlbGVjdF9fbGlzdGJveFwiXScpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3J0YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb3J0YWxzW2ldLmNvbnRhaW5zKGUudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgLSBzYXZlIGFuZCBleGl0XG4gICAgICBzYXZlVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHZhbGlkYXRlT25TYXZlICYmIHRoaXMuc2VsZWN0ICYmICF0aGlzLnNlbGVjdC5jaGVja1ZhbGlkaXR5KCkpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIElnbm9yZSB2YWxpZGF0aW9uIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgICB9XG4gICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLmdldEN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9O1xuICAgIFxuICAgIC8vIEFkZCBsaXN0ZW5lciBhZnRlciBhIHNob3J0IGRlbGF5IHRvIGF2b2lkIGNhcHR1cmluZyB0aGUgaW5pdGlhbCBjbGljayB0aGF0IG9wZW5lZCB0aGUgZWRpdG9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgIH0sIDUwKTtcbiAgICBcbiAgICAvLyBTdG9yZSBmb3IgY2xlYW51cFxuICAgICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcblxuICAgIC8vIEhhbmRsZSBjbGVhciBidXR0b24gaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xlYXJhYmxlKSB7XG4gICAgICBjb25zdCBjbGVhckhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKHRoaXMub3B0aW9ucy5tdWx0aXBsZSA/IFtdIDogJycpKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNsZWFyJywgY2xlYXJIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jbGVhcicsIGhhbmRsZXI6IGNsZWFySGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VhcmNoIGZvciBzZXJ2ZXItc2lkZSBzZWFyY2ggc2NlbmFyaW9zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTG9jYWxTZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICAvLyBFbWl0IHNlYXJjaCBxdWVyeSB0aHJvdWdoIG9uQ2hhbmdlIGZvciBleHRlcm5hbCBoYW5kbGluZ1xuICAgICAgICBjb250ZXh0Lm9uQ2hhbmdlKGN1c3RvbUV2ZW50LmRldGFpbCBhcyBUKTtcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLXNlYXJjaCcsIHNlYXJjaEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLXNlYXJjaCcsIGhhbmRsZXI6IHNlYXJjaEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIGJhc2VkIG9uIHNlbGVjdGlvbiBtb2RlXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogVCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgLy8gRW5zdXJlIGFycmF5IGZvciBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgICAgcmV0dXJuICh2YWx1ZSA/IFt2YWx1ZV0gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICAvLyBTaW5nbGUgc2VsZWN0aW9uIC0gcmV0dXJuIHN0cmluZ1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBVbnN1YnNjcmliZSBmcm9tIG9wdGlvbnMgT2JzZXJ2YWJsZVxuICAgIGlmICh0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICAvLyBSZW1vdmUgZG9jdW1lbnQgbW91c2Vkb3duIGhhbmRsZXIgaWYgZXhpc3RzXG4gICAgaWYgKCh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyLCB0cnVlKTtcbiAgICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXI7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgIFxuICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlKCk7XG4gICAgICB0aGlzLnNlbGVjdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWdub3JlIGZvY3VzIGVycm9ycyAtIG5pbGUtc2VsZWN0IGludGVybmFscyBtYXkgbm90IGJlIHJlYWR5XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHtcbiAgICAgIHJldHVybiAodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBhIGNoYW5nZSBldmVudCBmaXJlZCwgYWx3YXlzIHVzZSB0cmFja2VkVmFsdWVzIChldmVuIGlmIGVtcHR5ID0gYWxsIHVuY2hlY2tlZCkuXG4gICAgICAvLyBPbmx5IGZhbGwgYmFjayB0byB0aGUgY29tcG9uZW50IHZhbHVlIHdoZW4gbm8gY2hhbmdlIGhhcyBvY2N1cnJlZCB5ZXQuXG4gICAgICBsZXQgdmFsdWVzID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/IHRoaXMudHJhY2tlZFZhbHVlcyA6IHRoaXMuc2VsZWN0LnZhbHVlO1xuICAgICAgXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2OiBhbnkpID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlcyA/IFt2YWx1ZXNdIDogW10pIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgbGV0IHZhbHVlID0gdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA/ICh0aGlzLnRyYWNrZWRWYWx1ZXNbMF0gPz8gJycpIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/ICh2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiAnJykgOiAodmFsdWUgfHwgJycpKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1zZWxlY3QtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtc2VsZWN0LWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFHSCxPQUFPLEVBQTRCLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RDs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFNBQVMsb0JBQW9CO0lBQzNCLElBQUksc0JBQXNCO1FBQUUsT0FBTztJQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7SUFFOUIsTUFBTSxPQUFPLEdBQUcsNkJBQTZCLENBQUM7SUFDOUMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkRuQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQTBGRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBVTNCLFlBQTZCLE9BQWdDO1FBQWhDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBVDdELDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUd2QixtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFdEUsbUJBQWMsR0FBOEIsRUFBRSxDQUFDO1FBQy9DLGtCQUFhLEdBQWEsRUFBRSxDQUFDLENBQUUsMkNBQTJDO1FBQzFFLHNCQUFpQixHQUFHLEtB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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQWlCLENBQUM7SUFDckcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVTZWxlY3QgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgZGVtb25zdHJhdGVzIGhvdyB0byBjcmVhdGUgZHJvcGRvd24vc2VsZWN0IGVkaXRvcnMgZm9yIG5neC1zbWFydC10YWJsZVxuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbmplY3QgZ2xvYmFsIHN0eWxlcyBmb3IgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGxpbWl0XG4gKi9cbmxldCBkcm9wZG93blN0eWxlc0luamVjdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbmplY3REcm9wZG93blN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGRyb3Bkb3duU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgZHJvcGRvd25TdHlsZXNJbmplY3RlZCA9IHRydWU7XG5cbiAgY29uc3Qgc3R5bGVJZCA9ICduaWxlLXNlbGVjdC1kcm9wZG93bi1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTGltaXQgbmlsZS1zZWxlY3QgZHJvcGRvd24gaGVpZ2h0IGFuZCBlbmFibGUgc2Nyb2xsaW5nICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQge1xuICAgICAgbWF4LWhlaWdodDogMzAwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fbGlzdGJveCB7XG4gICAgICBtaW4td2lkdGg6IDIyMHB4ICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtaGVpZ2h0OiAyNjBweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3cteTogYXV0byAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fZm9vdGVyIHtcbiAgICAgIGhlaWdodDogMzVweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBQcmV2ZW50IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gLSB0YXJnZXQgdGhlIG9wdGlvbnMgY29udGFpbmVyICovXG4gICAgLm5pbGUtc2VsZWN0LXBvcnRhbC1hcHBlbmQgLnNlbGVjdF9fb3B0aW9ucyB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbiB7XG4gICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgbWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIG5pbGUtb3B0aW9uOjpwYXJ0KGJhc2UpIHtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7XG4gICAgICBtYXgtd2lkdGg6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogRml4IG9wdGlvbiB0ZXh0IHRydW5jYXRpb24gYnkgY2hhbmdpbmcgZmxleCBkaXJlY3Rpb24gKi9cbiAgICAubmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCBuaWxlLW9wdGlvbjo6cGFydChvcHRpb25fbGFiZWxfY29udGFpbmVyKSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIENvbWJvYm94IHN0eWxpbmcgdXNpbmcgOjpwYXJ0KCkgc2VsZWN0b3IgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgbmlsZS1zZWxlY3Quc3QtY2VsbC1lZGl0b3I6OnBhcnQoY29tYm9ib3gpOmhvdmVyIHtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jZWxsLWVkaXRvcjo6cGFydChjb21ib2JveCkge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogc29saWQgMXB4IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDBweCAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgLyogVGFnIHNwYWNpbmcgKi9cbiAgICBuaWxlLXNlbGVjdC5zdC1jZWxsLWVkaXRvcjo6cGFydCh0YWcpIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMHB4O1xuICAgICAgcGFkZGluZzogMXB4IDJweDtcbiAgICB9XG4gICAgLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KHRhZykge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAwcHg7XG4gICAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgIH1cbiAgICAvKiBTZWFyY2ggaW5wdXQgZnVsbCB3aWR0aCAqL1xuICAgIC5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kIC5zZWxlY3RfX3NlYXJjaCB7XG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogU2VsZWN0IG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0T3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIE9wdGlvbmFsIHByZWZpeCBpY29uIG9yIGNvbnRlbnQgKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlU2VsZWN0RWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZVNlbGVjdEVkaXRvck9wdGlvbnMge1xuICAvLyBPcHRpb25zIGNvbmZpZ3VyYXRpb24gKFJFUVVJUkVEKVxuICAvKiogQXJyYXkgb2Ygb3B0aW9ucyAtIHN1cHBvcnRzIHN0YXRpYyBhcnJheXMsIE9ic2VydmFibGUsIG9yIEJlaGF2aW9yU3ViamVjdCBmb3IgcmVhY3RpdmUgdXBkYXRlcyAqL1xuICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdIHwgT2JzZXJ2YWJsZTxTZWxlY3RPcHRpb25bXSB8IHN0cmluZ1tdPjtcbiAgXG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgd2hlbiBubyBzZWxlY3Rpb24gaXMgbWFkZSAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIHNlbGVjdCBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICAvKiogRW5hYmxlIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIEFkZHMgY2xlYXIgYnV0dG9uIHdoZW4gdmFsdWUgaXMgbm90IGVtcHR5ICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlIHRoZSBzZWxlY3QgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBNYWtlIHRoZSBzZWxlY3QgcmVxdWlyZWQgKi9cbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBmdW5jdGlvbmFsaXR5ICovXG4gIHNlYXJjaEVuYWJsZWQ/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAvKiogSGVscCB0ZXh0IHRvIGRpc3BsYXkgKi9cbiAgaGVscFRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBBZHZhbmNlZCBmZWF0dXJlc1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgb3B0aW9ucyB0byBzaG93IGluIG11bHRpcGxlIG1vZGUgKDAgPSBubyBsaW1pdCkgKi9cbiAgbWF4T3B0aW9uc1Zpc2libGU/OiBudW1iZXI7XG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBzZWxlY3Qgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBkcm9wZG93biBtZW51ICovXG4gIHBsYWNlbWVudD86ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIFxuICAvLyBWaXJ0dWFsIHNjcm9sbCBmb3IgbGFyZ2UgbGlzdHNcbiAgLyoqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIHdpdGggbWFueSBvcHRpb25zICovXG4gIGVuYWJsZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBcbiAgLy8gU2VhcmNoIGNvbmZpZ3VyYXRpb25cbiAgLyoqIERpc2FibGUgbG9jYWwgc2VhcmNoICh1c2UgZm9yIHNlcnZlci1zaWRlIHNlYXJjaCkgKi9cbiAgZGlzYWJsZUxvY2FsU2VhcmNoPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZhbGlkYXRpb25cbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbiAgXG4gIC8vIFBvcnRhbCBvcHRpb25zXG4gIC8qKiBBcHBlbmQgZHJvcGRvd24gdG8gZG9jdW1lbnQgYm9keSBpbnN0ZWFkIG9mIHBhcmVudCAqL1xuICBwb3J0YWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBvcGVucyB0aGUgb3B0aW9ucyBsaXN0IGFzIHNvb24gYXMgdGhlIGNlbGwgZW50ZXJzIGVkaXQgbW9kZVxuICAgKiAoZS5nLiBkb3VibGUtY2xpY2spLiBTZXQgdG8gZmFsc2UgdG8ga2VlcCB0aGUgbGlzdCBjbG9zZWQgdW50aWwgdGhlIHVzZXIgb3BlbnMgaXQuXG4gICAqIFdpdGggYGVuYWJsZVZpcnR1YWxTY3JvbGxgLCBvcGVuaW5nIHVzZXMgdGhlIGlubmVyIGBuaWxlLXZpcnR1YWwtc2VsZWN0YCBvbmx5LlxuICAgKi9cbiAgb3BlbkRyb3Bkb3duT25FZGl0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDdXN0b20gZWRpdG9yIHRoYXQgdXNlcyBOaWxlU2VsZWN0IGNvbXBvbmVudFxuICogQHRlbXBsYXRlIFQgVGhlIHZhbHVlIHR5cGUgKHN0cmluZyBmb3Igc2luZ2xlIHNlbGVjdGlvbiwgc3RyaW5nW10gZm9yIG11bHRpcGxlKVxuICovXG5leHBvcnQgY2xhc3MgTmlsZVNlbGVjdEVkaXRvcjxUID0gc3RyaW5nPiBpbXBsZW1lbnRzIENlbGxFZGl0b3I8VD4ge1xuICBhY2NlcHRzSW5pdGlhbEtleXByZXNzID0gZmFsc2U7XG4gIFxuICBwcml2YXRlIHNlbGVjdD86IGFueTtcbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyczogQXJyYXk8eyBldmVudDogc3RyaW5nOyBoYW5kbGVyOiBFdmVudExpc3RlbmVyIH0+ID0gW107XG4gIHByaXZhdGUgb3B0aW9uc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjdXJyZW50T3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSA9IFtdO1xuICBwcml2YXRlIHRyYWNrZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107ICAvLyBUcmFjayBzZWxlY3RlZCB2YWx1ZXMgZm9yIHZpcnR1YWwgc2Nyb2xsXG4gIHByaXZhdGUgaGFzQ2hhbmdlT2NjdXJyZWQgPSBmYWxzZTsgICAgIC8vIFdoZXRoZXIgYSBuaWxlLWNoYW5nZSBldmVudCBoYXMgZmlyZWRcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5pbGVTZWxlY3RFZGl0b3JPcHRpb25zKSB7XG4gICAgLy8gSGFuZGxlIE9ic2VydmFibGUgb3B0aW9uc1xuICAgIGlmIChpc09ic2VydmFibGUob3B0aW9ucy5vcHRpb25zKSkge1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uID0gb3B0aW9ucy5vcHRpb25zLnN1YnNjcmliZShvcHRzID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IG9wdHM7XG4gICAgICAgIC8vIElmIGVkaXRvciBpcyBhbHJlYWR5IGFjdGl2ZSwgdXBkYXRlIHRoZSBET01cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGF0aWMgb3B0aW9uc1xuICAgICAgdGhpcy5jdXJyZW50T3B0aW9ucyA9IG9wdGlvbnMub3B0aW9ucyB8fCBbXTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05pbGVTZWxlY3RFZGl0b3I6IG9wdGlvbnMgYXJyYXkgaXMgZW1wdHknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlU2VsZWN0RWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmplY3QgZHJvcGRvd24gaGVpZ2h0IHN0eWxlcyBvbmNlXG4gICAgaW5qZWN0RHJvcGRvd25TdHlsZXMoKTtcblxuICAgIC8vIENyZWF0ZSBOaWxlU2VsZWN0IGN1c3RvbSBlbGVtZW50IHVzaW5nIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICB0aGlzLnNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtc2VsZWN0Jyk7XG4gICAgdGhpcy5zZWxlY3QuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yJztcbiAgICBcbiAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGZvciBwcm9wZXIgY2VsbCBmaXR0aW5nXG4gICAgdGhpcy5zZWxlY3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy5zZWxlY3Quc3R5bGUuaGVpZ2h0ID0gJ2luaGVyaXQnO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICBcbiAgICAvLyBTZXQgaW5pdGlhbCB2YWx1ZVxuICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlKGNvbnRleHQudmFsdWUpO1xuXG4gICAgLy8gQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICAvLyBDcmVhdGUgYW5kIGFwcGVuZCBvcHRpb25zIHdpdGggY3VycmVudCBvcHRpb25zXG4gICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuXG4gICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0KTtcblxuICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIHNlbGVjdFxuICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgIGNvbnRleHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KTtcblxuICAgIC8vIEZvY3VzIGFmdGVyIG1vdW50OyBvcGVuIGRyb3Bkb3duIG9ubHkgb25jZSBuaWxlLXBvcHVwIGV4aXN0cyAoYXZvaWRzIG51bGwgdGhpcy5wb3B1cCBpbiBuaWxlLXNlbGVjdClcbiAgICBjb25zdCBvcGVuT25FZGl0ID0gdGhpcy5vcHRpb25zLm9wZW5Ecm9wZG93bk9uRWRpdCAhPT0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMuYWN0aXZhdGVTZWxlY3RBZnRlck1vdW50KG9wZW5PbkVkaXQpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWN0aXZhdGVTZWxlY3RBZnRlck1vdW50KG9wZW5PbkVkaXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gICAgaWYgKCFvcGVuT25FZGl0IHx8ICF0aGlzLnNlbGVjdCB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5vcGVuTmlsZVNlbGVjdERyb3Bkb3duU2FmZWx5KCk7XG4gIH1cblxuICAvKiogTGl0IEBxdWVyeSgnbmlsZS1wb3B1cCcpIC8gLnNlbGVjdCDigJQgbXVzdCBleGlzdCBiZWZvcmUgaGFuZGxlT3BlbkNoYW5nZSB0b3VjaGVzIHRoaXMucG9wdXAucG9wdXAgKi9cbiAgcHJpdmF0ZSBpc05pbGVTZWxlY3RQb3B1cE1vdW50ZWQoc2VsZWN0OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNlbGVjdC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCduaWxlLXBvcHVwJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGludm9rZVNob3dIYW5kbGluZ1Byb21pc2UoaG9zdDogeyBzaG93PzogKCkgPT4gdW5rbm93biB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHR5cGVvZiBob3N0LnNob3cgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dCA9IGhvc3Quc2hvdygpO1xuICAgICAgaWYgKG91dCAhPSBudWxsICYmIHR5cGVvZiAob3V0IGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXdhaXQgKG91dCBhcyBQcm9taXNlPHVua25vd24+KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc3luYyB0aHJvdyBmcm9tIHNob3coKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb3Blbk5pbGVTZWxlY3REcm9wZG93blNhZmVseSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzZWxlY3QgPSB0aGlzLnNlbGVjdCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNlbGVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgnbmlsZS1zZWxlY3QnKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoJ25pbGUtdmlydHVhbC1zZWxlY3QnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUg4oCUIG5vdCByZWdpc3RlcmVkIGluIGFsbCBlbnZpcm9ubWVudHNcbiAgICAgIH1cblxuICAgICAgLy8gU2FtZSBpZGVhIGFzIG5pbGUtcG9wdXA6IGlubmVyIGhvc3QgbWF5IG5vdCBleGlzdCB1bnRpbCBMaXQgZmluaXNoZXMgYSBwYXNzIChvciBzZXZlcmFsKS5cbiAgICAgIGNvbnN0IG1heFZpcnR1YWxXYWl0UGFzc2VzID0gNTA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heFZpcnR1YWxXYWl0UGFzc2VzOyBpKyspIHtcbiAgICAgICAgY29uc3QgdnMgPSBzZWxlY3Quc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcignbmlsZS12aXJ0dWFsLXNlbGVjdCcpIGFzIHtcbiAgICAgICAgICBzaG93PzogKCkgPT4gdW5rbm93bjtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICAgIGlmICh2cykge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW52b2tlU2hvd0hhbmRsaW5nUHJvbWlzZSh2cyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpdCA9IHNlbGVjdCBhcyB7IHVwZGF0ZUNvbXBsZXRlPzogUHJvbWlzZTx1bmtub3duPiB9O1xuICAgICAgICBpZiAobGl0LnVwZGF0ZUNvbXBsZXRlPy50aGVuKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGxpdC51cGRhdGVDb21wbGV0ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNvbHZlKCkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhXYWl0UGFzc2VzID0gNTA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhXYWl0UGFzc2VzOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzTmlsZVNlbGVjdFBvcHVwTW91bnRlZChzZWxlY3QpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29uc3QgbGl0ID0gc2VsZWN0IGFzIHsgdXBkYXRlQ29tcGxldGU/OiBQcm9taXNlPHVua25vd24+IH07XG4gICAgICBpZiAobGl0LnVwZGF0ZUNvbXBsZXRlPy50aGVuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgbGl0LnVwZGF0ZUNvbXBsZXRlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzb2x2ZSgpKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzTmlsZVNlbGVjdFBvcHVwTW91bnRlZChzZWxlY3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaG9zdCA9IHNlbGVjdCBhcyB7IHNob3c/OiAoKSA9PiB1bmtub3duOyBvcGVuPzogYm9vbGVhbiB9O1xuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgNTsgYXR0ZW1wdCsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNOaWxlU2VsZWN0UG9wdXBNb3VudGVkKHNlbGVjdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBob3N0LnNob3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZVNob3dIYW5kbGluZ1Byb21pc2UoaG9zdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaG9zdC5vcGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNDApKTtcbiAgICAgIGNvbnN0IGxpdCA9IHNlbGVjdCBhcyB7IHVwZGF0ZUNvbXBsZXRlPzogUHJvbWlzZTx1bmtub3duPiB9O1xuICAgICAgaWYgKGxpdC51cGRhdGVDb21wbGV0ZT8udGhlbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGxpdC51cGRhdGVDb21wbGV0ZTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgc2VsZWN0XG4gICAqL1xuICBwcml2YXRlIHNldEluaXRpYWxWYWx1ZSh2YWx1ZTogVCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcbiAgICB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgc2VsZWN0aW9uIC0gdmFsdWUgc2hvdWxkIGJlIGFycmF5XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmFja2VkVmFsdWVzID0gWy4uLnZhbHVlXTsgIC8vIEluaXRpYWxpemUgdHJhY2tlZCB2YWx1ZXNcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSBbU3RyaW5nKHZhbHVlKV07XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFtTdHJpbmcodmFsdWUpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gW107XG4gICAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIYW5kbGUgc2luZ2xlIHNlbGVjdGlvblxuICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZSA/IFN0cmluZyh2YWx1ZSkgOiAnJztcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlcyA9IHZhbHVlID8gW1N0cmluZyh2YWx1ZSldIDogW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIE5pbGVTZWxlY3QgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuXG4gICAgLy8gQmFzaWMgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2l6ZSkge1xuICAgICAgdGhpcy5zZWxlY3Quc2l6ZSA9IHRoaXMub3B0aW9ucy5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdC5zaXplID0gJ3NtYWxsJzsgLy8gRGVmYXVsdCBmb3IgdGFibGUgY2VsbHNcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5tdWx0aXBsZSA9IHRoaXMub3B0aW9ucy5tdWx0aXBsZTtcbiAgICB9XG5cbiAgICAvLyBCZWhhdmlvciBvcHRpb25zXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmNsZWFyYWJsZSA9IHRoaXMub3B0aW9ucy5jbGVhcmFibGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zZWxlY3QuZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5zZWxlY3QucmVxdWlyZWQgPSB0aGlzLm9wdGlvbnMucmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zZWFyY2hFbmFibGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5zZWFyY2hFbmFibGVkID0gdGhpcy5vcHRpb25zLnNlYXJjaEVuYWJsZWQ7XG4gICAgfVxuXG4gICAgLy8gVmlzdWFsIHN0YXRlc1xuICAgIGlmICh0aGlzLm9wdGlvbnMud2FybmluZykge1xuICAgICAgdGhpcy5zZWxlY3Qud2FybmluZyA9IHRoaXMub3B0aW9ucy53YXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3IpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmVycm9yID0gdGhpcy5vcHRpb25zLmVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3VjY2Vzcykge1xuICAgICAgdGhpcy5zZWxlY3Quc3VjY2VzcyA9IHRoaXMub3B0aW9ucy5zdWNjZXNzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlKSB7XG4gICAgICB0aGlzLnNlbGVjdC5lcnJvck1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaGVscFRleHQpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhlbHBUZXh0ID0gdGhpcy5vcHRpb25zLmhlbHBUZXh0O1xuICAgIH1cblxuICAgIC8vIEFkdmFuY2VkIGZlYXR1cmVzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhPcHRpb25zVmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5tYXhPcHRpb25zVmlzaWJsZSA9IHRoaXMub3B0aW9ucy5tYXhPcHRpb25zVmlzaWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmZpbGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNlbGVjdC5maWxsZWQgPSB0aGlzLm9wdGlvbnMuZmlsbGVkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGlsbCkge1xuICAgICAgdGhpcy5zZWxlY3QucGlsbCA9IHRoaXMub3B0aW9ucy5waWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaG9pc3QpIHtcbiAgICAgIHRoaXMuc2VsZWN0LmhvaXN0ID0gdGhpcy5vcHRpb25zLmhvaXN0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMucGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdC5wbGFjZW1lbnQgPSB0aGlzLm9wdGlvbnMucGxhY2VtZW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5zZWxlY3QuZW5hYmxlVmlydHVhbFNjcm9sbCA9IHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoKSB7XG4gICAgICB0aGlzLnNlbGVjdC5kaXNhYmxlTG9jYWxTZWFyY2ggPSB0aGlzLm9wdGlvbnMuZGlzYWJsZUxvY2FsU2VhcmNoO1xuICAgIH1cblxuICAgIC8vIEVuYWJsZSBwb3J0YWwgbW9kZSBieSBkZWZhdWx0IHRvIHByZXZlbnQgZHJvcGRvd24gY2xpcHBpbmcgaW4gdGFibGUgY2VsbHNcbiAgICB0aGlzLnNlbGVjdC5wb3J0YWwgPSB0aGlzLm9wdGlvbnMucG9ydGFsICE9PSBmYWxzZTtcblxuICAgIC8vIFByZXZlbnQgd2lkdGggc3luY2luZyBpc3N1ZXMgaW4gdGFibGUgY2VsbHNcbiAgICB0aGlzLnNlbGVjdC5ub1dpZHRoU3luYyA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG9wdGlvbnMgZHluYW1pY2FsbHkgd2hpbGUgZWRpdG9yIGlzIGFjdGl2ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIEZvciB2aXJ0dWFsIHNjcm9sbCBtb2RlLCBqdXN0IHVwZGF0ZSB0aGUgZGF0YSBwcm9wZXJ0eSAobm8gRE9NIGNoaWxkcmVuIHRvIGNsZWFyKVxuICAgIGlmICh0aGlzLm9wdGlvbnMuZW5hYmxlVmlydHVhbFNjcm9sbCkge1xuICAgICAgdGhpcy5jcmVhdGVBbmRBcHBlbmRPcHRpb25zKHRoaXMuY3VycmVudE9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGFuZGFyZCBtb2RlOiBjbGVhciBleGlzdGluZyBuaWxlLW9wdGlvbiBlbGVtZW50cyBmaXJzdFxuICAgICAgd2hpbGUgKHRoaXMuc2VsZWN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QucmVtb3ZlQ2hpbGQodGhpcy5zZWxlY3QuZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUFuZEFwcGVuZE9wdGlvbnModGhpcy5jdXJyZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRyaWdnZXIgdXBkYXRlIG9uIHRoZSB3ZWIgY29tcG9uZW50XG4gICAgaWYgKHRoaXMuc2VsZWN0LnJlcXVlc3RVcGRhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0LnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIE5pbGVPcHRpb24gZWxlbWVudHMgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBzZWxlY3RcbiAgICogV2hlbiBlbmFibGVWaXJ0dWFsU2Nyb2xsIGlzIHRydWUsIHVzZXMgZGF0YSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIERPTSBlbGVtZW50c1xuICAgKiBAc2VlIGh0dHBzOi8vbmlsZS5hcXVlcmFsYWJzLmNvbS9zZWxlY3QtdmlydHVhbD90aGVtZT1lbnRlcnByaXNlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcmVuZGVyXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFuZEFwcGVuZE9wdGlvbnMob3B0aW9uczogKFNlbGVjdE9wdGlvbiB8IHN0cmluZylbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIC8vIFZpcnR1YWwgc2Nyb2xsIG1vZGU6IHVzZSBkYXRhIHByb3BlcnR5IGluc3RlYWQgb2YgRE9NIGVsZW1lbnRzXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVWaXJ0dWFsU2Nyb2xsKSB7XG4gICAgICBjb25zdCB2aXJ0dWFsRGF0YSA9IG9wdGlvbnMubWFwKG9wdCA9PiBcbiAgICAgICAgdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgXG4gICAgICAgICAgPyB7IHZhbHVlOiBvcHQsIGxhYmVsOiBvcHQgfVxuICAgICAgICAgIDogeyB2YWx1ZTogb3B0LnZhbHVlLCBsYWJlbDogb3B0LmxhYmVsLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdC5kYXRhID0gdmlydHVhbERhdGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3RhbmRhcmQgbW9kZTogY3JlYXRlIG5pbGUtb3B0aW9uIGVsZW1lbnRzXG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdCA9PiB7XG4gICAgICBjb25zdCBuaWxlT3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1vcHRpb24nKSBhcyBhbnk7XG5cbiAgICAgIC8vIEF1dG8tZGV0ZWN0IGZvcm1hdDogc3RyaW5nIG9yIFNlbGVjdE9wdGlvbiBvYmplY3RcbiAgICAgIGlmICh0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBuaWxlT3B0aW9uLnZhbHVlID0gb3B0O1xuICAgICAgICBuaWxlT3B0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCBvcHQpO1xuICAgICAgICBuaWxlT3B0aW9uLnRleHRDb250ZW50ID0gb3B0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmlsZU9wdGlvbi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgICAgbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb3B0LnZhbHVlKTtcbiAgICAgICAgbmlsZU9wdGlvbi50ZXh0Q29udGVudCA9IG9wdC5sYWJlbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChvcHQuZGlzYWJsZWQpIHtcbiAgICAgICAgICBuaWxlT3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBuaWxlT3B0aW9uLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIHByZWZpeCBpZiBwcm92aWRlZCAoY291bGQgYmUgaWNvbiBuYW1lIG9yIGNvbnRlbnQpXG4gICAgICAgIGlmIChvcHQucHJlZml4KSB7XG4gICAgICAgICAgLy8gbmlsZU9wdGlvbi5zZXRBdHRyaWJ1dGUoJ3Nsb3QnLCAncHJlZml4Jyk7XG4gICAgICAgICAgLy8gbmlsZU9wdGlvbi5pbm5lckhUTUwgPSBgPG5pbGUtaWNvbiBuYW1lPVwiJHtvcHQucHJlZml4fVwiPjwvbmlsZS1pY29uPmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3QhLmFwcGVuZENoaWxkKG5pbGVPcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhbGwgZXZlbnQgbGlzdGVuZXJzIHdpdGggcHJvcGVyIGNsZWFudXAgdHJhY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3QpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbGlkYXRlT25TYXZlID0gdGhpcy5vcHRpb25zLnZhbGlkYXRlT25TYXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEhhbmRsZSBrZXlib2FyZCBldmVudHMgKGtleWRvd24gaXMgbm90IHJlcGxhY2VkIGJ5IGN1c3RvbSBldmVudHMpXG4gICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGtleUV2ZW50ID0gZSBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdrZXlkb3duJywgaGFuZGxlcjoga2V5ZG93bkhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmlsZS1jaGFuZ2UgY3VzdG9tIGV2ZW50IGFzIHNhdmUgdHJpZ2dlciAtIE9OTFkgZm9yIHNpbmdsZS1zZWxlY3RcbiAgICAvLyBNdWx0aS1zZWxlY3Qgc2hvdWxkIHN0YXkgb3BlbiB1bnRpbCB1c2VyIGNsaWNrcyBvdXRzaWRlXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IGNoYW5nZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWxpZGF0ZU9uU2F2ZSAmJiB0aGlzLnNlbGVjdCAmJiAhdGhpcy5zZWxlY3QuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdC5yZXBvcnRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gSWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUoY3VzdG9tRXZlbnQuZGV0YWlsLnZhbHVlKSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5zZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEZvciBtdWx0aS1zZWxlY3QsIHRyYWNrIHZhbHVlIGNoYW5nZXMgKG5lZWRlZCBmb3IgdmlydHVhbCBzY3JvbGwgd2hlcmUgdmFsdWUgcHJvcGVydHkgZG9lc24ndCB1cGRhdGUpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tdWx0aXBsZSkge1xuICAgICAgY29uc3QgdHJhY2tWYWx1ZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWU7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5oYXNDaGFuZ2VPY2N1cnJlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBbLi4ubmV3VmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyYWNrZWRWYWx1ZXMgPSBuZXdWYWx1ZSA/IFtuZXdWYWx1ZV0gOiBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIHRyYWNrVmFsdWVIYW5kbGVyKTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiB0cmFja1ZhbHVlSGFuZGxlciB9KTtcbiAgICB9XG5cbiAgICAvLyBUcmFjayBpZiBzYXZlIHdhcyBhbHJlYWR5IHRyaWdnZXJlZCAodG8gcHJldmVudCBkb3VibGUgc2F2ZSlcbiAgICBsZXQgc2F2ZVRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIFxuICAgIC8vIFVzZSBtb3VzZWRvd24gb24gZG9jdW1lbnQgdG8gZGV0ZWN0IGNsaWNrcyBvdXRzaWRlIHRoZSBzZWxlY3QgYW5kIHBvcnRhbFxuICAgIGNvbnN0IGRvY3VtZW50TW91c2Vkb3duSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoc2F2ZVRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdCkgcmV0dXJuO1xuICAgICAgXG4gICAgICAvLyBVc2UgY29tcG9zZWRQYXRoIHRvIHRyYXZlcnNlIHNoYWRvdyBET00gYm91bmRhcmllc1xuICAgICAgY29uc3QgcGF0aCA9IGUuY29tcG9zZWRQYXRoKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNsaWNrIGlzIGluc2lkZSB0aGUgc2VsZWN0IGVsZW1lbnQgb3IgYW55IG5pbGUtc2VsZWN0IHJlbGF0ZWQgZWxlbWVudHNcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXRoKSB7XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBvdXIgc2VsZWN0IGVsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMuc2VsZWN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBmb3IgbmlsZS1zZWxlY3QgcG9ydGFscyAodmFyaW91cyBjbGFzcyBuYW1lcylcbiAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnbmlsZS1zZWxlY3QtcG9ydGFsLWFwcGVuZCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3NlbGVjdF9fbGlzdGJveCcpIHx8XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3NlbGVjdF9fb3B0aW9ucycpIHx8XG4gICAgICAgICAgICBlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICduaWxlLW9wdGlvbicgfHxcbiAgICAgICAgICAgIGVsZW1lbnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ25pbGUtc2VsZWN0Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBlbGVtZW50IHdpdGggbmlsZS1zZWxlY3QgaW4gaXRzIGNsYXNzXG4gICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZSAmJiB0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIFxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUuaW5jbHVkZXMoJ25pbGUtc2VsZWN0JykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQWxzbyBjaGVjayBwb3J0YWwgY29udGFpbmVycyBkaXJlY3RseVxuICAgICAgY29uc3QgcG9ydGFscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uaWxlLXNlbGVjdC1wb3J0YWwtYXBwZW5kLCBbY2xhc3MqPVwic2VsZWN0X19saXN0Ym94XCJdJyk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvcnRhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvcnRhbHNbaV0uY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2xpY2sgaXMgb3V0c2lkZSAtIHNhdmUgYW5kIGV4aXRcbiAgICAgIHNhdmVUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBpZiAodmFsaWRhdGVPblNhdmUgJiYgdGhpcy5zZWxlY3QgJiYgIXRoaXMuc2VsZWN0LmNoZWNrVmFsaWRpdHkoKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gSWdub3JlIHZhbGlkYXRpb24gZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICAgIH1cbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICAgIH07XG4gICAgXG4gICAgLy8gQWRkIGxpc3RlbmVyIGFmdGVyIGEgc2hvcnQgZGVsYXkgdG8gYXZvaWQgY2FwdHVyaW5nIHRoZSBpbml0aWFsIGNsaWNrIHRoYXQgb3BlbmVkIHRoZSBlZGl0b3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGRvY3VtZW50TW91c2Vkb3duSGFuZGxlciwgdHJ1ZSk7XG4gICAgfSwgNTApO1xuICAgIFxuICAgIC8vIFN0b3JlIGZvciBjbGVhbnVwXG4gICAgKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyID0gZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyO1xuXG4gICAgLy8gSGFuZGxlIGNsZWFyIGJ1dHRvbiBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpIHtcbiAgICAgIGNvbnN0IGNsZWFySGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb250ZXh0Lm9uU2F2ZSh0aGlzLnBhcnNlVmFsdWUodGhpcy5vcHRpb25zLm11bHRpcGxlID8gW10gOiAnJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2xlYXInLCBjbGVhckhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNsZWFyJywgaGFuZGxlcjogY2xlYXJIYW5kbGVyIH0pO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzZWFyY2ggZm9yIHNlcnZlci1zaWRlIHNlYXJjaCBzY2VuYXJpb3NcbiAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMb2NhbFNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAgIC8vIEVtaXQgc2VhcmNoIHF1ZXJ5IHRocm91Z2ggb25DaGFuZ2UgZm9yIGV4dGVybmFsIGhhbmRsaW5nXG4gICAgICAgIGNvbnRleHQub25DaGFuZ2UoY3VzdG9tRXZlbnQuZGV0YWlsIGFzIFQpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtc2VhcmNoJywgc2VhcmNoSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtc2VhcmNoJywgaGFuZGxlcjogc2VhcmNoSGFuZGxlciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgYmFzZWQgb24gc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBUIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm11bHRpcGxlKSB7XG4gICAgICAvLyBFbnN1cmUgYXJyYXkgZm9yIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gKHZhbHVlID8gW3ZhbHVlXSA6IFtdKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFNpbmdsZSBzZWxlY3Rpb24gLSByZXR1cm4gc3RyaW5nXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gb3B0aW9ucyBPYnNlcnZhYmxlXG4gICAgaWYgKHRoaXMub3B0aW9uc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vcHRpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLm9wdGlvbnNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIFJlbW92ZSBkb2N1bWVudCBtb3VzZWRvd24gaGFuZGxlciBpZiBleGlzdHNcbiAgICBpZiAoKHRoaXMgYXMgYW55KS5fZG9jdW1lbnRNb3VzZWRvd25IYW5kbGVyKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAodGhpcyBhcyBhbnkpLl9kb2N1bWVudE1vdXNlZG93bkhhbmRsZXIsIHRydWUpO1xuICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuX2RvY3VtZW50TW91c2Vkb3duSGFuZGxlcjtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5zZWxlY3QpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0Py5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLnNlbGVjdC5yZW1vdmUoKTtcbiAgICAgIHRoaXMuc2VsZWN0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdD8uZm9jdXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBJZ25vcmUgZm9jdXMgZXJyb3JzIC0gbmlsZS1zZWxlY3QgaW50ZXJuYWxzIG1heSBub3QgYmUgcmVhZHlcbiAgICB9XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdCkge1xuICAgICAgcmV0dXJuICh0aGlzLm9wdGlvbnMubXVsdGlwbGUgPyBbXSA6ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGEgY2hhbmdlIGV2ZW50IGZpcmVkLCBhbHdheXMgdXNlIHRyYWNrZWRWYWx1ZXMgKGV2ZW4gaWYgZW1wdHkgPSBhbGwgdW5jaGVja2VkKS5cbiAgICAgIC8vIE9ubHkgZmFsbCBiYWNrIHRvIHRoZSBjb21wb25lbnQgdmFsdWUgd2hlbiBubyBjaGFuZ2UgaGFzIG9jY3VycmVkIHlldC5cbiAgICAgIGxldCB2YWx1ZXMgPSB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID8gdGhpcy50cmFja2VkVmFsdWVzIDogdGhpcy5zZWxlY3QudmFsdWU7XG4gICAgICBcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoKHY6IGFueSkgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJycpIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAodmFsdWVzID8gW3ZhbHVlc10gOiBbXSkgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmhhc0NoYW5nZU9jY3VycmVkID8gKHRoaXMudHJhY2tlZFZhbHVlc1swXSA/PyAnJykgOiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gKHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZVswXSA6ICcnKSA6ICh2YWx1ZSB8fCAnJykpIGFzIHVua25vd24gYXMgVDtcbiAgfVxufVxuIl19
|
|
@@ -192,8 +192,14 @@ export class StCellComponent {
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
onCellClick() {
|
|
195
|
-
//
|
|
196
|
-
//
|
|
195
|
+
// First click: parent <td> focuses this cell (bubbles after this handler).
|
|
196
|
+
// Second click while already focused: enter edit (spreadsheet-style).
|
|
197
|
+
if (this.isEditable &&
|
|
198
|
+
!this.cellLoading &&
|
|
199
|
+
!this.cell.isEditing() &&
|
|
200
|
+
this.cell.isFocused()) {
|
|
201
|
+
this.startEdit();
|
|
202
|
+
}
|
|
197
203
|
}
|
|
198
204
|
onCellDoubleClick() {
|
|
199
205
|
// Double-click starts editing regardless of EditMode (Excel-like behavior)
|
|
@@ -407,4 +413,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
407
413
|
type: HostListener,
|
|
408
414
|
args: ['keydown', ['$event']]
|
|
409
415
|
}] } });
|
|
410
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtY2VsbC9zdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jZWxsL3N0LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBOEIsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQWtFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUzFKLE1BQU0sT0FBTyxlQUFlO0lBcUIxQixZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBcEJ2QixhQUFRLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFJcEcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFReEIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElB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LENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7U0FDaEM7SUFDSCxDQUFDOzs0R0EvYlUsZUFBZTtnR0FBZixlQUFlLHNlQWFZLFVBQVUsNkJDekJsRCxnK0JBZ0NNOzJGRHBCTyxlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7d0dBS1YsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRTZDLGVBQWU7c0JBQWxFLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXlHbEQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgSG9zdExpc3RlbmVyLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLmNsYXNzJztcbmltcG9ydCB7IENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbEVkaXRFdmVudCwgQ2VsbFNhdmVFdmVudCwgQ2VsbENoYW5nZUV2ZW50LCBDZWxsQ2FuY2VsRXZlbnQsIEVkaXRNb2RlLCBOYXZpZ2F0aW9uS2V5LCBOYXZpZ2F0aW9uRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy90YWJsZS1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YWJsZS1jb25maWcuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3QtY2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC1jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3QtY2VsbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNlbGwhOiBDZWxsPGFueT47XG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBFZGl0TW9kZSA9IEVkaXRNb2RlLkNMSUNLO1xuICBASW5wdXQoKSB0YWJsZVN0YXRlPzogVGFibGVTdGF0ZTtcbiAgQElucHV0KCkgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgY29sdW1uSW5kZXg/OiBudW1iZXI7XG4gIFxuICBAT3V0cHV0KCkgY2VsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENoYW5nZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbEVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxFZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFNhdmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDYW5jZWxFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxTYXZlQW5kTmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHtldmVudDogS2V5Ym9hcmRFdmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9ufT4oKTtcbiAgXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBlZGl0b3JDb250YWluZXI/OiBFbGVtZW50UmVmO1xuICBcbiAgcHVibGljIGNlbGxMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBlZGl0b3JDbGVhbnVwPzogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbj86IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2VsbC5vblN0YXRlQ2hhbmdlKCgpID0+IHtcbiAgICAgIHRoaXMuY2VsbExvYWRpbmcgPSAhIXRoaXMuY2VsbC5nZXRTdGF0ZSgpLmlzTG9hZGluZztcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBWaWV3IG1heSBoYXZlIGJlZW4gZGVzdHJveWVkOyBzYWZlbHkgaWdub3JlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBQaWNrIHVwIGxvYWRpbmcgc3RhdGUgdGhhdCB3YXMgc2V0IGJlZm9yZSB0aGlzIGNvbXBvbmVudCB3YXMgY3JlYXRlZFxuICAgIHRoaXMuY2VsbExvYWRpbmcgPSAhIXRoaXMuY2VsbC5nZXRTdGF0ZSgpLmlzTG9hZGluZztcblxuICAgIC8vIFN1YnNjcmliZSB0byBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICAvLyBXaGVuIGFub3RoZXIgY2VsbCBzdGFydHMgZWRpdGluZywgc2F2ZSB0aGlzIGNlbGwgaWYgaXQncyBjdXJyZW50bHkgZWRpdGluZ1xuICAgIGlmICh0aGlzLnRhYmxlU3RhdGUgJiYgdGhpcy5jb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMudGFibGVTdGF0ZS5lZGl0aW5nQ2VsbFBvc2l0aW9uJC5zdWJzY3JpYmUocG9zaXRpb24gPT4ge1xuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhpcyBjZWxsIGlzIGN1cnJlbnRseSBlZGl0aW5nXG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgcm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEFuZCB0aGUgbmV3IGVkaXRpbmcgcG9zaXRpb24gaXMgYSBkaWZmZXJlbnQgY2VsbFxuICAgICAgICAgIGlmIChwb3NpdGlvbiAmJiBcbiAgICAgICAgICAgICAgKHBvc2l0aW9uLnJvd0luZGV4ICE9PSByb3dJbmRleCB8fCBwb3NpdGlvbi5jb2x1bW5JbmRleCAhPT0gdGhpcy5jb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIHNhdmUgdGhpcyBjZWxsXG4gICAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJZiBjZWxsIGlzIGFscmVhZHkgaW4gZWRpdGluZyBtb2RlLCByZW5kZXIgdGhlIGVkaXRvclxuICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyRWRpdG9yKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwRWRpdG9yKCk7XG4gICAgXG4gICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBlZGl0aW5nIHBvc2l0aW9uIGNoYW5nZXNcbiAgICBpZiAodGhpcy5lZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZWRpdGluZ1Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgIHJldHVybiBjb25maWcuZWRpdGFibGUgPz8gZmFsc2U7XG4gIH1cblxuICBnZXQgdmFsaWRhdGlvbkVycm9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gUmVhZCB2YWxpZGF0aW9uIHN0YXRlIHdpdGhvdXQgdHJpZ2dlcmluZyB2YWxpZGF0aW9uXG4gICAgLy8gVGhpcyBwcmV2ZW50cyBFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKTtcbiAgICBcbiAgICBpZiAoc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHN0YXRlLmVycm9ycyAmJiBBcnJheS5pc0FycmF5KHN0YXRlLmVycm9ycykgJiYgc3RhdGUuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzdGF0ZS5lcnJvcnMuam9pbignLCAnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gT25seSByZXR1cm4gZ2VuZXJpYyBtZXNzYWdlIGlmIGNlbGwgaXMgbWFya2VkIGFzIGludmFsaWRcbiAgICBpZiAoIXRoaXMuY2VsbC5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiAnSW52YWxpZCB2YWx1ZSc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaGFzQ2VsbFRlbXBsYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICByZXR1cm4gISFjb25maWcuY2VsbFRlbXBsYXRlO1xuICB9XG5cbiAgZ2V0IGNlbGxUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKS5jZWxsVGVtcGxhdGUgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCB0ZW1wbGF0ZUNvbnRleHQoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICByb3dJbmRleDogdGhpcy5jZWxsLmdldFJvd0luZGV4KClcbiAgICB9O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uQ2VsbEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBpZiB0aGlzIGNlbGwgaXMgZm9jdXNlZFxuICAgIGlmICghdGhpcy5jZWxsLmlzRm9jdXNlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBOYXZpZ2F0aW9uS2V5IGVudW0gZm9yIHR5cGUtc2FmZSBrZXkgY2hlY2tpbmdcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSBhcyBOYXZpZ2F0aW9uS2V5KSB7XG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuRU5URVI6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICAvLyBTYXZlIGFuZCBsZXQgbmF2aWdhdGlvbiBoYXBwZW5cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuc2F2ZUVkaXQodGhpcy5jZWxsLmdldFZhbHVlKCkpO1xuICAgICAgICAgIC8vIEVtaXQgZXZlbnQgdG8gdHJpZ2dlciBuYXZpZ2F0aW9uIGRvd25cbiAgICAgICAgICB0aGlzLmNlbGxTYXZlQW5kTmF2aWdhdGUuZW1pdCh7IGV2ZW50LCBkaXJlY3Rpb246IE5hdmlnYXRpb25EaXJlY3Rpb24uRE9XTiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBub3QgZWRpdGluZywgbGV0IGRpcmVjdGl2ZSBoYW5kbGUgbmF2aWdhdGlvblxuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuVEFCOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgLy8gU2F2ZSBhbmQgbGV0IG5hdmlnYXRpb24gaGFwcGVuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IE5hdmlnYXRpb25EaXJlY3Rpb24uTEVGVCA6IE5hdmlnYXRpb25EaXJlY3Rpb24uUklHSFQ7XG4gICAgICAgICAgdGhpcy5jZWxsU2F2ZUFuZE5hdmlnYXRlLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vdCBlZGl0aW5nLCBsZXQgZGlyZWN0aXZlIGhhbmRsZSBuYXZpZ2F0aW9uXG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5FU0NBUEU6XG4gICAgICAgIGlmICh0aGlzLmNlbGwuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICAgIC8vIFN0YXkgZm9jdXNlZCBvbiBzYW1lIGNlbGwgKG5vIG5hdmlnYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGFscGhhbnVtZXJpYyBrZXlzIHdoZW4gZm9jdXNlZCBidXQgbm90IGVkaXRpbmdcbiAgICAgICAgaWYgKCF0aGlzLmNlbGwuaXNFZGl0aW5nKCkgJiYgdGhpcy5pc0FscGhhbnVtZXJpY0tleShldmVudCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5jYW5FZGl0VmlhS2V5Ym9hcmQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gU3RhcnQgZWRpdGluZyB3aXRoIHRoZSBwcmVzc2VkIGtleSBhcyBpbml0aWFsIHZhbHVlXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RWRpdFdpdGhLZXkoZXZlbnQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgRW50ZXIga2V5IGNhbiB0cmlnZ2VyIGVkaXRpbmdcbiAgICogVXNpbmcgRWRpdE1vZGUgZW51bSB2YWx1ZXNcbiAgICovXG4gIHByaXZhdGUgY2FuRWRpdFZpYUVudGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRWRpdGFibGUgJiYgXG4gICAgICAgICAgICh0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5FTlRFUiB8fCB0aGlzLmVkaXRNb2RlID09PSBFZGl0TW9kZS5DTElDSyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBrZXlib2FyZCBjYW4gdHJpZ2dlciBlZGl0aW5nIChmb3IgYWxwaGFudW1lcmljIGFuZCBkb3VibGUtY2xpY2spXG4gICAqL1xuICBwcml2YXRlIGNhbkVkaXRWaWFLZXlib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRhYmxlICYmIFxuICAgICAgICAgICAodGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRU5URVIgfHwgdGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuQ0xJQ0spO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBrZXkgaXMgYWxwaGFudW1lcmljIChzaW5nbGUgY2hhcmFjdGVyKVxuICAgKi9cbiAgcHJpdmF0ZSBpc0FscGhhbnVtZXJpY0tleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIC8vIFNpbmdsZSBjaGFyYWN0ZXIga2V5cyAobGV0dGVycywgbnVtYmVycywgc3ltYm9scylcbiAgICByZXR1cm4gZXZlbnQua2V5Lmxlbmd0aCA9PT0gMSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5O1xuICB9XG4gIFxuICAvKipcbiAgICogU3RhcnQgZWRpdGluZyB3aXRoIGEgc3BlY2lmaWMga2V5IGFzIHRoZSBpbml0aWFsIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIHN0YXJ0RWRpdFdpdGhLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjYW5TdGFydCA9IHRoaXMuY2VsbC5zdGFydEVkaXQoKTtcbiAgICBpZiAoY2FuU3RhcnQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICAgIGNvbnN0IGVkaXRvciA9IGNvbHVtbi5lZGl0b3I7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgc2V0IGluaXRpYWwga2V5cHJlc3MgdmFsdWUgaWYgZWRpdG9yIGFjY2VwdHMgaXRcbiAgICAgIC8vIERlZmF1bHQgdG8gdHJ1ZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGVkaXRvcnNcbiAgICAgIGNvbnN0IGFjY2VwdHNLZXlwcmVzcyA9IGVkaXRvcj8uYWNjZXB0c0luaXRpYWxLZXlwcmVzcyAhPT0gZmFsc2U7XG4gICAgICBcbiAgICAgIGlmIChhY2NlcHRzS2V5cHJlc3MpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBjdXJyZW50IHZhbHVlIHdpdGggdGhlIGtleVxuICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUoa2V5LCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogYWNjZXB0c0tleXByZXNzID8ga2V5IDogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckVkaXRvcigpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gU2luZ2xlIGNsaWNrIG5vdyBvbmx5IGZvY3VzZXMsIGRvZXNuJ3Qgc3RhcnQgZWRpdGluZ1xuICAgIC8vIEZvY3VzIGlzIGhhbmRsZWQgYnkgcGFyZW50IHN0LXRhYmxlIGNvbXBvbmVudFxuICB9XG5cbiAgb25DZWxsRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gRG91YmxlLWNsaWNrIHN0YXJ0cyBlZGl0aW5nIHJlZ2FyZGxlc3Mgb2YgRWRpdE1vZGUgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiAhdGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhblN0YXJ0ID0gdGhpcy5jZWxsLnN0YXJ0RWRpdCgpO1xuICAgIGlmIChjYW5TdGFydCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBOb3RpZnkgVGFibGVTdGF0ZSB0aGF0IHRoaXMgY2VsbCBpcyBub3cgZWRpdGluZ1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSAmJiB0aGlzLmNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlU3RhdGUuc2V0RWRpdGluZ0NlbGwocm93SW5kZXgsIHRoaXMuY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gcmVuZGVyIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgZWRpdG9yID0gY29sdW1uLmVkaXRvcjtcbiAgICBcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlZGl0b3IgY29uZmlndXJlZCBmb3IgY29sdW1uOicsIGNvbHVtbi5rZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jZWxsLmdldFZhbHVlKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBcbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxhbnk+ID0ge1xuICAgICAgdmFsdWUsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZWFnZXIgdmFsaWRhdGlvbiBpZiBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnPy52YWxpZGF0aW9uPy5tb2RlID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGNlbGwgdmFsdWUgdGVtcG9yYXJpbHkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUobmV3VmFsdWUsIHRydWUpOyAvLyBza2lwIHZhbGlkYXRpb24gdG8gYXZvaWQgZG91YmxlIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLnRyaWdnZXJFYWdlclZhbGlkYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlRWRpdChuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWxsIGVkaXRvcidzIGVkaXQgbWV0aG9kXG4gICAgZWRpdG9yLmVkaXQoY29udGV4dCk7XG4gICAgXG4gICAgLy8gU3RvcmUgY2xlYW51cCBjYWxsYmFja1xuICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveSkge1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRWRpdChuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2VsbC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5jZWxsLnNhdmVFZGl0KG5ld1ZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBzdGF0ZSAobGF6eSBtb2RlIC0gb24gc2F2ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50XG4gICAgICBjb25zdCBzYXZlRXZlbnQ6IENlbGxTYXZlRXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogY2VsbFN0YXRlLmVycm9yID8gW2NlbGxTdGF0ZS5lcnJvcl0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsU2F2ZS5lbWl0KHNhdmVFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICBjb25zdCBjaGFuZ2VFdmVudDogQ2VsbENoYW5nZUV2ZW50ID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIG9sZFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICB3YXNWYWxpZDogd2FzVmFsaWQsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgICB9XG4gICAgLy8gSWYgdmFsaWRhdGlvbiBmYWlscywga2VlcCBlZGl0aW5nIG1vZGVcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlIGluIFRhYmxlU3RhdGVcbiAgICogQ2FsbGVkIG9uIHNhdmUgKGxhenkgbW9kZSkgb3Igb24gY2hhbmdlIChlYWdlciBtb2RlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2VsbC5pc1ZhbGlkKCk7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKS5lcnJvcjtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgIFxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHJvd0luZGV4IGlzIGRlZmluZWRcbiAgICBpZiAocm93SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMudGFibGVTdGF0ZS51cGRhdGVDZWxsVmFsaWRhdGlvbihcbiAgICAgIHJvd0luZGV4LFxuICAgICAgY29sdW1uLmtleSxcbiAgICAgIGlzVmFsaWQsXG4gICAgICBlcnJvclxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGVhZ2VyIHZhbGlkYXRpb24gKG9uIGV2ZXJ5IGNoYW5nZSlcbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckVhZ2VyVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSB8fCAhdGhpcy50YWJsZUNvbmZpZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlID0gdGhpcy50YWJsZUNvbmZpZy52YWxpZGF0aW9uPy5tb2RlIHx8ICdsYXp5JztcbiAgICBpZiAodmFsaWRhdGlvbk1vZGUgIT09ICdlYWdlcicpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZS12YWxpZGF0ZSB0aGUgY2VsbFxuICAgIHRoaXMuY2VsbC52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy50YWJsZVN0YXRlLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2FuY2VsRXZlbnQ6IENlbGxDYW5jZWxFdmVudCA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHZhbHVlOiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGxTdGF0ZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgcm93RGF0YTogdGhpcy5jZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNlbGwuY2FuY2VsRWRpdCgpO1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGNhbmNlbEV2ZW50KTtcbiAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3JDbGVhbnVwKSB7XG4gICAgICB0aGlzLmVkaXRvckNsZWFudXAoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdC1jZWxsXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZWRpdGluZyc6IGNlbGwuaXNFZGl0aW5nKCksXG4gICAgJ2RpcnR5JzogY2VsbC5pc0RpcnR5KCksXG4gICAgJ2ludmFsaWQnOiAhY2VsbC5pc1ZhbGlkKCksXG4gICAgJ3JlYWRvbmx5JzogIWlzRWRpdGFibGUsXG4gICAgJ2xvYWRpbmcnOiBjZWxsTG9hZGluZ1xuICB9XCJcbiAgKGNsaWNrKT1cIm9uQ2VsbENsaWNrKClcIiBcbiAgKGRibGNsaWNrKT1cIm9uQ2VsbERvdWJsZUNsaWNrKClcIj5cblxuICA8IS0tIExvYWRpbmcgSW5kaWNhdG9yIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbExvYWRpbmdcIiBjbGFzcz1cImNlbGwtbG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjZWxsLXNwaW5uZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNwbGF5IE1vZGUgd2l0aCBUZW1wbGF0ZSBTdXBwb3J0IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNFZGl0aW5nKCkgJiYgIWNlbGxMb2FkaW5nXCI+XG4gICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NlbGxUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogdGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmF1bHQgVGV4dCBSZW5kZXJpbmcgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCIhaGFzQ2VsbFRlbXBsYXRlXCIgY2xhc3M9XCJjZWxsLWRpc3BsYXlcIj5cbiAgICAgIHt7IGNlbGwucmVuZGVyKCkgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRWRpdCBNb2RlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc0VkaXRpbmcoKVwiIGNsYXNzPVwiY2VsbC1lZGl0b3JcIiAjZWRpdG9yQ29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
416
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2NvbXBvbmVudHMvc3QtY2VsbC9zdC1jZWxsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC1jZWxsL3N0LWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBOEIsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUc5SyxPQUFPLEVBQWtFLFFBQVEsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBUzFKLE1BQU0sT0FBTyxlQUFlO0lBcUIxQixZQUNVLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBcEJ2QixhQUFRLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTBELENBQUM7UUFJcEcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFReEIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElB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LEdBQUc7WUFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2pDLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzs7NEdBdmNVLGVBQWU7Z0dBQWYsZUFBZSxzZUFhWSxVQUFVLDZCQ3pCbEQsZytCQWdDTTsyRkRwQk8sZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxTQUFTO3dHQUtWLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUU2QyxlQUFlO3NCQUFsRSxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkF5R2xELGFBQWE7c0JBRFosWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQgeyBDZWxsRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGxFZGl0RXZlbnQsIENlbGxTYXZlRXZlbnQsIENlbGxDaGFuZ2VFdmVudCwgQ2VsbENhbmNlbEV2ZW50LCBFZGl0TW9kZSwgTmF2aWdhdGlvbktleSwgTmF2aWdhdGlvbkRpcmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0LWNlbGwnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3QtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0LWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjZWxsITogQ2VsbDxhbnk+O1xuICBASW5wdXQoKSBlZGl0TW9kZTogRWRpdE1vZGUgPSBFZGl0TW9kZS5DTElDSztcbiAgQElucHV0KCkgdGFibGVTdGF0ZT86IFRhYmxlU3RhdGU7XG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnPzogVGFibGVDb25maWc7XG4gIEBJbnB1dCgpIGNvbHVtbkluZGV4PzogbnVtYmVyO1xuICBcbiAgQE91dHB1dCgpIGNlbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDaGFuZ2VFdmVudD4oKTtcbiAgQE91dHB1dCgpIGNlbGxFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsRWRpdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2VsbFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxTYXZlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2FuY2VsRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsU2F2ZUFuZE5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7ZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRpcmVjdGlvbjogTmF2aWdhdGlvbkRpcmVjdGlvbn0+KCk7XG4gIFxuICBAVmlld0NoaWxkKCdlZGl0b3JDb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZWRpdG9yQ29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgXG4gIHB1YmxpYyBjZWxsTG9hZGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZWRpdG9yQ2xlYW51cD86ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBlZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24/OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGwub25TdGF0ZUNoYW5nZSgoKSA9PiB7XG4gICAgICB0aGlzLmNlbGxMb2FkaW5nID0gISF0aGlzLmNlbGwuZ2V0U3RhdGUoKS5pc0xvYWRpbmc7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gVmlldyBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZDsgc2FmZWx5IGlnbm9yZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUGljayB1cCBsb2FkaW5nIHN0YXRlIHRoYXQgd2FzIHNldCBiZWZvcmUgdGhpcyBjb21wb25lbnQgd2FzIGNyZWF0ZWRcbiAgICB0aGlzLmNlbGxMb2FkaW5nID0gISF0aGlzLmNlbGwuZ2V0U3RhdGUoKS5pc0xvYWRpbmc7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gZWRpdGluZyBwb3NpdGlvbiBjaGFuZ2VzXG4gICAgLy8gV2hlbiBhbm90aGVyIGNlbGwgc3RhcnRzIGVkaXRpbmcsIHNhdmUgdGhpcyBjZWxsIGlmIGl0J3MgY3VycmVudGx5IGVkaXRpbmdcbiAgICBpZiAodGhpcy50YWJsZVN0YXRlICYmIHRoaXMuY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0aW5nUG9zaXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlU3RhdGUuZWRpdGluZ0NlbGxQb3NpdGlvbiQuc3Vic2NyaWJlKHBvc2l0aW9uID0+IHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIElmIHRoaXMgY2VsbCBpcyBjdXJyZW50bHkgZWRpdGluZ1xuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpICYmIHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBBbmQgdGhlIG5ldyBlZGl0aW5nIHBvc2l0aW9uIGlzIGEgZGlmZmVyZW50IGNlbGxcbiAgICAgICAgICBpZiAocG9zaXRpb24gJiYgXG4gICAgICAgICAgICAgIChwb3NpdGlvbi5yb3dJbmRleCAhPT0gcm93SW5kZXggfHwgcG9zaXRpb24uY29sdW1uSW5kZXggIT09IHRoaXMuY29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBzYXZlIHRoaXMgY2VsbFxuICAgICAgICAgICAgdGhpcy5zYXZlRWRpdCh0aGlzLmNlbGwuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSWYgY2VsbCBpcyBhbHJlYWR5IGluIGVkaXRpbmcgbW9kZSwgcmVuZGVyIHRoZSBlZGl0b3JcbiAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpICYmIHRoaXMuZWRpdG9yQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlbmRlckVkaXRvcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cEVkaXRvcigpO1xuICAgIFxuICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gZWRpdGluZyBwb3NpdGlvbiBjaGFuZ2VzXG4gICAgaWYgKHRoaXMuZWRpdGluZ1Bvc2l0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmVkaXRpbmdQb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0VkaXRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY2VsbC5nZXRDb2x1bW5Db25maWcoKTtcbiAgICByZXR1cm4gY29uZmlnLmVkaXRhYmxlID8/IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRpb25FcnJvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIFJlYWQgdmFsaWRhdGlvbiBzdGF0ZSB3aXRob3V0IHRyaWdnZXJpbmcgdmFsaWRhdGlvblxuICAgIC8vIFRoaXMgcHJldmVudHMgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgaWYgKHN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZXJyb3I7XG4gICAgfVxuICAgIFxuICAgIGlmIChzdGF0ZS5lcnJvcnMgJiYgQXJyYXkuaXNBcnJheShzdGF0ZS5lcnJvcnMpICYmIHN0YXRlLmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gc3RhdGUuZXJyb3JzLmpvaW4oJywgJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE9ubHkgcmV0dXJuIGdlbmVyaWMgbWVzc2FnZSBpZiBjZWxsIGlzIG1hcmtlZCBhcyBpbnZhbGlkXG4gICAgaWYgKCF0aGlzLmNlbGwuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gJ0ludmFsaWQgdmFsdWUnO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc0NlbGxUZW1wbGF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgcmV0dXJuICEhY29uZmlnLmNlbGxUZW1wbGF0ZTtcbiAgfVxuXG4gIGdldCBjZWxsVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCkuY2VsbFRlbXBsYXRlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgdGVtcGxhdGVDb250ZXh0KCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpXG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbkNlbGxLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gT25seSBoYW5kbGUgaWYgdGhpcyBjZWxsIGlzIGZvY3VzZWRcbiAgICBpZiAoIXRoaXMuY2VsbC5pc0ZvY3VzZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgTmF2aWdhdGlvbktleSBlbnVtIGZvciB0eXBlLXNhZmUga2V5IGNoZWNraW5nXG4gICAgc3dpdGNoIChldmVudC5rZXkgYXMgTmF2aWdhdGlvbktleSkge1xuICAgICAgY2FzZSBOYXZpZ2F0aW9uS2V5LkVOVEVSOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgLy8gU2F2ZSBhbmQgbGV0IG5hdmlnYXRpb24gaGFwcGVuXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnNhdmVFZGl0KHRoaXMuY2VsbC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAvLyBFbWl0IGV2ZW50IHRvIHRyaWdnZXIgbmF2aWdhdGlvbiBkb3duXG4gICAgICAgICAgdGhpcy5jZWxsU2F2ZUFuZE5hdmlnYXRlLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLkRPV04gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm90IGVkaXRpbmcsIGxldCBkaXJlY3RpdmUgaGFuZGxlIG5hdmlnYXRpb25cbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgY2FzZSBOYXZpZ2F0aW9uS2V5LlRBQjpcbiAgICAgICAgaWYgKHRoaXMuY2VsbC5pc0VkaXRpbmcoKSkge1xuICAgICAgICAgIC8vIFNhdmUgYW5kIGxldCBuYXZpZ2F0aW9uIGhhcHBlblxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5zYXZlRWRpdCh0aGlzLmNlbGwuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBOYXZpZ2F0aW9uRGlyZWN0aW9uLkxFRlQgOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLlJJR0hUO1xuICAgICAgICAgIHRoaXMuY2VsbFNhdmVBbmROYXZpZ2F0ZS5lbWl0KHsgZXZlbnQsIGRpcmVjdGlvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBub3QgZWRpdGluZywgbGV0IGRpcmVjdGl2ZSBoYW5kbGUgbmF2aWdhdGlvblxuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuRVNDQVBFOlxuICAgICAgICBpZiAodGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLmNhbmNlbEVkaXQoKTtcbiAgICAgICAgICAvLyBTdGF5IGZvY3VzZWQgb24gc2FtZSBjZWxsIChubyBuYXZpZ2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIENoZWNrIGZvciBhbHBoYW51bWVyaWMga2V5cyB3aGVuIGZvY3VzZWQgYnV0IG5vdCBlZGl0aW5nXG4gICAgICAgIGlmICghdGhpcy5jZWxsLmlzRWRpdGluZygpICYmIHRoaXMuaXNBbHBoYW51bWVyaWNLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY2FuRWRpdFZpYUtleWJvYXJkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIFN0YXJ0IGVkaXRpbmcgd2l0aCB0aGUgcHJlc3NlZCBrZXkgYXMgaW5pdGlhbCB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5zdGFydEVkaXRXaXRoS2V5KGV2ZW50LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIEVudGVyIGtleSBjYW4gdHJpZ2dlciBlZGl0aW5nXG4gICAqIFVzaW5nIEVkaXRNb2RlIGVudW0gdmFsdWVzXG4gICAqL1xuICBwcml2YXRlIGNhbkVkaXRWaWFFbnRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRhYmxlICYmIFxuICAgICAgICAgICAodGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRU5URVIgfHwgdGhpcy5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuQ0xJQ0spO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYga2V5Ym9hcmQgY2FuIHRyaWdnZXIgZWRpdGluZyAoZm9yIGFscGhhbnVtZXJpYyBhbmQgZG91YmxlLWNsaWNrKVxuICAgKi9cbiAgcHJpdmF0ZSBjYW5FZGl0VmlhS2V5Ym9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGl0YWJsZSAmJiBcbiAgICAgICAgICAgKHRoaXMuZWRpdE1vZGUgPT09IEVkaXRNb2RlLkVOVEVSIHx8IHRoaXMuZWRpdE1vZGUgPT09IEVkaXRNb2RlLkNMSUNLKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGEga2V5IGlzIGFscGhhbnVtZXJpYyAoc2luZ2xlIGNoYXJhY3RlcilcbiAgICovXG4gIHByaXZhdGUgaXNBbHBoYW51bWVyaWNLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAvLyBTaW5nbGUgY2hhcmFjdGVyIGtleXMgKGxldHRlcnMsIG51bWJlcnMsIHN5bWJvbHMpXG4gICAgcmV0dXJuIGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFN0YXJ0IGVkaXRpbmcgd2l0aCBhIHNwZWNpZmljIGtleSBhcyB0aGUgaW5pdGlhbCB2YWx1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEVkaXRXaXRoS2V5KGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY2FuU3RhcnQgPSB0aGlzLmNlbGwuc3RhcnRFZGl0KCk7XG4gICAgaWYgKGNhblN0YXJ0KSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgICBjb25zdCBlZGl0b3IgPSBjb2x1bW4uZWRpdG9yO1xuICAgICAgXG4gICAgICAvLyBPbmx5IHNldCBpbml0aWFsIGtleXByZXNzIHZhbHVlIGlmIGVkaXRvciBhY2NlcHRzIGl0XG4gICAgICAvLyBEZWZhdWx0IHRvIHRydWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBlZGl0b3JzXG4gICAgICBjb25zdCBhY2NlcHRzS2V5cHJlc3MgPSBlZGl0b3I/LmFjY2VwdHNJbml0aWFsS2V5cHJlc3MgIT09IGZhbHNlO1xuICAgICAgXG4gICAgICBpZiAoYWNjZXB0c0tleXByZXNzKSB7XG4gICAgICAgIC8vIFJlcGxhY2UgY3VycmVudCB2YWx1ZSB3aXRoIHRoZSBrZXlcbiAgICAgICAgdGhpcy5jZWxsLnNldFZhbHVlKGtleSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBlZGl0RXZlbnQ6IENlbGxFZGl0RXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgdmFsdWU6IGFjY2VwdHNLZXlwcmVzcyA/IGtleSA6IHRoaXMuY2VsbC5nZXRWYWx1ZSgpLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgY2VsbFN0YXRlOiB0aGlzLmNlbGwuZ2V0U3RhdGUoKVxuICAgICAgfTtcbiAgICAgIHRoaXMuY2VsbEVkaXQuZW1pdChlZGl0RXZlbnQpO1xuICAgICAgXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2VsbENsaWNrKCk6IHZvaWQge1xuICAgIC8vIEZpcnN0IGNsaWNrOiBwYXJlbnQgPHRkPiBmb2N1c2VzIHRoaXMgY2VsbCAoYnViYmxlcyBhZnRlciB0aGlzIGhhbmRsZXIpLlxuICAgIC8vIFNlY29uZCBjbGljayB3aGlsZSBhbHJlYWR5IGZvY3VzZWQ6IGVudGVyIGVkaXQgKHNwcmVhZHNoZWV0LXN0eWxlKS5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRWRpdGFibGUgJiZcbiAgICAgICF0aGlzLmNlbGxMb2FkaW5nICYmXG4gICAgICAhdGhpcy5jZWxsLmlzRWRpdGluZygpICYmXG4gICAgICB0aGlzLmNlbGwuaXNGb2N1c2VkKClcbiAgICApIHtcbiAgICAgIHRoaXMuc3RhcnRFZGl0KCk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gRG91YmxlLWNsaWNrIHN0YXJ0cyBlZGl0aW5nIHJlZ2FyZGxlc3Mgb2YgRWRpdE1vZGUgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiAhdGhpcy5jZWxsLmlzRWRpdGluZygpKSB7XG4gICAgICB0aGlzLnN0YXJ0RWRpdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRFZGl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNhblN0YXJ0ID0gdGhpcy5jZWxsLnN0YXJ0RWRpdCgpO1xuICAgIGlmIChjYW5TdGFydCkge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgXG4gICAgICAvLyBOb3RpZnkgVGFibGVTdGF0ZSB0aGF0IHRoaXMgY2VsbCBpcyBub3cgZWRpdGluZ1xuICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZSAmJiB0aGlzLmNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlU3RhdGUuc2V0RWRpdGluZ0NlbGwocm93SW5kZXgsIHRoaXMuY29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVkaXRFdmVudDogQ2VsbEVkaXRFdmVudCA9IHtcbiAgICAgICAgY2VsbDogdGhpcy5jZWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5jZWxsLmdldFZhbHVlKCksXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICBjZWxsU3RhdGU6IHRoaXMuY2VsbC5nZXRTdGF0ZSgpXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsRWRpdC5lbWl0KGVkaXRFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gcmVuZGVyIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJFZGl0b3IoKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3JDb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgZWRpdG9yID0gY29sdW1uLmVkaXRvcjtcbiAgICBcbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlZGl0b3IgY29uZmlndXJlZCBmb3IgY29sdW1uOicsIGNvbHVtbi5rZXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jZWxsLmdldFZhbHVlKCk7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICBcbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRleHRcbiAgICBjb25zdCBjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxhbnk+ID0ge1xuICAgICAgdmFsdWUsXG4gICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgZWFnZXIgdmFsaWRhdGlvbiBpZiBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnPy52YWxpZGF0aW9uPy5tb2RlID09PSAnZWFnZXInKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGNlbGwgdmFsdWUgdGVtcG9yYXJpbHkgZm9yIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLmNlbGwuc2V0VmFsdWUobmV3VmFsdWUsIHRydWUpOyAvLyBza2lwIHZhbGlkYXRpb24gdG8gYXZvaWQgZG91YmxlIHZhbGlkYXRpb25cbiAgICAgICAgICB0aGlzLnRyaWdnZXJFYWdlclZhbGlkYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uU2F2ZTogKG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zYXZlRWRpdChuZXdWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICB9LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBDYWxsIGVkaXRvcidzIGVkaXQgbWV0aG9kXG4gICAgZWRpdG9yLmVkaXQoY29udGV4dCk7XG4gICAgXG4gICAgLy8gU3RvcmUgY2xlYW51cCBjYWxsYmFja1xuICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmIChlZGl0b3IuZGVzdHJveSkge1xuICAgICAgICBlZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyXG4gICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlRWRpdChuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2VsbC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHdhc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5jZWxsLnNhdmVFZGl0KG5ld1ZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jZWxsLmdldENvbHVtbkNvbmZpZygpO1xuICAgICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jZWxsLmlzVmFsaWQoKTtcbiAgICAgIFxuICAgICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgICBpZiAodGhpcy50YWJsZVN0YXRlKSB7XG4gICAgICAgIHRoaXMudGFibGVTdGF0ZS5jbGVhckVkaXRpbmdDZWxsKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgdmFsaWRhdGlvbiBzdGF0ZSAobGF6eSBtb2RlIC0gb24gc2F2ZSlcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCBzYXZlIGV2ZW50XG4gICAgICBjb25zdCBzYXZlRXZlbnQ6IENlbGxTYXZlRXZlbnQgPSB7XG4gICAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICByb3dEYXRhOiB0aGlzLmNlbGwuZ2V0Um93RGF0YSgpLFxuICAgICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgaXNWYWxpZDogaXNWYWxpZCxcbiAgICAgICAgdmFsaWRhdGlvbkVycm9yczogY2VsbFN0YXRlLmVycm9yID8gW2NlbGxTdGF0ZS5lcnJvcl0gOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsU2F2ZS5lbWl0KHNhdmVFdmVudCk7XG4gICAgICBcbiAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICBjb25zdCBjaGFuZ2VFdmVudDogQ2VsbENoYW5nZUV2ZW50ID0ge1xuICAgICAgICBjZWxsOiB0aGlzLmNlbGwsXG4gICAgICAgIG9sZFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHJvd0RhdGE6IHRoaXMuY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgICAgcm93SW5kZXg6IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpLFxuICAgICAgICB3YXNWYWxpZDogd2FzVmFsaWQsXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoY2hhbmdlRXZlbnQpO1xuICAgICAgXG4gICAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgICB9XG4gICAgLy8gSWYgdmFsaWRhdGlvbiBmYWlscywga2VlcCBlZGl0aW5nIG1vZGVcbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlIGluIFRhYmxlU3RhdGVcbiAgICogQ2FsbGVkIG9uIHNhdmUgKGxhenkgbW9kZSkgb3Igb24gY2hhbmdlIChlYWdlciBtb2RlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlU3RhdGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2VsbC5pc1ZhbGlkKCk7XG4gICAgY29uc3QgZXJyb3IgPSB0aGlzLmNlbGwuZ2V0U3RhdGUoKS5lcnJvcjtcbiAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuY2VsbC5nZXRSb3dJbmRleCgpO1xuICAgIFxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHJvd0luZGV4IGlzIGRlZmluZWRcbiAgICBpZiAocm93SW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMudGFibGVTdGF0ZS51cGRhdGVDZWxsVmFsaWRhdGlvbihcbiAgICAgIHJvd0luZGV4LFxuICAgICAgY29sdW1uLmtleSxcbiAgICAgIGlzVmFsaWQsXG4gICAgICBlcnJvclxuICAgICk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGVhZ2VyIHZhbGlkYXRpb24gKG9uIGV2ZXJ5IGNoYW5nZSlcbiAgICovXG4gIHByaXZhdGUgdHJpZ2dlckVhZ2VyVmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdGF0ZSB8fCAhdGhpcy50YWJsZUNvbmZpZykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlID0gdGhpcy50YWJsZUNvbmZpZy52YWxpZGF0aW9uPy5tb2RlIHx8ICdsYXp5JztcbiAgICBpZiAodmFsaWRhdGlvbk1vZGUgIT09ICdlYWdlcicpIHJldHVybjtcbiAgICBcbiAgICAvLyBSZS12YWxpZGF0ZSB0aGUgY2VsbFxuICAgIHRoaXMuY2VsbC52YWxpZGF0ZSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0aW9uIHN0YXRlXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNlbGwuZ2V0Q29sdW1uQ29uZmlnKCk7XG4gICAgY29uc3QgY2VsbFN0YXRlID0gdGhpcy5jZWxsLmdldFN0YXRlKCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IFRhYmxlU3RhdGUgdGhhdCBlZGl0aW5nIGVuZGVkXG4gICAgaWYgKHRoaXMudGFibGVTdGF0ZSkge1xuICAgICAgdGhpcy50YWJsZVN0YXRlLmNsZWFyRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2FuY2VsRXZlbnQ6IENlbGxDYW5jZWxFdmVudCA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbCxcbiAgICAgIHZhbHVlOiB0aGlzLmNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGxTdGF0ZS5wcmV2aW91c1ZhbHVlLFxuICAgICAgcm93RGF0YTogdGhpcy5jZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIHJvd0luZGV4OiB0aGlzLmNlbGwuZ2V0Um93SW5kZXgoKSxcbiAgICAgIGNlbGxTdGF0ZTogY2VsbFN0YXRlXG4gICAgfTtcbiAgICBcbiAgICB0aGlzLmNlbGwuY2FuY2VsRWRpdCgpO1xuICAgIHRoaXMuY2VsbENhbmNlbC5lbWl0KGNhbmNlbEV2ZW50KTtcbiAgICB0aGlzLmNsZWFudXBFZGl0b3IoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW51cEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3JDbGVhbnVwKSB7XG4gICAgICB0aGlzLmVkaXRvckNsZWFudXAoKTtcbiAgICAgIHRoaXMuZWRpdG9yQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzdC1jZWxsXCIgXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZWRpdGluZyc6IGNlbGwuaXNFZGl0aW5nKCksXG4gICAgJ2RpcnR5JzogY2VsbC5pc0RpcnR5KCksXG4gICAgJ2ludmFsaWQnOiAhY2VsbC5pc1ZhbGlkKCksXG4gICAgJ3JlYWRvbmx5JzogIWlzRWRpdGFibGUsXG4gICAgJ2xvYWRpbmcnOiBjZWxsTG9hZGluZ1xuICB9XCJcbiAgKGNsaWNrKT1cIm9uQ2VsbENsaWNrKClcIiBcbiAgKGRibGNsaWNrKT1cIm9uQ2VsbERvdWJsZUNsaWNrKClcIj5cblxuICA8IS0tIExvYWRpbmcgSW5kaWNhdG9yIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbExvYWRpbmdcIiBjbGFzcz1cImNlbGwtbG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjZWxsLXNwaW5uZXJcIj48L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNwbGF5IE1vZGUgd2l0aCBUZW1wbGF0ZSBTdXBwb3J0IC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuaXNFZGl0aW5nKCkgJiYgIWNlbGxMb2FkaW5nXCI+XG4gICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0NlbGxUZW1wbGF0ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZTsgY29udGV4dDogdGVtcGxhdGVDb250ZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmF1bHQgVGV4dCBSZW5kZXJpbmcgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCIhaGFzQ2VsbFRlbXBsYXRlXCIgY2xhc3M9XCJjZWxsLWRpc3BsYXlcIj5cbiAgICAgIHt7IGNlbGwucmVuZGVyKCkgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRWRpdCBNb2RlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2VsbC5pc0VkaXRpbmcoKVwiIGNsYXNzPVwiY2VsbC1lZGl0b3JcIiAjZWRpdG9yQ29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|