@lifeready/core 8.0.15 → 9.0.1
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/bundles/lifeready-core.umd.js +64 -44
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js +1 -1
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/_common/utils.js +6 -9
- package/esm2015/lib/api/types/lr-graphql.types.js +7 -1
- package/esm2015/lib/item/item.gql.js +3 -1
- package/esm2015/lib/item/item.service.js +24 -18
- package/esm2015/lib/item/item.types.js +1 -1
- package/esm2015/lib/scenario/scenario.service.js +6 -6
- package/esm2015/lib/trusted-party/trusted-party.service.js +20 -12
- package/esm2015/lib/trusted-party/trusted-party.types.js +1 -1
- package/fesm2015/lifeready-core.js +57 -38
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/_common/utils.d.ts +1 -1
- package/lib/api/types/lr-graphql.types.d.ts +2 -0
- package/lib/item/item.gql.d.ts +6 -18
- package/lib/item/item.types.d.ts +7 -5
- package/lib/trusted-party/trusted-party.types.d.ts +4 -1
- package/lifeready-core.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { __awaiter, __decorate } from "tslib";
|
|
2
2
|
import { Injectable, Injector, NgZone } from '@angular/core';
|
|
3
3
|
import { LrMergedMutation, LrMutation, LrService } from '../api/lr-graphql';
|
|
4
|
-
import { AccessRoleChoice, mapEdges, ScenarioState, TpClaimApproverState } from '../api/types';
|
|
4
|
+
import { AccessRoleChoice, mapEdges, ScenarioState, TpClaimApproverState, } from '../api/types';
|
|
5
5
|
import { EncryptionService } from '../encryption/encryption.service';
|
|
6
6
|
import { ItemService } from '../item/item.service';
|
|
7
7
|
import { KeyGraphService } from '../key/key-graph.service';
|
|
8
8
|
import { TpsKeysQuery } from '../tp-assembly/tp-assembly.private.gql';
|
|
9
|
-
import { KcBadArgumentException, KcBadStateException } from '../_common/exceptions';
|
|
9
|
+
import { KcBadArgumentException, KcBadStateException, } from '../_common/exceptions';
|
|
10
10
|
import { RunOutsideAngular } from '../_common/run-outside-angular';
|
|
11
|
-
import {
|
|
11
|
+
import { assertExactlyOne } from '../_common/utils';
|
|
12
12
|
import { ScenarioAssemblyController } from './scenario.controller';
|
|
13
|
-
import { ApproveScenarioClaimMutation, CancelScenarioClaimMutation, CreateScenarioClaimMutation, CreateScenarioMutation, DebugExpireScenarioClaimMutation, DeleteScenarioMutation, ReceiveScenarioClaimMutation, RejectScenarioClaimMutation, UpdateScenarioMutation } from './scenario.gql';
|
|
13
|
+
import { ApproveScenarioClaimMutation, CancelScenarioClaimMutation, CreateScenarioClaimMutation, CreateScenarioMutation, DebugExpireScenarioClaimMutation, DeleteScenarioMutation, ReceiveScenarioClaimMutation, RejectScenarioClaimMutation, UpdateScenarioMutation, } from './scenario.gql';
|
|
14
14
|
import { ScenarioQuery, SharedScenarioQuery } from './scenario.private.gql';
|
|
15
15
|
import * as i0 from "@angular/core";
|
|
16
16
|
import * as i1 from "../key/key-graph.service";
|
|
@@ -334,7 +334,7 @@ let ScenarioService = class ScenarioService extends LrService {
|
|
|
334
334
|
prepareReceiverItem(options) {
|
|
335
335
|
return __awaiter(this, void 0, void 0, function* () {
|
|
336
336
|
const { receiverItemOptions, receiverSharedKey, assemblyKey, directory, file, } = options;
|
|
337
|
-
|
|
337
|
+
assertExactlyOne({ directory, file });
|
|
338
338
|
const { accessRole } = receiverItemOptions;
|
|
339
339
|
if (accessRole == AccessRoleChoice.DENY) {
|
|
340
340
|
const ret = {
|
|
@@ -676,4 +676,4 @@ ScenarioService = __decorate([
|
|
|
676
676
|
})
|
|
677
677
|
], ScenarioService);
|
|
678
678
|
export { ScenarioService };
|
|
679
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zY2VuYXJpby9zY2VuYXJpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLFFBQVEsRUFHUixhQUFhLEVBR2Isb0JBQW9CLEVBRXJCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXRFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN2QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxh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QUFDO1FBQ0osQ0FBQztLQUFBO0lBRWEsMkJBQTJCLENBQ3ZDLGdCQUF3QixFQUN4QixPQUFlOztZQUVmLDRFQUE0RTtZQUM1RSxzQkFBc0I7WUFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FDbEQsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxvQkFBb0IsQ0FBQyxPQUFPLENBQzdCLENBQUM7WUFFRixPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FDekIsQ0FBTyxlQUFlLEVBQUUsRUFBRTtnQkFDeEIsT0FBQSxJQUFJLFVBQVUsQ0FBQztvQkFDYixRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUU7cUJBQy9DO2lCQUNGLENBQUMsQ0FBQTtjQUFBLENBQ0wsQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGLENBQUE7QUEvNEJlLGlDQUFpQixHQUFHLFdBQVcsQ0FBQzs7O1lBZC9DLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBdEU4QixNQUFNO1lBQWhCLFFBQVE7WUFrQnBCLGVBQWU7WUFGZixXQUFXO1lBV1gsMEJBQTBCO1lBWjFCLGlCQUFpQjs7QUF3RGIsZUFBZTtJQU4zQixpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcsZUFBZSxDQTA1QjNCO1NBMTVCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7IExyTWVyZ2VkTXV0YXRpb24sIExyTXV0YXRpb24sIExyU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1ncmFwaHFsJztcbmltcG9ydCB7XG4gIEFjY2Vzc1JvbGVDaG9pY2UsXG4gIEpTT05PYmplY3QsXG4gIG1hcEVkZ2VzLFxuICBTY2VuYXJpb05vZGUsXG4gIFNjZW5hcmlvUmVjZWl2ZXJOb2RlLFxuICBTY2VuYXJpb1N0YXRlLFxuICBTaGFyZWRTY2VuYXJpb0NsYWltUmVjZWl2ZWRBcHByb3ZhbE5vZGUsXG4gIFNoYXJlZFRwQ2xhaW1BcHByb3Zlck5vZGUsXG4gIFRwQ2xhaW1BcHByb3ZlclN0YXRlLFxuICBUcE5vZGVcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZW5jcnlwdGlvbi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICcuLi9pdGVtL2l0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBJZEtleVBhaXIgfSBmcm9tICcuLi9pdGVtL2l0ZW0udHlwZXMnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1ncmFwaC5zZXJ2aWNlJztcbmltcG9ydCB7IFRwc0tleXNRdWVyeSB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5LnByaXZhdGUuZ3FsJztcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5LnR5cGVzJztcbmltcG9ydCB7XG4gIEtjQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIEtjQmFkU3RhdGVFeGNlcHRpb25cbn0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7IGFzc2VydF94b3IgfSBmcm9tICcuLi9fY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IFNjZW5hcmlvQXNzZW1ibHlDb250cm9sbGVyIH0gZnJvbSAnLi9zY2VuYXJpby5jb250cm9sbGVyJztcbmltcG9ydCB7XG4gIEFwcHJvdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIENhbmNlbFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgQ3JlYXRlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBDcmVhdGVTY2VuYXJpb011dGF0aW9uLFxuICBEZWJ1Z0V4cGlyZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgRGVsZXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgUmVjZWl2ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgUmVqZWN0U2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBVcGRhdGVTY2VuYXJpb011dGF0aW9uXG59IGZyb20gJy4vc2NlbmFyaW8uZ3FsJztcbmltcG9ydCB7IFNjZW5hcmlvUXVlcnksIFNoYXJlZFNjZW5hcmlvUXVlcnkgfSBmcm9tICcuL3NjZW5hcmlvLnByaXZhdGUuZ3FsJztcbmltcG9ydCB7XG4gIENyZWF0ZUNsYWltYW50T3B0aW9ucyxcbiAgQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zLFxuICBDcmVhdGVSZWNlaXZlck9wdGlvbnMsXG4gIENyZWF0ZVNjZW5hcmlvT3B0aW9ucyxcbiAgUGFydGljaXBhbnRPcHRpb25zLFxuICBSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnMsXG4gIFJlY2VpdmVyRmlsZU9wdGlvbnMsXG4gIFJlY2VpdmVySXRlbU9wdGlvbnMsXG4gIFJlc2V0U2NlbmFyaW9PcHRpb25zLFxuICBVcGRhdGVDbGFpbWFudE9wdGlvbnMsXG4gIFVwZGF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgVXBkYXRlU2NlbmFyaW9PcHRpb25zXG59IGZyb20gJy4vc2NlbmFyaW8udHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dDbGFpbUlkTWlzbWF0Y2goKSB7XG4gIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICdjbGFpbUlkIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgY2xhaW1JZCBvZiB0aGUgc2NlbmFyaW8nXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0NsYWltTm90QXBwcm92ZWQoKSB7XG4gIHRocm93IG5ldyBLY0JhZFN0YXRlRXhjZXB0aW9uKCdTY2VuYXJpbyBjbGFpbSBoYXMgbm90IGJlZW4gYXBwcm92ZWQnKTtcbn1cblxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcbiAgbmdab25lTmFtZTogJ25nWm9uZScsXG59KVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjZW5hcmlvU2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXNzZW1ibHlDb250cm9sbGVyOiBTY2VuYXJpb0Fzc2VtYmx5Q29udHJvbGxlcixcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBTTElQMzlfUEFTU1BIUkFTRSA9ICdsaWZlcmVhZHknO1xuXG4gIHByaXZhdGUgcHJlcGFyZUFkZFJlY2VpdmVyRGlyZWN0b3J5ID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJEaXJlY3Rvcnk7XG4gIHByaXZhdGUgcHJlcGFyZVVwZGF0ZVJlY2VpdmVyRGlyZWN0b3J5ID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJEaXJlY3Rvcnk7XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQWRkUmVjZWl2ZXJGaWxlID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJGaWxlO1xuICBwcml2YXRlIHByZXBhcmVVcGRhdGVSZWNlaXZlckZpbGUgPSB0aGlzLnByZXBhcmVSZWNlaXZlckZpbGU7XG5cbiAgLy8gU2NlbmFyaW9zXG4gIGFzeW5jIGNyZWF0ZVNjZW5hcmlvKG9wdGlvbnM6IENyZWF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBDcmVhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVTY2VuYXJpb011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNjZW5hcmlvKG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBVcGRhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCBzY2VuYXJpbyA9IChhd2FpdCB0aGlzLmdldFNjZW5hcmlvKG9wdGlvbnMuc2NlbmFyaW9JZCkpLnNjZW5hcmlvO1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlU2NlbmFyaW8ob3B0aW9ucywgc2NlbmFyaW8pO1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZXNldFNjZW5hcmlvKG9wdGlvbnM6IFJlc2V0U2NlbmFyaW9PcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMucmVzZXRTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0U2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBSZXNldFNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IHNjZW5hcmlvID0gKGF3YWl0IHRoaXMuZ2V0U2NlbmFyaW8ob3B0aW9ucy5zY2VuYXJpb0lkKSkuc2NlbmFyaW87XG5cbiAgICBjb25zdCB7IGFzc2VtYmx5IH0gPSBzY2VuYXJpbztcblxuICAgIC8vIEp1c3QgbmVlZCB0byBkbyBhbiB1cGRhdGUgd2l0aG91dCBjaGFuZ2luZyBhcHByb3ZlcnMuIFRoaXMgd2lsbCByZWNyZWF0ZVxuICAgIC8vIGFsbCBhc3NlbWJseSBrZXlzLlxuICAgIGNvbnN0IHVwZGF0ZVN1YkFzc2VtYmxpZXMgPSBtYXBFZGdlcyhhc3NlbWJseS5zdWJBc3NlbWJsaWVzKS5tYXAoKHNhKSA9PiB7XG4gICAgICBjb25zdCBhcHByb3ZlclRwcyA9IG1hcEVkZ2VzKHNhLmFwcHJvdmVycykubWFwKChhcHByb3ZlcikgPT4gKHtcbiAgICAgICAgdHBJZDogYXBwcm92ZXIudHAuaWQsXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBzYS5pZCxcbiAgICAgICAgcXVvcnVtOiBzYS5xdW9ydW0sXG4gICAgICAgIHNpbmdsZVJlamVjdDogc2Euc2luZ2xlUmVqZWN0LFxuICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YUNsZWFySnNvbjogc2Euc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIGFwcHJvdmVyVHBzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlU2NlbmFyaW8oXG4gICAgICB7XG4gICAgICAgIHNjZW5hcmlvSWQ6IG9wdGlvbnMuc2NlbmFyaW9JZCxcbiAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgICB1cGRhdGVBc3NlbWJseToge1xuICAgICAgICAgIHF1b3J1bTogYXNzZW1ibHkucXVvcnVtLFxuICAgICAgICAgIHNpbmdsZVJlamVjdDogYXNzZW1ibHkuc2luZ2xlUmVqZWN0LFxuICAgICAgICAgIHVwZGF0ZVN1YkFzc2VtYmxpZXMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2NlbmFyaW9cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVTY2VuYXJpb011dGF0aW9uLCAvLyB1cGRhdGluZyBzY2VuYXJpbyByZXNldHMgaXRcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sckdyYXBoUUwubHJNdXRhdGUodGhpcy5kZWxldGVTY2VuYXJpb011dGF0aW9uKHNjZW5hcmlvSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNjZW5hcmlvTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVTY2VuYXJpb011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IHNjZW5hcmlvSWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2xhaW1zXG4gIGFzeW5jIGNyZWF0ZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZCkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dDogeyBzY2VuYXJpb0lkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbENsYWltKGNsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNhbmNlbENsYWltTXV0YXRpb24oY2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsQ2xhaW1NdXRhdGlvbihjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENhbmNlbFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dDogeyBjbGFpbUlkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlamVjdENsYWltKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMucmVqZWN0Q2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkLCBjbGFpbUlkKSk7XG4gIH1cblxuICBhc3luYyByZWplY3RDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbXV0YXRpb25zID0gYXdhaXQgdGhpcy5wcmVwYXJlUmVqZWN0Q2xhaW1NdXRhdGlvbnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZFxuICAgICk7XG4gICAgcmV0dXJuIExyTWVyZ2VkTXV0YXRpb24uY3JlYXRlKGF3YWl0IFByb21pc2UuYWxsKG11dGF0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgYXBwcm92ZUNsYWltKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIGEgY2FzdCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBBTlkuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKFxuICAgICAgdGhpcy5hcHByb3ZlQ2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBhcHByb3ZlQ2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG11dGF0aW9ucyA9IGF3YWl0IHRoaXMucHJlcGFyZUFwcHJvdmVDbGFpbU11dGF0aW9ucyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBzaGFyZWRDbGFpbUlkXG4gICAgKTtcbiAgICByZXR1cm4gTHJNZXJnZWRNdXRhdGlvbi5jcmVhdGUoYXdhaXQgUHJvbWlzZS5hbGwobXV0YXRpb25zKSk7XG4gIH1cblxuICBhc3luYyByZWNlaXZlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZWNlaXZlQ2xhaW0yTXV0YXRpb24oc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZUNsYWltMk11dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBSZWNlaXZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVSZWNlaXZlQ2xhaW0yKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlYnVnRXhwaXJlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVidWdFeHBpcmVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGRlYnVnRXhwaXJlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlYnVnRXhwaXJlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7IHNjZW5hcmlvSWQgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2NlbmFyaW8oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoe1xuICAgICAgcXVlcnk6IFNjZW5hcmlvUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHsgc2NlbmFyaW9JZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTaGFyZWRTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBTaGFyZWRTY2VuYXJpb1F1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHNjZW5hcmlvSWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKGNsYWltSWQgJiYgcmV0LnNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmlkICE9PSBjbGFpbUlkKSB7XG4gICAgICB0aHJvd0NsYWltSWRNaXNtYXRjaCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBhcnRpY2lwYW50VHBzS2V5cyhvcHRpb25zOiBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnNbXSkge1xuICAgIGNvbnN0IHRwSWRzID0gb3B0aW9ucy5tYXAoKHgpID0+IHgudHBJZCk7XG5cbiAgICAvLyBUaGlzIHNob3VsZCBjb250YWluIGFsbCB0aGUgVFBzIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFzc2VtYmx5LlxuICAgIGNvbnN0IHRwcyA9IG1hcEVkZ2VzKFxuICAgICAgKFxuICAgICAgICBhd2FpdCB0aGlzLmxyR3JhcGhRTC5xdWVyeSh7XG4gICAgICAgICAgcXVlcnk6IFRwc0tleXNRdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlkczogdHBJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICkudHBzXG4gICAgKTtcblxuICAgIHJldHVybiB0cHM7XG4gIH1cblxuICBwcml2YXRlIGZpbGxUcFNoYXJlZEtleUlkKFxuICAgIG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9uc1tdLFxuICAgIHRwczogVHBOb2RlW11cbiAgKSB7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChwYXJ0aWNpcGFudCkgPT4ge1xuICAgICAgaWYgKCFwYXJ0aWNpcGFudC50cFNoYXJlZEtleUlkKSB7XG4gICAgICAgIGNvbnN0IHRwID0gdHBzLmZpbmQoKHgpID0+IHguaWQgPT09IHBhcnRpY2lwYW50LnRwSWQpO1xuICAgICAgICBwYXJ0aWNpcGFudC50cFNoYXJlZEtleUlkID1cbiAgICAgICAgICB0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3QgeyBhc3NlbWJseUtleSwgbXV0YXRpb25JbnB1dDogY3JlYXRlQXNzZW1ibHkgfSA9XG4gICAgICBhd2FpdCB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5wcmVwYXJlQ3JlYXRlKG9wdGlvbnMuY3JlYXRlQXNzZW1ibHkpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzIHx8IFtdO1xuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50c09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyB8fCBbXTtcblxuICAgIC8vIEZldGNoIGFsbCB0aGUgVFBzIHNvIHdlIGRvbid0IGhhdmUgdG8gcGFzcyBpbiB0cFNoYXJlZEtleUlkXG4gICAgY29uc3QgY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zID0gY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5jb25jYXQoXG4gICAgICBjcmVhdGVDbGFpbWFudHNPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHRwcyA9IGF3YWl0IHRoaXMuZ2V0UGFydGljaXBhbnRUcHNLZXlzKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyk7XG5cbiAgICB0aGlzLmZpbGxUcFNoYXJlZEtleUlkKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucywgdHBzKTtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5tYXAoKHJlY2VpdmVyKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVDcmVhdGVSZWNlaXZlcihyZWNlaXZlciwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucy5tYXAoKHgpID0+IHRoaXMucHJlcGFyZUNyZWF0ZUNsYWltYW50KHgpKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgaW5hY3RpdmVTZWNvbmRzOiBvcHRpb25zLmluYWN0aXZlU2Vjb25kcyxcbiAgICAgIGNyZWF0ZUFzc2VtYmx5LFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzLFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVTY2VuYXJpbyhcbiAgICBvcHRpb25zOiBVcGRhdGVTY2VuYXJpb09wdGlvbnMsXG4gICAgc2NlbmFyaW86IFNjZW5hcmlvTm9kZVxuICApIHtcbiAgICBsZXQgYXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShcbiAgICAgIHNjZW5hcmlvLmFzc2VtYmx5LmFzc2VtYmx5S2V5LmlkXG4gICAgKTtcblxuICAgIGNvbnN0IHVwZGF0ZUFzc2VtYmx5ID0gb3B0aW9ucy51cGRhdGVBc3NlbWJseVxuICAgICAgPyBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEFzc2VtYmx5IGtleSBpcyBhbHdheXMgcm90YXRlZCB3aGVuIHVwZGF0aW5nIGFzc2VtYmx5LlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXNzZW1ibHlDb250cm9sbGVyLnByZXBhcmVVcGRhdGUoXG4gICAgICAgICAgICBvcHRpb25zLnVwZGF0ZUFzc2VtYmx5LFxuICAgICAgICAgICAgc2NlbmFyaW8uYXNzZW1ibHlcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIFVzZSBuZXcgYXNzZW1ibHkga2V5LlxuICAgICAgICAgIGFzc2VtYmx5S2V5ID0gcmVzdWx0LmFzc2VtYmx5S2V5O1xuICAgICAgICAgIHJldHVybiByZXN1bHQubXV0YXRpb25JbnB1dDtcbiAgICAgICAgfSkoKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgfHwgW107XG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzIHx8IFtdO1xuXG4gICAgLy8gRmV0Y2ggYWxsIHRoZSBUUHMgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGluIHRwU2hhcmVkS2V5SWRcbiAgICBjb25zdCBjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMgPSBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLmNvbmNhdChcbiAgICAgIGNyZWF0ZUNsYWltYW50c09wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgdHBzID0gYXdhaXQgdGhpcy5nZXRQYXJ0aWNpcGFudFRwc0tleXMoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zKTtcblxuICAgIHRoaXMuZmlsbFRwU2hhcmVkS2V5SWQoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zLCB0cHMpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzID1cbiAgICAgIG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVDcmVhdGVSZWNlaXZlcih4LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBleGlzdGluZ1JlY2VpdmVycyA9IG1hcEVkZ2VzKHNjZW5hcmlvLnJlY2VpdmVycyk7XG4gICAgbGV0IHVwZGF0ZVJlY2VpdmVycyA9IG9wdGlvbnMudXBkYXRlUmVjZWl2ZXJzXG4gICAgICA/IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIG9wdGlvbnMudXBkYXRlUmVjZWl2ZXJzLm1hcCgodXBkYXRlUmVjZWl2ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJlY2VpdmVyIHdlIGFyZSB1cGRhdGluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZWNlaXZlciA9IGV4aXN0aW5nUmVjZWl2ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4LnRwLmlkID09PSB1cGRhdGVSZWNlaXZlci50cElkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgICAgICAgICAgIHVwZGF0ZVJlY2VpdmVyLFxuICAgICAgICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgICAgICAgZXhpc3RpbmdSZWNlaXZlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyByZWNlaXZlcnMgd2hlbiB1cGRhdGluZyBhc3NlbWJseS5cbiAgICBpZiAob3B0aW9ucy51cGRhdGVBc3NlbWJseSkge1xuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgcmVjZWl2ZXJzIHRoYXQgd2lsbCBiZSBkZWxldGVkIG9yIGFscmVhZHkgdXBkYXRlZC5cbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdSZWNlaXZlcnMuZmlsdGVyKFxuICAgICAgICAoZXhpc3RpbmdSZWNlaXZlcikgPT5cbiAgICAgICAgICAhKG9wdGlvbnMuZGVsZXRlUmVjZWl2ZXJzIHx8IFtdKS5pbmNsdWRlcyhleGlzdGluZ1JlY2VpdmVyLnRwLmlkKSAmJlxuICAgICAgICAgICF1cGRhdGVSZWNlaXZlcnMuc29tZShcbiAgICAgICAgICAgICh1cGRhdGVSZWNlaXZlcikgPT4gdXBkYXRlUmVjZWl2ZXIudHBJZCA9PT0gZXhpc3RpbmdSZWNlaXZlci50cC5pZFxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgICB1cGRhdGVSZWNlaXZlcnMgPSB1cGRhdGVSZWNlaXZlcnMuY29uY2F0KFxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVFeGlzdGluZ1JlY2VpdmVycyhleGlzdGluZywgYXNzZW1ibHlLZXkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50cyA9XG4gICAgICBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmNyZWF0ZUNsYWltYW50cy5tYXAoKHgpID0+IHRoaXMucHJlcGFyZUNyZWF0ZUNsYWltYW50KHgpKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBleGlzdGluZ0NsYWltYW50cyA9IG1hcEVkZ2VzKHNjZW5hcmlvLmNsYWltYW50cyk7XG4gICAgY29uc3QgdXBkYXRlQ2xhaW1hbnRzID1cbiAgICAgIG9wdGlvbnMudXBkYXRlQ2xhaW1hbnRzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMudXBkYXRlQ2xhaW1hbnRzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGNsYWltYW50IHdlIGFyZSB1cGRhdGluZ1xuICAgICAgICAgIGNvbnN0IGNsYWltYW50ID0gZXhpc3RpbmdDbGFpbWFudHMuZmluZChcbiAgICAgICAgICAgIChleGlzdGluZ0NsYWltYW50KSA9PiBleGlzdGluZ0NsYWltYW50LnRwLmlkID09PSB4LnRwSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVVcGRhdGVDbGFpbWFudCh4LCBjbGFpbWFudC5zaGFyZWRLZXkuaWQpO1xuICAgICAgICB9KVxuICAgICAgKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NlbmFyaW9JZDogb3B0aW9ucy5zY2VuYXJpb0lkLFxuICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgaW5hY3RpdmVTZWNvbmRzOiBvcHRpb25zLmluYWN0aXZlU2Vjb25kcyxcbiAgICAgIHVwZGF0ZUFzc2VtYmx5LFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzLFxuICAgICAgdXBkYXRlUmVjZWl2ZXJzLFxuICAgICAgZGVsZXRlUmVjZWl2ZXJzOiBvcHRpb25zLmRlbGV0ZVJlY2VpdmVycyxcbiAgICAgIGNyZWF0ZUNsYWltYW50cyxcbiAgICAgIHVwZGF0ZUNsYWltYW50cyxcbiAgICAgIGRlbGV0ZUNsYWltYW50czogb3B0aW9ucy5kZWxldGVDbGFpbWFudHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlY2VpdmVySXRlbShvcHRpb25zOiB7XG4gICAgcmVjZWl2ZXJJdGVtT3B0aW9uczogUmVjZWl2ZXJJdGVtT3B0aW9ucztcbiAgICByZWNlaXZlclNoYXJlZEtleTogSldLLktleTtcbiAgICBhc3NlbWJseUtleTogSldLLktleTtcbiAgICBkaXJlY3Rvcnk/OiBJZEtleVBhaXI7XG4gICAgZmlsZT86IElkS2V5UGFpcjtcbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlY2VpdmVySXRlbU9wdGlvbnMsXG4gICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgZGlyZWN0b3J5LFxuICAgICAgZmlsZSxcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGFzc2VydF94b3IoeyBkaXJlY3RvcnksIGZpbGUgfSk7XG5cbiAgICBjb25zdCB7IGFjY2Vzc1JvbGUgfSA9IHJlY2VpdmVySXRlbU9wdGlvbnM7XG5cbiAgICBpZiAoYWNjZXNzUm9sZSA9PSBBY2Nlc3NSb2xlQ2hvaWNlLkRFTlkpIHtcbiAgICAgIGNvbnN0IHJldCA9IHtcbiAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgaXRlbUtleUlkOiBudWxsLFxuICAgICAgICB3cmFwcGVkSXRlbUtleTogbnVsbCxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YTogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gQ3J5cHRvZ3JhcGhpYyBhY2Nlc3MgdG8gaXRlbSBpcyBub3QgcmVxdWlyZWQuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJldCxcbiAgICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8gdGhpcyBzaG91bGQgYmUgYmF0Y2hlZFxuICAgICAgbGV0IGl0ZW1LZXk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGl0ZW1LZXkgPSBhd2FpdCB0aGlzLml0ZW1TZXJ2aWNlLmdldERpcmVjdG9yeUtleShcbiAgICAgICAgICBkaXJlY3RvcnkuaWQsXG4gICAgICAgICAgZGlyZWN0b3J5LmtleUlkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtS2V5ID0gYXdhaXQgdGhpcy5pdGVtU2VydmljZS5nZXRGaWxlS2V5KGZpbGUuaWQsIGZpbGUua2V5SWQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICAgIGl0ZW1LZXkuandrLnRvSlNPTih0cnVlKVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgICAgcmVjZWl2ZXJJdGVtT3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgICApO1xuXG4gICAgICB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgd3JhcHBlZEl0ZW1LZXlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJldCA9IHtcbiAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgaXRlbUtleUlkOiBpdGVtS2V5LmlkLFxuICAgICAgICB3cmFwcGVkSXRlbUtleSxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXQsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNlaXZlckRpcmVjdG9yeShcbiAgICBvcHRpb25zOiBSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnMsXG4gICAgcmVjZWl2ZXJTaGFyZWRLZXk6IEpXSy5LZXksXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlY2VpdmVySXRlbSh7XG4gICAgICByZWNlaXZlckl0ZW1PcHRpb25zOiBvcHRpb25zLFxuICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGRpcmVjdG9yeToge1xuICAgICAgICBpZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgICAga2V5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5S2V5SWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJGaWxlKFxuICAgIG9wdGlvbnM6IFJlY2VpdmVyRmlsZU9wdGlvbnMsXG4gICAgcmVjZWl2ZXJTaGFyZWRLZXk6IEpXSy5LZXksXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlY2VpdmVySXRlbSh7XG4gICAgICByZWNlaXZlckl0ZW1PcHRpb25zOiBvcHRpb25zLFxuICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGZpbGU6IHtcbiAgICAgICAgaWQ6IG9wdGlvbnMuZmlsZUlkLFxuICAgICAgICBrZXlJZDogb3B0aW9ucy5maWxlS2V5SWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlUmVjZWl2ZXIoXG4gICAgb3B0aW9uczogQ3JlYXRlUmVjZWl2ZXJPcHRpb25zLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIGNvbnN0IHsgc2hhcmVkS2V5LCBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgYWRkRGlyZWN0b3JpZXMgPVxuICAgICAgb3B0aW9ucy5hZGREaXJlY3RvcmllcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXkua2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBhZGRGaWxlcyA9XG4gICAgICBvcHRpb25zLmFkZEZpbGVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRmlsZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRmlsZSh4LCBzaGFyZWRLZXkua2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubXV0YXRpb25JbnB1dCxcbiAgICAgIGFkZERpcmVjdG9yaWVzLFxuICAgICAgYWRkRmlsZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVJlY2VpdmVyKFxuICAgIG9wdGlvbnM6IFVwZGF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgICBhc3NlbWJseUtleTogSldLLktleSxcbiAgICBleGlzdGluZ1JlY2VpdmVyOiBTY2VuYXJpb1JlY2VpdmVyTm9kZVxuICApIHtcbiAgICBjb25zdCBzaGFyZWRLZXlJZCA9IGV4aXN0aW5nUmVjZWl2ZXIuc2hhcmVkS2V5LmlkO1xuXG4gICAgY29uc3QgZGVsZXRlRGlyZWN0b3JpZXNPcHRpb25zID0gb3B0aW9ucy5kZWxldGVEaXJlY3RvcmllcyB8fCBbXTtcbiAgICBjb25zdCB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMgPSBvcHRpb25zLnVwZGF0ZURpcmVjdG9yaWVzIHx8IFtdO1xuXG4gICAgY29uc3QgZGVsZXRlRmlsZXNPcHRpb25zID0gb3B0aW9ucy5kZWxldGVGaWxlcyB8fCBbXTtcbiAgICBjb25zdCB1cGRhdGVGaWxlc09wdGlvbnMgPSBvcHRpb25zLnVwZGF0ZUZpbGVzIHx8IFtdO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyB1cGRhdGUgZGlyZWN0b3JpZXNcbiAgICBtYXBFZGdlcyhleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJEaXJlY3RvcmllcykuZm9yRWFjaChcbiAgICAgIChleGlzdGluZ0RpcmVjdG9yeSkgPT4ge1xuICAgICAgICBpZiAoZGVsZXRlRGlyZWN0b3JpZXNPcHRpb25zLmluY2x1ZGVzKGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT4geC5kaXJlY3RvcnlJZCA9PT0gZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmlkXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMucHVzaCh7XG4gICAgICAgICAgYWNjZXNzUm9sZTogZXhpc3RpbmdEaXJlY3RvcnkuYWNjZXNzUm9sZSxcbiAgICAgICAgICBkaXJlY3RvcnlJZDogZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmlkLFxuICAgICAgICAgIGRpcmVjdG9yeUtleUlkOiBleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3Rvcnkua2V5SWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjpcbiAgICAgICAgICAgIGV4aXN0aW5nRGlyZWN0b3J5LnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHVwZGF0ZSBmaWxlc1xuICAgIG1hcEVkZ2VzKGV4aXN0aW5nUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckZpbGVzKS5mb3JFYWNoKFxuICAgICAgKGV4aXN0aW5nRmlsZSkgPT4ge1xuICAgICAgICBpZiAoZGVsZXRlRmlsZXNPcHRpb25zLmluY2x1ZGVzKGV4aXN0aW5nRmlsZS5maWxlLmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGVGaWxlc09wdGlvbnMuZmluZCgoeCkgPT4geC5maWxlSWQgPT09IGV4aXN0aW5nRmlsZS5maWxlLmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUZpbGVzT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBhY2Nlc3NSb2xlOiBleGlzdGluZ0ZpbGUuYWNjZXNzUm9sZSxcbiAgICAgICAgICBmaWxlSWQ6IGV4aXN0aW5nRmlsZS5maWxlLmlkLFxuICAgICAgICAgIGZpbGVLZXlJZDogZXhpc3RpbmdGaWxlLmZpbGUua2V5SWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjogZXhpc3RpbmdGaWxlLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB7IHNoYXJlZEtleSwgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgICBvcHRpb25zLFxuICAgICAgc2hhcmVkS2V5SWRcbiAgICApO1xuXG4gICAgY29uc3QgYWRkRGlyZWN0b3JpZXMgPVxuICAgICAgb3B0aW9ucy5hZGREaXJlY3RvcmllcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IGFkZEZpbGVzID1cbiAgICAgIG9wdGlvbnMuYWRkRmlsZXMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5hZGRGaWxlcy5tYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5wcmVwYXJlQWRkUmVjZWl2ZXJGaWxlKHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5tYXAoKHgpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpbGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB1cGRhdGVGaWxlc09wdGlvbnMubWFwKCh4KSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlckZpbGUoeCwgc2hhcmVkS2V5LCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm11dGF0aW9uSW5wdXQsXG4gICAgICBhZGREaXJlY3RvcmllcyxcbiAgICAgIGFkZEZpbGVzLFxuICAgICAgdXBkYXRlRGlyZWN0b3JpZXMsXG4gICAgICB1cGRhdGVGaWxlcyxcbiAgICAgIGRlbGV0ZURpcmVjdG9yaWVzOiBvcHRpb25zLmRlbGV0ZURpcmVjdG9yaWVzLFxuICAgICAgZGVsZXRlRmlsZXM6IG9wdGlvbnMuZGVsZXRlRmlsZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXIoXG4gICAgZXhpc3RpbmdSZWNlaXZlcjogU2NlbmFyaW9SZWNlaXZlck5vZGUsXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXMgPSBtYXBFZGdlcyhcbiAgICAgIGV4aXN0aW5nUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckRpcmVjdG9yaWVzXG4gICAgKS5tYXAoKHsgYWNjZXNzUm9sZSwgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbiwgZGlyZWN0b3J5IH0pID0+ICh7XG4gICAgICBhY2Nlc3NSb2xlLFxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICBkaXJlY3RvcnlLZXlJZDogZGlyZWN0b3J5LmtleUlkLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpbGVzID0gbWFwRWRnZXMoXG4gICAgICBleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJGaWxlc1xuICAgICkubWFwKCh7IGFjY2Vzc1JvbGUsIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sIGZpbGUgfSkgPT4gKHtcbiAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgZmlsZUlkOiBmaWxlLmlkLFxuICAgICAgZmlsZUtleUlkOiBmaWxlLmtleUlkLFxuICAgIH0pKTtcblxuICAgIC8vIEZpbGwgaXQgaW4gd2l0aCBleGlzdGluZyByZWNlaXZlci5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgICB7XG4gICAgICAgIHRwSWQ6IGV4aXN0aW5nUmVjZWl2ZXIudHAuaWQsXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb246IGV4aXN0aW5nUmVjZWl2ZXIuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXMsXG4gICAgICAgIHVwZGF0ZUZpbGVzLFxuICAgICAgfSxcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgZXhpc3RpbmdSZWNlaXZlclxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVFeGlzdGluZ1JlY2VpdmVycyhcbiAgICBleGlzdGluZ1JlY2VpdmVyczogU2NlbmFyaW9SZWNlaXZlck5vZGVbXSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBleGlzdGluZ1JlY2VpdmVycy5tYXAoKGV4aXN0aW5nUmVjZWl2ZXIpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXIoZXhpc3RpbmdSZWNlaXZlciwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9ucykge1xuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFdpdGhOZXdLZXkoXG4gICAgICBvcHRpb25zLnRwU2hhcmVkS2V5SWQsXG4gICAgICBvcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRLZXksXG4gICAgICBtdXRhdGlvbklucHV0OiB7XG4gICAgICAgIHRwSWQ6IG9wdGlvbnMudHBJZCxcbiAgICAgICAgdHBTaGFyZWRLZXlJZDogb3B0aW9ucy50cFNoYXJlZEtleUlkLFxuICAgICAgICB0cFNoYXJlZEtleVdyYXBwZWRTaGFyZWRLZXk6IHNoYXJlZEtleS53cmFwcGVkS2V5LFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhOiBzaGFyZWRLZXkuY2lwaGVyLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgb3B0aW9uczogUGFydGljaXBhbnRPcHRpb25zLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoc2hhcmVkS2V5SWQpO1xuXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgb3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRLZXksXG4gICAgICBtdXRhdGlvbklucHV0OiB7XG4gICAgICAgIHRwSWQ6IG9wdGlvbnMudHBJZCxcbiAgICAgICAgc2hhcmVkS2V5SWQsXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGEsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVDbGFpbWFudChvcHRpb25zOiBDcmVhdGVDbGFpbWFudE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KG9wdGlvbnMpO1xuICAgIHJldHVybiBtdXRhdGlvbklucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlQ2xhaW1hbnQoXG4gICAgb3B0aW9uczogVXBkYXRlQ2xhaW1hbnRPcHRpb25zLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgeyBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzaGFyZWRLZXlJZFxuICAgICk7XG5cbiAgICByZXR1cm4gbXV0YXRpb25JbnB1dDtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVSZWNlaXZlQ2xhaW0yKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgLy8gR2V0IGFsbCB0aGUgc2hhcmVkIGl0ZW1zXG4gICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpXG4gICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAgIGlmIChzaGFyZWRTY2VuYXJpby5zdGF0ZSAhPT0gU2NlbmFyaW9TdGF0ZS5BUFBST1ZFRCkge1xuICAgICAgdGhyb3dDbGFpbU5vdEFwcHJvdmVkKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwcm92YWxzID0gbWFwRWRnZXMoXG4gICAgICBzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5hc0NsYWltUmVjZWl2ZXIuYXBwcm92YWxzXG4gICAgKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5yZWNvdmVyQXNzZW1ibHlLZXkoYXBwcm92YWxzKTtcblxuICAgIC8vIFdyYXAgYXNzZW1ibHkga2V5IHdpdGggc2hhcmVkIGtleS5cbiAgICAvLz8/P1xuICAgIC8vIFRoaXMgc2hhcmVkS2V5IGlzIGNyZWF0ZWQganVzdCBmb3IgdGhpcyBzY2VuYXJpby4gSXQncyB3cmFwcGVkIGJ5IHRoZSB0cFNoYXJlZEtleS5cbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShcbiAgICAgIHNoYXJlZFNjZW5hcmlvLmFzUmVjZWl2ZXIuc2hhcmVkS2V5LmlkXG4gICAgKTtcblxuICAgIGNvbnN0IHNoYXJlZEtleVdyYXBwZWRBc3NlbWJseUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgYXNzZW1ibHlLZXkudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzY2VuYXJpb0NsYWltSWQ6IHNoYXJlZENsYWltSWQsXG4gICAgICBzaGFyZWRLZXlXcmFwcGVkQXNzZW1ibHlLZXksXG4gICAgICBzaGFyZWRLZXlJZDogc2hhcmVkS2V5LmlkLFxuICAgICAgYXNzZW1ibHlLZXlJZDogc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uYXNDbGFpbVJlY2VpdmVyLmFzc2VtYmx5S2V5SWQsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGFzeW5jIHByZXBhcmVSZWNlaXZlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgLy8gICAvLyBHZXQgYWxsIHRoZSBzaGFyZWQgaXRlbXNcbiAgLy8gICBjb25zdCBzaGFyZWRTY2VuYXJpbyA9IChcbiAgLy8gICAgIGF3YWl0IHRoaXMuZ2V0U2hhcmVkU2NlbmFyaW8oc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZClcbiAgLy8gICApLnNoYXJlZFNjZW5hcmlvO1xuXG4gIC8vICAgaWYgKHNoYXJlZFNjZW5hcmlvLnN0YXRlICE9PSBTY2VuYXJpb1N0YXRlLkFQUFJPVkVEKSB7XG4gIC8vICAgICB0aHJvd0NsYWltTm90QXBwcm92ZWQoKTtcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCBhcHByb3ZhbHMgPSBtYXBFZGdlcyhcbiAgLy8gICAgIHNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmFzQ2xhaW1SZWNlaXZlci5hcHByb3ZhbHNcbiAgLy8gICApO1xuXG4gIC8vICAgY29uc3QgYXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLnJlY292ZXJBc3NlbWJseUtleShhcHByb3ZhbHMpO1xuXG4gIC8vICAgLy8gRGVjcnlwdCBhbGwgaXRlbXNcbiAgLy8gICBjb25zdCByZWNlaXZlckRpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gIC8vICAgICBzaGFyZWRTY2VuYXJpby5hc1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJEaXJlY3Rvcmllcy5lZGdlc1xuICAvLyAgICAgICAubWFwKChlZGdlKSA9PiBlZGdlLm5vZGUpXG4gIC8vICAgICAgIC5tYXAoYXN5bmMgKHJlY2VpdmVyRGlyZWN0b3J5KSA9PiB7XG4gIC8vICAgICAgICAgY29uc3Qgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gIC8vICAgICAgICAgICBhc3NlbWJseUtleSxcbiAgLy8gICAgICAgICAgIHJlY2VpdmVyRGlyZWN0b3J5LndyYXBwZWRJdGVtS2V5XG4gIC8vICAgICAgICAgKTtcblxuICAvLyAgICAgICAgIHJldHVybiB7XG4gIC8vICAgICAgICAgICByZWNlaXZlckRpcmVjdG9yeUlkOiByZWNlaXZlckRpcmVjdG9yeS5pZCxcbiAgLy8gICAgICAgICAgIC8vIExvb2tzIGxpa2UgcmVjZWl2ZXJEaXJlY3Rvcnkud3JhcHBlZEl0ZW1LZXkgaGFzIG5vIG90aGVyIGNvbnRlbnQgaW4gc2lkZSBpdCBleGNlcHQgYSB3cmFwcGVkIGtleS5cbiAgLy8gICAgICAgICAgIC8vIFNvIHdlIGNhbiB0dXJuIHRoaXMgaW4gdG8gYSBkb3VibHkgd3JhcHBlZCBrZXkgYW5kIGp1c3QgcmVsZWFzZSB0aGUgYXNzZW1ibHkga2V5LlxuXG4gIC8vICAgICAgICAgICByZWNlaXZlclNoYXJlZEtleVdyYXBwZWRJdGVtS2V5OiB3cmFwcGVkSXRlbUtleSwgLy8gdGhlIHdyYXBwZWRJdGVtS2V5IGlzIGFscmVhZHkgd3JhcHBlZCBieSByZWNlaXZlclNoYXJlZEtleVxuICAvLyAgICAgICAgIH07XG4gIC8vICAgICAgIH0pXG4gIC8vICAgKTtcblxuICAvLyAgIHJldHVybiB7XG4gIC8vICAgICBzY2VuYXJpb0NsYWltSWQ6IHNoYXJlZENsYWltSWQsXG4gIC8vICAgICByZWNlaXZlckRpcmVjdG9yaWVzLFxuICAvLyAgIH07XG4gIC8vIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY292ZXJBc3NlbWJseUtleShcbiAgICBhcHByb3ZhbHM6IFNoYXJlZFNjZW5hcmlvQ2xhaW1SZWNlaXZlZEFwcHJvdmFsTm9kZVtdXG4gICkge1xuICAgIGNvbnN0IHBhcnRpYWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhcHByb3ZhbHMubWFwKChhcHByb3ZhbCkgPT5cbiAgICAgICAgdGhpcy5rZXlHcmFwaC5kZWNyeXB0RnJvbVN0cmluZzxQYXJ0aWFsQXNzZW1ibHlLZXk+KFxuICAgICAgICAgIGFwcHJvdmFsLnB4ay5pZCxcbiAgICAgICAgICBhcHByb3ZhbC5yZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5yZWNvdmVyQXNzZW1ibHlLZXkocGFydGlhbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhc0NsYWltQXBwcm92ZXJzKFxuICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgY2xhaW1JZCxcbiAgICBzdGF0ZTogVHBDbGFpbUFwcHJvdmVyU3RhdGVcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNoYXJlZFNjZW5hcmlvSWQsIGNsYWltSWQpXG4gICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAgIHJldHVybiBtYXBFZGdlcyhzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5jbGFpbS5hc0NsYWltQXBwcm92ZXJzKS5maWx0ZXIoXG4gICAgICAoYXNDbGFpbUFwcHJvdmVyKSA9PiBhc0NsYWltQXBwcm92ZXIuc3RhdGUgPT09IHN0YXRlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVDbGFpbU11dGF0aW9ucyhcbiAgICBzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsXG4gICAgY2xhaW1JZDogc3RyaW5nXG4gICkge1xuICAgIC8vIFRoZSBjdXJyZW50IHVzZXIgbWF5IGJlIGFjdGluZyBhcyBhcHByb3ZlcnMgaW4gbXVsdGlwbGUgc3ViLWFzc2VtYmxpZXMgc29cbiAgICAvLyB3ZSBhcHByb3ZlIHRoZW0gYWxsLlxuICAgIGNvbnN0IGFzQ2xhaW1BcHByb3ZlcnMgPSBhd2FpdCB0aGlzLmFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZCxcbiAgICAgIFRwQ2xhaW1BcHByb3ZlclN0YXRlLkNMQUlNRURcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzQ2xhaW1BcHByb3ZlcnMubWFwKFxuICAgICAgYXN5bmMgKGFzQ2xhaW1BcHByb3ZlcikgPT5cbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBBcHByb3ZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUFwcHJvdmVDbGFpbShhc0NsYWltQXBwcm92ZXIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVDbGFpbShcbiAgICBhc0NsYWltQXBwcm92ZXI6IFNoYXJlZFRwQ2xhaW1BcHByb3Zlck5vZGVcbiAgKSB7XG4gICAgY29uc3QgcmVjZWl2ZXJBcHByb3ZhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1hcEVkZ2VzKGFzQ2xhaW1BcHByb3Zlci5yZWNlaXZlckFwcHJvdmFscykubWFwKChyZWNlaXZlckFwcHJvdmFsKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVSZWNlaXZlckFwcHJvdmFsKHtcbiAgICAgICAgICByZWNlaXZlckFwcHJvdmFsSWQ6IHJlY2VpdmVyQXBwcm92YWwuaWQsXG4gICAgICAgICAgcmVjZWl2ZXJBcHByb3ZhbFB4a0lkOiByZWNlaXZlckFwcHJvdmFsLnB4ay5pZCxcbiAgICAgICAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb246XG4gICAgICAgICAgICBhc0NsYWltQXBwcm92ZXIuc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhaW1BcHByb3ZlcklkOiBhc0NsYWltQXBwcm92ZXIuaWQsXG4gICAgICByZWNlaXZlckFwcHJvdmFscyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJBcHByb3ZhbChvcHRpb25zOiB7XG4gICAgcmVjZWl2ZXJBcHByb3ZhbElkOiBzdHJpbmc7XG4gICAgcmVjZWl2ZXJBcHByb3ZhbFB4a0lkOiBzdHJpbmc7XG4gICAgc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uOiBKU09OT2JqZWN0O1xuICB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2VpdmVyQXBwcm92YWxJZDogb3B0aW9ucy5yZWNlaXZlckFwcHJvdmFsSWQsXG4gICAgICAvLyBUT0RPIGFsbG93IHNlbmRpbmcgb2YgbWVzc2FnZXMgdG8gcmVjZWl2ZXIuXG4gICAgICByZWNlaXZlckNpcGhlcjogJycsXG4gICAgICByZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIG9wdGlvbnMucmVjZWl2ZXJBcHByb3ZhbFB4a0lkLFxuICAgICAgICBvcHRpb25zLnNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvblxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVqZWN0Q2xhaW1NdXRhdGlvbnMoXG4gICAgc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLFxuICAgIGNsYWltSWQ6IHN0cmluZ1xuICApIHtcbiAgICAvLyBUaGUgY3VycmVudCB1c2VyIG1heSBiZSBhY3RpbmcgYXMgYXBwcm92ZXJzIGluIG11bHRpcGxlIHN1Yi1hc3NlbWJsaWVzIHNvXG4gICAgLy8gd2UgcmVqZWN0IHRoZW0gYWxsLlxuICAgIGNvbnN0IGFzQ2xhaW1BcHByb3ZlcnMgPSBhd2FpdCB0aGlzLmFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZCxcbiAgICAgIFRwQ2xhaW1BcHByb3ZlclN0YXRlLkNMQUlNRURcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzQ2xhaW1BcHByb3ZlcnMubWFwKFxuICAgICAgYXN5bmMgKGFzQ2xhaW1BcHByb3ZlcikgPT5cbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBSZWplY3RTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpbnB1dDogeyBjbGFpbUFwcHJvdmVySWQ6IGFzQ2xhaW1BcHByb3Zlci5pZCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
679
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zY2VuYXJpby9zY2VuYXJpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLFFBQVEsRUFHUixhQUFhLEVBR2Isb0JBQW9CLEdBRXJCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXRFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN0QixnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0Isc0JBQXNCLEdBQ3ZCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFF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Q0YsQ0FBQztRQUNKLENBQUM7S0FBQTtJQUVhLDJCQUEyQixDQUN2QyxnQkFBd0IsRUFDeEIsT0FBZTs7WUFFZiw0RUFBNEU7WUFDNUUsc0JBQXNCO1lBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQ2xELGdCQUFnQixFQUNoQixPQUFPLEVBQ1Asb0JBQW9CLENBQUMsT0FBTyxDQUM3QixDQUFDO1lBRUYsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQ3pCLENBQU8sZUFBZSxFQUFFLEVBQUU7Z0JBQ3hCLE9BQUEsSUFBSSxVQUFVLENBQUM7b0JBQ2IsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFO3FCQUMvQztpQkFDRixDQUFDLENBQUE7Y0FBQSxDQUNMLENBQUM7UUFDSixDQUFDO0tBQUE7Q0FDRixDQUFBO0FBLzRCZSxpQ0FBaUIsR0FBRyxXQUFXLENBQUM7OztZQWQvQyxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQXRFOEIsTUFBTTtZQUFoQixRQUFRO1lBa0JwQixlQUFlO1lBRmYsV0FBVztZQVdYLDBCQUEwQjtZQVoxQixpQkFBaUI7O0FBd0RiLGVBQWU7SUFOM0IsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLGVBQWUsQ0EwNUIzQjtTQTE1QlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XG5pbXBvcnQgeyBMck1lcmdlZE11dGF0aW9uLCBMck11dGF0aW9uLCBMclNlcnZpY2UgfSBmcm9tICcuLi9hcGkvbHItZ3JhcGhxbCc7XG5pbXBvcnQge1xuICBBY2Nlc3NSb2xlQ2hvaWNlLFxuICBKU09OT2JqZWN0LFxuICBtYXBFZGdlcyxcbiAgU2NlbmFyaW9Ob2RlLFxuICBTY2VuYXJpb1JlY2VpdmVyTm9kZSxcbiAgU2NlbmFyaW9TdGF0ZSxcbiAgU2hhcmVkU2NlbmFyaW9DbGFpbVJlY2VpdmVkQXBwcm92YWxOb2RlLFxuICBTaGFyZWRUcENsYWltQXBwcm92ZXJOb2RlLFxuICBUcENsYWltQXBwcm92ZXJTdGF0ZSxcbiAgVHBOb2RlLFxufSBmcm9tICcuLi9hcGkvdHlwZXMnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9lbmNyeXB0aW9uL2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJdGVtU2VydmljZSB9IGZyb20gJy4uL2l0ZW0vaXRlbS5zZXJ2aWNlJztcbmltcG9ydCB7IElkS2V5UGFpciB9IGZyb20gJy4uL2l0ZW0vaXRlbS50eXBlcyc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHBzS2V5c1F1ZXJ5IH0gZnJvbSAnLi4vdHAtYXNzZW1ibHkvdHAtYXNzZW1ibHkucHJpdmF0ZS5ncWwnO1xuaW1wb3J0IHsgUGFydGlhbEFzc2VtYmx5S2V5IH0gZnJvbSAnLi4vdHAtYXNzZW1ibHkvdHAtYXNzZW1ibHkudHlwZXMnO1xuaW1wb3J0IHtcbiAgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbixcbiAgS2NCYWRTdGF0ZUV4Y2VwdGlvbixcbn0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7IGFzc2VydEV4YWN0bHlPbmUgfSBmcm9tICcuLi9fY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IFNjZW5hcmlvQXNzZW1ibHlDb250cm9sbGVyIH0gZnJvbSAnLi9zY2VuYXJpby5jb250cm9sbGVyJztcbmltcG9ydCB7XG4gIEFwcHJvdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIENhbmNlbFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgQ3JlYXRlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBDcmVhdGVTY2VuYXJpb011dGF0aW9uLFxuICBEZWJ1Z0V4cGlyZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgRGVsZXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgUmVjZWl2ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgUmVqZWN0U2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBVcGRhdGVTY2VuYXJpb011dGF0aW9uLFxufSBmcm9tICcuL3NjZW5hcmlvLmdxbCc7XG5pbXBvcnQgeyBTY2VuYXJpb1F1ZXJ5LCBTaGFyZWRTY2VuYXJpb1F1ZXJ5IH0gZnJvbSAnLi9zY2VuYXJpby5wcml2YXRlLmdxbCc7XG5pbXBvcnQge1xuICBDcmVhdGVDbGFpbWFudE9wdGlvbnMsXG4gIENyZWF0ZVBhcnRpY2lwYW50T3B0aW9ucyxcbiAgQ3JlYXRlUmVjZWl2ZXJPcHRpb25zLFxuICBDcmVhdGVTY2VuYXJpb09wdGlvbnMsXG4gIFBhcnRpY2lwYW50T3B0aW9ucyxcbiAgUmVjZWl2ZXJEaXJlY3RvcnlPcHRpb25zLFxuICBSZWNlaXZlckZpbGVPcHRpb25zLFxuICBSZWNlaXZlckl0ZW1PcHRpb25zLFxuICBSZXNldFNjZW5hcmlvT3B0aW9ucyxcbiAgVXBkYXRlQ2xhaW1hbnRPcHRpb25zLFxuICBVcGRhdGVSZWNlaXZlck9wdGlvbnMsXG4gIFVwZGF0ZVNjZW5hcmlvT3B0aW9ucyxcbn0gZnJvbSAnLi9zY2VuYXJpby50eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0NsYWltSWRNaXNtYXRjaCgpIHtcbiAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgJ2NsYWltSWQgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgY3VycmVudCBjbGFpbUlkIG9mIHRoZSBzY2VuYXJpbydcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93Q2xhaW1Ob3RBcHByb3ZlZCgpIHtcbiAgdGhyb3cgbmV3IEtjQmFkU3RhdGVFeGNlcHRpb24oJ1NjZW5hcmlvIGNsYWltIGhhcyBub3QgYmVlbiBhcHByb3ZlZCcpO1xufVxuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NlbmFyaW9TZXJ2aWNlIGV4dGVuZHMgTHJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhc3NlbWJseUNvbnRyb2xsZXI6IFNjZW5hcmlvQXNzZW1ibHlDb250cm9sbGVyLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIFNMSVAzOV9QQVNTUEhSQVNFID0gJ2xpZmVyZWFkeSc7XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQWRkUmVjZWl2ZXJEaXJlY3RvcnkgPSB0aGlzLnByZXBhcmVSZWNlaXZlckRpcmVjdG9yeTtcbiAgcHJpdmF0ZSBwcmVwYXJlVXBkYXRlUmVjZWl2ZXJEaXJlY3RvcnkgPSB0aGlzLnByZXBhcmVSZWNlaXZlckRpcmVjdG9yeTtcblxuICBwcml2YXRlIHByZXBhcmVBZGRSZWNlaXZlckZpbGUgPSB0aGlzLnByZXBhcmVSZWNlaXZlckZpbGU7XG4gIHByaXZhdGUgcHJlcGFyZVVwZGF0ZVJlY2VpdmVyRmlsZSA9IHRoaXMucHJlcGFyZVJlY2VpdmVyRmlsZTtcblxuICAvLyBTY2VuYXJpb3NcbiAgYXN5bmMgY3JlYXRlU2NlbmFyaW8ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IENyZWF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZVNjZW5hcmlvTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlU2NlbmFyaW8ob3B0aW9uczogVXBkYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IHNjZW5hcmlvID0gKGF3YWl0IHRoaXMuZ2V0U2NlbmFyaW8ob3B0aW9ucy5zY2VuYXJpb0lkKSkuc2NlbmFyaW87XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVTY2VuYXJpbyhvcHRpb25zLCBzY2VuYXJpbyk7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVTY2VuYXJpb011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0U2NlbmFyaW8ob3B0aW9uczogUmVzZXRTY2VuYXJpb09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZXNldFNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IFJlc2V0U2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3Qgc2NlbmFyaW8gPSAoYXdhaXQgdGhpcy5nZXRTY2VuYXJpbyhvcHRpb25zLnNjZW5hcmlvSWQpKS5zY2VuYXJpbztcblxuICAgIGNvbnN0IHsgYXNzZW1ibHkgfSA9IHNjZW5hcmlvO1xuXG4gICAgLy8gSnVzdCBuZWVkIHRvIGRvIGFuIHVwZGF0ZSB3aXRob3V0IGNoYW5naW5nIGFwcHJvdmVycy4gVGhpcyB3aWxsIHJlY3JlYXRlXG4gICAgLy8gYWxsIGFzc2VtYmx5IGtleXMuXG4gICAgY29uc3QgdXBkYXRlU3ViQXNzZW1ibGllcyA9IG1hcEVkZ2VzKGFzc2VtYmx5LnN1YkFzc2VtYmxpZXMpLm1hcCgoc2EpID0+IHtcbiAgICAgIGNvbnN0IGFwcHJvdmVyVHBzID0gbWFwRWRnZXMoc2EuYXBwcm92ZXJzKS5tYXAoKGFwcHJvdmVyKSA9PiAoe1xuICAgICAgICB0cElkOiBhcHByb3Zlci50cC5pZCxcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHNhLmlkLFxuICAgICAgICBxdW9ydW06IHNhLnF1b3J1bSxcbiAgICAgICAgc2luZ2xlUmVqZWN0OiBzYS5zaW5nbGVSZWplY3QsXG4gICAgICAgIHN1YmplY3RDaXBoZXJEYXRhQ2xlYXJKc29uOiBzYS5zdWJqZWN0Q2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgYXBwcm92ZXJUcHMsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVTY2VuYXJpbyhcbiAgICAgIHtcbiAgICAgICAgc2NlbmFyaW9JZDogb3B0aW9ucy5zY2VuYXJpb0lkLFxuICAgICAgICBlbmFibGVkOiBvcHRpb25zLmVuYWJsZWQsXG4gICAgICAgIHVwZGF0ZUFzc2VtYmx5OiB7XG4gICAgICAgICAgcXVvcnVtOiBhc3NlbWJseS5xdW9ydW0sXG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBhc3NlbWJseS5zaW5nbGVSZWplY3QsXG4gICAgICAgICAgdXBkYXRlU3ViQXNzZW1ibGllcyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzY2VuYXJpb1xuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVNjZW5hcmlvTXV0YXRpb24sIC8vIHVwZGF0aW5nIHNjZW5hcmlvIHJlc2V0cyBpdFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNjZW5hcmlvKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5sck11dGF0ZSh0aGlzLmRlbGV0ZVNjZW5hcmlvTXV0YXRpb24oc2NlbmFyaW9JZCkpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2NlbmFyaW9NdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZVNjZW5hcmlvTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQ6IHsgc2NlbmFyaW9JZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBDbGFpbXNcbiAgYXN5bmMgY3JlYXRlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ3JlYXRlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IHNjZW5hcmlvSWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsQ2xhaW0oY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2FuY2VsQ2xhaW1NdXRhdGlvbihjbGFpbUlkKSk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxDbGFpbU11dGF0aW9uKGNsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ2FuY2VsU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IGNsYWltSWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVqZWN0Q2xhaW0oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZWplY3RDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQsIGNsYWltSWQpKTtcbiAgfVxuXG4gIGFzeW5jIHJlamVjdENsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtdXRhdGlvbnMgPSBhd2FpdCB0aGlzLnByZXBhcmVSZWplY3RDbGFpbU11dGF0aW9ucyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBjbGFpbUlkXG4gICAgKTtcbiAgICByZXR1cm4gTHJNZXJnZWRNdXRhdGlvbi5jcmVhdGUoYXdhaXQgUHJvbWlzZS5hbGwobXV0YXRpb25zKSk7XG4gIH1cblxuICBhc3luYyBhcHByb3ZlQ2xhaW0oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICAvLyBUT0RPIHRoaXMgbmVlZHMgYSBjYXN0IHNvIHRoZSByZXN1bHQgaXMgbm90IEFOWS5cbiAgICByZXR1cm4gdGhpcy5tdXRhdGUoXG4gICAgICB0aGlzLmFwcHJvdmVDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFwcHJvdmVDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbXV0YXRpb25zID0gYXdhaXQgdGhpcy5wcmVwYXJlQXBwcm92ZUNsYWltTXV0YXRpb25zKFxuICAgICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICAgIHNoYXJlZENsYWltSWRcbiAgICApO1xuICAgIHJldHVybiBMck1lcmdlZE11dGF0aW9uLmNyZWF0ZShhd2FpdCBQcm9taXNlLmFsbChtdXRhdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJlY2VpdmVDbGFpbTJNdXRhdGlvbihzY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKSk7XG4gIH1cblxuICBhc3luYyByZWNlaXZlQ2xhaW0yTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFJlY2VpdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZVJlY2VpdmVDbGFpbTIoc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZCksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVidWdFeHBpcmVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWJ1Z0V4cGlyZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZCkpO1xuICB9XG5cbiAgYXN5bmMgZGVidWdFeHBpcmVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVidWdFeHBpcmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHsgc2NlbmFyaW9JZCB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSBhc3luYyBnZXRTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSh7XG4gICAgICBxdWVyeTogU2NlbmFyaW9RdWVyeSxcbiAgICAgIHZhcmlhYmxlczogeyBzY2VuYXJpb0lkIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFNoYXJlZFNjZW5hcmlvKHNjZW5hcmlvSWQ6IHN0cmluZywgY2xhaW1JZD86IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgcXVlcnk6IFNoYXJlZFNjZW5hcmlvUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgc2NlbmFyaW9JZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoY2xhaW1JZCAmJiByZXQuc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uaWQgIT09IGNsYWltSWQpIHtcbiAgICAgIHRocm93Q2xhaW1JZE1pc21hdGNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UGFydGljaXBhbnRUcHNLZXlzKG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9uc1tdKSB7XG4gICAgY29uc3QgdHBJZHMgPSBvcHRpb25zLm1hcCgoeCkgPT4geC50cElkKTtcblxuICAgIC8vIFRoaXMgc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSBUUHMgdGhhdCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYXNzZW1ibHkuXG4gICAgY29uc3QgdHBzID0gbWFwRWRnZXMoXG4gICAgICAoXG4gICAgICAgIGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgICAgICBxdWVyeTogVHBzS2V5c1F1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgaWRzOiB0cElkcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKS50cHNcbiAgICApO1xuXG4gICAgcmV0dXJuIHRwcztcbiAgfVxuXG4gIHByaXZhdGUgZmlsbFRwU2hhcmVkS2V5SWQoXG4gICAgb3B0aW9uczogQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zW10sXG4gICAgdHBzOiBUcE5vZGVbXVxuICApIHtcbiAgICBvcHRpb25zLmZvckVhY2goKHBhcnRpY2lwYW50KSA9PiB7XG4gICAgICBpZiAoIXBhcnRpY2lwYW50LnRwU2hhcmVkS2V5SWQpIHtcbiAgICAgICAgY29uc3QgdHAgPSB0cHMuZmluZCgoeCkgPT4geC5pZCA9PT0gcGFydGljaXBhbnQudHBJZCk7XG4gICAgICAgIHBhcnRpY2lwYW50LnRwU2hhcmVkS2V5SWQgPVxuICAgICAgICAgIHRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBDcmVhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCB7IGFzc2VtYmx5S2V5LCBtdXRhdGlvbklucHV0OiBjcmVhdGVBc3NlbWJseSB9ID1cbiAgICAgIGF3YWl0IHRoaXMuYXNzZW1ibHlDb250cm9sbGVyLnByZXBhcmVDcmVhdGUob3B0aW9ucy5jcmVhdGVBc3NlbWJseSk7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgfHwgW107XG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzIHx8IFtdO1xuXG4gICAgLy8gRmV0Y2ggYWxsIHRoZSBUUHMgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGluIHRwU2hhcmVkS2V5SWRcbiAgICBjb25zdCBjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMgPSBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLmNvbmNhdChcbiAgICAgIGNyZWF0ZUNsYWltYW50c09wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgdHBzID0gYXdhaXQgdGhpcy5nZXRQYXJ0aWNpcGFudFRwc0tleXMoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zKTtcblxuICAgIHRoaXMuZmlsbFRwU2hhcmVkS2V5SWQoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zLCB0cHMpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLm1hcCgocmVjZWl2ZXIpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZUNyZWF0ZVJlY2VpdmVyKHJlY2VpdmVyLCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjcmVhdGVDbGFpbWFudHNPcHRpb25zLm1hcCgoeCkgPT4gdGhpcy5wcmVwYXJlQ3JlYXRlQ2xhaW1hbnQoeCkpXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBlbmFibGVkOiBvcHRpb25zLmVuYWJsZWQsXG4gICAgICBpbmFjdGl2ZVNlY29uZHM6IG9wdGlvbnMuaW5hY3RpdmVTZWNvbmRzLFxuICAgICAgY3JlYXRlQXNzZW1ibHksXG4gICAgICBjcmVhdGVSZWNlaXZlcnMsXG4gICAgICBjcmVhdGVDbGFpbWFudHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVNjZW5hcmlvKFxuICAgIG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucyxcbiAgICBzY2VuYXJpbzogU2NlbmFyaW9Ob2RlXG4gICkge1xuICAgIGxldCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KFxuICAgICAgc2NlbmFyaW8uYXNzZW1ibHkuYXNzZW1ibHlLZXkuaWRcbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlQXNzZW1ibHkgPSBvcHRpb25zLnVwZGF0ZUFzc2VtYmx5XG4gICAgICA/IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXNzZW1ibHkga2V5IGlzIGFsd2F5cyByb3RhdGVkIHdoZW4gdXBkYXRpbmcgYXNzZW1ibHkuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hc3NlbWJseUNvbnRyb2xsZXIucHJlcGFyZVVwZGF0ZShcbiAgICAgICAgICAgIG9wdGlvbnMudXBkYXRlQXNzZW1ibHksXG4gICAgICAgICAgICBzY2VuYXJpby5hc3NlbWJseVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gVXNlIG5ldyBhc3NlbWJseSBrZXkuXG4gICAgICAgICAgYXNzZW1ibHlLZXkgPSByZXN1bHQuYXNzZW1ibHlLZXk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5tdXRhdGlvbklucHV0O1xuICAgICAgICB9KSgpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZVJlY2VpdmVycyB8fCBbXTtcbiAgICBjb25zdCBjcmVhdGVDbGFpbWFudHNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVDbGFpbWFudHMgfHwgW107XG5cbiAgICAvLyBGZXRjaCBhbGwgdGhlIFRQcyBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgaW4gdHBTaGFyZWRLZXlJZFxuICAgIGNvbnN0IGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyA9IGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMuY29uY2F0KFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCB0cHMgPSBhd2FpdCB0aGlzLmdldFBhcnRpY2lwYW50VHBzS2V5cyhjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMpO1xuXG4gICAgdGhpcy5maWxsVHBTaGFyZWRLZXlJZChjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMsIHRwcyk7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnMgPVxuICAgICAgb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUNyZWF0ZVJlY2VpdmVyKHgsIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nUmVjZWl2ZXJzID0gbWFwRWRnZXMoc2NlbmFyaW8ucmVjZWl2ZXJzKTtcbiAgICBsZXQgdXBkYXRlUmVjZWl2ZXJzID0gb3B0aW9ucy51cGRhdGVSZWNlaXZlcnNcbiAgICAgID8gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgb3B0aW9ucy51cGRhdGVSZWNlaXZlcnMubWFwKCh1cGRhdGVSZWNlaXZlcikgPT4ge1xuICAgICAgICAgICAgLy8gRmluZCB0aGUgcmVjZWl2ZXIgd2UgYXJlIHVwZGF0aW5nXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1JlY2VpdmVyID0gZXhpc3RpbmdSZWNlaXZlcnMuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHgudHAuaWQgPT09IHVwZGF0ZVJlY2VpdmVyLnRwSWRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlcihcbiAgICAgICAgICAgICAgdXBkYXRlUmVjZWl2ZXIsXG4gICAgICAgICAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgICAgICAgICBleGlzdGluZ1JlY2VpdmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIDogW107XG5cbiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHJlY2VpdmVycyB3aGVuIHVwZGF0aW5nIGFzc2VtYmx5LlxuICAgIGlmIChvcHRpb25zLnVwZGF0ZUFzc2VtYmx5KSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSByZWNlaXZlcnMgdGhhdCB3aWxsIGJlIGRlbGV0ZWQgb3IgYWxyZWFkeSB1cGRhdGVkLlxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ1JlY2VpdmVycy5maWx0ZXIoXG4gICAgICAgIChleGlzdGluZ1JlY2VpdmVyKSA9PlxuICAgICAgICAgICEob3B0aW9ucy5kZWxldGVSZWNlaXZlcnMgfHwgW10pLmluY2x1ZGVzKGV4aXN0aW5nUmVjZWl2ZXIudHAuaWQpICYmXG4gICAgICAgICAgIXVwZGF0ZVJlY2VpdmVycy5zb21lKFxuICAgICAgICAgICAgKHVwZGF0ZVJlY2VpdmVyKSA9PiB1cGRhdGVSZWNlaXZlci50cElkID09PSBleGlzdGluZ1JlY2VpdmVyLnRwLmlkXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHVwZGF0ZVJlY2VpdmVycyA9IHVwZGF0ZVJlY2VpdmVycy5jb25jYXQoXG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXJzKGV4aXN0aW5nLCBhc3NlbWJseUtleSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzID1cbiAgICAgIG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzLm1hcCgoeCkgPT4gdGhpcy5wcmVwYXJlQ3JlYXRlQ2xhaW1hbnQoeCkpXG4gICAgICApKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQ2xhaW1hbnRzID0gbWFwRWRnZXMoc2NlbmFyaW8uY2xhaW1hbnRzKTtcbiAgICBjb25zdCB1cGRhdGVDbGFpbWFudHMgPVxuICAgICAgb3B0aW9ucy51cGRhdGVDbGFpbWFudHMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy51cGRhdGVDbGFpbWFudHMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgY2xhaW1hbnQgd2UgYXJlIHVwZGF0aW5nXG4gICAgICAgICAgY29uc3QgY2xhaW1hbnQgPSBleGlzdGluZ0NsYWltYW50cy5maW5kKFxuICAgICAgICAgICAgKGV4aXN0aW5nQ2xhaW1hbnQpID0+IGV4aXN0aW5nQ2xhaW1hbnQudHAuaWQgPT09IHgudHBJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZVVwZGF0ZUNsYWltYW50KHgsIGNsYWltYW50LnNoYXJlZEtleS5pZCk7XG4gICAgICAgIH0pXG4gICAgICApKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzY2VuYXJpb0lkOiBvcHRpb25zLnNjZW5hcmlvSWQsXG4gICAgICBlbmFibGVkOiBvcHRpb25zLmVuYWJsZWQsXG4gICAgICBpbmFjdGl2ZVNlY29uZHM6IG9wdGlvbnMuaW5hY3RpdmVTZWNvbmRzLFxuICAgICAgdXBkYXRlQXNzZW1ibHksXG4gICAgICBjcmVhdGVSZWNlaXZlcnMsXG4gICAgICB1cGRhdGVSZWNlaXZlcnMsXG4gICAgICBkZWxldGVSZWNlaXZlcnM6IG9wdGlvbnMuZGVsZXRlUmVjZWl2ZXJzLFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzLFxuICAgICAgdXBkYXRlQ2xhaW1hbnRzLFxuICAgICAgZGVsZXRlQ2xhaW1hbnRzOiBvcHRpb25zLmRlbGV0ZUNsYWltYW50cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJJdGVtKG9wdGlvbnM6IHtcbiAgICByZWNlaXZlckl0ZW1PcHRpb25zOiBSZWNlaXZlckl0ZW1PcHRpb25zO1xuICAgIHJlY2VpdmVyU2hhcmVkS2V5OiBKV0suS2V5O1xuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5O1xuICAgIGRpcmVjdG9yeT86IElkS2V5UGFpcjtcbiAgICBmaWxlPzogSWRLZXlQYWlyO1xuICB9KSB7XG4gICAgY29uc3Qge1xuICAgICAgcmVjZWl2ZXJJdGVtT3B0aW9ucyxcbiAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICBkaXJlY3RvcnksXG4gICAgICBmaWxlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgYXNzZXJ0RXhhY3RseU9uZSh7IGRpcmVjdG9yeSwgZmlsZSB9KTtcblxuICAgIGNvbnN0IHsgYWNjZXNzUm9sZSB9ID0gcmVjZWl2ZXJJdGVtT3B0aW9ucztcblxuICAgIGlmIChhY2Nlc3NSb2xlID09IEFjY2Vzc1JvbGVDaG9pY2UuREVOWSkge1xuICAgICAgY29uc3QgcmV0ID0ge1xuICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICBpdGVtS2V5SWQ6IG51bGwsXG4gICAgICAgIHdyYXBwZWRJdGVtS2V5OiBudWxsLFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhOiBudWxsLFxuICAgICAgfTtcblxuICAgICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgICAvLyBDcnlwdG9ncmFwaGljIGFjY2VzcyB0byBpdGVtIGlzIG5vdCByZXF1aXJlZC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXQsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSBiYXRjaGVkXG4gICAgICBsZXQgaXRlbUtleTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgaXRlbUtleSA9IGF3YWl0IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RGlyZWN0b3J5S2V5KFxuICAgICAgICAgIGRpcmVjdG9yeS5pZCxcbiAgICAgICAgICBkaXJlY3Rvcnkua2V5SWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1LZXkgPSBhd2FpdCB0aGlzLml0ZW1TZXJ2aWNlLmdldEZpbGVLZXkoZmlsZS5pZCwgZmlsZS5rZXlJZCk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgICAgaXRlbUtleS5qd2sudG9KU09OKHRydWUpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgICByZWNlaXZlckl0ZW1PcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICAgICk7XG5cbiAgICAgIHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgICB3cmFwcGVkSXRlbUtleVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmV0ID0ge1xuICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICBpdGVtS2V5SWQ6IGl0ZW1LZXkuaWQsXG4gICAgICAgIHdyYXBwZWRJdGVtS2V5LFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhLFxuICAgICAgfTtcblxuICAgICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJldCxcbiAgICAgICAgICBkaXJlY3RvcnlJZDogZGlyZWN0b3J5LmlkLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXQsXG4gICAgICAgICAgZmlsZUlkOiBmaWxlLmlkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlY2VpdmVyRGlyZWN0b3J5KFxuICAgIG9wdGlvbnM6IFJlY2VpdmVyRGlyZWN0b3J5T3B0aW9ucyxcbiAgICByZWNlaXZlclNoYXJlZEtleTogSldLLktleSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlUmVjZWl2ZXJJdGVtKHtcbiAgICAgIHJlY2VpdmVySXRlbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgZGlyZWN0b3J5OiB7XG4gICAgICAgIGlkOiBvcHRpb25zLmRpcmVjdG9yeUlkLFxuICAgICAgICBrZXlJZDogb3B0aW9ucy5kaXJlY3RvcnlLZXlJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNlaXZlckZpbGUoXG4gICAgb3B0aW9uczogUmVjZWl2ZXJGaWxlT3B0aW9ucyxcbiAgICByZWNlaXZlclNoYXJlZEtleTogSldLLktleSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlUmVjZWl2ZXJJdGVtKHtcbiAgICAgIHJlY2VpdmVySXRlbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgZmlsZToge1xuICAgICAgICBpZDogb3B0aW9ucy5maWxlSWQsXG4gICAgICAgIGtleUlkOiBvcHRpb25zLmZpbGVLZXlJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVSZWNlaXZlcihcbiAgICBvcHRpb25zOiBDcmVhdGVSZWNlaXZlck9wdGlvbnMsXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgY29uc3QgeyBzaGFyZWRLZXksIG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KFxuICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBhZGREaXJlY3RvcmllcyA9XG4gICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRGlyZWN0b3JpZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleS5rZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IGFkZEZpbGVzID1cbiAgICAgIG9wdGlvbnMuYWRkRmlsZXMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5hZGRGaWxlcy5tYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5wcmVwYXJlQWRkUmVjZWl2ZXJGaWxlKHgsIHNoYXJlZEtleS5rZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tdXRhdGlvbklucHV0LFxuICAgICAgYWRkRGlyZWN0b3JpZXMsXG4gICAgICBhZGRGaWxlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgb3B0aW9uczogVXBkYXRlUmVjZWl2ZXJPcHRpb25zLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5LFxuICAgIGV4aXN0aW5nUmVjZWl2ZXI6IFNjZW5hcmlvUmVjZWl2ZXJOb2RlXG4gICkge1xuICAgIGNvbnN0IHNoYXJlZEtleUlkID0gZXhpc3RpbmdSZWNlaXZlci5zaGFyZWRLZXkuaWQ7XG5cbiAgICBjb25zdCBkZWxldGVEaXJlY3Rvcmllc09wdGlvbnMgPSBvcHRpb25zLmRlbGV0ZURpcmVjdG9yaWVzIHx8IFtdO1xuICAgIGNvbnN0IHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucyA9IG9wdGlvbnMudXBkYXRlRGlyZWN0b3JpZXMgfHwgW107XG5cbiAgICBjb25zdCBkZWxldGVGaWxlc09wdGlvbnMgPSBvcHRpb25zLmRlbGV0ZUZpbGVzIHx8IFtdO1xuICAgIGNvbnN0IHVwZGF0ZUZpbGVzT3B0aW9ucyA9IG9wdGlvbnMudXBkYXRlRmlsZXMgfHwgW107XG5cbiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHVwZGF0ZSBkaXJlY3Rvcmllc1xuICAgIG1hcEVkZ2VzKGV4aXN0aW5nUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckRpcmVjdG9yaWVzKS5mb3JFYWNoKFxuICAgICAgKGV4aXN0aW5nRGlyZWN0b3J5KSA9PiB7XG4gICAgICAgIGlmIChkZWxldGVEaXJlY3Rvcmllc09wdGlvbnMuaW5jbHVkZXMoZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMuZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4LmRpcmVjdG9yeUlkID09PSBleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3RvcnkuaWRcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBhY2Nlc3NSb2xlOiBleGlzdGluZ0RpcmVjdG9yeS5hY2Nlc3NSb2xlLFxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3RvcnkuaWQsXG4gICAgICAgICAgZGlyZWN0b3J5S2V5SWQ6IGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5rZXlJZCxcbiAgICAgICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOlxuICAgICAgICAgICAgZXhpc3RpbmdEaXJlY3Rvcnkuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEZpbGwgaW4gYW55IG1pc3NpbmcgdXBkYXRlIGZpbGVzXG4gICAgbWFwRWRnZXMoZXhpc3RpbmdSZWNlaXZlci5yZWNlaXZlckl0ZW1zLnJlY2VpdmVyRmlsZXMpLmZvckVhY2goXG4gICAgICAoZXhpc3RpbmdGaWxlKSA9PiB7XG4gICAgICAgIGlmIChkZWxldGVGaWxlc09wdGlvbnMuaW5jbHVkZXMoZXhpc3RpbmdGaWxlLmZpbGUuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZUZpbGVzT3B0aW9ucy5maW5kKCh4KSA9PiB4LmZpbGVJZCA9PT0gZXhpc3RpbmdGaWxlLmZpbGUuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlRmlsZXNPcHRpb25zLnB1c2goe1xuICAgICAgICAgIGFjY2Vzc1JvbGU6IGV4aXN0aW5nRmlsZS5hY2Nlc3NSb2xlLFxuICAgICAgICAgIGZpbGVJZDogZXhpc3RpbmdGaWxlLmZpbGUuaWQsXG4gICAgICAgICAgZmlsZUtleUlkOiBleGlzdGluZ0ZpbGUuZmlsZS5rZXlJZCxcbiAgICAgICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOiBleGlzdGluZ0ZpbGUuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2hhcmVkS2V5LCBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzaGFyZWRLZXlJZFxuICAgICk7XG5cbiAgICBjb25zdCBhZGREaXJlY3RvcmllcyA9XG4gICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRGlyZWN0b3JpZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgY29uc3QgYWRkRmlsZXMgPVxuICAgICAgb3B0aW9ucy5hZGRGaWxlcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZEZpbGVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckZpbGUoeCwgc2hhcmVkS2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCB1cGRhdGVEaXJlY3RvcmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zLm1hcCgoeCkgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXJEaXJlY3RvcnkoeCwgc2hhcmVkS2V5LCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlRmlsZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHVwZGF0ZUZpbGVzT3B0aW9ucy5tYXAoKHgpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyRmlsZSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubXV0YXRpb25JbnB1dCxcbiAgICAgIGFkZERpcmVjdG9yaWVzLFxuICAgICAgYWRkRmlsZXMsXG4gICAgICB1cGRhdGVEaXJlY3RvcmllcyxcbiAgICAgIHVwZGF0ZUZpbGVzLFxuICAgICAgZGVsZXRlRGlyZWN0b3JpZXM6IG9wdGlvbnMuZGVsZXRlRGlyZWN0b3JpZXMsXG4gICAgICBkZWxldGVGaWxlczogb3B0aW9ucy5kZWxldGVGaWxlcyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlRXhpc3RpbmdSZWNlaXZlcihcbiAgICBleGlzdGluZ1JlY2VpdmVyOiBTY2VuYXJpb1JlY2VpdmVyTm9kZSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICBjb25zdCB1cGRhdGVEaXJlY3RvcmllcyA9IG1hcEVkZ2VzKFxuICAgICAgZXhpc3RpbmdSZWNlaXZlci5yZWNlaXZlckl0ZW1zLnJlY2VpdmVyRGlyZWN0b3JpZXNcbiAgICApLm1hcCgoeyBhY2Nlc3NSb2xlLCBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLCBkaXJlY3RvcnkgfSkgPT4gKHtcbiAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgZGlyZWN0b3J5SWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgIGRpcmVjdG9yeUtleUlkOiBkaXJlY3Rvcnkua2V5SWQsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgdXBkYXRlRmlsZXMgPSBtYXBFZGdlcyhcbiAgICAgIGV4aXN0aW5nUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckZpbGVzXG4gICAgKS5tYXAoKHsgYWNjZXNzUm9sZSwgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbiwgZmlsZSB9KSA9PiAoe1xuICAgICAgYWNjZXNzUm9sZSxcbiAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICBmaWxlS2V5SWQ6IGZpbGUua2V5SWQsXG4gICAgfSkpO1xuXG4gICAgLy8gRmlsbCBpdCBpbiB3aXRoIGV4aXN0aW5nIHJlY2VpdmVyLlxuICAgIHJldHVybiB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlcihcbiAgICAgIHtcbiAgICAgICAgdHBJZDogZXhpc3RpbmdSZWNlaXZlci50cC5pZCxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjogZXhpc3RpbmdSZWNlaXZlci5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgICB1cGRhdGVEaXJlY3RvcmllcyxcbiAgICAgICAgdXBkYXRlRmlsZXMsXG4gICAgICB9LFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICBleGlzdGluZ1JlY2VpdmVyXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXJzKFxuICAgIGV4aXN0aW5nUmVjZWl2ZXJzOiBTY2VuYXJpb1JlY2VpdmVyTm9kZVtdLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGV4aXN0aW5nUmVjZWl2ZXJzLm1hcCgoZXhpc3RpbmdSZWNlaXZlcikgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlRXhpc3RpbmdSZWNlaXZlcihleGlzdGluZ1JlY2VpdmVyLCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlUGFydGljaXBhbnQob3B0aW9uczogQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0V2l0aE5ld0tleShcbiAgICAgIG9wdGlvbnMudHBTaGFyZWRLZXlJZCxcbiAgICAgIG9wdGlvbnMuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbiB8fCAnJ1xuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIG11dGF0aW9uSW5wdXQ6IHtcbiAgICAgICAgdHBJZDogb3B0aW9ucy50cElkLFxuICAgICAgICB0cFNoYXJlZEtleUlkOiBvcHRpb25zLnRwU2hhcmVkS2V5SWQsXG4gICAgICAgIHRwU2hhcmVkS2V5V3JhcHBlZFNoYXJlZEtleTogc2hhcmVkS2V5LndyYXBwZWRLZXksXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGE6IHNoYXJlZEtleS5jaXBoZXIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICBvcHRpb25zOiBQYXJ0aWNpcGFudE9wdGlvbnMsXG4gICAgc2hhcmVkS2V5SWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShzaGFyZWRLZXlJZCk7XG5cbiAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICBvcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIG11dGF0aW9uSW5wdXQ6IHtcbiAgICAgICAgdHBJZDogb3B0aW9ucy50cElkLFxuICAgICAgICBzaGFyZWRLZXlJZCxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZUNsYWltYW50KG9wdGlvbnM6IENyZWF0ZUNsYWltYW50T3B0aW9ucykge1xuICAgIGNvbnN0IHsgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlUGFydGljaXBhbnQob3B0aW9ucyk7XG4gICAgcmV0dXJuIG11dGF0aW9uSW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVDbGFpbWFudChcbiAgICBvcHRpb25zOiBVcGRhdGVDbGFpbWFudE9wdGlvbnMsXG4gICAgc2hhcmVkS2V5SWQ6IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCB7IG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVBhcnRpY2lwYW50KFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNoYXJlZEtleUlkXG4gICAgKTtcblxuICAgIHJldHVybiBtdXRhdGlvbklucHV0O1xuICB9XG5cbiAgYXN5bmMgcHJlcGFyZVJlY2VpdmVDbGFpbTIoc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICAvLyBHZXQgYWxsIHRoZSBzaGFyZWQgaXRlbXNcbiAgICBjb25zdCBzaGFyZWRTY2VuYXJpbyA9IChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2hhcmVkU2NlbmFyaW8oc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZClcbiAgICApLnNoYXJlZFNjZW5hcmlvO1xuXG4gICAgaWYgKHNoYXJlZFNjZW5hcmlvLnN0YXRlICE9PSBTY2VuYXJpb1N0YXRlLkFQUFJPVkVEKSB7XG4gICAgICB0aHJvd0NsYWltTm90QXBwcm92ZWQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHByb3ZhbHMgPSBtYXBFZGdlcyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmFzQ2xhaW1SZWNlaXZlci5hcHByb3ZhbHNcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLnJlY292ZXJBc3NlbWJseUtleShhcHByb3ZhbHMpO1xuXG4gICAgLy8gV3JhcCBhc3NlbWJseSBrZXkgd2l0aCBzaGFyZWQga2V5LlxuICAgIC8vPz8/XG4gICAgLy8gVGhpcyBzaGFyZWRLZXkgaXMgY3JlYXRlZCBqdXN0IGZvciB0aGlzIHNjZW5hcmlvLiBJdCdzIHdyYXBwZWQgYnkgdGhlIHRwU2hhcmVkS2V5LlxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgc2hhcmVkU2NlbmFyaW8uYXNSZWNlaXZlci5zaGFyZWRLZXkuaWRcbiAgICApO1xuXG4gICAgY29uc3Qgc2hhcmVkS2V5V3JhcHBlZEFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICBhc3NlbWJseUtleS50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjZW5hcmlvQ2xhaW1JZDogc2hhcmVkQ2xhaW1JZCxcbiAgICAgIHNoYXJlZEtleVdyYXBwZWRBc3NlbWJseUtleSxcbiAgICAgIHNoYXJlZEtleUlkOiBzaGFyZWRLZXkuaWQsXG4gICAgICBhc3NlbWJseUtleUlkOiBzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5hc0NsYWltUmVjZWl2ZXIuYXNzZW1ibHlLZXlJZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gYXN5bmMgcHJlcGFyZVJlY2VpdmVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAvLyAgIC8vIEdldCBhbGwgdGhlIHNoYXJlZCBpdGVtc1xuICAvLyAgIGNvbnN0IHNoYXJlZFNjZW5hcmlvID0gKFxuICAvLyAgICAgYXdhaXQgdGhpcy5nZXRTaGFyZWRTY2VuYXJpbyhzY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKVxuICAvLyAgICkuc2hhcmVkU2NlbmFyaW87XG5cbiAgLy8gICBpZiAoc2hhcmVkU2NlbmFyaW8uc3RhdGUgIT09IFNjZW5hcmlvU3RhdGUuQVBQUk9WRUQpIHtcbiAgLy8gICAgIHRocm93Q2xhaW1Ob3RBcHByb3ZlZCgpO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IGFwcHJvdmFscyA9IG1hcEVkZ2VzKFxuICAvLyAgICAgc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uYXNDbGFpbVJlY2VpdmVyLmFwcHJvdmFsc1xuICAvLyAgICk7XG5cbiAgLy8gICBjb25zdCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMucmVjb3ZlckFzc2VtYmx5S2V5KGFwcHJvdmFscyk7XG5cbiAgLy8gICAvLyBEZWNyeXB0IGFsbCBpdGVtc1xuICAvLyAgIGNvbnN0IHJlY2VpdmVyRGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgLy8gICAgIHNoYXJlZFNjZW5hcmlvLmFzUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckRpcmVjdG9yaWVzLmVkZ2VzXG4gIC8vICAgICAgIC5tYXAoKGVkZ2UpID0+IGVkZ2Uubm9kZSlcbiAgLy8gICAgICAgLm1hcChhc3luYyAocmVjZWl2ZXJEaXJlY3RvcnkpID0+IHtcbiAgLy8gICAgICAgICBjb25zdCB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChcbiAgLy8gICAgICAgICAgIGFzc2VtYmx5S2V5LFxuICAvLyAgICAgICAgICAgcmVjZWl2ZXJEaXJlY3Rvcnkud3JhcHBlZEl0ZW1LZXlcbiAgLy8gICAgICAgICApO1xuXG4gIC8vICAgICAgICAgcmV0dXJuIHtcbiAgLy8gICAgICAgICAgIHJlY2VpdmVyRGlyZWN0b3J5SWQ6IHJlY2VpdmVyRGlyZWN0b3J5LmlkLFxuICAvLyAgICAgICAgICAgLy8gTG9va3MgbGlrZSByZWNlaXZlckRpcmVjdG9yeS53cmFwcGVkSXRlbUtleSBoYXMgbm8gb3RoZXIgY29udGVudCBpbiBzaWRlIGl0IGV4Y2VwdCBhIHdyYXBwZWQga2V5LlxuICAvLyAgICAgICAgICAgLy8gU28gd2UgY2FuIHR1cm4gdGhpcyBpbiB0byBhIGRvdWJseSB3cmFwcGVkIGtleSBhbmQganVzdCByZWxlYXNlIHRoZSBhc3NlbWJseSBrZXkuXG5cbiAgLy8gICAgICAgICAgIHJlY2VpdmVyU2hhcmVkS2V5V3JhcHBlZEl0ZW1LZXk6IHdyYXBwZWRJdGVtS2V5LCAvLyB0aGUgd3JhcHBlZEl0ZW1LZXkgaXMgYWxyZWFkeSB3cmFwcGVkIGJ5IHJlY2VpdmVyU2hhcmVkS2V5XG4gIC8vICAgICAgICAgfTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICApO1xuXG4gIC8vICAgcmV0dXJuIHtcbiAgLy8gICAgIHNjZW5hcmlvQ2xhaW1JZDogc2hhcmVkQ2xhaW1JZCxcbiAgLy8gICAgIHJlY2VpdmVyRGlyZWN0b3JpZXMsXG4gIC8vICAgfTtcbiAgLy8gfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVjb3ZlckFzc2VtYmx5S2V5KFxuICAgIGFwcHJvdmFsczogU2hhcmVkU2NlbmFyaW9DbGFpbVJlY2VpdmVkQXBwcm92YWxOb2RlW11cbiAgKSB7XG4gICAgY29uc3QgcGFydGlhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGFwcHJvdmFscy5tYXAoKGFwcHJvdmFsKSA9PlxuICAgICAgICB0aGlzLmtleUdyYXBoLmRlY3J5cHRGcm9tU3RyaW5nPFBhcnRpYWxBc3NlbWJseUtleT4oXG4gICAgICAgICAgYXBwcm92YWwucHhrLmlkLFxuICAgICAgICAgIGFwcHJvdmFsLnJlY2VpdmVyQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuYXNzZW1ibHlDb250cm9sbGVyLnJlY292ZXJBc3NlbWJseUtleShwYXJ0aWFscyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICBjbGFpbUlkLFxuICAgIHN0YXRlOiBUcENsYWltQXBwcm92ZXJTdGF0ZVxuICApIHtcbiAgICBjb25zdCBzaGFyZWRTY2VuYXJpbyA9IChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2hhcmVkU2NlbmFyaW8oc2hhcmVkU2NlbmFyaW9JZCwgY2xhaW1JZClcbiAgICApLnNoYXJlZFNjZW5hcmlvO1xuXG4gICAgcmV0dXJuIG1hcEVkZ2VzKHNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmNsYWltLmFzQ2xhaW1BcHByb3ZlcnMpLmZpbHRlcihcbiAgICAgIChhc0NsYWltQXBwcm92ZXIpID0+IGFzQ2xhaW1BcHByb3Zlci5zdGF0ZSA9PT0gc3RhdGVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQXBwcm92ZUNsYWltTXV0YXRpb25zKFxuICAgIHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZyxcbiAgICBjbGFpbUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdXNlciBtYXkgYmUgYWN0aW5nIGFzIGFwcHJvdmVycyBpbiBtdWx0aXBsZSBzdWItYXNzZW1ibGllcyBzb1xuICAgIC8vIHdlIGFwcHJvdmUgdGhlbSBhbGwuXG4gICAgY29uc3QgYXNDbGFpbUFwcHJvdmVycyA9IGF3YWl0IHRoaXMuYXNDbGFpbUFwcHJvdmVycyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBjbGFpbUlkLFxuICAgICAgVHBDbGFpbUFwcHJvdmVyU3RhdGUuQ0xBSU1FRFxuICAgICk7XG5cbiAgICByZXR1cm4gYXNDbGFpbUFwcHJvdmVycy5tYXAoXG4gICAgICBhc3luYyAoYXNDbGFpbUFwcHJvdmVyKSA9PlxuICAgICAgICBuZXcgTHJNdXRhdGlvbih7XG4gICAgICAgICAgbXV0YXRpb246IEFwcHJvdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlQXBwcm92ZUNsYWltKGFzQ2xhaW1BcHByb3ZlciksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQXBwcm92ZUNsYWltKFxuICAgIGFzQ2xhaW1BcHByb3ZlcjogU2hhcmVkVHBDbGFpbUFwcHJvdmVyTm9kZVxuICApIHtcbiAgICBjb25zdCByZWNlaXZlckFwcHJvdmFscyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbWFwRWRnZXMoYXNDbGFpbUFwcHJvdmVyLnJlY2VpdmVyQXBwcm92YWxzKS5tYXAoKHJlY2VpdmVyQXBwcm92YWwpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVJlY2VpdmVyQXBwcm92YWwoe1xuICAgICAgICAgIHJlY2VpdmVyQXBwcm92YWxJZDogcmVjZWl2ZXJBcHByb3ZhbC5pZCxcbiAgICAgICAgICByZWNlaXZlckFwcHJvdmFsUHhrSWQ6IHJlY2VpdmVyQXBwcm92YWwucHhrLmlkLFxuICAgICAgICAgIHNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvbjpcbiAgICAgICAgICAgIGFzQ2xhaW1BcHByb3Zlci5zaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb24sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjbGFpbUFwcHJvdmVySWQ6IGFzQ2xhaW1BcHByb3Zlci5pZCxcbiAgICAgIHJlY2VpdmVyQXBwcm92YWxzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNlaXZlckFwcHJvdmFsKG9wdGlvbnM6IHtcbiAgICByZWNlaXZlckFwcHJvdmFsSWQ6IHN0cmluZztcbiAgICByZWNlaXZlckFwcHJvdmFsUHhrSWQ6IHN0cmluZztcbiAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb246IEpTT05PYmplY3Q7XG4gIH0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVjZWl2ZXJBcHByb3ZhbElkOiBvcHRpb25zLnJlY2VpdmVyQXBwcm92YWxJZCxcbiAgICAgIC8vIFRPRE8gYWxsb3cgc2VuZGluZyBvZiBtZXNzYWdlcyB0byByZWNlaXZlci5cbiAgICAgIHJlY2VpdmVyQ2lwaGVyOiAnJyxcbiAgICAgIHJlY2VpdmVyQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5OiBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgb3B0aW9ucy5yZWNlaXZlckFwcHJvdmFsUHhrSWQsXG4gICAgICAgIG9wdGlvbnMuc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWplY3RDbGFpbU11dGF0aW9ucyhcbiAgICBzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsXG4gICAgY2xhaW1JZDogc3RyaW5nXG4gICkge1xuICAgIC8vIFRoZSBjdXJyZW50IHVzZXIgbWF5IGJlIGFjdGluZyBhcyBhcHByb3ZlcnMgaW4gbXVsdGlwbGUgc3ViLWFzc2VtYmxpZXMgc29cbiAgICAvLyB3ZSByZWplY3QgdGhlbSBhbGwuXG4gICAgY29uc3QgYXNDbGFpbUFwcHJvdmVycyA9IGF3YWl0IHRoaXMuYXNDbGFpbUFwcHJvdmVycyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBjbGFpbUlkLFxuICAgICAgVHBDbGFpbUFwcHJvdmVyU3RhdGUuQ0xBSU1FRFxuICAgICk7XG5cbiAgICByZXR1cm4gYXNDbGFpbUFwcHJvdmVycy5tYXAoXG4gICAgICBhc3luYyAoYXNDbGFpbUFwcHJvdmVyKSA9PlxuICAgICAgICBuZXcgTHJNdXRhdGlvbih7XG4gICAgICAgICAgbXV0YXRpb246IFJlamVjdFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlucHV0OiB7IGNsYWltQXBwcm92ZXJJZDogYXNDbGFpbUFwcHJvdmVyLmlkIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -70,15 +70,19 @@ let TrustedPartyService = class TrustedPartyService extends LrService {
|
|
|
70
70
|
}
|
|
71
71
|
prepareCreateItemShareMutation(options) {
|
|
72
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
const { itemId, itemKeyId, tpId, tpSharedKeyId, accessRole, isDirectory, shareType, plainMetaJson, } = options;
|
|
73
|
+
const { itemId: _itemId, itemKeyId: _itemKeyId, tpId, tpSharedKeyId, accessRole, isDirectory, shareType, plainMetaJson, } = options;
|
|
74
|
+
const item = options.item || {
|
|
75
|
+
id: _itemId,
|
|
76
|
+
keyId: _itemKeyId,
|
|
77
|
+
};
|
|
74
78
|
const plainMeta = plainMetaJson && JSON.stringify(plainMetaJson);
|
|
75
79
|
if (accessRole == AccessRoleChoice.DENY) {
|
|
76
|
-
if (
|
|
80
|
+
if (item.keyId || tpSharedKeyId) {
|
|
77
81
|
throw new KcBadArgumentException('If accessRole is AccessRoleChoice.DENY, must not specify any of itemId, itemKeyId, or tpSharedKeyId parameters');
|
|
78
82
|
}
|
|
79
83
|
return {
|
|
80
84
|
input: {
|
|
81
|
-
itemId,
|
|
85
|
+
itemId: item.id,
|
|
82
86
|
tpId,
|
|
83
87
|
accessRole,
|
|
84
88
|
itemKeyId: null,
|
|
@@ -89,14 +93,14 @@ let TrustedPartyService = class TrustedPartyService extends LrService {
|
|
|
89
93
|
},
|
|
90
94
|
};
|
|
91
95
|
}
|
|
92
|
-
const itemKey = yield this.keyGraph.getKey(
|
|
93
|
-
? this.itemService.getDirectoryKeyId(
|
|
94
|
-
: this.itemService.getFileKeyId(
|
|
96
|
+
const itemKey = yield this.keyGraph.getKey(item.keyId, () => isDirectory
|
|
97
|
+
? this.itemService.getDirectoryKeyId(item.id)
|
|
98
|
+
: this.itemService.getFileKeyId(item.id));
|
|
95
99
|
const wrappingKey = yield this.keyGraph.getKey(tpSharedKeyId, () => this.getTpCurrentUserSharedKey(tpId).then((res) => res.sharedKey.id));
|
|
96
100
|
const wrappedItemKey = yield this.keyGraph.wrapKey(wrappingKey, itemKey.jwk);
|
|
97
101
|
return {
|
|
98
102
|
input: {
|
|
99
|
-
itemId,
|
|
103
|
+
itemId: item.id,
|
|
100
104
|
tpId,
|
|
101
105
|
accessRole,
|
|
102
106
|
itemKeyId: itemKey.id,
|
|
@@ -178,14 +182,18 @@ let TrustedPartyService = class TrustedPartyService extends LrService {
|
|
|
178
182
|
}
|
|
179
183
|
prepareUpdateItemShareMutation(options) {
|
|
180
184
|
return __awaiter(this, void 0, void 0, function* () {
|
|
181
|
-
const { itemShareId, accessRole, isDirectory, itemId, itemKeyId, tpId, tpSharedKeyId, plainMetaJson, } = options;
|
|
185
|
+
const { itemShareId, accessRole, isDirectory, itemId: _itemId, itemKeyId: _itemKeyId, tpId, tpSharedKeyId, plainMetaJson, } = options;
|
|
186
|
+
const item = options.item || {
|
|
187
|
+
id: _itemId,
|
|
188
|
+
keyId: _itemKeyId,
|
|
189
|
+
};
|
|
182
190
|
// If plainMetaJson is undefined, then plainMeta is undefined
|
|
183
191
|
// If plainMetaJson is null, then plainMeta is null
|
|
184
192
|
// If plainMetaJson has value, then plainMeta is JSON.stringify(plainMetaJson)
|
|
185
193
|
const plainMeta = plainMetaJson && JSON.stringify(plainMetaJson);
|
|
186
194
|
// If not updating access role or updating to DENY role, then we don't need any key material.
|
|
187
195
|
if (accessRole == null || accessRole == AccessRoleChoice.DENY) {
|
|
188
|
-
if (
|
|
196
|
+
if (item.id || item.keyId || tpId || tpSharedKeyId) {
|
|
189
197
|
throw new KcBadArgumentException('If accessRole is AccessRoleChoice.DENY, must not specify any of itemId, itemKeyId, tpId, or tpSharedKeyId parameters');
|
|
190
198
|
}
|
|
191
199
|
return {
|
|
@@ -213,8 +221,8 @@ let TrustedPartyService = class TrustedPartyService extends LrService {
|
|
|
213
221
|
}
|
|
214
222
|
return itemShare;
|
|
215
223
|
});
|
|
216
|
-
const itemKey = yield this.keyGraph.getKey(
|
|
217
|
-
const itemId_ =
|
|
224
|
+
const itemKey = yield this.keyGraph.getKey(item.keyId, () => __awaiter(this, void 0, void 0, function* () {
|
|
225
|
+
const itemId_ = item.id || (yield getItemShare()).item.id;
|
|
218
226
|
if (isDirectory) {
|
|
219
227
|
return this.itemService.getDirectoryKeyId(itemId_);
|
|
220
228
|
}
|
|
@@ -450,4 +458,4 @@ TrustedPartyService = __decorate([
|
|
|
450
458
|
})
|
|
451
459
|
], TrustedPartyService);
|
|
452
460
|
export { TrustedPartyService };
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3RydXN0ZWQtcGFydHkvdHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsaUNBQWlDLEVBQ2pDLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFD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QUUsRUFBRSxJQUFJO2lCQUNUO2FBQ0YsQ0FBQyxDQUNILENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQztRQUMxQyxDQUFDO0tBQUE7Q0FDRixDQUFBOzs7WUF0aEJBLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBckQ4QixNQUFNO1lBQWhCLFFBQVE7WUFXcEIsZUFBZTtZQUZmLFdBQVc7WUFHWCxVQUFVO1lBRlYsaUJBQWlCO1lBRmpCLGlCQUFpQjs7QUE4Q2IsbUJBQW1CO0lBTi9CLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxtQkFBbUIsQ0FtaEIvQjtTQW5oQlksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7IExyTXV0YXRpb24sIExyU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1ncmFwaHFsJztcbmltcG9ydCB7XG4gIEFjY2Vzc1JvbGVDaG9pY2UsXG4gIExyUmVsYXlJZElucHV0LFxuICBTaGFyZVR5cGVDaG9pY2UsXG59IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2VuY3J5cHRpb24vZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEl0ZW1TZXJ2aWNlIH0gZnJvbSAnLi4vaXRlbS9pdGVtLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2tleS9rZXkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9rZXkva2V5LnR5cGVzJztcbmltcG9ydCB7XG4gIEtjQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIEtjQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XG5pbXBvcnQge1xuICBDb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgQ29tcGxldGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uLFxuICBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24sXG4gIENyZWF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gIENyZWF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICBEZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICBEZWxldGVGaWxlU2hhcmVNdXRhdGlvbixcbiAgRGVsZXRlVHBNdXRhdGlvbixcbiAgUmVxdWVzdFRwTWtSZXNoYXJlTXV0YXRpb24sXG4gIFJlc3BvbmRUcE1rUmVzaGFyZU11dGF0aW9uLFxuICBVcGRhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICBVcGRhdGVGaWxlU2hhcmVNdXRhdGlvbixcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LmdxbCc7XG5pbXBvcnQge1xuICBEaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICBEaXJlY3RvcnlTaGFyZVF1ZXJ5UmVzdWx0LFxuICBGaWxlU2hhcmVRdWVyeSxcbiAgRmlsZVNoYXJlUXVlcnlSZXN1bHQsXG4gIEl0ZW1TaGFyZVF1ZXJ5UmVzdWx0LFxuICBUcEN1cnJlbnRVc2VyU2hhcmVkS2V5UXVlcnksXG59IGZyb20gJy4vdHJ1c3RlZC1wYXJ0eS5ncWwucHJpdmF0ZSc7XG5pbXBvcnQge1xuICBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucyxcbiAgQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucyxcbiAgVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zLFxuICBVcGRhdGVJdGVtU2hhcmVPcHRpb25zLFxufSBmcm9tICcuL3RydXN0ZWQtcGFydHkudHlwZXMnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHJ1c3RlZFBhcnR5U2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGRlbGV0ZVRwKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlVHBNdXRhdGlvbih0cElkKSk7XG4gIH1cblxuICBkZWxldGVUcE11dGF0aW9uKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVUcE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQ6IHRwSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5U2hhcmUob3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlU2hhcmUob3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnM6IENyZWF0ZUl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlSXRlbVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucyAmIHsgaXNEaXJlY3Rvcnk6IGJvb2xlYW4gfVxuICApIHtcbiAgICBjb25zdCB7XG4gICAgICBpdGVtSWQsXG4gICAgICBpdGVtS2V5SWQsXG4gICAgICB0cElkLFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICBpc0RpcmVjdG9yeSxcbiAgICAgIHNoYXJlVHlwZSxcbiAgICAgIHBsYWluTWV0YUpzb24sXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBwbGFpbk1ldGEgPSBwbGFpbk1ldGFKc29uICYmIEpTT04uc3RyaW5naWZ5KHBsYWluTWV0YUpzb24pO1xuXG4gICAgaWYgKGFjY2Vzc1JvbGUgPT0gQWNjZXNzUm9sZUNob2ljZS5ERU5ZKSB7XG4gICAgICBpZiAoaXRlbUtleUlkIHx8IHRwU2hhcmVkS2V5SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICAgJ0lmIGFjY2Vzc1JvbGUgaXMgQWNjZXNzUm9sZUNob2ljZS5ERU5ZLCBtdXN0IG5vdCBzcGVjaWZ5IGFueSBvZiBpdGVtSWQsIGl0ZW1LZXlJZCwgb3IgdHBTaGFyZWRLZXlJZCBwYXJhbWV0ZXJzJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICB0cElkLFxuICAgICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgICAgaXRlbUtleUlkOiBudWxsLFxuICAgICAgICAgIHdyYXBwaW5nS2V5SWQ6IG51bGwsXG4gICAgICAgICAgd3JhcHBlZEl0ZW1LZXk6IG51bGwsXG4gICAgICAgICAgc2hhcmVUeXBlLFxuICAgICAgICAgIHBsYWluTWV0YSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KGl0ZW1LZXlJZCwgKCkgPT5cbiAgICAgIGlzRGlyZWN0b3J5XG4gICAgICAgID8gdGhpcy5pdGVtU2VydmljZS5nZXREaXJlY3RvcnlLZXlJZChpdGVtSWQpXG4gICAgICAgIDogdGhpcy5pdGVtU2VydmljZS5nZXRGaWxlS2V5SWQoaXRlbUlkKVxuICAgICk7XG5cbiAgICBjb25zdCB3cmFwcGluZ0tleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHRwU2hhcmVkS2V5SWQsICgpID0+XG4gICAgICB0aGlzLmdldFRwQ3VycmVudFVzZXJTaGFyZWRLZXkodHBJZCkudGhlbigocmVzKSA9PiByZXMuc2hhcmVkS2V5LmlkKVxuICAgICk7XG4gICAgY29uc3Qgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkoXG4gICAgICB3cmFwcGluZ0tleSxcbiAgICAgIGl0ZW1LZXkuandrXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBpdGVtSWQsXG4gICAgICAgIHRwSWQsXG4gICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgIGl0ZW1LZXlJZDogaXRlbUtleS5pZCxcbiAgICAgICAgd3JhcHBpbmdLZXlJZDogd3JhcHBpbmdLZXkuaWQsXG4gICAgICAgIHdyYXBwZWRJdGVtS2V5LFxuICAgICAgICBzaGFyZVR5cGUsXG4gICAgICAgIHBsYWluTWV0YSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURpcmVjdG9yeVNoYXJlKG9wdGlvbnM6IFVwZGF0ZUl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9uczogVXBkYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlSXRlbVNoYXJlTXV0YXRpb24oe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZShvcHRpb25zOiBVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFVwZGF0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZURldGFjaGVkSXRlbVNoYXJlTXV0YXRpb24ob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlU2hhcmUob3B0aW9uczogVXBkYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnM6IFVwZGF0ZUl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGV0YWNoZWRGaWxlU2hhcmUob3B0aW9uczogVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRGV0YWNoZWRGaWxlU2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFVwZGF0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU11dGF0aW9uKG9wdGlvbnMpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaXJlY3RvcnlTaGFyZShcbiAgICBpdGVtU2hhcmVJZDogc3RyaW5nXG4gICk6IFByb21pc2U8RGlyZWN0b3J5U2hhcmVRdWVyeVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5xdWVyeSh7XG4gICAgICBxdWVyeTogRGlyZWN0b3J5U2hhcmVRdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpZDogaXRlbVNoYXJlSWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlU2hhcmUoaXRlbVNoYXJlSWQ6IHN0cmluZyk6IFByb21pc2U8RmlsZVNoYXJlUXVlcnlSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgcXVlcnk6IEZpbGVTaGFyZVF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVJdGVtU2hhcmVNdXRhdGlvbihcbiAgICBvcHRpb25zOiBVcGRhdGVJdGVtU2hhcmVPcHRpb25zICYgeyBpc0RpcmVjdG9yeTogYm9vbGVhbiB9XG4gICkge1xuICAgIGNvbnN0IHtcbiAgICAgIGl0ZW1TaGFyZUlkLFxuICAgICAgYWNjZXNzUm9sZSxcbiAgICAgIGlzRGlyZWN0b3J5LFxuICAgICAgaXRlbUlkLFxuICAgICAgaXRlbUtleUlkLFxuICAgICAgdHBJZCxcbiAgICAgIHRwU2hhcmVkS2V5SWQsXG4gICAgICBwbGFpbk1ldGFKc29uLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gSWYgcGxhaW5NZXRhSnNvbiBpcyB1bmRlZmluZWQsIHRoZW4gcGxhaW5NZXRhIGlzIHVuZGVmaW5lZFxuICAgIC8vIElmIHBsYWluTWV0YUpzb24gaXMgbnVsbCwgdGhlbiBwbGFpbk1ldGEgaXMgbnVsbFxuICAgIC8vIElmIHBsYWluTWV0YUpzb24gaGFzIHZhbHVlLCB0aGVuIHBsYWluTWV0YSBpcyBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKVxuICAgIGNvbnN0IHBsYWluTWV0YSA9IHBsYWluTWV0YUpzb24gJiYgSlNPTi5zdHJpbmdpZnkocGxhaW5NZXRhSnNvbik7XG5cbiAgICAvLyBJZiBub3QgdXBkYXRpbmcgYWNjZXNzIHJvbGUgb3IgdXBkYXRpbmcgdG8gREVOWSByb2xlLCB0aGVuIHdlIGRvbid0IG5lZWQgYW55IGtleSBtYXRlcmlhbC5cbiAgICBpZiAoYWNjZXNzUm9sZSA9PSBudWxsIHx8IGFjY2Vzc1JvbGUgPT0gQWNjZXNzUm9sZUNob2ljZS5ERU5ZKSB7XG4gICAgICBpZiAoaXRlbUlkIHx8IGl0ZW1LZXlJZCB8fCB0cElkIHx8IHRwU2hhcmVkS2V5SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICAgJ0lmIGFjY2Vzc1JvbGUgaXMgQWNjZXNzUm9sZUNob2ljZS5ERU5ZLCBtdXN0IG5vdCBzcGVjaWZ5IGFueSBvZiBpdGVtSWQsIGl0ZW1LZXlJZCwgdHBJZCwgb3IgdHBTaGFyZWRLZXlJZCBwYXJhbWV0ZXJzJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICAgIHBsYWluTWV0YSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQ2FjaGluZyB0aGUgcmVzdWx0IHNvIHdlIG9ubHkgbmVlZCBvbmUgY2FsbC5cbiAgICBsZXQgaXRlbVNoYXJlOiBJdGVtU2hhcmVRdWVyeVJlc3VsdDtcblxuICAgIGNvbnN0IGdldEl0ZW1TaGFyZSA9IGFzeW5jICgpOiBQcm9taXNlPEl0ZW1TaGFyZVF1ZXJ5UmVzdWx0PiA9PiB7XG4gICAgICBpZiAoIWl0ZW1TaGFyZSkge1xuICAgICAgICBpZiAoaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgICBpdGVtU2hhcmUgPSAoYXdhaXQgdGhpcy5nZXREaXJlY3RvcnlTaGFyZShpdGVtU2hhcmVJZCkpXG4gICAgICAgICAgICAuZGlyZWN0b3J5U2hhcmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVNoYXJlID0gKGF3YWl0IHRoaXMuZ2V0RmlsZVNoYXJlKGl0ZW1TaGFyZUlkKSkuZmlsZVNoYXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1TaGFyZS5zaGFyZVR5cGUgPT0gU2hhcmVUeXBlQ2hvaWNlLkRFVEFDSEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEtjQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgICAgICAnVXNlIHVwZGF0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmUoKSBvciB1cGRhdGVEZXRhY2hlZEZpbGVTaGFyZSgpIHRvIHVwZGF0ZWQgREVUQUNIRUQgc2hhcmVzLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpdGVtU2hhcmU7XG4gICAgfTtcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShcbiAgICAgIGl0ZW1LZXlJZCxcbiAgICAgIGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCBpdGVtSWRfID0gaXRlbUlkIHx8IChhd2FpdCBnZXRJdGVtU2hhcmUoKSkuaXRlbS5pZDtcbiAgICAgICAgaWYgKGlzRGlyZWN0b3J5KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVNlcnZpY2UuZ2V0RGlyZWN0b3J5S2V5SWQoaXRlbUlkXyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbVNlcnZpY2UuZ2V0RmlsZUtleUlkKGl0ZW1JZF8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoXG4gICAgICB0cFNoYXJlZEtleUlkLFxuICAgICAgYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgICAgIGNvbnN0IHRwSWRfID0gdHBJZCB8fCAoYXdhaXQgZ2V0SXRlbVNoYXJlKCkpLnRwLmlkO1xuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkXykpLnNoYXJlZEtleS5pZDtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkoXG4gICAgICB3cmFwcGluZ0tleSxcbiAgICAgIGl0ZW1LZXkuandrXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBpZDogaXRlbVNoYXJlSWQsXG4gICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgIGl0ZW1LZXlJZDogaXRlbUtleS5pZCxcbiAgICAgICAgd3JhcHBpbmdLZXlJZDogd3JhcHBpbmdLZXkuaWQsXG4gICAgICAgIHdyYXBwZWRJdGVtS2V5LFxuICAgICAgICBwbGFpbk1ldGEsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFVwZGF0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICBjb25zdCB7IGl0ZW1TaGFyZUlkLCBhY2Nlc3NSb2xlLCBwbGFpbk1ldGFKc29uIH0gPSBvcHRpb25zO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgcGxhaW5NZXRhOiBwbGFpbk1ldGFKc29uICYmIEpTT04uc3RyaW5naWZ5KHBsYWluTWV0YUpzb24pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRGlyZWN0b3J5U2hhcmUoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24oaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGVTaGFyZShpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlRmlsZVNoYXJlTXV0YXRpb24oaWQpKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZpbGVTaGFyZU11dGF0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlKFxuICAgIG9wdGlvbnM6IENvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zXG4gICkge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNvbXBsZXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IENvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ29tcGxldGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZUNvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjb21wbGV0ZURldGFjaGVkRmlsZVNoYXJlKG9wdGlvbnM6IENvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY29tcGxldGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlRGV0YWNoZWRGaWxlU2hhcmVNdXRhdGlvbihcbiAgICBvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENvbXBsZXRlRGV0YWNoZWRGaWxlU2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogYXdhaXQgdGhpcy5wcmVwYXJlQ29tcGxldGVEZXRhY2hlZEl0ZW1TaGFyZU11dGF0aW9uKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ29tcGxldGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnMgJiB7IGlzRGlyZWN0b3J5OiBib29sZWFuIH1cbiAgKSB7XG4gICAgY29uc3QgeyBpdGVtU2hhcmVJZCwgaXRlbUtleUlkLCBpc0RpcmVjdG9yeSB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShpdGVtS2V5SWQsICgpID0+XG4gICAgICBpc0RpcmVjdG9yeVxuICAgICAgICA/IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RGlyZWN0b3J5S2V5SWRGcm9tRGlyZWN0b3J5U2hhcmUoaXRlbVNoYXJlSWQpXG4gICAgICAgIDogdGhpcy5pdGVtU2VydmljZS5nZXRGaWxlS2V5SWRGcm9tRmlsZVNoYXJlKGl0ZW1TaGFyZUlkKVxuICAgICk7XG5cbiAgICBjb25zdCByb290S2V5ID0gdGhpcy5rZXlTZXJ2aWNlLmN1cnJlbnRSb290S2V5O1xuXG4gICAgY29uc3Qgd3JhcHBlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShyb290S2V5LCBpdGVtS2V5Lmp3ayk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgICBrZXlJZDogaXRlbUtleS5pZCxcbiAgICAgICAgd3JhcHBpbmdLZXlJZDogcm9vdEtleS5pZCxcbiAgICAgICAgd3JhcHBlZEtleSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3RNa1Jlc2hhcmVNdXRhdGlvbih0cElkOiBMclJlbGF5SWRJbnB1dCkge1xuICAgIGNvbnN0IHVzZXJTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmdldFRwQ3VycmVudFVzZXJTaGFyZWRLZXkodHBJZCk7XG5cbiAgICBpZiAodXNlclNoYXJlZEtleS5ta1NoYXJlZEtleSkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkU3RhdGVFeGNlcHRpb24oJ1RQIGFscmVhZHkgaGFzIG1rU2hhcmVkS2V5Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFzdGVyS2V5ID0gdGhpcy5rZXlTZXJ2aWNlLmN1cnJlbnRNYXN0ZXJLZXk7XG4gICAgY29uc3QgcHJrID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZVBrY0tleSgpO1xuICAgIGNvbnN0IG1rV3JhcHBlZE1rUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBtYXN0ZXJLZXkuandrLFxuICAgICAgcHJrLnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleSh1c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZCk7XG4gICAgY29uc3QgbWtSZXNoYXJlUmVxdWVzdENpcGhlciA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc2hhcmVkS2V5Lmp3ayxcbiAgICAgIHtcbiAgICAgICAgcGJrOiBwcmsudG9KU09OKCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogUmVxdWVzdFRwTWtSZXNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICB0cElkLFxuICAgICAgICAgIG1hc3RlcktleUlkOiBtYXN0ZXJLZXkuaWQsXG4gICAgICAgICAgbWtQYms6IEpTT04uc3RyaW5naWZ5KHByay50b0pTT04oKSksXG4gICAgICAgICAgbWtXcmFwcGVkTWtQcmssXG4gICAgICAgICAgc2hhcmVkS2V5SWQ6IHNoYXJlZEtleS5pZCxcbiAgICAgICAgICBta1Jlc2hhcmVSZXF1ZXN0Q2lwaGVyLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc3BvbmRNa1Jlc2hhcmUodHBJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICBjb25zdCB1c2VyU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5nZXRUcEN1cnJlbnRVc2VyU2hhcmVkS2V5KHRwSWQpO1xuXG4gICAgaWYgKCF1c2VyU2hhcmVkS2V5Lm1rU2hhcmVkS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgS2NCYWRTdGF0ZUV4Y2VwdGlvbihcbiAgICAgICAgJ05vIGFjY2VzcyB0byB0aGUgbWtTaGFyZWRLZXkgc28gY2Fubm90IHJlc2hhcmUgaXQgd2l0aCBUUCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkodXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWQpO1xuICAgIGNvbnN0IHBsYWluTWtSZXNoYXJlUmVxdWVzdENpcGhlciA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIHVzZXJTaGFyZWRLZXkubWtSZXNoYXJlUmVxdWVzdENpcGhlclxuICAgICk7XG4gICAgY29uc3QgcGJrID0gYXdhaXQgSldLLmFzS2V5KHBsYWluTWtSZXNoYXJlUmVxdWVzdENpcGhlci5wYmspO1xuICAgIGNvbnN0IG1rU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoXG4gICAgICB1c2VyU2hhcmVkS2V5Lm1rU2hhcmVkS2V5LmlkXG4gICAgKTtcblxuICAgIGNvbnN0IHBsYWluTWtSZXNoYXJlUmVzcG9uc2VDaXBoZXIgPSB7XG4gICAgICBta1NoYXJlZEtleToge1xuICAgICAgICBpZDogbWtTaGFyZWRLZXkuaWQsXG4gICAgICAgIGp3azogbWtTaGFyZWRLZXkuandrLnRvSlNPTih0cnVlKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIFdyYXAgd2l0aCBzaGFyZWRLZXkgdGhlbiBhZ2FpbiB3aXRoIFBia1xuICAgIGNvbnN0IG1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyID1cbiAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBwYmssXG4gICAgICAgIGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICAgIHNoYXJlZEtleS5qd2ssXG4gICAgICAgICAgcGxhaW5Na1Jlc2hhcmVSZXNwb25zZUNpcGhlclxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBSZXNwb25kVHBNa1Jlc2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIHRwSWQsXG4gICAgICAgICAgbWtTaGFyZWRLZXlJZDogbWtTaGFyZWRLZXkuaWQsXG4gICAgICAgICAgbWtSZXNoYXJlUmVzcG9uc2VDaXBoZXIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVNa1Jlc2hhcmUodHBJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICBjb25zdCB1c2VyU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5nZXRUcEN1cnJlbnRVc2VyU2hhcmVkS2V5KHRwSWQpO1xuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkodXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWQpO1xuICAgIGNvbnN0IHByayA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHVzZXJTaGFyZWRLZXkubWtQeGsuaWQpO1xuICAgIGNvbnN0IHBsYWluTWtSZXNoYXJlUmVzcG9uc2VDaXBoZXIgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICAgIHByayxcbiAgICAgICAgdXNlclNoYXJlZEtleS5ta1Jlc2hhcmVSZXNwb25zZUNpcGhlclxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBEb3VibGUgY2hlY2sgaXQncyBhIHZhbGlkIGtleS5cbiAgICBjb25zdCBta1NoYXJlZEtleTogS2V5ID0ge1xuICAgICAgaWQ6IHBsYWluTWtSZXNoYXJlUmVzcG9uc2VDaXBoZXIubWtTaGFyZWRLZXkuaWQsXG4gICAgICBqd2s6IGF3YWl0IEpXSy5hc0tleShwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyLm1rU2hhcmVkS2V5Lmp3ayksXG4gICAgfTtcblxuICAgIGNvbnN0IG1hc3RlcktleSA9IHRoaXMua2V5U2VydmljZS5jdXJyZW50TWFzdGVyS2V5O1xuICAgIGNvbnN0IG1rV3JhcHBlZE1rU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBtYXN0ZXJLZXkuandrLFxuICAgICAgbWtTaGFyZWRLZXkuandrLnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENvbXBsZXRlVHBNa1Jlc2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIHRwSWQsXG4gICAgICAgICAgbWFzdGVyS2V5SWQ6IG1hc3RlcktleS5pZCxcbiAgICAgICAgICBta1NoYXJlZEtleUlkOiBta1NoYXJlZEtleS5pZCxcbiAgICAgICAgICBta1dyYXBwZWRNa1NoYXJlZEtleSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEhlbHBlcnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcml2YXRlIGFzeW5jIGdldFRwQ3VycmVudFVzZXJTaGFyZWRLZXkodHBJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgICBxdWVyeTogVHBDdXJyZW50VXNlclNoYXJlZEtleVF1ZXJ5LFxuICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICBpZDogdHBJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKS50cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5O1xuICB9XG59XG4iXX0=
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3RydXN0ZWQtcGFydHkvdHJ1c3RlZC1wYXJ0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsaUNBQWlDLEVBQ2pDLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsNEJBQTRCLEVBQzVCLHVCQUF1QixHQUN4QixNQUFNLHFCQUFxQixDQUFD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Z0JBQ3JDLFNBQVMsRUFBRTtvQkFDVCxLQUFLLEVBQUU7d0JBQ0wsSUFBSTt3QkFDSixXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7d0JBQ3pCLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRTt3QkFDN0Isb0JBQW9CO3FCQUNyQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVELHVGQUF1RjtJQUN2Rix1RkFBdUY7SUFDdkYsVUFBVTtJQUNWLHVGQUF1RjtJQUN2Rix1RkFBdUY7SUFDekUseUJBQXlCLENBQUMsSUFBb0I7O1lBQzFELE9BQU8sQ0FDTCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUN6QixLQUFLLEVBQUUsMkJBQTJCO2dCQUNsQyxTQUFTLEVBQUU7b0JBQ1QsRUFBRSxFQUFFLElBQUk7aUJBQ1Q7YUFDRixDQUFDLENBQ0gsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDO1FBQzFDLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQWhpQkEsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUF0RDhCLE1BQU07WUFBaEIsUUFBUTtZQVlwQixlQUFlO1lBSGYsV0FBVztZQUlYLFVBQVU7WUFGVixpQkFBaUI7WUFIakIsaUJBQWlCOztBQStDYixtQkFBbUI7SUFOL0IsaUJBQWlCLENBQUM7UUFDakIsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQztHQUlXLG1CQUFtQixDQTZoQi9CO1NBN2hCWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHtcbiAgQWNjZXNzUm9sZUNob2ljZSxcbiAgTHJSZWxheUlkSW5wdXQsXG4gIFNoYXJlVHlwZUNob2ljZSxcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZW5jcnlwdGlvbi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICcuLi9pdGVtL2l0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBJZEtleVBhaXIgfSBmcm9tICcuLi9pdGVtL2l0ZW0udHlwZXMnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9rZXkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2tleS9rZXkuc2VydmljZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9rZXkva2V5LnR5cGVzJztcbmltcG9ydCB7XG4gIEtjQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIEtjQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XG5pbXBvcnQge1xuICBDb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgQ29tcGxldGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uLFxuICBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24sXG4gIENyZWF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gIENyZWF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICBEZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICBEZWxldGVGaWxlU2hhcmVNdXRhdGlvbixcbiAgRGVsZXRlVHBNdXRhdGlvbixcbiAgUmVxdWVzdFRwTWtSZXNoYXJlTXV0YXRpb24sXG4gIFJlc3BvbmRUcE1rUmVzaGFyZU11dGF0aW9uLFxuICBVcGRhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICBVcGRhdGVGaWxlU2hhcmVNdXRhdGlvbixcbn0gZnJvbSAnLi90cnVzdGVkLXBhcnR5LmdxbCc7XG5pbXBvcnQge1xuICBEaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICBEaXJlY3RvcnlTaGFyZVF1ZXJ5UmVzdWx0LFxuICBGaWxlU2hhcmVRdWVyeSxcbiAgRmlsZVNoYXJlUXVlcnlSZXN1bHQsXG4gIEl0ZW1TaGFyZVF1ZXJ5UmVzdWx0LFxuICBUcEN1cnJlbnRVc2VyU2hhcmVkS2V5UXVlcnksXG59IGZyb20gJy4vdHJ1c3RlZC1wYXJ0eS5ncWwucHJpdmF0ZSc7XG5pbXBvcnQge1xuICBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucyxcbiAgQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucyxcbiAgVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zLFxuICBVcGRhdGVJdGVtU2hhcmVPcHRpb25zLFxufSBmcm9tICcuL3RydXN0ZWQtcGFydHkudHlwZXMnO1xuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHJ1c3RlZFBhcnR5U2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcbiAgICBwcml2YXRlIGtleUZhY3Rvcnk6IEtleUZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW5jcnlwdGlvblNlcnZpY2U6IEVuY3J5cHRpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGRlbGV0ZVRwKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVsZXRlVHBNdXRhdGlvbih0cElkKSk7XG4gIH1cblxuICBkZWxldGVUcE11dGF0aW9uKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVUcE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQ6IHRwSWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5U2hhcmUob3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zOiBDcmVhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlU2hhcmUob3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnM6IENyZWF0ZUl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZUZpbGVTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlSXRlbVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ3JlYXRlSXRlbVNoYXJlT3B0aW9ucyAmIHsgaXNEaXJlY3Rvcnk6IGJvb2xlYW4gfVxuICApIHtcbiAgICBjb25zdCB7XG4gICAgICBpdGVtSWQ6IF9pdGVtSWQsXG4gICAgICBpdGVtS2V5SWQ6IF9pdGVtS2V5SWQsXG4gICAgICB0cElkLFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICBpc0RpcmVjdG9yeSxcbiAgICAgIHNoYXJlVHlwZSxcbiAgICAgIHBsYWluTWV0YUpzb24sXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtOiBJZEtleVBhaXIgPSBvcHRpb25zLml0ZW0gfHwge1xuICAgICAgaWQ6IF9pdGVtSWQsXG4gICAgICBrZXlJZDogX2l0ZW1LZXlJZCxcbiAgICB9O1xuXG4gICAgY29uc3QgcGxhaW5NZXRhID0gcGxhaW5NZXRhSnNvbiAmJiBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKTtcblxuICAgIGlmIChhY2Nlc3NSb2xlID09IEFjY2Vzc1JvbGVDaG9pY2UuREVOWSkge1xuICAgICAgaWYgKGl0ZW0ua2V5SWQgfHwgdHBTaGFyZWRLZXlJZCkge1xuICAgICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgICAnSWYgYWNjZXNzUm9sZSBpcyBBY2Nlc3NSb2xlQ2hvaWNlLkRFTlksIG11c3Qgbm90IHNwZWNpZnkgYW55IG9mIGl0ZW1JZCwgaXRlbUtleUlkLCBvciB0cFNoYXJlZEtleUlkIHBhcmFtZXRlcnMnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaXRlbUlkOiBpdGVtLmlkLFxuICAgICAgICAgIHRwSWQsXG4gICAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgICBpdGVtS2V5SWQ6IG51bGwsXG4gICAgICAgICAgd3JhcHBpbmdLZXlJZDogbnVsbCxcbiAgICAgICAgICB3cmFwcGVkSXRlbUtleTogbnVsbCxcbiAgICAgICAgICBzaGFyZVR5cGUsXG4gICAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoaXRlbS5rZXlJZCwgKCkgPT5cbiAgICAgIGlzRGlyZWN0b3J5XG4gICAgICAgID8gdGhpcy5pdGVtU2VydmljZS5nZXREaXJlY3RvcnlLZXlJZChpdGVtLmlkKVxuICAgICAgICA6IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RmlsZUtleUlkKGl0ZW0uaWQpXG4gICAgKTtcblxuICAgIGNvbnN0IHdyYXBwaW5nS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkodHBTaGFyZWRLZXlJZCwgKCkgPT5cbiAgICAgIHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkKS50aGVuKChyZXMpID0+IHJlcy5zaGFyZWRLZXkuaWQpXG4gICAgKTtcbiAgICBjb25zdCB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGgud3JhcEtleShcbiAgICAgIHdyYXBwaW5nS2V5LFxuICAgICAgaXRlbUtleS5qd2tcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGl0ZW1JZDogaXRlbS5pZCxcbiAgICAgICAgdHBJZCxcbiAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgaXRlbUtleUlkOiBpdGVtS2V5LmlkLFxuICAgICAgICB3cmFwcGluZ0tleUlkOiB3cmFwcGluZ0tleS5pZCxcbiAgICAgICAgd3JhcHBlZEl0ZW1LZXksXG4gICAgICAgIHNoYXJlVHlwZSxcbiAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5U2hhcmUob3B0aW9uczogVXBkYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zOiBVcGRhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlKG9wdGlvbnM6IFVwZGF0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZERpcmVjdG9yeVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRGlyZWN0b3J5U2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbihvcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbGVTaGFyZShvcHRpb25zOiBVcGRhdGVJdGVtU2hhcmVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlRmlsZVNoYXJlTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsZVNoYXJlTXV0YXRpb24ob3B0aW9uczogVXBkYXRlSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRmlsZVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZUl0ZW1TaGFyZU11dGF0aW9uKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaXNEaXJlY3Rvcnk6IGZhbHNlLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXRhY2hlZEZpbGVTaGFyZShvcHRpb25zOiBVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVEZXRhY2hlZEZpbGVTaGFyZU11dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURldGFjaGVkRmlsZVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zXG4gICkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlRmlsZVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZURldGFjaGVkSXRlbVNoYXJlTXV0YXRpb24ob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERpcmVjdG9yeVNoYXJlKFxuICAgIGl0ZW1TaGFyZUlkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEaXJlY3RvcnlTaGFyZVF1ZXJ5UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBEaXJlY3RvcnlTaGFyZVF1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVTaGFyZShpdGVtU2hhcmVJZDogc3RyaW5nKTogUHJvbWlzZTxGaWxlU2hhcmVRdWVyeVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmxyR3JhcGhRTC5xdWVyeSh7XG4gICAgICBxdWVyeTogRmlsZVNoYXJlUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZUl0ZW1TaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IFVwZGF0ZUl0ZW1TaGFyZU9wdGlvbnMgJiB7IGlzRGlyZWN0b3J5OiBib29sZWFuIH1cbiAgKSB7XG4gICAgY29uc3Qge1xuICAgICAgaXRlbVNoYXJlSWQsXG4gICAgICBhY2Nlc3NSb2xlLFxuICAgICAgaXNEaXJlY3RvcnksXG4gICAgICBpdGVtSWQ6IF9pdGVtSWQsXG4gICAgICBpdGVtS2V5SWQ6IF9pdGVtS2V5SWQsXG4gICAgICB0cElkLFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIHBsYWluTWV0YUpzb24sXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtOiBJZEtleVBhaXIgPSBvcHRpb25zLml0ZW0gfHwge1xuICAgICAgaWQ6IF9pdGVtSWQsXG4gICAgICBrZXlJZDogX2l0ZW1LZXlJZCxcbiAgICB9O1xuXG4gICAgLy8gSWYgcGxhaW5NZXRhSnNvbiBpcyB1bmRlZmluZWQsIHRoZW4gcGxhaW5NZXRhIGlzIHVuZGVmaW5lZFxuICAgIC8vIElmIHBsYWluTWV0YUpzb24gaXMgbnVsbCwgdGhlbiBwbGFpbk1ldGEgaXMgbnVsbFxuICAgIC8vIElmIHBsYWluTWV0YUpzb24gaGFzIHZhbHVlLCB0aGVuIHBsYWluTWV0YSBpcyBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKVxuICAgIGNvbnN0IHBsYWluTWV0YSA9IHBsYWluTWV0YUpzb24gJiYgSlNPTi5zdHJpbmdpZnkocGxhaW5NZXRhSnNvbik7XG5cbiAgICAvLyBJZiBub3QgdXBkYXRpbmcgYWNjZXNzIHJvbGUgb3IgdXBkYXRpbmcgdG8gREVOWSByb2xlLCB0aGVuIHdlIGRvbid0IG5lZWQgYW55IGtleSBtYXRlcmlhbC5cbiAgICBpZiAoYWNjZXNzUm9sZSA9PSBudWxsIHx8IGFjY2Vzc1JvbGUgPT0gQWNjZXNzUm9sZUNob2ljZS5ERU5ZKSB7XG4gICAgICBpZiAoaXRlbS5pZCB8fCBpdGVtLmtleUlkIHx8IHRwSWQgfHwgdHBTaGFyZWRLZXlJZCkge1xuICAgICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgICAnSWYgYWNjZXNzUm9sZSBpcyBBY2Nlc3NSb2xlQ2hvaWNlLkRFTlksIG11c3Qgbm90IHNwZWNpZnkgYW55IG9mIGl0ZW1JZCwgaXRlbUtleUlkLCB0cElkLCBvciB0cFNoYXJlZEtleUlkIHBhcmFtZXRlcnMnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDYWNoaW5nIHRoZSByZXN1bHQgc28gd2Ugb25seSBuZWVkIG9uZSBjYWxsLlxuICAgIGxldCBpdGVtU2hhcmU6IEl0ZW1TaGFyZVF1ZXJ5UmVzdWx0O1xuXG4gICAgY29uc3QgZ2V0SXRlbVNoYXJlID0gYXN5bmMgKCk6IFByb21pc2U8SXRlbVNoYXJlUXVlcnlSZXN1bHQ+ID0+IHtcbiAgICAgIGlmICghaXRlbVNoYXJlKSB7XG4gICAgICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgICAgIGl0ZW1TaGFyZSA9IChhd2FpdCB0aGlzLmdldERpcmVjdG9yeVNoYXJlKGl0ZW1TaGFyZUlkKSlcbiAgICAgICAgICAgIC5kaXJlY3RvcnlTaGFyZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtU2hhcmUgPSAoYXdhaXQgdGhpcy5nZXRGaWxlU2hhcmUoaXRlbVNoYXJlSWQpKS5maWxlU2hhcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbVNoYXJlLnNoYXJlVHlwZSA9PSBTaGFyZVR5cGVDaG9pY2UuREVUQUNIRUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgICAgICdVc2UgdXBkYXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZSgpIG9yIHVwZGF0ZURldGFjaGVkRmlsZVNoYXJlKCkgdG8gdXBkYXRlZCBERVRBQ0hFRCBzaGFyZXMuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0ZW1TaGFyZTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgaXRlbS5rZXlJZCxcbiAgICAgIGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCBpdGVtSWRfID0gaXRlbS5pZCB8fCAoYXdhaXQgZ2V0SXRlbVNoYXJlKCkpLml0ZW0uaWQ7XG4gICAgICAgIGlmIChpc0RpcmVjdG9yeSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1TZXJ2aWNlLmdldERpcmVjdG9yeUtleUlkKGl0ZW1JZF8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1TZXJ2aWNlLmdldEZpbGVLZXlJZChpdGVtSWRfKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB3cmFwcGluZ0tleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgdHBTaGFyZWRLZXlJZCxcbiAgICAgIGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgICAgICBjb25zdCB0cElkXyA9IHRwSWQgfHwgKGF3YWl0IGdldEl0ZW1TaGFyZSgpKS50cC5pZDtcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldFRwQ3VycmVudFVzZXJTaGFyZWRLZXkodHBJZF8pKS5zaGFyZWRLZXkuaWQ7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC53cmFwS2V5KFxuICAgICAgd3JhcHBpbmdLZXksXG4gICAgICBpdGVtS2V5Lmp3a1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgaWQ6IGl0ZW1TaGFyZUlkLFxuICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICBpdGVtS2V5SWQ6IGl0ZW1LZXkuaWQsXG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHdyYXBwaW5nS2V5LmlkLFxuICAgICAgICB3cmFwcGVkSXRlbUtleSxcbiAgICAgICAgcGxhaW5NZXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbihcbiAgICBvcHRpb25zOiBVcGRhdGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgeyBpdGVtU2hhcmVJZCwgYWNjZXNzUm9sZSwgcGxhaW5NZXRhSnNvbiB9ID0gb3B0aW9ucztcblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBpZDogaXRlbVNoYXJlSWQsXG4gICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgIHBsYWluTWV0YTogcGxhaW5NZXRhSnNvbiAmJiBKU09OLnN0cmluZ2lmeShwbGFpbk1ldGFKc29uKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZURpcmVjdG9yeVNoYXJlKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uKGlkKSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVEaXJlY3RvcnlTaGFyZU11dGF0aW9uKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZURpcmVjdG9yeVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlU2hhcmUoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZUZpbGVTaGFyZU11dGF0aW9uKGlkKSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlU2hhcmVNdXRhdGlvbihpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVGaWxlU2hhcmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZShcbiAgICBvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjb21wbGV0ZURldGFjaGVkRGlyZWN0b3J5U2hhcmVNdXRhdGlvbihcbiAgICBvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENvbXBsZXRlRGV0YWNoZWREaXJlY3RvcnlTaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiBhd2FpdCB0aGlzLnByZXBhcmVDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlTXV0YXRpb24oe1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBpc0RpcmVjdG9yeTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY29tcGxldGVEZXRhY2hlZEZpbGVTaGFyZShvcHRpb25zOiBDb21wbGV0ZURldGFjaGVkSXRlbVNoYXJlT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNvbXBsZXRlRGV0YWNoZWRGaWxlU2hhcmVNdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyBjb21wbGV0ZURldGFjaGVkRmlsZVNoYXJlTXV0YXRpb24oXG4gICAgb3B0aW9uczogQ29tcGxldGVEZXRhY2hlZEl0ZW1TaGFyZU9wdGlvbnNcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDb21wbGV0ZURldGFjaGVkRmlsZVNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IGF3YWl0IHRoaXMucHJlcGFyZUNvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVNdXRhdGlvbih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGlzRGlyZWN0b3J5OiBmYWxzZSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ29tcGxldGVEZXRhY2hlZEl0ZW1TaGFyZU11dGF0aW9uKFxuICAgIG9wdGlvbnM6IENvbXBsZXRlRGV0YWNoZWRJdGVtU2hhcmVPcHRpb25zICYgeyBpc0RpcmVjdG9yeTogYm9vbGVhbiB9XG4gICkge1xuICAgIGNvbnN0IHsgaXRlbVNoYXJlSWQsIGl0ZW1LZXlJZCwgaXNEaXJlY3RvcnkgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBpdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoaXRlbUtleUlkLCAoKSA9PlxuICAgICAgaXNEaXJlY3RvcnlcbiAgICAgICAgPyB0aGlzLml0ZW1TZXJ2aWNlLmdldERpcmVjdG9yeUtleUlkRnJvbURpcmVjdG9yeVNoYXJlKGl0ZW1TaGFyZUlkKVxuICAgICAgICA6IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RmlsZUtleUlkRnJvbUZpbGVTaGFyZShpdGVtU2hhcmVJZClcbiAgICApO1xuXG4gICAgY29uc3Qgcm9vdEtleSA9IHRoaXMua2V5U2VydmljZS5jdXJyZW50Um9vdEtleTtcblxuICAgIGNvbnN0IHdyYXBwZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLndyYXBLZXkocm9vdEtleSwgaXRlbUtleS5qd2spO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGlkOiBpdGVtU2hhcmVJZCxcbiAgICAgICAga2V5SWQ6IGl0ZW1LZXkuaWQsXG4gICAgICAgIHdyYXBwaW5nS2V5SWQ6IHJvb3RLZXkuaWQsXG4gICAgICAgIHdyYXBwZWRLZXksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZXF1ZXN0TWtSZXNoYXJlTXV0YXRpb24odHBJZDogTHJSZWxheUlkSW5wdXQpIHtcbiAgICBjb25zdCB1c2VyU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5nZXRUcEN1cnJlbnRVc2VyU2hhcmVkS2V5KHRwSWQpO1xuXG4gICAgaWYgKHVzZXJTaGFyZWRLZXkubWtTaGFyZWRLZXkpIHtcbiAgICAgIHRocm93IG5ldyBLY0JhZFN0YXRlRXhjZXB0aW9uKCdUUCBhbHJlYWR5IGhhcyBta1NoYXJlZEtleScpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hc3RlcktleSA9IHRoaXMua2V5U2VydmljZS5jdXJyZW50TWFzdGVyS2V5O1xuICAgIGNvbnN0IHByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NLZXkoKTtcbiAgICBjb25zdCBta1dyYXBwZWRNa1ByayA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgbWFzdGVyS2V5Lmp3ayxcbiAgICAgIHByay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkodXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWQpO1xuICAgIGNvbnN0IG1rUmVzaGFyZVJlcXVlc3RDaXBoZXIgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHNoYXJlZEtleS5qd2ssXG4gICAgICB7XG4gICAgICAgIHBiazogcHJrLnRvSlNPTigpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFJlcXVlc3RUcE1rUmVzaGFyZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgdHBJZCxcbiAgICAgICAgICBtYXN0ZXJLZXlJZDogbWFzdGVyS2V5LmlkLFxuICAgICAgICAgIG1rUGJrOiBKU09OLnN0cmluZ2lmeShwcmsudG9KU09OKCkpLFxuICAgICAgICAgIG1rV3JhcHBlZE1rUHJrLFxuICAgICAgICAgIHNoYXJlZEtleUlkOiBzaGFyZWRLZXkuaWQsXG4gICAgICAgICAgbWtSZXNoYXJlUmVxdWVzdENpcGhlcixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZXNwb25kTWtSZXNoYXJlKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgY29uc3QgdXNlclNoYXJlZEtleSA9IGF3YWl0IHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkKTtcblxuICAgIGlmICghdXNlclNoYXJlZEtleS5ta1NoYXJlZEtleSkge1xuICAgICAgdGhyb3cgbmV3IEtjQmFkU3RhdGVFeGNlcHRpb24oXG4gICAgICAgICdObyBhY2Nlc3MgdG8gdGhlIG1rU2hhcmVkS2V5IHNvIGNhbm5vdCByZXNoYXJlIGl0IHdpdGggVFAnXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkKTtcbiAgICBjb25zdCBwbGFpbk1rUmVzaGFyZVJlcXVlc3RDaXBoZXIgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICBzaGFyZWRLZXksXG4gICAgICB1c2VyU2hhcmVkS2V5Lm1rUmVzaGFyZVJlcXVlc3RDaXBoZXJcbiAgICApO1xuICAgIGNvbnN0IHBiayA9IGF3YWl0IEpXSy5hc0tleShwbGFpbk1rUmVzaGFyZVJlcXVlc3RDaXBoZXIucGJrKTtcbiAgICBjb25zdCBta1NoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KFxuICAgICAgdXNlclNoYXJlZEtleS5ta1NoYXJlZEtleS5pZFxuICAgICk7XG5cbiAgICBjb25zdCBwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyID0ge1xuICAgICAgbWtTaGFyZWRLZXk6IHtcbiAgICAgICAgaWQ6IG1rU2hhcmVkS2V5LmlkLFxuICAgICAgICBqd2s6IG1rU2hhcmVkS2V5Lmp3ay50b0pTT04odHJ1ZSksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBXcmFwIHdpdGggc2hhcmVkS2V5IHRoZW4gYWdhaW4gd2l0aCBQYmtcbiAgICBjb25zdCBta1Jlc2hhcmVSZXNwb25zZUNpcGhlciA9XG4gICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgcGJrLFxuICAgICAgICBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgICBzaGFyZWRLZXkuandrLFxuICAgICAgICAgIHBsYWluTWtSZXNoYXJlUmVzcG9uc2VDaXBoZXJcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogUmVzcG9uZFRwTWtSZXNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICB0cElkLFxuICAgICAgICAgIG1rU2hhcmVkS2V5SWQ6IG1rU2hhcmVkS2V5LmlkLFxuICAgICAgICAgIG1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlTWtSZXNoYXJlKHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgY29uc3QgdXNlclNoYXJlZEtleSA9IGF3YWl0IHRoaXMuZ2V0VHBDdXJyZW50VXNlclNoYXJlZEtleSh0cElkKTtcblxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0S2V5KHVzZXJTaGFyZWRLZXkuc2hhcmVkS2V5LmlkKTtcbiAgICBjb25zdCBwcmsgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleSh1c2VyU2hhcmVkS2V5Lm1rUHhrLmlkKTtcbiAgICBjb25zdCBwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgICBwcmssXG4gICAgICAgIHVzZXJTaGFyZWRLZXkubWtSZXNoYXJlUmVzcG9uc2VDaXBoZXJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gRG91YmxlIGNoZWNrIGl0J3MgYSB2YWxpZCBrZXkuXG4gICAgY29uc3QgbWtTaGFyZWRLZXk6IEtleSA9IHtcbiAgICAgIGlkOiBwbGFpbk1rUmVzaGFyZVJlc3BvbnNlQ2lwaGVyLm1rU2hhcmVkS2V5LmlkLFxuICAgICAgandrOiBhd2FpdCBKV0suYXNLZXkocGxhaW5Na1Jlc2hhcmVSZXNwb25zZUNpcGhlci5ta1NoYXJlZEtleS5qd2spLFxuICAgIH07XG5cbiAgICBjb25zdCBtYXN0ZXJLZXkgPSB0aGlzLmtleVNlcnZpY2UuY3VycmVudE1hc3RlcktleTtcbiAgICBjb25zdCBta1dyYXBwZWRNa1NoYXJlZEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgbWFzdGVyS2V5Lmp3ayxcbiAgICAgIG1rU2hhcmVkS2V5Lmp3ay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDb21wbGV0ZVRwTWtSZXNoYXJlTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICB0cElkLFxuICAgICAgICAgIG1hc3RlcktleUlkOiBtYXN0ZXJLZXkuaWQsXG4gICAgICAgICAgbWtTaGFyZWRLZXlJZDogbWtTaGFyZWRLZXkuaWQsXG4gICAgICAgICAgbWtXcmFwcGVkTWtTaGFyZWRLZXksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgcHJpdmF0ZSBhc3luYyBnZXRUcEN1cnJlbnRVc2VyU2hhcmVkS2V5KHRwSWQ6IExyUmVsYXlJZElucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMubHJHcmFwaFFMLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IFRwQ3VycmVudFVzZXJTaGFyZWRLZXlRdWVyeSxcbiAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgaWQ6IHRwSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICkudHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleTtcbiAgfVxufVxuIl19
|