@tiba-spark/client-shared-lib 25.4.0-260 → 25.4.0-267
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libraries/modules/facility/facility.state.mjs +25 -24
- package/esm2022/libraries/utils/text.util.mjs +14 -1
- package/fesm2022/tiba-spark-client-shared-lib.mjs +721 -708
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/facility/facility.state.d.ts.map +1 -1
- package/libraries/utils/text.util.d.ts +1 -0
- package/libraries/utils/text.util.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -22,6 +22,7 @@ import { SidenavState } from '../sidenav/sidenav.state';
|
|
|
22
22
|
import { SetSmartParkAction } from '../smartparks/smartpark.actions';
|
|
23
23
|
import { ClearCategoriesAction, ClearFacilityDictionaryAction, ClearGroupsAction, ClearInactiveSelectedParkAction, ClearJobTitlesAction, ClearMacroCommandsAction, ClearSelectedFacilityAction, ClearZonesAction, ClearZsAction, FacilityChangedAction, FacilityRemoteCommandExecutedAction, LoadAccessProfileZonesAction, LoadAccountManagementGuestGroupAction, LoadAccountManagementJobTitlesAction, LoadCategoriesAction, LoadCcMainZonesAction, LoadFacilityAction, LoadFacilityRemoteCommandsRefAction, LoadMacroCommandsAction, LoadParkingLotAction, LoadRemoteCommandsRefAction, LoadReportsGuestGroupAction, LoadReportsJobTitlesAction, LoadReportsZonesAction, LoadZsAction, ServicesRunningStatusChangedAction, SetBasicMenuAction, SetDeviceRemoteCommandsMapAction, SetFacilityRemoteCommandsMapAction, SetSelectedParkAction, SetSmartparkBasicAction, SetSmartparkBasicAllAction, UnloadParkingLotAction, ZoneChangedAction } from './facility.actions';
|
|
24
24
|
var SmartZoneCounterVehicleTypeDto = Rpc.SmartZoneCounterVehicleTypeDto;
|
|
25
|
+
import { objectKeystoLowerCase } from '../../utils';
|
|
25
26
|
import * as i0 from "@angular/core";
|
|
26
27
|
import * as i1 from "@ngxs/store";
|
|
27
28
|
import * as i2 from "../../services/facility-commands.service";
|
|
@@ -278,38 +279,38 @@ let FacilityState = class FacilityState {
|
|
|
278
279
|
});
|
|
279
280
|
}
|
|
280
281
|
handleSmartCounter(zone) {
|
|
281
|
-
//"[{"VehicleClassId":1,"Counter":31,"ZoneId":10},{"VehicleClassId":2,"Counter":25,"ZoneId":10}]"
|
|
282
|
-
//"[{\"VehicleTypeId\":1,\"Counter\":10,\"ZoneId\":10},{\"VehicleTypeId\":2,\"Counter\":10,\"ZoneId\":10}]"
|
|
283
282
|
try {
|
|
284
|
-
if (zone?.
|
|
285
|
-
const
|
|
286
|
-
|
|
287
|
-
|
|
283
|
+
if (zone?.smartCounterVehicleTypeJson) {
|
|
284
|
+
const parsedJson = JSON.parse(zone.smartCounterVehicleTypeJson);
|
|
285
|
+
const smartCounterVehicleType = objectKeystoLowerCase(parsedJson);
|
|
286
|
+
if (!Array.isArray(smartCounterVehicleType)) {
|
|
287
|
+
throw new Error('Parsed JSON smartCounterVehicleType is not an array');
|
|
288
288
|
}
|
|
289
|
-
zone.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
289
|
+
zone.smartZoneCounterVehicleType = smartCounterVehicleType.map((sc) => {
|
|
290
|
+
const smartZoneCounterVehicleTypeDto = new SmartZoneCounterVehicleTypeDto();
|
|
291
|
+
smartZoneCounterVehicleTypeDto.counter = sc.counter;
|
|
292
|
+
smartZoneCounterVehicleTypeDto.zoneId = zone.id;
|
|
293
|
+
smartZoneCounterVehicleTypeDto.vehicleTypeId = sc.vehicletypeid;
|
|
294
|
+
return smartZoneCounterVehicleTypeDto;
|
|
295
295
|
});
|
|
296
296
|
}
|
|
297
|
-
if (zone?.
|
|
298
|
-
const
|
|
299
|
-
|
|
300
|
-
|
|
297
|
+
if (zone?.smartCounterVehicleClassJson) {
|
|
298
|
+
const parsedJson = JSON.parse(zone.smartCounterVehicleClassJson);
|
|
299
|
+
const smartCounterVehicleClass = objectKeystoLowerCase(parsedJson);
|
|
300
|
+
if (!Array.isArray(smartCounterVehicleClass)) {
|
|
301
|
+
throw new Error('Parsed JSON smartCounterVehicleClass is not an array');
|
|
301
302
|
}
|
|
302
|
-
zone.
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
303
|
+
zone.smartZoneCounterVehicleClass = smartCounterVehicleClass.map((sc) => {
|
|
304
|
+
const smartZoneCounterVehicleClassDto = new SmartZoneCounterVehicleClassDto();
|
|
305
|
+
smartZoneCounterVehicleClassDto.counter = sc.counter;
|
|
306
|
+
smartZoneCounterVehicleClassDto.zoneId = zone.id;
|
|
307
|
+
smartZoneCounterVehicleClassDto.vehicleClassId = sc.vehicleclassid;
|
|
308
|
+
return smartZoneCounterVehicleClassDto;
|
|
308
309
|
});
|
|
309
310
|
}
|
|
310
311
|
}
|
|
311
312
|
catch (error) {
|
|
312
|
-
console.error(
|
|
313
|
+
console.error('Failed to parse smartCounterJson:', error);
|
|
313
314
|
zone.smartZoneCounterVehicleClass = [];
|
|
314
315
|
zone.smartZoneCounterVehicleType = [];
|
|
315
316
|
}
|
|
@@ -955,4 +956,4 @@ export { FacilityState };
|
|
|
955
956
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FacilityState, decorators: [{
|
|
956
957
|
type: Injectable
|
|
957
958
|
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.BaseFacilityCommandsService }, { type: i3.LocalStorageService }, { type: i4.FacilityMenuService }, { type: i5.FacilityRpcServiceProxy }, { type: i6.Rpc.RemoteCommandRpcServiceProxy }, { type: i5.GroupRpcServiceProxy }, { type: i5.CategoryRpcServiceProxy }, { type: i5.JobTitleRpcServiceProxy }, { type: i5.ZoneRpcServiceProxy }, { type: i5.ZRpcServiceProxy }, { type: i7.GlobalErrorService }, { type: i8.CommandNotificationService }, { type: i9.TranslateService }, { type: i10.AppConfigService }], propDecorators: { onClearFacilityDictionary: [], onSetSmartparkBasicAllAction: [], onSetSmartparkBasicAction: [], onLoadParkingLotAction: [], onLoadRemoteCommandsRefAction: [], onLoadFacilityRemoteCommandsRefAction: [], onLoadFacilityAction: [], onUnloadParkingLotAction: [], onSetDeviceRemoteCommandsMapAction: [], onSetFacilityRemoteCommandsMapAction: [], onZoneChangedAction: [], onServicesRunningStatusChangedAction: [], onFacilityChangedAction: [], onSetBasicMenuAction: [], onLoadAccountManagementGuestGroupsAction: [], onLoadReportsGuestGroupsAction: [], onLoadCategoriesAction: [], onLoadReportsJobTitlesAction: [], onLoadAccountManagementJobTitlesAction: [], onLoadReportsZonesAction: [], onLoadAccessProfileZZonesAction: [], onLoadCcMainZonesAction: [], onLoadZsAction: [], onClearGroupsAction: [], onClearCategoriesAction: [], onClearJobTitlesAction: [], onClearZonesAction: [], onClearZsAction: [], onSetSelectedParkAction: [], onClearSelectedFacilityAction: [], onClearInactiveSelectedParkAction: [], onFacilityRemoteCommandExecutedAction: [], onLoadMacroCommandsAction: [], onClearMacroCommandsAction: [] } });
|
|
958
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVySSxPQUFPLEVBQzRELFdBQVcsRUFDNUUsMEJBQTBCLEVBQ2dDLFNBQVMsRUFBRSwrQkFBK0IsRUFFckcsTUFBTSx5Q0FBeUMsQ0FBQztBQUtqRCxPQUFPLEVBQUUsUUFBUSxFQUF3QixNQUFNLHVCQUF1QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLckUsT0FBTyxFQUNMLHFCQUFxQixFQUFFLDZCQUE2QixFQUFFLGlCQUFpQixFQUFFLCtCQUErQixFQUFFLG9CQUFvQixFQUM5SCx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsbUNBQW1DLEVBQ2xKLDRCQUE0QixFQUFFLHFDQUFxQyxFQUFFLG9DQUFvQyxFQUN6RyxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxtQ0FBbUMsRUFBRSx1QkFBdUIsRUFDN0gsb0JBQW9CLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUNoSixrQ0FBa0MsRUFBRSxrQkFBa0IsRUFBRSxnQ0FBZ0MsRUFBRSxrQ0FBa0MsRUFDNUgscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQ3RILE1BQU0sb0JBQW9CLENBQUM7QUFFNUIsSUFBTyw4QkFBOEIsR0FBRyxHQUFHLENBQUMsOEJBQThCLENBQUM7Ozs7Ozs7Ozs7OztBQXVCM0UsTUFBTSxRQUFRLEdBQUc7SUFDZixJQUFJLEVBQUUsRUFBRTtJQUNSLE1BQU0sRUFBRSxJQUFJO0lBQ1osMEJBQTBCLEVBQUUsRUFBRTtJQUM5QixpQkFBaUIsRUFBRSxTQUFTO0lBQzVCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsVUFBVSxFQUFFLEVBQUU7SUFDZCwrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLFFBQVEsRUFBRSxFQUFFO0lBQ1osOEJBQThCLEVBQUUsRUFBRTtJQUNsQyxnQ0FBZ0MsRUFBRSxFQUFFO0lBQ3BDLE1BQU0sRUFBRSxJQUFJO0lBQ1osVUFBVSxFQUFFLElBQUk7SUFDaEIsU0FBUyxFQUFFLElBQUk7SUFDZixLQUFLLEVBQUUsSUFBSTtJQUNYLENBQUMsRUFBRSxJQUFJO0lBQ1AsY0FBYyxFQUFFLEVBQUU7SUFDbEIsMEJBQTBCLEVBQUUsRUFBRTtJQUM5QixhQUFhLEVBQUUsRUFBRTtDQUNsQixDQUFDO0FBT0ssSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYTs7SUFFeEIsWUFDVSxLQUFZLEVBQ1osdUJBQW9ELEVBQ3BELG1CQUF3QyxFQUN4QyxtQkFBd0MsRUFDeEMsb0JBQTZDLEVBQzdDLDRCQUE4RCxFQUM5RCxvQkFBMEMsRUFDMUMsb0JBQTZDLEVBQzdDLHVCQUFnRCxFQUNoRCxtQkFBd0MsRUFDeEMsZ0JBQWtDLEVBQ2xDLGtCQUFzQyxFQUN0QywwQkFBc0QsRUFDdEQsZ0JBQWtDLEVBQ2xDLFNBQTJCO1FBZDNCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTZCO1FBQ3BELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlDQUE0QixHQUE1Qiw0QkFBNEIsQ0FBa0M7UUFDOUQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN0RCxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBK3RCN0IsaUJBQVksR0FBRyxDQUFDLEdBQXFDLEVBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQzdGLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztJQTl0QnpFLENBQUM7SUFHYSxBQUFQLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBeUI7UUFDOUMsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFHYSxBQUFQLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBeUI7UUFDN0MsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBR2EsQUFBUCxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBeUI7UUFDeEQsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDO0lBQzVDLENBQUM7SUFHYSxBQUFQLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBeUI7UUFDcEQsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQzlCLENBQUM7SUFHYSxBQUFQLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBeUI7UUFDakQsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztJQUNyQyxDQUFDO0lBR2EsQUFBUCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQXlCO1FBQzNDLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFHYSxBQUFQLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBeUI7UUFDaEQsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUF5QjtRQUM5QyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBQ25DLENBQUM7SUFHYSxBQUFQLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBeUI7UUFDL0MsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNsQyxDQUFDO0lBR2EsQUFBUCxNQUFNLENBQUMsdUJBQXVCLENBQUMsS0FBeUI7UUFDN0QsT0FBTyxLQUFLLENBQUMsMEJBQTBCLENBQUM7SUFDMUMsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUF5QjtRQUMxQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUF5QjtRQUM1QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQXlCO1FBQ3ZELE9BQU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDO0lBQ2pDLENBQUM7SUFHTSxBQUFQLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUF5QjtRQUNqRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDMUIsQ0FBQztJQUdNLEFBQVAsTUFBTSxDQUFDLDBCQUEwQixDQUFDLEtBQXlCO1FBQ3pELE9BQU8sS0FBSyxDQUFDLDBCQUEwQixDQUFDO0lBQzFDLENBQUM7SUFHTSxBQUFQLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxLQUF5QjtRQUM5RCxPQUFPLEtBQUssQ0FBQywrQkFBK0IsQ0FBQztJQUMvQyxDQUFDO0lBR00sQUFBUCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQXlCO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUN4QixDQUFDO0lBR00sQUFBUCxNQUFNLENBQUMsZ0NBQWdDLENBQUMsS0FBeUI7UUFDL0QsT0FBTyxLQUFLLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2hJLENBQUM7SUFHTSxBQUFQLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxLQUF5QjtRQUNqRSxPQUFPLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEksQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUF5QjtRQUM1QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUF5QjtRQUNoRCxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDMUIsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUF5QjtRQUMvQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUF5QjtRQUN2QyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUdhLEFBQVAsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUF5QjtRQUNuRCxPQUFPLEtBQUssQ0FBQyxhQUFhLENBQUM7SUFDN0IsQ0FBQztJQUdELHlCQUF5QixDQUFDLEdBQXFDLEVBQUUsQ0FBZ0M7UUFDL0YsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELDRCQUE0QixDQUFDLEdBQXFDLEVBQUUsTUFBa0M7UUFDcEcsTUFBTSxlQUFlLEdBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksa0JBQWtCLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUdELHlCQUF5QixDQUFDLEdBQXFDLEVBQUUsTUFBK0I7UUFDOUYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFHRCxzQkFBc0IsQ0FBQyxHQUFxQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBd0I7UUFDMUcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXBGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcscUNBQXFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFMUYsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLE1BQU07WUFDTixJQUFJO1lBQ0osaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjtZQUM3QyxRQUFRO1lBQ1IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1lBQ3JCLGNBQWM7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkUsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFHLENBQUM7SUFDSCxDQUFDO0lBR0QsNkJBQTZCLENBQUMsR0FBcUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQStCO1FBQ3hILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWhFLHdFQUF3RTtRQUN4RSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztRQUMzRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVuRyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRTtnQkFDckQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGdDQUFnQyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFHRCxxQ0FBcUMsQ0FBQyxHQUFxQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBdUM7UUFDeEksTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEUsd0VBQXdFO1FBQ3hFLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLGdDQUFnQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXJHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7b0JBQ3JELEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxrQ0FBa0MsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxvQkFBb0IsQ0FBQyxHQUFxQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFzQjtRQUN0SCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakYsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwRixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRSxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUM7SUFHRCx3QkFBd0IsQ0FBQyxHQUFxQyxFQUFFLE1BQThCO1FBQzVGLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYixJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsSUFBSTtZQUNYLGNBQWMsRUFBRSxFQUFFO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxrQ0FBa0MsQ0FBQyxHQUFxQyxFQUFFLE1BQXdDO1FBQ2hILE1BQU0sOEJBQThCLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLDhCQUE4QixDQUFDO1FBQ3JGLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqRCw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFDRCw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hHLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYiw4QkFBOEI7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELG9DQUFvQyxDQUFDLEdBQXFDLEVBQUUsTUFBMEM7UUFDcEgsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsZ0NBQWdDLENBQUM7UUFDekYsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ25ELGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUNELGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEcsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLGdDQUFnQztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsbUJBQW1CLENBQUMsR0FBcUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQXFCO1FBQzVGLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFOUMsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsS0FBSyxTQUFTLENBQUMsMEJBQTBCO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLE1BQU07WUFFUixLQUFLLFNBQVMsQ0FBQywwQkFBMEI7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzlDLE1BQU07WUFFUjtnQkFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM5QyxNQUFNO1FBQ1YsQ0FBQztRQUVELFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNqQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFFN0QsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLFVBQVUsRUFBRSxrQkFBa0I7WUFDOUIsUUFBUTtZQUNSLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBYTtRQUM5QixpR0FBaUc7UUFDakcsMkdBQTJHO1FBQzNHLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxFQUFFLDRCQUE0QixFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sd0JBQXdCLEdBQStCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzNHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQkFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDO2dCQUVELElBQUksQ0FBQyw0QkFBNEIsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3BFLE9BQU8sK0JBQStCLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87d0JBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTt3QkFDZixjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWM7cUJBQ2xDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLElBQUksRUFBRSwyQkFBMkIsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLHVCQUF1QixHQUE4QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUN4RyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztnQkFDMUUsQ0FBQztnQkFFRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNsRSxPQUFPLDhCQUE4QixDQUFDLE1BQU0sQ0FBQzt3QkFDM0MsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPO3dCQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7d0JBQ2YsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhO3FCQUNoQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUdELG9DQUFvQyxDQUFDLEdBQXFDLEVBQ3hFLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFzQztRQUNuRSxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztRQUN2RixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDckQscUJBQXFCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDM0gsK0JBQStCLENBQUMsSUFBSSxDQUFDLEdBQUcscUJBQXFCLENBQUM7UUFDOUQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLCtCQUErQixFQUFFLENBQUMsQ0FBQztRQUVwRCwwQ0FBMEM7UUFDMUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sMEJBQTBCLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sVUFBVSxHQUFrQixNQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUUsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDbEMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDN0osQ0FBQztZQUNELEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBR0QsdUJBQXVCLENBQUMsR0FBcUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQXlCO1FBQ3RHLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUNyRCxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7UUFFMUQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDOUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDYixRQUFRLEVBQUUsaUJBQWlCO2FBQzVCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsTUFBTSwwQkFBMEIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDeEYsTUFBTSwrQkFBK0IsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsK0JBQStCLENBQUM7UUFDdkYsTUFBTSxVQUFVLEdBQWtCLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRSxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFNLENBQUM7UUFDRCxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBR0Qsb0JBQW9CLENBQUMsR0FBcUMsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQXNCO1FBQ3pHLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFHRCx3Q0FBd0MsQ0FBQyxHQUFxQyxFQUFFLE1BQTZDO1FBQzNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUN2SCxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQzFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWxELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDYixNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDcEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFHRCw4QkFBOEIsQ0FBQyxHQUFxQyxFQUFFLE1BQW1DO1FBQ3ZHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQzlILE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFDMUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbEQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSTthQUNwQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUdELHNCQUFzQixDQUFDLEdBQXFDLEVBQUUsTUFBNEI7UUFDeEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQzNILE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFDMUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMxQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNiLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSTthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUdELDRCQUE0QixDQUFDLEdBQXFDLEVBQUUsTUFBa0M7UUFDcEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFDbkksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUMxRSxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3hDLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQzFCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBR0Qsc0NBQXNDLENBQUMsR0FBcUMsRUFBRSxNQUE0QztRQUN4SCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFDNUgsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUMxRSxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3hDLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2IsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQzFCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBR0Qsd0JBQXdCLENBQUMsR0FBcUMsRUFBRSxNQUE4QjtRQUM1RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUNySSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQzFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWxELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFHRCwrQkFBK0IsQ0FBQyxHQUFxQyxFQUFFLE1BQW9DO1FBQ3pHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQzNJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFDMUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbEQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUdELHVCQUF1QixDQUFDLEdBQXFDLEVBQUUsTUFBNkI7UUFDMUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsRUFDOUgsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUMxRSxNQUFNLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2IsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBR0QsY0FBYyxDQUFDLEdBQXFDLEVBQUUsTUFBb0I7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQ3ZHLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFDMUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QixHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSTthQUNWLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBR0QsbUJBQW1CLENBQUMsR0FBcUM7UUFDdkQsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELHVCQUF1QixDQUFDLEdBQXFDO1FBQzNELEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0Qsc0JBQXNCLENBQUMsR0FBcUM7UUFDMUQsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxrQkFBa0IsQ0FBQyxHQUFxQztRQUN0RCxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ2IsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsZUFBZSxDQUFDLEdBQXFDO1FBQ25ELEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYixDQUFDLEVBQUUsSUFBSTtTQUNSLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCx1QkFBdUIsQ0FBQyxHQUFxQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBeUI7UUFDdEcsTUFBTSxjQUFjLEdBQUcscUNBQXFDLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDM0YsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLElBQUk7WUFDSixNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDcEIsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQjtZQUM5QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUs7WUFDdEIsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCw2QkFBNkIsQ0FBQyxHQUFxQyxFQUFFLEVBQWdDO1FBQ25HLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYixJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU0sRUFBRSxJQUFJO1lBQ1osaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLEtBQUssRUFBRSxJQUFJO1lBQ1gsY0FBYyxFQUFFLEVBQUU7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELGlDQUFpQyxDQUFDLEdBQXFDLEVBQUUsTUFBdUM7UUFDOUcsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUV6Qyx3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2hELEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsTUFBTSxFQUFFLElBQUk7Z0JBQ1osaUJBQWlCLEVBQUUsSUFBSTtnQkFDdkIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsY0FBYyxFQUFFLEVBQUU7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFHRCxxQ0FBcUMsQ0FBQyxHQUFxQyxFQUFFLEVBQUUsMEJBQTBCLEVBQXVDO1FBQzlJLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0csTUFBTSxnQkFBZ0IsR0FBRyxxQ0FBcUMsQ0FBQywwQkFBMEIsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVILE1BQU0sTUFBTSxHQUE4QjtZQUN4QyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztTQUN6RCxDQUFDO1FBRUYsSUFBSSwwQkFBMEIsQ0FBQyxJQUFJLEtBQUssMEJBQTBCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakYsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDekUsT0FBTywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUgsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFHRCx5QkFBeUIsQ0FBQyxHQUFxQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBMkI7UUFDeEcsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV4RixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzdDLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2IsYUFBYSxFQUFFLGFBQWEsQ0FBQyxJQUFJO2FBQ2xDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBR0QsMEJBQTBCLENBQUMsR0FBcUM7UUFDOUQsR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUNiLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUFxQyxFQUFFLElBQVksRUFBRSxNQUFjLEVBQUUsU0FBb0IsRUFDaEgsUUFBcUIsRUFBRSxhQUF3QztRQUMvRCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztRQUM3RSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFFM0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM5QixDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDL0QsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDekUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUMzRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDekcsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNqRSxRQUFRLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZGLFFBQVEsQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQztZQUN6RSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEgsQ0FBQztRQUVELDBCQUEwQixDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVPLCtCQUErQixDQUFDLGNBQTJCLEVBQUUsZ0JBQTZCO1FBQ2hHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsZ0JBQWdCLENBQUMsd0JBQXdCLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuTCxnQkFBZ0IsQ0FBQyxpQ0FBaUMsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsaUNBQWlDLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2TixnQkFBZ0IsQ0FBQyxtQ0FBbUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsbUNBQW1DLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuTCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxHQUFxQyxFQUFFLFVBQThCLEVBQUUsUUFBcUIsRUFBRSxTQUFvQjtRQUMvSSxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQ2IsVUFBVTtTQUNYLENBQUMsQ0FBQztRQUVILElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMvQixNQUFNLGNBQWMsR0FBRyxxQ0FBcUMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMxRixHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNiLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxpQkFBaUI7Z0JBQzdDLGNBQWM7YUFDZixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUFDLEdBQXFDLEVBQUUsMEJBQXNEO1FBQzdILEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDYiwwQkFBMEI7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFFBQXFCLEVBQUUsU0FBd0I7UUFDN0UsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLFFBQXFCO1FBQzdELHNEQUFzRDtRQUN0RCxJQUFJLGNBQWMsR0FBVyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLCtCQUErQixDQUFDLDRCQUFzRCxFQUFFLHdCQUFrRDtRQUNoSixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BELHdCQUF3QixDQUFDLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLDhCQUE4QixJQUFJLGdCQUFnQixDQUFDO1FBQ2pNLHdCQUF3QixDQUFDLGtDQUFrQyxHQUFHLHdCQUF3QixDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLGtDQUFrQyxJQUFJLGdCQUFnQixDQUFDO1FBQzdNLHdCQUF3QixDQUFDLCtCQUErQixHQUFHLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLCtCQUErQixJQUFJLGdCQUFnQixDQUFDO1FBQ3BNLHdCQUF3QixDQUFDLDhCQUE4QixHQUFHLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLDhCQUE4QixJQUFJLGdCQUFnQixDQUFDO1FBQ2pNLE9BQU8sd0JBQXdCLENBQUM7SUFDbEMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxjQUEyQixFQUFFLGdCQUE2QjtRQUMvRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BELElBQUksZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELGVBQWUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQzdDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1FBQzdELGVBQWUsQ0FBQyxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO1FBQ2pFLGVBQWUsQ0FBQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQztRQUMvRSxlQUFlLENBQUMsdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7UUFDbkYsZUFBZSxDQUFDLHlCQUF5QixHQUFHLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDO1FBQ3ZGLGVBQWUsQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1FBQzNELGVBQWUsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQ3ZELGVBQWUsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyRSxlQUFlLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7UUFDL0UsZUFBZSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDakQsZUFBZSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDekQsZUFBZSxDQUFDLHdCQUF3QixHQUFHLGdCQUFnQixDQUFDLFlBQVksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHdCQUF3QixJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEwsZUFBZSxDQUFDLGlDQUFpQyxHQUFHLGdCQUFnQixDQUFDLHFCQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxpQ0FBaUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ROLGVBQWUsQ0FBQyxtQ0FBbUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsbUNBQW1DLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNsTCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGVBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLGVBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZHLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBcUMsRUFBRSxZQUEwQyxFQUFFLGtCQUFzQyxFQUFFLFNBQW9CO1FBQ3RLLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVHLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBS08sZUFBZSxDQUFDLGNBQWlDLEVBQUUsSUFBWSxFQUFFLE9BQWUsRUFBRSxrQkFBc0MsRUFBRSxTQUFvQjtRQUNwSixNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7UUFDakMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLDRDQUE0QztnQkFDNUMsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN4SCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLEdBQXFDO1FBQy9FLDhDQUE4QztRQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5RSxJQUFJLGFBQWEsS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUNyRCxNQUFNLCtCQUErQixHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztRQUV2RixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxVQUFVLEdBQWtCLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekQsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxRQUFrQixDQUFDO2dCQUV2QixJQUFJLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDbkMsUUFBUSxHQUFHLFNBQVM7eUJBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLFFBQVE7eUJBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQy9GLENBQUM7Z0JBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLCtCQUErQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO29CQUN4SSxRQUFRLENBQUMsUUFBUSxHQUFHLFVBQVUsS0FBSyx5QkFBeUIsQ0FBQyxTQUFTLENBQUM7b0JBQ3ZFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO29CQUNqQyxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFTywrQkFBK0IsQ0FBQyxZQUEwQyxFQUFFLGtCQUFzQztRQUN4SCxNQUFNLCtCQUErQixHQUF3QyxFQUFFLENBQUM7UUFDaEYsTUFBTSx1QkFBdUIsR0FBK0IsRUFBRSxDQUFDO1FBQy9ELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzdDLCtCQUErQixDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztZQUNqRix1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDdkYsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEosVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRztvQkFDbkIsTUFBTSxFQUFFLG9CQUFvQixDQUFDLE1BQU07b0JBQ25DLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxTQUFTO2lCQUMxQyxDQUFDO2dCQUNGLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNULENBQUM7UUFFRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRU8sMkJBQTJCLENBQUMsWUFBMEM7UUFDNUUsTUFBTSxrQkFBa0IsR0FBdUIsRUFBRSxDQUFDO1FBQ2xELE1BQU0sMEJBQTBCLEdBQStCLEVBQUUsQ0FBQztRQUVsRSxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsaUJBQWlCLENBQUM7Z0JBQy9DLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUMseUJBQXlCLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxtQ0FBbUMsR0FBRyxHQUFHLENBQUMsbUNBQW1DLENBQUM7Z0JBQ25GLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMscUJBQXFCLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxHQUFHLENBQUMsdUJBQXVCLENBQUM7Z0JBQzNELElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxHQUFHLENBQUMsaUNBQWlDLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDO2dCQUNuRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDLHdCQUF3QixDQUFDO2dCQUM3RCxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNqQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzFDLENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLENBQUM7SUFDeEUsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEdBQXFDLEVBQUUsVUFBd0M7UUFDNUcsd0VBQXdFO1FBQ3hFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRSxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNyQixRQUFRLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3QixRQUFRLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN6QixRQUFRLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFFL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV2QixNQUFNLFFBQVEsR0FBc0IsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxNQUFNLEVBQUUsVUFBVSxFQUFFLDBCQUEwQixFQUFFLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sWUFBWSxHQUFnQztZQUNoRCxRQUFRO1lBQ1IsVUFBVTtZQUNWLDBCQUEwQjtTQUMzQixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFO2dCQUMxQixJQUFJLEVBQUUsRUFBRTtnQkFDUixNQUFNLEVBQUUsSUFBSTtnQkFDWixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxjQUFjLEVBQUUsRUFBRTthQUNuQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3Qiw2REFBNkQ7UUFDN0QsTUFBTSxFQUFFLCtCQUErQixFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsSSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsK0JBQStCLEVBQUUsMEJBQTBCLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFTyxrQ0FBa0MsQ0FBQywwQkFBc0QsRUFBRSxNQUFpQztRQUNsSSxNQUFNLDJCQUEyQixHQUEwQyxJQUFJLENBQUMsS0FBSyxDQUNuRixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQzVELElBQUksRUFBRSxDQUFDO1FBRVIsTUFBTSxHQUFHLEdBQStCLDJCQUEyQixDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakgsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sUUFBUSxHQUFnQixJQUFJLENBQUM7WUFDbkMsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsMEJBQTBCLENBQUM7WUFDakQsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsb0NBQW9DLENBQ2pGLDBCQUEwQixDQUFDLGFBQWEsRUFDeEMsUUFBUSxFQUNSLEdBQUcsQ0FDSixDQUFDO1lBRUYscUNBQXFDO1lBQ3JDLE1BQU0sWUFBWSxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzVELFlBQVksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7WUFDN0QsWUFBWSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztZQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUzRSwyQkFBMkIsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDcEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FDOUIseUJBQXlCLEVBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FDNUMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDOytHQXY2QlUsYUFBYTttSEFBYixhQUFhOztBQThJeEI7SUFEQyxNQUFNLENBQUMsNkJBQTZCLENBQUM7OERBS3JDO0FBR0Q7SUFEQyxNQUFNLENBQUMsMEJBQTBCLENBQUM7aUVBS2xDO0FBR0Q7SUFEQyxNQUFNLENBQUMsdUJBQXVCLENBQUM7OERBRy9CO0FBR0Q7SUFEQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQzsyREF3QnpEO0FBR0Q7SUFEQyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztrRUFhaEU7QUFHRDtJQURDLE1BQU0sQ0FBQyxtQ0FBbUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDOzBFQWV4RTtBQUdEO0lBREMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7eURBY3ZEO0FBR0Q7SUFEQyxNQUFNLENBQUMsc0JBQXNCLENBQUM7NkRBUzlCO0FBR0Q7SUFEQyxNQUFNLENBQUMsZ0NBQWdDLENBQUM7dUVBVXhDO0FBR0Q7SUFEQyxNQUFNLENBQUMsa0NBQWtDLENBQUM7eUVBVTFDO0FBR0Q7SUFEQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7d0RBcUN6QjtBQTJDRDtJQURDLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQzt5RUFvQjFDO0FBR0Q7SUFEQyxNQUFNLENBQUMscUJBQXFCLENBQUM7NERBNkI3QjtBQUdEO0lBREMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO3lEQUcxQjtBQUdEO0lBREMsTUFBTSxDQUFDLHFDQUFxQyxDQUFDOzZFQVc3QztBQUdEO0lBREMsTUFBTSxDQUFDLDJCQUEyQixDQUFDO21FQVduQztBQUdEO0lBREMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7MkRBVXpEO0FBR0Q7SUFEQyxNQUFNLENBQUMsMEJBQTBCLENBQUM7aUVBVWxDO0FBR0Q7SUFEQyxNQUFNLENBQUMsb0NBQW9DLENBQUM7MkVBVzVDO0FBR0Q7SUFEQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQzs2REFXM0Q7QUFHRDtJQURDLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDO29FQVdqRTtBQUdEO0lBREMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7NERBVzFEO0FBR0Q7SUFEQyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7bURBV2pEO0FBR0Q7SUFEQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7d0RBS3pCO0FBR0Q7SUFEQyxNQUFNLENBQUMscUJBQXFCLENBQUM7NERBSzdCO0FBR0Q7SUFEQyxNQUFNLENBQUMsb0JBQW9CLENBQUM7MkRBSzVCO0FBR0Q7SUFEQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7dURBS3hCO0FBR0Q7SUFEQyxNQUFNLENBQUMsYUFBYSxDQUFDO29EQUtyQjtBQUdEO0lBREMsTUFBTSxDQUFDLHFCQUFxQixDQUFDOzREQVc3QjtBQUdEO0lBREMsTUFBTSxDQUFDLDJCQUEyQixDQUFDO2tFQVVuQztBQUdEO0lBREMsTUFBTSxDQUFDLCtCQUErQixDQUFDO3NFQWdCdkM7QUFHRDtJQURDLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQzswRUFpQjNDO0FBR0Q7SUFEQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQzs4REFTNUQ7QUFHRDtJQURDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQzsrREFLaEM7QUFwbUJhO0lBRGIsUUFBUSxFQUFFO21DQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7a0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTs2Q0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3lDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7c0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtnQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3FDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7bUNBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtvQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2tEQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7K0JBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtpQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFOzRDQUdWO0FBR007SUFETixRQUFRLEVBQUU7NkNBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTtxREFHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzBEQUdWO0FBR007SUFETixRQUFRLEVBQUU7bUNBR1Y7QUFHTTtJQUROLFFBQVEsRUFBRTsyREFHVjtBQUdNO0lBRE4sUUFBUSxFQUFFOzZEQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7aUNBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtxQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO29DQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7NEJBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTt3Q0FHVjtBQTNJVSxhQUFhO0lBSnpCLEtBQUssQ0FBcUI7UUFDekIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsUUFBUTtLQUNULENBQUM7R0FDVyxhQUFhLENBdzZCekI7OzRGQXg2QlksYUFBYTtrQkFMekIsVUFBVTtza0JBbUpULHlCQUF5QixNQU96Qiw0QkFBNEIsTUFPNUIseUJBQXlCLE1BS3pCLHNCQUFzQixNQTBCdEIsNkJBQTZCLE1BZTdCLHFDQUFxQyxNQWlCckMsb0JBQW9CLE1BZ0JwQix3QkFBd0IsTUFXeEIsa0NBQWtDLE1BWWxDLG9DQUFvQyxNQVlwQyxtQkFBbUIsTUErRW5CLG9DQUFvQyxNQXNCcEMsdUJBQXVCLE1BK0J2QixvQkFBb0IsTUFLcEIsd0NBQXdDLE1BYXhDLDhCQUE4QixNQWE5QixzQkFBc0IsTUFZdEIsNEJBQTRCLE1BWTVCLHNDQUFzQyxNQWF0Qyx3QkFBd0IsTUFheEIsK0JBQStCLE1BYS9CLHVCQUF1QixNQWF2QixjQUFjLE1BYWQsbUJBQW1CLE1BT25CLHVCQUF1QixNQU92QixzQkFBc0IsTUFPdEIsa0JBQWtCLE1BT2xCLGVBQWUsTUFPZix1QkFBdUIsTUFhdkIsNkJBQTZCLE1BWTdCLGlDQUFpQyxNQWtCakMscUNBQXFDLE1BbUJyQyx5QkFBeUIsTUFXekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IG9mLCBzd2l0Y2hNYXAsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBTbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MsIFNtYXJ0Q291bnRlclZlaGljbGVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBScGMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5JztcbmltcG9ydCB7IEFwcE1vZHVsZSwgRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrQmFzaWNEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBDYXRlZ29yeUR0bywgQ2F0ZWdvcnlScGNTZXJ2aWNlUHJveHksIERldmljZVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvLFxuICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgRmFjaWxpdHlScGNTZXJ2aWNlUHJveHksIEdyb3VwRHRvLCBHcm91cFJwY1NlcnZpY2VQcm94eSwgSm9iVGl0bGVEdG8sXG4gIEpvYlRpdGxlUnBjU2VydmljZVByb3h5LCBNYWNyb0NvbW1hbmREdG8sIFBlcm1pc3Npb25UeXBlLCBSdWxlc01vZGUsIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8sXG4gIFpEdG8sIFpvbmVEdG8sIFpvbmVScGNTZXJ2aWNlUHJveHksIFpScGNTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjaWxpdHktY29tbWFuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzVHJ1dGh5LCBOdW1iZXJNYXAsIFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbi10eXBlLW1hcHBlci51dGlsJztcbmltcG9ydCB7IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24gfSBmcm9tICcuLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgTWVudUxvYWRBY3Rpb24gfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgU2V0U21hcnRQYXJrQWN0aW9uIH0gZnJvbSAnLi4vc21hcnRwYXJrcy9zbWFydHBhcmsuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9mYWNpbGl0eS1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksIENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5LCBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksIEZhY2lsaXR5RGljdGlvbmFyeSwgRmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlcbn0gZnJvbSAnLi9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQge1xuICBDbGVhckNhdGVnb3JpZXNBY3Rpb24sIENsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5QWN0aW9uLCBDbGVhckdyb3Vwc0FjdGlvbiwgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbiwgQ2xlYXJKb2JUaXRsZXNBY3Rpb24sXG4gIENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbiwgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uLCBDbGVhclpvbmVzQWN0aW9uLCBDbGVhclpzQWN0aW9uLCBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLFxuICBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLCBMb2FkQWNjb3VudE1hbmFnZW1lbnRHdWVzdEdyb3VwQWN0aW9uLCBMb2FkQWNjb3VudE1hbmFnZW1lbnRKb2JUaXRsZXNBY3Rpb24sXG4gIExvYWRDYXRlZ29yaWVzQWN0aW9uLCBMb2FkQ2NNYWluWm9uZXNBY3Rpb24sIExvYWRGYWNpbGl0eUFjdGlvbiwgTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLFxuICBMb2FkUGFya2luZ0xvdEFjdGlvbiwgTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCBMb2FkUmVwb3J0c0d1ZXN0R3JvdXBBY3Rpb24sIExvYWRSZXBvcnRzSm9iVGl0bGVzQWN0aW9uLCBMb2FkUmVwb3J0c1pvbmVzQWN0aW9uLCBMb2FkWnNBY3Rpb24sXG4gIFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24sIFNldEJhc2ljTWVudUFjdGlvbiwgU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24sIFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24sXG4gIFNldFNlbGVjdGVkUGFya0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24sIFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uLCBVbmxvYWRQYXJraW5nTG90QWN0aW9uLCBab25lQ2hhbmdlZEFjdGlvblxufSBmcm9tICcuL2ZhY2lsaXR5LmFjdGlvbnMnO1xuXG5pbXBvcnQgU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvID0gUnBjLlNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBncm91cHM6IEdyb3VwRHRvW107XG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5RHRvW107XG4gIGpvYlRpdGxlczogSm9iVGl0bGVEdG9bXTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICB0aWJhS2V5czoge30sXG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZ3JvdXBzOiBudWxsLFxuICBjYXRlZ29yaWVzOiBudWxsLFxuICBqb2JUaXRsZXM6IG51bGwsXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5UnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eTogUnBjLlJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBncm91cFJwY1NlcnZpY2VQcm94eTogR3JvdXBScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2VQcm94eTogQ2F0ZWdvcnlScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBqb2JUaXRsZVJwY1NlcnZpY2VQcm94eTogSm9iVGl0bGVScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lUnBjU2VydmljZVByb3h5OiBab25lUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelJwY1NlcnZpY2VQcm94eTogWlJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSAhPT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRab25lcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlID09PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZmFjaWxpdHlEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eURpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5kaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyB0aWJhS2V5cyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiBzdGF0ZS50aWJhS2V5cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHkuZ2V0RGV2aWNlUmVtb3RlQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgICAgcmV0dXJuIHJlbW90ZUNvbW1hbmRzUmVmJC5waXBlKHRhcChyZW1vdGVDb21tYW5kc1JlZiA9PiB7XG4gICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24ocmVtb3RlQ29tbWFuZHNSZWYuZGF0YSwgZ3VpZCwgcGFya0lkKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCB0aWJhS2V5SW5kZXggfTogTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF0gfHwgIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICAgIGlmIChyZW1vdGVDb21tYW5kc1JlZiQpIHtcbiAgICAgICAgcmV0dXJuIHJlbW90ZUNvbW1hbmRzUmVmJC5waXBlKHRhcChyZW1vdGVDb21tYW5kc1JlZiA9PiB7XG4gICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkRmFjaWxpdHlBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQsIGlzU3VwZXJQYXJrLCBhcHBNb2R1bGUgfTogTG9hZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgaWYgKGlzU3VwZXJQYXJrKSB7XG4gICAgICBjb25zdCBhbGxHdWlkRmFjaWxpdGllcyQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldEZhY2lsaXRpZXMoZ3VpZCwgcGFya0lkKTtcbiAgICAgIHJldHVybiBhbGxHdWlkRmFjaWxpdGllcyQucGlwZSh0YXAoZmFjaWxpdGllc01hcCA9PiB7XG4gICAgICAgIGNvbnN0IGZhY2lsaXR5ID0gZmFjaWxpdGllc01hcC5kYXRhW2d1aWRdLmZpbmQoZiA9PiBmLmlkID0gcGFya0lkKTtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LCBmYWNpbGl0aWVzTWFwLmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsRmFjaWxpdHkkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0eShndWlkLCBwYXJrSWQpO1xuICAgICAgcmV0dXJuIGZ1bGxGYWNpbGl0eSQucGlwZSh0YXAoZmFjaWxpdHkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZhY2lsaXRpZXMoY3R4LCBndWlkLCBwYXJrSWQsIGFwcE1vZHVsZSwgZmFjaWxpdHkuZGF0YSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihVbmxvYWRQYXJraW5nTG90QWN0aW9uKVxuICBvblVubG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBVbmxvYWRQYXJraW5nTG90QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbilcbiAgb25TZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSA9IHt9O1xuICAgIH1cbiAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdKSB7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oWm9uZUNoYW5nZWRBY3Rpb24pXG4gIG9uWm9uZUNoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyB6b25lLCBwYXJrSWQgfTogWm9uZUNoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuICAgIGNvbnN0IHpvbmVJbmRleCA9IHNlbGVjdGVkLnpvbmVzPy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB6b25lLmlkICYmIGl0ZW0ucGFya0lEID09PSBwYXJrSWQpO1xuICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5tb250aGxpZXNPY2N1cGFuY3kgKyB6b25lLnRyYW5zaWVudHNPY2N1cGFuY3k7XG4gICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuXG4gICAgc3dpdGNoICh6b25lLnJ1bGVzTW9kZSkge1xuICAgICAgY2FzZSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVI6XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgdGhpcy5oYW5kbGVTbWFydENvdW50ZXIoem9uZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfTE9PUF9ERVRFQ1RPUjpcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLmxvb3BDb3VudDtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLm1vbnRobGllc09jY3VwYW5jeSArIHpvbmUudHJhbnNpZW50c09jY3VwYW5jeTtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzZWxlY3RlZC56b25lc1t6b25lSW5kZXhdID0gem9uZTtcbiAgICBzZWxlY3RlZC56b25lcyA9IGNsb25lKHNlbGVjdGVkLnpvbmVzKTtcblxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3QgZ3VpZCA9IGN0eC5nZXRTdGF0ZSgpLmd1aWQ7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3NlbGVjdGVkLmlkXS56b25lcyA9IHNlbGVjdGVkLnpvbmVzO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTbWFydENvdW50ZXIoem9uZTogWm9uZUR0bykge1xuICAgIC8vXCJbe1wiVmVoaWNsZUNsYXNzSWRcIjoxLFwiQ291bnRlclwiOjMxLFwiWm9uZUlkXCI6MTB9LHtcIlZlaGljbGVDbGFzc0lkXCI6MixcIkNvdW50ZXJcIjoyNSxcIlpvbmVJZFwiOjEwfV1cIlxuICAgIC8vXCJbe1xcXCJWZWhpY2xlVHlwZUlkXFxcIjoxLFxcXCJDb3VudGVyXFxcIjoxMCxcXFwiWm9uZUlkXFxcIjoxMH0se1xcXCJWZWhpY2xlVHlwZUlkXFxcIjoyLFxcXCJDb3VudGVyXFxcIjoxMCxcXFwiWm9uZUlkXFxcIjoxMH1dXCJcbiAgICB0cnkge1xuICAgICAgaWYgKHpvbmU/LnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pIHtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzOiBTbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NbXSA9IEpTT04ucGFyc2Uoem9uZS5zbWFydENvdW50ZXJWZWhpY2xlQ2xhc3NKc29uKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZWQgSlNPTiBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgaXMgbm90IGFuIGFycmF5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzID0gc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzLm1hcChzYyA9PiB7XG4gICAgICAgICAgcmV0dXJuIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8uZnJvbUpTKHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHNjLkNvdW50ZXIsXG4gICAgICAgICAgICB6b25lSWQ6IHpvbmUuaWQsXG4gICAgICAgICAgICB2ZWhpY2xlQ2xhc3NJZDogc2MuVmVoaWNsZUNsYXNzSWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKSB7XG4gICAgICAgIGNvbnN0IHNtYXJ0Q291bnRlclZlaGljbGVUeXBlOiBTbWFydENvdW50ZXJWZWhpY2xlVHlwZVtdID0gSlNPTi5wYXJzZSh6b25lLnNtYXJ0Q291bnRlclZlaGljbGVUeXBlSnNvbik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShzbWFydENvdW50ZXJWZWhpY2xlVHlwZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZWQgSlNPTiBzbWFydENvdW50ZXJWZWhpY2xlVHlwZSAgaXMgbm90IGFuIGFycmF5XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZS5zbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGUgPSBzbWFydENvdW50ZXJWZWhpY2xlVHlwZS5tYXAoc2MgPT4ge1xuICAgICAgICAgIHJldHVybiBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8uZnJvbUpTKHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHNjLkNvdW50ZXIsXG4gICAgICAgICAgICB6b25lSWQ6IHpvbmUuaWQsXG4gICAgICAgICAgICB2ZWhpY2xlVHlwZUlkOiBzYy5WZWhpY2xlVHlwZUlkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBwYXJzZSBzbWFydENvdW50ZXJKc29uOlwiLCBlcnJvcik7XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBbXTtcbiAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gW107XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKVxuICBvblNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPixcbiAgICB7IHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCB9OiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3Moc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzKTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGlmIChmYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHksIHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgIH1cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eUNoYW5nZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHksIGd1aWQgfTogRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZWxlY3RlZEZhY2lsaXR5ID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA6IG51bGw7XG4gICAgaWYgKCFzZWxlY3RlZEZhY2lsaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkRmFjaWxpdHkgPSB0aGlzLmFzc2lnbkZhY2lsaXR5KHNlbGVjdGVkRmFjaWxpdHksIGZhY2lsaXR5KTtcbiAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gY29tcGxldGVkRmFjaWxpdHk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGRpY3Rpb25hcnk6IGNsb25lRGVlcChmYWNpbGl0eURpY3Rpb25hcnkpIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNQYXJrQWN0aXZlKGN0eCwgZ3VpZCwgZmFjaWxpdHkuaWQpKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBjb21wbGV0ZWRGYWNpbGl0eSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0QmFzaWNNZW51QWN0aW9uKVxuICBvblNldEJhc2ljTWVudUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHNtYXJ0cGFya01hcCwgYXBwTW9kdWxlIH06IFNldEJhc2ljTWVudUFjdGlvbikge1xuICAgIGN0eC5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24odGhpcy50b0Jhc2ljTWVudUl0ZW1zKGN0eCwgc21hcnRwYXJrTWFwLCBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5LCBhcHBNb2R1bGUpLCBhcHBNb2R1bGUpKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY291bnRNYW5hZ2VtZW50R3Vlc3RHcm91cEFjdGlvbilcbiAgb25Mb2FkQWNjb3VudE1hbmFnZW1lbnRHdWVzdEdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2NvdW50TWFuYWdlbWVudEd1ZXN0R3JvdXBBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRHcm91cHMkID0gdGhpcy5ncm91cFJwY1NlcnZpY2VQcm94eS5nZXRHdWVzdEdyb3VwKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRHcm91cHMkLnBpcGUodGFwKGdyb3VwcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGdyb3VwczogZ3JvdXBzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZXBvcnRzR3Vlc3RHcm91cEFjdGlvbilcbiAgb25Mb2FkUmVwb3J0c0d1ZXN0R3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFJlcG9ydHNHdWVzdEdyb3VwQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0R3JvdXBzJCA9IHRoaXMuZ3JvdXBScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c0d1ZXN0R3JvdXAoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldEdyb3VwcyQucGlwZSh0YXAoZ3JvdXBzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3JvdXBzOiBncm91cHMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENhdGVnb3JpZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQ2F0ZWdvcmllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRDYXRlZ29yaWVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Q2F0ZWdvcmllcyQgPSB0aGlzLmNhdGVnb3J5U2VydmljZVByb3h5LmdldENhdGVnb3JpZXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuICAgIHJldHVybiBnZXRDYXRlZ29yaWVzJC5waXBlKHRhcChjYXRlZ29yaWVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmllcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVwb3J0c0pvYlRpdGxlc0FjdGlvbilcbiAgb25Mb2FkUmVwb3J0c0pvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRSZXBvcnRzSm9iVGl0bGVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Sm9iVGl0bGVzJCA9IHRoaXMuam9iVGl0bGVScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c0pvYlRpdGxlcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgcmV0dXJuIGdldEpvYlRpdGxlcyQucGlwZSh0YXAoam9iVGl0bGVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgam9iVGl0bGVzOiBqb2JUaXRsZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY291bnRNYW5hZ2VtZW50Sm9iVGl0bGVzQWN0aW9uKVxuICBvbkxvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEpvYlRpdGxlcyQgPSB0aGlzLmpvYlRpdGxlUnBjU2VydmljZVByb3h5LmdldEpvYlRpdGxlcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Sm9iVGl0bGVzJC5waXBlKHRhcChqb2JUaXRsZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBqb2JUaXRsZXM6IGpvYlRpdGxlcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVwb3J0c1pvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFJlcG9ydHNab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRSZXBvcnRzWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c1pvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEFjY2Vzc1Byb2ZpbGVaWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldEFjY2Vzc1Byb2ZpbGVab25lc0J5U2VhcmNoUGFyYW1zKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENjTWFpblpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZENjTWFpblpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZENjTWFpblpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkWnNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkWnNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRacyQgPSB0aGlzLnpScGNTZXJ2aWNlUHJveHkuZ2V0WnMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpzJC5waXBlKHRhcCh6ID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgejogei5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckdyb3Vwc0FjdGlvbilcbiAgb25DbGVhckdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3JvdXBzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckNhdGVnb3JpZXNBY3Rpb24pXG4gIG9uQ2xlYXJDYXRlZ29yaWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjYXRlZ29yaWVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckpvYlRpdGxlc0FjdGlvbilcbiAgb25DbGVhckpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgam9iVGl0bGVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpvbmVzQWN0aW9uKVxuICBvbkNsZWFyWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpzQWN0aW9uKVxuICBvbkNsZWFyWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25TZXRTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBndWlkLCBmYWNpbGl0eSB9OiBTZXRTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHk/LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZCxcbiAgICAgIHBhcmtJZDogZmFjaWxpdHk/LmlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Py5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgIHpvbmVzOiBmYWNpbGl0eT8uem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgfTogQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgem9uZXM6IG51bGwsXG4gICAgICBhbGxvd2VkQWN0aW9uczoge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25DbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ7XG5cbiAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZmFjaWxpdHkgaXMgSW5hY3RpdmUgYW5kIG5vdCBhIFN1cGVycGFyaywgd2UgZGVzZWxlY3RcbiAgICAvLyBUaGlzIG1lYW4gd2Ugd29uJ3QgY2FycnkgYW4gSW5hY3RpdmUgcGFyayB0byB0aGUgbmV4dCBtb2R1bGUgYXMgc2VsZWN0ZWRcbiAgICBpZiAoIXNlbGVjdGVkPy5hY3RpdmUgJiYgIXNlbGVjdGVkPy5pc011bHRpUGFyaykge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKVxuICBvbkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgfTogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnlbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF1bZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQucGFya0lkXTtcblxuICAgIGNvbnN0IG9wZXJhdGlvblR5cGVLZXkgPSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTG9jYWxpemF0aW9uS2V5W0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGVdXTtcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XG4gICAgICBtZXNzYWdlczogW3sgdmFsdWU6IGZhY2lsaXR5Lm5hbWUsIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy5ib2R5IH1dLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQob3BlcmF0aW9uVHlwZUtleSlcbiAgICB9O1xuXG4gICAgaWYgKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGUgPT09IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0R5bmFtaWNQcmljaW5nU2V0QWN0aXZlUmF0ZShmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCkucGlwZShzd2l0Y2hNYXAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MgPyBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzKSA6IHRocm93RXJyb3IoJ0ZhaWxlZCBleGVjdXRpbmcgY29tbWFuZCcpO1xuICAgIH0pLCB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLmRpc3BsYXkoY29uZmlnKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQgfTogTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24pIHtcbiAgICBjb25zdCBtYWNyb0NvbW1hbmRzJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXRNYWNyb0NvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICByZXR1cm4gbWFjcm9Db21tYW5kcyQucGlwZSh0YXAobWFjcm9Db21tYW5kcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG1hY3JvQ29tbWFuZHM6IG1hY3JvQ29tbWFuZHMuZGF0YVxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24pXG4gIG9uQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBtYWNyb0NvbW1hbmRzOiBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdGllcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSxcbiAgICBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGZhY2lsaXRpZXNNYXA/OiBTdHJpbmdNYXA8RmFjaWxpdHlEdG9bXT4pIHtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgbm93TW9tZW50ID0gbW9tZW50KCk7XG5cbiAgICBpZiAoZmFjaWxpdGllc01hcCkge1xuICAgICAgZmFjaWxpdGllc01hcFtndWlkXS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBmLmNsb3VkSWQgPSBmLmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uY2xvdWRJZDtcbiAgICAgICAgZi5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgICBmLnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLnBlcm1pc3Npb25zO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLCBmKTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0eS5jbG91ZElkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5jbG91ZElkO1xuICAgICAgZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eS5wZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0ucGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgZmFjaWxpdHkpO1xuICAgIH1cblxuICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gdGhpcy5nZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eSwgbm93TW9tZW50KTtcbiAgICB0aGlzLnBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgdGhpcy5wYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgYXBwTW9kdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKSB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIGluY29taW5nRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBpbmNvbWluZ0ZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGRpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgfSk7XG5cbiAgICBpZiAoYXBwTW9kdWxlID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICAgIHpvbmVzOiBmYWNpbGl0eS56b25lcyxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Lm11bHRpUGFya1BhcmVudElELFxuICAgICAgICBhbGxvd2VkQWN0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eTogRmFjaWxpdHlEdG8sIG5vd01vbWVudDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vd01vbWVudC50eihmYWNpbGl0eS5zcFRpbWVab25lKS5kaWZmKHRoaXMuc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5KSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZXJ2ZXJEYXRlR2xvYmFsV29ybGRUaW1lWm9uZShmYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICAvLyBmaXggZm9yIHNlcnZlcnMgdGhhdCBub3Qgc3luYyB0byBnbG9iYWwgd29ybGQgY2xvY2tcbiAgICBsZXQgc2VydmVyRGF0ZVRpbWU6IHN0cmluZyA9IGZhY2lsaXR5LnNlcnZlckRhdGVUaW1lWydfaSddO1xuICAgIGlmICghc2VydmVyRGF0ZVRpbWUuZW5kc1dpdGgoJyswMDowMCcpKSB7XG4gICAgICBzZXJ2ZXJEYXRlVGltZSA9IHNlcnZlckRhdGVUaW1lLnNsaWNlKDAsIHNlcnZlckRhdGVUaW1lLmluZGV4T2YoJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQudHooc2VydmVyRGF0ZVRpbWUsIGZhY2lsaXR5LnNwVGltZVpvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU21hcnRQYXJrQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDbG91ZENvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgcmV0dXJuIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduRmFjaWxpdHkoc3RvcmVkRmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBpbmNvbWluZ0ZhY2lsaXR5OiBGYWNpbGl0eUR0byk6IEZhY2lsaXR5RHRvIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgbGV0IGN1cnJlbnRGYWNpbGl0eSA9IG5ldyBGYWNpbGl0eUR0byhzdG9yZWRGYWNpbGl0eSk7XG4gICAgY3VycmVudEZhY2lsaXR5Lm5hbWUgPSBpbmNvbWluZ0ZhY2lsaXR5Lm5hbWU7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTXVsdGlQYXJrID0gaW5jb21pbmdGYWNpbGl0eS5pc011bHRpUGFyaztcbiAgICBjdXJyZW50RmFjaWxpdHkudGltZURyaWZ0ID0gaW5jb21pbmdGYWNpbGl0eS50aW1lRHJpZnQ7XG4gICAgY3VycmVudEZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXIgPSBpbmNvbWluZ0ZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5hY3RpdmUgPSBpbmNvbWluZ0ZhY2lsaXR5LmFjdGl2ZTtcbiAgICBjdXJyZW50RmFjaWxpdHkudG90YWxTcGFjZSA9IGluY29taW5nRmFjaWxpdHkudG90YWxTcGFjZTtcbiAgICBjdXJyZW50RmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9ICFpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICByZXR1cm4gY3VycmVudEZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZERhdGVUaW1lVXRjKCkge1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIHJldHVybiBtb21lbnQudXRjKCkuc3VidHJhY3QoY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0sICdtaWxsaXNlY29uZHMnKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9CYXNpY01lbnVJdGVtcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IHRpYmFLZXlzID0gY3R4LmdldFN0YXRlKCkudGliYUtleXM7XG4gICAgY29uc3QgbWVudUl0ZW1zID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIGNvbnN0IHRpYmFLZXkgPSB0aWJhS2V5c1tndWlkXTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKC4uLnRoaXMuY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya01hcFtndWlkXSwgZ3VpZCwgdGliYUtleSwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhcmtBY3RpdmUgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZD8uaWQgPT09IHBhcmtJZCAmJiBjdHguZ2V0U3RhdGUoKS5ndWlkID09PSBndWlkO1xuXG4gIHByaXZhdGUgY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya0Jhc2ljOiBTbWFydHBhcmtCYXNpY0R0bywgZ3VpZDogc3RyaW5nLCB0aWJhS2V5OiBudW1iZXIsIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHNtYXJ0cGFya0Jhc2ljLmZhY2lsaXRpZXMuZm9yRWFjaChsb3QgPT4ge1xuICAgICAgaWYgKGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgLy8gZG8gbm90IHB1c2ggY2hpbGRyZW5zIHRvIG1lbnUgaXRlbXMgYXJyYXlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5jcmVhdGVNZW51KGd1aWQsIHRpYmFLZXksIHNtYXJ0cGFya0Jhc2ljLCBsb3QsIGZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlKTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICAvLyBXZSBkb250IHJ1biBtZW51IHVwZGF0ZSBpZiB3ZSBhcmUgbm90IGluIENDXG4gICAgY29uc3QgY3VycmVudE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgaWYgKGN1cnJlbnRNb2R1bGUgIT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUubWVudUl0ZW1zKTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuXG4gICAgZm9yIChjb25zdCBbZ3VpZCwgbG90c01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZmFjaWxpdHlEaWN0aW9uYXJ5KSkge1xuICAgICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMobG90c01hcCk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgbGV0IG1lbnVJdGVtOiBNZW51SXRlbTtcblxuICAgICAgICBpZiAoZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQgPiAwKSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXNcbiAgICAgICAgICAgIC5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkKT8uY2hpbGRyZW5cbiAgICAgICAgICAgIC5maW5kKHN1Ykl0ZW0gPT4gc3ViSXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lbnVJdGVtID0gbWVudUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQgJiYgaXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtKSB7XG4gICAgICAgICAgY29uc3QgYmFkZ2VDbGFzcyA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5nZXRCYWRnZVByaW9yaXR5KGd1aWQsIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5LCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICAgIG1lbnVJdGVtLmhhc0JhZGdlID0gYmFkZ2VDbGFzcyAhPT0gUGFya0Nvbm5lY3Rpb25TdGF0dXNDbGFzcy5Db25uZWN0ZWQ7XG4gICAgICAgICAgbWVudUl0ZW0uYmFkZ2VDbGFzcyA9IGJhZGdlQ2xhc3M7XG4gICAgICAgICAgbWVudUl0ZW0ubmFtZSA9IGZhY2lsaXR5Lm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24oWy4uLm1lbnVJdGVtc10sIEFwcE1vZHVsZS5DYykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U21hcnRwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz4gPSB7fTtcbiAgICBjb25zdCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcDogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gICAgICBwYXJrQ29ubmVjdGlvblN0YXR1c01hcFtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5mYWNpbGl0aWVzLnJlZHVjZSgoZmFjaWxpdGllcywgbG90KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgbG90LCBzbWFydHBhcmtNYXBbZ3VpZF0uc2VydmljZXNSdW5uaW5nU3RhdHVzLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICBmYWNpbGl0aWVzW2xvdC5pZF0gPSB7XG4gICAgICAgICAgc3RhdHVzOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgc3RhcnREYXRlOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGFydERhdGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPik6IHsgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7IH0ge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5ID0ge307XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID0ge307XG4gICAgICBmb3IgKGNvbnN0IGxvdCBvZiBzbWFydHBhcmtNYXBbZ3VpZF0uZmFjaWxpdGllcykge1xuICAgICAgICBjb25zdCBjbG90ID0gbmV3IEZhY2lsaXR5RHRvKCk7XG4gICAgICAgIGNsb3QuaWQgPSBsb3QuaWQ7XG4gICAgICAgIGNsb3QuY2xvdWRJZCA9IGxvdC5jbG91ZElkO1xuICAgICAgICBjbG90LmFjdGl2ZSA9IGxvdC5hY3RpdmU7XG4gICAgICAgIGNsb3QuZmVhdHVyZVBlcm1pc3Npb25zID0gbG90LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5wZXJtaXNzaW9ucyA9IGxvdC5wZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5uYW1lID0gbG90Lm5hbWU7XG4gICAgICAgIGNsb3Quc2l0ZUNvZGUgPSBsb3Quc2l0ZUNvZGU7XG4gICAgICAgIGNsb3QubXVsdGlQYXJrUGFyZW50SUQgPSBsb3QubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGNsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGxvdC5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGxvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGNsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0xQUkNvbm5lY3RlZCA9IGxvdC5pc0xQUkNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5pc0xQUkVuYWJsZWQgPSBsb3QuaXNMUFJFbmFibGVkO1xuICAgICAgICBjbG90LmlzVGlja2V0TGVzc0VuYWJsZWQgPSBsb3QuaXNUaWNrZXRMZXNzRW5hYmxlZDtcbiAgICAgICAgY2xvdC5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQmFzaWMgPSBsb3QuaXNCYXNpYztcbiAgICAgICAgY2xvdC5pc011bHRpUGFyayA9IGxvdC5pc011bHRpUGFyaztcbiAgICAgICAgY2xvdC50aW1lRHJpZnQgPSBsb3QudGltZURyaWZ0O1xuICAgICAgICBjbG90LnNwVGltZVpvbmUgPSBsb3Quc3BUaW1lWm9uZTtcbiAgICAgICAgY2xvdC5zZXJ2ZXJEYXRlVGltZSA9IGxvdC5zZXJ2ZXJEYXRlVGltZTtcbiAgICAgICAgY2xvdC50b3RhbFNwYWNlID0gbG90LnRvdGFsU3BhY2U7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtsb3QuaWRdID0gY2xvdDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpZmYgb2YgMCBmb3IgaW5pdGlhbCBzZXR1cFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTbWFydHBhcmtCYXNpYyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydFBhcmtzOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KSB7XG4gICAgLy8ga2VlcCBkZWZhdWx0IHZhbHVlcyB3aGVuIG5hdmlnYXRlIHRvIGNvbW1hbmQgY2VudGVyIGZvcndhcmQgYW5kIGJhY2suXG4gICAgY29uc3QgeyBndWlkLCBwYXJrSWQsIG11bHRpUGFya1BhcmVudElELCBzZWxlY3RlZCB9ID0gY3R4LmdldFN0YXRlKCk7XG4gICAgZGVmYXVsdHMuZ3VpZCA9IGd1aWQ7XG4gICAgZGVmYXVsdHMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICBkZWZhdWx0cy5wYXJrSWQgPSBwYXJrSWQ7XG4gICAgZGVmYXVsdHMubXVsdGlQYXJrUGFyZW50SUQgPSBtdWx0aVBhcmtQYXJlbnRJRDtcblxuICAgIGN0eC5zZXRTdGF0ZShkZWZhdWx0cyk7XG5cbiAgICBjb25zdCB0aWJhS2V5czogU3RyaW5nTWFwPG51bWJlcj4gPSBPYmplY3Qua2V5cyhzbWFydFBhcmtzKS5yZWR1Y2UoKGtleXMsIGd1aWQsIGluZGV4KSA9PiB7XG4gICAgICBrZXlzW2d1aWRdID0gaW5kZXg7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCB7IGRpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH0gPSB0aGlzLmNvbnZlcnRUb0ZhY2lsaXR5RGljdGlvbmFyeShzbWFydFBhcmtzKTtcblxuICAgIGNvbnN0IHN0YXRlVXBkYXRlczogUGFydGlhbDxGYWNpbGl0eVN0YXRlTW9kZWw+ID0ge1xuICAgICAgdGliYUtleXMsXG4gICAgICBkaWN0aW9uYXJ5LFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfTtcblxuICAgIGlmICghZGljdGlvbmFyeVtndWlkXSB8fCAhZGljdGlvbmFyeVtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlVXBkYXRlcywge1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoc3RhdGVVcGRhdGVzKTtcblxuICAgIC8vdXNlcyBmYWNpbGl0eSBkaWN0aW9uYXJ5IGZyb20gc3RvcmUsIHRoZXJlZm9yZSBwbGFjZWQgYWZ0ZXJcbiAgICBjb25zdCB7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0gPSB0aGlzLmdldFNtYXJ0cGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc21hcnRQYXJrcywgZGljdGlvbmFyeSk7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXA6IE51bWJlck1hcDxEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bz4gPSBKU09OLnBhcnNlKFxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTilcbiAgICApID8/IHt9O1xuXG4gICAgY29uc3QgZHBjOiBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zb3VyY2VJZGVudGlmaWVyXTtcbiAgICBpZiAoZHBjKSB7XG4gICAgICBjb25zdCBmYWNpbGl0eTogRmFjaWxpdHlEdG8gPSBudWxsO1xuICAgICAgY29uZmlnLmR1cmF0aW9uID0gNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTO1xuICAgICAgY29uZmlnLm1lc3NhZ2VzID0gdGhpcy5mYWNpbGl0eUNvbW1hbmRzU2VydmljZS5nZXRDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnTWVzc2FnZXMoXG4gICAgICAgIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsXG4gICAgICAgIGZhY2lsaXR5LFxuICAgICAgICBkcGNcbiAgICAgICk7XG5cbiAgICAgIC8vIENsb3NlIGR5bmFtaWMgcHJpY2luZyBub3RpZmljYXRpb25cbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvID0gbmV3IE5vdGlmaWNhdGlvbkR0bygpO1xuICAgICAgbm90aWZpY2F0aW9uLnR5cGUgPSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uID0gZHBjO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb24sIGRwYy5ndWlkKSk7XG5cbiAgICAgIGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5ndWlkXSA9IG51bGw7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShcbiAgICAgICAgRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
959
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR2xGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUE4QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVySSxPQUFPLEVBQzRELFdBQVcsRUFDNUUsMEJBQTBCLEVBQ2dDLFNBQVMsRUFBRSwrQkFBK0IsRUFFckcsTUFBTSx5Q0FBeUMsQ0FB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QUFpQyxNQWtCakMscUNBQXFDLE1BbUJyQyx5QkFBeUIsTUFXekIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IG9mLCBzd2l0Y2hNYXAsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tbWFuZE5vdGlmaWNhdGlvbkNvbmZpZywgQ29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9jb21tYW5kLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25DbGFzcyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1jb25maWcnO1xuaW1wb3J0IHsgT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBEWU5BTUlDX1BSSUNJTkdfQ09ORElUSU9OIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNMb2NhbGl6YXRpb25LZXkgfSBmcm9tICcuLi8uLi9lbnVtcy9mYWNpbGl0eS1yZW1vdGUtY29tbWFuZHMuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1c0NsYXNzIH0gZnJvbSAnLi4vLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBTbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MsIFNtYXJ0Q291bnRlclZlaGljbGVUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudS1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBScGMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5JztcbmltcG9ydCB7IEFwcE1vZHVsZSwgRHluYW1pY1ByaWNpbmdDb25kaXRpb25EdG8sIE5vdGlmaWNhdGlvbkR0bywgTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrQmFzaWNEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQge1xuICBDYXRlZ29yeUR0bywgQ2F0ZWdvcnlScGNTZXJ2aWNlUHJveHksIERldmljZVJlbW90ZUNvbW1hbmRSZWZEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kUmVmRHRvLFxuICBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcywgRmFjaWxpdHlScGNTZXJ2aWNlUHJveHksIEdyb3VwRHRvLCBHcm91cFJwY1NlcnZpY2VQcm94eSwgSm9iVGl0bGVEdG8sXG4gIEpvYlRpdGxlUnBjU2VydmljZVByb3h5LCBNYWNyb0NvbW1hbmREdG8sIFBlcm1pc3Npb25UeXBlLCBSdWxlc01vZGUsIFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8sXG4gIFpEdG8sIFpvbmVEdG8sIFpvbmVScGNTZXJ2aWNlUHJveHksIFpScGNTZXJ2aWNlUHJveHlcbn0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUZhY2lsaXR5Q29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjaWxpdHktY29tbWFuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGlzVHJ1dGh5LCBOdW1iZXJNYXAsIFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBjb252ZXJ0RmVhdHVyZVBlcm1pc3Npb25zVG9EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvcGVybWlzc2lvbi10eXBlLW1hcHBlci51dGlsJztcbmltcG9ydCB7IEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24gfSBmcm9tICcuLi9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zLmFjdGlvbnMnO1xuaW1wb3J0IHsgTWVudUxvYWRBY3Rpb24gfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9zaWRlbmF2L3NpZGVuYXYuc3RhdGUnO1xuaW1wb3J0IHsgU2V0U21hcnRQYXJrQWN0aW9uIH0gZnJvbSAnLi4vc21hcnRwYXJrcy9zbWFydHBhcmsuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eU1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9mYWNpbGl0eS1tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksIENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5LCBEZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksIEZhY2lsaXR5RGljdGlvbmFyeSwgRmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlcbn0gZnJvbSAnLi9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQge1xuICBDbGVhckNhdGVnb3JpZXNBY3Rpb24sIENsZWFyRmFjaWxpdHlEaWN0aW9uYXJ5QWN0aW9uLCBDbGVhckdyb3Vwc0FjdGlvbiwgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbiwgQ2xlYXJKb2JUaXRsZXNBY3Rpb24sXG4gIENsZWFyTWFjcm9Db21tYW5kc0FjdGlvbiwgQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uLCBDbGVhclpvbmVzQWN0aW9uLCBDbGVhclpzQWN0aW9uLCBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLFxuICBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLCBMb2FkQWNjb3VudE1hbmFnZW1lbnRHdWVzdEdyb3VwQWN0aW9uLCBMb2FkQWNjb3VudE1hbmFnZW1lbnRKb2JUaXRsZXNBY3Rpb24sXG4gIExvYWRDYXRlZ29yaWVzQWN0aW9uLCBMb2FkQ2NNYWluWm9uZXNBY3Rpb24sIExvYWRGYWNpbGl0eUFjdGlvbiwgTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLFxuICBMb2FkUGFya2luZ0xvdEFjdGlvbiwgTG9hZFJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uLCBMb2FkUmVwb3J0c0d1ZXN0R3JvdXBBY3Rpb24sIExvYWRSZXBvcnRzSm9iVGl0bGVzQWN0aW9uLCBMb2FkUmVwb3J0c1pvbmVzQWN0aW9uLCBMb2FkWnNBY3Rpb24sXG4gIFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24sIFNldEJhc2ljTWVudUFjdGlvbiwgU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24sIFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24sXG4gIFNldFNlbGVjdGVkUGFya0FjdGlvbiwgU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24sIFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uLCBVbmxvYWRQYXJraW5nTG90QWN0aW9uLCBab25lQ2hhbmdlZEFjdGlvblxufSBmcm9tICcuL2ZhY2lsaXR5LmFjdGlvbnMnO1xuXG5pbXBvcnQgU21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvID0gUnBjLlNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0bztcbmltcG9ydCB7IG9iamVjdEtleXN0b0xvd2VyQ2FzZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBGYWNpbGl0eVN0YXRlTW9kZWwge1xuICBndWlkOiBzdHJpbmc7XG4gIHBhcmtJZDogbnVtYmVyO1xuICBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIG11bHRpUGFya1BhcmVudElEOiBudW1iZXI7XG4gIHNlbGVjdGVkOiBGYWNpbGl0eUR0bztcbiAgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5O1xuICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5OiBTdHJpbmdNYXA8U2VydmljZXNSdW5uaW5nU3RhdHVzRHRvPjtcbiAgdGliYUtleXM6IFN0cmluZ01hcDxudW1iZXI+O1xuICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IERldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnk6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICBncm91cHM6IEdyb3VwRHRvW107XG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5RHRvW107XG4gIGpvYlRpdGxlczogSm9iVGl0bGVEdG9bXTtcbiAgem9uZXM6IFpvbmVEdG9bXTtcbiAgejogWkR0b1tdO1xuICBhbGxvd2VkQWN0aW9uczogTnVtYmVyTWFwPGJvb2xlYW4+O1xuICBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7XG4gIG1hY3JvQ29tbWFuZHM6IE1hY3JvQ29tbWFuZER0b1tdO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgZ3VpZDogJycsXG4gIHBhcmtJZDogbnVsbCxcbiAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICBtdWx0aVBhcmtQYXJlbnRJRDogdW5kZWZpbmVkLFxuICBzZWxlY3RlZDogbnVsbCxcbiAgZGljdGlvbmFyeToge30sXG4gIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk6IHt9LFxuICB0aWJhS2V5czoge30sXG4gIGRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeToge30sXG4gIGZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5OiB7fSxcbiAgZ3JvdXBzOiBudWxsLFxuICBjYXRlZ29yaWVzOiBudWxsLFxuICBqb2JUaXRsZXM6IG51bGwsXG4gIHpvbmVzOiBudWxsLFxuICB6OiBudWxsLFxuICBhbGxvd2VkQWN0aW9uczoge30sXG4gIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiB7fSxcbiAgbWFjcm9Db21tYW5kczogW11cbn07XG5cbkBJbmplY3RhYmxlKClcbkBTdGF0ZTxGYWNpbGl0eVN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ2ZhY2lsaXR5JyxcbiAgZGVmYXVsdHMsXG59KVxuZXhwb3J0IGNsYXNzIEZhY2lsaXR5U3RhdGUge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlDb21tYW5kc1NlcnZpY2U6IEJhc2VGYWNpbGl0eUNvbW1hbmRzU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYWNpbGl0eU1lbnVTZXJ2aWNlOiBGYWNpbGl0eU1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmFjaWxpdHlTZXJ2aWNlUHJveHk6IEZhY2lsaXR5UnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgcmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eTogUnBjLlJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBncm91cFJwY1NlcnZpY2VQcm94eTogR3JvdXBScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVNlcnZpY2VQcm94eTogQ2F0ZWdvcnlScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBqb2JUaXRsZVJwY1NlcnZpY2VQcm94eTogSm9iVGl0bGVScGNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB6b25lUnBjU2VydmljZVByb3h5OiBab25lUnBjU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgelJwY1NlcnZpY2VQcm94eTogWlJwY1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIGdsb2JhbEVycm9yU2VydmljZTogR2xvYmFsRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWFuZE5vdGlmaWNhdGlvblNlcnZpY2U6IENvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZVxuICApIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc2VsZWN0ZWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEZhY2lsaXR5RHRvIHtcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGlzQ2hpbGQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCA+IDA7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGZlYXR1cmVQZXJtaXNzaW9ucyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogUGVybWlzc2lvblR5cGVbXSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5mZWF0dXJlUGVybWlzc2lvbnM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFsbG93ZWRBY3Rpb25zKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBOdW1iZXJNYXA8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBzdGF0ZS5hbGxvd2VkQWN0aW9ucztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVBhcmsoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkPy5pc011bHRpUGFyaztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgem9uZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpvbmVEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLnpvbmVzPy5maWx0ZXIoeiA9PiB6LnJ1bGVzTW9kZSAhPT0gUnVsZXNNb2RlLkNBTENVTEFURV9CWV9TTUFSVF9DT1VOVEVSKTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgc21hcnRab25lcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogWm9uZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuem9uZXM/LmZpbHRlcih6ID0+IHoucnVsZXNNb2RlID09PSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVIpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aW1lWm9uZShzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnNwVGltZVpvbmU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRpbWVEcmlmdChzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkLnRpbWVEcmlmdDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IHtcbiAgICByZXR1cm4gc3RhdGUuY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGd1aWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5ndWlkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBwYXJrSWQoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCkge1xuICAgIHJldHVybiBzdGF0ZS5wYXJrSWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG11bHRpUGFya1BhcmVudElEKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUubXVsdGlQYXJrUGFyZW50SUQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgZmFjaWxpdHlEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eURpY3Rpb25hcnkge1xuICAgIHJldHVybiBzdGF0ZS5kaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5KHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSB7XG4gICAgcmV0dXJuIHN0YXRlLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgc3RhdGljIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFN0cmluZ01hcDxTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyB0aWJhS2V5cyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogU3RyaW5nTWFwPG51bWJlcj4ge1xuICAgIHJldHVybiBzdGF0ZS50aWJhS2V5cztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtEZXZpY2VSZW1vdGVDb21tYW5kcyhzdGF0ZTogRmFjaWxpdHlTdGF0ZU1vZGVsKTogRGV2aWNlUmVtb3RlQ29tbWFuZFJlZkR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdW3N0YXRlLnBhcmtJZF0gOiBbXTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzZWxlY3RlZFBhcmtGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKHN0YXRlOiBGYWNpbGl0eVN0YXRlTW9kZWwpOiBGYWNpbGl0eVJlbW90ZUNvbW1hbmRSZWZEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W3N0YXRlLmd1aWRdID8gc3RhdGUuZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbc3RhdGUuZ3VpZF1bc3RhdGUucGFya0lkXSA6IFtdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBncm91cHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEdyb3VwRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5ncm91cHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhdGVnb3JpZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IENhdGVnb3J5RHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5jYXRlZ29yaWVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBqb2JUaXRsZXMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IEpvYlRpdGxlRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5qb2JUaXRsZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHooc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IFpEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLno7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hY3JvQ29tbWFuZHMoc3RhdGU6IEZhY2lsaXR5U3RhdGVNb2RlbCk6IE1hY3JvQ29tbWFuZER0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUubWFjcm9Db21tYW5kcztcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pXG4gIG9uQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnkoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgXzogQ2xlYXJGYWNpbGl0eURpY3Rpb25hcnlBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaWN0aW9uYXJ5OiB7fVxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbilcbiAgb25TZXRTbWFydHBhcmtCYXNpY0FsbEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFNtYXJ0cGFya0Jhc2ljQWxsQWN0aW9uKSB7XG4gICAgY29uc3Qgc21hcnRQYXJrc0FycmF5OiBTbWFydHBhcmtCYXNpY0R0b1tdID0gT2JqZWN0LnZhbHVlcyhhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRTbWFydFBhcmtBY3Rpb24oc21hcnRQYXJrc0FycmF5LCBmYWxzZSkpO1xuICAgIHJldHVybiB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKVxuICBvblNldFNtYXJ0cGFya0Jhc2ljQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0U21hcnRwYXJrQmFzaWNBY3Rpb24pIHtcbiAgICB0aGlzLnBvcHVsYXRlU21hcnRwYXJrQmFzaWMoY3R4LCBhY3Rpb24uc21hcnRwYXJrV3JhcHBlcj8uZGF0YT8uc21hcnRQYXJrcyk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRQYXJraW5nTG90QWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUGFya2luZ0xvdEFjdGlvbikge1xuICAgIGNvbnN0IGd1aWQgPSBPYmplY3Qua2V5cyhjdHguZ2V0U3RhdGUoKS50aWJhS2V5cylbdGliYUtleUluZGV4XTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0gOiBudWxsO1xuXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShzZWxlY3RlZC5mZWF0dXJlUGVybWlzc2lvbnMpO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgcGFya0lkLFxuICAgICAgZ3VpZCxcbiAgICAgIG11bHRpUGFya1BhcmVudElEOiBzZWxlY3RlZC5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgem9uZXM6IHNlbGVjdGVkLnpvbmVzLFxuICAgICAgYWxsb3dlZEFjdGlvbnNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIHJldHVybiBjdHguZGlzcGF0Y2gobmV3IExvYWRGYWNpbGl0eUFjdGlvbihwYXJrSWQsIGd1aWQsIGlzVHJ1dGh5KHNlbGVjdGVkLmlzTXVsdGlQYXJrKSwgQXBwTW9kdWxlLkNjKSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIHRpYmFLZXlJbmRleCB9OiBMb2FkUmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmRldmljZVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeTtcbiAgICBpZiAoIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdIHx8ICFyZW1vdGVDb21tYW5kc1JlZkFsbFtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZiQgPSB0aGlzLnJlbW90ZUNvbW1hbmRScGNTZXJ2aWNlUHJveHkuZ2V0RGV2aWNlUmVtb3RlQ29tbWFuZHMoZ3VpZCwgcGFya0lkKTtcblxuICAgICAgcmV0dXJuIHJlbW90ZUNvbW1hbmRzUmVmJC5waXBlKHRhcChyZW1vdGVDb21tYW5kc1JlZiA9PiB7XG4gICAgICAgIGN0eC5kaXNwYXRjaChuZXcgU2V0RGV2aWNlUmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24ocmVtb3RlQ29tbWFuZHNSZWYuZGF0YSwgZ3VpZCwgcGFya0lkKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkRmFjaWxpdHlSZW1vdGVDb21tYW5kc1JlZkFjdGlvbiwgeyBjYW5jZWxVbmNvbXBsZXRlZDogdHJ1ZSB9KVxuICBvbkxvYWRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzUmVmQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgcGFya0lkLCB0aWJhS2V5SW5kZXggfTogTG9hZEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNSZWZBY3Rpb24pIHtcbiAgICBjb25zdCBndWlkID0gT2JqZWN0LmtleXMoY3R4LmdldFN0YXRlKCkudGliYUtleXMpW3RpYmFLZXlJbmRleF07XG5cbiAgICAvLyBXZSBmZXRjaCBmcm9tIHRoZSBzZXJ2ZXIgb25seSBpZiB3ZSBkaWRuJ3kgZmV0Y2ggYmVmb3JlIGZvciB0aGF0IGd1aWRcbiAgICBjb25zdCByZW1vdGVDb21tYW5kc1JlZkFsbCA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghcmVtb3RlQ29tbWFuZHNSZWZBbGxbZ3VpZF0gfHwgIXJlbW90ZUNvbW1hbmRzUmVmQWxsW2d1aWRdW3BhcmtJZF0pIHtcbiAgICAgIGNvbnN0IHJlbW90ZUNvbW1hbmRzUmVmJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICAgIGlmIChyZW1vdGVDb21tYW5kc1JlZiQpIHtcbiAgICAgICAgcmV0dXJuIHJlbW90ZUNvbW1hbmRzUmVmJC5waXBlKHRhcChyZW1vdGVDb21tYW5kc1JlZiA9PiB7XG4gICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKHJlbW90ZUNvbW1hbmRzUmVmLmRhdGEsIGd1aWQsIHBhcmtJZCkpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkRmFjaWxpdHlBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkRmFjaWxpdHlBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQsIGlzU3VwZXJQYXJrLCBhcHBNb2R1bGUgfTogTG9hZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgaWYgKGlzU3VwZXJQYXJrKSB7XG4gICAgICBjb25zdCBhbGxHdWlkRmFjaWxpdGllcyQgPSB0aGlzLmZhY2lsaXR5U2VydmljZVByb3h5LmdldEZhY2lsaXRpZXMoZ3VpZCwgcGFya0lkKTtcbiAgICAgIHJldHVybiBhbGxHdWlkRmFjaWxpdGllcyQucGlwZSh0YXAoZmFjaWxpdGllc01hcCA9PiB7XG4gICAgICAgIGNvbnN0IGZhY2lsaXR5ID0gZmFjaWxpdGllc01hcC5kYXRhW2d1aWRdLmZpbmQoZiA9PiBmLmlkID0gcGFya0lkKTtcbiAgICAgICAgdGhpcy51cGRhdGVGYWNpbGl0aWVzKGN0eCwgZ3VpZCwgcGFya0lkLCBhcHBNb2R1bGUsIGZhY2lsaXR5LCBmYWNpbGl0aWVzTWFwLmRhdGEpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsRmFjaWxpdHkkID0gdGhpcy5mYWNpbGl0eVNlcnZpY2VQcm94eS5nZXRGYWNpbGl0eShndWlkLCBwYXJrSWQpO1xuICAgICAgcmV0dXJuIGZ1bGxGYWNpbGl0eSQucGlwZSh0YXAoZmFjaWxpdHkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZhY2lsaXRpZXMoY3R4LCBndWlkLCBwYXJrSWQsIGFwcE1vZHVsZSwgZmFjaWxpdHkuZGF0YSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihVbmxvYWRQYXJraW5nTG90QWN0aW9uKVxuICBvblVubG9hZFBhcmtpbmdMb3RBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBVbmxvYWRQYXJraW5nTG90QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBzZWxlY3RlZDogbnVsbCxcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgYWxsb3dlZEFjdGlvbnM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihTZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbilcbiAgb25TZXREZXZpY2VSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldERldmljZVJlbW90ZUNvbW1hbmRzTWFwQWN0aW9uKSB7XG4gICAgY29uc3QgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSkge1xuICAgICAgZGV2aWNlUmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5W2FjdGlvbi5ndWlkXSA9IHt9O1xuICAgIH1cbiAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkZXZpY2VSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnksXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pXG4gIG9uU2V0RmFjaWxpdHlSZW1vdGVDb21tYW5kc01hcEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IFNldEZhY2lsaXR5UmVtb3RlQ29tbWFuZHNNYXBBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmZhY2lsaXR5UmVtb3RlQ29tbWFuZHNEaWN0aW9uYXJ5O1xuICAgIGlmICghZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdKSB7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeVthY3Rpb24uZ3VpZF0gPSB7fTtcbiAgICB9XG4gICAgZmFjaWxpdHlSZW1vdGVDb21tYW5kc0RpY3Rpb25hcnlbYWN0aW9uLmd1aWRdW2FjdGlvbi5wYXJrSWRdID0gYWN0aW9uLnJlbW90ZUNvbW1hbmRzW2FjdGlvbi5ndWlkXTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBmYWNpbGl0eVJlbW90ZUNvbW1hbmRzRGljdGlvbmFyeSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oWm9uZUNoYW5nZWRBY3Rpb24pXG4gIG9uWm9uZUNoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyB6b25lLCBwYXJrSWQgfTogWm9uZUNoYW5nZWRBY3Rpb24pIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGN0eC5nZXRTdGF0ZSgpLnNlbGVjdGVkO1xuICAgIGNvbnN0IHpvbmVJbmRleCA9IHNlbGVjdGVkLnpvbmVzPy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB6b25lLmlkICYmIGl0ZW0ucGFya0lEID09PSBwYXJrSWQpO1xuICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5tb250aGxpZXNPY2N1cGFuY3kgKyB6b25lLnRyYW5zaWVudHNPY2N1cGFuY3k7XG4gICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuXG4gICAgc3dpdGNoICh6b25lLnJ1bGVzTW9kZSkge1xuICAgICAgY2FzZSBSdWxlc01vZGUuQ0FMQ1VMQVRFX0JZX1NNQVJUX0NPVU5URVI6XG4gICAgICAgIHpvbmUub2NjdXBhbmN5ID0gem9uZS5sb29wQ291bnQ7XG4gICAgICAgIHpvbmUudmFjYW5jeSA9IHpvbmUuY2FwYWNpdHkgLSB6b25lLm9jY3VwYW5jeTtcbiAgICAgICAgdGhpcy5oYW5kbGVTbWFydENvdW50ZXIoem9uZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ1bGVzTW9kZS5DQUxDVUxBVEVfQllfTE9PUF9ERVRFQ1RPUjpcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLmxvb3BDb3VudDtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgem9uZS5vY2N1cGFuY3kgPSB6b25lLm1vbnRobGllc09jY3VwYW5jeSArIHpvbmUudHJhbnNpZW50c09jY3VwYW5jeTtcbiAgICAgICAgem9uZS52YWNhbmN5ID0gem9uZS5jYXBhY2l0eSAtIHpvbmUub2NjdXBhbmN5O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzZWxlY3RlZC56b25lc1t6b25lSW5kZXhdID0gem9uZTtcbiAgICBzZWxlY3RlZC56b25lcyA9IGNsb25lKHNlbGVjdGVkLnpvbmVzKTtcblxuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3QgZ3VpZCA9IGN0eC5nZXRTdGF0ZSgpLmd1aWQ7XG4gICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3NlbGVjdGVkLmlkXS56b25lcyA9IHNlbGVjdGVkLnpvbmVzO1xuXG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGljdGlvbmFyeTogZmFjaWxpdHlEaWN0aW9uYXJ5LFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICB6b25lczogc2VsZWN0ZWQuem9uZXMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTbWFydENvdW50ZXIoem9uZTogWm9uZUR0bykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEpzb24gPSBKU09OLnBhcnNlKHpvbmUuc21hcnRDb3VudGVyVmVoaWNsZVR5cGVKc29uKTtcbiAgICAgICAgY29uc3Qgc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgPSBvYmplY3RLZXlzdG9Mb3dlckNhc2UocGFyc2VkSnNvbik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VkIEpTT04gc21hcnRDb3VudGVyVmVoaWNsZVR5cGUgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZSA9IHNtYXJ0Q291bnRlclZlaGljbGVUeXBlLm1hcCgoc2M6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlVHlwZUR0byA9IG5ldyBTbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8oKTtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG8uY291bnRlciA9IHNjLmNvdW50ZXI7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLnpvbmVJZCA9IHpvbmUuaWQ7XG4gICAgICAgICAgc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlRHRvLnZlaGljbGVUeXBlSWQgPSBzYy52ZWhpY2xldHlwZWlkO1xuICAgICAgICAgIHJldHVybiBzbWFydFpvbmVDb3VudGVyVmVoaWNsZVR5cGVEdG87XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoem9uZT8uc21hcnRDb3VudGVyVmVoaWNsZUNsYXNzSnNvbikge1xuICAgICAgICBjb25zdCBwYXJzZWRKc29uID0gSlNPTi5wYXJzZSh6b25lLnNtYXJ0Q291bnRlclZlaGljbGVDbGFzc0pzb24pO1xuICAgICAgICBjb25zdCBzbWFydENvdW50ZXJWZWhpY2xlQ2xhc3MgPSBvYmplY3RLZXlzdG9Mb3dlckNhc2UocGFyc2VkSnNvbik7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlZCBKU09OIHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcyBpcyBub3QgYW4gYXJyYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVDbGFzcyA9IHNtYXJ0Q291bnRlclZlaGljbGVDbGFzcy5tYXAoKHNjOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvID0gbmV3IFNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8oKTtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLmNvdW50ZXIgPSBzYy5jb3VudGVyO1xuICAgICAgICAgIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG8uem9uZUlkID0gem9uZS5pZDtcbiAgICAgICAgICBzbWFydFpvbmVDb3VudGVyVmVoaWNsZUNsYXNzRHRvLnZlaGljbGVDbGFzc0lkID0gc2MudmVoaWNsZWNsYXNzaWQ7XG4gICAgICAgICAgcmV0dXJuIHNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3NEdG87XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcGFyc2Ugc21hcnRDb3VudGVySnNvbjonLCBlcnJvcik7XG4gICAgICB6b25lLnNtYXJ0Wm9uZUNvdW50ZXJWZWhpY2xlQ2xhc3MgPSBbXTtcbiAgICAgIHpvbmUuc21hcnRab25lQ291bnRlclZlaGljbGVUeXBlID0gW107XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKVxuICBvblNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPixcbiAgICB7IHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCB9OiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLnNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnk7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnVwZGF0ZVNlcnZpY2VSdW5uaW5nU3RhdHVzRmxhZ3Moc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzKTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5W2d1aWRdID0gc2VydmljZXNSdW5uaW5nU3RhdHVzO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGlmIChmYWNpbGl0eURpY3Rpb25hcnkpIHtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5RHRvW10gPSBPYmplY3QudmFsdWVzKGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXSk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHksIHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICAgIH1cbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVNZW51SXRlbXNQYXJrQ29ubmVjdGlvblN0YXR1cyhjdHgpO1xuICB9XG5cbiAgQEFjdGlvbihGYWNpbGl0eUNoYW5nZWRBY3Rpb24pXG4gIG9uRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHksIGd1aWQgfTogRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKSB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuZGljdGlvbmFyeTtcbiAgICBjb25zdCBzZWxlY3RlZEZhY2lsaXR5ID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID8gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSA6IG51bGw7XG4gICAgaWYgKCFzZWxlY3RlZEZhY2lsaXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGVkRmFjaWxpdHkgPSB0aGlzLmFzc2lnbkZhY2lsaXR5KHNlbGVjdGVkRmFjaWxpdHksIGZhY2lsaXR5KTtcbiAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gY29tcGxldGVkRmFjaWxpdHk7XG5cbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGRpY3Rpb25hcnk6IGNsb25lRGVlcChmYWNpbGl0eURpY3Rpb25hcnkpIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNQYXJrQWN0aXZlKGN0eCwgZ3VpZCwgZmFjaWxpdHkuaWQpKSB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHNlbGVjdGVkOiBjb21wbGV0ZWRGYWNpbGl0eSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVwZGF0aW5nIFBhcmtDb25uZWN0aW9uU3RhdHVzIGZvciBwYXJrc1xuICAgIGNvbnN0IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gY2xvbmVEZWVwKGN0eC5nZXRTdGF0ZSgpLmNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5ID0gY3R4LmdldFN0YXRlKCkuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0pO1xuICAgIGZvciAoY29uc3QgZmFjaWxpdHkgb2YgZmFjaWxpdGllcykge1xuICAgICAgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnlbZ3VpZF1bZmFjaWxpdHkuaWRdID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXSwgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSwgZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9KTtcblxuICAgIHRoaXMudXBkYXRlTWVudUl0ZW1zUGFya0Nvbm5lY3Rpb25TdGF0dXMoY3R4KTtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0QmFzaWNNZW51QWN0aW9uKVxuICBvblNldEJhc2ljTWVudUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCB7IHNtYXJ0cGFya01hcCwgYXBwTW9kdWxlIH06IFNldEJhc2ljTWVudUFjdGlvbikge1xuICAgIGN0eC5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24odGhpcy50b0Jhc2ljTWVudUl0ZW1zKGN0eCwgc21hcnRwYXJrTWFwLCBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5LCBhcHBNb2R1bGUpLCBhcHBNb2R1bGUpKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY291bnRNYW5hZ2VtZW50R3Vlc3RHcm91cEFjdGlvbilcbiAgb25Mb2FkQWNjb3VudE1hbmFnZW1lbnRHdWVzdEdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2NvdW50TWFuYWdlbWVudEd1ZXN0R3JvdXBBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRHcm91cHMkID0gdGhpcy5ncm91cFJwY1NlcnZpY2VQcm94eS5nZXRHdWVzdEdyb3VwKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRHcm91cHMkLnBpcGUodGFwKGdyb3VwcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGdyb3VwczogZ3JvdXBzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRSZXBvcnRzR3Vlc3RHcm91cEFjdGlvbilcbiAgb25Mb2FkUmVwb3J0c0d1ZXN0R3JvdXBzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZFJlcG9ydHNHdWVzdEdyb3VwQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0R3JvdXBzJCA9IHRoaXMuZ3JvdXBScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c0d1ZXN0R3JvdXAoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldEdyb3VwcyQucGlwZSh0YXAoZ3JvdXBzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgZ3JvdXBzOiBncm91cHMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENhdGVnb3JpZXNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkQ2F0ZWdvcmllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRDYXRlZ29yaWVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Q2F0ZWdvcmllcyQgPSB0aGlzLmNhdGVnb3J5U2VydmljZVByb3h5LmdldENhdGVnb3JpZXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuICAgIHJldHVybiBnZXRDYXRlZ29yaWVzJC5waXBlKHRhcChjYXRlZ29yaWVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmllcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVwb3J0c0pvYlRpdGxlc0FjdGlvbilcbiAgb25Mb2FkUmVwb3J0c0pvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRSZXBvcnRzSm9iVGl0bGVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Sm9iVGl0bGVzJCA9IHRoaXMuam9iVGl0bGVScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c0pvYlRpdGxlcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG4gICAgcmV0dXJuIGdldEpvYlRpdGxlcyQucGlwZSh0YXAoam9iVGl0bGVzID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgam9iVGl0bGVzOiBqb2JUaXRsZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFjY291bnRNYW5hZ2VtZW50Sm9iVGl0bGVzQWN0aW9uKVxuICBvbkxvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRBY2NvdW50TWFuYWdlbWVudEpvYlRpdGxlc0FjdGlvbikge1xuICAgIGNvbnN0IGdldEpvYlRpdGxlcyQgPSB0aGlzLmpvYlRpdGxlUnBjU2VydmljZVByb3h5LmdldEpvYlRpdGxlcyhhY3Rpb24uZ3VpZCwgYWN0aW9uLnBhcmtJZCwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ubWF4UmVzdWx0cyxcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/LnNlYXJjaFRlcm0sIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkuY29sdW1uLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5vcmRlckRpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gZ2V0Sm9iVGl0bGVzJC5waXBlKHRhcChqb2JUaXRsZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBqb2JUaXRsZXM6IGpvYlRpdGxlcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkUmVwb3J0c1pvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZFJlcG9ydHNab25lc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRSZXBvcnRzWm9uZXNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRab25lcyQgPSB0aGlzLnpvbmVScGNTZXJ2aWNlUHJveHkuZ2V0UmVwb3J0c1pvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZEFjY2Vzc1Byb2ZpbGVaWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkQWNjZXNzUHJvZmlsZVpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldEFjY2Vzc1Byb2ZpbGVab25lc0J5U2VhcmNoUGFyYW1zKGFjdGlvbi5ndWlkLCBhY3Rpb24ucGFya0lkLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5tYXhSZXN1bHRzLFxuICAgICAgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8uc2VhcmNoVGVybSwgYWN0aW9uLnNlYXJjaFBhcmFtc0R0bz8ub3JkZXJCeS5jb2x1bW4sXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5Lm9yZGVyRGlyZWN0aW9uKTtcblxuICAgIHJldHVybiBnZXRab25lcyQucGlwZSh0YXAoem9uZXMgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICB6b25lczogem9uZXMuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9hZENjTWFpblpvbmVzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZENjTWFpblpvbmVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZENjTWFpblpvbmVzQWN0aW9uKSB7XG4gICAgY29uc3QgZ2V0Wm9uZXMkID0gdGhpcy56b25lUnBjU2VydmljZVByb3h5LmdldFpvbmVzQnlTZWFyY2hQYXJhbXMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpvbmVzJC5waXBlKHRhcCh6b25lcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHpvbmVzOiB6b25lcy5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkWnNBY3Rpb24sIHsgY2FuY2VsVW5jb21wbGV0ZWQ6IHRydWUgfSlcbiAgb25Mb2FkWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkWnNBY3Rpb24pIHtcbiAgICBjb25zdCBnZXRacyQgPSB0aGlzLnpScGNTZXJ2aWNlUHJveHkuZ2V0WnMoYWN0aW9uLmd1aWQsIGFjdGlvbi5wYXJrSWQsIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm1heFJlc3VsdHMsXG4gICAgICBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5zZWFyY2hUZXJtLCBhY3Rpb24uc2VhcmNoUGFyYW1zRHRvPy5vcmRlckJ5LmNvbHVtbixcbiAgICAgIGFjdGlvbi5zZWFyY2hQYXJhbXNEdG8/Lm9yZGVyQnkub3JkZXJEaXJlY3Rpb24pO1xuXG4gICAgcmV0dXJuIGdldFpzJC5waXBlKHRhcCh6ID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgejogei5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckdyb3Vwc0FjdGlvbilcbiAgb25DbGVhckdyb3Vwc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3JvdXBzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckNhdGVnb3JpZXNBY3Rpb24pXG4gIG9uQ2xlYXJDYXRlZ29yaWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjYXRlZ29yaWVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhckpvYlRpdGxlc0FjdGlvbilcbiAgb25DbGVhckpvYlRpdGxlc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgam9iVGl0bGVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpvbmVzQWN0aW9uKVxuICBvbkNsZWFyWm9uZXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHpvbmVzOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclpzQWN0aW9uKVxuICBvbkNsZWFyWnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPikge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHo6IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25TZXRTZWxlY3RlZFBhcmtBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBndWlkLCBmYWNpbGl0eSB9OiBTZXRTZWxlY3RlZFBhcmtBY3Rpb24pIHtcbiAgICBjb25zdCBhbGxvd2VkQWN0aW9ucyA9IGNvbnZlcnRGZWF0dXJlUGVybWlzc2lvbnNUb0RpY3Rpb25hcnkoZmFjaWxpdHk/LmZlYXR1cmVQZXJtaXNzaW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZCxcbiAgICAgIHBhcmtJZDogZmFjaWxpdHk/LmlkLFxuICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Py5tdWx0aVBhcmtQYXJlbnRJRCxcbiAgICAgIHNlbGVjdGVkOiBmYWNpbGl0eSxcbiAgICAgIHpvbmVzOiBmYWNpbGl0eT8uem9uZXMsXG4gICAgICBhbGxvd2VkQWN0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhclNlbGVjdGVkRmFjaWxpdHlBY3Rpb24pXG4gIG9uQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgfTogQ2xlYXJTZWxlY3RlZEZhY2lsaXR5QWN0aW9uKSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZ3VpZDogJycsXG4gICAgICBwYXJrSWQ6IG51bGwsXG4gICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgIHNlbGVjdGVkOiBudWxsLFxuICAgICAgem9uZXM6IG51bGwsXG4gICAgICBhbGxvd2VkQWN0aW9uczoge31cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbilcbiAgb25DbGVhckluYWN0aXZlU2VsZWN0ZWRQYXJrQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGFjdGlvbjogQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gY3R4LmdldFN0YXRlKCkuc2VsZWN0ZWQ7XG5cbiAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZmFjaWxpdHkgaXMgSW5hY3RpdmUgYW5kIG5vdCBhIFN1cGVycGFyaywgd2UgZGVzZWxlY3RcbiAgICAvLyBUaGlzIG1lYW4gd2Ugd29uJ3QgY2FycnkgYW4gSW5hY3RpdmUgcGFyayB0byB0aGUgbmV4dCBtb2R1bGUgYXMgc2VsZWN0ZWRcbiAgICBpZiAoIXNlbGVjdGVkPy5hY3RpdmUgJiYgIXNlbGVjdGVkPy5pc011bHRpUGFyaykge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKVxuICBvbkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIHsgZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgfTogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24pIHtcbiAgICBjb25zdCBmYWNpbGl0eSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnlbZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQuZ3VpZF1bZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQucGFya0lkXTtcblxuICAgIGNvbnN0IG9wZXJhdGlvblR5cGVLZXkgPSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRzTG9jYWxpemF0aW9uS2V5W0ZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzW2ZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGVdXTtcbiAgICBjb25zdCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcgPSB7XG4gICAgICBtZXNzYWdlczogW3sgdmFsdWU6IGZhY2lsaXR5Lm5hbWUsIGNsYXNzOiBOb3RpZmljYXRpb25DbGFzcy5ib2R5IH1dLFxuICAgICAgY29tbWFuZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQob3BlcmF0aW9uVHlwZUtleSlcbiAgICB9O1xuXG4gICAgaWYgKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnR5cGUgPT09IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc0R5bmFtaWNQcmljaW5nU2V0QWN0aXZlUmF0ZShmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCkucGlwZShzd2l0Y2hNYXAoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LnN1Y2Nlc3MgPyBvZihmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zdWNjZXNzKSA6IHRocm93RXJyb3IoJ0ZhaWxlZCBleGVjdXRpbmcgY29tbWFuZCcpO1xuICAgIH0pLCB0aGlzLmNvbW1hbmROb3RpZmljYXRpb25TZXJ2aWNlLmRpc3BsYXkoY29uZmlnKSkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRNYWNyb0NvbW1hbmRzQWN0aW9uLCB7IGNhbmNlbFVuY29tcGxldGVkOiB0cnVlIH0pXG4gIG9uTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgeyBwYXJrSWQsIGd1aWQgfTogTG9hZE1hY3JvQ29tbWFuZHNBY3Rpb24pIHtcbiAgICBjb25zdCBtYWNyb0NvbW1hbmRzJCA9IHRoaXMucmVtb3RlQ29tbWFuZFJwY1NlcnZpY2VQcm94eS5nZXRNYWNyb0NvbW1hbmRzKGd1aWQsIHBhcmtJZCk7XG5cbiAgICByZXR1cm4gbWFjcm9Db21tYW5kcyQucGlwZSh0YXAobWFjcm9Db21tYW5kcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIG1hY3JvQ29tbWFuZHM6IG1hY3JvQ29tbWFuZHMuZGF0YVxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihDbGVhck1hY3JvQ29tbWFuZHNBY3Rpb24pXG4gIG9uQ2xlYXJNYWNyb0NvbW1hbmRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBtYWNyb0NvbW1hbmRzOiBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdGllcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSxcbiAgICBmYWNpbGl0eTogRmFjaWxpdHlEdG8sIGZhY2lsaXRpZXNNYXA/OiBTdHJpbmdNYXA8RmFjaWxpdHlEdG9bXT4pIHtcbiAgICBjb25zdCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5O1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeSA9IGN0eC5nZXRTdGF0ZSgpLmRpY3Rpb25hcnk7XG4gICAgY29uc3Qgbm93TW9tZW50ID0gbW9tZW50KCk7XG5cbiAgICBpZiAoZmFjaWxpdGllc01hcCkge1xuICAgICAgZmFjaWxpdGllc01hcFtndWlkXS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBmLmNsb3VkSWQgPSBmLmNsb3VkSWQgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uY2xvdWRJZDtcbiAgICAgICAgZi5mZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgICAgICBmLnBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLnBlcm1pc3Npb25zO1xuICAgICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bZi5pZF0gPSB0aGlzLnVwZGF0ZUZhY2lsaXR5Q29ubmVjdGl2aXR5RmxhZ3MoZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2YuaWRdLCBmKTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmLmlkXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0eS5jbG91ZElkID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5jbG91ZElkO1xuICAgICAgZmFjaWxpdHkuZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW2ZhY2lsaXR5LmlkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eS5wZXJtaXNzaW9ucyA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtmYWNpbGl0eS5pZF0ucGVybWlzc2lvbnM7XG4gICAgICBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSA9IHRoaXMudXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgZmFjaWxpdHkpO1xuICAgIH1cblxuICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5W2d1aWRdID0gdGhpcy5nZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eSwgbm93TW9tZW50KTtcbiAgICB0aGlzLnBhdGNoRGlmZkRpY3RpbmFyeVRvU3RvcmUoY3R4LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSk7XG4gICAgdGhpcy5wYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eCwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXSwgYXBwTW9kdWxlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmFjaWxpdHlDb25uZWN0aXZpdHlGbGFncyhzdG9yZWRGYWNpbGl0eTogRmFjaWxpdHlEdG8sIGluY29taW5nRmFjaWxpdHk6IEZhY2lsaXR5RHRvKSB7XG4gICAgY29uc3QgY2xvdWREYXRlVGltZVV0YyA9IHRoaXMuZ2V0Q2xvdWREYXRlVGltZVV0YygpO1xuICAgIGluY29taW5nRmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgaW5jb21pbmdGYWNpbGl0eS5jcmVkaXRTZXJ2ZXJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCAmJiAhaW5jb21pbmdGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICBpbmNvbWluZ0ZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gIWluY29taW5nRmFjaWxpdHkuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA/IHN0b3JlZEZhY2lsaXR5Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIHJldHVybiBpbmNvbWluZ0ZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaEZhY2lsaXRpZXNUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGRpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgZmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBhcHBNb2R1bGU6IEFwcE1vZHVsZSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgfSk7XG5cbiAgICBpZiAoYXBwTW9kdWxlID09PSBBcHBNb2R1bGUuQ2MpIHtcbiAgICAgIGNvbnN0IGFsbG93ZWRBY3Rpb25zID0gY29udmVydEZlYXR1cmVQZXJtaXNzaW9uc1RvRGljdGlvbmFyeShmYWNpbGl0eS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBzZWxlY3RlZDogZmFjaWxpdHksXG4gICAgICAgIHpvbmVzOiBmYWNpbGl0eS56b25lcyxcbiAgICAgICAgbXVsdGlQYXJrUGFyZW50SUQ6IGZhY2lsaXR5Lm11bHRpUGFya1BhcmVudElELFxuICAgICAgICBhbGxvd2VkQWN0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaERpZmZEaWN0aW5hcnlUb1N0b3JlKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4sIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5OiBDbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRTZXJ2ZXJUaW1lRGlmZihmYWNpbGl0eTogRmFjaWxpdHlEdG8sIG5vd01vbWVudDogbW9tZW50Lk1vbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5vd01vbWVudC50eihmYWNpbGl0eS5zcFRpbWVab25lKS5kaWZmKHRoaXMuc3luY1NlcnZlckRhdGVHbG9iYWxXb3JsZFRpbWVab25lKGZhY2lsaXR5KSk7XG4gIH1cblxuICBwcml2YXRlIHN5bmNTZXJ2ZXJEYXRlR2xvYmFsV29ybGRUaW1lWm9uZShmYWNpbGl0eTogRmFjaWxpdHlEdG8pIHtcbiAgICAvLyBmaXggZm9yIHNlcnZlcnMgdGhhdCBub3Qgc3luYyB0byBnbG9iYWwgd29ybGQgY2xvY2tcbiAgICBsZXQgc2VydmVyRGF0ZVRpbWU6IHN0cmluZyA9IGZhY2lsaXR5LnNlcnZlckRhdGVUaW1lWydfaSddO1xuICAgIGlmICghc2VydmVyRGF0ZVRpbWUuZW5kc1dpdGgoJyswMDowMCcpKSB7XG4gICAgICBzZXJ2ZXJEYXRlVGltZSA9IHNlcnZlckRhdGVUaW1lLnNsaWNlKDAsIHNlcnZlckRhdGVUaW1lLmluZGV4T2YoJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBtb21lbnQudHooc2VydmVyRGF0ZVRpbWUsIGZhY2lsaXR5LnNwVGltZVpvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlUnVubmluZ1N0YXR1c0ZsYWdzKGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8pOiBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNEdG8ge1xuICAgIGNvbnN0IGNsb3VkRGF0ZVRpbWVVdGMgPSB0aGlzLmdldENsb3VkRGF0ZVRpbWVVdGMoKTtcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU21hcnRQYXJrQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLnNtYXJ0UGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTbWFydFBhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc21hcnRQYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjO1xuICAgIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0Nsb3VkRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDbG91ZENvbm5lY3RlZCA/IG51bGwgOiBjdXJyZW50U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ2xvdWREaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YztcbiAgICBuZXdTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbmV3U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID8gbnVsbCA6IGN1cnJlbnRTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGM7XG4gICAgcmV0dXJuIG5ld1NlcnZpY2VzUnVubmluZ1N0YXR1cztcbiAgfVxuXG4gIHByaXZhdGUgYXNzaWduRmFjaWxpdHkoc3RvcmVkRmFjaWxpdHk6IEZhY2lsaXR5RHRvLCBpbmNvbWluZ0ZhY2lsaXR5OiBGYWNpbGl0eUR0byk6IEZhY2lsaXR5RHRvIHtcbiAgICBjb25zdCBjbG91ZERhdGVUaW1lVXRjID0gdGhpcy5nZXRDbG91ZERhdGVUaW1lVXRjKCk7XG4gICAgbGV0IGN1cnJlbnRGYWNpbGl0eSA9IG5ldyBGYWNpbGl0eUR0byhzdG9yZWRGYWNpbGl0eSk7XG4gICAgY3VycmVudEZhY2lsaXR5Lm5hbWUgPSBpbmNvbWluZ0ZhY2lsaXR5Lm5hbWU7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTFBSRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0xQUkNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5pc0NyZWRpdFNlcnZlckNvbm5lY3RlZCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPSBpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQ7XG4gICAgY3VycmVudEZhY2lsaXR5LmlzTXVsdGlQYXJrID0gaW5jb21pbmdGYWNpbGl0eS5pc011bHRpUGFyaztcbiAgICBjdXJyZW50RmFjaWxpdHkudGltZURyaWZ0ID0gaW5jb21pbmdGYWNpbGl0eS50aW1lRHJpZnQ7XG4gICAgY3VycmVudEZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXIgPSBpbmNvbWluZ0ZhY2lsaXR5LnNtYXJ0UGFya1BvaW50ZXI7XG4gICAgY3VycmVudEZhY2lsaXR5Lm1haW5Db250cm9sbGVyUG9pbnRlciA9IGluY29taW5nRmFjaWxpdHkubWFpbkNvbnRyb2xsZXJQb2ludGVyO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5hY3RpdmUgPSBpbmNvbWluZ0ZhY2lsaXR5LmFjdGl2ZTtcbiAgICBjdXJyZW50RmFjaWxpdHkudG90YWxTcGFjZSA9IGluY29taW5nRmFjaWxpdHkudG90YWxTcGFjZTtcbiAgICBjdXJyZW50RmFjaWxpdHkubHByRGlzY29ubmVjdGVkVGltZXN0YW1wID0gaW5jb21pbmdGYWNpbGl0eS5pc0xQUkVuYWJsZWQgJiYgIWluY29taW5nRmFjaWxpdHkuaXNMUFJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPz8gY2xvdWREYXRlVGltZVV0YyA6IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IGluY29taW5nRmFjaWxpdHkuaXNDcmVkaXRTZXJ2ZXJFbmFibGVkICYmICFpbmNvbWluZ0ZhY2lsaXR5LmlzQ3JlZGl0U2VydmVyQ29ubmVjdGVkID8gc3RvcmVkRmFjaWxpdHkuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID8/IGNsb3VkRGF0ZVRpbWVVdGMgOiBudWxsO1xuICAgIGN1cnJlbnRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9ICFpbmNvbWluZ0ZhY2lsaXR5LmlzTWFpbkNvbnRyb2xsZXJDb25uZWN0ZWQgPyBzdG9yZWRGYWNpbGl0eS5tYWluQ29udHJvbGxlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcCA/PyBjbG91ZERhdGVUaW1lVXRjIDogbnVsbDtcbiAgICByZXR1cm4gY3VycmVudEZhY2lsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbG91ZERhdGVUaW1lVXRjKCkge1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpO1xuICAgIHJldHVybiBtb21lbnQudXRjKCkuc3VidHJhY3QoY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0sICdtaWxsaXNlY29uZHMnKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9CYXNpY01lbnVJdGVtcyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IHRpYmFLZXlzID0gY3R4LmdldFN0YXRlKCkudGliYUtleXM7XG4gICAgY29uc3QgbWVudUl0ZW1zID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKHNtYXJ0cGFya01hcCkpIHtcbiAgICAgIGNvbnN0IHRpYmFLZXkgPSB0aWJhS2V5c1tndWlkXTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKC4uLnRoaXMuY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya01hcFtndWlkXSwgZ3VpZCwgdGliYUtleSwgZmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVudUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhcmtBY3RpdmUgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8RmFjaWxpdHlTdGF0ZU1vZGVsPiwgZ3VpZDogc3RyaW5nLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBjdHguZ2V0U3RhdGUoKS5zZWxlY3RlZD8uaWQgPT09IHBhcmtJZCAmJiBjdHguZ2V0U3RhdGUoKS5ndWlkID09PSBndWlkO1xuXG4gIHByaXZhdGUgY3JlYXRlTWVudUl0ZW1zKHNtYXJ0cGFya0Jhc2ljOiBTbWFydHBhcmtCYXNpY0R0bywgZ3VpZDogc3RyaW5nLCB0aWJhS2V5OiBudW1iZXIsIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBhcHBNb2R1bGU6IEFwcE1vZHVsZSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHNtYXJ0cGFya0Jhc2ljLmZhY2lsaXRpZXMuZm9yRWFjaChsb3QgPT4ge1xuICAgICAgaWYgKGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA+IDApIHtcbiAgICAgICAgLy8gZG8gbm90IHB1c2ggY2hpbGRyZW5zIHRvIG1lbnUgaXRlbXMgYXJyYXlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5jcmVhdGVNZW51KGd1aWQsIHRpYmFLZXksIHNtYXJ0cGFya0Jhc2ljLCBsb3QsIGZhY2lsaXR5RGljdGlvbmFyeSwgYXBwTW9kdWxlKTtcbiAgICAgIG1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtZW51SXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnVJdGVtc1BhcmtDb25uZWN0aW9uU3RhdHVzKGN0eDogU3RhdGVDb250ZXh0PEZhY2lsaXR5U3RhdGVNb2RlbD4pOiB2b2lkIHtcbiAgICAvLyBXZSBkb250IHJ1biBtZW51IHVwZGF0ZSBpZiB3ZSBhcmUgbm90IGluIENDXG4gICAgY29uc3QgY3VycmVudE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgaWYgKGN1cnJlbnRNb2R1bGUgIT09IEFwcE1vZHVsZS5DYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTaWRlbmF2U3RhdGUubWVudUl0ZW1zKTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5kaWN0aW9uYXJ5O1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnkgPSBjdHguZ2V0U3RhdGUoKS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5O1xuXG4gICAgZm9yIChjb25zdCBbZ3VpZCwgbG90c01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZmFjaWxpdHlEaWN0aW9uYXJ5KSkge1xuICAgICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlEdG9bXSA9IE9iamVjdC52YWx1ZXMobG90c01hcCk7XG4gICAgICBmb3IgKGNvbnN0IGZhY2lsaXR5IG9mIGZhY2lsaXRpZXMpIHtcbiAgICAgICAgbGV0IG1lbnVJdGVtOiBNZW51SXRlbTtcblxuICAgICAgICBpZiAoZmFjaWxpdHkubXVsdGlQYXJrUGFyZW50SUQgPiAwKSB7XG4gICAgICAgICAgbWVudUl0ZW0gPSBtZW51SXRlbXNcbiAgICAgICAgICAgIC5maW5kKGl0ZW0gPT4gaXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkKT8uY2hpbGRyZW5cbiAgICAgICAgICAgIC5maW5kKHN1Ykl0ZW0gPT4gc3ViSXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lbnVJdGVtID0gbWVudUl0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnByb3BlcnRpZXM/Lmd1aWQgPT09IGd1aWQgJiYgaXRlbS5pZCA9PT0gZmFjaWxpdHkuaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtKSB7XG4gICAgICAgICAgY29uc3QgYmFkZ2VDbGFzcyA9IHRoaXMuZmFjaWxpdHlNZW51U2VydmljZS5nZXRCYWRnZVByaW9yaXR5KGd1aWQsIHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbZ3VpZF0sIGZhY2lsaXR5LCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICAgIG1lbnVJdGVtLmhhc0JhZGdlID0gYmFkZ2VDbGFzcyAhPT0gUGFya0Nvbm5lY3Rpb25TdGF0dXNDbGFzcy5Db25uZWN0ZWQ7XG4gICAgICAgICAgbWVudUl0ZW0uYmFkZ2VDbGFzcyA9IGJhZGdlQ2xhc3M7XG4gICAgICAgICAgbWVudUl0ZW0ubmFtZSA9IGZhY2lsaXR5Lm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzTW9iaWxlQXBwTW9kZSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTWVudUxvYWRBY3Rpb24oWy4uLm1lbnVJdGVtc10sIEFwcE1vZHVsZS5DYykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U21hcnRwYXJrQ29ubmVjdGlvblN0YXR1c01hcChzbWFydHBhcmtNYXA6IFN0cmluZ01hcDxTbWFydHBhcmtCYXNpY0R0bz4sIGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeTogU3RyaW5nTWFwPFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bz4gPSB7fTtcbiAgICBjb25zdCBwYXJrQ29ubmVjdGlvblN0YXR1c01hcDogQ29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeVtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXM7XG4gICAgICBwYXJrQ29ubmVjdGlvblN0YXR1c01hcFtndWlkXSA9IHNtYXJ0cGFya01hcFtndWlkXS5mYWNpbGl0aWVzLnJlZHVjZSgoZmFjaWxpdGllcywgbG90KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmtDb25uZWN0aW9uU3RhdHVzID0gdGhpcy5nbG9iYWxFcnJvclNlcnZpY2UuZ2V0UGFya0Nvbm5lY3Rpb25TdGF0dXMoZ3VpZCwgbG90LCBzbWFydHBhcmtNYXBbZ3VpZF0uc2VydmljZXNSdW5uaW5nU3RhdHVzLCBmYWNpbGl0eURpY3Rpb25hcnkpO1xuICAgICAgICBmYWNpbGl0aWVzW2xvdC5pZF0gPSB7XG4gICAgICAgICAgc3RhdHVzOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGF0dXMsXG4gICAgICAgICAgc3RhcnREYXRlOiBwYXJrQ29ubmVjdGlvblN0YXR1cy5zdGFydERhdGVcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSwgcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRmFjaWxpdHlEaWN0aW9uYXJ5KHNtYXJ0cGFya01hcDogU3RyaW5nTWFwPFNtYXJ0cGFya0Jhc2ljRHRvPik6IHsgZGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBjbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeTogQ2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk7IH0ge1xuICAgIGNvbnN0IGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5ID0ge307XG4gICAgY29uc3QgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnk6IENsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGd1aWQgb2YgT2JqZWN0LmtleXMoc21hcnRwYXJrTWFwKSkge1xuICAgICAgZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdID0ge307XG4gICAgICBmb3IgKGNvbnN0IGxvdCBvZiBzbWFydHBhcmtNYXBbZ3VpZF0uZmFjaWxpdGllcykge1xuICAgICAgICBjb25zdCBjbG90ID0gbmV3IEZhY2lsaXR5RHRvKCk7XG4gICAgICAgIGNsb3QuaWQgPSBsb3QuaWQ7XG4gICAgICAgIGNsb3QuY2xvdWRJZCA9IGxvdC5jbG91ZElkO1xuICAgICAgICBjbG90LmFjdGl2ZSA9IGxvdC5hY3RpdmU7XG4gICAgICAgIGNsb3QuZmVhdHVyZVBlcm1pc3Npb25zID0gbG90LmZlYXR1cmVQZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5wZXJtaXNzaW9ucyA9IGxvdC5wZXJtaXNzaW9ucztcbiAgICAgICAgY2xvdC5uYW1lID0gbG90Lm5hbWU7XG4gICAgICAgIGNsb3Quc2l0ZUNvZGUgPSBsb3Quc2l0ZUNvZGU7XG4gICAgICAgIGNsb3QubXVsdGlQYXJrUGFyZW50SUQgPSBsb3QubXVsdGlQYXJrUGFyZW50SUQ7XG4gICAgICAgIGNsb3QuaXNNYWluQ29udHJvbGxlckNvbm5lY3RlZCA9IGxvdC5pc01haW5Db250cm9sbGVyQ29ubmVjdGVkO1xuICAgICAgICBjbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90Lm1haW5Db250cm9sbGVyRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQ3JlZGl0U2VydmVyRW5hYmxlZCA9IGxvdC5pc0NyZWRpdFNlcnZlckVuYWJsZWQ7XG4gICAgICAgIGNsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQgPSBsb3QuaXNDcmVkaXRTZXJ2ZXJDb25uZWN0ZWQ7XG4gICAgICAgIGNsb3QuY3JlZGl0U2VydmVyRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbG90LmNyZWRpdFNlcnZlckRpc2Nvbm5lY3RlZFRpbWVzdGFtcDtcbiAgICAgICAgY2xvdC5pc0xQUkNvbm5lY3RlZCA9IGxvdC5pc0xQUkNvbm5lY3RlZDtcbiAgICAgICAgY2xvdC5pc0xQUkVuYWJsZWQgPSBsb3QuaXNMUFJFbmFibGVkO1xuICAgICAgICBjbG90LmlzVGlja2V0TGVzc0VuYWJsZWQgPSBsb3QuaXNUaWNrZXRMZXNzRW5hYmxlZDtcbiAgICAgICAgY2xvdC5scHJEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBsb3QubHByRGlzY29ubmVjdGVkVGltZXN0YW1wO1xuICAgICAgICBjbG90LmlzQmFzaWMgPSBsb3QuaXNCYXNpYztcbiAgICAgICAgY2xvdC5pc011bHRpUGFyayA9IGxvdC5pc011bHRpUGFyaztcbiAgICAgICAgY2xvdC50aW1lRHJpZnQgPSBsb3QudGltZURyaWZ0O1xuICAgICAgICBjbG90LnNwVGltZVpvbmUgPSBsb3Quc3BUaW1lWm9uZTtcbiAgICAgICAgY2xvdC5zZXJ2ZXJEYXRlVGltZSA9IGxvdC5zZXJ2ZXJEYXRlVGltZTtcbiAgICAgICAgY2xvdC50b3RhbFNwYWNlID0gbG90LnRvdGFsU3BhY2U7XG4gICAgICAgIGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXVtsb3QuaWRdID0gY2xvdDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRpZmYgb2YgMCBmb3IgaW5pdGlhbCBzZXR1cFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnlbZ3VpZF0gPSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRpY3Rpb25hcnk6IGZhY2lsaXR5RGljdGlvbmFyeSwgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTbWFydHBhcmtCYXNpYyhjdHg6IFN0YXRlQ29udGV4dDxGYWNpbGl0eVN0YXRlTW9kZWw+LCBzbWFydFBhcmtzOiBTdHJpbmdNYXA8U21hcnRwYXJrQmFzaWNEdG8+KSB7XG4gICAgLy8ga2VlcCBkZWZhdWx0IHZhbHVlcyB3aGVuIG5hdmlnYXRlIHRvIGNvbW1hbmQgY2VudGVyIGZvcndhcmQgYW5kIGJhY2suXG4gICAgY29uc3QgeyBndWlkLCBwYXJrSWQsIG11bHRpUGFya1BhcmVudElELCBzZWxlY3RlZCB9ID0gY3R4LmdldFN0YXRlKCk7XG4gICAgZGVmYXVsdHMuZ3VpZCA9IGd1aWQ7XG4gICAgZGVmYXVsdHMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICBkZWZhdWx0cy5wYXJrSWQgPSBwYXJrSWQ7XG4gICAgZGVmYXVsdHMubXVsdGlQYXJrUGFyZW50SUQgPSBtdWx0aVBhcmtQYXJlbnRJRDtcblxuICAgIGN0eC5zZXRTdGF0ZShkZWZhdWx0cyk7XG5cbiAgICBjb25zdCB0aWJhS2V5czogU3RyaW5nTWFwPG51bWJlcj4gPSBPYmplY3Qua2V5cyhzbWFydFBhcmtzKS5yZWR1Y2UoKGtleXMsIGd1aWQsIGluZGV4KSA9PiB7XG4gICAgICBrZXlzW2d1aWRdID0gaW5kZXg7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9LCB7fSk7XG5cbiAgICBjb25zdCB7IGRpY3Rpb25hcnksIGNsaWVudFNlcnZlckRpZmZEaWN0aW9uYXJ5IH0gPSB0aGlzLmNvbnZlcnRUb0ZhY2lsaXR5RGljdGlvbmFyeShzbWFydFBhcmtzKTtcblxuICAgIGNvbnN0IHN0YXRlVXBkYXRlczogUGFydGlhbDxGYWNpbGl0eVN0YXRlTW9kZWw+ID0ge1xuICAgICAgdGliYUtleXMsXG4gICAgICBkaWN0aW9uYXJ5LFxuICAgICAgY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnksXG4gICAgfTtcblxuICAgIGlmICghZGljdGlvbmFyeVtndWlkXSB8fCAhZGljdGlvbmFyeVtndWlkXVtwYXJrSWRdKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0YXRlVXBkYXRlcywge1xuICAgICAgICBndWlkOiAnJyxcbiAgICAgICAgcGFya0lkOiBudWxsLFxuICAgICAgICBtdWx0aVBhcmtQYXJlbnRJRDogbnVsbCxcbiAgICAgICAgc2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgIHpvbmVzOiBudWxsLFxuICAgICAgICBhbGxvd2VkQWN0aW9uczoge30sXG4gICAgICB9KTtcbiAgICB9XG4gICAgY3R4LnBhdGNoU3RhdGUoc3RhdGVVcGRhdGVzKTtcblxuICAgIC8vdXNlcyBmYWNpbGl0eSBkaWN0aW9uYXJ5IGZyb20gc3RvcmUsIHRoZXJlZm9yZSBwbGFjZWQgYWZ0ZXJcbiAgICBjb25zdCB7IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnksIHBhcmtDb25uZWN0aW9uU3RhdHVzTWFwIH0gPSB0aGlzLmdldFNtYXJ0cGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAoc21hcnRQYXJrcywgZGljdGlvbmFyeSk7XG4gICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5LCBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeTogcGFya0Nvbm5lY3Rpb25TdGF0dXNNYXAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NEeW5hbWljUHJpY2luZ1NldEFjdGl2ZVJhdGUoZmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQ6IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBjb25maWc6IENvbW1hbmROb3RpZmljYXRpb25Db25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljUHJpY2luZ0NvbmRpdGlvbnNNYXA6IE51bWJlck1hcDxEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0bz4gPSBKU09OLnBhcnNlKFxuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTilcbiAgICApID8/IHt9O1xuXG4gICAgY29uc3QgZHBjOiBEeW5hbWljUHJpY2luZ0NvbmRpdGlvbkR0byA9IGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5zb3VyY2VJZGVudGlmaWVyXTtcbiAgICBpZiAoZHBjKSB7XG4gICAgICBjb25zdCBmYWNpbGl0eTogRmFjaWxpdHlEdG8gPSBudWxsO1xuICAgICAgY29uZmlnLmR1cmF0aW9uID0gNyAqIE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTO1xuICAgICAgY29uZmlnLm1lc3NhZ2VzID0gdGhpcy5mYWNpbGl0eUNvbW1hbmRzU2VydmljZS5nZXRDb21tYW5kTm90aWZpY2F0aW9uQ29uZmlnTWVzc2FnZXMoXG4gICAgICAgIEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlNldEFjdGl2ZVJhdGUsXG4gICAgICAgIGZhY2lsaXR5LFxuICAgICAgICBkcGNcbiAgICAgICk7XG5cbiAgICAgIC8vIENsb3NlIGR5bmFtaWMgcHJpY2luZyBub3RpZmljYXRpb25cbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uRHRvID0gbmV3IE5vdGlmaWNhdGlvbkR0bygpO1xuICAgICAgbm90aWZpY2F0aW9uLnR5cGUgPSBOb3RpZmljYXRpb25UeXBlLkR5bmFtaWNQcmljaW5nQ29uZGl0aW9uO1xuICAgICAgbm90aWZpY2F0aW9uLmR5bmFtaWNQcmljaW5nQ29uZGl0aW9uID0gZHBjO1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgSGFuZGxlZE5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb24sIGRwYy5ndWlkKSk7XG5cbiAgICAgIGR5bmFtaWNQcmljaW5nQ29uZGl0aW9uc01hcFtmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudC5ndWlkXSA9IG51bGw7XG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShcbiAgICAgICAgRFlOQU1JQ19QUklDSU5HX0NPTkRJVElPTixcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZHluYW1pY1ByaWNpbmdDb25kaXRpb25zTWFwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|