tnp-helpers 18.0.18 → 18.0.20
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/assets/shared/shared_folder_info.txt +1 -1
- package/browser/README.md +24 -24
- package/browser/esm2022/lib/base/classes/base-cli-worker.mjs +57 -8
- package/browser/esm2022/lib/base/classes/base-git.mjs +16 -1
- package/browser/esm2022/lib/base/classes/base-library-build.mjs +31 -10
- package/browser/esm2022/lib/base/classes/base-npm-helpers.mjs +5 -6
- package/browser/esm2022/lib/base/classes/base-project.mjs +12 -31
- package/browser/esm2022/lib/base/classes/base-release-process.mjs +8 -43
- package/browser/esm2022/lib/base/classes/base-vscode.mjs +28 -1
- package/browser/esm2022/lib/base/commit-data.mjs +5 -6
- package/browser/esm2022/lib/base/core-project.mjs +1 -1
- package/browser/esm2022/lib/base/tcp-udp-ports/index.mjs +1 -2
- package/browser/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +169 -17
- package/browser/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +10 -3
- package/browser/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -3
- package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +187 -11
- package/browser/esm2022/lib/index.mjs +1 -4
- package/browser/esm2022/lib/models.mjs +1 -1
- package/browser/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +16 -8
- package/browser/esm2022/migrations/1736454437350_addFreePorts.mjs +20 -7
- package/browser/fesm2022/tnp-helpers.mjs +544 -150
- package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
- package/browser/lib/base/classes/base-cli-worker.d.ts +28 -5
- package/browser/lib/base/classes/base-git.d.ts +8 -0
- package/browser/lib/base/classes/base-library-build.d.ts +3 -6
- package/browser/lib/base/classes/base-npm-helpers.d.ts +5 -1
- package/browser/lib/base/classes/base-project.d.ts +3 -2
- package/browser/lib/base/classes/base-release-process.d.ts +13 -10
- package/browser/lib/base/core-project.d.ts +1 -1
- package/browser/lib/base/tcp-udp-ports/index.d.ts +0 -1
- package/browser/lib/base/tcp-udp-ports/ports.controller.d.ts +15 -6
- package/browser/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
- package/browser/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +10 -8
- package/browser/lib/index.d.ts +1 -3
- package/browser/lib/models.d.ts +0 -6
- package/client/README.md +24 -24
- package/client/esm2022/lib/base/classes/base-cli-worker.mjs +57 -8
- package/client/esm2022/lib/base/classes/base-git.mjs +16 -1
- package/client/esm2022/lib/base/classes/base-library-build.mjs +31 -10
- package/client/esm2022/lib/base/classes/base-npm-helpers.mjs +5 -6
- package/client/esm2022/lib/base/classes/base-project.mjs +12 -31
- package/client/esm2022/lib/base/classes/base-release-process.mjs +8 -43
- package/client/esm2022/lib/base/classes/base-vscode.mjs +28 -1
- package/client/esm2022/lib/base/commit-data.mjs +5 -6
- package/client/esm2022/lib/base/core-project.mjs +1 -1
- package/client/esm2022/lib/base/tcp-udp-ports/index.mjs +1 -2
- package/client/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +169 -17
- package/client/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +10 -3
- package/client/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -3
- package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +187 -11
- package/client/esm2022/lib/index.mjs +1 -4
- package/client/esm2022/lib/models.mjs +1 -1
- package/client/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +16 -8
- package/client/esm2022/migrations/1736454437350_addFreePorts.mjs +20 -7
- package/client/fesm2022/tnp-helpers.mjs +544 -150
- package/client/fesm2022/tnp-helpers.mjs.map +1 -1
- package/client/lib/base/classes/base-cli-worker.d.ts +28 -5
- package/client/lib/base/classes/base-git.d.ts +8 -0
- package/client/lib/base/classes/base-library-build.d.ts +3 -6
- package/client/lib/base/classes/base-npm-helpers.d.ts +5 -1
- package/client/lib/base/classes/base-project.d.ts +3 -2
- package/client/lib/base/classes/base-release-process.d.ts +13 -10
- package/client/lib/base/core-project.d.ts +1 -1
- package/client/lib/base/tcp-udp-ports/index.d.ts +0 -1
- package/client/lib/base/tcp-udp-ports/ports.controller.d.ts +15 -6
- package/client/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
- package/client/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +10 -8
- package/client/lib/index.d.ts +1 -3
- package/client/lib/models.d.ts +0 -6
- package/lib/base/classes/base-cli-worker-controller.js +1 -1
- package/lib/base/classes/base-cli-worker-controller.js.map +1 -1
- package/lib/base/classes/base-cli-worker.d.ts +28 -5
- package/lib/base/classes/base-cli-worker.js +104 -34
- package/lib/base/classes/base-cli-worker.js.map +1 -1
- package/lib/base/classes/base-git.d.ts +8 -0
- package/lib/base/classes/base-git.js +32 -0
- package/lib/base/classes/base-git.js.map +1 -1
- package/lib/base/classes/base-global-command-line.backend.d.ts +4 -0
- package/lib/base/classes/base-global-command-line.backend.js +25 -0
- package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
- package/lib/base/classes/base-library-build.d.ts +3 -6
- package/lib/base/classes/base-library-build.js +46 -29
- package/lib/base/classes/base-library-build.js.map +1 -1
- package/lib/base/classes/base-npm-helpers.d.ts +2 -0
- package/lib/base/classes/base-npm-helpers.js +11 -3
- package/lib/base/classes/base-npm-helpers.js.map +1 -1
- package/lib/base/classes/base-project.d.ts +3 -2
- package/lib/base/classes/base-project.js +18 -43
- package/lib/base/classes/base-project.js.map +1 -1
- package/lib/base/classes/base-release-process.d.ts +13 -10
- package/lib/base/classes/base-release-process.js +15 -88
- package/lib/base/classes/base-release-process.js.map +1 -1
- package/lib/base/classes/base-start-config.backend.js +1 -1
- package/lib/base/classes/base-start-config.backend.js.map +1 -1
- package/lib/base/classes/base-vscode.js +45 -25
- package/lib/base/classes/base-vscode.js.map +1 -1
- package/lib/base/commit-data.js +9 -10
- package/lib/base/commit-data.js.map +1 -1
- package/lib/base/core-project.d.ts +1 -1
- package/lib/base/tcp-udp-ports/index.d.ts +0 -1
- package/lib/base/tcp-udp-ports/index.js +0 -1
- package/lib/base/tcp-udp-ports/index.js.map +1 -1
- package/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -6
- package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -42
- package/lib/base/tcp-udp-ports/not-assignable-port.entity.js.map +1 -1
- package/lib/base/tcp-udp-ports/ports.controller.d.ts +14 -5
- package/lib/base/tcp-udp-ports/ports.controller.js +227 -19
- package/lib/base/tcp-udp-ports/ports.controller.js.map +1 -1
- package/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
- package/lib/base/tcp-udp-ports/ports.entity.js +32 -2
- package/lib/base/tcp-udp-ports/ports.entity.js.map +1 -1
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +1 -2
- package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +14 -8
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +293 -30
- package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
- package/lib/helpers/for-backend/helpers-git.backend.d.ts +10 -0
- package/lib/helpers/for-backend/helpers-git.backend.js +59 -0
- package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
- package/lib/helpers/for-browser/angular.helper.js +2 -2
- package/lib/index.d.ts +1 -3
- package/lib/index.js +0 -3
- package/lib/index.js.map +1 -1
- package/lib/models.d.ts +0 -6
- package/lib/old/base-component.js +2 -2
- package/lib/old/base-formly-component.js +2 -2
- package/lib/old/dual-component-ctrl.js +2 -2
- package/migrations/1736199486472_addingNotAssignablePorts.js +33 -10
- package/migrations/1736199486472_addingNotAssignablePorts.js.map +1 -1
- package/migrations/1736454437350_addFreePorts.js +42 -14
- package/migrations/1736454437350_addFreePorts.js.map +1 -1
- package/package.json +5 -5
- package/taon.jsonc +49 -49
- package/tmp-environment.json +29 -29
- package/websql/README.md +24 -24
- package/websql/esm2022/lib/base/classes/base-cli-worker.mjs +57 -8
- package/websql/esm2022/lib/base/classes/base-git.mjs +16 -1
- package/websql/esm2022/lib/base/classes/base-library-build.mjs +31 -10
- package/websql/esm2022/lib/base/classes/base-npm-helpers.mjs +5 -6
- package/websql/esm2022/lib/base/classes/base-project.mjs +12 -31
- package/websql/esm2022/lib/base/classes/base-release-process.mjs +8 -43
- package/websql/esm2022/lib/base/classes/base-vscode.mjs +28 -1
- package/websql/esm2022/lib/base/commit-data.mjs +5 -6
- package/websql/esm2022/lib/base/core-project.mjs +1 -1
- package/websql/esm2022/lib/base/tcp-udp-ports/index.mjs +1 -2
- package/websql/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +169 -17
- package/websql/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +25 -3
- package/websql/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +2 -3
- package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +187 -11
- package/websql/esm2022/lib/index.mjs +1 -4
- package/websql/esm2022/lib/models.mjs +1 -1
- package/websql/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +16 -8
- package/websql/esm2022/migrations/1736454437350_addFreePorts.mjs +20 -7
- package/websql/fesm2022/tnp-helpers.mjs +560 -166
- package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
- package/websql/lib/base/classes/base-cli-worker.d.ts +28 -5
- package/websql/lib/base/classes/base-git.d.ts +8 -0
- package/websql/lib/base/classes/base-library-build.d.ts +3 -6
- package/websql/lib/base/classes/base-npm-helpers.d.ts +2 -0
- package/websql/lib/base/classes/base-project.d.ts +3 -2
- package/websql/lib/base/classes/base-release-process.d.ts +13 -10
- package/websql/lib/base/core-project.d.ts +1 -1
- package/websql/lib/base/tcp-udp-ports/index.d.ts +0 -1
- package/websql/lib/base/tcp-udp-ports/ports.controller.d.ts +15 -6
- package/websql/lib/base/tcp-udp-ports/ports.entity.d.ts +8 -4
- package/websql/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +10 -8
- package/websql/lib/index.d.ts +1 -3
- package/websql/lib/models.d.ts +0 -6
- package/browser/esm2022/lib/base/tcp-udp-ports/not-assignable-port.entity.mjs +0 -19
- package/browser/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -7
- package/client/esm2022/lib/base/tcp-udp-ports/not-assignable-port.entity.mjs +0 -19
- package/client/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -7
- package/websql/esm2022/lib/base/tcp-udp-ports/not-assignable-port.entity.mjs +0 -34
- package/websql/lib/base/tcp-udp-ports/not-assignable-port.entity.d.ts +0 -7
|
@@ -16,6 +16,7 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
|
|
|
16
16
|
* unique id for service
|
|
17
17
|
*/
|
|
18
18
|
protected readonly serviceVersion: string;
|
|
19
|
+
protected SPECIAL_WORKER_READY_MESSAGE: string;
|
|
19
20
|
constructor(
|
|
20
21
|
/**
|
|
21
22
|
* unique id for service
|
|
@@ -33,7 +34,9 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
|
|
|
33
34
|
abstract getControllerForRemoteConnection(): Promise<REMOTE_CTRL>;
|
|
34
35
|
protected get pathToProcessLocalInfoJson(): string;
|
|
35
36
|
protected get processLocalInfoObj(): BaseCliWorkerConfig;
|
|
36
|
-
startDetachedIfNeedsToBeStarted(
|
|
37
|
+
startDetachedIfNeedsToBeStarted(options?: {
|
|
38
|
+
useCurrentWindowForDetach?: boolean;
|
|
39
|
+
}): Promise<any>;
|
|
37
40
|
/**
|
|
38
41
|
* stop if started
|
|
39
42
|
*/
|
|
@@ -46,6 +49,7 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
|
|
|
46
49
|
*/
|
|
47
50
|
restart(options?: {
|
|
48
51
|
detached?: boolean;
|
|
52
|
+
useCurrentWindowForDetach?: boolean;
|
|
49
53
|
}): Promise<void>;
|
|
50
54
|
/**
|
|
51
55
|
* only for cli start
|
|
@@ -66,7 +70,9 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
|
|
|
66
70
|
/**
|
|
67
71
|
* start if not started detached process
|
|
68
72
|
*/
|
|
69
|
-
protected startDetached(
|
|
73
|
+
protected startDetached(options?: {
|
|
74
|
+
useCurrentWindowForDetach?: boolean;
|
|
75
|
+
}): Promise<any>;
|
|
70
76
|
protected headerText(): Promise<string>;
|
|
71
77
|
protected textHeaderStyle(): CfontStyle;
|
|
72
78
|
protected headerTextAlign(): CfontAlign;
|
|
@@ -75,13 +81,30 @@ export declare abstract class BaseCliWorker<REMOTE_CTRL extends BaseCliWorkerCon
|
|
|
75
81
|
*/
|
|
76
82
|
protected header(): Promise<void>;
|
|
77
83
|
infoMessageBelowHeader(): Promise<void>;
|
|
78
|
-
protected
|
|
84
|
+
protected get backAction(): {
|
|
85
|
+
back: {
|
|
86
|
+
name: string;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
protected get chooseAction(): {
|
|
90
|
+
emptyAction: {
|
|
91
|
+
name: string;
|
|
92
|
+
action: () => Promise<void>;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
protected displaySpecialWorkerReadyMessage(): void;
|
|
96
|
+
protected getWorkerTerminalActions(options?: {
|
|
97
|
+
exitIsOnlyReturn?: boolean;
|
|
98
|
+
chooseAction?: boolean;
|
|
99
|
+
}): {
|
|
79
100
|
[uniqeActionName: string]: {
|
|
80
101
|
name: string;
|
|
81
|
-
action: () =>
|
|
102
|
+
action: () => unknown | Promise<unknown>;
|
|
82
103
|
};
|
|
83
104
|
};
|
|
84
|
-
|
|
105
|
+
infoScreen(options?: {
|
|
106
|
+
exitIsOnlyReturn?: boolean;
|
|
107
|
+
}): Promise<void>;
|
|
85
108
|
private saveProcessInfo;
|
|
86
109
|
protected initializeWorkerMetadata(): Promise<any>;
|
|
87
110
|
protected waitForProcessPortSavedToDisk(): Promise<void>;
|
|
@@ -24,6 +24,14 @@ export declare class BaseGit<PROJECT extends BaseProject = any> extends BaseFeat
|
|
|
24
24
|
* alias to stage all and commit
|
|
25
25
|
*/
|
|
26
26
|
addAndCommit(commitMessage: string): any;
|
|
27
|
+
getUserInfo(global?: boolean): Promise<{
|
|
28
|
+
name?: string;
|
|
29
|
+
email?: string;
|
|
30
|
+
}>;
|
|
31
|
+
setUserInfo({ name, email }: {
|
|
32
|
+
name?: string;
|
|
33
|
+
email?: string;
|
|
34
|
+
}, global?: boolean): Promise<void>;
|
|
27
35
|
stageAllAndCommit(commitMessage: string): any;
|
|
28
36
|
pushCurrentBranch(options?: {
|
|
29
37
|
force?: boolean;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
import { CoreModels } from 'tnp-core/browser';
|
|
3
2
|
import { BaseFeatureForProject } from './base-feature-for-project';
|
|
4
3
|
import { LibrariesBuildOptions, LibraryBuildCommandOptions } from '../../models';
|
|
5
4
|
import type { BaseProject } from './base-project';
|
|
@@ -39,21 +38,19 @@ export declare abstract class BaseLibraryBuild<PROJECT extends BaseProject<BaseP
|
|
|
39
38
|
/**
|
|
40
39
|
* Angular library build
|
|
41
40
|
*/
|
|
42
|
-
buildLibraries({ watch, strategy, releaseBuild,
|
|
41
|
+
buildLibraries({ watch, strategy, releaseBuild, copylink_to_node_modules, outputLineReplace, libraries, useLastUserConfiguration, }?: LibrariesBuildOptions<PROJECT> & {
|
|
43
42
|
watch?: boolean;
|
|
44
43
|
}): Promise<void>;
|
|
45
|
-
protected libWatchBuildProcess({ lib, locationsForNodeModules, strategy,
|
|
44
|
+
protected libWatchBuildProcess({ lib, locationsForNodeModules, strategy, outputLineReplace, }: {
|
|
46
45
|
lib: PROJECT;
|
|
47
46
|
locationsForNodeModules: string[];
|
|
48
47
|
strategy: 'link' | 'copy';
|
|
49
|
-
buildType: CoreModels.LibraryType;
|
|
50
48
|
outputLineReplace?: (outputLine: string) => string;
|
|
51
49
|
}): Promise<any>;
|
|
52
|
-
protected libNormalBuildProcess({ lib, locationsForNodeModules, strategy,
|
|
50
|
+
protected libNormalBuildProcess({ lib, locationsForNodeModules, strategy, outputLineReplace, }: {
|
|
53
51
|
lib: PROJECT;
|
|
54
52
|
locationsForNodeModules: string[];
|
|
55
53
|
strategy: 'link' | 'copy';
|
|
56
|
-
buildType: CoreModels.LibraryType;
|
|
57
54
|
outputLineReplace?: (outputLine: string) => string;
|
|
58
55
|
}): Promise<any>;
|
|
59
56
|
getLibraryBuildComamnd(options?: LibraryBuildCommandOptions): string | undefined;
|
|
@@ -5,6 +5,7 @@ import { PackageJson } from 'type-fest';
|
|
|
5
5
|
import { CoreModels } from 'tnp-core/browser';
|
|
6
6
|
export declare class BaseNpmHelpers<PROJECT extends BaseProject = any> extends BaseFeatureForProject {
|
|
7
7
|
private packageJSON;
|
|
8
|
+
private bowerJson;
|
|
8
9
|
constructor(project: PROJECT);
|
|
9
10
|
updateDepsFrom(locations: string[]): any;
|
|
10
11
|
/**
|
|
@@ -61,6 +62,7 @@ export declare class BaseNpmHelpers<PROJECT extends BaseProject = any> extends B
|
|
|
61
62
|
* npm dependencies from package.json
|
|
62
63
|
*/
|
|
63
64
|
get dependencies(): Partial<Record<string, string>>;
|
|
65
|
+
get bowerDependencies(): Partial<Record<string, string>>;
|
|
64
66
|
/**
|
|
65
67
|
* peerDependencies dependencies
|
|
66
68
|
*/
|
|
@@ -101,7 +103,9 @@ export declare class BaseNpmHelpers<PROJECT extends BaseProject = any> extends B
|
|
|
101
103
|
stdoutMsg: string | string[];
|
|
102
104
|
stderMsg?: string | string[];
|
|
103
105
|
timeout?: number;
|
|
104
|
-
stdoutOutputContainsCallback
|
|
106
|
+
stdoutOutputContainsCallback? /**
|
|
107
|
+
* resolutions dependencies
|
|
108
|
+
*/: () => any;
|
|
105
109
|
outputLineReplace?: (outputLine: string) => string;
|
|
106
110
|
}): Promise<void>;
|
|
107
111
|
unitlOutputContains(stdoutMsg: string | string[], stderMsg?: string | string[], timeout?: number, stdoutOutputContainsCallback?: () => any): any;
|
|
@@ -162,14 +162,15 @@ export declare abstract class BaseProject<PROJECT extends BaseProject = BaseProj
|
|
|
162
162
|
};
|
|
163
163
|
remove(relativePath: string | string[], exactPath?: boolean): any;
|
|
164
164
|
removeFolderByRelativePath(relativePathToFolder: string): void;
|
|
165
|
+
get isAngularLib(): any;
|
|
165
166
|
protected getUniqueForTask(task: string): string;
|
|
166
167
|
registerAndAssignPort(taskName: string, options?: {
|
|
167
168
|
startFrom?: number;
|
|
168
169
|
}): Promise<number>;
|
|
169
170
|
/**
|
|
170
|
-
* @deprecated use registerAndAssignPort() instead
|
|
171
|
+
* @deprecated use this.registerAndAssignPort() or Utils.getFreePort() instead
|
|
171
172
|
*/
|
|
172
|
-
assignFreePort(startFrom?: number
|
|
173
|
+
assignFreePort(startFrom?: number): Promise<number>;
|
|
173
174
|
removeItself(): void;
|
|
174
175
|
/**
|
|
175
176
|
* Purpose: not initializing all classes at the beginning
|
|
@@ -3,31 +3,34 @@ import { BaseFeatureForProject } from './base-feature-for-project';
|
|
|
3
3
|
import type { BaseProject } from './base-project';
|
|
4
4
|
import { CoreModels } from 'tnp-core/browser';
|
|
5
5
|
import type { ChangelogData } from '../../models';
|
|
6
|
-
export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> = any> extends BaseFeatureForProject {
|
|
6
|
+
export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> = any, ARTIFACT = string> extends BaseFeatureForProject {
|
|
7
7
|
project: PROJECT;
|
|
8
8
|
/**
|
|
9
9
|
* Automatic release process of patch plus one version
|
|
10
10
|
*/
|
|
11
11
|
automaticRelease: boolean;
|
|
12
|
-
|
|
12
|
+
versionType: CoreModels.ReleaseVersionType;
|
|
13
|
+
processType: CoreModels.ReleaseProcessType;
|
|
14
|
+
releaseArtifactName: ARTIFACT;
|
|
15
|
+
preReleaseVersionTag: CoreModels.PreReleaseVersionTag;
|
|
13
16
|
lastChangesSummary: string;
|
|
14
17
|
newVersion: string;
|
|
15
18
|
commitsForChangelog: {
|
|
16
19
|
commitMessages: string;
|
|
17
20
|
index: number;
|
|
18
21
|
}[];
|
|
22
|
+
startRelease(options?: Partial<BaseReleaseProcess<PROJECT>>): Promise<void>;
|
|
19
23
|
getReleaseWords(): string[];
|
|
20
|
-
|
|
21
|
-
private reinstallNodeModules;
|
|
24
|
+
protected reinstallNodeModules(): Promise<void>;
|
|
22
25
|
selectChangelogCommits(): Promise<{
|
|
23
26
|
commitMessages: string;
|
|
24
27
|
index: number;
|
|
25
28
|
}[]>;
|
|
26
29
|
private getCommitsUpToReleaseCommit;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
protected publishToNpm(): Promise<boolean>;
|
|
31
|
+
protected testAfterPublish(): Promise<boolean>;
|
|
32
|
+
protected testBeforePublish(): Promise<boolean>;
|
|
33
|
+
protected commitAndPush(): Promise<void>;
|
|
31
34
|
protected releaseCommitTemplate(): string;
|
|
32
35
|
private testLibraries;
|
|
33
36
|
buildAllLibraries(): Promise<void>;
|
|
@@ -35,7 +38,7 @@ export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> =
|
|
|
35
38
|
get toBumpProjects(): PROJECT[];
|
|
36
39
|
bumpNewVersionEverywhere(): Promise<any>;
|
|
37
40
|
confirmNewVersion(): Promise<void>;
|
|
38
|
-
|
|
41
|
+
protected selectReleaseType(): Promise<CoreModels.ReleaseVersionType>;
|
|
39
42
|
protected commitMessageInChangelogTransformFn(message: string): Promise<string>;
|
|
40
43
|
getChangelogContentToAppend(askForEveryItem: boolean): Promise<string>;
|
|
41
44
|
/**
|
|
@@ -56,7 +59,7 @@ export declare class BaseReleaseProcess<PROJECT extends BaseProject<any, any> =
|
|
|
56
59
|
stopOnCommitMessage?: string;
|
|
57
60
|
}): Promise<string>;
|
|
58
61
|
getLastReleaseCommitData(): Promise<{
|
|
59
|
-
|
|
62
|
+
lastReleaseCommitMsg: string;
|
|
60
63
|
/**
|
|
61
64
|
* -1 if not found
|
|
62
65
|
*/
|
|
@@ -73,7 +73,7 @@ export declare class CoreProject<PROJECT extends BaseProject = BaseProject> {
|
|
|
73
73
|
*/
|
|
74
74
|
environments?: CoreProjectEnvironment[];
|
|
75
75
|
startCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
|
|
76
|
-
|
|
76
|
+
releaseCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
|
|
77
77
|
publishCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
|
|
78
78
|
deployCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
|
|
79
79
|
testCommand?: (options: CoreCommandArgOptions<PROJECT>) => Promise<void>;
|
|
@@ -2,15 +2,24 @@
|
|
|
2
2
|
import { Taon } from 'taon/browser';
|
|
3
3
|
import { BaseCliWorkerController } from '../classes/base-cli-worker-controller';
|
|
4
4
|
import { Port, PortStatus } from './ports.entity';
|
|
5
|
-
import { NotAssignablePort } from './not-assignable-port.entity';
|
|
6
5
|
export declare class PortsController extends BaseCliWorkerController {
|
|
7
6
|
START_PORT: number;
|
|
8
7
|
END_PORT: number;
|
|
9
|
-
readonly
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
readonly portsCache: Map<string, Port>;
|
|
9
|
+
protected get firstFreePort(): any;
|
|
10
|
+
protected firstUnassignedPortMoreThan(port: number): any;
|
|
11
|
+
getFirstFreePort(): Taon.Response<Port>;
|
|
12
|
+
getPortByNumber(portNumber: number): Taon.Response<Port>;
|
|
13
|
+
getPortsByStatus(status: PortStatus): Taon.Response<Port[]>;
|
|
14
|
+
/**
|
|
15
|
+
* make it unassigned
|
|
16
|
+
*/
|
|
17
|
+
deletePort(portNumber: number): Taon.Response<Port>;
|
|
18
|
+
/**
|
|
19
|
+
* make it unassigned
|
|
20
|
+
*/
|
|
21
|
+
updatePortUniqueId(portNumber: number, serviceId: string): Taon.Response<Port>;
|
|
22
|
+
addTakeByOsPort(portNumber: number, uniqueId: string): Taon.Response<Port>;
|
|
14
23
|
/**
|
|
15
24
|
* @param uniqueServiceName unique service name
|
|
16
25
|
* @param startFrom start searching for free port from this number
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
|
-
import {
|
|
2
|
+
import { Taon } from 'taon/browser';
|
|
3
3
|
export type PortStatus = 'unassigned' | 'assigned' | 'assigned-not-registered' | 'assigned-taken-by-os';
|
|
4
4
|
export declare const PortStatusArr: PortStatus[];
|
|
5
|
-
export declare class Port extends
|
|
6
|
-
static from(opt: Omit<Port, 'version' | '_' | 'clone'>): Port & Omit<Port, "_" | "version" | "clone">;
|
|
5
|
+
export declare class Port extends Taon.Base.Entity {
|
|
6
|
+
static from(opt: Omit<Port, 'version' | '_' | 'clone' | 'titleOnList'>): Port & Omit<Port, "_" | "version" | "clone" | "titleOnList">;
|
|
7
|
+
static getTitleForFreePort(port: Number): string;
|
|
8
|
+
get titleOnList(): string;
|
|
9
|
+
port: number;
|
|
10
|
+
serviceId: string;
|
|
7
11
|
/**
|
|
8
12
|
* Port status
|
|
9
13
|
*/
|
|
10
|
-
status
|
|
14
|
+
status: PortStatus;
|
|
11
15
|
/**
|
|
12
16
|
* When port was assigned as registered service
|
|
13
17
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-nocheck
|
|
2
2
|
import { BaseCliWorker, CfontStyle } from '../classes/base-cli-worker';
|
|
3
|
-
import { PortStatus } from '../../index';
|
|
3
|
+
import { Port, PortStatus } from '../../index';
|
|
4
4
|
import { PortsController } from '../tcp-udp-ports/ports.controller';
|
|
5
5
|
export declare class PortsWorker extends BaseCliWorker<PortsController> {
|
|
6
6
|
private portsController;
|
|
@@ -13,11 +13,13 @@ export declare class PortsWorker extends BaseCliWorker<PortsController> {
|
|
|
13
13
|
*/
|
|
14
14
|
startNormallyInCurrentProcess(): Promise<any>;
|
|
15
15
|
protected displayItemsForPortsStatus(status: PortStatus): Promise<any>;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
getWorkerTerminalActions(options?: {
|
|
17
|
+
exitIsOnlyReturn?: boolean;
|
|
18
|
+
}): any;
|
|
19
|
+
protected getNewPortToAdd(): Promise<number>;
|
|
20
|
+
protected addPortTerminalUiProcess(): Promise<void>;
|
|
21
|
+
protected selectPortProcess(ports: Port[], title: string): Promise<Port>;
|
|
22
|
+
protected deletePortTerminalUiProcess(): Promise<any>;
|
|
23
|
+
protected editPortTerminalUiProcess(): Promise<any>;
|
|
24
|
+
protected crudMenuForTakeByOsPorts(): Promise<void>;
|
|
23
25
|
}
|
package/browser/lib/index.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ export * from './validators/validators';
|
|
|
3
3
|
export { HelpersAngular } from './helpers/for-browser/angular.helper';
|
|
4
4
|
export * from './utils';
|
|
5
5
|
import { HelpersTaon as Base } from './helpers/helpers';
|
|
6
|
-
|
|
7
|
-
* Taon helpers
|
|
8
|
-
*/ export declare const Helpers: Base;
|
|
6
|
+
export declare const Helpers: Base;
|
|
9
7
|
export * from './base';
|
|
10
8
|
export * from './models';
|
package/browser/lib/models.d.ts
CHANGED
|
@@ -20,15 +20,9 @@ export type NgProject = {
|
|
|
20
20
|
};
|
|
21
21
|
export type LibraryBuildCommandOptions = {
|
|
22
22
|
watch?: boolean;
|
|
23
|
-
buildType: core.CoreModels.LibraryType;
|
|
24
23
|
};
|
|
25
24
|
export type LibrariesBuildOptions<PROJECT extends BaseProject = BaseProject> = {
|
|
26
25
|
strategy?: 'link' | 'copy';
|
|
27
|
-
/**
|
|
28
|
-
* @deprecated
|
|
29
|
-
* this will be detected in future
|
|
30
|
-
*/
|
|
31
|
-
buildType: core.CoreModels.LibraryType;
|
|
32
26
|
/**
|
|
33
27
|
* by default we are copying all libraries to node_modules of itself
|
|
34
28
|
*/
|
package/client/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
# MyLib
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
-
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# MyLib
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
|
|
8
|
+
> Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -19,6 +19,7 @@ export class BaseCliWorker {
|
|
|
19
19
|
this.serviceID = serviceID;
|
|
20
20
|
this.startCommand = startCommand;
|
|
21
21
|
this.serviceVersion = serviceVersion;
|
|
22
|
+
this.SPECIAL_WORKER_READY_MESSAGE = '$$$ WORKER_READY $$$';
|
|
22
23
|
}
|
|
23
24
|
get pathToProcessLocalInfoJson() {
|
|
24
25
|
/* */
|
|
@@ -40,7 +41,7 @@ export class BaseCliWorker {
|
|
|
40
41
|
/* */
|
|
41
42
|
return (void 0);
|
|
42
43
|
}
|
|
43
|
-
async startDetachedIfNeedsToBeStarted() {
|
|
44
|
+
async startDetachedIfNeedsToBeStarted(options) {
|
|
44
45
|
/* */
|
|
45
46
|
/* */
|
|
46
47
|
/* */
|
|
@@ -96,7 +97,7 @@ export class BaseCliWorker {
|
|
|
96
97
|
//longer because os is disposing process previous process
|
|
97
98
|
if (options.detached) {
|
|
98
99
|
Helpers.info(`Restarting service "${this.serviceID}" in detached mode...`);
|
|
99
|
-
await this.startDetached();
|
|
100
|
+
await this.startDetached(options);
|
|
100
101
|
}
|
|
101
102
|
else {
|
|
102
103
|
Helpers.info(`Restarting service "${this.serviceID}" in current process...`);
|
|
@@ -262,12 +263,25 @@ export class BaseCliWorker {
|
|
|
262
263
|
/* */
|
|
263
264
|
/* */
|
|
264
265
|
/* */
|
|
266
|
+
/* */
|
|
267
|
+
/* */
|
|
268
|
+
/* */
|
|
265
269
|
return (void 0);
|
|
266
270
|
}
|
|
267
271
|
/**
|
|
268
272
|
* start if not started detached process
|
|
269
273
|
*/
|
|
270
|
-
async startDetached() {
|
|
274
|
+
async startDetached(options) {
|
|
275
|
+
/* */
|
|
276
|
+
/* */
|
|
277
|
+
/* */
|
|
278
|
+
/* */
|
|
279
|
+
/* */
|
|
280
|
+
/* */
|
|
281
|
+
/* */
|
|
282
|
+
/* */
|
|
283
|
+
/* */
|
|
284
|
+
/* */
|
|
271
285
|
/* */
|
|
272
286
|
/* */
|
|
273
287
|
/* */
|
|
@@ -336,7 +350,38 @@ export class BaseCliWorker {
|
|
|
336
350
|
/* */
|
|
337
351
|
return (void 0);
|
|
338
352
|
}
|
|
339
|
-
|
|
353
|
+
get backAction() {
|
|
354
|
+
return {
|
|
355
|
+
back: {
|
|
356
|
+
name: 'Back',
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
get chooseAction() {
|
|
361
|
+
return {
|
|
362
|
+
emptyAction: {
|
|
363
|
+
name: ' -- choose any action below --',
|
|
364
|
+
action: async () => { },
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
displaySpecialWorkerReadyMessage() {
|
|
369
|
+
console.log(this.SPECIAL_WORKER_READY_MESSAGE);
|
|
370
|
+
}
|
|
371
|
+
getWorkerTerminalActions(options) {
|
|
372
|
+
/* */
|
|
373
|
+
/* */
|
|
374
|
+
/* */
|
|
375
|
+
/* */
|
|
376
|
+
/* */
|
|
377
|
+
/* */
|
|
378
|
+
/* */
|
|
379
|
+
/* */
|
|
380
|
+
/* */
|
|
381
|
+
/* */
|
|
382
|
+
/* */
|
|
383
|
+
/* */
|
|
384
|
+
/* */
|
|
340
385
|
/* */
|
|
341
386
|
/* */
|
|
342
387
|
/* */
|
|
@@ -363,18 +408,22 @@ export class BaseCliWorker {
|
|
|
363
408
|
/* */
|
|
364
409
|
return (void 0);
|
|
365
410
|
}
|
|
366
|
-
async
|
|
411
|
+
async infoScreen(options) {
|
|
412
|
+
options = options || {};
|
|
367
413
|
while (true) {
|
|
368
414
|
Helpers.clearConsole();
|
|
369
415
|
await this.header();
|
|
370
416
|
await this.infoMessageBelowHeader();
|
|
371
|
-
const choices = this.getWorkerTerminalActions();
|
|
417
|
+
const choices = this.getWorkerTerminalActions(options);
|
|
372
418
|
const choice = await UtilsTerminal.select({
|
|
373
419
|
choices,
|
|
374
420
|
question: 'Choose action',
|
|
375
421
|
});
|
|
376
422
|
const action = choices[choice].action;
|
|
377
|
-
await action();
|
|
423
|
+
const result = await action();
|
|
424
|
+
if (choice === 'exit' && result) {
|
|
425
|
+
break;
|
|
426
|
+
}
|
|
378
427
|
}
|
|
379
428
|
}
|
|
380
429
|
saveProcessInfo(processConfig) {
|
|
@@ -463,4 +512,4 @@ export class BaseCliWorker {
|
|
|
463
512
|
}
|
|
464
513
|
;
|
|
465
514
|
({}); // @--end-of-file-for-module=tnp-helpers lib/base/classes/base-cli-worker.ts
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbGktd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL2NsYXNzZXMvYmFzZS1jbGktd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBa0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsQ0FBQSxLQUFLO0FBYTdILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNdEMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7QUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFxQnJDLE1BQU0sT0FBZ0IsYUFBYTtJQUlqQztJQUNFOztPQUVHO0lBQ2dCLFNBQWlCO0lBQ3BDOztPQUVHO0lBQ2dCLFlBQW9CO0lBQ3ZDOztPQUVHO0lBQ2dCLGNBQXNCO1FBUnRCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFJakIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFJcEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7SUFDeEMsQ0FBQztJQVlKLElBQWMsMEJBQTBCO1FBQzFDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlELElBQWMsbUJBQW1CO1FBQ25DLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFRTSxL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QUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsMEJBQTBCO1FBQzVDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQ7Ozs7T0FJRztJQUNPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUVoQztRQUNILEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztR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Q0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsd0JBQXdCO1FBQzFDLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsNkJBQTZCO1FBQy9DLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQsS0FBSyxDQUFDLGNBQWM7UUFDdEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7Q0FJRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNEVBQTRFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuaW1wb3J0IHsgICBjaGFsaywgICBjcm9zc1BsYXRmb3JtUGF0aCwgICBfLCAvKiAqLyAvKiAqLyAvKiAqLyAvKiAqLyAvKiAqLyAgICAgIFV0aWxzVGVybWluYWwsIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ3RucC1jb25maWcvYnJvd3Nlcic7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAnLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHR5cGUgeyBCYXNlQ2xpV29ya2VyQ29udHJvbGxlciB9IGZyb20gJy4vYmFzZS1jbGktd29ya2VyLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQmFzZUNsaVdvcmtlckNvbmZpZyB9IGZyb20gJy4vYmFzZS1jbGktd29ya2VyLWNvbmZpZyc7XG5cblxuXG5jb25zdCBXT1JLRVJfSU5JVF9TVEFSVF9USU1FX0xJTUlUID0gMjU7IC8vIDE1IHNlY29uZHMgbWF4IHRvIHN0YXJ0IHdvcmtlclxuY29uc3QgU1RBUlRfUE9SVF9GT1JfU0VSVklDRVMgPSAzNjAwO1xuXG5cblxuZXhwb3J0IHR5cGUgQ2ZvbnRTdHlsZSA9XG4gIHwgJ2Jsb2NrJ1xuICB8ICdzbGljaydcbiAgfCAndGlueSdcbiAgfCAnZ3JpZCdcbiAgfCAncGFsbGV0J1xuICB8ICdzaGFkZSdcbiAgfCAnY2hyb21lJ1xuICB8ICdzaW1wbGUnXG4gIHwgJ3NpbXBsZUJsb2NrJ1xuICB8ICczZCdcbiAgfCAnc2ltcGxlM2QnXG4gIHwgJ2h1Z2UnO1xuXG5leHBvcnQgdHlwZSBDZm9udEFsaWduID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnIHwgJ2Jsb2NrJztcblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNsaVdvcmtlcjxcbiAgUkVNT1RFX0NUUkwgZXh0ZW5kcyBCYXNlQ2xpV29ya2VyQ29udHJvbGxlciA9IEJhc2VDbGlXb3JrZXJDb250cm9sbGVyLFxuPiB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkIGZvciBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2VJRDogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIGV4dGVybmFsIGNvbW1hbmQgdGhhdCB3aWxsIHN0YXJ0IHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhcnRDb21tYW5kOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkIGZvciBzZXJ2aWNlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlcnZpY2VWZXJzaW9uOiBzdHJpbmcsXG4gICkge31cblxuXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHN0YXJ0Tm9ybWFsbHlJbkN1cnJlbnRQcm9jZXNzKG9wdGlvbnM/OiB7fSk7XG5cbiAgcHVibGljIGFic3RyYWN0IGdldENvbnRyb2xsZXJGb3JSZW1vdGVDb25uZWN0aW9uKCk6IFByb21pc2U8UkVNT1RFX0NUUkw+O1xuXG5cblxuXG5cbiAgcHJvdGVjdGVkIGdldCBwYXRoVG9Qcm9jZXNzTG9jYWxJbmZvSnNvbigpOiBzdHJpbmcge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBnZXQgcHJvY2Vzc0xvY2FsSW5mb09iaigpOiBCYXNlQ2xpV29ya2VyQ29uZmlnIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cblxuXG5cblxuICBwdWJsaWMgYXN5bmMgc3RhcnREZXRhY2hlZElmTmVlZHNUb0JlU3RhcnRlZCgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzdG9wIGlmIHN0YXJ0ZWRcbiAgICovXG4gIGFzeW5jIGtpbGwob3B0aW9ucz86IHsgZG9udFJlbW92ZUNvbmZpZ0ZpbGU/OiBib29sZWFuIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICoga2lsbCBkZXRhY2hlZCBwcm9jZXNzIGFuZCBzdGFydCBhZ2FpblxuICAgKiBAcGFyYW0gb3B0aW9ucy5kZXRhY2hlZCAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXN5bmMgcmVzdGFydChvcHRpb25zPzogeyBkZXRhY2hlZD86IGJvb2xlYW4gfSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGV0YWNoZWQgPSBfLmlzVW5kZWZpbmVkKG9wdGlvbnMuZGV0YWNoZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMua2lsbCgpO1xuICAgIC8vbG9uZ2VyIGJlY2F1c2Ugb3MgaXMgZGlzcG9zaW5nIHByb2Nlc3MgcHJldmlvdXMgcHJvY2Vzc1xuXG4gICAgaWYgKG9wdGlvbnMuZGV0YWNoZWQpIHtcbiAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgYFJlc3RhcnRpbmcgc2VydmljZSBcIiR7dGhpcy5zZXJ2aWNlSUR9XCIgaW4gZGV0YWNoZWQgbW9kZS4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydERldGFjaGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgYFJlc3RhcnRpbmcgc2VydmljZSBcIiR7dGhpcy5zZXJ2aWNlSUR9XCIgaW4gY3VycmVudCBwcm9jZXNzLi4uYCxcbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0Tm9ybWFsbHlJbkN1cnJlbnRQcm9jZXNzKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIC8qKlxuICAgKiBvbmx5IGZvciBjbGkgc3RhcnRcbiAgICogQHBhcmFtIGNsaVBhcmFtcyBvbiBmcm9tIGNsaVxuICAgKi9cbiAgYXN5bmMgY2xpU3RhcnRQcm9jZWR1cmUoY2xpUGFyYW1zOiBhbnkpIHtcbiAgICBjb25zdCBpbnN0YW5jZTogQmFzZUNsaVdvcmtlciA9IHRoaXM7XG4gICAgY29uc3QgZGV0YWNoZWQgPSAhIWNsaVBhcmFtc1snZGV0YWNoZWQnXSB8fCAhIWNsaVBhcmFtc1snZGV0YWNoJ107XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG5cblxuXG5cbiAgcHJvdGVjdGVkIHByZXZlbnRFeHRlcm5hbENvbmZpZ0NoYW5nZSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyBwcmV2ZW50U3RhcnRJZkFscmVhZHlTdGFydGVkKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGtpbGxXb3JrZXJXaXRoTG93ZXJWZXJzaW9uKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFRoaXMgaGFzIDIgcHVycG9zZXM6XG4gICAqIC0gaW5maW5pdGUgY2hlY2sgd2hlbiB3aGVuIGRldGFjaGVkIHByb2Nlc3MgZmluaXNoZWQgc3RhcnRpbmdcbiAgICogLSBxdWljayBjaGVjayBpZiBzZXJ2aWNlIGlzIGhlYWx0aHkgLyBhbHJlYWR5IHN0YXJ0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBpc1NlcnZpY2VIZWFsdGh5KG9wdGlvbnM6IHtcbiAgICBoZWFsdGhDaGVja1JlcXVlc3RUcnlzPzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHN0YXJ0IGlmIG5vdCBzdGFydGVkIGRldGFjaGVkIHByb2Nlc3NcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBzdGFydERldGFjaGVkKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhlYWRlclRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gXy5zdGFydENhc2UodGhpcy5zZXJ2aWNlSUQpO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCB0ZXh0SGVhZGVyU3R5bGUoKTogQ2ZvbnRTdHlsZSB7XG4gICAgcmV0dXJuICdibG9jayc7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGhlYWRlclRleHRBbGlnbigpOiBDZm9udEFsaWduIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBvdmVycmlkZSB3aG9sZSB0ZXJtaW5hbCBoZWFkZXJcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBoZWFkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgaW5mb01lc3NhZ2VCZWxvd0hlYWRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBnZXRXb3JrZXJUZXJtaW5hbEFjdGlvbnMoKToge1xuICAgIFt1bmlxZUFjdGlvbk5hbWU6IHN0cmluZ106IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGFjdGlvbjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgfTtcbiAgfSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2luZm9TY3JlZW4oKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIEhlbHBlcnMuY2xlYXJDb25zb2xlKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuaGVhZGVyKCk7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW5mb01lc3NhZ2VCZWxvd0hlYWRlcigpO1xuICAgICAgY29uc3QgY2hvaWNlcyA9IHRoaXMuZ2V0V29ya2VyVGVybWluYWxBY3Rpb25zKCk7XG4gICAgICBjb25zdCBjaG9pY2UgPSBhd2FpdCBVdGlsc1Rlcm1pbmFsLnNlbGVjdDxrZXlvZiB0eXBlb2YgY2hvaWNlcz4oe1xuICAgICAgICBjaG9pY2VzLFxuICAgICAgICBxdWVzdGlvbjogJ0Nob29zZSBhY3Rpb24nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjaG9pY2VzW2Nob2ljZV0uYWN0aW9uO1xuICAgICAgYXdhaXQgYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cblxuXG4gIHByaXZhdGUgc2F2ZVByb2Nlc3NJbmZvKHByb2Nlc3NDb25maWc6IFBhcnRpYWw8QmFzZUNsaVdvcmtlckNvbmZpZz4pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGluaXRpYWxpemVXb3JrZXJNZXRhZGF0YSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIHdhaXRGb3JQcm9jZXNzUG9ydFNhdmVkVG9EaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgZ2V0U2VydmljZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvYmFzZS9jbGFzc2VzL2Jhc2UtY2xpLXdvcmtlci50cyJdfQ==
|
|
515
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jbGktd29ya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL2NsYXNzZXMvYmFzZS1jbGktd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBa0MsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsQ0FBQSxLQUFLO0FBYTdILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFNdEMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7QUFDMUUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFxQnJDLE1BQU0sT0FBZ0IsYUFBYTtJQU1qQztJQUNFOztPQUVHO0lBQ2dCLFNBQWlCO0lBQ3BDOztPQUVHO0lBQ2dCLFlBQW9CO0lBQ3ZDOztPQUVHO0lBQ2dCLGNBQXNCO1FBUnRCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFJakIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFJcEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFmakMsaUNBQTRCLEdBQUcsc0JBQXNCLENBQUM7SUFnQjdELENBQUM7SUFZSixJQUFjLDBCQUEwQjtRQUMxQyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRCxJQUFjLG1CQUFtQjtRQUNuQyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxD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TCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSVMsS0FBSyxDQUFDLDBCQUEwQjtRQUM1QyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUlEOzs7O09BSUc7SUFDTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FFaEM7UUFDSCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FFN0I7UUFDSCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJUyxLQUFLLENBQUMsVUFBVTtRQUN4QixPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFJUyxlQUFlO1FBQ3ZCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFJUyxlQUFlO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFJRDs7T0FFRztJQUNPLEtBQUssQ0FBQyxNQUFNO1FBQ3hCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0ws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Y3Jvc3NQbGF0Zm9ybVBhdGgsICAgXywgLyogKi8gLyogKi8gLyogKi8gLyogKi8gLyogKi8gICAgICBVdGlsc1Rlcm1pbmFsLCB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICd0bnAtY29uZmlnL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4uLy4uL2luZGV4JztcbmltcG9ydCB0eXBlIHsgQmFzZUNsaVdvcmtlckNvbnRyb2xsZXIgfSBmcm9tICcuL2Jhc2UtY2xpLXdvcmtlci1jb250cm9sbGVyJztcbmltcG9ydCB7IEJhc2VDbGlXb3JrZXJDb25maWcgfSBmcm9tICcuL2Jhc2UtY2xpLXdvcmtlci1jb25maWcnO1xuXG5cblxuY29uc3QgV09SS0VSX0lOSVRfU1RBUlRfVElNRV9MSU1JVCA9IDI1OyAvLyAxNSBzZWNvbmRzIG1heCB0byBzdGFydCB3b3JrZXJcbmNvbnN0IFNUQVJUX1BPUlRfRk9SX1NFUlZJQ0VTID0gMzYwMDtcblxuXG5cbmV4cG9ydCB0eXBlIENmb250U3R5bGUgPVxuICB8ICdibG9jaydcbiAgfCAnc2xpY2snXG4gIHwgJ3RpbnknXG4gIHwgJ2dyaWQnXG4gIHwgJ3BhbGxldCdcbiAgfCAnc2hhZGUnXG4gIHwgJ2Nocm9tZSdcbiAgfCAnc2ltcGxlJ1xuICB8ICdzaW1wbGVCbG9jaydcbiAgfCAnM2QnXG4gIHwgJ3NpbXBsZTNkJ1xuICB8ICdodWdlJztcblxuZXhwb3J0IHR5cGUgQ2ZvbnRBbGlnbiA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICdibG9jayc7XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDbGlXb3JrZXI8XG4gIFJFTU9URV9DVFJMIGV4dGVuZHMgQmFzZUNsaVdvcmtlckNvbnRyb2xsZXIgPSBCYXNlQ2xpV29ya2VyQ29udHJvbGxlcixcbj4ge1xuICBwcm90ZWN0ZWQgU1BFQ0lBTF9XT1JLRVJfUkVBRFlfTUVTU0FHRSA9ICckJCQgV09SS0VSX1JFQURZICQkJCc7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiB1bmlxdWUgaWQgZm9yIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZUlEOiBzdHJpbmcsXG4gICAgLyoqXG4gICAgICogZXh0ZXJuYWwgY29tbWFuZCB0aGF0IHdpbGwgc3RhcnQgc2VydmljZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGFydENvbW1hbmQ6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiB1bmlxdWUgaWQgZm9yIHNlcnZpY2VcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VydmljZVZlcnNpb246IHN0cmluZyxcbiAgKSB7fVxuXG5cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc3RhcnROb3JtYWxseUluQ3VycmVudFByb2Nlc3Mob3B0aW9ucz86IHt9KTtcblxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0Q29udHJvbGxlckZvclJlbW90ZUNvbm5lY3Rpb24oKTogUHJvbWlzZTxSRU1PVEVfQ1RSTD47XG5cblxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0IHBhdGhUb1Byb2Nlc3NMb2NhbEluZm9Kc29uKCk6IHN0cmluZyB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldCBwcm9jZXNzTG9jYWxJbmZvT2JqKCk6IEJhc2VDbGlXb3JrZXJDb25maWcge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuXG5cblxuXG4gIHB1YmxpYyBhc3luYyBzdGFydERldGFjaGVkSWZOZWVkc1RvQmVTdGFydGVkKG9wdGlvbnM/OiB7XG4gICAgdXNlQ3VycmVudFdpbmRvd0ZvckRldGFjaD86IGJvb2xlYW47XG4gIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzdG9wIGlmIHN0YXJ0ZWRcbiAgICovXG4gIGFzeW5jIGtpbGwob3B0aW9ucz86IHsgZG9udFJlbW92ZUNvbmZpZ0ZpbGU/OiBib29sZWFuIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICoga2lsbCBkZXRhY2hlZCBwcm9jZXNzIGFuZCBzdGFydCBhZ2FpblxuICAgKiBAcGFyYW0gb3B0aW9ucy5kZXRhY2hlZCAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXN5bmMgcmVzdGFydChvcHRpb25zPzoge1xuICAgIGRldGFjaGVkPzogYm9vbGVhbjtcbiAgICB1c2VDdXJyZW50V2luZG93Rm9yRGV0YWNoPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuZGV0YWNoZWQgPSBfLmlzVW5kZWZpbmVkKG9wdGlvbnMuZGV0YWNoZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMua2lsbCgpO1xuICAgIC8vbG9uZ2VyIGJlY2F1c2Ugb3MgaXMgZGlzcG9zaW5nIHByb2Nlc3MgcHJldmlvdXMgcHJvY2Vzc1xuXG4gICAgaWYgKG9wdGlvbnMuZGV0YWNoZWQpIHtcbiAgICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgICAgYFJlc3RhcnRpbmcgc2VydmljZSBcIiR7dGhpcy5zZXJ2aWNlSUR9XCIgaW4gZGV0YWNoZWQgbW9kZS4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydERldGFjaGVkKG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBIZWxwZXJzLmluZm8oXG4gICAgICAgIGBSZXN0YXJ0aW5nIHNlcnZpY2UgXCIke3RoaXMuc2VydmljZUlEfVwiIGluIGN1cnJlbnQgcHJvY2Vzcy4uLmAsXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5zdGFydE5vcm1hbGx5SW5DdXJyZW50UHJvY2VzcygpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvKipcbiAgICogb25seSBmb3IgY2xpIHN0YXJ0XG4gICAqIEBwYXJhbSBjbGlQYXJhbXMgb24gZnJvbSBjbGlcbiAgICovXG4gIGFzeW5jIGNsaVN0YXJ0UHJvY2VkdXJlKGNsaVBhcmFtczogYW55KSB7XG4gICAgY29uc3QgaW5zdGFuY2U6IEJhc2VDbGlXb3JrZXIgPSB0aGlzO1xuICAgIGNvbnN0IGRldGFjaGVkID0gISFjbGlQYXJhbXNbJ2RldGFjaGVkJ10gfHwgISFjbGlQYXJhbXNbJ2RldGFjaCddO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuXG5cblxuXG4gIHByb3RlY3RlZCBwcmV2ZW50RXh0ZXJuYWxDb25maWdDaGFuZ2UoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgcHJldmVudFN0YXJ0SWZBbHJlYWR5U3RhcnRlZCgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyBraWxsV29ya2VyV2l0aExvd2VyVmVyc2lvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBUaGlzIGhhcyAyIHB1cnBvc2VzOlxuICAgKiAtIGluZmluaXRlIGNoZWNrIHdoZW4gd2hlbiBkZXRhY2hlZCBwcm9jZXNzIGZpbmlzaGVkIHN0YXJ0aW5nXG4gICAqIC0gcXVpY2sgY2hlY2sgaWYgc2VydmljZSBpcyBoZWFsdGh5IC8gYWxyZWFkeSBzdGFydGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgaXNTZXJ2aWNlSGVhbHRoeShvcHRpb25zOiB7XG4gICAgaGVhbHRoQ2hlY2tSZXF1ZXN0VHJ5cz86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzdGFydCBpZiBub3Qgc3RhcnRlZCBkZXRhY2hlZCBwcm9jZXNzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnREZXRhY2hlZChvcHRpb25zPzoge1xuICAgIHVzZUN1cnJlbnRXaW5kb3dGb3JEZXRhY2g/OiBib29sZWFuO1xuICB9KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhlYWRlclRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gXy5zdGFydENhc2UodGhpcy5zZXJ2aWNlSUQpO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCB0ZXh0SGVhZGVyU3R5bGUoKTogQ2ZvbnRTdHlsZSB7XG4gICAgcmV0dXJuICdibG9jayc7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGhlYWRlclRleHRBbGlnbigpOiBDZm9udEFsaWduIHtcbiAgICByZXR1cm4gJ2xlZnQnO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBvdmVycmlkZSB3aG9sZSB0ZXJtaW5hbCBoZWFkZXJcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBoZWFkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgaW5mb01lc3NhZ2VCZWxvd0hlYWRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldCBiYWNrQWN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrOiB7XG4gICAgICAgIG5hbWU6ICdCYWNrJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0IGNob29zZUFjdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW1wdHlBY3Rpb246IHtcbiAgICAgICAgbmFtZTogJyAtLSBjaG9vc2UgYW55IGFjdGlvbiBiZWxvdyAtLScsXG4gICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4ge30sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGRpc3BsYXlTcGVjaWFsV29ya2VyUmVhZHlNZXNzYWdlKCkge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuU1BFQ0lBTF9XT1JLRVJfUkVBRFlfTUVTU0FHRSk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldFdvcmtlclRlcm1pbmFsQWN0aW9ucyhvcHRpb25zPzoge1xuICAgIGV4aXRJc09ubHlSZXR1cm4/OiBib29sZWFuO1xuICAgIGNob29zZUFjdGlvbj86IGJvb2xlYW47XG4gIH0pOiB7XG4gICAgW3VuaXFlQWN0aW9uTmFtZTogc3RyaW5nXToge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgYWN0aW9uOiAoKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPjtcbiAgICB9O1xuICB9IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHB1YmxpYyBhc3luYyBpbmZvU2NyZWVuKG9wdGlvbnM/OiB7IGV4aXRJc09ubHlSZXR1cm4/OiBib29sZWFuIH0pIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgSGVscGVycy5jbGVhckNvbnNvbGUoKTtcblxuICAgICAgYXdhaXQgdGhpcy5oZWFkZXIoKTtcblxuICAgICAgYXdhaXQgdGhpcy5pbmZvTWVzc2FnZUJlbG93SGVhZGVyKCk7XG4gICAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5nZXRXb3JrZXJUZXJtaW5hbEFjdGlvbnMob3B0aW9ucyk7XG4gICAgICBjb25zdCBjaG9pY2UgPSBhd2FpdCBVdGlsc1Rlcm1pbmFsLnNlbGVjdDxrZXlvZiB0eXBlb2YgY2hvaWNlcz4oe1xuICAgICAgICBjaG9pY2VzLFxuICAgICAgICBxdWVzdGlvbjogJ0Nob29zZSBhY3Rpb24nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBhY3Rpb24gPSBjaG9pY2VzW2Nob2ljZV0uYWN0aW9uO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uKCk7XG4gICAgICBpZiAoY2hvaWNlID09PSAnZXhpdCcgJiYgcmVzdWx0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuICBwcml2YXRlIHNhdmVQcm9jZXNzSW5mbyhwcm9jZXNzQ29uZmlnOiBQYXJ0aWFsPEJhc2VDbGlXb3JrZXJDb25maWc+KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyBpbml0aWFsaXplV29ya2VyTWV0YWRhdGEoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBhc3luYyB3YWl0Rm9yUHJvY2Vzc1BvcnRTYXZlZFRvRGlzaygpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGFzeW5jIGdldFNlcnZpY2VQb3J0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2Jhc2UvY2xhc3Nlcy9iYXNlLWNsaS13b3JrZXIudHMiXX0=
|