@grnsft/if 0.4.0 → 0.5.0
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/CONTRIBUTING.md +4 -5
- package/README.md +14 -33
- package/Refactor-migration-guide.md +5 -6
- package/build/builtins/coefficient/index.d.ts +1 -2
- package/build/builtins/coefficient/index.js +18 -4
- package/build/builtins/copy-param/index.d.ts +2 -0
- package/build/builtins/copy-param/index.js +68 -0
- package/build/builtins/csv-lookup/index.d.ts +1 -1
- package/build/builtins/csv-lookup/index.js +44 -37
- package/build/builtins/divide/index.d.ts +1 -1
- package/build/builtins/divide/index.js +22 -11
- package/build/builtins/exponent/index.d.ts +1 -2
- package/build/builtins/exponent/index.js +9 -23
- package/build/builtins/export-csv-raw.d.ts +4 -2
- package/build/builtins/export-csv-raw.js +7 -7
- package/build/builtins/export-csv.js +8 -11
- package/build/builtins/export-log.js +1 -1
- package/build/builtins/export-yaml.js +6 -6
- package/build/builtins/group-by.d.ts +1 -1
- package/build/builtins/group-by.js +5 -5
- package/build/builtins/index.d.ts +1 -0
- package/build/builtins/index.js +4 -2
- package/build/builtins/interpolation/index.d.ts +1 -1
- package/build/builtins/interpolation/index.js +10 -8
- package/build/builtins/mock-observations/helpers/common-generator.d.ts +2 -2
- package/build/builtins/mock-observations/helpers/common-generator.js +10 -13
- package/build/builtins/mock-observations/helpers/rand-int-generator.d.ts +2 -2
- package/build/builtins/mock-observations/helpers/rand-int-generator.js +14 -24
- package/build/builtins/mock-observations/index.d.ts +1 -2
- package/build/builtins/mock-observations/index.js +2 -4
- package/build/builtins/multiply/index.d.ts +1 -2
- package/build/builtins/multiply/index.js +10 -16
- package/build/builtins/regex/index.d.ts +1 -2
- package/build/builtins/regex/index.js +8 -12
- package/build/builtins/sci/index.d.ts +1 -2
- package/build/builtins/sci/index.js +23 -22
- package/build/builtins/sci-embodied/index.d.ts +1 -1
- package/build/builtins/sci-embodied/index.js +16 -17
- package/build/builtins/shell/index.d.ts +1 -2
- package/build/builtins/shell/index.js +4 -4
- package/build/builtins/subtract/index.d.ts +1 -2
- package/build/builtins/subtract/index.js +7 -23
- package/build/builtins/sum/index.d.ts +1 -2
- package/build/builtins/sum/index.js +14 -11
- package/build/builtins/time-sync.d.ts +1 -2
- package/build/builtins/time-sync.js +62 -67
- package/build/check.d.ts +2 -0
- package/build/check.js +95 -0
- package/build/config/config.d.ts +13 -1
- package/build/config/config.js +61 -1
- package/build/config/params.js +1 -6
- package/build/config/strings.d.ts +45 -5
- package/build/config/strings.js +50 -9
- package/build/diff.js +2 -2
- package/build/env.d.ts +2 -0
- package/build/env.js +38 -0
- package/build/lib/aggregate.js +1 -1
- package/build/lib/compute.js +1 -1
- package/build/lib/exhaust.js +4 -4
- package/build/lib/initialize.js +20 -24
- package/build/lib/load.js +4 -4
- package/build/types/compute.d.ts +1 -1
- package/build/types/compute.js +1 -1
- package/build/types/if-env.d.ts +8 -0
- package/build/types/if-env.js +3 -0
- package/build/types/interface.d.ts +1 -19
- package/build/types/interface.js +1 -1
- package/build/types/npm.d.ts +9 -0
- package/build/types/npm.js +3 -0
- package/build/types/process-args.d.ts +9 -0
- package/build/types/process-args.js +1 -1
- package/build/util/aggregation-helper.d.ts +1 -1
- package/build/util/aggregation-helper.js +5 -5
- package/build/util/args.d.ts +23 -1
- package/build/util/args.js +91 -14
- package/build/util/debug-logger.js +8 -7
- package/build/util/fs.d.ts +20 -0
- package/build/util/fs.js +94 -0
- package/build/util/helpers.d.ts +25 -5
- package/build/util/helpers.js +111 -15
- package/build/util/npm.d.ts +28 -0
- package/build/util/npm.js +152 -0
- package/build/util/plugin-storage.js +4 -4
- package/build/util/validations.js +4 -4
- package/jest.config.js +1 -1
- package/manifests/{plugins → examples/builtins/csv-lookup}/cloud-metadata/failure-invalid-instance-type.yaml +9 -3
- package/manifests/examples/builtins/csv-lookup/cloud-metadata/failure-invalid-vendor.yaml +27 -0
- package/manifests/{plugins → examples/builtins/csv-lookup}/cloud-metadata/failure-missing-cloud-vendor.yml +9 -3
- package/manifests/{plugins → examples/builtins/csv-lookup}/cloud-metadata/success.yml +8 -2
- package/manifests/{plugins/csv-lookup → examples/builtins/csv-lookup/region-metadata}/failure-missing-column.yml +1 -2
- package/manifests/{plugins/csv-lookup → examples/builtins/csv-lookup/region-metadata}/failure-missing-output.yml +1 -2
- package/manifests/{plugins/csv-lookup → examples/builtins/csv-lookup/region-metadata}/success-renaming.yml +1 -2
- package/manifests/{plugins/csv-lookup → examples/builtins/csv-lookup/region-metadata}/success.yml +2 -3
- package/manifests/examples/builtins/csv-lookup/tdp-finder/failure-missing-input-param.yml +23 -0
- package/manifests/examples/builtins/csv-lookup/tdp-finder/failure-unsupported-physical-processor.yml +24 -0
- package/manifests/examples/builtins/csv-lookup/tdp-finder/success.yml +24 -0
- package/manifests/{plugins → examples/builtins}/divide/failure-denominator-equal-zero.yml +8 -9
- package/manifests/{plugins → examples/builtins}/divide/failure-invalid-config-denominator.yml +8 -9
- package/manifests/{plugins → examples/builtins}/divide/failure-missing-numerator.yml +8 -9
- package/manifests/{plugins → examples/builtins}/divide/success.yml +9 -10
- package/manifests/examples/builtins/exponent/success.yml +25 -0
- package/manifests/{plugins → examples/builtins}/groupby/success.yml +1 -1
- package/manifests/examples/builtins/interpolation/success.yml +23 -0
- package/manifests/{plugins → examples/builtins}/sci/failure-missing-input-param.yml +2 -6
- package/manifests/{plugins → examples/builtins}/sci/success.yml +0 -3
- package/manifests/examples/builtins/subtract/success.yml +24 -0
- package/manifests/{plugins → examples/builtins}/sum/success.yml +1 -1
- package/manifests/examples/{generics.yml → pipelines/generics.yml} +49 -13
- package/manifests/examples/{nesting.yml → pipelines/nesting.yml} +82 -35
- package/manifests/examples/{pipeline-teads-sci.yml → pipelines/pipeline-teads-sci.yml} +54 -18
- package/manifests/examples/{pipeline-with-aggregate.yml → pipelines/pipeline-with-aggregate.yml} +67 -25
- package/manifests/examples/{pipeline-with-mocks.yml → pipelines/pipeline-with-mocks.yml} +65 -22
- package/manifests/examples/pipelines/zeros.yml +130 -0
- package/manifests/outputs/bugs/aggregation-error-wrong-metric.yaml +243 -0
- package/manifests/outputs/bugs/initialize-error-no-config.yaml +78 -0
- package/manifests/outputs/bugs/initialize-error-no-path.yaml +91 -0
- package/manifests/outputs/bugs/initialize-error-no-plugins.yaml +74 -0
- package/manifests/outputs/bugs/input-error-missing-duration.yaml +84 -0
- package/manifests/outputs/bugs/mock-observations-failure-duration-is-zero.yaml +81 -0
- package/manifests/outputs/bugs/pipeline-error-naming-mismatch.yaml +91 -0
- package/manifests/outputs/bugs/pipeline-error-uninitialized-plugin.yaml +92 -0
- package/manifests/outputs/bugs/pipeline-ordering-error.yaml +155 -0
- package/manifests/outputs/bugs/sci-embodied-missing-resources-total.yaml +73 -0
- package/manifests/outputs/divide.yaml +93 -0
- package/manifests/outputs/features/aggregate-failure-invalid-metrics.yaml +101 -0
- package/manifests/outputs/features/aggregate-failure-missing-metric-in-inputs.yaml +100 -0
- package/manifests/outputs/features/aggregate-horizontal.yaml +128 -0
- package/manifests/outputs/features/aggregate-vertical.yaml +151 -0
- package/manifests/outputs/features/aggregate.yaml +155 -0
- package/manifests/outputs/pipelines/cloud-metadata-divide.yaml +95 -0
- package/manifests/outputs/pipelines/mock-obs-group-by-cloud-meta.yaml +645 -0
- package/manifests/outputs/pipelines/mock-obs-groupby.yaml +178 -0
- package/manifests/outputs/pipelines/mock-obs-time-sync.yaml +350 -0
- package/manifests/outputs/plugins/coefficient/failure-invalid-config-input-param.yaml +73 -0
- package/manifests/outputs/plugins/coefficient/failure-output-param-is-null.yaml +73 -0
- package/manifests/outputs/plugins/coefficient/success.yaml +75 -0
- package/manifests/outputs/plugins/csv-lookup/cloud-metadata/failure-invalid-instance-type.yaml +27 -0
- package/manifests/{plugins → outputs/plugins/csv-lookup}/cloud-metadata/failure-invalid-vendor.yaml +8 -2
- package/manifests/outputs/plugins/csv-lookup/cloud-metadata/failure-missing-cloud-vendor.yaml +77 -0
- package/manifests/outputs/plugins/csv-lookup/cloud-metadata/success.yaml +82 -0
- package/manifests/outputs/plugins/csv-lookup/region-metadata/failure-missing-column.yaml +76 -0
- package/manifests/outputs/plugins/csv-lookup/region-metadata/failure-missing-output.yaml +75 -0
- package/manifests/outputs/plugins/csv-lookup/region-metadata/success-renaming.yaml +80 -0
- package/manifests/outputs/plugins/csv-lookup/region-metadata/success.yaml +92 -0
- package/manifests/outputs/plugins/csv-lookup/tdp-finder/failure-missing-input-param.yaml +74 -0
- package/manifests/outputs/plugins/csv-lookup/tdp-finder/failure-unsupported-physical-processor.yaml +75 -0
- package/manifests/outputs/plugins/csv-lookup/tdp-finder/success.yaml +76 -0
- package/manifests/outputs/plugins/divide/failure-invalid-config-denominator.yaml +73 -0
- package/manifests/outputs/plugins/divide/failure-missing-numerator.yaml +77 -0
- package/manifests/outputs/plugins/divide/success-denominator-equal-zero.yaml +95 -0
- package/manifests/outputs/plugins/divide/success.yaml +95 -0
- package/manifests/outputs/plugins/exponent/success.yaml +77 -0
- package/manifests/outputs/plugins/groupby/failure-invalid-config-group.yaml +96 -0
- package/manifests/outputs/plugins/groupby/failure-missing-cloud-instance-type.yaml +95 -0
- package/manifests/outputs/plugins/groupby/success.yaml +101 -0
- package/manifests/outputs/plugins/interpolation/interpolation.yaml +83 -0
- package/manifests/outputs/plugins/interpolation/success.yaml +83 -0
- package/manifests/outputs/plugins/mock-observations/failure-invalid-config-cpu-range.yaml +86 -0
- package/manifests/outputs/plugins/mock-observations/failure-invalid-memory-utilization-range.yaml +84 -0
- package/manifests/outputs/plugins/mock-observations/failure-missing-timestamp-from-param.yaml +83 -0
- package/manifests/outputs/plugins/mock-observations/success.yaml +220 -0
- package/manifests/outputs/plugins/multiply/failure-input-parameter-is-missing.yaml +75 -0
- package/manifests/outputs/plugins/multiply/success-with-multiple-inputs.yaml +96 -0
- package/manifests/outputs/plugins/multiply/success.yaml +78 -0
- package/manifests/outputs/plugins/regex/failure-missing-input-param.yaml +75 -0
- package/manifests/outputs/plugins/regex/failure-not-matching-with-regex.yaml +76 -0
- package/manifests/outputs/plugins/regex/success.yaml +81 -0
- package/manifests/outputs/plugins/sci/failure-invalid-config-value.yaml +72 -0
- package/manifests/outputs/plugins/sci/failure-missing-input-param.yaml +72 -0
- package/manifests/outputs/plugins/sci/success.yml.yaml +80 -0
- package/manifests/outputs/plugins/sci-embodied/failure-invalid-default-emission-value.yaml +75 -0
- package/manifests/outputs/plugins/sci-embodied/failure-missing-expected-lifespan.yaml +71 -0
- package/manifests/outputs/plugins/sci-embodied/success.yaml +78 -0
- package/manifests/outputs/plugins/shell/failure-invalid-command.yaml +70 -0
- package/manifests/outputs/plugins/shell/success.yaml +68 -0
- package/manifests/outputs/plugins/subtract/success.yaml +78 -0
- package/manifests/outputs/plugins/sum/failure-missing-input-param.yaml +75 -0
- package/manifests/outputs/plugins/sum/failure-missing-output-param.yaml +78 -0
- package/manifests/outputs/plugins/sum/success.yaml +78 -0
- package/manifests/outputs/plugins/time-sync/failure-config-start-later-end.yaml +82 -0
- package/manifests/outputs/plugins/time-sync/failure-missing-global-config.yaml +78 -0
- package/manifests/outputs/plugins/time-sync/success.yaml +119 -0
- package/package.json +10 -4
- package/src/__mocks__/mock-manifest.yaml +72 -0
- package/src/builtins/README.md +1 -1
- package/src/builtins/coefficient/README.md +19 -1
- package/src/builtins/copy-param/README.md +104 -0
- package/src/builtins/csv-lookup/README.md +39 -1
- package/src/builtins/divide/README.md +29 -3
- package/src/builtins/exponent/README.md +21 -1
- package/src/builtins/interpolation/README.md +29 -1
- package/src/builtins/mock-observations/README.md +1 -1
- package/src/builtins/multiply/README.md +16 -1
- package/src/builtins/regex/README.md +32 -2
- package/src/builtins/sci/README.md +24 -1
- package/src/builtins/sci-embodied/README.md +15 -1
- package/src/builtins/shell/README.md +12 -1
- package/src/builtins/subtract/README.md +12 -1
- package/src/builtins/sum/README.md +28 -1
- package/src/config/env-template.yml +24 -0
- package/build/builtins/coefficient/types.d.ts +0 -5
- package/build/builtins/coefficient/types.js +0 -3
- package/build/builtins/exponent/types.d.ts +0 -5
- package/build/builtins/exponent/types.js +0 -3
- package/build/builtins/interpolation/types.d.ts +0 -5
- package/build/builtins/interpolation/types.js +0 -10
- package/build/builtins/mock-observations/types.d.ts +0 -13
- package/build/builtins/mock-observations/types.js +0 -3
- package/build/builtins/multiply/types.d.ts +0 -4
- package/build/builtins/multiply/types.js +0 -3
- package/build/builtins/subtract/types.d.ts +0 -4
- package/build/builtins/subtract/types.js +0 -3
- package/build/builtins/sum/types.d.ts +0 -4
- package/build/builtins/sum/types.js +0 -3
- package/build/types/common.d.ts +0 -4
- package/build/types/common.js +0 -3
- package/build/types/group-by.d.ts +0 -3
- package/build/types/group-by.js +0 -3
- package/build/types/helpers.d.ts +0 -4
- package/build/types/helpers.js +0 -3
- package/build/util/errors.d.ts +0 -6
- package/build/util/errors.js +0 -33
- package/manifests/bugs/aggregation-error-wrong-metric.yml +0 -128
- package/manifests/bugs/azure-importer-ignoring-defaults.yml +0 -61
- package/manifests/bugs/azure-importer-incorrect-calculation.yml +0 -56
- package/manifests/bugs/initialize-error-no-config.yml +0 -27
- package/manifests/bugs/initialize-error-no-path.yml +0 -28
- package/manifests/bugs/initialize-error-no-plugins.yml +0 -23
- package/manifests/bugs/input-error-missing-duration.yml +0 -21
- package/manifests/bugs/mock-observations-failure-duration-is-zero.yml +0 -34
- package/manifests/bugs/pipeline-error-naming-mismatch.yml +0 -28
- package/manifests/bugs/pipeline-error-uninitialized-plugin.yml +0 -29
- package/manifests/bugs/pipeline-ordering-error.yml +0 -82
- package/manifests/bugs/sci-embodied-missing-resources-total.yml +0 -23
- package/manifests/examples/basic.yml +0 -28
- package/manifests/examples/mock-cpu-util-to-carbon.yml +0 -70
- package/manifests/features/aggregate-failure-inalid-metrics.yml +0 -43
- package/manifests/features/aggregate-failure-missing-metric-in-inputs.yml +0 -43
- package/manifests/features/aggregate-horizontal.yml +0 -44
- package/manifests/features/aggregate-vertical.yml +0 -44
- package/manifests/features/aggregate.yml +0 -44
- package/manifests/integrations/cloud-metadata-divide-boavizta.yml +0 -38
- package/manifests/integrations/mock-obs-group-by-cloud-meta.yml +0 -51
- package/manifests/integrations/mock-obs-groupby.yml +0 -39
- package/manifests/integrations/mock-obs-time-sync.yml +0 -65
- package/manifests/plugins/tdp-finder/failure-missing-input-param.yml +0 -18
- package/manifests/plugins/tdp-finder/failure-unsupported-physical-processor.yml +0 -19
- package/manifests/plugins/tdp-finder/success.yml +0 -19
- /package/manifests/{plugins → examples/builtins}/coefficient/failure-invalid-config-input-param.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/coefficient/failure-output-param-is-null.yaml +0 -0
- /package/manifests/{plugins → examples/builtins}/coefficient/success.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/groupby/failure-invalid-config-group.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/groupby/failure-missing-cloud-instance-type.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/interpolation/interpolation.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/mock-observations/failure-invalid-config-cpu-range.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/mock-observations/failure-invalid-memory-utilization-range.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/mock-observations/failure-missing-timestamp-from-param.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/mock-observations/success.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/multiply/failure-input-parameter-is-missing.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/multiply/success-with-multiple-inputs.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/multiply/success.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/regex/failure-missing-input-param.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/regex/failure-not-matching-with-regex.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/regex/success.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/sci/failure-invalid-config-value.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/sci-embodied/failure-invalid-default-emission-value.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/sci-embodied/failure-missing-expected-lifespan.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/sci-embodied/success.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/shell/failure-invalid-command.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/shell/success.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/sum/failure-missing-input-param.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/sum/failure-missing-output-param.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/time-sync/failure-config-start-later-end.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/time-sync/failure-missing-global-config.yml +0 -0
- /package/manifests/{plugins → examples/builtins}/time-sync/success.yml +0 -0
- /package/manifests/examples/{instance-metadata.yml → pipelines/instance-metadata.yml} +0 -0
- /package/manifests/examples/{sci.yml → pipelines/sci.yml} +0 -0
- /package/manifests/examples/{teads-curve.yml → pipelines/teads-curve.yml} +0 -0
|
@@ -4,13 +4,13 @@ exports.TimeSync = void 0;
|
|
|
4
4
|
const types_1 = require("node:util/types");
|
|
5
5
|
const luxon_1 = require("luxon");
|
|
6
6
|
const zod_1 = require("zod");
|
|
7
|
+
const utils_1 = require("@grnsft/if-core/utils");
|
|
7
8
|
const parameterize_1 = require("../lib/parameterize");
|
|
8
|
-
const errors_1 = require("../util/errors");
|
|
9
|
-
const config_1 = require("../config");
|
|
10
9
|
const validations_1 = require("../util/validations");
|
|
10
|
+
const config_1 = require("../config");
|
|
11
11
|
luxon_1.Settings.defaultZone = 'utc';
|
|
12
|
-
const {
|
|
13
|
-
const { INVALID_TIME_NORMALIZATION, INVALID_OBSERVATION_OVERLAP, AVOIDING_PADDING_BY_EDGES, } = config_1.STRINGS;
|
|
12
|
+
const { GlobalConfigError, InvalidDateInInputError, InvalidPaddingError, InvalidInputError, } = utils_1.ERRORS;
|
|
13
|
+
const { INVALID_TIME_NORMALIZATION, INVALID_OBSERVATION_OVERLAP, AVOIDING_PADDING_BY_EDGES, INVALID_DATE_TYPE, START_LOWER_END, TIMESTAMP_REQUIRED, INVALID_DATETIME, } = config_1.STRINGS;
|
|
14
14
|
const TimeSync = (globalConfig) => {
|
|
15
15
|
const metadata = {
|
|
16
16
|
kind: 'execute',
|
|
@@ -40,7 +40,7 @@ const TimeSync = (globalConfig) => {
|
|
|
40
40
|
if (parseDate(previousInput.timestamp).plus({
|
|
41
41
|
seconds: previousInput.duration,
|
|
42
42
|
}) > currentMoment) {
|
|
43
|
-
throw new
|
|
43
|
+
throw new InvalidInputError(INVALID_OBSERVATION_OVERLAP);
|
|
44
44
|
}
|
|
45
45
|
const compareableTime = previousInputTimestamp.plus({
|
|
46
46
|
seconds: previousInput.duration,
|
|
@@ -64,8 +64,9 @@ const TimeSync = (globalConfig) => {
|
|
|
64
64
|
return resampleInputs(sortedInputs, timeParams);
|
|
65
65
|
};
|
|
66
66
|
const parseDate = (date) => {
|
|
67
|
-
if (!date)
|
|
67
|
+
if (!date) {
|
|
68
68
|
return luxon_1.DateTime.invalid('Invalid date');
|
|
69
|
+
}
|
|
69
70
|
// dates are passed to time-sync.ts both in ISO 8601 format
|
|
70
71
|
// and as a Date object (from the deserialization of a YAML file)
|
|
71
72
|
// if the YAML parser fails to identify as a date, it passes as a string
|
|
@@ -75,7 +76,7 @@ const TimeSync = (globalConfig) => {
|
|
|
75
76
|
if (typeof date === 'string') {
|
|
76
77
|
return luxon_1.DateTime.fromISO(date);
|
|
77
78
|
}
|
|
78
|
-
throw new
|
|
79
|
+
throw new InvalidDateInInputError(INVALID_DATE_TYPE(date));
|
|
79
80
|
};
|
|
80
81
|
/**
|
|
81
82
|
* Validates input parameters.
|
|
@@ -84,10 +85,10 @@ const TimeSync = (globalConfig) => {
|
|
|
84
85
|
const schema = zod_1.z.object({
|
|
85
86
|
timestamp: zod_1.z
|
|
86
87
|
.string({
|
|
87
|
-
required_error:
|
|
88
|
+
required_error: TIMESTAMP_REQUIRED(index),
|
|
88
89
|
})
|
|
89
90
|
.datetime({
|
|
90
|
-
message:
|
|
91
|
+
message: INVALID_DATETIME(index),
|
|
91
92
|
})
|
|
92
93
|
.or(zod_1.z.date()),
|
|
93
94
|
duration: zod_1.z.number(),
|
|
@@ -99,7 +100,7 @@ const TimeSync = (globalConfig) => {
|
|
|
99
100
|
*/
|
|
100
101
|
const validateGlobalConfig = () => {
|
|
101
102
|
if (globalConfig === undefined) {
|
|
102
|
-
throw new
|
|
103
|
+
throw new GlobalConfigError(INVALID_TIME_NORMALIZATION);
|
|
103
104
|
}
|
|
104
105
|
const schema = zod_1.z
|
|
105
106
|
.object({
|
|
@@ -109,7 +110,7 @@ const TimeSync = (globalConfig) => {
|
|
|
109
110
|
'allow-padding': zod_1.z.boolean(),
|
|
110
111
|
})
|
|
111
112
|
.refine(data => data['start-time'] < data['end-time'], {
|
|
112
|
-
message:
|
|
113
|
+
message: START_LOWER_END,
|
|
113
114
|
});
|
|
114
115
|
return (0, validations_1.validate)(schema, globalConfig);
|
|
115
116
|
};
|
|
@@ -183,7 +184,7 @@ const TimeSync = (globalConfig) => {
|
|
|
183
184
|
const { start, end } = pad;
|
|
184
185
|
const isPaddingNeeded = start || end;
|
|
185
186
|
if (!params.allowPadding && isPaddingNeeded) {
|
|
186
|
-
throw new
|
|
187
|
+
throw new InvalidPaddingError(AVOIDING_PADDING_BY_EDGES(start, end));
|
|
187
188
|
}
|
|
188
189
|
};
|
|
189
190
|
/**
|
|
@@ -207,54 +208,50 @@ const TimeSync = (globalConfig) => {
|
|
|
207
208
|
* Iterates over given inputs frame, meanwhile checking if aggregation method is `sum`, then calculates it.
|
|
208
209
|
* For methods is `avg` and `none` calculating average of the frame.
|
|
209
210
|
*/
|
|
210
|
-
const resampleInputFrame = (inputsInTimeslot) => {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
if (method === 'sum') {
|
|
221
|
-
acc[metric] += input[metric];
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
if (method === 'none') {
|
|
225
|
-
acc[metric] = input[metric];
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* If timeslot contains records more than one, then divide each metric by the timeslot length,
|
|
230
|
-
* so that their sum yields the timeslot average.
|
|
231
|
-
*/
|
|
232
|
-
if (inputsInTimeslot.length > 1 &&
|
|
233
|
-
index === inputsInTimeslot.length - 1) {
|
|
234
|
-
acc[metric] /= inputsInTimeslot.length;
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
211
|
+
const resampleInputFrame = (inputsInTimeslot) => inputsInTimeslot.reduce((acc, input, index, inputs) => {
|
|
212
|
+
const metrics = Object.keys(input);
|
|
213
|
+
metrics.forEach(metric => {
|
|
214
|
+
const method = parameterize_1.parameterize.getAggregationMethod(metric);
|
|
215
|
+
acc[metric] = acc[metric] ?? 0;
|
|
216
|
+
if (metric === 'timestamp') {
|
|
217
|
+
acc[metric] = inputs[0][metric];
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (method === 'sum') {
|
|
237
221
|
acc[metric] += input[metric];
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (method === 'none') {
|
|
225
|
+
acc[metric] = input[metric];
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* If timeslot contains records more than one, then divide each metric by the timeslot length,
|
|
230
|
+
* so that their sum yields the timeslot average.
|
|
231
|
+
*/
|
|
232
|
+
if (inputsInTimeslot.length > 1 &&
|
|
233
|
+
index === inputsInTimeslot.length - 1) {
|
|
234
|
+
acc[metric] /= inputsInTimeslot.length;
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
acc[metric] += input[metric];
|
|
238
|
+
});
|
|
239
|
+
return acc;
|
|
240
|
+
}, {});
|
|
242
241
|
/**
|
|
243
242
|
* Takes each array frame with interval length, then aggregating them together as from units.yaml file.
|
|
244
243
|
*/
|
|
245
|
-
const resampleInputs = (inputs, params) => {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
}, []);
|
|
257
|
-
};
|
|
244
|
+
const resampleInputs = (inputs, params) => inputs.reduce((acc, _input, index, inputs) => {
|
|
245
|
+
const frameStart = index * params.interval;
|
|
246
|
+
const frameEnd = (index + 1) * params.interval;
|
|
247
|
+
const inputsFrame = inputs.slice(frameStart, frameEnd);
|
|
248
|
+
const resampledInput = resampleInputFrame(inputsFrame);
|
|
249
|
+
/** Checks if resampled input is not empty, then includes in result. */
|
|
250
|
+
if (Object.keys(resampledInput).length > 0) {
|
|
251
|
+
acc.push(resampledInput);
|
|
252
|
+
}
|
|
253
|
+
return acc;
|
|
254
|
+
}, []);
|
|
258
255
|
/**
|
|
259
256
|
* Pads zeroish inputs from the beginning or at the end of the inputs if needed.
|
|
260
257
|
*/
|
|
@@ -289,17 +286,15 @@ const TimeSync = (globalConfig) => {
|
|
|
289
286
|
/*
|
|
290
287
|
* Checks if input's timestamp is included in global specified period then leaves it, otherwise.
|
|
291
288
|
*/
|
|
292
|
-
const trimInputsByGlobalTimeline = (inputs, params) => {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}, []);
|
|
301
|
-
};
|
|
289
|
+
const trimInputsByGlobalTimeline = (inputs, params) => inputs.reduce((acc, item) => {
|
|
290
|
+
const { timestamp } = item;
|
|
291
|
+
if (parseDate(timestamp) >= params.startTime &&
|
|
292
|
+
parseDate(timestamp) <= params.endTime) {
|
|
293
|
+
acc.push(item);
|
|
294
|
+
}
|
|
295
|
+
return acc;
|
|
296
|
+
}, []);
|
|
302
297
|
return { metadata, execute };
|
|
303
298
|
};
|
|
304
299
|
exports.TimeSync = TimeSync;
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWx0aW5zL3RpbWUtc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsaUNBQXVFO0FBQ3ZFLDZCQUFzQjtBQUV0QixzREFBaUQ7QUFFakQsMkNBQXNDO0FBRXRDLHNDQUFrQztBQVFsQyxxREFBNkM7QUFFN0MsZ0JBQVEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRTdCLE1BQU0sRUFBQyxvQkFBb0IsRUFBQyxHQUFHLGVBQU0sQ0FBQztBQUV0QyxNQUFNLEVBQ0osMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsR0FBRyxnQkFBTyxDQUFDO0FBRUwsTUFBTSxRQUFRLEdBQUcsQ0FBQyxZQUFrQyxFQUFpQixFQUFFO0lBQzVFLE1BQU0sUUFBUSxHQUFHO1FBQ2YsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFzQixFQUFrQixFQUFFO1FBQ3pELE1BQU0sZUFBZSxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQUc7WUFDakIsU0FBUyxFQUFFLGdCQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUUsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUTtZQUNsQyxZQUFZLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQztTQUMvQyxDQUFDO1FBRUYsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxlQUFlLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXhELE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQ3ZDLENBQUMsR0FBbUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXJELGdGQUFnRjtZQUNoRixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUVsRSxxQ0FBcUM7Z0JBQ3JDLElBQ0UsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ3RDLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUTtpQkFDaEMsQ0FBQyxHQUFHLGFBQWEsRUFDbEI7b0JBQ0EsTUFBTSxJQUFJLG9CQUFvQixDQUFDLDJCQUEyQixDQUFDLENBQUM7aUJBQzdEO2dCQUVELE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQztvQkFDbEQsT0FBTyxFQUFFLGFBQWEsQ0FBQyxRQUFRO2lCQUNoQyxDQUFDLENBQUM7Z0JBRUgsTUFBTSxlQUFlLEdBQUcsYUFBYTtxQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQztxQkFDckIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUVqQiwwQ0FBMEM7Z0JBQzFDLElBQUksZUFBZSxHQUFHLENBQUMsRUFBRTtvQkFDdkIsR0FBRyxDQUFDLElBQUksQ0FDTixHQUFHLG9DQUFvQyxDQUNyQyxlQUFlLEVBQ2YsYUFBYSxFQUNiLFNBQVMsQ0FDVixDQUNGLENBQUM7aUJBQ0g7YUFDRjtZQUNELHNDQUFzQztZQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDM0MsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFckQsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUMzQjtZQUVELE9BQU8sMEJBQTBCLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsRUFDRCxFQUFvQixDQUNyQixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMvQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUNsRSxDQUFDO1FBRUYsT0FBTyxjQUFjLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBbUIsQ0FBQztJQUNwRSxDQUFDLENBQUM7SUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sZ0JBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsMkRBQTJEO1FBQzNELGlFQUFpRTtRQUNqRSx3RUFBd0U7UUFDeEUsSUFBSSxJQUFBLGNBQU0sRUFBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixPQUFPLGdCQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsT0FBTyxnQkFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtRQUNELE1BQU0sSUFBSSxvQkFBb0IsQ0FDNUIsNkJBQTZCLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxDQUNwRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQW1CLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxNQUFNLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0QixTQUFTLEVBQUUsT0FBQztpQkFDVCxNQUFNLENBQUM7Z0JBQ04sY0FBYyxFQUFFLHFCQUFxQixLQUFLLEdBQUc7YUFDOUMsQ0FBQztpQkFDRCxRQUFRLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLDZCQUE2QixLQUFLLEdBQUc7YUFDL0MsQ0FBQztpQkFDRCxFQUFFLENBQUMsT0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7U0FDckIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFBLHNCQUFRLEVBQXlCLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixNQUFNLElBQUksb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM1RDtRQUVELE1BQU0sTUFBTSxHQUFHLE9BQUM7YUFDYixNQUFNLENBQUM7WUFDTixZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUNuQyxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNwQixlQUFlLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtTQUM3QixDQUFDO2FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNyRCxPQUFPLEVBQUUsOENBQThDO1NBQ3hELENBQUMsQ0FBQztRQUVMLE9BQU8sSUFBQSxzQkFBUSxFQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBYSxFQUFFLFFBQWdCLEVBQUUsRUFBRSxDQUM3RCxLQUFLLEdBQUcsUUFBUSxDQUFDO0lBRW5COztPQUVHO0lBQ0gsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixrQkFBaUMsRUFDakMsQ0FBUyxFQUNULEVBQUU7UUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBQ0Y7O09BRUc7SUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW1CLEVBQUUsQ0FBUyxFQUFFLEVBQUU7UUFDeEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsMkJBQVksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV0RCxJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUU7Z0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUUzQyxPQUFPLEdBQUcsQ0FBQzthQUNaO1lBRUQsOENBQThDO1lBQzlDLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtnQkFDdEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFYixPQUFPLEdBQUcsQ0FBQzthQUNaO1lBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQztnQkFDTixNQUFNLEtBQUssS0FBSztvQkFDZCxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDbkQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFrQixDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQzNCLEtBQW1CLEVBQ25CLGdCQUFvQyxFQUNwQyxFQUFFO1FBQ0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFFdkUsT0FBTyxHQUFHLENBQUM7YUFDWjtZQUVELDJEQUEyRDtZQUMzRCxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRWhCLE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFFRCxJQUFJLE1BQU0sS0FBSyxlQUFlLEVBQUU7Z0JBQzlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRTlCLE9BQU8sR0FBRyxDQUFDO2FBQ1o7WUFFRCxNQUFNLE1BQU0sR0FBRywyQkFBWSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXpELElBQUksTUFBTSxLQUFLLEtBQUssSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO2dCQUN4QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVoQixPQUFPLEdBQUcsQ0FBQzthQUNaO1lBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU1QixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFrQixDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQW1CLEVBQUUsTUFBa0IsRUFBUSxFQUFFO1FBQ3hFLE1BQU0sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksZUFBZSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN2RTtJQUNILENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsTUFBc0IsRUFDdEIsTUFBa0IsRUFDRixFQUFFO1FBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7YUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDdEIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7YUFDcEQsSUFBSSxDQUFDLEVBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUMsQ0FBQzthQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUNwQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakIsT0FBTztZQUNMLEtBQUssRUFBRSxrQkFBa0IsR0FBRyxDQUFDO1lBQzdCLEdBQUcsRUFBRSxnQkFBZ0IsR0FBRyxDQUFDO1NBQzFCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsZ0JBQWdDLEVBQUUsRUFBRTtRQUM5RCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxNQUFNLEdBQUcsMkJBQVksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRS9CLElBQUksTUFBTSxLQUFLLFdBQVcsRUFBRTtvQkFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFaEMsT0FBTztpQkFDUjtnQkFFRCxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7b0JBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTdCLE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO29CQUNyQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUU1QixPQUFPO2lCQUNSO2dCQUVEOzs7bUJBR0c7Z0JBQ0gsSUFDRSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDM0IsS0FBSyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3JDO29CQUNBLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7b0JBRXZDLE9BQU87aUJBQ1I7Z0JBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQWtCLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBc0IsRUFBRSxNQUFrQixFQUFFLEVBQUU7UUFDcEUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBbUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xFLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDL0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFdkQsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFdkQsdUVBQXVFO1lBQ3ZFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzFCO1lBRUQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBb0IsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxTQUFTLEdBQUcsQ0FDaEIsTUFBc0IsRUFDdEIsR0FBbUIsRUFDbkIsTUFBa0IsRUFDRixFQUFFO1FBQ2xCLE1BQU0sRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBRS9CLElBQUksS0FBSyxFQUFFO1lBQ1QsbUJBQW1CLENBQUMsSUFBSSxDQUN0QixHQUFHLG9DQUFvQyxDQUNyQyxNQUFNLENBQUMsU0FBUyxFQUNoQixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1YsQ0FDRixDQUFDO1NBQ0g7UUFFRCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkQsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDdkQsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRO2FBQzVCLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxJQUFJLENBQ2QsR0FBRyxvQ0FBb0MsQ0FDckMsWUFBWSxFQUNaLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQ2pDLFNBQVMsQ0FDVixDQUNGLENBQUM7U0FDSDtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLE1BQU0sb0NBQW9DLEdBQUcsQ0FDM0MsU0FBNkIsRUFDN0IsT0FBMkIsRUFDM0IsYUFBMkIsRUFDM0IsRUFBRTtRQUNGLE1BQU0sS0FBSyxHQUFtQixFQUFFLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsZ0JBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFFO1lBQ3JELEtBQUssQ0FBQyxJQUFJLENBQ1Isb0JBQW9CLENBQ2xCLGFBQWE7WUFDYixpREFBaUQ7WUFDakQsaURBQWlEO1lBQ2pELG9EQUFvRDtZQUNwRCxRQUFRLENBQUMsS0FBSyxJQUFJLGdCQUFRLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQ25FLENBQ0YsQ0FBQztTQUNIO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sMEJBQTBCLEdBQUcsQ0FDakMsTUFBc0IsRUFDdEIsTUFBa0IsRUFDRixFQUFFO1FBQ2xCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQW1CLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFDLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQztZQUV6QixJQUNFLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUztnQkFDeEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQ3RDO2dCQUNBLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEI7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFvQixDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsT0FBTyxFQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUE5WlcsUUFBQSxRQUFRLFlBOFpuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNEYXRlfSBmcm9tICdub2RlOnV0aWwvdHlwZXMnO1xuaW1wb3J0IHtTZXR0aW5ncywgRGF0ZVRpbWUsIERhdGVUaW1lTWF5YmVWYWxpZCwgSW50ZXJ2YWx9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtwYXJhbWV0ZXJpemV9IGZyb20gJy4uL2xpYi9wYXJhbWV0ZXJpemUnO1xuXG5pbXBvcnQge0VSUk9SU30gZnJvbSAnLi4vdXRpbC9lcnJvcnMnO1xuXG5pbXBvcnQge1NUUklOR1N9IGZyb20gJy4uL2NvbmZpZyc7XG5cbmltcG9ydCB7RXhlY3V0ZVBsdWdpbiwgUGx1Z2luUGFyYW1zfSBmcm9tICcuLi90eXBlcy9pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgUGFkZGluZ1JlY2VpcHQsXG4gIFRpbWVOb3JtYWxpemVyQ29uZmlnLFxuICBUaW1lUGFyYW1zLFxufSBmcm9tICcuLi90eXBlcy90aW1lLXN5bmMnO1xuaW1wb3J0IHt2YWxpZGF0ZX0gZnJvbSAnLi4vdXRpbC92YWxpZGF0aW9ucyc7XG5cblNldHRpbmdzLmRlZmF1bHRab25lID0gJ3V0Yyc7XG5cbmNvbnN0IHtJbnB1dFZhbGlkYXRpb25FcnJvcn0gPSBFUlJPUlM7XG5cbmNvbnN0IHtcbiAgSU5WQUxJRF9USU1FX05PUk1BTElaQVRJT04sXG4gIElOVkFMSURfT0JTRVJWQVRJT05fT1ZFUkxBUCxcbiAgQVZPSURJTkdfUEFERElOR19CWV9FREdFUyxcbn0gPSBTVFJJTkdTO1xuXG5leHBvcnQgY29uc3QgVGltZVN5bmMgPSAoZ2xvYmFsQ29uZmlnOiBUaW1lTm9ybWFsaXplckNvbmZpZyk6IEV4ZWN1dGVQbHVnaW4gPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICBraW5kOiAnZXhlY3V0ZScsXG4gIH07XG5cbiAgLyoqXG4gICAqIFRha2UgaW5wdXQgYXJyYXkgYW5kIHJldHVybiB0aW1lLXN5bmNocm9uaXplZCBpbnB1dCBhcnJheS5cbiAgICovXG4gIGNvbnN0IGV4ZWN1dGUgPSAoaW5wdXRzOiBQbHVnaW5QYXJhbXNbXSk6IFBsdWdpblBhcmFtc1tdID0+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUdsb2JhbENvbmZpZygpO1xuICAgIGNvbnN0IHRpbWVQYXJhbXMgPSB7XG4gICAgICBzdGFydFRpbWU6IERhdGVUaW1lLmZyb21JU08odmFsaWRhdGVkQ29uZmlnWydzdGFydC10aW1lJ10pLFxuICAgICAgZW5kVGltZTogRGF0ZVRpbWUuZnJvbUlTTyh2YWxpZGF0ZWRDb25maWdbJ2VuZC10aW1lJ10pLFxuICAgICAgaW50ZXJ2YWw6IHZhbGlkYXRlZENvbmZpZy5pbnRlcnZhbCxcbiAgICAgIGFsbG93UGFkZGluZzogdmFsaWRhdGVkQ29uZmlnWydhbGxvdy1wYWRkaW5nJ10sXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZCA9IGNoZWNrRm9yUGFkZGluZyhpbnB1dHMsIHRpbWVQYXJhbXMpO1xuICAgIHZhbGlkYXRlUGFkZGluZyhwYWQsIHRpbWVQYXJhbXMpO1xuXG4gICAgY29uc3QgcGFkZGVkSW5wdXRzID0gcGFkSW5wdXRzKGlucHV0cywgcGFkLCB0aW1lUGFyYW1zKTtcblxuICAgIGNvbnN0IGZsYXR0ZW5JbnB1dHMgPSBwYWRkZWRJbnB1dHMucmVkdWNlKFxuICAgICAgKGFjYzogUGx1Z2luUGFyYW1zW10sIGlucHV0LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlSW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dCwgdmFsaWRhdGVJbnB1dChpbnB1dCwgaW5kZXgpKTtcbiAgICAgICAgY29uc3QgY3VycmVudE1vbWVudCA9IHBhcnNlRGF0ZShzYWZlSW5wdXQudGltZXN0YW1wKTtcblxuICAgICAgICAvKiogQ2hlY2tzIGlmIG5vdCB0aGUgZmlyc3QgaW5wdXQsIHRoZW4gY2hlY2sgY29uc2lzdGVuY3kgd2l0aCBwcmV2aW91cyBvbmVzLiAqL1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNJbnB1dCA9IHBhZGRlZElucHV0c1tpbmRleCAtIDFdO1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5wdXRUaW1lc3RhbXAgPSBwYXJzZURhdGUocHJldmlvdXNJbnB1dC50aW1lc3RhbXApO1xuXG4gICAgICAgICAgLyoqIENoZWNrcyBmb3IgdGltZXN0YW1wcyBvdmVybGFwLiAqL1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcnNlRGF0ZShwcmV2aW91c0lucHV0LnRpbWVzdGFtcCkucGx1cyh7XG4gICAgICAgICAgICAgIHNlY29uZHM6IHByZXZpb3VzSW5wdXQuZHVyYXRpb24sXG4gICAgICAgICAgICB9KSA+IGN1cnJlbnRNb21lbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnB1dFZhbGlkYXRpb25FcnJvcihJTlZBTElEX09CU0VSVkFUSU9OX09WRVJMQVApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbXBhcmVhYmxlVGltZSA9IHByZXZpb3VzSW5wdXRUaW1lc3RhbXAucGx1cyh7XG4gICAgICAgICAgICBzZWNvbmRzOiBwcmV2aW91c0lucHV0LmR1cmF0aW9uLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdGltZWxpbmVHYXBTaXplID0gY3VycmVudE1vbWVudFxuICAgICAgICAgICAgLmRpZmYoY29tcGFyZWFibGVUaW1lKVxuICAgICAgICAgICAgLmFzKCdzZWNvbmRzJyk7XG5cbiAgICAgICAgICAvKiogQ2hlY2tzIGlmIHRoZXJlIGlzIGdhcCBpbiB0aW1lbGluZS4gKi9cbiAgICAgICAgICBpZiAodGltZWxpbmVHYXBTaXplID4gMSkge1xuICAgICAgICAgICAgYWNjLnB1c2goXG4gICAgICAgICAgICAgIC4uLmdldFplcm9pc2hJbnB1dFBlclNlY29uZEJldHdlZW5SYW5nZShcbiAgICAgICAgICAgICAgICBjb21wYXJlYWJsZVRpbWUsXG4gICAgICAgICAgICAgICAgY3VycmVudE1vbWVudCxcbiAgICAgICAgICAgICAgICBzYWZlSW5wdXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqIEJyZWFrIGRvd24gY3VycmVudCBvYnNlcnZhdGlvbi4gKi9cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYWZlSW5wdXQuZHVyYXRpb247IGkrKykge1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJbnB1dCA9IGJyZWFrRG93bklucHV0KHNhZmVJbnB1dCwgaSk7XG5cbiAgICAgICAgICBhY2MucHVzaChub3JtYWxpemVkSW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyaW1JbnB1dHNCeUdsb2JhbFRpbWVsaW5lKGFjYywgdGltZVBhcmFtcyk7XG4gICAgICB9LFxuICAgICAgW10gYXMgUGx1Z2luUGFyYW1zW11cbiAgICApO1xuXG4gICAgY29uc3Qgc29ydGVkSW5wdXRzID0gZmxhdHRlbklucHV0cy5zb3J0KChhLCBiKSA9PlxuICAgICAgcGFyc2VEYXRlKGEudGltZXN0YW1wKS5kaWZmKHBhcnNlRGF0ZShiLnRpbWVzdGFtcCkpLmFzKCdzZWNvbmRzJylcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc2FtcGxlSW5wdXRzKHNvcnRlZElucHV0cywgdGltZVBhcmFtcykgYXMgUGx1Z2luUGFyYW1zW107XG4gIH07XG5cbiAgY29uc3QgcGFyc2VEYXRlID0gKGRhdGU6IERhdGUgfCBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKCdJbnZhbGlkIGRhdGUnKTtcbiAgICAvLyBkYXRlcyBhcmUgcGFzc2VkIHRvIHRpbWUtc3luYy50cyBib3RoIGluIElTTyA4NjAxIGZvcm1hdFxuICAgIC8vIGFuZCBhcyBhIERhdGUgb2JqZWN0IChmcm9tIHRoZSBkZXNlcmlhbGl6YXRpb24gb2YgYSBZQU1MIGZpbGUpXG4gICAgLy8gaWYgdGhlIFlBTUwgcGFyc2VyIGZhaWxzIHRvIGlkZW50aWZ5IGFzIGEgZGF0ZSwgaXQgcGFzc2VzIGFzIGEgc3RyaW5nXG4gICAgaWYgKGlzRGF0ZShkYXRlKSkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoZGF0ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tSVNPKGRhdGUpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgVW5leHBlY3RlZCBkYXRlIGRhdGF0eXBlOiAke3R5cGVvZiBkYXRlfTogJHtkYXRlfWBcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgaW5wdXQgcGFyYW1ldGVycy5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlSW5wdXQgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHoub2JqZWN0KHtcbiAgICAgIHRpbWVzdGFtcDogelxuICAgICAgICAuc3RyaW5nKHtcbiAgICAgICAgICByZXF1aXJlZF9lcnJvcjogYHJlcXVpcmVkIGluIGlucHV0WyR7aW5kZXh9XWAsXG4gICAgICAgIH0pXG4gICAgICAgIC5kYXRldGltZSh7XG4gICAgICAgICAgbWVzc2FnZTogYGludmFsaWQgZGF0ZXRpbWUgaW4gaW5wdXRbJHtpbmRleH1dYCxcbiAgICAgICAgfSlcbiAgICAgICAgLm9yKHouZGF0ZSgpKSxcbiAgICAgIGR1cmF0aW9uOiB6Lm51bWJlcigpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgaW5wdXQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZ2xvYmFsIGNvbmZpZyBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVHbG9iYWxDb25maWcgPSAoKSA9PiB7XG4gICAgaWYgKGdsb2JhbENvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW5wdXRWYWxpZGF0aW9uRXJyb3IoSU5WQUxJRF9USU1FX05PUk1BTElaQVRJT04pO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICAnc3RhcnQtdGltZSc6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKSxcbiAgICAgICAgJ2VuZC10aW1lJzogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICAgICAgICBpbnRlcnZhbDogei5udW1iZXIoKSxcbiAgICAgICAgJ2FsbG93LXBhZGRpbmcnOiB6LmJvb2xlYW4oKSxcbiAgICAgIH0pXG4gICAgICAucmVmaW5lKGRhdGEgPT4gZGF0YVsnc3RhcnQtdGltZSddIDwgZGF0YVsnZW5kLXRpbWUnXSwge1xuICAgICAgICBtZXNzYWdlOiAnYHN0YXJ0LXRpbWVgIHNob3VsZCBiZSBsb3dlciB0aGFuIGBlbmQtdGltZWAnLFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBnbG9iYWxDb25maWcpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIG1pbmltYWwgZmFjdG9yLlxuICAgKi9cbiAgY29uc3QgY29udmVydFBlckludGVydmFsID0gKHZhbHVlOiBudW1iZXIsIGR1cmF0aW9uOiBudW1iZXIpID0+XG4gICAgdmFsdWUgLyBkdXJhdGlvbjtcblxuICAvKipcbiAgICogTm9ybWFsaXplIHRpbWUgcGVyIGdpdmVuIHNlY29uZC5cbiAgICovXG4gIGNvbnN0IG5vcm1hbGl6ZVRpbWVQZXJTZWNvbmQgPSAoXG4gICAgY3VycmVudFJvdW5kTW9tZW50OiBEYXRlIHwgc3RyaW5nLFxuICAgIGk6IG51bWJlclxuICApID0+IHtcbiAgICBjb25zdCB0aGlzTW9tZW50ID0gcGFyc2VEYXRlKGN1cnJlbnRSb3VuZE1vbWVudCkuc3RhcnRPZignc2Vjb25kJyk7XG4gICAgcmV0dXJuIHRoaXNNb21lbnQucGx1cyh7c2Vjb25kczogaX0pO1xuICB9O1xuICAvKipcbiAgICogQnJlYWtzIGRvd24gaW5wdXQgcGVyIG1pbmltYWwgdGltZSB1bml0LlxuICAgKi9cbiAgY29uc3QgYnJlYWtEb3duSW5wdXQgPSAoaW5wdXQ6IFBsdWdpblBhcmFtcywgaTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaW5wdXRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXQpO1xuXG4gICAgcmV0dXJuIGlucHV0S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBtZXRob2QgPSBwYXJhbWV0ZXJpemUuZ2V0QWdncmVnYXRpb25NZXRob2Qoa2V5KTtcblxuICAgICAgaWYgKGtleSA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgY29uc3QgcGVyU2Vjb25kID0gbm9ybWFsaXplVGltZVBlclNlY29uZChpbnB1dC50aW1lc3RhbXAsIGkpO1xuICAgICAgICBhY2Nba2V5XSA9IHBlclNlY29uZC50b1VUQygpLnRvSVNPKCkgPz8gJyc7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgLyoqIEB0b2RvIHVzZSB1c2VyIGRlZmluZWQgcmVzb2x1dGlvbiBsYXRlciAqL1xuICAgICAgaWYgKGtleSA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgICBhY2Nba2V5XSA9IDE7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgYWNjW2tleV0gPVxuICAgICAgICBtZXRob2QgPT09ICdzdW0nXG4gICAgICAgICAgPyBjb252ZXJ0UGVySW50ZXJ2YWwoaW5wdXRba2V5XSwgaW5wdXRbJ2R1cmF0aW9uJ10pXG4gICAgICAgICAgOiBpbnB1dFtrZXldO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFBsdWdpblBhcmFtcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBvcHVsYXRlcyBvYmplY3QgdG8gZmlsbCB0aGUgZ2FwcyBpbiBvYnNlcnZhdGlvbmFsIHRpbWVsaW5lIHVzaW5nIHplcm9pc2ggdmFsdWVzLlxuICAgKi9cbiAgY29uc3QgZmlsbFdpdGhaZXJvaXNoSW5wdXQgPSAoXG4gICAgaW5wdXQ6IFBsdWdpblBhcmFtcyxcbiAgICBtaXNzaW5nVGltZXN0YW1wOiBEYXRlVGltZU1heWJlVmFsaWRcbiAgKSA9PiB7XG4gICAgY29uc3QgbWV0cmljcyA9IE9iamVjdC5rZXlzKGlucHV0KTtcblxuICAgIHJldHVybiBtZXRyaWNzLnJlZHVjZSgoYWNjLCBtZXRyaWMpID0+IHtcbiAgICAgIGlmIChtZXRyaWMgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIGFjY1ttZXRyaWNdID0gbWlzc2luZ1RpbWVzdGFtcC5zdGFydE9mKCdzZWNvbmQnKS50b1VUQygpLnRvSVNPKCkgPz8gJyc7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgLyoqIEB0b2RvIGxhdGVyIHdpbGwgYmUgY2hhbmdlZCB0byB1c2VyIGRlZmluZWQgaW50ZXJ2YWwgKi9cbiAgICAgIGlmIChtZXRyaWMgPT09ICdkdXJhdGlvbicpIHtcbiAgICAgICAgYWNjW21ldHJpY10gPSAxO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRyaWMgPT09ICd0aW1lLXJlc2VydmVkJykge1xuICAgICAgICBhY2NbbWV0cmljXSA9IGFjY1snZHVyYXRpb24nXTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2QgPSBwYXJhbWV0ZXJpemUuZ2V0QWdncmVnYXRpb25NZXRob2QobWV0cmljKTtcblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ2F2ZycgfHwgbWV0aG9kID09PSAnc3VtJykge1xuICAgICAgICBhY2NbbWV0cmljXSA9IDA7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgYWNjW21ldHJpY10gPSBpbnB1dFttZXRyaWNdO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFBsdWdpblBhcmFtcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBgZXJyb3Igb24gcGFkZGluZ2AgaXMgZW5hYmxlZCBhbmQgcGFkZGluZyBpcyBuZWVkZWQuIElmIHNvLCB0aGVuIHRocm93cyBlcnJvci5cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlUGFkZGluZyA9IChwYWQ6IFBhZGRpbmdSZWNlaXB0LCBwYXJhbXM6IFRpbWVQYXJhbXMpOiB2b2lkID0+IHtcbiAgICBjb25zdCB7c3RhcnQsIGVuZH0gPSBwYWQ7XG4gICAgY29uc3QgaXNQYWRkaW5nTmVlZGVkID0gc3RhcnQgfHwgZW5kO1xuICAgIGlmICghcGFyYW1zLmFsbG93UGFkZGluZyAmJiBpc1BhZGRpbmdOZWVkZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnB1dFZhbGlkYXRpb25FcnJvcihBVk9JRElOR19QQURESU5HX0JZX0VER0VTKHN0YXJ0LCBlbmQpKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYWRkaW5nIGlzIG5lZWRlZCBlaXRoZXIgYXQgc3RhcnQgb2YgdGhlIHRpbWVsaW5lIG9yIHRoZSBlbmQgYW5kIHJldHVybnMgc3RhdHVzLlxuICAgKi9cbiAgY29uc3QgY2hlY2tGb3JQYWRkaW5nID0gKFxuICAgIGlucHV0czogUGx1Z2luUGFyYW1zW10sXG4gICAgcGFyYW1zOiBUaW1lUGFyYW1zXG4gICk6IFBhZGRpbmdSZWNlaXB0ID0+IHtcbiAgICBjb25zdCBzdGFydERpZmZJblNlY29uZHMgPSBwYXJzZURhdGUoaW5wdXRzWzBdLnRpbWVzdGFtcClcbiAgICAgIC5kaWZmKHBhcmFtcy5zdGFydFRpbWUpXG4gICAgICAuYXMoJ3NlY29uZHMnKTtcblxuICAgIGNvbnN0IGxhc3RJbnB1dCA9IGlucHV0c1tpbnB1dHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBlbmREaWZmSW5TZWNvbmRzID0gcGFyc2VEYXRlKGxhc3RJbnB1dC50aW1lc3RhbXApXG4gICAgICAucGx1cyh7c2Vjb25kOiBsYXN0SW5wdXQuZHVyYXRpb259KVxuICAgICAgLmRpZmYocGFyYW1zLmVuZFRpbWUpXG4gICAgICAuYXMoJ3NlY29uZHMnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnREaWZmSW5TZWNvbmRzID4gMCxcbiAgICAgIGVuZDogZW5kRGlmZkluU2Vjb25kcyA8IDAsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBnaXZlbiBpbnB1dHMgZnJhbWUsIG1lYW53aGlsZSBjaGVja2luZyBpZiBhZ2dyZWdhdGlvbiBtZXRob2QgaXMgYHN1bWAsIHRoZW4gY2FsY3VsYXRlcyBpdC5cbiAgICogRm9yIG1ldGhvZHMgaXMgYGF2Z2AgYW5kIGBub25lYCBjYWxjdWxhdGluZyBhdmVyYWdlIG9mIHRoZSBmcmFtZS5cbiAgICovXG4gIGNvbnN0IHJlc2FtcGxlSW5wdXRGcmFtZSA9IChpbnB1dHNJblRpbWVzbG90OiBQbHVnaW5QYXJhbXNbXSkgPT4ge1xuICAgIHJldHVybiBpbnB1dHNJblRpbWVzbG90LnJlZHVjZSgoYWNjLCBpbnB1dCwgaW5kZXgsIGlucHV0cykgPT4ge1xuICAgICAgY29uc3QgbWV0cmljcyA9IE9iamVjdC5rZXlzKGlucHV0KTtcblxuICAgICAgbWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHBhcmFtZXRlcml6ZS5nZXRBZ2dyZWdhdGlvbk1ldGhvZChtZXRyaWMpO1xuICAgICAgICBhY2NbbWV0cmljXSA9IGFjY1ttZXRyaWNdID8/IDA7XG5cbiAgICAgICAgaWYgKG1ldHJpYyA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgICBhY2NbbWV0cmljXSA9IGlucHV0c1swXVttZXRyaWNdO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3N1bScpIHtcbiAgICAgICAgICBhY2NbbWV0cmljXSArPSBpbnB1dFttZXRyaWNdO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgYWNjW21ldHJpY10gPSBpbnB1dFttZXRyaWNdO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRpbWVzbG90IGNvbnRhaW5zIHJlY29yZHMgbW9yZSB0aGFuIG9uZSwgdGhlbiBkaXZpZGUgZWFjaCBtZXRyaWMgYnkgdGhlIHRpbWVzbG90IGxlbmd0aCxcbiAgICAgICAgICogIHNvIHRoYXQgdGhlaXIgc3VtIHlpZWxkcyB0aGUgdGltZXNsb3QgYXZlcmFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbnB1dHNJblRpbWVzbG90Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICBpbmRleCA9PT0gaW5wdXRzSW5UaW1lc2xvdC5sZW5ndGggLSAxXG4gICAgICAgICkge1xuICAgICAgICAgIGFjY1ttZXRyaWNdIC89IGlucHV0c0luVGltZXNsb3QubGVuZ3RoO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjW21ldHJpY10gKz0gaW5wdXRbbWV0cmljXTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFBsdWdpblBhcmFtcyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRha2VzIGVhY2ggYXJyYXkgZnJhbWUgd2l0aCBpbnRlcnZhbCBsZW5ndGgsIHRoZW4gYWdncmVnYXRpbmcgdGhlbSB0b2dldGhlciBhcyBmcm9tIHVuaXRzLnlhbWwgZmlsZS5cbiAgICovXG4gIGNvbnN0IHJlc2FtcGxlSW5wdXRzID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10sIHBhcmFtczogVGltZVBhcmFtcykgPT4ge1xuICAgIHJldHVybiBpbnB1dHMucmVkdWNlKChhY2M6IFBsdWdpblBhcmFtc1tdLCBfaW5wdXQsIGluZGV4LCBpbnB1dHMpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lU3RhcnQgPSBpbmRleCAqIHBhcmFtcy5pbnRlcnZhbDtcbiAgICAgIGNvbnN0IGZyYW1lRW5kID0gKGluZGV4ICsgMSkgKiBwYXJhbXMuaW50ZXJ2YWw7XG4gICAgICBjb25zdCBpbnB1dHNGcmFtZSA9IGlucHV0cy5zbGljZShmcmFtZVN0YXJ0LCBmcmFtZUVuZCk7XG5cbiAgICAgIGNvbnN0IHJlc2FtcGxlZElucHV0ID0gcmVzYW1wbGVJbnB1dEZyYW1lKGlucHV0c0ZyYW1lKTtcblxuICAgICAgLyoqIENoZWNrcyBpZiByZXNhbXBsZWQgaW5wdXQgaXMgbm90IGVtcHR5LCB0aGVuIGluY2x1ZGVzIGluIHJlc3VsdC4gKi9cbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZXNhbXBsZWRJbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgICBhY2MucHVzaChyZXNhbXBsZWRJbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgUGx1Z2luUGFyYW1zW10pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYWRzIHplcm9pc2ggaW5wdXRzIGZyb20gdGhlIGJlZ2lubmluZyBvciBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dHMgaWYgbmVlZGVkLlxuICAgKi9cbiAgY29uc3QgcGFkSW5wdXRzID0gKFxuICAgIGlucHV0czogUGx1Z2luUGFyYW1zW10sXG4gICAgcGFkOiBQYWRkaW5nUmVjZWlwdCxcbiAgICBwYXJhbXM6IFRpbWVQYXJhbXNcbiAgKTogUGx1Z2luUGFyYW1zW10gPT4ge1xuICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHBhZDtcbiAgICBjb25zdCBwYWRkZWRGcm9tQmVnaW5uaW5nID0gW107XG5cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHBhZGRlZEZyb21CZWdpbm5pbmcucHVzaChcbiAgICAgICAgLi4uZ2V0WmVyb2lzaElucHV0UGVyU2Vjb25kQmV0d2VlblJhbmdlKFxuICAgICAgICAgIHBhcmFtcy5zdGFydFRpbWUsXG4gICAgICAgICAgcGFyc2VEYXRlKGlucHV0c1swXS50aW1lc3RhbXApLFxuICAgICAgICAgIGlucHV0c1swXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRlZEFycmF5ID0gcGFkZGVkRnJvbUJlZ2lubmluZy5jb25jYXQoaW5wdXRzKTtcblxuICAgIGlmIChlbmQpIHtcbiAgICAgIGNvbnN0IGxhc3RJbnB1dCA9IGlucHV0c1tpbnB1dHMubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBsYXN0SW5wdXRFbmQgPSBwYXJzZURhdGUobGFzdElucHV0LnRpbWVzdGFtcCkucGx1cyh7XG4gICAgICAgIHNlY29uZHM6IGxhc3RJbnB1dC5kdXJhdGlvbixcbiAgICAgIH0pO1xuICAgICAgcGFkZGVkQXJyYXkucHVzaChcbiAgICAgICAgLi4uZ2V0WmVyb2lzaElucHV0UGVyU2Vjb25kQmV0d2VlblJhbmdlKFxuICAgICAgICAgIGxhc3RJbnB1dEVuZCxcbiAgICAgICAgICBwYXJhbXMuZW5kVGltZS5wbHVzKHtzZWNvbmRzOiAxfSksXG4gICAgICAgICAgbGFzdElucHV0XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBwYWRkZWRBcnJheTtcbiAgfTtcblxuICBjb25zdCBnZXRaZXJvaXNoSW5wdXRQZXJTZWNvbmRCZXR3ZWVuUmFuZ2UgPSAoXG4gICAgc3RhcnREYXRlOiBEYXRlVGltZU1heWJlVmFsaWQsXG4gICAgZW5kRGF0ZTogRGF0ZVRpbWVNYXliZVZhbGlkLFxuICAgIHRlbXBsYXRlSW5wdXQ6IFBsdWdpblBhcmFtc1xuICApID0+IHtcbiAgICBjb25zdCBhcnJheTogUGx1Z2luUGFyYW1zW10gPSBbXTtcbiAgICBjb25zdCBkYXRlUmFuZ2UgPSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0RGF0ZSwgZW5kRGF0ZSk7XG4gICAgZm9yIChjb25zdCBpbnRlcnZhbCBvZiBkYXRlUmFuZ2Uuc3BsaXRCeSh7c2Vjb25kOiAxfSkpIHtcbiAgICAgIGFycmF5LnB1c2goXG4gICAgICAgIGZpbGxXaXRoWmVyb2lzaElucHV0KFxuICAgICAgICAgIHRlbXBsYXRlSW5wdXQsXG4gICAgICAgICAgLy8gYXMgZmFyIGFzIEkgY2FuIHRlbGwsIHN0YXJ0IHdpbGwgbmV2ZXIgYmUgbnVsbFxuICAgICAgICAgIC8vIGJlY2F1c2UgaWYgd2UgcGFzcyBhbiBpbnZhbGlkIHN0YXJ0L2VuZERhdGUgdG9cbiAgICAgICAgICAvLyBJbnRlcnZhbCwgd2UgZ2V0IGEgemVybyBsZW5ndGggYXJyYXkgYXMgdGhlIHJhbmdlXG4gICAgICAgICAgaW50ZXJ2YWwuc3RhcnQgfHwgRGF0ZVRpbWUuaW52YWxpZCgnbm90IGV4cGVjdGVkIC0gc3RhcnQgaXMgbnVsbCcpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfTtcblxuICAvKlxuICAgKiBDaGVja3MgaWYgaW5wdXQncyB0aW1lc3RhbXAgaXMgaW5jbHVkZWQgaW4gZ2xvYmFsIHNwZWNpZmllZCBwZXJpb2QgdGhlbiBsZWF2ZXMgaXQsIG90aGVyd2lzZS5cbiAgICovXG4gIGNvbnN0IHRyaW1JbnB1dHNCeUdsb2JhbFRpbWVsaW5lID0gKFxuICAgIGlucHV0czogUGx1Z2luUGFyYW1zW10sXG4gICAgcGFyYW1zOiBUaW1lUGFyYW1zXG4gICk6IFBsdWdpblBhcmFtc1tdID0+IHtcbiAgICByZXR1cm4gaW5wdXRzLnJlZHVjZSgoYWNjOiBQbHVnaW5QYXJhbXNbXSwgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSBpdGVtO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcnNlRGF0ZSh0aW1lc3RhbXApID49IHBhcmFtcy5zdGFydFRpbWUgJiZcbiAgICAgICAgcGFyc2VEYXRlKHRpbWVzdGFtcCkgPD0gcGFyYW1zLmVuZFRpbWVcbiAgICAgICkge1xuICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBQbHVnaW5QYXJhbXNbXSk7XG4gIH07XG5cbiAgcmV0dXJuIHttZXRhZGF0YSwgZXhlY3V0ZX07XG59O1xuIl19
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1aWx0aW5zL3RpbWUtc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFFdkMsaUNBQXVFO0FBQ3ZFLDZCQUFzQjtBQUN0QixpREFBNkM7QUFTN0Msc0RBQWlEO0FBRWpELHFEQUE2QztBQUU3QyxzQ0FBa0M7QUFFbEMsZ0JBQVEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRTdCLE1BQU0sRUFDSixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixpQkFBaUIsR0FDbEIsR0FBRyxjQUFNLENBQUM7QUFFWCxNQUFNLEVBQ0osMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBQ2pCLEdBQUcsZ0JBQU8sQ0FBQztBQUVMLE1BQU0sUUFBUSxHQUFHLENBQUMsWUFBa0MsRUFBaUIsRUFBRTtJQUM1RSxNQUFNLFFBQVEsR0FBRztRQUNmLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBc0IsRUFBa0IsRUFBRTtRQUN6RCxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLFNBQVMsRUFBRSxnQkFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDMUQsT0FBTyxFQUFFLGdCQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RCxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVE7WUFDbEMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxlQUFlLENBQUM7U0FDL0MsQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUs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JztcblxuaW1wb3J0IHtTZXR0aW5ncywgRGF0ZVRpbWUsIERhdGVUaW1lTWF5YmVWYWxpZCwgSW50ZXJ2YWx9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcbmltcG9ydCB7RVJST1JTfSBmcm9tICdAZ3Juc2Z0L2lmLWNvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgRXhlY3V0ZVBsdWdpbixcbiAgUGx1Z2luUGFyYW1zLFxuICBQYWRkaW5nUmVjZWlwdCxcbiAgVGltZU5vcm1hbGl6ZXJDb25maWcsXG4gIFRpbWVQYXJhbXMsXG59IGZyb20gJ0Bncm5zZnQvaWYtY29yZS90eXBlcyc7XG5cbmltcG9ydCB7cGFyYW1ldGVyaXplfSBmcm9tICcuLi9saWIvcGFyYW1ldGVyaXplJztcblxuaW1wb3J0IHt2YWxpZGF0ZX0gZnJvbSAnLi4vdXRpbC92YWxpZGF0aW9ucyc7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcblxuU2V0dGluZ3MuZGVmYXVsdFpvbmUgPSAndXRjJztcblxuY29uc3Qge1xuICBHbG9iYWxDb25maWdFcnJvcixcbiAgSW52YWxpZERhdGVJbklucHV0RXJyb3IsXG4gIEludmFsaWRQYWRkaW5nRXJyb3IsXG4gIEludmFsaWRJbnB1dEVycm9yLFxufSA9IEVSUk9SUztcblxuY29uc3Qge1xuICBJTlZBTElEX1RJTUVfTk9STUFMSVpBVElPTixcbiAgSU5WQUxJRF9PQlNFUlZBVElPTl9PVkVSTEFQLFxuICBBVk9JRElOR19QQURESU5HX0JZX0VER0VTLFxuICBJTlZBTElEX0RBVEVfVFlQRSxcbiAgU1RBUlRfTE9XRVJfRU5ELFxuICBUSU1FU1RBTVBfUkVRVUlSRUQsXG4gIElOVkFMSURfREFURVRJTUUsXG59ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IFRpbWVTeW5jID0gKGdsb2JhbENvbmZpZzogVGltZU5vcm1hbGl6ZXJDb25maWcpOiBFeGVjdXRlUGx1Z2luID0+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAga2luZDogJ2V4ZWN1dGUnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBUYWtlIGlucHV0IGFycmF5IGFuZCByZXR1cm4gdGltZS1zeW5jaHJvbml6ZWQgaW5wdXQgYXJyYXkuXG4gICAqL1xuICBjb25zdCBleGVjdXRlID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10pOiBQbHVnaW5QYXJhbXNbXSA9PiB7XG4gICAgY29uc3QgdmFsaWRhdGVkQ29uZmlnID0gdmFsaWRhdGVHbG9iYWxDb25maWcoKTtcbiAgICBjb25zdCB0aW1lUGFyYW1zID0ge1xuICAgICAgc3RhcnRUaW1lOiBEYXRlVGltZS5mcm9tSVNPKHZhbGlkYXRlZENvbmZpZ1snc3RhcnQtdGltZSddKSxcbiAgICAgIGVuZFRpbWU6IERhdGVUaW1lLmZyb21JU08odmFsaWRhdGVkQ29uZmlnWydlbmQtdGltZSddKSxcbiAgICAgIGludGVydmFsOiB2YWxpZGF0ZWRDb25maWcuaW50ZXJ2YWwsXG4gICAgICBhbGxvd1BhZGRpbmc6IHZhbGlkYXRlZENvbmZpZ1snYWxsb3ctcGFkZGluZyddLFxuICAgIH07XG5cbiAgICBjb25zdCBwYWQgPSBjaGVja0ZvclBhZGRpbmcoaW5wdXRzLCB0aW1lUGFyYW1zKTtcbiAgICB2YWxpZGF0ZVBhZGRpbmcocGFkLCB0aW1lUGFyYW1zKTtcblxuICAgIGNvbnN0IHBhZGRlZElucHV0cyA9IHBhZElucHV0cyhpbnB1dHMsIHBhZCwgdGltZVBhcmFtcyk7XG5cbiAgICBjb25zdCBmbGF0dGVuSW5wdXRzID0gcGFkZGVkSW5wdXRzLnJlZHVjZShcbiAgICAgIChhY2M6IFBsdWdpblBhcmFtc1tdLCBpbnB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUlucHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgaW5wdXQsIHZhbGlkYXRlSW5wdXQoaW5wdXQsIGluZGV4KSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb21lbnQgPSBwYXJzZURhdGUoc2FmZUlucHV0LnRpbWVzdGFtcCk7XG5cbiAgICAgICAgLyoqIENoZWNrcyBpZiBub3QgdGhlIGZpcnN0IGlucHV0LCB0aGVuIGNoZWNrIGNvbnNpc3RlbmN5IHdpdGggcHJldmlvdXMgb25lcy4gKi9cbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzSW5wdXQgPSBwYWRkZWRJbnB1dHNbaW5kZXggLSAxXTtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c0lucHV0VGltZXN0YW1wID0gcGFyc2VEYXRlKHByZXZpb3VzSW5wdXQudGltZXN0YW1wKTtcblxuICAgICAgICAgIC8qKiBDaGVja3MgZm9yIHRpbWVzdGFtcHMgb3ZlcmxhcC4gKi9cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJzZURhdGUocHJldmlvdXNJbnB1dC50aW1lc3RhbXApLnBsdXMoe1xuICAgICAgICAgICAgICBzZWNvbmRzOiBwcmV2aW91c0lucHV0LmR1cmF0aW9uLFxuICAgICAgICAgICAgfSkgPiBjdXJyZW50TW9tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZElucHV0RXJyb3IoSU5WQUxJRF9PQlNFUlZBVElPTl9PVkVSTEFQKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb21wYXJlYWJsZVRpbWUgPSBwcmV2aW91c0lucHV0VGltZXN0YW1wLnBsdXMoe1xuICAgICAgICAgICAgc2Vjb25kczogcHJldmlvdXNJbnB1dC5kdXJhdGlvbixcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHRpbWVsaW5lR2FwU2l6ZSA9IGN1cnJlbnRNb21lbnRcbiAgICAgICAgICAgIC5kaWZmKGNvbXBhcmVhYmxlVGltZSlcbiAgICAgICAgICAgIC5hcygnc2Vjb25kcycpO1xuXG4gICAgICAgICAgLyoqIENoZWNrcyBpZiB0aGVyZSBpcyBnYXAgaW4gdGltZWxpbmUuICovXG4gICAgICAgICAgaWYgKHRpbWVsaW5lR2FwU2l6ZSA+IDEpIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKFxuICAgICAgICAgICAgICAuLi5nZXRaZXJvaXNoSW5wdXRQZXJTZWNvbmRCZXR3ZWVuUmFuZ2UoXG4gICAgICAgICAgICAgICAgY29tcGFyZWFibGVUaW1lLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRNb21lbnQsXG4gICAgICAgICAgICAgICAgc2FmZUlucHV0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKiBCcmVhayBkb3duIGN1cnJlbnQgb2JzZXJ2YXRpb24uICovXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2FmZUlucHV0LmR1cmF0aW9uOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkSW5wdXQgPSBicmVha0Rvd25JbnB1dChzYWZlSW5wdXQsIGkpO1xuXG4gICAgICAgICAgYWNjLnB1c2gobm9ybWFsaXplZElucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmltSW5wdXRzQnlHbG9iYWxUaW1lbGluZShhY2MsIHRpbWVQYXJhbXMpO1xuICAgICAgfSxcbiAgICAgIFtdIGFzIFBsdWdpblBhcmFtc1tdXG4gICAgKTtcblxuICAgIGNvbnN0IHNvcnRlZElucHV0cyA9IGZsYXR0ZW5JbnB1dHMuc29ydCgoYSwgYikgPT5cbiAgICAgIHBhcnNlRGF0ZShhLnRpbWVzdGFtcCkuZGlmZihwYXJzZURhdGUoYi50aW1lc3RhbXApKS5hcygnc2Vjb25kcycpXG4gICAgKTtcblxuICAgIHJldHVybiByZXNhbXBsZUlucHV0cyhzb3J0ZWRJbnB1dHMsIHRpbWVQYXJhbXMpIGFzIFBsdWdpblBhcmFtc1tdO1xuICB9O1xuXG4gIGNvbnN0IHBhcnNlRGF0ZSA9IChkYXRlOiBEYXRlIHwgc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgnSW52YWxpZCBkYXRlJyk7XG4gICAgfVxuXG4gICAgLy8gZGF0ZXMgYXJlIHBhc3NlZCB0byB0aW1lLXN5bmMudHMgYm90aCBpbiBJU08gODYwMSBmb3JtYXRcbiAgICAvLyBhbmQgYXMgYSBEYXRlIG9iamVjdCAoZnJvbSB0aGUgZGVzZXJpYWxpemF0aW9uIG9mIGEgWUFNTCBmaWxlKVxuICAgIC8vIGlmIHRoZSBZQU1MIHBhcnNlciBmYWlscyB0byBpZGVudGlmeSBhcyBhIGRhdGUsIGl0IHBhc3NlcyBhcyBhIHN0cmluZ1xuICAgIGlmIChpc0RhdGUoZGF0ZSkpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tSlNEYXRlKGRhdGUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tSVNPKGRhdGUpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBJbnZhbGlkRGF0ZUluSW5wdXRFcnJvcihJTlZBTElEX0RBVEVfVFlQRShkYXRlKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpbnB1dCBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVJbnB1dCA9IChpbnB1dDogUGx1Z2luUGFyYW1zLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xuICAgICAgdGltZXN0YW1wOiB6XG4gICAgICAgIC5zdHJpbmcoe1xuICAgICAgICAgIHJlcXVpcmVkX2Vycm9yOiBUSU1FU1RBTVBfUkVRVUlSRUQoaW5kZXgpLFxuICAgICAgICB9KVxuICAgICAgICAuZGF0ZXRpbWUoe1xuICAgICAgICAgIG1lc3NhZ2U6IElOVkFMSURfREFURVRJTUUoaW5kZXgpLFxuICAgICAgICB9KVxuICAgICAgICAub3Ioei5kYXRlKCkpLFxuICAgICAgZHVyYXRpb246IHoubnVtYmVyKCksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGU8ei5pbmZlcjx0eXBlb2Ygc2NoZW1hPj4oc2NoZW1hLCBpbnB1dCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBnbG9iYWwgY29uZmlnIHBhcmFtZXRlcnMuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUdsb2JhbENvbmZpZyA9ICgpID0+IHtcbiAgICBpZiAoZ2xvYmFsQ29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBHbG9iYWxDb25maWdFcnJvcihJTlZBTElEX1RJTUVfTk9STUFMSVpBVElPTik7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgICdzdGFydC10aW1lJzogei5zdHJpbmcoKS5kYXRldGltZSgpLFxuICAgICAgICAnZW5kLXRpbWUnOiB6LnN0cmluZygpLmRhdGV0aW1lKCksXG4gICAgICAgIGludGVydmFsOiB6Lm51bWJlcigpLFxuICAgICAgICAnYWxsb3ctcGFkZGluZyc6IHouYm9vbGVhbigpLFxuICAgICAgfSlcbiAgICAgIC5yZWZpbmUoZGF0YSA9PiBkYXRhWydzdGFydC10aW1lJ10gPCBkYXRhWydlbmQtdGltZSddLCB7XG4gICAgICAgIG1lc3NhZ2U6IFNUQVJUX0xPV0VSX0VORCxcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRlPHouaW5mZXI8dHlwZW9mIHNjaGVtYT4+KHNjaGVtYSwgZ2xvYmFsQ29uZmlnKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBtaW5pbWFsIGZhY3Rvci5cbiAgICovXG4gIGNvbnN0IGNvbnZlcnRQZXJJbnRlcnZhbCA9ICh2YWx1ZTogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyKSA9PlxuICAgIHZhbHVlIC8gZHVyYXRpb247XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSB0aW1lIHBlciBnaXZlbiBzZWNvbmQuXG4gICAqL1xuICBjb25zdCBub3JtYWxpemVUaW1lUGVyU2Vjb25kID0gKFxuICAgIGN1cnJlbnRSb3VuZE1vbWVudDogRGF0ZSB8IHN0cmluZyxcbiAgICBpOiBudW1iZXJcbiAgKSA9PiB7XG4gICAgY29uc3QgdGhpc01vbWVudCA9IHBhcnNlRGF0ZShjdXJyZW50Um91bmRNb21lbnQpLnN0YXJ0T2YoJ3NlY29uZCcpO1xuXG4gICAgcmV0dXJuIHRoaXNNb21lbnQucGx1cyh7c2Vjb25kczogaX0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCcmVha3MgZG93biBpbnB1dCBwZXIgbWluaW1hbCB0aW1lIHVuaXQuXG4gICAqL1xuICBjb25zdCBicmVha0Rvd25JbnB1dCA9IChpbnB1dDogUGx1Z2luUGFyYW1zLCBpOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBpbnB1dEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dCk7XG5cbiAgICByZXR1cm4gaW5wdXRLZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHBhcmFtZXRlcml6ZS5nZXRBZ2dyZWdhdGlvbk1ldGhvZChrZXkpO1xuXG4gICAgICBpZiAoa2V5ID09PSAndGltZXN0YW1wJykge1xuICAgICAgICBjb25zdCBwZXJTZWNvbmQgPSBub3JtYWxpemVUaW1lUGVyU2Vjb25kKGlucHV0LnRpbWVzdGFtcCwgaSk7XG4gICAgICAgIGFjY1trZXldID0gcGVyU2Vjb25kLnRvVVRDKCkudG9JU08oKSA/PyAnJztcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICAvKiogQHRvZG8gdXNlIHVzZXIgZGVmaW5lZCByZXNvbHV0aW9uIGxhdGVyICovXG4gICAgICBpZiAoa2V5ID09PSAnZHVyYXRpb24nKSB7XG4gICAgICAgIGFjY1trZXldID0gMTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBhY2Nba2V5XSA9XG4gICAgICAgIG1ldGhvZCA9PT0gJ3N1bSdcbiAgICAgICAgICA/IGNvbnZlcnRQZXJJbnRlcnZhbChpbnB1dFtrZXldLCBpbnB1dFsnZHVyYXRpb24nXSlcbiAgICAgICAgICA6IGlucHV0W2tleV07XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUGx1Z2luUGFyYW1zKTtcbiAgfTtcblxuICAvKipcbiAgICogUG9wdWxhdGVzIG9iamVjdCB0byBmaWxsIHRoZSBnYXBzIGluIG9ic2VydmF0aW9uYWwgdGltZWxpbmUgdXNpbmcgemVyb2lzaCB2YWx1ZXMuXG4gICAqL1xuICBjb25zdCBmaWxsV2l0aFplcm9pc2hJbnB1dCA9IChcbiAgICBpbnB1dDogUGx1Z2luUGFyYW1zLFxuICAgIG1pc3NpbmdUaW1lc3RhbXA6IERhdGVUaW1lTWF5YmVWYWxpZFxuICApID0+IHtcbiAgICBjb25zdCBtZXRyaWNzID0gT2JqZWN0LmtleXMoaW5wdXQpO1xuXG4gICAgcmV0dXJuIG1ldHJpY3MucmVkdWNlKChhY2MsIG1ldHJpYykgPT4ge1xuICAgICAgaWYgKG1ldHJpYyA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgYWNjW21ldHJpY10gPSBtaXNzaW5nVGltZXN0YW1wLnN0YXJ0T2YoJ3NlY29uZCcpLnRvVVRDKCkudG9JU08oKSA/PyAnJztcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICAvKiogQHRvZG8gbGF0ZXIgd2lsbCBiZSBjaGFuZ2VkIHRvIHVzZXIgZGVmaW5lZCBpbnRlcnZhbCAqL1xuICAgICAgaWYgKG1ldHJpYyA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgICBhY2NbbWV0cmljXSA9IDE7XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldHJpYyA9PT0gJ3RpbWUtcmVzZXJ2ZWQnKSB7XG4gICAgICAgIGFjY1ttZXRyaWNdID0gYWNjWydkdXJhdGlvbiddO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGhvZCA9IHBhcmFtZXRlcml6ZS5nZXRBZ2dyZWdhdGlvbk1ldGhvZChtZXRyaWMpO1xuXG4gICAgICBpZiAobWV0aG9kID09PSAnYXZnJyB8fCBtZXRob2QgPT09ICdzdW0nKSB7XG4gICAgICAgIGFjY1ttZXRyaWNdID0gMDtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuXG4gICAgICBhY2NbbWV0cmljXSA9IGlucHV0W21ldHJpY107XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUGx1Z2luUGFyYW1zKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBlcnJvciBvbiBwYWRkaW5nYCBpcyBlbmFibGVkIGFuZCBwYWRkaW5nIGlzIG5lZWRlZC4gSWYgc28sIHRoZW4gdGhyb3dzIGVycm9yLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVQYWRkaW5nID0gKHBhZDogUGFkZGluZ1JlY2VpcHQsIHBhcmFtczogVGltZVBhcmFtcyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHBhZDtcbiAgICBjb25zdCBpc1BhZGRpbmdOZWVkZWQgPSBzdGFydCB8fCBlbmQ7XG5cbiAgICBpZiAoIXBhcmFtcy5hbGxvd1BhZGRpbmcgJiYgaXNQYWRkaW5nTmVlZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFBhZGRpbmdFcnJvcihBVk9JRElOR19QQURESU5HX0JZX0VER0VTKHN0YXJ0LCBlbmQpKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYWRkaW5nIGlzIG5lZWRlZCBlaXRoZXIgYXQgc3RhcnQgb2YgdGhlIHRpbWVsaW5lIG9yIHRoZSBlbmQgYW5kIHJldHVybnMgc3RhdHVzLlxuICAgKi9cbiAgY29uc3QgY2hlY2tGb3JQYWRkaW5nID0gKFxuICAgIGlucHV0czogUGx1Z2luUGFyYW1zW10sXG4gICAgcGFyYW1zOiBUaW1lUGFyYW1zXG4gICk6IFBhZGRpbmdSZWNlaXB0ID0+IHtcbiAgICBjb25zdCBzdGFydERpZmZJblNlY29uZHMgPSBwYXJzZURhdGUoaW5wdXRzWzBdLnRpbWVzdGFtcClcbiAgICAgIC5kaWZmKHBhcmFtcy5zdGFydFRpbWUpXG4gICAgICAuYXMoJ3NlY29uZHMnKTtcblxuICAgIGNvbnN0IGxhc3RJbnB1dCA9IGlucHV0c1tpbnB1dHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBlbmREaWZmSW5TZWNvbmRzID0gcGFyc2VEYXRlKGxhc3RJbnB1dC50aW1lc3RhbXApXG4gICAgICAucGx1cyh7c2Vjb25kOiBsYXN0SW5wdXQuZHVyYXRpb259KVxuICAgICAgLmRpZmYocGFyYW1zLmVuZFRpbWUpXG4gICAgICAuYXMoJ3NlY29uZHMnKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnREaWZmSW5TZWNvbmRzID4gMCxcbiAgICAgIGVuZDogZW5kRGlmZkluU2Vjb25kcyA8IDAsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBnaXZlbiBpbnB1dHMgZnJhbWUsIG1lYW53aGlsZSBjaGVja2luZyBpZiBhZ2dyZWdhdGlvbiBtZXRob2QgaXMgYHN1bWAsIHRoZW4gY2FsY3VsYXRlcyBpdC5cbiAgICogRm9yIG1ldGhvZHMgaXMgYGF2Z2AgYW5kIGBub25lYCBjYWxjdWxhdGluZyBhdmVyYWdlIG9mIHRoZSBmcmFtZS5cbiAgICovXG4gIGNvbnN0IHJlc2FtcGxlSW5wdXRGcmFtZSA9IChpbnB1dHNJblRpbWVzbG90OiBQbHVnaW5QYXJhbXNbXSkgPT5cbiAgICBpbnB1dHNJblRpbWVzbG90LnJlZHVjZSgoYWNjLCBpbnB1dCwgaW5kZXgsIGlucHV0cykgPT4ge1xuICAgICAgY29uc3QgbWV0cmljcyA9IE9iamVjdC5rZXlzKGlucHV0KTtcblxuICAgICAgbWV0cmljcy5mb3JFYWNoKG1ldHJpYyA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHBhcmFtZXRlcml6ZS5nZXRBZ2dyZWdhdGlvbk1ldGhvZChtZXRyaWMpO1xuICAgICAgICBhY2NbbWV0cmljXSA9IGFjY1ttZXRyaWNdID8/IDA7XG5cbiAgICAgICAgaWYgKG1ldHJpYyA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgICBhY2NbbWV0cmljXSA9IGlucHV0c1swXVttZXRyaWNdO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3N1bScpIHtcbiAgICAgICAgICBhY2NbbWV0cmljXSArPSBpbnB1dFttZXRyaWNdO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgYWNjW21ldHJpY10gPSBpbnB1dFttZXRyaWNdO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHRpbWVzbG90IGNvbnRhaW5zIHJlY29yZHMgbW9yZSB0aGFuIG9uZSwgdGhlbiBkaXZpZGUgZWFjaCBtZXRyaWMgYnkgdGhlIHRpbWVzbG90IGxlbmd0aCxcbiAgICAgICAgICogIHNvIHRoYXQgdGhlaXIgc3VtIHlpZWxkcyB0aGUgdGltZXNsb3QgYXZlcmFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbnB1dHNJblRpbWVzbG90Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICBpbmRleCA9PT0gaW5wdXRzSW5UaW1lc2xvdC5sZW5ndGggLSAxXG4gICAgICAgICkge1xuICAgICAgICAgIGFjY1ttZXRyaWNdIC89IGlucHV0c0luVGltZXNsb3QubGVuZ3RoO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWNjW21ldHJpY10gKz0gaW5wdXRbbWV0cmljXTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFBsdWdpblBhcmFtcyk7XG5cbiAgLyoqXG4gICAqIFRha2VzIGVhY2ggYXJyYXkgZnJhbWUgd2l0aCBpbnRlcnZhbCBsZW5ndGgsIHRoZW4gYWdncmVnYXRpbmcgdGhlbSB0b2dldGhlciBhcyBmcm9tIHVuaXRzLnlhbWwgZmlsZS5cbiAgICovXG4gIGNvbnN0IHJlc2FtcGxlSW5wdXRzID0gKGlucHV0czogUGx1Z2luUGFyYW1zW10sIHBhcmFtczogVGltZVBhcmFtcykgPT5cbiAgICBpbnB1dHMucmVkdWNlKChhY2M6IFBsdWdpblBhcmFtc1tdLCBfaW5wdXQsIGluZGV4LCBpbnB1dHMpID0+IHtcbiAgICAgIGNvbnN0IGZyYW1lU3RhcnQgPSBpbmRleCAqIHBhcmFtcy5pbnRlcnZhbDtcbiAgICAgIGNvbnN0IGZyYW1lRW5kID0gKGluZGV4ICsgMSkgKiBwYXJhbXMuaW50ZXJ2YWw7XG4gICAgICBjb25zdCBpbnB1dHNGcmFtZSA9IGlucHV0cy5zbGljZShmcmFtZVN0YXJ0LCBmcmFtZUVuZCk7XG5cbiAgICAgIGNvbnN0IHJlc2FtcGxlZElucHV0ID0gcmVzYW1wbGVJbnB1dEZyYW1lKGlucHV0c0ZyYW1lKTtcblxuICAgICAgLyoqIENoZWNrcyBpZiByZXNhbXBsZWQgaW5wdXQgaXMgbm90IGVtcHR5LCB0aGVuIGluY2x1ZGVzIGluIHJlc3VsdC4gKi9cbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZXNhbXBsZWRJbnB1dCkubGVuZ3RoID4gMCkge1xuICAgICAgICBhY2MucHVzaChyZXNhbXBsZWRJbnB1dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgUGx1Z2luUGFyYW1zW10pO1xuXG4gIC8qKlxuICAgKiBQYWRzIHplcm9pc2ggaW5wdXRzIGZyb20gdGhlIGJlZ2lubmluZyBvciBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dHMgaWYgbmVlZGVkLlxuICAgKi9cbiAgY29uc3QgcGFkSW5wdXRzID0gKFxuICAgIGlucHV0czogUGx1Z2luUGFyYW1zW10sXG4gICAgcGFkOiBQYWRkaW5nUmVjZWlwdCxcbiAgICBwYXJhbXM6IFRpbWVQYXJhbXNcbiAgKTogUGx1Z2luUGFyYW1zW10gPT4ge1xuICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IHBhZDtcbiAgICBjb25zdCBwYWRkZWRGcm9tQmVnaW5uaW5nID0gW107XG5cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgIHBhZGRlZEZyb21CZWdpbm5pbmcucHVzaChcbiAgICAgICAgLi4uZ2V0WmVyb2lzaElucHV0UGVyU2Vjb25kQmV0d2VlblJhbmdlKFxuICAgICAgICAgIHBhcmFtcy5zdGFydFRpbWUsXG4gICAgICAgICAgcGFyc2VEYXRlKGlucHV0c1swXS50aW1lc3RhbXApLFxuICAgICAgICAgIGlucHV0c1swXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZGRlZEFycmF5ID0gcGFkZGVkRnJvbUJlZ2lubmluZy5jb25jYXQoaW5wdXRzKTtcblxuICAgIGlmIChlbmQpIHtcbiAgICAgIGNvbnN0IGxhc3RJbnB1dCA9IGlucHV0c1tpbnB1dHMubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBsYXN0SW5wdXRFbmQgPSBwYXJzZURhdGUobGFzdElucHV0LnRpbWVzdGFtcCkucGx1cyh7XG4gICAgICAgIHNlY29uZHM6IGxhc3RJbnB1dC5kdXJhdGlvbixcbiAgICAgIH0pO1xuICAgICAgcGFkZGVkQXJyYXkucHVzaChcbiAgICAgICAgLi4uZ2V0WmVyb2lzaElucHV0UGVyU2Vjb25kQmV0d2VlblJhbmdlKFxuICAgICAgICAgIGxhc3RJbnB1dEVuZCxcbiAgICAgICAgICBwYXJhbXMuZW5kVGltZS5wbHVzKHtzZWNvbmRzOiAxfSksXG4gICAgICAgICAgbGFzdElucHV0XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZGRlZEFycmF5O1xuICB9O1xuXG4gIGNvbnN0IGdldFplcm9pc2hJbnB1dFBlclNlY29uZEJldHdlZW5SYW5nZSA9IChcbiAgICBzdGFydERhdGU6IERhdGVUaW1lTWF5YmVWYWxpZCxcbiAgICBlbmREYXRlOiBEYXRlVGltZU1heWJlVmFsaWQsXG4gICAgdGVtcGxhdGVJbnB1dDogUGx1Z2luUGFyYW1zXG4gICkgPT4ge1xuICAgIGNvbnN0IGFycmF5OiBQbHVnaW5QYXJhbXNbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGVSYW5nZSA9IEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnREYXRlLCBlbmREYXRlKTtcblxuICAgIGZvciAoY29uc3QgaW50ZXJ2YWwgb2YgZGF0ZVJhbmdlLnNwbGl0Qnkoe3NlY29uZDogMX0pKSB7XG4gICAgICBhcnJheS5wdXNoKFxuICAgICAgICBmaWxsV2l0aFplcm9pc2hJbnB1dChcbiAgICAgICAgICB0ZW1wbGF0ZUlucHV0LFxuICAgICAgICAgIC8vIGFzIGZhciBhcyBJIGNhbiB0ZWxsLCBzdGFydCB3aWxsIG5ldmVyIGJlIG51bGxcbiAgICAgICAgICAvLyBiZWNhdXNlIGlmIHdlIHBhc3MgYW4gaW52YWxpZCBzdGFydC9lbmREYXRlIHRvXG4gICAgICAgICAgLy8gSW50ZXJ2YWwsIHdlIGdldCBhIHplcm8gbGVuZ3RoIGFycmF5IGFzIHRoZSByYW5nZVxuICAgICAgICAgIGludGVydmFsLnN0YXJ0IHx8IERhdGVUaW1lLmludmFsaWQoJ25vdCBleHBlY3RlZCAtIHN0YXJ0IGlzIG51bGwnKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfTtcblxuICAvKlxuICAgKiBDaGVja3MgaWYgaW5wdXQncyB0aW1lc3RhbXAgaXMgaW5jbHVkZWQgaW4gZ2xvYmFsIHNwZWNpZmllZCBwZXJpb2QgdGhlbiBsZWF2ZXMgaXQsIG90aGVyd2lzZS5cbiAgICovXG4gIGNvbnN0IHRyaW1JbnB1dHNCeUdsb2JhbFRpbWVsaW5lID0gKFxuICAgIGlucHV0czogUGx1Z2luUGFyYW1zW10sXG4gICAgcGFyYW1zOiBUaW1lUGFyYW1zXG4gICk6IFBsdWdpblBhcmFtc1tdID0+XG4gICAgaW5wdXRzLnJlZHVjZSgoYWNjOiBQbHVnaW5QYXJhbXNbXSwgaXRlbSkgPT4ge1xuICAgICAgY29uc3Qge3RpbWVzdGFtcH0gPSBpdGVtO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcnNlRGF0ZSh0aW1lc3RhbXApID49IHBhcmFtcy5zdGFydFRpbWUgJiZcbiAgICAgICAgcGFyc2VEYXRlKHRpbWVzdGFtcCkgPD0gcGFyYW1zLmVuZFRpbWVcbiAgICAgICkge1xuICAgICAgICBhY2MucHVzaChpdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBQbHVnaW5QYXJhbXNbXSk7XG5cbiAgcmV0dXJuIHttZXRhZGF0YSwgZXhlY3V0ZX07XG59O1xuIl19
|
package/build/check.d.ts
ADDED
package/build/check.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
20
|
+
if (mod && mod.__esModule) return mod;
|
|
21
|
+
var result = {};
|
|
22
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
23
|
+
__setModuleDefault(result, mod);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
/* eslint-disable no-process-exit */
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const logger_1 = require("./util/logger");
|
|
30
|
+
const helpers_1 = require("./util/helpers");
|
|
31
|
+
const args_1 = require("./util/args");
|
|
32
|
+
const fs_1 = require("./util/fs");
|
|
33
|
+
const config_1 = require("./config");
|
|
34
|
+
const npm_1 = require("./util/npm");
|
|
35
|
+
const { CHECKING, DIRECTORY_YAML_FILES_NOT_FOUND, IF_CHECK_VERIFICATION_FAILURES, IF_CHECK_SUMMARY_LOG, IF_CHECK_EXECUTING, } = config_1.STRINGS;
|
|
36
|
+
const IfCheck = async () => {
|
|
37
|
+
const commandArgs = await (0, args_1.parseIfCheckArgs)();
|
|
38
|
+
console.log(`${CHECKING}\n`);
|
|
39
|
+
if (commandArgs.manifest) {
|
|
40
|
+
const manifest = commandArgs.manifest;
|
|
41
|
+
try {
|
|
42
|
+
await (0, npm_1.executeCommands)(manifest, false);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const fileName = path.basename(manifest);
|
|
46
|
+
const executedFile = manifest
|
|
47
|
+
.replace(fileName, `re-${fileName}`)
|
|
48
|
+
.replace('yml', 'yaml');
|
|
49
|
+
const manifestDirPath = path.dirname(manifest);
|
|
50
|
+
(0, helpers_1.logStdoutFailMessage)(error, fileName);
|
|
51
|
+
await (0, fs_1.removeFileIfExists)(`${manifestDirPath}/package.json`);
|
|
52
|
+
await (0, fs_1.removeFileIfExists)(executedFile);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const failedLogs = { count: 0, message: '' };
|
|
57
|
+
const directory = commandArgs.directory;
|
|
58
|
+
const files = await (0, fs_1.getYamlFiles)(directory);
|
|
59
|
+
if (files.length === 0) {
|
|
60
|
+
console.log(DIRECTORY_YAML_FILES_NOT_FOUND);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
for await (const file of files) {
|
|
64
|
+
const fileName = path.basename(file);
|
|
65
|
+
console.log(IF_CHECK_EXECUTING(fileName));
|
|
66
|
+
try {
|
|
67
|
+
await (0, npm_1.executeCommands)(file, true);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const fileName = path.basename(file);
|
|
71
|
+
const executedFile = file
|
|
72
|
+
.replace(fileName, `re-${fileName}`)
|
|
73
|
+
.replace('yml', 'yaml');
|
|
74
|
+
const failedFilesLog = (0, helpers_1.logStdoutFailMessage)(error, fileName);
|
|
75
|
+
failedLogs.message = failedLogs.message.concat(failedFilesLog);
|
|
76
|
+
failedLogs.count++;
|
|
77
|
+
await (0, fs_1.removeFileIfExists)(executedFile);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (failedLogs.count > 0) {
|
|
81
|
+
const passedFilesCount = files.length - failedLogs.count;
|
|
82
|
+
console.log(IF_CHECK_VERIFICATION_FAILURES);
|
|
83
|
+
console.log(failedLogs.message);
|
|
84
|
+
console.log(IF_CHECK_SUMMARY_LOG(passedFilesCount, files.length));
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
IfCheck().catch(error => {
|
|
90
|
+
if (error instanceof Error) {
|
|
91
|
+
logger_1.logger.error(error);
|
|
92
|
+
process.exit(2);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvQ0FBb0M7QUFDcEMsMkNBQTZCO0FBRTdCLDBDQUFxQztBQUNyQyw0Q0FBb0Q7QUFDcEQsc0NBQTZDO0FBQzdDLGtDQUEyRDtBQUUzRCxxQ0FBaUM7QUFDakMsb0NBQTJDO0FBRTNDLE1BQU0sRUFDSixRQUFRLEVBQ1IsOEJBQThCLEVBQzlCLDhCQUE4QixFQUM5QixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLEdBQUcsZ0JBQU8sQ0FBQztBQUVaLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSx1QkFBZ0IsR0FBRSxDQUFDO0lBRTdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBRTdCLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBRXRDLElBQUk7WUFDRixNQUFNLElBQUEscUJBQWUsRUFBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sWUFBWSxHQUFHLFFBQVE7aUJBQzFCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQztpQkFDbkMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRS9DLElBQUEsOEJBQW9CLEVBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXRDLE1BQU0sSUFBQSx1QkFBa0IsRUFBQyxHQUFHLGVBQWUsZUFBZSxDQUFDLENBQUM7WUFDNUQsTUFBTSxJQUFBLHVCQUFrQixFQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3hDO0tBQ0Y7U0FBTTtRQUNMLE1BQU0sVUFBVSxHQUFHLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsaUJBQVksRUFBQyxTQUFVLENBQUMsQ0FBQztRQUU3QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRTFDLElBQUk7Z0JBQ0YsTUFBTSxJQUFBLHFCQUFlLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25DO1lBQUMsT0FBTyxLQUFVLEVBQUU7Z0JBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUk7cUJBQ3RCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxRQUFRLEVBQUUsQ0FBQztxQkFDbkMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFMUIsTUFBTSxjQUFjLEdBQUcsSUFBQSw4QkFBb0IsRUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzdELFVBQVUsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQy9ELFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFFbkIsTUFBTSxJQUFBLHVCQUFrQixFQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hDO1NBQ0Y7UUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBRXpELE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakI7S0FDRjtBQUNILENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN0QixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7UUFDMUIsZUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm9jZXNzLWV4aXQgKi9cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7bG9nZ2VyfSBmcm9tICcuL3V0aWwvbG9nZ2VyJztcbmltcG9ydCB7bG9nU3Rkb3V0RmFpbE1lc3NhZ2V9IGZyb20gJy4vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7cGFyc2VJZkNoZWNrQXJnc30gZnJvbSAnLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHtnZXRZYW1sRmlsZXMsIHJlbW92ZUZpbGVJZkV4aXN0c30gZnJvbSAnLi91dGlsL2ZzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge2V4ZWN1dGVDb21tYW5kc30gZnJvbSAnLi91dGlsL25wbSc7XG5cbmNvbnN0IHtcbiAgQ0hFQ0tJTkcsXG4gIERJUkVDVE9SWV9ZQU1MX0ZJTEVTX05PVF9GT1VORCxcbiAgSUZfQ0hFQ0tfVkVSSUZJQ0FUSU9OX0ZBSUxVUkVTLFxuICBJRl9DSEVDS19TVU1NQVJZX0xPRyxcbiAgSUZfQ0hFQ0tfRVhFQ1VUSU5HLFxufSA9IFNUUklOR1M7XG5cbmNvbnN0IElmQ2hlY2sgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvbW1hbmRBcmdzID0gYXdhaXQgcGFyc2VJZkNoZWNrQXJncygpO1xuXG4gIGNvbnNvbGUubG9nKGAke0NIRUNLSU5HfVxcbmApO1xuXG4gIGlmIChjb21tYW5kQXJncy5tYW5pZmVzdCkge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gY29tbWFuZEFyZ3MubWFuaWZlc3Q7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY3V0ZUNvbW1hbmRzKG1hbmlmZXN0LCBmYWxzZSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKG1hbmlmZXN0KTtcbiAgICAgIGNvbnN0IGV4ZWN1dGVkRmlsZSA9IG1hbmlmZXN0XG4gICAgICAgIC5yZXBsYWNlKGZpbGVOYW1lLCBgcmUtJHtmaWxlTmFtZX1gKVxuICAgICAgICAucmVwbGFjZSgneW1sJywgJ3lhbWwnKTtcbiAgICAgIGNvbnN0IG1hbmlmZXN0RGlyUGF0aCA9IHBhdGguZGlybmFtZShtYW5pZmVzdCk7XG5cbiAgICAgIGxvZ1N0ZG91dEZhaWxNZXNzYWdlKGVycm9yLCBmaWxlTmFtZSk7XG5cbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVJZkV4aXN0cyhgJHttYW5pZmVzdERpclBhdGh9L3BhY2thZ2UuanNvbmApO1xuICAgICAgYXdhaXQgcmVtb3ZlRmlsZUlmRXhpc3RzKGV4ZWN1dGVkRmlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZhaWxlZExvZ3MgPSB7Y291bnQ6IDAsIG1lc3NhZ2U6ICcnfTtcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBjb21tYW5kQXJncy5kaXJlY3Rvcnk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnZXRZYW1sRmlsZXMoZGlyZWN0b3J5ISk7XG5cbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhESVJFQ1RPUllfWUFNTF9GSUxFU19OT1RfRk9VTkQpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGUpO1xuICAgICAgY29uc29sZS5sb2coSUZfQ0hFQ0tfRVhFQ1VUSU5HKGZpbGVOYW1lKSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGV4ZWN1dGVDb21tYW5kcyhmaWxlLCB0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGUpO1xuICAgICAgICBjb25zdCBleGVjdXRlZEZpbGUgPSBmaWxlXG4gICAgICAgICAgLnJlcGxhY2UoZmlsZU5hbWUsIGByZS0ke2ZpbGVOYW1lfWApXG4gICAgICAgICAgLnJlcGxhY2UoJ3ltbCcsICd5YW1sJyk7XG5cbiAgICAgICAgY29uc3QgZmFpbGVkRmlsZXNMb2cgPSBsb2dTdGRvdXRGYWlsTWVzc2FnZShlcnJvciwgZmlsZU5hbWUpO1xuICAgICAgICBmYWlsZWRMb2dzLm1lc3NhZ2UgPSBmYWlsZWRMb2dzLm1lc3NhZ2UuY29uY2F0KGZhaWxlZEZpbGVzTG9nKTtcbiAgICAgICAgZmFpbGVkTG9ncy5jb3VudCsrO1xuXG4gICAgICAgIGF3YWl0IHJlbW92ZUZpbGVJZkV4aXN0cyhleGVjdXRlZEZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRMb2dzLmNvdW50ID4gMCkge1xuICAgICAgY29uc3QgcGFzc2VkRmlsZXNDb3VudCA9IGZpbGVzLmxlbmd0aCAtIGZhaWxlZExvZ3MuY291bnQ7XG5cbiAgICAgIGNvbnNvbGUubG9nKElGX0NIRUNLX1ZFUklGSUNBVElPTl9GQUlMVVJFUyk7XG4gICAgICBjb25zb2xlLmxvZyhmYWlsZWRMb2dzLm1lc3NhZ2UpO1xuICAgICAgY29uc29sZS5sb2coSUZfQ0hFQ0tfU1VNTUFSWV9MT0cocGFzc2VkRmlsZXNDb3VudCwgZmlsZXMubGVuZ3RoKSk7XG4gICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG59O1xuXG5JZkNoZWNrKCkuY2F0Y2goZXJyb3IgPT4ge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDIpO1xuICB9XG59KTtcbiJdfQ==
|
package/build/config/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ArgumentConfig, ParseOptions } from 'ts-command-line-args';
|
|
2
|
-
import { IFDiffArgs, IEArgs } from '../types/process-args';
|
|
2
|
+
import { IFDiffArgs, IEArgs, IFEnvArgs, IFCheckArgs } from '../types/process-args';
|
|
3
3
|
export declare const CONFIG: {
|
|
4
4
|
IE: {
|
|
5
5
|
ARGS: ArgumentConfig<IEArgs>;
|
|
@@ -11,6 +11,18 @@ export declare const CONFIG: {
|
|
|
11
11
|
SUCCESS_MESSAGE: string;
|
|
12
12
|
FAILURE_MESSAGE: string;
|
|
13
13
|
};
|
|
14
|
+
IF_ENV: {
|
|
15
|
+
ARGS: ArgumentConfig<IFEnvArgs>;
|
|
16
|
+
HELP: ParseOptions<any>;
|
|
17
|
+
SUCCESS_MESSAGE: string;
|
|
18
|
+
FAILURE_MESSAGE: string;
|
|
19
|
+
FAILURE_MESSAGE_TEMPLATE: string;
|
|
20
|
+
FAILURE_MESSAGE_DEPENDENCIES: string;
|
|
21
|
+
};
|
|
22
|
+
IF_CHECK: {
|
|
23
|
+
ARGS: ArgumentConfig<IFCheckArgs>;
|
|
24
|
+
HELP: ParseOptions<any>;
|
|
25
|
+
};
|
|
14
26
|
GITHUB_PATH: string;
|
|
15
27
|
NATIVE_PLUGIN: string;
|
|
16
28
|
AGGREGATION_ADDITIONAL_PARAMS: string[];
|
package/build/config/config.js
CHANGED
|
@@ -80,8 +80,68 @@ exports.CONFIG = {
|
|
|
80
80
|
SUCCESS_MESSAGE: 'Files match!',
|
|
81
81
|
FAILURE_MESSAGE: 'Files do not match!',
|
|
82
82
|
},
|
|
83
|
+
IF_ENV: {
|
|
84
|
+
ARGS: {
|
|
85
|
+
manifest: {
|
|
86
|
+
type: String,
|
|
87
|
+
optional: true,
|
|
88
|
+
alias: 'm',
|
|
89
|
+
description: '[path to the manifest file]',
|
|
90
|
+
},
|
|
91
|
+
install: {
|
|
92
|
+
type: Boolean,
|
|
93
|
+
optional: true,
|
|
94
|
+
alias: 'i',
|
|
95
|
+
description: '[command to install package.json]',
|
|
96
|
+
},
|
|
97
|
+
cwd: {
|
|
98
|
+
type: Boolean,
|
|
99
|
+
optional: true,
|
|
100
|
+
alias: 'c',
|
|
101
|
+
description: '[command to generate the package.json in the command working directory]',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
HELP: {
|
|
105
|
+
helpArg: 'help',
|
|
106
|
+
headerContentSections: [
|
|
107
|
+
{ header: 'Impact Framework', content: 'IF-Env Helpful keywords:' },
|
|
108
|
+
],
|
|
109
|
+
footerContentSections: [
|
|
110
|
+
{ header: 'Green Software Foundation', content: DISCLAIMER_MESSAGE },
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
SUCCESS_MESSAGE: 'The environment is successfully setup!',
|
|
114
|
+
FAILURE_MESSAGE: 'Faied to create the environment!',
|
|
115
|
+
FAILURE_MESSAGE_TEMPLATE: 'Faied to create the environment with the template manifest!',
|
|
116
|
+
FAILURE_MESSAGE_DEPENDENCIES: 'Manifest dependencies are not available!',
|
|
117
|
+
},
|
|
118
|
+
IF_CHECK: {
|
|
119
|
+
ARGS: {
|
|
120
|
+
manifest: {
|
|
121
|
+
type: String,
|
|
122
|
+
optional: true,
|
|
123
|
+
alias: 'm',
|
|
124
|
+
description: '[path to the manifest file]',
|
|
125
|
+
},
|
|
126
|
+
directory: {
|
|
127
|
+
type: String,
|
|
128
|
+
optional: true,
|
|
129
|
+
alias: 'd',
|
|
130
|
+
description: '[path to the manifests directory]',
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
HELP: {
|
|
134
|
+
helpArg: 'help',
|
|
135
|
+
headerContentSections: [
|
|
136
|
+
{ header: 'Impact Framework', content: 'IF-Check Helpful keywords:' },
|
|
137
|
+
],
|
|
138
|
+
footerContentSections: [
|
|
139
|
+
{ header: 'Green Software Foundation', content: DISCLAIMER_MESSAGE },
|
|
140
|
+
],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
83
143
|
GITHUB_PATH: 'https://github.com',
|
|
84
144
|
NATIVE_PLUGIN: 'if-plugins',
|
|
85
145
|
AGGREGATION_ADDITIONAL_PARAMS: ['timestamp', 'duration'],
|
|
86
146
|
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdUNBQWtDO0FBU2xDLE1BQU0sRUFBQyxrQkFBa0IsRUFBQyxHQUFHLGlCQUFPLENBQUM7QUFFeEIsUUFBQSxNQUFNLEdBQUc7SUFDcEIsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFO1lBQ0osUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxJQUFJO2dCQUNkLEtBQUssRUFBRSxHQUFHO2dCQUNWLFdBQVcsRUFBRSwwQkFBMEI7YUFDeEM7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsV0FBVyxFQUFFLDJCQUEyQjthQUN6QztZQUNELGlCQUFpQixFQUFFO2dCQUNqQixJQUFJLEVBQUUsTUFBTTtnQkFDWixRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsR0FBRztnQkFDVixXQUFXLEVBQUUsd0RBQXdEO2FBQ3RFO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxJQUFJO2dCQUNkLEtBQUssRUFBRSxHQUFHO2dCQUNWLFdBQVcsRUFBRSw2QkFBNkI7YUFDM0M7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsV0FBVyxFQUFFLHlDQUF5QzthQUN2RDtZQUNELEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsT0FBTztnQkFDYixRQUFRLEVBQUUsSUFBSTtnQkFDZCxLQUFLLEVBQUUsR0FBRztnQkFDVixXQUFXLEVBQUUsd0NBQXdDO2FBQ3REO1NBQ3dCO1FBQzNCLElBQUksRUFBRTtZQUNKLE9BQU8s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LFdBQVcsRUFBRSxvQkFBb0I7SUFDakMsYUFBYSxFQUFFLFlBQVk7SUFDM0IsNkJBQTZCLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO0NBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FyZ3VtZW50Q29uZmlnLCBQYXJzZU9wdGlvbnN9IGZyb20gJ3RzLWNvbW1hbmQtbGluZS1hcmdzJztcblxuaW1wb3J0IHtTVFJJTkdTfSBmcm9tICcuL3N0cmluZ3MnO1xuXG5pbXBvcnQge1xuICBJRkRpZmZBcmdzLFxuICBJRUFyZ3MsXG4gIElGRW52QXJncyxcbiAgSUZDaGVja0FyZ3MsXG59IGZyb20gJy4uL3R5cGVzL3Byb2Nlc3MtYXJncyc7XG5cbmNvbnN0IHtESVNDTEFJTUVSX01FU1NBR0V9ID0gU1RSSU5HUztcblxuZXhwb3J0IGNvbnN0IENPTkZJRyA9IHtcbiAgSUU6IHtcbiAgICBBUkdTOiB7XG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBhbGlhczogJ20nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1twYXRoIHRvIHRoZSBpbnB1dCBmaWxlXScsXG4gICAgICB9LFxuICAgICAgb3V0cHV0OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGFsaWFzOiAnbycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnW3BhdGggdG8gdGhlIG91dHB1dCBmaWxlXScsXG4gICAgICB9LFxuICAgICAgJ292ZXJyaWRlLXBhcmFtcyc6IHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgYWxpYXM6ICdwJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdbcGF0aCB0byBhIHBhcmFtZXRlciBmaWxlIHRoYXQgb3ZlcnJpZGVzIG91ciBkZWZhdWx0c10nLFxuICAgICAgfSxcbiAgICAgIHN0ZG91dDoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdbcHJpbnRzIG91dCB0byB0aGUgY29uc29sZV0nLFxuICAgICAgfSxcbiAgICAgIGhlbHA6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGFsaWFzOiAnaCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnW3ByaW50cyBvdXQgdGhlIGFib3ZlIGhlbHAgaW5zdHJ1Y3Rpb25dJyxcbiAgICAgIH0sXG4gICAgICBkZWJ1Zzoge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgYWxpYXM6ICdkJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdbcHJpbnRzIG91dCBkZWJ1ZyBsb2dzIHRvIHRoZSBjb25zb2xlXScsXG4gICAgICB9LFxuICAgIH0gYXMgQXJndW1lbnRDb25maWc8SUVBcmdzPixcbiAgICBIRUxQOiB7XG4gICAgICBoZWxwQXJnOiAnaGVscCcsXG4gICAgICBoZWFkZXJDb250ZW50U2VjdGlvbnM6IFtcbiAgICAgICAge2hlYWRlcjogJ0ltcGFjdCBGcmFtZXdvcmsnLCBjb250ZW50OiAnSGVscGZ1bCBrZXl3b3JkczonfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDb250ZW50U2VjdGlvbnM6IFtcbiAgICAgICAge2hlYWRlcjogJ0dyZWVuIFNvZnR3YXJlIEZvdW5kYXRpb24nLCBjb250ZW50OiBESVNDTEFJTUVSX01FU1NBR0V9LFxuICAgICAgXSxcbiAgICB9IGFzIFBhcnNlT3B0aW9uczxhbnk+LFxuICB9LFxuICBJRl9ESUZGOiB7XG4gICAgQVJHUzoge1xuICAgICAgc291cmNlOiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGFsaWFzOiAncycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnW3BhdGggdG8gdGhlIHNvdXJjZSBmaWxlXScsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICBhbGlhczogJ3QnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1twYXRoIHRvIHRoZSB0YXJnZXQgZmlsZScsXG4gICAgICB9LFxuICAgIH0gYXMgQXJndW1lbnRDb25maWc8SUZEaWZmQXJncz4sXG4gICAgSEVMUDoge1xuICAgICAgaGVscEFyZzogJ2hlbHAnLFxuICAgICAgaGVhZGVyQ29udGVudFNlY3Rpb25zOiBbXG4gICAgICAgIHtoZWFkZXI6ICdJbXBhY3QgRnJhbWV3b3JrJywgY29udGVudDogJ0lGLURpZmYgSGVscGZ1bCBrZXl3b3JkczonfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDb250ZW50U2VjdGlvbnM6IFtcbiAgICAgICAge2hlYWRlcjogJ0dyZWVuIFNvZnR3YXJlIEZvdW5kYXRpb24nLCBjb250ZW50OiBESVNDTEFJTUVSX01FU1NBR0V9LFxuICAgICAgXSxcbiAgICB9IGFzIFBhcnNlT3B0aW9uczxhbnk+LFxuICAgIFNVQ0NFU1NfTUVTU0FHRTogJ0ZpbGVzIG1hdGNoIScsXG4gICAgRkFJTFVSRV9NRVNTQUdFOiAnRmlsZXMgZG8gbm90IG1hdGNoIScsXG4gIH0sXG4gIElGX0VOVjoge1xuICAgIEFSR1M6IHtcbiAgICAgIG1hbmlmZXN0OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGFsaWFzOiAnbScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnW3BhdGggdG8gdGhlIG1hbmlmZXN0IGZpbGVdJyxcbiAgICAgIH0sXG4gICAgICBpbnN0YWxsOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBhbGlhczogJ2knLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1tjb21tYW5kIHRvIGluc3RhbGwgcGFja2FnZS5qc29uXScsXG4gICAgICB9LFxuICAgICAgY3dkOiB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBhbGlhczogJ2MnLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnW2NvbW1hbmQgdG8gZ2VuZXJhdGUgdGhlIHBhY2thZ2UuanNvbiBpbiB0aGUgY29tbWFuZCB3b3JraW5nIGRpcmVjdG9yeV0nLFxuICAgICAgfSxcbiAgICB9IGFzIEFyZ3VtZW50Q29uZmlnPElGRW52QXJncz4sXG4gICAgSEVMUDoge1xuICAgICAgaGVscEFyZzogJ2hlbHAnLFxuICAgICAgaGVhZGVyQ29udGVudFNlY3Rpb25zOiBbXG4gICAgICAgIHtoZWFkZXI6ICdJbXBhY3QgRnJhbWV3b3JrJywgY29udGVudDogJ0lGLUVudiBIZWxwZnVsIGtleXdvcmRzOid9LFxuICAgICAgXSxcbiAgICAgIGZvb3RlckNvbnRlbnRTZWN0aW9uczogW1xuICAgICAgICB7aGVhZGVyOiAnR3JlZW4gU29mdHdhcmUgRm91bmRhdGlvbicsIGNvbnRlbnQ6IERJU0NMQUlNRVJfTUVTU0FHRX0sXG4gICAgICBdLFxuICAgIH0gYXMgUGFyc2VPcHRpb25zPGFueT4sXG4gICAgU1VDQ0VTU19NRVNTQUdFOiAnVGhlIGVudmlyb25tZW50IGlzIHN1Y2Nlc3NmdWxseSBzZXR1cCEnLFxuICAgIEZBSUxVUkVfTUVTU0FHRTogJ0ZhaWVkIHRvIGNyZWF0ZSB0aGUgZW52aXJvbm1lbnQhJyxcbiAgICBGQUlMVVJFX01FU1NBR0VfVEVNUExBVEU6XG4gICAgICAnRmFpZWQgdG8gY3JlYXRlIHRoZSBlbnZpcm9ubWVudCB3aXRoIHRoZSB0ZW1wbGF0ZSBtYW5pZmVzdCEnLFxuICAgIEZBSUxVUkVfTUVTU0FHRV9ERVBFTkRFTkNJRVM6ICdNYW5pZmVzdCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBhdmFpbGFibGUhJyxcbiAgfSxcbiAgSUZfQ0hFQ0s6IHtcbiAgICBBUkdTOiB7XG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBhbGlhczogJ20nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1twYXRoIHRvIHRoZSBtYW5pZmVzdCBmaWxlXScsXG4gICAgICB9LFxuICAgICAgZGlyZWN0b3J5OiB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgb3B0aW9uYWw6IHRydWUsXG4gICAgICAgIGFsaWFzOiAnZCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnW3BhdGggdG8gdGhlIG1hbmlmZXN0cyBkaXJlY3RvcnldJyxcbiAgICAgIH0sXG4gICAgfSBhcyBBcmd1bWVudENvbmZpZzxJRkNoZWNrQXJncz4sXG4gICAgSEVMUDoge1xuICAgICAgaGVscEFyZzogJ2hlbHAnLFxuICAgICAgaGVhZGVyQ29udGVudFNlY3Rpb25zOiBbXG4gICAgICAgIHtoZWFkZXI6ICdJbXBhY3QgRnJhbWV3b3JrJywgY29udGVudDogJ0lGLUNoZWNrIEhlbHBmdWwga2V5d29yZHM6J30sXG4gICAgICBdLFxuICAgICAgZm9vdGVyQ29udGVudFNlY3Rpb25zOiBbXG4gICAgICAgIHtoZWFkZXI6ICdHcmVlbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJywgY29udGVudDogRElTQ0xBSU1FUl9NRVNTQUdFfSxcbiAgICAgIF0sXG4gICAgfSBhcyBQYXJzZU9wdGlvbnM8YW55PixcbiAgfSxcbiAgR0lUSFVCX1BBVEg6ICdodHRwczovL2dpdGh1Yi5jb20nLFxuICBOQVRJVkVfUExVR0lOOiAnaWYtcGx1Z2lucycsXG4gIEFHR1JFR0FUSU9OX0FERElUSU9OQUxfUEFSQU1TOiBbJ3RpbWVzdGFtcCcsICdkdXJhdGlvbiddLFxufTtcbiJdfQ==
|