@decaf-ts/integrations 0.3.12 → 0.4.1-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/README.md +11 -3
- package/dist/integrations.cjs +445 -7
- package/dist/integrations.js +479 -8
- package/jest.config.cjs +1 -1
- package/lib/cjs/feature-flags/constants.cjs +16 -0
- package/lib/cjs/feature-flags/decorators.cjs +65 -0
- package/lib/cjs/feature-flags/environment.cjs +26 -0
- package/lib/cjs/feature-flags/index.cjs +31 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +81 -0
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +78 -0
- package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +25 -0
- package/lib/cjs/feature-flags/readers/index.cjs +19 -0
- package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +259 -0
- package/lib/cjs/feature-flags/types.cjs +4 -0
- package/lib/cjs/feature-flags/utils.cjs +141 -0
- package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +9 -9
- package/lib/cjs/graph/shared/nodes/flow-control.cjs +4 -3
- package/lib/cjs/graph/shared/types.cjs +2 -2
- package/lib/cjs/index.cjs +6 -5
- package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +329 -0
- package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +37 -0
- package/lib/cjs/kibana/builders/index.cjs +20 -0
- package/lib/cjs/kibana/helpers.cjs +20 -16
- package/lib/cjs/kibana/index.cjs +3 -2
- package/lib/cjs/kibana/types.cjs +11 -2
- package/lib/cjs/loader/ObjectLoader.cjs +154 -0
- package/lib/cjs/loader/families.cjs +78 -0
- package/lib/cjs/loader/index.cjs +28 -0
- package/lib/cjs/loader/types.cjs +4 -0
- package/lib/cjs/nest/decorators.cjs +17 -0
- package/lib/cjs/nest/index.cjs +3 -3
- package/lib/cjs/nest/keycloakAuthHandler.cjs +74 -35
- package/lib/cjs/nest/keycloakModule.cjs +7 -10
- package/lib/cjs/nest/types.cjs +2 -2
- package/lib/cjs/nest/utils.cjs +58 -50
- package/lib/cjs/plugins/contract.cjs +76 -0
- package/lib/cjs/plugins/index.cjs +35 -0
- package/lib/cjs/plugins/kibana/host.cjs +24 -0
- package/lib/cjs/plugins/kibana/index.cjs +38 -0
- package/lib/cjs/plugins/kibana/installer.cjs +180 -0
- package/lib/cjs/plugins/kibana/manifest.cjs +33 -0
- package/lib/cjs/plugins/kibana/templates.cjs +503 -0
- package/lib/cjs/plugins/kibana/types.cjs +33 -0
- package/lib/cjs/plugins/superset/host.cjs +26 -0
- package/lib/cjs/plugins/superset/index.cjs +40 -0
- package/lib/cjs/plugins/superset/installer.cjs +232 -0
- package/lib/cjs/plugins/superset/manifest.cjs +35 -0
- package/lib/cjs/plugins/superset/templates.cjs +844 -0
- package/lib/cjs/plugins/superset/types.cjs +39 -0
- package/lib/esm/feature-flags/constants.js +12 -0
- package/lib/esm/feature-flags/decorators.js +49 -0
- package/lib/esm/feature-flags/environment.js +18 -0
- package/lib/esm/feature-flags/index.js +14 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js +72 -0
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +69 -0
- package/lib/esm/feature-flags/readers/FeatureFlagReader.js +19 -0
- package/lib/esm/feature-flags/readers/index.js +2 -0
- package/lib/esm/feature-flags/services/FeatureFlag.service.js +250 -0
- package/lib/esm/feature-flags/types.js +2 -0
- package/lib/esm/feature-flags/utils.js +126 -0
- package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +8 -8
- package/lib/esm/graph/shared/nodes/flow-control.js +3 -2
- package/lib/esm/graph/shared/types.js +1 -1
- package/lib/esm/index.js +5 -4
- package/lib/esm/kibana/builders/KibanaIndexBuilder.js +319 -0
- package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +32 -0
- package/lib/esm/kibana/builders/index.js +3 -0
- package/lib/esm/kibana/helpers.js +19 -15
- package/lib/esm/kibana/index.js +2 -1
- package/lib/esm/kibana/types.js +13 -2
- package/lib/esm/loader/ObjectLoader.js +115 -0
- package/lib/esm/loader/families.js +66 -0
- package/lib/esm/loader/index.js +11 -0
- package/lib/esm/loader/types.js +2 -0
- package/lib/esm/nest/decorators.js +12 -0
- package/lib/esm/nest/index.js +2 -2
- package/lib/esm/nest/keycloakAuthHandler.js +67 -35
- package/lib/esm/nest/keycloakModule.js +7 -10
- package/lib/esm/nest/types.js +1 -1
- package/lib/esm/nest/utils.js +55 -46
- package/lib/esm/plugins/contract.js +68 -0
- package/lib/esm/plugins/index.js +18 -0
- package/lib/esm/plugins/kibana/host.js +19 -0
- package/lib/esm/plugins/kibana/index.js +14 -0
- package/lib/esm/plugins/kibana/installer.js +140 -0
- package/lib/esm/plugins/kibana/manifest.js +32 -0
- package/lib/esm/plugins/kibana/templates.js +499 -0
- package/lib/esm/plugins/kibana/types.js +10 -0
- package/lib/esm/plugins/superset/host.js +21 -0
- package/lib/esm/plugins/superset/index.js +16 -0
- package/lib/esm/plugins/superset/installer.js +192 -0
- package/lib/esm/plugins/superset/manifest.js +30 -0
- package/lib/esm/plugins/superset/templates.js +840 -0
- package/lib/esm/plugins/superset/types.js +11 -0
- package/lib/types/feature-flags/constants.d.cts +11 -0
- package/lib/types/feature-flags/constants.d.mts +11 -0
- package/lib/types/feature-flags/decorators.d.cts +11 -0
- package/lib/types/feature-flags/decorators.d.mts +11 -0
- package/lib/types/feature-flags/environment.d.cts +11 -0
- package/lib/types/feature-flags/environment.d.mts +11 -0
- package/lib/types/feature-flags/index.d.cts +13 -0
- package/lib/types/feature-flags/index.d.mts +13 -0
- package/lib/types/feature-flags/models/FeatureFlag.model.d.cts +16 -0
- package/lib/types/feature-flags/models/FeatureFlag.model.d.mts +16 -0
- package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.cts +15 -0
- package/lib/types/feature-flags/models/FeatureFlagAccess.model.d.mts +15 -0
- package/lib/types/feature-flags/readers/FeatureFlagReader.d.cts +10 -0
- package/lib/types/feature-flags/readers/FeatureFlagReader.d.mts +10 -0
- package/lib/types/feature-flags/readers/index.d.cts +1 -0
- package/lib/types/feature-flags/readers/index.d.mts +1 -0
- package/lib/types/feature-flags/services/FeatureFlag.service.d.cts +43 -0
- package/lib/types/feature-flags/services/FeatureFlag.service.d.mts +43 -0
- package/lib/types/feature-flags/types.d.cts +39 -0
- package/lib/types/feature-flags/types.d.mts +39 -0
- package/lib/types/feature-flags/utils.d.cts +13 -0
- package/lib/types/feature-flags/utils.d.mts +13 -0
- package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.cts +2 -2
- package/lib/types/graph/engine/execution/SwitchGraphNodeExecutor.d.mts +2 -2
- package/lib/types/graph/shared/types.d.cts +3 -3
- package/lib/types/graph/shared/types.d.mts +3 -3
- package/lib/types/index.d.cts +3 -2
- package/lib/types/index.d.mts +3 -2
- package/lib/types/kibana/builders/KibanaIndexBuilder.d.cts +67 -0
- package/lib/types/kibana/builders/KibanaIndexBuilder.d.mts +67 -0
- package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.cts +17 -0
- package/lib/types/kibana/builders/KibanaIndexBuilderCollection.d.mts +17 -0
- package/lib/types/kibana/builders/index.d.cts +2 -0
- package/lib/types/kibana/builders/index.d.mts +2 -0
- package/lib/types/kibana/index.d.cts +1 -0
- package/lib/types/kibana/index.d.mts +1 -0
- package/lib/types/kibana/types.d.cts +11 -0
- package/lib/types/kibana/types.d.mts +11 -0
- package/lib/types/loader/ObjectLoader.d.cts +27 -0
- package/lib/types/loader/ObjectLoader.d.mts +27 -0
- package/lib/types/loader/families.d.cts +34 -0
- package/lib/types/loader/families.d.mts +34 -0
- package/lib/types/loader/index.d.cts +10 -0
- package/lib/types/loader/index.d.mts +10 -0
- package/lib/types/loader/types.d.cts +24 -0
- package/lib/types/loader/types.d.mts +24 -0
- package/lib/types/nest/decorators.d.cts +8 -0
- package/lib/types/nest/decorators.d.mts +8 -0
- package/lib/types/nest/index.d.cts +1 -1
- package/lib/types/nest/index.d.mts +1 -1
- package/lib/types/nest/keycloakAuthHandler.d.cts +19 -42
- package/lib/types/nest/keycloakAuthHandler.d.mts +19 -42
- package/lib/types/nest/keycloakModule.d.cts +3 -5
- package/lib/types/nest/keycloakModule.d.mts +3 -5
- package/lib/types/nest/types.d.cts +2 -0
- package/lib/types/nest/types.d.mts +2 -0
- package/lib/types/nest/utils.d.cts +3 -4
- package/lib/types/nest/utils.d.mts +3 -4
- package/lib/types/plugins/contract.d.cts +180 -0
- package/lib/types/plugins/contract.d.mts +180 -0
- package/lib/types/plugins/index.d.cts +17 -0
- package/lib/types/plugins/index.d.mts +17 -0
- package/lib/types/plugins/kibana/host.d.cts +18 -0
- package/lib/types/plugins/kibana/host.d.mts +18 -0
- package/lib/types/plugins/kibana/index.d.cts +13 -0
- package/lib/types/plugins/kibana/index.d.mts +13 -0
- package/lib/types/plugins/kibana/installer.d.cts +45 -0
- package/lib/types/plugins/kibana/installer.d.mts +45 -0
- package/lib/types/plugins/kibana/manifest.d.cts +31 -0
- package/lib/types/plugins/kibana/manifest.d.mts +31 -0
- package/lib/types/plugins/kibana/templates.d.cts +12 -0
- package/lib/types/plugins/kibana/templates.d.mts +12 -0
- package/lib/types/plugins/kibana/types.d.cts +9 -0
- package/lib/types/plugins/kibana/types.d.mts +9 -0
- package/lib/types/plugins/superset/host.d.cts +20 -0
- package/lib/types/plugins/superset/host.d.mts +20 -0
- package/lib/types/plugins/superset/index.d.cts +15 -0
- package/lib/types/plugins/superset/index.d.mts +15 -0
- package/lib/types/plugins/superset/installer.d.cts +70 -0
- package/lib/types/plugins/superset/installer.d.mts +70 -0
- package/lib/types/plugins/superset/manifest.d.cts +28 -0
- package/lib/types/plugins/superset/manifest.d.mts +28 -0
- package/lib/types/plugins/superset/templates.d.cts +12 -0
- package/lib/types/plugins/superset/templates.d.mts +12 -0
- package/lib/types/plugins/superset/types.d.cts +10 -0
- package/lib/types/plugins/superset/types.d.mts +10 -0
- package/package.json +62 -3
- package/plugins/kibana/.gitignore +16 -0
- package/plugins/kibana/Dockerfile +19 -0
- package/plugins/kibana/docker-compose.yml +50 -0
- package/plugins/kibana/host/index.html +101 -0
- package/plugins/kibana/setup-dashboards.sh +84 -0
- package/plugins/superset/.gitignore +17 -0
- package/plugins/superset/Dockerfile +79 -0
- package/plugins/superset/docker-compose.yml +62 -0
- package/plugins/superset/host/index.html +168 -0
- package/plugins/superset/setup-dashboards.sh +106 -0
- package/plugins/superset/superset_config.py +49 -0
- package/lib/cjs/nest/authService.cjs +0 -91
- package/lib/esm/nest/authService.js +0 -86
- package/lib/types/nest/authService.d.cts +0 -63
- package/lib/types/nest/authService.d.mts +0 -63
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeFeatureName = normalizeFeatureName;
|
|
4
|
+
exports.parseRuntimeValue = parseRuntimeValue;
|
|
5
|
+
exports.normalizeFeatureConfig = normalizeFeatureConfig;
|
|
6
|
+
exports.normalizeFeatureRegistry = normalizeFeatureRegistry;
|
|
7
|
+
exports.isFeatureFlagEnabled = isFeatureFlagEnabled;
|
|
8
|
+
exports.isFeatureFlagEnabledByName = isFeatureFlagEnabledByName;
|
|
9
|
+
exports.normalizeFeatureRule = normalizeFeatureRule;
|
|
10
|
+
exports.isFeatureRuleSatisfied = isFeatureRuleSatisfied;
|
|
11
|
+
exports.isFeatureRuleBlocked = isFeatureRuleBlocked;
|
|
12
|
+
exports.readMetadata = readMetadata;
|
|
13
|
+
exports.normalizeFeatureSubjectType = normalizeFeatureSubjectType;
|
|
14
|
+
exports.normalizeFeatureSubjectKey = normalizeFeatureSubjectKey;
|
|
15
|
+
const decoration_1 = require("@decaf-ts/decoration");
|
|
16
|
+
function normalizeFeatureName(name) {
|
|
17
|
+
const trimmed = name.trim();
|
|
18
|
+
if (!trimmed)
|
|
19
|
+
return trimmed;
|
|
20
|
+
if (/^[a-z][a-zA-Z0-9]*$/.test(trimmed))
|
|
21
|
+
return trimmed;
|
|
22
|
+
const camelized = trimmed
|
|
23
|
+
.toLowerCase()
|
|
24
|
+
.replace(/[_\-\s]+/g, " ")
|
|
25
|
+
.split(" ")
|
|
26
|
+
.filter(Boolean);
|
|
27
|
+
if (camelized.length === 0)
|
|
28
|
+
return trimmed;
|
|
29
|
+
const [head, ...tail] = camelized;
|
|
30
|
+
return [
|
|
31
|
+
head,
|
|
32
|
+
...tail.map((segment) => segment ? segment.charAt(0).toUpperCase() + segment.slice(1) : segment),
|
|
33
|
+
]
|
|
34
|
+
.join("")
|
|
35
|
+
.replace(/[^a-zA-Z0-9]/g, "");
|
|
36
|
+
}
|
|
37
|
+
function parseRuntimeValue(value) {
|
|
38
|
+
if (typeof value !== "string")
|
|
39
|
+
return value;
|
|
40
|
+
const trimmed = value.trim();
|
|
41
|
+
if (trimmed === "true")
|
|
42
|
+
return true;
|
|
43
|
+
if (trimmed === "false")
|
|
44
|
+
return false;
|
|
45
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmed))
|
|
46
|
+
return Number(trimmed);
|
|
47
|
+
if ((trimmed.startsWith("{") && trimmed.endsWith("}")) ||
|
|
48
|
+
(trimmed.startsWith("[") && trimmed.endsWith("]"))) {
|
|
49
|
+
try {
|
|
50
|
+
return JSON.parse(trimmed);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
function normalizeObjectKey(key) {
|
|
59
|
+
if (!key)
|
|
60
|
+
return key;
|
|
61
|
+
if (/^[a-z][a-zA-Z0-9]*$/.test(key))
|
|
62
|
+
return key;
|
|
63
|
+
const normalized = key
|
|
64
|
+
.replace(/[\s-]+/g, "_")
|
|
65
|
+
.split("_")
|
|
66
|
+
.filter(Boolean);
|
|
67
|
+
if (normalized.length === 0)
|
|
68
|
+
return key;
|
|
69
|
+
const [head, ...tail] = normalized;
|
|
70
|
+
return [
|
|
71
|
+
head.toLowerCase(),
|
|
72
|
+
...tail.map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase()),
|
|
73
|
+
].join("");
|
|
74
|
+
}
|
|
75
|
+
function normalizeFeatureConfig(value) {
|
|
76
|
+
if (typeof value === "undefined")
|
|
77
|
+
return undefined;
|
|
78
|
+
if (value === true)
|
|
79
|
+
return true;
|
|
80
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
81
|
+
return parseRuntimeValue(value);
|
|
82
|
+
}
|
|
83
|
+
const result = {};
|
|
84
|
+
Object.entries(value).forEach(([key, raw]) => {
|
|
85
|
+
const normalizedKey = normalizeObjectKey(key);
|
|
86
|
+
if (typeof raw !== "undefined") {
|
|
87
|
+
result[normalizedKey] = normalizeFeatureConfig(raw) ?? raw;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
function normalizeFeatureRegistry(value) {
|
|
93
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
94
|
+
return {};
|
|
95
|
+
return Object.entries(value).reduce((acc, [key, raw]) => {
|
|
96
|
+
const normalizedKey = normalizeFeatureName(key);
|
|
97
|
+
const normalizedValue = normalizeFeatureConfig(raw);
|
|
98
|
+
if (typeof normalizedValue !== "undefined") {
|
|
99
|
+
acc[normalizedKey] = normalizedValue;
|
|
100
|
+
}
|
|
101
|
+
return acc;
|
|
102
|
+
}, {});
|
|
103
|
+
}
|
|
104
|
+
function isFeatureFlagEnabled(value) {
|
|
105
|
+
if (value === true)
|
|
106
|
+
return true;
|
|
107
|
+
return !!value && typeof value === "object";
|
|
108
|
+
}
|
|
109
|
+
function isFeatureFlagEnabledByName(registry, featureName) {
|
|
110
|
+
return isFeatureFlagEnabled(registry?.[normalizeFeatureName(featureName)]);
|
|
111
|
+
}
|
|
112
|
+
function normalizeFeatureRule(features, match = "any") {
|
|
113
|
+
return {
|
|
114
|
+
features: [...new Set(features.map(normalizeFeatureName).filter(Boolean))],
|
|
115
|
+
match,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function isFeatureRuleSatisfied(rule, registry) {
|
|
119
|
+
if (!rule || rule.features.length === 0)
|
|
120
|
+
return true;
|
|
121
|
+
const enabled = rule.features.filter((feature) => isFeatureFlagEnabledByName(registry, feature));
|
|
122
|
+
if (rule.match === "all")
|
|
123
|
+
return enabled.length === rule.features.length;
|
|
124
|
+
return enabled.length > 0;
|
|
125
|
+
}
|
|
126
|
+
function isFeatureRuleBlocked(rule, registry) {
|
|
127
|
+
if (!rule || rule.features.length === 0)
|
|
128
|
+
return false;
|
|
129
|
+
return rule.features.some((feature) => isFeatureFlagEnabledByName(registry, feature));
|
|
130
|
+
}
|
|
131
|
+
function readMetadata(target, key) {
|
|
132
|
+
return decoration_1.Metadata.get(target, key);
|
|
133
|
+
}
|
|
134
|
+
function normalizeFeatureSubjectType(subjectType) {
|
|
135
|
+
return subjectType.trim().toLowerCase();
|
|
136
|
+
}
|
|
137
|
+
function normalizeFeatureSubjectKey(subjectKey) {
|
|
138
|
+
return subjectKey.trim();
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmVhdHVyZS1mbGFncy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVaEQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDN0IsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDeEQsTUFBTSxTQUFTLEdBQUcsT0FBTztTQUN0QixXQUFXLEVBQUU7U0FDYixPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztTQUN6QixLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDM0MsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNsQyxPQUFPO1FBQ0wsSUFBSTtRQUNKLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3ZFO0tBQ0Y7U0FDRSxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ1IsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFD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LENBQUMsV0FBVyxFQUFrQyxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsVUFBa0I7SUFDM0QsT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQge1xuICBGZWF0dXJlRmxhZ0NvbmZpZyxcbiAgRmVhdHVyZUZsYWdBY2Nlc3NTdWJqZWN0VHlwZSxcbiAgRmVhdHVyZUZsYWdNYXRjaE1vZGUsXG4gIEZlYXR1cmVGbGFnUmVnaXN0cnksXG4gIEZlYXR1cmVGbGFnUnVsZSxcbiAgRmVhdHVyZUZsYWdWYWx1ZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gdHJpbW1lZDtcbiAgaWYgKC9eW2Etel1bYS16QS1aMC05XSokLy50ZXN0KHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZDtcbiAgY29uc3QgY2FtZWxpemVkID0gdHJpbW1lZFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgXCIgXCIpXG4gICAgLnNwbGl0KFwiIFwiKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChjYW1lbGl6ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdHJpbW1lZDtcbiAgY29uc3QgW2hlYWQsIC4uLnRhaWxdID0gY2FtZWxpemVkO1xuICByZXR1cm4gW1xuICAgIGhlYWQsXG4gICAgLi4udGFpbC5tYXAoKHNlZ21lbnQpID0+XG4gICAgICBzZWdtZW50ID8gc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkgOiBzZWdtZW50XG4gICAgKSxcbiAgXVxuICAgIC5qb2luKFwiXCIpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05XS9nLCBcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUnVudGltZVZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgaWYgKHRyaW1tZWQgPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICBpZiAoL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdCh0cmltbWVkKSkgcmV0dXJuIE51bWJlcih0cmltbWVkKTtcbiAgaWYgKFxuICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJ7XCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJ9XCIpKSB8fFxuICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJdXCIpKVxuICApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodHJpbW1lZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0S2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFrZXkpIHJldHVybiBrZXk7XG4gIGlmICgvXlthLXpdW2EtekEtWjAtOV0qJC8udGVzdChrZXkpKSByZXR1cm4ga2V5O1xuICBjb25zdCBub3JtYWxpemVkID0ga2V5XG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnNwbGl0KFwiX1wiKVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIGlmIChub3JtYWxpemVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGtleTtcbiAgY29uc3QgW2hlYWQsIC4uLnRhaWxdID0gbm9ybWFsaXplZDtcbiAgcmV0dXJuIFtcbiAgICBoZWFkLnRvTG93ZXJDYXNlKCksXG4gICAgLi4udGFpbC5tYXAoXG4gICAgICAoc2VnbWVudCkgPT5cbiAgICAgICAgc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKVxuICAgICksXG4gIF0uam9pbihcIlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVDb25maWcoXG4gIHZhbHVlOiB1bmtub3duXG4pOiBGZWF0dXJlRmxhZ1ZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gcGFyc2VSdW50aW1lVmFsdWUodmFsdWUpIGFzIEZlYXR1cmVGbGFnVmFsdWU7XG4gIH1cblxuICBjb25zdCByZXN1bHQ6IEZlYXR1cmVGbGFnQ29uZmlnID0ge307XG4gIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5mb3JFYWNoKChba2V5LCByYXddKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IG5vcm1hbGl6ZU9iamVjdEtleShrZXkpO1xuICAgIGlmICh0eXBlb2YgcmF3ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICByZXN1bHRbbm9ybWFsaXplZEtleV0gPSBub3JtYWxpemVGZWF0dXJlQ29uZmlnKHJhdykgPz8gcmF3O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlUmVnaXN0cnkoXG4gIHZhbHVlOiB1bmtub3duXG4pOiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5yZWR1Y2UoXG4gICAgKGFjYywgW2tleSwgcmF3XSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IG5vcm1hbGl6ZUZlYXR1cmVOYW1lKGtleSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVGZWF0dXJlQ29uZmlnKHJhdyk7XG4gICAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBhY2Nbbm9ybWFsaXplZEtleV0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sXG4gICAge30gYXMgRmVhdHVyZUZsYWdSZWdpc3RyeVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWU6IEZlYXR1cmVGbGFnVmFsdWUgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlRmxhZ0VuYWJsZWRCeU5hbWUoXG4gIHJlZ2lzdHJ5OiBGZWF0dXJlRmxhZ1JlZ2lzdHJ5IHwgdW5kZWZpbmVkLFxuICBmZWF0dXJlTmFtZTogc3RyaW5nXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzRmVhdHVyZUZsYWdFbmFibGVkKHJlZ2lzdHJ5Py5bbm9ybWFsaXplRmVhdHVyZU5hbWUoZmVhdHVyZU5hbWUpXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlUnVsZShcbiAgZmVhdHVyZXM6IHN0cmluZ1tdLFxuICBtYXRjaDogRmVhdHVyZUZsYWdNYXRjaE1vZGUgPSBcImFueVwiXG4pOiBGZWF0dXJlRmxhZ1J1bGUge1xuICByZXR1cm4ge1xuICAgIGZlYXR1cmVzOiBbLi4ubmV3IFNldChmZWF0dXJlcy5tYXAobm9ybWFsaXplRmVhdHVyZU5hbWUpLmZpbHRlcihCb29sZWFuKSldLFxuICAgIG1hdGNoLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlUnVsZVNhdGlzZmllZChcbiAgcnVsZTogRmVhdHVyZUZsYWdSdWxlIHwgdW5kZWZpbmVkLFxuICByZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghcnVsZSB8fCBydWxlLmZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGVuYWJsZWQgPSBydWxlLmZlYXR1cmVzLmZpbHRlcigoZmVhdHVyZSkgPT5cbiAgICBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZSlcbiAgKTtcbiAgaWYgKHJ1bGUubWF0Y2ggPT09IFwiYWxsXCIpIHJldHVybiBlbmFibGVkLmxlbmd0aCA9PT0gcnVsZS5mZWF0dXJlcy5sZW5ndGg7XG4gIHJldHVybiBlbmFibGVkLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVSdWxlQmxvY2tlZChcbiAgcnVsZTogRmVhdHVyZUZsYWdSdWxlIHwgdW5kZWZpbmVkLFxuICByZWdpc3RyeTogRmVhdHVyZUZsYWdSZWdpc3RyeSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gIGlmICghcnVsZSB8fCBydWxlLmZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcnVsZS5mZWF0dXJlcy5zb21lKChmZWF0dXJlKSA9PiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE1ldGFkYXRhPFQgPSB1bmtub3duPihcbiAgdGFyZ2V0OiBvYmplY3QsXG4gIGtleTogc3RyaW5nXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIE1ldGFkYXRhLmdldCh0YXJnZXQgYXMgYW55LCBrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlU3ViamVjdFR5cGUoXG4gIHN1YmplY3RUeXBlOiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3RUeXBlIHwgc3RyaW5nXG4pOiBGZWF0dXJlRmxhZ0FjY2Vzc1N1YmplY3RUeXBlIHtcbiAgcmV0dXJuIHN1YmplY3RUeXBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIGFzIEZlYXR1cmVGbGFnQWNjZXNzU3ViamVjdFR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShzdWJqZWN0S2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3ViamVjdEtleS50cmltKCk7XG59XG4iXX0=
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLG9EQW9CQztBQUNELDhDQW9CQztBQWtCRCx3REFnQkM7QUFDRCw0REFXQztBQUNELG9EQUlDO0FBQ0QsZ0VBRUM7QUFDRCxvREFLQztBQUNELHdEQU9DO0FBQ0Qsb0RBSUM7QUFDRCxvQ0FFQztBQUNELGtFQUVDO0FBQ0QsZ0VBRUM7QUE1SEQscURBQWdEO0FBQ2hELFNBQWdCLG9CQUFvQixDQUFDLElBQUk7SUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLElBQUksQ0FBQyxPQUFPO1FBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25DLE9BQU8sT0FBTyxDQUFDO0lBQ25CLE1BQU0sU0FBUyxHQUFHLE9BQU87U0FDcEIsV0FBVyxFQUFFO1NBQ2IsT0FBTyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7U0FDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUN0QixPQUFPLE9BQU8sQ0FBQztJQUNuQixNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ2xDLE9BQU87UUFDSCxJQUFJO1FBQ0osR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0tBQ25HO1NBQ0ksSUFBSSxDQUFDLEVBQUUsQ0FB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RCxPQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM1QyxDQUFDO0FBQ0QsU0FBZ0IsMEJBQTBCLENBQUMsVUFBVTtJQUNqRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM3QixDQUFDO0FBQ0QsODlZQUE4OVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVOYW1lKG5hbWUpIHtcbiAgICBjb25zdCB0cmltbWVkID0gbmFtZS50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKVxuICAgICAgICByZXR1cm4gdHJpbW1lZDtcbiAgICBpZiAoL15bYS16XVthLXpBLVowLTldKiQvLnRlc3QodHJpbW1lZCkpXG4gICAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIGNvbnN0IGNhbWVsaXplZCA9IHRyaW1tZWRcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgXCIgXCIpXG4gICAgICAgIC5zcGxpdChcIiBcIilcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBpZiAoY2FtZWxpemVkLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHRyaW1tZWQ7XG4gICAgY29uc3QgW2hlYWQsIC4uLnRhaWxdID0gY2FtZWxpemVkO1xuICAgIHJldHVybiBbXG4gICAgICAgIGhlYWQsXG4gICAgICAgIC4uLnRhaWwubWFwKChzZWdtZW50KSA9PiBzZWdtZW50ID8gc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkgOiBzZWdtZW50KSxcbiAgICBdXG4gICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSdW50aW1lVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZCA9PT0gXCJ0cnVlXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0cmltbWVkID09PSBcImZhbHNlXCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdCh0cmltbWVkKSlcbiAgICAgICAgcmV0dXJuIE51bWJlcih0cmltbWVkKTtcbiAgICBpZiAoKHRyaW1tZWQuc3RhcnRzV2l0aChcIntcIikgJiYgdHJpbW1lZC5lbmRzV2l0aChcIn1cIikpIHx8XG4gICAgICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJbXCIpICYmIHRyaW1tZWQuZW5kc1dpdGgoXCJdXCIpKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodHJpbW1lZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdEtleShrZXkpIHtcbiAgICBpZiAoIWtleSlcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICBpZiAoL15bYS16XVthLXpBLVowLTldKiQvLnRlc3Qoa2V5KSlcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICBjb25zdCBub3JtYWxpemVkID0ga2V5XG4gICAgICAgIC5yZXBsYWNlKC9bXFxzLV0rL2csIFwiX1wiKVxuICAgICAgICAuc3BsaXQoXCJfXCIpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKVxuICAgICAgICByZXR1cm4ga2V5O1xuICAgIGNvbnN0IFtoZWFkLCAuLi50YWlsXSA9IG5vcm1hbGl6ZWQ7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgaGVhZC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAuLi50YWlsLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSksXG4gICAgXS5qb2luKFwiXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVDb25maWcodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlUnVudGltZVZhbHVlKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrZXksIHJhd10pID0+IHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IG5vcm1hbGl6ZU9iamVjdEtleShrZXkpO1xuICAgICAgICBpZiAodHlwZW9mIHJhdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmVzdWx0W25vcm1hbGl6ZWRLZXldID0gbm9ybWFsaXplRmVhdHVyZUNvbmZpZyhyYXcpID8/IHJhdztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRmVhdHVyZVJlZ2lzdHJ5KHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgoYWNjLCBba2V5LCByYXddKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXkgPSBub3JtYWxpemVGZWF0dXJlTmFtZShrZXkpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemVGZWF0dXJlQ29uZmlnKHJhdyk7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplZFZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBhY2Nbbm9ybWFsaXplZEtleV0gPSBub3JtYWxpemVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlRmxhZ0VuYWJsZWQodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZU5hbWUpIHtcbiAgICByZXR1cm4gaXNGZWF0dXJlRmxhZ0VuYWJsZWQocmVnaXN0cnk/Lltub3JtYWxpemVGZWF0dXJlTmFtZShmZWF0dXJlTmFtZSldKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlUnVsZShmZWF0dXJlcywgbWF0Y2ggPSBcImFueVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmVhdHVyZXM6IFsuLi5uZXcgU2V0KGZlYXR1cmVzLm1hcChub3JtYWxpemVGZWF0dXJlTmFtZSkuZmlsdGVyKEJvb2xlYW4pKV0sXG4gICAgICAgIG1hdGNoLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlUnVsZVNhdGlzZmllZChydWxlLCByZWdpc3RyeSkge1xuICAgIGlmICghcnVsZSB8fCBydWxlLmZlYXR1cmVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgZW5hYmxlZCA9IHJ1bGUuZmVhdHVyZXMuZmlsdGVyKChmZWF0dXJlKSA9PiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZSkpO1xuICAgIGlmIChydWxlLm1hdGNoID09PSBcImFsbFwiKVxuICAgICAgICByZXR1cm4gZW5hYmxlZC5sZW5ndGggPT09IHJ1bGUuZmVhdHVyZXMubGVuZ3RoO1xuICAgIHJldHVybiBlbmFibGVkLmxlbmd0aCA+IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGZWF0dXJlUnVsZUJsb2NrZWQocnVsZSwgcmVnaXN0cnkpIHtcbiAgICBpZiAoIXJ1bGUgfHwgcnVsZS5mZWF0dXJlcy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gcnVsZS5mZWF0dXJlcy5zb21lKChmZWF0dXJlKSA9PiBpc0ZlYXR1cmVGbGFnRW5hYmxlZEJ5TmFtZShyZWdpc3RyeSwgZmVhdHVyZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRNZXRhZGF0YSh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBNZXRhZGF0YS5nZXQodGFyZ2V0LCBrZXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUZlYXR1cmVTdWJqZWN0VHlwZShzdWJqZWN0VHlwZSkge1xuICAgIHJldHVybiBzdWJqZWN0VHlwZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVGZWF0dXJlU3ViamVjdEtleShzdWJqZWN0S2V5KSB7XG4gICAgcmV0dXJuIHN1YmplY3RLZXkudHJpbSgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZFhScGJITXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk5emNtTXZabVZoZEhWeVpTMW1iR0ZuY3k5MWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFVVXNVVUZCVVN4RlFVRkZMRTFCUVUwc2MwSkJRWE5DTEVOQlFVTTdRVUZWYUVRc1RVRkJUU3hWUVVGVkxHOUNRVUZ2UWl4RFFVRkRMRWxCUVZrN1NVRkRMME1zVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJRelZDTEVsQlFVa3NRMEZCUXl4UFFVRlBPMUZCUVVVc1QwRkJUeXhQUVVGUExFTkJRVU03U1VGRE4wSXNTVUZCU1N4eFFrRkJjVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRPMUZCUVVVc1QwRkJUeXhQUVVGUExFTkJRVU03U1VGRGVFUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1QwRkJUenRUUVVOMFFpeFhRVUZYTEVWQlFVVTdVMEZEWWl4UFFVRlBMRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVWNzUTBGQlF6dFRRVU42UWl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRE8xTkJRMVlzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTI1Q0xFbEJRVWtzVTBGQlV5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMUZCUVVVc1QwRkJUeXhQUVVGUExFTkJRVU03U1VGRE0wTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXp0SlFVTnNReXhQUVVGUE8xRkJRMHdzU1VGQlNUdFJRVU5LTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlEzUkNMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlEzWkZPMHRCUTBZN1UwRkRSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETzFOQlExSXNUMEZCVHl4RFFVRkRMR1ZCUVdVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU5zUXl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHbENRVUZwUWl4RFFVRkRMRXRCUVdNN1NVRkRPVU1zU1VGQlNTeFBRVUZQTEV0QlFVc3NTMEZCU3l4UlFVRlJPMUZCUVVVc1QwRkJUeXhMUVVGTExFTkJRVU03U1VGRE5VTXNUVUZCVFN4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzBsQlF6ZENMRWxCUVVrc1QwRkJUeXhMUVVGTExFMUJRVTA3VVVGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTndReXhKUVVGSkxFOUJRVThzUzBGQlN5eFBRVUZQTzFGQlFVVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1NVRkRkRU1zU1VGQlNTeHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETzFGQlFVVXNUMEZCVHl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRE5VUXNTVUZEUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5zUkN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVU5zUkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hEUVVGRE8xbEJRMGdzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRemRDTEVOQlFVTTdVVUZCUXl4TlFVRk5MRU5CUVVNN1dVRkRVQ3hQUVVGUExFdEJRVXNzUTBGQlF6dFJRVU5tTEVOQlFVTTdTVUZEU0N4RFFVRkRPMGxCUTBRc1QwRkJUeXhMUVVGTExFTkJRVU03UVVGRFppeERRVUZETzBGQlJVUXNVMEZCVXl4clFrRkJhMElzUTBGQlF5eEhRVUZYTzBsQlEzSkRMRWxCUVVrc1EwRkJReXhIUVVGSE8xRkJRVVVzVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEY2tJc1NVRkJTU3h4UWtGQmNVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJRVVVzVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEYUVRc1RVRkJUU3hWUVVGVkxFZEJRVWNzUjBGQlJ6dFRRVU51UWl4UFFVRlBMRU5CUVVNc1UwRkJVeXhGUVVGRkxFZEJRVWNzUTBGQlF6dFRRVU4yUWl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRE8xTkJRMVlzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTI1Q0xFbEJRVWtzVlVGQlZTeERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMUZCUVVVc1QwRkJUeXhIUVVGSExFTkJRVU03U1VGRGVFTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEZWQlFWVXNRMEZCUXp0SlFVTnVReXhQUVVGUE8xRkJRMHdzU1VGQlNTeERRVUZETEZkQlFWY3NSVUZCUlR0UlFVTnNRaXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlExUXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVOV0xFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGRGJrVTdTMEZEUml4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU5pTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2MwSkJRWE5DTEVOQlEzQkRMRXRCUVdNN1NVRkZaQ3hKUVVGSkxFOUJRVThzUzBGQlN5eExRVUZMTEZkQlFWYzdVVUZCUlN4UFFVRlBMRk5CUVZNc1EwRkJRenRKUVVOdVJDeEpRVUZKTEV0QlFVc3NTMEZCU3l4SlFVRkpPMUZCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRGFFTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETzFGQlEyaEZMRTlCUVU4c2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RFFVRnhRaXhEUVVGRE8wbEJRM1JFTEVOQlFVTTdTVUZGUkN4TlFVRk5MRTFCUVUwc1IwRkJjMElzUlVGQlJTeERRVUZETzBsQlEzSkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlowTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRVZCUVVVN1VVRkRkRVVzVFVGQlRTeGhRVUZoTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZET1VNc1NVRkJTU3hQUVVGUExFZEJRVWNzUzBGQlN5eFhRVUZYTEVWQlFVVXNRMEZCUXp0WlFVTXZRaXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NjMEpCUVhOQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRPMUZCUXpkRUxFTkJRVU03U1VGRFNDeERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTklMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2QwSkJRWGRDTEVOQlEzUkRMRXRCUVdNN1NVRkZaQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRkZCUVZFc1NVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXp0UlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRek5GTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGblF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVTTFSQ3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hGUVVGRk8xRkJRMnhDTEUxQlFVMHNZVUZCWVN4SFFVRkhMRzlDUVVGdlFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJoRUxFMUJRVTBzWlVGQlpTeEhRVUZITEhOQ1FVRnpRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEzQkVMRWxCUVVrc1QwRkJUeXhsUVVGbExFdEJRVXNzVjBGQlZ5eEZRVUZGTEVOQlFVTTdXVUZETTBNc1IwRkJSeXhEUVVGRExHRkJRV0VzUTBGQlF5eEhRVUZITEdWQlFXVXNRMEZCUXp0UlFVTjJReXhEUVVGRE8xRkJRMFFzVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEWWl4RFFVRkRMRVZCUTBRc1JVRkJlVUlzUTBGRE1VSXNRMEZCUXp0QlFVTktMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzYjBKQlFXOUNMRU5CUVVNc1MwRkJiVU03U1VGRGRFVXNTVUZCU1N4TFFVRkxMRXRCUVVzc1NVRkJTVHRSUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyaERMRTlCUVU4c1EwRkJReXhEUVVGRExFdEJRVXNzU1VGQlNTeFBRVUZQTEV0QlFVc3NTMEZCU3l4UlFVRlJMRU5CUVVNN1FVRkRPVU1zUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN3d1FrRkJNRUlzUTBGRGVFTXNVVUZCZVVNc1JVRkRla01zVjBGQmJVSTdTVUZGYmtJc1QwRkJUeXh2UWtGQmIwSXNRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE4wVXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3h2UWtGQmIwSXNRMEZEYkVNc1VVRkJhMElzUlVGRGJFSXNVVUZCT0VJc1MwRkJTenRKUVVWdVF5eFBRVUZQTzFGQlEwd3NVVUZCVVN4RlFVRkZMRU5CUVVNc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRzlDUVVGdlFpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE1VVXNTMEZCU3p0TFFVTk9MRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEhOQ1FVRnpRaXhEUVVOd1F5eEpRVUZwUXl4RlFVTnFReXhSUVVGNVF6dEpRVVY2UXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNN1VVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU55UkN4TlFVRk5MRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFTkJReTlETERCQ1FVRXdRaXhEUVVGRExGRkJRVkVzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZET1VNc1EwRkJRenRKUVVOR0xFbEJRVWtzU1VGQlNTeERRVUZETEV0QlFVc3NTMEZCU3l4TFFVRkxPMUZCUVVVc1QwRkJUeXhQUVVGUExFTkJRVU1zVFVGQlRTeExRVUZMTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRM3BGTEU5QlFVOHNUMEZCVHl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE5VSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3h2UWtGQmIwSXNRMEZEYkVNc1NVRkJhVU1zUlVGRGFrTXNVVUZCZVVNN1NVRkZla01zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETzFGQlFVVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1NVRkRkRVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zVVVGQlVTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRlRVlzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WlFVRlpMRU5CUXpGQ0xFMUJRV01zUlVGRFpDeEhRVUZYTzBsQlJWZ3NUMEZCVHl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRV0VzUlVGQlJTeEhRVUZITEVOQlFXdENMRU5CUVVNN1FVRkRNMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN3eVFrRkJNa0lzUTBGRGVrTXNWMEZCYTBRN1NVRkZiRVFzVDBGQlR5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1YwRkJWeXhGUVVGclF5eERRVUZETzBGQlF6RkZMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzTUVKQlFUQkNMRU5CUVVNc1ZVRkJhMEk3U1VGRE0wUXNUMEZCVHl4VlFVRlZMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRE0wSXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lFMWxkR0ZrWVhSaElIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWtaV052Y21GMGFXOXVYQ0k3WEc1cGJYQnZjblFnZTF4dUlDQkdaV0YwZFhKbFJteGhaME52Ym1acFp5eGNiaUFnUm1WaGRIVnlaVVpzWVdkQlkyTmxjM05UZFdKcVpXTjBWSGx3WlN4Y2JpQWdSbVZoZEhWeVpVWnNZV2ROWVhSamFFMXZaR1VzWEc0Z0lFWmxZWFIxY21WR2JHRm5VbVZuYVhOMGNua3NYRzRnSUVabFlYUjFjbVZHYkdGblVuVnNaU3hjYmlBZ1JtVmhkSFZ5WlVac1lXZFdZV3gxWlN4Y2JuMGdabkp2YlNCY0lpNHZkSGx3WlhOY0lqdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJRzV2Y20xaGJHbDZaVVpsWVhSMWNtVk9ZVzFsS0c1aGJXVTZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUdOdmJuTjBJSFJ5YVcxdFpXUWdQU0J1WVcxbExuUnlhVzBvS1R0Y2JpQWdhV1lnS0NGMGNtbHRiV1ZrS1NCeVpYUjFjbTRnZEhKcGJXMWxaRHRjYmlBZ2FXWWdLQzllVzJFdGVsMWJZUzE2UVMxYU1DMDVYU29rTHk1MFpYTjBLSFJ5YVcxdFpXUXBLU0J5WlhSMWNtNGdkSEpwYlcxbFpEdGNiaUFnWTI5dWMzUWdZMkZ0Wld4cGVtVmtJRDBnZEhKcGJXMWxaRnh1SUNBZ0lDNTBiMHh2ZDJWeVEyRnpaU2dwWEc0Z0lDQWdMbkpsY0d4aFkyVW9MMXRmWEZ3dFhGeHpYU3N2Wnl3Z1hDSWdYQ0lwWEc0Z0lDQWdMbk53YkdsMEtGd2lJRndpS1Z4dUlDQWdJQzVtYVd4MFpYSW9RbTl2YkdWaGJpazdYRzRnSUdsbUlDaGpZVzFsYkdsNlpXUXViR1Z1WjNSb0lEMDlQU0F3S1NCeVpYUjFjbTRnZEhKcGJXMWxaRHRjYmlBZ1kyOXVjM1FnVzJobFlXUXNJQzR1TG5SaGFXeGRJRDBnWTJGdFpXeHBlbVZrTzF4dUlDQnlaWFIxY200Z1cxeHVJQ0FnSUdobFlXUXNYRzRnSUNBZ0xpNHVkR0ZwYkM1dFlYQW9LSE5sWjIxbGJuUXBJRDArWEc0Z0lDQWdJQ0J6WldkdFpXNTBJRDhnYzJWbmJXVnVkQzVqYUdGeVFYUW9NQ2t1ZEc5VmNIQmxja05oYzJVb0tTQXJJSE5sWjIxbGJuUXVjMnhwWTJVb01Ta2dPaUJ6WldkdFpXNTBYRzRnSUNBZ0tTeGNiaUFnWFZ4dUlDQWdJQzVxYjJsdUtGd2lYQ0lwWEc0Z0lDQWdMbkpsY0d4aFkyVW9MMXRlWVMxNlFTMWFNQzA1WFM5bkxDQmNJbHdpS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJoY25ObFVuVnVkR2x0WlZaaGJIVmxLSFpoYkhWbE9pQjFibXR1YjNkdUtUb2dkVzVyYm05M2JpQjdYRzRnSUdsbUlDaDBlWEJsYjJZZ2RtRnNkV1VnSVQwOUlGd2ljM1J5YVc1blhDSXBJSEpsZEhWeWJpQjJZV3gxWlR0Y2JpQWdZMjl1YzNRZ2RISnBiVzFsWkNBOUlIWmhiSFZsTG5SeWFXMG9LVHRjYmlBZ2FXWWdLSFJ5YVcxdFpXUWdQVDA5SUZ3aWRISjFaVndpS1NCeVpYUjFjbTRnZEhKMVpUdGNiaUFnYVdZZ0tIUnlhVzF0WldRZ1BUMDlJRndpWm1Gc2MyVmNJaWtnY21WMGRYSnVJR1poYkhObE8xeHVJQ0JwWmlBb0wxNHRQMXhjWkNzb1hGd3VYRnhrS3lrL0pDOHVkR1Z6ZENoMGNtbHRiV1ZrS1NrZ2NtVjBkWEp1SUU1MWJXSmxjaWgwY21sdGJXVmtLVHRjYmlBZ2FXWWdLRnh1SUNBZ0lDaDBjbWx0YldWa0xuTjBZWEowYzFkcGRHZ29YQ0o3WENJcElDWW1JSFJ5YVcxdFpXUXVaVzVrYzFkcGRHZ29YQ0o5WENJcEtTQjhmRnh1SUNBZ0lDaDBjbWx0YldWa0xuTjBZWEowYzFkcGRHZ29YQ0piWENJcElDWW1JSFJ5YVcxdFpXUXVaVzVrYzFkcGRHZ29YQ0pkWENJcEtWeHVJQ0FwSUh0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUVwVFQwNHVjR0Z5YzJVb2RISnBiVzFsWkNrN1hHNGdJQ0FnZlNCallYUmphQ0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUIyWVd4MVpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JtOXliV0ZzYVhwbFQySnFaV04wUzJWNUtHdGxlVG9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ2FXWWdLQ0ZyWlhrcElISmxkSFZ5YmlCclpYazdYRzRnSUdsbUlDZ3ZYbHRoTFhwZFcyRXRla0V0V2pBdE9WMHFKQzh1ZEdWemRDaHJaWGtwS1NCeVpYUjFjbTRnYTJWNU8xeHVJQ0JqYjI1emRDQnViM0p0WVd4cGVtVmtJRDBnYTJWNVhHNGdJQ0FnTG5KbGNHeGhZMlVvTDF0Y1hITXRYU3N2Wnl3Z1hDSmZYQ0lwWEc0Z0lDQWdMbk53YkdsMEtGd2lYMXdpS1Z4dUlDQWdJQzVtYVd4MFpYSW9RbTl2YkdWaGJpazdYRzRnSUdsbUlDaHViM0p0WVd4cGVtVmtMbXhsYm1kMGFDQTlQVDBnTUNrZ2NtVjBkWEp1SUd0bGVUdGNiaUFnWTI5dWMzUWdXMmhsWVdRc0lDNHVMblJoYVd4ZElEMGdibTl5YldGc2FYcGxaRHRjYmlBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0JvWldGa0xuUnZURzkzWlhKRFlYTmxLQ2tzWEc0Z0lDQWdMaTR1ZEdGcGJDNXRZWEFvWEc0Z0lDQWdJQ0FvYzJWbmJXVnVkQ2tnUFQ1Y2JpQWdJQ0FnSUNBZ2MyVm5iV1Z1ZEM1amFHRnlRWFFvTUNrdWRHOVZjSEJsY2tOaGMyVW9LU0FySUhObFoyMWxiblF1YzJ4cFkyVW9NU2t1ZEc5TWIzZGxja05oYzJVb0tWeHVJQ0FnSUNrc1hHNGdJRjB1YW05cGJpaGNJbHdpS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJRzV2Y20xaGJHbDZaVVpsWVhSMWNtVkRiMjVtYVdjb1hHNGdJSFpoYkhWbE9pQjFibXR1YjNkdVhHNHBPaUJHWldGMGRYSmxSbXhoWjFaaGJIVmxJSHdnZFc1a1pXWnBibVZrSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUIyWVd4MVpTQTlQVDBnWENKMWJtUmxabWx1WldSY0lpa2djbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNiaUFnYVdZZ0tIWmhiSFZsSUQwOVBTQjBjblZsS1NCeVpYUjFjbTRnZEhKMVpUdGNiaUFnYVdZZ0tDRjJZV3gxWlNCOGZDQjBlWEJsYjJZZ2RtRnNkV1VnSVQwOUlGd2liMkpxWldOMFhDSWdmSHdnUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElIdGNiaUFnSUNCeVpYUjFjbTRnY0dGeWMyVlNkVzUwYVcxbFZtRnNkV1VvZG1Gc2RXVXBJR0Z6SUVabFlYUjFjbVZHYkdGblZtRnNkV1U3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J5WlhOMWJIUTZJRVpsWVhSMWNtVkdiR0ZuUTI5dVptbG5JRDBnZTMwN1hHNGdJRTlpYW1WamRDNWxiblJ5YVdWektIWmhiSFZsSUdGeklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrS1M1bWIzSkZZV05vS0NoYmEyVjVMQ0J5WVhkZEtTQTlQaUI3WEc0Z0lDQWdZMjl1YzNRZ2JtOXliV0ZzYVhwbFpFdGxlU0E5SUc1dmNtMWhiR2w2WlU5aWFtVmpkRXRsZVNoclpYa3BPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdjbUYzSUNFOVBTQmNJblZ1WkdWbWFXNWxaRndpS1NCN1hHNGdJQ0FnSUNCeVpYTjFiSFJiYm05eWJXRnNhWHBsWkV0bGVWMGdQU0J1YjNKdFlXeHBlbVZHWldGMGRYSmxRMjl1Wm1sbktISmhkeWtnUHo4Z2NtRjNPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNGdJSEpsZEhWeWJpQnlaWE4xYkhRN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVZHWldGMGRYSmxVbVZuYVhOMGNua29YRzRnSUhaaGJIVmxPaUIxYm10dWIzZHVYRzRwT2lCR1pXRjBkWEpsUm14aFoxSmxaMmx6ZEhKNUlIdGNiaUFnYVdZZ0tDRjJZV3gxWlNCOGZDQjBlWEJsYjJZZ2RtRnNkV1VnSVQwOUlGd2liMkpxWldOMFhDSWdmSHdnUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElISmxkSFZ5YmlCN2ZUdGNiaUFnY21WMGRYSnVJRTlpYW1WamRDNWxiblJ5YVdWektIWmhiSFZsSUdGeklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrS1M1eVpXUjFZMlVvWEc0Z0lDQWdLR0ZqWXl3Z1cydGxlU3dnY21GM1hTa2dQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdibTl5YldGc2FYcGxaRXRsZVNBOUlHNXZjbTFoYkdsNlpVWmxZWFIxY21WT1lXMWxLR3RsZVNrN1hHNGdJQ0FnSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrVm1Gc2RXVWdQU0J1YjNKdFlXeHBlbVZHWldGMGRYSmxRMjl1Wm1sbktISmhkeWs3WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUc1dmNtMWhiR2w2WldSV1lXeDFaU0FoUFQwZ1hDSjFibVJsWm1sdVpXUmNJaWtnZTF4dUlDQWdJQ0FnSUNCaFkyTmJibTl5YldGc2FYcGxaRXRsZVYwZ1BTQnViM0p0WVd4cGVtVmtWbUZzZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnWVdOak8xeHVJQ0FnSUgwc1hHNGdJQ0FnZTMwZ1lYTWdSbVZoZEhWeVpVWnNZV2RTWldkcGMzUnllVnh1SUNBcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOR1pXRjBkWEpsUm14aFowVnVZV0pzWldRb2RtRnNkV1U2SUVabFlYUjFjbVZHYkdGblZtRnNkV1VnZkNCMWJtUmxabWx1WldRcE9pQmliMjlzWldGdUlIdGNiaUFnYVdZZ0tIWmhiSFZsSUQwOVBTQjBjblZsS1NCeVpYUjFjbTRnZEhKMVpUdGNiaUFnY21WMGRYSnVJQ0VoZG1Gc2RXVWdKaVlnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0JjSW05aWFtVmpkRndpTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5HWldGMGRYSmxSbXhoWjBWdVlXSnNaV1JDZVU1aGJXVW9YRzRnSUhKbFoybHpkSEo1T2lCR1pXRjBkWEpsUm14aFoxSmxaMmx6ZEhKNUlId2dkVzVrWldacGJtVmtMRnh1SUNCbVpXRjBkWEpsVG1GdFpUb2djM1J5YVc1blhHNHBPaUJpYjI5c1pXRnVJSHRjYmlBZ2NtVjBkWEp1SUdselJtVmhkSFZ5WlVac1lXZEZibUZpYkdWa0tISmxaMmx6ZEhKNVB5NWJibTl5YldGc2FYcGxSbVZoZEhWeVpVNWhiV1VvWm1WaGRIVnlaVTVoYldVcFhTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzSnRZV3hwZW1WR1pXRjBkWEpsVW5Wc1pTaGNiaUFnWm1WaGRIVnlaWE02SUhOMGNtbHVaMXRkTEZ4dUlDQnRZWFJqYURvZ1JtVmhkSFZ5WlVac1lXZE5ZWFJqYUUxdlpHVWdQU0JjSW1GdWVWd2lYRzRwT2lCR1pXRjBkWEpsUm14aFoxSjFiR1VnZTF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUdabFlYUjFjbVZ6T2lCYkxpNHVibVYzSUZObGRDaG1aV0YwZFhKbGN5NXRZWEFvYm05eWJXRnNhWHBsUm1WaGRIVnlaVTVoYldVcExtWnBiSFJsY2loQ2IyOXNaV0Z1S1NsZExGeHVJQ0FnSUcxaGRHTm9MRnh1SUNCOU8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVhOR1pXRjBkWEpsVW5Wc1pWTmhkR2x6Wm1sbFpDaGNiaUFnY25Wc1pUb2dSbVZoZEhWeVpVWnNZV2RTZFd4bElId2dkVzVrWldacGJtVmtMRnh1SUNCeVpXZHBjM1J5ZVRvZ1JtVmhkSFZ5WlVac1lXZFNaV2RwYzNSeWVTQjhJSFZ1WkdWbWFXNWxaRnh1S1RvZ1ltOXZiR1ZoYmlCN1hHNGdJR2xtSUNnaGNuVnNaU0I4ZkNCeWRXeGxMbVpsWVhSMWNtVnpMbXhsYm1kMGFDQTlQVDBnTUNrZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUdOdmJuTjBJR1Z1WVdKc1pXUWdQU0J5ZFd4bExtWmxZWFIxY21WekxtWnBiSFJsY2lnb1ptVmhkSFZ5WlNrZ1BUNWNiaUFnSUNCcGMwWmxZWFIxY21WR2JHRm5SVzVoWW14bFpFSjVUbUZ0WlNoeVpXZHBjM1J5ZVN3Z1ptVmhkSFZ5WlNsY2JpQWdLVHRjYmlBZ2FXWWdLSEoxYkdVdWJXRjBZMmdnUFQwOUlGd2lZV3hzWENJcElISmxkSFZ5YmlCbGJtRmliR1ZrTG14bGJtZDBhQ0E5UFQwZ2NuVnNaUzVtWldGMGRYSmxjeTVzWlc1bmRHZzdYRzRnSUhKbGRIVnliaUJsYm1GaWJHVmtMbXhsYm1kMGFDQStJREE3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMFpsWVhSMWNtVlNkV3hsUW14dlkydGxaQ2hjYmlBZ2NuVnNaVG9nUm1WaGRIVnlaVVpzWVdkU2RXeGxJSHdnZFc1a1pXWnBibVZrTEZ4dUlDQnlaV2RwYzNSeWVUb2dSbVZoZEhWeVpVWnNZV2RTWldkcGMzUnllU0I4SUhWdVpHVm1hVzVsWkZ4dUtUb2dZbTl2YkdWaGJpQjdYRzRnSUdsbUlDZ2hjblZzWlNCOGZDQnlkV3hsTG1abFlYUjFjbVZ6TG14bGJtZDBhQ0E5UFQwZ01Da2djbVYwZFhKdUlHWmhiSE5sTzF4dUlDQnlaWFIxY200Z2NuVnNaUzVtWldGMGRYSmxjeTV6YjIxbEtDaG1aV0YwZFhKbEtTQTlQaUJwYzBabFlYUjFjbVZHYkdGblJXNWhZbXhsWkVKNVRtRnRaU2h5WldkcGMzUnllU3dnWm1WaGRIVnlaU2twTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZoWkUxbGRHRmtZWFJoUEZRZ1BTQjFibXR1YjNkdVBpaGNiaUFnZEdGeVoyVjBPaUJ2WW1wbFkzUXNYRzRnSUd0bGVUb2djM1J5YVc1blhHNHBPaUJVSUh3Z2RXNWtaV1pwYm1Wa0lIdGNiaUFnY21WMGRYSnVJRTFsZEdGa1lYUmhMbWRsZENoMFlYSm5aWFFnWVhNZ1lXNTVMQ0JyWlhrcElHRnpJRlFnZkNCMWJtUmxabWx1WldRN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVZHWldGMGRYSmxVM1ZpYW1WamRGUjVjR1VvWEc0Z0lITjFZbXBsWTNSVWVYQmxPaUJHWldGMGRYSmxSbXhoWjBGalkyVnpjMU4xWW1wbFkzUlVlWEJsSUh3Z2MzUnlhVzVuWEc0cE9pQkdaV0YwZFhKbFJteGhaMEZqWTJWemMxTjFZbXBsWTNSVWVYQmxJSHRjYmlBZ2NtVjBkWEp1SUhOMVltcGxZM1JVZVhCbExuUnlhVzBvS1M1MGIweHZkMlZ5UTJGelpTZ3BJR0Z6SUVabFlYUjFjbVZHYkdGblFXTmpaWE56VTNWaWFtVmpkRlI1Y0dVN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNKdFlXeHBlbVZHWldGMGRYSmxVM1ZpYW1WamRFdGxlU2h6ZFdKcVpXTjBTMlY1T2lCemRISnBibWNwT2lCemRISnBibWNnZTF4dUlDQnlaWFIxY200Z2MzVmlhbVZqZEV0bGVTNTBjbWx0S0NrN1hHNTlYRzRpWFgwPSJdfQ==
|
|
@@ -13,15 +13,15 @@ const ConditionExpressionEvaluator_js_1 = require("./../loops/ConditionExpressio
|
|
|
13
13
|
function readSwitchMetadata(context) {
|
|
14
14
|
const meta = context.node.graph?.metadata;
|
|
15
15
|
if (!meta)
|
|
16
|
-
return { cases: [], defaultPort: "default", hasDefault:
|
|
16
|
+
return { cases: [], defaultPort: "default", hasDefault: false };
|
|
17
17
|
const switchMeta = meta["switch"];
|
|
18
18
|
if (!switchMeta || !Array.isArray(switchMeta.cases)) {
|
|
19
|
-
return { cases: [], defaultPort: "default", hasDefault:
|
|
19
|
+
return { cases: [], defaultPort: "default", hasDefault: false };
|
|
20
20
|
}
|
|
21
21
|
return {
|
|
22
22
|
cases: switchMeta.cases,
|
|
23
23
|
defaultPort: switchMeta.defaultPort ?? "default",
|
|
24
|
-
hasDefault: switchMeta.hasDefault
|
|
24
|
+
hasDefault: switchMeta.hasDefault === true,
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
@@ -47,8 +47,8 @@ function isConditionExpression(cond) {
|
|
|
47
47
|
*
|
|
48
48
|
* Evaluates each case's condition in order and routes the input to the
|
|
49
49
|
* first matching case's output port. When no case matches:
|
|
50
|
-
* - If `hasDefault` is `true
|
|
51
|
-
* - If `hasDefault` is `false
|
|
50
|
+
* - If `hasDefault` is `true`, routes to the `default` output port.
|
|
51
|
+
* - If `hasDefault` is `false` (the default), throws `GRAPH_SWITCH_NO_MATCH`.
|
|
52
52
|
*
|
|
53
53
|
* Condition evaluation:
|
|
54
54
|
* - `ConditionExpression` — evaluated via {@link ConditionExpressionEvaluator}.
|
|
@@ -71,8 +71,8 @@ class SwitchGraphNodeExecutor {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
// No case matched — route to the default port when it is enabled.
|
|
74
|
-
if (meta.hasDefault
|
|
75
|
-
|
|
74
|
+
if (meta.hasDefault !== true) {
|
|
75
|
+
throw new GraphExecutionError_js_1.GraphExecutionError("No switch case matched and default port is not enabled", "GRAPH_SWITCH_NO_MATCH", { cases: meta.cases.map((c) => c.id) });
|
|
76
76
|
}
|
|
77
77
|
const defaultPort = meta.defaultPort ?? "default";
|
|
78
78
|
return { [defaultPort]: inputValue };
|
|
@@ -116,5 +116,5 @@ class SwitchGraphNodeExecutor {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
exports.SwitchGraphNodeExecutor = SwitchGraphNodeExecutor;
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2V4ZWN1dGlvbi9Td2l0Y2hHcmFwaE5vZGVFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsbURBQThDO0FBR3JGOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQ3pCLE9BQThCO0lBRTlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBRXBCLENBQUM7SUFDZCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQW1DLENBQUM7SUFDcEUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUNELE9BQU87UUFDTCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUztRQUNoRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxLQUFLO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUF5QjtJQUNoRCxPQUFPLENBQ0wsT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixJQUFJLEtBQUss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QUMsUUFBK0MsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDdEMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixLQUFLO1lBQ0wsSUFBSSxFQUFHLEVBQUUsRUFBRSxJQUE0QyxJQUFJLFNBQVM7WUFDcEUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUEyQjtZQUN0QyxLQUFLLEVBQ0YsRUFBRSxFQUFFLEtBQTZEO2dCQUNsRSxTQUFTO1lBQ1gsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUVIO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvZXhlY3V0aW9uL1N3aXRjaEdyYXBoTm9kZUV4ZWN1dG9yXG4gKiBAc3VtbWFyeSBFeGVjdXRvciBmb3IgdGhlIFN3aXRjaCBmbG93LWNvbnRyb2wgbm9kZSAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICogQGRlc2NyaXB0aW9uIEV2YWx1YXRlcyBlYWNoIGNhc2UncyBjb25kaXRpb24gYWdhaW5zdCB0aGUgbm9kZSdzIGlucHV0IGFuZFxuICogcm91dGVzIHRoZSBpbnB1dCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgY2FzZSdzIG91dHB1dCBwb3J0LiBGYWxscyBiYWNrIHRvXG4gKiB0aGUgYGRlZmF1bHRgIG91dHB1dCB3aGVuIG5vIGNhc2UgbWF0Y2hlcy4gU3VwcG9ydHMgYm90aFxuICoge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb259IChncmFwaGljYWwgbW9kZSkgYW5kIHtAbGluayBDb2RlQ29uZGl0aW9ufVxuICogKGNvZGUgbW9kZSB2aWEgdGhlIHBsdWdnYWJsZSB7QGxpbmsgQ29kZVNhbmRib3hFdmFsdWF0b3J9KS5cbiAqL1xuaW1wb3J0IHR5cGUgeyBHcmFwaE5vZGVFeGVjdXRvciB9IGZyb20gXCIuL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblZhbHVlcyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuICBTd2l0Y2hDYXNlQ29uZGl0aW9uLFxuICBTd2l0Y2hOb2RlTWV0YWRhdGEsXG4gIENvbmRpdGlvbkV4cHJlc3Npb24sXG4gIENvZGVDb25kaXRpb24sXG59IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uRXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoRXhlY3V0aW9uRXJyb3JcIjtcbmltcG9ydCB7IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IgfSBmcm9tIFwiLi4vbG9vcHMvQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvclwiO1xuaW1wb3J0IHR5cGUgeyBDb2RlU2FuZGJveEV2YWx1YXRvciB9IGZyb20gXCIuL0NvZGVTYW5kYm94RXZhbHVhdG9yXCI7XG5cbi8qKlxuICogUmVhZHMgdGhlIFN3aXRjaCBtZXRhZGF0YSBmcm9tIHRoZSBub2RlIGRlZmluaXRpb24ncyBncmFwaCBtZXRhZGF0YS5cbiAqXG4gKiBUaGUgbWV0YWRhdGEgaXMgc3RvcmVkIHVuZGVyIGBncmFwaC5tZXRhZGF0YS5zd2l0Y2hgICh0aGUgbG9jYXRpb24gdXNlZCBieVxuICogc3RhdGljYWxseS1kZWNsYXJlZCBgQG5vZGVgIHdvcmtmbG93cykuIFdoZW4gYWJzZW50LCBmYWxscyBiYWNrIHRvIGFuIGVtcHR5XG4gKiBkZWZhdWx0IHdpdGggdGhlIGBkZWZhdWx0YCBwb3J0IGVuYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIHJlYWRTd2l0Y2hNZXRhZGF0YShcbiAgY29udGV4dDogR3JhcGhFeGVjdXRpb25Db250ZXh0XG4pOiBTd2l0Y2hOb2RlTWV0YWRhdGEge1xuICBjb25zdCBtZXRhID0gY29udGV4dC5ub2RlLmdyYXBoPy5tZXRhZGF0YSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKCFtZXRhKSByZXR1cm4geyBjYXNlczogW10sIGRlZmF1bHRQb3J0OiBcImRlZmF1bHRcIiwgaGFzRGVmYXVsdDogdHJ1ZSB9O1xuICBjb25zdCBzd2l0Y2hNZXRhID0gbWV0YVtcInN3aXRjaFwiXSBhcyBTd2l0Y2hOb2RlTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG4gIGlmICghc3dpdGNoTWV0YSB8fCAhQXJyYXkuaXNBcnJheShzd2l0Y2hNZXRhLmNhc2VzKSkge1xuICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiB0cnVlIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjYXNlczogc3dpdGNoTWV0YS5jYXNlcyxcbiAgICBkZWZhdWx0UG9ydDogc3dpdGNoTWV0YS5kZWZhdWx0UG9ydCA/PyBcImRlZmF1bHRcIixcbiAgICBoYXNEZWZhdWx0OiBzd2l0Y2hNZXRhLmhhc0RlZmF1bHQgIT09IGZhbHNlLFxuICB9O1xufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBhIGBDb2RlQ29uZGl0aW9uYCAoaGFzIGB0eXBlOiBcImNvZGVcImApLlxuICovXG5mdW5jdGlvbiBpc0NvZGVDb25kaXRpb24oY29uZDogU3dpdGNoQ2FzZUNvbmRpdGlvbik6IGNvbmQgaXMgQ29kZUNvbmRpdGlvbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGNvbmQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBjb25kICE9PSBudWxsICYmXG4gICAgXCJ0eXBlXCIgaW4gY29uZCAmJlxuICAgIGNvbmQudHlwZSA9PT0gXCJjb2RlXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKGhhcyBgb3BgIGZpZWxkKS5cbiAqL1xuZnVuY3Rpb24gaXNDb25kaXRpb25FeHByZXNzaW9uKFxuICBjb25kOiBTd2l0Y2hDYXNlQ29uZGl0aW9uXG4pOiBjb25kIGlzIENvbmRpdGlvbkV4cHJlc3Npb24ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBjb25kID09PSBcIm9iamVjdFwiICYmXG4gICAgY29uZCAhPT0gbnVsbCAmJlxuICAgIFwib3BcIiBpbiBjb25kICYmXG4gICAgdHlwZW9mIGNvbmQub3AgPT09IFwic3RyaW5nXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUuZmxvdy5zd2l0Y2hgIG5vZGVzLlxuICpcbiAqIEV2YWx1YXRlcyBlYWNoIGNhc2UncyBjb25kaXRpb24gaW4gb3JkZXIgYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlXG4gKiBmaXJzdCBtYXRjaGluZyBjYXNlJ3Mgb3V0cHV0IHBvcnQuIFdoZW4gbm8gY2FzZSBtYXRjaGVzOlxuICogLSBJZiBgaGFzRGVmYXVsdGAgaXMgYHRydWVgIChvciBvbWl0dGVkKSwgcm91dGVzIHRvIHRoZSBgZGVmYXVsdGAgb3V0cHV0IHBvcnQuXG4gKiAtIElmIGBoYXNEZWZhdWx0YCBpcyBgZmFsc2VgLCByZXR1cm5zIGFuIGVtcHR5IG91dHB1dCAodGhlIGlucHV0IGlzIGRyb3BwZWQpLlxuICpcbiAqIENvbmRpdGlvbiBldmFsdWF0aW9uOlxuICogLSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAg4oCUIGV2YWx1YXRlZCB2aWEge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9LlxuICogLSBgQ29kZUNvbmRpdGlvbmAg4oCUIGV2YWx1YXRlZCB2aWEgdGhlIHBsdWdnYWJsZSB7QGxpbmsgQ29kZVNhbmRib3hFdmFsdWF0b3J9XG4gKiAgIGZyb20gdGhlIGVuZ2luZSdzIGNvbmZpZy4gVGhyb3dzIGBHUkFQSF9DT0RFX1NBTkRCT1hfTk9UX0NPTkZJR1VSRURgXG4gKiAgIHdoZW4gbm8gZXZhbHVhdG9yIGlzIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTd2l0Y2hHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZT86IHsgY29kZVNhbmRib3hFdmFsdWF0b3I/OiBDb2RlU2FuZGJveEV2YWx1YXRvciB9XG4gICkge31cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxHcmFwaEV4ZWN1dGlvblZhbHVlcz4ge1xuICAgIGNvbnN0IG1ldGEgPSByZWFkU3dpdGNoTWV0YWRhdGEoY29udGV4dCk7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0W1widmFsdWVcIl0gPz8gaW5wdXQ7XG5cbiAgICBmb3IgKGNvbnN0IHN3aXRjaENhc2Ugb2YgbWV0YS5jYXNlcykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgIHN3aXRjaENhc2UuY29uZGl0aW9uLFxuICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB7IFtzd2l0Y2hDYXNlLm91dHB1dFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm8gY2FzZSBtYXRjaGVkIOKAlCByb3V0ZSB0byB0aGUgZGVmYXVsdCBwb3J0IHdoZW4gaXQgaXMgZW5hYmxlZC5cbiAgICBpZiAobWV0YS5oYXNEZWZhdWx0ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0UG9ydCA9IG1ldGEuZGVmYXVsdFBvcnQgPz8gXCJkZWZhdWx0XCI7XG4gICAgcmV0dXJuIHsgW2RlZmF1bHRQb3J0XTogaW5wdXRWYWx1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIHNpbmdsZSBzd2l0Y2ggY2FzZSBjb25kaXRpb24uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKFxuICAgIGNvbmRpdGlvbjogU3dpdGNoQ2FzZUNvbmRpdGlvbixcbiAgICBpbnB1dFZhbHVlOiB1bmtub3duLFxuICAgIGZ1bGxJbnB1dDogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgY29udGV4dDogR3JhcGhFeGVjdXRpb25Db250ZXh0XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChpc0NvZGVDb25kaXRpb24oY29uZGl0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb2RlQ29uZGl0aW9uKGNvbmRpdGlvbiwgZnVsbElucHV0LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uKGNvbmRpdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUoY29uZGl0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgIFwiVW5rbm93biBzd2l0Y2ggY2FzZSBjb25kaXRpb24gdHlwZSDigJQgbXVzdCBiZSBDb25kaXRpb25FeHByZXNzaW9uIChvcCkgb3IgQ29kZUNvbmRpdGlvbiAodHlwZTogJ2NvZGUnKVwiLFxuICAgICAgXCJHUkFQSF9VTktOT1dOX1NXSVRDSF9DT05ESVRJT05cIixcbiAgICAgIHsgY29uZGl0aW9uIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIGNvZGUgY29uZGl0aW9uIHZpYSB0aGUgcGx1Z2dhYmxlIHNhbmRib3ggZXZhbHVhdG9yLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBldmFsdWF0ZUNvZGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBDb2RlQ29uZGl0aW9uLFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZXZhbHVhdG9yID0gdGhpcy5lbmdpbmU/LmNvZGVTYW5kYm94RXZhbHVhdG9yO1xuICAgIGlmICghZXZhbHVhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgICAgXCJDb2RlIGNvbmRpdGlvbnMgcmVxdWlyZSBhIENvZGVTYW5kYm94RXZhbHVhdG9yIHRvIGJlIHJlZ2lzdGVyZWQgaW4gR3JhcGhFeGVjdXRpb25FbmdpbmVDb25maWcuY29kZVNhbmRib3hFdmFsdWF0b3JcIixcbiAgICAgICAgXCJHUkFQSF9DT0RFX1NBTkRCT1hfTk9UX0NPTkZJR1VSRURcIixcbiAgICAgICAgeyBjb2RlOiBjb25kaXRpb24uY29kZSB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IGNvbnRleHQubG9nKGBFdmFsdWF0aW5nIGNvZGUgY29uZGl0aW9uYCwge1xuICAgICAgbGFuZ3VhZ2U6IGNvbmRpdGlvbi5sYW5ndWFnZSA/PyBcImphdmFzY3JpcHRcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IG1kID0gY29udGV4dC5tZXRhZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV2YWx1YXRvci5ldmFsdWF0ZSh7XG4gICAgICBjb2RlOiBjb25kaXRpb24uY29kZSxcbiAgICAgIGxhbmd1YWdlOiBjb25kaXRpb24ubGFuZ3VhZ2UsXG4gICAgICBpbnB1dCxcbiAgICAgIHZhcnM6IChtZD8udmFycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkgPz8gdW5kZWZpbmVkLFxuICAgICAgaXRlbTogbWQ/Lml0ZW0sXG4gICAgICBpbmRleDogbWQ/LmluZGV4IGFzIG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICAgIG5vZGVzOlxuICAgICAgICAobWQ/Lm5vZGVzIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZCkgPz9cbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlciBhcyB1bmtub3duIGFzXG4gICAgICAgIHwgaW1wb3J0KFwiLi9Db2RlU2FuZGJveEV2YWx1YXRvclwiKS5TYW5kYm94TG9nZ2VyXG4gICAgICAgIHwgdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJTd2l0Y2hHcmFwaE5vZGVFeGVjdXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrRUFBeUU7QUFDekUsZ0dBQTBGO0FBQzFGOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQUMsT0FBTztJQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDMUMsSUFBSSxDQUFDLElBQUk7UUFDTCxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUNELE9BQU87UUFDSCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUztRQUNoRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxLQUFLO0tBQzlDLENBQUM7QUFDTixDQUFDO0FBQ0Q7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUFJO0lBQ3pCLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRO1FBQzVCLElBQUksS0FBSyxJQUFJO1FBQ2IsTUFBTSxJQUFJLElBQUk7UUFDZCxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFDRDs7R0FFRztB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QUFFLFNBQVMsQ0FBQyxRQUFRO1lBQzVCLEtBQUs7WUFDTCxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxTQUFTO1lBQzNCLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSTtZQUNkLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUs7Z0JBQ1osU0FBUztZQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztDQUNKO0FBMURELDBEQTBEQztBQUNELDg0WUFBODRZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FcnJvciB9IGZyb20gXCIuLy4uL2Vycm9ycy9HcmFwaEV4ZWN1dGlvbkVycm9yLmpzXCI7XG5pbXBvcnQgeyBDb25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yIH0gZnJvbSBcIi4vLi4vbG9vcHMvQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvci5qc1wiO1xuLyoqXG4gKiBSZWFkcyB0aGUgU3dpdGNoIG1ldGFkYXRhIGZyb20gdGhlIG5vZGUgZGVmaW5pdGlvbidzIGdyYXBoIG1ldGFkYXRhLlxuICpcbiAqIFRoZSBtZXRhZGF0YSBpcyBzdG9yZWQgdW5kZXIgYGdyYXBoLm1ldGFkYXRhLnN3aXRjaGAgKHRoZSBsb2NhdGlvbiB1c2VkIGJ5XG4gKiBzdGF0aWNhbGx5LWRlY2xhcmVkIGBAbm9kZWAgd29ya2Zsb3dzKS4gV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gYW4gZW1wdHlcbiAqIGRlZmF1bHQgd2l0aCB0aGUgYGRlZmF1bHRgIHBvcnQgZW5hYmxlZC5cbiAqL1xuZnVuY3Rpb24gcmVhZFN3aXRjaE1ldGFkYXRhKGNvbnRleHQpIHtcbiAgICBjb25zdCBtZXRhID0gY29udGV4dC5ub2RlLmdyYXBoPy5tZXRhZGF0YTtcbiAgICBpZiAoIW1ldGEpXG4gICAgICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiB0cnVlIH07XG4gICAgY29uc3Qgc3dpdGNoTWV0YSA9IG1ldGFbXCJzd2l0Y2hcIl07XG4gICAgaWYgKCFzd2l0Y2hNZXRhIHx8ICFBcnJheS5pc0FycmF5KHN3aXRjaE1ldGEuY2FzZXMpKSB7XG4gICAgICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNhc2VzOiBzd2l0Y2hNZXRhLmNhc2VzLFxuICAgICAgICBkZWZhdWx0UG9ydDogc3dpdGNoTWV0YS5kZWZhdWx0UG9ydCA/PyBcImRlZmF1bHRcIixcbiAgICAgICAgaGFzRGVmYXVsdDogc3dpdGNoTWV0YS5oYXNEZWZhdWx0ICE9PSBmYWxzZSxcbiAgICB9O1xufVxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgYSBgQ29kZUNvbmRpdGlvbmAgKGhhcyBgdHlwZTogXCJjb2RlXCJgKS5cbiAqL1xuZnVuY3Rpb24gaXNDb2RlQ29uZGl0aW9uKGNvbmQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBjb25kID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGNvbmQgIT09IG51bGwgJiZcbiAgICAgICAgXCJ0eXBlXCIgaW4gY29uZCAmJlxuICAgICAgICBjb25kLnR5cGUgPT09IFwiY29kZVwiKTtcbn1cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGEgY29uZGl0aW9uIGlzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gIChoYXMgYG9wYCBmaWVsZCkuXG4gKi9cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uRXhwcmVzc2lvbihjb25kKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgY29uZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBjb25kICE9PSBudWxsICYmXG4gICAgICAgIFwib3BcIiBpbiBjb25kICYmXG4gICAgICAgIHR5cGVvZiBjb25kLm9wID09PSBcInN0cmluZ1wiKTtcbn1cbi8qKlxuICogRXhlY3V0b3IgZm9yIGBjb3JlLmZsb3cuc3dpdGNoYCBub2Rlcy5cbiAqXG4gKiBFdmFsdWF0ZXMgZWFjaCBjYXNlJ3MgY29uZGl0aW9uIGluIG9yZGVyIGFuZCByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZVxuICogZmlyc3QgbWF0Y2hpbmcgY2FzZSdzIG91dHB1dCBwb3J0LiBXaGVuIG5vIGNhc2UgbWF0Y2hlczpcbiAqIC0gSWYgYGhhc0RlZmF1bHRgIGlzIGB0cnVlYCAob3Igb21pdHRlZCksIHJvdXRlcyB0byB0aGUgYGRlZmF1bHRgIG91dHB1dCBwb3J0LlxuICogLSBJZiBgaGFzRGVmYXVsdGAgaXMgYGZhbHNlYCwgcmV0dXJucyBhbiBlbXB0eSBvdXRwdXQgKHRoZSBpbnB1dCBpcyBkcm9wcGVkKS5cbiAqXG4gKiBDb25kaXRpb24gZXZhbHVhdGlvbjpcbiAqIC0gYENvbmRpdGlvbkV4cHJlc3Npb25gIOKAlCBldmFsdWF0ZWQgdmlhIHtAbGluayBDb25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yfS5cbiAqIC0gYENvZGVDb25kaXRpb25gIOKAlCBldmFsdWF0ZWQgdmlhIHRoZSBwbHVnZ2FibGUge0BsaW5rIENvZGVTYW5kYm94RXZhbHVhdG9yfVxuICogICBmcm9tIHRoZSBlbmdpbmUncyBjb25maWcuIFRocm93cyBgR1JBUEhfQ09ERV9TQU5EQk9YX05PVF9DT05GSUdVUkVEYFxuICogICB3aGVuIG5vIGV2YWx1YXRvciBpcyByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgY2xhc3MgU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGVuZ2luZSkge1xuICAgICAgICB0aGlzLmVuZ2luZSA9IGVuZ2luZTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IoKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBtZXRhID0gcmVhZFN3aXRjaE1ldGFkYXRhKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXRbXCJ2YWx1ZVwiXSA/PyBpbnB1dDtcbiAgICAgICAgZm9yIChjb25zdCBzd2l0Y2hDYXNlIG9mIG1ldGEuY2FzZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKHN3aXRjaENhc2UuY29uZGl0aW9uLCBpbnB1dFZhbHVlLCBpbnB1dCwgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IFtzd2l0Y2hDYXNlLm91dHB1dFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gY2FzZSBtYXRjaGVkIOKAlCByb3V0ZSB0byB0aGUgZGVmYXVsdCBwb3J0IHdoZW4gaXQgaXMgZW5hYmxlZC5cbiAgICAgICAgaWYgKG1ldGEuaGFzRGVmYXVsdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZhdWx0UG9ydCA9IG1ldGEuZGVmYXVsdFBvcnQgPz8gXCJkZWZhdWx0XCI7XG4gICAgICAgIHJldHVybiB7IFtkZWZhdWx0UG9ydF06IGlucHV0VmFsdWUgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGVzIGEgc2luZ2xlIHN3aXRjaCBjYXNlIGNvbmRpdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBldmFsdWF0ZUNvbmRpdGlvbihjb25kaXRpb24sIGlucHV0VmFsdWUsIGZ1bGxJbnB1dCwgY29udGV4dCkge1xuICAgICAgICBpZiAoaXNDb2RlQ29uZGl0aW9uKGNvbmRpdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlQ29kZUNvbmRpdGlvbihjb25kaXRpb24sIGZ1bGxJbnB1dCwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29uZGl0aW9uRXhwcmVzc2lvbihjb25kaXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uRXZhbHVhdG9yLmV2YWx1YXRlKGNvbmRpdGlvbiwgaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEdyYXBoRXhlY3V0aW9uRXJyb3IoXCJVbmtub3duIHN3aXRjaCBjYXNlIGNvbmRpdGlvbiB0eXBlIOKAlCBtdXN0IGJlIENvbmRpdGlvbkV4cHJlc3Npb24gKG9wKSBvciBDb2RlQ29uZGl0aW9uICh0eXBlOiAnY29kZScpXCIsIFwiR1JBUEhfVU5LTk9XTl9TV0lUQ0hfQ09ORElUSU9OXCIsIHsgY29uZGl0aW9uIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZXMgYSBjb2RlIGNvbmRpdGlvbiB2aWEgdGhlIHBsdWdnYWJsZSBzYW5kYm94IGV2YWx1YXRvci5cbiAgICAgKi9cbiAgICBhc3luYyBldmFsdWF0ZUNvZGVDb25kaXRpb24oY29uZGl0aW9uLCBpbnB1dCwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBldmFsdWF0b3IgPSB0aGlzLmVuZ2luZT8uY29kZVNhbmRib3hFdmFsdWF0b3I7XG4gICAgICAgIGlmICghZXZhbHVhdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcIkNvZGUgY29uZGl0aW9ucyByZXF1aXJlIGEgQ29kZVNhbmRib3hFdmFsdWF0b3IgdG8gYmUgcmVnaXN0ZXJlZCBpbiBHcmFwaEV4ZWN1dGlvbkVuZ2luZUNvbmZpZy5jb2RlU2FuZGJveEV2YWx1YXRvclwiLCBcIkdSQVBIX0NPREVfU0FOREJPWF9OT1RfQ09ORklHVVJFRFwiLCB7IGNvZGU6IGNvbmRpdGlvbi5jb2RlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGNvbnRleHQubG9nKGBFdmFsdWF0aW5nIGNvZGUgY29uZGl0aW9uYCwge1xuICAgICAgICAgICAgbGFuZ3VhZ2U6IGNvbmRpdGlvbi5sYW5ndWFnZSA/PyBcImphdmFzY3JpcHRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1kID0gY29udGV4dC5tZXRhZGF0YTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXZhbHVhdG9yLmV2YWx1YXRlKHtcbiAgICAgICAgICAgIGNvZGU6IGNvbmRpdGlvbi5jb2RlLFxuICAgICAgICAgICAgbGFuZ3VhZ2U6IGNvbmRpdGlvbi5sYW5ndWFnZSxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdmFyczogbWQ/LnZhcnMgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgaXRlbTogbWQ/Lml0ZW0sXG4gICAgICAgICAgICBpbmRleDogbWQ/LmluZGV4LFxuICAgICAgICAgICAgbm9kZXM6IG1kPy5ub2RlcyA/P1xuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxvZ2dlcjogY29udGV4dC5sb2dnZXIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gISFyZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVTNkcGRHTm9SM0poY0doT2IyUmxSWGhsWTNWMGIzSXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk4dUxpOHVMaTl6Y21NdlozSmhjR2d2Wlc1bmFXNWxMMlY0WldOMWRHbHZiaTlUZDJsMFkyaEhjbUZ3YUU1dlpHVkZlR1ZqZFhSdmNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZyUWtFc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMREpEUVVGelF6dEJRVU53UlN4UFFVRlBMRVZCUVVVc05FSkJRVFJDTEVWQlFVVXNiVVJCUVRoRE8wRkJSM0pHT3pzN096czdSMEZOUnp0QlFVTklMRk5CUVZNc2EwSkJRV3RDTEVOQlEzcENMRTlCUVRoQ08wbEJSVGxDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEZGQlJYQkNMRU5CUVVNN1NVRkRaQ3hKUVVGSkxFTkJRVU1zU1VGQlNUdFJRVUZGTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hGUVVGRkxGZEJRVmNzUlVGQlJTeFRRVUZUTEVWQlFVVXNWVUZCVlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGRE8wbEJRekZGTEUxQlFVMHNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVzFETEVOQlFVTTdTVUZEY0VVc1NVRkJTU3hEUVVGRExGVkJRVlVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEVOQlFVTTdVVUZEY0VRc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNWMEZCVnl4RlFVRkZMRk5CUVZNc1JVRkJSU3hWUVVGVkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVOQlFVTTdTVUZEYWtVc1EwRkJRenRKUVVORUxFOUJRVTg3VVVGRFRDeExRVUZMTEVWQlFVVXNWVUZCVlN4RFFVRkRMRXRCUVVzN1VVRkRka0lzVjBGQlZ5eEZRVUZGTEZWQlFWVXNRMEZCUXl4WFFVRlhMRWxCUVVrc1UwRkJVenRSUVVOb1JDeFZRVUZWTEVWQlFVVXNWVUZCVlN4RFFVRkRMRlZCUVZVc1MwRkJTeXhMUVVGTE8wdEJRelZETEVOQlFVTTdRVUZEU2l4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeFRRVUZUTEdWQlFXVXNRMEZCUXl4SlFVRjVRanRKUVVOb1JDeFBRVUZQTEVOQlEwd3NUMEZCVHl4SlFVRkpMRXRCUVVzc1VVRkJVVHRSUVVONFFpeEpRVUZKTEV0QlFVc3NTVUZCU1R0UlFVTmlMRTFCUVUwc1NVRkJTU3hKUVVGSk8xRkJRMlFzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCU3l4TlFVRk5MRU5CUTNKQ0xFTkJRVU03UVVGRFNpeERRVUZETzBGQlJVUTdPMGRCUlVjN1FVRkRTQ3hUUVVGVExIRkNRVUZ4UWl4RFFVTTFRaXhKUVVGNVFqdEpRVVY2UWl4UFFVRlBMRU5CUTB3c1QwRkJUeXhKUVVGSkxFdEJRVXNzVVVGQlVUdFJRVU40UWl4SlFVRkpMRXRCUVVzc1NVRkJTVHRSUVVOaUxFbEJRVWtzU1VGQlNTeEpRVUZKTzFGQlExb3NUMEZCVHl4SlFVRkpMRU5CUVVNc1JVRkJSU3hMUVVGTExGRkJRVkVzUTBGRE5VSXNRMEZCUXp0QlFVTktMRU5CUVVNN1FVRkZSRHM3T3pzN096czdPenM3T3p0SFFXRkhPMEZCUTBnc1RVRkJUU3hQUVVGUExIVkNRVUYxUWp0SlFVZHNReXhaUVVOdFFpeE5RVUYzUkR0UlFVRjRSQ3hYUVVGTkxFZEJRVTRzVFVGQlRTeERRVUZyUkR0UlFVZ3hSQ3gzUWtGQmJVSXNSMEZCUnl4SlFVRkpMRFJDUVVFMFFpeEZRVUZGTEVOQlFVTTdTVUZKZGtVc1EwRkJRenRKUVVWS0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlExZ3NTMEZCTWtJc1JVRkRNMElzVDBGQk9FSTdVVUZGT1VJc1RVRkJUU3hKUVVGSkxFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGRGVrTXNUVUZCVFN4VlFVRlZMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEV0QlFVc3NRMEZCUXp0UlFVVXpReXhMUVVGTExFMUJRVTBzVlVGQlZTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOd1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZETVVNc1ZVRkJWU3hEUVVGRExGTkJRVk1zUlVGRGNFSXNWVUZCVlN4RlFVTldMRXRCUVVzc1JVRkRUQ3hQUVVGUExFTkJRMUlzUTBGQlF6dFpRVU5HTEVsQlFVa3NUMEZCVHl4RlFVRkZMRU5CUVVNN1owSkJRMW9zVDBGQlR5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRlZCUVZVc1EwRkJReXhGUVVGRkxGVkJRVlVzUlVGQlJTeERRVUZETzFsQlEycEVMRU5CUVVNN1VVRkRTQ3hEUVVGRE8xRkJSVVFzYTBWQlFXdEZPMUZCUTJ4RkxFbEJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNTMEZCU3l4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVNNVFpeFBRVUZQTEVWQlFVVXNRMEZCUXp0UlFVTmFMRU5CUVVNN1VVRkRSQ3hOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SlFVRkpMRk5CUVZNc1EwRkJRenRSUVVOc1JDeFBRVUZQTEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3hWUVVGVkxFVkJRVVVzUTBGQlF6dEpRVU4yUXl4RFFVRkRPMGxCUlVRN08wOUJSVWM3U1VGRFN5eExRVUZMTEVOQlFVTXNhVUpCUVdsQ0xFTkJRemRDTEZOQlFUaENMRVZCUXpsQ0xGVkJRVzFDTEVWQlEyNUNMRk5CUVN0Q0xFVkJReTlDTEU5QlFUaENPMUZCUlRsQ0xFbEJRVWtzWlVGQlpTeERRVUZETEZOQlFWTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1dVRkRMMElzVDBGQlR5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zVTBGQlV5eEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVOdVJTeERRVUZETzFGQlJVUXNTVUZCU1N4eFFrRkJjVUlzUTBGQlF5eFRRVUZUTEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTNKRExFOUJRVThzU1VGQlNTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExGRkJRVkVzUTBGQlF5eFRRVUZUTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRiRVVzUTBGQlF6dFJRVVZFTEUxQlFVMHNTVUZCU1N4dFFrRkJiVUlzUTBGRE0wSXNkVWRCUVhWSExFVkJRM1pITEdkRFFVRm5ReXhGUVVOb1F5eEZRVUZGTEZOQlFWTXNSVUZCUlN4RFFVTmtMRU5CUVVNN1NVRkRTaXhEUVVGRE8wbEJSVVE3TzA5QlJVYzdTVUZEU3l4TFFVRkxMRU5CUVVNc2NVSkJRWEZDTEVOQlEycERMRk5CUVhkQ0xFVkJRM2hDTEV0QlFUSkNMRVZCUXpOQ0xFOUJRVGhDTzFGQlJUbENMRTFCUVUwc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNiMEpCUVc5Q0xFTkJRVU03VVVGRGNFUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8xbEJRMllzVFVGQlRTeEpRVUZKTEcxQ1FVRnRRaXhEUVVNelFpeHZTRUZCYjBnc1JVRkRjRWdzYlVOQlFXMURMRVZCUTI1RExFVkJRVVVzU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkRla0lzUTBGQlF6dFJRVU5LTEVOQlFVTTdVVUZGUkN4TlFVRk5MRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zTWtKQlFUSkNMRVZCUVVVN1dVRkROME1zVVVGQlVTeEZRVUZGTEZOQlFWTXNRMEZCUXl4UlFVRlJMRWxCUVVrc1dVRkJXVHRUUVVNM1F5eERRVUZETEVOQlFVTTdVVUZGU0N4TlFVRk5MRVZCUVVVc1IwRkJSeXhQUVVGUExFTkJRVU1zVVVGQkswTXNRMEZCUXp0UlFVVnVSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eE5RVUZOTEZOQlFWTXNRMEZCUXl4UlFVRlJMRU5CUVVNN1dVRkRkRU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4SlFVRkpPMWxCUTNCQ0xGRkJRVkVzUlVGQlJTeFRRVUZUTEVOQlFVTXNVVUZCVVR0WlFVTTFRaXhMUVVGTE8xbEJRMHdzU1VGQlNTeEZRVUZITEVWQlFVVXNSVUZCUlN4SlFVRTBReXhKUVVGSkxGTkJRVk03V1VGRGNFVXNTVUZCU1N4RlFVRkZMRVZCUVVVc1JVRkJSU3hKUVVGSk8xbEJRMlFzUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4TFFVRXlRanRaUVVOMFF5eExRVUZMTEVWQlEwWXNSVUZCUlN4RlFVRkZMRXRCUVRaRU8yZENRVU5zUlN4VFFVRlRPMWxCUTFnc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF5eE5RVVZJTzFOQlEyUXNRMEZCUXl4RFFVRkRPMUZCUlVnc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETzBsQlEyeENMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUUcxdlpIVnNaU0JwYm5SbFozSmhkR2x2Ym5NdlozSmhjR2d2WlhobFkzVjBhVzl1TDFOM2FYUmphRWR5WVhCb1RtOWtaVVY0WldOMWRHOXlYRzRnS2lCQWMzVnRiV0Z5ZVNCRmVHVmpkWFJ2Y2lCbWIzSWdkR2hsSUZOM2FYUmphQ0JtYkc5M0xXTnZiblJ5YjJ3Z2JtOWtaU0FvUkVWRFFVWXRNeklnd3FjeU1pNHlMaklwTGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVWMllXeDFZWFJsY3lCbFlXTm9JR05oYzJVbmN5QmpiMjVrYVhScGIyNGdZV2RoYVc1emRDQjBhR1VnYm05a1pTZHpJR2x1Y0hWMElHRnVaRnh1SUNvZ2NtOTFkR1Z6SUhSb1pTQnBibkIxZENCMGJ5QjBhR1VnWm1seWMzUWdiV0YwWTJocGJtY2dZMkZ6WlNkeklHOTFkSEIxZENCd2IzSjBMaUJHWVd4c2N5QmlZV05ySUhSdlhHNGdLaUIwYUdVZ1lHUmxabUYxYkhSZ0lHOTFkSEIxZENCM2FHVnVJRzV2SUdOaGMyVWdiV0YwWTJobGN5NGdVM1Z3Y0c5eWRITWdZbTkwYUZ4dUlDb2dlMEJzYVc1cklFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNTlJQ2huY21Gd2FHbGpZV3dnYlc5a1pTa2dZVzVrSUh0QWJHbHVheUJEYjJSbFEyOXVaR2wwYVc5dWZWeHVJQ29nS0dOdlpHVWdiVzlrWlNCMmFXRWdkR2hsSUhCc2RXZG5ZV0pzWlNCN1FHeHBibXNnUTI5a1pWTmhibVJpYjNoRmRtRnNkV0YwYjNKOUtTNWNiaUFxTDF4dWFXMXdiM0owSUhSNWNHVWdleUJIY21Gd2FFNXZaR1ZGZUdWamRYUnZjaUI5SUdaeWIyMGdYQ0l1TDBkeVlYQm9UbTlrWlVWNFpXTjFkRzl5WENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEdWNGRDQjlJR1p5YjIwZ1hDSXVMMGR5WVhCb1JYaGxZM1YwYVc5dVEyOXVkR1Y0ZEZ3aU8xeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRVY0WldOMWRHbHZibFpoYkhWbGN5QjlJR1p5YjIwZ1hDSXVMaTkwZVhCbGMxd2lPMXh1YVcxd2IzSjBJSFI1Y0dVZ2UxeHVJQ0JUZDJsMFkyaERZWE5sUTI5dVpHbDBhVzl1TEZ4dUlDQlRkMmwwWTJoT2IyUmxUV1YwWVdSaGRHRXNYRzRnSUVOdmJtUnBkR2x2YmtWNGNISmxjM05wYjI0c1hHNGdJRU52WkdWRGIyNWthWFJwYjI0c1hHNTlJR1p5YjIwZ1hDSXVMaTh1TGk5emFHRnlaV1F2ZEhsd1pYTmNJanRjYm1sdGNHOXlkQ0I3SUVkeVlYQm9SWGhsWTNWMGFXOXVSWEp5YjNJZ2ZTQm1jbTl0SUZ3aUxpNHZaWEp5YjNKekwwZHlZWEJvUlhobFkzVjBhVzl1UlhKeWIzSmNJanRjYm1sdGNHOXlkQ0I3SUVOdmJtUnBkR2x2YmtWNGNISmxjM05wYjI1RmRtRnNkV0YwYjNJZ2ZTQm1jbTl0SUZ3aUxpNHZiRzl2Y0hNdlEyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJrVjJZV3gxWVhSdmNsd2lPMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkRiMlJsVTJGdVpHSnZlRVYyWVd4MVlYUnZjaUI5SUdaeWIyMGdYQ0l1TDBOdlpHVlRZVzVrWW05NFJYWmhiSFZoZEc5eVhDSTdYRzVjYmk4cUtseHVJQ29nVW1WaFpITWdkR2hsSUZOM2FYUmphQ0J0WlhSaFpHRjBZU0JtY205dElIUm9aU0J1YjJSbElHUmxabWx1YVhScGIyNG5jeUJuY21Gd2FDQnRaWFJoWkdGMFlTNWNiaUFxWEc0Z0tpQlVhR1VnYldWMFlXUmhkR0VnYVhNZ2MzUnZjbVZrSUhWdVpHVnlJR0JuY21Gd2FDNXRaWFJoWkdGMFlTNXpkMmwwWTJoZ0lDaDBhR1VnYkc5allYUnBiMjRnZFhObFpDQmllVnh1SUNvZ2MzUmhkR2xqWVd4c2VTMWtaV05zWVhKbFpDQmdRRzV2WkdWZ0lIZHZjbXRtYkc5M2N5a3VJRmRvWlc0Z1lXSnpaVzUwTENCbVlXeHNjeUJpWVdOcklIUnZJR0Z1SUdWdGNIUjVYRzRnS2lCa1pXWmhkV3gwSUhkcGRHZ2dkR2hsSUdCa1pXWmhkV3gwWUNCd2IzSjBJR1Z1WVdKc1pXUXVYRzRnS2k5Y2JtWjFibU4wYVc5dUlISmxZV1JUZDJsMFkyaE5aWFJoWkdGMFlTaGNiaUFnWTI5dWRHVjRkRG9nUjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwWlhoMFhHNHBPaUJUZDJsMFkyaE9iMlJsVFdWMFlXUmhkR0VnZTF4dUlDQmpiMjV6ZENCdFpYUmhJRDBnWTI5dWRHVjRkQzV1YjJSbExtZHlZWEJvUHk1dFpYUmhaR0YwWVNCaGMxeHVJQ0FnSUh3Z1VtVmpiM0prUEhOMGNtbHVaeXdnZFc1cmJtOTNiajVjYmlBZ0lDQjhJSFZ1WkdWbWFXNWxaRHRjYmlBZ2FXWWdLQ0Z0WlhSaEtTQnlaWFIxY200Z2V5QmpZWE5sY3pvZ1cxMHNJR1JsWm1GMWJIUlFiM0owT2lCY0ltUmxabUYxYkhSY0lpd2dhR0Z6UkdWbVlYVnNkRG9nZEhKMVpTQjlPMXh1SUNCamIyNXpkQ0J6ZDJsMFkyaE5aWFJoSUQwZ2JXVjBZVnRjSW5OM2FYUmphRndpWFNCaGN5QlRkMmwwWTJoT2IyUmxUV1YwWVdSaGRHRWdmQ0IxYm1SbFptbHVaV1E3WEc0Z0lHbG1JQ2doYzNkcGRHTm9UV1YwWVNCOGZDQWhRWEp5WVhrdWFYTkJjbkpoZVNoemQybDBZMmhOWlhSaExtTmhjMlZ6S1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUI3SUdOaGMyVnpPaUJiWFN3Z1pHVm1ZWFZzZEZCdmNuUTZJRndpWkdWbVlYVnNkRndpTENCb1lYTkVaV1poZFd4ME9pQjBjblZsSUgwN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0JqWVhObGN6b2djM2RwZEdOb1RXVjBZUzVqWVhObGN5eGNiaUFnSUNCa1pXWmhkV3gwVUc5eWREb2djM2RwZEdOb1RXVjBZUzVrWldaaGRXeDBVRzl5ZENBL1B5QmNJbVJsWm1GMWJIUmNJaXhjYmlBZ0lDQm9ZWE5FWldaaGRXeDBPaUJ6ZDJsMFkyaE5aWFJoTG1oaGMwUmxabUYxYkhRZ0lUMDlJR1poYkhObExGeHVJQ0I5TzF4dWZWeHVYRzR2S2lwY2JpQXFJRVJsZEdWamRITWdkMmhsZEdobGNpQmhJR052Ym1ScGRHbHZiaUJwY3lCaElHQkRiMlJsUTI5dVpHbDBhVzl1WUNBb2FHRnpJR0IwZVhCbE9pQmNJbU52WkdWY0ltQXBMbHh1SUNvdlhHNW1kVzVqZEdsdmJpQnBjME52WkdWRGIyNWthWFJwYjI0b1kyOXVaRG9nVTNkcGRHTm9RMkZ6WlVOdmJtUnBkR2x2YmlrNklHTnZibVFnYVhNZ1EyOWtaVU52Ym1ScGRHbHZiaUI3WEc0Z0lISmxkSFZ5YmlBb1hHNGdJQ0FnZEhsd1pXOW1JR052Ym1RZ1BUMDlJRndpYjJKcVpXTjBYQ0lnSmlaY2JpQWdJQ0JqYjI1a0lDRTlQU0J1ZFd4c0lDWW1YRzRnSUNBZ1hDSjBlWEJsWENJZ2FXNGdZMjl1WkNBbUpseHVJQ0FnSUdOdmJtUXVkSGx3WlNBOVBUMGdYQ0pqYjJSbFhDSmNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJFWlhSbFkzUnpJSGRvWlhSb1pYSWdZU0JqYjI1a2FYUnBiMjRnYVhNZ1lTQmdRMjl1WkdsMGFXOXVSWGh3Y21WemMybHZibUFnS0doaGN5QmdiM0JnSUdacFpXeGtLUzVjYmlBcUwxeHVablZ1WTNScGIyNGdhWE5EYjI1a2FYUnBiMjVGZUhCeVpYTnphVzl1S0Z4dUlDQmpiMjVrT2lCVGQybDBZMmhEWVhObFEyOXVaR2wwYVc5dVhHNHBPaUJqYjI1a0lHbHpJRU52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjRnZTF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUhSNWNHVnZaaUJqYjI1a0lEMDlQU0JjSW05aWFtVmpkRndpSUNZbVhHNGdJQ0FnWTI5dVpDQWhQVDBnYm5Wc2JDQW1KbHh1SUNBZ0lGd2liM0JjSWlCcGJpQmpiMjVrSUNZbVhHNGdJQ0FnZEhsd1pXOW1JR052Ym1RdWIzQWdQVDA5SUZ3aWMzUnlhVzVuWENKY2JpQWdLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQkZlR1ZqZFhSdmNpQm1iM0lnWUdOdmNtVXVabXh2ZHk1emQybDBZMmhnSUc1dlpHVnpMbHh1SUNwY2JpQXFJRVYyWVd4MVlYUmxjeUJsWVdOb0lHTmhjMlVuY3lCamIyNWthWFJwYjI0Z2FXNGdiM0prWlhJZ1lXNWtJSEp2ZFhSbGN5QjBhR1VnYVc1d2RYUWdkRzhnZEdobFhHNGdLaUJtYVhKemRDQnRZWFJqYUdsdVp5QmpZWE5sSjNNZ2IzVjBjSFYwSUhCdmNuUXVJRmRvWlc0Z2JtOGdZMkZ6WlNCdFlYUmphR1Z6T2x4dUlDb2dMU0JKWmlCZ2FHRnpSR1ZtWVhWc2RHQWdhWE1nWUhSeWRXVmdJQ2h2Y2lCdmJXbDBkR1ZrS1N3Z2NtOTFkR1Z6SUhSdklIUm9aU0JnWkdWbVlYVnNkR0FnYjNWMGNIVjBJSEJ2Y25RdVhHNGdLaUF0SUVsbUlHQm9ZWE5FWldaaGRXeDBZQ0JwY3lCZ1ptRnNjMlZnTENCeVpYUjFjbTV6SUdGdUlHVnRjSFI1SUc5MWRIQjFkQ0FvZEdobElHbHVjSFYwSUdseklHUnliM0J3WldRcExseHVJQ3BjYmlBcUlFTnZibVJwZEdsdmJpQmxkbUZzZFdGMGFXOXVPbHh1SUNvZ0xTQmdRMjl1WkdsMGFXOXVSWGh3Y21WemMybHZibUFnNG9DVUlHVjJZV3gxWVhSbFpDQjJhV0VnZTBCc2FXNXJJRU52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjVGZG1Gc2RXRjBiM0o5TGx4dUlDb2dMU0JnUTI5a1pVTnZibVJwZEdsdmJtQWc0b0NVSUdWMllXeDFZWFJsWkNCMmFXRWdkR2hsSUhCc2RXZG5ZV0pzWlNCN1FHeHBibXNnUTI5a1pWTmhibVJpYjNoRmRtRnNkV0YwYjNKOVhHNGdLaUFnSUdaeWIyMGdkR2hsSUdWdVoybHVaU2R6SUdOdmJtWnBaeTRnVkdoeWIzZHpJR0JIVWtGUVNGOURUMFJGWDFOQlRrUkNUMWhmVGs5VVgwTlBUa1pKUjFWU1JVUmdYRzRnS2lBZ0lIZG9aVzRnYm04Z1pYWmhiSFZoZEc5eUlHbHpJSEpsWjJsemRHVnlaV1F1WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVGQybDBZMmhIY21Gd2FFNXZaR1ZGZUdWamRYUnZjaUJwYlhCc1pXMWxiblJ6SUVkeVlYQm9UbTlrWlVWNFpXTjFkRzl5SUh0Y2JpQWdjSEpwZG1GMFpTQnlaV0ZrYjI1c2VTQmxlSEJ5WlhOemFXOXVSWFpoYkhWaGRHOXlJRDBnYm1WM0lFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNUZkbUZzZFdGMGIzSW9LVHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhjYmlBZ0lDQndjbWwyWVhSbElISmxZV1J2Ym14NUlHVnVaMmx1WlQ4NklIc2dZMjlrWlZOaGJtUmliM2hGZG1Gc2RXRjBiM0kvT2lCRGIyUmxVMkZ1WkdKdmVFVjJZV3gxWVhSdmNpQjlYRzRnSUNrZ2UzMWNibHh1SUNCaGMzbHVZeUJsZUdWamRYUmxLRnh1SUNBZ0lHbHVjSFYwT2lCSGNtRndhRVY0WldOMWRHbHZibFpoYkhWbGN5eGNiaUFnSUNCamIyNTBaWGgwT2lCSGNtRndhRVY0WldOMWRHbHZia052Ym5SbGVIUmNiaUFnS1RvZ1VISnZiV2x6WlR4SGNtRndhRVY0WldOMWRHbHZibFpoYkhWbGN6NGdlMXh1SUNBZ0lHTnZibk4wSUcxbGRHRWdQU0J5WldGa1UzZHBkR05vVFdWMFlXUmhkR0VvWTI5dWRHVjRkQ2s3WEc0Z0lDQWdZMjl1YzNRZ2FXNXdkWFJXWVd4MVpTQTlJR2x1Y0hWMFcxd2lkbUZzZFdWY0lsMGdQejhnYVc1d2RYUTdYRzVjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJSE4zYVhSamFFTmhjMlVnYjJZZ2JXVjBZUzVqWVhObGN5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JXRjBZMmhsY3lBOUlHRjNZV2wwSUhSb2FYTXVaWFpoYkhWaGRHVkRiMjVrYVhScGIyNG9YRzRnSUNBZ0lDQWdJSE4zYVhSamFFTmhjMlV1WTI5dVpHbDBhVzl1TEZ4dUlDQWdJQ0FnSUNCcGJuQjFkRlpoYkhWbExGeHVJQ0FnSUNBZ0lDQnBibkIxZEN4Y2JpQWdJQ0FnSUNBZ1kyOXVkR1Y0ZEZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUdsbUlDaHRZWFJqYUdWektTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjdJRnR6ZDJsMFkyaERZWE5sTG05MWRIQjFkRkJ2Y25SZE9pQnBibkIxZEZaaGJIVmxJSDA3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnVG04Z1kyRnpaU0J0WVhSamFHVmtJT0tBbENCeWIzVjBaU0IwYnlCMGFHVWdaR1ZtWVhWc2RDQndiM0owSUhkb1pXNGdhWFFnYVhNZ1pXNWhZbXhsWkM1Y2JpQWdJQ0JwWmlBb2JXVjBZUzVvWVhORVpXWmhkV3gwSUQwOVBTQm1ZV3h6WlNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0OU8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQmtaV1poZFd4MFVHOXlkQ0E5SUcxbGRHRXVaR1ZtWVhWc2RGQnZjblFnUHo4Z1hDSmtaV1poZFd4MFhDSTdYRzRnSUNBZ2NtVjBkWEp1SUhzZ1cyUmxabUYxYkhSUWIzSjBYVG9nYVc1d2RYUldZV3gxWlNCOU8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVYyWVd4MVlYUmxjeUJoSUhOcGJtZHNaU0J6ZDJsMFkyZ2dZMkZ6WlNCamIyNWthWFJwYjI0dVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElHRnplVzVqSUdWMllXeDFZWFJsUTI5dVpHbDBhVzl1S0Z4dUlDQWdJR052Ym1ScGRHbHZiam9nVTNkcGRHTm9RMkZ6WlVOdmJtUnBkR2x2Yml4Y2JpQWdJQ0JwYm5CMWRGWmhiSFZsT2lCMWJtdHViM2R1TEZ4dUlDQWdJR1oxYkd4SmJuQjFkRG9nUjNKaGNHaEZlR1ZqZFhScGIyNVdZV3gxWlhNc1hHNGdJQ0FnWTI5dWRHVjRkRG9nUjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwWlhoMFhHNGdJQ2s2SUZCeWIyMXBjMlU4WW05dmJHVmhiajRnZTF4dUlDQWdJR2xtSUNocGMwTnZaR1ZEYjI1a2FYUnBiMjRvWTI5dVpHbDBhVzl1S1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaWFpoYkhWaGRHVkRiMlJsUTI5dVpHbDBhVzl1S0dOdmJtUnBkR2x2Yml3Z1puVnNiRWx1Y0hWMExDQmpiMjUwWlhoMEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9hWE5EYjI1a2FYUnBiMjVGZUhCeVpYTnphVzl1S0dOdmJtUnBkR2x2YmlrcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbVY0Y0hKbGMzTnBiMjVGZG1Gc2RXRjBiM0l1WlhaaGJIVmhkR1VvWTI5dVpHbDBhVzl1TENCcGJuQjFkRlpoYkhWbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFISnZkeUJ1WlhjZ1IzSmhjR2hGZUdWamRYUnBiMjVGY25KdmNpaGNiaUFnSUNBZ0lGd2lWVzVyYm05M2JpQnpkMmwwWTJnZ1kyRnpaU0JqYjI1a2FYUnBiMjRnZEhsd1pTRGlnSlFnYlhWemRDQmlaU0JEYjI1a2FYUnBiMjVGZUhCeVpYTnphVzl1SUNodmNDa2diM0lnUTI5a1pVTnZibVJwZEdsdmJpQW9kSGx3WlRvZ0oyTnZaR1VuS1Z3aUxGeHVJQ0FnSUNBZ1hDSkhVa0ZRU0Y5VlRrdE9UMWRPWDFOWFNWUkRTRjlEVDA1RVNWUkpUMDVjSWl4Y2JpQWdJQ0FnSUhzZ1kyOXVaR2wwYVc5dUlIMWNiaUFnSUNBcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVYyWVd4MVlYUmxjeUJoSUdOdlpHVWdZMjl1WkdsMGFXOXVJSFpwWVNCMGFHVWdjR3gxWjJkaFlteGxJSE5oYm1SaWIzZ2daWFpoYkhWaGRHOXlMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JoYzNsdVl5QmxkbUZzZFdGMFpVTnZaR1ZEYjI1a2FYUnBiMjRvWEc0Z0lDQWdZMjl1WkdsMGFXOXVPaUJEYjJSbFEyOXVaR2wwYVc5dUxGeHVJQ0FnSUdsdWNIVjBPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JpQWdJQ0JqYjI1MFpYaDBPaUJIY21Gd2FFVjRaV04xZEdsdmJrTnZiblJsZUhSY2JpQWdLVG9nVUhKdmJXbHpaVHhpYjI5c1pXRnVQaUI3WEc0Z0lDQWdZMjl1YzNRZ1pYWmhiSFZoZEc5eUlEMGdkR2hwY3k1bGJtZHBibVUvTG1OdlpHVlRZVzVrWW05NFJYWmhiSFZoZEc5eU8xeHVJQ0FnSUdsbUlDZ2haWFpoYkhWaGRHOXlLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUjNKaGNHaEZlR1ZqZFhScGIyNUZjbkp2Y2loY2JpQWdJQ0FnSUNBZ1hDSkRiMlJsSUdOdmJtUnBkR2x2Ym5NZ2NtVnhkV2x5WlNCaElFTnZaR1ZUWVc1a1ltOTRSWFpoYkhWaGRHOXlJSFJ2SUdKbElISmxaMmx6ZEdWeVpXUWdhVzRnUjNKaGNHaEZlR1ZqZFhScGIyNUZibWRwYm1WRGIyNW1hV2N1WTI5a1pWTmhibVJpYjNoRmRtRnNkV0YwYjNKY0lpeGNiaUFnSUNBZ0lDQWdYQ0pIVWtGUVNGOURUMFJGWDFOQlRrUkNUMWhmVGs5VVgwTlBUa1pKUjFWU1JVUmNJaXhjYmlBZ0lDQWdJQ0FnZXlCamIyUmxPaUJqYjI1a2FYUnBiMjR1WTI5a1pTQjlYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHRjNZV2wwSUdOdmJuUmxlSFF1Ykc5bktHQkZkbUZzZFdGMGFXNW5JR052WkdVZ1kyOXVaR2wwYVc5dVlDd2dlMXh1SUNBZ0lDQWdiR0Z1WjNWaFoyVTZJR052Ym1ScGRHbHZiaTVzWVc1bmRXRm5aU0EvUHlCY0ltcGhkbUZ6WTNKcGNIUmNJaXhjYmlBZ0lDQjlLVHRjYmx4dUlDQWdJR052Ym5OMElHMWtJRDBnWTI5dWRHVjRkQzV0WlhSaFpHRjBZU0JoY3lCU1pXTnZjbVE4YzNSeWFXNW5MQ0IxYm10dWIzZHVQaUI4SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0FnSUdOdmJuTjBJSEpsYzNWc2RDQTlJR0YzWVdsMElHVjJZV3gxWVhSdmNpNWxkbUZzZFdGMFpTaDdYRzRnSUNBZ0lDQmpiMlJsT2lCamIyNWthWFJwYjI0dVkyOWtaU3hjYmlBZ0lDQWdJR3hoYm1kMVlXZGxPaUJqYjI1a2FYUnBiMjR1YkdGdVozVmhaMlVzWEc0Z0lDQWdJQ0JwYm5CMWRDeGNiaUFnSUNBZ0lIWmhjbk02SUNodFpEOHVkbUZ5Y3lCaGN5QlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGlCOElIVnVaR1ZtYVc1bFpDa2dQejhnZFc1a1pXWnBibVZrTEZ4dUlDQWdJQ0FnYVhSbGJUb2diV1EvTG1sMFpXMHNYRzRnSUNBZ0lDQnBibVJsZURvZ2JXUS9MbWx1WkdWNElHRnpJRzUxYldKbGNpQjhJSFZ1WkdWbWFXNWxaQ3hjYmlBZ0lDQWdJRzV2WkdWek9seHVJQ0FnSUNBZ0lDQW9iV1EvTG01dlpHVnpJR0Z6SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRkpsWTI5eVpEeHpkSEpwYm1jc0lIVnVhMjV2ZDI0K1BpQjhJSFZ1WkdWbWFXNWxaQ2tnUHo5Y2JpQWdJQ0FnSUNBZ2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUNBZ2JHOW5aMlZ5T2lCamIyNTBaWGgwTG14dloyZGxjaUJoY3lCMWJtdHViM2R1SUdGelhHNGdJQ0FnSUNBZ0lId2dhVzF3YjNKMEtGd2lMaTlEYjJSbFUyRnVaR0p2ZUVWMllXeDFZWFJ2Y2x3aUtTNVRZVzVrWW05NFRHOW5aMlZ5WEc0Z0lDQWdJQ0FnSUh3Z2RXNWtaV1pwYm1Wa0xGeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUNFaGNtVnpkV3gwTzF4dUlDQjlYRzU5WEc0aVhYMD0iXX0=
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2V4ZWN1dGlvbi9Td2l0Y2hHcmFwaE5vZGVFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsbURBQThDO0FBR3JGOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQ3pCLE9BQThCO0lBRTlCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBRXBCLENBQUM7SUFDZCxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzNFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQW1DLENBQUM7SUFDcEUsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU87UUFDTCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUztRQUNoRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxJQUFJO0tBQzNDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUF5QjtJQUNoRCxPQUFPLENBQ0wsT0FBTyxJQUFJLEtBQUssUUFBUTtRQUN4QixJQUFJLEtBQUss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QUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRTtZQUM3QyxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsSUFBSSxZQUFZO1NBQzdDLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUErQyxDQUFDO1FBRW5FLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUN0QyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRO1lBQzVCLEtBQUs7WUFDTCxJQUFJLEVBQUcsRUFBRSxFQUFFLElBQTRDLElBQUksU0FBUztZQUNwRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQTJCO1lBQ3RDLEtBQUssRUFDRixFQUFFLEVBQUUsS0FBNkQ7Z0JBQ2xFLFNBQVM7WUFDWCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BRUg7U0FDZCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9leGVjdXRpb24vU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3JcbiAqIEBzdW1tYXJ5IEV4ZWN1dG9yIGZvciB0aGUgU3dpdGNoIGZsb3ctY29udHJvbCBub2RlIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKiBAZGVzY3JpcHRpb24gRXZhbHVhdGVzIGVhY2ggY2FzZSdzIGNvbmRpdGlvbiBhZ2FpbnN0IHRoZSBub2RlJ3MgaW5wdXQgYW5kXG4gKiByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBmaXJzdCBtYXRjaGluZyBjYXNlJ3Mgb3V0cHV0IHBvcnQuIEZhbGxzIGJhY2sgdG9cbiAqIHRoZSBgZGVmYXVsdGAgb3V0cHV0IHdoZW4gbm8gY2FzZSBtYXRjaGVzLiBTdXBwb3J0cyBib3RoXG4gKiB7QGxpbmsgQ29uZGl0aW9uRXhwcmVzc2lvbn0gKGdyYXBoaWNhbCBtb2RlKSBhbmQge0BsaW5rIENvZGVDb25kaXRpb259XG4gKiAoY29kZSBtb2RlIHZpYSB0aGUgcGx1Z2dhYmxlIHtAbGluayBDb2RlU2FuZGJveEV2YWx1YXRvcn0pLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUV4ZWN1dG9yIH0gZnJvbSBcIi4vR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uVmFsdWVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFN3aXRjaENhc2VDb25kaXRpb24sXG4gIFN3aXRjaE5vZGVNZXRhZGF0YSxcbiAgQ29uZGl0aW9uRXhwcmVzc2lvbixcbiAgQ29kZUNvbmRpdGlvbixcbn0gZnJvbSBcIi4uLy4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMvR3JhcGhFeGVjdXRpb25FcnJvclwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvciB9IGZyb20gXCIuLi9sb29wcy9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yXCI7XG5pbXBvcnQgdHlwZSB7IENvZGVTYW5kYm94RXZhbHVhdG9yIH0gZnJvbSBcIi4vQ29kZVNhbmRib3hFdmFsdWF0b3JcIjtcblxuLyoqXG4gKiBSZWFkcyB0aGUgU3dpdGNoIG1ldGFkYXRhIGZyb20gdGhlIG5vZGUgZGVmaW5pdGlvbidzIGdyYXBoIG1ldGFkYXRhLlxuICpcbiAqIFRoZSBtZXRhZGF0YSBpcyBzdG9yZWQgdW5kZXIgYGdyYXBoLm1ldGFkYXRhLnN3aXRjaGAgKHRoZSBsb2NhdGlvbiB1c2VkIGJ5XG4gKiBzdGF0aWNhbGx5LWRlY2xhcmVkIGBAbm9kZWAgd29ya2Zsb3dzKS4gV2hlbiBhYnNlbnQsIGZhbGxzIGJhY2sgdG8gYW4gZW1wdHlcbiAqIGRlZmF1bHQgd2l0aCB0aGUgYGRlZmF1bHRgIHBvcnQgZW5hYmxlZC5cbiAqL1xuZnVuY3Rpb24gcmVhZFN3aXRjaE1ldGFkYXRhKFxuICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbik6IFN3aXRjaE5vZGVNZXRhZGF0YSB7XG4gIGNvbnN0IG1ldGEgPSBjb250ZXh0Lm5vZGUuZ3JhcGg/Lm1ldGFkYXRhIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgdW5kZWZpbmVkO1xuICBpZiAoIW1ldGEpIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiBmYWxzZSB9O1xuICBjb25zdCBzd2l0Y2hNZXRhID0gbWV0YVtcInN3aXRjaFwiXSBhcyBTd2l0Y2hOb2RlTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG4gIGlmICghc3dpdGNoTWV0YSB8fCAhQXJyYXkuaXNBcnJheShzd2l0Y2hNZXRhLmNhc2VzKSkge1xuICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiBmYWxzZSB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgY2FzZXM6IHN3aXRjaE1ldGEuY2FzZXMsXG4gICAgZGVmYXVsdFBvcnQ6IHN3aXRjaE1ldGEuZGVmYXVsdFBvcnQgPz8gXCJkZWZhdWx0XCIsXG4gICAgaGFzRGVmYXVsdDogc3dpdGNoTWV0YS5oYXNEZWZhdWx0ID09PSB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBhIGBDb2RlQ29uZGl0aW9uYCAoaGFzIGB0eXBlOiBcImNvZGVcImApLlxuICovXG5mdW5jdGlvbiBpc0NvZGVDb25kaXRpb24oY29uZDogU3dpdGNoQ2FzZUNvbmRpdGlvbik6IGNvbmQgaXMgQ29kZUNvbmRpdGlvbiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGNvbmQgPT09IFwib2JqZWN0XCIgJiZcbiAgICBjb25kICE9PSBudWxsICYmXG4gICAgXCJ0eXBlXCIgaW4gY29uZCAmJlxuICAgIGNvbmQudHlwZSA9PT0gXCJjb2RlXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKGhhcyBgb3BgIGZpZWxkKS5cbiAqL1xuZnVuY3Rpb24gaXNDb25kaXRpb25FeHByZXNzaW9uKFxuICBjb25kOiBTd2l0Y2hDYXNlQ29uZGl0aW9uXG4pOiBjb25kIGlzIENvbmRpdGlvbkV4cHJlc3Npb24ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBjb25kID09PSBcIm9iamVjdFwiICYmXG4gICAgY29uZCAhPT0gbnVsbCAmJlxuICAgIFwib3BcIiBpbiBjb25kICYmXG4gICAgdHlwZW9mIGNvbmQub3AgPT09IFwic3RyaW5nXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUuZmxvdy5zd2l0Y2hgIG5vZGVzLlxuICpcbiAqIEV2YWx1YXRlcyBlYWNoIGNhc2UncyBjb25kaXRpb24gaW4gb3JkZXIgYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlXG4gKiBmaXJzdCBtYXRjaGluZyBjYXNlJ3Mgb3V0cHV0IHBvcnQuIFdoZW4gbm8gY2FzZSBtYXRjaGVzOlxuICogLSBJZiBgaGFzRGVmYXVsdGAgaXMgYHRydWVgLCByb3V0ZXMgdG8gdGhlIGBkZWZhdWx0YCBvdXRwdXQgcG9ydC5cbiAqIC0gSWYgYGhhc0RlZmF1bHRgIGlzIGBmYWxzZWAgKHRoZSBkZWZhdWx0KSwgdGhyb3dzIGBHUkFQSF9TV0lUQ0hfTk9fTUFUQ0hgLlxuICpcbiAqIENvbmRpdGlvbiBldmFsdWF0aW9uOlxuICogLSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAg4oCUIGV2YWx1YXRlZCB2aWEge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9LlxuICogLSBgQ29kZUNvbmRpdGlvbmAg4oCUIGV2YWx1YXRlZCB2aWEgdGhlIHBsdWdnYWJsZSB7QGxpbmsgQ29kZVNhbmRib3hFdmFsdWF0b3J9XG4gKiAgIGZyb20gdGhlIGVuZ2luZSdzIGNvbmZpZy4gVGhyb3dzIGBHUkFQSF9DT0RFX1NBTkRCT1hfTk9UX0NPTkZJR1VSRURgXG4gKiAgIHdoZW4gbm8gZXZhbHVhdG9yIGlzIHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTd2l0Y2hHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZT86IHsgY29kZVNhbmRib3hFdmFsdWF0b3I/OiBDb2RlU2FuZGJveEV2YWx1YXRvciB9XG4gICkge31cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxHcmFwaEV4ZWN1dGlvblZhbHVlcz4ge1xuICAgIGNvbnN0IG1ldGEgPSByZWFkU3dpdGNoTWV0YWRhdGEoY29udGV4dCk7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0W1widmFsdWVcIl0gPz8gaW5wdXQ7XG5cbiAgICBmb3IgKGNvbnN0IHN3aXRjaENhc2Ugb2YgbWV0YS5jYXNlcykge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IHRoaXMuZXZhbHVhdGVDb25kaXRpb24oXG4gICAgICAgIHN3aXRjaENhc2UuY29uZGl0aW9uLFxuICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgY29udGV4dFxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB7IFtzd2l0Y2hDYXNlLm91dHB1dFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm8gY2FzZSBtYXRjaGVkIOKAlCByb3V0ZSB0byB0aGUgZGVmYXVsdCBwb3J0IHdoZW4gaXQgaXMgZW5hYmxlZC5cbiAgICBpZiAobWV0YS5oYXNEZWZhdWx0ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgICAgXCJObyBzd2l0Y2ggY2FzZSBtYXRjaGVkIGFuZCBkZWZhdWx0IHBvcnQgaXMgbm90IGVuYWJsZWRcIixcbiAgICAgICAgXCJHUkFQSF9TV0lUQ0hfTk9fTUFUQ0hcIixcbiAgICAgICAgeyBjYXNlczogbWV0YS5jYXNlcy5tYXAoKGMpID0+IGMuaWQpIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gbWV0YS5kZWZhdWx0UG9ydCA/PyBcImRlZmF1bHRcIjtcbiAgICByZXR1cm4geyBbZGVmYXVsdFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgc2luZ2xlIHN3aXRjaCBjYXNlIGNvbmRpdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVDb25kaXRpb24oXG4gICAgY29uZGl0aW9uOiBTd2l0Y2hDYXNlQ29uZGl0aW9uLFxuICAgIGlucHV0VmFsdWU6IHVua25vd24sXG4gICAgZnVsbElucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlzQ29kZUNvbmRpdGlvbihjb25kaXRpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUNvZGVDb25kaXRpb24oY29uZGl0aW9uLCBmdWxsSW5wdXQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChpc0NvbmRpdGlvbkV4cHJlc3Npb24oY29uZGl0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsdWF0ZShjb25kaXRpb24sIGlucHV0VmFsdWUpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBHcmFwaEV4ZWN1dGlvbkVycm9yKFxuICAgICAgXCJVbmtub3duIHN3aXRjaCBjYXNlIGNvbmRpdGlvbiB0eXBlIOKAlCBtdXN0IGJlIENvbmRpdGlvbkV4cHJlc3Npb24gKG9wKSBvciBDb2RlQ29uZGl0aW9uICh0eXBlOiAnY29kZScpXCIsXG4gICAgICBcIkdSQVBIX1VOS05PV05fU1dJVENIX0NPTkRJVElPTlwiLFxuICAgICAgeyBjb25kaXRpb24gfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgY29kZSBjb25kaXRpb24gdmlhIHRoZSBwbHVnZ2FibGUgc2FuZGJveCBldmFsdWF0b3IuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlQ29kZUNvbmRpdGlvbihcbiAgICBjb25kaXRpb246IENvZGVDb25kaXRpb24sXG4gICAgaW5wdXQ6IEdyYXBoRXhlY3V0aW9uVmFsdWVzLFxuICAgIGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBldmFsdWF0b3IgPSB0aGlzLmVuZ2luZT8uY29kZVNhbmRib3hFdmFsdWF0b3I7XG4gICAgaWYgKCFldmFsdWF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBHcmFwaEV4ZWN1dGlvbkVycm9yKFxuICAgICAgICBcIkNvZGUgY29uZGl0aW9ucyByZXF1aXJlIGEgQ29kZVNhbmRib3hFdmFsdWF0b3IgdG8gYmUgcmVnaXN0ZXJlZCBpbiBHcmFwaEV4ZWN1dGlvbkVuZ2luZUNvbmZpZy5jb2RlU2FuZGJveEV2YWx1YXRvclwiLFxuICAgICAgICBcIkdSQVBIX0NPREVfU0FOREJPWF9OT1RfQ09ORklHVVJFRFwiLFxuICAgICAgICB7IGNvZGU6IGNvbmRpdGlvbi5jb2RlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgYXdhaXQgY29udGV4dC5sb2coYEV2YWx1YXRpbmcgY29kZSBjb25kaXRpb25gLCB7XG4gICAgICBsYW5ndWFnZTogY29uZGl0aW9uLmxhbmd1YWdlID8/IFwiamF2YXNjcmlwdFwiLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWQgPSBjb250ZXh0Lm1ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXZhbHVhdG9yLmV2YWx1YXRlKHtcbiAgICAgIGNvZGU6IGNvbmRpdGlvbi5jb2RlLFxuICAgICAgbGFuZ3VhZ2U6IGNvbmRpdGlvbi5sYW5ndWFnZSxcbiAgICAgIGlucHV0LFxuICAgICAgdmFyczogKG1kPy52YXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSA/PyB1bmRlZmluZWQsXG4gICAgICBpdGVtOiBtZD8uaXRlbSxcbiAgICAgIGluZGV4OiBtZD8uaW5kZXggYXMgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgbm9kZXM6XG4gICAgICAgIChtZD8ubm9kZXMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkKSA/P1xuICAgICAgICB1bmRlZmluZWQsXG4gICAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyIGFzIHVua25vd24gYXNcbiAgICAgICAgfCBpbXBvcnQoXCIuL0NvZGVTYW5kYm94RXZhbHVhdG9yXCIpLlNhbmRib3hMb2dnZXJcbiAgICAgICAgfCB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gISFyZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJTd2l0Y2hHcmFwaE5vZGVFeGVjdXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrRUFBeUU7QUFDekUsZ0dBQTBGO0FBQzFGOzs7Ozs7R0FNRztBQUNILFNBQVMsa0JBQWtCLENBQUMsT0FBTztJQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDMUMsSUFBSSxDQUFDLElBQUk7UUFDTCxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU87UUFDSCxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7UUFDdkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksU0FBUztRQUNoRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVUsS0FBSyxJQUFJO0tBQzdDLENBQUM7QUFDTixDQUFDO0FBQ0Q7O0dBRUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUFJO0lBQ3pCLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRO1FBQzVCLElBQUksS0FBSyxJQUFJO1FBQ2IsTUFBTSxJQUFJLElBQUk7UUFDZCxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFDRDs7R0FFRztBQUNILFNBQVMscUJBQXFCLENBQUMsSUFBSTtJQUMvQixPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUTtRQUM1QixJQUFJLEtBQUssSUFBSTtRQUNiLElBQUksSUFBSSxJQUFJO1FBQ1osT0FBTyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFDRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDaEMsWUFBWSxNQUFNO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksOERBQTRCLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUN4QixNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQzNDLEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvRixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQztRQUNELGtFQUFrRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLDRDQUFtQixDQUFDLHdEQUF3RCxFQUFFLHVCQUF1QixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdKLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQztRQUNsRCxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTztRQUM3RCxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUkscUJBQXFCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxNQUFNLElBQUksNENBQW1CLENBQUMsdUdBQXVHLEVBQUUsZ0NBQWdDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzVMLENBQUM7SUFDRDs7T0FFRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU87UUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksNENBQW1CLENBQUMsb0hBQW9ILEVBQUUsbUNBQW1DLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdk4sQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRTtZQUMzQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVEsSUFBSSxZQUFZO1NBQy9DLENBQUMsQ0FBQztRQUNILE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQ3BDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtZQUNwQixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsS0FBSztZQUNMLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLFNBQVM7WUFDM0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSztnQkFDWixTQUFTO1lBQ2IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3pCLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUExREQsMERBMERDO0FBQ0QsMHlaQUEweVoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkVycm9yIH0gZnJvbSBcIi4vLi4vZXJyb3JzL0dyYXBoRXhlY3V0aW9uRXJyb3IuanNcIjtcbmltcG9ydCB7IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IgfSBmcm9tIFwiLi8uLi9sb29wcy9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yLmpzXCI7XG4vKipcbiAqIFJlYWRzIHRoZSBTd2l0Y2ggbWV0YWRhdGEgZnJvbSB0aGUgbm9kZSBkZWZpbml0aW9uJ3MgZ3JhcGggbWV0YWRhdGEuXG4gKlxuICogVGhlIG1ldGFkYXRhIGlzIHN0b3JlZCB1bmRlciBgZ3JhcGgubWV0YWRhdGEuc3dpdGNoYCAodGhlIGxvY2F0aW9uIHVzZWQgYnlcbiAqIHN0YXRpY2FsbHktZGVjbGFyZWQgYEBub2RlYCB3b3JrZmxvd3MpLiBXaGVuIGFic2VudCwgZmFsbHMgYmFjayB0byBhbiBlbXB0eVxuICogZGVmYXVsdCB3aXRoIHRoZSBgZGVmYXVsdGAgcG9ydCBlbmFibGVkLlxuICovXG5mdW5jdGlvbiByZWFkU3dpdGNoTWV0YWRhdGEoY29udGV4dCkge1xuICAgIGNvbnN0IG1ldGEgPSBjb250ZXh0Lm5vZGUuZ3JhcGg/Lm1ldGFkYXRhO1xuICAgIGlmICghbWV0YSlcbiAgICAgICAgcmV0dXJuIHsgY2FzZXM6IFtdLCBkZWZhdWx0UG9ydDogXCJkZWZhdWx0XCIsIGhhc0RlZmF1bHQ6IGZhbHNlIH07XG4gICAgY29uc3Qgc3dpdGNoTWV0YSA9IG1ldGFbXCJzd2l0Y2hcIl07XG4gICAgaWYgKCFzd2l0Y2hNZXRhIHx8ICFBcnJheS5pc0FycmF5KHN3aXRjaE1ldGEuY2FzZXMpKSB7XG4gICAgICAgIHJldHVybiB7IGNhc2VzOiBbXSwgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLCBoYXNEZWZhdWx0OiBmYWxzZSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjYXNlczogc3dpdGNoTWV0YS5jYXNlcyxcbiAgICAgICAgZGVmYXVsdFBvcnQ6IHN3aXRjaE1ldGEuZGVmYXVsdFBvcnQgPz8gXCJkZWZhdWx0XCIsXG4gICAgICAgIGhhc0RlZmF1bHQ6IHN3aXRjaE1ldGEuaGFzRGVmYXVsdCA9PT0gdHJ1ZSxcbiAgICB9O1xufVxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gaXMgYSBgQ29kZUNvbmRpdGlvbmAgKGhhcyBgdHlwZTogXCJjb2RlXCJgKS5cbiAqL1xuZnVuY3Rpb24gaXNDb2RlQ29uZGl0aW9uKGNvbmQpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBjb25kID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIGNvbmQgIT09IG51bGwgJiZcbiAgICAgICAgXCJ0eXBlXCIgaW4gY29uZCAmJlxuICAgICAgICBjb25kLnR5cGUgPT09IFwiY29kZVwiKTtcbn1cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGEgY29uZGl0aW9uIGlzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gIChoYXMgYG9wYCBmaWVsZCkuXG4gKi9cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uRXhwcmVzc2lvbihjb25kKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgY29uZCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBjb25kICE9PSBudWxsICYmXG4gICAgICAgIFwib3BcIiBpbiBjb25kICYmXG4gICAgICAgIHR5cGVvZiBjb25kLm9wID09PSBcInN0cmluZ1wiKTtcbn1cbi8qKlxuICogRXhlY3V0b3IgZm9yIGBjb3JlLmZsb3cuc3dpdGNoYCBub2Rlcy5cbiAqXG4gKiBFdmFsdWF0ZXMgZWFjaCBjYXNlJ3MgY29uZGl0aW9uIGluIG9yZGVyIGFuZCByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZVxuICogZmlyc3QgbWF0Y2hpbmcgY2FzZSdzIG91dHB1dCBwb3J0LiBXaGVuIG5vIGNhc2UgbWF0Y2hlczpcbiAqIC0gSWYgYGhhc0RlZmF1bHRgIGlzIGB0cnVlYCwgcm91dGVzIHRvIHRoZSBgZGVmYXVsdGAgb3V0cHV0IHBvcnQuXG4gKiAtIElmIGBoYXNEZWZhdWx0YCBpcyBgZmFsc2VgICh0aGUgZGVmYXVsdCksIHRocm93cyBgR1JBUEhfU1dJVENIX05PX01BVENIYC5cbiAqXG4gKiBDb25kaXRpb24gZXZhbHVhdGlvbjpcbiAqIC0gYENvbmRpdGlvbkV4cHJlc3Npb25gIOKAlCBldmFsdWF0ZWQgdmlhIHtAbGluayBDb25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yfS5cbiAqIC0gYENvZGVDb25kaXRpb25gIOKAlCBldmFsdWF0ZWQgdmlhIHRoZSBwbHVnZ2FibGUge0BsaW5rIENvZGVTYW5kYm94RXZhbHVhdG9yfVxuICogICBmcm9tIHRoZSBlbmdpbmUncyBjb25maWcuIFRocm93cyBgR1JBUEhfQ09ERV9TQU5EQk9YX05PVF9DT05GSUdVUkVEYFxuICogICB3aGVuIG5vIGV2YWx1YXRvciBpcyByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgY2xhc3MgU3dpdGNoR3JhcGhOb2RlRXhlY3V0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGVuZ2luZSkge1xuICAgICAgICB0aGlzLmVuZ2luZSA9IGVuZ2luZTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IoKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBtZXRhID0gcmVhZFN3aXRjaE1ldGFkYXRhKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXRbXCJ2YWx1ZVwiXSA/PyBpbnB1dDtcbiAgICAgICAgZm9yIChjb25zdCBzd2l0Y2hDYXNlIG9mIG1ldGEuY2FzZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQ29uZGl0aW9uKHN3aXRjaENhc2UuY29uZGl0aW9uLCBpbnB1dFZhbHVlLCBpbnB1dCwgY29udGV4dCk7XG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IFtzd2l0Y2hDYXNlLm91dHB1dFBvcnRdOiBpbnB1dFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gY2FzZSBtYXRjaGVkIOKAlCByb3V0ZSB0byB0aGUgZGVmYXVsdCBwb3J0IHdoZW4gaXQgaXMgZW5hYmxlZC5cbiAgICAgICAgaWYgKG1ldGEuaGFzRGVmYXVsdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoRXhlY3V0aW9uRXJyb3IoXCJObyBzd2l0Y2ggY2FzZSBtYXRjaGVkIGFuZCBkZWZhdWx0IHBvcnQgaXMgbm90IGVuYWJsZWRcIiwgXCJHUkFQSF9TV0lUQ0hfTk9fTUFUQ0hcIiwgeyBjYXNlczogbWV0YS5jYXNlcy5tYXAoKGMpID0+IGMuaWQpIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQb3J0ID0gbWV0YS5kZWZhdWx0UG9ydCA/PyBcImRlZmF1bHRcIjtcbiAgICAgICAgcmV0dXJuIHsgW2RlZmF1bHRQb3J0XTogaW5wdXRWYWx1ZSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZXMgYSBzaW5nbGUgc3dpdGNoIGNhc2UgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIGV2YWx1YXRlQ29uZGl0aW9uKGNvbmRpdGlvbiwgaW5wdXRWYWx1ZSwgZnVsbElucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChpc0NvZGVDb25kaXRpb24oY29uZGl0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb2RlQ29uZGl0aW9uKGNvbmRpdGlvbiwgZnVsbElucHV0LCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uKGNvbmRpdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUoY29uZGl0aW9uLCBpbnB1dFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcIlVua25vd24gc3dpdGNoIGNhc2UgY29uZGl0aW9uIHR5cGUg4oCUIG11c3QgYmUgQ29uZGl0aW9uRXhwcmVzc2lvbiAob3ApIG9yIENvZGVDb25kaXRpb24gKHR5cGU6ICdjb2RlJylcIiwgXCJHUkFQSF9VTktOT1dOX1NXSVRDSF9DT05ESVRJT05cIiwgeyBjb25kaXRpb24gfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlcyBhIGNvZGUgY29uZGl0aW9uIHZpYSB0aGUgcGx1Z2dhYmxlIHNhbmRib3ggZXZhbHVhdG9yLlxuICAgICAqL1xuICAgIGFzeW5jIGV2YWx1YXRlQ29kZUNvbmRpdGlvbihjb25kaXRpb24sIGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRvciA9IHRoaXMuZW5naW5lPy5jb2RlU2FuZGJveEV2YWx1YXRvcjtcbiAgICAgICAgaWYgKCFldmFsdWF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaEV4ZWN1dGlvbkVycm9yKFwiQ29kZSBjb25kaXRpb25zIHJlcXVpcmUgYSBDb2RlU2FuZGJveEV2YWx1YXRvciB0byBiZSByZWdpc3RlcmVkIGluIEdyYXBoRXhlY3V0aW9uRW5naW5lQ29uZmlnLmNvZGVTYW5kYm94RXZhbHVhdG9yXCIsIFwiR1JBUEhfQ09ERV9TQU5EQk9YX05PVF9DT05GSUdVUkVEXCIsIHsgY29kZTogY29uZGl0aW9uLmNvZGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY29udGV4dC5sb2coYEV2YWx1YXRpbmcgY29kZSBjb25kaXRpb25gLCB7XG4gICAgICAgICAgICBsYW5ndWFnZTogY29uZGl0aW9uLmxhbmd1YWdlID8/IFwiamF2YXNjcmlwdFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbWQgPSBjb250ZXh0Lm1ldGFkYXRhO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBldmFsdWF0b3IuZXZhbHVhdGUoe1xuICAgICAgICAgICAgY29kZTogY29uZGl0aW9uLmNvZGUsXG4gICAgICAgICAgICBsYW5ndWFnZTogY29uZGl0aW9uLmxhbmd1YWdlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB2YXJzOiBtZD8udmFycyA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBpdGVtOiBtZD8uaXRlbSxcbiAgICAgICAgICAgIGluZGV4OiBtZD8uaW5kZXgsXG4gICAgICAgICAgICBub2RlczogbWQ/Lm5vZGVzID8/XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgbG9nZ2VyOiBjb250ZXh0LmxvZ2dlcixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lVM2RwZEdOb1IzSmhjR2hPYjJSbFJYaGxZM1YwYjNJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk4dUxpOXpjbU12WjNKaGNHZ3ZaVzVuYVc1bEwyVjRaV04xZEdsdmJpOVRkMmwwWTJoSGNtRndhRTV2WkdWRmVHVmpkWFJ2Y2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRnJRa0VzVDBGQlR5eEZRVUZGTEcxQ1FVRnRRaXhGUVVGRkxESkRRVUZ6UXp0QlFVTndSU3hQUVVGUExFVkJRVVVzTkVKQlFUUkNMRVZCUVVVc2JVUkJRVGhETzBGQlIzSkdPenM3T3pzN1IwRk5SenRCUVVOSUxGTkJRVk1zYTBKQlFXdENMRU5CUTNwQ0xFOUJRVGhDTzBsQlJUbENMRTFCUVUwc1NVRkJTU3hIUVVGSExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRkZCUlhCQ0xFTkJRVU03U1VGRFpDeEpRVUZKTEVOQlFVTXNTVUZCU1R0UlFVRkZMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJTeEZRVUZGTEZkQlFWY3NSVUZCUlN4VFFVRlRMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETzBsQlF6TkZMRTFCUVUwc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFXMURMRU5CUVVNN1NVRkRjRVVzU1VGQlNTeERRVUZETEZWQlFWVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlZTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNN1VVRkRjRVFzVDBGQlR5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRVZCUVVVc1YwRkJWeXhGUVVGRkxGTkJRVk1zUlVGQlJTeFZRVUZWTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNN1NVRkRiRVVzUTBGQlF6dEpRVU5FTEU5QlFVODdVVUZEVEN4TFFVRkxMRVZCUVVVc1ZVRkJWU3hEUVVGRExFdEJRVXM3VVVGRGRrSXNWMEZCVnl4RlFVRkZMRlZCUVZVc1EwRkJReXhYUVVGWExFbEJRVWtzVTBGQlV6dFJRVU5vUkN4VlFVRlZMRVZCUVVVc1ZVRkJWU3hEUVVGRExGVkJRVlVzUzBGQlN5eEpRVUZKTzB0QlF6TkRMRU5CUVVNN1FVRkRTaXhEUVVGRE8wRkJSVVE3TzBkQlJVYzdRVUZEU0N4VFFVRlRMR1ZCUVdVc1EwRkJReXhKUVVGNVFqdEpRVU5vUkN4UFFVRlBMRU5CUTB3c1QwRkJUeXhKUVVGSkxFdEJRVXNzVVVGQlVUdFJRVU40UWl4SlFVRkpMRXRCUVVzc1NVRkJTVHRSUVVOaUxFMUJRVTBzU1VGQlNTeEpRVUZKTzFGQlEyUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJTeXhOUVVGTkxFTkJRM0pDTEVOQlFVTTdRVUZEU2l4RFFVRkRPMEZCUlVRN08wZEJSVWM3UVVGRFNDeFRRVUZUTEhGQ1FVRnhRaXhEUVVNMVFpeEpRVUY1UWp0SlFVVjZRaXhQUVVGUExFTkJRMHdzVDBGQlR5eEpRVUZKTEV0QlFVc3NVVUZCVVR0UlFVTjRRaXhKUVVGSkxFdEJRVXNzU1VGQlNUdFJRVU5pTEVsQlFVa3NTVUZCU1N4SlFVRkpPMUZCUTFvc1QwRkJUeXhKUVVGSkxFTkJRVU1zUlVGQlJTeExRVUZMTEZGQlFWRXNRMEZETlVJc1EwRkJRenRCUVVOS0xFTkJRVU03UVVGRlJEczdPenM3T3pzN096czdPenRIUVdGSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEhWQ1FVRjFRanRKUVVkc1F5eFpRVU50UWl4TlFVRjNSRHRSUVVGNFJDeFhRVUZOTEVkQlFVNHNUVUZCVFN4RFFVRnJSRHRSUVVneFJDeDNRa0ZCYlVJc1IwRkJSeXhKUVVGSkxEUkNRVUUwUWl4RlFVRkZMRU5CUVVNN1NVRkpka1VzUTBGQlF6dEpRVVZLTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUTFnc1MwRkJNa0lzUlVGRE0wSXNUMEZCT0VJN1VVRkZPVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZEZWtNc1RVRkJUU3hWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJRenRSUVVVelF5eExRVUZMTEUxQlFVMHNWVUZCVlN4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFpRVU53UXl4TlFVRk5MRTlCUVU4c1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkRNVU1zVlVGQlZTeERRVUZETEZOQlFWTXNSVUZEY0VJc1ZVRkJWU3hGUVVOV0xFdEJRVXNzUlVGRFRDeFBRVUZQTEVOQlExSXNRMEZCUXp0WlFVTkdMRWxCUVVrc1QwRkJUeXhGUVVGRkxFTkJRVU03WjBKQlExb3NUMEZCVHl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RFFVRkRPMWxCUTJwRUxFTkJRVU03VVVGRFNDeERRVUZETzFGQlJVUXNhMFZCUVd0Rk8xRkJRMnhGTEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1MwRkJTeXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU0zUWl4TlFVRk5MRWxCUVVrc2JVSkJRVzFDTEVOQlF6TkNMSGRFUVVGM1JDeEZRVU40UkN4MVFrRkJkVUlzUlVGRGRrSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVTjJReXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVU5FTEUxQlFVMHNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFbEJRVWtzVTBGQlV5eERRVUZETzFGQlEyeEVMRTlCUVU4c1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RFFVRkRPMGxCUTNaRExFTkJRVU03U1VGRlJEczdUMEZGUnp0SlFVTkxMRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNRMEZETjBJc1UwRkJPRUlzUlVGRE9VSXNWVUZCYlVJc1JVRkRia0lzVTBGQkswSXNSVUZETDBJc1QwRkJPRUk3VVVGRk9VSXNTVUZCU1N4bFFVRmxMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU12UWl4UFFVRlBMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4VFFVRlRMRVZCUVVVc1UwRkJVeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzFGQlEyNUZMRU5CUVVNN1VVRkZSQ3hKUVVGSkxIRkNRVUZ4UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGNrTXNUMEZCVHl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRk5CUVZNc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dFJRVU5zUlN4RFFVRkRPMUZCUlVRc1RVRkJUU3hKUVVGSkxHMUNRVUZ0UWl4RFFVTXpRaXgxUjBGQmRVY3NSVUZEZGtjc1owTkJRV2RETEVWQlEyaERMRVZCUVVVc1UwRkJVeXhGUVVGRkxFTkJRMlFzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGUkRzN1QwRkZSenRKUVVOTExFdEJRVXNzUTBGQlF5eHhRa0ZCY1VJc1EwRkRha01zVTBGQmQwSXNSVUZEZUVJc1MwRkJNa0lzUlVGRE0wSXNUMEZCT0VJN1VVRkZPVUlzVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3h2UWtGQmIwSXNRMEZCUXp0UlFVTndSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdXVUZEWml4TlFVRk5MRWxCUVVrc2JVSkJRVzFDTEVOQlF6TkNMRzlJUVVGdlNDeEZRVU53U0N4dFEwRkJiVU1zUlVGRGJrTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVU42UWl4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRUxFMUJRVTBzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl3eVFrRkJNa0lzUlVGQlJUdFpRVU0zUXl4UlFVRlJMRVZCUVVVc1UwRkJVeXhEUVVGRExGRkJRVkVzU1VGQlNTeFpRVUZaTzFOQlF6ZERMRU5CUVVNc1EwRkJRenRSUVVWSUxFMUJRVTBzUlVGQlJTeEhRVUZITEU5QlFVOHNRMEZCUXl4UlFVRXJReXhEUVVGRE8xRkJSVzVGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRTFCUVUwc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF6dFpRVU4wUXl4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFbEJRVWs3V1VGRGNFSXNVVUZCVVN4RlFVRkZMRk5CUVZNc1EwRkJReXhSUVVGUk8xbEJRelZDTEV0QlFVczdXVUZEVEN4SlFVRkpMRVZCUVVjc1JVRkJSU3hGUVVGRkxFbEJRVFJETEVsQlFVa3NVMEZCVXp0WlFVTndSU3hKUVVGSkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVsQlFVazdXVUZEWkN4TFFVRkxMRVZCUVVVc1JVRkJSU3hGUVVGRkxFdEJRVEpDTzFsQlEzUkRMRXRCUVVzc1JVRkRSaXhGUVVGRkxFVkJRVVVzUzBGQk5rUTdaMEpCUTJ4RkxGTkJRVk03V1VGRFdDeE5RVUZOTEVWQlFVVXNUMEZCVHl4RFFVRkRMRTFCUlVnN1UwRkRaQ3hEUVVGRExFTkJRVU03VVVGRlNDeFBRVUZQTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRiRUlzUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OW5jbUZ3YUM5bGVHVmpkWFJwYjI0dlUzZHBkR05vUjNKaGNHaE9iMlJsUlhobFkzVjBiM0pjYmlBcUlFQnpkVzF0WVhKNUlFVjRaV04xZEc5eUlHWnZjaUIwYUdVZ1UzZHBkR05vSUdac2IzY3RZMjl1ZEhKdmJDQnViMlJsSUNoRVJVTkJSaTB6TWlEQ3B6SXlMakl1TWlrdVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1JYWmhiSFZoZEdWeklHVmhZMmdnWTJGelpTZHpJR052Ym1ScGRHbHZiaUJoWjJGcGJuTjBJSFJvWlNCdWIyUmxKM01nYVc1d2RYUWdZVzVrWEc0Z0tpQnliM1YwWlhNZ2RHaGxJR2x1Y0hWMElIUnZJSFJvWlNCbWFYSnpkQ0J0WVhSamFHbHVaeUJqWVhObEozTWdiM1YwY0hWMElIQnZjblF1SUVaaGJHeHpJR0poWTJzZ2RHOWNiaUFxSUhSb1pTQmdaR1ZtWVhWc2RHQWdiM1YwY0hWMElIZG9aVzRnYm04Z1kyRnpaU0J0WVhSamFHVnpMaUJUZFhCd2IzSjBjeUJpYjNSb1hHNGdLaUI3UUd4cGJtc2dRMjl1WkdsMGFXOXVSWGh3Y21WemMybHZibjBnS0dkeVlYQm9hV05oYkNCdGIyUmxLU0JoYm1RZ2UwQnNhVzVySUVOdlpHVkRiMjVrYVhScGIyNTlYRzRnS2lBb1kyOWtaU0J0YjJSbElIWnBZU0IwYUdVZ2NHeDFaMmRoWW14bElIdEFiR2x1YXlCRGIyUmxVMkZ1WkdKdmVFVjJZV3gxWVhSdmNuMHBMbHh1SUNvdlhHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9UbTlrWlVWNFpXTjFkRzl5SUgwZ1puSnZiU0JjSWk0dlIzSmhjR2hPYjJSbFJYaGxZM1YwYjNKY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVEYjI1MFpYaDBJSDBnWm5KdmJTQmNJaTR2UjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwWlhoMFhDSTdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFZHlZWEJvUlhobFkzVjBhVzl1Vm1Gc2RXVnpJSDBnWm5KdmJTQmNJaTR1TDNSNWNHVnpYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdYRzRnSUZOM2FYUmphRU5oYzJWRGIyNWthWFJwYjI0c1hHNGdJRk4zYVhSamFFNXZaR1ZOWlhSaFpHRjBZU3hjYmlBZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJpeGNiaUFnUTI5a1pVTnZibVJwZEdsdmJpeGNibjBnWm5KdmJTQmNJaTR1THk0dUwzTm9ZWEpsWkM5MGVYQmxjMXdpTzF4dWFXMXdiM0owSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVGY25KdmNpQjlJR1p5YjIwZ1hDSXVMaTlsY25KdmNuTXZSM0poY0doRmVHVmpkWFJwYjI1RmNuSnZjbHdpTzF4dWFXMXdiM0owSUhzZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJrVjJZV3gxWVhSdmNpQjlJR1p5YjIwZ1hDSXVMaTlzYjI5d2N5OURiMjVrYVhScGIyNUZlSEJ5WlhOemFXOXVSWFpoYkhWaGRHOXlYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRU52WkdWVFlXNWtZbTk0UlhaaGJIVmhkRzl5SUgwZ1puSnZiU0JjSWk0dlEyOWtaVk5oYm1SaWIzaEZkbUZzZFdGMGIzSmNJanRjYmx4dUx5b3FYRzRnS2lCU1pXRmtjeUIwYUdVZ1UzZHBkR05vSUcxbGRHRmtZWFJoSUdaeWIyMGdkR2hsSUc1dlpHVWdaR1ZtYVc1cGRHbHZiaWR6SUdkeVlYQm9JRzFsZEdGa1lYUmhMbHh1SUNwY2JpQXFJRlJvWlNCdFpYUmhaR0YwWVNCcGN5QnpkRzl5WldRZ2RXNWtaWElnWUdkeVlYQm9MbTFsZEdGa1lYUmhMbk4zYVhSamFHQWdLSFJvWlNCc2IyTmhkR2x2YmlCMWMyVmtJR0o1WEc0Z0tpQnpkR0YwYVdOaGJHeDVMV1JsWTJ4aGNtVmtJR0JBYm05a1pXQWdkMjl5YTJac2IzZHpLUzRnVjJobGJpQmhZbk5sYm5Rc0lHWmhiR3h6SUdKaFkyc2dkRzhnWVc0Z1pXMXdkSGxjYmlBcUlHUmxabUYxYkhRZ2QybDBhQ0IwYUdVZ1lHUmxabUYxYkhSZ0lIQnZjblFnWlc1aFlteGxaQzVjYmlBcUwxeHVablZ1WTNScGIyNGdjbVZoWkZOM2FYUmphRTFsZEdGa1lYUmhLRnh1SUNCamIyNTBaWGgwT2lCSGNtRndhRVY0WldOMWRHbHZia052Ym5SbGVIUmNiaWs2SUZOM2FYUmphRTV2WkdWTlpYUmhaR0YwWVNCN1hHNGdJR052Ym5OMElHMWxkR0VnUFNCamIyNTBaWGgwTG01dlpHVXVaM0poY0dnL0xtMWxkR0ZrWVhSaElHRnpYRzRnSUNBZ2ZDQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGx4dUlDQWdJSHdnZFc1a1pXWnBibVZrTzF4dUlDQnBaaUFvSVcxbGRHRXBJSEpsZEhWeWJpQjdJR05oYzJWek9pQmJYU3dnWkdWbVlYVnNkRkJ2Y25RNklGd2laR1ZtWVhWc2RGd2lMQ0JvWVhORVpXWmhkV3gwT2lCbVlXeHpaU0I5TzF4dUlDQmpiMjV6ZENCemQybDBZMmhOWlhSaElEMGdiV1YwWVZ0Y0luTjNhWFJqYUZ3aVhTQmhjeUJUZDJsMFkyaE9iMlJsVFdWMFlXUmhkR0VnZkNCMWJtUmxabWx1WldRN1hHNGdJR2xtSUNnaGMzZHBkR05vVFdWMFlTQjhmQ0FoUVhKeVlYa3VhWE5CY25KaGVTaHpkMmwwWTJoTlpYUmhMbU5oYzJWektTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCN0lHTmhjMlZ6T2lCYlhTd2daR1ZtWVhWc2RGQnZjblE2SUZ3aVpHVm1ZWFZzZEZ3aUxDQm9ZWE5FWldaaGRXeDBPaUJtWVd4elpTQjlPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ1kyRnpaWE02SUhOM2FYUmphRTFsZEdFdVkyRnpaWE1zWEc0Z0lDQWdaR1ZtWVhWc2RGQnZjblE2SUhOM2FYUmphRTFsZEdFdVpHVm1ZWFZzZEZCdmNuUWdQejhnWENKa1pXWmhkV3gwWENJc1hHNGdJQ0FnYUdGelJHVm1ZWFZzZERvZ2MzZHBkR05vVFdWMFlTNW9ZWE5FWldaaGRXeDBJRDA5UFNCMGNuVmxMRnh1SUNCOU8xeHVmVnh1WEc0dktpcGNiaUFxSUVSbGRHVmpkSE1nZDJobGRHaGxjaUJoSUdOdmJtUnBkR2x2YmlCcGN5QmhJR0JEYjJSbFEyOXVaR2wwYVc5dVlDQW9hR0Z6SUdCMGVYQmxPaUJjSW1OdlpHVmNJbUFwTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUJwYzBOdlpHVkRiMjVrYVhScGIyNG9ZMjl1WkRvZ1UzZHBkR05vUTJGelpVTnZibVJwZEdsdmJpazZJR052Ym1RZ2FYTWdRMjlrWlVOdmJtUnBkR2x2YmlCN1hHNGdJSEpsZEhWeWJpQW9YRzRnSUNBZ2RIbHdaVzltSUdOdmJtUWdQVDA5SUZ3aWIySnFaV04wWENJZ0ppWmNiaUFnSUNCamIyNWtJQ0U5UFNCdWRXeHNJQ1ltWEc0Z0lDQWdYQ0owZVhCbFhDSWdhVzRnWTI5dVpDQW1KbHh1SUNBZ0lHTnZibVF1ZEhsd1pTQTlQVDBnWENKamIyUmxYQ0pjYmlBZ0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCRVpYUmxZM1J6SUhkb1pYUm9aWElnWVNCamIyNWthWFJwYjI0Z2FYTWdZU0JnUTI5dVpHbDBhVzl1Ulhod2NtVnpjMmx2Ym1BZ0tHaGhjeUJnYjNCZ0lHWnBaV3hrS1M1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVhORGIyNWthWFJwYjI1RmVIQnlaWE56YVc5dUtGeHVJQ0JqYjI1a09pQlRkMmwwWTJoRFlYTmxRMjl1WkdsMGFXOXVYRzRwT2lCamIyNWtJR2x6SUVOdmJtUnBkR2x2YmtWNGNISmxjM05wYjI0Z2UxeHVJQ0J5WlhSMWNtNGdLRnh1SUNBZ0lIUjVjR1Z2WmlCamIyNWtJRDA5UFNCY0ltOWlhbVZqZEZ3aUlDWW1YRzRnSUNBZ1kyOXVaQ0FoUFQwZ2JuVnNiQ0FtSmx4dUlDQWdJRndpYjNCY0lpQnBiaUJqYjI1a0lDWW1YRzRnSUNBZ2RIbHdaVzltSUdOdmJtUXViM0FnUFQwOUlGd2ljM1J5YVc1blhDSmNiaUFnS1R0Y2JuMWNibHh1THlvcVhHNGdLaUJGZUdWamRYUnZjaUJtYjNJZ1lHTnZjbVV1Wm14dmR5NXpkMmwwWTJoZ0lHNXZaR1Z6TGx4dUlDcGNiaUFxSUVWMllXeDFZWFJsY3lCbFlXTm9JR05oYzJVbmN5QmpiMjVrYVhScGIyNGdhVzRnYjNKa1pYSWdZVzVrSUhKdmRYUmxjeUIwYUdVZ2FXNXdkWFFnZEc4Z2RHaGxYRzRnS2lCbWFYSnpkQ0J0WVhSamFHbHVaeUJqWVhObEozTWdiM1YwY0hWMElIQnZjblF1SUZkb1pXNGdibThnWTJGelpTQnRZWFJqYUdWek9seHVJQ29nTFNCSlppQmdhR0Z6UkdWbVlYVnNkR0FnYVhNZ1lIUnlkV1ZnTENCeWIzVjBaWE1nZEc4Z2RHaGxJR0JrWldaaGRXeDBZQ0J2ZFhSd2RYUWdjRzl5ZEM1Y2JpQXFJQzBnU1dZZ1lHaGhjMFJsWm1GMWJIUmdJR2x6SUdCbVlXeHpaV0FnS0hSb1pTQmtaV1poZFd4MEtTd2dkR2h5YjNkeklHQkhVa0ZRU0Y5VFYwbFVRMGhmVGs5ZlRVRlVRMGhnTGx4dUlDcGNiaUFxSUVOdmJtUnBkR2x2YmlCbGRtRnNkV0YwYVc5dU9seHVJQ29nTFNCZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJtQWc0b0NVSUdWMllXeDFZWFJsWkNCMmFXRWdlMEJzYVc1cklFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNUZkbUZzZFdGMGIzSjlMbHh1SUNvZ0xTQmdRMjlrWlVOdmJtUnBkR2x2Ym1BZzRvQ1VJR1YyWVd4MVlYUmxaQ0IyYVdFZ2RHaGxJSEJzZFdkbllXSnNaU0I3UUd4cGJtc2dRMjlrWlZOaGJtUmliM2hGZG1Gc2RXRjBiM0o5WEc0Z0tpQWdJR1p5YjIwZ2RHaGxJR1Z1WjJsdVpTZHpJR052Ym1acFp5NGdWR2h5YjNkeklHQkhVa0ZRU0Y5RFQwUkZYMU5CVGtSQ1QxaGZUazlVWDBOUFRrWkpSMVZTUlVSZ1hHNGdLaUFnSUhkb1pXNGdibThnWlhaaGJIVmhkRzl5SUdseklISmxaMmx6ZEdWeVpXUXVYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJUZDJsMFkyaEhjbUZ3YUU1dlpHVkZlR1ZqZFhSdmNpQnBiWEJzWlcxbGJuUnpJRWR5WVhCb1RtOWtaVVY0WldOMWRHOXlJSHRjYmlBZ2NISnBkbUYwWlNCeVpXRmtiMjVzZVNCbGVIQnlaWE56YVc5dVJYWmhiSFZoZEc5eUlEMGdibVYzSUVOdmJtUnBkR2x2YmtWNGNISmxjM05wYjI1RmRtRnNkV0YwYjNJb0tUdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaGNiaUFnSUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUdWdVoybHVaVDg2SUhzZ1kyOWtaVk5oYm1SaWIzaEZkbUZzZFdGMGIzSS9PaUJEYjJSbFUyRnVaR0p2ZUVWMllXeDFZWFJ2Y2lCOVhHNGdJQ2tnZTMxY2JseHVJQ0JoYzNsdVl5QmxlR1ZqZFhSbEtGeHVJQ0FnSUdsdWNIVjBPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JpQWdJQ0JqYjI1MFpYaDBPaUJIY21Gd2FFVjRaV04xZEdsdmJrTnZiblJsZUhSY2JpQWdLVG9nVUhKdmJXbHpaVHhIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3o0Z2UxeHVJQ0FnSUdOdmJuTjBJRzFsZEdFZ1BTQnlaV0ZrVTNkcGRHTm9UV1YwWVdSaGRHRW9ZMjl1ZEdWNGRDazdYRzRnSUNBZ1kyOXVjM1FnYVc1d2RYUldZV3gxWlNBOUlHbHVjSFYwVzF3aWRtRnNkV1ZjSWwwZ1B6OGdhVzV3ZFhRN1hHNWNiaUFnSUNCbWIzSWdLR052Ym5OMElITjNhWFJqYUVOaGMyVWdiMllnYldWMFlTNWpZWE5sY3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYldGMFkyaGxjeUE5SUdGM1lXbDBJSFJvYVhNdVpYWmhiSFZoZEdWRGIyNWthWFJwYjI0b1hHNGdJQ0FnSUNBZ0lITjNhWFJqYUVOaGMyVXVZMjl1WkdsMGFXOXVMRnh1SUNBZ0lDQWdJQ0JwYm5CMWRGWmhiSFZsTEZ4dUlDQWdJQ0FnSUNCcGJuQjFkQ3hjYmlBZ0lDQWdJQ0FnWTI5dWRHVjRkRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQWdJR2xtSUNodFlYUmphR1Z6S1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCN0lGdHpkMmwwWTJoRFlYTmxMbTkxZEhCMWRGQnZjblJkT2lCcGJuQjFkRlpoYkhWbElIMDdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdUbThnWTJGelpTQnRZWFJqYUdWa0lPS0FsQ0J5YjNWMFpTQjBieUIwYUdVZ1pHVm1ZWFZzZENCd2IzSjBJSGRvWlc0Z2FYUWdhWE1nWlc1aFlteGxaQzVjYmlBZ0lDQnBaaUFvYldWMFlTNW9ZWE5FWldaaGRXeDBJQ0U5UFNCMGNuVmxLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUjNKaGNHaEZlR1ZqZFhScGIyNUZjbkp2Y2loY2JpQWdJQ0FnSUNBZ1hDSk9ieUJ6ZDJsMFkyZ2dZMkZ6WlNCdFlYUmphR1ZrSUdGdVpDQmtaV1poZFd4MElIQnZjblFnYVhNZ2JtOTBJR1Z1WVdKc1pXUmNJaXhjYmlBZ0lDQWdJQ0FnWENKSFVrRlFTRjlUVjBsVVEwaGZUazlmVFVGVVEwaGNJaXhjYmlBZ0lDQWdJQ0FnZXlCallYTmxjem9nYldWMFlTNWpZWE5sY3k1dFlYQW9LR01wSUQwK0lHTXVhV1FwSUgxY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElHUmxabUYxYkhSUWIzSjBJRDBnYldWMFlTNWtaV1poZFd4MFVHOXlkQ0EvUHlCY0ltUmxabUYxYkhSY0lqdGNiaUFnSUNCeVpYUjFjbTRnZXlCYlpHVm1ZWFZzZEZCdmNuUmRPaUJwYm5CMWRGWmhiSFZsSUgwN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSWFpoYkhWaGRHVnpJR0VnYzJsdVoyeGxJSE4zYVhSamFDQmpZWE5sSUdOdmJtUnBkR2x2Ymk1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ1lYTjVibU1nWlhaaGJIVmhkR1ZEYjI1a2FYUnBiMjRvWEc0Z0lDQWdZMjl1WkdsMGFXOXVPaUJUZDJsMFkyaERZWE5sUTI5dVpHbDBhVzl1TEZ4dUlDQWdJR2x1Y0hWMFZtRnNkV1U2SUhWdWEyNXZkMjRzWEc0Z0lDQWdablZzYkVsdWNIVjBPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JpQWdJQ0JqYjI1MFpYaDBPaUJIY21Gd2FFVjRaV04xZEdsdmJrTnZiblJsZUhSY2JpQWdLVG9nVUhKdmJXbHpaVHhpYjI5c1pXRnVQaUI3WEc0Z0lDQWdhV1lnS0dselEyOWtaVU52Ym1ScGRHbHZiaWhqYjI1a2FYUnBiMjRwS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NWxkbUZzZFdGMFpVTnZaR1ZEYjI1a2FYUnBiMjRvWTI5dVpHbDBhVzl1TENCbWRXeHNTVzV3ZFhRc0lHTnZiblJsZUhRcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHBjME52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjRvWTI5dVpHbDBhVzl1S1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaWGh3Y21WemMybHZia1YyWVd4MVlYUnZjaTVsZG1Gc2RXRjBaU2hqYjI1a2FYUnBiMjRzSUdsdWNIVjBWbUZzZFdVcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2NtOTNJRzVsZHlCSGNtRndhRVY0WldOMWRHbHZia1Z5Y205eUtGeHVJQ0FnSUNBZ1hDSlZibXR1YjNkdUlITjNhWFJqYUNCallYTmxJR052Ym1ScGRHbHZiaUIwZVhCbElPS0FsQ0J0ZFhOMElHSmxJRU52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjRnS0c5d0tTQnZjaUJEYjJSbFEyOXVaR2wwYVc5dUlDaDBlWEJsT2lBblkyOWtaU2NwWENJc1hHNGdJQ0FnSUNCY0lrZFNRVkJJWDFWT1MwNVBWMDVmVTFkSlZFTklYME5QVGtSSlZFbFBUbHdpTEZ4dUlDQWdJQ0FnZXlCamIyNWthWFJwYjI0Z2ZWeHVJQ0FnSUNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dSWFpoYkhWaGRHVnpJR0VnWTI5a1pTQmpiMjVrYVhScGIyNGdkbWxoSUhSb1pTQndiSFZuWjJGaWJHVWdjMkZ1WkdKdmVDQmxkbUZzZFdGMGIzSXVYRzRnSUNBcUwxeHVJQ0J3Y21sMllYUmxJR0Z6ZVc1aklHVjJZV3gxWVhSbFEyOWtaVU52Ym1ScGRHbHZiaWhjYmlBZ0lDQmpiMjVrYVhScGIyNDZJRU52WkdWRGIyNWthWFJwYjI0c1hHNGdJQ0FnYVc1d2RYUTZJRWR5WVhCb1JYaGxZM1YwYVc5dVZtRnNkV1Z6TEZ4dUlDQWdJR052Ym5SbGVIUTZJRWR5WVhCb1JYaGxZM1YwYVc5dVEyOXVkR1Y0ZEZ4dUlDQXBPaUJRY205dGFYTmxQR0p2YjJ4bFlXNCtJSHRjYmlBZ0lDQmpiMjV6ZENCbGRtRnNkV0YwYjNJZ1BTQjBhR2x6TG1WdVoybHVaVDh1WTI5a1pWTmhibVJpYjNoRmRtRnNkV0YwYjNJN1hHNGdJQ0FnYVdZZ0tDRmxkbUZzZFdGMGIzSXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJIY21Gd2FFVjRaV04xZEdsdmJrVnljbTl5S0Z4dUlDQWdJQ0FnSUNCY0lrTnZaR1VnWTI5dVpHbDBhVzl1Y3lCeVpYRjFhWEpsSUdFZ1EyOWtaVk5oYm1SaWIzaEZkbUZzZFdGMGIzSWdkRzhnWW1VZ2NtVm5hWE4wWlhKbFpDQnBiaUJIY21Gd2FFVjRaV04xZEdsdmJrVnVaMmx1WlVOdmJtWnBaeTVqYjJSbFUyRnVaR0p2ZUVWMllXeDFZWFJ2Y2x3aUxGeHVJQ0FnSUNBZ0lDQmNJa2RTUVZCSVgwTlBSRVZmVTBGT1JFSlBXRjlPVDFSZlEwOU9Sa2xIVlZKRlJGd2lMRnh1SUNBZ0lDQWdJQ0I3SUdOdlpHVTZJR052Ym1ScGRHbHZiaTVqYjJSbElIMWNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1lYZGhhWFFnWTI5dWRHVjRkQzVzYjJjb1lFVjJZV3gxWVhScGJtY2dZMjlrWlNCamIyNWthWFJwYjI1Z0xDQjdYRzRnSUNBZ0lDQnNZVzVuZFdGblpUb2dZMjl1WkdsMGFXOXVMbXhoYm1kMVlXZGxJRDgvSUZ3aWFtRjJZWE5qY21sd2RGd2lMRnh1SUNBZ0lIMHBPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JXUWdQU0JqYjI1MFpYaDBMbTFsZEdGa1lYUmhJR0Z6SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtJSHdnZFc1a1pXWnBibVZrTzF4dVhHNGdJQ0FnWTI5dWMzUWdjbVZ6ZFd4MElEMGdZWGRoYVhRZ1pYWmhiSFZoZEc5eUxtVjJZV3gxWVhSbEtIdGNiaUFnSUNBZ0lHTnZaR1U2SUdOdmJtUnBkR2x2Ymk1amIyUmxMRnh1SUNBZ0lDQWdiR0Z1WjNWaFoyVTZJR052Ym1ScGRHbHZiaTVzWVc1bmRXRm5aU3hjYmlBZ0lDQWdJR2x1Y0hWMExGeHVJQ0FnSUNBZ2RtRnljem9nS0cxa1B5NTJZWEp6SUdGeklGSmxZMjl5WkR4emRISnBibWNzSUhWdWEyNXZkMjQrSUh3Z2RXNWtaV1pwYm1Wa0tTQS9QeUIxYm1SbFptbHVaV1FzWEc0Z0lDQWdJQ0JwZEdWdE9pQnRaRDh1YVhSbGJTeGNiaUFnSUNBZ0lHbHVaR1Y0T2lCdFpEOHVhVzVrWlhnZ1lYTWdiblZ0WW1WeUlId2dkVzVrWldacGJtVmtMRnh1SUNBZ0lDQWdibTlrWlhNNlhHNGdJQ0FnSUNBZ0lDaHRaRDh1Ym05a1pYTWdZWE1nVW1WamIzSmtQSE4wY21sdVp5d2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2RXNXJibTkzYmo0K0lId2dkVzVrWldacGJtVmtLU0EvUDF4dUlDQWdJQ0FnSUNCMWJtUmxabWx1WldRc1hHNGdJQ0FnSUNCc2IyZG5aWEk2SUdOdmJuUmxlSFF1Ykc5bloyVnlJR0Z6SUhWdWEyNXZkMjRnWVhOY2JpQWdJQ0FnSUNBZ2ZDQnBiWEJ2Y25Rb1hDSXVMME52WkdWVFlXNWtZbTk0UlhaaGJIVmhkRzl5WENJcExsTmhibVJpYjNoTWIyZG5aWEpjYmlBZ0lDQWdJQ0FnZkNCMWJtUmxabWx1WldRc1hHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnSVNGeVpYTjFiSFE3WEc0Z0lIMWNibjFjYmlKZGZRPT0iXX0=
|