dcdx 1.2.0 → 1.3.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/versions.json +1 -1
- package/lib/commands/apt.js +11105 -0
- package/lib/commands/build.js +1831 -772
- package/lib/commands/database.js +1553 -718
- package/lib/commands/debug.js +1872 -865
- package/lib/commands/install.js +9456 -0
- package/lib/commands/reset.js +1720 -799
- package/lib/commands/run.js +1684 -770
- package/lib/commands/stop.js +1720 -799
- package/lib/commands/update.js +9093 -0
- package/lib/index.js +73 -2
- package/lib/types/src/applications/bamboo.d.ts +0 -2
- package/lib/types/src/applications/base.d.ts +5 -4
- package/lib/types/src/applications/bitbucket.d.ts +0 -2
- package/lib/types/src/applications/confluence.d.ts +0 -2
- package/lib/types/src/applications/jira.d.ts +0 -2
- package/lib/types/src/apt/helpers/dcapt.d.ts +6 -0
- package/lib/types/src/apt/helpers/generatePerformanceReport.d.ts +2 -0
- package/lib/types/src/apt/helpers/generateScalabilityReport.d.ts +2 -0
- package/lib/types/src/apt/helpers/getAWSCredentials.d.ts +2 -0
- package/lib/types/src/apt/helpers/getAptDirectory.d.ts +1 -0
- package/lib/types/src/apt/helpers/getClusterURL.d.ts +2 -0
- package/lib/types/src/apt/helpers/getDuration.d.ts +3 -0
- package/lib/types/src/apt/helpers/getEnvironmentName.d.ts +1 -0
- package/lib/types/src/apt/helpers/getHostLicense.d.ts +4 -0
- package/lib/types/src/apt/helpers/getNodeNumberForStage.d.ts +2 -0
- package/lib/types/src/apt/helpers/getOutputDirectory.d.ts +1 -0
- package/lib/types/src/apt/helpers/getProduct.d.ts +2 -0
- package/lib/types/src/apt/helpers/getReindexProgress.d.ts +1 -0
- package/lib/types/src/apt/helpers/getReport.d.ts +2 -0
- package/lib/types/src/apt/helpers/getReportDirectory.d.ts +1 -0
- package/lib/types/src/apt/helpers/getResults.d.ts +2 -0
- package/lib/types/src/apt/helpers/getResultsDirectory.d.ts +2 -0
- package/lib/types/src/apt/helpers/getRunForStage.d.ts +2 -0
- package/lib/types/src/apt/helpers/installApp.d.ts +1 -0
- package/lib/types/src/apt/helpers/persistClusterConfiguration.d.ts +1 -0
- package/lib/types/src/apt/helpers/persistTestConfiguration.d.ts +2 -0
- package/lib/types/src/apt/helpers/persistsAWSCredentials.d.ts +1 -0
- package/lib/types/src/apt/helpers/provisionCluster.d.ts +8 -0
- package/lib/types/src/apt/helpers/reindex.d.ts +1 -0
- package/lib/types/src/apt/helpers/runPerformanceTest.d.ts +2 -0
- package/lib/types/src/apt/helpers/runScalabilityTest.d.ts +2 -0
- package/lib/types/src/apt/helpers/teardownCluster.d.ts +2 -0
- package/lib/types/src/apt/helpers/waitForUserInput.d.ts +2 -0
- package/lib/types/src/apt/messages.d.ts +30 -0
- package/lib/types/src/apt/performance.d.ts +2 -0
- package/lib/types/src/apt/scalability.d.ts +2 -0
- package/lib/types/src/commands/apt.d.ts +2 -0
- package/lib/types/src/commands/install.d.ts +2 -0
- package/lib/types/src/commands/update.d.ts +2 -0
- package/lib/types/src/helpers/ActionHandler.d.ts +8 -3
- package/lib/types/src/helpers/CustomBuilder.d.ts +12 -0
- package/lib/types/src/helpers/FileWatcher.d.ts +2 -2
- package/lib/types/src/helpers/Installer.d.ts +3 -0
- package/lib/types/src/helpers/amps.d.ts +1 -0
- package/lib/types/src/helpers/capitalize.d.ts +1 -0
- package/lib/types/src/helpers/generateVersionList.d.ts +3 -0
- package/lib/types/src/helpers/getDatabaseEngine.d.ts +1 -1
- package/lib/types/src/helpers/getVersions.d.ts +1 -0
- package/lib/types/src/helpers/isOfType.d.ts +1 -0
- package/lib/types/src/helpers/licences.d.ts +1 -0
- package/lib/types/src/helpers/readLinesInFile.d.ts +1 -0
- package/lib/types/src/helpers/replaceLinesInFile.d.ts +1 -0
- package/lib/types/src/helpers/upm.d.ts +3 -0
- package/lib/types/src/types/AMPS.d.ts +40 -13
- package/lib/types/src/types/Application.d.ts +15 -11
- package/lib/types/src/types/DCAPT.d.ts +302 -0
- package/package.json +20 -8
package/lib/commands/build.js
CHANGED
|
@@ -1,347 +1,743 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command as Command$1, Option, InvalidOptionArgumentError } from 'commander';
|
|
3
3
|
import { asyncExitHook, gracefulExit } from 'exit-hook';
|
|
4
|
+
import { glob } from 'glob';
|
|
5
|
+
import { join, resolve, dirname } from 'path';
|
|
6
|
+
import { cwd } from 'process';
|
|
4
7
|
import { z } from 'zod';
|
|
5
8
|
import { DOMParser, XMLSerializer } from '@xmldom/xmldom';
|
|
6
|
-
import { spawn } from 'child_process';
|
|
9
|
+
import { spawn, execSync } from 'child_process';
|
|
7
10
|
import { XMLParser } from 'fast-xml-parser';
|
|
8
|
-
import { existsSync, readFileSync } from 'fs';
|
|
9
|
-
import { join, resolve } from 'path';
|
|
10
|
-
import { cwd } from 'process';
|
|
11
|
+
import { existsSync, readFileSync, createReadStream, realpathSync, writeFileSync } from 'fs';
|
|
11
12
|
import xpath from 'xpath';
|
|
12
13
|
import { watch } from 'chokidar';
|
|
13
14
|
import Dockerode from 'dockerode';
|
|
15
|
+
import axios from 'axios';
|
|
16
|
+
import FormData from 'form-data';
|
|
17
|
+
import console$1 from 'console';
|
|
18
|
+
import semver from 'semver';
|
|
19
|
+
|
|
20
|
+
const ActionHandler = async (program, { action, errorHandler }, options) => {
|
|
21
|
+
const ops = options || program.opts();
|
|
22
|
+
await new Promise((_, reject) => {
|
|
23
|
+
let errorMessage = '';
|
|
24
|
+
asyncExitHook(async (code) => {
|
|
25
|
+
try {
|
|
26
|
+
if (code !== 0) {
|
|
27
|
+
await errorHandler(ops).catch(() => null);
|
|
28
|
+
}
|
|
29
|
+
if (errorMessage) {
|
|
30
|
+
throw new Error(errorMessage.trim());
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// We are rejecting the promise to avoid the
|
|
34
|
+
// "Calling process.exit" log message from exit-hook
|
|
35
|
+
reject(null);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
const message = err instanceof Error ? err.message : err;
|
|
40
|
+
reject(message);
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
wait: 60 * 1 * 1000
|
|
44
|
+
});
|
|
45
|
+
action(ops).catch(err => {
|
|
46
|
+
if (err instanceof z.ZodError) {
|
|
47
|
+
err.issues.forEach(issue => {
|
|
48
|
+
errorMessage += `Unable to parse option ${issue.path.join(',')}: ${issue.message}\n`;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else if (err instanceof Error || typeof err === 'string') {
|
|
52
|
+
errorMessage = err.toString();
|
|
53
|
+
}
|
|
54
|
+
gracefulExit(1);
|
|
55
|
+
});
|
|
56
|
+
}).catch(message => {
|
|
57
|
+
if (message !== null) {
|
|
58
|
+
program.error(message);
|
|
59
|
+
// If there is no error message,
|
|
60
|
+
// we can assume a clean exit
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
};
|
|
14
67
|
|
|
15
68
|
var jira = [
|
|
16
69
|
"latest",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
70
|
+
"10.3.0-EAP01-jdk17",
|
|
71
|
+
"10.3.0-EAP01",
|
|
72
|
+
"10.3.0-EAP01-ubuntu-jdk17",
|
|
73
|
+
"10.3.0-EAP01-ubi9",
|
|
74
|
+
"10.3.0-EAP01-ubi9-jdk17",
|
|
75
|
+
"10.2-jdk17",
|
|
76
|
+
"10.2.0",
|
|
77
|
+
"10.2",
|
|
78
|
+
"10-jdk17",
|
|
79
|
+
"ubuntu-jdk17",
|
|
80
|
+
"10.2.0-jdk17",
|
|
81
|
+
"jdk17",
|
|
82
|
+
"10-ubuntu-jdk17",
|
|
83
|
+
"10.2-ubuntu-jdk17",
|
|
84
|
+
"10",
|
|
85
|
+
"10.2.0-ubuntu-jdk17",
|
|
86
|
+
"10.2.0-ubi9-jdk17",
|
|
87
|
+
"10.2.0-ubi9",
|
|
30
88
|
"ubi9",
|
|
31
89
|
"ubi9-jdk17",
|
|
90
|
+
"10.2.0-RC",
|
|
91
|
+
"10.2.0-RC-ubuntu-jdk17",
|
|
92
|
+
"10.2.0-RC-jdk17",
|
|
93
|
+
"10.2.0-RC-ubi9",
|
|
94
|
+
"10.2.0-RC-ubi9-jdk17",
|
|
95
|
+
"9-ubuntu-jdk17",
|
|
96
|
+
"9.9.0",
|
|
97
|
+
"9-ubuntu-jdk11",
|
|
98
|
+
"9-jdk17",
|
|
99
|
+
"9-jdk11",
|
|
100
|
+
"9.9-ubuntu-jdk17",
|
|
101
|
+
"9.9-ubuntu-jdk11",
|
|
102
|
+
"9.9.2-ubuntu-jdk17",
|
|
103
|
+
"9.9-jdk17",
|
|
104
|
+
"9.9-jdk11",
|
|
105
|
+
"9.9.2-ubi9-jdk17",
|
|
106
|
+
"9.9.2-ubuntu-jdk11",
|
|
107
|
+
"9.9.2-ubi9",
|
|
108
|
+
"9.9.2-jdk17",
|
|
109
|
+
"9.9.2",
|
|
110
|
+
"9.9.2-jdk11",
|
|
111
|
+
"9.9.1-ubuntu-jdk17",
|
|
112
|
+
"9.9.1-ubuntu-jdk11",
|
|
113
|
+
"9.9.1-ubi9-jdk17",
|
|
114
|
+
"9.9.1-ubi9",
|
|
115
|
+
"9.9.1-jdk17",
|
|
116
|
+
"9.9.1-jdk11",
|
|
117
|
+
"9.9.0-ubuntu-jdk17",
|
|
118
|
+
"9.9.1",
|
|
119
|
+
"9.5.0-ubi9-jdk17",
|
|
120
|
+
"9.8-jdk17",
|
|
121
|
+
"9.9.0-ubuntu-jdk11",
|
|
122
|
+
"9.9.0-ubi9-jdk17",
|
|
123
|
+
"9.9.0-ubi9",
|
|
124
|
+
"9.9.0-jdk17",
|
|
125
|
+
"9.9.0-jdk11",
|
|
126
|
+
"9.9",
|
|
127
|
+
"9.8-ubuntu-jdk17",
|
|
128
|
+
"9.8-ubuntu-jdk11",
|
|
129
|
+
"9.8-jdk11",
|
|
130
|
+
"9.8.2-ubuntu-jdk17",
|
|
131
|
+
"9.8.2-ubuntu-jdk11",
|
|
132
|
+
"9.8.2-ubi9-jdk17",
|
|
133
|
+
"9.8.2-ubi9",
|
|
134
|
+
"9.8.2-jdk17",
|
|
135
|
+
"9.8.2-jdk11",
|
|
136
|
+
"9.8.1-ubuntu-jdk17",
|
|
137
|
+
"9.8.2",
|
|
138
|
+
"9.8.1-ubuntu-jdk11",
|
|
139
|
+
"9.8.1-ubi9-jdk17",
|
|
140
|
+
"9.8.1-ubi9",
|
|
141
|
+
"9.8.1-jdk11",
|
|
142
|
+
"9.8.1-jdk17",
|
|
143
|
+
"9.8.1",
|
|
144
|
+
"9.8.0-ubuntu-jdk17",
|
|
32
145
|
"9.8.0-ubuntu-jdk11",
|
|
33
|
-
"9.
|
|
34
|
-
"9.
|
|
146
|
+
"9.8.0-ubi9-jdk17",
|
|
147
|
+
"9.8.0-jdk17",
|
|
148
|
+
"9.8.0-ubi9",
|
|
35
149
|
"9.8.0-jdk11",
|
|
36
|
-
"9.5-jdk11",
|
|
37
150
|
"9.8.0",
|
|
38
|
-
"9.
|
|
39
|
-
"9.
|
|
151
|
+
"9.8",
|
|
152
|
+
"9.7-ubuntu-jdk17",
|
|
153
|
+
"9.7-ubuntu-jdk11",
|
|
154
|
+
"9.7-jdk17",
|
|
155
|
+
"9.7-jdk11",
|
|
156
|
+
"9.7.2-ubuntu-jdk17",
|
|
157
|
+
"9.7.2-ubuntu-jdk11",
|
|
158
|
+
"9.7.2-ubi9-jdk17",
|
|
159
|
+
"9.7.2-ubi9",
|
|
160
|
+
"9.7.2-jdk17",
|
|
161
|
+
"9.7.2-jdk11",
|
|
162
|
+
"9.7.1-ubuntu-jdk17",
|
|
163
|
+
"9.7.2",
|
|
164
|
+
"9.7.1-ubuntu-jdk11",
|
|
165
|
+
"9.7.1-ubi9-jdk17",
|
|
166
|
+
"9.7.1-ubi9",
|
|
167
|
+
"9.7.1-jdk17",
|
|
168
|
+
"9.7.1-jdk11",
|
|
169
|
+
"9.7.1",
|
|
170
|
+
"9.7.0-ubuntu-jdk17",
|
|
171
|
+
"9.7.0-ubuntu-jdk11",
|
|
172
|
+
"9.7.0-ubi9-jdk17",
|
|
173
|
+
"9.7.0-ubi9",
|
|
174
|
+
"9.7.0-jdk17",
|
|
175
|
+
"9.7.0-jdk11",
|
|
176
|
+
"9.7.0",
|
|
177
|
+
"9.7",
|
|
178
|
+
"9.6-ubuntu-jdk17",
|
|
179
|
+
"9.6-ubuntu-jdk11",
|
|
180
|
+
"9.6-jdk11",
|
|
181
|
+
"9.6-jdk17",
|
|
182
|
+
"9.6.0-ubuntu-jdk17",
|
|
183
|
+
"9.6.0-ubi9-jdk17",
|
|
184
|
+
"9.6.0-ubuntu-jdk11",
|
|
185
|
+
"9.6.0-ubi9",
|
|
186
|
+
"9.6.0-jdk17",
|
|
187
|
+
"9.6.0-jdk11",
|
|
188
|
+
"9.6.0",
|
|
189
|
+
"9.6",
|
|
190
|
+
"9.5-ubuntu-jdk17",
|
|
191
|
+
"9.5-ubuntu-jdk11",
|
|
192
|
+
"9.5-jdk17",
|
|
193
|
+
"9.5-jdk11",
|
|
194
|
+
"9.5.1-ubuntu-jdk17",
|
|
40
195
|
"9.5.1-ubuntu-jdk11",
|
|
196
|
+
"9.5.1-ubi9-jdk17",
|
|
197
|
+
"9.5.1-ubi9",
|
|
198
|
+
"9.5.1-jdk17",
|
|
41
199
|
"9.5.1-jdk11",
|
|
200
|
+
"9.5.1",
|
|
201
|
+
"9.5.0-ubuntu-jdk17",
|
|
42
202
|
"9.5.0-ubuntu-jdk11",
|
|
203
|
+
"9.5.0-ubi9",
|
|
204
|
+
"9.5.0-jdk17",
|
|
43
205
|
"9.5.0-jdk11",
|
|
44
206
|
"9.5.0",
|
|
45
|
-
"9.5.1",
|
|
46
|
-
"9.10.2",
|
|
47
207
|
"9.5",
|
|
208
|
+
"9.4-jdk11",
|
|
209
|
+
"9.4-ubuntu-jdk11",
|
|
210
|
+
"9.4.9-ubuntu-jdk11",
|
|
211
|
+
"9.4.9-jdk11",
|
|
212
|
+
"9.4.9",
|
|
213
|
+
"9.4.8-ubuntu-jdk11",
|
|
214
|
+
"9.4.8",
|
|
215
|
+
"9.4.8-jdk11",
|
|
216
|
+
"9.4.7-ubuntu-jdk11",
|
|
217
|
+
"9.4.7-jdk11",
|
|
218
|
+
"9.4.7",
|
|
219
|
+
"9.4.6-ubuntu-jdk11",
|
|
220
|
+
"9.4.6-jdk11",
|
|
221
|
+
"9.4.6",
|
|
222
|
+
"9.4.5-ubuntu-jdk11",
|
|
223
|
+
"9.4.5-jdk11",
|
|
224
|
+
"9.4.5",
|
|
225
|
+
"9.4.4-ubuntu-jdk11",
|
|
226
|
+
"9.4.4-jdk11",
|
|
227
|
+
"9.4.4",
|
|
228
|
+
"9.4.3-ubuntu-jdk11",
|
|
229
|
+
"9.4.3-jdk11",
|
|
230
|
+
"9.4.3",
|
|
231
|
+
"9.4.2-ubuntu-jdk11",
|
|
232
|
+
"9.4.28-ubuntu-jdk11",
|
|
233
|
+
"9.4.2-jdk11",
|
|
234
|
+
"9.4.28-jdk11",
|
|
235
|
+
"9.4.28",
|
|
236
|
+
"9.4.27-ubuntu-jdk11",
|
|
237
|
+
"9.4.27-jdk11",
|
|
238
|
+
"9.4.27",
|
|
239
|
+
"9.4.26-ubuntu-jdk11",
|
|
240
|
+
"9.4.26-jdk11",
|
|
241
|
+
"9.4.26",
|
|
242
|
+
"9.4.25-ubuntu-jdk11",
|
|
243
|
+
"9.4.25-jdk11",
|
|
244
|
+
"9.4.25",
|
|
245
|
+
"9.4.24-ubuntu-jdk11",
|
|
246
|
+
"9.4.24-jdk11",
|
|
247
|
+
"9.4.24",
|
|
248
|
+
"9.4.23-jdk11",
|
|
249
|
+
"9.4.23-ubuntu-jdk11",
|
|
250
|
+
"9.4.23",
|
|
251
|
+
"9.4.22-ubuntu-jdk11",
|
|
252
|
+
"9.4.22-jdk11",
|
|
253
|
+
"9.4.22",
|
|
254
|
+
"9.4.21-ubuntu-jdk11",
|
|
255
|
+
"9.4.21-jdk11",
|
|
256
|
+
"9.4.21",
|
|
257
|
+
"9.4.20-ubuntu-jdk11",
|
|
258
|
+
"9.4.20-jdk11",
|
|
259
|
+
"9.4.20",
|
|
260
|
+
"9.4.2",
|
|
261
|
+
"9.4.1-ubuntu-jdk11",
|
|
262
|
+
"9.4.1-jdk11",
|
|
263
|
+
"9.4.19-ubuntu-jdk11",
|
|
264
|
+
"9.4.19-jdk11",
|
|
265
|
+
"9.4.19",
|
|
48
266
|
"9.4.18-ubuntu-jdk11",
|
|
267
|
+
"9.4.12-jdk11",
|
|
49
268
|
"9.4.18-jdk11",
|
|
50
269
|
"9.4.18",
|
|
270
|
+
"9.4.17-ubuntu-jdk11",
|
|
271
|
+
"9.4.17-jdk11",
|
|
272
|
+
"9.4.17",
|
|
273
|
+
"9.4.16-jdk11",
|
|
274
|
+
"9.4.16-ubuntu-jdk11",
|
|
275
|
+
"9.4.16",
|
|
276
|
+
"9.4.15-jdk11",
|
|
277
|
+
"9.4.15-ubuntu-jdk11",
|
|
278
|
+
"9.4.15",
|
|
279
|
+
"9.4.14-ubuntu-jdk11",
|
|
280
|
+
"9.4.14-jdk11",
|
|
281
|
+
"9.4.14",
|
|
282
|
+
"9.4.12-ubuntu-jdk11",
|
|
283
|
+
"9.4.12",
|
|
284
|
+
"9.4.11-ubuntu-jdk11",
|
|
285
|
+
"9.4.11-jdk11",
|
|
286
|
+
"9.4.11",
|
|
287
|
+
"9.4.10-ubuntu-jdk11",
|
|
288
|
+
"9.4.10-jdk11",
|
|
289
|
+
"9.4.1",
|
|
290
|
+
"9.4.10",
|
|
291
|
+
"9.4.0-ubuntu-jdk11",
|
|
292
|
+
"9.4.0-jdk11",
|
|
293
|
+
"9.4.0",
|
|
294
|
+
"9.4",
|
|
295
|
+
"9.17-ubuntu-jdk17",
|
|
296
|
+
"9.17-ubuntu-jdk11",
|
|
297
|
+
"9.17-jdk17",
|
|
298
|
+
"9.17.5-ubuntu-jdk11",
|
|
299
|
+
"9.17-jdk11",
|
|
300
|
+
"9.17.5-ubuntu-jdk17",
|
|
301
|
+
"9.17.5-jdk17",
|
|
302
|
+
"9.17.5-ubi9",
|
|
303
|
+
"9.17.5-ubi9-jdk17",
|
|
304
|
+
"9.17.5-jdk11",
|
|
305
|
+
"9.17.5",
|
|
306
|
+
"9.17.4-ubuntu-jdk11",
|
|
307
|
+
"9.17.4-ubuntu-jdk17",
|
|
308
|
+
"9.17.4-ubi9-jdk17",
|
|
309
|
+
"9.17.4-jdk17",
|
|
310
|
+
"9.17.4-ubi9",
|
|
311
|
+
"9.17.4-jdk11",
|
|
312
|
+
"9.17.4",
|
|
313
|
+
"9.17.3-ubuntu-jdk11",
|
|
314
|
+
"9.17.3-ubuntu-jdk17",
|
|
315
|
+
"9.17.3-ubi9-jdk17",
|
|
316
|
+
"9.17.3-ubi9",
|
|
317
|
+
"9.17.3-jdk17",
|
|
318
|
+
"9.17.3",
|
|
319
|
+
"9.17.3-jdk11",
|
|
320
|
+
"9.17.2-ubuntu-jdk17",
|
|
321
|
+
"9.16.0-ubuntu-jdk11",
|
|
322
|
+
"9.17.2-ubuntu-jdk11",
|
|
323
|
+
"9.17.2-ubi9-jdk17",
|
|
324
|
+
"9.17.2-ubi9",
|
|
325
|
+
"9.17.2-jdk17",
|
|
326
|
+
"9.17.2-jdk11",
|
|
327
|
+
"9.17.2",
|
|
328
|
+
"9.17.1-ubuntu-jdk17",
|
|
329
|
+
"9.17.1-ubuntu-jdk11",
|
|
330
|
+
"9.17.1-ubi9-jdk17",
|
|
331
|
+
"9.17.1-ubi9",
|
|
332
|
+
"9.17.1-jdk17",
|
|
333
|
+
"9.17.1-jdk11",
|
|
334
|
+
"9.17.0-ubuntu-jdk17",
|
|
335
|
+
"9.17.1",
|
|
336
|
+
"9.17.0-ubuntu-jdk11",
|
|
337
|
+
"9.17.0-ubi9-jdk17",
|
|
338
|
+
"9.17.0-ubi9",
|
|
339
|
+
"9.17.0-jdk17",
|
|
340
|
+
"9.17.0-jdk11",
|
|
341
|
+
"9.17",
|
|
342
|
+
"9.17.0",
|
|
343
|
+
"9.16-ubuntu-jdk17",
|
|
344
|
+
"9.16-ubuntu-jdk11",
|
|
345
|
+
"9.16-jdk17",
|
|
346
|
+
"9.16-jdk11",
|
|
347
|
+
"9.16.1-ubuntu-jdk17",
|
|
348
|
+
"9.16.1-ubuntu-jdk11",
|
|
349
|
+
"9.16.1-ubi9-jdk17",
|
|
350
|
+
"9.16.1-ubi9",
|
|
351
|
+
"9.16.1-jdk17",
|
|
352
|
+
"9.16.1-jdk11",
|
|
353
|
+
"9.16.1",
|
|
354
|
+
"9.16.0-ubuntu-jdk17",
|
|
355
|
+
"9.16.0-ubi9-jdk17",
|
|
356
|
+
"9.16.0-ubi9",
|
|
357
|
+
"9.16.0-jdk11",
|
|
358
|
+
"9.16.0-jdk17",
|
|
359
|
+
"9.16.0",
|
|
51
360
|
"9.15-ubuntu-jdk11",
|
|
361
|
+
"9.16",
|
|
362
|
+
"9.15-ubuntu-jdk17",
|
|
363
|
+
"9.15-jdk17",
|
|
52
364
|
"9.15-jdk11",
|
|
365
|
+
"9.15.2-ubuntu-jdk17",
|
|
53
366
|
"9.15.2-ubuntu-jdk11",
|
|
367
|
+
"9.15.2-ubi9-jdk17",
|
|
368
|
+
"9.15.2-ubi9",
|
|
369
|
+
"9.15.2-jdk17",
|
|
54
370
|
"9.15.2-jdk11",
|
|
55
371
|
"9.15.2",
|
|
372
|
+
"9.15.1-ubuntu-jdk17",
|
|
373
|
+
"9.15.1-ubuntu-jdk11",
|
|
374
|
+
"9.15.1-ubi9-jdk17",
|
|
375
|
+
"9.15.1-ubi9",
|
|
376
|
+
"9.15.1-jdk17",
|
|
377
|
+
"9.15.1-jdk11",
|
|
378
|
+
"9.15.1",
|
|
379
|
+
"9.15.0-ubuntu-jdk17",
|
|
380
|
+
"9.15.0-ubi9-jdk17",
|
|
381
|
+
"9.15.0-ubuntu-jdk11",
|
|
382
|
+
"9.15.0-ubi9",
|
|
383
|
+
"9.15.0-jdk17",
|
|
384
|
+
"9.15.0",
|
|
385
|
+
"9.15.0-jdk11",
|
|
56
386
|
"9.15",
|
|
387
|
+
"9.14-ubuntu-jdk17",
|
|
388
|
+
"9.14-ubuntu-jdk11",
|
|
389
|
+
"9.14-jdk17",
|
|
390
|
+
"9.14.1-ubuntu-jdk17",
|
|
391
|
+
"9.14-jdk11",
|
|
392
|
+
"9.14.1-ubuntu-jdk11",
|
|
393
|
+
"9.14.1-ubi9",
|
|
394
|
+
"9.14.1-ubi9-jdk17",
|
|
395
|
+
"9.14.1-jdk17",
|
|
396
|
+
"9.14.1",
|
|
397
|
+
"9.14.1-jdk11",
|
|
398
|
+
"9.14.0-ubuntu-jdk17",
|
|
399
|
+
"9.14.0-ubuntu-jdk11",
|
|
400
|
+
"9.14.0-ubi9-jdk17",
|
|
401
|
+
"9.14.0-ubi9",
|
|
402
|
+
"9.14.0-jdk17",
|
|
403
|
+
"9.14.0-jdk11",
|
|
404
|
+
"9.14.0",
|
|
405
|
+
"9.14",
|
|
406
|
+
"9.13-ubuntu-jdk17",
|
|
57
407
|
"9.13-ubuntu-jdk11",
|
|
58
408
|
"9.13-jdk11",
|
|
409
|
+
"9.13-jdk17",
|
|
410
|
+
"9.13.1-ubuntu-jdk17",
|
|
411
|
+
"9.13.1-ubi9-jdk17",
|
|
59
412
|
"9.13.1-ubuntu-jdk11",
|
|
413
|
+
"9.13.1-ubi9",
|
|
414
|
+
"9.13.1-jdk17",
|
|
60
415
|
"9.13.1-jdk11",
|
|
61
416
|
"9.13.1",
|
|
417
|
+
"9.13.0-ubuntu-jdk17",
|
|
418
|
+
"9.13.0-ubuntu-jdk11",
|
|
419
|
+
"9.13.0-ubi9-jdk17",
|
|
420
|
+
"9.13.0-ubi9",
|
|
421
|
+
"9.13.0-jdk17",
|
|
422
|
+
"9.13.0-jdk11",
|
|
423
|
+
"9.13.0",
|
|
62
424
|
"9.13",
|
|
63
|
-
"9.
|
|
64
|
-
"9.
|
|
65
|
-
"9.
|
|
66
|
-
"9.
|
|
67
|
-
"9.
|
|
68
|
-
"9.
|
|
69
|
-
"9.
|
|
70
|
-
"9.
|
|
71
|
-
"9.
|
|
72
|
-
"9.
|
|
73
|
-
"9.
|
|
74
|
-
"9.
|
|
75
|
-
"9.8-ubuntu-jdk11",
|
|
76
|
-
"9.8-
|
|
77
|
-
"9.
|
|
78
|
-
"9.8
|
|
79
|
-
"9.
|
|
80
|
-
"9.
|
|
81
|
-
"9.8
|
|
82
|
-
"9.
|
|
83
|
-
"9.
|
|
84
|
-
"9.
|
|
85
|
-
"9.
|
|
86
|
-
"9.
|
|
87
|
-
"9.
|
|
88
|
-
"9.
|
|
89
|
-
"9.
|
|
90
|
-
"9.
|
|
91
|
-
"9.
|
|
92
|
-
"9.
|
|
93
|
-
"9.
|
|
94
|
-
"9.
|
|
425
|
+
"9.12-ubuntu-jdk17",
|
|
426
|
+
"9.12-ubuntu-jdk11",
|
|
427
|
+
"9.12-jdk17",
|
|
428
|
+
"9.12.9-ubuntu-jdk17",
|
|
429
|
+
"9.12-jdk11",
|
|
430
|
+
"9.12.9-ubuntu-jdk11",
|
|
431
|
+
"9.12.9-ubi9-jdk17",
|
|
432
|
+
"9.12.9-ubi9",
|
|
433
|
+
"9.12.9-jdk17",
|
|
434
|
+
"9.12.9",
|
|
435
|
+
"9.12.9-jdk11",
|
|
436
|
+
"9.12.8-ubuntu-jdk17",
|
|
437
|
+
"9.12.8-ubuntu-jdk11",
|
|
438
|
+
"9.12.8-ubi9-jdk17",
|
|
439
|
+
"9.12.8-ubi9",
|
|
440
|
+
"9.12.8-jdk17",
|
|
441
|
+
"9.12.8-jdk11",
|
|
442
|
+
"9.12.5-ubuntu-jdk17",
|
|
443
|
+
"9.12.8",
|
|
444
|
+
"9.12.7-ubuntu-jdk17",
|
|
445
|
+
"9.12.7-ubuntu-jdk11",
|
|
446
|
+
"9.12.7-ubi9-jdk17",
|
|
447
|
+
"9.12.7-ubi9",
|
|
448
|
+
"9.12.7-jdk17",
|
|
449
|
+
"9.12.7-jdk11",
|
|
450
|
+
"9.12.7",
|
|
451
|
+
"9.12.6-ubuntu-jdk17",
|
|
452
|
+
"9.12.6-ubuntu-jdk11",
|
|
453
|
+
"9.12.6-ubi9-jdk17",
|
|
454
|
+
"9.12.6-ubi9",
|
|
455
|
+
"9.12.6-jdk17",
|
|
456
|
+
"9.12.6-jdk11",
|
|
457
|
+
"9.12.6",
|
|
95
458
|
"9.12.5-ubuntu-jdk11",
|
|
459
|
+
"9.12.5-ubi9-jdk17",
|
|
460
|
+
"9.12.5-ubi9",
|
|
461
|
+
"9.12.5-jdk17",
|
|
96
462
|
"9.12.5-jdk11",
|
|
97
|
-
"9.4.11-ubuntu-jdk11",
|
|
98
463
|
"9.12.5",
|
|
99
|
-
"9.4
|
|
100
|
-
"9.4
|
|
101
|
-
"9.4
|
|
102
|
-
"9.4
|
|
103
|
-
"9.4
|
|
104
|
-
"9.
|
|
105
|
-
"9.
|
|
106
|
-
"9.
|
|
107
|
-
"9.
|
|
108
|
-
"9.
|
|
109
|
-
"9.
|
|
464
|
+
"9.12.4-ubuntu-jdk17",
|
|
465
|
+
"9.12.4-ubuntu-jdk11",
|
|
466
|
+
"9.12.4-ubi9-jdk17",
|
|
467
|
+
"9.12.4-ubi9",
|
|
468
|
+
"9.12.4-jdk11",
|
|
469
|
+
"9.12.4-jdk17",
|
|
470
|
+
"9.12.4",
|
|
471
|
+
"9.12.3-ubuntu-jdk17",
|
|
472
|
+
"9.12.3-ubuntu-jdk11",
|
|
473
|
+
"9.12.3-ubi9-jdk17",
|
|
474
|
+
"9.12.3-ubi9",
|
|
475
|
+
"9.12.3-jdk17",
|
|
476
|
+
"9.12.3-jdk11",
|
|
477
|
+
"9.12.3",
|
|
478
|
+
"9.12.2-ubuntu-jdk17",
|
|
479
|
+
"9.12.2-ubuntu-jdk11",
|
|
480
|
+
"9.12.2-ubi9-jdk17",
|
|
481
|
+
"9.12.2-ubi9",
|
|
482
|
+
"9.12.2-jdk17",
|
|
483
|
+
"9.12.2-jdk11",
|
|
484
|
+
"9.12.2",
|
|
485
|
+
"9.12.1-ubuntu-jdk17",
|
|
486
|
+
"9.12.1-ubuntu-jdk11",
|
|
487
|
+
"9.12.1-ubi9",
|
|
488
|
+
"9.12.1-ubi9-jdk17",
|
|
489
|
+
"9.12.1-jdk17",
|
|
490
|
+
"9.12.15-ubuntu-jdk17",
|
|
491
|
+
"9.12.1-jdk11",
|
|
492
|
+
"9.12.15-ubuntu-jdk11",
|
|
493
|
+
"9.12.15-ubi9",
|
|
494
|
+
"9.12.15-ubi9-jdk17",
|
|
495
|
+
"9.12.15-jdk17",
|
|
496
|
+
"9.12.15-jdk11",
|
|
497
|
+
"9.12.15",
|
|
498
|
+
"9.12.14-ubuntu-jdk17",
|
|
499
|
+
"9.12.14-ubuntu-jdk11",
|
|
500
|
+
"9.12.14-ubi9-jdk17",
|
|
501
|
+
"9.12.14-ubi9",
|
|
502
|
+
"9.12.14-jdk11",
|
|
503
|
+
"9.12.14-jdk17",
|
|
504
|
+
"9.12.14",
|
|
505
|
+
"9.12.13-ubuntu-jdk11",
|
|
506
|
+
"9.12.13-ubuntu-jdk17",
|
|
507
|
+
"9.12.13-ubi9-jdk17",
|
|
508
|
+
"9.12.13-ubi9",
|
|
509
|
+
"9.12.13-jdk17",
|
|
510
|
+
"9.12.13-jdk11",
|
|
511
|
+
"9.12.13",
|
|
512
|
+
"9.12.12-ubuntu-jdk17",
|
|
513
|
+
"9.12.12-ubuntu-jdk11",
|
|
514
|
+
"9.12.12-ubi9-jdk17",
|
|
515
|
+
"9.12.12-ubi9",
|
|
516
|
+
"9.12.12-jdk17",
|
|
517
|
+
"9.12.12-jdk11",
|
|
518
|
+
"9.12.12",
|
|
519
|
+
"9.12.11-ubuntu-jdk17",
|
|
520
|
+
"9.12.11-ubuntu-jdk11",
|
|
521
|
+
"9.12.11-ubi9-jdk17",
|
|
522
|
+
"9.12.11-ubi9",
|
|
523
|
+
"9.12.11-jdk11",
|
|
524
|
+
"9.12.11-jdk17",
|
|
525
|
+
"9.12.10-ubuntu-jdk17",
|
|
526
|
+
"9.12.11",
|
|
527
|
+
"9.12.10-ubi9-jdk17",
|
|
528
|
+
"9.12.10-ubuntu-jdk11",
|
|
529
|
+
"9.12.10-ubi9",
|
|
530
|
+
"9.12.10-jdk17",
|
|
531
|
+
"9.12.10-jdk11",
|
|
532
|
+
"9.12.10",
|
|
533
|
+
"9.12.1",
|
|
534
|
+
"9.12.0-ubuntu-jdk17",
|
|
535
|
+
"9.12.0-ubuntu-jdk11",
|
|
536
|
+
"9.12.0-jdk17",
|
|
537
|
+
"9.12.0-jdk11",
|
|
538
|
+
"9.12.0",
|
|
539
|
+
"9.12",
|
|
540
|
+
"9.11-ubuntu-jdk17",
|
|
541
|
+
"9.11-ubuntu-jdk11",
|
|
542
|
+
"9.11-jdk17",
|
|
543
|
+
"9.11-jdk11",
|
|
544
|
+
"9.11.3-ubuntu-jdk17",
|
|
545
|
+
"9.11.3-ubuntu-jdk11",
|
|
546
|
+
"9.11.3-ubi9-jdk17",
|
|
547
|
+
"9.11.3-ubi9",
|
|
548
|
+
"9.11.3-jdk17",
|
|
549
|
+
"9.11.3-jdk11",
|
|
550
|
+
"9.11.3",
|
|
551
|
+
"9.11.2-ubuntu-jdk17",
|
|
552
|
+
"9.11.2-ubuntu-jdk11",
|
|
553
|
+
"9.11.2-ubi9-jdk17",
|
|
554
|
+
"9.11.2-ubi9",
|
|
555
|
+
"9.11.2-jdk17",
|
|
556
|
+
"9.11.2-jdk11",
|
|
557
|
+
"9.11.2",
|
|
558
|
+
"9.11.1-ubuntu-jdk17",
|
|
559
|
+
"9.11.1-ubuntu-jdk11",
|
|
560
|
+
"9.11.1-ubi9-jdk17",
|
|
561
|
+
"9.11.1-ubi9",
|
|
562
|
+
"9.11.1-jdk17",
|
|
563
|
+
"9.11.1-jdk11",
|
|
564
|
+
"9.11.1",
|
|
565
|
+
"9.11.0-ubuntu-jdk17",
|
|
566
|
+
"9.11.0-ubi9-jdk17",
|
|
110
567
|
"9.11.0-ubuntu-jdk11",
|
|
568
|
+
"9.11.0-ubi9",
|
|
569
|
+
"9.11.0-jdk17",
|
|
111
570
|
"9.11.0-jdk11",
|
|
112
|
-
"9.5.0-ubi9-jdk17",
|
|
113
|
-
"9.5.0-ubi9",
|
|
114
571
|
"9.11.0",
|
|
115
|
-
"9.
|
|
116
|
-
"9.
|
|
117
|
-
"9.
|
|
118
|
-
"9.
|
|
119
|
-
"9.
|
|
120
|
-
"9.
|
|
572
|
+
"9.11",
|
|
573
|
+
"9.10-ubuntu-jdk17",
|
|
574
|
+
"9.10-ubuntu-jdk11",
|
|
575
|
+
"9.10-jdk17",
|
|
576
|
+
"9.10-jdk11",
|
|
577
|
+
"9.10.2-ubuntu-jdk17",
|
|
578
|
+
"9.10.2-ubuntu-jdk11",
|
|
579
|
+
"9.10.2-ubi9-jdk17",
|
|
580
|
+
"9.10.2-ubi9",
|
|
581
|
+
"9.10.2-jdk17",
|
|
582
|
+
"9.10.2-jdk11",
|
|
583
|
+
"9.10.2",
|
|
584
|
+
"9.10.1-ubuntu-jdk17",
|
|
585
|
+
"9.10.1-ubuntu-jdk11",
|
|
586
|
+
"9.10.1-ubi9-jdk17",
|
|
587
|
+
"9.10.1-ubi9",
|
|
588
|
+
"9.10.1-jdk17",
|
|
589
|
+
"9.10.1-jdk11",
|
|
590
|
+
"9.10.1",
|
|
591
|
+
"9.10.0-ubuntu-jdk17",
|
|
592
|
+
"9.10.0-ubuntu-jdk11",
|
|
593
|
+
"9.10.0-ubi9-jdk17",
|
|
594
|
+
"9.10.0-ubi9",
|
|
595
|
+
"9.10.0-jdk17",
|
|
596
|
+
"9.10.0-jdk11",
|
|
597
|
+
"9.10.0",
|
|
598
|
+
"9.10",
|
|
599
|
+
"9",
|
|
600
|
+
"10.1-ubuntu-jdk17",
|
|
601
|
+
"10.1-jdk17",
|
|
602
|
+
"10.1.2-ubuntu-jdk17",
|
|
603
|
+
"10.1.2-ubi9-jdk17",
|
|
604
|
+
"10.1.2-ubi9",
|
|
605
|
+
"10.1.2-jdk17",
|
|
606
|
+
"10.1.2",
|
|
607
|
+
"10.1.1-ubuntu-jdk17",
|
|
608
|
+
"10.1.1-ubi9-jdk17",
|
|
609
|
+
"10.1.1-ubi9",
|
|
610
|
+
"10.1.1-jdk17",
|
|
611
|
+
"10.1.1",
|
|
612
|
+
"10.1",
|
|
613
|
+
"10.0-ubuntu-jdk17",
|
|
614
|
+
"10.0-jdk17",
|
|
615
|
+
"10.0.1-ubuntu-jdk17",
|
|
616
|
+
"10.0.1-ubi9-jdk17",
|
|
617
|
+
"10.0.1-ubi9",
|
|
618
|
+
"10.0.1-jdk17",
|
|
619
|
+
"10.0.1",
|
|
620
|
+
"10.0.0-ubuntu-jdk17",
|
|
621
|
+
"10.0.0-ubi9-jdk17",
|
|
622
|
+
"10.0.0-ubi9",
|
|
623
|
+
"10.0.0-jdk17",
|
|
624
|
+
"10.0.0",
|
|
625
|
+
"10.0",
|
|
626
|
+
"9.12.0-ubi9-jdk17",
|
|
627
|
+
"9.12.0-ubi9",
|
|
628
|
+
"10.2.0-EAP02-jdk17",
|
|
629
|
+
"10.2.0-EAP02",
|
|
630
|
+
"10.2.0-EAP02-ubuntu-jdk17",
|
|
631
|
+
"10.2.0-EAP02-ubi9-jdk17",
|
|
632
|
+
"10.2.0-EAP02-ubi9",
|
|
633
|
+
"10.2.0-EAP01-ubuntu-jdk17",
|
|
634
|
+
"10.2.0-EAP01",
|
|
635
|
+
"10.2.0-EAP01-jdk17",
|
|
636
|
+
"10.2.0-EAP01-ubi9-jdk17",
|
|
637
|
+
"10.2.0-EAP01-ubi9",
|
|
638
|
+
"9.3.2-ubuntu-jdk11",
|
|
121
639
|
"9.3-ubuntu-jdk11",
|
|
122
640
|
"9.3-jdk11",
|
|
123
|
-
"9.3.
|
|
641
|
+
"9.3.0",
|
|
124
642
|
"9.3.3-jdk11",
|
|
643
|
+
"9.3.3-ubuntu-jdk11",
|
|
644
|
+
"9.3.2",
|
|
125
645
|
"9.3.3",
|
|
646
|
+
"9.3.2-jdk11",
|
|
647
|
+
"9.3.1-ubuntu-jdk11",
|
|
648
|
+
"9.3.1-jdk11",
|
|
649
|
+
"9.3.1",
|
|
650
|
+
"9.3.0-ubuntu-jdk11",
|
|
651
|
+
"9.3.0-jdk11",
|
|
126
652
|
"9.3",
|
|
127
|
-
"
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
"
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"
|
|
141
|
-
"
|
|
142
|
-
"
|
|
143
|
-
"
|
|
144
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
"9.4.20-jdk11",
|
|
150
|
-
"9.4.20",
|
|
653
|
+
"10.1.0-RC",
|
|
654
|
+
"10.1.0-RC-ubuntu-jdk17",
|
|
655
|
+
"10.1.0-RC-jdk17",
|
|
656
|
+
"10.1.0-RC-ubi9",
|
|
657
|
+
"10.1.0-RC-ubi9-jdk17",
|
|
658
|
+
"10.1.0-EAP02",
|
|
659
|
+
"10.1.0-EAP02-ubuntu-jdk17",
|
|
660
|
+
"10.1.0-EAP02-jdk17",
|
|
661
|
+
"10.1.0-EAP02-ubi9-jdk17",
|
|
662
|
+
"10.1.0-EAP02-ubi9",
|
|
663
|
+
"10.1.0-EAP01-ubuntu-jdk17",
|
|
664
|
+
"10.1.0-EAP01",
|
|
665
|
+
"10.1.0-EAP01-jdk17",
|
|
666
|
+
"10.1.0-EAP01-ubi9-jdk17",
|
|
667
|
+
"10.1.0-EAP01-ubi9",
|
|
668
|
+
"10.0.0-RC-jdk17",
|
|
669
|
+
"10.0.0-RC",
|
|
670
|
+
"10.0.0-RC-ubuntu-jdk17",
|
|
671
|
+
"10.0.0-RC-ubi9-jdk17",
|
|
672
|
+
"10.0.0-RC-ubi9",
|
|
673
|
+
"ubuntu-jdk11",
|
|
674
|
+
"jdk11",
|
|
151
675
|
"9.2-ubuntu-jdk11",
|
|
152
676
|
"9.2-jdk11",
|
|
153
|
-
"9.2.1-ubuntu-jdk11",
|
|
154
677
|
"9.2.1-jdk11",
|
|
678
|
+
"9.2.1-ubuntu-jdk11",
|
|
155
679
|
"9.2.1",
|
|
680
|
+
"9.2.0-ubuntu-jdk11",
|
|
681
|
+
"9.2.0-jdk11",
|
|
682
|
+
"9.2.0",
|
|
156
683
|
"9.2",
|
|
157
|
-
"
|
|
158
|
-
"
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"
|
|
166
|
-
"
|
|
167
|
-
"9.12.7-ubi9",
|
|
168
|
-
"9.12.7-jdk11",
|
|
169
|
-
"9.12.7",
|
|
170
|
-
"9.11.2-ubi9-jdk17",
|
|
171
|
-
"9.11.2-ubi9",
|
|
172
|
-
"9.11.1-ubuntu-jdk11",
|
|
173
|
-
"9.7.1-ubuntu-jdk11",
|
|
174
|
-
"9.11.1-jdk11",
|
|
175
|
-
"9.7.1-jdk11",
|
|
176
|
-
"9.11.1",
|
|
177
|
-
"9.7.1",
|
|
178
|
-
"9.7.0-ubi9-jdk17",
|
|
179
|
-
"9.7.0-ubi9",
|
|
180
|
-
"9.5.1-ubi9-jdk17",
|
|
181
|
-
"9.5.1-ubi9",
|
|
182
|
-
"9.4.6-ubuntu-jdk11",
|
|
183
|
-
"9.4.6-jdk11",
|
|
184
|
-
"9.4.6",
|
|
185
|
-
"9.4.14-ubuntu-jdk11",
|
|
186
|
-
"9.4.14-jdk11",
|
|
187
|
-
"9.4.14",
|
|
684
|
+
"10.0.0-EAP08",
|
|
685
|
+
"10.0.0-EAP08-ubuntu-jdk17",
|
|
686
|
+
"10.0.0-EAP08-jdk17",
|
|
687
|
+
"10.0.0-EAP08-ubi9-jdk17",
|
|
688
|
+
"10.0.0-EAP08-ubi9",
|
|
689
|
+
"10.0.0-EAP07-ubuntu-jdk17",
|
|
690
|
+
"10.0.0-EAP07-jdk17",
|
|
691
|
+
"10.0.0-EAP07",
|
|
692
|
+
"10.0.0-EAP07-ubi9",
|
|
693
|
+
"10.0.0-EAP07-ubi9-jdk17",
|
|
188
694
|
"9.1-ubuntu-jdk11",
|
|
189
695
|
"9.1-jdk11",
|
|
190
696
|
"9.1.1-ubuntu-jdk11",
|
|
191
697
|
"9.1.1-jdk11",
|
|
192
698
|
"9.1.1",
|
|
193
|
-
"9.
|
|
194
|
-
"9.
|
|
195
|
-
"9.
|
|
196
|
-
"9.9.1-ubi9",
|
|
699
|
+
"9.1.0-ubuntu-jdk11",
|
|
700
|
+
"9.1.0-jdk11",
|
|
701
|
+
"9.1.0",
|
|
197
702
|
"9.1",
|
|
198
|
-
"
|
|
199
|
-
"
|
|
200
|
-
"
|
|
201
|
-
"
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"
|
|
209
|
-
"
|
|
210
|
-
"
|
|
211
|
-
"
|
|
212
|
-
"
|
|
213
|
-
"9.
|
|
214
|
-
"9.
|
|
215
|
-
"9.
|
|
216
|
-
"9.
|
|
217
|
-
"9.
|
|
218
|
-
"9.
|
|
219
|
-
"9.
|
|
220
|
-
"9.
|
|
221
|
-
"9.
|
|
222
|
-
"9.
|
|
223
|
-
"9.
|
|
224
|
-
"9.
|
|
225
|
-
"9.
|
|
226
|
-
"9.
|
|
227
|
-
"9.
|
|
228
|
-
"9.
|
|
229
|
-
"9.
|
|
230
|
-
"9.
|
|
231
|
-
"9.
|
|
232
|
-
"9.
|
|
233
|
-
"9.
|
|
234
|
-
"9.
|
|
235
|
-
"9.
|
|
236
|
-
"9.7.1-ubi9",
|
|
237
|
-
"9.7",
|
|
238
|
-
"9.4.15-ubuntu-jdk11",
|
|
239
|
-
"9.4.15-jdk11",
|
|
240
|
-
"9.4.15",
|
|
241
|
-
"9.4.0-ubuntu-jdk11",
|
|
242
|
-
"9.4.0-jdk11",
|
|
243
|
-
"9.4.0",
|
|
244
|
-
"9.14.0-ubi9-jdk17",
|
|
245
|
-
"9.14.0-ubi9",
|
|
246
|
-
"9.12.4-ubi9-jdk17",
|
|
247
|
-
"9.12.4-ubi9",
|
|
248
|
-
"9.12.2-ubuntu-jdk11",
|
|
249
|
-
"9.12.2-jdk11",
|
|
250
|
-
"9.12.2",
|
|
251
|
-
"9.12.1-ubi9-jdk17",
|
|
252
|
-
"9.12.1-ubi9",
|
|
253
|
-
"9.9.2-ubi9-jdk17",
|
|
254
|
-
"9.9.2-ubi9",
|
|
255
|
-
"9.11-ubuntu-jdk11",
|
|
256
|
-
"9.11-jdk11",
|
|
257
|
-
"9.11.3-ubuntu-jdk11",
|
|
258
|
-
"9.11.3-jdk11",
|
|
259
|
-
"9.11.3",
|
|
260
|
-
"9.11",
|
|
261
|
-
"9.9-ubuntu-jdk11",
|
|
262
|
-
"9.9-jdk11",
|
|
263
|
-
"9.9.2-ubuntu-jdk11",
|
|
264
|
-
"9.9.2-jdk11",
|
|
265
|
-
"9.9.2",
|
|
266
|
-
"9.9",
|
|
267
|
-
"9.8.2-ubi9-jdk17",
|
|
268
|
-
"9.8.2-ubi9",
|
|
269
|
-
"9.7.2-ubi9-jdk17",
|
|
270
|
-
"9.7.2-ubi9",
|
|
271
|
-
"9.6.0-ubi9-jdk17",
|
|
272
|
-
"9.6.0-ubi9",
|
|
273
|
-
"9.4.8-ubuntu-jdk11",
|
|
274
|
-
"9.4.8-jdk11",
|
|
275
|
-
"9.4.8",
|
|
276
|
-
"9.4.16-ubuntu-jdk11",
|
|
277
|
-
"9.4.16-jdk11",
|
|
278
|
-
"9.4.16",
|
|
279
|
-
"9.3.0-ubuntu-jdk11",
|
|
280
|
-
"9.3.0-jdk11",
|
|
281
|
-
"9.3.0",
|
|
282
|
-
"9.15.2-ubi9-jdk17",
|
|
283
|
-
"9.15.0-ubuntu-jdk11",
|
|
284
|
-
"9.15.2-ubi9",
|
|
285
|
-
"9.15.0-jdk11",
|
|
286
|
-
"9.15.0",
|
|
287
|
-
"9.14.1-ubi9-jdk17",
|
|
288
|
-
"9.4.1-ubuntu-jdk11",
|
|
289
|
-
"9.14.1-ubi9",
|
|
290
|
-
"9.4.1-jdk11",
|
|
291
|
-
"9.12.2-ubi9-jdk17",
|
|
292
|
-
"9.4.1",
|
|
293
|
-
"9.12.5-ubi9-jdk17",
|
|
294
|
-
"9.12.5-ubi9",
|
|
295
|
-
"9.12.3-jdk11",
|
|
296
|
-
"9.12.3-ubuntu-jdk11",
|
|
297
|
-
"9.12.3",
|
|
298
|
-
"9.12.2-ubi9",
|
|
299
|
-
"9.11.0-ubi9-jdk17",
|
|
300
|
-
"9.11.0-ubi9",
|
|
301
|
-
"9.10.0-ubuntu-jdk11",
|
|
302
|
-
"9.10.0-ubi9-jdk17",
|
|
303
|
-
"9.10.0-ubi9",
|
|
304
|
-
"9.10.0-jdk11",
|
|
305
|
-
"9.4.9-ubuntu-jdk11",
|
|
306
|
-
"9.10.0",
|
|
307
|
-
"9.4.9-jdk11",
|
|
308
|
-
"9.4.9",
|
|
309
|
-
"9.4.3-ubuntu-jdk11",
|
|
310
|
-
"9.4.3-jdk11",
|
|
311
|
-
"9.4.17-ubuntu-jdk11",
|
|
312
|
-
"9.4.17-jdk11",
|
|
313
|
-
"9.4.17",
|
|
314
|
-
"9.4.10-ubuntu-jdk11",
|
|
315
|
-
"9.4.10-jdk11",
|
|
316
|
-
"9.4.10",
|
|
317
|
-
"9.3.1-ubuntu-jdk11",
|
|
318
|
-
"9.3.1-jdk11",
|
|
319
|
-
"9.3.1",
|
|
320
|
-
"9.15.1-ubuntu-jdk11",
|
|
321
|
-
"9.15.1-jdk11",
|
|
322
|
-
"9.15.1",
|
|
323
|
-
"9.13.0-ubuntu-jdk11",
|
|
324
|
-
"9.13.0-ubi9-jdk17",
|
|
325
|
-
"9.13.0-ubi9",
|
|
326
|
-
"9.13.0-jdk11",
|
|
327
|
-
"9.13.0",
|
|
328
|
-
"9.12.4-ubuntu-jdk11",
|
|
329
|
-
"9.12.4-jdk11",
|
|
330
|
-
"9.12.4",
|
|
331
|
-
"9.12.3-ubi9-jdk17",
|
|
332
|
-
"9.12.3-ubi9",
|
|
333
|
-
"9.12.0-ubi9-jdk17",
|
|
334
|
-
"9.12.0-ubi9",
|
|
335
|
-
"9.10.1-ubuntu-jdk11",
|
|
336
|
-
"9.10.1-jdk11",
|
|
337
|
-
"9.10.1",
|
|
338
|
-
"9.4.3",
|
|
339
|
-
"9.12.6-ubi9-jdk17",
|
|
340
|
-
"9.12.6-ubi9",
|
|
341
|
-
"9.11.1-ubi9-jdk17",
|
|
342
|
-
"9.11.1-ubi9",
|
|
343
|
-
"9.10.1-ubi9-jdk17",
|
|
344
|
-
"9.10.1-ubi9",
|
|
703
|
+
"10.0.0-EAP04-ubi9",
|
|
704
|
+
"10.0.0-EAP04-ubi9-jdk17",
|
|
705
|
+
"10.0.0-EAP04-jdk17",
|
|
706
|
+
"10.0.0-EAP04",
|
|
707
|
+
"10.0.0-EAP04-ubuntu-jdk17",
|
|
708
|
+
"10.0.0-EAP05",
|
|
709
|
+
"10.0.0-EAP05-ubuntu-jdk17",
|
|
710
|
+
"10.0.0-EAP05-ubi9-jdk17",
|
|
711
|
+
"10.0.0-EAP05-jdk17",
|
|
712
|
+
"10.0.0-EAP05-ubi9",
|
|
713
|
+
"10.0.0-EAP06-ubi9",
|
|
714
|
+
"10.0.0-EAP06-ubuntu-jdk17",
|
|
715
|
+
"10.0.0-EAP06-jdk17",
|
|
716
|
+
"10.0.0-EAP06-ubi9-jdk17",
|
|
717
|
+
"10.0.0-EAP06",
|
|
718
|
+
"9.0-ubuntu-jdk11",
|
|
719
|
+
"9.0-jdk11",
|
|
720
|
+
"9.0.0-ubuntu-jdk11",
|
|
721
|
+
"9.0.0-jdk11",
|
|
722
|
+
"9.17.0-RC-ubuntu-jdk11",
|
|
723
|
+
"9.17.0-RC-ubuntu-jdk17",
|
|
724
|
+
"9.17.0-RC-ubi9-jdk17",
|
|
725
|
+
"9.17.0-RC",
|
|
726
|
+
"9.17.0-RC-ubi9",
|
|
727
|
+
"9.17.0-RC-jdk17",
|
|
728
|
+
"9.17.0-RC-jdk11",
|
|
729
|
+
"9.17.0-EAP02-ubi9",
|
|
730
|
+
"9.17.0-EAP02-jdk11",
|
|
731
|
+
"9.17.0-EAP02-ubuntu-jdk11",
|
|
732
|
+
"9.17.0-EAP02-ubi9-jdk17",
|
|
733
|
+
"9.17.0-EAP02",
|
|
734
|
+
"9.0.0",
|
|
735
|
+
"9.0",
|
|
736
|
+
"9.17.0-EAP01-ubi9",
|
|
737
|
+
"9.17.0-EAP01-ubi9-jdk17",
|
|
738
|
+
"9.17.0-EAP01",
|
|
739
|
+
"9.17.0-EAP01-ubuntu-jdk11",
|
|
740
|
+
"9.17.0-EAP01-jdk11",
|
|
345
741
|
"9.16.0-RC-ubuntu-jdk11",
|
|
346
742
|
"9.16.0-RC-ubi9",
|
|
347
743
|
"9.16.0-RC-jdk11",
|
|
@@ -1662,406 +2058,695 @@ var jira = [
|
|
|
1662
2058
|
"8.8.0-RC02"
|
|
1663
2059
|
];
|
|
1664
2060
|
var confluence = [
|
|
1665
|
-
"9.0.0-m92-ubuntu-jdk11",
|
|
1666
|
-
"9.0.0-m92-jdk11",
|
|
1667
|
-
"9.0.0-m92",
|
|
1668
2061
|
"eap-ubuntu-jdk17",
|
|
1669
|
-
"9.0.0-m92-ubuntu-jdk17",
|
|
1670
2062
|
"eap-jdk17",
|
|
1671
|
-
"9.
|
|
2063
|
+
"9.2.0-beta2-ubuntu-jdk21",
|
|
2064
|
+
"9.2.0-beta2-jdk21",
|
|
2065
|
+
"9.2.0-beta2-jdk17",
|
|
2066
|
+
"9.2.0-beta2",
|
|
1672
2067
|
"eap",
|
|
1673
|
-
"9.
|
|
1674
|
-
"9.
|
|
2068
|
+
"9.2.0-beta2-ubuntu-jdk17",
|
|
2069
|
+
"9.2.0-beta2-ubi9-jdk17",
|
|
2070
|
+
"9.2.0-beta2-ubi9-jdk21",
|
|
2071
|
+
"9.2.0-beta2-ubi9",
|
|
2072
|
+
"9.1.1-jdk21",
|
|
2073
|
+
"9.1.1-jdk17",
|
|
2074
|
+
"9.1.1",
|
|
2075
|
+
"9.1.0-ubuntu-jdk21",
|
|
2076
|
+
"9.1.0-ubi9-jdk21",
|
|
2077
|
+
"9.1.0-ubuntu-jdk17",
|
|
2078
|
+
"9.1.0-ubi9-jdk17",
|
|
2079
|
+
"9.1.0-ubi9",
|
|
2080
|
+
"9.1.0-jdk21",
|
|
2081
|
+
"9.1.0-jdk17",
|
|
2082
|
+
"9.1",
|
|
2083
|
+
"9.1.0",
|
|
2084
|
+
"9.0-ubuntu-jdk21",
|
|
2085
|
+
"9.0-jdk21",
|
|
2086
|
+
"9.0-ubuntu-jdk17",
|
|
2087
|
+
"9.0-jdk17",
|
|
2088
|
+
"9.0.3-ubuntu-jdk21",
|
|
2089
|
+
"9.0.3-ubuntu-jdk17",
|
|
2090
|
+
"9.0.3-ubi9-jdk21",
|
|
2091
|
+
"9.0.3-ubi9-jdk17",
|
|
2092
|
+
"9.0.3-ubi9",
|
|
2093
|
+
"9.0.3-jdk21",
|
|
2094
|
+
"9.0.3-jdk17",
|
|
2095
|
+
"9.0.3",
|
|
2096
|
+
"9.0.2-ubuntu-jdk21",
|
|
2097
|
+
"9.0.2-ubi9-jdk21",
|
|
2098
|
+
"9.0.2-ubuntu-jdk17",
|
|
2099
|
+
"9.0.2-ubi9-jdk17",
|
|
2100
|
+
"9.0.2-jdk21",
|
|
2101
|
+
"9.0.2-ubi9",
|
|
2102
|
+
"9.0.2-jdk17",
|
|
2103
|
+
"9.0.2",
|
|
2104
|
+
"9.0.1-ubuntu-jdk21",
|
|
2105
|
+
"9.0.1-ubuntu-jdk17",
|
|
2106
|
+
"9.0.1-ubi9-jdk21",
|
|
2107
|
+
"9.0.1-ubi9",
|
|
2108
|
+
"9.0.1-jdk21",
|
|
2109
|
+
"9.0.1",
|
|
2110
|
+
"9.0",
|
|
2111
|
+
"9.0.1-jdk17",
|
|
2112
|
+
"8-ubuntu-jdk17",
|
|
2113
|
+
"9",
|
|
2114
|
+
"8-jdk17",
|
|
2115
|
+
"8-ubuntu-jdk11",
|
|
2116
|
+
"8-jdk11",
|
|
2117
|
+
"8.9-ubuntu-jdk17",
|
|
2118
|
+
"8.9-ubuntu-jdk11",
|
|
2119
|
+
"8.9-jdk17",
|
|
2120
|
+
"8.9.8-ubuntu-jdk11",
|
|
2121
|
+
"8.9-jdk11",
|
|
2122
|
+
"8.9.8-ubuntu-jdk17",
|
|
2123
|
+
"8.9.8-ubi9",
|
|
2124
|
+
"8.9.8-ubi9-jdk17",
|
|
2125
|
+
"8.9.8-jdk17",
|
|
2126
|
+
"8.9.8-jdk11",
|
|
2127
|
+
"8.9.8",
|
|
2128
|
+
"8.9.7-ubuntu-jdk17",
|
|
2129
|
+
"8.9.7-ubuntu-jdk11",
|
|
2130
|
+
"8.9.7-ubi9-jdk17",
|
|
2131
|
+
"8.9.7-jdk11",
|
|
2132
|
+
"8.9.7-jdk17",
|
|
2133
|
+
"8.9.7-ubi9",
|
|
2134
|
+
"8.9.7",
|
|
2135
|
+
"8.9.6-ubuntu-jdk17",
|
|
2136
|
+
"8.9.6-ubi9-jdk17",
|
|
2137
|
+
"8.9.6-ubuntu-jdk11",
|
|
2138
|
+
"8.9.6-ubi9",
|
|
2139
|
+
"8.9.6-jdk17",
|
|
2140
|
+
"8.9.5-ubuntu-jdk11",
|
|
2141
|
+
"8.9.6",
|
|
2142
|
+
"8.9.6-jdk11",
|
|
2143
|
+
"8.9.5-ubuntu-jdk17",
|
|
2144
|
+
"8.9.5-jdk17",
|
|
2145
|
+
"8.9.5-jdk11",
|
|
2146
|
+
"8.9.5",
|
|
2147
|
+
"8.9.4-ubuntu-jdk17",
|
|
2148
|
+
"8.9.4-ubuntu-jdk11",
|
|
2149
|
+
"8.9.4-ubi9-jdk17",
|
|
2150
|
+
"8.9.4-ubi9",
|
|
2151
|
+
"8.9.4-jdk17",
|
|
2152
|
+
"8.9.4-jdk11",
|
|
2153
|
+
"8.9.4",
|
|
2154
|
+
"8.9.3-ubuntu-jdk11",
|
|
2155
|
+
"8.9.3-ubuntu-jdk17",
|
|
2156
|
+
"8.9.3-ubi9-jdk17",
|
|
2157
|
+
"8.9.3-ubi9",
|
|
2158
|
+
"8.9.3-jdk17",
|
|
2159
|
+
"8.9.3-jdk11",
|
|
2160
|
+
"8.9.3",
|
|
2161
|
+
"8.9.2-ubuntu-jdk17",
|
|
2162
|
+
"8.9.2-ubuntu-jdk11",
|
|
2163
|
+
"8.9.2-ubi9-jdk17",
|
|
2164
|
+
"8.9.2-jdk11",
|
|
2165
|
+
"8.9.2-jdk17",
|
|
2166
|
+
"8.9.2-ubi9",
|
|
2167
|
+
"8.9.1-ubuntu-jdk17",
|
|
2168
|
+
"8.9.2",
|
|
2169
|
+
"8.9.1-ubuntu-jdk11",
|
|
2170
|
+
"8.9.1-jdk11",
|
|
2171
|
+
"8.9.1-jdk17",
|
|
2172
|
+
"8.9.1",
|
|
2173
|
+
"8.9.0-ubuntu-jdk17",
|
|
2174
|
+
"8.9.0-ubuntu-jdk11",
|
|
2175
|
+
"8.9.0-ubi9-jdk17",
|
|
2176
|
+
"8.9.0-ubi9",
|
|
2177
|
+
"8.9.0-jdk17",
|
|
2178
|
+
"8.9.0",
|
|
2179
|
+
"8.9.0-jdk11",
|
|
2180
|
+
"8.9",
|
|
2181
|
+
"8.8-ubuntu-jdk17",
|
|
2182
|
+
"8.8-ubuntu-jdk11",
|
|
2183
|
+
"8.8-jdk17",
|
|
2184
|
+
"8.8-jdk11",
|
|
2185
|
+
"8.8.1-ubuntu-jdk11",
|
|
2186
|
+
"8.8.1-ubuntu-jdk17",
|
|
2187
|
+
"8.8.1-ubi9",
|
|
2188
|
+
"8.8.1-ubi9-jdk17",
|
|
2189
|
+
"8.8.1-jdk17",
|
|
2190
|
+
"8.8.1",
|
|
2191
|
+
"8.8.1-jdk11",
|
|
1675
2192
|
"8.8.0-ubuntu-jdk17",
|
|
2193
|
+
"8.8.0-ubuntu-jdk11",
|
|
2194
|
+
"8.8.0-ubi9-jdk17",
|
|
2195
|
+
"8.8.0-jdk11",
|
|
2196
|
+
"8.8.0-ubi9",
|
|
1676
2197
|
"8.8.0",
|
|
1677
2198
|
"8.8.0-jdk17",
|
|
1678
|
-
"8.8
|
|
2199
|
+
"8.8",
|
|
2200
|
+
"8.7-ubuntu-jdk17",
|
|
2201
|
+
"8.7-jdk17",
|
|
2202
|
+
"8.7-ubuntu-jdk11",
|
|
2203
|
+
"8.7-jdk11",
|
|
2204
|
+
"8.7.2-ubuntu-jdk17",
|
|
2205
|
+
"8.7.2-ubuntu-jdk11",
|
|
2206
|
+
"8.7.2-jdk11",
|
|
2207
|
+
"8.7.2-jdk17",
|
|
2208
|
+
"8.7.2",
|
|
2209
|
+
"8.7.1-ubuntu-jdk17",
|
|
2210
|
+
"8.7.1-ubuntu-jdk11",
|
|
2211
|
+
"8.7.1-ubi9-jdk17",
|
|
2212
|
+
"8.7.1-ubi9",
|
|
2213
|
+
"8.7.1-jdk11",
|
|
2214
|
+
"8.7.1-jdk17",
|
|
2215
|
+
"8.7.1",
|
|
2216
|
+
"8.7",
|
|
2217
|
+
"8.6-ubuntu-jdk17",
|
|
1679
2218
|
"8.6-ubuntu-jdk11",
|
|
1680
|
-
"8.6
|
|
1681
|
-
"8.8-jdk11",
|
|
1682
|
-
"8.8.1-ubuntu-jdk11",
|
|
1683
|
-
"8.6.1-ubuntu-jdk11",
|
|
2219
|
+
"8.6-jdk17",
|
|
1684
2220
|
"8.6-jdk11",
|
|
1685
|
-
"8.8.1-jdk11",
|
|
1686
2221
|
"8.6.2-ubuntu-jdk11",
|
|
1687
|
-
"8.6.
|
|
2222
|
+
"8.6.2-ubuntu-jdk17",
|
|
2223
|
+
"8.6.2-ubi9-jdk17",
|
|
2224
|
+
"8.6.2-jdk17",
|
|
2225
|
+
"8.6.2-ubi9",
|
|
1688
2226
|
"8.6.2-jdk11",
|
|
2227
|
+
"8.6.1-ubuntu-jdk17",
|
|
2228
|
+
"8.6.2",
|
|
2229
|
+
"8.6.1-ubi9-jdk17",
|
|
2230
|
+
"8.6.1-ubuntu-jdk11",
|
|
2231
|
+
"8.6.1-ubi9",
|
|
1689
2232
|
"8.6.1-jdk17",
|
|
1690
|
-
"8.5.7-ubuntu-jdk17",
|
|
1691
|
-
"8.8.0-ubuntu-jdk11",
|
|
1692
|
-
"8.5.7-ubuntu-jdk11",
|
|
1693
2233
|
"8.6.1",
|
|
1694
|
-
"8.
|
|
1695
|
-
"
|
|
1696
|
-
"
|
|
1697
|
-
"8.0
|
|
1698
|
-
"8.
|
|
1699
|
-
"8.
|
|
1700
|
-
"7.19.7",
|
|
1701
|
-
"8.0.3-jdk11",
|
|
1702
|
-
"8.5.7",
|
|
1703
|
-
"7.19.18-ubuntu-jdk11",
|
|
1704
|
-
"8.0.3",
|
|
1705
|
-
"7.19.18-jdk11",
|
|
1706
|
-
"7.20.2-ubuntu-jdk11",
|
|
1707
|
-
"8.4-ubuntu-jdk17",
|
|
1708
|
-
"8.4-ubuntu-jdk11",
|
|
1709
|
-
"7.19.18",
|
|
1710
|
-
"7.20.2",
|
|
1711
|
-
"7.20.2-jdk11",
|
|
1712
|
-
"8.4-jdk17",
|
|
1713
|
-
"8.4-jdk11",
|
|
1714
|
-
"7.19-ubuntu-jdk11",
|
|
1715
|
-
"7.19-jdk11",
|
|
1716
|
-
"8.4.5-ubuntu-jdk17",
|
|
1717
|
-
"7.19.22-ubuntu-jdk11",
|
|
1718
|
-
"8.4.5-ubuntu-jdk11",
|
|
1719
|
-
"8.4.5-jdk17",
|
|
1720
|
-
"7.19.22",
|
|
1721
|
-
"7.19.22-jdk11",
|
|
1722
|
-
"8.4.5-jdk11",
|
|
1723
|
-
"7.19.12-jdk11",
|
|
1724
|
-
"8.4.5",
|
|
1725
|
-
"7.19.12-ubuntu-jdk11",
|
|
1726
|
-
"8.4",
|
|
1727
|
-
"8.1-ubuntu-jdk11",
|
|
1728
|
-
"8.1-jdk11",
|
|
1729
|
-
"8.2.0-ubuntu-jdk11",
|
|
1730
|
-
"7.19.12",
|
|
1731
|
-
"7.19",
|
|
1732
|
-
"8.2.0-jdk11",
|
|
1733
|
-
"8.2.0",
|
|
1734
|
-
"8.1.4-ubuntu-jdk11",
|
|
1735
|
-
"8.1.4-jdk11",
|
|
1736
|
-
"8.1.4",
|
|
1737
|
-
"8.1",
|
|
1738
|
-
"8.0-ubuntu-jdk11",
|
|
1739
|
-
"8.0-jdk11",
|
|
1740
|
-
"8.0.4-ubuntu-jdk11",
|
|
1741
|
-
"8.0",
|
|
1742
|
-
"8.0.4",
|
|
1743
|
-
"8.0.4-jdk11",
|
|
1744
|
-
"8.8-ubuntu-jdk17",
|
|
1745
|
-
"8.5.8-ubuntu-jdk17",
|
|
1746
|
-
"8.8-jdk17",
|
|
1747
|
-
"8.8.1-ubuntu-jdk17",
|
|
1748
|
-
"7-ubuntu-jdk11",
|
|
1749
|
-
"7-jdk11",
|
|
1750
|
-
"8.5.8-ubuntu-jdk11",
|
|
1751
|
-
"8.8.1-jdk17",
|
|
1752
|
-
"8.5.8-jdk17",
|
|
1753
|
-
"7.20-ubuntu-jdk11",
|
|
1754
|
-
"8.5.8-jdk11",
|
|
1755
|
-
"8.8.1",
|
|
1756
|
-
"7.20-jdk11",
|
|
1757
|
-
"8.8",
|
|
1758
|
-
"8.5.8",
|
|
1759
|
-
"7.20.3-ubuntu-jdk11",
|
|
1760
|
-
"8.5.3-ubuntu-jdk17",
|
|
1761
|
-
"8.5.3-jdk17",
|
|
1762
|
-
"8.6-ubuntu-jdk17",
|
|
1763
|
-
"7.20.3-jdk11",
|
|
1764
|
-
"8.5.3-jdk11",
|
|
1765
|
-
"8.5.3-ubuntu-jdk11",
|
|
1766
|
-
"8.5.3",
|
|
1767
|
-
"8.6-jdk17",
|
|
1768
|
-
"7.19.19-ubuntu-jdk11",
|
|
1769
|
-
"8.6.2-ubuntu-jdk17",
|
|
1770
|
-
"7.20.3",
|
|
1771
|
-
"8.4.1-ubuntu-jdk17",
|
|
1772
|
-
"7.20",
|
|
1773
|
-
"8.6.2-jdk17",
|
|
1774
|
-
"7",
|
|
1775
|
-
"7.19.19-jdk11",
|
|
1776
|
-
"7.19.19",
|
|
1777
|
-
"8.4.1-ubuntu-jdk11",
|
|
1778
|
-
"8.9.0-ubuntu-jdk17",
|
|
1779
|
-
"8.6.2",
|
|
1780
|
-
"8.4.1-jdk17",
|
|
2234
|
+
"8.6.1-jdk11",
|
|
2235
|
+
"8.6.0-ubuntu-jdk11",
|
|
2236
|
+
"8.6.0-ubuntu-jdk17",
|
|
2237
|
+
"8.6.0",
|
|
2238
|
+
"8.6.0-jdk11",
|
|
2239
|
+
"8.6.0-jdk17",
|
|
1781
2240
|
"8.6",
|
|
1782
|
-
"8.4.1-jdk11",
|
|
1783
|
-
"8.4.1",
|
|
1784
|
-
"7.19.14-ubuntu-jdk11",
|
|
1785
|
-
"8.9.0-ubuntu-jdk11",
|
|
1786
|
-
"8.9.0-ubi9-jdk17",
|
|
1787
|
-
"7.19.14-jdk11",
|
|
1788
|
-
"8.3.3-ubuntu-jdk17",
|
|
1789
|
-
"8.9.0-ubi9",
|
|
1790
|
-
"8.9.0-jdk11",
|
|
1791
|
-
"7.19.14",
|
|
1792
|
-
"8.9.0-jdk17",
|
|
1793
|
-
"8.3.3-ubuntu-jdk11",
|
|
1794
|
-
"8.3.3-jdk17",
|
|
1795
|
-
"8.9.0",
|
|
1796
|
-
"8.8.0-ubi9-jdk17",
|
|
1797
|
-
"8.8.0-ubi9",
|
|
1798
|
-
"8.3.3-jdk11",
|
|
1799
|
-
"8.3.3",
|
|
1800
|
-
"8.7.1-ubuntu-jdk11",
|
|
1801
|
-
"8.6.1-ubi9",
|
|
1802
|
-
"8.6.1-ubi9-jdk17",
|
|
1803
|
-
"8.7.1-ubi9-jdk17",
|
|
1804
|
-
"8.2.1-ubuntu-jdk11",
|
|
1805
|
-
"8.7.1-ubi9",
|
|
1806
|
-
"8.7.1-jdk11",
|
|
1807
|
-
"7.19.2-ubuntu-jdk11",
|
|
1808
|
-
"8.2.1-jdk11",
|
|
1809
|
-
"7.19.2",
|
|
1810
|
-
"7.19.15-ubuntu-jdk11",
|
|
1811
|
-
"8.2.1",
|
|
1812
2241
|
"8.5-ubuntu-jdk17",
|
|
1813
2242
|
"8.5-jdk17",
|
|
1814
|
-
"
|
|
1815
|
-
"
|
|
2243
|
+
"8.5-ubuntu-jdk11",
|
|
2244
|
+
"8.5-jdk11",
|
|
1816
2245
|
"8.5.9-ubuntu-jdk17",
|
|
1817
|
-
"
|
|
1818
|
-
"7.19.8",
|
|
1819
|
-
"7.19.8-jdk11",
|
|
1820
|
-
"8.5.9-ubi9",
|
|
2246
|
+
"8.5.9-ubuntu-jdk11",
|
|
1821
2247
|
"8.5.9-ubi9-jdk17",
|
|
1822
|
-
"
|
|
1823
|
-
"7.19.3-ubuntu-jdk11",
|
|
2248
|
+
"8.5.9-ubi9",
|
|
1824
2249
|
"8.5.9-jdk17",
|
|
1825
|
-
"
|
|
2250
|
+
"8.5.9-jdk11",
|
|
1826
2251
|
"8.5.9",
|
|
2252
|
+
"8.5.8-ubuntu-jdk17",
|
|
2253
|
+
"8.5.8-ubuntu-jdk11",
|
|
2254
|
+
"8.5.8-ubi9-jdk17",
|
|
2255
|
+
"8.5.8-ubi9",
|
|
2256
|
+
"8.5.8-jdk17",
|
|
2257
|
+
"8.5.8-jdk11",
|
|
2258
|
+
"8.5.8",
|
|
2259
|
+
"8.5.7-ubuntu-jdk11",
|
|
2260
|
+
"8.5.7-ubuntu-jdk17",
|
|
2261
|
+
"8.5.7-ubi9-jdk17",
|
|
2262
|
+
"8.5.7-ubi9",
|
|
2263
|
+
"8.5.7-jdk11",
|
|
2264
|
+
"8.5.7-jdk17",
|
|
2265
|
+
"8.5.6-ubuntu-jdk11",
|
|
2266
|
+
"8.5.7",
|
|
2267
|
+
"8.5.6-ubuntu-jdk17",
|
|
2268
|
+
"8.5.6-ubi9-jdk17",
|
|
2269
|
+
"8.5.6-ubi9",
|
|
2270
|
+
"8.5.6-jdk17",
|
|
2271
|
+
"8.5.6-jdk11",
|
|
2272
|
+
"8.5.6",
|
|
2273
|
+
"8.5.5-jdk11",
|
|
2274
|
+
"8.5.5-ubuntu-jdk17",
|
|
2275
|
+
"8.5.5-jdk17",
|
|
2276
|
+
"8.5.5-ubuntu-jdk11",
|
|
2277
|
+
"8.5.3-ubuntu-jdk11",
|
|
2278
|
+
"8.5.5",
|
|
1827
2279
|
"8.5.4-ubuntu-jdk17",
|
|
1828
|
-
"7.19.0-jdk11",
|
|
1829
|
-
"7.19.0-ubuntu-jdk11",
|
|
1830
2280
|
"8.5.4-ubuntu-jdk11",
|
|
1831
|
-
"7.19.0",
|
|
1832
2281
|
"8.5.4-jdk17",
|
|
1833
|
-
"8.5.4-jdk11",
|
|
1834
2282
|
"8.5.4",
|
|
2283
|
+
"8.5.4-jdk11",
|
|
2284
|
+
"8.5.3-ubuntu-jdk17",
|
|
2285
|
+
"8.5.3-jdk17",
|
|
2286
|
+
"8.5.3-jdk11",
|
|
2287
|
+
"8.5.3",
|
|
2288
|
+
"8.5.2-jdk17",
|
|
2289
|
+
"8.5.2-ubuntu-jdk11",
|
|
2290
|
+
"8.5.2-ubuntu-jdk17",
|
|
2291
|
+
"8.5.2-jdk11",
|
|
2292
|
+
"8.5.2",
|
|
2293
|
+
"8.5.1-ubuntu-jdk17",
|
|
2294
|
+
"8.5.1-ubuntu-jdk11",
|
|
2295
|
+
"8.5.17-ubi9-jdk17",
|
|
2296
|
+
"8.5.1-jdk17",
|
|
2297
|
+
"8.5.1-jdk11",
|
|
2298
|
+
"8.5.17-ubi9",
|
|
2299
|
+
"8.5.17-ubuntu-jdk17",
|
|
2300
|
+
"8.5.17-ubuntu-jdk11",
|
|
2301
|
+
"8.5.17-jdk17",
|
|
2302
|
+
"8.5.17-jdk11",
|
|
2303
|
+
"8.5.16-ubuntu-jdk17",
|
|
2304
|
+
"8.5.17",
|
|
2305
|
+
"8.5.16-ubuntu-jdk11",
|
|
2306
|
+
"8.5.16-jdk17",
|
|
2307
|
+
"8.5.16-ubi9-jdk17",
|
|
2308
|
+
"8.5.16-ubi9",
|
|
2309
|
+
"8.5.16-jdk11",
|
|
2310
|
+
"8.5.16",
|
|
2311
|
+
"8.5.15-ubuntu-jdk17",
|
|
2312
|
+
"8.5.15-ubi9-jdk17",
|
|
2313
|
+
"8.5.15-ubuntu-jdk11",
|
|
2314
|
+
"8.5.15-jdk17",
|
|
2315
|
+
"8.5.15-jdk11",
|
|
2316
|
+
"8.5.15-ubi9",
|
|
2317
|
+
"8.5.15",
|
|
2318
|
+
"8.5.14-ubuntu-jdk17",
|
|
2319
|
+
"8.5.14-ubuntu-jdk11",
|
|
2320
|
+
"8.5.14-jdk17",
|
|
2321
|
+
"8.5.14-jdk11",
|
|
2322
|
+
"8.5.14",
|
|
2323
|
+
"8.5.12-ubuntu-jdk17",
|
|
2324
|
+
"8.5.12-ubuntu-jdk11",
|
|
2325
|
+
"8.5.12-ubi9-jdk17",
|
|
2326
|
+
"8.5.12-ubi9",
|
|
2327
|
+
"8.5.12-jdk17",
|
|
2328
|
+
"8.5.12-jdk11",
|
|
2329
|
+
"8.2.3-ubuntu-jdk11",
|
|
2330
|
+
"8.5.11-ubuntu-jdk17",
|
|
2331
|
+
"8.4.3-jdk11",
|
|
2332
|
+
"8.5.11-ubi9",
|
|
2333
|
+
"8.5.12",
|
|
2334
|
+
"8.5.11-ubuntu-jdk11",
|
|
2335
|
+
"8.5.11-ubi9-jdk17",
|
|
2336
|
+
"8.5.11-jdk17",
|
|
2337
|
+
"8.5.11-jdk11",
|
|
2338
|
+
"8.5.10-ubi9",
|
|
2339
|
+
"8.5.10-ubi9-jdk17",
|
|
2340
|
+
"8.5.10-ubuntu-jdk11",
|
|
2341
|
+
"8.5.11",
|
|
2342
|
+
"8.5.10-ubuntu-jdk17",
|
|
2343
|
+
"8.5.10-jdk17",
|
|
2344
|
+
"8.5.10",
|
|
2345
|
+
"8.5.10-jdk11",
|
|
2346
|
+
"8.5.1",
|
|
1835
2347
|
"8.5.0-ubuntu-jdk17",
|
|
1836
|
-
"8.5.0",
|
|
1837
|
-
"8.5.0-jdk17",
|
|
1838
2348
|
"8.5.0-ubuntu-jdk11",
|
|
1839
|
-
"8.5.0-
|
|
2349
|
+
"8.5.0-jdk17",
|
|
2350
|
+
"8.5.0",
|
|
1840
2351
|
"8.5",
|
|
2352
|
+
"8.5.0-jdk11",
|
|
2353
|
+
"8.4-ubuntu-jdk17",
|
|
2354
|
+
"8.4-ubuntu-jdk11",
|
|
2355
|
+
"8.4-jdk17",
|
|
2356
|
+
"8.4-jdk11",
|
|
2357
|
+
"8.4.5-ubuntu-jdk17",
|
|
2358
|
+
"8.4.5-ubuntu-jdk11",
|
|
2359
|
+
"8.4.5-jdk17",
|
|
2360
|
+
"8.4.5",
|
|
2361
|
+
"8.4.5-jdk11",
|
|
2362
|
+
"8.4.4-ubuntu-jdk17",
|
|
2363
|
+
"8.4.4-ubuntu-jdk11",
|
|
2364
|
+
"8.4.4-jdk17",
|
|
2365
|
+
"8.4.4-jdk11",
|
|
2366
|
+
"8.4.3-ubuntu-jdk17",
|
|
2367
|
+
"8.4.4",
|
|
2368
|
+
"8.4.3-ubuntu-jdk11",
|
|
2369
|
+
"8.4.3-jdk17",
|
|
1841
2370
|
"8.4.2-ubuntu-jdk17",
|
|
2371
|
+
"8.4.3",
|
|
1842
2372
|
"8.4.2-ubuntu-jdk11",
|
|
1843
|
-
"8.4.2-jdk11",
|
|
1844
2373
|
"8.4.2-jdk17",
|
|
2374
|
+
"8.4.1-ubuntu-jdk17",
|
|
1845
2375
|
"8.4.2",
|
|
2376
|
+
"8.4.2-jdk11",
|
|
2377
|
+
"8.4.1-jdk17",
|
|
2378
|
+
"8.4.1-ubuntu-jdk11",
|
|
2379
|
+
"8.4.1-jdk11",
|
|
2380
|
+
"8.4.1",
|
|
2381
|
+
"8.4.0-jdk17",
|
|
2382
|
+
"8.4.0-ubuntu-jdk17",
|
|
2383
|
+
"8.4.0-ubuntu-jdk11",
|
|
2384
|
+
"8.4.0-jdk11",
|
|
2385
|
+
"8.4.0",
|
|
1846
2386
|
"8.3-ubuntu-jdk11",
|
|
1847
|
-
"8.
|
|
1848
|
-
"8.3.4-jdk11",
|
|
1849
|
-
"8.3-jdk11",
|
|
1850
|
-
"8.2.2",
|
|
1851
|
-
"8.2.2-jdk11",
|
|
1852
|
-
"8.2.2-ubuntu-jdk11",
|
|
1853
|
-
"8.1.0",
|
|
1854
|
-
"8.1.0-jdk11",
|
|
1855
|
-
"8.1.0-ubuntu-jdk11",
|
|
1856
|
-
"7.19.9-ubuntu-jdk11",
|
|
1857
|
-
"7.19.9-jdk11",
|
|
1858
|
-
"7.19.9",
|
|
1859
|
-
"8.7.1-ubuntu-jdk17",
|
|
1860
|
-
"8.7.1-jdk17",
|
|
1861
|
-
"7.19.4-ubuntu-jdk11",
|
|
1862
|
-
"7.19.4-jdk11",
|
|
1863
|
-
"7.19.4",
|
|
1864
|
-
"8.7.1",
|
|
1865
|
-
"latest",
|
|
1866
|
-
"7.19.2-jdk11",
|
|
1867
|
-
"8.5-ubuntu-jdk11",
|
|
1868
|
-
"8.5.9-jdk11",
|
|
1869
|
-
"8.5-jdk11",
|
|
1870
|
-
"7.19.1-ubuntu-jdk11",
|
|
1871
|
-
"8.5.9-ubuntu-jdk11",
|
|
1872
|
-
"7.19.1-jdk11",
|
|
1873
|
-
"7.19.1",
|
|
1874
|
-
"8.3-ubuntu-jdk17",
|
|
1875
|
-
"ubuntu-jdk11",
|
|
2387
|
+
"8.4",
|
|
1876
2388
|
"8.3-jdk17",
|
|
2389
|
+
"8.3-ubuntu-jdk17",
|
|
2390
|
+
"8.3-jdk11",
|
|
1877
2391
|
"8.3.4-ubuntu-jdk17",
|
|
1878
|
-
"
|
|
1879
|
-
"ubi9",
|
|
2392
|
+
"8.3.4-ubuntu-jdk11",
|
|
1880
2393
|
"8.3.4-jdk17",
|
|
1881
|
-
"8.3.4",
|
|
1882
|
-
"jdk11",
|
|
1883
|
-
"8.3.
|
|
1884
|
-
"8-
|
|
1885
|
-
"8-jdk11",
|
|
1886
|
-
"8.3.
|
|
1887
|
-
"8.3.
|
|
1888
|
-
"8.
|
|
1889
|
-
"8.
|
|
1890
|
-
"8.
|
|
1891
|
-
"8.3.
|
|
1892
|
-
"8.
|
|
1893
|
-
"
|
|
1894
|
-
"8.3.
|
|
1895
|
-
"7.19.16-jdk11",
|
|
1896
|
-
"8.9.1-ubuntu-jdk11",
|
|
1897
|
-
"7.19.16",
|
|
1898
|
-
"8.3",
|
|
1899
|
-
"8.9.1-ubi9-jdk17",
|
|
1900
|
-
"8.2.2-ubuntu-jdk17",
|
|
1901
|
-
"8.9.1-jdk11",
|
|
1902
|
-
"8.9.1-ubi9",
|
|
1903
|
-
"8.2.2-jdk17",
|
|
1904
|
-
"8.0.3-ubuntu-jdk17",
|
|
1905
|
-
"8.0.3-jdk17",
|
|
1906
|
-
"8.8.1-ubi9-jdk17",
|
|
1907
|
-
"8.7-ubuntu-jdk11",
|
|
1908
|
-
"8.8.1-ubi9",
|
|
1909
|
-
"8.0.0-ubuntu-jdk11",
|
|
1910
|
-
"8.0.0-jdk11",
|
|
1911
|
-
"8.7-jdk11",
|
|
1912
|
-
"8.0.0",
|
|
1913
|
-
"8.7.2-ubuntu-jdk11",
|
|
1914
|
-
"8.7.2-ubi9-jdk17",
|
|
1915
|
-
"8.7.2-ubi9",
|
|
1916
|
-
"8.7.2-jdk11",
|
|
1917
|
-
"8.6.2-ubi9-jdk17",
|
|
1918
|
-
"8.6.2-ubi9",
|
|
1919
|
-
"8.5.5-ubuntu-jdk17",
|
|
1920
|
-
"8.5.5-ubuntu-jdk11",
|
|
1921
|
-
"8.5.5-jdk11",
|
|
1922
|
-
"8.5.5",
|
|
1923
|
-
"8.5.5-jdk17",
|
|
1924
|
-
"8.5.1-ubuntu-jdk17",
|
|
1925
|
-
"8.5.1-ubuntu-jdk11",
|
|
1926
|
-
"8.5.1-jdk17",
|
|
1927
|
-
"8.5.1-jdk11",
|
|
1928
|
-
"8.5.1",
|
|
1929
|
-
"8.4.3-ubuntu-jdk17",
|
|
1930
|
-
"8.4.3-ubuntu-jdk11",
|
|
1931
|
-
"8.4.3-jdk11",
|
|
1932
|
-
"8.4.3-jdk17",
|
|
1933
|
-
"8.4.3",
|
|
1934
|
-
"8.2-ubuntu-jdk11",
|
|
1935
|
-
"8.2.0-ubuntu-jdk17",
|
|
1936
|
-
"8.2.0-jdk17",
|
|
1937
|
-
"8.1.1-ubuntu-jdk11",
|
|
1938
|
-
"8.1.1",
|
|
1939
|
-
"8.1.1-jdk11",
|
|
1940
|
-
"7.19.5-ubuntu-jdk11",
|
|
1941
|
-
"ubuntu-jdk17",
|
|
1942
|
-
"7.19.5-jdk11",
|
|
1943
|
-
"7.19.5",
|
|
1944
|
-
"jdk17",
|
|
1945
|
-
"8-ubuntu-jdk17",
|
|
1946
|
-
"7.19.20-ubuntu-jdk11",
|
|
1947
|
-
"7.19.20-jdk11",
|
|
1948
|
-
"7.19.20",
|
|
1949
|
-
"8-jdk17",
|
|
1950
|
-
"8.9-jdk17",
|
|
1951
|
-
"8.9-ubuntu-jdk17",
|
|
1952
|
-
"7.19.10-ubuntu-jdk11",
|
|
1953
|
-
"8.9.1-ubuntu-jdk17",
|
|
1954
|
-
"7.19.10-jdk11",
|
|
1955
|
-
"7.19.10",
|
|
1956
|
-
"8.7-ubuntu-jdk17",
|
|
1957
|
-
"8.9",
|
|
1958
|
-
"8.9.1-jdk17",
|
|
1959
|
-
"8.9.1",
|
|
1960
|
-
"8.7.2-ubuntu-jdk17",
|
|
1961
|
-
"8.7-jdk17",
|
|
1962
|
-
"8.7",
|
|
1963
|
-
"8.7.2-jdk17",
|
|
1964
|
-
"8.7.2",
|
|
2394
|
+
"8.3.4",
|
|
2395
|
+
"8.3.4-jdk11",
|
|
2396
|
+
"8.3.3-ubuntu-jdk17",
|
|
2397
|
+
"8.3.3-jdk11",
|
|
2398
|
+
"8.3.3-ubuntu-jdk11",
|
|
2399
|
+
"8.3.3-jdk17",
|
|
2400
|
+
"8.3.3",
|
|
2401
|
+
"8.3.2-ubuntu-jdk17",
|
|
2402
|
+
"8.3.2-jdk11",
|
|
2403
|
+
"8.3.2-ubuntu-jdk11",
|
|
2404
|
+
"8.3.2-jdk17",
|
|
2405
|
+
"8.3.2",
|
|
2406
|
+
"8.3.1-ubuntu-jdk17",
|
|
2407
|
+
"8.3.1-ubuntu-jdk11",
|
|
1965
2408
|
"8.3.1-jdk17",
|
|
1966
2409
|
"8.3.1-jdk11",
|
|
1967
|
-
"8.3.
|
|
2410
|
+
"8.3.0-ubuntu-jdk17",
|
|
1968
2411
|
"8.3.1",
|
|
1969
|
-
"8.3.
|
|
1970
|
-
"8.
|
|
2412
|
+
"8.3.0-ubuntu-jdk11",
|
|
2413
|
+
"8.3.0-jdk17",
|
|
2414
|
+
"8.3.0-jdk11",
|
|
1971
2415
|
"8.2-ubuntu-jdk17",
|
|
1972
|
-
"8.
|
|
1973
|
-
"8.
|
|
2416
|
+
"8.3",
|
|
2417
|
+
"8.3.0",
|
|
2418
|
+
"8.2-ubuntu-jdk11",
|
|
1974
2419
|
"8.2-jdk17",
|
|
2420
|
+
"8.2-jdk11",
|
|
2421
|
+
"8.2.3-ubuntu-jdk17",
|
|
1975
2422
|
"8.2.3-jdk17",
|
|
1976
2423
|
"8.2.3-jdk11",
|
|
1977
2424
|
"8.2.3",
|
|
2425
|
+
"8.2.2-ubuntu-jdk17",
|
|
2426
|
+
"8.2.2-ubuntu-jdk11",
|
|
2427
|
+
"8.2.2-jdk17",
|
|
2428
|
+
"8.2.2-jdk11",
|
|
2429
|
+
"8.2.2",
|
|
2430
|
+
"8.2.1-ubuntu-jdk17",
|
|
2431
|
+
"8.2.1-jdk17",
|
|
2432
|
+
"8.2.1-ubuntu-jdk11",
|
|
2433
|
+
"8.2.1-jdk11",
|
|
2434
|
+
"8.2.1",
|
|
2435
|
+
"8.2.0-ubuntu-jdk17",
|
|
2436
|
+
"8.2.0-ubuntu-jdk11",
|
|
2437
|
+
"8.2.0-jdk17",
|
|
2438
|
+
"8.2.0",
|
|
2439
|
+
"8.2.0-jdk11",
|
|
1978
2440
|
"8.2",
|
|
1979
|
-
"8.1.0-jdk17",
|
|
1980
|
-
"8.1.0-ubuntu-jdk17",
|
|
1981
|
-
"8.0-jdk17",
|
|
1982
|
-
"8.0.4-jdk17",
|
|
1983
|
-
"8.0-ubuntu-jdk17",
|
|
1984
|
-
"8.0.4-ubuntu-jdk17",
|
|
1985
|
-
"8.6.0-ubi9",
|
|
1986
|
-
"8.6.0-ubi9-jdk17",
|
|
1987
|
-
"8.0.1-ubuntu-jdk11",
|
|
1988
|
-
"8.0.1-jdk11",
|
|
1989
|
-
"8",
|
|
1990
|
-
"8.0.1",
|
|
1991
|
-
"8.5.7-ubi9-jdk17",
|
|
1992
2441
|
"8.1-ubuntu-jdk17",
|
|
1993
|
-
"8.
|
|
2442
|
+
"8.1-ubuntu-jdk11",
|
|
2443
|
+
"8.0.4",
|
|
1994
2444
|
"8.1-jdk17",
|
|
2445
|
+
"8.1-jdk11",
|
|
1995
2446
|
"8.1.4-ubuntu-jdk17",
|
|
2447
|
+
"8.1.4-ubuntu-jdk11",
|
|
1996
2448
|
"8.1.4-jdk17",
|
|
1997
|
-
"8.4
|
|
1998
|
-
"
|
|
1999
|
-
"8.4
|
|
2000
|
-
"7.19.17-ubuntu-jdk11",
|
|
2001
|
-
"7.20.0",
|
|
2002
|
-
"7.20.0-jdk11",
|
|
2003
|
-
"8.4.0-jdk17",
|
|
2004
|
-
"7.19.17-jdk11",
|
|
2005
|
-
"7.19.17",
|
|
2006
|
-
"8.4.0-jdk11",
|
|
2007
|
-
"8.4.0",
|
|
2008
|
-
"7.19.21-ubuntu-jdk11",
|
|
2009
|
-
"7.19.21",
|
|
2010
|
-
"7.19.21-jdk11",
|
|
2011
|
-
"8.6.0-ubuntu-jdk17",
|
|
2012
|
-
"7.19.11-ubuntu-jdk11",
|
|
2013
|
-
"7.19.11-jdk11",
|
|
2014
|
-
"7.19.11",
|
|
2015
|
-
"8.6.0-ubuntu-jdk11",
|
|
2016
|
-
"8.6.0-jdk11",
|
|
2017
|
-
"8.6.0-jdk17",
|
|
2018
|
-
"8.6.0",
|
|
2019
|
-
"8.5.6-ubuntu-jdk17",
|
|
2020
|
-
"8.5.8-ubi9",
|
|
2021
|
-
"8.5.8-ubi9-jdk17",
|
|
2022
|
-
"8.5.6-ubuntu-jdk11",
|
|
2023
|
-
"8.5.6-ubi9-jdk17",
|
|
2024
|
-
"8.5.6-ubi9",
|
|
2025
|
-
"8.5.6",
|
|
2026
|
-
"8.5.6-jdk17",
|
|
2027
|
-
"8.5.6-jdk11",
|
|
2028
|
-
"8.5.2-ubuntu-jdk17",
|
|
2029
|
-
"8.5.2-ubuntu-jdk11",
|
|
2030
|
-
"8.5.2-jdk11",
|
|
2031
|
-
"8.5.2",
|
|
2032
|
-
"8.5.2-jdk17",
|
|
2033
|
-
"8.4.4-ubuntu-jdk11",
|
|
2034
|
-
"8.4.4-ubuntu-jdk17",
|
|
2035
|
-
"8.3.2-jdk17",
|
|
2036
|
-
"8.3.2-ubuntu-jdk17",
|
|
2037
|
-
"8.4.4-jdk17",
|
|
2038
|
-
"8.4.4",
|
|
2039
|
-
"8.4.4-jdk11",
|
|
2040
|
-
"8.3.2",
|
|
2041
|
-
"8.3.2-jdk11",
|
|
2042
|
-
"8.3.2-ubuntu-jdk11",
|
|
2043
|
-
"8.2.1-jdk17",
|
|
2044
|
-
"8.2.1-ubuntu-jdk17",
|
|
2045
|
-
"8.1.3",
|
|
2449
|
+
"8.1.4-jdk11",
|
|
2450
|
+
"8.1.3-ubuntu-jdk17",
|
|
2451
|
+
"8.1.4",
|
|
2046
2452
|
"8.1.3-ubuntu-jdk11",
|
|
2453
|
+
"8.1.3-jdk17",
|
|
2047
2454
|
"8.1.3-jdk11",
|
|
2048
|
-
"8.1.1-jdk17",
|
|
2049
2455
|
"8.1.1-ubuntu-jdk17",
|
|
2456
|
+
"8.1.3",
|
|
2457
|
+
"8.1.1-ubuntu-jdk11",
|
|
2458
|
+
"8.1.1-jdk17",
|
|
2459
|
+
"8.1.1-jdk11",
|
|
2460
|
+
"8.1.1",
|
|
2461
|
+
"8.1.0-ubuntu-jdk17",
|
|
2462
|
+
"8.1.0-ubuntu-jdk11",
|
|
2463
|
+
"8.1.0-jdk17",
|
|
2464
|
+
"8.0-ubuntu-jdk17",
|
|
2465
|
+
"8.1.0",
|
|
2466
|
+
"8.1.0-jdk11",
|
|
2467
|
+
"8.1",
|
|
2468
|
+
"8.0-jdk17",
|
|
2469
|
+
"8.0-jdk11",
|
|
2470
|
+
"8.0-ubuntu-jdk11",
|
|
2471
|
+
"8.0.4-ubuntu-jdk17",
|
|
2472
|
+
"8.0.4-ubuntu-jdk11",
|
|
2473
|
+
"8.0.4-jdk17",
|
|
2474
|
+
"8.0.4-jdk11",
|
|
2475
|
+
"8.0.3-jdk17",
|
|
2476
|
+
"8.0.3-ubuntu-jdk17",
|
|
2477
|
+
"8.0.3-ubuntu-jdk11",
|
|
2050
2478
|
"8.0.2-ubuntu-jdk11",
|
|
2051
|
-
"8.0.2",
|
|
2052
2479
|
"8.0.2-ubuntu-jdk17",
|
|
2480
|
+
"8.0.3-jdk11",
|
|
2481
|
+
"8.0.3",
|
|
2053
2482
|
"8.0.2-jdk17",
|
|
2054
2483
|
"8.0.2-jdk11",
|
|
2055
|
-
"
|
|
2056
|
-
"8.0.0-jdk17",
|
|
2057
|
-
"8.0.0-ubuntu-jdk17",
|
|
2058
|
-
"7.19.6-jdk11",
|
|
2059
|
-
"7.19.6",
|
|
2060
|
-
"7.20.1-ubuntu-jdk11",
|
|
2484
|
+
"8.0.2",
|
|
2061
2485
|
"8.0.1-ubuntu-jdk17",
|
|
2486
|
+
"8.0.1-ubuntu-jdk11",
|
|
2062
2487
|
"8.0.1-jdk17",
|
|
2063
|
-
"
|
|
2488
|
+
"8.0.0-ubuntu-jdk17",
|
|
2489
|
+
"8.0.1-jdk11",
|
|
2490
|
+
"8.0.1",
|
|
2491
|
+
"8.0.0-ubuntu-jdk11",
|
|
2492
|
+
"8.0.0-jdk11",
|
|
2493
|
+
"8.0.0-jdk17",
|
|
2494
|
+
"7-jdk11",
|
|
2495
|
+
"8.0.0",
|
|
2496
|
+
"8.0",
|
|
2497
|
+
"7-ubuntu-jdk11",
|
|
2498
|
+
"8",
|
|
2499
|
+
"7.20-ubuntu-jdk11",
|
|
2500
|
+
"7.20-jdk11",
|
|
2501
|
+
"7.20.3-ubuntu-jdk11",
|
|
2502
|
+
"7.20.3-jdk11",
|
|
2503
|
+
"7.20.3",
|
|
2504
|
+
"7.20.2-jdk11",
|
|
2505
|
+
"7.20.2-ubuntu-jdk11",
|
|
2506
|
+
"7.20.1-ubuntu-jdk11",
|
|
2507
|
+
"7.20.2",
|
|
2064
2508
|
"7.20.1-jdk11",
|
|
2509
|
+
"7.20.1",
|
|
2510
|
+
"7.20.0-ubuntu-jdk11",
|
|
2511
|
+
"7.20.0-jdk11",
|
|
2512
|
+
"7.19-ubuntu-jdk11",
|
|
2513
|
+
"7.20.0",
|
|
2514
|
+
"7.20",
|
|
2515
|
+
"7.19-jdk11",
|
|
2516
|
+
"7.19.9-ubuntu-jdk11",
|
|
2517
|
+
"7.19.9-jdk11",
|
|
2518
|
+
"7.19.8",
|
|
2519
|
+
"7.19.8-ubuntu-jdk11",
|
|
2520
|
+
"7.19.8-jdk11",
|
|
2521
|
+
"7.19.9",
|
|
2522
|
+
"7.19.7-jdk11",
|
|
2523
|
+
"7.19.7-ubuntu-jdk11",
|
|
2524
|
+
"7.19.7",
|
|
2525
|
+
"7.19.6-ubuntu-jdk11",
|
|
2526
|
+
"7.19.6-jdk11",
|
|
2527
|
+
"7.19.6",
|
|
2528
|
+
"7.19.5-ubuntu-jdk11",
|
|
2529
|
+
"7.19.5-jdk11",
|
|
2530
|
+
"7.19.5",
|
|
2531
|
+
"7.19.4-ubuntu-jdk11",
|
|
2532
|
+
"7.19.4-jdk11",
|
|
2533
|
+
"7.19.4",
|
|
2534
|
+
"7.19.3-ubuntu-jdk11",
|
|
2535
|
+
"7.19.3-jdk11",
|
|
2536
|
+
"7.19.3",
|
|
2537
|
+
"7.19.2-ubuntu-jdk11",
|
|
2538
|
+
"7.19.2-jdk11",
|
|
2539
|
+
"7.19.29-ubuntu-jdk11",
|
|
2540
|
+
"7.19.29-jdk11",
|
|
2541
|
+
"7.19.29",
|
|
2542
|
+
"7.19.28-ubuntu-jdk11",
|
|
2543
|
+
"7.19.28-jdk11",
|
|
2544
|
+
"7.19.28",
|
|
2545
|
+
"7.19.27-ubuntu-jdk11",
|
|
2546
|
+
"7.19.27-jdk11",
|
|
2547
|
+
"7.19.27",
|
|
2548
|
+
"7.19.26-ubuntu-jdk11",
|
|
2549
|
+
"7.19.26-jdk11",
|
|
2550
|
+
"7.19.25-jdk11",
|
|
2551
|
+
"7.19.26",
|
|
2552
|
+
"7.19.25-ubuntu-jdk11",
|
|
2553
|
+
"7.19.25",
|
|
2554
|
+
"7.19.24-ubuntu-jdk11",
|
|
2555
|
+
"7.19.24-jdk11",
|
|
2556
|
+
"7.19.24",
|
|
2557
|
+
"7.19.23-ubuntu-jdk11",
|
|
2558
|
+
"7.19.14",
|
|
2559
|
+
"7.19.23-jdk11",
|
|
2560
|
+
"7.19.23",
|
|
2561
|
+
"latest",
|
|
2562
|
+
"7.19.22-jdk11",
|
|
2563
|
+
"7.19.22-ubuntu-jdk11",
|
|
2564
|
+
"7.19.22",
|
|
2565
|
+
"7.19.21-ubuntu-jdk11",
|
|
2566
|
+
"7.19.21-jdk11",
|
|
2567
|
+
"7.19.21",
|
|
2568
|
+
"7.19.20",
|
|
2569
|
+
"7.19.20-ubuntu-jdk11",
|
|
2570
|
+
"7.19.20-jdk11",
|
|
2571
|
+
"7.19.15-jdk11",
|
|
2572
|
+
"7.19.2",
|
|
2573
|
+
"7.19.1-ubuntu-jdk11",
|
|
2574
|
+
"7.19.19-jdk11",
|
|
2575
|
+
"7.19.19-ubuntu-jdk11",
|
|
2576
|
+
"7.19.1-jdk11",
|
|
2577
|
+
"7.19.19",
|
|
2578
|
+
"7.19.18-ubuntu-jdk11",
|
|
2579
|
+
"7.19.18-jdk11",
|
|
2580
|
+
"7.19.18",
|
|
2581
|
+
"7.19.17-ubuntu-jdk11",
|
|
2582
|
+
"7.19.17",
|
|
2583
|
+
"7.19.17-jdk11",
|
|
2584
|
+
"7.19.16-ubuntu-jdk11",
|
|
2585
|
+
"7.19.16-jdk11",
|
|
2586
|
+
"7.19.16",
|
|
2587
|
+
"7.19.14-ubuntu-jdk11",
|
|
2588
|
+
"7.19.14-jdk11",
|
|
2589
|
+
"7.19.15-ubuntu-jdk11",
|
|
2590
|
+
"7.19.15",
|
|
2591
|
+
"7.19.12-ubuntu-jdk11",
|
|
2592
|
+
"7.19.12-jdk11",
|
|
2593
|
+
"7.19.11-ubuntu-jdk11",
|
|
2594
|
+
"7.19.11-jdk11",
|
|
2595
|
+
"7.19.11",
|
|
2596
|
+
"7.19.10-jdk11",
|
|
2597
|
+
"7.19.12",
|
|
2598
|
+
"7.19.10-ubuntu-jdk11",
|
|
2599
|
+
"7.19",
|
|
2600
|
+
"7.19.10",
|
|
2601
|
+
"7.19.0-ubuntu-jdk11",
|
|
2602
|
+
"7",
|
|
2603
|
+
"7.19.0",
|
|
2604
|
+
"7.19.0-jdk11",
|
|
2605
|
+
"7.19.1",
|
|
2606
|
+
"jdk21",
|
|
2607
|
+
"9.1-jdk21",
|
|
2608
|
+
"ubuntu-jdk21",
|
|
2609
|
+
"9.1.1-ubuntu-jdk21",
|
|
2610
|
+
"9.1-ubuntu-jdk21",
|
|
2611
|
+
"9-ubuntu-jdk21",
|
|
2612
|
+
"9-jdk21",
|
|
2613
|
+
"9.1.1-ubi9",
|
|
2614
|
+
"ubi9",
|
|
2615
|
+
"ubi9-jdk21",
|
|
2616
|
+
"9.1.1-ubi9-jdk21",
|
|
2617
|
+
"9.1-jdk17",
|
|
2618
|
+
"jdk17",
|
|
2619
|
+
"ubuntu-jdk17",
|
|
2620
|
+
"9-jdk17",
|
|
2621
|
+
"9.1.1-ubuntu-jdk17",
|
|
2622
|
+
"9-ubuntu-jdk17",
|
|
2623
|
+
"9.1-ubuntu-jdk17",
|
|
2624
|
+
"ubi9-jdk17",
|
|
2625
|
+
"9.1.1-ubi9-jdk17",
|
|
2626
|
+
"9.0.1-ubi9-jdk17",
|
|
2627
|
+
"8.9.5-ubi9-jdk17",
|
|
2628
|
+
"8.9.5-ubi9",
|
|
2629
|
+
"8.9.1-ubi9-jdk17",
|
|
2630
|
+
"8.9.1-ubi9",
|
|
2631
|
+
"8.7.2-ubi9-jdk17",
|
|
2632
|
+
"8.7.2-ubi9",
|
|
2633
|
+
"8.6.0-ubi9-jdk17",
|
|
2634
|
+
"8.6.0-ubi9",
|
|
2635
|
+
"8.5.14-ubi9-jdk17",
|
|
2636
|
+
"8.5.14-ubi9",
|
|
2637
|
+
"9.2.0-m07-ubuntu-jdk21",
|
|
2638
|
+
"9.2.0-m07-jdk17",
|
|
2639
|
+
"9.2.0-m07",
|
|
2640
|
+
"9.2.0-m07-ubuntu-jdk17",
|
|
2641
|
+
"9.2.0-m07-jdk21",
|
|
2642
|
+
"9.2.0-m07-ubi9",
|
|
2643
|
+
"9.2.0-m07-ubi9-jdk17",
|
|
2644
|
+
"9.2.0-m07-ubi9-jdk21",
|
|
2645
|
+
"9.2.0-m05-jdk17",
|
|
2646
|
+
"9.2.0-m05",
|
|
2647
|
+
"9.2.0-m05-jdk21",
|
|
2648
|
+
"9.2.0-m05-ubuntu-jdk21",
|
|
2649
|
+
"9.2.0-m05-ubuntu-jdk17",
|
|
2650
|
+
"9.2.0-m05-ubi9",
|
|
2651
|
+
"9.2.0-m05-ubi9-jdk21",
|
|
2652
|
+
"9.2.0-m05-ubi9-jdk17",
|
|
2653
|
+
"9.2.0-m04-jdk21",
|
|
2654
|
+
"9.2.0-m04-jdk17",
|
|
2655
|
+
"9.2.0-m04-ubuntu-jdk17",
|
|
2656
|
+
"9.2.0-m04-ubuntu-jdk21",
|
|
2657
|
+
"9.2.0-m04",
|
|
2658
|
+
"9.2.0-m04-ubi9-jdk17",
|
|
2659
|
+
"9.2.0-m04-ubi9-jdk21",
|
|
2660
|
+
"9.2.0-m04-ubi9",
|
|
2661
|
+
"9.1.0-rc1-ubi9-jdk21",
|
|
2662
|
+
"9.1.0-rc1-ubi9",
|
|
2663
|
+
"9.1.0-rc1-jdk17",
|
|
2664
|
+
"9.1.0-rc1",
|
|
2665
|
+
"9.1.0-rc1-ubuntu-jdk17",
|
|
2666
|
+
"9.1.0-rc1-ubi9-jdk17",
|
|
2667
|
+
"9.1.0-beta3",
|
|
2668
|
+
"9.1.0-beta3-jdk17",
|
|
2669
|
+
"9.1.0-beta3-ubuntu-jdk17",
|
|
2670
|
+
"9.1.0-beta3-ubi9",
|
|
2671
|
+
"9.1.0-beta3-ubi9-jdk17",
|
|
2672
|
+
"9.1.0-m85-ubuntu-jdk17",
|
|
2673
|
+
"9.1.0-m85",
|
|
2674
|
+
"9.1.0-m85-jdk17",
|
|
2675
|
+
"9.1.0-m85-ubi9-jdk17",
|
|
2676
|
+
"9.1.0-m85-ubi9",
|
|
2677
|
+
"9.1.0-m75-jdk17",
|
|
2678
|
+
"9.1.0-m75",
|
|
2679
|
+
"9.1.0-m75-ubuntu-jdk17",
|
|
2680
|
+
"9.1.0-m75-ubi9",
|
|
2681
|
+
"9.1.0-m75-ubi9-jdk17",
|
|
2682
|
+
"9.1.0-m69-ubuntu-jdk17",
|
|
2683
|
+
"9.1.0-m69-jdk17",
|
|
2684
|
+
"9.1.0-m69",
|
|
2685
|
+
"9.1.0-m69-ubi9-jdk17",
|
|
2686
|
+
"9.1.0-m69-ubi9",
|
|
2687
|
+
"9.0.0-rc2-ubi9-jdk17",
|
|
2688
|
+
"9.0.0-rc2",
|
|
2689
|
+
"9.0.0-rc2-jdk17",
|
|
2690
|
+
"9.0.0-rc2-ubi9",
|
|
2691
|
+
"9.0.0-rc2-ubuntu-jdk17",
|
|
2692
|
+
"9.0.0-rc1",
|
|
2693
|
+
"9.0.0-rc1-ubuntu-jdk17",
|
|
2694
|
+
"9.0.0-rc1-jdk17",
|
|
2695
|
+
"9.0.0-rc1-ubi9-jdk17",
|
|
2696
|
+
"9.0.0-rc1-ubi9",
|
|
2697
|
+
"ubuntu-jdk11",
|
|
2698
|
+
"jdk11",
|
|
2699
|
+
"9.0.0-beta3-ubi9-jdk17",
|
|
2700
|
+
"9.0.0-beta3-ubuntu-jdk17",
|
|
2701
|
+
"9.0.0-beta3-ubi9",
|
|
2702
|
+
"9.0.0-beta3-jdk17",
|
|
2703
|
+
"9.0.0-beta3",
|
|
2704
|
+
"9.0.0-beta2-jdk17",
|
|
2705
|
+
"9.0.0-beta2-ubi9",
|
|
2706
|
+
"9.0.0-beta2-ubi9-jdk17",
|
|
2707
|
+
"9.0.0-beta2-ubuntu-jdk17",
|
|
2708
|
+
"9.0.0-beta2",
|
|
2709
|
+
"9.0.0-m132",
|
|
2710
|
+
"9.0.0-m132-ubi9",
|
|
2711
|
+
"9.0.0-m132-ubi9-jdk17",
|
|
2712
|
+
"9.0.0-m132-ubuntu-jdk17",
|
|
2713
|
+
"9.0.0-m132-jdk17",
|
|
2714
|
+
"9.0.0-m123-ubuntu-jdk17",
|
|
2715
|
+
"9.0.0-m123-ubuntu-jdk11",
|
|
2716
|
+
"9.0.0-m123-ubi9-jdk17",
|
|
2717
|
+
"9.0.0-m123-ubi9",
|
|
2718
|
+
"9.0.0-m123-jdk17",
|
|
2719
|
+
"9.0.0-m123-jdk11",
|
|
2720
|
+
"9.0.0-m123",
|
|
2721
|
+
"9.0.0-m116-ubi9-jdk17",
|
|
2722
|
+
"9.0.0-m116-ubi9",
|
|
2723
|
+
"9.0.0-m116-ubuntu-jdk11",
|
|
2724
|
+
"9.0.0-m116-jdk11",
|
|
2725
|
+
"9.0.0-m116-jdk17",
|
|
2726
|
+
"9.0.0-m116-ubuntu-jdk17",
|
|
2727
|
+
"9.0.0-m116",
|
|
2728
|
+
"9.0.0-m109-ubuntu-jdk11",
|
|
2729
|
+
"9.0.0-m109-jdk11",
|
|
2730
|
+
"9.0.0-m109-ubi9-jdk17",
|
|
2731
|
+
"9.0.0-m109-ubi9",
|
|
2732
|
+
"9.0.0-m109",
|
|
2733
|
+
"9.0.0-m105",
|
|
2734
|
+
"9.0.0-m105-ubi9-jdk17",
|
|
2735
|
+
"9.0.0-m105-ubi9",
|
|
2736
|
+
"9.0.0-m97-jdk11",
|
|
2737
|
+
"9.0.0-m97-ubuntu-jdk17",
|
|
2738
|
+
"9.0.0-m97-ubuntu-jdk11",
|
|
2739
|
+
"9.0.0-m97-jdk17",
|
|
2740
|
+
"9.0.0-m97-ubi9",
|
|
2741
|
+
"9.0.0-m97-ubi9-jdk17",
|
|
2742
|
+
"9.0.0-m97",
|
|
2743
|
+
"9.0.0-m92-ubuntu-jdk11",
|
|
2744
|
+
"9.0.0-m92-jdk11",
|
|
2745
|
+
"9.0.0-m92",
|
|
2746
|
+
"9.0.0-m92-ubuntu-jdk17",
|
|
2747
|
+
"9.0.0-m92-jdk17",
|
|
2748
|
+
"9.0.0-m92-ubi9",
|
|
2749
|
+
"9.0.0-m92-ubi9-jdk17",
|
|
2065
2750
|
"9.0.0-m81-jdk17",
|
|
2066
2751
|
"9.0.0-m81-ubuntu-jdk17",
|
|
2067
2752
|
"9.0.0-m81-ubi9",
|
|
@@ -6745,10 +7430,6 @@ var bitbucket = [
|
|
|
6745
7430
|
];
|
|
6746
7431
|
var mysql = [
|
|
6747
7432
|
"latest",
|
|
6748
|
-
"8.0.37-debian",
|
|
6749
|
-
"8.0.37-bookworm",
|
|
6750
|
-
"8.0-debian",
|
|
6751
|
-
"8.0-bookworm",
|
|
6752
7433
|
"oraclelinux9",
|
|
6753
7434
|
"oracle",
|
|
6754
7435
|
"lts-oraclelinux9",
|
|
@@ -6757,21 +7438,67 @@ var mysql = [
|
|
|
6757
7438
|
"innovation-oraclelinux9",
|
|
6758
7439
|
"innovation-oracle",
|
|
6759
7440
|
"innovation",
|
|
6760
|
-
"
|
|
6761
|
-
"
|
|
6762
|
-
"
|
|
7441
|
+
"9.1.0-oraclelinux9",
|
|
7442
|
+
"9.1.0-oracle",
|
|
7443
|
+
"9.1.0",
|
|
7444
|
+
"9.1-oraclelinux9",
|
|
7445
|
+
"9.1-oracle",
|
|
7446
|
+
"9.1",
|
|
7447
|
+
"9-oraclelinux9",
|
|
7448
|
+
"9-oracle",
|
|
7449
|
+
"9",
|
|
7450
|
+
"8.4.3-oraclelinux9",
|
|
7451
|
+
"8.4.3-oracle",
|
|
7452
|
+
"8.4.3",
|
|
6763
7453
|
"8.4-oraclelinux9",
|
|
6764
7454
|
"8.4-oracle",
|
|
6765
7455
|
"8.4",
|
|
6766
|
-
"8.0.
|
|
6767
|
-
"8.0.
|
|
6768
|
-
"8.0.
|
|
7456
|
+
"8.0.40-oraclelinux9",
|
|
7457
|
+
"8.0.40-oracle",
|
|
7458
|
+
"8.0.40",
|
|
6769
7459
|
"8.0-oraclelinux9",
|
|
6770
7460
|
"8.0-oracle",
|
|
6771
7461
|
"8.0",
|
|
6772
7462
|
"8-oraclelinux9",
|
|
6773
7463
|
"8-oracle",
|
|
6774
7464
|
"8",
|
|
7465
|
+
"8.0.40-debian",
|
|
7466
|
+
"8.0.40-bookworm",
|
|
7467
|
+
"8.0-debian",
|
|
7468
|
+
"8.0-bookworm",
|
|
7469
|
+
"8.0.39-debian",
|
|
7470
|
+
"8.0.39-bookworm",
|
|
7471
|
+
"9.0.1-oraclelinux9",
|
|
7472
|
+
"9.0.1-oracle",
|
|
7473
|
+
"9.0.1",
|
|
7474
|
+
"9.0-oraclelinux9",
|
|
7475
|
+
"9.0-oracle",
|
|
7476
|
+
"9.0",
|
|
7477
|
+
"8.4.2-oraclelinux9",
|
|
7478
|
+
"8.4.2-oracle",
|
|
7479
|
+
"8.4.2",
|
|
7480
|
+
"8.0.39-oraclelinux9",
|
|
7481
|
+
"8.0.39-oracle",
|
|
7482
|
+
"8.0.39",
|
|
7483
|
+
"9.0.0-oraclelinux9",
|
|
7484
|
+
"9.0.0-oracle",
|
|
7485
|
+
"9.0.0",
|
|
7486
|
+
"8.4.1-oraclelinux9",
|
|
7487
|
+
"8.4.1-oracle",
|
|
7488
|
+
"8.4.1",
|
|
7489
|
+
"8.0.38-oraclelinux9",
|
|
7490
|
+
"8.0.38-oracle",
|
|
7491
|
+
"8.0.38",
|
|
7492
|
+
"8.0.38-debian",
|
|
7493
|
+
"8.0.38-bookworm",
|
|
7494
|
+
"8.4.0-oraclelinux9",
|
|
7495
|
+
"8.4.0-oracle",
|
|
7496
|
+
"8.4.0",
|
|
7497
|
+
"8.0.37-oraclelinux9",
|
|
7498
|
+
"8.0.37-oracle",
|
|
7499
|
+
"8.0.37",
|
|
7500
|
+
"8.0.37-debian",
|
|
7501
|
+
"8.0.37-bookworm",
|
|
6775
7502
|
"oraclelinux8",
|
|
6776
7503
|
"lts-oraclelinux8",
|
|
6777
7504
|
"8.4.0-oraclelinux8",
|
|
@@ -6984,82 +7711,184 @@ var mysql = [
|
|
|
6984
7711
|
];
|
|
6985
7712
|
var postgresql = [
|
|
6986
7713
|
"latest",
|
|
6987
|
-
"
|
|
6988
|
-
"
|
|
6989
|
-
"
|
|
6990
|
-
"
|
|
6991
|
-
"
|
|
6992
|
-
"
|
|
6993
|
-
"15.
|
|
6994
|
-
"15.
|
|
7714
|
+
"12.21-bookworm",
|
|
7715
|
+
"12.21",
|
|
7716
|
+
"12-bookworm",
|
|
7717
|
+
"12",
|
|
7718
|
+
"15.9-bullseye",
|
|
7719
|
+
"15.9-bookworm",
|
|
7720
|
+
"15.9-alpine3.20",
|
|
7721
|
+
"15.9-alpine3.19",
|
|
7722
|
+
"15.9-alpine",
|
|
7723
|
+
"15.9",
|
|
7724
|
+
"15-bullseye",
|
|
7725
|
+
"15-bookworm",
|
|
6995
7726
|
"15-alpine3.20",
|
|
7727
|
+
"15-alpine3.19",
|
|
6996
7728
|
"15-alpine",
|
|
6997
|
-
"
|
|
6998
|
-
"14.
|
|
7729
|
+
"15",
|
|
7730
|
+
"14.14-bullseye",
|
|
7731
|
+
"14.14-bookworm",
|
|
7732
|
+
"14.14-alpine3.20",
|
|
7733
|
+
"14.14-alpine3.19",
|
|
7734
|
+
"14.14-alpine",
|
|
7735
|
+
"14.14",
|
|
7736
|
+
"14-bullseye",
|
|
7737
|
+
"14-bookworm",
|
|
6999
7738
|
"14-alpine3.20",
|
|
7739
|
+
"14-alpine3.19",
|
|
7000
7740
|
"14-alpine",
|
|
7001
|
-
"
|
|
7002
|
-
"13.
|
|
7741
|
+
"14",
|
|
7742
|
+
"13.17-bullseye",
|
|
7743
|
+
"13.17-bookworm",
|
|
7744
|
+
"13.17-alpine3.20",
|
|
7745
|
+
"13.17-alpine3.19",
|
|
7746
|
+
"13.17-alpine",
|
|
7747
|
+
"13.17",
|
|
7748
|
+
"13-bullseye",
|
|
7749
|
+
"13-bookworm",
|
|
7003
7750
|
"13-alpine3.20",
|
|
7751
|
+
"13-alpine3.19",
|
|
7004
7752
|
"13-alpine",
|
|
7005
|
-
"
|
|
7006
|
-
"12.
|
|
7753
|
+
"13",
|
|
7754
|
+
"12.21-bullseye",
|
|
7755
|
+
"12.21-alpine3.20",
|
|
7756
|
+
"12.21-alpine3.19",
|
|
7757
|
+
"12.21-alpine",
|
|
7758
|
+
"12-bullseye",
|
|
7007
7759
|
"12-alpine3.20",
|
|
7760
|
+
"12-alpine3.19",
|
|
7008
7761
|
"12-alpine",
|
|
7009
|
-
"
|
|
7010
|
-
"
|
|
7011
|
-
"
|
|
7012
|
-
"
|
|
7013
|
-
"
|
|
7014
|
-
"
|
|
7762
|
+
"bullseye",
|
|
7763
|
+
"bookworm",
|
|
7764
|
+
"alpine3.20",
|
|
7765
|
+
"alpine3.19",
|
|
7766
|
+
"alpine",
|
|
7767
|
+
"17.1-bullseye",
|
|
7768
|
+
"17.1-bookworm",
|
|
7769
|
+
"17.1-alpine3.20",
|
|
7770
|
+
"17.1-alpine3.19",
|
|
7771
|
+
"17.1-alpine",
|
|
7772
|
+
"17.1",
|
|
7773
|
+
"17-bullseye",
|
|
7774
|
+
"17-bookworm",
|
|
7775
|
+
"17-alpine3.20",
|
|
7776
|
+
"17-alpine3.19",
|
|
7777
|
+
"17-alpine",
|
|
7778
|
+
"17",
|
|
7779
|
+
"16.5-bullseye",
|
|
7780
|
+
"16.5-bookworm",
|
|
7781
|
+
"16.5-alpine3.20",
|
|
7782
|
+
"16.5-alpine3.19",
|
|
7783
|
+
"16.5-alpine",
|
|
7784
|
+
"16.5",
|
|
7785
|
+
"16-bullseye",
|
|
7786
|
+
"16-bookworm",
|
|
7787
|
+
"16-alpine3.20",
|
|
7788
|
+
"16-alpine3.19",
|
|
7789
|
+
"16-alpine",
|
|
7790
|
+
"16",
|
|
7791
|
+
"14.13-alpine3.20",
|
|
7792
|
+
"14.13-alpine",
|
|
7793
|
+
"13.16-alpine3.20",
|
|
7794
|
+
"13.16-alpine",
|
|
7795
|
+
"12.20-alpine3.20",
|
|
7796
|
+
"12.20-alpine",
|
|
7797
|
+
"16.4-alpine3.20",
|
|
7798
|
+
"16.4-alpine",
|
|
7799
|
+
"15.8-alpine3.20",
|
|
7800
|
+
"15.8-alpine",
|
|
7801
|
+
"17.0-alpine3.20",
|
|
7802
|
+
"17.0-alpine",
|
|
7803
|
+
"14.13-bullseye",
|
|
7804
|
+
"14.13-bookworm",
|
|
7805
|
+
"14.13-alpine3.19",
|
|
7806
|
+
"14.13",
|
|
7807
|
+
"13.16-bullseye",
|
|
7808
|
+
"13.16-bookworm",
|
|
7809
|
+
"13.16-alpine3.19",
|
|
7810
|
+
"13.16",
|
|
7811
|
+
"12.20-bullseye",
|
|
7812
|
+
"12.20-bookworm",
|
|
7813
|
+
"12.20-alpine3.19",
|
|
7814
|
+
"12.20",
|
|
7815
|
+
"17.0-bullseye",
|
|
7816
|
+
"17.0-bookworm",
|
|
7817
|
+
"17.0-alpine3.19",
|
|
7818
|
+
"17.0",
|
|
7819
|
+
"16.4-bullseye",
|
|
7820
|
+
"16.4-bookworm",
|
|
7821
|
+
"16.4-alpine3.19",
|
|
7822
|
+
"16.4",
|
|
7823
|
+
"15.8-bullseye",
|
|
7824
|
+
"15.8-bookworm",
|
|
7825
|
+
"15.8-alpine3.19",
|
|
7826
|
+
"15.8",
|
|
7827
|
+
"17rc1-alpine3.20",
|
|
7828
|
+
"17rc1-alpine",
|
|
7829
|
+
"17rc1-alpine3.19",
|
|
7830
|
+
"17rc1-bullseye",
|
|
7831
|
+
"17rc1-bookworm",
|
|
7832
|
+
"17rc1",
|
|
7833
|
+
"17beta3-bullseye",
|
|
7834
|
+
"17beta3-bookworm",
|
|
7835
|
+
"17beta3",
|
|
7836
|
+
"17beta3-alpine3.20",
|
|
7837
|
+
"17beta3-alpine3.19",
|
|
7838
|
+
"17beta3-alpine",
|
|
7015
7839
|
"12.19-bullseye",
|
|
7016
7840
|
"12.19-bookworm",
|
|
7017
7841
|
"12.19",
|
|
7018
|
-
"12-bullseye",
|
|
7019
|
-
"12-bookworm",
|
|
7020
|
-
"12",
|
|
7021
7842
|
"14.12-bullseye",
|
|
7022
|
-
"
|
|
7023
|
-
"
|
|
7024
|
-
"
|
|
7025
|
-
"14-bookworm",
|
|
7026
|
-
"14",
|
|
7027
|
-
"bullseye",
|
|
7028
|
-
"16.3-bullseye",
|
|
7029
|
-
"16-bullseye",
|
|
7843
|
+
"13.15-bullseye",
|
|
7844
|
+
"13.15-bookworm",
|
|
7845
|
+
"13.15",
|
|
7030
7846
|
"15.7-bullseye",
|
|
7031
7847
|
"15.7-bookworm",
|
|
7032
7848
|
"15.7",
|
|
7033
|
-
"
|
|
7034
|
-
"
|
|
7035
|
-
"
|
|
7036
|
-
"bookworm",
|
|
7849
|
+
"14.12-bookworm",
|
|
7850
|
+
"14.12",
|
|
7851
|
+
"16.3-bullseye",
|
|
7037
7852
|
"16.3-bookworm",
|
|
7038
7853
|
"16.3",
|
|
7039
|
-
"
|
|
7040
|
-
"
|
|
7854
|
+
"17beta2-bullseye",
|
|
7855
|
+
"17beta2-bookworm",
|
|
7856
|
+
"17beta2",
|
|
7857
|
+
"16.3-alpine3.20",
|
|
7858
|
+
"16.3-alpine3.19",
|
|
7859
|
+
"16.3-alpine",
|
|
7860
|
+
"15.7-alpine3.20",
|
|
7861
|
+
"15.7-alpine3.19",
|
|
7862
|
+
"15.7-alpine",
|
|
7863
|
+
"14.12-alpine3.20",
|
|
7864
|
+
"14.12-alpine3.19",
|
|
7865
|
+
"14.12-alpine",
|
|
7866
|
+
"13.15-alpine3.20",
|
|
7867
|
+
"13.15-alpine3.19",
|
|
7868
|
+
"13.15-alpine",
|
|
7869
|
+
"12.19-alpine3.20",
|
|
7041
7870
|
"12.19-alpine3.19",
|
|
7871
|
+
"12.19-alpine",
|
|
7872
|
+
"17beta2-alpine3.20",
|
|
7873
|
+
"17beta2-alpine3.19",
|
|
7874
|
+
"17beta2-alpine",
|
|
7875
|
+
"17beta1-alpine3.20",
|
|
7876
|
+
"17beta1-alpine",
|
|
7877
|
+
"17beta1-alpine3.19",
|
|
7878
|
+
"17beta1-bullseye",
|
|
7879
|
+
"17beta1-bookworm",
|
|
7880
|
+
"17beta1",
|
|
7042
7881
|
"12.19-alpine3.18",
|
|
7043
|
-
"12-alpine3.19",
|
|
7044
7882
|
"12-alpine3.18",
|
|
7045
7883
|
"alpine3.18",
|
|
7046
7884
|
"16.3-alpine3.18",
|
|
7047
7885
|
"16-alpine3.18",
|
|
7048
|
-
"15.7-alpine3.19",
|
|
7049
7886
|
"15.7-alpine3.18",
|
|
7050
|
-
"15-alpine3.19",
|
|
7051
7887
|
"15-alpine3.18",
|
|
7052
|
-
"14.12-alpine3.19",
|
|
7053
7888
|
"14.12-alpine3.18",
|
|
7054
|
-
"14-alpine3.19",
|
|
7055
7889
|
"14-alpine3.18",
|
|
7056
|
-
"13.15-alpine3.19",
|
|
7057
7890
|
"13.15-alpine3.18",
|
|
7058
|
-
"13-alpine3.19",
|
|
7059
7891
|
"13-alpine3.18",
|
|
7060
|
-
"alpine3.19",
|
|
7061
|
-
"16.3-alpine3.19",
|
|
7062
|
-
"16-alpine3.19",
|
|
7063
7892
|
"13.14-bullseye",
|
|
7064
7893
|
"12.18-bullseye",
|
|
7065
7894
|
"12.18-bookworm",
|
|
@@ -7921,6 +8750,9 @@ var mssql = [
|
|
|
7921
8750
|
"2017-CU30-ubuntu-18.04",
|
|
7922
8751
|
"2017-CU31-GDR1-ubuntu-18.04",
|
|
7923
8752
|
"2017-CU31-GDR2-ubuntu-18.04",
|
|
8753
|
+
"2017-CU31-GDR5-ubuntu-18.04",
|
|
8754
|
+
"2017-CU31-GDR6-ubuntu-18.04",
|
|
8755
|
+
"2017-CU31-GDR7-ubuntu-18.04",
|
|
7924
8756
|
"2017-CU31-ubuntu-18.04",
|
|
7925
8757
|
"2017-CU4-ubuntu",
|
|
7926
8758
|
"2017-CU5-ubuntu",
|
|
@@ -7986,6 +8818,12 @@ var mssql = [
|
|
|
7986
8818
|
"2019-CU25-GDR1-ubuntu-20.04",
|
|
7987
8819
|
"2019-CU25-ubuntu-20.04",
|
|
7988
8820
|
"2019-CU26-ubuntu-20.04",
|
|
8821
|
+
"2019-CU27-ubuntu-20.04",
|
|
8822
|
+
"2019-CU28-GDR1-ubuntu-20.04",
|
|
8823
|
+
"2019-CU28-GDR2-ubuntu-20.04",
|
|
8824
|
+
"2019-CU28-ubuntu-20.04",
|
|
8825
|
+
"2019-CU29-GDR1-ubuntu-20.04",
|
|
8826
|
+
"2019-CU29-ubuntu-20.04",
|
|
7989
8827
|
"2019-CU3-ubuntu-16.04",
|
|
7990
8828
|
"2019-CU3-ubuntu-18.04",
|
|
7991
8829
|
"2019-CU4-ubuntu-16.04",
|
|
@@ -8023,6 +8861,18 @@ var mssql = [
|
|
|
8023
8861
|
"2022-CU12-ubuntu-22.04",
|
|
8024
8862
|
"2022-CU13-ubuntu-20.04",
|
|
8025
8863
|
"2022-CU13-ubuntu-22.04",
|
|
8864
|
+
"2022-CU14-GDR1-ubuntu-20.04",
|
|
8865
|
+
"2022-CU14-GDR1-ubuntu-22.04",
|
|
8866
|
+
"2022-CU14-ubuntu-20.04",
|
|
8867
|
+
"2022-CU14-ubuntu-22.04",
|
|
8868
|
+
"2022-CU15-GDR1-ubuntu-20.04",
|
|
8869
|
+
"2022-CU15-GDR1-ubuntu-22.04",
|
|
8870
|
+
"2022-CU15-GDR2-ubuntu-20.04",
|
|
8871
|
+
"2022-CU15-GDR2-ubuntu-22.04",
|
|
8872
|
+
"2022-CU15-ubuntu-20.04",
|
|
8873
|
+
"2022-CU15-ubuntu-22.04",
|
|
8874
|
+
"2022-CU16-ubuntu-20.04",
|
|
8875
|
+
"2022-CU16-ubuntu-22.04",
|
|
8026
8876
|
"2022-CU3-ubuntu-20.04",
|
|
8027
8877
|
"2022-CU4-ubuntu-20.04",
|
|
8028
8878
|
"2022-CU5-ubuntu-20.04",
|
|
@@ -8042,7 +8892,7 @@ var mssql = [
|
|
|
8042
8892
|
"latest",
|
|
8043
8893
|
"latest-ubuntu"
|
|
8044
8894
|
];
|
|
8045
|
-
var versions = {
|
|
8895
|
+
var versions$1 = {
|
|
8046
8896
|
jira: jira,
|
|
8047
8897
|
confluence: confluence,
|
|
8048
8898
|
bamboo: bamboo,
|
|
@@ -8052,43 +8902,6 @@ var versions = {
|
|
|
8052
8902
|
mssql: mssql
|
|
8053
8903
|
};
|
|
8054
8904
|
|
|
8055
|
-
const ActionHandler = async (program, { action, errorHandler }, options) => {
|
|
8056
|
-
const ops = options || program.opts();
|
|
8057
|
-
await new Promise((resolve, reject) => {
|
|
8058
|
-
let errorMessage = '';
|
|
8059
|
-
asyncExitHook(async (code) => {
|
|
8060
|
-
try {
|
|
8061
|
-
if (code !== 0) {
|
|
8062
|
-
await errorHandler(ops).catch(() => null);
|
|
8063
|
-
}
|
|
8064
|
-
if (errorMessage) {
|
|
8065
|
-
throw new Error(errorMessage.trim());
|
|
8066
|
-
}
|
|
8067
|
-
else {
|
|
8068
|
-
resolve();
|
|
8069
|
-
}
|
|
8070
|
-
}
|
|
8071
|
-
catch (err) {
|
|
8072
|
-
const message = err instanceof Error ? err.message : err;
|
|
8073
|
-
reject(message);
|
|
8074
|
-
}
|
|
8075
|
-
}, {
|
|
8076
|
-
wait: 30 * 1000
|
|
8077
|
-
});
|
|
8078
|
-
action(ops).catch(err => {
|
|
8079
|
-
if (err instanceof z.ZodError) {
|
|
8080
|
-
err.issues.forEach(issue => {
|
|
8081
|
-
errorMessage += `Unable to parse option ${issue.path.join(',')}: ${issue.message}\n`;
|
|
8082
|
-
});
|
|
8083
|
-
}
|
|
8084
|
-
else if (err instanceof Error || typeof err === 'string') {
|
|
8085
|
-
errorMessage = err.toString();
|
|
8086
|
-
}
|
|
8087
|
-
gracefulExit(1);
|
|
8088
|
-
});
|
|
8089
|
-
}).catch(message => program.error(message));
|
|
8090
|
-
};
|
|
8091
|
-
|
|
8092
8905
|
const SupportedDatabaseEngines = z.enum([
|
|
8093
8906
|
'postgresql',
|
|
8094
8907
|
'mysql',
|
|
@@ -8114,19 +8927,19 @@ const DatabaseOptions = z.object({
|
|
|
8114
8927
|
});
|
|
8115
8928
|
DatabaseOptions.extend({
|
|
8116
8929
|
name: SupportedDatabaseEngines.refine(item => item === SupportedDatabaseEngines.Values.postgresql).default(SupportedDatabaseEngines.Values.postgresql),
|
|
8117
|
-
tag: z.string().refine(item => versions[SupportedDatabaseEngines.Values.postgresql].includes(item)).default('latest'),
|
|
8930
|
+
tag: z.string().refine(item => versions$1[SupportedDatabaseEngines.Values.postgresql].includes(item)).default('latest'),
|
|
8118
8931
|
port: z.number().or(z.string().transform(Number).refine(item => !isNaN(item))).default(5432),
|
|
8119
8932
|
driver: z.string().refine(item => item === 'org.postgresql.Driver').default('org.postgresql.Driver')
|
|
8120
8933
|
});
|
|
8121
8934
|
DatabaseOptions.extend({
|
|
8122
8935
|
name: SupportedDatabaseEngines.refine(item => item === SupportedDatabaseEngines.Values.mysql).default(SupportedDatabaseEngines.Values.mysql),
|
|
8123
|
-
tag: z.string().refine(item => versions[SupportedDatabaseEngines.Values.mysql].includes(item)).default('latest'),
|
|
8936
|
+
tag: z.string().refine(item => versions$1[SupportedDatabaseEngines.Values.mysql].includes(item)).default('latest'),
|
|
8124
8937
|
port: z.number().or(z.string().transform(Number).refine(item => !isNaN(item))).default(3306),
|
|
8125
8938
|
driver: z.string().refine(item => item === 'com.mysql.jdbc.Driver').default('com.mysql.jdbc.Driver')
|
|
8126
8939
|
});
|
|
8127
8940
|
DatabaseOptions.extend({
|
|
8128
8941
|
name: SupportedDatabaseEngines.refine(item => item === SupportedDatabaseEngines.Values.mssql).default(SupportedDatabaseEngines.Values.mssql),
|
|
8129
|
-
tag: z.string().refine(item => versions[SupportedDatabaseEngines.Values.mssql].includes(item)).default('latest'),
|
|
8942
|
+
tag: z.string().refine(item => versions$1[SupportedDatabaseEngines.Values.mssql].includes(item)).default('latest'),
|
|
8130
8943
|
edition: SupportedMSSQLEditions.default('Developer'),
|
|
8131
8944
|
port: z.number().or(z.string().transform(Number).refine(item => !isNaN(item))).default(1433),
|
|
8132
8945
|
username: z.string().refine(item => item === 'sa').default('sa'),
|
|
@@ -8144,7 +8957,8 @@ z.object({
|
|
|
8144
8957
|
name: SupportedApplications,
|
|
8145
8958
|
tag: z.string().default('latest'),
|
|
8146
8959
|
database: SupportedDatabaseEngines.default('postgresql'),
|
|
8147
|
-
|
|
8960
|
+
databaseTag: z.string().default('latest'),
|
|
8961
|
+
port: z.string().transform(Number).refine(item => !isNaN(item)).default('80'),
|
|
8148
8962
|
contextPath: z.string(),
|
|
8149
8963
|
xms: z.string().default('1024m'),
|
|
8150
8964
|
xmx: z.string().default('1024m'),
|
|
@@ -8158,8 +8972,11 @@ z.object({
|
|
|
8158
8972
|
debug: z.boolean().default(true),
|
|
8159
8973
|
cwd: z.string()
|
|
8160
8974
|
}).partial({
|
|
8161
|
-
activateProfiles: true,
|
|
8162
8975
|
contextPath: true,
|
|
8976
|
+
ext: true,
|
|
8977
|
+
install: true,
|
|
8978
|
+
outputDirectory: true,
|
|
8979
|
+
activateProfiles: true,
|
|
8163
8980
|
cwd: true
|
|
8164
8981
|
});
|
|
8165
8982
|
|
|
@@ -8213,7 +9030,7 @@ class AMPS {
|
|
|
8213
9030
|
getApplicationVersion() {
|
|
8214
9031
|
const applications = this.getApplications();
|
|
8215
9032
|
if (applications.size === 1) {
|
|
8216
|
-
const [, version] =
|
|
9033
|
+
const [, version] = Array.from(applications)[0];
|
|
8217
9034
|
return version;
|
|
8218
9035
|
}
|
|
8219
9036
|
else if (applications.size > 1) {
|
|
@@ -8224,7 +9041,7 @@ class AMPS {
|
|
|
8224
9041
|
getApplication() {
|
|
8225
9042
|
const applications = this.getApplications();
|
|
8226
9043
|
if (applications.size === 1) {
|
|
8227
|
-
const [name] =
|
|
9044
|
+
const [name] = Array.from(applications)[0];
|
|
8228
9045
|
return name;
|
|
8229
9046
|
}
|
|
8230
9047
|
else if (applications.size > 1) {
|
|
@@ -8237,27 +9054,64 @@ class AMPS {
|
|
|
8237
9054
|
const nodes = this.getNodes('//*[local-name()=\'groupId\' and text()=\'com.atlassian.maven.plugins\']');
|
|
8238
9055
|
const nodesWithActiveProfile = nodes.filter(node => this.isActivatedProfile(node));
|
|
8239
9056
|
nodesWithActiveProfile.forEach(node => {
|
|
8240
|
-
const version = this.getVersion(node);
|
|
8241
9057
|
const parentNode = node.parentNode;
|
|
8242
9058
|
if (parentNode) {
|
|
8243
9059
|
const { plugin } = this.toObject(parentNode);
|
|
8244
|
-
if (plugin?.artifactId
|
|
8245
|
-
|
|
8246
|
-
|
|
8247
|
-
|
|
8248
|
-
|
|
9060
|
+
if ('amps-maven-plugin' === plugin?.artifactId) {
|
|
9061
|
+
const { configuration } = plugin || {};
|
|
9062
|
+
if (configuration?.products) {
|
|
9063
|
+
if (Array.isArray(configuration?.products)) {
|
|
9064
|
+
configuration.products.forEach((product) => {
|
|
9065
|
+
const supportedApplication = this.getSupportedApplication(product.id) || this.getSupportedApplication(product.instanceId);
|
|
9066
|
+
if (supportedApplication) {
|
|
9067
|
+
const version = this.doPropertyReplacement(product.version);
|
|
9068
|
+
if (version) {
|
|
9069
|
+
result.set(supportedApplication, version);
|
|
9070
|
+
}
|
|
9071
|
+
}
|
|
9072
|
+
});
|
|
9073
|
+
}
|
|
9074
|
+
else {
|
|
9075
|
+
const { product } = configuration?.products || {};
|
|
9076
|
+
if (product) {
|
|
9077
|
+
const supportedApplication = this.getSupportedApplication(product.id) || this.getSupportedApplication(product.instanceId);
|
|
9078
|
+
if (supportedApplication) {
|
|
9079
|
+
const version = this.doPropertyReplacement(product.version);
|
|
9080
|
+
if (version) {
|
|
9081
|
+
result.set(supportedApplication, version);
|
|
9082
|
+
}
|
|
9083
|
+
}
|
|
9084
|
+
}
|
|
9085
|
+
}
|
|
9086
|
+
}
|
|
8249
9087
|
}
|
|
8250
|
-
else
|
|
8251
|
-
|
|
8252
|
-
|
|
8253
|
-
|
|
8254
|
-
|
|
9088
|
+
else {
|
|
9089
|
+
const supportedApplication = this.getSupportedApplication(plugin?.artifactId);
|
|
9090
|
+
const version = this.getVersion(node);
|
|
9091
|
+
if (supportedApplication) {
|
|
9092
|
+
result.set(supportedApplication, version);
|
|
9093
|
+
}
|
|
8255
9094
|
}
|
|
8256
9095
|
}
|
|
8257
9096
|
});
|
|
8258
9097
|
return result;
|
|
8259
9098
|
}
|
|
8260
9099
|
// ------------------------------------------------------------------------------------------ Private Methods
|
|
9100
|
+
getSupportedApplication(value) {
|
|
9101
|
+
if (value?.includes(SupportedApplications.Values.jira)) {
|
|
9102
|
+
return SupportedApplications.Values.jira;
|
|
9103
|
+
}
|
|
9104
|
+
else if (value?.includes(SupportedApplications.Values.confluence)) {
|
|
9105
|
+
return SupportedApplications.Values.confluence;
|
|
9106
|
+
}
|
|
9107
|
+
else if (value?.includes(SupportedApplications.Values.bamboo)) {
|
|
9108
|
+
return SupportedApplications.Values.bamboo;
|
|
9109
|
+
}
|
|
9110
|
+
else if (value?.includes(SupportedApplications.Values.bitbucket)) {
|
|
9111
|
+
return SupportedApplications.Values.bitbucket;
|
|
9112
|
+
}
|
|
9113
|
+
return null;
|
|
9114
|
+
}
|
|
8261
9115
|
getVersion(node) {
|
|
8262
9116
|
const parentNode = node.parentNode;
|
|
8263
9117
|
if (parentNode) {
|
|
@@ -8351,6 +9205,42 @@ class AMPS {
|
|
|
8351
9205
|
}
|
|
8352
9206
|
}
|
|
8353
9207
|
|
|
9208
|
+
class CustomBuilder {
|
|
9209
|
+
options;
|
|
9210
|
+
proc = null;
|
|
9211
|
+
// ------------------------------------------------------------------------------------------ Constructor
|
|
9212
|
+
constructor(options) {
|
|
9213
|
+
this.options = options;
|
|
9214
|
+
}
|
|
9215
|
+
// ------------------------------------------------------------------------------------------ Public Methods
|
|
9216
|
+
stop() {
|
|
9217
|
+
if (this.proc) {
|
|
9218
|
+
const killed = this.proc.kill(0);
|
|
9219
|
+
if (!killed) {
|
|
9220
|
+
throw new Error('Failed to terminate existing build process');
|
|
9221
|
+
}
|
|
9222
|
+
}
|
|
9223
|
+
}
|
|
9224
|
+
async build() {
|
|
9225
|
+
return new Promise((resolve, reject) => {
|
|
9226
|
+
if (this.proc) {
|
|
9227
|
+
const killed = this.proc.kill(0);
|
|
9228
|
+
if (!killed) {
|
|
9229
|
+
reject(new Error('Failed to terminate existing build process'));
|
|
9230
|
+
}
|
|
9231
|
+
}
|
|
9232
|
+
try {
|
|
9233
|
+
execSync(this.options.cmd, { cwd: this.options?.cwd || cwd(), stdio: 'inherit' });
|
|
9234
|
+
resolve();
|
|
9235
|
+
}
|
|
9236
|
+
catch (err) {
|
|
9237
|
+
const { status } = err;
|
|
9238
|
+
reject(new Error(`Build exited with code ${status}`));
|
|
9239
|
+
}
|
|
9240
|
+
});
|
|
9241
|
+
}
|
|
9242
|
+
}
|
|
9243
|
+
|
|
8354
9244
|
const isRecursiveBuild = (lastBuildCompleted) => lastBuildCompleted > (new Date().getTime() - 5 * 1000);
|
|
8355
9245
|
|
|
8356
9246
|
const showRecursiveBuildWarning = (outputDirectory) => {
|
|
@@ -8381,7 +9271,64 @@ const copy = async (sourcePath, destinationPath) => {
|
|
|
8381
9271
|
});
|
|
8382
9272
|
};
|
|
8383
9273
|
|
|
8384
|
-
const
|
|
9274
|
+
const isOfType = (obj, property) => {
|
|
9275
|
+
return obj !== null && typeof obj === 'object' && property in obj;
|
|
9276
|
+
};
|
|
9277
|
+
|
|
9278
|
+
const uploadToUPM = async (baseUrl, path, username, password, verbose = true) => {
|
|
9279
|
+
const credentials = username && password ? Buffer.from(`${username}:${password}`).toString('base64') : null;
|
|
9280
|
+
const response = await axios.get(`${baseUrl}/rest/plugins/1.0/?os_authType=basic`, credentials ? {
|
|
9281
|
+
headers: { 'Authorization': `Basic ${credentials}` }
|
|
9282
|
+
} : undefined).catch(err => {
|
|
9283
|
+
verbose && console.log('Failed to upload plugin archive file to UPM, unable to retrieve token', err);
|
|
9284
|
+
return null;
|
|
9285
|
+
});
|
|
9286
|
+
if (response) {
|
|
9287
|
+
const token = response.headers['upm-token'];
|
|
9288
|
+
if (token) {
|
|
9289
|
+
const formData = new FormData();
|
|
9290
|
+
formData.append('plugin', createReadStream(path));
|
|
9291
|
+
await axios.post(`${baseUrl}/rest/plugins/1.0/?token=${token}`, formData, { headers: {
|
|
9292
|
+
...formData.getHeaders(),
|
|
9293
|
+
...credentials ? { 'Authorization': `Basic ${credentials}` } : {}
|
|
9294
|
+
} })
|
|
9295
|
+
.then(() => verbose && console.log('Finished uploading plugin archive to UPM'))
|
|
9296
|
+
.catch(err => verbose && console.log('Failed to upload plugin archive file to UPM', err));
|
|
9297
|
+
}
|
|
9298
|
+
else {
|
|
9299
|
+
verbose && console.log('Failed to upload plugin archive file to UPM, unable to retrieve token from headers:', JSON.stringify(response.headers, null, 2));
|
|
9300
|
+
}
|
|
9301
|
+
}
|
|
9302
|
+
};
|
|
9303
|
+
|
|
9304
|
+
const Installer = async (name, path, options) => {
|
|
9305
|
+
const containerIds = await getRunningContainerIds(name);
|
|
9306
|
+
if (!containerIds || containerIds.length <= 0) {
|
|
9307
|
+
console.log(`There are no running instance of ${name}, unable to install plugin 🤔`);
|
|
9308
|
+
return;
|
|
9309
|
+
}
|
|
9310
|
+
else if (containerIds.length > 1) {
|
|
9311
|
+
console.log(`There are multple running instance of ${name}, unable to determine which one to use 🤔`);
|
|
9312
|
+
return;
|
|
9313
|
+
}
|
|
9314
|
+
const containerId = containerIds[0];
|
|
9315
|
+
if (containerId) {
|
|
9316
|
+
if (options.obr) {
|
|
9317
|
+
console.log(`Found updated plugin, uploading it to UPM on running instances of ${name}`);
|
|
9318
|
+
const hostUrl = isOfType(options, 'port') ? `localhost:${options.port}` : `localhost`;
|
|
9319
|
+
const baseUrl = options.username && options.password ? `http://${options.username}:${options.password}@${hostUrl}` : `http://${hostUrl}`;
|
|
9320
|
+
uploadToUPM(resolve(options.cwd || cwd(), path), baseUrl);
|
|
9321
|
+
}
|
|
9322
|
+
else {
|
|
9323
|
+
console.log(`Found updated plugin, uploading it to QuickReload on running instances of ${name}`);
|
|
9324
|
+
await copy(resolve(options.cwd || cwd(), path), `${containerId}:/opt/quickreload/`)
|
|
9325
|
+
.then(() => console.log('Finished uploading plugin archive to QuickReload'))
|
|
9326
|
+
.catch(err => console.log('Failed to upload plugin archive file to QuickReload', err));
|
|
9327
|
+
}
|
|
9328
|
+
}
|
|
9329
|
+
};
|
|
9330
|
+
|
|
9331
|
+
const FileWatcher = (name, options, mavenOpts, installOnly = false) => {
|
|
8385
9332
|
let lastBuildCompleted = new Date().getTime();
|
|
8386
9333
|
const outputDirectory = options.outputDirectory || 'target';
|
|
8387
9334
|
const patterns = options.ext || ['**/*'];
|
|
@@ -8390,6 +9337,7 @@ const FileWatcher = (name, options, mavenOpts) => {
|
|
|
8390
9337
|
cwd: options.cwd,
|
|
8391
9338
|
profiles: options.activateProfiles?.split(',') || []
|
|
8392
9339
|
});
|
|
9340
|
+
const deliverableExtension = options.obr ? '.obr' : '.jar';
|
|
8393
9341
|
return watch(patterns, {
|
|
8394
9342
|
cwd: options.cwd || cwd(),
|
|
8395
9343
|
usePolling: true,
|
|
@@ -8399,42 +9347,123 @@ const FileWatcher = (name, options, mavenOpts) => {
|
|
|
8399
9347
|
persistent: true,
|
|
8400
9348
|
atomic: true
|
|
8401
9349
|
}).on('change', async (path) => {
|
|
8402
|
-
if (options.install && path.startsWith(outputDirectory) && path.toLowerCase().endsWith(
|
|
8403
|
-
|
|
8404
|
-
if (containerIds.length <= 0) {
|
|
8405
|
-
console.log(`There are no running instance of ${name}, unable to install plugin 🤔`);
|
|
8406
|
-
return;
|
|
8407
|
-
}
|
|
8408
|
-
else if (containerIds.length > 1) {
|
|
8409
|
-
console.log(`There are multple running instance of ${name}, unable to determine which one to use 🤔`);
|
|
8410
|
-
return;
|
|
8411
|
-
}
|
|
8412
|
-
const containerId = containerIds[0];
|
|
8413
|
-
if (containerId) {
|
|
8414
|
-
console.log(`Found updated JAR file, uploading them to QuickReload on running instances of ${name}`);
|
|
8415
|
-
await copy(resolve(path), `${containerId}:/opt/quickreload/`)
|
|
8416
|
-
.then(() => console.log('Finished uploading JAR file to QuickReload'))
|
|
8417
|
-
.catch(err => console.log('Failed to upload JAR file to QuickReload', err));
|
|
8418
|
-
}
|
|
9350
|
+
if (options.install && path.startsWith(outputDirectory) && path.toLowerCase().endsWith(deliverableExtension)) {
|
|
9351
|
+
await Installer(name, path, options);
|
|
8419
9352
|
}
|
|
8420
|
-
else if (!path.startsWith(outputDirectory)) {
|
|
9353
|
+
else if (!path.startsWith(outputDirectory) && !installOnly) {
|
|
8421
9354
|
if (isRecursiveBuild(lastBuildCompleted)) {
|
|
8422
9355
|
showRecursiveBuildWarning(outputDirectory);
|
|
8423
9356
|
}
|
|
8424
9357
|
else {
|
|
8425
9358
|
console.log('Detected file change, rebuilding Atlasian Data Center plugin');
|
|
8426
|
-
|
|
8427
|
-
|
|
8428
|
-
|
|
8429
|
-
|
|
8430
|
-
|
|
9359
|
+
if (!options.exec) {
|
|
9360
|
+
await amps.build(mavenOpts).then(() => {
|
|
9361
|
+
console.log(`Finished building Atlassian Data Center plugin for ${name}... 💪`);
|
|
9362
|
+
}).catch(() => {
|
|
9363
|
+
console.log(`Failed to build Atlassian Data Center plugin for ${name}... 😰`);
|
|
9364
|
+
});
|
|
9365
|
+
}
|
|
9366
|
+
else {
|
|
9367
|
+
const builder = new CustomBuilder({ cmd: options.exec, cwd: options.cwd || cwd() });
|
|
9368
|
+
await builder.build().then(() => {
|
|
9369
|
+
console.log(`Finished building Atlassian Data Center plugin for ${name}... 💪`);
|
|
9370
|
+
}).catch(() => {
|
|
9371
|
+
console.log(`Failed to build Atlassian Data Center plugin for ${name}... 😰`);
|
|
9372
|
+
});
|
|
9373
|
+
}
|
|
8431
9374
|
lastBuildCompleted = new Date().getTime();
|
|
8432
9375
|
}
|
|
8433
9376
|
}
|
|
8434
9377
|
});
|
|
8435
9378
|
};
|
|
8436
9379
|
|
|
9380
|
+
const toAbsolutePath = (relativePath) => {
|
|
9381
|
+
const [, filePath] = process.argv;
|
|
9382
|
+
const executableFileDir = dirname(realpathSync(filePath));
|
|
9383
|
+
const basedir = executableFileDir.substring(0, executableFileDir.indexOf('dcdx') + 4);
|
|
9384
|
+
return join(basedir, relativePath.replaceAll('../', ''));
|
|
9385
|
+
};
|
|
9386
|
+
|
|
9387
|
+
const getVersions = () => {
|
|
9388
|
+
const content = readFileSync(toAbsolutePath('../../assets/versions.json'), 'utf-8');
|
|
9389
|
+
const versions = JSON.parse(content);
|
|
9390
|
+
return versions;
|
|
9391
|
+
};
|
|
9392
|
+
|
|
9393
|
+
const repositories = [
|
|
9394
|
+
{ name: 'jira', repository: 'atlassian/jira-software' },
|
|
9395
|
+
{ name: 'confluence', repository: 'atlassian/confluence' },
|
|
9396
|
+
{ name: 'bamboo', repository: 'atlassian/bamboo-server' },
|
|
9397
|
+
{ name: 'bitbucket', repository: 'atlassian/bitbucket-server' },
|
|
9398
|
+
{ name: 'mysql', repository: 'library/mysql' },
|
|
9399
|
+
{ name: 'postgresql', repository: 'library/postgres' },
|
|
9400
|
+
];
|
|
9401
|
+
const getListOfTagsPaginated = async (url) => {
|
|
9402
|
+
const tags = [];
|
|
9403
|
+
const { data } = await axios.get(url);
|
|
9404
|
+
if (data) {
|
|
9405
|
+
tags.push(...data.results.map((item) => item.name));
|
|
9406
|
+
if (data.next) {
|
|
9407
|
+
// Add a backoff period to avoid rate limiting
|
|
9408
|
+
// await new Promise(resolve => setTimeout(resolve, 100));
|
|
9409
|
+
tags.push(...await getListOfTagsPaginated(data.next));
|
|
9410
|
+
}
|
|
9411
|
+
}
|
|
9412
|
+
return tags;
|
|
9413
|
+
};
|
|
9414
|
+
const sortByVersion = (a, b) => {
|
|
9415
|
+
a = a.split('-')[0];
|
|
9416
|
+
b = b.split('-')[0];
|
|
9417
|
+
if (isNaN(Number(a.charAt(0)))) {
|
|
9418
|
+
return -1;
|
|
9419
|
+
}
|
|
9420
|
+
if (isNaN(Number(b.charAt(0)))) {
|
|
9421
|
+
return 1;
|
|
9422
|
+
}
|
|
9423
|
+
if (a.split('.').length === 0) {
|
|
9424
|
+
a = `${a}.0.0`;
|
|
9425
|
+
}
|
|
9426
|
+
else if (a.split('.').length === 1) {
|
|
9427
|
+
a = `${a}.0`;
|
|
9428
|
+
}
|
|
9429
|
+
if (b.split('.').length === 0) {
|
|
9430
|
+
b = `${a}.0.0`;
|
|
9431
|
+
}
|
|
9432
|
+
else if (a.split('.').length === 1) {
|
|
9433
|
+
b = `${a}.0`;
|
|
9434
|
+
}
|
|
9435
|
+
const leftVersion = semver.coerce(a);
|
|
9436
|
+
const rightVersion = semver.coerce(b);
|
|
9437
|
+
if (!leftVersion)
|
|
9438
|
+
return 1;
|
|
9439
|
+
if (!rightVersion)
|
|
9440
|
+
return 0;
|
|
9441
|
+
return semver.lt(leftVersion, rightVersion) ? -1 : semver.gt(leftVersion, rightVersion) ? 1 : 0;
|
|
9442
|
+
};
|
|
9443
|
+
const generateVersionList = async (repository) => {
|
|
9444
|
+
const versions = getVersions();
|
|
9445
|
+
const result = {};
|
|
9446
|
+
for await (const item of repositories) {
|
|
9447
|
+
if (repository && item.name !== repository) {
|
|
9448
|
+
continue;
|
|
9449
|
+
}
|
|
9450
|
+
console$1.log(`Retrieving list of tags for ${item.name}...`);
|
|
9451
|
+
const tags = await getListOfTagsPaginated(`https://hub.docker.com/v2/repositories/${item.repository}/tags/?page_size=100`);
|
|
9452
|
+
result[item.name] = tags.sort(sortByVersion);
|
|
9453
|
+
}
|
|
9454
|
+
// Microsft SQL Server has it's own registry with a different API
|
|
9455
|
+
if (!repository || repository === 'mssql') {
|
|
9456
|
+
console$1.log(`Retrieving list of tags for mssql...`);
|
|
9457
|
+
const { data } = await axios.get('https://mcr.microsoft.com/v2/mssql/server/tags/list');
|
|
9458
|
+
result['mssql'] = data.tags.sort(sortByVersion);
|
|
9459
|
+
}
|
|
9460
|
+
Object.entries(result).forEach(([key, value]) => versions[key] = value);
|
|
9461
|
+
writeFileSync(toAbsolutePath('../../assets/versions.json'), JSON.stringify(versions, null, 2));
|
|
9462
|
+
return versions;
|
|
9463
|
+
};
|
|
9464
|
+
|
|
8437
9465
|
const program = new Command$1();
|
|
9466
|
+
const versions = getVersions();
|
|
8438
9467
|
const Command = () => {
|
|
8439
9468
|
let quickReload = null;
|
|
8440
9469
|
return {
|
|
@@ -8455,16 +9484,29 @@ const Command = () => {
|
|
|
8455
9484
|
throw new Error('Failed to determine version from AMPS and no product version provided (--tag)');
|
|
8456
9485
|
}
|
|
8457
9486
|
else if (!versions[name].includes(version)) {
|
|
8458
|
-
|
|
9487
|
+
console.log(`Could not find specified version ${version}, updating ${name} version list`);
|
|
9488
|
+
const updatedVersions = await generateVersionList(name);
|
|
9489
|
+
if (!updatedVersions[name].includes(version)) {
|
|
9490
|
+
throw new Error(`Product version '${version}' is invalid. Allowed choices are ${versions[name].join(', ')}.`);
|
|
9491
|
+
}
|
|
8459
9492
|
}
|
|
8460
9493
|
if (!options.watch && options.ext) {
|
|
8461
|
-
throw new InvalidOptionArgumentError('Invalid argument "--ext"');
|
|
9494
|
+
throw new InvalidOptionArgumentError('Invalid argument "--ext". This option is only available in combination with "--watch"');
|
|
8462
9495
|
}
|
|
8463
|
-
else if (!options.
|
|
8464
|
-
throw new InvalidOptionArgumentError('Invalid argument "--install"');
|
|
9496
|
+
else if (!options.install && options.obr) {
|
|
9497
|
+
throw new InvalidOptionArgumentError('Invalid argument "--obr". This option is only available in combination with "--install"');
|
|
8465
9498
|
}
|
|
8466
9499
|
else if (!options.install && options.outputDirectory) {
|
|
8467
|
-
throw new InvalidOptionArgumentError('Invalid argument "--outputDirectory"');
|
|
9500
|
+
throw new InvalidOptionArgumentError('Invalid argument "--outputDirectory". This option is only available in combination with "--install"');
|
|
9501
|
+
}
|
|
9502
|
+
else if (options.exec && options.activateProfiles) {
|
|
9503
|
+
throw new InvalidOptionArgumentError('Invalid argument "--activate-profiles". This option is not available in combination with "--exec"');
|
|
9504
|
+
}
|
|
9505
|
+
if (options.obr && !options.username) {
|
|
9506
|
+
throw new InvalidOptionArgumentError('Missing argument "--username", required for installing OBR artifacts');
|
|
9507
|
+
}
|
|
9508
|
+
else if (options.obr && !options.password) {
|
|
9509
|
+
throw new InvalidOptionArgumentError('Missing argument "--password", required for installing OBR artifacts');
|
|
8468
9510
|
}
|
|
8469
9511
|
const mavenOpts = program.args.slice();
|
|
8470
9512
|
if (options.activateProfiles) {
|
|
@@ -8474,9 +9516,22 @@ const Command = () => {
|
|
|
8474
9516
|
quickReload = FileWatcher(name, options, mavenOpts);
|
|
8475
9517
|
}
|
|
8476
9518
|
console.log(`Building Atlassian Data Center plugin for ${name}... 💃`);
|
|
8477
|
-
|
|
9519
|
+
if (!options.exec) {
|
|
9520
|
+
await amps.build(mavenOpts).then(async () => {
|
|
9521
|
+
console.log(`Finished building Atlassian Data Center plugin for ${name}... 💪`);
|
|
9522
|
+
if (!options.watch && options.install) {
|
|
9523
|
+
const outputDirectory = options.outputDirectory || 'target';
|
|
9524
|
+
const deliverableExtension = options.obr ? 'obr' : 'jar';
|
|
9525
|
+
const files = await glob(`${outputDirectory}/*.${deliverableExtension}`, { cwd: resolve(options.cwd || cwd()) });
|
|
9526
|
+
await Promise.all(files.map(path => Installer(name, path, options)));
|
|
9527
|
+
}
|
|
9528
|
+
});
|
|
9529
|
+
}
|
|
9530
|
+
else {
|
|
9531
|
+
const builder = new CustomBuilder({ cmd: options.exec, cwd: options.cwd || cwd() });
|
|
9532
|
+
await builder.build();
|
|
8478
9533
|
console.log(`Finished building Atlassian Data Center plugin for ${name}... 💪`);
|
|
8479
|
-
}
|
|
9534
|
+
}
|
|
8480
9535
|
},
|
|
8481
9536
|
errorHandler: async () => {
|
|
8482
9537
|
if (quickReload) {
|
|
@@ -8500,12 +9555,16 @@ You can add Maven build arguments after the command options.`)
|
|
|
8500
9555
|
.addOption(new Option('--ext <patterns...>', 'Glob patterns to use when watching for file changes (only available with --watch, defaults to **/*)'))
|
|
8501
9556
|
.addOption(new Option('-i, --install', 'Install the plugin into a running instance of the host application (only available with --watch)'))
|
|
8502
9557
|
.addOption(new Option('-o, --outputDirectory <directory>', 'Output directory where to look for generated JAR files (only available with --install, defaults to `target`)'))
|
|
9558
|
+
.addOption(new Option('--obr', 'Upload generated OBR file instead of JAR file when installing the app (only available with --install)').default(false))
|
|
9559
|
+
.addOption(new Option('--username <username>', 'The username of the administrator (required with --obr)'))
|
|
9560
|
+
.addOption(new Option('--password <password>', 'The password of the administrator (required with --obr)'))
|
|
8503
9561
|
.addOption(new Option('-P, --activate-profiles <arg>', 'Comma-delimited list of profiles to activate'))
|
|
8504
9562
|
.addOption(new Option('--cwd <directory>', 'Specify the working directory where to find the AMPS configuration'))
|
|
9563
|
+
.addOption(new Option('--exec <command>', 'Build command to run instead of Maven'))
|
|
8505
9564
|
.action(options => ActionHandler(program, Command(), options));
|
|
8506
9565
|
program.parseAsync(process.argv).catch(() => gracefulExit(1));
|
|
8507
9566
|
process.on('SIGINT', () => {
|
|
8508
9567
|
console.log(`Received term signal, trying to stop gracefully 💪`);
|
|
8509
9568
|
gracefulExit(1);
|
|
8510
9569
|
});
|
|
8511
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvQWN0aW9uSGFuZGxlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RhdGFiYXNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvQXBwbGljYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2FtcHMuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2lzUmVjdXJzaXZlQnVpbGQuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3Nob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2RvY2tlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvRmlsZVdhdGNoZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9jb21tYW5kcy9idWlsZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3luY0V4aXRIb29rLCBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5leHBvcnQgY29uc3QgQWN0aW9uSGFuZGxlciA9IGFzeW5jIChwcm9ncmFtLCB7IGFjdGlvbiwgZXJyb3JIYW5kbGVyIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBvcHMgPSBvcHRpb25zIHx8IHByb2dyYW0ub3B0cygpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBhc3luY0V4aXRIb29rKGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGVycm9ySGFuZGxlcihvcHMpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnI7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB3YWl0OiAzMCAqIDEwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbihvcHMpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5pc3N1ZXMuZm9yRWFjaChpc3N1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgVW5hYmxlIHRvIHBhcnNlIG9wdGlvbiAke2lzc3VlLnBhdGguam9pbignLCcpfTogJHtpc3N1ZS5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVyci50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDEpO1xuICAgICAgICB9KTtcbiAgICB9KS5jYXRjaChtZXNzYWdlID0+IHByb2dyYW0uZXJyb3IobWVzc2FnZSkpO1xufTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHZlcnNpb25zIGZyb20gJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgPSB6LmVudW0oW1xuICAgICdwb3N0Z3Jlc3FsJyxcbiAgICAnbXlzcWwnLFxuICAgICdtc3NxbCdcbl0pO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMgPSB6LmVudW0oW1xuICAgICdEZXZlbG9wZXInLFxuICAgICdFeHByZXNzJyxcbiAgICAnU3RhbmRhcmQnLFxuICAgICdFbnRlcnByaXNlJyxcbiAgICAnRW50ZXJwcmlzZUNvcmUnXG5dKTtcbmV4cG9ydCBjb25zdCBEYXRhYmFzZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKSxcbiAgICBkYXRhYmFzZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHZlcmJvc2U6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKVxufSk7XG5leHBvcnQgY29uc3QgUG9zdGdyZVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDU0MzIpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnb3JnLnBvc3RncmVzcWwuRHJpdmVyJykuZGVmYXVsdCgnb3JnLnBvc3RncmVzcWwuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE15U1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMzMwNiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubXlzcWwuamRiYy5Ecml2ZXInKS5kZWZhdWx0KCdjb20ubXlzcWwuamRiYy5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTVNTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBlZGl0aW9uOiBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zLmRlZmF1bHQoJ0RldmVsb3BlcicpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDE0MzMpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdzYScpLmRlZmF1bHQoJ3NhJyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnRGF0YUNlbnRlckRYIScpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKS5kZWZhdWx0KCdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzIH0gZnJvbSAnLi9EYXRhYmFzZSc7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkQXBwbGljYXRpb25zID0gei5lbnVtKFtcbiAgICAnamlyYScsXG4gICAgJ2NvbmZsdWVuY2UnLFxuICAgICdiaXRidWNrZXQnLFxuICAgICdiYW1ib28nXG5dKTtcbmV4cG9ydCBjb25zdCBBcHBsaWNhdGlvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBkYXRhYmFzZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLmRlZmF1bHQoJ3Bvc3RncmVzcWwnKSxcbiAgICBwb3J0OiB6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSksXG4gICAgY29udGV4dFBhdGg6IHouc3RyaW5nKCksXG4gICAgeG1zOiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgeG14OiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgd2F0Y2g6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGV4dDogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBpbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHouc3RyaW5nKCksXG4gICAgYWN0aXZhdGVQcm9maWxlczogei5zdHJpbmcoKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRlYnVnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgYWN0aXZhdGVQcm9maWxlczogdHJ1ZSxcbiAgICBjb250ZXh0UGF0aDogdHJ1ZSxcbiAgICBjd2Q6IHRydWVcbn0pO1xuIiwiaW1wb3J0IHsgRE9NUGFyc2VyLCBYTUxTZXJpYWxpemVyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IFhNTFBhcnNlciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcic7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB4cGF0aCBmcm9tICd4cGF0aCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuLi90eXBlcy9BcHBsaWNhdGlvbic7XG5leHBvcnQgY2xhc3MgQU1QUyB7XG4gICAgb3B0aW9ucztcbiAgICBtYXZlbiA9IG51bGw7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0cnVjdG9yXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHtcbiAgICAgICAgcHJvZmlsZXM6IFtdXG4gICAgfSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHVibGljIE1ldGhvZHNcbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5tYXZlbikge1xuICAgICAgICAgICAgY29uc3Qga2lsbGVkID0gdGhpcy5tYXZlbi5raWxsKDApO1xuICAgICAgICAgICAgaWYgKCFraWxsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgZXhpc3RpbmcgTWF2ZW4gcHJvY2VzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGJ1aWxkKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2lsbGVkID0gdGhpcy5tYXZlbi5raWxsKDApO1xuICAgICAgICAgICAgICAgIGlmICgha2lsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgZXhpc3RpbmcgTWF2ZW4gcHJvY2VzcycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hdmVuID0gc3Bhd24oJ212bicsIFsncGFja2FnZScsIC4uLmFyZ3NdLCB7IGN3ZDogdGhpcy5vcHRpb25zPy5jd2QgfHwgY3dkKCksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgICAgICB0aGlzLm1hdmVuLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdmVuID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMCB8fCBjb2RlID09PSAxMzApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTWF2ZW4gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNBdGxhc3NpYW5QbHVnaW4gPSAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Tm9kZXMoJy8vKltsb2NhbC1uYW1lKCk9XFwncGFja2FnaW5nXFwnXScpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzLnNvbWUoaXRlbSA9PiBpdGVtLnRleHRDb250ZW50ID09PSAnYXRsYXNzaWFuLXBsdWdpbicpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZ2V0QXBwbGljYXRpb25WZXJzaW9uKCkge1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSB0aGlzLmdldEFwcGxpY2F0aW9ucygpO1xuICAgICAgICBpZiAoYXBwbGljYXRpb25zLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIHZlcnNpb25dID0gYXBwbGljYXRpb25zLmVudHJpZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcHBsaWNhdGlvbnMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEF0bGFzc2lhbiBQbHVnaW4gcHJvamVjdCBjb250YWlucyBtdWx0aXBsZSBBTVBTIGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBkZWNpZGUgd2hpY2ggcHJvZHVjdCB0byB1c2Ug8J+YsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldEFwcGxpY2F0aW9uKCkge1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSB0aGlzLmdldEFwcGxpY2F0aW9ucygpO1xuICAgICAgICBpZiAoYXBwbGljYXRpb25zLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuYW1lXSA9IGFwcGxpY2F0aW9ucy5lbnRyaWVzKCkubmV4dCgpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXBwbGljYXRpb25zLnNpemUgPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgY29udGFpbnMgbXVsdGlwbGUgQU1QUyBjb25maWd1cmF0aW9uLCB1bmFibGUgdG8gZGVjaWRlIHdoaWNoIHByb2R1Y3QgdG8gdXNlIPCfmLAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0QXBwbGljYXRpb25zKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXROb2RlcygnLy8qW2xvY2FsLW5hbWUoKT1cXCdncm91cElkXFwnIGFuZCB0ZXh0KCk9XFwnY29tLmF0bGFzc2lhbi5tYXZlbi5wbHVnaW5zXFwnXScpO1xuICAgICAgICBjb25zdCBub2Rlc1dpdGhBY3RpdmVQcm9maWxlID0gbm9kZXMuZmlsdGVyKG5vZGUgPT4gdGhpcy5pc0FjdGl2YXRlZFByb2ZpbGUobm9kZSkpO1xuICAgICAgICBub2Rlc1dpdGhBY3RpdmVQcm9maWxlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKG5vZGUpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwbHVnaW4gfSA9IHRoaXMudG9PYmplY3QocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBsdWdpbj8uYXJ0aWZhY3RJZD8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5qaXJhKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuamlyYSwgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBsdWdpbj8uYXJ0aWZhY3RJZD8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5jb25mbHVlbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuY29uZmx1ZW5jZSwgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBsdWdpbj8uYXJ0aWZhY3RJZD8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5iYW1ib28pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5iYW1ib28sIHZlcnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwbHVnaW4/LmFydGlmYWN0SWQ/LmluY2x1ZGVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuYml0YnVja2V0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuYml0YnVja2V0LCB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJpdmF0ZSBNZXRob2RzXG4gICAgZ2V0VmVyc2lvbihub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBsdWdpbiB9ID0gdGhpcy50b09iamVjdChwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZmlndXJhdGlvbiB9ID0gcGx1Z2luIHx8IHt9O1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RWZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9Qcm9wZXJ0eVJlcGxhY2VtZW50KHBsdWdpbi5jb25maWd1cmF0aW9uLnByb2R1Y3RWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IEFycmF5LmlzQXJyYXkoY29uZmlndXJhdGlvbj8ucHJvZHVjdHMpID8gY29uZmlndXJhdGlvbj8ucHJvZHVjdHNbMF0gOiBjb25maWd1cmF0aW9uLnByb2R1Y3RzLnByb2R1Y3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QgJiYgcHJvZHVjdC52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvUHJvcGVydHlSZXBsYWNlbWVudChwcm9kdWN0LnZlcnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkb1Byb3BlcnR5UmVwbGFjZW1lbnQodmFsdWUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHByb2ZpbGUsIHJlcGxhY2UgcHJvZmlsZSBwcm9wZXJ0aWVzIGZpcnN0IGFzIHRoZXkgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGNvbnN0IHByb2ZpbGVQcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb2ZpbGVQcm9wZXJ0aWVzKS5mb3JFYWNoKChbcHJvcGVydHlLZXksIHByb3BlcnR5VmFsdWVdKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbChgJFxceyR7cHJvcGVydHlLZXl9fWAsIHByb3BlcnR5VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChbcHJvcGVydHlLZXksIHByb3BlcnR5VmFsdWVdKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbChgJFxceyR7cHJvcGVydHlLZXl9fWAsIHByb3BlcnR5VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZ2V0UHJvcGVydGllcygpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXROb2RlcygnLy8qW2xvY2FsLW5hbWUoKT1cXCdwcm9wZXJ0aWVzXFwnXScpO1xuICAgICAgICBjb25zdCBub2Rlc1dpdGhBY3RpdmVQcm9maWxlID0gbm9kZXMuZmlsdGVyKG5vZGUgPT4gdGhpcy5pc0FjdGl2YXRlZFByb2ZpbGUobm9kZSkpO1xuICAgICAgICBub2Rlc1dpdGhBY3RpdmVQcm9maWxlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BlcnRpZXMgfSA9IHRoaXMudG9PYmplY3Qobm9kZSk7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHJlc3VsdFtrZXldID0gdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZ2V0Tm9kZXMoZXhwcmVzc2lvbiwgc2luZ2xlKSB7XG4gICAgICAgIGNvbnN0IHBvbUZpbGVQYXRoID0gam9pbih0aGlzLm9wdGlvbnM/LmN3ZCB8fCBjd2QoKSwgJy4vcG9tLnhtbCcpO1xuICAgICAgICBjb25zdCBoYXNQb21GaWxlID0gZXhpc3RzU3luYyhwb21GaWxlUGF0aCk7XG4gICAgICAgIGlmIChoYXNQb21GaWxlKSB7XG4gICAgICAgICAgICBjb25zdCB4bWwgPSByZWFkRmlsZVN5bmMocG9tRmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHNpbmdsZSA/IHhwYXRoLnNlbGVjdChleHByZXNzaW9uLCBkb2MsIHRydWUpIDogeHBhdGguc2VsZWN0KGV4cHJlc3Npb24sIGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdG9PYmplY3Qobm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFhNTFBhcnNlcigpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZShuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5kUGFyZW50Tm9kZUJ5VGFnTmFtZSh0YWdOYW1lLCBub2RlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50Tm9kZSB9ID0gbm9kZTtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZFBhcmVudE5vZGVCeVRhZ05hbWUodGFnTmFtZSwgcGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQWN0aXZhdGVkUHJvZmlsZShub2RlKSB7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVQYXJlbnROb2RlID0gdGhpcy5maW5kUGFyZW50Tm9kZUJ5VGFnTmFtZSgncHJvZmlsZScsIG5vZGUpO1xuICAgICAgICBjb25zdCBwcm9maWxlTm9kZSA9IHByb2ZpbGVQYXJlbnROb2RlID8gdGhpcy50b09iamVjdChwcm9maWxlUGFyZW50Tm9kZSkgOiBudWxsO1xuICAgICAgICBpZiAoIXByb2ZpbGVOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9maWxlTm9kZSAmJiAocHJvZmlsZU5vZGUuYWN0aXZlQnlEZWZhdWx0ID09PSAndHJ1ZScgfHwgdGhpcy5vcHRpb25zLnByb2ZpbGVzLmluY2x1ZGVzKHByb2ZpbGVOb2RlLnByb2ZpbGUuaWQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgY29uc3QgaXNSZWN1cnNpdmVCdWlsZCA9IChsYXN0QnVpbGRDb21wbGV0ZWQpID0+IGxhc3RCdWlsZENvbXBsZXRlZCA+IChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIDUgKiAxMDAwKTtcbiIsImV4cG9ydCBjb25zdCBzaG93UmVjdXJzaXZlQnVpbGRXYXJuaW5nID0gKG91dHB1dERpcmVjdG9yeSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmVjdXJzaXZlIGJ1aWxkIHRyaWdnZXIgZGV0ZWN0ZWQuIFRoZSBsYXN0IGJ1aWxkIGNvbXBsZXRlZCBsYXN0IHRoYW4gNSBzZWNvbmRzIGFnb1xuVGhpcyBtYXkgaW5kaWNhdGUgdGhhdCB0aGUgYnVpbGQgY2hhbmdlcyBmaWxlcyBvdXRzaWRlIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5XG5BbHRlcm5hdGl2ZWx5LCBNYXZlbiBpcyB1c2luZyBhIGRpZmZlcmVudCBvdXRwdXQgZGlyZWN0b3J5IHRoYW4gY29uZmlndXJlZDpcbicke291dHB1dERpcmVjdG9yeX0nXG5cblBsZWFzZSBtYWtlIHN1cmUgdG8gY2hlY2sgeW91ciBidWlsZCBwcm9jZXNzIGFuZC9vciBzcGVjaWZ5IGEgZGlmZmVyZW50IG91dHB1dCBkaXJlY3RvcnkgdXNpbmcgdGhlICctbycgb3B0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1gKTtcbn07XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IERvY2tlcm9kZSBmcm9tICdkb2NrZXJvZGUnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5jb25zdCBkb2NrZXIgPSBuZXcgRG9ja2Vyb2RlKCk7XG5leHBvcnQgY29uc3QgZ2V0UnVubmluZ0NvbnRhaW5lcklkcyA9IGFzeW5jIChhcHBsaWNhdGlvbikgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBhd2FpdCBkb2NrZXIubGlzdENvbnRhaW5lcnMoeyBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBzdGF0dXM6IFsncnVubmluZyddLFxuICAgICAgICAgICAgbGFiZWw6IFtgY29tLmRvY2tlci5jb21wb3NlLnNlcnZpY2U9JHthcHBsaWNhdGlvbn1gXVxuICAgICAgICB9IH0pO1xuICAgIHJldHVybiBjb250YWluZXJzLm1hcChpdGVtID0+IGl0ZW0uSWQpO1xufTtcbmV4cG9ydCBjb25zdCBjb3B5ID0gYXN5bmMgKHNvdXJjZVBhdGgsIGRlc3RpbmF0aW9uUGF0aCkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbJ2NwJywgc291cmNlUGF0aCwgZGVzdGluYXRpb25QYXRoXSwgeyBjd2Q6IGN3ZCgpLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHdhdGNoIH0gZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHsgcmVzb2x2ZSBhcyByZXNvbHZlUGF0aCB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBpc1JlY3Vyc2l2ZUJ1aWxkIH0gZnJvbSAnLi4vaGVscGVycy9pc1JlY3Vyc2l2ZUJ1aWxkJztcbmltcG9ydCB7IHNob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcgfSBmcm9tICcuLi9oZWxwZXJzL3Nob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcnO1xuaW1wb3J0IHsgQU1QUyB9IGZyb20gJy4vYW1wcyc7XG5pbXBvcnQgKiBhcyBEb2NrZXIgZnJvbSAnLi9kb2NrZXInO1xuZXhwb3J0IGNvbnN0IEZpbGVXYXRjaGVyID0gKG5hbWUsIG9wdGlvbnMsIG1hdmVuT3B0cykgPT4ge1xuICAgIGxldCBsYXN0QnVpbGRDb21wbGV0ZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSBvcHRpb25zLm91dHB1dERpcmVjdG9yeSB8fCAndGFyZ2V0JztcbiAgICBjb25zdCBwYXR0ZXJucyA9IG9wdGlvbnMuZXh0IHx8IFsnKiovKiddO1xuICAgIGNvbnNvbGUubG9nKGBXYXRjaGluZyBmaWxlc3lzdGVtIGZvciBjaGFuZ2VzIHRvIHNvdXJjZSBmaWxlcyAoJHtwYXR0ZXJucy5qb2luKCcsICcpfSlgKTtcbiAgICBjb25zdCBhbXBzID0gbmV3IEFNUFMoe1xuICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICBwcm9maWxlczogb3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzPy5zcGxpdCgnLCcpIHx8IFtdXG4gICAgfSk7XG4gICAgcmV0dXJuIHdhdGNoKHBhdHRlcm5zLCB7XG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgY3dkKCksXG4gICAgICAgIHVzZVBvbGxpbmc6IHRydWUsXG4gICAgICAgIGludGVydmFsOiAyICogMTAwMCxcbiAgICAgICAgYmluYXJ5SW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgICAgICBhd2FpdFdyaXRlRmluaXNoOiB0cnVlLFxuICAgICAgICBwZXJzaXN0ZW50OiB0cnVlLFxuICAgICAgICBhdG9taWM6IHRydWVcbiAgICB9KS5vbignY2hhbmdlJywgYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5zdGFsbCAmJiBwYXRoLnN0YXJ0c1dpdGgob3V0cHV0RGlyZWN0b3J5KSAmJiBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5qYXInKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySWRzID0gYXdhaXQgRG9ja2VyLmdldFJ1bm5pbmdDb250YWluZXJJZHMobmFtZSk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVySWRzLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFRoZXJlIGFyZSBubyBydW5uaW5nIGluc3RhbmNlIG9mICR7bmFtZX0sIHVuYWJsZSB0byBpbnN0YWxsIHBsdWdpbiDwn6SUYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29udGFpbmVySWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgVGhlcmUgYXJlIG11bHRwbGUgcnVubmluZyBpbnN0YW5jZSBvZiAke25hbWV9LCB1bmFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoIG9uZSB0byB1c2Ug8J+klGApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcklkID0gY29udGFpbmVySWRzWzBdO1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZvdW5kIHVwZGF0ZWQgSkFSIGZpbGUsIHVwbG9hZGluZyB0aGVtIHRvIFF1aWNrUmVsb2FkIG9uIHJ1bm5pbmcgaW5zdGFuY2VzIG9mICR7bmFtZX1gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBEb2NrZXIuY29weShyZXNvbHZlUGF0aChwYXRoKSwgYCR7Y29udGFpbmVySWR9Oi9vcHQvcXVpY2tyZWxvYWQvYClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gY29uc29sZS5sb2coJ0ZpbmlzaGVkIHVwbG9hZGluZyBKQVIgZmlsZSB0byBRdWlja1JlbG9hZCcpKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIEpBUiBmaWxlIHRvIFF1aWNrUmVsb2FkJywgZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXBhdGguc3RhcnRzV2l0aChvdXRwdXREaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICBpZiAoaXNSZWN1cnNpdmVCdWlsZChsYXN0QnVpbGRDb21wbGV0ZWQpKSB7XG4gICAgICAgICAgICAgICAgc2hvd1JlY3Vyc2l2ZUJ1aWxkV2FybmluZyhvdXRwdXREaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RldGVjdGVkIGZpbGUgY2hhbmdlLCByZWJ1aWxkaW5nIEF0bGFzaWFuIERhdGEgQ2VudGVyIHBsdWdpbicpO1xuICAgICAgICAgICAgICAgIGFtcHMuYnVpbGQobWF2ZW5PcHRzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkIGJ1aWxkaW5nIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gZm9yICR7bmFtZX0uLi4g8J+SqmApO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBidWlsZCBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfmLBgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBsYXN0QnVpbGRDb21wbGV0ZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyLCBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGdyYWNlZnVsRXhpdCB9IGZyb20gJ2V4aXQtaG9vayc7XG5pbXBvcnQgdmVyc2lvbnMgZnJvbSAnLi4vLi4vYXNzZXRzL3ZlcnNpb25zLmpzb24nO1xuaW1wb3J0IHsgQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL2hlbHBlcnMvQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgeyBBTVBTIH0gZnJvbSAnLi4vaGVscGVycy9hbXBzJztcbmltcG9ydCB7IEZpbGVXYXRjaGVyIH0gZnJvbSAnLi4vaGVscGVycy9GaWxlV2F0Y2hlcic7XG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmRlcigpO1xuY29uc3QgQ29tbWFuZCA9ICgpID0+IHtcbiAgICBsZXQgcXVpY2tSZWxvYWQgPSBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFtcHMgPSBuZXcgQU1QUyh7XG4gICAgICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgICAgICBwcm9maWxlczogb3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzPy5zcGxpdCgnLCcpIHx8IFtdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghYW1wcy5pc0F0bGFzc2lhblBsdWdpbigpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBhbiBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IPCfpJQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBhbXBzLmdldEFwcGxpY2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgZG9lcyBub3QgY29udGFpbiBhbiBBTVBTIGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBkZXRlY3QgcHJvZHVjdCDwn5iwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYW1wcy5nZXRBcHBsaWNhdGlvblZlcnNpb24oKTtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGRldGVybWluZSB2ZXJzaW9uIGZyb20gQU1QUyBhbmQgbm8gcHJvZHVjdCB2ZXJzaW9uIHByb3ZpZGVkICgtLXRhZyknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCF2ZXJzaW9uc1tuYW1lXS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbbmFtZV0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMud2F0Y2ggJiYgb3B0aW9ucy5leHQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCItLWV4dFwiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy53YXRjaCAmJiBvcHRpb25zLmluc3RhbGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCItLWluc3RhbGxcIicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIW9wdGlvbnMuaW5zdGFsbCAmJiBvcHRpb25zLm91dHB1dERpcmVjdG9yeSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvcignSW52YWxpZCBhcmd1bWVudCBcIi0tb3V0cHV0RGlyZWN0b3J5XCInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hdmVuT3B0cyA9IHByb2dyYW0uYXJncy5zbGljZSgpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcykge1xuICAgICAgICAgICAgICAgIG1hdmVuT3B0cy5wdXNoKC4uLlsnLVAnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLndhdGNoKSB7XG4gICAgICAgICAgICAgICAgcXVpY2tSZWxvYWQgPSBGaWxlV2F0Y2hlcihuYW1lLCBvcHRpb25zLCBtYXZlbk9wdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYEJ1aWxkaW5nIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gZm9yICR7bmFtZX0uLi4g8J+Sg2ApO1xuICAgICAgICAgICAgYXdhaXQgYW1wcy5idWlsZChtYXZlbk9wdHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCBidWlsZGluZyBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfkqpgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChxdWlja1JlbG9hZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9wcGluZyBmaWxlc3lzdGVtIHdhdGNoZXIuLi4g4o+zYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgcXVpY2tSZWxvYWQuY2xvc2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgc3RvcHBlZCBhbGwgcnVubmluZyBwcm9jZXNzZXMg8J+SqmApO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggYnVpbGQnKVxuICAgIC5kZXNjcmlwdGlvbihgQnVpbGQgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gdXNpbmcgdGhlIEF0bGFzc2lhbiBNYXZlbiBQbHVnaW4gU3VpdGUgKEFNUFMpIGNvbmZpZ3VyYXRpb24uXG5JZiB0aGVyZSBpcyBhIHJ1bm5pbmcgaW5zdGFuY2UsIGl0IHdpbGwgdHJ5IHRvIGluc3RhbGwgdGhlIHBsdWdpbiB1c2luZyBRdWlja1JlbG9hZC5cblxuWW91IGNhbiBhZGQgTWF2ZW4gYnVpbGQgYXJndW1lbnRzIGFmdGVyIHRoZSBjb21tYW5kIG9wdGlvbnMuYClcbiAgICAudXNhZ2UoJ1tvcHRpb25zXSBbLi4ubWF2ZW5fYXJndW1lbnRzXScpXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbih0cnVlKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IodHJ1ZSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy13LCAtLXdhdGNoJywgJ1dhdGNoIGZvciBmaWxlc3lzdGVtIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHJlYnVpbGQgcGx1Z2luJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWV4dCA8cGF0dGVybnMuLi4+JywgJ0dsb2IgcGF0dGVybnMgdG8gdXNlIHdoZW4gd2F0Y2hpbmcgZm9yIGZpbGUgY2hhbmdlcyAob25seSBhdmFpbGFibGUgd2l0aCAtLXdhdGNoLCBkZWZhdWx0cyB0byAqKi8qKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLWksIC0taW5zdGFsbCcsICdJbnN0YWxsIHRoZSBwbHVnaW4gaW50byBhIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgdGhlIGhvc3QgYXBwbGljYXRpb24gKG9ubHkgYXZhaWxhYmxlIHdpdGggLS13YXRjaCknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1vLCAtLW91dHB1dERpcmVjdG9yeSA8ZGlyZWN0b3J5PicsICdPdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHRvIGxvb2sgZm9yIGdlbmVyYXRlZCBKQVIgZmlsZXMgKG9ubHkgYXZhaWxhYmxlIHdpdGggLS1pbnN0YWxsLCBkZWZhdWx0cyB0byBgdGFyZ2V0YCknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1QLCAtLWFjdGl2YXRlLXByb2ZpbGVzIDxhcmc+JywgJ0NvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHByb2ZpbGVzIHRvIGFjdGl2YXRlJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBTVBTIGNvbmZpZ3VyYXRpb24nKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpLmNhdGNoKCgpID0+IGdyYWNlZnVsRXhpdCgxKSk7XG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFJlY2VpdmVkIHRlcm0gc2lnbmFsLCB0cnlpbmcgdG8gc3RvcCBncmFjZWZ1bGx5IPCfkqpgKTtcbiAgICBncmFjZWZ1bEV4aXQoMSk7XG59KTtcbiJdLCJuYW1lcyI6WyJEb2NrZXIuZ2V0UnVubmluZ0NvbnRhaW5lcklkcyIsIkRvY2tlci5jb3B5IiwicmVzb2x2ZVBhdGgiLCJDb21tYW5kZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRU8sTUFBTSxhQUFhLEdBQUcsT0FBTyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxLQUFLO0FBQ25GLElBQUksTUFBTSxHQUFHLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMx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
|
|
9570
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvQWN0aW9uSGFuZGxlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RhdGFiYXNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvQXBwbGljYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2FtcHMuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL0N1c3RvbUJ1aWxkZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2lzUmVjdXJzaXZlQnVpbGQuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3Nob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2RvY2tlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvaXNPZlR5cGUuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvSW5zdGFsbGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9GaWxlV2F0Y2hlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvdG9BYnNvbHV0ZVBhdGguanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2dldFZlcnNpb25zLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9nZW5lcmF0ZVZlcnNpb25MaXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvY29tbWFuZHMvYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXN5bmNFeGl0SG9vaywgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkhhbmRsZXIgPSBhc3luYyAocHJvZ3JhbSwgeyBhY3Rpb24sIGVycm9ySGFuZGxlciB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgb3BzID0gb3B0aW9ucyB8fCBwcm9ncmFtLm9wdHMoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgYXN5bmNFeGl0SG9vayhhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlcnJvckhhbmRsZXIob3BzKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmVqZWN0aW5nIHRoZSBwcm9taXNlIHRvIGF2b2lkIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBcIkNhbGxpbmcgcHJvY2Vzcy5leGl0XCIgbG9nIG1lc3NhZ2UgZnJvbSBleGl0LWhvb2tcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycjtcbiAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHdhaXQ6IDYwICogMSAqIDEwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbihvcHMpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5pc3N1ZXMuZm9yRWFjaChpc3N1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgVW5hYmxlIHRvIHBhcnNlIG9wdGlvbiAke2lzc3VlLnBhdGguam9pbignLCcpfTogJHtpc3N1ZS5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVyci50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDEpO1xuICAgICAgICB9KTtcbiAgICB9KS5jYXRjaChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLFxuICAgICAgICAgICAgLy8gd2UgY2FuIGFzc3VtZSBhIGNsZWFuIGV4aXRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHZlcnNpb25zIGZyb20gJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgPSB6LmVudW0oW1xuICAgICdwb3N0Z3Jlc3FsJyxcbiAgICAnbXlzcWwnLFxuICAgICdtc3NxbCdcbl0pO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMgPSB6LmVudW0oW1xuICAgICdEZXZlbG9wZXInLFxuICAgICdFeHByZXNzJyxcbiAgICAnU3RhbmRhcmQnLFxuICAgICdFbnRlcnByaXNlJyxcbiAgICAnRW50ZXJwcmlzZUNvcmUnXG5dKTtcbmV4cG9ydCBjb25zdCBEYXRhYmFzZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKSxcbiAgICBkYXRhYmFzZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHZlcmJvc2U6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKVxufSk7XG5leHBvcnQgY29uc3QgUG9zdGdyZVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDU0MzIpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnb3JnLnBvc3RncmVzcWwuRHJpdmVyJykuZGVmYXVsdCgnb3JnLnBvc3RncmVzcWwuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE15U1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMzMwNiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubXlzcWwuamRiYy5Ecml2ZXInKS5kZWZhdWx0KCdjb20ubXlzcWwuamRiYy5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTVNTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBlZGl0aW9uOiBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zLmRlZmF1bHQoJ0RldmVsb3BlcicpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDE0MzMpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdzYScpLmRlZmF1bHQoJ3NhJyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnRGF0YUNlbnRlckRYIScpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKS5kZWZhdWx0KCdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzIH0gZnJvbSAnLi9EYXRhYmFzZSc7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkQXBwbGljYXRpb25zID0gei5lbnVtKFtcbiAgICAnamlyYScsXG4gICAgJ2NvbmZsdWVuY2UnLFxuICAgICdiaXRidWNrZXQnLFxuICAgICdiYW1ib28nXG5dKTtcbmV4cG9ydCBjb25zdCBBcHBsaWNhdGlvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBkYXRhYmFzZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLmRlZmF1bHQoJ3Bvc3RncmVzcWwnKSxcbiAgICBkYXRhYmFzZVRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkuZGVmYXVsdCgnODAnKSxcbiAgICBjb250ZXh0UGF0aDogei5zdHJpbmcoKSxcbiAgICB4bXM6IHouc3RyaW5nKCkuZGVmYXVsdCgnMTAyNG0nKSxcbiAgICB4bXg6IHouc3RyaW5nKCkuZGVmYXVsdCgnMTAyNG0nKSxcbiAgICB3YXRjaDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZXh0OiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGluc3RhbGw6IHouYm9vbGVhbigpLFxuICAgIG91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB6LnN0cmluZygpLFxuICAgIGNsZWFuOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBwcnVuZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZGVidWc6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gICAgY3dkOiB6LnN0cmluZygpXG59KS5wYXJ0aWFsKHtcbiAgICBjb250ZXh0UGF0aDogdHJ1ZSxcbiAgICBleHQ6IHRydWUsXG4gICAgaW5zdGFsbDogdHJ1ZSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHRydWUsXG4gICAgYWN0aXZhdGVQcm9maWxlczogdHJ1ZSxcbiAgICBjd2Q6IHRydWVcbn0pO1xuIiwiaW1wb3J0IHsgRE9NUGFyc2VyLCBYTUxTZXJpYWxpemVyIH0gZnJvbSAnQHhtbGRvbS94bWxkb20nO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IFhNTFBhcnNlciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcic7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB4cGF0aCBmcm9tICd4cGF0aCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuLi90eXBlcy9BcHBsaWNhdGlvbic7XG5leHBvcnQgY2xhc3MgQU1QUyB7XG4gICAgb3B0aW9ucztcbiAgICBtYXZlbiA9IG51bGw7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0cnVjdG9yXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHtcbiAgICAgICAgcHJvZmlsZXM6IFtdXG4gICAgfSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHVibGljIE1ldGhvZHNcbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5tYXZlbikge1xuICAgICAgICAgICAgY29uc3Qga2lsbGVkID0gdGhpcy5tYXZlbi5raWxsKDApO1xuICAgICAgICAgICAgaWYgKCFraWxsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgZXhpc3RpbmcgTWF2ZW4gcHJvY2VzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGJ1aWxkKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdmVuKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2lsbGVkID0gdGhpcy5tYXZlbi5raWxsKDApO1xuICAgICAgICAgICAgICAgIGlmICgha2lsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgZXhpc3RpbmcgTWF2ZW4gcHJvY2VzcycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hdmVuID0gc3Bhd24oJ212bicsIFsncGFja2FnZScsIC4uLmFyZ3NdLCB7IGN3ZDogdGhpcy5vcHRpb25zPy5jd2QgfHwgY3dkKCksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgICAgICB0aGlzLm1hdmVuLm9uKCdleGl0JywgKGNvZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdmVuID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMCB8fCBjb2RlID09PSAxMzApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgTWF2ZW4gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaXNBdGxhc3NpYW5QbHVnaW4gPSAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Tm9kZXMoJy8vKltsb2NhbC1uYW1lKCk9XFwncGFja2FnaW5nXFwnXScpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzLnNvbWUoaXRlbSA9PiBpdGVtLnRleHRDb250ZW50ID09PSAnYXRsYXNzaWFuLXBsdWdpbicpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZ2V0QXBwbGljYXRpb25WZXJzaW9uKCkge1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSB0aGlzLmdldEFwcGxpY2F0aW9ucygpO1xuICAgICAgICBpZiAoYXBwbGljYXRpb25zLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIHZlcnNpb25dID0gQXJyYXkuZnJvbShhcHBsaWNhdGlvbnMpWzBdO1xuICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXBwbGljYXRpb25zLnNpemUgPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgY29udGFpbnMgbXVsdGlwbGUgQU1QUyBjb25maWd1cmF0aW9uLCB1bmFibGUgdG8gZGVjaWRlIHdoaWNoIHByb2R1Y3QgdG8gdXNlIPCfmLAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXRBcHBsaWNhdGlvbigpIHtcbiAgICAgICAgY29uc3QgYXBwbGljYXRpb25zID0gdGhpcy5nZXRBcHBsaWNhdGlvbnMoKTtcbiAgICAgICAgaWYgKGFwcGxpY2F0aW9ucy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBbbmFtZV0gPSBBcnJheS5mcm9tKGFwcGxpY2F0aW9ucylbMF07XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcHBsaWNhdGlvbnMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEF0bGFzc2lhbiBQbHVnaW4gcHJvamVjdCBjb250YWlucyBtdWx0aXBsZSBBTVBTIGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBkZWNpZGUgd2hpY2ggcHJvZHVjdCB0byB1c2Ug8J+YsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBnZXRBcHBsaWNhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldE5vZGVzKCcvLypbbG9jYWwtbmFtZSgpPVxcJ2dyb3VwSWRcXCcgYW5kIHRleHQoKT1cXCdjb20uYXRsYXNzaWFuLm1hdmVuLnBsdWdpbnNcXCddJyk7XG4gICAgICAgIGNvbnN0IG5vZGVzV2l0aEFjdGl2ZVByb2ZpbGUgPSBub2Rlcy5maWx0ZXIobm9kZSA9PiB0aGlzLmlzQWN0aXZhdGVkUHJvZmlsZShub2RlKSk7XG4gICAgICAgIG5vZGVzV2l0aEFjdGl2ZVByb2ZpbGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGx1Z2luIH0gPSB0aGlzLnRvT2JqZWN0KHBhcmVudE5vZGUpO1xuICAgICAgICAgICAgICAgIGlmICgnYW1wcy1tYXZlbi1wbHVnaW4nID09PSBwbHVnaW4/LmFydGlmYWN0SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBjb25maWd1cmF0aW9uIH0gPSBwbHVnaW4gfHwge307XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uPy5wcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlndXJhdGlvbj8ucHJvZHVjdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5wcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRlZEFwcGxpY2F0aW9uID0gdGhpcy5nZXRTdXBwb3J0ZWRBcHBsaWNhdGlvbihwcm9kdWN0LmlkKSB8fCB0aGlzLmdldFN1cHBvcnRlZEFwcGxpY2F0aW9uKHByb2R1Y3QuaW5zdGFuY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRBcHBsaWNhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZG9Qcm9wZXJ0eVJlcGxhY2VtZW50KHByb2R1Y3QudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoc3VwcG9ydGVkQXBwbGljYXRpb24sIHZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb2R1Y3QgfSA9IGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRlZEFwcGxpY2F0aW9uID0gdGhpcy5nZXRTdXBwb3J0ZWRBcHBsaWNhdGlvbihwcm9kdWN0LmlkKSB8fCB0aGlzLmdldFN1cHBvcnRlZEFwcGxpY2F0aW9uKHByb2R1Y3QuaW5zdGFuY2VJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRBcHBsaWNhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZG9Qcm9wZXJ0eVJlcGxhY2VtZW50KHByb2R1Y3QudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoc3VwcG9ydGVkQXBwbGljYXRpb24sIHZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdXBwb3J0ZWRBcHBsaWNhdGlvbiA9IHRoaXMuZ2V0U3VwcG9ydGVkQXBwbGljYXRpb24ocGx1Z2luPy5hcnRpZmFjdElkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZ2V0VmVyc2lvbihub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZEFwcGxpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KHN1cHBvcnRlZEFwcGxpY2F0aW9uLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcml2YXRlIE1ldGhvZHNcbiAgICBnZXRTdXBwb3J0ZWRBcHBsaWNhdGlvbih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWU/LmluY2x1ZGVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuamlyYSkpIHtcbiAgICAgICAgICAgIHJldHVybiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmppcmE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWU/LmluY2x1ZGVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuY29uZmx1ZW5jZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmNvbmZsdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWU/LmluY2x1ZGVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuYmFtYm9vKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuYmFtYm9vO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlPy5pbmNsdWRlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmJpdGJ1Y2tldCkpIHtcbiAgICAgICAgICAgIHJldHVybiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmJpdGJ1Y2tldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0VmVyc2lvbihub2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB7IHBsdWdpbiB9ID0gdGhpcy50b09iamVjdChwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZmlndXJhdGlvbiB9ID0gcGx1Z2luIHx8IHt9O1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RWZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9Qcm9wZXJ0eVJlcGxhY2VtZW50KHBsdWdpbi5jb25maWd1cmF0aW9uLnByb2R1Y3RWZXJzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IEFycmF5LmlzQXJyYXkoY29uZmlndXJhdGlvbj8ucHJvZHVjdHMpID8gY29uZmlndXJhdGlvbj8ucHJvZHVjdHNbMF0gOiBjb25maWd1cmF0aW9uLnByb2R1Y3RzLnByb2R1Y3Q7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QgJiYgcHJvZHVjdC52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvUHJvcGVydHlSZXBsYWNlbWVudChwcm9kdWN0LnZlcnNpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkb1Byb3BlcnR5UmVwbGFjZW1lbnQodmFsdWUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHByb2ZpbGUsIHJlcGxhY2UgcHJvZmlsZSBwcm9wZXJ0aWVzIGZpcnN0IGFzIHRoZXkgdGFrZSBwcmVjZWRlbmNlXG4gICAgICAgIGNvbnN0IHByb2ZpbGVQcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb2ZpbGVQcm9wZXJ0aWVzKS5mb3JFYWNoKChbcHJvcGVydHlLZXksIHByb3BlcnR5VmFsdWVdKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbChgJFxceyR7cHJvcGVydHlLZXl9fWAsIHByb3BlcnR5VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChbcHJvcGVydHlLZXksIHByb3BlcnR5VmFsdWVdKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZUFsbChgJFxceyR7cHJvcGVydHlLZXl9fWAsIHByb3BlcnR5VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZ2V0UHJvcGVydGllcygpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXROb2RlcygnLy8qW2xvY2FsLW5hbWUoKT1cXCdwcm9wZXJ0aWVzXFwnXScpO1xuICAgICAgICBjb25zdCBub2Rlc1dpdGhBY3RpdmVQcm9maWxlID0gbm9kZXMuZmlsdGVyKG5vZGUgPT4gdGhpcy5pc0FjdGl2YXRlZFByb2ZpbGUobm9kZSkpO1xuICAgICAgICBub2Rlc1dpdGhBY3RpdmVQcm9maWxlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BlcnRpZXMgfSA9IHRoaXMudG9PYmplY3Qobm9kZSk7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHJlc3VsdFtrZXldID0gdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZ2V0Tm9kZXMoZXhwcmVzc2lvbiwgc2luZ2xlKSB7XG4gICAgICAgIGNvbnN0IHBvbUZpbGVQYXRoID0gam9pbih0aGlzLm9wdGlvbnM/LmN3ZCB8fCBjd2QoKSwgJy4vcG9tLnhtbCcpO1xuICAgICAgICBjb25zdCBoYXNQb21GaWxlID0gZXhpc3RzU3luYyhwb21GaWxlUGF0aCk7XG4gICAgICAgIGlmIChoYXNQb21GaWxlKSB7XG4gICAgICAgICAgICBjb25zdCB4bWwgPSByZWFkRmlsZVN5bmMocG9tRmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHhtbCwgJ3RleHQveG1sJyk7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHNpbmdsZSA/IHhwYXRoLnNlbGVjdChleHByZXNzaW9uLCBkb2MsIHRydWUpIDogeHBhdGguc2VsZWN0KGV4cHJlc3Npb24sIGRvYywgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2luZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdG9PYmplY3Qobm9kZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFhNTFBhcnNlcigpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZShuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5kUGFyZW50Tm9kZUJ5VGFnTmFtZSh0YWdOYW1lLCBub2RlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyZW50Tm9kZSB9ID0gbm9kZTtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZFBhcmVudE5vZGVCeVRhZ05hbWUodGFnTmFtZSwgcGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQWN0aXZhdGVkUHJvZmlsZShub2RlKSB7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVQYXJlbnROb2RlID0gdGhpcy5maW5kUGFyZW50Tm9kZUJ5VGFnTmFtZSgncHJvZmlsZScsIG5vZGUpO1xuICAgICAgICBjb25zdCBwcm9maWxlTm9kZSA9IHByb2ZpbGVQYXJlbnROb2RlID8gdGhpcy50b09iamVjdChwcm9maWxlUGFyZW50Tm9kZSkgOiBudWxsO1xuICAgICAgICBpZiAoIXByb2ZpbGVOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcm9maWxlTm9kZSAmJiAocHJvZmlsZU5vZGUuYWN0aXZlQnlEZWZhdWx0ID09PSAndHJ1ZScgfHwgdGhpcy5vcHRpb25zLnByb2ZpbGVzLmluY2x1ZGVzKHByb2ZpbGVOb2RlLnByb2ZpbGUuaWQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5leHBvcnQgY2xhc3MgQ3VzdG9tQnVpbGRlciB7XG4gICAgb3B0aW9ucztcbiAgICBwcm9jID0gbnVsbDtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQdWJsaWMgTWV0aG9kc1xuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgICAgICAgIGNvbnN0IGtpbGxlZCA9IHRoaXMucHJvYy5raWxsKDApO1xuICAgICAgICAgICAgaWYgKCFraWxsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgZXhpc3RpbmcgYnVpbGQgcHJvY2VzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtpbGxlZCA9IHRoaXMucHJvYy5raWxsKDApO1xuICAgICAgICAgICAgICAgIGlmICgha2lsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byB0ZXJtaW5hdGUgZXhpc3RpbmcgYnVpbGQgcHJvY2VzcycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV4ZWNTeW5jKHRoaXMub3B0aW9ucy5jbWQsIHsgY3dkOiB0aGlzLm9wdGlvbnM/LmN3ZCB8fCBjd2QoKSwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGF0dXMgfSA9IGVycjtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBCdWlsZCBleGl0ZWQgd2l0aCBjb2RlICR7c3RhdHVzfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGlzUmVjdXJzaXZlQnVpbGQgPSAobGFzdEJ1aWxkQ29tcGxldGVkKSA9PiBsYXN0QnVpbGRDb21wbGV0ZWQgPiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSA1ICogMTAwMCk7XG4iLCJleHBvcnQgY29uc3Qgc2hvd1JlY3Vyc2l2ZUJ1aWxkV2FybmluZyA9IChvdXRwdXREaXJlY3RvcnkpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJlY3Vyc2l2ZSBidWlsZCB0cmlnZ2VyIGRldGVjdGVkLiBUaGUgbGFzdCBidWlsZCBjb21wbGV0ZWQgbGFzdCB0aGFuIDUgc2Vjb25kcyBhZ29cblRoaXMgbWF5IGluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIGNoYW5nZXMgZmlsZXMgb3V0c2lkZSBvZiB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuQWx0ZXJuYXRpdmVseSwgTWF2ZW4gaXMgdXNpbmcgYSBkaWZmZXJlbnQgb3V0cHV0IGRpcmVjdG9yeSB0aGFuIGNvbmZpZ3VyZWQ6XG4nJHtvdXRwdXREaXJlY3Rvcnl9J1xuXG5QbGVhc2UgbWFrZSBzdXJlIHRvIGNoZWNrIHlvdXIgYnVpbGQgcHJvY2VzcyBhbmQvb3Igc3BlY2lmeSBhIGRpZmZlcmVudCBvdXRwdXQgZGlyZWN0b3J5IHVzaW5nIHRoZSAnLW8nIG9wdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09YCk7XG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBEb2NrZXJvZGUgZnJvbSAnZG9ja2Vyb2RlJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuY29uc3QgZG9ja2VyID0gbmV3IERvY2tlcm9kZSgpO1xuZXhwb3J0IGNvbnN0IGdldFJ1bm5pbmdDb250YWluZXJJZHMgPSBhc3luYyAoYXBwbGljYXRpb24pID0+IHtcbiAgICBjb25zdCBjb250YWluZXJzID0gYXdhaXQgZG9ja2VyLmxpc3RDb250YWluZXJzKHsgZmlsdGVyczoge1xuICAgICAgICAgICAgc3RhdHVzOiBbJ3J1bm5pbmcnXSxcbiAgICAgICAgICAgIGxhYmVsOiBbYGNvbS5kb2NrZXIuY29tcG9zZS5zZXJ2aWNlPSR7YXBwbGljYXRpb259YF1cbiAgICAgICAgfSB9KTtcbiAgICByZXR1cm4gY29udGFpbmVycy5tYXAoaXRlbSA9PiBpdGVtLklkKTtcbn07XG5leHBvcnQgY29uc3QgY29weSA9IGFzeW5jIChzb3VyY2VQYXRoLCBkZXN0aW5hdGlvblBhdGgpID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgWydjcCcsIHNvdXJjZVBhdGgsIGRlc3RpbmF0aW9uUGF0aF0sIHsgY3dkOiBjd2QoKSwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbn07XG4iLCJleHBvcnQgY29uc3QgaXNPZlR5cGUgPSAob2JqLCBwcm9wZXJ0eSkgPT4ge1xuICAgIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgcHJvcGVydHkgaW4gb2JqO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgdXBsb2FkVG9VUE0gPSBhc3luYyAoYmFzZVVybCwgcGF0aCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvP29zX2F1dGhUeXBlPWJhc2ljYCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH1cbiAgICB9IDogdW5kZWZpbmVkKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4nLCBlcnIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXNwb25zZS5oZWFkZXJzWyd1cG0tdG9rZW4nXTtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBjcmVhdGVSZWFkU3RyZWFtKHBhdGgpKTtcbiAgICAgICAgICAgIGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/dG9rZW49JHt0b2tlbn1gLCBmb3JtRGF0YSwgeyBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgICAgICAgICB9IH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIHBsdWdpbiBhcmNoaXZlIHRvIFVQTScpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTScsIGVycikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTSwgdW5hYmxlIHRvIHJldHJpZXZlIHRva2VuIGZyb20gaGVhZGVyczonLCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5oZWFkZXJzLCBudWxsLCAyKSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZCA9IGFzeW5jIChhcHBLZXksIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQnKTtcbiAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAoIWlzRW5hYmxlZCAmJiBjb3VudCA8IDEyMCkge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQuLi4gJHtjb3VudH1zYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleWAsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgICAgICB9IDogdW5kZWZpbmVkKS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7IGVuYWJsZWQ6IGZhbHNlIH0gfSkpO1xuICAgICAgICBpc0VuYWJsZWQgPSBkYXRhPy5lbmFibGVkO1xuICAgICAgICBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmFibGVkO1xufTtcbmV4cG9ydCBjb25zdCByZWdpc3RlckxpY2Vuc2UgPSBhc3luYyAoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7fSB9KSk7XG4gICAgY29uc3QgeyByYXdMaWNlbnNlIH0gPSBkYXRhO1xuICAgIGlmICghcmF3TGljZW5zZSB8fCByYXdMaWNlbnNlICE9PSBsaWNlbnNlKSB7XG4gICAgICAgIGF3YWl0IGF4aW9zLnB1dChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIGB7IFwicmF3TGljZW5zZVwiOiBcIiR7bGljZW5zZX1cIiB9YCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi92bmQuYXRsLnBsdWdpbnMranNvbicsXG4gICAgICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZpbmlzaGVkIHVwbG9hZGluZyBsaWNlbnNlIHRvIFVQTScpKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIGxpY2Vuc2UgdG8gVVBNJywgZXJyKSk7XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHJlc29sdmUgYXMgcmVzb2x2ZVBhdGggfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgRG9ja2VyIGZyb20gJy4vZG9ja2VyJztcbmltcG9ydCB7IGlzT2ZUeXBlIH0gZnJvbSAnLi9pc09mVHlwZSc7XG5pbXBvcnQgeyB1cGxvYWRUb1VQTSB9IGZyb20gJy4vdXBtJztcbmV4cG9ydCBjb25zdCBJbnN0YWxsZXIgPSBhc3luYyAobmFtZSwgcGF0aCwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lcklkcyA9IGF3YWl0IERvY2tlci5nZXRSdW5uaW5nQ29udGFpbmVySWRzKG5hbWUpO1xuICAgIGlmICghY29udGFpbmVySWRzIHx8IGNvbnRhaW5lcklkcy5sZW5ndGggPD0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGhlcmUgYXJlIG5vIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgJHtuYW1lfSwgdW5hYmxlIHRvIGluc3RhbGwgcGx1Z2luIPCfpJRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250YWluZXJJZHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgVGhlcmUgYXJlIG11bHRwbGUgcnVubmluZyBpbnN0YW5jZSBvZiAke25hbWV9LCB1bmFibGUgdG8gZGV0ZXJtaW5lIHdoaWNoIG9uZSB0byB1c2Ug8J+klGApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lcklkID0gY29udGFpbmVySWRzWzBdO1xuICAgIGlmIChjb250YWluZXJJZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5vYnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCB1cGRhdGVkIHBsdWdpbiwgdXBsb2FkaW5nIGl0IHRvIFVQTSBvbiBydW5uaW5nIGluc3RhbmNlcyBvZiAke25hbWV9YCk7XG4gICAgICAgICAgICBjb25zdCBob3N0VXJsID0gaXNPZlR5cGUob3B0aW9ucywgJ3BvcnQnKSA/IGBsb2NhbGhvc3Q6JHtvcHRpb25zLnBvcnR9YCA6IGBsb2NhbGhvc3RgO1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMudXNlcm5hbWUgJiYgb3B0aW9ucy5wYXNzd29yZCA/IGBodHRwOi8vJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9QCR7aG9zdFVybH1gIDogYGh0dHA6Ly8ke2hvc3RVcmx9YDtcbiAgICAgICAgICAgIHVwbG9hZFRvVVBNKHJlc29sdmVQYXRoKG9wdGlvbnMuY3dkIHx8IGN3ZCgpLCBwYXRoKSwgYmFzZVVybCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdXBkYXRlZCBwbHVnaW4sIHVwbG9hZGluZyBpdCB0byBRdWlja1JlbG9hZCBvbiBydW5uaW5nIGluc3RhbmNlcyBvZiAke25hbWV9YCk7XG4gICAgICAgICAgICBhd2FpdCBEb2NrZXIuY29weShyZXNvbHZlUGF0aChvcHRpb25zLmN3ZCB8fCBjd2QoKSwgcGF0aCksIGAke2NvbnRhaW5lcklkfTovb3B0L3F1aWNrcmVsb2FkL2ApXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gY29uc29sZS5sb2coJ0ZpbmlzaGVkIHVwbG9hZGluZyBwbHVnaW4gYXJjaGl2ZSB0byBRdWlja1JlbG9hZCcpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBRdWlja1JlbG9hZCcsIGVycikpO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHdhdGNoIH0gZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBpc1JlY3Vyc2l2ZUJ1aWxkIH0gZnJvbSAnLi4vaGVscGVycy9pc1JlY3Vyc2l2ZUJ1aWxkJztcbmltcG9ydCB7IHNob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcgfSBmcm9tICcuLi9oZWxwZXJzL3Nob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcnO1xuaW1wb3J0IHsgQU1QUyB9IGZyb20gJy4vYW1wcyc7XG5pbXBvcnQgeyBDdXN0b21CdWlsZGVyIH0gZnJvbSAnLi9DdXN0b21CdWlsZGVyJztcbmltcG9ydCB7IEluc3RhbGxlciB9IGZyb20gJy4vSW5zdGFsbGVyJztcbmV4cG9ydCBjb25zdCBGaWxlV2F0Y2hlciA9IChuYW1lLCBvcHRpb25zLCBtYXZlbk9wdHMsIGluc3RhbGxPbmx5ID0gZmFsc2UpID0+IHtcbiAgICBsZXQgbGFzdEJ1aWxkQ29tcGxldGVkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3Qgb3V0cHV0RGlyZWN0b3J5ID0gb3B0aW9ucy5vdXRwdXREaXJlY3RvcnkgfHwgJ3RhcmdldCc7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLmV4dCB8fCBbJyoqLyonXTtcbiAgICBjb25zb2xlLmxvZyhgV2F0Y2hpbmcgZmlsZXN5c3RlbSBmb3IgY2hhbmdlcyB0byBzb3VyY2UgZmlsZXMgKCR7cGF0dGVybnMuam9pbignLCAnKX0pYCk7XG4gICAgY29uc3QgYW1wcyA9IG5ldyBBTVBTKHtcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcz8uc3BsaXQoJywnKSB8fCBbXVxuICAgIH0pO1xuICAgIGNvbnN0IGRlbGl2ZXJhYmxlRXh0ZW5zaW9uID0gb3B0aW9ucy5vYnIgPyAnLm9icicgOiAnLmphcic7XG4gICAgcmV0dXJuIHdhdGNoKHBhdHRlcm5zLCB7XG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgY3dkKCksXG4gICAgICAgIHVzZVBvbGxpbmc6IHRydWUsXG4gICAgICAgIGludGVydmFsOiAyICogMTAwMCxcbiAgICAgICAgYmluYXJ5SW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgICAgICBhd2FpdFdyaXRlRmluaXNoOiB0cnVlLFxuICAgICAgICBwZXJzaXN0ZW50OiB0cnVlLFxuICAgICAgICBhdG9taWM6IHRydWVcbiAgICB9KS5vbignY2hhbmdlJywgYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5zdGFsbCAmJiBwYXRoLnN0YXJ0c1dpdGgob3V0cHV0RGlyZWN0b3J5KSAmJiBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZGVsaXZlcmFibGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICBhd2FpdCBJbnN0YWxsZXIobmFtZSwgcGF0aCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXBhdGguc3RhcnRzV2l0aChvdXRwdXREaXJlY3RvcnkpICYmICFpbnN0YWxsT25seSkge1xuICAgICAgICAgICAgaWYgKGlzUmVjdXJzaXZlQnVpbGQobGFzdEJ1aWxkQ29tcGxldGVkKSkge1xuICAgICAgICAgICAgICAgIHNob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcob3V0cHV0RGlyZWN0b3J5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZXRlY3RlZCBmaWxlIGNoYW5nZSwgcmVidWlsZGluZyBBdGxhc2lhbiBEYXRhIENlbnRlciBwbHVnaW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhlYykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhbXBzLmJ1aWxkKG1hdmVuT3B0cykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmluaXNoZWQgYnVpbGRpbmcgQXRsYXNzaWFuIERhdGEgQ2VudGVyIHBsdWdpbiBmb3IgJHtuYW1lfS4uLiDwn5KqYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gYnVpbGQgQXRsYXNzaWFuIERhdGEgQ2VudGVyIHBsdWdpbiBmb3IgJHtuYW1lfS4uLiDwn5iwYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBDdXN0b21CdWlsZGVyKHsgY21kOiBvcHRpb25zLmV4ZWMsIGN3ZDogb3B0aW9ucy5jd2QgfHwgY3dkKCkgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCBidWlsZGluZyBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfkqpgKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBidWlsZCBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfmLBgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3RCdWlsZENvbXBsZXRlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IHRvQWJzb2x1dGVQYXRoID0gKHJlbGF0aXZlUGF0aCkgPT4ge1xuICAgIGNvbnN0IFssIGZpbGVQYXRoXSA9IHByb2Nlc3MuYXJndjtcbiAgICBjb25zdCBleGVjdXRhYmxlRmlsZURpciA9IGRpcm5hbWUocmVhbHBhdGhTeW5jKGZpbGVQYXRoKSk7XG4gICAgY29uc3QgYmFzZWRpciA9IGV4ZWN1dGFibGVGaWxlRGlyLnN1YnN0cmluZygwLCBleGVjdXRhYmxlRmlsZURpci5pbmRleE9mKCdkY2R4JykgKyA0KTtcbiAgICByZXR1cm4gam9pbihiYXNlZGlyLCByZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnLi4vJywgJycpKTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyB0b0Fic29sdXRlUGF0aCB9IGZyb20gJy4vdG9BYnNvbHV0ZVBhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFZlcnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmModG9BYnNvbHV0ZVBhdGgoJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJyksICd1dGYtOCcpO1xuICAgIGNvbnN0IHZlcnNpb25zID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICByZXR1cm4gdmVyc2lvbnM7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBjb25zb2xlIGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGdldFZlcnNpb25zIH0gZnJvbSAnLi9nZXRWZXJzaW9ucyc7XG5pbXBvcnQgeyB0b0Fic29sdXRlUGF0aCB9IGZyb20gJy4vdG9BYnNvbHV0ZVBhdGgnO1xuY29uc3QgcmVwb3NpdG9yaWVzID0gW1xuICAgIHsgbmFtZTogJ2ppcmEnLCByZXBvc2l0b3J5OiAnYXRsYXNzaWFuL2ppcmEtc29mdHdhcmUnIH0sXG4gICAgeyBuYW1lOiAnY29uZmx1ZW5jZScsIHJlcG9zaXRvcnk6ICdhdGxhc3NpYW4vY29uZmx1ZW5jZScgfSxcbiAgICB7IG5hbWU6ICdiYW1ib28nLCByZXBvc2l0b3J5OiAnYXRsYXNzaWFuL2JhbWJvby1zZXJ2ZXInIH0sXG4gICAgeyBuYW1lOiAnYml0YnVja2V0JywgcmVwb3NpdG9yeTogJ2F0bGFzc2lhbi9iaXRidWNrZXQtc2VydmVyJyB9LFxuICAgIHsgbmFtZTogJ215c3FsJywgcmVwb3NpdG9yeTogJ2xpYnJhcnkvbXlzcWwnIH0sXG4gICAgeyBuYW1lOiAncG9zdGdyZXNxbCcsIHJlcG9zaXRvcnk6ICdsaWJyYXJ5L3Bvc3RncmVzJyB9LFxuXTtcbmNvbnN0IGdldExpc3RPZlRhZ3NQYWdpbmF0ZWQgPSBhc3luYyAodXJsKSA9PiB7XG4gICAgY29uc3QgdGFncyA9IFtdO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGFncy5wdXNoKC4uLmRhdGEucmVzdWx0cy5tYXAoKGl0ZW0pID0+IGl0ZW0ubmFtZSkpO1xuICAgICAgICBpZiAoZGF0YS5uZXh0KSB7XG4gICAgICAgICAgICAvLyBBZGQgYSBiYWNrb2ZmIHBlcmlvZCB0byBhdm9pZCByYXRlIGxpbWl0aW5nXG4gICAgICAgICAgICAvLyBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICAgICAgICB0YWdzLnB1c2goLi4uYXdhaXQgZ2V0TGlzdE9mVGFnc1BhZ2luYXRlZChkYXRhLm5leHQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFncztcbn07XG5jb25zdCBzb3J0QnlWZXJzaW9uID0gKGEsIGIpID0+IHtcbiAgICBhID0gYS5zcGxpdCgnLScpWzBdO1xuICAgIGIgPSBiLnNwbGl0KCctJylbMF07XG4gICAgaWYgKGlzTmFOKE51bWJlcihhLmNoYXJBdCgwKSkpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKE51bWJlcihiLmNoYXJBdCgwKSkpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoYS5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhID0gYCR7YX0uMC4wYDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYS5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBhID0gYCR7YX0uMGA7XG4gICAgfVxuICAgIGlmIChiLnNwbGl0KCcuJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGIgPSBgJHthfS4wLjBgO1xuICAgIH1cbiAgICBlbHNlIGlmIChhLnNwbGl0KCcuJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGIgPSBgJHthfS4wYDtcbiAgICB9XG4gICAgY29uc3QgbGVmdFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGEpO1xuICAgIGNvbnN0IHJpZ2h0VmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoYik7XG4gICAgaWYgKCFsZWZ0VmVyc2lvbilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKCFyaWdodFZlcnNpb24pXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBzZW12ZXIubHQobGVmdFZlcnNpb24sIHJpZ2h0VmVyc2lvbikgPyAtMSA6IHNlbXZlci5ndChsZWZ0VmVyc2lvbiwgcmlnaHRWZXJzaW9uKSA/IDEgOiAwO1xufTtcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVZlcnNpb25MaXN0ID0gYXN5bmMgKHJlcG9zaXRvcnkpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IGdldFZlcnNpb25zKCk7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHJlcG9zaXRvcmllcykge1xuICAgICAgICBpZiAocmVwb3NpdG9yeSAmJiBpdGVtLm5hbWUgIT09IHJlcG9zaXRvcnkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZXRyaWV2aW5nIGxpc3Qgb2YgdGFncyBmb3IgJHtpdGVtLm5hbWV9Li4uYCk7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBhd2FpdCBnZXRMaXN0T2ZUYWdzUGFnaW5hdGVkKGBodHRwczovL2h1Yi5kb2NrZXIuY29tL3YyL3JlcG9zaXRvcmllcy8ke2l0ZW0ucmVwb3NpdG9yeX0vdGFncy8/cGFnZV9zaXplPTEwMGApO1xuICAgICAgICByZXN1bHRbaXRlbS5uYW1lXSA9IHRhZ3Muc29ydChzb3J0QnlWZXJzaW9uKTtcbiAgICB9XG4gICAgLy8gTWljcm9zZnQgU1FMIFNlcnZlciBoYXMgaXQncyBvd24gcmVnaXN0cnkgd2l0aCBhIGRpZmZlcmVudCBBUElcbiAgICBpZiAoIXJlcG9zaXRvcnkgfHwgcmVwb3NpdG9yeSA9PT0gJ21zc3FsJykge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmV0cmlldmluZyBsaXN0IG9mIHRhZ3MgZm9yIG1zc3FsLi4uYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KCdodHRwczovL21jci5taWNyb3NvZnQuY29tL3YyL21zc3FsL3NlcnZlci90YWdzL2xpc3QnKTtcbiAgICAgICAgcmVzdWx0Wydtc3NxbCddID0gZGF0YS50YWdzLnNvcnQoc29ydEJ5VmVyc2lvbik7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB2ZXJzaW9uc1trZXldID0gdmFsdWUpO1xuICAgIHdyaXRlRmlsZVN5bmModG9BYnNvbHV0ZVBhdGgoJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJyksIEpTT04uc3RyaW5naWZ5KHZlcnNpb25zLCBudWxsLCAyKSk7XG4gICAgcmV0dXJuIHZlcnNpb25zO1xufTtcbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyLCBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGdyYWNlZnVsRXhpdCB9IGZyb20gJ2V4aXQtaG9vayc7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSAnZ2xvYic7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IEFjdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9oZWxwZXJzL0FjdGlvbkhhbmRsZXInO1xuaW1wb3J0IHsgQU1QUyB9IGZyb20gJy4uL2hlbHBlcnMvYW1wcyc7XG5pbXBvcnQgeyBDdXN0b21CdWlsZGVyIH0gZnJvbSAnLi4vaGVscGVycy9DdXN0b21CdWlsZGVyJztcbmltcG9ydCB7IEZpbGVXYXRjaGVyIH0gZnJvbSAnLi4vaGVscGVycy9GaWxlV2F0Y2hlcic7XG5pbXBvcnQgeyBnZW5lcmF0ZVZlcnNpb25MaXN0IH0gZnJvbSAnLi4vaGVscGVycy9nZW5lcmF0ZVZlcnNpb25MaXN0JztcbmltcG9ydCB7IGdldFZlcnNpb25zIH0gZnJvbSAnLi4vaGVscGVycy9nZXRWZXJzaW9ucyc7XG5pbXBvcnQgeyBJbnN0YWxsZXIgfSBmcm9tICcuLi9oZWxwZXJzL0luc3RhbGxlcic7XG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmRlcigpO1xuY29uc3QgdmVyc2lvbnMgPSBnZXRWZXJzaW9ucygpO1xuY29uc3QgQ29tbWFuZCA9ICgpID0+IHtcbiAgICBsZXQgcXVpY2tSZWxvYWQgPSBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFtcHMgPSBuZXcgQU1QUyh7XG4gICAgICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgICAgICBwcm9maWxlczogb3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzPy5zcGxpdCgnLCcpIHx8IFtdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghYW1wcy5pc0F0bGFzc2lhblBsdWdpbigpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBhbiBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IPCfpJQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBhbXBzLmdldEFwcGxpY2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgZG9lcyBub3QgY29udGFpbiBhbiBBTVBTIGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBkZXRlY3QgcHJvZHVjdCDwn5iwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYW1wcy5nZXRBcHBsaWNhdGlvblZlcnNpb24oKTtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGRldGVybWluZSB2ZXJzaW9uIGZyb20gQU1QUyBhbmQgbm8gcHJvZHVjdCB2ZXJzaW9uIHByb3ZpZGVkICgtLXRhZyknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCF2ZXJzaW9uc1tuYW1lXS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke25hbWV9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3QobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkVmVyc2lvbnNbbmFtZV0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tuYW1lXS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMud2F0Y2ggJiYgb3B0aW9ucy5leHQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCItLWV4dFwiLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpbiBjb21iaW5hdGlvbiB3aXRoIFwiLS13YXRjaFwiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5pbnN0YWxsICYmIG9wdGlvbnMub2JyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IFwiLS1vYnJcIi4gVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgaW4gY29tYmluYXRpb24gd2l0aCBcIi0taW5zdGFsbFwiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5pbnN0YWxsICYmIG9wdGlvbnMub3V0cHV0RGlyZWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IFwiLS1vdXRwdXREaXJlY3RvcnlcIi4gVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgaW4gY29tYmluYXRpb24gd2l0aCBcIi0taW5zdGFsbFwiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLmV4ZWMgJiYgb3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IFwiLS1hY3RpdmF0ZS1wcm9maWxlc1wiLiBUaGlzIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlIGluIGNvbWJpbmF0aW9uIHdpdGggXCItLWV4ZWNcIicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMub2JyICYmICFvcHRpb25zLnVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFwiLS11c2VybmFtZVwiLCByZXF1aXJlZCBmb3IgaW5zdGFsbGluZyBPQlIgYXJ0aWZhY3RzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLm9iciAmJiAhb3B0aW9ucy5wYXNzd29yZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvcignTWlzc2luZyBhcmd1bWVudCBcIi0tcGFzc3dvcmRcIiwgcmVxdWlyZWQgZm9yIGluc3RhbGxpbmcgT0JSIGFydGlmYWN0cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF2ZW5PcHRzID0gcHJvZ3JhbS5hcmdzLnNsaWNlKCk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzKSB7XG4gICAgICAgICAgICAgICAgbWF2ZW5PcHRzLnB1c2goLi4uWyctUCcsIG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlc10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgICAgICAgICBxdWlja1JlbG9hZCA9IEZpbGVXYXRjaGVyKG5hbWUsIG9wdGlvbnMsIG1hdmVuT3B0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQnVpbGRpbmcgQXRsYXNzaWFuIERhdGEgQ2VudGVyIHBsdWdpbiBmb3IgJHtuYW1lfS4uLiDwn5KDYCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhlYykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGFtcHMuYnVpbGQobWF2ZW5PcHRzKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkIGJ1aWxkaW5nIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gZm9yICR7bmFtZX0uLi4g8J+SqmApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMud2F0Y2ggJiYgb3B0aW9ucy5pbnN0YWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSBvcHRpb25zLm91dHB1dERpcmVjdG9yeSB8fCAndGFyZ2V0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGl2ZXJhYmxlRXh0ZW5zaW9uID0gb3B0aW9ucy5vYnIgPyAnb2JyJyA6ICdqYXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iKGAke291dHB1dERpcmVjdG9yeX0vKi4ke2RlbGl2ZXJhYmxlRXh0ZW5zaW9ufWAsIHsgY3dkOiByZXNvbHZlKG9wdGlvbnMuY3dkIHx8IGN3ZCgpKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGZpbGVzLm1hcChwYXRoID0+IEluc3RhbGxlcihuYW1lLCBwYXRoLCBvcHRpb25zKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IEN1c3RvbUJ1aWxkZXIoeyBjbWQ6IG9wdGlvbnMuZXhlYywgY3dkOiBvcHRpb25zLmN3ZCB8fCBjd2QoKSB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkIGJ1aWxkaW5nIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gZm9yICR7bmFtZX0uLi4g8J+SqmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChxdWlja1JlbG9hZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9wcGluZyBmaWxlc3lzdGVtIHdhdGNoZXIuLi4g4o+zYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgcXVpY2tSZWxvYWQuY2xvc2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgc3RvcHBlZCBhbGwgcnVubmluZyBwcm9jZXNzZXMg8J+SqmApO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggYnVpbGQnKVxuICAgIC5kZXNjcmlwdGlvbihgQnVpbGQgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gdXNpbmcgdGhlIEF0bGFzc2lhbiBNYXZlbiBQbHVnaW4gU3VpdGUgKEFNUFMpIGNvbmZpZ3VyYXRpb24uXG5JZiB0aGVyZSBpcyBhIHJ1bm5pbmcgaW5zdGFuY2UsIGl0IHdpbGwgdHJ5IHRvIGluc3RhbGwgdGhlIHBsdWdpbiB1c2luZyBRdWlja1JlbG9hZC5cblxuWW91IGNhbiBhZGQgTWF2ZW4gYnVpbGQgYXJndW1lbnRzIGFmdGVyIHRoZSBjb21tYW5kIG9wdGlvbnMuYClcbiAgICAudXNhZ2UoJ1tvcHRpb25zXSBbLi4ubWF2ZW5fYXJndW1lbnRzXScpXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbih0cnVlKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IodHJ1ZSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy13LCAtLXdhdGNoJywgJ1dhdGNoIGZvciBmaWxlc3lzdGVtIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYW5kIHJlYnVpbGQgcGx1Z2luJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWV4dCA8cGF0dGVybnMuLi4+JywgJ0dsb2IgcGF0dGVybnMgdG8gdXNlIHdoZW4gd2F0Y2hpbmcgZm9yIGZpbGUgY2hhbmdlcyAob25seSBhdmFpbGFibGUgd2l0aCAtLXdhdGNoLCBkZWZhdWx0cyB0byAqKi8qKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLWksIC0taW5zdGFsbCcsICdJbnN0YWxsIHRoZSBwbHVnaW4gaW50byBhIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgdGhlIGhvc3QgYXBwbGljYXRpb24gKG9ubHkgYXZhaWxhYmxlIHdpdGggLS13YXRjaCknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1vLCAtLW91dHB1dERpcmVjdG9yeSA8ZGlyZWN0b3J5PicsICdPdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHRvIGxvb2sgZm9yIGdlbmVyYXRlZCBKQVIgZmlsZXMgKG9ubHkgYXZhaWxhYmxlIHdpdGggLS1pbnN0YWxsLCBkZWZhdWx0cyB0byBgdGFyZ2V0YCknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tb2JyJywgJ1VwbG9hZCBnZW5lcmF0ZWQgT0JSIGZpbGUgaW5zdGVhZCBvZiBKQVIgZmlsZSB3aGVuIGluc3RhbGxpbmcgdGhlIGFwcCAob25seSBhdmFpbGFibGUgd2l0aCAtLWluc3RhbGwpJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXVzZXJuYW1lIDx1c2VybmFtZT4nLCAnVGhlIHVzZXJuYW1lIG9mIHRoZSBhZG1pbmlzdHJhdG9yIChyZXF1aXJlZCB3aXRoIC0tb2JyKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYXNzd29yZCA8cGFzc3dvcmQ+JywgJ1RoZSBwYXNzd29yZCBvZiB0aGUgYWRtaW5pc3RyYXRvciAocmVxdWlyZWQgd2l0aCAtLW9iciknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1QLCAtLWFjdGl2YXRlLXByb2ZpbGVzIDxhcmc+JywgJ0NvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHByb2ZpbGVzIHRvIGFjdGl2YXRlJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBTVBTIGNvbmZpZ3VyYXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZXhlYyA8Y29tbWFuZD4nLCAnQnVpbGQgY29tbWFuZCB0byBydW4gaW5zdGVhZCBvZiBNYXZlbicpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndikuY2F0Y2goKCkgPT4gZ3JhY2VmdWxFeGl0KDEpKTtcbnByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgUmVjZWl2ZWQgdGVybSBzaWduYWwsIHRyeWluZyB0byBzdG9wIGdyYWNlZnVsbHkg8J+SqmApO1xuICAgIGdyYWNlZnVsRXhpdCgxKTtcbn0pO1xuIl0sIm5hbWVzIjpbInZlcnNpb25zIiwiRG9ja2VyLmdldFJ1bm5pbmdDb250YWluZXJJZHMiLCJyZXNvbHZlUGF0aCIsIkRvY2tlci5jb3B5IiwiY29uc29sZSIsIkNvbW1hbmRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVPLE1BQU0sYUFBYSxHQUFH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|