@oneteme/jquery-table 0.0.11 → 0.0.13
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.
|
@@ -18,7 +18,7 @@ import { TablePreferencesManager } from './table-preferences.manager';
|
|
|
18
18
|
import { ExportManager } from './export.manager';
|
|
19
19
|
import { GROUP_ROW_COLUMN, GROUP_HEADER_MARKER, GROUP_KEY_LAZY_LOADING, GROUP_KEY_TOO_MANY, ROW_RAW_KEY, ROW_INDEX_KEY, ROW_GROUP_KEY, ROW_GROUP_COUNT, ROW_GROUP_PAGE, ROW_GROUP_PAGE_COUNT, LAZY_LOADING_VALUE, LAZY_ERROR_VALUE, } from './table.constants';
|
|
20
20
|
import { OrganizerButtonWrapperComponent } from './organizer-button/organizer-button.component';
|
|
21
|
-
import { FullscreenManager, VisualSnapshotStorage } from '@oneteme/jquery-core';
|
|
21
|
+
import { cloneSerializable, containsFunction, FullscreenManager, VisualSnapshotStorage } from '@oneteme/jquery-core';
|
|
22
22
|
import * as i0 from "@angular/core";
|
|
23
23
|
import * as i1 from "@angular/common";
|
|
24
24
|
import * as i2 from "@angular/forms";
|
|
@@ -536,12 +536,14 @@ export class TableComponent {
|
|
|
536
536
|
this._cdr.markForCheck();
|
|
537
537
|
}
|
|
538
538
|
_recomputeShowSlicePanel() {
|
|
539
|
-
const
|
|
539
|
+
const hasPendingDynamicSlices = (this._pendingDynamicSliceKeys?.length ?? 0) > 0;
|
|
540
|
+
const hasCfg = this._sliceConfigs.length > 0
|
|
541
|
+
|| this._organizer.sliceBy.activeDynamicFields.length > 0
|
|
542
|
+
|| hasPendingDynamicSlices;
|
|
540
543
|
const wasVisible = this._showSlicePanel;
|
|
541
544
|
this._showSlicePanel = hasCfg && this._resolvedData.length > 0;
|
|
542
|
-
// Les données viennent d'arriver : appliquer les dynamic slices
|
|
543
|
-
// Les
|
|
544
|
-
// sliceFilters dépendent de l'ordre final de _cachedSlices.
|
|
545
|
+
// Les données viennent d'arriver : appliquer les dynamic slices et les filtres en attente.
|
|
546
|
+
// Les slices dynamiques sont ajoutées avant les filtres pour rendre leurs clés disponibles.
|
|
545
547
|
if (!wasVisible && this._showSlicePanel && (this._pendingSliceFilters || this._pendingDynamicSliceKeys)) {
|
|
546
548
|
const filters = this._pendingSliceFilters;
|
|
547
549
|
const dynamicKeys = this._pendingDynamicSliceKeys;
|
|
@@ -967,10 +969,6 @@ export class TableComponent {
|
|
|
967
969
|
this._organizer.setActiveFields(ordered);
|
|
968
970
|
}
|
|
969
971
|
}
|
|
970
|
-
// Dynamic slices — différé : slicePanelRef pas encore disponible au moment de ngOnChanges
|
|
971
|
-
if (saved.dynamicSliceKeys?.length) {
|
|
972
|
-
this._pendingDynamicSliceKeys = saved.dynamicSliceKeys;
|
|
973
|
-
}
|
|
974
972
|
// Filtres actifs du slice panel
|
|
975
973
|
// Filtres actifs du slice panel — toujours stockés en pending :
|
|
976
974
|
// appliqués par _applyPendingDynamicSliceKeys (si dynamic slices) ou
|
|
@@ -978,6 +976,30 @@ export class TableComponent {
|
|
|
978
976
|
if (saved.sliceFilters && Object.keys(saved.sliceFilters).length) {
|
|
979
977
|
this._pendingSliceFilters = saved.sliceFilters;
|
|
980
978
|
}
|
|
979
|
+
const activeFilterColumnKeys = Object.entries(saved.sliceFilters ?? {})
|
|
980
|
+
.filter(([key, values]) => key.startsWith('column:') && values.length > 0)
|
|
981
|
+
.map(([key]) => key.slice('column:'.length));
|
|
982
|
+
const staticSliceKeys = new Set((this.resolvedConfig.slices ?? [])
|
|
983
|
+
.map(slice => slice.columnKey)
|
|
984
|
+
.filter((key) => !!key));
|
|
985
|
+
const dynamicSliceKeys = new Set(this._organizer.sliceBy.allDynamicFields.map(field => field.key));
|
|
986
|
+
// Un filtre persistant doit toujours retrouver sa slice : une préférence
|
|
987
|
+
// ancienne ou incomplète ne peut pas laisser un filtre sans panneau visible.
|
|
988
|
+
activeFilterColumnKeys
|
|
989
|
+
.filter(key => staticSliceKeys.has(key))
|
|
990
|
+
.forEach(key => this._staticSliceHiddenKeys.delete(key));
|
|
991
|
+
this._organizer.updateHiddenStaticKeys(this._staticSliceHiddenKeys);
|
|
992
|
+
// Une clé de filtre sur une colonne non statique désigne une slice dynamique.
|
|
993
|
+
// Elle complète dynamicSliceKeys pour les configurations sauvegardées avant
|
|
994
|
+
// que ce champ ne soit persistant.
|
|
995
|
+
const persistedDynamicKeys = [
|
|
996
|
+
...(saved.dynamicSliceKeys ?? []),
|
|
997
|
+
...activeFilterColumnKeys,
|
|
998
|
+
];
|
|
999
|
+
const uniqueDynamicKeys = [...new Set(persistedDynamicKeys)].filter(key => !staticSliceKeys.has(key) && dynamicSliceKeys.has(key));
|
|
1000
|
+
if (uniqueDynamicKeys.length) {
|
|
1001
|
+
this._pendingDynamicSliceKeys = uniqueDynamicKeys;
|
|
1002
|
+
}
|
|
981
1003
|
}
|
|
982
1004
|
canRemoveColumn(column) {
|
|
983
1005
|
return (this._organizer.allowFieldRemoval &&
|
|
@@ -1006,13 +1028,13 @@ export class TableComponent {
|
|
|
1006
1028
|
return {
|
|
1007
1029
|
type: 'table',
|
|
1008
1030
|
label,
|
|
1009
|
-
config:
|
|
1031
|
+
config: cloneSerializable({
|
|
1010
1032
|
title: this.title,
|
|
1011
1033
|
columns: this.resolvedConfig.columns?.map(column => serializableColumn(column)),
|
|
1012
1034
|
search: this.resolvedConfig.search,
|
|
1013
1035
|
pagination: this.resolvedConfig.pagination,
|
|
1014
1036
|
}),
|
|
1015
|
-
state:
|
|
1037
|
+
state: cloneSerializable({
|
|
1016
1038
|
search: this.searchQuery,
|
|
1017
1039
|
groupBy: this.activeGroupByKey,
|
|
1018
1040
|
columnOrder: this.activeFields.map(column => column.key),
|
|
@@ -1020,7 +1042,7 @@ export class TableComponent {
|
|
|
1020
1042
|
pageIndex: this.paginator?.pageIndex ?? 0,
|
|
1021
1043
|
pageSize: this.paginator?.pageSize ?? this.pageSize,
|
|
1022
1044
|
}),
|
|
1023
|
-
data:
|
|
1045
|
+
data: cloneSerializable(this._allFilteredRows),
|
|
1024
1046
|
warnings,
|
|
1025
1047
|
};
|
|
1026
1048
|
}
|
|
@@ -1059,7 +1081,7 @@ export class TableComponent {
|
|
|
1059
1081
|
restored,
|
|
1060
1082
|
skipped,
|
|
1061
1083
|
warnings: snapshot.warnings ?? [],
|
|
1062
|
-
data:
|
|
1084
|
+
data: cloneSerializable(snapshot.data),
|
|
1063
1085
|
};
|
|
1064
1086
|
}
|
|
1065
1087
|
// ── Pipeline de données (privé)
|
|
@@ -1699,17 +1721,4 @@ function serializableColumn(column) {
|
|
|
1699
1721
|
lazy: !!column.lazy,
|
|
1700
1722
|
};
|
|
1701
1723
|
}
|
|
1702
|
-
function jsonClone(value) {
|
|
1703
|
-
return JSON.parse(JSON.stringify(value, (_key, nested) => typeof nested === 'function' ? undefined : nested));
|
|
1704
|
-
}
|
|
1705
|
-
function containsFunction(value, seen = new WeakSet()) {
|
|
1706
|
-
if (typeof value === 'function')
|
|
1707
|
-
return true;
|
|
1708
|
-
if (!value || typeof value !== 'object')
|
|
1709
|
-
return false;
|
|
1710
|
-
if (seen.has(value))
|
|
1711
|
-
return false;
|
|
1712
|
-
seen.add(value);
|
|
1713
|
-
return Object.values(value).some(nested => containsFunction(nested, seen));
|
|
1714
|
-
}
|
|
1715
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBbUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXdCLE1BQU0sRUFBRSxTQUFTLEVBQThCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwUyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FB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M0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBSSxLQUFRO0lBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUN2RCxPQUFPLE1BQU0sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUNsRCxDQUFNLENBQUM7QUFDVixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFjLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBVTtJQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0RCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlLCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBNYXRQYWdpbmF0b3JJbnRsLCBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSwgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uUHJvdmlkZXIsIFRhYmxlRXhwb3J0Q29uZmlnLCBUYWJsZVByZWZlcmVuY2VzQ29uZmlnLCBUYWJsZVByb3ZpZGVyLCBUYWJsZVZpZXdDb25maWcgfSBmcm9tICcuLi9qcXVlcnktdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgSnF0STE4biwgSlFUX0kxOE4sIEpRVF9JMThOX0RFRkFVTFRTIH0gZnJvbSAnLi4vanF0LWkxOG4udG9rZW4nO1xuaW1wb3J0IHsgSnF0Q2VsbERlZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZS9qcXQtY2VsbC1kZWYuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnLCBTbGljZVBhbmVsQ29tcG9uZW50LCBPcmdhbml6ZXJGYWNhZGUsIEdyb3VwQnlNYW5hZ2VyLCBMYXp5RmllbGRNYW5hZ2VyLCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJTdGF0ZSB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXInO1xuaW1wb3J0IHsgZ2V0RnJlbmNoUGFnaW5hdG9ySW50bCwgaHVtYW5pemVLZXksIG5vcm1hbGl6ZUNlbGxWYWx1ZSB9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuaW1wb3J0IHsgVGFibGVQcmVmZXJlbmNlc01hbmFnZXIgfSBmcm9tICcuL3RhYmxlLXByZWZlcmVuY2VzLm1hbmFnZXInO1xuaW1wb3J0IHsgRXhwb3J0TWFuYWdlciB9IGZyb20gJy4vZXhwb3J0Lm1hbmFnZXInO1xuaW1wb3J0IHtcbiAgR1JPVVBfUk9XX0NPTFVNTiwgR1JPVVBfSEVBREVSX01BUktFUixcbiAgR1JPVVBfS0VZX0xBWllfTE9BRElORywgR1JPVVBfS0VZX1RPT19NQU5ZLFxuICBST1dfUkFXX0tFWSwgUk9XX0lOREVYX0tFWSxcbiAgUk9XX0dST1VQX0tFWSwgUk9XX0dST1VQX0NPVU5ULCBST1dfR1JPVVBfUEFHRSwgUk9XX0dST1VQX1BBR0VfQ09VTlQsXG4gIExBWllfTE9BRElOR19WQUxVRSwgTEFaWV9FUlJPUl9WQUxVRSxcbn0gZnJvbSAnLi90YWJsZS5jb25zdGFudHMnO1xuaW1wb3J0IHsgT3JnYW5pemVyQnV0dG9uV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4vb3JnYW5pemVyLWJ1dHRvbi9vcmdhbml6ZXItYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGdWxsc2NyZWVuTWFuYWdlciwgVmlzdWFsQ29weUZlZWRiYWNrQ29uZmlnLCBWaXN1YWxTbmFwc2hvdCwgVmlzdWFsU25hcHNob3RBcHBseVJlc3VsdCwgVmlzdWFsU25hcHNob3REcmFmdCwgVmlzdWFsU25hcHNob3RTdG9yYWdlIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuXG4vKiogQ2FjaGUgaW50ZXJuZSBkdSBncm91cGVtZW50IOKAlCBpbnZhbGlkw6kgZMOocyBxdWUgbGVzIGRvbm7DqWVzLCBsYSBjbMOpIG91IGxlcyBwYXJhbcOodHJlcyBkZSB0cmkgY2hhbmdlbnQuICovXG5pbnRlcmZhY2UgR3JvdXBCeUNhY2hlPFQ+IHtcbiAgcm93czogVFtdO1xuICBrZXk6IHN0cmluZztcbiAgc29ydE9yZGVyOiAnYXNjJyB8ICdkZXNjJztcbiAgc29ydEFjdGl2ZTogc3RyaW5nO1xuICBzb3J0RGlyOiBzdHJpbmc7XG4gIG9yZGVyOiBzdHJpbmdbXTtcbiAgbWFwOiBNYXA8c3RyaW5nLCBUW10+O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdqcXVlcnktdGFibGUnLFxuICBpbXBvcnRzOiBbIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIE1hdFRhYmxlTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdFBhZ2luYXRvck1vZHVsZSwgTWF0U29ydE1vZHVsZSwgTWF0TWVudU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBTbGljZVBhbmVsQ29tcG9uZW50LCBPcmdhbml6ZXJCdXR0b25XcmFwcGVyQ29tcG9uZW50IF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdFBhZ2luYXRvckludGwsIHVzZUZhY3Rvcnk6IGdldEZyZW5jaFBhZ2luYXRvckludGwgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgPSBhbnk+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZpc3VhbC1mdWxsc2NyZWVuJykgX2lzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWc/OiBUYWJsZVByb3ZpZGVyPFQ+O1xuXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U/OiBUW10gfCB7IGRhdGE6IFRbXSB9O1xuICBASW5wdXQoKSBkYXRhPzogVFtdO1xuICBASW5wdXQoKSBkaXNwbGF5ZWRDb2x1bW5zPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGNvbHVtbnNDb25maWc/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W107XG5cbiAgLyoqXG4gICAqIE1vZGUgSFRNTCA6IGFjdGl2ZSBldCBjb25maWd1cmUgbGUgcGFubmVhdSBWaWV3IGluZMOpcGVuZGFtbWVudCBkdSBgW2NvbmZpZ11gLlxuICAgKiBQcmVuZCBsZSBkZXNzdXMgc3VyIGBjb25maWcudmlld2Agc2kgZMOpZmluaS5cbiAgICogRXhlbXBsZSA6IGA8anF1ZXJ5LXRhYmxlIFt2aWV3XT1cInsgZW5hYmxlZDogdHJ1ZSB9XCI+YFxuICAgKi9cbiAgQElucHV0KCkgdmlldz86IFRhYmxlVmlld0NvbmZpZztcblxuICBASW5wdXQoKSBjb2x1bW5MYWJlbHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgY29weUZlZWRiYWNrOiBWaXN1YWxDb3B5RmVlZGJhY2tDb25maWcgPSB7fTtcblxuICAvKiogUGFyYW3DqHRyZSBkZSBjb250csO0bGUgcG91ciByw6lpbml0aWFsaXNlciBiYXJyZSBkZSByZWNoZXJjaGUuICovXG4gIEBJbnB1dCgpXG4gIHNldCBjbGVhclNlYXJjaElucHV0KHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgICAgdGhpcy5vblNlYXJjaENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBhZGRSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5BZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcbiAgQE91dHB1dCgpIGNvbHVtblJlbW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4+KCk7XG4gIEBPdXRwdXQoKSBjYXRlZ29yeVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcblxuICAvKiogw4ltaXMgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgdHJpICh5IGNvbXByaXMgbGUgdHJpIGluaXRpYWwpLiAqL1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSAgICA9IG5ldyBFdmVudEVtaXR0ZXI8eyBhY3RpdmU6IHN0cmluZzsgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8ICcnIH0+KCk7XG4gIC8qKiDDiW1pcyDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBwYWdlIG91IGRlIHRhaWxsZSBkZSBwYWdlLiAqL1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSAgICA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PigpO1xuICAvKiogw4ltaXMgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgbGEgcmVjaGVyY2hlIHRleHRlLiAqL1xuICBAT3V0cHV0KCkgc2VhcmNoQ2hhbmdlICA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogw4ltaXMgcXVhbmQgbGUgR3JvdXAgYnkgY2hhbmdlIChjbMOpIGRlIGNvbG9ubmUsIG91IGBudWxsYCBzaSBkw6lzYWN0aXbDqSkuICovXG4gIEBPdXRwdXQoKSBncm91cEJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBudWxsPigpO1xuICAvKiogw4ltaXMgcXVhbmQgbGEgbGlzdGUgZGVzIGNvbG9ubmVzIHZpc2libGVzIGNoYW5nZSAoY2zDqXMgZGFucyBs4oCZb3JkcmUgZOKAmWFmZmljaGFnZSkuICovXG4gIEBPdXRwdXQoKSBjb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIHZpc3VhbENvcGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8VmlzdWFsU25hcHNob3Q+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpXG4gIHNldCBwYWdpbmF0b3IodmFsdWU6IE1hdFBhZ2luYXRvciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hdHRhY2hQYWdpbmF0b3IoKTtcbiAgICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgfVxuICB9XG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjsgfVxuICBwcml2YXRlIF9wYWdpbmF0b3I/OiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydD86IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keVNjcm9sbCcpIHRhYmxlQm9keVNjcm9sbFJlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFNsaWNlUGFuZWxDb21wb25lbnQpIHNsaWNlUGFuZWxSZWY/OiBTbGljZVBhbmVsQ29tcG9uZW50PFQ+O1xuICBAQ29udGVudENoaWxkcmVuKEpxdENlbGxEZWZEaXJlY3RpdmUpIF9jZWxsRGVmcyE6IFF1ZXJ5TGlzdDxKcXRDZWxsRGVmRGlyZWN0aXZlPjtcbiAgLyoqIE1hcCBjbMOp4oaSVGVtcGxhdGVSZWYgcHLDqS1jYWxjdWzDqWUgZGVwdWlzIF9jZWxsRGVmcy4gTWlzZSDDoCBqb3VyIGRhbnMgbmdBZnRlckNvbnRlbnRJbml0IGV0IHN1ciBfY2VsbERlZnMuY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfY2VsbERlZk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYW55OyBpbmRleDogbnVtYmVyIH0+PigpO1xuXG4gIHJlbmRlcmVkQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgdGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKTtcblxuICAvKiogQ29uc3RhbnRlIGV4cG9zw6llIGF1IHRlbXBsYXRlIHBvdXIgbGUgbWF0Q29sdW1uRGVmIGRlIGxhIGxpZ25lIGRlIGdyb3VwZS4gKi9cbiAgcmVhZG9ubHkgX0dST1VQX1JPV19DT0xVTU4gPSBHUk9VUF9ST1dfQ09MVU1OO1xuICAvKiogQ2zDqXMgZCdhY2PDqHMgYXV4IHByb3ByacOpdMOpcyBkZXMgbGlnbmVzIHByb2pldMOpZXMg4oCUIGV4cG9zw6llcyBwb3VyIGxlIHRlbXBsYXRlLiAqL1xuICByZWFkb25seSBfUk9XX1JBV19LRVkgPSBST1dfUkFXX0tFWTtcbiAgcmVhZG9ubHkgX1JPV19JTkRFWF9LRVkgPSBST1dfSU5ERVhfS0VZO1xuICByZWFkb25seSBfUk9XX0dST1VQX0tFWSA9IFJPV19HUk9VUF9LRVk7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfQ09VTlQgPSBST1dfR1JPVVBfQ09VTlQ7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfUEFHRSA9IFJPV19HUk9VUF9QQUdFO1xuICByZWFkb25seSBfUk9XX0dST1VQX1BBR0VfQ09VTlQgPSBST1dfR1JPVVBfUEFHRV9DT1VOVDtcblxuICAvKiogRmFjYWRlIFZpZXcgOiDDqXRhdCBldCBhY3Rpb25zIGNlbnRyYWxpc8OpcyAoQ2hhbXBzIC8gR3JvdXAgYnkgLyBTbGljZSBieSkgKi9cbiAgcmVhZG9ubHkgX29yZ2FuaXplciA9IG5ldyBPcmdhbml6ZXJGYWNhZGU8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcblxuICAvKipcbiAgICogU25hcHNob3Qgc3RhYmxlIHN5bmNocm9uaXPDqSBkZXB1aXMgX29yZ2FuaXplci5maWVsZHMuYWN0aXZlRmllbGRzIGRhbnMgcmVmcmVzaFZpZXdNb2RlbCgpLlxuICAgKiBQcm9wcmnDqXTDqSAobm9uIGdldHRlcikgcG91ciBxdSdBbmd1bGFyIHB1aXNzZSBsYSBzdWl2cmUgc2FucyBORzAxMDAuXG4gICAqL1xuICBhY3RpdmVGaWVsZHM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSA9IFtdO1xuXG4gIGFjdGl2ZVNsaWNlRmlsdGVyOiAocm93OiBUKSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZTtcblxuICAvLyBQcm9wcmnDqXTDqXMgc3RhYmxlcyBwb3VyIGxlcyBiaW5kaW5ncyBkdSB0ZW1wbGF0ZSAoY29udHJlIGVycmV1ciBORzAxMDApXG4gIF9zbGljZUNvbmZpZ3M6IGFueVtdID0gW107XG4gIF9zbGljZUNvbHVtbnM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSA9IFtdO1xuICBfc2xpY2VEYXRhOiBUW10gPSBbXTtcbiAgX3NsaWNlU2hvd1RvZ2dsZSA9IHRydWU7XG4gIC8qKiBTbmFwc2hvdCBzdGFibGUgZGUgbGEgdmlzaWJpbGl0w6kgZHUgcGFubmVhdSBzbGljZSDigJQgamFtYWlzIGNhbGN1bMOpIGRlcHVpcyBAVmlld0NoaWxkICovXG4gIF9zaG93U2xpY2VQYW5lbCA9IGZhbHNlO1xuICAvKiogU25hcHNob3Qgc3RhYmxlIGRlIGwnw6l0YXQgY29sbGFwc2VkIGR1IHBhbm5lYXUgc2xpY2UsIG1pcyDDoCBqb3VyIHZpYSAoY29sbGFwc2VkQ2hhbmdlKSAqL1xuICBfc2xpY2VQYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xuXG4gIC8vIETDqWzDqWd1w6lzIHZlcnMgX3ZpZXcgKGNvbnNlcnbDqXMgcG91ciBjb21wYXRpYmlsaXTDqSB0ZW1wbGF0ZSBzYW5zIHJlZmFjdG9yaW5nIEhUTUwpXG4gIGdldCBfc3RhdGljU2xpY2VzRm9yTWVudSgpOiBBcnJheTx7IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nIH0+IHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zdGF0aWNTbGljZXNGb3JNZW51OyB9XG4gIGdldCBfYWN0aXZlRHluYW1pY1NsaWNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYWN0aXZlRHluYW1pY0ZpZWxkczsgfVxuICBnZXQgX2F2YWlsYWJsZUNvbHVtbnNGb3JEeW5hbWljU2xpY2UoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmF2YWlsYWJsZUZvckR5bmFtaWM7IH1cbiAgZ2V0IF9hbGxEeW5hbWljU2xpY2VDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hbGxEeW5hbWljRmllbGRzOyB9XG4gIGdldCBfYWN0aXZlU2xpY2VCeUxhYmVsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVMYWJlbDsgfVxuICBfc2xpY2VCeU1lbnVJdGVtczogQXJyYXk8eyBpc1N0YXRpYzogYm9vbGVhbjsga2V5OiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IGljb24/OiBzdHJpbmc7IGNvbD86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4gfT4gPSBbXTtcblxuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBnZXQgYWN0aXZlR3JvdXBCeUtleSgpOiBzdHJpbmcgfCBudWxsIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5ncm91cEJ5LmFjdGl2ZUtleTsgfVxuICBfbWF0U29ydEFjdGl2ZSA9ICcnO1xuICBfbWF0U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnJyA9ICcnO1xuICBwcml2YXRlIF9hY3RpdmVTb3J0OiB7IGFjdGl2ZTogc3RyaW5nOyBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJycgfSA9IHsgYWN0aXZlOiAnJywgZGlyZWN0aW9uOiAnJyB9O1xuICBwcml2YXRlIF9zb3J0U3Vic2NyaWJlZDogTWF0U29ydCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3RvdGFsRmlsdGVyZWRDb3VudCA9IDA7XG5cbiAgLyoqIEdlc3Rpb25uYWlyZSBkdSBtb2RlIEdyb3VwIEJ5ICjDqXRhdCBjb2xsYXBzZWQsIHBhZ2luYXRpb24sIHRyaSBkZXMgZ3JvdXBlcykuICovXG4gIHJlYWRvbmx5IF9ncm91cEJ5ID0gbmV3IEdyb3VwQnlNYW5hZ2VyKFxuICAgICgpID0+IHsgdGhpcy5fcHJvamVjdEN1cnJlbnRQYWdlKCk7IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTsgfSxcbiAgICAoKSA9PiB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKSxcbiAgKTtcblxuICAvKiogRMOpbMOpZ3XDqXMgdmVycyBHcm91cEJ5TWFuYWdlciBwb3VyIGxhIGNvbXBhdGliaWxpdMOpIGRlcyB0ZW1wbGF0ZXMuICovXG4gIGdldCBncm91cFBhZ2VTaXplKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9ncm91cEJ5Lmdyb3VwUGFnZVNpemU7IH1cbiAgc2V0IGdyb3VwUGFnZVNpemUodjogbnVtYmVyKSB7IHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZSA9IHY7IH1cbiAgZ2V0IGdyb3VwU29ydE9yZGVyKCk6ICdhc2MnIHwgJ2Rlc2MnIHsgcmV0dXJuIHRoaXMuX2dyb3VwQnkuZ3JvdXBTb3J0T3JkZXI7IH1cbiAgc2V0IGdyb3VwU29ydE9yZGVyKHY6ICdhc2MnIHwgJ2Rlc2MnKSB7IHRoaXMuX2dyb3VwQnkuZ3JvdXBTb3J0T3JkZXIgPSB2OyB9XG5cbiAgLyoqIEdlc3Rpb25uYWlyZSBkdSBjeWNsZSBkZSB2aWUgZGVzIGNvbG9ubmVzIGxhenkgKGZldGNoLCBhbm51bGF0aW9uLCBzdGF0dXRzLCBkb25uw6llcykuICovXG4gIHByaXZhdGUgX2xhenkgPSBuZXcgTGF6eUZpZWxkTWFuYWdlcjxUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PigpO1xuICAvKiogQ29tcGF0aWJpbGl0w6kgdGVtcGxhdGUgOiByZXRvdXJuZSBsYSBtYXAgZGUgc3RhdHV0cyBsYXp5LiAqL1xuICBnZXQgX2xhenlDb2x1bW5TdGF0dXMoKSB7IHJldHVybiB0aGlzLl9sYXp5LnN0YXR1czsgfVxuICAvKiogQ29tcGF0aWJpbGl0w6kgdGVtcGxhdGUgOiByZXRvdXJuZSBsYSBtYXAgZGUgZG9ubsOpZXMgbGF6eS4gKi9cbiAgZ2V0IF9sYXp5Q29sdW1uRGF0YSgpIHsgcmV0dXJuIHRoaXMuX2xhenkuZGF0YTsgfVxuICBwcml2YXRlIF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIF9lbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG4gIHByaXZhdGUgX25nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIF9pMThuUmF3ID0gaW5qZWN0KEpRVF9JMThOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBjb3B5RmVlZGJhY2tNZXNzYWdlID0gJyc7XG4gIHByaXZhdGUgX2NvcHlGZWVkYmFja1RpbWVyPzogbnVtYmVyO1xuXG4gIC8qKiBMYWJlbHMgZGUgbOKAmWludGVyZmFjZS4gRnVzaW9ubsOpcyBkZXB1aXMgSlFUX0kxOE5fREVGQVVMVFMgZXQgbGUgdG9rZW4gSlFUX0kxOE4gaW5qZWN0w6kuICovXG4gIHJlYWRvbmx5IGkxOG46IEpxdEkxOG4gPSB7IC4uLkpRVF9JMThOX0RFRkFVTFRTLCAuLi4odGhpcy5faTE4blJhdyA/PyB7fSkgfTtcblxuICBpc0dyb3VwSGVhZGVyID0gKF86IG51bWJlciwgcm93OiBhbnkpOiBib29sZWFuID0+IHJvd1tHUk9VUF9IRUFERVJfTUFSS0VSXSA9PT0gdHJ1ZTtcblxuICAvKiogUmV0b3VybmUgdHJ1ZSBzaSBsYSBsaWduZSBkZSBncm91cGUgZXN0IHVuZSBsaWduZSBub3JtYWxlIChuaSBsYXp5LCBuaSB0b28tbWFueSkuICovXG4gIGlzTm9ybWFsR3JvdXBSb3cocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldICE9PSBHUk9VUF9LRVlfTEFaWV9MT0FESU5HICYmIHJvd1tST1dfR1JPVVBfS0VZXSAhPT0gR1JPVVBfS0VZX1RPT19NQU5ZO1xuICB9XG4gIGlzR3JvdXBSb3dMb2FkaW5nKHJvdzogYW55KTogYm9vbGVhbiB7IHJldHVybiByb3dbUk9XX0dST1VQX0tFWV0gPT09IEdST1VQX0tFWV9MQVpZX0xPQURJTkc7IH1cbiAgaXNHcm91cFJvd1Rvb01hbnkocm93OiBhbnkpOiBib29sZWFuIHsgcmV0dXJuIHJvd1tST1dfR1JPVVBfS0VZXSA9PT0gR1JPVVBfS0VZX1RPT19NQU5ZOyB9XG5cbiAgLyoqIEfDqHJlIGxlIGNsaWMgc3VyIHVuZSBsaWduZSBkJ2VuLXTDqnRlIGRlIGdyb3VwZSAobm8tb3AgcG91ciBsZXMgw6l0YXRzIHNww6ljaWF1eCkuICovXG4gIG9uR3JvdXBIZWFkZXJDbGljayhyb3c6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc05vcm1hbEdyb3VwUm93KHJvdykpIHJldHVybjtcbiAgICB0aGlzLnRvZ2dsZUdyb3VwQ29sbGFwc2Uocm93W1JPV19HUk9VUF9LRVldKTtcbiAgfVxuXG4gIC8qKiBHZXN0aW9ubmFpcmUgZXhwb3J0IENTVi4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb3J0ID0gbmV3IEV4cG9ydE1hbmFnZXI8VD4oXG4gICAgKCkgPT4gdGhpcy5fYWxsRmlsdGVyZWRSb3dzLFxuICAgICgpID0+IHRoaXMuYWN0aXZlRmllbGRzLFxuICAgICgpID0+IHRoaXMucmVzb2x2ZWRDb25maWcuZXhwb3J0LFxuICAgIChjb2wsIHJvdywgaWR4KSA9PiB0aGlzLnJlc29sdmVDZWxsVmFsdWUoY29sLCByb3csIGlkeCksXG4gICk7XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZVxuXG4gIHBhZ2VTaXplID0gNTtcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjBdO1xuICBwYWdlU2l6ZU9wdGlvbnNHcm91cEJ5OiBudW1iZXJbXSA9IFs1LCAxMCwgMjBdO1xuXG4gIGRyYWdnZWRDb2x1bW5LZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBkcmFnT3ZlckNvbHVtbktleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8g4pSA4pSAIE1vZGUgw6lkaXRpb24gKFByw6lmw6lyZW5jZXMpXG4gIC8qKiBWcmFpIHF1YW5kIGxlIG1vZGUgw6lkaXRpb24gZXN0IGFjdGlmIChyZXNpemUgKyBkcmFnIGNvbG9ubmVzLCBpbnRlcmFjdGlvbnMgZMOpc2FjdGl2w6llcykuICovXG4gIF9lZGl0TW9kZSA9IGZhbHNlO1xuICAvKiogTGFyZ2V1cnMgZGUgY29sb25uZXMgcGVyc29ubmFsaXPDqWVzIHBhciBsJ3V0aWxpc2F0ZXVyIChjbMOpIOKGkiBweCkuICovXG4gIF9jb2x1bW5XaWR0aHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgLyoqIE1lc3NhZ2UgZGUgZmVlZGJhY2sgYXByw6hzIHNhdmUvY2xlYXIuIGBudWxsYCA9IHBhcyBkZSBtZXNzYWdlLiAqL1xuICBfcHJlZmVyZW5jZXNNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqIFZyYWkgc2kgdW5lIGNvbmZpZ3VyYXRpb24gZXN0IHNhdXZlZ2FyZMOpZSBwb3VyIGNlIHRhYmxlYXUuICovXG4gIF9oYXNTYXZlZENvbmZpZyA9IGZhbHNlO1xuICBwcml2YXRlIF9wcmVmZXJlbmNlc01hbmFnZXI6IFRhYmxlUHJlZmVyZW5jZXNNYW5hZ2VyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiB0cnVlIHVuZSBmb2lzIHF1ZSBsZSBncm91cC1ieSBwYXIgZMOpZmF1dCBhIMOpdMOpIGluaXRpYWxpc8OpICjDqXZpdGUgZGUgcmVjb25maWd1cmVyIEdyb3VwQnlNYW5hZ2VyIMOgIGNoYXF1ZSBjaGFuZ2VtZW50IGRlIGRvbm7DqWVzKS4gKi9cbiAgcHJpdmF0ZSBfZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jlc2l6ZVN0YXRlOiB7IGtleTogc3RyaW5nOyBzdGFydFg6IG51bWJlcjsgc3RhcnRXaWR0aDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgLyoqIER5bmFtaWMgc2xpY2Uga2V5cyDDoCByZXN0YXVyZXIgYXByw6hzIG5nQWZ0ZXJWaWV3SW5pdCAoc2xpY2VQYW5lbFJlZiBwYXMgZW5jb3JlIGRpc3BvKS4gKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ0R5bmFtaWNTbGljZUtleXM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBGaWx0cmVzIGRlIHNsaWNlIMOgIHJlc3RhdXJlciBhcHLDqHMgbmdBZnRlclZpZXdJbml0IChzbGljZVBhbmVsUmVmIHBhcyBlbmNvcmUgZGlzcG8pLiAqL1xuICBwcml2YXRlIF9wZW5kaW5nU2xpY2VGaWx0ZXJzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmdbXT4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlc29sdmVkQ29uZmlnOiBUYWJsZVByb3ZpZGVyPFQ+ID0geyBjb2x1bW5zOiBbXSB9O1xuICBwcml2YXRlIF9jb2x1bW5NYXA6IE1hcDxzdHJpbmcsIFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIF9yZXNvbHZlZERhdGE6IFRbXSA9IFtdO1xuICBwcml2YXRlIF9wcmVzZXJ2ZVBhZ2VJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2xhc3RDb25maWdDbGVhclNlYXJjaElucHV0OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfaW5pdGlhbFNlYXJjaFF1ZXJ5QXBwbGllZCA9IGZhbHNlO1xuICBwcml2YXRlIF9sYXN0SW5pdGlhbFNlYXJjaFF1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gU2V1aWwgYXUtZGVsw6AgZHVxdWVsIGxlIHJlbmR1IGdyb3Vww6kgZXN0IGJsb3F1w6kgcG91ciBwcm90w6lnZXIgbGUgbmF2aWdhdGV1clxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfR1JPVVBfQ09VTlQgPSA1MDA7XG5cbiAgLy8g4pSA4pSAIE9wdGltaXNhdGlvbiBwZXJmb3JtYW5jZVxuICBwcml2YXRlIF9hbGxGaWx0ZXJlZFJvd3M6IFRbXSA9IFtdO1xuICBwcml2YXRlIF9wYWdpbmF0b3JTdWJzY3JpYmVkOiBNYXRQYWdpbmF0b3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogQ2FjaGUgZ3JvdXBCeSDigJQgaW52YWxpZMOpIGTDqHMgcXVlIHJvd3Mva2V5L3RyaSBjaGFuZ2VudC4gKi9cbiAgcHJpdmF0ZSBfZ3JvdXBDYWNoZTogR3JvdXBCeUNhY2hlPFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3BlbmRpbmdSZW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfc3RhdGljU2xpY2VIaWRkZW5LZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgX2NvbmZpZ0hpZGRlbktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXG4gIC8qKiBDbMOpcyBkZXMgY29sb25uZXMgdmlzaWJsZXMgZHUgZGVybmllciDDqW1pc3Npb24gY29sdW1uc0NoYW5nZSAocG91ciDDqXZpdGVyIGxlcyDDqW1pc3Npb25zIGR1cGxpcXVlbWVudCkuICovXG4gIHByaXZhdGUgX3ByZXZDb2x1bW5LZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhQ2hhbmdlZCA9ICEhKGNoYW5nZXNbJ2NvbmZpZyddIHx8IGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydkYXRhU291cmNlJ10pO1xuICAgIGlmIChkYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy5fbGF6eS5jYW5jZWxBbGwoKTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddKSB7XG4gICAgICB0aGlzLmFwcGx5Q29uZmlnU2VhcmNoUmVzZXQoKTtcbiAgICAgIHRoaXMuYXBwbHlJbml0aWFsU2VhcmNoUXVlcnkoY2hhbmdlc1snY29uZmlnJ10uZmlyc3RDaGFuZ2UpO1xuICAgICAgdGhpcy5faW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpOyAvLyBsZXMgY29sb25uZXMgb250IHB1IGNoYW5nZXJcbiAgICB9XG4gICAgaWYgKGRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5maWx0ZXIoYyA9PiBjLmxhenkpLmZvckVhY2goYyA9PiB0aGlzLnRyaWdnZXJMYXp5RmV0Y2goYykpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWJ1aWxkQ2VsbERlZk1hcCgpO1xuICAgIHRoaXMuX2NlbGxEZWZzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVidWlsZENlbGxEZWZNYXAoKTtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmF0dGFjaFBhZ2luYXRvcigpO1xuICAgIHRoaXMuYXR0YWNoU29ydCgpO1xuICAgIHRoaXMuX21lYXN1cmVIZWFkZXJIZWlnaHQoKTtcbiAgICB0aGlzLl9hcHBseVBlbmRpbmdEeW5hbWljU2xpY2VLZXlzKCk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVBlbmRpbmdEeW5hbWljU2xpY2VLZXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1BlbmRpbmdEeW5hbWljID0gISF0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cztcbiAgICBjb25zdCBoYXNQZW5kaW5nRmlsdGVycyA9ICEhdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycztcbiAgICBpZiAoIWhhc1BlbmRpbmdEeW5hbWljICYmICFoYXNQZW5kaW5nRmlsdGVycykgcmV0dXJuO1xuXG4gICAgY29uc3QgYWxsQ29scyA9IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXTtcbiAgICBjb25zdCBrZXlzID0gaGFzUGVuZGluZ0R5bmFtaWMgPyBbLi4udGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMhXSA6IFtdO1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID8geyAuLi50aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzIH0gOiBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gbnVsbDtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3Jlc29sdmVkRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tTbGljZVJlc3RvcmVdIG5nQWZ0ZXJWaWV3SW5pdDogZG9ubsOpZXMgYWJzZW50ZXMsIHJlc3RhdXJhdGlvbiBkaWZmw6lyw6llIMOgIF9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCcsIHsga2V5cywgZmlsdGVycyB9KTtcbiAgICAgICAgaWYgKGZpbHRlcnMpIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyA9IFsuLi5rZXlzXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ1tTbGljZVJlc3RvcmVdIG5nQWZ0ZXJWaWV3SW5pdDogZG9ubsOpZXMgcHLDqXNlbnRlcywgYXBwbGljYXRpb24gaW1tw6lkaWF0ZScsIHsga2V5cywgZmlsdGVycyB9KTtcbiAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBhbGxDb2xzLmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgaWYgKGNvbCkgdGhpcy5hZGREeW5hbWljU2xpY2UoY29sKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbHRlcnMgJiYgdGhpcy5zbGljZVBhbmVsUmVmKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2xpY2VSZXN0b3JlXSByZXN0b3JlRmlsdGVycyBkZXB1aXMgbmdBZnRlclZpZXdJbml0JywgZmlsdGVycyk7XG4gICAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZi5yZXN0b3JlRmlsdGVycyhmaWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb3B5RmVlZGJhY2tUaW1lciAhPT0gdW5kZWZpbmVkKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyKTtcbiAgICBpZiAodGhpcy5fcGVuZGluZ1JlbmRlciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3BlbmRpbmdSZW5kZXIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lcik7XG4gICAgfVxuICAgIC8vIE5ldHRvaWUgdW4gw6l2ZW50dWVsIHJlc2l6ZSBlbiBjb3VycyAobGlzdGVuZXJzIHdpbmRvdyBub24gcmV0aXLDqXMpXG4gICAgdGhpcy5fcmVzaXplU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX29yZ2FuaXplci5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIF9tZWFzdXJlSGVhZGVySGVpZ2h0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1lYXN1cmUgPSAoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RyLm1hdC1tZGMtaGVhZGVyLXJvdycpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGhlYWRlclJvdykge1xuICAgICAgICBjb25zdCBoID0gaGVhZGVyUm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgaWYgKGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY3R1YWwtaGVhZGVyLWhlaWdodCcsIGggKyAncHgnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEhlYWRlciBwYXMgZW5jb3JlIHJlbmR1IChleDogbGF6eSBBbmd1bGFyIE1hdGVyaWFsKSwgb24gcsOpZXNzYWllIGFwcsOocyBsZSBwcm9jaGFpbiBmcmFtZVxuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBtZWFzdXJlKCkpKTtcbiAgICB9O1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gbWVhc3VyZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIF9vcmdhbml6ZXJDb25maWdDYWNoZTogT3JnYW5pemVyQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2ludmFsaWRhdGVPcmdhbml6ZXJDb25maWcoKTogdm9pZCB7IHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlID0gbnVsbDsgfVxuICBnZXQgb3JnYW5pemVyQ29uZmlnKCk6IE9yZ2FuaXplckNvbmZpZyB7XG4gICAgaWYgKHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlKSByZXR1cm4gdGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGU7XG4gICAgY29uc3QgYWxsQ29scyA9IFsuLi50aGlzLl9vcmdhbml6ZXIubWVudUJhc2VGaWVsZHMsIC4uLnRoaXMuX29yZ2FuaXplci5tZW51T3B0aW9uYWxGaWVsZHNdO1xuICAgIHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlID0ge1xuICAgICAgZmllbGRzOiB0aGlzLl9vcmdhbml6ZXIuc2hvd0ZpZWxkcyA/IGFsbENvbHMubWFwKGMgPT4gKHtcbiAgICAgICAgaWQ6IGMua2V5LFxuICAgICAgICBsYWJlbDogdGhpcy5jb2xMYWJlbChjKSxcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgICBzdGF0ZTogJ3JlYWR5JyBhcyBjb25zdCxcbiAgICAgIH0pKSA6IHVuZGVmaW5lZCxcbiAgICAgIGdyb3VwczogdGhpcy5fb3JnYW5pemVyLnNob3dHcm91cEJ5U2VjdGlvbiA/IHRoaXMuX29yZ2FuaXplci5ncm91cEJ5RmllbGRzLm1hcChjID0+ICh7XG4gICAgICAgIGlkOiBjLmtleSxcbiAgICAgICAgbGFiZWw6IHRoaXMuY29sTGFiZWwoYyksXG4gICAgICAgIGljb246IGMuaWNvbixcbiAgICAgIH0pKSA6IHVuZGVmaW5lZCxcbiAgICAgIHNsaWNlczogdGhpcy5fb3JnYW5pemVyLnNob3dTbGljZUJ5U2VjdGlvbiA/IHRoaXMuX3NsaWNlQnlNZW51SXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgaWQ6IGl0ZW0ua2V5LFxuICAgICAgICBsYWJlbDogaXRlbS50aXRsZSxcbiAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgfSkpIDogdW5kZWZpbmVkLFxuICAgICAgc2hvd0V4cG9ydDogdGhpcy5zaG93RXhwb3J0QnV0dG9uLFxuICAgICAgb25FeHBvcnQ6ICgpID0+IHRoaXMub25FeHBvcnQoKSxcbiAgICAgIHNob3dQcmVmZXJlbmNlczogdGhpcy5zaG93UHJlZmVyZW5jZXNNZW51LFxuICAgICAgaGFzU2F2ZWRQcmVmZXJlbmNlczogdGhpcy5oYXNTYXZlZFByZWZlcmVuY2VzLFxuICAgICAgb25QcmVmZXJlbmNlc0VkaXQ6ICgpID0+IHRoaXMuZW50ZXJFZGl0TW9kZSgpLFxuICAgICAgb25QcmVmZXJlbmNlc1NhdmU6ICgpID0+IHRoaXMuc2F2ZVByZWZlcmVuY2VzKCksXG4gICAgICBvblByZWZlcmVuY2VzQ2xlYXI6ICgpID0+IHRoaXMuY2xlYXJQcmVmZXJlbmNlcygpLFxuICAgICAgc2hvd0FjdGlvbnM6IHRoaXMucmVzb2x2ZWRDb25maWcuc2hvd0FjdGlvbnMgPT09IHRydWUsXG4gICAgICBvbkNvcHlWaXN1YWw6IHRoaXMucmVzb2x2ZWRDb25maWcub25Db3B5VmlzdWFsID8/ICgoKSA9PiB0aGlzLmNvcHlWaXN1YWxTbmFwc2hvdCgpKSxcbiAgICAgIG9uVG9nZ2xlRnVsbHNjcmVlbjogdGhpcy5yZXNvbHZlZENvbmZpZy5vblRvZ2dsZUZ1bGxzY3JlZW4gPz8gKHRoaXMuZnVsbHNjcmVlblN1cHBvcnRlZCA/ICgpID0+IHRoaXMudG9nZ2xlRnVsbHNjcmVlbigpIDogdW5kZWZpbmVkKSxcbiAgICAgIGlzRnVsbHNjcmVlbjogdGhpcy5faXNGdWxsc2NyZWVuLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplckNvbmZpZ0NhY2hlO1xuICB9XG5cbiAgZ2V0IG9yZ2FuaXplclN0YXRlKCk6IE9yZ2FuaXplclN0YXRlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZUZpZWxkczogdGhpcy52aXNpYmxlQ29sdW1ucy5tYXAoYyA9PiBjLmtleSksXG4gICAgICBzZWxlY3RlZEdyb3VwQnk6IHRoaXMuYWN0aXZlR3JvdXBCeUtleSA/PyB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZFNsaWNlczogdGhpcy5fc2xpY2VCeU1lbnVJdGVtc1xuICAgICAgICAuZmlsdGVyKGkgPT4gdGhpcy5pc1NsaWNlTWVudUl0ZW1BY3RpdmUoaSkpXG4gICAgICAgIC5tYXAoaSA9PiBpLmtleSksXG4gICAgfTtcbiAgfVxuXG4gIG9uT3JnYW5pemVyVmlld0NoYW5nZShldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2ZpZWxkVG9nZ2xlZCcpIHtcbiAgICAgIGNvbnN0IGFsbENvbHMgPSBbLi4udGhpcy5fb3JnYW5pemVyLm1lbnVCYXNlRmllbGRzLCAuLi50aGlzLl9vcmdhbml6ZXIubWVudU9wdGlvbmFsRmllbGRzXTtcbiAgICAgIGNvbnN0IG5ld1Zpc2libGUgPSBuZXcgU2V0KGV2ZW50LnN0YXRlLnZpc2libGVGaWVsZHMgPz8gW10pO1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgYWxsQ29scykge1xuICAgICAgICBjb25zdCBpc05vd1Zpc2libGUgPSBuZXdWaXNpYmxlLmhhcyhjb2wua2V5KTtcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbC5rZXkpICE9PSBpc05vd1Zpc2libGUpIHtcbiAgICAgICAgICB0aGlzLm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZShjb2wsIGlzTm93VmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdncm91cEJ5U2VsZWN0ZWQnKSB7XG4gICAgICBjb25zdCBuZXdLZXkgPSBldmVudC5zdGF0ZS5zZWxlY3RlZEdyb3VwQnkgPz8gbnVsbDtcbiAgICAgIHRoaXMub25Hcm91cEJ5Q2hhbmdlKG5ld0tleSA9PT0gdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID8gbnVsbCA6IG5ld0tleSk7XG4gICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnc2xpY2VTZWxlY3RlZCcpIHtcbiAgICAgIGNvbnN0IHByZXZTbGljZXMgPSBuZXcgU2V0KHRoaXMub3JnYW5pemVyU3RhdGUuc2VsZWN0ZWRTbGljZXMgPz8gW10pO1xuICAgICAgY29uc3QgbmV4dFNsaWNlcyA9IG5ldyBTZXQoZXZlbnQuc3RhdGUuc2VsZWN0ZWRTbGljZXMgPz8gW10pO1xuICAgICAgY29uc3QgY2xpY2tlZElkID0gWy4uLnByZXZTbGljZXNdLmZpbmQoaWQgPT4gIW5leHRTbGljZXMuaGFzKGlkKSlcbiAgICAgICAgPz8gWy4uLm5leHRTbGljZXNdLmZpbmQoaWQgPT4gIXByZXZTbGljZXMuaGFzKGlkKSk7XG4gICAgICBpZiAoY2xpY2tlZElkKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zLmZpbmQoaSA9PiBpLmtleSA9PT0gY2xpY2tlZElkKTtcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMub25TbGljZU1lbnVJdGVtQ2xpY2soaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLnRpdGxlID8/ICcnO1xuICB9XG5cbiAgZ2V0IHNob3dUaXRsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVkQ29uZmlnLnRpdGxlO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRmllbGRzO1xuICB9XG5cbiAgZ2V0IHNob3dTZWFyY2hCYXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLnNlYXJjaD8uZW5hYmxlZCA9PT0gdHJ1ZTsgfVxuICBnZXQgc2hvd1ZpZXdCdXR0b24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZW5hYmxlZCB8fCB0aGlzLnNob3dFeHBvcnRCdXR0b24gfHwgdGhpcy5zaG93UHJlZmVyZW5jZXNNZW51OyB9XG4gIGdldCBzaG93T3JnYW5pemVyQnV0dG9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmVuYWJsZWQgfHwgdGhpcy5zaG93RXhwb3J0QnV0dG9uIHx8IHRoaXMuc2hvd1ByZWZlcmVuY2VzTWVudTsgfVxuICBnZXQgc2hvd1NsaWNlRXhwYW5kQnRuKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc2hvd1NsaWNlUGFuZWwgJiYgdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCAmJiB0aGlzLl9zbGljZVNob3dUb2dnbGU7IH1cbiAgZ2V0IHNob3dFeHBvcnRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcuZXhwb3J0Py5lbmFibGVkID09PSB0cnVlO1xuICB9XG4gIGdldCBzaG93UHJlZmVyZW5jZXNNZW51KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLnByZWZlcmVuY2VzPy5lbmFibGVkID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzRGVmYXVsdEdyb3VwQnlBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUdyb3VwQnlLZXkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID09PSB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRHcm91cEJ5O1xuICB9XG5cbiAgZ2V0IGhhc1NhdmVkUHJlZmVyZW5jZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oYXNTYXZlZENvbmZpZzsgfVxuXG4gIGdldCBzaG93VG9vbGJhcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuc2hvd1NlYXJjaEJhciB8fCB0aGlzLnNob3dWaWV3QnV0dG9uIHx8IHRoaXMuc2hvd1NsaWNlRXhwYW5kQnRuOyB9XG4gIGdldCBmdWxsc2NyZWVuU3VwcG9ydGVkKCk6IGJvb2xlYW4geyByZXR1cm4gRnVsbHNjcmVlbk1hbmFnZXIuaXNTdXBwb3J0ZWQodGhpcy5fZWwubmF0aXZlRWxlbWVudCk7IH1cblxuICBhc3luYyB0b2dnbGVGdWxsc2NyZWVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBGdWxsc2NyZWVuTWFuYWdlci50b2dnbGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLl9pc0Z1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5faW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBDcsOpZSB1biBzbmFwc2hvdCBhdXRvbm9tZSBldCBsZSBwbGFjZSBkYW5zIGxlIHN0b2NrYWdlIHBhcnRhZ8OpLiAqL1xuICBjb3B5VmlzdWFsU25hcHNob3QobGFiZWw/OiBzdHJpbmcpOiBWaXN1YWxTbmFwc2hvdCB8IG51bGwge1xuICAgIGNvbnN0IHNuYXBzaG90TGFiZWwgPSBsYWJlbCA/PyAodGhpcy50aXRsZSB8fCAnVGFibGVhdScpO1xuICAgIGlmICghc25hcHNob3RMYWJlbD8udHJpbSgpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBWaXN1YWxTbmFwc2hvdFN0b3JhZ2UoKS5jcmVhdGUodGhpcy5jcmVhdGVWaXN1YWxTbmFwc2hvdChzbmFwc2hvdExhYmVsLnRyaW0oKSkpO1xuICAgIHRoaXMudmlzdWFsQ29waWVkLmVtaXQoc25hcHNob3QpO1xuICAgIHRoaXMuc2hvd0NvcHlGZWVkYmFjaygpO1xuICAgIHJldHVybiBzbmFwc2hvdDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0NvcHlGZWVkYmFjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb3B5RmVlZGJhY2suZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcbiAgICB0aGlzLmNvcHlGZWVkYmFja01lc3NhZ2UgPSB0aGlzLmNvcHlGZWVkYmFjay5tZXNzYWdlIHx8ICdDb3Bpw6knO1xuICAgIGlmICh0aGlzLl9jb3B5RmVlZGJhY2tUaW1lciAhPT0gdW5kZWZpbmVkKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyKTtcbiAgICB0aGlzLl9jb3B5RmVlZGJhY2tUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weUZlZWRiYWNrTWVzc2FnZSA9ICcnLCB0aGlzLmNvcHlGZWVkYmFjay5kdXJhdGlvbk1zID8/IDIyMDApO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6ZnVsbHNjcmVlbmNoYW5nZScpXG4gIG9uRnVsbHNjcmVlbkNoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc0Z1bGxzY3JlZW4gPSBGdWxsc2NyZWVuTWFuYWdlci5pc0FjdGl2ZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZXhwYW5kU2xpY2VQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlUGFuZWxSZWY/LnRvZ2dsZVBhbmVsKCk7XG4gIH1cbiAgZ2V0IHNob3dGaWVsZHMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd0ZpZWxkczsgfVxuICBnZXQgc2hvd0dyb3VwQnlTZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNob3dHcm91cEJ5U2VjdGlvbjsgfVxuXG4gIGdldCBmaWx0ZXJlZFJvd0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlR3JvdXBCeUtleSA/IHRoaXMuX3RvdGFsRmlsdGVyZWRDb3VudCA6IHRoaXMuX2FsbEZpbHRlcmVkUm93cy5sZW5ndGg7XG4gIH1cblxuICBnZXQgYWN0aXZlR3JvdXBCeUxhYmVsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuYWN0aXZlR3JvdXBCeUxhYmVsOyB9XG5cbiAgZ2V0IHRvdGFsQ29sdW1uQ291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci50b3RhbEZpZWxkQ291bnQ7IH1cblxuICBnZXQgYWN0aXZlU2xpY2VCeUxhYmVsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVMYWJlbDsgfVxuXG4gIGdldCBhY3RpdmVEeW5hbWljU2xpY2VDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzOyB9XG5cbiAgcmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNsaWNlUGFuZWxSZWY/LnJlbW92ZUR5bmFtaWNTbGljZUJ5S2V5KGtleSk7XG4gIH1cblxuICBnZXQgZ3JvdXBCeUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5ncm91cEJ5RmllbGRzOyB9XG5cbiAgY29sTGFiZWwoY29sOiB7IGtleTogc3RyaW5nOyBoZWFkZXI/OiBzdHJpbmcgfSk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZmllbGRMYWJlbChjb2wpOyB9XG5cbiAgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHRoaXMucGFnaW5hdG9yPy5maXJzdFBhZ2UoKTtcbiAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoUXVlcnkpO1xuICB9XG5cbiAgb25Hcm91cEJ5Q2hhbmdlKGtleTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5zZXRHcm91cEJ5KGtleSk7XG4gICAgdGhpcy5fZ3JvdXBCeS5zZXREZWZhdWx0Q29sbGFwc2VkKGtleSAhPT0gbnVsbCk7XG4gICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRHcm91cFBhZ2VTaXplKCk7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIHRoaXMuZ3JvdXBCeUNoYW5nZS5lbWl0KGtleSk7XG4gICAgaWYgKGtleSkge1xuICAgICAgY29uc3QgY29sRGVmID0gKHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyB8fCBbXSkuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgaWYgKGNvbERlZj8ubGF6eSAmJiB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChrZXkpICE9PSAnbG9hZGVkJykge1xuICAgICAgICB0aGlzLnRyaWdnZXJMYXp5RmV0Y2goY29sRGVmKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYmxlQm9keVNjcm9sbFJlZj8ubmF0aXZlRWxlbWVudC5zY3JvbGxUbyh7IHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgfSwgMCkpO1xuICAgIH1cbiAgfVxuXG4gIG9uR3JvdXBQYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cEJ5Lm9uR3JvdXBQYWdlU2l6ZUNoYW5nZShOdW1iZXIoc2l6ZSkpO1xuICB9XG5cbiAgb25Hcm91cFNvcnRUb2dnbGUoZGlyOiAnYXNjJyB8ICdkZXNjJyk6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwQnkub25Hcm91cFNvcnRUb2dnbGUoZGlyLCAoa2V5KSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvR3JvdXBIZWFkZXIoa2V5KSwgMCkpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0TGF6eUNvbHVtblN0YXR1cyhrZXk6IHN0cmluZyk6ICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhenkuZ2V0U3RhdHVzKGtleSk7XG4gIH1cblxuICBnZXRMYXp5UmVuZGVyVHlwZShyb3dWYWx1ZTogYW55KTogJ2xvYWRpbmcnIHwgJ2Vycm9yJyB8ICd2YWx1ZScge1xuICAgIHJldHVybiB0aGlzLl9sYXp5LmdldFJlbmRlclR5cGUocm93VmFsdWUpO1xuICB9XG5cbiAgcmV0cnlMYXp5Q29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuX2xhenkucmV0cnkoY29sdW1uLCB0aGlzLl9yZXNvbHZlZERhdGEsIHRoaXMuX2xhenlDYWxsYmFja3MoKSk7XG4gIH1cblxuICB0cmlnZ2VyTGF6eUZldGNoKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuX2xhenkuZmV0Y2goY29sdW1uLCB0aGlzLl9yZXNvbHZlZERhdGEsIHRoaXMuX2xhenlDYWxsYmFja3MoKSk7XG4gIH1cblxuICBwcml2YXRlIF9sYXp5Q2FsbGJhY2tzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvblJlZnJlc2g6ICgpID0+IHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpLFxuICAgICAgb25NYXJrRm9yQ2hlY2s6ICgpID0+IHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKSxcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBDb2xsYXBzZShncm91cEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS50b2dnbGVHcm91cENvbGxhcHNlKGdyb3VwS2V5LCAoa2V5KSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvR3JvdXBIZWFkZXIoa2V5KSwgMCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0dyb3VwSGVhZGVyKGdyb3VwS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnRhYmxlQm9keVNjcm9sbFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgIGNvbnN0IHJvdyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgdHJbZGF0YS1ncm91cC1rZXk9XCIke0NTUy5lc2NhcGUoZ3JvdXBLZXkpfVwiXWApO1xuICAgIGlmICghcm93KSByZXR1cm47XG4gICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gcGFyc2VGbG9hdChcbiAgICAgIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1hY3R1YWwtaGVhZGVyLWhlaWdodCcpIHx8ICc1NidcbiAgICApIHx8IDU2O1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgcm93UmVjdCA9IHJvdy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBjdXJyZW50U2Nyb2xsVG9wICsgKHJvd1JlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3ApIC0gaGVhZGVySGVpZ2h0O1xuICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcDogdGFyZ2V0U2Nyb2xsVG9wLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gIH1cblxuICBpc0dyb3VwQ29sbGFwc2VkKGdyb3VwS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBCeS5pc0dyb3VwQ29sbGFwc2VkKGdyb3VwS2V5KTtcbiAgfVxuXG4gIGdyb3VwUGFnZUJhY2soZ3JvdXBLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlQmFjayhncm91cEtleSk7XG4gIH1cblxuICBncm91cFBhZ2VGb3J3YXJkKGdyb3VwS2V5OiBzdHJpbmcsIHRvdGFsQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlRm9yd2FyZChncm91cEtleSwgdG90YWxDb3VudCk7XG4gIH1cblxuICBnZXQgaGFzQWRkYWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5tZW51QmFzZUZpZWxkcy5sZW5ndGggPiAwIHx8IHRoaXMuX29yZ2FuaXplci5tZW51T3B0aW9uYWxGaWVsZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBtZW51QmFzZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLm1lbnVCYXNlRmllbGRzO1xuICB9XG5cbiAgZ2V0IG1lbnVPcHRpb25hbENvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLm1lbnVPcHRpb25hbEZpZWxkcztcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVDb2x1bW5zVG9BZGQoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICBjb25zdCBhY3RpdmVLZXlzID0gbmV3IFNldCh0aGlzLmFjdGl2ZUZpZWxkcy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmtleSkpO1xuICAgIHJldHVybiAodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoKGMpID0+IGMub3B0aW9uYWwgJiYgIWFjdGl2ZUtleXMuaGFzKGMua2V5KSk7XG4gIH1cblxuICBnZXQgYWxsb3dDb2x1bW5SZW1vdmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIuYWxsb3dGaWVsZFJlbW92YWw7XG4gIH1cblxuICBnZXQgaGFzU2xpY2VDb25maWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnJlc29sdmVkQ29uZmlnLnNsaWNlcz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGdldCBzaG93U2xpY2VQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd1NsaWNlUGFuZWw7XG4gIH1cblxuICBvblNsaWNlUGFuZWxDb2xsYXBzZWRDaGFuZ2UoY29sbGFwc2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCA9IGNvbGxhcHNlZDtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCgpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNDZmcgPSB0aGlzLl9zbGljZUNvbmZpZ3MubGVuZ3RoID4gMCB8fCB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLmxlbmd0aCA+IDA7XG4gICAgY29uc3Qgd2FzVmlzaWJsZSA9IHRoaXMuX3Nob3dTbGljZVBhbmVsO1xuICAgIHRoaXMuX3Nob3dTbGljZVBhbmVsID0gaGFzQ2ZnICYmIHRoaXMuX3Jlc29sdmVkRGF0YS5sZW5ndGggPiAwO1xuICAgIC8vIExlcyBkb25uw6llcyB2aWVubmVudCBkJ2Fycml2ZXIgOiBhcHBsaXF1ZXIgbGVzIGR5bmFtaWMgc2xpY2VzIEVUIGxlcyBmaWx0cmVzIGVuIGF0dGVudGUuXG4gICAgLy8gTGVzIGR5bmFtaWMgc2xpY2VzIGRvaXZlbnQgw6p0cmUgYWpvdXTDqWVzIEFWQU5UIHJlc3RvcmVGaWx0ZXJzIGNhciBsZXMgaW5kaWNlcyBkZVxuICAgIC8vIHNsaWNlRmlsdGVycyBkw6lwZW5kZW50IGRlIGwnb3JkcmUgZmluYWwgZGUgX2NhY2hlZFNsaWNlcy5cbiAgICBpZiAoIXdhc1Zpc2libGUgJiYgdGhpcy5fc2hvd1NsaWNlUGFuZWwgJiYgKHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgfHwgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycztcbiAgICAgIGNvbnN0IGR5bmFtaWNLZXlzID0gdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXM7XG4gICAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gbnVsbDtcbiAgICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gbnVsbDtcbiAgICAgIGNvbnN0IGFsbENvbHMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW107XG4gICAgICBjb25zb2xlLmxvZygnW1NsaWNlUmVzdG9yZV0gX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsOiBkb25uw6llcyBhcnJpdsOpZXMnLCB7IGR5bmFtaWNLZXlzLCBmaWx0ZXJzIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChkeW5hbWljS2V5cykge1xuICAgICAgICAgIGR5bmFtaWNLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGFsbENvbHMuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICAgICAgaWYgKGNvbCkgdGhpcy5hZGREeW5hbWljU2xpY2UoY29sKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycyAmJiB0aGlzLnNsaWNlUGFuZWxSZWYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW1NsaWNlUmVzdG9yZV0gcmVzdG9yZUZpbHRlcnMgZGVwdWlzIF9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCcsIGZpbHRlcnMpO1xuICAgICAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZi5yZXN0b3JlRmlsdGVycyhmaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0FkZFNsaWNlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd1NsaWNlQnlTZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zdGF0aWNTbGljZXNGb3JNZW51O1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnNGb3JEeW5hbWljU2xpY2UoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYXZhaWxhYmxlRm9yRHluYW1pYztcbiAgfVxuXG4gIGlzU3RhdGljU2xpY2VWaXNpYmxlKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMuaGFzKGNvbHVtbktleSk7XG4gIH1cblxuICB0b2dnbGVTdGF0aWNTbGljZShjb2x1bW5LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgaWYgKG5leHQuaGFzKGNvbHVtbktleSkpIG5leHQuZGVsZXRlKGNvbHVtbktleSk7XG4gICAgZWxzZSBuZXh0LmFkZChjb2x1bW5LZXkpO1xuICAgIHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5leHQ7XG4gICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZUhpZGRlblN0YXRpY0tleXModGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcbiAgICB0aGlzLl9zbGljZUNvbmZpZ3MgPSB0aGlzLl9jb21wdXRlU2xpY2VDb25maWdzKCk7XG4gICAgLy8gU2kgdW5lIHNsaWNlIHZpZW50IGQnw6p0cmUgY2FjaMOpZSwgcsOpaW5pdGlhbGlzZSBsZSBmaWx0cmUgYWN0aWYgcG91ciDDqXZpdGVyXG4gICAgLy8gdW4gZmlsdHJlIG9ycGhlbGluIChsYSBzbGljZSBuJ2VzdCBwbHVzIHZpc2libGUgbWFpcyBzb24gZmlsdHJlIHJlc3RlcmFpdCBhY3RpZilcbiAgICBpZiAobmV4dC5oYXMoY29sdW1uS2V5KSkge1xuICAgICAgdGhpcy5hY3RpdmVTbGljZUZpbHRlciA9ICgpID0+IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsKCk7XG4gICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhZGREeW5hbWljU2xpY2UoY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5zbGljZVBhbmVsUmVmPy5hZGREeW5hbWljU2xpY2UoY29sdW1uKTtcbiAgICBpZiAoY29sdW1uLmxhenkgJiYgdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoY29sdW1uLmtleSkgIT09ICdsb2FkZWQnKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMYXp5RmV0Y2goY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYWxsRHluYW1pY1NsaWNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9hbGxEeW5hbWljU2xpY2VDb2x1bW5zO1xuICB9XG5cbiAgaXNEeW5hbWljU2xpY2VBY3RpdmUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmlzRHluYW1pY1NsaWNlQWN0aXZlKGtleSk7XG4gIH1cblxuICB0b2dnbGVEeW5hbWljU2xpY2UoY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljU2xpY2VBY3RpdmUoY29sLmtleSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoY29sLmtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRHluYW1pY1NsaWNlKGNvbCk7XG4gICAgfVxuICB9XG5cbiAgb25TbGljZUZpbHRlckNoYW5nZShwcmVkOiAocm93OiBUKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVTbGljZUZpbHRlciA9IHByZWQ7XG4gICAgdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHRoaXMucGFnaW5hdG9yPy5maXJzdFBhZ2UoKTtcbiAgfVxuXG4gIG9uRHluYW1pY1NsaWNlS2V5c0NoYW5nZShrZXlzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5vbkR5bmFtaWNTbGljZUtleXNDaGFuZ2Uoa2V5cyk7XG4gICAgdGhpcy5fcmVjb21wdXRlU2hvd1NsaWNlUGFuZWwoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW1wdHlTdGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcubGFiZWxzPy5lbXB0eSB8fCB0aGlzLmkxOG4uZW1wdHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nU3RhdGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLmxhYmVscz8ubG9hZGluZyB8fCB0aGlzLmkxOG4ubG9hZGluZ1N0YXRlO1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZUlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAvLyBfcGVuZGluZ1JlbmRlciA6IGxlIHJlbmR1IGludGVybmUgbidlc3QgcGFzIGVuY29yZSB0ZXJtaW7DqSDihpIgcGFzIGRlIG1lc3NhZ2UgdmlkZSBwcsOpbWF0dXLDqVxuICAgIHJldHVybiAhdGhpcy5pc0xvYWRpbmcgJiYgdGhpcy5fcGVuZGluZ1JlbmRlciA9PT0gbnVsbCAmJiB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IHNob3dQYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5lbmFibGVkICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFBhZ2luYXRpb25TaG93Rmlyc3RMYXN0QnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5zaG93Rmlyc3RMYXN0QnV0dG9ucyAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5pc0ZpZWxkRHJhZ0Ryb3BFbmFibGVkO1xuICB9XG5cbiAgZ2V0IHRvdGFsUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXlcbiAgICAgID8gdGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YS5maWx0ZXIoKHIpID0+ICFyW0dST1VQX0hFQURFUl9NQVJLRVJdKS5sZW5ndGhcbiAgICAgIDogdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBHZXN0aW9uIGRlcyBjb2xvbm5lc1xuXG4gIG9uQWRkQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5hZGRGaWVsZChjb2x1bW4pO1xuICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyBudWxsO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuXG4gICAgaWYgKGNvbHVtbi5sYXp5KSB7XG4gICAgICB0aGlzLnRyaWdnZXJMYXp5RmV0Y2goY29sdW1uKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFJlcXVlc3RlZC5lbWl0KCk7XG4gICAgdGhpcy5jb2x1bW5BZGRlZC5lbWl0KGNvbHVtbik7XG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5fb3JnYW5pemVyLmlzRmllbGRWaXNpYmxlKGNvbHVtbi5rZXkpO1xuXG4gICAgaWYgKGNoZWNrZWQgJiYgIWlzVmlzaWJsZSkge1xuICAgICAgdGhpcy5vbkFkZENvbHVtbihjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tlZCAmJiBpc1Zpc2libGUpIHtcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9vcmdhbml6ZXIucmVtb3ZlRmllbGQoY29sdW1uLmtleSk7XG4gICAgICBpZiAoIXJlbW92ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyBudWxsO1xuICAgICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgICB0aGlzLmNvbHVtblJlbW92ZWQuZW1pdChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29sdW1uVmlzaWJsZShjb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpZWxkcy5zb21lKGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gIH1cblxuICBvblJlbW92ZUNvbHVtbihjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmFjdGl2ZUZpZWxkcy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybjtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fb3JnYW5pemVyLnJlbW92ZUZpZWxkKGNvbHVtbktleSk7XG4gICAgaWYgKCFyZW1vdmVkKSByZXR1cm47XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5jb2x1bW5SZW1vdmVkLmVtaXQoY29sdW1uKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWduZXNcblxuICBwcml2YXRlIF9yZWJ1aWxkQ2VsbERlZk1hcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jZWxsRGVmTWFwID0gbmV3IE1hcChcbiAgICAgICh0aGlzLl9jZWxsRGVmcyA/PyBbXSkubWFwKGQgPT4gW2QuY29sdW1uS2V5LCBkLnRlbXBsYXRlXSBhcyBbc3RyaW5nLCBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYW55OyBpbmRleDogbnVtYmVyIH0+XSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Q2VsbFRlbXBsYXRlKGtleTogc3RyaW5nKTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IGFueTsgaW5kZXg6IG51bWJlciB9PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jZWxsRGVmTWFwLmdldChrZXkpID8/IG51bGw7XG4gIH1cblxuICBnZXQgaGFzQ3VzdG9tQ2VsbERlZnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxEZWZNYXAuc2l6ZSA+IDA7XG4gIH1cblxuICBnZXQgaGFzUm93Q2xpY2tIYW5kbGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGVkLm9ic2VydmVkIHx8ICEhdGhpcy5yZXNvbHZlZENvbmZpZy5vblJvd1NlbGVjdGVkO1xuICB9XG5cbiAgLyoqIExhcmdldXIgbWluaW1hbGUgZHUgdGFibGVhdSBlbiBweCwgY2FsY3Vsw6llIGRlcHVpcyBsZXMgbGFyZ2V1cnMgZXhwbGljaXRlcyBkZXMgY29sb25uZXMgYWN0aXZlcy5cbiAgICogUmV0b3VybmUgbnVsbCBzaSBhdWN1bmUgY29sb25uZSBuJ2EgZGUgbGFyZ2V1ciBkw6lmaW5pZSAobGUgdGFibGVhdSByZW1wbGl0IGFsb3JzIDEwMCUgZHUgY29udGVuZXVyKS5cbiAgICogU2V1bGVzIGxlcyB2YWxldXJzIGV4cGxpY2l0ZW1lbnQgZW4gYHB4YCBzb250IHNvbW1hYmxlcyA7IGxlcyBwb3VyY2VudGFnZXMgb3UgYXV0cmVzIHVuaXTDqXMgc29udCBpZ25vcsOpcy4gKi9cbiAgZ2V0IHRhYmxlTWluV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaGFzUmVzaXplZCA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbHVtbldpZHRocykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNTb21lRXhwbGljaXRXaWR0aCA9IGhhc1Jlc2l6ZWQgfHwgdGhpcy5hY3RpdmVGaWVsZHMuc29tZShjID0+IGMud2lkdGgpO1xuICAgIGlmICghaGFzU29tZUV4cGxpY2l0V2lkdGgpIHJldHVybiBudWxsO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuYWN0aXZlRmllbGRzKSB7XG4gICAgICBpZiAodGhpcy5fY29sdW1uV2lkdGhzW2NvbC5rZXldICE9IG51bGwpIHtcbiAgICAgICAgc3VtICs9IHRoaXMuX2NvbHVtbldpZHRoc1tjb2wua2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgIGNvbnN0IGlzUHggPSBjb2wud2lkdGgudHJpbSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ3B4Jyk7XG4gICAgICAgIGNvbnN0IHB4ID0gTnVtYmVyLnBhcnNlRmxvYXQoY29sLndpZHRoKTtcbiAgICAgICAgaWYgKGlzUHggJiYgIU51bWJlci5pc05hTihweCkpIHsgc3VtICs9IHB4OyB9XG4gICAgICAgIGVsc2UgeyBzdW0gKz0gMTUwOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdW0gKz0gMTIwOyAvLyBsYXJnZXVyIG1pbmltYWxlIGVzdGltw6llIHBvdXIgdW5lIGNvbG9ubmUgc2FucyBsYXJnZXVyIGV4cGxpY2l0ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VtICsgJ3B4JztcbiAgfVxuXG4gIHRyYWNrUm93Rm4gPSAoX2luZGV4OiBudW1iZXIsIHJvdzogYW55KTogYW55ID0+XG4gICAgcm93W0dST1VQX0hFQURFUl9NQVJLRVJdID8gYF9fZ3JvdXBfJHtyb3dbUk9XX0dST1VQX0tFWV19YCA6IHJvd1tST1dfSU5ERVhfS0VZXSA/PyBfaW5kZXg7XG5cbiAgZ2V0Um93Q2xhc3Mocm93OiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICBjb25zdCBmbiA9IHRoaXMucmVzb2x2ZWRDb25maWcucm93Q2xhc3M7XG4gICAgaWYgKCFmbiB8fCByb3c/LltHUk9VUF9IRUFERVJfTUFSS0VSXSkgcmV0dXJuIHt9O1xuICAgIHJldHVybiBmbihyb3dbUk9XX1JBV19LRVldID8/IHJvdywgcm93W1JPV19JTkRFWF9LRVldID8/IDApO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IGFueSwgZXZlbnQ6IE1vdXNlRXZlbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHJvdz8uW0dST1VQX0hFQURFUl9NQVJLRVJdKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmhhc1Jvd0NsaWNrSGFuZGxlcikgcmV0dXJuO1xuICAgIGNvbnN0IHJlc29sdmVkID0gKHJvdz8uW1JPV19SQVdfS0VZXSA/PyByb3cpIGFzIFQ7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZy5vblJvd1NlbGVjdGVkPy4ocmVzb2x2ZWQsIGV2ZW50KTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQocmVzb2x2ZWQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyYWcgJiBkcm9wXG5cbiAgb25IZWFkZXJEcmFnU3RhcnQoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgJiYgIXRoaXMuX2VkaXRNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0gY29sdW1uS2V5O1xuICAgIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPSBudWxsO1xuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBjb2x1bW5LZXkpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRHJhZ092ZXIoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKCF0aGlzLmlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkICYmICF0aGlzLl9lZGl0TW9kZSkgfHwgIXRoaXMuZHJhZ2dlZENvbHVtbktleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5kcmFnT3ZlckNvbHVtbktleSA9IGNvbHVtbktleTtcbiAgfVxuXG4gIG9uSGVhZGVyRHJvcCh0YXJnZXRDb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICgoIXRoaXMuaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgJiYgIXRoaXMuX2VkaXRNb2RlKSB8fCAhdGhpcy5kcmFnZ2VkQ29sdW1uS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IG1vdmVkID0gdGhpcy5fb3JnYW5pemVyLnJlb3JkZXJGaWVsZHModGhpcy5kcmFnZ2VkQ29sdW1uS2V5LCB0YXJnZXRDb2x1bW5LZXkpO1xuICAgIGlmICghbW92ZWQpIHtcbiAgICAgIHRoaXMub25IZWFkZXJEcmFnRW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5vbkhlYWRlckRyYWdFbmQoKTtcbiAgfVxuXG4gIG9uSGVhZGVyRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5LZXkgPSBudWxsO1xuICAgIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPSBudWxsO1xuICB9XG5cbiAgaXNIZWFkZXJEcm9wVGFyZ2V0KGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ICYmIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPT09IGNvbHVtbktleSAmJiB0aGlzLmRyYWdnZWRDb2x1bW5LZXkgIT09IGNvbHVtbktleTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcsOpZsOpcmVuY2VzIDogbW9kZSDDqWRpdGlvblxuXG4gIGVudGVyRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdE1vZGUgPSB0cnVlO1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWVzc2FnZSA9IG51bGw7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY29uZmlybUVkaXRNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIETDqW1hcnJlIGxlIHJlc2l6ZSBkJ3VuZSBjb2xvbm5lIChtb3VzZWRvd24gc3VyIGxhIHBvaWduw6llIGRyb2l0ZSkuICovXG4gIG9uUmVzaXplU3RhcnQoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lZGl0TW9kZSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCB0aCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ3RoJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGgpIHJldHVybjtcblxuICAgIGNvbnN0IHNjcm9sbEVsID0gdGhpcy50YWJsZUJvZHlTY3JvbGxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHNjcm9sbEVsKSB7XG4gICAgICBjb25zdCBhbGxUaCA9IHNjcm9sbEVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCd0aC5tYXQtbWRjLWhlYWRlci1jZWxsJyk7XG4gICAgICBhbGxUaC5mb3JFYWNoKHRoRWwgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSB0aEVsLmdldEF0dHJpYnV0ZSgnbWF0LWNvbHVtbi1oZWFkZXInKSB8fCB0aEVsLmdldEF0dHJpYnV0ZSgnbWF0LXNvcnQtaGVhZGVyJykgfHwgJyc7XG4gICAgICAgIGNvbnN0IGNvbENsYXNzID0gQXJyYXkuZnJvbSh0aEVsLmNsYXNzTGlzdCkuZmluZChjID0+IGMuc3RhcnRzV2l0aCgnbWF0LWNvbHVtbi0nKSk7XG4gICAgICAgIGNvbnN0IGNvbEtleSA9IGNvbENsYXNzID8gY29sQ2xhc3MucmVwbGFjZSgnbWF0LWNvbHVtbi0nLCAnJykgOiBudWxsO1xuICAgICAgICBpZiAoY29sS2V5ICYmIHRoaXMuX2NvbHVtbldpZHRoc1tjb2xLZXldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnRoaXMuX2NvbHVtbldpZHRocywgW2NvbEtleV06IHRoRWwub2Zmc2V0V2lkdGggfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzaXplU3RhdGUgPSB7IGtleTogY29sdW1uS2V5LCBzdGFydFg6IGV2ZW50LmNsaWVudFgsIHN0YXJ0V2lkdGg6IHRoLm9mZnNldFdpZHRoIH07XG5cbiAgICBjb25zdCBvbk1vdmUgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9yZXNpemVTdGF0ZSkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsdGEgPSBlLmNsaWVudFggLSB0aGlzLl9yZXNpemVTdGF0ZS5zdGFydFg7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KDYwLCB0aGlzLl9yZXNpemVTdGF0ZS5zdGFydFdpZHRoICsgZGVsdGEpO1xuICAgICAgdGhpcy5fY29sdW1uV2lkdGhzID0geyAuLi50aGlzLl9jb2x1bW5XaWR0aHMsIFt0aGlzLl9yZXNpemVTdGF0ZS5rZXldOiBuZXdXaWR0aCB9O1xuICAgICAgLy8gZGV0ZWN0Q2hhbmdlcygpIHBvdXIgZm9yY2VyIGxhIG1pc2Ugw6Agam91ciBpbW3DqWRpYXRlIGVuIG1vZGUgT25QdXNoXG4gICAgICAvLyAobGVzIGxpc3RlbmVycyB3aW5kb3cgdG91cm5lbnQgaG9ycyB6b25lIEFuZ3VsYXIgYXZlYyBydW5PdXRzaWRlQW5ndWxhcilcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uVXAgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNpemVTdGF0ZSA9IG51bGw7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25VcCk7XG4gICAgfTtcblxuICAgIC8vIExpc3RlbmVycyBob3JzIHpvbmUgQW5ndWxhciBwb3VyIMOpdml0ZXIgZGVzIGN5Y2xlcyBDRCDDoCBjaGFxdWUgbW91c2Vtb3ZlXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdmUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXRvdXJuZSBsYSBsYXJnZXVyIENTUyBkJ3VuZSBjb2xvbm5lIChweCBzaSBwZXJzb25uYWxpc8OpZSwgc2lub24gbGEgdmFsZXVyIGRlIGNvbmZpZyBvdSBhdXRvKS4gKi9cbiAgZ2V0Q29sdW1uV2lkdGgoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9jb2x1bW5XaWR0aHNba2V5XSAhPSBudWxsKSByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGhzW2tleV0gKyAncHgnO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbk1hcC5nZXQoa2V5KTtcbiAgICByZXR1cm4gY29sPy53aWR0aCA/PyAnYXV0byc7XG4gIH1cblxuICAvLyDilIDilIAgUHLDqWbDqXJlbmNlcyA6IHNhdmUgLyBjbGVhclxuXG4gIHNhdmVQcmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlcikgcmV0dXJuO1xuICAgIGNvbnN0IGR5bmFtaWNTbGljZUtleXMgPSB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLm1hcChjID0+IGMua2V5KTtcbiAgICBjb25zdCBjb25maWc6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyA9IHtcbiAgICAgIHNlYXJjaDogICAgICAgICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgfHwgdW5kZWZpbmVkLFxuICAgICAgZ3JvdXBCeTogICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cEJ5S2V5LFxuICAgICAgY29sdW1uT3JkZXI6ICAgICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpLFxuICAgICAgdmlzaWJsZUNvbHVtbnM6ICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpLFxuICAgICAgY29sdW1uV2lkdGhzOiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29sdW1uV2lkdGhzKS5sZW5ndGggPyB7IC4uLnRoaXMuX2NvbHVtbldpZHRocyB9IDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VQYW5lbENvbGxhcHNlZDogdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCxcbiAgICAgIGhpZGRlblNsaWNlS2V5czogICAgIFsuLi50aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXNdLFxuICAgICAgZHluYW1pY1NsaWNlS2V5czogICAgZHluYW1pY1NsaWNlS2V5cy5sZW5ndGggPyBkeW5hbWljU2xpY2VLZXlzIDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VGaWx0ZXJzOiAgICAgICAgdGhpcy5zbGljZVBhbmVsUmVmID8gdGhpcy5zbGljZVBhbmVsUmVmLmdldEFjdGl2ZUZpbHRlcnMoKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlci5zYXZlKGNvbmZpZyk7XG4gICAgdGhpcy5faGFzU2F2ZWRDb25maWcgPSB0cnVlO1xuICAgIHRoaXMuX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UodGhpcy5pMThuLnByZWZlcmVuY2VzU2F2ZWRNZXNzYWdlKTtcbiAgfVxuXG4gIGNsZWFyUHJlZmVyZW5jZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIpIHJldHVybjtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIuY2xlYXIoKTtcbiAgICB0aGlzLl9oYXNTYXZlZENvbmZpZyA9IGZhbHNlO1xuXG4gICAgLy8gQ2FwdHVyZXIgbGVzIGR5bmFtaWMgc2xpY2VzIGFjdGl2ZXMgQVZBTlQgbGUgcmVzZXQgKHJlc2V0VG9EZWZhdWx0cygpIGxlcyB2aWRlKVxuICAgIGNvbnN0IGR5bmFtaWNTbGljZXNUb1JlbW92ZSA9IHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMuc2xpY2UoKTtcblxuICAgIC8vIFJlc2V0IGNvbXBsZXQgZGUgbCfDqXRhdCB2ZXJzIGxlcyB2YWxldXJzIHBhciBkw6lmYXV0IGRlIGxhIGNvbmZpZ1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7fTtcbiAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG4gICAgLy8gU3luY2hyb25pc2VyIGwnw6l0YXQgaW50ZXJuZSBkdSBzbGljZS1wYW5lbCA6IHNpIGxlIGNvbXBvc2FudCBlc3QgZW4gw6l0YXQgY29sbGFwc2VkXG4gICAgLy8gKGwndXRpbGlzYXRldXIgbCdhdmFpdCBmZXJtw6kgYXByw6hzIGxhIHNhdXZlZ2FyZGUpLCBsZSByb3V2cmlyIGV4cGxpY2l0ZW1lbnQgcG91clxuICAgIC8vIMOpdml0ZXIgcXVlIGRpc3BsYXk6bm9uZSBzb2l0IHJldGlyw6kgbWFpcyBxdWUgaXNDb2xsYXBzZWQgaW50ZXJuZSByZXN0ZSDDoCB0cnVlLlxuICAgIGlmICh0aGlzLnNsaWNlUGFuZWxSZWY/LmlzQ29sbGFwc2VkKSB7XG4gICAgICB0aGlzLnNsaWNlUGFuZWxSZWYudG9nZ2xlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZChmYWxzZSk7XG5cbiAgICAvLyBTbGljZXMgc3RhdGlxdWVzIDogcmV2ZW5pciBhdXggc2V1bGVzIGNlbGxlcyBjYWNow6llcyBwYXIgbGEgY29uZmlnIChwYXMgcGFyIGwndXRpbGlzYXRldXIpXG4gICAgdGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzID0gbmV3IFNldCh0aGlzLl9jb25maWdIaWRkZW5LZXlzKTtcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlSGlkZGVuU3RhdGljS2V5cyh0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMpO1xuXG4gICAgLy8gQ29sb25uZXMgZXQgZ3JvdXBCeSA6IHJlc2V0IHZpYSBsYSBmYWNhZGUgKHJldGlyZSBsZXMgb3B0aW9ubmVsbGVzLCByZW1ldCBsJ29yZHJlIGNvbmZpZylcbiAgICB0aGlzLl9vcmdhbml6ZXIucmVzZXRUb0RlZmF1bHRzKCk7XG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gZmFsc2U7XG5cbiAgICAvLyBEeW5hbWljIHNsaWNlcyA6IGxlcyByZXRpcmVyIGR1IHNsaWNlIHBhbmVsIGF2ZWMgbGEgbGlzdGUgY2FwdHVyw6llIGF2YW50IGxlIHJlc2V0XG4gICAgZHluYW1pY1NsaWNlc1RvUmVtb3ZlLmZvckVhY2goY29sID0+IHtcbiAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8ucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoY29sLmtleSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaWx0cmUgZGUgc2xpY2UgYWN0aWZcbiAgICB0aGlzLmFjdGl2ZVNsaWNlRmlsdGVyID0gKCkgPT4gdHJ1ZTtcbiAgICBpZiAodGhpcy5zbGljZVBhbmVsUmVmKSB0aGlzLnNsaWNlUGFuZWxSZWYucmVzdG9yZUZpbHRlcnMoe30pO1xuXG4gICAgLy8gUmFmcmHDrmNoaXQgdG91dGUgbGEgdnVlXG4gICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcbiAgICB0aGlzLnJlbmRlcmVkQ29sdW1ucyA9IHRoaXMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KTtcbiAgICB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycyA9IG51bGw7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG5cbiAgICB0aGlzLl9zaG93UHJlZmVyZW5jZXNNZXNzYWdlKHRoaXMuaTE4bi5wcmVmZXJlbmNlc0NsZWFyZWRNZXNzYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UobXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgIT09IG51bGwpIGNsZWFyVGltZW91dCh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lcik7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbXNnO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbnVsbDtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9LCA0MDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UHJlZmVyZW5jZXMoc2F2ZWQ6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXNhdmVkKSByZXR1cm47XG4gICAgLy8gUmVjaGVyY2hlXG4gICAgaWYgKHNhdmVkLnNlYXJjaCkgdGhpcy5zZWFyY2hRdWVyeSA9IHNhdmVkLnNlYXJjaDtcbiAgICAvLyBMYXJnZXVycyBjb2xvbm5lc1xuICAgIGlmIChzYXZlZC5jb2x1bW5XaWR0aHMpIHRoaXMuX2NvbHVtbldpZHRocyA9IHsgLi4uc2F2ZWQuY29sdW1uV2lkdGhzIH07XG4gICAgLy8gR3JvdXAgYnlcbiAgICBpZiAoc2F2ZWQuZ3JvdXBCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9vcmdhbml6ZXIuc2V0R3JvdXBCeShzYXZlZC5ncm91cEJ5KTtcbiAgICAgIGlmIChzYXZlZC5ncm91cEJ5KSB7XG4gICAgICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZCh0cnVlKTtcbiAgICAgICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyDDiXRhdCBwYW5uZWF1IHNsaWNlXG4gICAgaWYgKHNhdmVkLnNsaWNlUGFuZWxDb2xsYXBzZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCA9IHNhdmVkLnNsaWNlUGFuZWxDb2xsYXBzZWQ7XG4gICAgLy8gU2xpY2VzIHN0YXRpcXVlcyBjYWNow6llcyDigJQgb24gdXRpbGlzZSBsYSB2YWxldXIgZXhhY3RlIHNhdXZlZ2FyZMOpZSAocGFzIGxlcyBkZWZhdWx0cyBkZSBjb25maWcpXG4gICAgaWYgKHNhdmVkLmhpZGRlblNsaWNlS2V5cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0KHNhdmVkLmhpZGRlblNsaWNlS2V5cyk7XG4gICAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlSGlkZGVuU3RhdGljS2V5cyh0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMpO1xuICAgIH1cbiAgICAvLyBDb2xvbm5lcyB2aXNpYmxlcyArIG9yZHJlIOKAlCByZWNvbnN0cnVpdCBhY3RpdmVGaWVsZHMgZW4gdW5lIHNldWxlIHBhc3NlLlxuICAgIC8vIE9uIHBhcnQgZGUgc2F2ZWQuY29sdW1uT3JkZXIgKG9yZHJlIHNhdXZlZ2FyZMOpKSBzaSBkaXNwb25pYmxlLCBzaW5vbiBzYXZlZC52aXNpYmxlQ29sdW1ucy5cbiAgICAvLyBDZWxhIGfDqHJlIMOgIGxhIGZvaXMgOiBjb2xvbm5lcyBvcHRpb25uZWxsZXMgYWpvdXTDqWVzLCBjb2xvbm5lcyByZXRpcsOpZXMsIGV0IHLDqW9yZG9ubmFuY2VtZW50LlxuICAgIGNvbnN0IHRhcmdldEtleXMgPSBzYXZlZC5jb2x1bW5PcmRlciA/PyBzYXZlZC52aXNpYmxlQ29sdW1ucztcbiAgICBpZiAodGFyZ2V0S2V5cz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhbGxCeUtleSA9IG5ldyBNYXAoKHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXSkubWFwKGMgPT4gW2Mua2V5LCBjXSkpO1xuICAgICAgLy8gQ29sb25uZXMgZGFucyBsJ29yZHJlIHNhdXZlZ2FyZMOpIChvbiBuZSBnYXJkZSBxdWUgY2VsbGVzIGNvbm51ZXMgZGUgbGEgY29uZmlnKVxuICAgICAgY29uc3Qgb3JkZXJlZCA9IHRhcmdldEtleXNcbiAgICAgICAgLm1hcChrZXkgPT4gYWxsQnlLZXkuZ2V0KGtleSkpXG4gICAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4gPT4gYyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIENvbG9ubmVzIGFjdGl2ZXMgYWN0dWVsbGxlbWVudCBub24gcHLDqXNlbnRlcyBkYW5zIHRhcmdldEtleXMgKG5vbi1vcHRpb25hbCBwYXNzw6llcyBzb3VzIHNpbGVuY2UpXG4gICAgICAvLyDihpIgb24gbGVzIGV4Y2x1dCA6IGwndXRpbGlzYXRldXIgYXZhaXQgZXhwbGljaXRlbWVudCBjaG9pc2kgY2Ugc291cy1lbnNlbWJsZVxuICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9vcmdhbml6ZXIuc2V0QWN0aXZlRmllbGRzKG9yZGVyZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBEeW5hbWljIHNsaWNlcyDigJQgZGlmZsOpcsOpIDogc2xpY2VQYW5lbFJlZiBwYXMgZW5jb3JlIGRpc3BvbmlibGUgYXUgbW9tZW50IGRlIG5nT25DaGFuZ2VzXG4gICAgaWYgKHNhdmVkLmR5bmFtaWNTbGljZUtleXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMgPSBzYXZlZC5keW5hbWljU2xpY2VLZXlzO1xuICAgIH1cbiAgICAvLyBGaWx0cmVzIGFjdGlmcyBkdSBzbGljZSBwYW5lbFxuICAgIC8vIEZpbHRyZXMgYWN0aWZzIGR1IHNsaWNlIHBhbmVsIOKAlCB0b3Vqb3VycyBzdG9ja8OpcyBlbiBwZW5kaW5nIDpcbiAgICAvLyBhcHBsaXF1w6lzIHBhciBfYXBwbHlQZW5kaW5nRHluYW1pY1NsaWNlS2V5cyAoc2kgZHluYW1pYyBzbGljZXMpIG91XG4gICAgLy8gcGFyIF9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCAocXVhbmQgbGVzIGRvbm7DqWVzIGFycml2ZW50IGV0IHJlbmRlbnQgbGUgcGFuZWwgdmlzaWJsZSlcbiAgICBpZiAoc2F2ZWQuc2xpY2VGaWx0ZXJzICYmIE9iamVjdC5rZXlzKHNhdmVkLnNsaWNlRmlsdGVycykubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gc2F2ZWQuc2xpY2VGaWx0ZXJzO1xuICAgIH1cbiAgfVxuXG4gIGNhblJlbW92ZUNvbHVtbihjb2x1bW46IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fb3JnYW5pemVyLmFsbG93RmllbGRSZW1vdmFsICYmXG4gICAgICBjb2x1bW4ucmVtb3ZhYmxlICE9PSBmYWxzZSAmJlxuICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubGVuZ3RoID4gMVxuICAgICk7XG4gIH1cblxuICBpc0NlbGxFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PSBudWxsO1xuICB9XG5cbiAgYXNUaXRsZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBFeHBvcnQgQ1NWXG5cbiAgb25FeHBvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5fZXhwb3J0LmV4cG9ydCgpO1xuICB9XG5cbiAgLyoqIENhcHR1cmUgbGVzIGxpZ25lcyBldCBsJ8OpdGF0IGFjdHVlbGxlbWVudCB2aXNpYmxlcyBkYW5zIHVuIHNuYXBzaG90IGF1dG9ub21lLiAqL1xuICBjcmVhdGVWaXN1YWxTbmFwc2hvdChsYWJlbCA9IHRoaXMudGl0bGUgfHwgJ1RhYmxlYXUnKTogVmlzdWFsU25hcHNob3REcmFmdCB7XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGNvbnRhaW5zRnVuY3Rpb24odGhpcy5yZXNvbHZlZENvbmZpZykpIHtcbiAgICAgIHdhcm5pbmdzLnB1c2goJ0NlcnRhaW5lcyBmb25jdGlvbnMgZGUgY29uZmlndXJhdGlvbiBuZSBzb250IHBhcyB0cmFuc3BvcnRhYmxlcy4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICBsYWJlbCxcbiAgICAgIGNvbmZpZzoganNvbkNsb25lKHtcbiAgICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICAgIGNvbHVtbnM6IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucz8ubWFwKGNvbHVtbiA9PiBzZXJpYWxpemFibGVDb2x1bW4oY29sdW1uKSksXG4gICAgICAgIHNlYXJjaDogdGhpcy5yZXNvbHZlZENvbmZpZy5zZWFyY2gsXG4gICAgICAgIHBhZ2luYXRpb246IHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbixcbiAgICAgIH0pLFxuICAgICAgc3RhdGU6IGpzb25DbG9uZSh7XG4gICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hRdWVyeSxcbiAgICAgICAgZ3JvdXBCeTogdGhpcy5hY3RpdmVHcm91cEJ5S2V5LFxuICAgICAgICBjb2x1bW5PcmRlcjogdGhpcy5hY3RpdmVGaWVsZHMubWFwKGNvbHVtbiA9PiBjb2x1bW4ua2V5KSxcbiAgICAgICAgdmlzaWJsZUNvbHVtbnM6IHRoaXMuYWN0aXZlRmllbGRzLm1hcChjb2x1bW4gPT4gY29sdW1uLmtleSksXG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplID8/IHRoaXMucGFnZVNpemUsXG4gICAgICB9KSxcbiAgICAgIGRhdGE6IGpzb25DbG9uZSh0aGlzLl9hbGxGaWx0ZXJlZFJvd3MpLFxuICAgICAgd2FybmluZ3MsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBcHBsaXF1ZSBsJ8OpdGF0IGNvbXBhdGlibGUgZXQgcmV0b3VybmUgbGVzIGRvbm7DqWVzIMOgIGZvdXJuaXIgYXUgY29tcG9zYW50IGNpYmxlLiAqL1xuICBhcHBseVZpc3VhbFNuYXBzaG90KHNuYXBzaG90OiBWaXN1YWxTbmFwc2hvdCk6IFZpc3VhbFNuYXBzaG90QXBwbHlSZXN1bHQge1xuICAgIGlmIChzbmFwc2hvdC50eXBlICE9PSAndGFibGUnKSB7XG4gICAgICByZXR1cm4geyBhcHBsaWVkOiBmYWxzZSwgcmVzdG9yZWQ6IFtdLCBza2lwcGVkOiBbJ3R5cGUnXSwgd2FybmluZ3M6IFsnTGUgc25hcHNob3QgblxcJ2VzdCBwYXMgdW4gdGFibGVhdS4nXSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gc25hcHNob3Quc3RhdGUgYXMge1xuICAgICAgc2VhcmNoPzogc3RyaW5nO1xuICAgICAgZ3JvdXBCeT86IHN0cmluZyB8IG51bGw7XG4gICAgICB2aXNpYmxlQ29sdW1ucz86IHN0cmluZ1tdO1xuICAgICAgY29sdW1uT3JkZXI/OiBzdHJpbmdbXTtcbiAgICAgIGNvbHVtbldpZHRocz86IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gICAgfTtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBuZXcgTWFwKCh0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW10pLm1hcChjb2x1bW4gPT4gW2NvbHVtbi5rZXksIGNvbHVtbl0pKTtcbiAgICBjb25zdCByZXF1ZXN0ZWRLZXlzID0gc3RhdGUuY29sdW1uT3JkZXIgPz8gc3RhdGUudmlzaWJsZUNvbHVtbnMgPz8gW107XG4gICAgY29uc3QgY29tcGF0aWJsZUtleXMgPSByZXF1ZXN0ZWRLZXlzLmZpbHRlcihrZXkgPT4gYXZhaWxhYmxlLmhhcyhrZXkpKTtcbiAgICBjb25zdCBza2lwcGVkID0gcmVxdWVzdGVkS2V5cy5maWx0ZXIoa2V5ID0+ICFhdmFpbGFibGUuaGFzKGtleSkpO1xuICAgIGNvbnN0IHJlc3RvcmVkOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKGNvbXBhdGlibGVLZXlzLmxlbmd0aCkge1xuICAgICAgdGhpcy5fb3JnYW5pemVyLnNldEFjdGl2ZUZpZWxkcyhjb21wYXRpYmxlS2V5cy5tYXAoa2V5ID0+IGF2YWlsYWJsZS5nZXQoa2V5KSEpKTtcbiAgICAgIHJlc3RvcmVkLnB1c2goJ2NvbHVtbnMnKTtcbiAgICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHN0YXRlLnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSBzdGF0ZS5zZWFyY2g7XG4gICAgICByZXN0b3JlZC5wdXNoKCdzZWFyY2gnKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmdyb3VwQnkgPT09IG51bGwgfHwgdHlwZW9mIHN0YXRlLmdyb3VwQnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBncm91cEtleSA9IHN0YXRlLmdyb3VwQnkgJiYgYXZhaWxhYmxlLmhhcyhzdGF0ZS5ncm91cEJ5KSA/IHN0YXRlLmdyb3VwQnkgOiBudWxsO1xuICAgICAgdGhpcy5fb3JnYW5pemVyLnNldEdyb3VwQnkoZ3JvdXBLZXkpO1xuICAgICAgcmVzdG9yZWQucHVzaCgnZ3JvdXBCeScpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29sdW1uV2lkdGhzKSB7XG4gICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnN0YXRlLmNvbHVtbldpZHRocyB9O1xuICAgICAgcmVzdG9yZWQucHVzaCgnY29sdW1uV2lkdGhzJyk7XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHJldHVybiB7XG4gICAgICBhcHBsaWVkOiB0cnVlLFxuICAgICAgcmVzdG9yZWQsXG4gICAgICBza2lwcGVkLFxuICAgICAgd2FybmluZ3M6IHNuYXBzaG90Lndhcm5pbmdzID8/IFtdLFxuICAgICAgZGF0YToganNvbkNsb25lKHNuYXBzaG90LmRhdGEpLFxuICAgIH07XG4gIH1cblxuICAvLyDilIDilIAgUGlwZWxpbmUgZGUgZG9ubsOpZXMgKHByaXbDqSlcblxuICBwcml2YXRlIHJlZnJlc2hWaWV3TW9kZWwoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzb2x2ZWREYXRhID0gdGhpcy5yZXNvbHZlRGF0YSgpO1xuICAgIHRoaXMucmVzb2x2ZWRDb25maWcgPSB0aGlzLmJ1aWxkRWZmZWN0aXZlQ29uZmlnKCk7XG4gICAgdGhpcy5fY29sdW1uTWFwID0gbmV3IE1hcCgodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zIHx8IFtdKS5tYXAoYyA9PiBbYy5rZXksIGNdKSk7XG5cbiAgICAvLyDilIDilIAgSW5pdGlhbGlzZXIgbGUgZ2VzdGlvbm5haXJlIGRlIHByw6lmw6lyZW5jZXMgc2kgbCdvcHRpb24gZXN0IGFjdGl2w6llXG4gICAgY29uc3QgcHJlZnNJZCA9IHRoaXMucmVzb2x2ZWRDb25maWcucHJlZmVyZW5jZXM/LmVuYWJsZWRcbiAgICAgID8gdGhpcy5yZXNvbHZlZENvbmZpZy5wcmVmZXJlbmNlcy50YWJsZUlkXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgY3VycmVudElkID0gcHJlZnNJZCA/PyBudWxsO1xuICAgIC8vIFByw6lmw6lyZW5jZXMgw6AgYXBwbGlxdWVyIGFwcsOocyBfb3JnYW5pemVyLnVwZGF0ZSgpIChxdWFuZCBhY3RpdmVGaWVsZHMgZXN0IGTDqWrDoCBwZXVwbMOpKVxuICAgIGxldCBwZW5kaW5nUHJlZnM6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChjdXJyZW50SWQgJiYgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyPy5rZXkgIT09ICgnanF0X3ByZWZzXycgKyBjdXJyZW50SWQpKSB7XG4gICAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIgPSBuZXcgVGFibGVQcmVmZXJlbmNlc01hbmFnZXIoY3VycmVudElkKTtcbiAgICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLmhhc1NhdmVkKCk7XG4gICAgICBwZW5kaW5nUHJlZnMgPSB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIubG9hZCgpO1xuICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRJZCkge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyID0gbnVsbDtcbiAgICAgIHRoaXMuX2hhc1NhdmVkQ29uZmlnID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRMOpbMOoZ3VlIMOgIGxhIGZhY2FkZSA6IG1pc2Ugw6Agam91ciBkZSBsJ8OpdGF0IFZpZXcgKGNvbG9ubmVzLCBncm91cEJ5IG1ldGEsIHNsaWNlQnkgbWV0YSlcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlKHtcbiAgICAgIGNvbmZpZzogdGhpcy5yZXNvbHZlZENvbmZpZy52aWV3LFxuICAgICAgZmllbGRzOiB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW10sXG4gICAgICBzbGljZUNvbmZpZ3M6IHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzID8/IFtdLFxuICAgICAgZGVmYXVsdEdyb3VwQnk6IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdEdyb3VwQnksXG4gICAgfSk7XG5cbiAgICBpZiAoIXBlbmRpbmdQcmVmcyAmJiAhdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkICYmICF0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS51c2VyQ3VzdG9taXplZCAmJiB0aGlzLl9vcmdhbml6ZXIuZ3JvdXBCeS5hY3RpdmVLZXkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZCh0cnVlKTtcbiAgICAgIHRoaXMuX2dyb3VwQnkucmVzZXQoKTtcbiAgICAgIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRHcm91cFBhZ2VTaXplKCk7XG4gICAgfVxuXG4gICAgLy8gU3luY2hyb25pc2UgbGEgcHJvcHJpw6l0w6kgc3RhYmxlICjDqXZpdGUgTkcwMTAwIOKAlCBsYSBmYWNhZGUgZXN0IHNvdXJjZSBkZSB2w6lyaXTDqSlcbiAgICB0aGlzLmFjdGl2ZUZpZWxkcyA9IHRoaXMuX29yZ2FuaXplci5maWVsZHMuYWN0aXZlRmllbGRzO1xuXG4gICAgdGhpcy5yZW5kZXJlZENvbHVtbnMgPSB0aGlzLmFjdGl2ZUZpZWxkcy5tYXAoYyA9PiBjLmtleSk7XG5cbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplIHx8IHRoaXMucmVzb2x2ZVBhZ2VTaXplKCk7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZU9wdGlvbnMoKTtcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9uc0dyb3VwQnkgPSB0aGlzLnJlc29sdmVQYWdlU2l6ZU9wdGlvbnNHcm91cEJ5KCk7XG4gICAgaWYgKHRoaXMuZ3JvdXBQYWdlU2l6ZSAhPT0gMCAmJiAhdGhpcy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5LmluY2x1ZGVzKHRoaXMuZ3JvdXBQYWdlU2l6ZSkpIHtcbiAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRHcm91cFBhZ2VTaXplKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hdHRhY2hQYWdpbmF0b3IoKTtcbiAgICB0aGlzLmF0dGFjaFNvcnQoKTtcblxuICAgIC8vIFLDqWluaXRpYWxpc2UgX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyBzZXVsZW1lbnQgc2kgbGVzIGNsw6lzIGhpZGRlbiBkZSBsYSBjb25maWcgb250IHZyYWltZW50IGNoYW5nw6lcbiAgICAvLyBFVCBxdSdpbCBuJ3kgYSBwYXMgZGUgcHLDqWbDqXJlbmNlcyBzYXV2ZWdhcmTDqWVzIChxdWkgZ8OpcmVyb250IGhpZGRlblNsaWNlS2V5cyBlbGxlcy1tw6ptZXMpLlxuICAgIGNvbnN0IG5ld0NvbmZpZ0hpZGRlbiA9IG5ldyBTZXQ8c3RyaW5nPihcbiAgICAgICh0aGlzLnJlc29sdmVkQ29uZmlnLnNsaWNlcyA/PyBbXSkuZmlsdGVyKHMgPT4gcy5oaWRkZW4gJiYgcy5jb2x1bW5LZXkpLm1hcChzID0+IHMuY29sdW1uS2V5ISlcbiAgICApO1xuICAgIGlmICghVGFibGVDb21wb25lbnQuX3NldHNFcXVhbChuZXdDb25maWdIaWRkZW4sIHRoaXMuX2NvbmZpZ0hpZGRlbktleXMpKSB7XG4gICAgICB0aGlzLl9jb25maWdIaWRkZW5LZXlzID0gbmV3Q29uZmlnSGlkZGVuO1xuICAgICAgLy8gTifDqWNyYXNlciBfc3RhdGljU2xpY2VIaWRkZW5LZXlzIHF1ZSBzaSBvbiBuJ2VzdCBQQVMgZW4gdHJhaW4gZCdhcHBsaXF1ZXIgZGVzIHByZWZzXG4gICAgICAvLyAocGVuZGluZ1ByZWZzIGxlcyBnw6hyZXJhIGx1aS1tw6ptZSB2aWEgX2FwcGx5UHJlZmVyZW5jZXMg4oaSIGhpZGRlblNsaWNlS2V5cylcbiAgICAgIGlmICghcGVuZGluZ1ByZWZzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5ldyBTZXQobmV3Q29uZmlnSGlkZGVuKTtcbiAgICAgICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZUhpZGRlblN0YXRpY0tleXModGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBsaXF1ZSBsZXMgcHLDqWbDqXJlbmNlcyBJQ0ksIEFQUsOIUyBfb3JnYW5pemVyLnVwZGF0ZSgpIEVUIGFwcsOocyBfY29uZmlnSGlkZGVuS2V5cyBtaXMgw6Agam91cixcbiAgICAvLyBtYWlzIGF2YW50IF9jb21wdXRlU2xpY2VDb25maWdzKCkgcG91ciBxdWUgaGlkZGVuU2xpY2VLZXlzIHNvaXQgZMOpasOgIHJlc3RhdXLDqS5cbiAgICBpZiAocGVuZGluZ1ByZWZzKSB7XG4gICAgICB0aGlzLl9hcHBseVByZWZlcmVuY2VzKHBlbmRpbmdQcmVmcyk7XG4gICAgfVxuXG4gICAgLy8gUHJvcHJpw6l0w6lzIHN0YWJsZXMgcG91ciBsZXMgYmluZGluZ3MgZHUgdGVtcGxhdGVcbiAgICAvLyBPbiByZWNhbGN1bGUgX3NsaWNlQ29uZmlncyBlbiByZWZsw6l0YW50IGwnw6l0YXQgY291cmFudCBkZXMgc2xpY2VzIGNhY2jDqWVzLFxuICAgIC8vIHBvdXIgcXVlIFNsaWNlUGFuZWxDb21wb25lbnQubmdPbkluaXQgcmXDp29pdmUgbGEgYm9ubmUgdmFsZXVyIGRlIGBoaWRkZW5gXG4gICAgLy8gbcOqbWUgcXVhbmQgbGUgY29tcG9zYW50IGVzdCBjcsOpw6kgcG91ciBsYSAxw6hyZSBmb2lzIGFwcsOocyB1biB0b2dnbGUuXG4gICAgdGhpcy5fc2xpY2VDb25maWdzID0gdGhpcy5fY29tcHV0ZVNsaWNlQ29uZmlncygpO1xuICAgIHRoaXMuX3NsaWNlQ29sdW1ucyA9IHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXTtcbiAgICB0aGlzLl9zbGljZURhdGEgPSB0aGlzLl9yZXNvbHZlZERhdGE7XG4gICAgdGhpcy5fc2xpY2VTaG93VG9nZ2xlID0gdGhpcy5yZXNvbHZlZENvbmZpZy5lbmFibGVTbGljZVRvZ2dsZSAhPT0gZmFsc2U7XG4gICAgdGhpcy5fcmVjb21wdXRlU2hvd1NsaWNlUGFuZWwoKTtcbiAgICBpZiAoIXRoaXMuX2FjdGl2ZVNvcnQuYWN0aXZlICYmIHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQpIHtcbiAgICAgIHRoaXMuX21hdFNvcnRBY3RpdmUgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRTb3J0LmFjdGl2ZTtcbiAgICAgIHRoaXMuX21hdFNvcnREaXJlY3Rpb24gPSB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRTb3J0LmRpcmVjdGlvbjtcbiAgICB9XG4gICAgdGhpcy5fYnVpbGRTbGljZUJ5TWVudUl0ZW1zKCk7XG5cbiAgICB0aGlzLl9zY2hlZHVsZVJlbmRlcigpO1xuICB9XG5cbiAgLyoqIFJldG91cm5lIHVuaXF1ZW1lbnQgbGVzIHNsaWNlcyB2aXNpYmxlcyAobm9uIGNhY2jDqWVzIHBhciBfc3RhdGljU2xpY2VIaWRkZW5LZXlzKS5cbiAgICogTGUgU2xpY2VQYW5lbENvbXBvbmVudCBhZmZpY2hlIHRvdXQgY2UgcXUnaWwgcmXDp29pdCDigJQgYydlc3QgaWNpIHF1ZSBzZSBmYWl0IGxlIGZpbHRyYWdlLiAqL1xuICBwcml2YXRlIF9jb21wdXRlU2xpY2VDb25maWdzKCk6IFNsaWNlQ29uZmlnPFQ+W10ge1xuICAgIHJldHVybiAodGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZXMgPz8gW10pLmZpbHRlcihcbiAgICAgIHMgPT4gIXMuY29sdW1uS2V5IHx8ICF0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMuaGFzKHMuY29sdW1uS2V5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfc2V0c0VxdWFsKGE6IFNldDxzdHJpbmc+LCBiOiBTZXQ8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgdiBvZiBhKSBpZiAoIWIuaGFzKHYpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZFNsaWNlQnlNZW51SXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGljU2xpY2VNYXAgPSBuZXcgTWFwKHRoaXMuX3N0YXRpY1NsaWNlc0Zvck1lbnUubWFwKHMgPT4gW3Mua2V5LCBzXSkpO1xuICAgIGNvbnN0IGR5bmFtaWNTbGljZVNldCA9IG5ldyBTZXQodGhpcy5fYWxsRHluYW1pY1NsaWNlQ29sdW1ucy5tYXAoYyA9PiBjLmtleSkpO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBpdGVtczogQXJyYXk8eyBpc1N0YXRpYzogYm9vbGVhbjsga2V5OiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IGljb24/OiBzdHJpbmc7IGNvbD86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4gfT4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW10pIHtcbiAgICAgIGlmIChzZWVuLmhhcyhjb2wua2V5KSkgY29udGludWU7XG4gICAgICBpZiAoc3RhdGljU2xpY2VNYXAuaGFzKGNvbC5rZXkpKSB7XG4gICAgICAgIGNvbnN0IHMgPSBzdGF0aWNTbGljZU1hcC5nZXQoY29sLmtleSkhO1xuICAgICAgICBpdGVtcy5wdXNoKHsgaXNTdGF0aWM6IHRydWUsIGtleTogcy5rZXksIHRpdGxlOiBzLnRpdGxlLCBpY29uOiBzLmljb24gfSk7XG4gICAgICAgIHNlZW4uYWRkKGNvbC5rZXkpO1xuICAgICAgfSBlbHNlIGlmIChkeW5hbWljU2xpY2VTZXQuaGFzKGNvbC5rZXkpKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBpc1N0YXRpYzogZmFsc2UsIGtleTogY29sLmtleSwgdGl0bGU6IHRoaXMuY29sTGFiZWwoY29sKSwgaWNvbjogY29sLmljb24sIGNvbCB9KTtcbiAgICAgICAgc2Vlbi5hZGQoY29sLmtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLl9zdGF0aWNTbGljZXNGb3JNZW51KSB7XG4gICAgICBpZiAoIXNlZW4uaGFzKHMua2V5KSkge1xuICAgICAgICBpdGVtcy5wdXNoKHsgaXNTdGF0aWM6IHRydWUsIGtleTogcy5rZXksIHRpdGxlOiBzLnRpdGxlLCBpY29uOiBzLmljb24gfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3NsaWNlQnlNZW51SXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7IC8vIGxlcyBzbGljZXMgb250IGNoYW5nw6lcbiAgfVxuXG4gIGdldCBzbGljZUJ5TWVudUl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fc2xpY2VCeU1lbnVJdGVtczsgfVxuXG4gIG9uU2xpY2VNZW51SXRlbUNsaWNrKGl0ZW06IHsgaXNTdGF0aWM6IGJvb2xlYW47IGtleTogc3RyaW5nOyBjb2w/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+IH0pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5pc1N0YXRpYykge1xuICAgICAgdGhpcy50b2dnbGVTdGF0aWNTbGljZShpdGVtLmtleSk7XG4gICAgfSBlbHNlIGlmIChpdGVtLmNvbCkge1xuICAgICAgdGhpcy50b2dnbGVEeW5hbWljU2xpY2UoaXRlbS5jb2wpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2xpY2VNZW51SXRlbUFjdGl2ZShpdGVtOiB7IGlzU3RhdGljOiBib29sZWFuOyBrZXk6IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGl0ZW0uaXNTdGF0aWMgPyB0aGlzLmlzU3RhdGljU2xpY2VWaXNpYmxlKGl0ZW0ua2V5KSA6IHRoaXMuaXNEeW5hbWljU2xpY2VBY3RpdmUoaXRlbS5rZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2NoZWR1bGVSZW5kZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BlbmRpbmdSZW5kZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wZW5kaW5nUmVuZGVyKTtcbiAgICAgIHRoaXMuX3BlbmRpbmdSZW5kZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5fcGVuZGluZ1JlbmRlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9wZW5kaW5nUmVuZGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB0aGlzLl9leGVjdXRlUmVuZGVyKCkpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9leGVjdXRlUmVuZGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhdGVnb3J5Um93cyA9IHRoaXMuZ2V0Q2F0ZWdvcnlGaWx0ZXJlZERhdGEoKTtcbiAgICBpZiAodGhpcy5hY3RpdmVHcm91cEJ5S2V5KSB7XG4gICAgICAvLyBFbiBtb2RlIGdyb3VwQnksIHByb2plY3RSb3dzIGfDqHJlIHRvdXQgbGUgdHJpIGludGVybmVtZW50IOKAlCBwYXMgZGUgc29ydCBnbG9iYWwgaW51dGlsZVxuICAgICAgdGhpcy5fYWxsRmlsdGVyZWRSb3dzID0gY2F0ZWdvcnlSb3dzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wYXJlRm4gPSB0aGlzLl9idWlsZFNvcnRDb21wYXJhdG9yKCk7XG4gICAgICB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MgPSBjb21wYXJlRm4gPyBbLi4uY2F0ZWdvcnlSb3dzXS5zb3J0KGNvbXBhcmVGbikgOiBjYXRlZ29yeVJvd3M7XG4gICAgfVxuXG4gICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgcGFnaW5hdG9yIGF2ZWMgbGUgbm91dmVhdSB0b3RhbFxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgY29uc3Qgc2F2ZWRJbmRleCA9IHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID8/IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleDtcbiAgICAgIGNvbnN0IG1heFBhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwodGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aCAvIHRoaXMucGFnZVNpemUpIC0gMSk7XG4gICAgICB0aGlzLnBhZ2luYXRvci5sZW5ndGggPSB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MubGVuZ3RoO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gTWF0aC5taW4oc2F2ZWRJbmRleCwgbWF4UGFnZSk7XG4gICAgICB0aGlzLl9wcmVzZXJ2ZVBhZ2VJbmRleCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvamVjdEN1cnJlbnRQYWdlKCk7XG4gICAgLy8gZGV0ZWN0Q2hhbmdlcygpIGF1IGxpZXUgZGUgbWFya0ZvckNoZWNrKCkgOiBtZXQgw6Agam91ciB1bmlxdWVtZW50IENFIGNvbXBvc2FudFxuICAgIC8vIHNhbnMgZMOpY2xlbmNoZXIgdW4gY3ljbGUgQ0QgZ2xvYmFsIHF1aSBwcm92b3F1ZXJhaXQgTkcwMTAwIGRhbnMgbGVzIHBhcmVudHMuXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb2plY3RDdXJyZW50UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVHcm91cEJ5S2V5KSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5wcm9qZWN0Um93cyh0aGlzLl9hbGxGaWx0ZXJlZFJvd3MpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdG9yPy5wYWdlSW5kZXggPz8gMDtcbiAgICBjb25zdCBzdGFydCA9IHBhZ2VJbmRleCAqIHRoaXMucGFnZVNpemU7XG4gICAgY29uc3QgcGFnZVJvd3MgPSB0aGlzLl9hbGxGaWx0ZXJlZFJvd3Muc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZSk7XG5cbiAgICBjb25zdCBwcm9qZWN0ZWQ6IGFueVtdID0gW107XG4gICAgcGFnZVJvd3MuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzdGFydCArIGk7XG4gICAgICBjb25zdCBwOiBhbnkgPSB7IFtST1dfUkFXX0tFWV06IHJvdywgW1JPV19JTkRFWF9LRVldOiBpZHggfTtcbiAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBwW2NvbC5rZXldID0gdGhpcy5yZXNvbHZlQ2VsbFZhbHVlKGNvbCwgcm93LCBpZHgpO1xuICAgICAgfSk7XG4gICAgICBwcm9qZWN0ZWQucHVzaChwKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5kYXRhID0gcHJvamVjdGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEVmZmVjdGl2ZUNvbmZpZygpOiBUYWJsZVByb3ZpZGVyPFQ+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5fcmVzb2x2ZWREYXRhO1xuXG4gICAgY29uc3QgY29sdW1ucyA9XG4gICAgICBjb25maWcuY29sdW1ucyB8fFxuICAgICAgdGhpcy5jb2x1bW5zQ29uZmlnIHx8XG4gICAgICB0aGlzLnJlc29sdmVDb2x1bW5zRnJvbUNvbXBhdChyb3dzKTtcblxuICAgIC8vIE1vZGUgSFRNTCA6IFt2aWV3XSBwcmVuZCBsZSBkZXNzdXMgc3VyIGNvbmZpZy52aWV3IHNpIGZvdXJuaSAoUGhhc2UgMykuXG4gICAgY29uc3QgdmlldyA9IHRoaXMudmlldyA/PyBjb25maWcudmlldztcblxuICAgIGNvbnN0IGF1dG9UYWJsZUlkID0gY29uZmlnLnByZWZlcmVuY2VzPy50YWJsZUlkIHx8IFRhYmxlQ29tcG9uZW50Ll9oYXNoQ29sdW1ucygoY29sdW1ucyB8fCBbXSkubWFwKGMgPT4gYy5rZXkpKTtcbiAgICBjb25zdCBleHBvcnRDb25maWc6IFRhYmxlRXhwb3J0Q29uZmlnPFQ+ID0ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGZpbGVuYW1lOiBhdXRvVGFibGVJZCxcbiAgICAgIC4uLmNvbmZpZy5leHBvcnQsXG4gICAgfTtcblxuICAgIGNvbnN0IHByZWZzQ29uZmlnOiBUYWJsZVByZWZlcmVuY2VzQ29uZmlnID0ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHRhYmxlSWQ6IGF1dG9UYWJsZUlkLFxuICAgICAgLi4uY29uZmlnLnByZWZlcmVuY2VzLFxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHZpZXcsXG4gICAgICBzbGljZXM6IGNvbmZpZy5zbGljZXMgfHwgW10sXG4gICAgICBlbmFibGVTbGljZVRvZ2dsZTogY29uZmlnLmVuYWJsZVNsaWNlVG9nZ2xlID8/IHRydWUsXG4gICAgICBleHBvcnQ6IGV4cG9ydENvbmZpZyxcbiAgICAgIHByZWZlcmVuY2VzOiBwcmVmc0NvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ1NlYXJjaFJlc2V0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNsZWFyVG9rZW4gPSB0aGlzLnJlc29sdmVkQ29uZmlnLmNsZWFyU2VhcmNoSW5wdXQ7XG4gICAgY29uc3Qgc2hvdWxkQ2xlYXIgPSAhIWNsZWFyVG9rZW4gJiYgY2xlYXJUb2tlbiAhPT0gdGhpcy5fbGFzdENvbmZpZ0NsZWFyU2VhcmNoSW5wdXQ7XG5cbiAgICB0aGlzLl9sYXN0Q29uZmlnQ2xlYXJTZWFyY2hJbnB1dCA9IGNsZWFyVG9rZW47XG5cbiAgICBpZiAoIXNob3VsZENsZWFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgIHRoaXMub25TZWFyY2hDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsU2VhcmNoUXVlcnkoaXNGaXJzdENvbmZpZ0NoYW5nZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbFF1ZXJ5ID0gdGhpcy5yZXNvbHZlZENvbmZpZy5zZWFyY2g/LmluaXRpYWxRdWVyeTtcbiAgICBpZiAoaW5pdGlhbFF1ZXJ5ID09PSB0aGlzLl9sYXN0SW5pdGlhbFNlYXJjaFF1ZXJ5XG4gICAgICAmJiAodGhpcy5faW5pdGlhbFNlYXJjaFF1ZXJ5QXBwbGllZCB8fCAhaXNGaXJzdENvbmZpZ0NoYW5nZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0SW5pdGlhbFNlYXJjaFF1ZXJ5ID0gaW5pdGlhbFF1ZXJ5O1xuICAgIHRoaXMuX2luaXRpYWxTZWFyY2hRdWVyeUFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSBpbml0aWFsUXVlcnkgPz8gJyc7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2hhc2hDb2x1bW5zKGtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHIgPSBrZXlzLmpvaW4oJ3wnKTtcbiAgICBsZXQgaCA9IDB4ODExYzlkYzU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoID0gTWF0aC5pbXVsKGgsIDB4MDEwMDAxOTMpID4+PiAwO1xuICAgIH1cbiAgICByZXR1cm4gaC50b1N0cmluZygxNikucGFkU3RhcnQoOCwgJzAnKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURhdGEoKTogVFtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiBBcnJheS5pc0FycmF5KCh0aGlzLmRhdGFTb3VyY2UgYXMgYW55KS5kYXRhKSkge1xuICAgICAgcmV0dXJuICh0aGlzLmRhdGFTb3VyY2UgYXMgYW55KS5kYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtbnNGcm9tQ29tcGF0KHJvd3M6IFRbXSk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGhlYWRlcjogdGhpcy5jb2x1bW5MYWJlbHM/LltrZXldIHx8IGh1bWFuaXplS2V5KGtleSksXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RSb3cgPSByb3dzWzBdIGFzIGFueTtcbiAgICBpZiAoIWZpcnN0Um93IHx8IHR5cGVvZiBmaXJzdFJvdyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZmlyc3RSb3cpLm1hcCgoa2V5KSA9PiAoe1xuICAgICAga2V5LFxuICAgICAgaGVhZGVyOiB0aGlzLmNvbHVtbkxhYmVscz8uW2tleV0gfHwgaHVtYW5pemVLZXkoa2V5KSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhdGVnb3J5RmlsdGVyZWREYXRhKCk6IFRbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX3Jlc29sdmVkRGF0YTtcblxuICAgIGxldCBmaWx0ZXJlZCA9IGRhdGEuZmlsdGVyKHRoaXMuYWN0aXZlU2xpY2VGaWx0ZXIpO1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlYXJjaFF1ZXJ5Py50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIGNvbnN0IHJlc3RyaWN0ZWRLZXlzID0gdGhpcy5yZXNvbHZlZENvbmZpZy5zZWFyY2g/LnNlYXJjaENvbHVtbnM7XG4gICAgICBjb25zdCBzZWFyY2hDb2xzID0gcmVzdHJpY3RlZEtleXM/Lmxlbmd0aFxuICAgICAgICA/IFsuLi50aGlzLl9jb2x1bW5NYXAudmFsdWVzKCldLmZpbHRlcihjb2wgPT4gcmVzdHJpY3RlZEtleXMuaW5jbHVkZXMoY29sLmtleSkpXG4gICAgICAgIDogWy4uLnRoaXMuX2NvbHVtbk1hcC52YWx1ZXMoKV07XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocm93KSA9PlxuICAgICAgICBzZWFyY2hDb2xzLnNvbWUoKGNvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0RGlzcGxheVZhbHVlRm9yU2VhcmNoKGNvbCwgcm93KTtcbiAgICAgICAgICByZXR1cm4gdmFsICE9IG51bGwgJiYgU3RyaW5nKHZhbCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyZWQ7XG4gIH1cblxuICBwcml2YXRlIHByb2plY3RSb3dzKHJvd3M6IFRbXSk6IGFueVtdIHtcbiAgICBjb25zdCBncm91cEtleSA9IHRoaXMuYWN0aXZlR3JvdXBCeUtleTtcblxuICAgIGlmICghZ3JvdXBLZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWQ6IGFueSA9IHsgW1JPV19SQVdfS0VZXTogcm93LCBbUk9XX0lOREVYX0tFWV06IGluZGV4IH07XG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICAgIHByb2plY3RlZFtjb2wua2V5XSA9IHRoaXMucmVzb2x2ZUNlbGxWYWx1ZShjb2wsIHJvdywgaW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnB1c2gocHJvamVjdGVkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cENvbERlZiA9IHRoaXMuX2NvbHVtbk1hcC5nZXQoZ3JvdXBLZXkpO1xuICAgIGNvbnN0IGdyb3VwTGF6eVN0YXR1cyA9IGdyb3VwQ29sRGVmPy5sYXp5ID8gKHRoaXMuX2xhenlDb2x1bW5TdGF0dXMuZ2V0KGdyb3VwS2V5KSA/PyAnaWRsZScpIDogJ2xvYWRlZCc7XG5cbiAgICBpZiAoZ3JvdXBMYXp5U3RhdHVzICE9PSAnbG9hZGVkJykge1xuICAgICAgdGhpcy5fdG90YWxGaWx0ZXJlZENvdW50ID0gcm93cy5sZW5ndGg7XG4gICAgICByZXR1cm4gW3sgW0dST1VQX0hFQURFUl9NQVJLRVJdOiB0cnVlLCBbUk9XX0dST1VQX0tFWV06IEdST1VQX0tFWV9MQVpZX0xPQURJTkcsIFtST1dfR1JPVVBfQ09VTlRdOiByb3dzLmxlbmd0aCwgW1JPV19HUk9VUF9QQUdFXTogMCwgW1JPV19HUk9VUF9QQUdFX0NPVU5UXTogMSB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBlZmZlY3RpdmVTb3J0ID0gdGhpcy5fYWN0aXZlU29ydC5hY3RpdmUgJiYgdGhpcy5fYWN0aXZlU29ydC5kaXJlY3Rpb25cbiAgICAgID8gdGhpcy5fYWN0aXZlU29ydFxuICAgICAgOiB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRTb3J0ID8/IHsgYWN0aXZlOiAnJywgZGlyZWN0aW9uOiAnJyBhcyBjb25zdCB9O1xuXG4gICAgLy8gVsOpcmlmaWUgc2kgbGUgY2FjaGUgZXN0IGVuY29yZSB2YWxpZGUgKG3Dqm1lIHLDqWbDqXJlbmNlIGRlIHJvd3MgKyBtw6ptZSBwYXJhbcOodHJlcyBkZSB0cmkvZ3JvdXBlKVxuICAgIGNvbnN0IGNhY2hlVmFsaWQgPVxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5yb3dzID09PSByb3dzICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLmtleSA9PT0gZ3JvdXBLZXkgJiZcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUuc29ydE9yZGVyID09PSB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnRBY3RpdmUgPT09IChlZmZlY3RpdmVTb3J0LmFjdGl2ZSA/PyAnJykgJiZcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUuc29ydERpciA9PT0gKGVmZmVjdGl2ZVNvcnQuZGlyZWN0aW9uID8/ICcnKTtcblxuICAgIGxldCBncm91cE9yZGVyOiBzdHJpbmdbXTtcbiAgICBsZXQgZ3JvdXBNYXA6IE1hcDxzdHJpbmcsIFRbXT47XG5cbiAgICBpZiAoY2FjaGVWYWxpZCkge1xuICAgICAgZ3JvdXBPcmRlciA9IHRoaXMuX2dyb3VwQ2FjaGUhLm9yZGVyO1xuICAgICAgZ3JvdXBNYXAgPSB0aGlzLl9ncm91cENhY2hlIS5tYXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFByw6ktY2FsY3VsIGRlcyB2YWxldXJzIGRlIGdyb3VwZSBlbiB1biBzZXVsIHBhc3NhZ2UgKMOpdml0ZSBPKG4pIGZpbmQoKSBwYXIgY29tcGFyYWlzb24pXG4gICAgICBjb25zdCBncm91cFZhbHVlQ2FjaGUgPSBuZXcgTWFwPFQsIHN0cmluZz4oKTtcbiAgICAgIHJvd3MuZm9yRWFjaChyb3cgPT4gZ3JvdXBWYWx1ZUNhY2hlLnNldChyb3csIFN0cmluZyh0aGlzLmdldExhenlBd2FyZVZhbHVlKGdyb3VwS2V5LCByb3cpID8/ICcnKSkpO1xuXG4gICAgICAvLyBQcsOpLWNhbGN1bCBkZXMgdmFsZXVycyBkZSB0cmkgKMOpdml0ZSBPKG4gbG9nIG4pIMOXIGdldExhenlBd2FyZVZhbHVlIGRhbnMgbGUgY29tcGFyYXRldXIpXG4gICAgICBsZXQgZmFzdENvbXBhcmVGbjogKChhOiBULCBiOiBUKSA9PiBudW1iZXIpIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoZWZmZWN0aXZlU29ydC5hY3RpdmUgJiYgZWZmZWN0aXZlU29ydC5kaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc29ydFZhbHVlQ2FjaGUgPSBuZXcgTWFwPFQsIGFueT4oKTtcbiAgICAgICAgcm93cy5mb3JFYWNoKHJvdyA9PiBzb3J0VmFsdWVDYWNoZS5zZXQocm93LCB0aGlzLmdldExhenlBd2FyZVZhbHVlKGVmZmVjdGl2ZVNvcnQuYWN0aXZlLCByb3cpKSk7XG4gICAgICAgIGNvbnN0IGRpciA9IGVmZmVjdGl2ZVNvcnQuZGlyZWN0aW9uO1xuICAgICAgICBmYXN0Q29tcGFyZUZuID0gKGE6IFQsIGI6IFQpOiBudW1iZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhID0gc29ydFZhbHVlQ2FjaGUuZ2V0KGEpO1xuICAgICAgICAgIGNvbnN0IHZiID0gc29ydFZhbHVlQ2FjaGUuZ2V0KGIpO1xuICAgICAgICAgIGxldCBjbXAgPSAwO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmEgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNtcCA9IHZhIDwgdmIgPyAtMSA6IHZhID4gdmIgPyAxIDogMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2EgPSB2YSA9PSBudWxsID8gJycgOiBTdHJpbmcodmEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBzYiA9IHZiID09IG51bGwgPyAnJyA6IFN0cmluZyh2YikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNtcCA9IHNhIDwgc2IgPyAtMSA6IHNhID4gc2IgPyAxIDogMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyBjbXAgOiAtY21wO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0ZWQgPSBbLi4ucm93c10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCB2YSA9IGdyb3VwVmFsdWVDYWNoZS5nZXQoYSkhO1xuICAgICAgICBjb25zdCB2YiA9IGdyb3VwVmFsdWVDYWNoZS5nZXQoYikhO1xuICAgICAgICBjb25zdCBjbXAgPSB2YS5sb2NhbGVDb21wYXJlKHZiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyb3VwQnkuZ3JvdXBTb3J0T3JkZXIgPT09ICdkZXNjJyA/IC1jbXAgOiBjbXA7XG4gICAgICB9KTtcblxuICAgICAgZ3JvdXBPcmRlciA9IFtdO1xuICAgICAgZ3JvdXBNYXAgPSBuZXcgTWFwPHN0cmluZywgVFtdPigpO1xuICAgICAgc29ydGVkLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBjb25zdCBncm91cFZhbHVlID0gZ3JvdXBWYWx1ZUNhY2hlLmdldChyb3cpITtcbiAgICAgICAgaWYgKCFncm91cE1hcC5oYXMoZ3JvdXBWYWx1ZSkpIHtcbiAgICAgICAgICBncm91cE9yZGVyLnB1c2goZ3JvdXBWYWx1ZSk7XG4gICAgICAgICAgZ3JvdXBNYXAuc2V0KGdyb3VwVmFsdWUsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICBncm91cE1hcC5nZXQoZ3JvdXBWYWx1ZSkhLnB1c2gocm93KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUcmkgaW50cmEtZ3JvdXBlIHN0b2Nrw6kgZGFucyBsZSBjYWNoZSDigJQgw6l2aXRlIGxlIHJlLXRyaSBzdXIgY29sbGFwc2UvZXhwYW5kL3BhZ2luYXRpb25cbiAgICAgIGlmIChmYXN0Q29tcGFyZUZuKSB7XG4gICAgICAgIGNvbnN0IGZuID0gZmFzdENvbXBhcmVGbjtcbiAgICAgICAgZ3JvdXBNYXAuZm9yRWFjaCgoZ3JvdXBSb3dzLCBrZXkpID0+IHtcbiAgICAgICAgICBncm91cE1hcC5zZXQoa2V5LCBbLi4uZ3JvdXBSb3dzXS5zb3J0KGZuKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBNaXNlIGVuIGNhY2hlXG4gICAgICB0aGlzLl9ncm91cENhY2hlID0ge1xuICAgICAgICByb3dzLFxuICAgICAgICBrZXk6IGdyb3VwS2V5LFxuICAgICAgICBzb3J0T3JkZXI6IHRoaXMuX2dyb3VwQnkuZ3JvdXBTb3J0T3JkZXIsXG4gICAgICAgIHNvcnRBY3RpdmU6IGVmZmVjdGl2ZVNvcnQuYWN0aXZlID8/ICcnLFxuICAgICAgICBzb3J0RGlyOiBlZmZlY3RpdmVTb3J0LmRpcmVjdGlvbiA/PyAnJyxcbiAgICAgICAgb3JkZXI6IGdyb3VwT3JkZXIsXG4gICAgICAgIG1hcDogZ3JvdXBNYXAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX3RvdGFsRmlsdGVyZWRDb3VudCA9IHJvd3MubGVuZ3RoO1xuXG4gICAgLy8gUHJvdGVjdGlvbiBjb250cmUgbGVzIGpldXggZGUgZG9ubsOpZXMgw6AgdHJvcCBoYXV0ZSBjYXJkaW5hbGl0w6lcbiAgICBpZiAoZ3JvdXBPcmRlci5sZW5ndGggPiBUYWJsZUNvbXBvbmVudC5NQVhfR1JPVVBfQ09VTlQpIHtcbiAgICAgIHJldHVybiBbeyBbR1JPVVBfSEVBREVSX01BUktFUl06IHRydWUsIFtST1dfR1JPVVBfS0VZXTogR1JPVVBfS0VZX1RPT19NQU5ZLCBbUk9XX0dST1VQX0NPVU5UXTogZ3JvdXBPcmRlci5sZW5ndGgsIFtST1dfR1JPVVBfUEFHRV06IDAsIFtST1dfR1JPVVBfUEFHRV9DT1VOVF06IDEgfV07XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdyb3VwUGFnZVNpemU7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgZ3JvdXBPcmRlci5mb3JFYWNoKChncm91cFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBncm91cFJvd3MgPSBncm91cE1hcC5nZXQoZ3JvdXBWYWx1ZSkhO1xuICAgICAgY29uc3QgdG90YWxDb3VudCA9IGdyb3VwUm93cy5sZW5ndGg7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZSA9IHBhZ2VTaXplID09PSAwID8gMCA6IHRoaXMuX2dyb3VwQnkuZ2V0UGFnZShncm91cFZhbHVlKTtcbiAgICAgIGNvbnN0IHBhZ2VDb3VudCA9IHBhZ2VTaXplID09PSAwID8gMSA6IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0b3RhbENvdW50IC8gcGFnZVNpemUpKTtcbiAgICAgIGNvbnN0IGNvbGxhcHNlZCA9IHRoaXMuaXNHcm91cENvbGxhcHNlZChncm91cFZhbHVlKTtcblxuICAgICAgcmVzdWx0LnB1c2goeyBbR1JPVVBfSEVBREVSX01BUktFUl06IHRydWUsIFtST1dfR1JPVVBfS0VZXTogZ3JvdXBWYWx1ZSwgW1JPV19HUk9VUF9DT1VOVF06IHRvdGFsQ291bnQsIFtST1dfR1JPVVBfUEFHRV06IGN1cnJlbnRQYWdlLCBbUk9XX0dST1VQX1BBR0VfQ09VTlRdOiBwYWdlQ291bnQgfSk7XG5cbiAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZVNpemUgPT09IDAgPyAwIDogY3VycmVudFBhZ2UgKiBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gcGFnZVNpemUgPT09IDAgPyB0b3RhbENvdW50IDogTWF0aC5taW4oc3RhcnQgKyBwYWdlU2l6ZSwgdG90YWxDb3VudCk7XG4gICAgICAgIGdyb3VwUm93cy5zbGljZShzdGFydCwgZW5kKS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBpZHggPSBzdGFydCArIGk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdGVkOiBhbnkgPSB7IFtST1dfUkFXX0tFWV06IHJvdywgW1JPV19JTkRFWF9LRVldOiBpZHggfTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgICAgIHByb2plY3RlZFtjb2wua2V5XSA9IHRoaXMucmVzb2x2ZUNlbGxWYWx1ZShjb2wsIHJvdywgaWR4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXN1bHQucHVzaChwcm9qZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZFNvcnRDb21wYXJhdG9yKCk6ICgoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB8IG51bGwge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLl9hY3RpdmVTb3J0LmFjdGl2ZSAmJiB0aGlzLl9hY3RpdmVTb3J0LmRpcmVjdGlvblxuICAgICAgPyB0aGlzLl9hY3RpdmVTb3J0XG4gICAgICA6IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdFNvcnQgPz8geyBhY3RpdmU6ICcnLCBkaXJlY3Rpb246ICcnIGFzIGNvbnN0IH07XG4gICAgY29uc3QgeyBhY3RpdmUsIGRpcmVjdGlvbiB9ID0gc29ydDtcbiAgICBpZiAoIWFjdGl2ZSB8fCAhZGlyZWN0aW9uKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKGE6IFQsIGI6IFQpOiBudW1iZXIgPT4ge1xuICAgICAgY29uc3QgdmEgPSB0aGlzLmdldExhenlBd2FyZVZhbHVlKGFjdGl2ZSwgYSk7XG4gICAgICBjb25zdCB2YiA9IHRoaXMuZ2V0TGF6eUF3YXJlVmFsdWUoYWN0aXZlLCBiKTtcbiAgICAgIGxldCBjbXAgPSAwO1xuICAgICAgaWYgKHR5cGVvZiB2YSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZiID09PSAnbnVtYmVyJykge1xuICAgICAgICBjbXAgPSB2YSA8IHZiID8gLTEgOiB2YSA+IHZiID8gMSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzYSA9IHZhID09IG51bGwgPyAnJyA6IFN0cmluZyh2YSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qgc2IgPSB2YiA9PSBudWxsID8gJycgOiBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNtcCA9IHNhIDwgc2IgPyAtMSA6IHNhID4gc2IgPyAxIDogMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICdhc2MnID8gY21wIDogLWNtcDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIGxhIHZhbGV1ciB0ZWxsZSBxdSdlbGxlIGVzdCBhZmZpY2jDqWUgZGFucyBsYSBjZWxsdWxlLCBlbiBzdWl2YW50IGV4YWN0ZW1lbnRcbiAgICogbGUgbcOqbWUgY2hlbWluIHF1ZSByZXNvbHZlQ2VsbFZhbHVlIOKAlCB1dGlsaXPDqWUgcG91ciBsYSByZWNoZXJjaGUgcGxlaW4tdGV4dGUuXG4gICAqIE5lIHBhc3NlIHBhcyBwYXIgc29ydFZhbHVlICh2YWxldXIgYnJ1dGUgZGUgdHJpKSBjb250cmFpcmVtZW50IMOgIGdldExhenlBd2FyZVZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXREaXNwbGF5VmFsdWVGb3JTZWFyY2goY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+LCByb3c6IFQpOiBhbnkge1xuICAgIGlmIChjb2wubGF6eSkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoY29sLmtleSkgPz8gJ2lkbGUnO1xuICAgICAgaWYgKHN0YXR1cyAhPT0gJ2xvYWRlZCcpIHJldHVybiBudWxsO1xuICAgICAgY29uc3Qgcm93TWFwID0gdGhpcy5fbGF6eUNvbHVtbkRhdGEuZ2V0KGNvbC5rZXkpO1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShyb3dNYXA/LmdldChyb3cpID8/ICcnKTtcbiAgICB9XG4gICAgaWYgKGNvbC5zZWFyY2hWYWx1ZSkge1xuICAgICAgcmV0dXJuIGNvbC5zZWFyY2hWYWx1ZShyb3csIDApO1xuICAgIH1cbiAgICBjb25zdCByYXdWYWx1ZSA9IGNvbC52YWx1ZSA/IGNvbC52YWx1ZShyb3csIDApIDogKHJvdyBhcyBhbnkpPy5bY29sLmtleV07XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShyYXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldExhenlBd2FyZVZhbHVlKGNvbHVtbktleTogc3RyaW5nLCByb3c6IFQpOiBhbnkge1xuICAgIGNvbnN0IGNvbERlZiA9IHRoaXMuX2NvbHVtbk1hcC5nZXQoY29sdW1uS2V5KTtcbiAgICBpZiAoY29sRGVmPy5sYXp5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGF6eUNvbHVtbkRhdGEuZ2V0KGNvbHVtbktleSk/LmdldChyb3cpID8/IG51bGw7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnNvcnRWYWx1ZSkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShjb2xEZWYuc29ydFZhbHVlKHJvdywgMCkpO1xuICAgIH1cbiAgICBpZiAoY29sRGVmPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShjb2xEZWYudmFsdWUocm93LCAwKSk7XG4gICAgfVxuICAgIHJldHVybiAocm93IGFzIGFueSlbY29sdW1uS2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNlbGxWYWx1ZShjb2w6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4sIHJvdzogVCwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKGNvbC5sYXp5KSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChjb2wua2V5KSA/PyAnaWRsZSc7XG4gICAgICBpZiAoc3RhdHVzID09PSAnbG9hZGluZycpIHJldHVybiBMQVpZX0xPQURJTkdfVkFMVUU7XG4gICAgICBpZiAoc3RhdHVzID09PSAnZXJyb3InKSByZXR1cm4gTEFaWV9FUlJPUl9WQUxVRTtcbiAgICAgIGlmIChzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICAgIGNvbnN0IHJvd01hcCA9IHRoaXMuX2xhenlDb2x1bW5EYXRhLmdldChjb2wua2V5KTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShyb3dNYXA/LmdldChyb3cpID8/ICcnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgdmFsdWVQcm92aWRlciA9IGNvbC52YWx1ZTtcbiAgICBjb25zdCByYXdWYWx1ZSA9IHZhbHVlUHJvdmlkZXIgPyB2YWx1ZVByb3ZpZGVyKHJvdywgaW5kZXgpIDogKHJvdyBhcyBhbnkpPy5bY29sLmtleV07XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNlbGxWYWx1ZShyYXdWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgxLCB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemUgfHwgNSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZU9wdGlvbnMoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyB8fCBbNSwgMTAsIDIwXTtcbiAgICBjb25zdCB1bmlxdWUgPSBbLi4ubmV3IFNldChvcHRpb25zLmZpbHRlcigodmFsdWUpID0+IHZhbHVlID4gMCkpXTtcblxuICAgIGlmICghdW5pcXVlLmluY2x1ZGVzKHRoaXMucGFnZVNpemUpKSB7XG4gICAgICB1bmlxdWUucHVzaCh0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVBhZ2VTaXplT3B0aW9uc0dyb3VwQnkoKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9uc0dyb3VwQnkgfHwgdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgfHwgWzUsIDEwLCAyMF07XG4gICAgY29uc3QgdW5pcXVlID0gWy4uLm5ldyBTZXQob3B0aW9ucy5maWx0ZXIoKHYpID0+IHYgPiAwKSldO1xuICAgIGlmICh0aGlzLmdyb3VwUGFnZVNpemUgPiAwICYmICF1bmlxdWUuaW5jbHVkZXModGhpcy5ncm91cFBhZ2VTaXplKSkge1xuICAgICAgdW5pcXVlLnB1c2godGhpcy5ncm91cFBhZ2VTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuaXF1ZS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0R3JvdXBQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWc7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNmZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5IHx8IGNmZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnM/Lmxlbmd0aCkgcmV0dXJuIG9wdGlvbnNbMF07XG4gICAgcmV0dXJuIGNmZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSB8fCA1O1xuICB9XG5cbiAgcHJpdmF0ZSB1bmlxdWVDb2x1bW5zQnlLZXkoY29sdW1uczogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcmV0dXJuIGNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChzZWVuLmhhcyhjb2x1bW4ua2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChjb2x1bW4ua2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hQYWdpbmF0b3IoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yKSByZXR1cm47XG5cbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSBudWxsO1xuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcblxuICAgIGlmICh0aGlzLl9wYWdpbmF0b3JTdWJzY3JpYmVkICE9PSB0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5fcGFnaW5hdG9yU3Vic2NyaWJlZCA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRvciEucGFnZVNpemU7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvciEucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IhLnBhZ2VTaXplIH0pO1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1JlbmRlciAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9wcm9qZWN0Q3VycmVudFBhZ2UoKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hTb3J0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zb3J0KSByZXR1cm47XG5cbiAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5zb3J0ID0gbnVsbCBhcyBhbnk7XG5cbiAgICBpZiAodGhpcy5fc29ydFN1YnNjcmliZWQgIT09IHRoaXMuc29ydCkge1xuICAgICAgdGhpcy5fc29ydFN1YnNjcmliZWQgPSB0aGlzLnNvcnQ7XG4gICAgICB0aGlzLnNvcnQuc29ydENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVNvcnQgPSB7XG4gICAgICAgICAgYWN0aXZlOiB0aGlzLnNvcnQuYWN0aXZlLFxuICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoeyBhY3RpdmU6IHRoaXMuc29ydC5hY3RpdmUsIGRpcmVjdGlvbjogdGhpcy5zb3J0LmRpcmVjdGlvbiB9KTtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXJpYWxpemFibGVDb2x1bW48VD4oY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIGtleTogY29sdW1uLmtleSxcbiAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgaWNvbjogY29sdW1uLmljb24sXG4gICAgc29ydGFibGU6IGNvbHVtbi5zb3J0YWJsZSxcbiAgICByZW1vdmFibGU6IGNvbHVtbi5yZW1vdmFibGUsXG4gICAgb3B0aW9uYWw6IGNvbHVtbi5vcHRpb25hbCxcbiAgICB3aWR0aDogY29sdW1uLndpZHRoLFxuICAgIGdyb3VwYWJsZTogY29sdW1uLmdyb3VwYWJsZSxcbiAgICBzbGljZWFibGU6IGNvbHVtbi5zbGljZWFibGUsXG4gICAgbGF6eTogISFjb2x1bW4ubGF6eSxcbiAgfTtcbn1cblxuZnVuY3Rpb24ganNvbkNsb25lPFQ+KHZhbHVlOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlLCAoX2tleSwgbmVzdGVkKSA9PlxuICAgIHR5cGVvZiBuZXN0ZWQgPT09ICdmdW5jdGlvbicgPyB1bmRlZmluZWQgOiBuZXN0ZWQsXG4gICkpIGFzIFQ7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zRnVuY3Rpb24odmFsdWU6IHVua25vd24sIHNlZW4gPSBuZXcgV2Vha1NldDxvYmplY3Q+KCkpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHRydWU7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIHNlZW4uYWRkKHZhbHVlKTtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXModmFsdWUpLnNvbWUobmVzdGVkID0+IGNvbnRhaW5zRnVuY3Rpb24obmVzdGVkLCBzZWVuKSk7XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImpxdWVyeS10YWJsZS13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ2aXN1YWwtY29weS1mZWVkYmFja1wiICpuZ0lmPVwiY29weUZlZWRiYWNrTWVzc2FnZVwiIHJvbGU9XCJzdGF0dXNcIj57eyBjb3B5RmVlZGJhY2tNZXNzYWdlIH19PC9kaXY+XG4gIDxoZWFkZXIgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiAqbmdJZj1cInNob3dUaXRsZVwiPlxuICAgIDxoMz57eyB0aXRsZSB9fTwvaDM+XG4gIDwvaGVhZGVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cInRhYmxlLWxheW91dFwiXG4gICAgW2NsYXNzLm5vLXNsaWNlXT1cIiFfc2hvd1NsaWNlUGFuZWwgfHwgX3NsaWNlUGFuZWxDb2xsYXBzZWRcIlxuICA+XG4gICAgPHNsaWNlLXBhbmVsXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCIhX3Nob3dTbGljZVBhbmVsIHx8IF9zbGljZVBhbmVsQ29sbGFwc2VkID8gJ25vbmUnIDogbnVsbFwiXG4gICAgICBbc2xpY2VDb25maWdzXT1cIl9zbGljZUNvbmZpZ3NcIlxuICAgICAgW2NvbHVtbnNdPVwiX3NsaWNlQ29sdW1uc1wiXG4gICAgICBbZGF0YV09XCJfc2xpY2VEYXRhXCJcbiAgICAgIFtsYXp5RGF0YV09XCJfbGF6eUNvbHVtbkRhdGFcIlxuICAgICAgW2xhenlTdGF0dXNdPVwiX2xhenlDb2x1bW5TdGF0dXNcIlxuICAgICAgW3Nob3dUb2dnbGVdPVwiX3NsaWNlU2hvd1RvZ2dsZVwiXG4gICAgICBbY29sbGFwc2VkQnlEZWZhdWx0XT1cIl9zbGljZVBhbmVsQ29sbGFwc2VkXCJcbiAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25TbGljZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChkeW5hbWljU2xpY2VLZXlzQ2hhbmdlKT1cIm9uRHluYW1pY1NsaWNlS2V5c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25TbGljZVBhbmVsQ29sbGFwc2VkQ2hhbmdlKCRldmVudClcIlxuICAgID48L3NsaWNlLXBhbmVsPlxuXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXNoZWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdG9vbGJhclwiICpuZ0lmPVwic2hvd1Rvb2xiYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRvb2xiYXItbGVmdFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1NsaWNlRXhwYW5kQnRuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1leHBhbmQtYnRuXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpMThuLmV4cGFuZEZpbHRlclRpdGxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRTbGljZVBhbmVsKClcIlxuICAgICAgICAgID48bWF0LWljb24gY2xhc3M9XCJzbGljZS1leHBhbmQtbWF0LWljb25cIj5maWx0ZXJfbGlzdDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwic2VhcmNoLWljb25cIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4LjVcIiBjeT1cIjguNVwiIHI9XCI1LjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTNMMTcgMTdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4uc2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hRdWVyeVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlYXJjaC1jbGVhci1idG5cIiAoY2xpY2spPVwic2VhcmNoUXVlcnkgPSAnJzsgb25TZWFyY2hDaGFuZ2UoKVwiPsOXPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaC1jb3VudFwiICpuZ0lmPVwiIWVmZmVjdGl2ZUlzTG9hZGluZ1wiPnt7IGZpbHRlcmVkUm93Q291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvdW50LWxvYWRlclwiICpuZ0lmPVwiZWZmZWN0aXZlSXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93T3JnYW5pemVyQnV0dG9uXCIgY2xhc3M9XCJ0YWJsZS10b29sYmFyLXJpZ2h0XCI+XG4gICAgICAgICAgPHRhYmxlLW9yZ2FuaXplci1idXR0b25cbiAgICAgICAgICAgIFtjb25maWddPVwib3JnYW5pemVyQ29uZmlnXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJvcmdhbml6ZXJTdGF0ZVwiXG4gICAgICAgICAgICAodmlld0NoYW5nZSk9XCJvbk9yZ2FuaXplclZpZXdDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvdGFibGUtb3JnYW5pemVyLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHktd3JhcHBlclwiPlxuXG4gICAgICA8IS0tIEJhbm5pw6hyZSBtZXNzYWdlIHByw6lmw6lyZW5jZXMgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiX3ByZWZlcmVuY2VzTWVzc2FnZVwiIGNsYXNzPVwicHJlZmVyZW5jZXMtbWVzc2FnZVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJwcmVmZXJlbmNlcy1tZXNzYWdlLWljb25cIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBfcHJlZmVyZW5jZXNNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQm91dG9uIGRlIGNvbmZpcm1hdGlvbiBkdSBtb2RlIMOpZGl0aW9uIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIl9lZGl0TW9kZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImVkaXQtY29uZmlybS1idG5cIlxuICAgICAgICBbdGl0bGVdPVwiaTE4bi5wcmVmZXJlbmNlc0NvbmZpcm1FZGl0XCJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FZGl0TW9kZSgpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LXNjcm9sbFwiICN0YWJsZUJvZHlTY3JvbGw+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCIgY2xhc3M9XCJqcXVlcnktdGFibGVcIlxuICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGFibGVNaW5XaWR0aFwiXG4gICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tSb3dGblwiXG4gICAgICAgICAgICAgW21hdFNvcnRBY3RpdmVdPVwiX21hdFNvcnRBY3RpdmVcIiBbbWF0U29ydERpcmVjdGlvbl09XCJfbWF0U29ydERpcmVjdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5rZXlcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFttYXQtc29ydC1oZWFkZXJdPVwiKCFfZWRpdE1vZGUgJiYgY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkgPyBjb2x1bW4ua2V5IDogJydcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9lZGl0TW9kZSB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRDb2x1bW5XaWR0aChjb2x1bW4ua2V5KVwiXG4gICAgICAgICAgICBbY2xhc3MuZHJhZy1lbmFibGVkXT1cImlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkIHx8IF9lZGl0TW9kZVwiXG4gICAgICAgICAgICBbY2xhc3MuZHJvcC10YXJnZXRdPVwiaXNIZWFkZXJEcm9wVGFyZ2V0KGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5lZGl0LW1vZGUtaGVhZGVyXT1cIl9lZGl0TW9kZVwiXG4gICAgICAgICAgICAoZHJhZ292ZXIpPVwib25IZWFkZXJEcmFnT3Zlcihjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcm9wKT1cIm9uSGVhZGVyRHJvcChjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZC1jZWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImNvbHVtbi5pY29uXCIgY2xhc3M9XCJoZWFkLWljb25cIiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj57eyBjb2x1bW4uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZC10ZXh0XCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj57eyBjb2x1bW4uaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgfHwgX2VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uSGVhZGVyRHJhZ1N0YXJ0KGNvbHVtbi5rZXksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uSGVhZGVyRHJhZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBQb2lnbsOpZSBkZSByZXNpemUgKHZpc2libGUgdW5pcXVlbWVudCBlbiBtb2RlIMOpZGl0aW9uKSAtLT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiX2VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgIGRyYWdnYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZVN0YXJ0KGNvbHVtbi5rZXksICRldmVudClcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImdldENvbHVtbldpZHRoKGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5lZGl0LW1vZGUtY2VsbF09XCJfZWRpdE1vZGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhX2VkaXRNb2RlOyBlbHNlIGVkaXRNb2RlQ2VsbFRwbFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q2VsbFRlbXBsYXRlKGNvbHVtbi5rZXkpIGFzIGN1c3RvbVRwbDsgZWxzZSBkZWZhdWx0Q2VsbFRwbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3dbX1JPV19SQVdfS0VZXSwgaW5kZXg6IHJvd1tfUk9XX0lOREVYX0tFWV0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbFRwbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4ubGF6eSA/IGdldExhenlSZW5kZXJUeXBlKHJvd1tjb2x1bW4ua2V5XSkgOiAndmFsdWUnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRpbmcnXCIgY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxhenktZXJyb3ItYnRuXCIgKGNsaWNrKT1cInJldHJ5TGF6eUNvbHVtbihjb2x1bW4pXCIgW3RpdGxlXT1cImkxOG4ubGF6eUVycm9yVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LWVycm9yLWljb25cIj7imqA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1lcnJvci1sYWJlbFwiPnt7IGkxOG4ubGF6eVJldHJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwiY2VsbC10ZXh0XCIgW2NsYXNzLmNlbGwtZW1wdHldPVwiaXNDZWxsRW1wdHkocm93W2NvbHVtbi5rZXldKVwiIFt0aXRsZV09XCJhc1RpdGxlKHJvd1tjb2x1bW4ua2V5XSlcIj57eyBpc0NlbGxFbXB0eShyb3dbY29sdW1uLmtleV0pID8gaTE4bi5jZWxsRW1wdHkgOiByb3dbY29sdW1uLmtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGVDZWxsVHBsPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLWVkaXQtbW9kZVwiIFt0aXRsZV09XCJhc1RpdGxlKHJvd1tjb2x1bW4ua2V5XSlcIj57eyByb3dbY29sdW1uLmtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwicmVuZGVyZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgICA8dHJcbiAgICAgICAgICBtYXQtcm93XG4gICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHJlbmRlcmVkQ29sdW1uczsgd2hlbjogIWlzR3JvdXBIZWFkZXJcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImhhc1Jvd0NsaWNrSGFuZGxlciAmJiAhX2VkaXRNb2RlID8gMCA6IG51bGxcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKHJvdylcIlxuICAgICAgICAgIFtjbGFzcy5uby1wb2ludGVyXT1cIiFoYXNSb3dDbGlja0hhbmRsZXIgfHwgX2VkaXRNb2RlXCJcbiAgICAgICAgICBbY2xhc3MuZWRpdC1tb2RlLXJvd109XCJfZWRpdE1vZGVcIlxuICAgICAgICAgIChjbGljayk9XCIhX2VkaXRNb2RlICYmIG9uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIhX2VkaXRNb2RlICYmIG9uUm93Q2xpY2socm93LCBudWxsKVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiIV9lZGl0TW9kZSAmJiBvblJvd0NsaWNrKHJvdywgbnVsbClcIlxuICAgICAgICA+PC90cj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIl9HUk9VUF9ST1dfQ09MVU1OXCI+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFthdHRyLmNvbHNwYW5dPVwicmVuZGVyZWRDb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXItbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1jaGV2cm9uXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0dyb3VwQ29sbGFwc2VkKHJvd1tfUk9XX0dST1VQX0tFWV0pXCIgKm5nSWY9XCJpc05vcm1hbEdyb3VwUm93KHJvdylcIj7igLo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNOb3JtYWxHcm91cFJvdyhyb3cpXCIgY2xhc3M9XCJncm91cC1rZXktbGFiZWxcIj57eyByb3dbX1JPV19HUk9VUF9LRVldIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzR3JvdXBSb3dMb2FkaW5nKHJvdylcIiBjbGFzcz1cImxhenktc2tlbGV0b24gZ3JvdXAtbGF6eS1rZXktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNHcm91cFJvd1Rvb01hbnkocm93KVwiIGNsYXNzPVwiZ3JvdXAtdG9vLW1hbnktbGFiZWxcIj57eyBpMThuLmdyb3VwVG9vTWFueShyb3dbX1JPV19HUk9VUF9DT1VOVF0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLWNvdW50LWJhZGdlXCI+e3sgcm93W19ST1dfR1JPVVBfQ09VTlRdIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtcGFnaW5hdGlvblwiICpuZ0lmPVwiIWlzR3JvdXBDb2xsYXBzZWQocm93W19ST1dfR1JPVVBfS0VZXSkgJiYgcm93W19ST1dfR1JPVVBfUEFHRV9DT1VOVF0gPiAxXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtcGFnZS1idG5cIiBbZGlzYWJsZWRdPVwicm93W19ST1dfR1JPVVBfUEFHRV0gPT09IDBcIiAoY2xpY2spPVwiZ3JvdXBQYWdlQmFjayhyb3dbX1JPV19HUk9VUF9LRVldKVwiPuKAuTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JvdXAtcGFnZS1pbmZvXCI+e3sgcm93W19ST1dfR1JPVVBfUEFHRV0gKyAxIH19IC8ge3sgcm93W19ST1dfR1JPVVBfUEFHRV9DT1VOVF0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1wYWdlLWJ0blwiIFtkaXNhYmxlZF09XCJyb3dbX1JPV19HUk9VUF9QQUdFXSA+PSByb3dbX1JPV19HUk9VUF9QQUdFX0NPVU5UXSAtIDFcIiAoY2xpY2spPVwiZ3JvdXBQYWdlRm9yd2FyZChyb3dbX1JPV19HUk9VUF9LRVldLCByb3dbX1JPV19HUk9VUF9DT1VOVF0pXCI+4oC6PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbX0dST1VQX1JPV19DT0xVTU5dOyB3aGVuOiBpc0dyb3VwSGVhZGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuZ3JvdXAtaGVhZGVyLWxvYWRpbmddPVwiaXNHcm91cFJvd0xvYWRpbmcocm93KVwiXG4gICAgICAgICAgICBbY2xhc3MuZ3JvdXAtaGVhZGVyLXRvby1tYW55XT1cImlzR3JvdXBSb3dUb29NYW55KHJvdylcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ncm91cC1rZXldPVwicm93W19ST1dfR1JPVVBfS0VZXVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cEhlYWRlckNsaWNrKHJvdylcIj48L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJtYXQtbWRjLXJvdyBuby1kYXRhLXJvd1wiICptYXROb0RhdGFSb3c+XG4gICAgICAgICAgPHRkIGNsYXNzPVwibWF0LW1kYy1jZWxsIG5vLWRhdGEtY2VsbFwiIFthdHRyLmNvbHNwYW5dPVwicmVuZGVyZWRDb2x1bW5zLmxlbmd0aFwiPjwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+PCEtLSAvdGFibGUtYm9keS1zY3JvbGwgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keS1vdmVybGF5XCIgKm5nSWY9XCJlZmZlY3RpdmVJc0xvYWRpbmcgfHwgaXNFbXB0eVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLWJvZHktb3ZlcmxheS10ZXh0XCI+e3sgZWZmZWN0aXZlSXNMb2FkaW5nID8gbG9hZGluZ1N0YXRlTGFiZWwgOiBlbXB0eVN0YXRlTGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PjwhLS0gL3RhYmxlLWJvZHktd3JhcHBlciAtLT5cblxuICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1iYXJcIiBbY2xhc3MuaXMtbG9hZGluZ109XCJlZmZlY3RpdmVJc0xvYWRpbmdcIiAqbmdJZj1cInNob3dQYWdpbmF0aW9uXCI+XG4gICAgICAgIDxtYXQtcGFnaW5hdG9yXG4gICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbFJvd3NcIlxuICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJyZXNvbHZlZFBhZ2luYXRpb25TaG93Rmlyc3RMYXN0QnV0dG9uc1wiXG4gICAgICAgID48L21hdC1wYWdpbmF0b3I+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0b3ItcmFuZ2UtbG9hZGVyXCIgXG4gICAgICAgICAgICAgW2NsYXNzLnBhZ2luYXRvci1yYW5nZS1sb2FkZXItLW5vLWZpcnN0LWxhc3RdPVwiIXJlc29sdmVkUGFnaW5hdGlvblNob3dGaXJzdExhc3RCdXR0b25zXCJcbiAgICAgICAgICAgICAqbmdJZj1cImVmZmVjdGl2ZUlzTG9hZGluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3R0b20tYmFyXCIgKm5nSWY9XCJhY3RpdmVHcm91cEJ5S2V5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3R0b20tYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3R0b20tYmFyLWxlZnRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtcmVzZXQtYnRuXCIgKGNsaWNrKT1cIm9uR3JvdXBCeUNoYW5nZShudWxsKVwiPlxuICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImdyb3VwLXJlc2V0LWljb25cIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgOGE1IDUgMCAxIDAgNS01IDUgNSAwIDAgMC0zLjU0IDEuNDZMMyAzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAzdjIuNUg1LjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICB7eyBpMThuLmdyb3VwUmVtb3ZlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1iYXItc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtc29ydC1jb250cm9sc1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLXNvcnQtbGFiZWxcIj57eyBpMThuLmdyb3VwU29ydExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdyb3VwLXNvcnQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJncm91cFNvcnRPcmRlciA9PT0gJ2FzYydcIiAoY2xpY2spPVwib25Hcm91cFNvcnRUb2dnbGUoJ2FzYycpXCIgW3RpdGxlXT1cImkxOG4uZ3JvdXBTb3J0QXNjXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X3Vwd2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdyb3VwLXNvcnQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJncm91cFNvcnRPcmRlciA9PT0gJ2Rlc2MnXCIgKGNsaWNrKT1cIm9uR3JvdXBTb3J0VG9nZ2xlKCdkZXNjJylcIiBbdGl0bGVdPVwiaTE4bi5ncm91cFNvcnREZXNjXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsXCI+e3sgaTE4bi5ncm91cFJvd3NQZXJHcm91cCB9fTwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXBQYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Hcm91cFBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJtYXQtbWRjLXBhZ2luYXRvci1zZWxlY3QtcGFnZS1zaXplIGdyb3VwLXBhZ2Utc2l6ZS1wYW5lbFwiXG4gICAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwiJ2F1dG8nXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+e3sgZ3JvdXBQYWdlU2l6ZSA9PT0gMCA/IGkxOG4uZ3JvdXBTaG93QWxsIDogZ3JvdXBQYWdlU2l6ZSB9fTwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgcGFnZVNpemVPcHRpb25zR3JvdXBCeVwiIFt2YWx1ZV09XCJvcHRcIj57eyBvcHQgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIjBcIj57eyBpMThuLmdyb3VwU2hvd0FsbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|
|
1724
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBbUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXdCLE1BQU0sRUFBRSxTQUFTLEVBQThCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwUyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FB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QUFNO2dCQUdILFNBQVM7c0JBRFosU0FBUzt1QkFBQyxZQUFZO2dCQVVILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDWSxrQkFBa0I7c0JBQS9DLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNJLGFBQWE7c0JBQTVDLFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNRLFNBQVM7c0JBQTlDLGVBQWU7dUJBQUMsbUJBQW1CO2dCQWtZcEMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLDJCQUEyQjs7QUFvNEMzQyxTQUFTLGtCQUFrQixDQUFJLE1BQThCO0lBQzNELE9BQU87UUFDTCxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7UUFDZixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7S0FDcEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBpbmplY3QsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgTWF0UGFnaW5hdG9ySW50bCwgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UsIE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtblByb3ZpZGVyLCBUYWJsZUV4cG9ydENvbmZpZywgVGFibGVQcmVmZXJlbmNlc0NvbmZpZywgVGFibGVQcm92aWRlciwgVGFibGVWaWV3Q29uZmlnIH0gZnJvbSAnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJztcbmltcG9ydCB7IEpxdEkxOG4sIEpRVF9JMThOLCBKUVRfSTE4Tl9ERUZBVUxUUyB9IGZyb20gJy4uL2pxdC1pMThuLnRva2VuJztcbmltcG9ydCB7IEpxdENlbGxEZWZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmUvanF0LWNlbGwtZGVmLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbGljZUNvbmZpZywgU2xpY2VQYW5lbENvbXBvbmVudCwgT3JnYW5pemVyRmFjYWRlLCBHcm91cEJ5TWFuYWdlciwgTGF6eUZpZWxkTWFuYWdlciwgT3JnYW5pemVyQ29uZmlnLCBPcmdhbml6ZXJCdXR0b25FdmVudCwgT3JnYW5pemVyU3RhdGUgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktb3JnYW5pemVyJztcbmltcG9ydCB7IGdldEZyZW5jaFBhZ2luYXRvckludGwsIGh1bWFuaXplS2V5LCBub3JtYWxpemVDZWxsVmFsdWUgfSBmcm9tICcuL3RhYmxlLnV0aWxzJztcbmltcG9ydCB7IFRhYmxlUHJlZmVyZW5jZXNNYW5hZ2VyIH0gZnJvbSAnLi90YWJsZS1wcmVmZXJlbmNlcy5tYW5hZ2VyJztcbmltcG9ydCB7IEV4cG9ydE1hbmFnZXIgfSBmcm9tICcuL2V4cG9ydC5tYW5hZ2VyJztcbmltcG9ydCB7XG4gIEdST1VQX1JPV19DT0xVTU4sIEdST1VQX0hFQURFUl9NQVJLRVIsXG4gIEdST1VQX0tFWV9MQVpZX0xPQURJTkcsIEdST1VQX0tFWV9UT09fTUFOWSxcbiAgUk9XX1JBV19LRVksIFJPV19JTkRFWF9LRVksXG4gIFJPV19HUk9VUF9LRVksIFJPV19HUk9VUF9DT1VOVCwgUk9XX0dST1VQX1BBR0UsIFJPV19HUk9VUF9QQUdFX0NPVU5ULFxuICBMQVpZX0xPQURJTkdfVkFMVUUsIExBWllfRVJST1JfVkFMVUUsXG59IGZyb20gJy4vdGFibGUuY29uc3RhbnRzJztcbmltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbldyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL29yZ2FuaXplci1idXR0b24vb3JnYW5pemVyLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVTZXJpYWxpemFibGUsIGNvbnRhaW5zRnVuY3Rpb24sIEZ1bGxzY3JlZW5NYW5hZ2VyLCBWaXN1YWxDb3B5RmVlZGJhY2tDb25maWcsIFZpc3VhbFNuYXBzaG90LCBWaXN1YWxTbmFwc2hvdEFwcGx5UmVzdWx0LCBWaXN1YWxTbmFwc2hvdERyYWZ0LCBWaXN1YWxTbmFwc2hvdFN0b3JhZ2UgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbi8qKiBDYWNoZSBpbnRlcm5lIGR1IGdyb3VwZW1lbnQg4oCUIGludmFsaWTDqSBkw6hzIHF1ZSBsZXMgZG9ubsOpZXMsIGxhIGNsw6kgb3UgbGVzIHBhcmFtw6h0cmVzIGRlIHRyaSBjaGFuZ2VudC4gKi9cbmludGVyZmFjZSBHcm91cEJ5Q2FjaGU8VD4ge1xuICByb3dzOiBUW107XG4gIGtleTogc3RyaW5nO1xuICBzb3J0T3JkZXI6ICdhc2MnIHwgJ2Rlc2MnO1xuICBzb3J0QWN0aXZlOiBzdHJpbmc7XG4gIHNvcnREaXI6IHN0cmluZztcbiAgb3JkZXI6IHN0cmluZ1tdO1xuICBtYXA6IE1hcDxzdHJpbmcsIFRbXT47XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2pxdWVyeS10YWJsZScsXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0VGFibGVNb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RGl2aWRlck1vZHVsZSwgTWF0UGFnaW5hdG9yTW9kdWxlLCBNYXRTb3J0TW9kdWxlLCBNYXRNZW51TW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGUsIFNsaWNlUGFuZWxDb21wb25lbnQsIE9yZ2FuaXplckJ1dHRvbldyYXBwZXJDb21wb25lbnQgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0UGFnaW5hdG9ySW50bCwgdXNlRmFjdG9yeTogZ2V0RnJlbmNoUGFnaW5hdG9ySW50bCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudmlzdWFsLWZ1bGxzY3JlZW4nKSBfaXNGdWxsc2NyZWVuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZz86IFRhYmxlUHJvdmlkZXI8VD47XG5cbiAgQElucHV0KCkgZGF0YVNvdXJjZT86IFRbXSB8IHsgZGF0YTogVFtdIH07XG4gIEBJbnB1dCgpIGRhdGE/OiBUW107XG4gIEBJbnB1dCgpIGRpc3BsYXllZENvbHVtbnM/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29sdW1uc0NvbmZpZz86IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXTtcblxuICAvKipcbiAgICogTW9kZSBIVE1MIDogYWN0aXZlIGV0IGNvbmZpZ3VyZSBsZSBwYW5uZWF1IFZpZXcgaW5kw6lwZW5kYW1tZW50IGR1IGBbY29uZmlnXWAuXG4gICAqIFByZW5kIGxlIGRlc3N1cyBzdXIgYGNvbmZpZy52aWV3YCBzaSBkw6lmaW5pLlxuICAgKiBFeGVtcGxlIDogYDxqcXVlcnktdGFibGUgW3ZpZXddPVwieyBlbmFibGVkOiB0cnVlIH1cIj5gXG4gICAqL1xuICBASW5wdXQoKSB2aWV3PzogVGFibGVWaWV3Q29uZmlnO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkxhYmVscz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIEBJbnB1dCgpIGlzTG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb3B5RmVlZGJhY2s6IFZpc3VhbENvcHlGZWVkYmFja0NvbmZpZyA9IHt9O1xuXG4gIC8qKiBQYXJhbcOodHJlIGRlIGNvbnRyw7RsZSBwb3VyIHLDqWluaXRpYWxpc2VyIGJhcnJlIGRlIHJlY2hlcmNoZS4gKi9cbiAgQElucHV0KClcbiAgc2V0IGNsZWFyU2VhcmNoSW5wdXQodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgQE91dHB1dCgpIGFkZFJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtbkFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PigpO1xuICBAT3V0cHV0KCkgY29sdW1uUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5Qcm92aWRlcjxUPj4oKTtcbiAgQE91dHB1dCgpIGNhdGVnb3J5U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIC8qKiDDiW1pcyDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSB0cmkgKHkgY29tcHJpcyBsZSB0cmkgaW5pdGlhbCkuICovXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlICAgID0gbmV3IEV2ZW50RW1pdHRlcjx7IGFjdGl2ZTogc3RyaW5nOyBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJycgfT4oKTtcbiAgLyoqIMOJbWlzIMOgIGNoYXF1ZSBjaGFuZ2VtZW50IGRlIHBhZ2Ugb3UgZGUgdGFpbGxlIGRlIHBhZ2UuICovXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlICAgID0gbmV3IEV2ZW50RW1pdHRlcjx7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0+KCk7XG4gIC8qKiDDiW1pcyDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBsYSByZWNoZXJjaGUgdGV4dGUuICovXG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiDDiW1pcyBxdWFuZCBsZSBHcm91cCBieSBjaGFuZ2UgKGNsw6kgZGUgY29sb25uZSwgb3UgYG51bGxgIHNpIGTDqXNhY3RpdsOpKS4gKi9cbiAgQE91dHB1dCgpIGdyb3VwQnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG4gIC8qKiDDiW1pcyBxdWFuZCBsYSBsaXN0ZSBkZXMgY29sb25uZXMgdmlzaWJsZXMgY2hhbmdlIChjbMOpcyBkYW5zIGzigJlvcmRyZSBk4oCZYWZmaWNoYWdlKS4gKi9cbiAgQE91dHB1dCgpIGNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgdmlzdWFsQ29waWVkID0gbmV3IEV2ZW50RW1pdHRlcjxWaXN1YWxTbmFwc2hvdD4oKTtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcilcbiAgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmF0dGFjaFBhZ2luYXRvcigpO1xuICAgICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB9XG4gIH1cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3IgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcGFnaW5hdG9yOyB9XG4gIHByaXZhdGUgX3BhZ2luYXRvcj86IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0PzogTWF0U29ydDtcbiAgQFZpZXdDaGlsZCgndGFibGVCb2R5U2Nyb2xsJykgdGFibGVCb2R5U2Nyb2xsUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoU2xpY2VQYW5lbENvbXBvbmVudCkgc2xpY2VQYW5lbFJlZj86IFNsaWNlUGFuZWxDb21wb25lbnQ8VD47XG4gIEBDb250ZW50Q2hpbGRyZW4oSnF0Q2VsbERlZkRpcmVjdGl2ZSkgX2NlbGxEZWZzITogUXVlcnlMaXN0PEpxdENlbGxEZWZEaXJlY3RpdmU+O1xuICAvKiogTWFwIGNsw6nihpJUZW1wbGF0ZVJlZiBwcsOpLWNhbGN1bMOpZSBkZXB1aXMgX2NlbGxEZWZzLiBNaXNlIMOgIGpvdXIgZGFucyBuZ0FmdGVyQ29udGVudEluaXQgZXQgc3VyIF9jZWxsRGVmcy5jaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9jZWxsRGVmTWFwID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBhbnk7IGluZGV4OiBudW1iZXIgfT4+KCk7XG5cbiAgcmVuZGVyZWRDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICB0YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPGFueT4oW10pO1xuXG4gIC8qKiBDb25zdGFudGUgZXhwb3PDqWUgYXUgdGVtcGxhdGUgcG91ciBsZSBtYXRDb2x1bW5EZWYgZGUgbGEgbGlnbmUgZGUgZ3JvdXBlLiAqL1xuICByZWFkb25seSBfR1JPVVBfUk9XX0NPTFVNTiA9IEdST1VQX1JPV19DT0xVTU47XG4gIC8qKiBDbMOpcyBkJ2FjY8OocyBhdXggcHJvcHJpw6l0w6lzIGRlcyBsaWduZXMgcHJvamV0w6llcyDigJQgZXhwb3PDqWVzIHBvdXIgbGUgdGVtcGxhdGUuICovXG4gIHJlYWRvbmx5IF9ST1dfUkFXX0tFWSA9IFJPV19SQVdfS0VZO1xuICByZWFkb25seSBfUk9XX0lOREVYX0tFWSA9IFJPV19JTkRFWF9LRVk7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfS0VZID0gUk9XX0dST1VQX0tFWTtcbiAgcmVhZG9ubHkgX1JPV19HUk9VUF9DT1VOVCA9IFJPV19HUk9VUF9DT1VOVDtcbiAgcmVhZG9ubHkgX1JPV19HUk9VUF9QQUdFID0gUk9XX0dST1VQX1BBR0U7XG4gIHJlYWRvbmx5IF9ST1dfR1JPVVBfUEFHRV9DT1VOVCA9IFJPV19HUk9VUF9QQUdFX0NPVU5UO1xuXG4gIC8qKiBGYWNhZGUgVmlldyA6IMOpdGF0IGV0IGFjdGlvbnMgY2VudHJhbGlzw6lzIChDaGFtcHMgLyBHcm91cCBieSAvIFNsaWNlIGJ5KSAqL1xuICByZWFkb25seSBfb3JnYW5pemVyID0gbmV3IE9yZ2FuaXplckZhY2FkZTxUYWJsZUNvbHVtblByb3ZpZGVyPFQ+PigpO1xuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBzdGFibGUgc3luY2hyb25pc8OpIGRlcHVpcyBfb3JnYW5pemVyLmZpZWxkcy5hY3RpdmVGaWVsZHMgZGFucyByZWZyZXNoVmlld01vZGVsKCkuXG4gICAqIFByb3ByacOpdMOpIChub24gZ2V0dGVyKSBwb3VyIHF1J0FuZ3VsYXIgcHVpc3NlIGxhIHN1aXZyZSBzYW5zIE5HMDEwMC5cbiAgICovXG4gIGFjdGl2ZUZpZWxkczogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdID0gW107XG5cbiAgYWN0aXZlU2xpY2VGaWx0ZXI6IChyb3c6IFQpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlO1xuXG4gIC8vIFByb3ByacOpdMOpcyBzdGFibGVzIHBvdXIgbGVzIGJpbmRpbmdzIGR1IHRlbXBsYXRlIChjb250cmUgZXJyZXVyIE5HMDEwMClcbiAgX3NsaWNlQ29uZmlnczogYW55W10gPSBbXTtcbiAgX3NsaWNlQ29sdW1uczogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdID0gW107XG4gIF9zbGljZURhdGE6IFRbXSA9IFtdO1xuICBfc2xpY2VTaG93VG9nZ2xlID0gdHJ1ZTtcbiAgLyoqIFNuYXBzaG90IHN0YWJsZSBkZSBsYSB2aXNpYmlsaXTDqSBkdSBwYW5uZWF1IHNsaWNlIOKAlCBqYW1haXMgY2FsY3Vsw6kgZGVwdWlzIEBWaWV3Q2hpbGQgKi9cbiAgX3Nob3dTbGljZVBhbmVsID0gZmFsc2U7XG4gIC8qKiBTbmFwc2hvdCBzdGFibGUgZGUgbCfDqXRhdCBjb2xsYXBzZWQgZHUgcGFubmVhdSBzbGljZSwgbWlzIMOgIGpvdXIgdmlhIChjb2xsYXBzZWRDaGFuZ2UpICovXG4gIF9zbGljZVBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG5cbiAgLy8gRMOpbMOpZ3XDqXMgdmVycyBfdmlldyAoY29uc2VydsOpcyBwb3VyIGNvbXBhdGliaWxpdMOpIHRlbXBsYXRlIHNhbnMgcmVmYWN0b3JpbmcgSFRNTClcbiAgZ2V0IF9zdGF0aWNTbGljZXNGb3JNZW51KCk6IEFycmF5PHsga2V5OiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IGljb24/OiBzdHJpbmcgfT4geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnN0YXRpY1NsaWNlc0Zvck1lbnU7IH1cbiAgZ2V0IF9hY3RpdmVEeW5hbWljU2xpY2VDb2x1bW5zKCk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzOyB9XG4gIGdldCBfYXZhaWxhYmxlQ29sdW1uc0ZvckR5bmFtaWNTbGljZSgpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYXZhaWxhYmxlRm9yRHluYW1pYzsgfVxuICBnZXQgX2FsbER5bmFtaWNTbGljZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFsbER5bmFtaWNGaWVsZHM7IH1cbiAgZ2V0IF9hY3RpdmVTbGljZUJ5TGFiZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUxhYmVsOyB9XG4gIF9zbGljZUJ5TWVudUl0ZW1zOiBBcnJheTx7IGlzU3RhdGljOiBib29sZWFuOyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZzsgY29sPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiB9PiA9IFtdO1xuXG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XG4gIGdldCBhY3RpdmVHcm91cEJ5S2V5KCk6IHN0cmluZyB8IG51bGwgeyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnkuYWN0aXZlS2V5OyB9XG4gIF9tYXRTb3J0QWN0aXZlID0gJyc7XG4gIF9tYXRTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8ICcnID0gJyc7XG4gIHByaXZhdGUgX2FjdGl2ZVNvcnQ6IHsgYWN0aXZlOiBzdHJpbmc7IGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnJyB9ID0geyBhY3RpdmU6ICcnLCBkaXJlY3Rpb246ICcnIH07XG4gIHByaXZhdGUgX3NvcnRTdWJzY3JpYmVkOiBNYXRTb3J0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfdG90YWxGaWx0ZXJlZENvdW50ID0gMDtcblxuICAvKiogR2VzdGlvbm5haXJlIGR1IG1vZGUgR3JvdXAgQnkgKMOpdGF0IGNvbGxhcHNlZCwgcGFnaW5hdGlvbiwgdHJpIGRlcyBncm91cGVzKS4gKi9cbiAgcmVhZG9ubHkgX2dyb3VwQnkgPSBuZXcgR3JvdXBCeU1hbmFnZXIoXG4gICAgKCkgPT4geyB0aGlzLl9wcm9qZWN0Q3VycmVudFBhZ2UoKTsgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpOyB9LFxuICAgICgpID0+IHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpLFxuICApO1xuXG4gIC8qKiBEw6lsw6lndcOpcyB2ZXJzIEdyb3VwQnlNYW5hZ2VyIHBvdXIgbGEgY29tcGF0aWJpbGl0w6kgZGVzIHRlbXBsYXRlcy4gKi9cbiAgZ2V0IGdyb3VwUGFnZVNpemUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2dyb3VwQnkuZ3JvdXBQYWdlU2l6ZTsgfVxuICBzZXQgZ3JvdXBQYWdlU2l6ZSh2OiBudW1iZXIpIHsgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VTaXplID0gdjsgfVxuICBnZXQgZ3JvdXBTb3J0T3JkZXIoKTogJ2FzYycgfCAnZGVzYycgeyByZXR1cm4gdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlcjsgfVxuICBzZXQgZ3JvdXBTb3J0T3JkZXIodjogJ2FzYycgfCAnZGVzYycpIHsgdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlciA9IHY7IH1cblxuICAvKiogR2VzdGlvbm5haXJlIGR1IGN5Y2xlIGRlIHZpZSBkZXMgY29sb25uZXMgbGF6eSAoZmV0Y2gsIGFubnVsYXRpb24sIHN0YXR1dHMsIGRvbm7DqWVzKS4gKi9cbiAgcHJpdmF0ZSBfbGF6eSA9IG5ldyBMYXp5RmllbGRNYW5hZ2VyPFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4+KCk7XG4gIC8qKiBDb21wYXRpYmlsaXTDqSB0ZW1wbGF0ZSA6IHJldG91cm5lIGxhIG1hcCBkZSBzdGF0dXRzIGxhenkuICovXG4gIGdldCBfbGF6eUNvbHVtblN0YXR1cygpIHsgcmV0dXJuIHRoaXMuX2xhenkuc3RhdHVzOyB9XG4gIC8qKiBDb21wYXRpYmlsaXTDqSB0ZW1wbGF0ZSA6IHJldG91cm5lIGxhIG1hcCBkZSBkb25uw6llcyBsYXp5LiAqL1xuICBnZXQgX2xhenlDb2x1bW5EYXRhKCkgeyByZXR1cm4gdGhpcy5fbGF6eS5kYXRhOyB9XG4gIHByaXZhdGUgX2NkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgX2VsID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgcHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgX2kxOG5SYXcgPSBpbmplY3QoSlFUX0kxOE4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIGNvcHlGZWVkYmFja01lc3NhZ2UgPSAnJztcbiAgcHJpdmF0ZSBfY29weUZlZWRiYWNrVGltZXI/OiBudW1iZXI7XG5cbiAgLyoqIExhYmVscyBkZSBs4oCZaW50ZXJmYWNlLiBGdXNpb25uw6lzIGRlcHVpcyBKUVRfSTE4Tl9ERUZBVUxUUyBldCBsZSB0b2tlbiBKUVRfSTE4TiBpbmplY3TDqS4gKi9cbiAgcmVhZG9ubHkgaTE4bjogSnF0STE4biA9IHsgLi4uSlFUX0kxOE5fREVGQVVMVFMsIC4uLih0aGlzLl9pMThuUmF3ID8/IHt9KSB9O1xuXG4gIGlzR3JvdXBIZWFkZXIgPSAoXzogbnVtYmVyLCByb3c6IGFueSk6IGJvb2xlYW4gPT4gcm93W0dST1VQX0hFQURFUl9NQVJLRVJdID09PSB0cnVlO1xuXG4gIC8qKiBSZXRvdXJuZSB0cnVlIHNpIGxhIGxpZ25lIGRlIGdyb3VwZSBlc3QgdW5lIGxpZ25lIG5vcm1hbGUgKG5pIGxhenksIG5pIHRvby1tYW55KS4gKi9cbiAgaXNOb3JtYWxHcm91cFJvdyhyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByb3dbUk9XX0dST1VQX0tFWV0gIT09IEdST1VQX0tFWV9MQVpZX0xPQURJTkcgJiYgcm93W1JPV19HUk9VUF9LRVldICE9PSBHUk9VUF9LRVlfVE9PX01BTlk7XG4gIH1cbiAgaXNHcm91cFJvd0xvYWRpbmcocm93OiBhbnkpOiBib29sZWFuIHsgcmV0dXJuIHJvd1tST1dfR1JPVVBfS0VZXSA9PT0gR1JPVVBfS0VZX0xBWllfTE9BRElORzsgfVxuICBpc0dyb3VwUm93VG9vTWFueShyb3c6IGFueSk6IGJvb2xlYW4geyByZXR1cm4gcm93W1JPV19HUk9VUF9LRVldID09PSBHUk9VUF9LRVlfVE9PX01BTlk7IH1cblxuICAvKiogR8OocmUgbGUgY2xpYyBzdXIgdW5lIGxpZ25lIGQnZW4tdMOqdGUgZGUgZ3JvdXBlIChuby1vcCBwb3VyIGxlcyDDqXRhdHMgc3DDqWNpYXV4KS4gKi9cbiAgb25Hcm91cEhlYWRlckNsaWNrKHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTm9ybWFsR3JvdXBSb3cocm93KSkgcmV0dXJuO1xuICAgIHRoaXMudG9nZ2xlR3JvdXBDb2xsYXBzZShyb3dbUk9XX0dST1VQX0tFWV0pO1xuICB9XG5cbiAgLyoqIEdlc3Rpb25uYWlyZSBleHBvcnQgQ1NWLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvcnQgPSBuZXcgRXhwb3J0TWFuYWdlcjxUPihcbiAgICAoKSA9PiB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MsXG4gICAgKCkgPT4gdGhpcy5hY3RpdmVGaWVsZHMsXG4gICAgKCkgPT4gdGhpcy5yZXNvbHZlZENvbmZpZy5leHBvcnQsXG4gICAgKGNvbCwgcm93LCBpZHgpID0+IHRoaXMucmVzb2x2ZUNlbGxWYWx1ZShjb2wsIHJvdywgaWR4KSxcbiAgKTtcblxuICAvLyDilIDilIAgTGlmZWN5Y2xlXG5cbiAgcGFnZVNpemUgPSA1O1xuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyMF07XG4gIHBhZ2VTaXplT3B0aW9uc0dyb3VwQnk6IG51bWJlcltdID0gWzUsIDEwLCAyMF07XG5cbiAgZHJhZ2dlZENvbHVtbktleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGRyYWdPdmVyQ29sdW1uS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyDilIDilIAgTW9kZSDDqWRpdGlvbiAoUHLDqWbDqXJlbmNlcylcbiAgLyoqIFZyYWkgcXVhbmQgbGUgbW9kZSDDqWRpdGlvbiBlc3QgYWN0aWYgKHJlc2l6ZSArIGRyYWcgY29sb25uZXMsIGludGVyYWN0aW9ucyBkw6lzYWN0aXbDqWVzKS4gKi9cbiAgX2VkaXRNb2RlID0gZmFsc2U7XG4gIC8qKiBMYXJnZXVycyBkZSBjb2xvbm5lcyBwZXJzb25uYWxpc8OpZXMgcGFyIGwndXRpbGlzYXRldXIgKGNsw6kg4oaSIHB4KS4gKi9cbiAgX2NvbHVtbldpZHRoczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAvKiogTWVzc2FnZSBkZSBmZWVkYmFjayBhcHLDqHMgc2F2ZS9jbGVhci4gYG51bGxgID0gcGFzIGRlIG1lc3NhZ2UuICovXG4gIF9wcmVmZXJlbmNlc01lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAvKiogVnJhaSBzaSB1bmUgY29uZmlndXJhdGlvbiBlc3Qgc2F1dmVnYXJkw6llIHBvdXIgY2UgdGFibGVhdS4gKi9cbiAgX2hhc1NhdmVkQ29uZmlnID0gZmFsc2U7XG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzTWFuYWdlcjogVGFibGVQcmVmZXJlbmNlc01hbmFnZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIHRydWUgdW5lIGZvaXMgcXVlIGxlIGdyb3VwLWJ5IHBhciBkw6lmYXV0IGEgw6l0w6kgaW5pdGlhbGlzw6kgKMOpdml0ZSBkZSByZWNvbmZpZ3VyZXIgR3JvdXBCeU1hbmFnZXIgw6AgY2hhcXVlIGNoYW5nZW1lbnQgZGUgZG9ubsOpZXMpLiAqL1xuICBwcml2YXRlIF9kZWZhdWx0R3JvdXBCeUFwcGxpZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVzaXplU3RhdGU6IHsga2V5OiBzdHJpbmc7IHN0YXJ0WDogbnVtYmVyOyBzdGFydFdpZHRoOiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICAvKiogRHluYW1pYyBzbGljZSBrZXlzIMOgIHJlc3RhdXJlciBhcHLDqHMgbmdBZnRlclZpZXdJbml0IChzbGljZVBhbmVsUmVmIHBhcyBlbmNvcmUgZGlzcG8pLiAqL1xuICBwcml2YXRlIF9wZW5kaW5nRHluYW1pY1NsaWNlS2V5czogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcbiAgLyoqIEZpbHRyZXMgZGUgc2xpY2Ugw6AgcmVzdGF1cmVyIGFwcsOocyBuZ0FmdGVyVmlld0luaXQgKHNsaWNlUGFuZWxSZWYgcGFzIGVuY29yZSBkaXNwbykuICovXG4gIHByaXZhdGUgX3BlbmRpbmdTbGljZUZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVzb2x2ZWRDb25maWc6IFRhYmxlUHJvdmlkZXI8VD4gPSB7IGNvbHVtbnM6IFtdIH07XG4gIHByaXZhdGUgX2NvbHVtbk1hcDogTWFwPHN0cmluZywgVGFibGVDb2x1bW5Qcm92aWRlcjxUPj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX3Jlc29sdmVkRGF0YTogVFtdID0gW107XG4gIHByaXZhdGUgX3ByZXNlcnZlUGFnZUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbGFzdENvbmZpZ0NsZWFyU2VhcmNoSW5wdXQ6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9pbml0aWFsU2VhcmNoUXVlcnlBcHBsaWVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhc3RJbml0aWFsU2VhcmNoUXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyBTZXVpbCBhdS1kZWzDoCBkdXF1ZWwgbGUgcmVuZHUgZ3JvdXDDqSBlc3QgYmxvcXXDqSBwb3VyIHByb3TDqWdlciBsZSBuYXZpZ2F0ZXVyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9HUk9VUF9DT1VOVCA9IDUwMDtcblxuICAvLyDilIDilIAgT3B0aW1pc2F0aW9uIHBlcmZvcm1hbmNlXG4gIHByaXZhdGUgX2FsbEZpbHRlcmVkUm93czogVFtdID0gW107XG4gIHByaXZhdGUgX3BhZ2luYXRvclN1YnNjcmliZWQ6IE1hdFBhZ2luYXRvciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBDYWNoZSBncm91cEJ5IOKAlCBpbnZhbGlkw6kgZMOocyBxdWUgcm93cy9rZXkvdHJpIGNoYW5nZW50LiAqL1xuICBwcml2YXRlIF9ncm91cENhY2hlOiBHcm91cEJ5Q2FjaGU8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcGVuZGluZ1JlbmRlcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBfY29uZmlnSGlkZGVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5cbiAgLyoqIENsw6lzIGRlcyBjb2xvbm5lcyB2aXNpYmxlcyBkdSBkZXJuaWVyIMOpbWlzc2lvbiBjb2x1bW5zQ2hhbmdlIChwb3VyIMOpdml0ZXIgbGVzIMOpbWlzc2lvbnMgZHVwbGlxdWVtZW50KS4gKi9cbiAgcHJpdmF0ZSBfcHJldkNvbHVtbktleXM6IHN0cmluZ1tdID0gW107XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFDaGFuZ2VkID0gISEoY2hhbmdlc1snY29uZmlnJ10gfHwgY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2RhdGFTb3VyY2UnXSk7XG4gICAgaWYgKGRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9sYXp5LmNhbmNlbEFsbCgpO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdTZWFyY2hSZXNldCgpO1xuICAgICAgdGhpcy5hcHBseUluaXRpYWxTZWFyY2hRdWVyeShjaGFuZ2VzWydjb25maWcnXS5maXJzdENoYW5nZSk7XG4gICAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7IC8vIGxlcyBjb2xvbm5lcyBvbnQgcHUgY2hhbmdlclxuICAgIH1cbiAgICBpZiAoZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRmllbGRzLmZpbHRlcihjID0+IGMubGF6eSkuZm9yRWFjaChjID0+IHRoaXMudHJpZ2dlckxhenlGZXRjaChjKSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlYnVpbGRDZWxsRGVmTWFwKCk7XG4gICAgdGhpcy5fY2VsbERlZnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWJ1aWxkQ2VsbERlZk1hcCgpO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXR0YWNoUGFnaW5hdG9yKCk7XG4gICAgdGhpcy5hdHRhY2hTb3J0KCk7XG4gICAgdGhpcy5fbWVhc3VyZUhlYWRlckhlaWdodCgpO1xuICAgIHRoaXMuX2FwcGx5UGVuZGluZ0R5bmFtaWNTbGljZUtleXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UGVuZGluZ0R5bmFtaWNTbGljZUtleXMoKTogdm9pZCB7XG4gICAgY29uc3QgaGFzUGVuZGluZ0R5bmFtaWMgPSAhIXRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzO1xuICAgIGNvbnN0IGhhc1BlbmRpbmdGaWx0ZXJzID0gISF0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzO1xuICAgIGlmICghaGFzUGVuZGluZ0R5bmFtaWMgJiYgIWhhc1BlbmRpbmdGaWx0ZXJzKSByZXR1cm47XG5cbiAgICBjb25zdCBhbGxDb2xzID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdO1xuICAgIGNvbnN0IGtleXMgPSBoYXNQZW5kaW5nRHluYW1pYyA/IFsuLi50aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyFdIDogW107XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPyB7IC4uLnRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgfSA6IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgPSBudWxsO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fcmVzb2x2ZWREYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnW1NsaWNlUmVzdG9yZV0gbmdBZnRlclZpZXdJbml0OiBkb25uw6llcyBhYnNlbnRlcywgcmVzdGF1cmF0aW9uIGRpZmbDqXLDqWUgw6AgX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsJywgeyBrZXlzLCBmaWx0ZXJzIH0pO1xuICAgICAgICBpZiAoZmlsdGVycykgdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycyA9IGZpbHRlcnM7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gWy4uLmtleXNdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zb2xlLmxvZygnW1NsaWNlUmVzdG9yZV0gbmdBZnRlclZpZXdJbml0OiBkb25uw6llcyBwcsOpc2VudGVzLCBhcHBsaWNhdGlvbiBpbW3DqWRpYXRlJywgeyBrZXlzLCBmaWx0ZXJzIH0pO1xuICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGFsbENvbHMuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICBpZiAoY29sKSB0aGlzLmFkZER5bmFtaWNTbGljZShjb2wpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmlsdGVycyAmJiB0aGlzLnNsaWNlUGFuZWxSZWYpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tTbGljZVJlc3RvcmVdIHJlc3RvcmVGaWx0ZXJzIGRlcHVpcyBuZ0FmdGVyVmlld0luaXQnLCBmaWx0ZXJzKTtcbiAgICAgICAgdGhpcy5zbGljZVBhbmVsUmVmLnJlc3RvcmVGaWx0ZXJzKGZpbHRlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyICE9PSB1bmRlZmluZWQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fY29weUZlZWRiYWNrVGltZXIpO1xuICAgIGlmICh0aGlzLl9wZW5kaW5nUmVuZGVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcGVuZGluZ1JlbmRlcik7XG4gICAgfVxuICAgIGlmICh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lciAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyKTtcbiAgICB9XG4gICAgLy8gTmV0dG9pZSB1biDDqXZlbnR1ZWwgcmVzaXplIGVuIGNvdXJzIChsaXN0ZW5lcnMgd2luZG93IG5vbiByZXRpcsOpcylcbiAgICB0aGlzLl9yZXNpemVTdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fb3JnYW5pemVyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgX21lYXN1cmVIZWFkZXJIZWlnaHQoKTogdm9pZCB7XG4gICAgY29uc3QgbWVhc3VyZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlclJvdyA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndHIubWF0LW1kYy1oZWFkZXItcm93JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoaGVhZGVyUm93KSB7XG4gICAgICAgIGNvbnN0IGggPSBoZWFkZXJSb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICBpZiAoaCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjdHVhbC1oZWFkZXItaGVpZ2h0JywgaCArICdweCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gSGVhZGVyIHBhcyBlbmNvcmUgcmVuZHUgKGV4OiBsYXp5IEFuZ3VsYXIgTWF0ZXJpYWwpLCBvbiByw6llc3NhaWUgYXByw6hzIGxlIHByb2NoYWluIGZyYW1lXG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IG1lYXN1cmUoKSkpO1xuICAgIH07XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBtZWFzdXJlKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgX29yZ2FuaXplckNvbmZpZ0NhY2hlOiBPcmdhbml6ZXJDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfaW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpOiB2b2lkIHsgdGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGUgPSBudWxsOyB9XG4gIGdldCBvcmdhbml6ZXJDb25maWcoKTogT3JnYW5pemVyQ29uZmlnIHtcbiAgICBpZiAodGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGUpIHJldHVybiB0aGlzLl9vcmdhbml6ZXJDb25maWdDYWNoZTtcbiAgICBjb25zdCBhbGxDb2xzID0gWy4uLnRoaXMuX29yZ2FuaXplci5tZW51QmFzZUZpZWxkcywgLi4udGhpcy5fb3JnYW5pemVyLm1lbnVPcHRpb25hbEZpZWxkc107XG4gICAgdGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGUgPSB7XG4gICAgICBmaWVsZHM6IHRoaXMuX29yZ2FuaXplci5zaG93RmllbGRzID8gYWxsQ29scy5tYXAoYyA9PiAoe1xuICAgICAgICBpZDogYy5rZXksXG4gICAgICAgIGxhYmVsOiB0aGlzLmNvbExhYmVsKGMpLFxuICAgICAgICBpY29uOiBjLmljb24sXG4gICAgICAgIHN0YXRlOiAncmVhZHknIGFzIGNvbnN0LFxuICAgICAgfSkpIDogdW5kZWZpbmVkLFxuICAgICAgZ3JvdXBzOiB0aGlzLl9vcmdhbml6ZXIuc2hvd0dyb3VwQnlTZWN0aW9uID8gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnlGaWVsZHMubWFwKGMgPT4gKHtcbiAgICAgICAgaWQ6IGMua2V5LFxuICAgICAgICBsYWJlbDogdGhpcy5jb2xMYWJlbChjKSxcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgfSkpIDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VzOiB0aGlzLl9vcmdhbml6ZXIuc2hvd1NsaWNlQnlTZWN0aW9uID8gdGhpcy5fc2xpY2VCeU1lbnVJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICBpZDogaXRlbS5rZXksXG4gICAgICAgIGxhYmVsOiBpdGVtLnRpdGxlLFxuICAgICAgICBpY29uOiBpdGVtLmljb24sXG4gICAgICB9KSkgOiB1bmRlZmluZWQsXG4gICAgICBzaG93RXhwb3J0OiB0aGlzLnNob3dFeHBvcnRCdXR0b24sXG4gICAgICBvbkV4cG9ydDogKCkgPT4gdGhpcy5vbkV4cG9ydCgpLFxuICAgICAgc2hvd1ByZWZlcmVuY2VzOiB0aGlzLnNob3dQcmVmZXJlbmNlc01lbnUsXG4gICAgICBoYXNTYXZlZFByZWZlcmVuY2VzOiB0aGlzLmhhc1NhdmVkUHJlZmVyZW5jZXMsXG4gICAgICBvblByZWZlcmVuY2VzRWRpdDogKCkgPT4gdGhpcy5lbnRlckVkaXRNb2RlKCksXG4gICAgICBvblByZWZlcmVuY2VzU2F2ZTogKCkgPT4gdGhpcy5zYXZlUHJlZmVyZW5jZXMoKSxcbiAgICAgIG9uUHJlZmVyZW5jZXNDbGVhcjogKCkgPT4gdGhpcy5jbGVhclByZWZlcmVuY2VzKCksXG4gICAgICBzaG93QWN0aW9uczogdGhpcy5yZXNvbHZlZENvbmZpZy5zaG93QWN0aW9ucyA9PT0gdHJ1ZSxcbiAgICAgIG9uQ29weVZpc3VhbDogdGhpcy5yZXNvbHZlZENvbmZpZy5vbkNvcHlWaXN1YWwgPz8gKCgpID0+IHRoaXMuY29weVZpc3VhbFNuYXBzaG90KCkpLFxuICAgICAgb25Ub2dnbGVGdWxsc2NyZWVuOiB0aGlzLnJlc29sdmVkQ29uZmlnLm9uVG9nZ2xlRnVsbHNjcmVlbiA/PyAodGhpcy5mdWxsc2NyZWVuU3VwcG9ydGVkID8gKCkgPT4gdGhpcy50b2dnbGVGdWxsc2NyZWVuKCkgOiB1bmRlZmluZWQpLFxuICAgICAgaXNGdWxsc2NyZWVuOiB0aGlzLl9pc0Z1bGxzY3JlZW4sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyQ29uZmlnQ2FjaGU7XG4gIH1cblxuICBnZXQgb3JnYW5pemVyU3RhdGUoKTogT3JnYW5pemVyU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlRmllbGRzOiB0aGlzLnZpc2libGVDb2x1bW5zLm1hcChjID0+IGMua2V5KSxcbiAgICAgIHNlbGVjdGVkR3JvdXBCeTogdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID8/IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkU2xpY2VzOiB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zXG4gICAgICAgIC5maWx0ZXIoaSA9PiB0aGlzLmlzU2xpY2VNZW51SXRlbUFjdGl2ZShpKSlcbiAgICAgICAgLm1hcChpID0+IGkua2V5KSxcbiAgICB9O1xuICB9XG5cbiAgb25Pcmdhbml6ZXJWaWV3Q2hhbmdlKGV2ZW50OiBPcmdhbml6ZXJCdXR0b25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC50eXBlID09PSAnZmllbGRUb2dnbGVkJykge1xuICAgICAgY29uc3QgYWxsQ29scyA9IFsuLi50aGlzLl9vcmdhbml6ZXIubWVudUJhc2VGaWVsZHMsIC4uLnRoaXMuX29yZ2FuaXplci5tZW51T3B0aW9uYWxGaWVsZHNdO1xuICAgICAgY29uc3QgbmV3VmlzaWJsZSA9IG5ldyBTZXQoZXZlbnQuc3RhdGUudmlzaWJsZUZpZWxkcyA/PyBbXSk7XG4gICAgICBmb3IgKGNvbnN0IGNvbCBvZiBhbGxDb2xzKSB7XG4gICAgICAgIGNvbnN0IGlzTm93VmlzaWJsZSA9IG5ld1Zpc2libGUuaGFzKGNvbC5rZXkpO1xuICAgICAgICBpZiAodGhpcy5pc0NvbHVtblZpc2libGUoY29sLmtleSkgIT09IGlzTm93VmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMub25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNvbCwgaXNOb3dWaXNpYmxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ2dyb3VwQnlTZWxlY3RlZCcpIHtcbiAgICAgIGNvbnN0IG5ld0tleSA9IGV2ZW50LnN0YXRlLnNlbGVjdGVkR3JvdXBCeSA/PyBudWxsO1xuICAgICAgdGhpcy5vbkdyb3VwQnlDaGFuZ2UobmV3S2V5ID09PSB0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgPyBudWxsIDogbmV3S2V5KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdzbGljZVNlbGVjdGVkJykge1xuICAgICAgY29uc3QgcHJldlNsaWNlcyA9IG5ldyBTZXQodGhpcy5vcmdhbml6ZXJTdGF0ZS5zZWxlY3RlZFNsaWNlcyA/PyBbXSk7XG4gICAgICBjb25zdCBuZXh0U2xpY2VzID0gbmV3IFNldChldmVudC5zdGF0ZS5zZWxlY3RlZFNsaWNlcyA/PyBbXSk7XG4gICAgICBjb25zdCBjbGlja2VkSWQgPSBbLi4ucHJldlNsaWNlc10uZmluZChpZCA9PiAhbmV4dFNsaWNlcy5oYXMoaWQpKVxuICAgICAgICA/PyBbLi4ubmV4dFNsaWNlc10uZmluZChpZCA9PiAhcHJldlNsaWNlcy5oYXMoaWQpKTtcbiAgICAgIGlmIChjbGlja2VkSWQpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NsaWNlQnlNZW51SXRlbXMuZmluZChpID0+IGkua2V5ID09PSBjbGlja2VkSWQpO1xuICAgICAgICBpZiAoaXRlbSkgdGhpcy5vblNsaWNlTWVudUl0ZW1DbGljayhpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcudGl0bGUgPz8gJyc7XG4gIH1cblxuICBnZXQgc2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZWRDb25maWcudGl0bGU7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVGaWVsZHM7XG4gIH1cblxuICBnZXQgc2hvd1NlYXJjaEJhcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoPy5lbmFibGVkID09PSB0cnVlOyB9XG4gIGdldCBzaG93Vmlld0J1dHRvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5lbmFibGVkIHx8IHRoaXMuc2hvd0V4cG9ydEJ1dHRvbiB8fCB0aGlzLnNob3dQcmVmZXJlbmNlc01lbnU7IH1cbiAgZ2V0IHNob3dPcmdhbml6ZXJCdXR0b24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuZW5hYmxlZCB8fCB0aGlzLnNob3dFeHBvcnRCdXR0b24gfHwgdGhpcy5zaG93UHJlZmVyZW5jZXNNZW51OyB9XG4gIGdldCBzaG93U2xpY2VFeHBhbmRCdG4oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zaG93U2xpY2VQYW5lbCAmJiB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkICYmIHRoaXMuX3NsaWNlU2hvd1RvZ2dsZTsgfVxuICBnZXQgc2hvd0V4cG9ydEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5leHBvcnQ/LmVuYWJsZWQgPT09IHRydWU7XG4gIH1cbiAgZ2V0IHNob3dQcmVmZXJlbmNlc01lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcucHJlZmVyZW5jZXM/LmVuYWJsZWQgPT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNEZWZhdWx0R3JvdXBCeUFjdGl2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlR3JvdXBCeUtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgPT09IHRoaXMucmVzb2x2ZWRDb25maWcuZGVmYXVsdEdyb3VwQnk7XG4gIH1cblxuICBnZXQgaGFzU2F2ZWRQcmVmZXJlbmNlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2hhc1NhdmVkQ29uZmlnOyB9XG5cbiAgZ2V0IHNob3dUb29sYmFyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zaG93U2VhcmNoQmFyIHx8IHRoaXMuc2hvd1ZpZXdCdXR0b24gfHwgdGhpcy5zaG93U2xpY2VFeHBhbmRCdG47IH1cbiAgZ2V0IGZ1bGxzY3JlZW5TdXBwb3J0ZWQoKTogYm9vbGVhbiB7IHJldHVybiBGdWxsc2NyZWVuTWFuYWdlci5pc1N1cHBvcnRlZCh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTsgfVxuXG4gIGFzeW5jIHRvZ2dsZUZ1bGxzY3JlZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IEZ1bGxzY3JlZW5NYW5hZ2VyLnRvZ2dsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuX2lzRnVsbHNjcmVlbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLl9pbnZhbGlkYXRlT3JnYW5pemVyQ29uZmlnKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIENyw6llIHVuIHNuYXBzaG90IGF1dG9ub21lIGV0IGxlIHBsYWNlIGRhbnMgbGUgc3RvY2thZ2UgcGFydGFnw6kuICovXG4gIGNvcHlWaXN1YWxTbmFwc2hvdChsYWJlbD86IHN0cmluZyk6IFZpc3VhbFNuYXBzaG90IHwgbnVsbCB7XG4gICAgY29uc3Qgc25hcHNob3RMYWJlbCA9IGxhYmVsID8/ICh0aGlzLnRpdGxlIHx8ICdUYWJsZWF1Jyk7XG4gICAgaWYgKCFzbmFwc2hvdExhYmVsPy50cmltKCkpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IFZpc3VhbFNuYXBzaG90U3RvcmFnZSgpLmNyZWF0ZSh0aGlzLmNyZWF0ZVZpc3VhbFNuYXBzaG90KHNuYXBzaG90TGFiZWwudHJpbSgpKSk7XG4gICAgdGhpcy52aXN1YWxDb3BpZWQuZW1pdChzbmFwc2hvdCk7XG4gICAgdGhpcy5zaG93Q29weUZlZWRiYWNrKCk7XG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93Q29weUZlZWRiYWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvcHlGZWVkYmFjay5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIHRoaXMuY29weUZlZWRiYWNrTWVzc2FnZSA9IHRoaXMuY29weUZlZWRiYWNrLm1lc3NhZ2UgfHwgJ0NvcGnDqSc7XG4gICAgaWYgKHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyICE9PSB1bmRlZmluZWQpIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fY29weUZlZWRiYWNrVGltZXIpO1xuICAgIHRoaXMuX2NvcHlGZWVkYmFja1RpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb3B5RmVlZGJhY2tNZXNzYWdlID0gJycsIHRoaXMuY29weUZlZWRiYWNrLmR1cmF0aW9uTXMgPz8gMjIwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmdWxsc2NyZWVuY2hhbmdlJylcbiAgb25GdWxsc2NyZWVuQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzRnVsbHNjcmVlbiA9IEZ1bGxzY3JlZW5NYW5hZ2VyLmlzQWN0aXZlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuX2ludmFsaWRhdGVPcmdhbml6ZXJDb25maWcoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBleHBhbmRTbGljZVBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8udG9nZ2xlUGFuZWwoKTtcbiAgfVxuICBnZXQgc2hvd0ZpZWxkcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zaG93RmllbGRzOyB9XG4gIGdldCBzaG93R3JvdXBCeVNlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd0dyb3VwQnlTZWN0aW9uOyB9XG5cbiAgZ2V0IGZpbHRlcmVkUm93Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVHcm91cEJ5S2V5ID8gdGhpcy5fdG90YWxGaWx0ZXJlZENvdW50IDogdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBhY3RpdmVHcm91cEJ5TGFiZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5hY3RpdmVHcm91cEJ5TGFiZWw7IH1cblxuICBnZXQgdG90YWxDb2x1bW5Db3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnRvdGFsRmllbGRDb3VudDsgfVxuXG4gIGdldCBhY3RpdmVTbGljZUJ5TGFiZWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUxhYmVsOyB9XG5cbiAgZ2V0IGFjdGl2ZUR5bmFtaWNTbGljZUNvbHVtbnMoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHM7IH1cblxuICByZW1vdmVEeW5hbWljU2xpY2VCeUtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8ucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoa2V5KTtcbiAgfVxuXG4gIGdldCBncm91cEJ5Q29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10geyByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmdyb3VwQnlGaWVsZHM7IH1cblxuICBjb2xMYWJlbChjb2w6IHsga2V5OiBzdHJpbmc7IGhlYWRlcj86IHN0cmluZyB9KTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5maWVsZExhYmVsKGNvbCk7IH1cblxuICBvblNlYXJjaENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wcmVzZXJ2ZVBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5wYWdpbmF0b3I/LmZpcnN0UGFnZSgpO1xuICAgIHRoaXMuc2VhcmNoQ2hhbmdlLmVtaXQodGhpcy5zZWFyY2hRdWVyeSk7XG4gIH1cblxuICBvbkdyb3VwQnlDaGFuZ2Uoa2V5OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fb3JnYW5pemVyLnNldEdyb3VwQnkoa2V5KTtcbiAgICB0aGlzLl9ncm91cEJ5LnNldERlZmF1bHRDb2xsYXBzZWQoa2V5ICE9PSBudWxsKTtcbiAgICB0aGlzLl9ncm91cEJ5LnJlc2V0KCk7XG4gICAgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VTaXplID0gdGhpcy5yZXNvbHZlRGVmYXVsdEdyb3VwUGFnZVNpemUoKTtcbiAgICB0aGlzLnJlZnJlc2hWaWV3TW9kZWwoKTtcbiAgICB0aGlzLnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XG4gICAgdGhpcy5ncm91cEJ5Q2hhbmdlLmVtaXQoa2V5KTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICBpZiAoY29sRGVmPy5sYXp5ICYmIHRoaXMuX2xhenlDb2x1bW5TdGF0dXMuZ2V0KGtleSkgIT09ICdsb2FkZWQnKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlckxhenlGZXRjaChjb2xEZWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVCb2R5U2Nyb2xsUmVmPy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9LCAwKSk7XG4gICAgfVxuICB9XG5cbiAgb25Hcm91cFBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2dyb3VwQnkub25Hcm91cFBhZ2VTaXplQ2hhbmdlKE51bWJlcihzaXplKSk7XG4gIH1cblxuICBvbkdyb3VwU29ydFRvZ2dsZShkaXI6ICdhc2MnIHwgJ2Rlc2MnKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5vbkdyb3VwU29ydFRvZ2dsZShkaXIsIChrZXkpID0+IHtcbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Hcm91cEhlYWRlcihrZXkpLCAwKSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRMYXp5Q29sdW1uU3RhdHVzKGtleTogc3RyaW5nKTogJ2lkbGUnIHwgJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InIHtcbiAgICByZXR1cm4gdGhpcy5fbGF6eS5nZXRTdGF0dXMoa2V5KTtcbiAgfVxuXG4gIGdldExhenlSZW5kZXJUeXBlKHJvd1ZhbHVlOiBhbnkpOiAnbG9hZGluZycgfCAnZXJyb3InIHwgJ3ZhbHVlJyB7XG4gICAgcmV0dXJuIHRoaXMuX2xhenkuZ2V0UmVuZGVyVHlwZShyb3dWYWx1ZSk7XG4gIH1cblxuICByZXRyeUxhenlDb2x1bW4oY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fbGF6eS5yZXRyeShjb2x1bW4sIHRoaXMuX3Jlc29sdmVkRGF0YSwgdGhpcy5fbGF6eUNhbGxiYWNrcygpKTtcbiAgfVxuXG4gIHRyaWdnZXJMYXp5RmV0Y2goY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fbGF6eS5mZXRjaChjb2x1bW4sIHRoaXMuX3Jlc29sdmVkRGF0YSwgdGhpcy5fbGF6eUNhbGxiYWNrcygpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xhenlDYWxsYmFja3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9uUmVmcmVzaDogKCkgPT4gdGhpcy5yZWZyZXNoVmlld01vZGVsKCksXG4gICAgICBvbk1hcmtGb3JDaGVjazogKCkgPT4gdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpLFxuICAgIH07XG4gIH1cblxuICB0b2dnbGVHcm91cENvbGxhcHNlKGdyb3VwS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9ncm91cEJ5LnRvZ2dsZUdyb3VwQ29sbGFwc2UoZ3JvdXBLZXksIChrZXkpID0+IHtcbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Hcm91cEhlYWRlcihrZXkpLCAwKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvR3JvdXBIZWFkZXIoZ3JvdXBLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMudGFibGVCb2R5U2Nyb2xsUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgY29uc3Qgcm93ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGB0cltkYXRhLWdyb3VwLWtleT1cIiR7Q1NTLmVzY2FwZShncm91cEtleSl9XCJdYCk7XG4gICAgaWYgKCFyb3cpIHJldHVybjtcbiAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBwYXJzZUZsb2F0KFxuICAgICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLWFjdHVhbC1oZWFkZXItaGVpZ2h0JykgfHwgJzU2J1xuICAgICkgfHwgNTY7XG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByb3dSZWN0ID0gcm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IGN1cnJlbnRTY3JvbGxUb3AgKyAocm93UmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCkgLSBoZWFkZXJIZWlnaHQ7XG4gICAgY29udGFpbmVyLnNjcm9sbFRvKHsgdG9wOiB0YXJnZXRTY3JvbGxUb3AsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgfVxuXG4gIGlzR3JvdXBDb2xsYXBzZWQoZ3JvdXBLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9ncm91cEJ5LmlzR3JvdXBDb2xsYXBzZWQoZ3JvdXBLZXkpO1xuICB9XG5cbiAgZ3JvdXBQYWdlQmFjayhncm91cEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VCYWNrKGdyb3VwS2V5KTtcbiAgfVxuXG4gIGdyb3VwUGFnZUZvcndhcmQoZ3JvdXBLZXk6IHN0cmluZywgdG90YWxDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZ3JvdXBCeS5ncm91cFBhZ2VGb3J3YXJkKGdyb3VwS2V5LCB0b3RhbENvdW50KTtcbiAgfVxuXG4gIGdldCBoYXNBZGRhYmxlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLm1lbnVCYXNlRmllbGRzLmxlbmd0aCA+IDAgfHwgdGhpcy5fb3JnYW5pemVyLm1lbnVPcHRpb25hbEZpZWxkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IG1lbnVCYXNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIubWVudUJhc2VGaWVsZHM7XG4gIH1cblxuICBnZXQgbWVudU9wdGlvbmFsQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIubWVudU9wdGlvbmFsRmllbGRzO1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnNUb0FkZCgpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSBuZXcgU2V0KHRoaXMuYWN0aXZlRmllbGRzLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KSk7XG4gICAgcmV0dXJuICh0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgfHwgW10pLmZpbHRlcigoYykgPT4gYy5vcHRpb25hbCAmJiAhYWN0aXZlS2V5cy5oYXMoYy5rZXkpKTtcbiAgfVxuXG4gIGdldCBhbGxvd0NvbHVtblJlbW92YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5hbGxvd0ZpZWxkUmVtb3ZhbDtcbiAgfVxuXG4gIGdldCBoYXNTbGljZUNvbmZpZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG5cbiAgZ2V0IHNob3dTbGljZVBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93U2xpY2VQYW5lbDtcbiAgfVxuXG4gIG9uU2xpY2VQYW5lbENvbGxhcHNlZENoYW5nZShjb2xsYXBzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gY29sbGFwc2VkO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1BlbmRpbmdEeW5hbWljU2xpY2VzID0gKHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzPy5sZW5ndGggPz8gMCkgPiAwO1xuICAgIGNvbnN0IGhhc0NmZyA9IHRoaXMuX3NsaWNlQ29uZmlncy5sZW5ndGggPiAwXG4gICAgICB8fCB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLmxlbmd0aCA+IDBcbiAgICAgIHx8IGhhc1BlbmRpbmdEeW5hbWljU2xpY2VzO1xuICAgIGNvbnN0IHdhc1Zpc2libGUgPSB0aGlzLl9zaG93U2xpY2VQYW5lbDtcbiAgICB0aGlzLl9zaG93U2xpY2VQYW5lbCA9IGhhc0NmZyAmJiB0aGlzLl9yZXNvbHZlZERhdGEubGVuZ3RoID4gMDtcbiAgICAvLyBMZXMgZG9ubsOpZXMgdmllbm5lbnQgZCdhcnJpdmVyIDogYXBwbGlxdWVyIGxlcyBkeW5hbWljIHNsaWNlcyBldCBsZXMgZmlsdHJlcyBlbiBhdHRlbnRlLlxuICAgIC8vIExlcyBzbGljZXMgZHluYW1pcXVlcyBzb250IGFqb3V0w6llcyBhdmFudCBsZXMgZmlsdHJlcyBwb3VyIHJlbmRyZSBsZXVycyBjbMOpcyBkaXNwb25pYmxlcy5cbiAgICBpZiAoIXdhc1Zpc2libGUgJiYgdGhpcy5fc2hvd1NsaWNlUGFuZWwgJiYgKHRoaXMuX3BlbmRpbmdTbGljZUZpbHRlcnMgfHwgdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXMpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycztcbiAgICAgIGNvbnN0IGR5bmFtaWNLZXlzID0gdGhpcy5fcGVuZGluZ0R5bmFtaWNTbGljZUtleXM7XG4gICAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gbnVsbDtcbiAgICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gbnVsbDtcbiAgICAgIGNvbnN0IGFsbENvbHMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW107XG4gICAgICBjb25zb2xlLmxvZygnW1NsaWNlUmVzdG9yZV0gX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsOiBkb25uw6llcyBhcnJpdsOpZXMnLCB7IGR5bmFtaWNLZXlzLCBmaWx0ZXJzIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChkeW5hbWljS2V5cykge1xuICAgICAgICAgIGR5bmFtaWNLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGFsbENvbHMuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICAgICAgaWYgKGNvbCkgdGhpcy5hZGREeW5hbWljU2xpY2UoY29sKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVycyAmJiB0aGlzLnNsaWNlUGFuZWxSZWYpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW1NsaWNlUmVzdG9yZV0gcmVzdG9yZUZpbHRlcnMgZGVwdWlzIF9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCcsIGZpbHRlcnMpO1xuICAgICAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZi5yZXN0b3JlRmlsdGVycyhmaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0FkZFNsaWNlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmdhbml6ZXIuc2hvd1NsaWNlQnlTZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHN0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5zdGF0aWNTbGljZXNGb3JNZW51O1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnNGb3JEeW5hbWljU2xpY2UoKTogVGFibGVDb2x1bW5Qcm92aWRlcjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLnNsaWNlQnkuYXZhaWxhYmxlRm9yRHluYW1pYztcbiAgfVxuXG4gIGlzU3RhdGljU2xpY2VWaXNpYmxlKGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMuaGFzKGNvbHVtbktleSk7XG4gIH1cblxuICB0b2dnbGVTdGF0aWNTbGljZShjb2x1bW5LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgaWYgKG5leHQuaGFzKGNvbHVtbktleSkpIG5leHQuZGVsZXRlKGNvbHVtbktleSk7XG4gICAgZWxzZSBuZXh0LmFkZChjb2x1bW5LZXkpO1xuICAgIHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyA9IG5leHQ7XG4gICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZUhpZGRlblN0YXRpY0tleXModGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzKTtcbiAgICB0aGlzLl9zbGljZUNvbmZpZ3MgPSB0aGlzLl9jb21wdXRlU2xpY2VDb25maWdzKCk7XG4gICAgLy8gU2kgdW5lIHNsaWNlIHZpZW50IGQnw6p0cmUgY2FjaMOpZSwgcsOpaW5pdGlhbGlzZSBsZSBmaWx0cmUgYWN0aWYgcG91ciDDqXZpdGVyXG4gICAgLy8gdW4gZmlsdHJlIG9ycGhlbGluIChsYSBzbGljZSBuJ2VzdCBwbHVzIHZpc2libGUgbWFpcyBzb24gZmlsdHJlIHJlc3RlcmFpdCBhY3RpZilcbiAgICBpZiAobmV4dC5oYXMoY29sdW1uS2V5KSkge1xuICAgICAgdGhpcy5hY3RpdmVTbGljZUZpbHRlciA9ICgpID0+IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsKCk7XG4gICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhZGREeW5hbWljU2xpY2UoY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5zbGljZVBhbmVsUmVmPy5hZGREeW5hbWljU2xpY2UoY29sdW1uKTtcbiAgICBpZiAoY29sdW1uLmxhenkgJiYgdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoY29sdW1uLmtleSkgIT09ICdsb2FkZWQnKSB7XG4gICAgICB0aGlzLnRyaWdnZXJMYXp5RmV0Y2goY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYWxsRHluYW1pY1NsaWNlQ29sdW1ucygpOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9hbGxEeW5hbWljU2xpY2VDb2x1bW5zO1xuICB9XG5cbiAgaXNEeW5hbWljU2xpY2VBY3RpdmUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JnYW5pemVyLmlzRHluYW1pY1NsaWNlQWN0aXZlKGtleSk7XG4gIH1cblxuICB0b2dnbGVEeW5hbWljU2xpY2UoY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEeW5hbWljU2xpY2VBY3RpdmUoY29sLmtleSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoY29sLmtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRHluYW1pY1NsaWNlKGNvbCk7XG4gICAgfVxuICB9XG5cbiAgb25TbGljZUZpbHRlckNoYW5nZShwcmVkOiAocm93OiBUKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVTbGljZUZpbHRlciA9IHByZWQ7XG4gICAgdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuICAgIHRoaXMucGFnaW5hdG9yPy5maXJzdFBhZ2UoKTtcbiAgfVxuXG4gIG9uRHluYW1pY1NsaWNlS2V5c0NoYW5nZShrZXlzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5vbkR5bmFtaWNTbGljZUtleXNDaGFuZ2Uoa2V5cyk7XG4gICAgdGhpcy5fcmVjb21wdXRlU2hvd1NsaWNlUGFuZWwoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgZW1wdHlTdGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcubGFiZWxzPy5lbXB0eSB8fCB0aGlzLmkxOG4uZW1wdHlTdGF0ZTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nU3RhdGVMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnLmxhYmVscz8ubG9hZGluZyB8fCB0aGlzLmkxOG4ubG9hZGluZ1N0YXRlO1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZUlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAvLyBfcGVuZGluZ1JlbmRlciA6IGxlIHJlbmR1IGludGVybmUgbidlc3QgcGFzIGVuY29yZSB0ZXJtaW7DqSDihpIgcGFzIGRlIG1lc3NhZ2UgdmlkZSBwcsOpbWF0dXLDqVxuICAgIHJldHVybiAhdGhpcy5pc0xvYWRpbmcgJiYgdGhpcy5fcGVuZGluZ1JlbmRlciA9PT0gbnVsbCAmJiB0aGlzLl9hbGxGaWx0ZXJlZFJvd3MubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IHNob3dQYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUdyb3VwQnlLZXkgIT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5lbmFibGVkICE9PSBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFBhZ2luYXRpb25TaG93Rmlyc3RMYXN0QnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5zaG93Rmlyc3RMYXN0QnV0dG9ucyAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yZ2FuaXplci5pc0ZpZWxkRHJhZ0Ryb3BFbmFibGVkO1xuICB9XG5cbiAgZ2V0IHRvdGFsUm93cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUdyb3VwQnlLZXlcbiAgICAgID8gdGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YS5maWx0ZXIoKHIpID0+ICFyW0dST1VQX0hFQURFUl9NQVJLRVJdKS5sZW5ndGhcbiAgICAgIDogdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBHZXN0aW9uIGRlcyBjb2xvbm5lc1xuXG4gIG9uQWRkQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuX29yZ2FuaXplci5hZGRGaWVsZChjb2x1bW4pO1xuICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyBudWxsO1xuICAgIHRoaXMucmVmcmVzaFZpZXdNb2RlbCgpO1xuXG4gICAgaWYgKGNvbHVtbi5sYXp5KSB7XG4gICAgICB0aGlzLnRyaWdnZXJMYXp5RmV0Y2goY29sdW1uKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFJlcXVlc3RlZC5lbWl0KCk7XG4gICAgdGhpcy5jb2x1bW5BZGRlZC5lbWl0KGNvbHVtbik7XG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY29sdW1uOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5fb3JnYW5pemVyLmlzRmllbGRWaXNpYmxlKGNvbHVtbi5rZXkpO1xuXG4gICAgaWYgKGNoZWNrZWQgJiYgIWlzVmlzaWJsZSkge1xuICAgICAgdGhpcy5vbkFkZENvbHVtbihjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hlY2tlZCAmJiBpc1Zpc2libGUpIHtcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9vcmdhbml6ZXIucmVtb3ZlRmllbGQoY29sdW1uLmtleSk7XG4gICAgICBpZiAoIXJlbW92ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuX3ByZXNlcnZlUGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyBudWxsO1xuICAgICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgICB0aGlzLmNvbHVtblJlbW92ZWQuZW1pdChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29sdW1uVmlzaWJsZShjb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpZWxkcy5zb21lKGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gIH1cblxuICBvblJlbW92ZUNvbHVtbihjb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmFjdGl2ZUZpZWxkcy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybjtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fb3JnYW5pemVyLnJlbW92ZUZpZWxkKGNvbHVtbktleSk7XG4gICAgaWYgKCFyZW1vdmVkKSByZXR1cm47XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5jb2x1bW5SZW1vdmVkLmVtaXQoY29sdW1uKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWduZXNcblxuICBwcml2YXRlIF9yZWJ1aWxkQ2VsbERlZk1hcCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jZWxsRGVmTWFwID0gbmV3IE1hcChcbiAgICAgICh0aGlzLl9jZWxsRGVmcyA/PyBbXSkubWFwKGQgPT4gW2QuY29sdW1uS2V5LCBkLnRlbXBsYXRlXSBhcyBbc3RyaW5nLCBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogYW55OyBpbmRleDogbnVtYmVyIH0+XSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Q2VsbFRlbXBsYXRlKGtleTogc3RyaW5nKTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IGFueTsgaW5kZXg6IG51bWJlciB9PiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9jZWxsRGVmTWFwLmdldChrZXkpID8/IG51bGw7XG4gIH1cblxuICBnZXQgaGFzQ3VzdG9tQ2VsbERlZnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxEZWZNYXAuc2l6ZSA+IDA7XG4gIH1cblxuICBnZXQgaGFzUm93Q2xpY2tIYW5kbGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGVkLm9ic2VydmVkIHx8ICEhdGhpcy5yZXNvbHZlZENvbmZpZy5vblJvd1NlbGVjdGVkO1xuICB9XG5cbiAgLyoqIExhcmdldXIgbWluaW1hbGUgZHUgdGFibGVhdSBlbiBweCwgY2FsY3Vsw6llIGRlcHVpcyBsZXMgbGFyZ2V1cnMgZXhwbGljaXRlcyBkZXMgY29sb25uZXMgYWN0aXZlcy5cbiAgICogUmV0b3VybmUgbnVsbCBzaSBhdWN1bmUgY29sb25uZSBuJ2EgZGUgbGFyZ2V1ciBkw6lmaW5pZSAobGUgdGFibGVhdSByZW1wbGl0IGFsb3JzIDEwMCUgZHUgY29udGVuZXVyKS5cbiAgICogU2V1bGVzIGxlcyB2YWxldXJzIGV4cGxpY2l0ZW1lbnQgZW4gYHB4YCBzb250IHNvbW1hYmxlcyA7IGxlcyBwb3VyY2VudGFnZXMgb3UgYXV0cmVzIHVuaXTDqXMgc29udCBpZ25vcsOpcy4gKi9cbiAgZ2V0IHRhYmxlTWluV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgaGFzUmVzaXplZCA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbHVtbldpZHRocykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBoYXNTb21lRXhwbGljaXRXaWR0aCA9IGhhc1Jlc2l6ZWQgfHwgdGhpcy5hY3RpdmVGaWVsZHMuc29tZShjID0+IGMud2lkdGgpO1xuICAgIGlmICghaGFzU29tZUV4cGxpY2l0V2lkdGgpIHJldHVybiBudWxsO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuYWN0aXZlRmllbGRzKSB7XG4gICAgICBpZiAodGhpcy5fY29sdW1uV2lkdGhzW2NvbC5rZXldICE9IG51bGwpIHtcbiAgICAgICAgc3VtICs9IHRoaXMuX2NvbHVtbldpZHRoc1tjb2wua2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoY29sLndpZHRoKSB7XG4gICAgICAgIGNvbnN0IGlzUHggPSBjb2wud2lkdGgudHJpbSgpLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ3B4Jyk7XG4gICAgICAgIGNvbnN0IHB4ID0gTnVtYmVyLnBhcnNlRmxvYXQoY29sLndpZHRoKTtcbiAgICAgICAgaWYgKGlzUHggJiYgIU51bWJlci5pc05hTihweCkpIHsgc3VtICs9IHB4OyB9XG4gICAgICAgIGVsc2UgeyBzdW0gKz0gMTUwOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdW0gKz0gMTIwOyAvLyBsYXJnZXVyIG1pbmltYWxlIGVzdGltw6llIHBvdXIgdW5lIGNvbG9ubmUgc2FucyBsYXJnZXVyIGV4cGxpY2l0ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VtICsgJ3B4JztcbiAgfVxuXG4gIHRyYWNrUm93Rm4gPSAoX2luZGV4OiBudW1iZXIsIHJvdzogYW55KTogYW55ID0+XG4gICAgcm93W0dST1VQX0hFQURFUl9NQVJLRVJdID8gYF9fZ3JvdXBfJHtyb3dbUk9XX0dST1VQX0tFWV19YCA6IHJvd1tST1dfSU5ERVhfS0VZXSA/PyBfaW5kZXg7XG5cbiAgZ2V0Um93Q2xhc3Mocm93OiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICBjb25zdCBmbiA9IHRoaXMucmVzb2x2ZWRDb25maWcucm93Q2xhc3M7XG4gICAgaWYgKCFmbiB8fCByb3c/LltHUk9VUF9IRUFERVJfTUFSS0VSXSkgcmV0dXJuIHt9O1xuICAgIHJldHVybiBmbihyb3dbUk9XX1JBV19LRVldID8/IHJvdywgcm93W1JPV19JTkRFWF9LRVldID8/IDApO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IGFueSwgZXZlbnQ6IE1vdXNlRXZlbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHJvdz8uW0dST1VQX0hFQURFUl9NQVJLRVJdKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmhhc1Jvd0NsaWNrSGFuZGxlcikgcmV0dXJuO1xuICAgIGNvbnN0IHJlc29sdmVkID0gKHJvdz8uW1JPV19SQVdfS0VZXSA/PyByb3cpIGFzIFQ7XG4gICAgdGhpcy5yZXNvbHZlZENvbmZpZy5vblJvd1NlbGVjdGVkPy4ocmVzb2x2ZWQsIGV2ZW50KTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQocmVzb2x2ZWQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyYWcgJiBkcm9wXG5cbiAgb25IZWFkZXJEcmFnU3RhcnQoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgJiYgIXRoaXMuX2VkaXRNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ID0gY29sdW1uS2V5O1xuICAgIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPSBudWxsO1xuICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBjb2x1bW5LZXkpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRHJhZ092ZXIoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKCF0aGlzLmlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkICYmICF0aGlzLl9lZGl0TW9kZSkgfHwgIXRoaXMuZHJhZ2dlZENvbHVtbktleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5kcmFnT3ZlckNvbHVtbktleSA9IGNvbHVtbktleTtcbiAgfVxuXG4gIG9uSGVhZGVyRHJvcCh0YXJnZXRDb2x1bW5LZXk6IHN0cmluZywgZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGlmICgoIXRoaXMuaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgJiYgIXRoaXMuX2VkaXRNb2RlKSB8fCAhdGhpcy5kcmFnZ2VkQ29sdW1uS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IG1vdmVkID0gdGhpcy5fb3JnYW5pemVyLnJlb3JkZXJGaWVsZHModGhpcy5kcmFnZ2VkQ29sdW1uS2V5LCB0YXJnZXRDb2x1bW5LZXkpO1xuICAgIGlmICghbW92ZWQpIHtcbiAgICAgIHRoaXMub25IZWFkZXJEcmFnRW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgdGhpcy5vbkhlYWRlckRyYWdFbmQoKTtcbiAgfVxuXG4gIG9uSGVhZGVyRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnZWRDb2x1bW5LZXkgPSBudWxsO1xuICAgIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPSBudWxsO1xuICB9XG5cbiAgaXNIZWFkZXJEcm9wVGFyZ2V0KGNvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kcmFnZ2VkQ29sdW1uS2V5ICYmIHRoaXMuZHJhZ092ZXJDb2x1bW5LZXkgPT09IGNvbHVtbktleSAmJiB0aGlzLmRyYWdnZWRDb2x1bW5LZXkgIT09IGNvbHVtbktleTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcsOpZsOpcmVuY2VzIDogbW9kZSDDqWRpdGlvblxuXG4gIGVudGVyRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZWRpdE1vZGUgPSB0cnVlO1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWVzc2FnZSA9IG51bGw7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY29uZmlybUVkaXRNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIETDqW1hcnJlIGxlIHJlc2l6ZSBkJ3VuZSBjb2xvbm5lIChtb3VzZWRvd24gc3VyIGxhIHBvaWduw6llIGRyb2l0ZSkuICovXG4gIG9uUmVzaXplU3RhcnQoY29sdW1uS2V5OiBzdHJpbmcsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lZGl0TW9kZSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCB0aCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ3RoJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghdGgpIHJldHVybjtcblxuICAgIGNvbnN0IHNjcm9sbEVsID0gdGhpcy50YWJsZUJvZHlTY3JvbGxSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHNjcm9sbEVsKSB7XG4gICAgICBjb25zdCBhbGxUaCA9IHNjcm9sbEVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCd0aC5tYXQtbWRjLWhlYWRlci1jZWxsJyk7XG4gICAgICBhbGxUaC5mb3JFYWNoKHRoRWwgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSB0aEVsLmdldEF0dHJpYnV0ZSgnbWF0LWNvbHVtbi1oZWFkZXInKSB8fCB0aEVsLmdldEF0dHJpYnV0ZSgnbWF0LXNvcnQtaGVhZGVyJykgfHwgJyc7XG4gICAgICAgIGNvbnN0IGNvbENsYXNzID0gQXJyYXkuZnJvbSh0aEVsLmNsYXNzTGlzdCkuZmluZChjID0+IGMuc3RhcnRzV2l0aCgnbWF0LWNvbHVtbi0nKSk7XG4gICAgICAgIGNvbnN0IGNvbEtleSA9IGNvbENsYXNzID8gY29sQ2xhc3MucmVwbGFjZSgnbWF0LWNvbHVtbi0nLCAnJykgOiBudWxsO1xuICAgICAgICBpZiAoY29sS2V5ICYmIHRoaXMuX2NvbHVtbldpZHRoc1tjb2xLZXldID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7IC4uLnRoaXMuX2NvbHVtbldpZHRocywgW2NvbEtleV06IHRoRWwub2Zmc2V0V2lkdGggfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzaXplU3RhdGUgPSB7IGtleTogY29sdW1uS2V5LCBzdGFydFg6IGV2ZW50LmNsaWVudFgsIHN0YXJ0V2lkdGg6IHRoLm9mZnNldFdpZHRoIH07XG5cbiAgICBjb25zdCBvbk1vdmUgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9yZXNpemVTdGF0ZSkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsdGEgPSBlLmNsaWVudFggLSB0aGlzLl9yZXNpemVTdGF0ZS5zdGFydFg7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KDYwLCB0aGlzLl9yZXNpemVTdGF0ZS5zdGFydFdpZHRoICsgZGVsdGEpO1xuICAgICAgdGhpcy5fY29sdW1uV2lkdGhzID0geyAuLi50aGlzLl9jb2x1bW5XaWR0aHMsIFt0aGlzLl9yZXNpemVTdGF0ZS5rZXldOiBuZXdXaWR0aCB9O1xuICAgICAgLy8gZGV0ZWN0Q2hhbmdlcygpIHBvdXIgZm9yY2VyIGxhIG1pc2Ugw6Agam91ciBpbW3DqWRpYXRlIGVuIG1vZGUgT25QdXNoXG4gICAgICAvLyAobGVzIGxpc3RlbmVycyB3aW5kb3cgdG91cm5lbnQgaG9ycyB6b25lIEFuZ3VsYXIgYXZlYyBydW5PdXRzaWRlQW5ndWxhcilcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uVXAgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNpemVTdGF0ZSA9IG51bGw7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3ZlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25VcCk7XG4gICAgfTtcblxuICAgIC8vIExpc3RlbmVycyBob3JzIHpvbmUgQW5ndWxhciBwb3VyIMOpdml0ZXIgZGVzIGN5Y2xlcyBDRCDDoCBjaGFxdWUgbW91c2Vtb3ZlXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdmUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvblVwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXRvdXJuZSBsYSBsYXJnZXVyIENTUyBkJ3VuZSBjb2xvbm5lIChweCBzaSBwZXJzb25uYWxpc8OpZSwgc2lub24gbGEgdmFsZXVyIGRlIGNvbmZpZyBvdSBhdXRvKS4gKi9cbiAgZ2V0Q29sdW1uV2lkdGgoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9jb2x1bW5XaWR0aHNba2V5XSAhPSBudWxsKSByZXR1cm4gdGhpcy5fY29sdW1uV2lkdGhzW2tleV0gKyAncHgnO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbk1hcC5nZXQoa2V5KTtcbiAgICByZXR1cm4gY29sPy53aWR0aCA/PyAnYXV0byc7XG4gIH1cblxuICAvLyDilIDilIAgUHLDqWbDqXJlbmNlcyA6IHNhdmUgLyBjbGVhclxuXG4gIHNhdmVQcmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlcikgcmV0dXJuO1xuICAgIGNvbnN0IGR5bmFtaWNTbGljZUtleXMgPSB0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hY3RpdmVEeW5hbWljRmllbGRzLm1hcChjID0+IGMua2V5KTtcbiAgICBjb25zdCBjb25maWc6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyA9IHtcbiAgICAgIHNlYXJjaDogICAgICAgICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgfHwgdW5kZWZpbmVkLFxuICAgICAgZ3JvdXBCeTogICAgICAgICAgICAgdGhpcy5hY3RpdmVHcm91cEJ5S2V5LFxuICAgICAgY29sdW1uT3JkZXI6ICAgICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpLFxuICAgICAgdmlzaWJsZUNvbHVtbnM6ICAgICAgdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpLFxuICAgICAgY29sdW1uV2lkdGhzOiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29sdW1uV2lkdGhzKS5sZW5ndGggPyB7IC4uLnRoaXMuX2NvbHVtbldpZHRocyB9IDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VQYW5lbENvbGxhcHNlZDogdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCxcbiAgICAgIGhpZGRlblNsaWNlS2V5czogICAgIFsuLi50aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXNdLFxuICAgICAgZHluYW1pY1NsaWNlS2V5czogICAgZHluYW1pY1NsaWNlS2V5cy5sZW5ndGggPyBkeW5hbWljU2xpY2VLZXlzIDogdW5kZWZpbmVkLFxuICAgICAgc2xpY2VGaWx0ZXJzOiAgICAgICAgdGhpcy5zbGljZVBhbmVsUmVmID8gdGhpcy5zbGljZVBhbmVsUmVmLmdldEFjdGl2ZUZpbHRlcnMoKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlci5zYXZlKGNvbmZpZyk7XG4gICAgdGhpcy5faGFzU2F2ZWRDb25maWcgPSB0cnVlO1xuICAgIHRoaXMuX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UodGhpcy5pMThuLnByZWZlcmVuY2VzU2F2ZWRNZXNzYWdlKTtcbiAgfVxuXG4gIGNsZWFyUHJlZmVyZW5jZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIpIHJldHVybjtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01hbmFnZXIuY2xlYXIoKTtcbiAgICB0aGlzLl9oYXNTYXZlZENvbmZpZyA9IGZhbHNlO1xuXG4gICAgLy8gQ2FwdHVyZXIgbGVzIGR5bmFtaWMgc2xpY2VzIGFjdGl2ZXMgQVZBTlQgbGUgcmVzZXQgKHJlc2V0VG9EZWZhdWx0cygpIGxlcyB2aWRlKVxuICAgIGNvbnN0IGR5bmFtaWNTbGljZXNUb1JlbW92ZSA9IHRoaXMuX29yZ2FuaXplci5zbGljZUJ5LmFjdGl2ZUR5bmFtaWNGaWVsZHMuc2xpY2UoKTtcblxuICAgIC8vIFJlc2V0IGNvbXBsZXQgZGUgbCfDqXRhdCB2ZXJzIGxlcyB2YWxldXJzIHBhciBkw6lmYXV0IGRlIGxhIGNvbmZpZ1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLl9jb2x1bW5XaWR0aHMgPSB7fTtcbiAgICB0aGlzLl9zbGljZVBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XG4gICAgLy8gU3luY2hyb25pc2VyIGwnw6l0YXQgaW50ZXJuZSBkdSBzbGljZS1wYW5lbCA6IHNpIGxlIGNvbXBvc2FudCBlc3QgZW4gw6l0YXQgY29sbGFwc2VkXG4gICAgLy8gKGwndXRpbGlzYXRldXIgbCdhdmFpdCBmZXJtw6kgYXByw6hzIGxhIHNhdXZlZ2FyZGUpLCBsZSByb3V2cmlyIGV4cGxpY2l0ZW1lbnQgcG91clxuICAgIC8vIMOpdml0ZXIgcXVlIGRpc3BsYXk6bm9uZSBzb2l0IHJldGlyw6kgbWFpcyBxdWUgaXNDb2xsYXBzZWQgaW50ZXJuZSByZXN0ZSDDoCB0cnVlLlxuICAgIGlmICh0aGlzLnNsaWNlUGFuZWxSZWY/LmlzQ29sbGFwc2VkKSB7XG4gICAgICB0aGlzLnNsaWNlUGFuZWxSZWYudG9nZ2xlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZChmYWxzZSk7XG5cbiAgICAvLyBTbGljZXMgc3RhdGlxdWVzIDogcmV2ZW5pciBhdXggc2V1bGVzIGNlbGxlcyBjYWNow6llcyBwYXIgbGEgY29uZmlnIChwYXMgcGFyIGwndXRpbGlzYXRldXIpXG4gICAgdGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzID0gbmV3IFNldCh0aGlzLl9jb25maWdIaWRkZW5LZXlzKTtcbiAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlSGlkZGVuU3RhdGljS2V5cyh0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMpO1xuXG4gICAgLy8gQ29sb25uZXMgZXQgZ3JvdXBCeSA6IHJlc2V0IHZpYSBsYSBmYWNhZGUgKHJldGlyZSBsZXMgb3B0aW9ubmVsbGVzLCByZW1ldCBsJ29yZHJlIGNvbmZpZylcbiAgICB0aGlzLl9vcmdhbml6ZXIucmVzZXRUb0RlZmF1bHRzKCk7XG4gICAgdGhpcy5fZGVmYXVsdEdyb3VwQnlBcHBsaWVkID0gZmFsc2U7XG5cbiAgICAvLyBEeW5hbWljIHNsaWNlcyA6IGxlcyByZXRpcmVyIGR1IHNsaWNlIHBhbmVsIGF2ZWMgbGEgbGlzdGUgY2FwdHVyw6llIGF2YW50IGxlIHJlc2V0XG4gICAgZHluYW1pY1NsaWNlc1RvUmVtb3ZlLmZvckVhY2goY29sID0+IHtcbiAgICAgIHRoaXMuc2xpY2VQYW5lbFJlZj8ucmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoY29sLmtleSk7XG4gICAgfSk7XG5cbiAgICAvLyBGaWx0cmUgZGUgc2xpY2UgYWN0aWZcbiAgICB0aGlzLmFjdGl2ZVNsaWNlRmlsdGVyID0gKCkgPT4gdHJ1ZTtcbiAgICBpZiAodGhpcy5zbGljZVBhbmVsUmVmKSB0aGlzLnNsaWNlUGFuZWxSZWYucmVzdG9yZUZpbHRlcnMoe30pO1xuXG4gICAgLy8gUmFmcmHDrmNoaXQgdG91dGUgbGEgdnVlXG4gICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcbiAgICB0aGlzLnJlbmRlcmVkQ29sdW1ucyA9IHRoaXMuYWN0aXZlRmllbGRzLm1hcChjID0+IGMua2V5KTtcbiAgICB0aGlzLl9wZW5kaW5nRHluYW1pY1NsaWNlS2V5cyA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1NsaWNlRmlsdGVycyA9IG51bGw7XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG5cbiAgICB0aGlzLl9zaG93UHJlZmVyZW5jZXNNZXNzYWdlKHRoaXMuaTE4bi5wcmVmZXJlbmNlc0NsZWFyZWRNZXNzYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZWZlcmVuY2VzTWVzc2FnZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX3Nob3dQcmVmZXJlbmNlc01lc3NhZ2UobXNnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgIT09IG51bGwpIGNsZWFyVGltZW91dCh0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lcik7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbXNnO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc01lc3NhZ2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlVGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNZXNzYWdlID0gbnVsbDtcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9LCA0MDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UHJlZmVyZW5jZXMoc2F2ZWQ6IGltcG9ydCgnLi4vanF1ZXJ5LXRhYmxlLm1vZGVsJykuU2F2ZWRUYWJsZUNvbmZpZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXNhdmVkKSByZXR1cm47XG4gICAgLy8gUmVjaGVyY2hlXG4gICAgaWYgKHNhdmVkLnNlYXJjaCkgdGhpcy5zZWFyY2hRdWVyeSA9IHNhdmVkLnNlYXJjaDtcbiAgICAvLyBMYXJnZXVycyBjb2xvbm5lc1xuICAgIGlmIChzYXZlZC5jb2x1bW5XaWR0aHMpIHRoaXMuX2NvbHVtbldpZHRocyA9IHsgLi4uc2F2ZWQuY29sdW1uV2lkdGhzIH07XG4gICAgLy8gR3JvdXAgYnlcbiAgICBpZiAoc2F2ZWQuZ3JvdXBCeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9vcmdhbml6ZXIuc2V0R3JvdXBCeShzYXZlZC5ncm91cEJ5KTtcbiAgICAgIGlmIChzYXZlZC5ncm91cEJ5KSB7XG4gICAgICAgIHRoaXMuX2dyb3VwQnkuc2V0RGVmYXVsdENvbGxhcHNlZCh0cnVlKTtcbiAgICAgICAgdGhpcy5fZ3JvdXBCeS5yZXNldCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyDDiXRhdCBwYW5uZWF1IHNsaWNlXG4gICAgaWYgKHNhdmVkLnNsaWNlUGFuZWxDb2xsYXBzZWQgIT09IHVuZGVmaW5lZCkgdGhpcy5fc2xpY2VQYW5lbENvbGxhcHNlZCA9IHNhdmVkLnNsaWNlUGFuZWxDb2xsYXBzZWQ7XG4gICAgLy8gU2xpY2VzIHN0YXRpcXVlcyBjYWNow6llcyDigJQgb24gdXRpbGlzZSBsYSB2YWxldXIgZXhhY3RlIHNhdXZlZ2FyZMOpZSAocGFzIGxlcyBkZWZhdWx0cyBkZSBjb25maWcpXG4gICAgaWYgKHNhdmVkLmhpZGRlblNsaWNlS2V5cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0KHNhdmVkLmhpZGRlblNsaWNlS2V5cyk7XG4gICAgICB0aGlzLl9vcmdhbml6ZXIudXBkYXRlSGlkZGVuU3RhdGljS2V5cyh0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMpO1xuICAgIH1cbiAgICAvLyBDb2xvbm5lcyB2aXNpYmxlcyArIG9yZHJlIOKAlCByZWNvbnN0cnVpdCBhY3RpdmVGaWVsZHMgZW4gdW5lIHNldWxlIHBhc3NlLlxuICAgIC8vIE9uIHBhcnQgZGUgc2F2ZWQuY29sdW1uT3JkZXIgKG9yZHJlIHNhdXZlZ2FyZMOpKSBzaSBkaXNwb25pYmxlLCBzaW5vbiBzYXZlZC52aXNpYmxlQ29sdW1ucy5cbiAgICAvLyBDZWxhIGfDqHJlIMOgIGxhIGZvaXMgOiBjb2xvbm5lcyBvcHRpb25uZWxsZXMgYWpvdXTDqWVzLCBjb2xvbm5lcyByZXRpcsOpZXMsIGV0IHLDqW9yZG9ubmFuY2VtZW50LlxuICAgIGNvbnN0IHRhcmdldEtleXMgPSBzYXZlZC5jb2x1bW5PcmRlciA/PyBzYXZlZC52aXNpYmxlQ29sdW1ucztcbiAgICBpZiAodGFyZ2V0S2V5cz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhbGxCeUtleSA9IG5ldyBNYXAoKHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXSkubWFwKGMgPT4gW2Mua2V5LCBjXSkpO1xuICAgICAgLy8gQ29sb25uZXMgZGFucyBsJ29yZHJlIHNhdXZlZ2FyZMOpIChvbiBuZSBnYXJkZSBxdWUgY2VsbGVzIGNvbm51ZXMgZGUgbGEgY29uZmlnKVxuICAgICAgY29uc3Qgb3JkZXJlZCA9IHRhcmdldEtleXNcbiAgICAgICAgLm1hcChrZXkgPT4gYWxsQnlLZXkuZ2V0KGtleSkpXG4gICAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIFRhYmxlQ29sdW1uUHJvdmlkZXI8VD4gPT4gYyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIC8vIENvbG9ubmVzIGFjdGl2ZXMgYWN0dWVsbGxlbWVudCBub24gcHLDqXNlbnRlcyBkYW5zIHRhcmdldEtleXMgKG5vbi1vcHRpb25hbCBwYXNzw6llcyBzb3VzIHNpbGVuY2UpXG4gICAgICAvLyDihpIgb24gbGVzIGV4Y2x1dCA6IGwndXRpbGlzYXRldXIgYXZhaXQgZXhwbGljaXRlbWVudCBjaG9pc2kgY2Ugc291cy1lbnNlbWJsZVxuICAgICAgaWYgKG9yZGVyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9vcmdhbml6ZXIuc2V0QWN0aXZlRmllbGRzKG9yZGVyZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGaWx0cmVzIGFjdGlmcyBkdSBzbGljZSBwYW5lbFxuICAgIC8vIEZpbHRyZXMgYWN0aWZzIGR1IHNsaWNlIHBhbmVsIOKAlCB0b3Vqb3VycyBzdG9ja8OpcyBlbiBwZW5kaW5nIDpcbiAgICAvLyBhcHBsaXF1w6lzIHBhciBfYXBwbHlQZW5kaW5nRHluYW1pY1NsaWNlS2V5cyAoc2kgZHluYW1pYyBzbGljZXMpIG91XG4gICAgLy8gcGFyIF9yZWNvbXB1dGVTaG93U2xpY2VQYW5lbCAocXVhbmQgbGVzIGRvbm7DqWVzIGFycml2ZW50IGV0IHJlbmRlbnQgbGUgcGFuZWwgdmlzaWJsZSlcbiAgICBpZiAoc2F2ZWQuc2xpY2VGaWx0ZXJzICYmIE9iamVjdC5rZXlzKHNhdmVkLnNsaWNlRmlsdGVycykubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nU2xpY2VGaWx0ZXJzID0gc2F2ZWQuc2xpY2VGaWx0ZXJzO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUZpbHRlckNvbHVtbktleXMgPSBPYmplY3QuZW50cmllcyhzYXZlZC5zbGljZUZpbHRlcnMgPz8ge30pXG4gICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZXNdKSA9PiBrZXkuc3RhcnRzV2l0aCgnY29sdW1uOicpICYmIHZhbHVlcy5sZW5ndGggPiAwKVxuICAgICAgLm1hcCgoW2tleV0pID0+IGtleS5zbGljZSgnY29sdW1uOicubGVuZ3RoKSk7XG4gICAgY29uc3Qgc3RhdGljU2xpY2VLZXlzID0gbmV3IFNldChcbiAgICAgICh0aGlzLnJlc29sdmVkQ29uZmlnLnNsaWNlcyA/PyBbXSlcbiAgICAgICAgLm1hcChzbGljZSA9PiBzbGljZS5jb2x1bW5LZXkpXG4gICAgICAgIC5maWx0ZXIoKGtleSk6IGtleSBpcyBzdHJpbmcgPT4gISFrZXkpXG4gICAgKTtcbiAgICBjb25zdCBkeW5hbWljU2xpY2VLZXlzID0gbmV3IFNldCh0aGlzLl9vcmdhbml6ZXIuc2xpY2VCeS5hbGxEeW5hbWljRmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZC5rZXkpKTtcblxuICAgIC8vIFVuIGZpbHRyZSBwZXJzaXN0YW50IGRvaXQgdG91am91cnMgcmV0cm91dmVyIHNhIHNsaWNlIDogdW5lIHByw6lmw6lyZW5jZVxuICAgIC8vIGFuY2llbm5lIG91IGluY29tcGzDqHRlIG5lIHBldXQgcGFzIGxhaXNzZXIgdW4gZmlsdHJlIHNhbnMgcGFubmVhdSB2aXNpYmxlLlxuICAgIGFjdGl2ZUZpbHRlckNvbHVtbktleXNcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHN0YXRpY1NsaWNlS2V5cy5oYXMoa2V5KSlcbiAgICAgIC5mb3JFYWNoKGtleSA9PiB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMuZGVsZXRlKGtleSkpO1xuICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG5cbiAgICAvLyBVbmUgY2zDqSBkZSBmaWx0cmUgc3VyIHVuZSBjb2xvbm5lIG5vbiBzdGF0aXF1ZSBkw6lzaWduZSB1bmUgc2xpY2UgZHluYW1pcXVlLlxuICAgIC8vIEVsbGUgY29tcGzDqHRlIGR5bmFtaWNTbGljZUtleXMgcG91ciBsZXMgY29uZmlndXJhdGlvbnMgc2F1dmVnYXJkw6llcyBhdmFudFxuICAgIC8vIHF1ZSBjZSBjaGFtcCBuZSBzb2l0IHBlcnNpc3RhbnQuXG4gICAgY29uc3QgcGVyc2lzdGVkRHluYW1pY0tleXMgPSBbXG4gICAgICAuLi4oc2F2ZWQuZHluYW1pY1NsaWNlS2V5cyA/PyBbXSksXG4gICAgICAuLi5hY3RpdmVGaWx0ZXJDb2x1bW5LZXlzLFxuICAgIF07XG4gICAgY29uc3QgdW5pcXVlRHluYW1pY0tleXMgPSBbLi4ubmV3IFNldChwZXJzaXN0ZWREeW5hbWljS2V5cyldLmZpbHRlcihcbiAgICAgIGtleSA9PiAhc3RhdGljU2xpY2VLZXlzLmhhcyhrZXkpICYmIGR5bmFtaWNTbGljZUtleXMuaGFzKGtleSlcbiAgICApO1xuICAgIGlmICh1bmlxdWVEeW5hbWljS2V5cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdEeW5hbWljU2xpY2VLZXlzID0gdW5pcXVlRHluYW1pY0tleXM7XG4gICAgfVxuICB9XG5cbiAgY2FuUmVtb3ZlQ29sdW1uKGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9vcmdhbml6ZXIuYWxsb3dGaWVsZFJlbW92YWwgJiZcbiAgICAgIGNvbHVtbi5yZW1vdmFibGUgIT09IGZhbHNlICYmXG4gICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5sZW5ndGggPiAxXG4gICAgKTtcbiAgfVxuXG4gIGlzQ2VsbEVtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnIHx8IHZhbHVlID09IG51bGw7XG4gIH1cblxuICBhc1RpdGxlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEV4cG9ydCBDU1ZcblxuICBvbkV4cG9ydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9leHBvcnQuZXhwb3J0KCk7XG4gIH1cblxuICAvKiogQ2FwdHVyZSBsZXMgbGlnbmVzIGV0IGwnw6l0YXQgYWN0dWVsbGVtZW50IHZpc2libGVzIGRhbnMgdW4gc25hcHNob3QgYXV0b25vbWUuICovXG4gIGNyZWF0ZVZpc3VhbFNuYXBzaG90KGxhYmVsID0gdGhpcy50aXRsZSB8fCAnVGFibGVhdScpOiBWaXN1YWxTbmFwc2hvdERyYWZ0IHtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoY29udGFpbnNGdW5jdGlvbih0aGlzLnJlc29sdmVkQ29uZmlnKSkge1xuICAgICAgd2FybmluZ3MucHVzaCgnQ2VydGFpbmVzIGZvbmN0aW9ucyBkZSBjb25maWd1cmF0aW9uIG5lIHNvbnQgcGFzIHRyYW5zcG9ydGFibGVzLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGxhYmVsLFxuICAgICAgY29uZmlnOiBjbG9uZVNlcmlhbGl6YWJsZSh7XG4gICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnM/Lm1hcChjb2x1bW4gPT4gc2VyaWFsaXphYmxlQ29sdW1uKGNvbHVtbikpLFxuICAgICAgICBzZWFyY2g6IHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoLFxuICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnJlc29sdmVkQ29uZmlnLnBhZ2luYXRpb24sXG4gICAgICB9KSxcbiAgICAgIHN0YXRlOiBjbG9uZVNlcmlhbGl6YWJsZSh7XG4gICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hRdWVyeSxcbiAgICAgICAgZ3JvdXBCeTogdGhpcy5hY3RpdmVHcm91cEJ5S2V5LFxuICAgICAgICBjb2x1bW5PcmRlcjogdGhpcy5hY3RpdmVGaWVsZHMubWFwKGNvbHVtbiA9PiBjb2x1bW4ua2V5KSxcbiAgICAgICAgdmlzaWJsZUNvbHVtbnM6IHRoaXMuYWN0aXZlRmllbGRzLm1hcChjb2x1bW4gPT4gY29sdW1uLmtleSksXG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VTaXplID8/IHRoaXMucGFnZVNpemUsXG4gICAgICB9KSxcbiAgICAgIGRhdGE6IGNsb25lU2VyaWFsaXphYmxlKHRoaXMuX2FsbEZpbHRlcmVkUm93cyksXG4gICAgICB3YXJuaW5ncyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFwcGxpcXVlIGwnw6l0YXQgY29tcGF0aWJsZSBldCByZXRvdXJuZSBsZXMgZG9ubsOpZXMgw6AgZm91cm5pciBhdSBjb21wb3NhbnQgY2libGUuICovXG4gIGFwcGx5VmlzdWFsU25hcHNob3Qoc25hcHNob3Q6IFZpc3VhbFNuYXBzaG90KTogVmlzdWFsU25hcHNob3RBcHBseVJlc3VsdCB7XG4gICAgaWYgKHNuYXBzaG90LnR5cGUgIT09ICd0YWJsZScpIHtcbiAgICAgIHJldHVybiB7IGFwcGxpZWQ6IGZhbHNlLCByZXN0b3JlZDogW10sIHNraXBwZWQ6IFsndHlwZSddLCB3YXJuaW5nczogWydMZSBzbmFwc2hvdCBuXFwnZXN0IHBhcyB1biB0YWJsZWF1LiddIH07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5zdGF0ZSBhcyB7XG4gICAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgICBncm91cEJ5Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHZpc2libGVDb2x1bW5zPzogc3RyaW5nW107XG4gICAgICBjb2x1bW5PcmRlcj86IHN0cmluZ1tdO1xuICAgICAgY29sdW1uV2lkdGhzPzogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbiAgICB9O1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IG5ldyBNYXAoKHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyA/PyBbXSkubWFwKGNvbHVtbiA9PiBbY29sdW1uLmtleSwgY29sdW1uXSkpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEtleXMgPSBzdGF0ZS5jb2x1bW5PcmRlciA/PyBzdGF0ZS52aXNpYmxlQ29sdW1ucyA/PyBbXTtcbiAgICBjb25zdCBjb21wYXRpYmxlS2V5cyA9IHJlcXVlc3RlZEtleXMuZmlsdGVyKGtleSA9PiBhdmFpbGFibGUuaGFzKGtleSkpO1xuICAgIGNvbnN0IHNraXBwZWQgPSByZXF1ZXN0ZWRLZXlzLmZpbHRlcihrZXkgPT4gIWF2YWlsYWJsZS5oYXMoa2V5KSk7XG4gICAgY29uc3QgcmVzdG9yZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoY29tcGF0aWJsZUtleXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9vcmdhbml6ZXIuc2V0QWN0aXZlRmllbGRzKGNvbXBhdGlibGVLZXlzLm1hcChrZXkgPT4gYXZhaWxhYmxlLmdldChrZXkpISkpO1xuICAgICAgcmVzdG9yZWQucHVzaCgnY29sdW1ucycpO1xuICAgICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3RhdGUuc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHN0YXRlLnNlYXJjaDtcbiAgICAgIHJlc3RvcmVkLnB1c2goJ3NlYXJjaCcpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZ3JvdXBCeSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RhdGUuZ3JvdXBCeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gc3RhdGUuZ3JvdXBCeSAmJiBhdmFpbGFibGUuaGFzKHN0YXRlLmdyb3VwQnkpID8gc3RhdGUuZ3JvdXBCeSA6IG51bGw7XG4gICAgICB0aGlzLl9vcmdhbml6ZXIuc2V0R3JvdXBCeShncm91cEtleSk7XG4gICAgICByZXN0b3JlZC5wdXNoKCdncm91cEJ5Jyk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5jb2x1bW5XaWR0aHMpIHtcbiAgICAgIHRoaXMuX2NvbHVtbldpZHRocyA9IHsgLi4uc3RhdGUuY29sdW1uV2lkdGhzIH07XG4gICAgICByZXN0b3JlZC5wdXNoKCdjb2x1bW5XaWR0aHMnKTtcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoVmlld01vZGVsKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcGxpZWQ6IHRydWUsXG4gICAgICByZXN0b3JlZCxcbiAgICAgIHNraXBwZWQsXG4gICAgICB3YXJuaW5nczogc25hcHNob3Qud2FybmluZ3MgPz8gW10sXG4gICAgICBkYXRhOiBjbG9uZVNlcmlhbGl6YWJsZShzbmFwc2hvdC5kYXRhKSxcbiAgICB9O1xuICB9XG5cbiAgLy8g4pSA4pSAIFBpcGVsaW5lIGRlIGRvbm7DqWVzIChwcml2w6kpXG5cbiAgcHJpdmF0ZSByZWZyZXNoVmlld01vZGVsKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc29sdmVkRGF0YSA9IHRoaXMucmVzb2x2ZURhdGEoKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnID0gdGhpcy5idWlsZEVmZmVjdGl2ZUNvbmZpZygpO1xuICAgIHRoaXMuX2NvbHVtbk1hcCA9IG5ldyBNYXAoKHRoaXMucmVzb2x2ZWRDb25maWcuY29sdW1ucyB8fCBbXSkubWFwKGMgPT4gW2Mua2V5LCBjXSkpO1xuXG4gICAgLy8g4pSA4pSAIEluaXRpYWxpc2VyIGxlIGdlc3Rpb25uYWlyZSBkZSBwcsOpZsOpcmVuY2VzIHNpIGwnb3B0aW9uIGVzdCBhY3RpdsOpZVxuICAgIGNvbnN0IHByZWZzSWQgPSB0aGlzLnJlc29sdmVkQ29uZmlnLnByZWZlcmVuY2VzPy5lbmFibGVkXG4gICAgICA/IHRoaXMucmVzb2x2ZWRDb25maWcucHJlZmVyZW5jZXMudGFibGVJZFxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGN1cnJlbnRJZCA9IHByZWZzSWQgPz8gbnVsbDtcbiAgICAvLyBQcsOpZsOpcmVuY2VzIMOgIGFwcGxpcXVlciBhcHLDqHMgX29yZ2FuaXplci51cGRhdGUoKSAocXVhbmQgYWN0aXZlRmllbGRzIGVzdCBkw6lqw6AgcGV1cGzDqSlcbiAgICBsZXQgcGVuZGluZ1ByZWZzOiBpbXBvcnQoJy4uL2pxdWVyeS10YWJsZS5tb2RlbCcpLlNhdmVkVGFibGVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoY3VycmVudElkICYmIHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlcj8ua2V5ICE9PSAoJ2pxdF9wcmVmc18nICsgY3VycmVudElkKSkge1xuICAgICAgdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyID0gbmV3IFRhYmxlUHJlZmVyZW5jZXNNYW5hZ2VyKGN1cnJlbnRJZCk7XG4gICAgICB0aGlzLl9oYXNTYXZlZENvbmZpZyA9IHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlci5oYXNTYXZlZCgpO1xuICAgICAgcGVuZGluZ1ByZWZzID0gdGhpcy5fcHJlZmVyZW5jZXNNYW5hZ2VyLmxvYWQoKTtcbiAgICB9IGVsc2UgaWYgKCFjdXJyZW50SWQpIHtcbiAgICAgIHRoaXMuX3ByZWZlcmVuY2VzTWFuYWdlciA9IG51bGw7XG4gICAgICB0aGlzLl9oYXNTYXZlZENvbmZpZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIETDqWzDqGd1ZSDDoCBsYSBmYWNhZGUgOiBtaXNlIMOgIGpvdXIgZGUgbCfDqXRhdCBWaWV3IChjb2xvbm5lcywgZ3JvdXBCeSBtZXRhLCBzbGljZUJ5IG1ldGEpXG4gICAgdGhpcy5fb3JnYW5pemVyLnVwZGF0ZSh7XG4gICAgICBjb25maWc6IHRoaXMucmVzb2x2ZWRDb25maWcudmlldyxcbiAgICAgIGZpZWxkczogdGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdLFxuICAgICAgc2xpY2VDb25maWdzOiB0aGlzLnJlc29sdmVkQ29uZmlnLnNsaWNlcyA/PyBbXSxcbiAgICAgIGRlZmF1bHRHcm91cEJ5OiB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRHcm91cEJ5LFxuICAgIH0pO1xuXG4gICAgaWYgKCFwZW5kaW5nUHJlZnMgJiYgIXRoaXMuX2RlZmF1bHRHcm91cEJ5QXBwbGllZCAmJiAhdGhpcy5fb3JnYW5pemVyLmdyb3VwQnkudXNlckN1c3RvbWl6ZWQgJiYgdGhpcy5fb3JnYW5pemVyLmdyb3VwQnkuYWN0aXZlS2V5ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRHcm91cEJ5QXBwbGllZCA9IHRydWU7XG4gICAgICB0aGlzLl9ncm91cEJ5LnNldERlZmF1bHRDb2xsYXBzZWQodHJ1ZSk7XG4gICAgICB0aGlzLl9ncm91cEJ5LnJlc2V0KCk7XG4gICAgICB0aGlzLl9ncm91cEJ5Lmdyb3VwUGFnZVNpemUgPSB0aGlzLnJlc29sdmVEZWZhdWx0R3JvdXBQYWdlU2l6ZSgpO1xuICAgIH1cblxuICAgIC8vIFN5bmNocm9uaXNlIGxhIHByb3ByacOpdMOpIHN0YWJsZSAow6l2aXRlIE5HMDEwMCDigJQgbGEgZmFjYWRlIGVzdCBzb3VyY2UgZGUgdsOpcml0w6kpXG4gICAgdGhpcy5hY3RpdmVGaWVsZHMgPSB0aGlzLl9vcmdhbml6ZXIuZmllbGRzLmFjdGl2ZUZpZWxkcztcblxuICAgIHRoaXMucmVuZGVyZWRDb2x1bW5zID0gdGhpcy5hY3RpdmVGaWVsZHMubWFwKGMgPT4gYy5rZXkpO1xuXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCB0aGlzLnJlc29sdmVQYWdlU2l6ZSgpO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5yZXNvbHZlUGFnZVNpemVPcHRpb25zKCk7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5ID0gdGhpcy5yZXNvbHZlUGFnZVNpemVPcHRpb25zR3JvdXBCeSgpO1xuICAgIGlmICh0aGlzLmdyb3VwUGFnZVNpemUgIT09IDAgJiYgIXRoaXMucGFnZVNpemVPcHRpb25zR3JvdXBCeS5pbmNsdWRlcyh0aGlzLmdyb3VwUGFnZVNpemUpKSB7XG4gICAgICB0aGlzLmdyb3VwUGFnZVNpemUgPSB0aGlzLnJlc29sdmVEZWZhdWx0R3JvdXBQYWdlU2l6ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYXR0YWNoUGFnaW5hdG9yKCk7XG4gICAgdGhpcy5hdHRhY2hTb3J0KCk7XG5cbiAgICAvLyBSw6lpbml0aWFsaXNlIF9zdGF0aWNTbGljZUhpZGRlbktleXMgc2V1bGVtZW50IHNpIGxlcyBjbMOpcyBoaWRkZW4gZGUgbGEgY29uZmlnIG9udCB2cmFpbWVudCBjaGFuZ8OpXG4gICAgLy8gRVQgcXUnaWwgbid5IGEgcGFzIGRlIHByw6lmw6lyZW5jZXMgc2F1dmVnYXJkw6llcyAocXVpIGfDqXJlcm9udCBoaWRkZW5TbGljZUtleXMgZWxsZXMtbcOqbWVzKS5cbiAgICBjb25zdCBuZXdDb25maWdIaWRkZW4gPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgICAodGhpcy5yZXNvbHZlZENvbmZpZy5zbGljZXMgPz8gW10pLmZpbHRlcihzID0+IHMuaGlkZGVuICYmIHMuY29sdW1uS2V5KS5tYXAocyA9PiBzLmNvbHVtbktleSEpXG4gICAgKTtcbiAgICBpZiAoIVRhYmxlQ29tcG9uZW50Ll9zZXRzRXF1YWwobmV3Q29uZmlnSGlkZGVuLCB0aGlzLl9jb25maWdIaWRkZW5LZXlzKSkge1xuICAgICAgdGhpcy5fY29uZmlnSGlkZGVuS2V5cyA9IG5ld0NvbmZpZ0hpZGRlbjtcbiAgICAgIC8vIE4nw6ljcmFzZXIgX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyBxdWUgc2kgb24gbidlc3QgUEFTIGVuIHRyYWluIGQnYXBwbGlxdWVyIGRlcyBwcmVmc1xuICAgICAgLy8gKHBlbmRpbmdQcmVmcyBsZXMgZ8OocmVyYSBsdWktbcOqbWUgdmlhIF9hcHBseVByZWZlcmVuY2VzIOKGkiBoaWRkZW5TbGljZUtleXMpXG4gICAgICBpZiAoIXBlbmRpbmdQcmVmcykge1xuICAgICAgICB0aGlzLl9zdGF0aWNTbGljZUhpZGRlbktleXMgPSBuZXcgU2V0KG5ld0NvbmZpZ0hpZGRlbik7XG4gICAgICAgIHRoaXMuX29yZ2FuaXplci51cGRhdGVIaWRkZW5TdGF0aWNLZXlzKHRoaXMuX3N0YXRpY1NsaWNlSGlkZGVuS2V5cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbGlxdWUgbGVzIHByw6lmw6lyZW5jZXMgSUNJLCBBUFLDiFMgX29yZ2FuaXplci51cGRhdGUoKSBFVCBhcHLDqHMgX2NvbmZpZ0hpZGRlbktleXMgbWlzIMOgIGpvdXIsXG4gICAgLy8gbWFpcyBhdmFudCBfY29tcHV0ZVNsaWNlQ29uZmlncygpIHBvdXIgcXVlIGhpZGRlblNsaWNlS2V5cyBzb2l0IGTDqWrDoCByZXN0YXVyw6kuXG4gICAgaWYgKHBlbmRpbmdQcmVmcykge1xuICAgICAgdGhpcy5fYXBwbHlQcmVmZXJlbmNlcyhwZW5kaW5nUHJlZnMpO1xuICAgIH1cblxuICAgIC8vIFByb3ByacOpdMOpcyBzdGFibGVzIHBvdXIgbGVzIGJpbmRpbmdzIGR1IHRlbXBsYXRlXG4gICAgLy8gT24gcmVjYWxjdWxlIF9zbGljZUNvbmZpZ3MgZW4gcmVmbMOpdGFudCBsJ8OpdGF0IGNvdXJhbnQgZGVzIHNsaWNlcyBjYWNow6llcyxcbiAgICAvLyBwb3VyIHF1ZSBTbGljZVBhbmVsQ29tcG9uZW50Lm5nT25Jbml0IHJlw6dvaXZlIGxhIGJvbm5lIHZhbGV1ciBkZSBgaGlkZGVuYFxuICAgIC8vIG3Dqm1lIHF1YW5kIGxlIGNvbXBvc2FudCBlc3QgY3LDqcOpIHBvdXIgbGEgMcOocmUgZm9pcyBhcHLDqHMgdW4gdG9nZ2xlLlxuICAgIHRoaXMuX3NsaWNlQ29uZmlncyA9IHRoaXMuX2NvbXB1dGVTbGljZUNvbmZpZ3MoKTtcbiAgICB0aGlzLl9zbGljZUNvbHVtbnMgPSB0aGlzLnJlc29sdmVkQ29uZmlnLmNvbHVtbnMgPz8gW107XG4gICAgdGhpcy5fc2xpY2VEYXRhID0gdGhpcy5fcmVzb2x2ZWREYXRhO1xuICAgIHRoaXMuX3NsaWNlU2hvd1RvZ2dsZSA9IHRoaXMucmVzb2x2ZWRDb25maWcuZW5hYmxlU2xpY2VUb2dnbGUgIT09IGZhbHNlO1xuICAgIHRoaXMuX3JlY29tcHV0ZVNob3dTbGljZVBhbmVsKCk7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmVTb3J0LmFjdGl2ZSAmJiB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRTb3J0KSB7XG4gICAgICB0aGlzLl9tYXRTb3J0QWN0aXZlID0gdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydC5hY3RpdmU7XG4gICAgICB0aGlzLl9tYXRTb3J0RGlyZWN0aW9uID0gdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydC5kaXJlY3Rpb247XG4gICAgfVxuICAgIHRoaXMuX2J1aWxkU2xpY2VCeU1lbnVJdGVtcygpO1xuXG4gICAgdGhpcy5fc2NoZWR1bGVSZW5kZXIoKTtcbiAgfVxuXG4gIC8qKiBSZXRvdXJuZSB1bmlxdWVtZW50IGxlcyBzbGljZXMgdmlzaWJsZXMgKG5vbiBjYWNow6llcyBwYXIgX3N0YXRpY1NsaWNlSGlkZGVuS2V5cykuXG4gICAqIExlIFNsaWNlUGFuZWxDb21wb25lbnQgYWZmaWNoZSB0b3V0IGNlIHF1J2lsIHJlw6dvaXQg4oCUIGMnZXN0IGljaSBxdWUgc2UgZmFpdCBsZSBmaWx0cmFnZS4gKi9cbiAgcHJpdmF0ZSBfY29tcHV0ZVNsaWNlQ29uZmlncygpOiBTbGljZUNvbmZpZzxUPltdIHtcbiAgICByZXR1cm4gKHRoaXMucmVzb2x2ZWRDb25maWcuc2xpY2VzID8/IFtdKS5maWx0ZXIoXG4gICAgICBzID0+ICFzLmNvbHVtbktleSB8fCAhdGhpcy5fc3RhdGljU2xpY2VIaWRkZW5LZXlzLmhhcyhzLmNvbHVtbktleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3NldHNFcXVhbChhOiBTZXQ8c3RyaW5nPiwgYjogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgYSkgaWYgKCFiLmhhcyh2KSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRTbGljZUJ5TWVudUl0ZW1zKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRpY1NsaWNlTWFwID0gbmV3IE1hcCh0aGlzLl9zdGF0aWNTbGljZXNGb3JNZW51Lm1hcChzID0+IFtzLmtleSwgc10pKTtcbiAgICBjb25zdCBkeW5hbWljU2xpY2VTZXQgPSBuZXcgU2V0KHRoaXMuX2FsbER5bmFtaWNTbGljZUNvbHVtbnMubWFwKGMgPT4gYy5rZXkpKTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgaXRlbXM6IEFycmF5PHsgaXNTdGF0aWM6IGJvb2xlYW47IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBpY29uPzogc3RyaW5nOyBjb2w/OiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+IH0+ID0gW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5yZXNvbHZlZENvbmZpZy5jb2x1bW5zID8/IFtdKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoY29sLmtleSkpIGNvbnRpbnVlO1xuICAgICAgaWYgKHN0YXRpY1NsaWNlTWFwLmhhcyhjb2wua2V5KSkge1xuICAgICAgICBjb25zdCBzID0gc3RhdGljU2xpY2VNYXAuZ2V0KGNvbC5rZXkpITtcbiAgICAgICAgaXRlbXMucHVzaCh7IGlzU3RhdGljOiB0cnVlLCBrZXk6IHMua2V5LCB0aXRsZTogcy50aXRsZSwgaWNvbjogcy5pY29uIH0pO1xuICAgICAgICBzZWVuLmFkZChjb2wua2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoZHluYW1pY1NsaWNlU2V0Lmhhcyhjb2wua2V5KSkge1xuICAgICAgICBpdGVtcy5wdXNoKHsgaXNTdGF0aWM6IGZhbHNlLCBrZXk6IGNvbC5rZXksIHRpdGxlOiB0aGlzLmNvbExhYmVsKGNvbCksIGljb246IGNvbC5pY29uLCBjb2wgfSk7XG4gICAgICAgIHNlZW4uYWRkKGNvbC5rZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5fc3RhdGljU2xpY2VzRm9yTWVudSkge1xuICAgICAgaWYgKCFzZWVuLmhhcyhzLmtleSkpIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGlzU3RhdGljOiB0cnVlLCBrZXk6IHMua2V5LCB0aXRsZTogcy50aXRsZSwgaWNvbjogcy5pY29uIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9zbGljZUJ5TWVudUl0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5faW52YWxpZGF0ZU9yZ2FuaXplckNvbmZpZygpOyAvLyBsZXMgc2xpY2VzIG9udCBjaGFuZ8OpXG4gIH1cblxuICBnZXQgc2xpY2VCeU1lbnVJdGVtcygpIHsgcmV0dXJuIHRoaXMuX3NsaWNlQnlNZW51SXRlbXM7IH1cblxuICBvblNsaWNlTWVudUl0ZW1DbGljayhpdGVtOiB7IGlzU3RhdGljOiBib29sZWFuOyBrZXk6IHN0cmluZzsgY29sPzogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiB9KTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uaXNTdGF0aWMpIHtcbiAgICAgIHRoaXMudG9nZ2xlU3RhdGljU2xpY2UoaXRlbS5rZXkpO1xuICAgIH0gZWxzZSBpZiAoaXRlbS5jb2wpIHtcbiAgICAgIHRoaXMudG9nZ2xlRHluYW1pY1NsaWNlKGl0ZW0uY29sKTtcbiAgICB9XG4gIH1cblxuICBpc1NsaWNlTWVudUl0ZW1BY3RpdmUoaXRlbTogeyBpc1N0YXRpYzogYm9vbGVhbjsga2V5OiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpdGVtLmlzU3RhdGljID8gdGhpcy5pc1N0YXRpY1NsaWNlVmlzaWJsZShpdGVtLmtleSkgOiB0aGlzLmlzRHluYW1pY1NsaWNlQWN0aXZlKGl0ZW0ua2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NjaGVkdWxlUmVuZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wZW5kaW5nUmVuZGVyICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcGVuZGluZ1JlbmRlcik7XG4gICAgICB0aGlzLl9wZW5kaW5nUmVuZGVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX3BlbmRpbmdSZW5kZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1JlbmRlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5fZXhlY3V0ZVJlbmRlcigpKTtcbiAgICAgIH0sIDApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXhlY3V0ZVJlbmRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBjYXRlZ29yeVJvd3MgPSB0aGlzLmdldENhdGVnb3J5RmlsdGVyZWREYXRhKCk7XG4gICAgaWYgKHRoaXMuYWN0aXZlR3JvdXBCeUtleSkge1xuICAgICAgLy8gRW4gbW9kZSBncm91cEJ5LCBwcm9qZWN0Um93cyBnw6hyZSB0b3V0IGxlIHRyaSBpbnRlcm5lbWVudCDigJQgcGFzIGRlIHNvcnQgZ2xvYmFsIGludXRpbGVcbiAgICAgIHRoaXMuX2FsbEZpbHRlcmVkUm93cyA9IGNhdGVnb3J5Um93cztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tcGFyZUZuID0gdGhpcy5fYnVpbGRTb3J0Q29tcGFyYXRvcigpO1xuICAgICAgdGhpcy5fYWxsRmlsdGVyZWRSb3dzID0gY29tcGFyZUZuID8gWy4uLmNhdGVnb3J5Um93c10uc29ydChjb21wYXJlRm4pIDogY2F0ZWdvcnlSb3dzO1xuICAgIH1cblxuICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxlIHBhZ2luYXRvciBhdmVjIGxlIG5vdXZlYXUgdG90YWxcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIGNvbnN0IHNhdmVkSW5kZXggPSB0aGlzLl9wcmVzZXJ2ZVBhZ2VJbmRleCA/PyB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXg7XG4gICAgICBjb25zdCBtYXhQYWdlID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHRoaXMuX2FsbEZpbHRlcmVkUm93cy5sZW5ndGggLyB0aGlzLnBhZ2VTaXplKSAtIDEpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IubGVuZ3RoID0gdGhpcy5fYWxsRmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IE1hdGgubWluKHNhdmVkSW5kZXgsIG1heFBhZ2UpO1xuICAgICAgdGhpcy5fcHJlc2VydmVQYWdlSW5kZXggPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX3Byb2plY3RDdXJyZW50UGFnZSgpO1xuICAgIC8vIGRldGVjdENoYW5nZXMoKSBhdSBsaWV1IGRlIG1hcmtGb3JDaGVjaygpIDogbWV0IMOgIGpvdXIgdW5pcXVlbWVudCBDRSBjb21wb3NhbnRcbiAgICAvLyBzYW5zIGTDqWNsZW5jaGVyIHVuIGN5Y2xlIENEIGdsb2JhbCBxdWkgcHJvdm9xdWVyYWl0IE5HMDEwMCBkYW5zIGxlcyBwYXJlbnRzLlxuICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIF9wcm9qZWN0Q3VycmVudFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlR3JvdXBCeUtleSkge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMucHJvamVjdFJvd3ModGhpcy5fYWxsRmlsdGVyZWRSb3dzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4ID8/IDA7XG4gICAgY29uc3Qgc3RhcnQgPSBwYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2VSb3dzID0gdGhpcy5fYWxsRmlsdGVyZWRSb3dzLnNsaWNlKHN0YXJ0LCBzdGFydCArIHRoaXMucGFnZVNpemUpO1xuXG4gICAgY29uc3QgcHJvamVjdGVkOiBhbnlbXSA9IFtdO1xuICAgIHBhZ2VSb3dzLmZvckVhY2goKHJvdywgaSkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gc3RhcnQgKyBpO1xuICAgICAgY29uc3QgcDogYW55ID0geyBbUk9XX1JBV19LRVldOiByb3csIFtST1dfSU5ERVhfS0VZXTogaWR4IH07XG4gICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgcFtjb2wua2V5XSA9IHRoaXMucmVzb2x2ZUNlbGxWYWx1ZShjb2wsIHJvdywgaWR4KTtcbiAgICAgIH0pO1xuICAgICAgcHJvamVjdGVkLnB1c2gocCk7XG4gICAgfSk7XG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2UuZGF0YSA9IHByb2plY3RlZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFZmZlY3RpdmVDb25maWcoKTogVGFibGVQcm92aWRlcjxUPiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcgfHwge307XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuX3Jlc29sdmVkRGF0YTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPVxuICAgICAgY29uZmlnLmNvbHVtbnMgfHxcbiAgICAgIHRoaXMuY29sdW1uc0NvbmZpZyB8fFxuICAgICAgdGhpcy5yZXNvbHZlQ29sdW1uc0Zyb21Db21wYXQocm93cyk7XG5cbiAgICAvLyBNb2RlIEhUTUwgOiBbdmlld10gcHJlbmQgbGUgZGVzc3VzIHN1ciBjb25maWcudmlldyBzaSBmb3VybmkgKFBoYXNlIDMpLlxuICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXcgPz8gY29uZmlnLnZpZXc7XG5cbiAgICBjb25zdCBhdXRvVGFibGVJZCA9IGNvbmZpZy5wcmVmZXJlbmNlcz8udGFibGVJZCB8fCBUYWJsZUNvbXBvbmVudC5faGFzaENvbHVtbnMoKGNvbHVtbnMgfHwgW10pLm1hcChjID0+IGMua2V5KSk7XG4gICAgY29uc3QgZXhwb3J0Q29uZmlnOiBUYWJsZUV4cG9ydENvbmZpZzxUPiA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBmaWxlbmFtZTogYXV0b1RhYmxlSWQsXG4gICAgICAuLi5jb25maWcuZXhwb3J0LFxuICAgIH07XG5cbiAgICBjb25zdCBwcmVmc0NvbmZpZzogVGFibGVQcmVmZXJlbmNlc0NvbmZpZyA9IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0YWJsZUlkOiBhdXRvVGFibGVJZCxcbiAgICAgIC4uLmNvbmZpZy5wcmVmZXJlbmNlcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICB2aWV3LFxuICAgICAgc2xpY2VzOiBjb25maWcuc2xpY2VzIHx8IFtdLFxuICAgICAgZW5hYmxlU2xpY2VUb2dnbGU6IGNvbmZpZy5lbmFibGVTbGljZVRvZ2dsZSA/PyB0cnVlLFxuICAgICAgZXhwb3J0OiBleHBvcnRDb25maWcsXG4gICAgICBwcmVmZXJlbmNlczogcHJlZnNDb25maWcsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb25maWdTZWFyY2hSZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbGVhclRva2VuID0gdGhpcy5yZXNvbHZlZENvbmZpZy5jbGVhclNlYXJjaElucHV0O1xuICAgIGNvbnN0IHNob3VsZENsZWFyID0gISFjbGVhclRva2VuICYmIGNsZWFyVG9rZW4gIT09IHRoaXMuX2xhc3RDb25maWdDbGVhclNlYXJjaElucHV0O1xuXG4gICAgdGhpcy5fbGFzdENvbmZpZ0NsZWFyU2VhcmNoSW5wdXQgPSBjbGVhclRva2VuO1xuXG4gICAgaWYgKCFzaG91bGRDbGVhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbFNlYXJjaFF1ZXJ5KGlzRmlyc3RDb25maWdDaGFuZ2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWxRdWVyeSA9IHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoPy5pbml0aWFsUXVlcnk7XG4gICAgaWYgKGluaXRpYWxRdWVyeSA9PT0gdGhpcy5fbGFzdEluaXRpYWxTZWFyY2hRdWVyeVxuICAgICAgJiYgKHRoaXMuX2luaXRpYWxTZWFyY2hRdWVyeUFwcGxpZWQgfHwgIWlzRmlyc3RDb25maWdDaGFuZ2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdEluaXRpYWxTZWFyY2hRdWVyeSA9IGluaXRpYWxRdWVyeTtcbiAgICB0aGlzLl9pbml0aWFsU2VhcmNoUXVlcnlBcHBsaWVkID0gdHJ1ZTtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gaW5pdGlhbFF1ZXJ5ID8/ICcnO1xuICAgIHRoaXMub25TZWFyY2hDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9oYXNoQ29sdW1ucyhrZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyID0ga2V5cy5qb2luKCd8Jyk7XG4gICAgbGV0IGggPSAweDgxMWM5ZGM1O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgaCA9IE1hdGguaW11bChoLCAweDAxMDAwMTkzKSA+Pj4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICcwJyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEYXRhKCk6IFRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgQXJyYXkuaXNBcnJheSgodGhpcy5kYXRhU291cmNlIGFzIGFueSkuZGF0YSkpIHtcbiAgICAgIHJldHVybiAodGhpcy5kYXRhU291cmNlIGFzIGFueSkuZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDb2x1bW5zRnJvbUNvbXBhdChyb3dzOiBUW10pOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+W10ge1xuICAgIGlmICh0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAga2V5LFxuICAgICAgICBoZWFkZXI6IHRoaXMuY29sdW1uTGFiZWxzPy5ba2V5XSB8fCBodW1hbml6ZUtleShrZXkpLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0Um93ID0gcm93c1swXSBhcyBhbnk7XG4gICAgaWYgKCFmaXJzdFJvdyB8fCB0eXBlb2YgZmlyc3RSb3cgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpcnN0Um93KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIGhlYWRlcjogdGhpcy5jb2x1bW5MYWJlbHM/LltrZXldIHx8IGh1bWFuaXplS2V5KGtleSksXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXRlZ29yeUZpbHRlcmVkRGF0YSgpOiBUW10ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9yZXNvbHZlZERhdGE7XG5cbiAgICBsZXQgZmlsdGVyZWQgPSBkYXRhLmZpbHRlcih0aGlzLmFjdGl2ZVNsaWNlRmlsdGVyKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBjb25zdCByZXN0cmljdGVkS2V5cyA9IHRoaXMucmVzb2x2ZWRDb25maWcuc2VhcmNoPy5zZWFyY2hDb2x1bW5zO1xuICAgICAgY29uc3Qgc2VhcmNoQ29scyA9IHJlc3RyaWN0ZWRLZXlzPy5sZW5ndGhcbiAgICAgICAgPyBbLi4udGhpcy5fY29sdW1uTWFwLnZhbHVlcygpXS5maWx0ZXIoY29sID0+IHJlc3RyaWN0ZWRLZXlzLmluY2x1ZGVzKGNvbC5rZXkpKVxuICAgICAgICA6IFsuLi50aGlzLl9jb2x1bW5NYXAudmFsdWVzKCldO1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKHJvdykgPT5cbiAgICAgICAgc2VhcmNoQ29scy5zb21lKChjb2wpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmdldERpc3BsYXlWYWx1ZUZvclNlYXJjaChjb2wsIHJvdyk7XG4gICAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9qZWN0Um93cyhyb3dzOiBUW10pOiBhbnlbXSB7XG4gICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLmFjdGl2ZUdyb3VwQnlLZXk7XG5cbiAgICBpZiAoIWdyb3VwS2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgICByb3dzLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcHJvamVjdGVkOiBhbnkgPSB7IFtST1dfUkFXX0tFWV06IHJvdywgW1JPV19JTkRFWF9LRVldOiBpbmRleCB9O1xuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkcy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgICBwcm9qZWN0ZWRbY29sLmtleV0gPSB0aGlzLnJlc29sdmVDZWxsVmFsdWUoY29sLCByb3csIGluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHByb2plY3RlZCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBDb2xEZWYgPSB0aGlzLl9jb2x1bW5NYXAuZ2V0KGdyb3VwS2V5KTtcbiAgICBjb25zdCBncm91cExhenlTdGF0dXMgPSBncm91cENvbERlZj8ubGF6eSA/ICh0aGlzLl9sYXp5Q29sdW1uU3RhdHVzLmdldChncm91cEtleSkgPz8gJ2lkbGUnKSA6ICdsb2FkZWQnO1xuXG4gICAgaWYgKGdyb3VwTGF6eVN0YXR1cyAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgIHRoaXMuX3RvdGFsRmlsdGVyZWRDb3VudCA9IHJvd3MubGVuZ3RoO1xuICAgICAgcmV0dXJuIFt7IFtHUk9VUF9IRUFERVJfTUFSS0VSXTogdHJ1ZSwgW1JPV19HUk9VUF9LRVldOiBHUk9VUF9LRVlfTEFaWV9MT0FESU5HLCBbUk9XX0dST1VQX0NPVU5UXTogcm93cy5sZW5ndGgsIFtST1dfR1JPVVBfUEFHRV06IDAsIFtST1dfR1JPVVBfUEFHRV9DT1VOVF06IDEgfV07XG4gICAgfVxuXG4gICAgY29uc3QgZWZmZWN0aXZlU29ydCA9IHRoaXMuX2FjdGl2ZVNvcnQuYWN0aXZlICYmIHRoaXMuX2FjdGl2ZVNvcnQuZGlyZWN0aW9uXG4gICAgICA/IHRoaXMuX2FjdGl2ZVNvcnRcbiAgICAgIDogdGhpcy5yZXNvbHZlZENvbmZpZy5kZWZhdWx0U29ydCA/PyB7IGFjdGl2ZTogJycsIGRpcmVjdGlvbjogJycgYXMgY29uc3QgfTtcblxuICAgIC8vIFbDqXJpZmllIHNpIGxlIGNhY2hlIGVzdCBlbmNvcmUgdmFsaWRlIChtw6ptZSByw6lmw6lyZW5jZSBkZSByb3dzICsgbcOqbWUgcGFyYW3DqHRyZXMgZGUgdHJpL2dyb3VwZSlcbiAgICBjb25zdCBjYWNoZVZhbGlkID1cbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUgIT09IG51bGwgJiZcbiAgICAgIHRoaXMuX2dyb3VwQ2FjaGUucm93cyA9PT0gcm93cyAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5rZXkgPT09IGdyb3VwS2V5ICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnRPcmRlciA9PT0gdGhpcy5fZ3JvdXBCeS5ncm91cFNvcnRPcmRlciAmJlxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZS5zb3J0QWN0aXZlID09PSAoZWZmZWN0aXZlU29ydC5hY3RpdmUgPz8gJycpICYmXG4gICAgICB0aGlzLl9ncm91cENhY2hlLnNvcnREaXIgPT09IChlZmZlY3RpdmVTb3J0LmRpcmVjdGlvbiA/PyAnJyk7XG5cbiAgICBsZXQgZ3JvdXBPcmRlcjogc3RyaW5nW107XG4gICAgbGV0IGdyb3VwTWFwOiBNYXA8c3RyaW5nLCBUW10+O1xuXG4gICAgaWYgKGNhY2hlVmFsaWQpIHtcbiAgICAgIGdyb3VwT3JkZXIgPSB0aGlzLl9ncm91cENhY2hlIS5vcmRlcjtcbiAgICAgIGdyb3VwTWFwID0gdGhpcy5fZ3JvdXBDYWNoZSEubWFwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcsOpLWNhbGN1bCBkZXMgdmFsZXVycyBkZSBncm91cGUgZW4gdW4gc2V1bCBwYXNzYWdlICjDqXZpdGUgTyhuKSBmaW5kKCkgcGFyIGNvbXBhcmFpc29uKVxuICAgICAgY29uc3QgZ3JvdXBWYWx1ZUNhY2hlID0gbmV3IE1hcDxULCBzdHJpbmc+KCk7XG4gICAgICByb3dzLmZvckVhY2gocm93ID0+IGdyb3VwVmFsdWVDYWNoZS5zZXQocm93LCBTdHJpbmcodGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShncm91cEtleSwgcm93KSA/PyAnJykpKTtcblxuICAgICAgLy8gUHLDqS1jYWxjdWwgZGVzIHZhbGV1cnMgZGUgdHJpICjDqXZpdGUgTyhuIGxvZyBuKSDDlyBnZXRMYXp5QXdhcmVWYWx1ZSBkYW5zIGxlIGNvbXBhcmF0ZXVyKVxuICAgICAgbGV0IGZhc3RDb21wYXJlRm46ICgoYTogVCwgYjogVCkgPT4gbnVtYmVyKSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKGVmZmVjdGl2ZVNvcnQuYWN0aXZlICYmIGVmZmVjdGl2ZVNvcnQuZGlyZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNvcnRWYWx1ZUNhY2hlID0gbmV3IE1hcDxULCBhbnk+KCk7XG4gICAgICAgIHJvd3MuZm9yRWFjaChyb3cgPT4gc29ydFZhbHVlQ2FjaGUuc2V0KHJvdywgdGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShlZmZlY3RpdmVTb3J0LmFjdGl2ZSwgcm93KSkpO1xuICAgICAgICBjb25zdCBkaXIgPSBlZmZlY3RpdmVTb3J0LmRpcmVjdGlvbjtcbiAgICAgICAgZmFzdENvbXBhcmVGbiA9IChhOiBULCBiOiBUKTogbnVtYmVyID0+IHtcbiAgICAgICAgICBjb25zdCB2YSA9IHNvcnRWYWx1ZUNhY2hlLmdldChhKTtcbiAgICAgICAgICBjb25zdCB2YiA9IHNvcnRWYWx1ZUNhY2hlLmdldChiKTtcbiAgICAgICAgICBsZXQgY21wID0gMDtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBjbXAgPSB2YSA8IHZiID8gLTEgOiB2YSA+IHZiID8gMSA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNhID0gdmEgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2IgPSB2YiA9PSBudWxsID8gJycgOiBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjbXAgPSBzYSA8IHNiID8gLTEgOiBzYSA+IHNiID8gMSA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkaXIgPT09ICdhc2MnID8gY21wIDogLWNtcDtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydGVkID0gWy4uLnJvd3NdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgdmEgPSBncm91cFZhbHVlQ2FjaGUuZ2V0KGEpITtcbiAgICAgICAgY29uc3QgdmIgPSBncm91cFZhbHVlQ2FjaGUuZ2V0KGIpITtcbiAgICAgICAgY29uc3QgY21wID0gdmEubG9jYWxlQ29tcGFyZSh2Yik7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyID09PSAnZGVzYycgPyAtY21wIDogY21wO1xuICAgICAgfSk7XG5cbiAgICAgIGdyb3VwT3JkZXIgPSBbXTtcbiAgICAgIGdyb3VwTWFwID0gbmV3IE1hcDxzdHJpbmcsIFRbXT4oKTtcbiAgICAgIHNvcnRlZC5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZSA9IGdyb3VwVmFsdWVDYWNoZS5nZXQocm93KSE7XG4gICAgICAgIGlmICghZ3JvdXBNYXAuaGFzKGdyb3VwVmFsdWUpKSB7XG4gICAgICAgICAgZ3JvdXBPcmRlci5wdXNoKGdyb3VwVmFsdWUpO1xuICAgICAgICAgIGdyb3VwTWFwLnNldChncm91cFZhbHVlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXBNYXAuZ2V0KGdyb3VwVmFsdWUpIS5wdXNoKHJvdyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVHJpIGludHJhLWdyb3VwZSBzdG9ja8OpIGRhbnMgbGUgY2FjaGUg4oCUIMOpdml0ZSBsZSByZS10cmkgc3VyIGNvbGxhcHNlL2V4cGFuZC9wYWdpbmF0aW9uXG4gICAgICBpZiAoZmFzdENvbXBhcmVGbikge1xuICAgICAgICBjb25zdCBmbiA9IGZhc3RDb21wYXJlRm47XG4gICAgICAgIGdyb3VwTWFwLmZvckVhY2goKGdyb3VwUm93cywga2V5KSA9PiB7XG4gICAgICAgICAgZ3JvdXBNYXAuc2V0KGtleSwgWy4uLmdyb3VwUm93c10uc29ydChmbikpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTWlzZSBlbiBjYWNoZVxuICAgICAgdGhpcy5fZ3JvdXBDYWNoZSA9IHtcbiAgICAgICAgcm93cyxcbiAgICAgICAga2V5OiBncm91cEtleSxcbiAgICAgICAgc29ydE9yZGVyOiB0aGlzLl9ncm91cEJ5Lmdyb3VwU29ydE9yZGVyLFxuICAgICAgICBzb3J0QWN0aXZlOiBlZmZlY3RpdmVTb3J0LmFjdGl2ZSA/PyAnJyxcbiAgICAgICAgc29ydERpcjogZWZmZWN0aXZlU29ydC5kaXJlY3Rpb24gPz8gJycsXG4gICAgICAgIG9yZGVyOiBncm91cE9yZGVyLFxuICAgICAgICBtYXA6IGdyb3VwTWFwLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl90b3RhbEZpbHRlcmVkQ291bnQgPSByb3dzLmxlbmd0aDtcblxuICAgIC8vIFByb3RlY3Rpb24gY29udHJlIGxlcyBqZXV4IGRlIGRvbm7DqWVzIMOgIHRyb3AgaGF1dGUgY2FyZGluYWxpdMOpXG4gICAgaWYgKGdyb3VwT3JkZXIubGVuZ3RoID4gVGFibGVDb21wb25lbnQuTUFYX0dST1VQX0NPVU5UKSB7XG4gICAgICByZXR1cm4gW3sgW0dST1VQX0hFQURFUl9NQVJLRVJdOiB0cnVlLCBbUk9XX0dST1VQX0tFWV06IEdST1VQX0tFWV9UT09fTUFOWSwgW1JPV19HUk9VUF9DT1VOVF06IGdyb3VwT3JkZXIubGVuZ3RoLCBbUk9XX0dST1VQX1BBR0VdOiAwLCBbUk9XX0dST1VQX1BBR0VfQ09VTlRdOiAxIH1dO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5ncm91cFBhZ2VTaXplO1xuICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICAgIGdyb3VwT3JkZXIuZm9yRWFjaCgoZ3JvdXBWYWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXBSb3dzID0gZ3JvdXBNYXAuZ2V0KGdyb3VwVmFsdWUpITtcbiAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBncm91cFJvd3MubGVuZ3RoO1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBwYWdlU2l6ZSA9PT0gMCA/IDAgOiB0aGlzLl9ncm91cEJ5LmdldFBhZ2UoZ3JvdXBWYWx1ZSk7XG4gICAgICBjb25zdCBwYWdlQ291bnQgPSBwYWdlU2l6ZSA9PT0gMCA/IDEgOiBNYXRoLm1heCgxLCBNYXRoLmNlaWwodG90YWxDb3VudCAvIHBhZ2VTaXplKSk7XG4gICAgICBjb25zdCBjb2xsYXBzZWQgPSB0aGlzLmlzR3JvdXBDb2xsYXBzZWQoZ3JvdXBWYWx1ZSk7XG5cbiAgICAgIHJlc3VsdC5wdXNoKHsgW0dST1VQX0hFQURFUl9NQVJLRVJdOiB0cnVlLCBbUk9XX0dST1VQX0tFWV06IGdyb3VwVmFsdWUsIFtST1dfR1JPVVBfQ09VTlRdOiB0b3RhbENvdW50LCBbUk9XX0dST1VQX1BBR0VdOiBjdXJyZW50UGFnZSwgW1JPV19HUk9VUF9QQUdFX0NPVU5UXTogcGFnZUNvdW50IH0pO1xuXG4gICAgICBpZiAoIWNvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2VTaXplID09PSAwID8gMCA6IGN1cnJlbnRQYWdlICogcGFnZVNpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IHBhZ2VTaXplID09PSAwID8gdG90YWxDb3VudCA6IE1hdGgubWluKHN0YXJ0ICsgcGFnZVNpemUsIHRvdGFsQ291bnQpO1xuICAgICAgICBncm91cFJvd3Muc2xpY2Uoc3RhcnQsIGVuZCkuZm9yRWFjaCgocm93LCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gc3RhcnQgKyBpO1xuICAgICAgICAgIGNvbnN0IHByb2plY3RlZDogYW55ID0geyBbUk9XX1JBV19LRVldOiByb3csIFtST1dfSU5ERVhfS0VZXTogaWR4IH07XG4gICAgICAgICAgdGhpcy5hY3RpdmVGaWVsZHMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBwcm9qZWN0ZWRbY29sLmtleV0gPSB0aGlzLnJlc29sdmVDZWxsVmFsdWUoY29sLCByb3csIGlkeCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzdWx0LnB1c2gocHJvamVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRTb3J0Q29tcGFyYXRvcigpOiAoKGE6IFQsIGI6IFQpID0+IG51bWJlcikgfCBudWxsIHtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5fYWN0aXZlU29ydC5hY3RpdmUgJiYgdGhpcy5fYWN0aXZlU29ydC5kaXJlY3Rpb25cbiAgICAgID8gdGhpcy5fYWN0aXZlU29ydFxuICAgICAgOiB0aGlzLnJlc29sdmVkQ29uZmlnLmRlZmF1bHRTb3J0ID8/IHsgYWN0aXZlOiAnJywgZGlyZWN0aW9uOiAnJyBhcyBjb25zdCB9O1xuICAgIGNvbnN0IHsgYWN0aXZlLCBkaXJlY3Rpb24gfSA9IHNvcnQ7XG4gICAgaWYgKCFhY3RpdmUgfHwgIWRpcmVjdGlvbikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChhOiBULCBiOiBUKTogbnVtYmVyID0+IHtcbiAgICAgIGNvbnN0IHZhID0gdGhpcy5nZXRMYXp5QXdhcmVWYWx1ZShhY3RpdmUsIGEpO1xuICAgICAgY29uc3QgdmIgPSB0aGlzLmdldExhenlBd2FyZVZhbHVlKGFjdGl2ZSwgYik7XG4gICAgICBsZXQgY21wID0gMDtcbiAgICAgIGlmICh0eXBlb2YgdmEgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY21wID0gdmEgPCB2YiA/IC0xIDogdmEgPiB2YiA/IDEgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2EgPSB2YSA9PSBudWxsID8gJycgOiBTdHJpbmcodmEpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHNiID0gdmIgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjbXAgPSBzYSA8IHNiID8gLTEgOiBzYSA+IHNiID8gMSA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSAnYXNjJyA/IGNtcCA6IC1jbXA7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsYSB2YWxldXIgdGVsbGUgcXUnZWxsZSBlc3QgYWZmaWNow6llIGRhbnMgbGEgY2VsbHVsZSwgZW4gc3VpdmFudCBleGFjdGVtZW50XG4gICAqIGxlIG3Dqm1lIGNoZW1pbiBxdWUgcmVzb2x2ZUNlbGxWYWx1ZSDigJQgdXRpbGlzw6llIHBvdXIgbGEgcmVjaGVyY2hlIHBsZWluLXRleHRlLlxuICAgKiBOZSBwYXNzZSBwYXMgcGFyIHNvcnRWYWx1ZSAodmFsZXVyIGJydXRlIGRlIHRyaSkgY29udHJhaXJlbWVudCDDoCBnZXRMYXp5QXdhcmVWYWx1ZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGlzcGxheVZhbHVlRm9yU2VhcmNoKGNvbDogVGFibGVDb2x1bW5Qcm92aWRlcjxUPiwgcm93OiBUKTogYW55IHtcbiAgICBpZiAoY29sLmxhenkpIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX2xhenlDb2x1bW5TdGF0dXMuZ2V0KGNvbC5rZXkpID8/ICdpZGxlJztcbiAgICAgIGlmIChzdGF0dXMgIT09ICdsb2FkZWQnKSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHJvd01hcCA9IHRoaXMuX2xhenlDb2x1bW5EYXRhLmdldChjb2wua2V5KTtcbiAgICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUocm93TWFwPy5nZXQocm93KSA/PyAnJyk7XG4gICAgfVxuICAgIGlmIChjb2wuc2VhcmNoVmFsdWUpIHtcbiAgICAgIHJldHVybiBjb2wuc2VhcmNoVmFsdWUocm93LCAwKTtcbiAgICB9XG4gICAgY29uc3QgcmF3VmFsdWUgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93LCAwKSA6IChyb3cgYXMgYW55KT8uW2NvbC5rZXldO1xuICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUocmF3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXk6IHN0cmluZywgcm93OiBUKTogYW55IHtcbiAgICBjb25zdCBjb2xEZWYgPSB0aGlzLl9jb2x1bW5NYXAuZ2V0KGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xhenlDb2x1bW5EYXRhLmdldChjb2x1bW5LZXkpPy5nZXQocm93KSA/PyBudWxsO1xuICAgIH1cbiAgICBpZiAoY29sRGVmPy5zb3J0VmFsdWUpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUoY29sRGVmLnNvcnRWYWx1ZShyb3csIDApKTtcbiAgICB9XG4gICAgaWYgKGNvbERlZj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUoY29sRGVmLnZhbHVlKHJvdywgMCkpO1xuICAgIH1cbiAgICByZXR1cm4gKHJvdyBhcyBhbnkpW2NvbHVtbktleV07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDZWxsVmFsdWUoY29sOiBUYWJsZUNvbHVtblByb3ZpZGVyPFQ+LCByb3c6IFQsIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChjb2wubGF6eSkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fbGF6eUNvbHVtblN0YXR1cy5nZXQoY29sLmtleSkgPz8gJ2lkbGUnO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2xvYWRpbmcnKSByZXR1cm4gTEFaWV9MT0FESU5HX1ZBTFVFO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2Vycm9yJykgcmV0dXJuIExBWllfRVJST1JfVkFMVUU7XG4gICAgICBpZiAoc3RhdHVzID09PSAnbG9hZGVkJykge1xuICAgICAgICBjb25zdCByb3dNYXAgPSB0aGlzLl9sYXp5Q29sdW1uRGF0YS5nZXQoY29sLmtleSk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUocm93TWFwPy5nZXQocm93KSA/PyAnJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlUHJvdmlkZXIgPSBjb2wudmFsdWU7XG4gICAgY29uc3QgcmF3VmFsdWUgPSB2YWx1ZVByb3ZpZGVyID8gdmFsdWVQcm92aWRlcihyb3csIGluZGV4KSA6IChyb3cgYXMgYW55KT8uW2NvbC5rZXldO1xuICAgIHJldHVybiBub3JtYWxpemVDZWxsVmFsdWUocmF3VmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VTaXplIHx8IDUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUGFnZVNpemVPcHRpb25zKCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgfHwgWzUsIDEwLCAyMF07XG4gICAgY29uc3QgdW5pcXVlID0gWy4uLm5ldyBTZXQob3B0aW9ucy5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSA+IDApKV07XG5cbiAgICBpZiAoIXVuaXF1ZS5pbmNsdWRlcyh0aGlzLnBhZ2VTaXplKSkge1xuICAgICAgdW5pcXVlLnB1c2godGhpcy5wYWdlU2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXF1ZS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVQYWdlU2l6ZU9wdGlvbnNHcm91cEJ5KCk6IG51bWJlcltdIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5yZXNvbHZlZENvbmZpZy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnNHcm91cEJ5IHx8IHRoaXMucmVzb2x2ZWRDb25maWcucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zIHx8IFs1LCAxMCwgMjBdO1xuICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KG9wdGlvbnMuZmlsdGVyKCh2KSA9PiB2ID4gMCkpXTtcbiAgICBpZiAodGhpcy5ncm91cFBhZ2VTaXplID4gMCAmJiAhdW5pcXVlLmluY2x1ZGVzKHRoaXMuZ3JvdXBQYWdlU2l6ZSkpIHtcbiAgICAgIHVuaXF1ZS5wdXNoKHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmlxdWUuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRGVmYXVsdEdyb3VwUGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjZmcucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zR3JvdXBCeSB8fCBjZmcucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zO1xuICAgIGlmIChvcHRpb25zPy5sZW5ndGgpIHJldHVybiBvcHRpb25zWzBdO1xuICAgIHJldHVybiBjZmcucGFnaW5hdGlvbj8ucGFnZVNpemUgfHwgNTtcbiAgfVxuXG4gIHByaXZhdGUgdW5pcXVlQ29sdW1uc0J5S2V5KGNvbHVtbnM6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSk6IFRhYmxlQ29sdW1uUHJvdmlkZXI8VD5bXSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoc2Vlbi5oYXMoY29sdW1uLmtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgc2Vlbi5hZGQoY29sdW1uLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoUGFnaW5hdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93UGFnaW5hdGlvbikge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvcikgcmV0dXJuO1xuXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gbnVsbDtcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XG5cbiAgICBpZiAodGhpcy5fcGFnaW5hdG9yU3Vic2NyaWJlZCAhPT0gdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuX3BhZ2luYXRvclN1YnNjcmliZWQgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0b3IhLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2VJbmRleDogdGhpcy5wYWdpbmF0b3IhLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yIS5wYWdlU2l6ZSB9KTtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdSZW5kZXIgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgdGhpcy5fcHJvamVjdEN1cnJlbnRQYWdlKCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoU29ydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc29ydCkgcmV0dXJuO1xuXG4gICAgdGhpcy50YWJsZURhdGFTb3VyY2Uuc29ydCA9IG51bGwgYXMgYW55O1xuXG4gICAgaWYgKHRoaXMuX3NvcnRTdWJzY3JpYmVkICE9PSB0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuX3NvcnRTdWJzY3JpYmVkID0gdGhpcy5zb3J0O1xuICAgICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9hY3RpdmVTb3J0ID0ge1xuICAgICAgICAgIGFjdGl2ZTogdGhpcy5zb3J0LmFjdGl2ZSxcbiAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuc29ydC5kaXJlY3Rpb24sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHsgYWN0aXZlOiB0aGlzLnNvcnQuYWN0aXZlLCBkaXJlY3Rpb246IHRoaXMuc29ydC5kaXJlY3Rpb24gfSk7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlUmVuZGVyKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VyaWFsaXphYmxlQ29sdW1uPFQ+KGNvbHVtbjogVGFibGVDb2x1bW5Qcm92aWRlcjxUPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IGNvbHVtbi5rZXksXG4gICAgaGVhZGVyOiBjb2x1bW4uaGVhZGVyLFxuICAgIGljb246IGNvbHVtbi5pY29uLFxuICAgIHNvcnRhYmxlOiBjb2x1bW4uc29ydGFibGUsXG4gICAgcmVtb3ZhYmxlOiBjb2x1bW4ucmVtb3ZhYmxlLFxuICAgIG9wdGlvbmFsOiBjb2x1bW4ub3B0aW9uYWwsXG4gICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICBncm91cGFibGU6IGNvbHVtbi5ncm91cGFibGUsXG4gICAgc2xpY2VhYmxlOiBjb2x1bW4uc2xpY2VhYmxlLFxuICAgIGxhenk6ICEhY29sdW1uLmxhenksXG4gIH07XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImpxdWVyeS10YWJsZS13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ2aXN1YWwtY29weS1mZWVkYmFja1wiICpuZ0lmPVwiY29weUZlZWRiYWNrTWVzc2FnZVwiIHJvbGU9XCJzdGF0dXNcIj57eyBjb3B5RmVlZGJhY2tNZXNzYWdlIH19PC9kaXY+XG4gIDxoZWFkZXIgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiAqbmdJZj1cInNob3dUaXRsZVwiPlxuICAgIDxoMz57eyB0aXRsZSB9fTwvaDM+XG4gIDwvaGVhZGVyPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cInRhYmxlLWxheW91dFwiXG4gICAgW2NsYXNzLm5vLXNsaWNlXT1cIiFfc2hvd1NsaWNlUGFuZWwgfHwgX3NsaWNlUGFuZWxDb2xsYXBzZWRcIlxuICA+XG4gICAgPHNsaWNlLXBhbmVsXG4gICAgICBbc3R5bGUuZGlzcGxheV09XCIhX3Nob3dTbGljZVBhbmVsIHx8IF9zbGljZVBhbmVsQ29sbGFwc2VkID8gJ25vbmUnIDogbnVsbFwiXG4gICAgICBbc2xpY2VDb25maWdzXT1cIl9zbGljZUNvbmZpZ3NcIlxuICAgICAgW2NvbHVtbnNdPVwiX3NsaWNlQ29sdW1uc1wiXG4gICAgICBbZGF0YV09XCJfc2xpY2VEYXRhXCJcbiAgICAgIFtsYXp5RGF0YV09XCJfbGF6eUNvbHVtbkRhdGFcIlxuICAgICAgW2xhenlTdGF0dXNdPVwiX2xhenlDb2x1bW5TdGF0dXNcIlxuICAgICAgW3Nob3dUb2dnbGVdPVwiX3NsaWNlU2hvd1RvZ2dsZVwiXG4gICAgICBbY29sbGFwc2VkQnlEZWZhdWx0XT1cIl9zbGljZVBhbmVsQ29sbGFwc2VkXCJcbiAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25TbGljZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChkeW5hbWljU2xpY2VLZXlzQ2hhbmdlKT1cIm9uRHluYW1pY1NsaWNlS2V5c0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25TbGljZVBhbmVsQ29sbGFwc2VkQ2hhbmdlKCRldmVudClcIlxuICAgID48L3NsaWNlLXBhbmVsPlxuXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXNoZWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdG9vbGJhclwiICpuZ0lmPVwic2hvd1Rvb2xiYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRvb2xiYXItbGVmdFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2hvd1NsaWNlRXhwYW5kQnRuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1leHBhbmQtYnRuXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJpMThuLmV4cGFuZEZpbHRlclRpdGxlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRTbGljZVBhbmVsKClcIlxuICAgICAgICAgID48bWF0LWljb24gY2xhc3M9XCJzbGljZS1leHBhbmQtbWF0LWljb25cIj5maWx0ZXJfbGlzdDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwic2VhcmNoLWljb25cIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI4LjVcIiBjeT1cIjguNVwiIHI9XCI1LjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgMTNMMTcgMTdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImkxOG4uc2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hRdWVyeVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInNlYXJjaC1jbGVhci1idG5cIiAoY2xpY2spPVwic2VhcmNoUXVlcnkgPSAnJzsgb25TZWFyY2hDaGFuZ2UoKVwiPsOXPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaC1jb3VudFwiICpuZ0lmPVwiIWVmZmVjdGl2ZUlzTG9hZGluZ1wiPnt7IGZpbHRlcmVkUm93Q291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvdW50LWxvYWRlclwiICpuZ0lmPVwiZWZmZWN0aXZlSXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93T3JnYW5pemVyQnV0dG9uXCIgY2xhc3M9XCJ0YWJsZS10b29sYmFyLXJpZ2h0XCI+XG4gICAgICAgICAgPHRhYmxlLW9yZ2FuaXplci1idXR0b25cbiAgICAgICAgICAgIFtjb25maWddPVwib3JnYW5pemVyQ29uZmlnXCJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJvcmdhbml6ZXJTdGF0ZVwiXG4gICAgICAgICAgICAodmlld0NoYW5nZSk9XCJvbk9yZ2FuaXplclZpZXdDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvdGFibGUtb3JnYW5pemVyLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHktd3JhcHBlclwiPlxuXG4gICAgICA8IS0tIEJhbm5pw6hyZSBtZXNzYWdlIHByw6lmw6lyZW5jZXMgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiX3ByZWZlcmVuY2VzTWVzc2FnZVwiIGNsYXNzPVwicHJlZmVyZW5jZXMtbWVzc2FnZVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJwcmVmZXJlbmNlcy1tZXNzYWdlLWljb25cIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyBfcHJlZmVyZW5jZXNNZXNzYWdlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQm91dG9uIGRlIGNvbmZpcm1hdGlvbiBkdSBtb2RlIMOpZGl0aW9uIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIl9lZGl0TW9kZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImVkaXQtY29uZmlybS1idG5cIlxuICAgICAgICBbdGl0bGVdPVwiaTE4bi5wcmVmZXJlbmNlc0NvbmZpcm1FZGl0XCJcbiAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FZGl0TW9kZSgpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5LXNjcm9sbFwiICN0YWJsZUJvZHlTY3JvbGw+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCIgY2xhc3M9XCJqcXVlcnktdGFibGVcIlxuICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwidGFibGVNaW5XaWR0aFwiXG4gICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tSb3dGblwiXG4gICAgICAgICAgICAgW21hdFNvcnRBY3RpdmVdPVwiX21hdFNvcnRBY3RpdmVcIiBbbWF0U29ydERpcmVjdGlvbl09XCJfbWF0U29ydERpcmVjdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5rZXlcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIFttYXQtc29ydC1oZWFkZXJdPVwiKCFfZWRpdE1vZGUgJiYgY29sdW1uLnNvcnRhYmxlICE9PSBmYWxzZSkgPyBjb2x1bW4ua2V5IDogJydcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIl9lZGl0TW9kZSB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRDb2x1bW5XaWR0aChjb2x1bW4ua2V5KVwiXG4gICAgICAgICAgICBbY2xhc3MuZHJhZy1lbmFibGVkXT1cImlzQ29sdW1uRHJhZ0Ryb3BFbmFibGVkIHx8IF9lZGl0TW9kZVwiXG4gICAgICAgICAgICBbY2xhc3MuZHJvcC10YXJnZXRdPVwiaXNIZWFkZXJEcm9wVGFyZ2V0KGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5lZGl0LW1vZGUtaGVhZGVyXT1cIl9lZGl0TW9kZVwiXG4gICAgICAgICAgICAoZHJhZ292ZXIpPVwib25IZWFkZXJEcmFnT3Zlcihjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcm9wKT1cIm9uSGVhZGVyRHJvcChjb2x1bW4ua2V5LCAkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZC1jZWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImNvbHVtbi5pY29uXCIgY2xhc3M9XCJoZWFkLWljb25cIiBmb250U2V0PVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj57eyBjb2x1bW4uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZC10ZXh0XCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj57eyBjb2x1bW4uaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNDb2x1bW5EcmFnRHJvcEVuYWJsZWQgfHwgX2VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uSGVhZGVyRHJhZ1N0YXJ0KGNvbHVtbi5rZXksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uSGVhZGVyRHJhZ0VuZCgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kcmFnX2luZGljYXRvcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBQb2lnbsOpZSBkZSByZXNpemUgKHZpc2libGUgdW5pcXVlbWVudCBlbiBtb2RlIMOpZGl0aW9uKSAtLT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiX2VkaXRNb2RlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgIGRyYWdnYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZVN0YXJ0KGNvbHVtbi5rZXksICRldmVudClcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImdldENvbHVtbldpZHRoKGNvbHVtbi5rZXkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5lZGl0LW1vZGUtY2VsbF09XCJfZWRpdE1vZGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhX2VkaXRNb2RlOyBlbHNlIGVkaXRNb2RlQ2VsbFRwbFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q2VsbFRlbXBsYXRlKGNvbHVtbi5rZXkpIGFzIGN1c3RvbVRwbDsgZWxzZSBkZWZhdWx0Q2VsbFRwbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UcGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3dbX1JPV19SQVdfS0VZXSwgaW5kZXg6IHJvd1tfUk9XX0lOREVYX0tFWV0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbFRwbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4ubGF6eSA/IGdldExhenlSZW5kZXJUeXBlKHJvd1tjb2x1bW4ua2V5XSkgOiAndmFsdWUnXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRpbmcnXCIgY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hDYXNlPVwiJ2Vycm9yJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxhenktZXJyb3ItYnRuXCIgKGNsaWNrKT1cInJldHJ5TGF6eUNvbHVtbihjb2x1bW4pXCIgW3RpdGxlXT1cImkxOG4ubGF6eUVycm9yVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LWVycm9yLWljb25cIj7imqA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1lcnJvci1sYWJlbFwiPnt7IGkxOG4ubGF6eVJldHJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwiY2VsbC10ZXh0XCIgW2NsYXNzLmNlbGwtZW1wdHldPVwiaXNDZWxsRW1wdHkocm93W2NvbHVtbi5rZXldKVwiIFt0aXRsZV09XCJhc1RpdGxlKHJvd1tjb2x1bW4ua2V5XSlcIj57eyBpc0NlbGxFbXB0eShyb3dbY29sdW1uLmtleV0pID8gaTE4bi5jZWxsRW1wdHkgOiByb3dbY29sdW1uLmtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGVDZWxsVHBsPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNlbGwtdGV4dCBjZWxsLWVkaXQtbW9kZVwiIFt0aXRsZV09XCJhc1RpdGxlKHJvd1tjb2x1bW4ua2V5XSlcIj57eyByb3dbY29sdW1uLmtleV0gfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwicmVuZGVyZWRDb2x1bW5zOyBzdGlja3k6IHRydWVcIj48L3RyPlxuICAgICAgICA8dHJcbiAgICAgICAgICBtYXQtcm93XG4gICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHJlbmRlcmVkQ29sdW1uczsgd2hlbjogIWlzR3JvdXBIZWFkZXJcIlxuICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImhhc1Jvd0NsaWNrSGFuZGxlciAmJiAhX2VkaXRNb2RlID8gMCA6IG51bGxcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKHJvdylcIlxuICAgICAgICAgIFtjbGFzcy5uby1wb2ludGVyXT1cIiFoYXNSb3dDbGlja0hhbmRsZXIgfHwgX2VkaXRNb2RlXCJcbiAgICAgICAgICBbY2xhc3MuZWRpdC1tb2RlLXJvd109XCJfZWRpdE1vZGVcIlxuICAgICAgICAgIChjbGljayk9XCIhX2VkaXRNb2RlICYmIG9uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIhX2VkaXRNb2RlICYmIG9uUm93Q2xpY2socm93LCBudWxsKVwiXG4gICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiIV9lZGl0TW9kZSAmJiBvblJvd0NsaWNrKHJvdywgbnVsbClcIlxuICAgICAgICA+PC90cj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIl9HUk9VUF9ST1dfQ09MVU1OXCI+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFthdHRyLmNvbHNwYW5dPVwicmVuZGVyZWRDb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLWNlbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXItbGFiZWxcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1jaGV2cm9uXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0dyb3VwQ29sbGFwc2VkKHJvd1tfUk9XX0dST1VQX0tFWV0pXCIgKm5nSWY9XCJpc05vcm1hbEdyb3VwUm93KHJvdylcIj7igLo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNOb3JtYWxHcm91cFJvdyhyb3cpXCIgY2xhc3M9XCJncm91cC1rZXktbGFiZWxcIj57eyByb3dbX1JPV19HUk9VUF9LRVldIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzR3JvdXBSb3dMb2FkaW5nKHJvdylcIiBjbGFzcz1cImxhenktc2tlbGV0b24gZ3JvdXAtbGF6eS1rZXktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNHcm91cFJvd1Rvb01hbnkocm93KVwiIGNsYXNzPVwiZ3JvdXAtdG9vLW1hbnktbGFiZWxcIj57eyBpMThuLmdyb3VwVG9vTWFueShyb3dbX1JPV19HUk9VUF9DT1VOVF0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLWNvdW50LWJhZGdlXCI+e3sgcm93W19ST1dfR1JPVVBfQ09VTlRdIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtcGFnaW5hdGlvblwiICpuZ0lmPVwiIWlzR3JvdXBDb2xsYXBzZWQocm93W19ST1dfR1JPVVBfS0VZXSkgJiYgcm93W19ST1dfR1JPVVBfUEFHRV9DT1VOVF0gPiAxXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtcGFnZS1idG5cIiBbZGlzYWJsZWRdPVwicm93W19ST1dfR1JPVVBfUEFHRV0gPT09IDBcIiAoY2xpY2spPVwiZ3JvdXBQYWdlQmFjayhyb3dbX1JPV19HUk9VUF9LRVldKVwiPuKAuTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ3JvdXAtcGFnZS1pbmZvXCI+e3sgcm93W19ST1dfR1JPVVBfUEFHRV0gKyAxIH19IC8ge3sgcm93W19ST1dfR1JPVVBfUEFHRV9DT1VOVF0gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJncm91cC1wYWdlLWJ0blwiIFtkaXNhYmxlZF09XCJyb3dbX1JPV19HUk9VUF9QQUdFXSA+PSByb3dbX1JPV19HUk9VUF9QQUdFX0NPVU5UXSAtIDFcIiAoY2xpY2spPVwiZ3JvdXBQYWdlRm9yd2FyZChyb3dbX1JPV19HUk9VUF9LRVldLCByb3dbX1JPV19HUk9VUF9DT1VOVF0pXCI+4oC6PC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbX0dST1VQX1JPV19DT0xVTU5dOyB3aGVuOiBpc0dyb3VwSGVhZGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLXJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuZ3JvdXAtaGVhZGVyLWxvYWRpbmddPVwiaXNHcm91cFJvd0xvYWRpbmcocm93KVwiXG4gICAgICAgICAgICBbY2xhc3MuZ3JvdXAtaGVhZGVyLXRvby1tYW55XT1cImlzR3JvdXBSb3dUb29NYW55KHJvdylcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ncm91cC1rZXldPVwicm93W19ST1dfR1JPVVBfS0VZXVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cEhlYWRlckNsaWNrKHJvdylcIj48L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJtYXQtbWRjLXJvdyBuby1kYXRhLXJvd1wiICptYXROb0RhdGFSb3c+XG4gICAgICAgICAgPHRkIGNsYXNzPVwibWF0LW1kYy1jZWxsIG5vLWRhdGEtY2VsbFwiIFthdHRyLmNvbHNwYW5dPVwicmVuZGVyZWRDb2x1bW5zLmxlbmd0aFwiPjwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+PCEtLSAvdGFibGUtYm9keS1zY3JvbGwgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keS1vdmVybGF5XCIgKm5nSWY9XCJlZmZlY3RpdmVJc0xvYWRpbmcgfHwgaXNFbXB0eVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRhYmxlLWJvZHktb3ZlcmxheS10ZXh0XCI+e3sgZWZmZWN0aXZlSXNMb2FkaW5nID8gbG9hZGluZ1N0YXRlTGFiZWwgOiBlbXB0eVN0YXRlTGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PjwhLS0gL3RhYmxlLWJvZHktd3JhcHBlciAtLT5cblxuICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1iYXJcIiBbY2xhc3MuaXMtbG9hZGluZ109XCJlZmZlY3RpdmVJc0xvYWRpbmdcIiAqbmdJZj1cInNob3dQYWdpbmF0aW9uXCI+XG4gICAgICAgIDxtYXQtcGFnaW5hdG9yXG4gICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbFJvd3NcIlxuICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJyZXNvbHZlZFBhZ2luYXRpb25TaG93Rmlyc3RMYXN0QnV0dG9uc1wiXG4gICAgICAgID48L21hdC1wYWdpbmF0b3I+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0b3ItcmFuZ2UtbG9hZGVyXCIgXG4gICAgICAgICAgICAgW2NsYXNzLnBhZ2luYXRvci1yYW5nZS1sb2FkZXItLW5vLWZpcnN0LWxhc3RdPVwiIXJlc29sdmVkUGFnaW5hdGlvblNob3dGaXJzdExhc3RCdXR0b25zXCJcbiAgICAgICAgICAgICAqbmdJZj1cImVmZmVjdGl2ZUlzTG9hZGluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3R0b20tYmFyXCIgKm5nSWY9XCJhY3RpdmVHcm91cEJ5S2V5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3R0b20tYmFyLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1ib3R0b20tYmFyLWxlZnRcIj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ3JvdXAtcmVzZXQtYnRuXCIgKGNsaWNrKT1cIm9uR3JvdXBCeUNoYW5nZShudWxsKVwiPlxuICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImdyb3VwLXJlc2V0LWljb25cIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgOGE1IDUgMCAxIDAgNS01IDUgNSAwIDAgMC0zLjU0IDEuNDZMMyAzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS40XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAzdjIuNUg1LjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICB7eyBpMThuLmdyb3VwUmVtb3ZlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1iYXItc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtc29ydC1jb250cm9sc1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLXNvcnQtbGFiZWxcIj57eyBpMThuLmdyb3VwU29ydExhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdyb3VwLXNvcnQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJncm91cFNvcnRPcmRlciA9PT0gJ2FzYydcIiAoY2xpY2spPVwib25Hcm91cFNvcnRUb2dnbGUoJ2FzYycpXCIgW3RpdGxlXT1cImkxOG4uZ3JvdXBTb3J0QXNjXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X3Vwd2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdyb3VwLXNvcnQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJncm91cFNvcnRPcmRlciA9PT0gJ2Rlc2MnXCIgKGNsaWNrKT1cIm9uR3JvdXBTb3J0VG9nZ2xlKCdkZXNjJylcIiBbdGl0bGVdPVwiaTE4bi5ncm91cFNvcnREZXNjXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVsXCI+e3sgaTE4bi5ncm91cFJvd3NQZXJHcm91cCB9fTwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwibWF0LW1kYy1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ3JvdXBQYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Hcm91cFBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJtYXQtbWRjLXBhZ2luYXRvci1zZWxlY3QtcGFnZS1zaXplIGdyb3VwLXBhZ2Utc2l6ZS1wYW5lbFwiXG4gICAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwiJ2F1dG8nXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+e3sgZ3JvdXBQYWdlU2l6ZSA9PT0gMCA/IGkxOG4uZ3JvdXBTaG93QWxsIDogZ3JvdXBQYWdlU2l6ZSB9fTwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgcGFnZVNpemVPcHRpb25zR3JvdXBCeVwiIFt2YWx1ZV09XCJvcHRcIj57eyBvcHQgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIjBcIj57eyBpMThuLmdyb3VwU2hvd0FsbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3NlY3Rpb24+XG4iXX0=
|