projen 0.104.14 → 0.104.16
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/.jsii +1712 -603
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.d.ts +7 -0
- package/lib/awscdk/cdk-config.js +5 -4
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/cdktn/cdktn-app-ts.js +1 -1
- package/lib/cdktn/cdktn-config.js +1 -1
- package/lib/cdktn/cdktn-construct.js +1 -1
- package/lib/cdktn/cdktn-deps.js +1 -1
- package/lib/cdktn/cdktn-tasks.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/component.js +2 -2
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/actions.const.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/pull-request-source.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.d.ts +12 -0
- package/lib/java/pom.js +9 -3
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome-config.d.ts +826 -224
- package/lib/javascript/biome/biome-config.js +207 -31
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-config-file.js +1 -1
- package/lib/javascript/node-native-test-runner.js +2 -2
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/pnpm-workspace-config.js +2 -2
- package/lib/javascript/pnpm-workspace.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/polaris/coverity-go.js +1 -1
- package/lib/polaris/coverity-java.js +1 -1
- package/lib/polaris/coverity-javascript.js +1 -1
- package/lib/polaris/coverity.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/properties-file.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv-config.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +1 -1
- package/lib/sample-file.js +2 -2
- package/lib/script-runner.js +1 -1
- package/lib/sonarqube/javascript.js +1 -1
- package/lib/sonarqube/rust.js +1 -1
- package/lib/sonarqube/sonarqube.js +1 -1
- package/lib/sonarqube/typescript.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-shell.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-runner.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RuleDomainValue = exports.JsonTrailingCommas = exports.JsTrailingCommas = exports.Semicolons = exports.QuoteProperties = exports.OperatorLinebreak = exports.ArrowParentheses = exports.WhitespaceSensitivity = exports.SelfCloseVoidElements = exports.QuoteStyle = exports.PresetConfig = exports.VcsClientKind = exports.JsxRuntime = exports.LineEnding = exports.IndentStyle = exports.Expand = exports.AttributePosition = void 0;
|
|
3
|
+
exports.ProseWrap = exports.RuleDomainValue = exports.JsonTrailingCommas = exports.JsTrailingCommas = exports.Semicolons = exports.QuoteProperties = exports.OperatorLinebreak = exports.ArrowParentheses = exports.WhitespaceSensitivity = exports.SelfCloseVoidElements = exports.QuoteStyle = exports.PresetConfig = exports.VcsClientKind = exports.JsxRuntime = exports.LineEnding = exports.IndentStyle = exports.Expand = exports.AttributePosition = void 0;
|
|
4
4
|
exports.toJson_BiomeConfiguration = toJson_BiomeConfiguration;
|
|
5
5
|
exports.toJson_AssistConfiguration = toJson_AssistConfiguration;
|
|
6
6
|
exports.toJson_CssConfiguration = toJson_CssConfiguration;
|
|
@@ -12,8 +12,11 @@ exports.toJson_HtmlConfiguration = toJson_HtmlConfiguration;
|
|
|
12
12
|
exports.toJson_JsConfiguration = toJson_JsConfiguration;
|
|
13
13
|
exports.toJson_JsonConfiguration = toJson_JsonConfiguration;
|
|
14
14
|
exports.toJson_LinterConfiguration = toJson_LinterConfiguration;
|
|
15
|
+
exports.toJson_MarkdownConfiguration = toJson_MarkdownConfiguration;
|
|
15
16
|
exports.toJson_OverridePattern = toJson_OverridePattern;
|
|
17
|
+
exports.toJson_TailwindConfiguration = toJson_TailwindConfiguration;
|
|
16
18
|
exports.toJson_VcsConfiguration = toJson_VcsConfiguration;
|
|
19
|
+
exports.toJson_YamlConfiguration = toJson_YamlConfiguration;
|
|
17
20
|
exports.toJson_Actions = toJson_Actions;
|
|
18
21
|
exports.toJson_CssAssistConfiguration = toJson_CssAssistConfiguration;
|
|
19
22
|
exports.toJson_CssFormatterConfiguration = toJson_CssFormatterConfiguration;
|
|
@@ -40,10 +43,15 @@ exports.toJson_JsonLinterConfiguration = toJson_JsonLinterConfiguration;
|
|
|
40
43
|
exports.toJson_JsonParserConfiguration = toJson_JsonParserConfiguration;
|
|
41
44
|
exports.toJson_RuleDomains = toJson_RuleDomains;
|
|
42
45
|
exports.toJson_Rules = toJson_Rules;
|
|
46
|
+
exports.toJson_MarkdownFormatterConfiguration = toJson_MarkdownFormatterConfiguration;
|
|
47
|
+
exports.toJson_MarkdownLinterConfiguration = toJson_MarkdownLinterConfiguration;
|
|
48
|
+
exports.toJson_MarkdownParserConfiguration = toJson_MarkdownParserConfiguration;
|
|
43
49
|
exports.toJson_OverrideAssistConfiguration = toJson_OverrideAssistConfiguration;
|
|
44
50
|
exports.toJson_OverrideFilesConfiguration = toJson_OverrideFilesConfiguration;
|
|
45
51
|
exports.toJson_OverrideFormatterConfiguration = toJson_OverrideFormatterConfiguration;
|
|
46
52
|
exports.toJson_OverrideLinterConfiguration = toJson_OverrideLinterConfiguration;
|
|
53
|
+
exports.toJson_YamlFormatterConfiguration = toJson_YamlFormatterConfiguration;
|
|
54
|
+
exports.toJson_YamlLinterConfiguration = toJson_YamlLinterConfiguration;
|
|
47
55
|
exports.toJson_Source = toJson_Source;
|
|
48
56
|
/**
|
|
49
57
|
* Converts an object of type 'BiomeConfiguration' to JSON representation.
|
|
@@ -58,7 +66,7 @@ function toJson_BiomeConfiguration(obj) {
|
|
|
58
66
|
'$schema': obj.schema,
|
|
59
67
|
'assist': toJson_AssistConfiguration(obj.assist),
|
|
60
68
|
'css': toJson_CssConfiguration(obj.css),
|
|
61
|
-
'extends': obj.extends
|
|
69
|
+
'extends': obj.extends,
|
|
62
70
|
'files': toJson_FilesConfiguration(obj.files),
|
|
63
71
|
'formatter': toJson_FormatterConfiguration(obj.formatter),
|
|
64
72
|
'graphql': toJson_GraphqlConfiguration(obj.graphql),
|
|
@@ -67,10 +75,13 @@ function toJson_BiomeConfiguration(obj) {
|
|
|
67
75
|
'javascript': toJson_JsConfiguration(obj.javascript),
|
|
68
76
|
'json': toJson_JsonConfiguration(obj.json),
|
|
69
77
|
'linter': toJson_LinterConfiguration(obj.linter),
|
|
78
|
+
'markdown': toJson_MarkdownConfiguration(obj.markdown),
|
|
70
79
|
'overrides': obj.overrides?.map(y => toJson_OverridePattern(y)),
|
|
71
80
|
'plugins': obj.plugins?.map(y => y),
|
|
72
81
|
'root': obj.root,
|
|
82
|
+
'tailwind': toJson_TailwindConfiguration(obj.tailwind),
|
|
73
83
|
'vcs': toJson_VcsConfiguration(obj.vcs),
|
|
84
|
+
'yaml': toJson_YamlConfiguration(obj.yaml),
|
|
74
85
|
};
|
|
75
86
|
// filter undefined values
|
|
76
87
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -268,6 +279,24 @@ function toJson_LinterConfiguration(obj) {
|
|
|
268
279
|
// filter undefined values
|
|
269
280
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
270
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Converts an object of type 'MarkdownConfiguration' to JSON representation.
|
|
284
|
+
* @internal
|
|
285
|
+
*/
|
|
286
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
287
|
+
function toJson_MarkdownConfiguration(obj) {
|
|
288
|
+
if (obj === undefined) {
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
const result = {
|
|
292
|
+
'analyzeEmbeds': obj.analyzeEmbeds,
|
|
293
|
+
'formatter': toJson_MarkdownFormatterConfiguration(obj.formatter),
|
|
294
|
+
'linter': toJson_MarkdownLinterConfiguration(obj.linter),
|
|
295
|
+
'parser': toJson_MarkdownParserConfiguration(obj.parser),
|
|
296
|
+
};
|
|
297
|
+
// filter undefined values
|
|
298
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
299
|
+
}
|
|
271
300
|
/**
|
|
272
301
|
* Converts an object of type 'OverridePattern' to JSON representation.
|
|
273
302
|
* @internal
|
|
@@ -289,7 +318,27 @@ function toJson_OverridePattern(obj) {
|
|
|
289
318
|
'javascript': toJson_JsConfiguration(obj.javascript),
|
|
290
319
|
'json': toJson_JsonConfiguration(obj.json),
|
|
291
320
|
'linter': toJson_OverrideLinterConfiguration(obj.linter),
|
|
321
|
+
'markdown': toJson_MarkdownConfiguration(obj.markdown),
|
|
292
322
|
'plugins': obj.plugins?.map(y => y),
|
|
323
|
+
'yaml': toJson_YamlConfiguration(obj.yaml),
|
|
324
|
+
};
|
|
325
|
+
// filter undefined values
|
|
326
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Converts an object of type 'TailwindConfiguration' to JSON representation.
|
|
330
|
+
* @internal
|
|
331
|
+
*/
|
|
332
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
333
|
+
function toJson_TailwindConfiguration(obj) {
|
|
334
|
+
if (obj === undefined) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
const result = {
|
|
338
|
+
'attributes': obj.attributes?.map(y => y),
|
|
339
|
+
'mergeFunctions': obj.mergeFunctions?.map(y => y),
|
|
340
|
+
'stylesheet': obj.stylesheet,
|
|
341
|
+
'variantFunctions': obj.variantFunctions?.map(y => y),
|
|
293
342
|
};
|
|
294
343
|
// filter undefined values
|
|
295
344
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -313,6 +362,22 @@ function toJson_VcsConfiguration(obj) {
|
|
|
313
362
|
// filter undefined values
|
|
314
363
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
315
364
|
}
|
|
365
|
+
/**
|
|
366
|
+
* Converts an object of type 'YamlConfiguration' to JSON representation.
|
|
367
|
+
* @internal
|
|
368
|
+
*/
|
|
369
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
370
|
+
function toJson_YamlConfiguration(obj) {
|
|
371
|
+
if (obj === undefined) {
|
|
372
|
+
return undefined;
|
|
373
|
+
}
|
|
374
|
+
const result = {
|
|
375
|
+
'formatter': toJson_YamlFormatterConfiguration(obj.formatter),
|
|
376
|
+
'linter': toJson_YamlLinterConfiguration(obj.linter),
|
|
377
|
+
};
|
|
378
|
+
// filter undefined values
|
|
379
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
380
|
+
}
|
|
316
381
|
/**
|
|
317
382
|
* Converts an object of type 'Actions' to JSON representation.
|
|
318
383
|
* @internal
|
|
@@ -401,13 +466,15 @@ function toJson_CssParserConfiguration(obj) {
|
|
|
401
466
|
}
|
|
402
467
|
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
403
468
|
/**
|
|
469
|
+
* Controls attribute placement in HTML-like languages.
|
|
470
|
+
*
|
|
404
471
|
* @schema AttributePosition
|
|
405
472
|
*/
|
|
406
473
|
var AttributePosition;
|
|
407
474
|
(function (AttributePosition) {
|
|
408
|
-
/** auto */
|
|
475
|
+
/** Places attributes automatically and wraps them when needed. (auto) */
|
|
409
476
|
AttributePosition["AUTO"] = "auto";
|
|
410
|
-
/** multiline */
|
|
477
|
+
/** Places each attribute on its own line when an element has multiple attributes. (multiline) */
|
|
411
478
|
AttributePosition["MULTILINE"] = "multiline";
|
|
412
479
|
})(AttributePosition || (exports.AttributePosition = AttributePosition = {}));
|
|
413
480
|
/**
|
|
@@ -428,9 +495,9 @@ var Expand;
|
|
|
428
495
|
*/
|
|
429
496
|
var IndentStyle;
|
|
430
497
|
(function (IndentStyle) {
|
|
431
|
-
/**
|
|
498
|
+
/** Uses tabs for indentation. (tab) */
|
|
432
499
|
IndentStyle["TAB"] = "tab";
|
|
433
|
-
/**
|
|
500
|
+
/** Uses spaces for indentation. (space) */
|
|
434
501
|
IndentStyle["SPACE"] = "space";
|
|
435
502
|
})(IndentStyle || (exports.IndentStyle = IndentStyle = {}));
|
|
436
503
|
/**
|
|
@@ -669,16 +736,16 @@ function toJson_JsFormatterConfiguration(obj) {
|
|
|
669
736
|
}
|
|
670
737
|
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
671
738
|
/**
|
|
672
|
-
*
|
|
739
|
+
* How Biome's analyzer accounts for imports used by JSX.
|
|
673
740
|
*
|
|
674
741
|
* @schema JsxRuntime
|
|
675
742
|
*/
|
|
676
743
|
var JsxRuntime;
|
|
677
744
|
(function (JsxRuntime) {
|
|
678
|
-
/**
|
|
679
|
-
special handling by Biome. (transparent) */
|
|
745
|
+
/** An automatic or native JSX environment that doesn't require an in-scope factory import. (transparent) */
|
|
680
746
|
JsxRuntime["TRANSPARENT"] = "transparent";
|
|
681
|
-
/**
|
|
747
|
+
/** A classic React environment that requires the React import, or custom JSX factory imports
|
|
748
|
+
configured in `tsconfig.json`.
|
|
682
749
|
|
|
683
750
|
Corresponds to the `react` value for the `jsx` option in TypeScript's
|
|
684
751
|
`tsconfig.json`.
|
|
@@ -714,7 +781,6 @@ function toJson_JsParserConfiguration(obj) {
|
|
|
714
781
|
return undefined;
|
|
715
782
|
}
|
|
716
783
|
const result = {
|
|
717
|
-
'gritMetavariables': obj.gritMetavariables,
|
|
718
784
|
'jsxEverywhere': obj.jsxEverywhere,
|
|
719
785
|
'unsafeParameterDecoratorsEnabled': obj.unsafeParameterDecoratorsEnabled,
|
|
720
786
|
};
|
|
@@ -859,6 +925,60 @@ function toJson_Rules(obj) {
|
|
|
859
925
|
// filter undefined values
|
|
860
926
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
861
927
|
}
|
|
928
|
+
/**
|
|
929
|
+
* Converts an object of type 'MarkdownFormatterConfiguration' to JSON representation.
|
|
930
|
+
* @internal
|
|
931
|
+
*/
|
|
932
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
933
|
+
function toJson_MarkdownFormatterConfiguration(obj) {
|
|
934
|
+
if (obj === undefined) {
|
|
935
|
+
return undefined;
|
|
936
|
+
}
|
|
937
|
+
const result = {
|
|
938
|
+
'enabled': obj.enabled,
|
|
939
|
+
'formatEmbeds': obj.formatEmbeds,
|
|
940
|
+
'indentStyle': obj.indentStyle,
|
|
941
|
+
'indentWidth': obj.indentWidth,
|
|
942
|
+
'lineEnding': obj.lineEnding,
|
|
943
|
+
'lineWidth': obj.lineWidth,
|
|
944
|
+
'proseWrap': obj.proseWrap,
|
|
945
|
+
'trailingNewline': obj.trailingNewline,
|
|
946
|
+
};
|
|
947
|
+
// filter undefined values
|
|
948
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Converts an object of type 'MarkdownLinterConfiguration' to JSON representation.
|
|
952
|
+
* @internal
|
|
953
|
+
*/
|
|
954
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
955
|
+
function toJson_MarkdownLinterConfiguration(obj) {
|
|
956
|
+
if (obj === undefined) {
|
|
957
|
+
return undefined;
|
|
958
|
+
}
|
|
959
|
+
const result = {
|
|
960
|
+
'enabled': obj.enabled,
|
|
961
|
+
};
|
|
962
|
+
// filter undefined values
|
|
963
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
964
|
+
}
|
|
965
|
+
/**
|
|
966
|
+
* Converts an object of type 'MarkdownParserConfiguration' to JSON representation.
|
|
967
|
+
* @internal
|
|
968
|
+
*/
|
|
969
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
970
|
+
function toJson_MarkdownParserConfiguration(obj) {
|
|
971
|
+
if (obj === undefined) {
|
|
972
|
+
return undefined;
|
|
973
|
+
}
|
|
974
|
+
const result = {
|
|
975
|
+
'cjkFriendlyEmphasis': obj.cjkFriendlyEmphasis,
|
|
976
|
+
'frontmatter': obj.frontmatter,
|
|
977
|
+
'gfm': obj.gfm,
|
|
978
|
+
};
|
|
979
|
+
// filter undefined values
|
|
980
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
981
|
+
}
|
|
862
982
|
/**
|
|
863
983
|
* Converts an object of type 'OverrideAssistConfiguration' to JSON representation.
|
|
864
984
|
* @internal
|
|
@@ -946,6 +1066,43 @@ var VcsClientKind;
|
|
|
946
1066
|
/** git */
|
|
947
1067
|
VcsClientKind["GIT"] = "git";
|
|
948
1068
|
})(VcsClientKind || (exports.VcsClientKind = VcsClientKind = {}));
|
|
1069
|
+
/**
|
|
1070
|
+
* Converts an object of type 'YamlFormatterConfiguration' to JSON representation.
|
|
1071
|
+
* @internal
|
|
1072
|
+
*/
|
|
1073
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
1074
|
+
function toJson_YamlFormatterConfiguration(obj) {
|
|
1075
|
+
if (obj === undefined) {
|
|
1076
|
+
return undefined;
|
|
1077
|
+
}
|
|
1078
|
+
const result = {
|
|
1079
|
+
'bracketSpacing': obj.bracketSpacing,
|
|
1080
|
+
'enabled': obj.enabled,
|
|
1081
|
+
'indentWidth': obj.indentWidth,
|
|
1082
|
+
'lineEnding': obj.lineEnding,
|
|
1083
|
+
'lineWidth': obj.lineWidth,
|
|
1084
|
+
'quoteStyle': obj.quoteStyle,
|
|
1085
|
+
'trailingNewline': obj.trailingNewline,
|
|
1086
|
+
};
|
|
1087
|
+
// filter undefined values
|
|
1088
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1089
|
+
}
|
|
1090
|
+
/**
|
|
1091
|
+
* Converts an object of type 'YamlLinterConfiguration' to JSON representation.
|
|
1092
|
+
* @internal
|
|
1093
|
+
*/
|
|
1094
|
+
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
1095
|
+
function toJson_YamlLinterConfiguration(obj) {
|
|
1096
|
+
if (obj === undefined) {
|
|
1097
|
+
return undefined;
|
|
1098
|
+
}
|
|
1099
|
+
const result = {
|
|
1100
|
+
'enabled': obj.enabled,
|
|
1101
|
+
};
|
|
1102
|
+
// filter undefined values
|
|
1103
|
+
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
1104
|
+
}
|
|
1105
|
+
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
|
|
949
1106
|
/**
|
|
950
1107
|
* A preset configuration for enabling a set of rules.
|
|
951
1108
|
*
|
|
@@ -974,6 +1131,9 @@ function toJson_Source(obj) {
|
|
|
974
1131
|
'organizeImports': obj.organizeImports,
|
|
975
1132
|
'preset': obj.preset,
|
|
976
1133
|
'recommended': obj.recommended,
|
|
1134
|
+
'useGraphqlSortedArguments': obj.useGraphqlSortedArguments,
|
|
1135
|
+
'useGraphqlSortedDefinitions': obj.useGraphqlSortedDefinitions,
|
|
1136
|
+
'useGraphqlSortedVariables': obj.useGraphqlSortedVariables,
|
|
977
1137
|
'useSortedAttributes': obj.useSortedAttributes,
|
|
978
1138
|
'useSortedEnumMembers': obj.useSortedEnumMembers,
|
|
979
1139
|
'useSortedInterfaceMembers': obj.useSortedInterfaceMembers,
|
|
@@ -998,19 +1158,20 @@ var QuoteStyle;
|
|
|
998
1158
|
QuoteStyle["SINGLE"] = "single";
|
|
999
1159
|
})(QuoteStyle || (exports.QuoteStyle = QuoteStyle = {}));
|
|
1000
1160
|
/**
|
|
1001
|
-
* Controls whether void
|
|
1161
|
+
* Controls whether HTML void elements such as `<img>` and `<input>` include a slash before `>`.
|
|
1002
1162
|
*
|
|
1003
1163
|
* @schema SelfCloseVoidElements
|
|
1004
1164
|
*/
|
|
1005
1165
|
var SelfCloseVoidElements;
|
|
1006
1166
|
(function (SelfCloseVoidElements) {
|
|
1007
|
-
/**
|
|
1167
|
+
/** Removes the slash, for example `<img src="image.png">`. (never) */
|
|
1008
1168
|
SelfCloseVoidElements["NEVER"] = "never";
|
|
1009
|
-
/**
|
|
1169
|
+
/** Adds the slash, for example `<img src="image.png" />`. (always) */
|
|
1010
1170
|
SelfCloseVoidElements["ALWAYS"] = "always";
|
|
1011
1171
|
})(SelfCloseVoidElements || (exports.SelfCloseVoidElements = SelfCloseVoidElements = {}));
|
|
1012
1172
|
/**
|
|
1013
|
-
*
|
|
1173
|
+
* Controls how the formatter treats whitespace around text and child elements in HTML, Vue,
|
|
1174
|
+
* Svelte, and Astro markup.
|
|
1014
1175
|
*
|
|
1015
1176
|
* The following two cases won't produce the same output:
|
|
1016
1177
|
*
|
|
@@ -1038,13 +1199,10 @@ var SelfCloseVoidElements;
|
|
|
1038
1199
|
*/
|
|
1039
1200
|
var WhitespaceSensitivity;
|
|
1040
1201
|
(function (WhitespaceSensitivity) {
|
|
1041
|
-
/**
|
|
1042
|
-
browser's user agent style sheets. (css) */
|
|
1202
|
+
/** Treats whitespace as significant for elements that browsers display inline by default. (css) */
|
|
1043
1203
|
WhitespaceSensitivity["CSS"] = "css";
|
|
1044
|
-
/**
|
|
1045
|
-
|
|
1046
|
-
The formatter should leave at least one whitespace character if whitespace is present.
|
|
1047
|
-
Otherwise, if there is no whitespace, it should not add any after `>` or before `<`. In other words, if there's no whitespace, the text content should hug the tags.
|
|
1204
|
+
/** Treats leading and trailing whitespace as significant for every element. Existing whitespace
|
|
1205
|
+
is preserved as at least one character and absent whitespace is not added.
|
|
1048
1206
|
|
|
1049
1207
|
Example of text hugging the tags:
|
|
1050
1208
|
```html
|
|
@@ -1053,7 +1211,8 @@ var WhitespaceSensitivity;
|
|
|
1053
1211
|
>
|
|
1054
1212
|
``` (strict) */
|
|
1055
1213
|
WhitespaceSensitivity["STRICT"] = "strict";
|
|
1056
|
-
/**
|
|
1214
|
+
/** Treats whitespace as insignificant, allowing the formatter to add or remove it. Use this only
|
|
1215
|
+
when whitespace cannot affect rendered output. (ignore) */
|
|
1057
1216
|
WhitespaceSensitivity["IGNORE"] = "ignore";
|
|
1058
1217
|
})(WhitespaceSensitivity || (exports.WhitespaceSensitivity = WhitespaceSensitivity = {}));
|
|
1059
1218
|
/**
|
|
@@ -1061,9 +1220,9 @@ var WhitespaceSensitivity;
|
|
|
1061
1220
|
*/
|
|
1062
1221
|
var ArrowParentheses;
|
|
1063
1222
|
(function (ArrowParentheses) {
|
|
1064
|
-
/** always */
|
|
1223
|
+
/** Always prints parentheses around arrow-function parameters. (always) */
|
|
1065
1224
|
ArrowParentheses["ALWAYS"] = "always";
|
|
1066
|
-
/** asNeeded */
|
|
1225
|
+
/** Omits parentheses when an arrow function has one parameter and the syntax permits it. (asNeeded) */
|
|
1067
1226
|
ArrowParentheses["AS_NEEDED"] = "asNeeded";
|
|
1068
1227
|
})(ArrowParentheses || (exports.ArrowParentheses = ArrowParentheses = {}));
|
|
1069
1228
|
/**
|
|
@@ -1081,9 +1240,9 @@ var OperatorLinebreak;
|
|
|
1081
1240
|
*/
|
|
1082
1241
|
var QuoteProperties;
|
|
1083
1242
|
(function (QuoteProperties) {
|
|
1084
|
-
/** asNeeded */
|
|
1243
|
+
/** Removes quotes when the property name is valid without them. (asNeeded) */
|
|
1085
1244
|
QuoteProperties["AS_NEEDED"] = "asNeeded";
|
|
1086
|
-
/** preserve */
|
|
1245
|
+
/** Preserves quotes around property names that were quoted in the input. (preserve) */
|
|
1087
1246
|
QuoteProperties["PRESERVE"] = "preserve";
|
|
1088
1247
|
})(QuoteProperties || (exports.QuoteProperties = QuoteProperties = {}));
|
|
1089
1248
|
/**
|
|
@@ -1111,7 +1270,7 @@ var JsTrailingCommas;
|
|
|
1111
1270
|
JsTrailingCommas["NONE"] = "none";
|
|
1112
1271
|
})(JsTrailingCommas || (exports.JsTrailingCommas = JsTrailingCommas = {}));
|
|
1113
1272
|
/**
|
|
1114
|
-
*
|
|
1273
|
+
* Controls trailing commas in multiline JSON arrays and objects. Use `all` only for JSON variants that allow trailing commas, and ensure `json.parser.allowTrailingCommas` is enabled or automatically detected for those files.
|
|
1115
1274
|
*
|
|
1116
1275
|
* @schema JsonTrailingCommas
|
|
1117
1276
|
*/
|
|
@@ -1127,11 +1286,28 @@ var JsonTrailingCommas;
|
|
|
1127
1286
|
*/
|
|
1128
1287
|
var RuleDomainValue;
|
|
1129
1288
|
(function (RuleDomainValue) {
|
|
1130
|
-
/** Enables all
|
|
1289
|
+
/** Enables all rules in the domain. (all) */
|
|
1131
1290
|
RuleDomainValue["ALL"] = "all";
|
|
1132
|
-
/** Disables
|
|
1291
|
+
/** Disables the domain. (none) */
|
|
1133
1292
|
RuleDomainValue["NONE"] = "none";
|
|
1134
|
-
/** Enables
|
|
1293
|
+
/** Enables the domain's recommended non-nursery rules. (recommended) */
|
|
1135
1294
|
RuleDomainValue["RECOMMENDED"] = "recommended";
|
|
1136
1295
|
})(RuleDomainValue || (exports.RuleDomainValue = RuleDomainValue = {}));
|
|
1137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmFzY3JpcHQvYmlvbWUvYmlvbWUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThIQSw4REFzQkM7QUFtQ0QsZ0VBU0M7QUFrREQsMERBV0M7QUFpREQsOERBVUM7QUE2SUQsc0VBb0JDO0FBb0NELGtFQVNDO0FBb0NELDREQVNDO0FBa0RELDREQVdDO0FBeUVELHdEQWNDO0FBMkNELDREQVVDO0FBMENELGdFQVVDO0FBa0dELHdEQWtCQztBQTBERCwwREFXQztBQWdDRCx3Q0FTQztBQXNCRCxzRUFPQztBQWlGRCw0RUFjQztBQXNCRCxzRUFPQztBQXFDRCxzRUFTQztBQXFFRCw4RUFPQztBQTJFRCxvRkFjQztBQXNCRCw4RUFPQztBQXNCRCx3RUFPQztBQTJERCw4RUFZQztBQXNCRCx3RUFPQztBQXNCRCx3RUFPQztBQXlHRCw4RUFpQkM7QUFzQkQsd0VBT0M7QUFrQ0Qsd0VBUUM7QUFzQkQsb0VBT0M7QUEyS0QsMEVBd0JDO0FBMkNELG9FQU9DO0FBMENELG9FQVNDO0FBNkNELHdFQU9DO0FBc0JELHdFQU9DO0FBa0dELDhFQWdCQztBQXNCRCx3RUFPQztBQTZCRCx3RUFRQztBQXdGRCxnREFxQkM7QUFtRUQsb0NBZ0JDO0FBMkJELGdGQVFDO0FBb0JELDhFQU9DO0FBd0lELHNGQW9CQztBQWtDRCxnRkFTQztBQXFJRCxzQ0FrQkM7QUF2eUZEOzs7R0FHRztBQUNILHFGQUFxRjtBQUNyRixTQUFnQix5QkFBeUIsQ0FBQyxHQUFtQztJQUMzRSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE9BQU8sU0FBUyxDQUFDO0lBQUMsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBRztRQUNiLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTTtRQUNyQixRQUFRLEVBQUUsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztR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LCtCQUFXLENBQUE7SUFDWCxXQUFXO0lBQ1gsaUNBQWEsQ0FBQTtBQUNmLENBQUMsRUFQVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQU8zQjtBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLGtCQUtYO0FBTEQsV0FBWSxrQkFBa0I7SUFDNUIsV0FBVztJQUNYLG1DQUFhLENBQUE7SUFDYixVQUFVO0lBQ1YsaUNBQVcsQ0FBQTtBQUNiLENBQUMsRUFMVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQUs3QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3pCLDZEQUE2RDtJQUM3RCw4QkFBVyxDQUFBO0lBQ1gsK0RBQStEO0lBQy9ELGdDQUFhLENBQUE7SUFDYix1RUFBdUU7SUFDdkUsOENBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQVBXLGVBQWUsK0JBQWYsZUFBZSxRQU8xQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5vZGUgLi9wcm9qZW4uanNcIi5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gY29udGFpbmVkIGluIGBiaW9tZS5qc29uYC5cbiAqXG4gKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpb21lQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGZpZWxkIGZvciB0aGUgSlNPTiBzY2hlbWEgc3BlY2lmaWNhdGlvbjogaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uIyRzY2hlbWFcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVtYT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFzc2lzdCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gQ1NTLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNjc3NcbiAgICovXG4gIHJlYWRvbmx5IGNzcz86IENzc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXRocyB0byBvdGhlciBKU09OIGZpbGVzLCB1c2VkIHRvIGV4dGVuZCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBmaWxlIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2ZpbGVzXG4gICAqL1xuICByZWFkb25seSBmaWxlcz86IEZpbGVzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGZvcm1hdHRlciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gR3JhcGhRTC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JhcGhxbFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhcGhxbD86IEdyYXBocWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIEdyaXRRTC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIEhUTUwuXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2h0bWxcbiAgICovXG4gIHJlYWRvbmx5IGh0bWw/OiBIdG1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byBKYXZhU2NyaXB0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNqYXZhc2NyaXB0XG4gICAqL1xuICByZWFkb25seSBqYXZhc2NyaXB0PzogSnNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIEpTT04uXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpbnRlciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IExpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBncmFudWxhciBwYXR0ZXJucyBhcHBsaWVkIG9ubHkgdG8gYSBzdWJzZXQgb2YgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI292ZXJyaWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogT3ZlcnJpZGVQYXR0ZXJuW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcGx1Z2lucyB0byBsb2FkLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNwbHVnaW5zXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogYW55W107XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGlzIGF0IHRoZSByb290IG9mIGEgQmlvbWVcbiAgICogcHJvamVjdC4gQnkgZGVmYXVsdCwgdGhpcyBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI3Jvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBjb250cm9sIGludGVncmF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI3Zjc1xuICAgKi9cbiAgcmVhZG9ubHkgdmNzPzogVmNzQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQmlvbWVDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQmlvbWVDb25maWd1cmF0aW9uKG9iajogQmlvbWVDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnJHNjaGVtYSc6IG9iai5zY2hlbWEsXG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9Bc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdjc3MnOiB0b0pzb25fQ3NzQ29uZmlndXJhdGlvbihvYmouY3NzKSxcbiAgICAnZXh0ZW5kcyc6IG9iai5leHRlbmRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsZXMnOiB0b0pzb25fRmlsZXNDb25maWd1cmF0aW9uKG9iai5maWxlcyksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdncmFwaHFsJzogdG9Kc29uX0dyYXBocWxDb25maWd1cmF0aW9uKG9iai5ncmFwaHFsKSxcbiAgICAnZ3JpdCc6IHRvSnNvbl9Hcml0Q29uZmlndXJhdGlvbihvYmouZ3JpdCksXG4gICAgJ2h0bWwnOiB0b0pzb25fSHRtbENvbmZpZ3VyYXRpb24ob2JqLmh0bWwpLFxuICAgICdqYXZhc2NyaXB0JzogdG9Kc29uX0pzQ29uZmlndXJhdGlvbihvYmouamF2YXNjcmlwdCksXG4gICAgJ2pzb24nOiB0b0pzb25fSnNvbkNvbmZpZ3VyYXRpb24ob2JqLmpzb24pLFxuICAgICdsaW50ZXInOiB0b0pzb25fTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAnb3ZlcnJpZGVzJzogb2JqLm92ZXJyaWRlcz8ubWFwKHkgPT4gdG9Kc29uX092ZXJyaWRlUGF0dGVybih5KSksXG4gICAgJ3BsdWdpbnMnOiBvYmoucGx1Z2lucz8ubWFwKHkgPT4geSksXG4gICAgJ3Jvb3QnOiBvYmoucm9vdCxcbiAgICAndmNzJzogdG9Kc29uX1Zjc0NvbmZpZ3VyYXRpb24ob2JqLnZjcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIGZhaWwgaW4gQ0xJIGlmIHRoZSBhc3Npc3Qgd2VyZSBub3QgYXBwbGllZCB0byB0aGUgY29kZS5cbiAgICpcbiAgICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uI2FjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIEJpb21lIHNob3VsZCBlbmFibGUgYXNzaXN0IHZpYSBMU1AgYW5kIENMSS5cbiAgICpcbiAgICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gQmlvbWUgd2lsbCBpbmNsdWRlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIEFzc2lzdENvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Fzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Bc3Npc3RDb25maWd1cmF0aW9uKG9iajogQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbnMnOiB0b0pzb25fQWN0aW9ucyhvYmouYWN0aW9ucyksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5jbHVkZXMnOiBvYmouaW5jbHVkZXM/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIENTUyBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENTUyBhc3Npc3Qgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogQ3NzQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ1NTIGZvcm1hdHRlciBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1MgZ2xvYmFscy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2dsb2JhbHNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ1NTIGxpbnRlciBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBDc3NMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1MgcGFyc2luZyBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBDc3NQYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDc3NDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ3NzQ29uZmlndXJhdGlvbihvYmo6IENzc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fQ3NzQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0Nzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dsb2JhbHMnOiBvYmouZ2xvYmFscz8ubWFwKHkgPT4geSksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Dc3NMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fQ3NzUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBmaWxlIGhhbmRsaW5nIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlc0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogKipEZXByZWNhdGVkOioqIFBsZWFzZSB1c2UgX2ZvcmNlLWlnbm9yZSBzeW50YXhfIGluIGBmaWxlcy5pbmNsdWRlc2BcbiAgICogaW5zdGVhZDogPGh0dHBzOi8vYmlvbWVqcy5kZXYvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24vI2ZpbGVzaW5jbHVkZXM+XG4gICAqXG4gICAqIFNldCBvZiBmaWxlIGFuZCBmb2xkZXIgbmFtZXMgdGhhdCBzaG91bGQgYmUgdW5jb25kaXRpb25hbGx5IGlnbm9yZWQgYnlcbiAgICogQmlvbWUncyBzY2FubmVyLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxTY2FubmVySWdub3Jlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJldmVudHMgQmlvbWUgZnJvbSBlbWl0dGluZyBkaWFnbm9zdGljcyBmb3IgdW5yZWNvZ25pemVkIGZpbGUgdHlwZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uI2lnbm9yZVVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVVua25vd24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gQmlvbWUgaGFuZGxlcyBvbmx5IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIHRoZXNlXG4gICAqIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc291cmNlIGZpbGUgc2l6ZSBpbiBieXRlcy4gQmlvbWUgaWdub3JlcyBsYXJnZXIgZmlsZXMuIERlZmF1bHRzIHRvIGAxIE1pQmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEgTWlCYC5cbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jbWF4U2l6ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRmlsZXNDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRmlsZXNDb25maWd1cmF0aW9uKG9iajogRmlsZXNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXMnOiBvYmouZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdpZ25vcmVVbmtub3duJzogb2JqLmlnbm9yZVVua25vd24sXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnbWF4U2l6ZSc6IG9iai5tYXhTaXplLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogR2VuZXJpYyBvcHRpb25zIGFwcGxpZWQgdG8gYWxsIGZpbGVzXG4gKlxuICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlIGluIEhUTUwtbGlrZSBsYW5ndWFnZXMuIERlZmF1bHRzIHRvIGBhdXRvYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0b2AuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUGxhY2VzIHRoZSBgPmAgb2YgYSBtdWx0aWxpbmUgSFRNTCBvciBKU1ggZWxlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGxpbmUgaW5zdGVhZCBvZiBvblxuICAgKiB0aGUgbmV4dCBsaW5lLiBTZWxmLWNsb3NpbmcgZWxlbWVudHMgYXJlIHVuYWZmZWN0ZWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGluc2lkZSBicmFjZXMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgc3BhY2VzIGltbWVkaWF0ZWx5IGluc2lkZSBzdXBwb3J0ZWQgZGVsaW1pdGVycyB3aGVuIHRoZWlyIGNvbnRlbnQgZml0cyBvbiBvbmUgbGluZS5cbiAgICogSXQgZG9lc24ndCBhZGQgc3BhY2VzIGJlZm9yZSBvcGVuaW5nIGRlbGltaXRlcnMgb3IgaW5zaWRlIGVtcHR5IGRlbGltaXRlcnMuXG4gICAqXG4gICAqIFRoZSBhZmZlY3RlZCBkZWxpbWl0ZXJzIHZhcnkgYnkgbGFuZ3VhZ2UuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2RlbGltaXRlclNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGRlbGltaXRlclNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgYXJyYXlzIGFuZCBvYmplY3RzIGFyZSBmb3JtYXR0ZWQgb24gb25lIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMuXG4gICAqXG4gICAqIGBhdXRvYCBmb3JtYXRzIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsIGFuZCBhcnJheXMgb25cbiAgICogb25lIGxpbmUgaWYgdGhleSBmaXQuXG4gICAqXG4gICAqIGBhbHdheXNgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG11bHRpcGxlIGxpbmVzLlxuICAgKlxuICAgKiBgbmV2ZXJgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG9uZSBsaW5lIGlmIHRoZXkgZml0LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgYXV0b2AuXG4gICAqXG4gICAqIFdoZW4gZm9ybWF0dGluZyBgcGFja2FnZS5qc29uYCwgQmlvbWUgdXNlcyBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9gLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBmb3JtYXR0aW5nIGZpbGVzIHRoYXQgY29udGFpbiBzeW50YXggZXJyb3JzIHdoZW4gc2V0IHRvIGB0cnVlYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0V2l0aEVycm9yc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0V2l0aEVycm9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBUaGUgZm9ybWF0dGVyIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luY2x1ZGVzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBVc2VzIHRhYnMgb3Igc3BhY2VzIGZvciBpbmRlbnRhdGlvbi4gRGVmYXVsdHMgdG8gYHRhYmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRhYmAuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIGluZGVudGF0aW9uIHdpZHRoLiBEZWZhdWx0cyB0byBgMmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDJgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBsaW5lIGVuZGluZy4gYGF1dG9gIHVzZXMgdGhlIHBsYXRmb3JtIGNvbnZlbnRpb24uIERlZmF1bHRzIHRvIGBsZmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxmYC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBsaW5lIHdpZHRoLiBEZWZhdWx0cyB0byBgODBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MGAuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIERlZmF1bHRzIHRvIGB0cnVlYDsgZGlzYWJsaW5nXG4gICAqIHRoaXMgb3B0aW9uIGNhbiBjYXVzZSBjb21wYXRpYmlsaXR5IHByb2JsZW1zIHdpdGggb3RoZXIgdG9vbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgOyBkaXNhYmxpbmdcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlcyBgLmVkaXRvcmNvbmZpZ2AgZmlsZXMgdG8gY29uZmlndXJlIHRoZSBmb3JtYXR0ZXIuIFNldHRpbmdzIGluIGBiaW9tZS5qc29uYCBvclxuICAgKiBgYmlvbWUuanNvbmNgIG92ZXJyaWRlIGAuZWRpdG9yY29uZmlnYCBzZXR0aW5ncy4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdXNlRWRpdG9yY29uZmlnXG4gICAqL1xuICByZWFkb25seSB1c2VFZGl0b3Jjb25maWc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2RlbGltaXRlclNwYWNpbmcnOiBvYmouZGVsaW1pdGVyU3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdmb3JtYXRXaXRoRXJyb3JzJzogb2JqLmZvcm1hdFdpdGhFcnJvcnMsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gICAgJ3VzZUVkaXRvcmNvbmZpZyc6IG9iai51c2VFZGl0b3Jjb25maWcsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogR3JhcGhRTCBhc3Npc3Qgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBHcmFwaFFMIGZvcm1hdHRlciBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEdyYXBoUUwgbGludGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsQ29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0dyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9HcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBHcml0UUwgZmlsZXMuXG4gKlxuICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEdyaXRRTCBhc3Npc3Qgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEdyaXRBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBHcml0UUwgZm9ybWF0dGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogR3JpdFFMIGxpbnRlciBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogR3JpdExpbnRlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqOiBHcml0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9Hcml0QXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0dyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdsaW50ZXInOiB0b0pzb25fR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gSFRNTCBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogSFRNTCBhc3Npc3Qgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEh0bWxBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIGZ1bGwgc3VwcG9ydCBmb3IgSFRNTCwgVnVlLCBTdmVsdGUsIGFuZCBBc3RybyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhUTUwgZm9ybWF0dGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogSFRNTCBsaW50ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIVE1MIHBhcnNpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEh0bWxQYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iajogSHRtbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2V4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZCc6IG9iai5leHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9IdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0h0bWxMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHNldCBvZiBvcHRpb25zIGFwcGxpZWQgdG8gdGhlIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEpzQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBzdXBwb3J0IGZvciBlbWJlZGRpbmcgc25pcHBldHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2V4cGVyaW1lbnRhbEVtYmVkZGVkU25pcHBldHNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxFbWJlZGRlZFNuaXBwZXRzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JhbCBiaW5kaW5ncyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhbmFseXplcnNcbiAgICpcbiAgICogSWYgZGVmaW5lZCBoZXJlLCB0aGV5IHNob3VsZCBub3QgZW1pdCBkaWFnbm9zdGljcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jZ2xvYmFsc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgcnVudGltZSBvciB0cmFuc2Zvcm1hdGlvbiB1c2VkIGZvciBpbnRlcnByZXRpbmcgSlNYLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNqc3hSdW50aW1lXG4gICAqL1xuICByZWFkb25seSBqc3hSdW50aW1lPzogSnN4UnVudGltZTtcblxuICAvKipcbiAgICogTGludGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFBhcnNpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEpzUGFyc2VyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTW9kdWxlL2RlcGVuZGVuY3kgcmVzb2x2ZXIgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNyZXNvbHZlclxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZXI/OiBKc1Jlc29sdmVyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iajogSnNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQnOiBvYmouZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dsb2JhbHMnOiBvYmouZ2xvYmFscz8ubWFwKHkgPT4geSksXG4gICAgJ2pzeFJ1bnRpbWUnOiBvYmouanN4UnVudGltZSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgICAncmVzb2x2ZXInOiB0b0pzb25fSnNSZXNvbHZlckNvbmZpZ3VyYXRpb24ob2JqLnJlc29sdmVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBKU09OIGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBKc29uQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTGludGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc29uTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogUGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBKc29uUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmo6IEpzb25Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzb25Bc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Kc29uTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZG9tYWlucywgYW5kIHRoZSB2YWx1ZXMgYXJlIGBhbGxgLCBgcmVjb21tZW5kZWRgLCBvciBgbm9uZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogUnVsZURvbWFpbnM7XG5cbiAgLyoqXG4gICAqIGlmIGBmYWxzZWAsIGl0IGRpc2FibGVzIHRoZSBmZWF0dXJlIGFuZCB0aGUgbGludGVyIHdvbid0IGJlIGV4ZWN1dGVkLiBgdHJ1ZWAgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBUaGUgYW5hbHl6ZXIgd2lsbCBoYW5kbGUgb25seSB0aG9zZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI2luY2x1ZGVzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzXG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBSdWxlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZG9tYWlucyc6IHRvSnNvbl9SdWxlRG9tYWlucyhvYmouZG9tYWlucyksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5jbHVkZXMnOiBvYmouaW5jbHVkZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdydWxlcyc6IHRvSnNvbl9SdWxlcyhvYmoucnVsZXMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZVBhdHRlcm4ge1xuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDU1MgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jY3NzXG4gICAqL1xuICByZWFkb25seSBjc3M/OiBDc3NDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgZmlsZXN5c3RlbVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM/OiBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcmFwaHFsIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2dyYXBocWxcbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWw/OiBHcmFwaHFsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEdyaXRRTCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNncml0XG4gICAqL1xuICByZWFkb25seSBncml0PzogR3JpdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcml0UUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaHRtbD86IEh0bWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gQmlvbWUgd2lsbCBpbmNsdWRlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jamF2YXNjcmlwdFxuICAgKi9cbiAgcmVhZG9ubHkgamF2YXNjcmlwdD86IEpzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4janNvblxuICAgKi9cbiAgcmVhZG9ubHkganNvbj86IEpzb25Db25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSnNvbiBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYWRkaXRpb25hbCBwbHVnaW5zXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI3BsdWdpbnNcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM/OiBhbnlbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnT3ZlcnJpZGVQYXR0ZXJuJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fT3ZlcnJpZGVQYXR0ZXJuKG9iajogT3ZlcnJpZGVQYXR0ZXJuIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnY3NzJzogdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqLmNzcyksXG4gICAgJ2ZpbGVzJzogdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iai5maWxlcyksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9PdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dyYXBocWwnOiB0b0pzb25fR3JhcGhxbENvbmZpZ3VyYXRpb24ob2JqLmdyYXBocWwpLFxuICAgICdncml0JzogdG9Kc29uX0dyaXRDb25maWd1cmF0aW9uKG9iai5ncml0KSxcbiAgICAnaHRtbCc6IHRvSnNvbl9IdG1sQ29uZmlndXJhdGlvbihvYmouaHRtbCksXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX092ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGx1Z2lucyc6IG9iai5wbHVnaW5zPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIGZvciBpbnRlZ3JhdGluZyBCaW9tZSB3aXRoIHZlcnNpb24gY29udHJvbC5cbiAqXG4gKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWY3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIGNvbnRyb2wgY2xpZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jY2xpZW50S2luZFxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50S2luZD86IFZjc0NsaWVudEtpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgZGVmYXVsdCBicmFuY2guXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiNkZWZhdWx0QnJhbmNoXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIEJpb21lIHNob3VsZCBpbnRlZ3JhdGUgd2l0aCB0aGUgdmVyc2lvbiBjb250cm9sIGNsaWVudC5cbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgQmlvbWUgY2hlY2tzIGZvciB2ZXJzaW9uIGNvbnRyb2wgZmlsZXMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBgYmlvbWUuanNvbmAgb3IgYGJpb21lLmpzb25jYC4gSWYgbm8gY29uZmlndXJhdGlvbiBpc1xuICAgKiBmb3VuZCwgQmlvbWUgdXNlcyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICpcbiAgICogSWYgbmVpdGhlciBkaXJlY3RvcnkgaXMgYXZhaWxhYmxlLCBCaW9tZSBkaXNhYmxlcyB2ZXJzaW9uIGNvbnRyb2wgaW50ZWdyYXRpb24gYW5kIGVtaXRzIGFcbiAgICogZGlhZ25vc3RpYy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBiaW9tZS5qc29uYCBvciBgYmlvbWUuanNvbmNgLiBJZiBubyBjb25maWd1cmF0aW9uIGlzXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiNyb290XG4gICAqL1xuICByZWFkb25seSByb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgQmlvbWUgaWdub3JlcyBmaWxlcyBsaXN0ZWQgaW4gYC5naXRpZ25vcmVgLCBgLmlnbm9yZWAsIGFuZCBHaXQncyBsb2NhbFxuICAgKiBleGNsdWRlIGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiN1c2VJZ25vcmVGaWxlXG4gICAqL1xuICByZWFkb25seSB1c2VJZ25vcmVGaWxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVmNzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1Zjc0NvbmZpZ3VyYXRpb24ob2JqOiBWY3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY2xpZW50S2luZCc6IG9iai5jbGllbnRLaW5kLFxuICAgICdkZWZhdWx0QnJhbmNoJzogb2JqLmRlZmF1bHRCcmFuY2gsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAncm9vdCc6IG9iai5yb290LFxuICAgICd1c2VJZ25vcmVGaWxlJzogb2JqLnVzZUlnbm9yZUZpbGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEFjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBhY3Rpb25zIHByZXNldCB0byB1c2UuXG4gICAqXG4gICAqIEBzY2hlbWEgQWN0aW9ucyNwcmVzZXRcbiAgICovXG4gIHJlYWRvbmx5IHByZXNldD86IFByZXNldENvbmZpZztcblxuICAvKipcbiAgICogSXQgZW5hYmxlcyB0aGUgYXNzaXN0IGFjdGlvbnMgcmVjb21tZW5kZWQgYnkgQmlvbWUuIGB0cnVlYCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAc2NoZW1hIEFjdGlvbnMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBBY3Rpb25zI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogU291cmNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBY3Rpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQWN0aW9ucyhvYmo6IEFjdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwcmVzZXQnOiBvYmoucHJlc2V0LFxuICAgICdyZWNvbW1lbmRlZCc6IG9iai5yZWNvbW1lbmRlZCxcbiAgICAnc291cmNlJzogdG9Kc29uX1NvdXJjZShvYmouc291cmNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IENTUyBhc3Npc3QgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIENzc0Fzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGFzc2lzdCBhY3Rpb25zIGZvciBDU1MgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBDc3NBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIENTUyBmb3JtYXR0ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbnNpZGUgQ1NTIHBhcmVudGhlc2VzIGFuZCBzcXVhcmUgYnJhY2tldHMgd2hlbiB0aGVpciBjb250ZW50IGZpdHMgb24gb25lXG4gICAqIGxpbmUuIFdoZW4gZW5hYmxlZCwgYHJnYigwLCAwLCAwKWAgYmVjb21lcyBgcmdiKCAwLCAwLCAwIClgIGFuZCBgW2RhdGEtYXR0cl1gIGJlY29tZXNcbiAgICogYFsgZGF0YS1hdHRyIF1gLiBFbXB0eSBkZWxpbWl0ZXJzIGFyZSB1bmNoYW5nZWQuXG4gICAqXG4gICAqIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGRlbGltaXRlciBzcGFjaW5nIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNkZWxpbWl0ZXJTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBkZWxpbWl0ZXJTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGZvcm1hdHRlciBmb3IgQ1NTIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIENTUyBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiBpbmRlbnRhdGlvbiBzdHlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBDU1MgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZVxuICAgKiBnbG9iYWwgaW5kZW50YXRpb24gd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIENTUyBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBsaW5lIHdpZHRoIGZvciBDU1MgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWxcbiAgICogbGluZSB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBDU1MgY29kZS4gRGVmYXVsdHMgdG8gYGRvdWJsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZWAuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIHRyYWlsaW5nIG5ld2xpbmUgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVsaW1pdGVyU3BhY2luZyc6IG9iai5kZWxpbWl0ZXJTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgQ1NTIGxpbnRlciBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGxpbnRlciBmb3IgQ1NTIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0xpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Nzc0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Dc3NMaW50ZXJDb25maWd1cmF0aW9uKG9iajogQ3NzTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBDU1MgcGFyc2VyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbGxvd3MgY29tbWVudHMgdG8gYXBwZWFyIG9uIGluY29ycmVjdCBsaW5lcyBpbiBgLmNzc2AgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd1dyb25nTGluZUNvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd1dyb25nTGluZUNvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBwYXJzaW5nIG9mIENTUyBNb2R1bGVzLXNwZWNpZmljIGZlYXR1cmVzLiBFbmFibGUgdGhpcyBmZWF0dXJlIG9ubHlcbiAgICogd2hlbiB5b3VyIGZpbGVzIGRvbid0IGVuZCBpbiBgLm1vZHVsZS5jc3NgLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb24jY3NzTW9kdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzTW9kdWxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBvZiBUYWlsd2luZCBDU1MgNC4wIGRpcmVjdGl2ZXMgYW5kIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI3RhaWx3aW5kRGlyZWN0aXZlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFpbHdpbmREaXJlY3RpdmVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsb3dXcm9uZ0xpbmVDb21tZW50cyc6IG9iai5hbGxvd1dyb25nTGluZUNvbW1lbnRzLFxuICAgICdjc3NNb2R1bGVzJzogb2JqLmNzc01vZHVsZXMsXG4gICAgJ3RhaWx3aW5kRGlyZWN0aXZlcyc6IG9iai50YWlsd2luZERpcmVjdGl2ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEF0dHJpYnV0ZVBvc2l0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIEF0dHJpYnV0ZVBvc2l0aW9uIHtcbiAgLyoqIGF1dG8gKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuICAvKiogbXVsdGlsaW5lICovXG4gIE1VTFRJTElORSA9IFwibXVsdGlsaW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBFeHBhbmRcbiAqL1xuZXhwb3J0IGVudW0gRXhwYW5kIHtcbiAgLyoqIE9iamVjdHMgYXJlIGV4cGFuZGVkIHdoZW4gdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIGxlYWRpbmcgbmV3bGluZS4gQXJyYXlzIHJlbWFpbiBvbiBvbmVcbmxpbmUgaWYgdGhleSBmaXQuIChhdXRvKSAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG4gIC8qKiBPYmplY3RzIGFuZCBhcnJheXMgYXJlIGFsd2F5cyBleHBhbmRlZC4gKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIE9iamVjdHMgYW5kIGFycmF5cyByZW1haW4gb24gb25lIGxpbmUgaWYgdGhleSBmaXQuIChuZXZlcikgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBJbmRlbnRTdHlsZVxuICovXG5leHBvcnQgZW51bSBJbmRlbnRTdHlsZSB7XG4gIC8qKiBJbmRlbnQgd2l0aCBUYWIgKHRhYikgKi9cbiAgVEFCID0gXCJ0YWJcIixcbiAgLyoqIEluZGVudCB3aXRoIFNwYWNlIChzcGFjZSkgKi9cbiAgU1BBQ0UgPSBcInNwYWNlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBMaW5lRW5kaW5nXG4gKi9cbmV4cG9ydCBlbnVtIExpbmVFbmRpbmcge1xuICAvKiogTGluZSBGZWVkIG9ubHkgKFxcbiksIGNvbW1vbiBvbiBMaW51eCBhbmQgbWFjT1MgYXMgd2VsbCBhcyBpbnNpZGUgZ2l0IHJlcG9zIChsZikgKi9cbiAgTEYgPSBcImxmXCIsXG4gIC8qKiBDYXJyaWFnZSBSZXR1cm4gKyBMaW5lIEZlZWQgY2hhcmFjdGVycyAoXFxyXFxuKSwgY29tbW9uIG9uIFdpbmRvd3MgKGNybGYpICovXG4gIENSTEYgPSBcImNybGZcIixcbiAgLyoqIENhcnJpYWdlIFJldHVybiBjaGFyYWN0ZXIgb25seSAoXFxyKSwgdXNlZCB2ZXJ5IHJhcmVseSAoY3IpICovXG4gIENSID0gXCJjclwiLFxuICAvKiogQXV0b21hdGljYWxseSB1c2UgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMgKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBHcmFwaFFMIGFzc2lzdCBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9scyBhc3Npc3QgYWN0aW9ucyBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEdyYXBoUUwgZm9ybWF0dGVyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBpbnNpZGUgYnJhY2VzIGluIG9iamVjdCBsaXRlcmFscy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWxcbiAgICogYnJhY2tldCBzcGFjaW5nIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBpbmRlbnRhdGlvblxuICAgKiB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBsaW5lIHdpZHRoIGZvciBHcmFwaFFMIGZpbGVzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBsaW5lIHdpZHRoLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBHcmFwaFFMIGNvZGUuIERlZmF1bHRzIHRvIGBkb3VibGVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGVgLlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWxcbiAgICogdHJhaWxpbmcgbmV3bGluZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3F1b3RlU3R5bGUnOiBvYmoucXVvdGVTdHlsZSxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBHcmFwaFFMIGxpbnRlciBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgbGludGVyIGZvciBHcmFwaFFMIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBHcml0UUwgYXNzaXN0IGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcml0QXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGFzc2lzdCBhY3Rpb25zIGZvciBHcml0UUwgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBHcml0QXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBHcml0UUwgZm9ybWF0dGVyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBmb3JtYXR0ZXIgZm9yIEdyaXRRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEdyaXRRTCBmaWxlcy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgaW5kZW50YXRpb24gc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnRhdGlvbiB3aWR0aCBhcHBsaWVkIHRvIEdyaXRRTCBmaWxlcy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgaW5kZW50YXRpb25cbiAgICogd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBlbmRpbmcgYXBwbGllZCB0byBHcml0UUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBsaW5lIHdpZHRoIGZvciBHcml0UUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiB0cmFpbGluZyBuZXdsaW5lIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEdyaXRRTCBsaW50ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEdyaXRMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGxpbnRlciBmb3IgR3JpdFFMIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0TGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRMaW50ZXJDb25maWd1cmF0aW9uKG9iajogR3JpdExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBIVE1MIGFzc2lzdCBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9scyBhc3Npc3QgYWN0aW9ucyBmb3IgSFRNTCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxBc3Npc3RDb25maWd1cmF0aW9uKG9iajogSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgSFRNTCBmb3JtYXR0ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBIVE1MIGVsZW1lbnRzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVcbiAgICogcG9zaXRpb24gc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwbGFjZSB0aGUgY2xvc2luZyBicmFja2V0IG9mIGEgbXVsdGlsaW5lIEhUTUwgdGFnIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZVxuICAgKiBpbnN0ZWFkIG9mIG9uIGl0cyBvd24gbGluZS4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgYGJyYWNrZXRTYW1lTGluZWAgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U2FtZUxpbmVcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTYW1lTGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBmb3JtYXR0ZXIgZm9yIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmRlbnQgYDxzY3JpcHQ+YCBhbmQgYDxzdHlsZT5gIHRhZ3MgaW4gSFRNTCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U2NyaXB0QW5kU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNjcmlwdEFuZFN0eWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWxcbiAgICogaW5kZW50YXRpb24gc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnRhdGlvbiB3aWR0aCBhcHBsaWVkIHRvIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZVxuICAgKiBnbG9iYWwgaW5kZW50YXRpb24gd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBlbmRpbmcgYXBwbGllZCB0byBIVE1MIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBsaW5lIHdpZHRoIGZvciBIVE1MIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGxpbmUgd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdm9pZCBlbGVtZW50cyBhcmUgc2VsZi1jbG9zZWQuIERlZmF1bHRzIHRvIGBuZXZlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IG5ldmVyYC5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNzZWxmQ2xvc2VWb2lkRWxlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNlbGZDbG9zZVZvaWRFbGVtZW50cz86IFNlbGZDbG9zZVZvaWRFbGVtZW50cztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIFVubGlrZSBvdGhlciBsYW5ndWFnZS1zcGVjaWZpY1xuICAgKiB0cmFpbGluZyBuZXdsaW5lIHNldHRpbmdzLCB0aGlzIG9wdGlvbiBkZWZhdWx0cyB0byBgdHJ1ZWAgaW5zdGVhZCBvZiBpbmhlcml0aW5nIHRoZSBnbG9iYWxcbiAgICogc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWNjb3VudCBmb3Igd2hpdGVzcGFjZSBzZW5zaXRpdml0eSB3aGVuIGZvcm1hdHRpbmcgSFRNTCBhbmQgbGFuZ3VhZ2VzIHRoYXRcbiAgICogZXh0ZW5kIGl0LiBEZWZhdWx0cyB0byBgY3NzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgY3NzYC5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN3aGl0ZXNwYWNlU2Vuc2l0aXZpdHlcbiAgICovXG4gIHJlYWRvbmx5IHdoaXRlc3BhY2VTZW5zaXRpdml0eT86IFdoaXRlc3BhY2VTZW5zaXRpdml0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5kZW50U2NyaXB0QW5kU3R5bGUnOiBvYmouaW5kZW50U2NyaXB0QW5kU3R5bGUsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdzZWxmQ2xvc2VWb2lkRWxlbWVudHMnOiBvYmouc2VsZkNsb3NlVm9pZEVsZW1lbnRzLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICAgICd3aGl0ZXNwYWNlU2Vuc2l0aXZpdHknOiBvYmoud2hpdGVzcGFjZVNlbnNpdGl2aXR5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEhUTUwgbGludGVyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBIdG1sTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBsaW50ZXIgZm9yIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEhUTUwgcGFyc2VyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBkb3VibGUgdGV4dCBleHByZXNzaW9ucyBzdWNoIGFzIGB7eyBleHByZXNzaW9uIH19YCBpbnNpZGUgYC5odG1sYCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiNpbnRlcnBvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBpbnRlcnBvbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBwYXJzaW5nIFZ1ZSBzeW50YXggKGB2LWlmYCwgYHYtYmluZGAsIGV0Yy4pIGluIGAuaHRtbGAgZmlsZXMuIEVuYWJsaW5nIHRoaXMgb3B0aW9uXG4gICAqIGFsc28gZW5hYmxlcyBgaW50ZXJwb2xhdGlvbmAgaW1wbGljaXRseS5cbiAgICpcbiAgICogQmlvbWUgd2lsbCBhbHJlYWR5IGF1dG9tYXRpY2FsbHkgZW5hYmxlIFZ1ZSBwYXJzaW5nIGluIGAudnVlYCBmaWxlcywgc28geW91IHByb2JhYmx5IGRvbid0IG5lZWRcbiAgICogdG8gZW5hYmxlIHRoaXMgb3B0aW9uLiBUaGlzIG9ubHkgYWZmZWN0cyBgLmh0bWxgIGZpbGVzLCBhbmQgZG9lcyBub3QgY2hhbmdlIGhvdyBgLnZ1ZWAsIGAuc3ZlbHRlYCxcbiAgICogb3IgYC5hc3Ryb2AgZmlsZXMgYXJlIHBhcnNlZC5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiN2dWVcbiAgICovXG4gIHJlYWRvbmx5IHZ1ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxQYXJzZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ludGVycG9sYXRpb24nOiBvYmouaW50ZXJwb2xhdGlvbixcbiAgICAndnVlJzogb2JqLnZ1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFzc2lzdCBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKYXZhU2NyaXB0IGFzc2lzdFxuICpcbiAqIEBzY2hlbWEgSnNBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGFzc2lzdCBhY3Rpb25zIGZvciBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0Fzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBKc0Fzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBGb3JtYXR0aW5nIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBwYXJlbnRoZXNlcyBhcm91bmQgYXJyb3cgZnVuY3Rpb24gcGFyYW1ldGVycy4gRGVmYXVsdHMgdG8gYGFsd2F5c2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsd2F5c2AuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Fycm93UGFyZW50aGVzZXNcbiAgICovXG4gIHJlYWRvbmx5IGFycm93UGFyZW50aGVzZXM/OiBBcnJvd1BhcmVudGhlc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlIGluIEpTWCBlbGVtZW50cy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgYXR0cmlidXRlXG4gICAqIHBvc2l0aW9uIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2F0dHJpYnV0ZVBvc2l0aW9uXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVQb3NpdGlvbj86IEF0dHJpYnV0ZVBvc2l0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGh1ZyB0aGUgY2xvc2luZyBicmFja2V0IG9mIG11bHRpbGluZSBIVE1ML0pTWCB0YWdzIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSxcbiAgICogcmF0aGVyIHRoYW4gYmVpbmcgYWxvbmUgb24gdGhlIGZvbGxvd2luZyBsaW5lLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBicmFja2V0XG4gICAqIHBsYWNlbWVudCBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U2FtZUxpbmVcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTYW1lTGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBpbnNpZGUgYnJhY2VzIGluIG9iamVjdCBsaXRlcmFscy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWxcbiAgICogYnJhY2tldCBzcGFjaW5nIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbW1lZGlhdGVseSBpbnNpZGUgc3VwcG9ydGVkIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZGVsaW1pdGVycyB3aGVuIHRoZWlyXG4gICAqIGNvbnRlbnQgZml0cyBvbiBvbmUgbGluZS4gSXQgZG9lc24ndCBhZGQgc3BhY2VzIGJlZm9yZSBvcGVuaW5nIGRlbGltaXRlcnMgb3IgaW5zaWRlIGVtcHR5XG4gICAqIGRlbGltaXRlcnMuXG4gICAqXG4gICAqIEl0IGFmZmVjdHMgcGFyZW50aGVzZXMsIHNxdWFyZSBicmFja2V0cywgdGVtcGxhdGUgaW50ZXJwb2xhdGlvbnMsIFR5cGVTY3JpcHQgYW5nbGUgYnJhY2tldHMsXG4gICAqIEpTWCBleHByZXNzaW9uIGJyYWNlcywgYW5kIGxvZ2ljYWwgTk9ULiBJbiBvcGVyYXRvciBjaGFpbnMsIG9ubHkgdGhlIGZpbmFsIG9wZXJhdG9yIHJlY2VpdmVzXG4gICAqIGEgZm9sbG93aW5nIHNwYWNlLlxuICAgKlxuICAgKiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBkZWxpbWl0ZXIgc3BhY2luZyBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNkZWxpbWl0ZXJTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBkZWxpbWl0ZXJTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGZvcm1hdHRlciBmb3IgSmF2YVNjcmlwdCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlcyB0aGUgc2FtZSBgYXV0b2AsIGBhbHdheXNgLCBhbmQgYG5ldmVyYCBiZWhhdmlvciBhcyB0aGUgZ2xvYmFsIGV4cGFuc2lvbiBzZXR0aW5nLlxuICAgKlxuICAgKiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBleHBhbnNpb24gc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIGluZGVudGF0aW9uIHdpZHRoIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCxcbiAgICogaW5oZXJpdHMgdGhlIGdsb2JhbCBpbmRlbnRhdGlvbiB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBKU1guIERlZmF1bHRzIHRvIGBkb3VibGVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGVgLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNqc3hRdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBqc3hRdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogVGhlIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlXG4gICAqIGdsb2JhbCBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGxpbmUgd2lkdGggYXBwbGllZCB0byBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LFxuICAgKiBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGJyZWFraW5nIGJpbmFyeSBleHByZXNzaW9ucyBpbnRvIG11bHRpcGxlIGxpbmVzLCB3aGV0aGVyIHRvIGJyZWFrIHRoZW0gYmVmb3JlIG9yIGFmdGVyXG4gICAqIHRoZSBiaW5hcnkgb3BlcmF0b3IuIERlZmF1bHRzIHRvIGBhZnRlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFmdGVyYC5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jb3BlcmF0b3JMaW5lYnJlYWtcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdG9yTGluZWJyZWFrPzogT3BlcmF0b3JMaW5lYnJlYWs7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZW4gb2JqZWN0IHByb3BlcnRpZXMgYXJlIHF1b3RlZC4gRGVmYXVsdHMgdG8gYGFzTmVlZGVkYCBpbiBjb25maWd1cmF0aW9uXG4gICAqIChgYXMtbmVlZGVkYCBvbiB0aGUgQ0xJKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYXNOZWVkZWRgIGluIGNvbmZpZ3VyYXRpb25cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBxdW90ZVByb3BlcnRpZXM/OiBRdW90ZVByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHF1b3RlcyB1c2VkIGluIEphdmFTY3JpcHQgY29kZS4gRGVmYXVsdHMgdG8gYGRvdWJsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZWAuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBQcmludHMgc2VtaWNvbG9ucyBhZnRlciBldmVyeSBzdGF0ZW1lbnQgb3Igb25seSB3aGVyZSBuZWVkZWQgdG8gYXZvaWQgYXV0b21hdGljIHNlbWljb2xvblxuICAgKiBpbnNlcnRpb24gaGF6YXJkcy4gRGVmYXVsdHMgdG8gYGFsd2F5c2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsd2F5c2AuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3NlbWljb2xvbnNcbiAgICovXG4gIHJlYWRvbmx5IHNlbWljb2xvbnM/OiBTZW1pY29sb25zO1xuXG4gIC8qKlxuICAgKiBQcmludHMgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpbGluZSBjb21tYS1zZXBhcmF0ZWQgc3RydWN0dXJlcy4gRGVmYXVsdHNcbiAgICogdG8gYGFsbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsbGAuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiB0cmFpbGluZyBuZXdsaW5lIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXJyb3dQYXJlbnRoZXNlcyc6IG9iai5hcnJvd1BhcmVudGhlc2VzLFxuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2RlbGltaXRlclNwYWNpbmcnOiBvYmouZGVsaW1pdGVyU3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2pzeFF1b3RlU3R5bGUnOiBvYmouanN4UXVvdGVTdHlsZSxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdvcGVyYXRvckxpbmVicmVhayc6IG9iai5vcGVyYXRvckxpbmVicmVhayxcbiAgICAncXVvdGVQcm9wZXJ0aWVzJzogb2JqLnF1b3RlUHJvcGVydGllcyxcbiAgICAncXVvdGVTdHlsZSc6IG9iai5xdW90ZVN0eWxlLFxuICAgICdzZW1pY29sb25zJzogb2JqLnNlbWljb2xvbnMsXG4gICAgJ3RyYWlsaW5nQ29tbWFzJzogb2JqLnRyYWlsaW5nQ29tbWFzLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIHJ1bnRpbWUgb3IgdHJhbnNmb3JtYXRpb24gdXNlZCBmb3IgaW50ZXJwcmV0aW5nIEpTWC5cbiAqXG4gKiBAc2NoZW1hIEpzeFJ1bnRpbWVcbiAqL1xuZXhwb3J0IGVudW0gSnN4UnVudGltZSB7XG4gIC8qKiBJbmRpY2F0ZXMgYSBtb2Rlcm4gb3IgbmF0aXZlIEpTWCBlbnZpcm9ubWVudCwgdGhhdCBkb2Vzbid0IHJlcXVpcmVcbnNwZWNpYWwgaGFuZGxpbmcgYnkgQmlvbWUuICh0cmFuc3BhcmVudCkgKi9cbiAgVFJBTlNQQVJFTlQgPSBcInRyYW5zcGFyZW50XCIsXG4gIC8qKiBJbmRpY2F0ZXMgYSBjbGFzc2ljIFJlYWN0IGVudmlyb25tZW50IHRoYXQgcmVxdWlyZXMgdGhlIGBSZWFjdGAgaW1wb3J0LlxuXG5Db3JyZXNwb25kcyB0byB0aGUgYHJlYWN0YCB2YWx1ZSBmb3IgdGhlIGBqc3hgIG9wdGlvbiBpbiBUeXBlU2NyaXB0J3NcbmB0c2NvbmZpZy5qc29uYC5cblxuVGhpcyBvcHRpb24gc2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGlmIHlvdSBjYW5ub3QgdXBncmFkZSB0byBhIFJlYWN0XG52ZXJzaW9uIHRoYXQgc3VwcG9ydHMgdGhlIG5ldyBKU1ggcnVudGltZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXRcbnRoZSBvbGQgdnMuIG5ldyBKU1ggcnVudGltZSwgcGxlYXNlIHNlZTpcbjxodHRwczovL2xlZ2FjeS5yZWFjdGpzLm9yZy9ibG9nLzIwMjAvMDkvMjIvaW50cm9kdWNpbmctdGhlLW5ldy1qc3gtdHJhbnNmb3JtLmh0bWw+IChyZWFjdENsYXNzaWMpICovXG4gIFJFQUNUX0NMQVNTSUMgPSBcInJlYWN0Q2xhc3NpY1wiLFxufVxuXG4vKipcbiAqIExpbnRlciBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKYXZhU2NyaXB0IGxpbnRlclxuICpcbiAqIEBzY2hlbWEgSnNMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBsaW50ZXIgZm9yIEphdmFTY3JpcHQgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBKc0xpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEpzTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBKYXZhU2NyaXB0IHBhcnNlciBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBvZiBHcml0IG1ldGF2YXJpYWJsZXMuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBKc1BhcnNlckNvbmZpZ3VyYXRpb24jZ3JpdE1ldGF2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGdyaXRNZXRhdmFyaWFibGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBmaWxlcyBzdWNoIGFzIGAuanNgLCBgLm1qc2AsIGFuZCBgLmNqc2AgbWF5IGNvbnRhaW4gSlNYIHN5bnRheC4gRGVmYXVsdHMgdG9cbiAgICogYHRydWVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlYC5cbiAgICogQHNjaGVtYSBKc1BhcnNlckNvbmZpZ3VyYXRpb24janN4RXZlcnl3aGVyZVxuICAgKi9cbiAgcmVhZG9ubHkganN4RXZlcnl3aGVyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEl0IGVuYWJsZXMgdGhlIGV4cGVyaW1lbnRhbCBhbmQgdW5zYWZlIHBhcnNpbmcgb2YgcGFyYW1ldGVyIGRlY29yYXRvcnNcbiAgICpcbiAgICogVGhlc2UgZGVjb3JhdG9ycyBiZWxvbmcgdG8gYW4gb2xkIHByb3Bvc2FsLCBhbmQgdGhleSBhcmUgc3ViamVjdCB0byBjaGFuZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI3Vuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEpzUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2dyaXRNZXRhdmFyaWFibGVzJzogb2JqLmdyaXRNZXRhdmFyaWFibGVzLFxuICAgICdqc3hFdmVyeXdoZXJlJzogb2JqLmpzeEV2ZXJ5d2hlcmUsXG4gICAgJ3Vuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkJzogb2JqLnVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogUmVzb2x2ZXIgb3B0aW9ucyBzcGVjaWZpYyB0byBKYXZhU2NyaXB0IGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc1Jlc29sdmVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzUmVzb2x2ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcG5wbSB3b3Jrc3BhY2UgY2F0YWxvZyByZXNvbHV0aW9uIGZvciBKYXZhU2NyaXB0IHBhY2thZ2UgbWFuaWZlc3RzLlxuICAgKlxuICAgKiBPcHQtaW46XG4gICAqIC0gU2V0IGBqYXZhc2NyaXB0LnJlc29sdmVyLmV4cGVyaW1lbnRhbFBucG1DYXRhbG9nc2AgdG8gYHRydWVgLlxuICAgKlxuICAgKiBTY29wZTpcbiAgICogLSBSZXNvbHZlcyBgY2F0YWxvZzpgIGFuZCBgY2F0YWxvZzo8bmFtZT5gIGRlcGVuZGVuY3kgdmVyc2lvbnMgZnJvbVxuICAgKiBgcGFja2FnZS5qc29uYC5cbiAgICogLSBBcHBsaWVzIHRvIGBkZXBlbmRlbmNpZXNgLCBgZGV2RGVwZW5kZW5jaWVzYCwgYW5kIGBwZWVyRGVwZW5kZW5jaWVzYC5cbiAgICpcbiAgICogRmFpbC1zYWZlIGJlaGF2aW9yOlxuICAgKiAtIElmIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBpcyBtaXNzaW5nLCB1bnJlYWRhYmxlLCBvciBjYW5ub3QgYmUgcGFyc2VkLFxuICAgKiBCaW9tZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW9yIChhcyBpZiB0aGlzIG9wdGlvblxuICAgKiB3ZXJlIGRpc2FibGVkKS5cbiAgICogLSBVbmtub3duIGtleXMgYW5kIHVuc3VwcG9ydGVkIHZhbHVlIHNoYXBlcyBpbiBgcG5wbS13b3Jrc3BhY2UueWFtbGAgYXJlXG4gICAqIGlnbm9yZWQuXG4gICAqXG4gICAqIExpbWl0YXRpb25zOlxuICAgKiAtIE9ubHkgYHBucG0td29ya3NwYWNlLnlhbWxgIGlzIHJlYWQuXG4gICAqIC0gQmlvbWUgb25seSByZWFkcyB0b3AtbGV2ZWwgYGNhdGFsb2dgIC8gYGNhdGFsb2dzYCBtYXBwaW5ncyBhbmQgc2NhbGFyXG4gICAqIHN0cmluZyBlbnRyaWVzLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSnNSZXNvbHZlckNvbmZpZ3VyYXRpb24jZXhwZXJpbWVudGFsUG5wbUNhdGFsb2dzXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxQbnBtQ2F0YWxvZ3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc1Jlc29sdmVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzUmVzb2x2ZXJDb25maWd1cmF0aW9uKG9iajogSnNSZXNvbHZlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdleHBlcmltZW50YWxQbnBtQ2F0YWxvZ3MnOiBvYmouZXhwZXJpbWVudGFsUG5wbUNhdGFsb2dzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQXNzaXN0IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEpTT04gbGludGVyXG4gKlxuICogQHNjaGVtYSBKc29uQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Bc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGFzc2lzdCBhY3Rpb25zIGZvciBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzb25Bc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgaW5zaWRlIGJyYWNlcyBpbiBvYmplY3QgbGl0ZXJhbHMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGJyYWNrZXQgc3BhY2luZyBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbnNpZGUgSlNPTiBzcXVhcmUgYnJhY2tldHMgd2hlbiB0aGVpciBjb250ZW50IGZpdHMgb24gb25lIGxpbmUuIFdoZW5cbiAgICogZW5hYmxlZCwgYFsxLCAyLCAzXWAgYmVjb21lcyBgWyAxLCAyLCAzIF1gLiBFbXB0eSBicmFja2V0cyBhcmUgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBkZWxpbWl0ZXIgc3BhY2luZyBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2RlbGltaXRlclNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGRlbGltaXRlclNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgZm9ybWF0dGVyIGZvciBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZXMgdGhlIHNhbWUgYGF1dG9gLCBgYWx3YXlzYCwgYW5kIGBuZXZlcmAgYmVoYXZpb3IgYXMgdGhlIGdsb2JhbCBleHBhbnNpb24gc2V0dGluZy5cbiAgICpcbiAgICogSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgZXhwYW5zaW9uIHNldHRpbmcuXG4gICAqXG4gICAqIFdoZW4gZm9ybWF0dGluZyBgcGFja2FnZS5qc29uYCwgQmlvbWUgdXNlcyBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGluZGVudGF0aW9uIHdpZHRoLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSlNPTiBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbGluZSB3aWR0aCBhcHBsaWVkIHRvIEpTT04gYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZVxuICAgKiBnbG9iYWwgbGluZSB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogUHJpbnRzIHRyYWlsaW5nIGNvbW1hcyB3aGVyZXZlciBwb3NzaWJsZSBpbiBtdWx0aWxpbmUgY29tbWEtc2VwYXJhdGVkIHN0cnVjdHVyZXMuIERlZmF1bHRzXG4gICAqIHRvIGBub25lYC5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZWAuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdDb21tYXNcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nQ29tbWFzPzogSnNvblRyYWlsaW5nQ29tbWFzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWxcbiAgICogdHJhaWxpbmcgbmV3bGluZSBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2RlbGltaXRlclNwYWNpbmcnOiBvYmouZGVsaW1pdGVyU3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBMaW50ZXIgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSlNPTiBsaW50ZXJcbiAqXG4gKiBAc2NoZW1hIEpzb25MaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGxpbnRlciBmb3IgSlNPTiBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25MaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25MaW50ZXJDb25maWd1cmF0aW9uKG9iajogSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgSlNPTiBwYXJzZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEpzb25QYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvblBhcnNlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQWxsb3dzIHBhcnNpbmcgY29tbWVudHMgaW4gYC5qc29uYCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd0NvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd0NvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3dzIHBhcnNpbmcgdHJhaWxpbmcgY29tbWFzIGluIGAuanNvbmAgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvblBhcnNlckNvbmZpZ3VyYXRpb24jYWxsb3dUcmFpbGluZ0NvbW1hc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dUcmFpbGluZ0NvbW1hcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzb25QYXJzZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNvblBhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FsbG93Q29tbWVudHMnOiBvYmouYWxsb3dDb21tZW50cyxcbiAgICAnYWxsb3dUcmFpbGluZ0NvbW1hcyc6IG9iai5hbGxvd1RyYWlsaW5nQ29tbWFzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBSdWxlRG9tYWluc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVEb21haW5zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjYXN0cm9cbiAgICovXG4gIHJlYWRvbmx5IGFzdHJvPzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI2RyaXp6bGVcbiAgICovXG4gIHJlYWRvbmx5IGRyaXp6bGU/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjbmV4dFxuICAgKi9cbiAgcmVhZG9ubHkgbmV4dD86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNwbGF5d3JpZ2h0XG4gICAqL1xuICByZWFkb25seSBwbGF5d3JpZ2h0PzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3Byb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3Q/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjcXdpa1xuICAgKi9cbiAgcmVhZG9ubHkgcXdpaz86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNyZWFjdFxuICAgKi9cbiAgcmVhZG9ubHkgcmVhY3Q/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjcmVhY3ROYXRpdmVcbiAgICovXG4gIHJlYWRvbmx5IHJlYWN0TmF0aXZlPzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3NvbGlkXG4gICAqL1xuICByZWFkb25seSBzb2xpZD86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNzdmVsdGVcbiAgICovXG4gIHJlYWRvbmx5IHN2ZWx0ZT86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyN0YWlsd2luZFxuICAgKi9cbiAgcmVhZG9ubHkgdGFpbHdpbmQ/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjdGVzdFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdD86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyN0dXJib3JlcG9cbiAgICovXG4gIHJlYWRvbmx5IHR1cmJvcmVwbz86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyN0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjdnVlXG4gICAqL1xuICByZWFkb25seSB2dWU/OiBSdWxlRG9tYWluVmFsdWU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1J1bGVEb21haW5zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUnVsZURvbWFpbnMob2JqOiBSdWxlRG9tYWlucyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FzdHJvJzogb2JqLmFzdHJvLFxuICAgICdkcml6emxlJzogb2JqLmRyaXp6bGUsXG4gICAgJ25leHQnOiBvYmoubmV4dCxcbiAgICAncGxheXdyaWdodCc6IG9iai5wbGF5d3JpZ2h0LFxuICAgICdwcm9qZWN0Jzogb2JqLnByb2plY3QsXG4gICAgJ3F3aWsnOiBvYmoucXdpayxcbiAgICAncmVhY3QnOiBvYmoucmVhY3QsXG4gICAgJ3JlYWN0TmF0aXZlJzogb2JqLnJlYWN0TmF0aXZlLFxuICAgICdzb2xpZCc6IG9iai5zb2xpZCxcbiAgICAnc3ZlbHRlJzogb2JqLnN2ZWx0ZSxcbiAgICAndGFpbHdpbmQnOiBvYmoudGFpbHdpbmQsXG4gICAgJ3Rlc3QnOiBvYmoudGVzdCxcbiAgICAndHVyYm9yZXBvJzogb2JqLnR1cmJvcmVwbyxcbiAgICAndHlwZXMnOiBvYmoudHlwZXMsXG4gICAgJ3Z1ZSc6IG9iai52dWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNhMTF5XG4gICAqL1xuICByZWFkb25seSBhMTFZPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI2NvbXBsZXhpdHlcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBsZXhpdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjY29ycmVjdG5lc3NcbiAgICovXG4gIHJlYWRvbmx5IGNvcnJlY3RuZXNzPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI251cnNlcnlcbiAgICovXG4gIHJlYWRvbmx5IG51cnNlcnk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjcGVyZm9ybWFuY2VcbiAgICovXG4gIHJlYWRvbmx5IHBlcmZvcm1hbmNlPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgcnVsZSBwcmVzZXRzIHRvIHVzZS5cbiAgICpcbiAgICogQHNjaGVtYSBSdWxlcyNwcmVzZXRcbiAgICovXG4gIHJlYWRvbmx5IHByZXNldD86IFByZXNldENvbmZpZztcblxuICAvKipcbiAgICogSXQgZW5hYmxlcyB0aGUgbGludCBydWxlcyByZWNvbW1lbmRlZCBieSBCaW9tZS4gYHRydWVgIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBzY2hlbWEgUnVsZXMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNzZWN1cml0eVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3N1c3BpY2lvdXNcbiAgICovXG4gIHJlYWRvbmx5IHN1c3BpY2lvdXM/OiBhbnk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1J1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUnVsZXMob2JqOiBSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ExMXknOiBvYmouYTExWSxcbiAgICAnY29tcGxleGl0eSc6IG9iai5jb21wbGV4aXR5LFxuICAgICdjb3JyZWN0bmVzcyc6IG9iai5jb3JyZWN0bmVzcyxcbiAgICAnbnVyc2VyeSc6IG9iai5udXJzZXJ5LFxuICAgICdwZXJmb3JtYW5jZSc6IG9iai5wZXJmb3JtYW5jZSxcbiAgICAncHJlc2V0Jzogb2JqLnByZXNldCxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NlY3VyaXR5Jzogb2JqLnNlY3VyaXR5LFxuICAgICdzdHlsZSc6IG9iai5zdHlsZSxcbiAgICAnc3VzcGljaW91cyc6IG9iai5zdXNwaWNpb3VzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBhY3Rpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uI2FjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBpZiBgZmFsc2VgLCBpdCBkaXNhYmxlcyB0aGUgZmVhdHVyZSBhbmQgdGhlIGFzc2lzdCB3b24ndCBiZSBleGVjdXRlZC4gYHRydWVgIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbnMnOiB0b0pzb25fQWN0aW9ucyhvYmouYWN0aW9ucyksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgbGltaXQgaW4gYnl0ZXNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgc3BhY2VzIGltbWVkaWF0ZWx5IGluc2lkZSBzdXBwb3J0ZWQgZGVsaW1pdGVycyB3aGVuIHRoZWlyIGNvbnRlbnQgZml0cyBvbiBvbmUgbGluZS5cbiAgICogSXQgZG9lc24ndCBhZGQgc3BhY2VzIGJlZm9yZSBvcGVuaW5nIGRlbGltaXRlcnMgb3IgaW5zaWRlIGVtcHR5IGRlbGltaXRlcnMuXG4gICAqXG4gICAqIFRoZSBhZmZlY3RlZCBkZWxpbWl0ZXJzIHZhcnkgYnkgbGFuZ3VhZ2UuIElmIHVuc2V0LCB1c2VzIHRoZSBjb25maWd1cmVkIGZvcm1hdHRlciBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNkZWxpbWl0ZXJTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBkZWxpbWl0ZXJTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgYXJyYXlzIGFuZCBvYmplY3RzIGFyZSBmb3JtYXR0ZWQgb24gb25lIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMuXG4gICAqXG4gICAqIGBhdXRvYCBmb3JtYXRzIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsIGFuZCBhcnJheXMgb25cbiAgICogb25lIGxpbmUgaWYgdGhleSBmaXQuXG4gICAqXG4gICAqIGBhbHdheXNgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG11bHRpcGxlIGxpbmVzLlxuICAgKlxuICAgKiBgbmV2ZXJgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG9uZSBsaW5lIGlmIHRoZXkgZml0LlxuICAgKlxuICAgKiBJZiB1bnNldCwgdXNlcyB0aGUgY29uZmlndXJlZCBmb3JtYXR0ZXIgc2V0dGluZy5cbiAgICpcbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB1c2VzIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB3aGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGVcbiAgICogaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0V2l0aEVycm9yc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0V2l0aEVycm9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiwgMiBieSBkZWZhdWx0IChkZXByZWNhdGVkLCB1c2UgYGluZGVudC13aWR0aGApXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFNpemVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZGVsaW1pdGVyU3BhY2luZyc6IG9iai5kZWxpbWl0ZXJTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2Zvcm1hdFdpdGhFcnJvcnMnOiBvYmouZm9ybWF0V2l0aEVycm9ycyxcbiAgICAnaW5kZW50U2l6ZSc6IG9iai5pbmRlbnRTaXplLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI2RvbWFpbnNcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbnM/OiBSdWxlRG9tYWlucztcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogdG9Kc29uX1J1bGVEb21haW5zKG9iai5kb21haW5zKSxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdydWxlcyc6IHRvSnNvbl9SdWxlcyhvYmoucnVsZXMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogSW50ZWdyYXRpb24gd2l0aCBHaXQgYXMgdGhlIHZlcnNpb24gY29udHJvbCBjbGllbnQuXG4gKlxuICogQHNjaGVtYSBWY3NDbGllbnRLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIFZjc0NsaWVudEtpbmQge1xuICAvKiogZ2l0ICovXG4gIEdJVCA9IFwiZ2l0XCIsXG59XG5cbi8qKlxuICogQSBwcmVzZXQgY29uZmlndXJhdGlvbiBmb3IgZW5hYmxpbmcgYSBzZXQgb2YgcnVsZXMuXG4gKlxuICogQHNjaGVtYSBQcmVzZXRDb25maWdcbiAqL1xuZXhwb3J0IGVudW0gUHJlc2V0Q29uZmlnIHtcbiAgLyoqIHJlY29tbWVuZGVkICovXG4gIFJFQ09NTUVOREVEID0gXCJyZWNvbW1lbmRlZFwiLFxuICAvKiogYWxsICovXG4gIEFMTCA9IFwiYWxsXCIsXG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBncm91cFxuICpcbiAqIEBzY2hlbWEgU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlIHtcbiAgLyoqXG4gICAqIFJlbW92ZSBkdXBsaWNhdGUgQ1NTIGNsYXNzZXMuXG4gICAqIFNlZSBodHRwczovL2Jpb21lanMuZGV2L2Fzc2lzdC9hY3Rpb25zL25vLWR1cGxpY2F0ZS1jbGFzc2VzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI25vRHVwbGljYXRlQ2xhc3Nlc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9EdXBsaWNhdGVDbGFzc2VzPzogYW55O1xuXG4gIC8qKlxuICAgKiBTb3J0cyBpbXBvcnRzIGFuZCBleHBvcnRzIGluIHlvdXIgSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCBmaWxlcy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvb3JnYW5pemUtaW1wb3J0c1xuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSNvcmdhbml6ZUltcG9ydHNcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXplSW1wb3J0cz86IGFueTtcblxuICAvKipcbiAgICogRW5hYmxlcyBhIHBhcnRpY3VsYXIgcnVsZSBwcmVzZXRcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjcHJlc2V0XG4gICAqL1xuICByZWFkb25seSBwcmVzZXQ/OiBQcmVzZXRDb25maWc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHJlY29tbWVuZGVkIHJ1bGVzIGZvciB0aGlzIGdyb3VwXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuZm9yY2UgYXR0cmlidXRlIHNvcnRpbmcgaW4gSFRNTCBlbGVtZW50cy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1hdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEF0dHJpYnV0ZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIG1lbWJlcnMgb2YgYW4gZW51bSBpbiBuYXR1cmFsIG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWVudW0tbWVtYmVyc1xuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRFbnVtTWVtYmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkRW51bU1lbWJlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgaW50ZXJmYWNlIG1lbWJlcnMgYnkga2V5LlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWludGVyZmFjZS1tZW1iZXJzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEludGVyZmFjZU1lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEludGVyZmFjZU1lbWJlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIGtleXMgb2YgYSBKU09OIG9iamVjdCBpbiBuYXR1cmFsIG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWtleXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkS2V5c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkS2V5cz86IGFueTtcblxuICAvKipcbiAgICogT3JnYW5pemUgcGFja2FnZS5qc29uIGZpZWxkcyBhY2NvcmRpbmcgdG8gZXN0YWJsaXNoZWQgY29udmVudGlvbnMuXG4gICAqIFNlZSBodHRwczovL2Jpb21lanMuZGV2L2Fzc2lzdC9hY3Rpb25zL3VzZS1zb3J0ZWQtcGFja2FnZS1qc29uXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZFBhY2thZ2VKc29uXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRQYWNrYWdlSnNvbj86IGFueTtcblxuICAvKipcbiAgICogRW5mb3JjZSBvcmRlcmluZyBvZiBDU1MgcHJvcGVydGllcyBhbmQgbmVzdGVkIHJ1bGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLXByb3BlcnRpZXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkUHJvcGVydGllcz86IGFueTtcblxuICAvKipcbiAgICogU29ydCBHcmFwaFFMIHNlbGVjdGlvbiBzZXRzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLXNlbGVjdGlvbi1zZXRcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkU2VsZWN0aW9uU2V0XG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRTZWxlY3Rpb25TZXQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgZmllbGRzIGluIEdyYXBoUUwgdHlwZSBkZWZpbml0aW9ucyBhbHBoYWJldGljYWxseS5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC10eXBlLWZpZWxkc1xuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRUeXBlRmllbGRzXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRUeXBlRmllbGRzPzogYW55O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTb3VyY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Tb3VyY2Uob2JqOiBTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdub0R1cGxpY2F0ZUNsYXNzZXMnOiBvYmoubm9EdXBsaWNhdGVDbGFzc2VzLFxuICAgICdvcmdhbml6ZUltcG9ydHMnOiBvYmoub3JnYW5pemVJbXBvcnRzLFxuICAgICdwcmVzZXQnOiBvYmoucHJlc2V0LFxuICAgICdyZWNvbW1lbmRlZCc6IG9iai5yZWNvbW1lbmRlZCxcbiAgICAndXNlU29ydGVkQXR0cmlidXRlcyc6IG9iai51c2VTb3J0ZWRBdHRyaWJ1dGVzLFxuICAgICd1c2VTb3J0ZWRFbnVtTWVtYmVycyc6IG9iai51c2VTb3J0ZWRFbnVtTWVtYmVycyxcbiAgICAndXNlU29ydGVkSW50ZXJmYWNlTWVtYmVycyc6IG9iai51c2VTb3J0ZWRJbnRlcmZhY2VNZW1iZXJzLFxuICAgICd1c2VTb3J0ZWRLZXlzJzogb2JqLnVzZVNvcnRlZEtleXMsXG4gICAgJ3VzZVNvcnRlZFBhY2thZ2VKc29uJzogb2JqLnVzZVNvcnRlZFBhY2thZ2VKc29uLFxuICAgICd1c2VTb3J0ZWRQcm9wZXJ0aWVzJzogb2JqLnVzZVNvcnRlZFByb3BlcnRpZXMsXG4gICAgJ3VzZVNvcnRlZFNlbGVjdGlvblNldCc6IG9iai51c2VTb3J0ZWRTZWxlY3Rpb25TZXQsXG4gICAgJ3VzZVNvcnRlZFR5cGVGaWVsZHMnOiBvYmoudXNlU29ydGVkVHlwZUZpZWxkcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVTdHlsZVxuICovXG5leHBvcnQgZW51bSBRdW90ZVN0eWxlIHtcbiAgLyoqIGRvdWJsZSAqL1xuICBET1VCTEUgPSBcImRvdWJsZVwiLFxuICAvKiogc2luZ2xlICovXG4gIFNJTkdMRSA9IFwic2luZ2xlXCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hldGhlciB2b2lkLWVsZW1lbnRzIHNob3VsZCBiZSBzZWxmIGNsb3NlZFxuICpcbiAqIEBzY2hlbWEgU2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGZDbG9zZVZvaWRFbGVtZW50cyB7XG4gIC8qKiBUaGUgYC9gIGluc2lkZSB2b2lkIGVsZW1lbnRzIGlzIHJlbW92ZWQgYnkgdGhlIGZvcm1hdHRlciAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxuICAvKiogVGhlIGAvYCBpbnNpZGUgdm9pZCBlbGVtZW50cyBpcyBhbHdheXMgYWRkZWQgKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbn1cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHNlbnNpdGl2aXR5IGZvciBIVE1MIGZvcm1hdHRpbmcuXG4gKlxuICogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgd29uJ3QgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6XG4gKlxuICogfCAgICAgICAgICAgICAgICB8ICAgICAgaHRtbCAgICAgIHwgICAgb3V0cHV0ICAgIHxcbiAqIHwgLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tOiB8XG4gKiB8IHdpdGggc3BhY2VzICAgIHwgYDE8Yj4gMiA8L2I+M2AgfCAxPGI+IDIgPC9iPjMgfFxuICogfCB3aXRob3V0IHNwYWNlcyB8ICBgMTxiPjI8L2I+M2AgIHwgIDE8Yj4yPC9iPjMgIHxcbiAqXG4gKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB3aGl0ZXNwYWNlIGlzIHNpZ25pZmljYW50IGluIGlubGluZSBlbGVtZW50cy5cbiAqXG4gKiBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMsIHRoZSBmb3JtYXR0ZXIgbXVzdCBmb3JtYXQgYmxvY2tzIHRoYXQgbG9vayBsaWtlIHRoaXMgKGFzc3VtZSBhIHNtYWxsIGxpbmUgd2lkdGgsIDwyMCk6XG4gKiBgYGBodG1sXG4gKiA8c3Bhbj5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuPlxuICogYGBgXG4gKiBhcyB0aGlzLCB3aGVyZSB0aGUgY29udGVudCBodWdzIHRoZSB0YWdzOlxuICogYGBgaHRtbFxuICogPHNwYW5cbiAqID5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuXG4gKiA+XG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgaW5saW5lIGVsZW1lbnRzLiBCbG9jayBlbGVtZW50cyBkbyBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLlxuICpcbiAqIEBzY2hlbWEgV2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gKi9cbmV4cG9ydCBlbnVtIFdoaXRlc3BhY2VTZW5zaXRpdml0eSB7XG4gIC8qKiBUaGUgZm9ybWF0dGVyIGNvbnNpZGVycyB3aGl0ZXNwYWNlIHNpZ25pZmljYW50IGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYW4gXCJpbmxpbmVcIiBkaXNwbGF5IHN0eWxlIGJ5IGRlZmF1bHQgaW5cbmJyb3dzZXIncyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cy4gKGNzcykgKi9cbiAgQ1NTID0gXCJjc3NcIixcbiAgLyoqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gY29udGVudCBpcyBjb25zaWRlcmVkIHNpZ25pZmljYW50IGZvciBhbGwgZWxlbWVudHMuXG5cblRoZSBmb3JtYXR0ZXIgc2hvdWxkIGxlYXZlIGF0IGxlYXN0IG9uZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpZiB3aGl0ZXNwYWNlIGlzIHByZXNlbnQuXG5PdGhlcndpc2UsIGlmIHRoZXJlIGlzIG5vIHdoaXRlc3BhY2UsIGl0IHNob3VsZCBub3QgYWRkIGFueSBhZnRlciBgPmAgb3IgYmVmb3JlIGA8YC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZXJlJ3Mgbm8gd2hpdGVzcGFjZSwgdGhlIHRleHQgY29udGVudCBzaG91bGQgaHVnIHRoZSB0YWdzLlxuXG5FeGFtcGxlIG9mIHRleHQgaHVnZ2luZyB0aGUgdGFnczpcbmBgYGh0bWxcbjxiXG4gICAgPmNvbnRlbnQ8L2Jcbj5cbmBgYCAoc3RyaWN0KSAqL1xuICBTVFJJQ1QgPSBcInN0cmljdFwiLFxuICAvKiogV2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIGluc2lnbmlmaWNhbnQuIFRoZSBmb3JtYXR0ZXIgaXMgZnJlZSB0byByZW1vdmUgb3IgYWRkIHdoaXRlc3BhY2UgYXMgaXQgc2VlcyBmaXQuIChpZ25vcmUpICovXG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBBcnJvd1BhcmVudGhlc2VzXG4gKi9cbmV4cG9ydCBlbnVtIEFycm93UGFyZW50aGVzZXMge1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBPcGVyYXRvckxpbmVicmVha1xuICovXG5leHBvcnQgZW51bSBPcGVyYXRvckxpbmVicmVhayB7XG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGFmdGVyIHRoZSBleHByZXNzaW9uIChhZnRlcikgKi9cbiAgQUZURVIgPSBcImFmdGVyXCIsXG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGJlZm9yZSB0aGUgZXhwcmVzc2lvbiAoYmVmb3JlKSAqL1xuICBCRUZPUkUgPSBcImJlZm9yZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVQcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBlbnVtIFF1b3RlUHJvcGVydGllcyB7XG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG4gIC8qKiBwcmVzZXJ2ZSAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFNlbWljb2xvbnNcbiAqL1xuZXhwb3J0IGVudW0gU2VtaWNvbG9ucyB7XG4gIC8qKiBhbHdheXMgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIGFzTmVlZGVkICovXG4gIEFTX05FRURFRCA9IFwiYXNOZWVkZWRcIixcbn1cblxuLyoqXG4gKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMgZm9yIEphdmFTY3JpcHQvVHlwZVNjcmlwdCBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIEpzVHJhaWxpbmdDb21tYXNcbiAqL1xuZXhwb3J0IGVudW0gSnNUcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBhbGwgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIGVzNSAqL1xuICBFUzUgPSBcImVzNVwiLFxuICAvKiogbm9uZSAqL1xuICBOT05FID0gXCJub25lXCIsXG59XG5cbi8qKlxuICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzIGZvciBKU09OIGZpbGVzLlxuICpcbiAqIEBzY2hlbWEgSnNvblRyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIEpzb25UcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIGFsbCAqL1xuICBBTEwgPSBcImFsbFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUnVsZURvbWFpblZhbHVlXG4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVEb21haW5WYWx1ZSB7XG4gIC8qKiBFbmFibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKGFsbCkgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIERpc2FibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKG5vbmUpICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIEVuYWJsZXMgb25seSB0aGUgcmVjb21tZW5kZWQgcnVsZXMgZm9yIHRoaXMgZG9tYWluIChyZWNvbW1lbmRlZCkgKi9cbiAgUkVDT01NRU5ERUQgPSBcInJlY29tbWVuZGVkXCIsXG59XG4iXX0=
|
|
1296
|
+
/**
|
|
1297
|
+
* Controls whether Biome keeps, adds, or removes line breaks in Markdown paragraphs.
|
|
1298
|
+
*
|
|
1299
|
+
* Manual line breaks are always kept. In Markdown, a manual line break is created by ending a
|
|
1300
|
+
* line with two spaces or a backslash.
|
|
1301
|
+
*
|
|
1302
|
+
* @schema ProseWrap
|
|
1303
|
+
*/
|
|
1304
|
+
var ProseWrap;
|
|
1305
|
+
(function (ProseWrap) {
|
|
1306
|
+
/** Keep line breaks as written in the source file. This is the default. (preserve) */
|
|
1307
|
+
ProseWrap["PRESERVE"] = "preserve";
|
|
1308
|
+
/** Wrap paragraphs to fit the configured `lineWidth`. (always) */
|
|
1309
|
+
ProseWrap["ALWAYS"] = "always";
|
|
1310
|
+
/** Remove line breaks from paragraphs so that each paragraph is on one line. (never) */
|
|
1311
|
+
ProseWrap["NEVER"] = "never";
|
|
1312
|
+
})(ProseWrap || (exports.ProseWrap = ProseWrap = {}));
|
|
1313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmFzY3JpcHQvYmlvbWUvYmlvbWUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdLQSw4REF5QkM7QUFxQ0QsZ0VBU0M7QUFxREQsMERBV0M7QUE0REQsOERBVUM7QUE0SkQsc0VBb0JDO0FBdUNELGtFQVNDO0FBdUNELDREQVNDO0FBaUVELDREQVdDO0FBdUZELHdEQWNDO0FBOENELDREQVVDO0FBK0NELGdFQVVDO0FBNkNELG9FQVVDO0FBZ0hELHdEQW9CQztBQWdHRCxvRUFVQztBQW1FRCwwREFXQztBQTJCRCw0REFRQztBQXdDRCx3Q0FTQztBQXNCRCxzRUFPQztBQW1GRCw0RUFjQztBQXNCRCxzRUFPQztBQTRDRCxzRUFTQztBQXdFRCw4RUFPQztBQTZFRCxvRkFjQztBQXNCRCw4RUFPQztBQXNCRCx3RUFPQztBQTJERCw4RUFZQztBQXNCRCx3RUFPQztBQXNCRCx3RUFPQztBQThHRCw4RUFpQkM7QUFzQkQsd0VBT0M7QUFxQ0Qsd0VBUUM7QUFzQkQsb0VBT0M7QUFzTEQsMEVBd0JDO0FBMkNELG9FQU9DO0FBaUNELG9FQVFDO0FBNkNELHdFQU9DO0FBc0JELHdFQU9DO0FBb0dELDhFQWdCQztBQXNCRCx3RUFPQztBQWlDRCx3RUFRQztBQXdGRCxnREFxQkM7QUEyRUQsb0NBZ0JDO0FBNEZELHNGQWNDO0FBc0JELGdGQU9DO0FBNERELGdGQVNDO0FBMkJELGdGQVFDO0FBb0JELDhFQU9DO0FBdUlELHNGQW9CQztBQWtDRCxnRkFTQztBQTBGRCw4RUFhQztBQXNCRCx3RUFPQztBQXVKRCxzQ0FxQkM7QUFsK0dEOzs7R0FHRztBQUNILHFGQUFxRjtBQUNyRixTQUFnQix5QkFBeUIsQ0FBQyxHQUFtQztJQUMzRSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUFDLE9BQU8sU0FBUyxDQUFDO0lBQUMsQ0FBQztJQUM1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LElBQVksZUFPWDtBQVBELFdBQVksZUFBZTtJQUN6Qiw2Q0FBNkM7SUFDN0MsOEJBQVcsQ0FBQTtJQUNYLGtDQUFrQztJQUNsQyxnQ0FBYSxDQUFBO0lBQ2Isd0VBQXdFO0lBQ3hFLDhDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFQVyxlQUFlLCtCQUFmLGVBQWUsUUFPMUI7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsSUFBWSxTQU9YO0FBUEQsV0FBWSxTQUFTO0lBQ25CLHNGQUFzRjtJQUN0RixrQ0FBcUIsQ0FBQTtJQUNyQixrRUFBa0U7SUFDbEUsOEJBQWlCLENBQUE7SUFDakIsd0ZBQXdGO0lBQ3hGLDRCQUFlLENBQUE7QUFDakIsQ0FBQyxFQVBXLFNBQVMseUJBQVQsU0FBUyxRQU9wQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5vZGUgLi9wcm9qZW4uanNcIi5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gY29udGFpbmVkIGluIGBiaW9tZS5qc29uYCBvciBgYmlvbWUuanNvbmNgLlxuICpcbiAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlvbWVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBKU09OIFNjaGVtYSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBjb25maWd1cmF0aW9uIGFuZCBwcm92aWRlIGVkaXRvciBjb21wbGV0aW9uLiBCaW9tZVxuICAgKiBlbWl0cyBhIGRpYWdub3N0aWMgd2hlbiBhIGBiaW9tZWpzLmRldmAgc2NoZW1hIFVSTCBzcGVjaWZpZXMgYSB2ZXJzaW9uIHRoYXQgZGlmZmVycyBmcm9tIHRoZVxuICAgKiBydW5uaW5nIENMSSB2ZXJzaW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiMkc2NoZW1hXG4gICAqL1xuICByZWFkb25seSBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhc3Npc3QgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIENTUy5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jY3NzXG4gICAqL1xuICByZWFkb25seSBjc3M/OiBDc3NDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBFeHRlbmRzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2l0aCBzZXR0aW5ncyBmcm9tIG9uZSBvciBtb3JlIG90aGVyIEJpb21lIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBVc2UgYFwiLy9cImAgaW4gYSBuZXN0ZWQgY29uZmlndXJhdGlvbiB0byBleHRlbmQgdGhlIHJvb3QgY29uZmlndXJhdGlvbiBhdCBhbnkgbmVzdGluZyBkZXB0aC5cbiAgICogVXNlIGFuIGFycmF5IHRvIGV4dGVuZCBjb25maWd1cmF0aW9ucyBieSByZWxhdGl2ZSBwYXRoIG9yIGluc3RhbGxlZCBwYWNrYWdlIHNwZWNpZmllci5cbiAgICpcbiAgICogQmlvbWUgbWVyZ2VzIGNvbmZpZ3VyYXRpb25zIGZyb20gbGVmdCB0byByaWdodC4gTGF0ZXIgY29uZmlndXJhdGlvbnMgdGFrZSBwcmVjZWRlbmNlIGZvclxuICAgKiBzaW5nbGUtdmFsdWUgb3B0aW9ucywgbGlzdCBlbnRyaWVzIGFyZSBjb21iaW5lZCwgYW5kIHRoZSBjdXJyZW50IGZpbGUgaXMgYXBwbGllZCBsYXN0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogYW55O1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHdoaWNoIGZpbGVzIEJpb21lIGNhbiBkaXNjb3ZlciBhbmQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzPzogRmlsZXNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGZvcm1hdHRpbmcgZm9yIHNlbGVjdGVkIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gR3JhcGhRTC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JhcGhxbFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhcGhxbD86IEdyYXBocWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIEdyaXRRTC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIEhUTUwuXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2h0bWxcbiAgICovXG4gIHJlYWRvbmx5IGh0bWw/OiBIdG1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byBKYXZhU2NyaXB0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNqYXZhc2NyaXB0XG4gICAqL1xuICByZWFkb25seSBqYXZhc2NyaXB0PzogSnNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIEpTT04uXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpbnRlciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IExpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gTWFya2Rvd24uXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI21hcmtkb3duXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bj86IE1hcmtkb3duQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJlcyBzZXR0aW5ncyBmb3IgZmlsZXMgc2VsZWN0ZWQgYnkgZWFjaCBvdmVycmlkZS4gV2hlbiBtdWx0aXBsZSBvdmVycmlkZXMgY29uZmlndXJlXG4gICAqIHRoZSBzYW1lIHNpbmdsZS12YWx1ZSBzZXR0aW5nLCB0aGUgbGFzdCBtYXRjaGluZyBvdmVycmlkZSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNvdmVycmlkZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE92ZXJyaWRlUGF0dGVybltdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgR3JpdFFMIHBsdWdpbnMgdG8gbG9hZC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jcGx1Z2luc1xuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB3aGV0aGVyIHRoaXMgZmlsZSBpcyB0aGUgcm9vdCBjb25maWd1cmF0aW9uIGZvciBhIEJpb21lIHByb2plY3QuIFRoZSByb290IGNvbmZpZ3VyYXRpb25cbiAgICogZXN0YWJsaXNoZXMgdGhlIHByb2plY3QncyBiYXNlIHNldHRpbmdzLCB3aGlsZSBgZmFsc2VgIG1hcmtzIGEgY29uZmlndXJhdGlvbiBmb3VuZCBpbnNpZGUgdGhlXG4gICAqIHByb2plY3QgYXMgbmVzdGVkIHJhdGhlciB0aGFuIGEgc2Vjb25kIHByb2plY3Qgcm9vdC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLiBCaW9tZSBpbXBsaWNpdGx5IHRyZWF0cyBgcm9vdGAgYXMgYGZhbHNlYCB3aGVuIGEgbmVzdGVkIGNvbmZpZ3VyYXRpb24gdXNlc1xuICAgKiBgXCJleHRlbmRzXCI6IFwiLy9cImAuIEFsbCBvdGhlciBuZXN0ZWQgY29uZmlndXJhdGlvbnMgbXVzdCBleHBsaWNpdGx5IHNldCBgcm9vdGAgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZWAuIEJpb21lIGltcGxpY2l0bHkgdHJlYXRzIGByb290YCBhcyBgZmFsc2VgIHdoZW4gYSBuZXN0ZWQgY29uZmlndXJhdGlvbiB1c2VzXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI3Jvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGhvdyBCaW9tZSByZWNvZ25pemVzIFRhaWx3aW5kIGNsYXNzIHN0cmluZ3MuXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI3RhaWx3aW5kXG4gICAqL1xuICByZWFkb25seSB0YWlsd2luZD86IFRhaWx3aW5kQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gY29udHJvbCBpbnRlZ3JhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiN2Y3NcbiAgICovXG4gIHJlYWRvbmx5IHZjcz86IFZjc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gWUFNTC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jeWFtbFxuICAgKi9cbiAgcmVhZG9ubHkgeWFtbD86IFlhbWxDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCaW9tZUNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CaW9tZUNvbmZpZ3VyYXRpb24ob2JqOiBCaW9tZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICckc2NoZW1hJzogb2JqLnNjaGVtYSxcbiAgICAnYXNzaXN0JzogdG9Kc29uX0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Nzcyc6IHRvSnNvbl9Dc3NDb25maWd1cmF0aW9uKG9iai5jc3MpLFxuICAgICdleHRlbmRzJzogb2JqLmV4dGVuZHMsXG4gICAgJ2ZpbGVzJzogdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnZ3JhcGhxbCc6IHRvSnNvbl9HcmFwaHFsQ29uZmlndXJhdGlvbihvYmouZ3JhcGhxbCksXG4gICAgJ2dyaXQnOiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqLmdyaXQpLFxuICAgICdodG1sJzogdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iai5odG1sKSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ21hcmtkb3duJzogdG9Kc29uX01hcmtkb3duQ29uZmlndXJhdGlvbihvYmoubWFya2Rvd24pLFxuICAgICdvdmVycmlkZXMnOiBvYmoub3ZlcnJpZGVzPy5tYXAoeSA9PiB0b0pzb25fT3ZlcnJpZGVQYXR0ZXJuKHkpKSxcbiAgICAncGx1Z2lucyc6IG9iai5wbHVnaW5zPy5tYXAoeSA9PiB5KSxcbiAgICAncm9vdCc6IG9iai5yb290LFxuICAgICd0YWlsd2luZCc6IHRvSnNvbl9UYWlsd2luZENvbmZpZ3VyYXRpb24ob2JqLnRhaWx3aW5kKSxcbiAgICAndmNzJzogdG9Kc29uX1Zjc0NvbmZpZ3VyYXRpb24ob2JqLnZjcyksXG4gICAgJ3lhbWwnOiB0b0pzb25fWWFtbENvbmZpZ3VyYXRpb24ob2JqLnlhbWwpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXNzaXN0LWFjdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEFzc2lzdENvbmZpZ3VyYXRpb24jYWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9ucz86IEFjdGlvbnM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgY29uZmlndXJlZCBhc3Npc3QgYWN0aW9ucyBpbiB0aGUgQ0xJIGFuZCBlZGl0b3IgaW50ZWdyYXRpb25zLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgLlxuICAgKiBAc2NoZW1hIEFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHNlbGVjdGluZyBmaWxlcyBvbiB3aGljaCBhc3Npc3QgYWN0aW9ucyBjYW4gcnVuLiBJZiBvbWl0dGVkLCBhbGwgZmlsZXNcbiAgICogc2VsZWN0ZWQgYnkgYGZpbGVzLmluY2x1ZGVzYCByZW1haW4gZWxpZ2libGUgZm9yIGFzc2lzdCBhY3Rpb25zLiBBbiBlbXB0eSBsaXN0IHNlbGVjdHMgbm9cbiAgICogZmlsZXMuIFRoaXMgb3B0aW9uIGNhbiBvbmx5IG5hcnJvdyB0aGUgZmlsZXMgc2VsZWN0ZWQgYnkgYGZpbGVzLmluY2x1ZGVzYC5cbiAgICpcbiAgICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uI2luY2x1ZGVzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb25zJzogdG9Kc29uX0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBDU1MgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAqXG4gKiBMYW5ndWFnZS1zcGVjaWZpYyBzZXR0aW5ncyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjb3JyZXNwb25kaW5nIGdsb2JhbCBzZXR0aW5ncy4gR2xvYmFsIHNldHRpbmdzXG4gKiBhcHBseSB3aGVuIHRoZWlyIGxhbmd1YWdlLXNwZWNpZmljIGNvdW50ZXJwYXJ0cyBhcmUgb21pdHRlZCwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuXG4gKlxuICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDU1MgYXNzaXN0IG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IENzc0Fzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENTUyBmb3JtYXR0ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBDU1MgYW5hbHl6ZXIgc3VwcG9ydC4gVGhpcyBvcHRpb24gY3VycmVudGx5IGhhcyBubyBlZmZlY3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNnbG9iYWxzXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENTUyBsaW50ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogQ3NzTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ1NTIHBhcnNpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogQ3NzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqOiBDc3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Dc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdnbG9iYWxzJzogb2JqLmdsb2JhbHM/Lm1hcCh5ID0+IHkpLFxuICAgICdsaW50ZXInOiB0b0pzb25fQ3NzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgZmlsZSBoYW5kbGluZyBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqICoqRGVwcmVjYXRlZDoqKiBQbGVhc2UgdXNlIF9mb3JjZS1pZ25vcmUgc3ludGF4XyBpbiBgZmlsZXMuaW5jbHVkZXNgXG4gICAqIGluc3RlYWQ6IDxodHRwczovL2Jpb21lanMuZGV2L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLyNmaWxlc2luY2x1ZGVzPlxuICAgKlxuICAgKiBGaWxlIG9yIGRpcmVjdG9yeSBuYW1lcyB0aGF0IHRoZSBzY2FubmVyIGlnbm9yZXMgdW5jb25kaXRpb25hbGx5IHdoaWxlIGNyYXdsaW5nLiBFYWNoIHZhbHVlXG4gICAqIG1hdGNoZXMgYSBjb21wbGV0ZSBwYXRoIGNvbXBvbmVudCwgbm90IGEgZ2xvYi4gSWdub3JlZCBmaWxlcyBhcmUgbm90IGFkZGVkIHRvIHRoZSBtb2R1bGUgZ3JhcGgsXG4gICAqIHNvIHR5cGVzIGFyZSBub3QgaW5mZXJyZWQgZnJvbSB0aGVtLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxTY2FubmVySWdub3Jlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUHJldmVudHMgQmlvbWUgZnJvbSBlbWl0dGluZyBkaWFnbm9zdGljcyBmb3IgdW5yZWNvZ25pemVkIGZpbGUgdHlwZXMuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jaWdub3JlVW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlVW5rbm93bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHNlbGVjdGluZyB3aGljaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgQmlvbWUgY2FuIHByb2Nlc3MuIElmIG9taXR0ZWQsXG4gICAqIHRoaXMgb3B0aW9uIGRvZXMgbm90IGZ1cnRoZXIgcmVzdHJpY3QgdGhlIHN1cHBvcnRlZCBmaWxlcyBCaW9tZSBjYW4gcHJvY2Vzcy4gQW4gZW1wdHkgbGlzdFxuICAgKiBzZWxlY3RzIG5vIGZpbGVzLiBCaW9tZSBpZ25vcmVzIGZpbGVzIHVuZGVyIGBub2RlX21vZHVsZXNgIGV2ZW4gd2hlbiB0aGV5IG1hdGNoIGEgcGF0dGVybi5cbiAgICpcbiAgICogVGhlIHNjYW5uZXIgdXNlcyB0aGVzZSBwYXR0ZXJucyBhbmQsIHdoZW4gZW5hYmxlZCwgVkNTIGlnbm9yZSBmaWxlcyB3aGlsZSBkaXNjb3ZlcmluZyBuZXN0ZWRcbiAgICogY29uZmlndXJhdGlvbiBhbmQgaWdub3JlIGZpbGVzLiBXaGVuIGVuYWJsZWQgcnVsZXMgdXNlIHRoZSBgcHJvamVjdGAgb3IgYHR5cGVzYCBkb21haW5zLCBpdFxuICAgKiBhbHNvIGluZGV4ZXMgc291cmNlIGZpbGVzIGFuZCBwcm9qZWN0IGRlcGVuZGVuY2llcy4gSXQgbWF5IHN0aWxsIGRpc2NvdmVyIHJlcXVpcmVkIG1ldGFkYXRhIG9yXG4gICAqIGluZGV4IGV4Y2x1ZGVkIHNvdXJjZSBmaWxlcyBuZWVkZWQgZm9yIGFuYWx5c2lzLiBBIHBhdHRlcm4gYmVnaW5uaW5nIHdpdGggYCEhYCBwcmV2ZW50cyB0aGVcbiAgICogc2Nhbm5lciBmcm9tIGluZGV4aW5nIG1hdGNoaW5nIHBhdGhzLiBQYXR0ZXJucyBhcmUgZXZhbHVhdGVkIGluIG9yZGVyLCBhbmQgYSBwYXR0ZXJuIGJlZ2lubmluZ1xuICAgKiB3aXRoIGAhYCBleGNsdWRlcyBtYXRjaGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gc291cmNlLWZpbGUgc2l6ZSBpbiBieXRlcy4gQmlvbWUgc2tpcHMgbGFyZ2VyIGZpbGVzIGFuZCBlbWl0cyBhIHdhcm5pbmdcbiAgICogZGlhZ25vc3RpYy4gRGVmYXVsdHMgdG8gYDEgTWlCYC5cbiAgICpcbiAgICogQGRlZmF1bHQgMSBNaUJgLlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaWxlc0NvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaWxlc0NvbmZpZ3VyYXRpb24ob2JqOiBGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdleHBlcmltZW50YWxTY2FubmVySWdub3Jlcyc6IG9iai5leHBlcmltZW50YWxTY2FubmVySWdub3Jlcz8ubWFwKHkgPT4geSksXG4gICAgJ2lnbm9yZVVua25vd24nOiBvYmouaWdub3JlVW5rbm93bixcbiAgICAnaW5jbHVkZXMnOiBvYmouaW5jbHVkZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb25maWd1cmVzIGZvcm1hdHRpbmcgZm9yIHNlbGVjdGVkIGZpbGVzLlxuICpcbiAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBIVE1MLWxpa2UgbGFuZ3VhZ2VzLiBEZWZhdWx0cyB0byBgYXV0b2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9gLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGNsb3NpbmcgYnJhY2tldCBmb3IgbXVsdGlsaW5lIEhUTUwgYW5kIEpTWCBvcGVuaW5nIHRhZ3MuIEJpb21lXG4gICAqIHBsYWNlcyB0aGUgYnJhY2tldCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGF0dHJpYnV0ZSBsaW5lIHdoZW4gZW5hYmxlZCBhbmQgb24gaXRzIG93biBsaW5lIHdoZW5cbiAgICogZGlzYWJsZWQuIFRoaXMgYWxzbyBhZmZlY3RzIHNlbGYtY2xvc2luZyBIVE1MIGVsZW1lbnRzLCBidXQgc2VsZi1jbG9zaW5nIEpTWCBlbGVtZW50cyBhcmVcbiAgICogdW5hZmZlY3RlZC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBzcGFjZXMgaW5zaWRlIGJyYWNlcyBpbiBzdXBwb3J0ZWQgc2luZ2xlLWxpbmUgc3RydWN0dXJlcy4gVGhlIGFmZmVjdGVkIHN0cnVjdHVyZXNcbiAgICogdmFyeSBieSBsYW5ndWFnZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlYC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbW1lZGlhdGVseSBpbnNpZGUgc3VwcG9ydGVkIGRlbGltaXRlcnMgd2hlbiB0aGVpciBjb250ZW50IGZpdHMgb24gb25lIGxpbmUuXG4gICAqIEl0IGRvZXNuJ3QgYWRkIHNwYWNlcyBiZWZvcmUgb3BlbmluZyBkZWxpbWl0ZXJzIG9yIGluc2lkZSBlbXB0eSBkZWxpbWl0ZXJzLlxuICAgKlxuICAgKiBUaGUgYWZmZWN0ZWQgZGVsaW1pdGVycyB2YXJ5IGJ5IGxhbmd1YWdlLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNkZWxpbWl0ZXJTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBkZWxpbWl0ZXJTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybWF0dGVyLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgYXJyYXlzIGFuZCBvYmplY3RzIGFyZSBmb3JtYXR0ZWQgb24gb25lIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMuXG4gICAqXG4gICAqIGBhdXRvYCBmb3JtYXRzIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsIGFuZCBhcnJheXMgb25cbiAgICogb25lIGxpbmUgaWYgdGhleSBmaXQuXG4gICAqXG4gICAqIGBhbHdheXNgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG11bHRpcGxlIGxpbmVzLlxuICAgKlxuICAgKiBgbmV2ZXJgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG9uZSBsaW5lIGlmIHRoZXkgZml0LlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgYXV0b2AuXG4gICAqXG4gICAqIFdoZW4gZm9ybWF0dGluZyBgcGFja2FnZS5qc29uYCwgQmlvbWUgdXNlcyBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9gLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBmb3JtYXR0aW5nIGZpbGVzIHRoYXQgY29udGFpbiBzeW50YXggZXJyb3JzIHdoZW4gc2V0IHRvIGB0cnVlYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0V2l0aEVycm9yc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0V2l0aEVycm9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHNlbGVjdGluZyBmaWxlcyB0byBmb3JtYXQuIElmIG9taXR0ZWQsIGFsbCBmaWxlcyBzZWxlY3RlZCBieVxuICAgKiBgZmlsZXMuaW5jbHVkZXNgIHJlbWFpbiBlbGlnaWJsZSBmb3IgZm9ybWF0dGluZy4gQW4gZW1wdHkgbGlzdCBzZWxlY3RzIG5vIGZpbGVzLiBUaGlzIG9wdGlvblxuICAgKiBjYW4gb25seSBuYXJyb3cgdGhlIGZpbGVzIHNlbGVjdGVkIGJ5IGBmaWxlcy5pbmNsdWRlc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVXNlcyB0YWJzIG9yIHNwYWNlcyBmb3IgaW5kZW50YXRpb24uIERlZmF1bHRzIHRvIGB0YWJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0YWJgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluZGVudGF0aW9uIHdpZHRoLiBXaXRoIHNwYWNlIGluZGVudGF0aW9uLCB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygc3BhY2VzIGVtaXR0ZWQgcGVyXG4gICAqIGluZGVudGF0aW9uIGxldmVsLiBXaXRoIHRhYiBpbmRlbnRhdGlvbiwgQmlvbWUgZW1pdHMgb25lIHRhYiBwZXIgbGV2ZWwgYW5kIHVzZXMgdGhpcyB2YWx1ZSBhc1xuICAgKiB0aGUgdGFiJ3MgZGlzcGxheSB3aWR0aCB3aGVuIGNhbGN1bGF0aW5nIGxpbmUgbGVuZ3RoLiBBY2NlcHRlZCB2YWx1ZXMgYXJlIGAwYCB0aHJvdWdoIGAyNGAuXG4gICAqIERlZmF1bHRzIHRvIGAyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgMmAuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIGxpbmUgZW5kaW5nLiBgYXV0b2AgdXNlcyB0aGUgcGxhdGZvcm0gY29udmVudGlvbi4gRGVmYXVsdHMgdG8gYGxmYC5cbiAgICpcbiAgICogQGRlZmF1bHQgbGZgLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHByZWZlcnJlZCBtYXhpbXVtIGxpbmUgd2lkdGggdXNlZCB3aGVuIGRlY2lkaW5nIHdoZXJlIHRvIHdyYXAgY29kZS4gU29tZSBjb250ZW50LFxuICAgKiBzdWNoIGFzIGxvbmcgdW5icmVha2FibGUgc3RyaW5ncywgbWF5IHN0aWxsIGV4Y2VlZCB0aGlzIHdpZHRoLiBBY2NlcHRlZCB2YWx1ZXMgYXJlIGAxYCB0aHJvdWdoXG4gICAqIGAzMjBgLiBEZWZhdWx0cyB0byBgODBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MGAuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIERlZmF1bHRzIHRvIGB0cnVlYC4gRGlzYWJsaW5nXG4gICAqIHRoaXMgb3B0aW9uIGNhbiBjYXVzZSBjb21wYXRpYmlsaXR5IHByb2JsZW1zIHdpdGggb3RoZXIgdG9vbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgLiBEaXNhYmxpbmdcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBCaW9tZSBsb2FkcyBmb3JtYXR0ZXIgc2V0dGluZ3MgZnJvbSBhbiBgLmVkaXRvcmNvbmZpZ2AgZmlsZS4gQmlvbWUgcmVhZHNcbiAgICogYGluZGVudF9zdHlsZWAsIGBpbmRlbnRfc2l6ZWAsIGBlbmRfb2ZfbGluZWAsIGFuZCBgaW5zZXJ0X2ZpbmFsX25ld2xpbmVgLiBTZXR0aW5ncyBpblxuICAgKiBgYmlvbWUuanNvbmAgb3IgYGJpb21lLmpzb25jYCB0YWtlIHByZWNlZGVuY2UuIEJpb21lIGxvYWRzIG9ubHkgb25lIGAuZWRpdG9yY29uZmlnYC4gTmVzdGVkXG4gICAqIGNhc2NhZGluZyBjb25maWd1cmF0aW9ucyBhbmQgdGhlIEVkaXRvckNvbmZpZyBgcm9vdGAgcHJvcGVydHkgYXJlIG5vdCBzdXBwb3J0ZWQuIERlZmF1bHRzIHRvXG4gICAqIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3VzZUVkaXRvcmNvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlRWRpdG9yY29uZmlnPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdkZWxpbWl0ZXJTcGFjaW5nJzogb2JqLmRlbGltaXRlclNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnZm9ybWF0V2l0aEVycm9ycyc6IG9iai5mb3JtYXRXaXRoRXJyb3JzLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICAgICd1c2VFZGl0b3Jjb25maWcnOiBvYmoudXNlRWRpdG9yY29uZmlnLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuXG4gKlxuICogTGFuZ3VhZ2Utc3BlY2lmaWMgc2V0dGluZ3MgdGFrZSBwcmVjZWRlbmNlIG92ZXIgY29ycmVzcG9uZGluZyBnbG9iYWwgc2V0dGluZ3MuIEdsb2JhbCBzZXR0aW5nc1xuICogYXBwbHkgd2hlbiB0aGVpciBsYW5ndWFnZS1zcGVjaWZpYyBjb3VudGVycGFydHMgYXJlIG9taXR0ZWQsIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLlxuICpcbiAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBHcmFwaFFMIGFzc2lzdCBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEdyYXBoUUwgZm9ybWF0dGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogR3JhcGhRTCBsaW50ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9HcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0dyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIEdyaXRRTCBmaWxlcy5cbiAqXG4gKiBMYW5ndWFnZS1zcGVjaWZpYyBzZXR0aW5ncyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBjb3JyZXNwb25kaW5nIGdsb2JhbCBzZXR0aW5ncy4gR2xvYmFsIHNldHRpbmdzXG4gKiBhcHBseSB3aGVuIHRoZWlyIGxhbmd1YWdlLXNwZWNpZmljIGNvdW50ZXJwYXJ0cyBhcmUgb21pdHRlZCwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuXG4gKlxuICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEdyaXRRTCBhc3Npc3Qgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEdyaXRBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBHcml0UUwgZm9ybWF0dGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogR3JpdFFMIGxpbnRlciBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogR3JpdExpbnRlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqOiBHcml0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9Hcml0QXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0dyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdsaW50ZXInOiB0b0pzb25fR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gSFRNTCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICpcbiAqIEZ1bGwgSFRNTCBzdXBwb3J0IGFuZCB0aGUgSFRNTCBmb3JtYXR0ZXIgYXJlIGV4cGVyaW1lbnRhbC4gQmlvbWUgYWltcyB0byBtaW5pbWl6ZSBicmVha2luZ1xuICogY2hhbmdlcywgYnV0IGJ1ZyBmaXhlcyBhbmQgbmV3IGZlYXR1cmVzIG1heSBjaGFuZ2UgZm9ybWF0dGluZyBvdXRwdXQgb3IgZGlhZ25vc3RpY3MuXG4gKlxuICogTGFuZ3VhZ2Utc3BlY2lmaWMgc2V0dGluZ3MgdGFrZSBwcmVjZWRlbmNlIG92ZXIgY29ycmVzcG9uZGluZyBnbG9iYWwgc2V0dGluZ3MuIEdsb2JhbCBzZXR0aW5nc1xuICogYXBwbHkgd2hlbiB0aGVpciBsYW5ndWFnZS1zcGVjaWZpYyBjb3VudGVycGFydHMgYXJlIG9taXR0ZWQsIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLlxuICpcbiAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBIVE1MIGFzc2lzdCBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogSHRtbEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgQmlvbWUncyBleHBlcmltZW50YWwgZnVsbCBzdXBwb3J0IGZvciBgLmh0bWxgLCBgLnZ1ZWAsIGAuc3ZlbHRlYCwgYW5kIGAuYXN0cm9gIGZpbGVzLlxuICAgKiBJbiB0aGlzIG1vZGUsIEJpb21lIHBhcnNlcyB0aGUgY29tcGxldGUgZG9jdW1lbnQgYW5kIGNhbiBhbmFseXplIG9yIGZvcm1hdCBpdHMgbWFya3VwIGFuZFxuICAgKiBzdXBwb3J0ZWQgZW1iZWRkZWQgbGFuZ3VhZ2VzLlxuICAgKlxuICAgKiBXaGVuIGRpc2FibGVkLCBgLnZ1ZWAsIGAuc3ZlbHRlYCwgYW5kIGAuYXN0cm9gIGZpbGVzIHVzZSBsZWdhY3kgaGFuZGxpbmcsIHdoaWNoIGV4dHJhY3RzIHRoZWlyXG4gICAqIEphdmFTY3JpcHQgb3IgVHlwZVNjcmlwdCBwb3J0aW9ucyBhbmQgbGVhdmVzIHRoZSByZXN0IHVuY2hhbmdlZC4gVGhpcyBvcHRpb24gc2VsZWN0cyBob3dcbiAgICogdGhlc2UgZmlsZXMgYXJlIHByb2Nlc3NlZC4gSXQgZG9lcyBub3QgZW5hYmxlIHRoZSBIVE1MIGZvcm1hdHRlci4gU2V0XG4gICAqIGBodG1sLmZvcm1hdHRlci5lbmFibGVkYCB0byBgdHJ1ZWAgdG8gZm9ybWF0IGNvbXBsZXRlIEhUTUwsIFZ1ZSwgU3ZlbHRlLCBhbmQgQXN0cm8gZmlsZXMuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhUTUwgZm9ybWF0dGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogSFRNTCBsaW50ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIVE1MIHBhcnNpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEh0bWxQYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iajogSHRtbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2V4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZCc6IG9iai5leHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9IdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0h0bWxMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCwgVHlwZVNjcmlwdCwgSlNYLCBUU1gsIGFuZCBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIHRoYXQgZW1iZWRcbiAqIEphdmFTY3JpcHQuXG4gKlxuICogTGFuZ3VhZ2Utc3BlY2lmaWMgc2V0dGluZ3MgdGFrZSBwcmVjZWRlbmNlIG92ZXIgY29ycmVzcG9uZGluZyBnbG9iYWwgc2V0dGluZ3MuIEdsb2JhbCBzZXR0aW5nc1xuICogYXBwbHkgd2hlbiB0aGVpciBsYW5ndWFnZS1zcGVjaWZpYyBjb3VudGVycGFydHMgYXJlIG9taXR0ZWQsIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLlxuICpcbiAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEphdmFTY3JpcHQgYXNzaXN0IG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogSnNBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIGV4cGVyaW1lbnRhbCBwYXJzaW5nLCBmb3JtYXR0aW5nLCBsaW50aW5nLCBkaWFnbm9zdGljcywgYW5kIGZpeGVzIGZvciBDU1MgYW5kXG4gICAqIEdyYXBoUUwgc25pcHBldHMgZW1iZWRkZWQgaW4gSmF2YVNjcmlwdCBhbmQgVHlwZVNjcmlwdCB0ZW1wbGF0ZSBsaXRlcmFscy5cbiAgICpcbiAgICogQmlvbWUgcmVjb2duaXplcyBDU1MgaW4gYGNzc2AgYW5kIGBzdHlsZWRgIHRlbXBsYXRlcyBhbmQgR3JhcGhRTCBpbiBgZ3FsYCBhbmQgYGdyYXBocWxgXG4gICAqIHRlbXBsYXRlcyBvciBjYWxscy4gVGVtcGxhdGVzIGNvbnRhaW5pbmcgaW50ZXJwb2xhdGlvbnMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2V4cGVyaW1lbnRhbEVtYmVkZGVkU25pcHBldHNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxFbWJlZGRlZFNuaXBwZXRzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEphdmFTY3JpcHQgZm9ybWF0dGVyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgYWRkaXRpb25hbCBuYW1lcyB0aGF0IEJpb21lJ3MgSmF2YVNjcmlwdCBsaW50ZXIgdHJlYXRzIGFzIHByZWRlZmluZWQgZ2xvYmFsXG4gICAqIGJpbmRpbmdzLlxuICAgKlxuICAgKiBVc2UgdGhpcyBmb3IgZ2xvYmFscyBzdXBwbGllZCBieSBhIHJ1bnRpbWUsIGZyYW1ld29yaywgb3IgZXh0ZXJuYWwgc2NyaXB0IHRoYXQgYXJlIG5vdFxuICAgKiBkZWNsYXJlZCBpbiB0aGUgc291cmNlIGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2dsb2JhbHNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJlcyBob3cgdGhlIGFuYWx5emVyIGFjY291bnRzIGZvciBpbXBvcnRzIHVzZWQgYnkgSlNYLiBUaGlzIG9wdGlvbiBkb2VzIG5vdCB0cmFuc2Zvcm1cbiAgICogSlNYIG9yIHNlbGVjdCBhIHJ1bnRpbWUgZm9yIGEgYnVpbGQgdG9vbC4gRGVmYXVsdHMgdG8gYHRyYW5zcGFyZW50YC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJhbnNwYXJlbnRgLlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNqc3hSdW50aW1lXG4gICAqL1xuICByZWFkb25seSBqc3hSdW50aW1lPzogSnN4UnVudGltZTtcblxuICAvKipcbiAgICogSmF2YVNjcmlwdCBsaW50ZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEphdmFTY3JpcHQgcGFyc2VyIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogSnNQYXJzZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBKYXZhU2NyaXB0IG1vZHVsZSBhbmQgZGVwZW5kZW5jeSByZXNvbHZlciBvcHRpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNyZXNvbHZlclxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZXI/OiBKc1Jlc29sdmVyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iajogSnNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQnOiBvYmouZXhwZXJpbWVudGFsRW1iZWRkZWRTbmlwcGV0c0VuYWJsZWQsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dsb2JhbHMnOiBvYmouZ2xvYmFscz8ubWFwKHkgPT4geSksXG4gICAgJ2pzeFJ1bnRpbWUnOiBvYmouanN4UnVudGltZSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgICAncmVzb2x2ZXInOiB0b0pzb25fSnNSZXNvbHZlckNvbmZpZ3VyYXRpb24ob2JqLnJlc29sdmVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBKU09OLCBKU09OQywgYW5kIHJlY29nbml6ZWQgSlNPTi1iYXNlZCBjb25maWd1cmF0aW9uIGZpbGVzLlxuICpcbiAqIExhbmd1YWdlLXNwZWNpZmljIHNldHRpbmdzIHRha2UgcHJlY2VkZW5jZSBvdmVyIGNvcnJlc3BvbmRpbmcgZ2xvYmFsIHNldHRpbmdzLiBHbG9iYWwgc2V0dGluZ3NcbiAqIGFwcGx5IHdoZW4gdGhlaXIgbGFuZ3VhZ2Utc3BlY2lmaWMgY291bnRlcnBhcnRzIGFyZSBvbWl0dGVkLCB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZS5cbiAqXG4gKiBAc2NoZW1hIEpzb25Db25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQXNzaXN0IG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEpzb25Bc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBGb3JtYXR0aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMaW50aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEpzb25MaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBQYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEpzb25QYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iajogSnNvbkNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzb25MaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSnNvblBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGEgZnJhbWV3b3JrLCBsaWJyYXJ5LCBwcm9qZWN0LXdpZGUgYW5hbHlzaXMsIG9yIHR5cGVcbiAgICogYW5hbHlzaXMuIEtleXMgYXJlIGRvbWFpbiBuYW1lcyBhbmQgdmFsdWVzIGFyZSBgYWxsYCwgYHJlY29tbWVuZGVkYCwgb3IgYG5vbmVgLlxuICAgKiBFbmFibGluZyBydWxlcyBmcm9tIHRoZSBgcHJvamVjdGAgb3IgYHR5cGVzYCBkb21haW5zIGFjdGl2YXRlcyBwcm9qZWN0IGFuZCBkZXBlbmRlbmN5XG4gICAqIHNjYW5uaW5nLiBUaGUgYHR5cGVzYCBkb21haW4gYWxzbyBlbmFibGVzIHR5cGUtYXdhcmUgcmVzb2x1dGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI2RvbWFpbnNcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbnM/OiBSdWxlRG9tYWlucztcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbGludGVyLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgLlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHNlbGVjdGluZyBmaWxlcyB0byBsaW50LiBJZiBvbWl0dGVkLCBhbGwgZmlsZXMgc2VsZWN0ZWQgYnlcbiAgICogYGZpbGVzLmluY2x1ZGVzYCByZW1haW4gZWxpZ2libGUgZm9yIGxpbnRpbmcuIEFuIGVtcHR5IGxpc3Qgc2VsZWN0cyBubyBmaWxlcy4gVGhpcyBvcHRpb24gY2FuXG4gICAqIG9ubHkgbmFycm93IHRoZSBmaWxlcyBzZWxlY3RlZCBieSBgZmlsZXMuaW5jbHVkZXNgLlxuICAgKlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsaW50LXJ1bGUgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTGludGVyQ29uZmlndXJhdGlvbihvYmo6IExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogdG9Kc29uX1J1bGVEb21haW5zKG9iai5kb21haW5zKSxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ3J1bGVzJzogdG9Kc29uX1J1bGVzKG9iai5ydWxlcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gTWFya2Rvd24gZmlsZXNcbiAqXG4gKiBAc2NoZW1hIE1hcmtkb3duQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtkb3duQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBSdW5zIHRoZSBsaW50ZXIgYW5kIGFzc2lzdCBhY3Rpb25zIG9uIHRoZSBjb2RlIGluc2lkZSBmZW5jZWQgY29kZSBibG9ja3MsIGZyb250bWF0dGVyLCBhbmRcbiAgICogSFRNTCBibG9ja3MsIHdpdGggdGhlIHJ1bGVzIGFuZCBhY3Rpb25zIG9mIHRoZSBjb2RlJ3MgbGFuZ3VhZ2UuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBNYXJrZG93bkNvbmZpZ3VyYXRpb24jYW5hbHl6ZUVtYmVkc1xuICAgKi9cbiAgcmVhZG9ubHkgYW5hbHl6ZUVtYmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgTWFya2Rvd25Db25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogTWFya2Rvd25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMaW50ZXIgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIE1hcmtkb3duQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IE1hcmtkb3duTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogUGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgTWFya2Rvd25Db25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogTWFya2Rvd25QYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdNYXJrZG93bkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9NYXJrZG93bkNvbmZpZ3VyYXRpb24ob2JqOiBNYXJrZG93bkNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhbmFseXplRW1iZWRzJzogb2JqLmFuYWx5emVFbWJlZHMsXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9NYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9NYXJrZG93bkxpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ3BhcnNlcic6IHRvSnNvbl9NYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVyblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlUGF0dGVybiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgc2V0dGluZ3MgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1Mtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Nzc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzPzogQ3NzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRmlsZS1oYW5kbGluZyBzZXR0aW5ncyBmb3IgbWF0Y2hlZCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzPzogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRlciBzZXR0aW5ncyBmb3IgbWF0Y2hlZCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEdyYXBoUUwtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2dyYXBocWxcbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWw/OiBHcmFwaHFsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogR3JpdFFMLXNwZWNpZmljIHNldHRpbmdzIGZvciBtYXRjaGVkIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNncml0XG4gICAqL1xuICByZWFkb25seSBncml0PzogR3JpdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEhUTUwtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2h0bWxcbiAgICovXG4gIHJlYWRvbmx5IGh0bWw/OiBIdG1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMgc2VsZWN0aW5nIHRoZSBmaWxlcyB0byB3aGljaCB0aGlzIG92ZXJyaWRlIGFwcGxpZXMuIElmIG9taXR0ZWQsIHRoZVxuICAgKiBvdmVycmlkZSBhcHBsaWVzIHRvIGV2ZXJ5IGZpbGUuIEFuIGVtcHR5IGxpc3QgYXBwbGllcyB0byBubyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEphdmFTY3JpcHQtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEpTT04tc3BlY2lmaWMgc2V0dGluZ3MgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTGludGVyIHNldHRpbmdzIGZvciBtYXRjaGVkIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIE1hcmtkb3duIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI21hcmtkb3duXG4gICAqL1xuICByZWFkb25seSBtYXJrZG93bj86IE1hcmtkb3duQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBwbHVnaW5zIGZvciBtYXRjaGVkIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNwbHVnaW5zXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogYW55W107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBZQU1MIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI3lhbWxcbiAgICovXG4gIHJlYWRvbmx5IHlhbWw/OiBZYW1sQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnT3ZlcnJpZGVQYXR0ZXJuJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fT3ZlcnJpZGVQYXR0ZXJuKG9iajogT3ZlcnJpZGVQYXR0ZXJuIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnY3NzJzogdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqLmNzcyksXG4gICAgJ2ZpbGVzJzogdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iai5maWxlcyksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9PdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dyYXBocWwnOiB0b0pzb25fR3JhcGhxbENvbmZpZ3VyYXRpb24ob2JqLmdyYXBocWwpLFxuICAgICdncml0JzogdG9Kc29uX0dyaXRDb25maWd1cmF0aW9uKG9iai5ncml0KSxcbiAgICAnaHRtbCc6IHRvSnNvbl9IdG1sQ29uZmlndXJhdGlvbihvYmouaHRtbCksXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX092ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAnbWFya2Rvd24nOiB0b0pzb25fTWFya2Rvd25Db25maWd1cmF0aW9uKG9iai5tYXJrZG93biksXG4gICAgJ3BsdWdpbnMnOiBvYmoucGx1Z2lucz8ubWFwKHkgPT4geSksXG4gICAgJ3lhbWwnOiB0b0pzb25fWWFtbENvbmZpZ3VyYXRpb24ob2JqLnlhbWwpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGVsbHMgQmlvbWUgd2hlcmUgeW91ciBjb2RlIGxpc3RzIFRhaWx3aW5kIENTUyBjbGFzc2VzLCBzbyB0aGUgVGFpbHdpbmRcbiAqIGxpbnQgcnVsZXMga25vdyB3aGljaCBzdHJpbmdzIHRvIGNoZWNrLlxuICpcbiAqIEBzY2hlbWEgVGFpbHdpbmRDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFpbHdpbmRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIGFyZSBUYWlsd2luZCBjbGFzc2VzLCBzdWNoIGFzIGBjbGFzc2AgaW5cbiAgICogYDxkaXYgY2xhc3M9XCJweC0yIHB5LTJcIj5gLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byBgY2xhc3NgIGFuZCBgY2xhc3NOYW1lYC4gSW4gSFRNTCwgdGhleSBhcmUgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgY2xhc3NgIGFuZCBgY2xhc3NOYW1lYC4gSW4gSFRNTCwgdGhleSBhcmUgY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICogQHNjaGVtYSBUYWlsd2luZENvbmZpZ3VyYXRpb24jYXR0cmlidXRlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbnMgdGhhdCBjb21iaW5lIFRhaWx3aW5kIGNsYXNzZXMsIHN1Y2ggYXMgYGNsc3hgIGFuZCBgY25gLlxuICAgKlxuICAgKiBCaW9tZSBjaGVja3MgZXZlcnkgc3RyaW5nIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnMsIGxpa2UgYm90aCBzdHJpbmdzXG4gICAqIGluIGBjbihcInB4LTJcIiwgXCJweS0yXCIpYC4gV2hlbiBhbiBvYmplY3QgaXMgcGFzc2VkLCBCaW9tZSBjaGVja3MgaXRzXG4gICAqIGtleXM6IGluIGBjbih7IFwicHgtMlwiOiBpc0FjdGl2ZSB9KWAsIGl0IGNoZWNrcyBgXCJweC0yXCJgLlxuICAgKlxuICAgKiBQcm9wZXJ0aWVzIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2hlY2tlZCB0b28sIHNvIGxpc3RpbmcgYHR3YCBhbHNvXG4gICAqIGNvdmVycyBgYCB0dy5kaXZgcHgtMmAgYGAgYW5kIGB0dy5kaXYoXCJweC0yXCIpYC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGNsc3hgLCBgdHdgLCBgdHdNZXJnZWAsIGB0d0pvaW5gLCBgY25gLCBgY2NgLCBgY25iYCwgYW5kXG4gICAqIGBjdGxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjbHN4YCwgYHR3YCwgYHR3TWVyZ2VgLCBgdHdKb2luYCwgYGNuYCwgYGNjYCwgYGNuYmAsIGFuZFxuICAgKiBAc2NoZW1hIFRhaWx3aW5kQ29uZmlndXJhdGlvbiNtZXJnZUZ1bmN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWVyZ2VGdW5jdGlvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENTUyBmaWxlIHRoYXQgaG9sZHMgeW91ciBUYWlsd2luZCBDU1MgY29uZmlndXJhdGlvbiwgc3VjaCBhc1xuICAgKiBgXCIuL3NyYy9hcHAuY3NzXCJgLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRzIGZyb20gdGhlIGZvbGRlciBvZiB0aGUgQmlvbWVcbiAgICogY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKlxuICAgKiBCaW9tZSByZWFkcyB0aGUgYEB0aGVtZWAsIGBAdXRpbGl0eWAsIGFuZCBgQGN1c3RvbS12YXJpYW50YCBydWxlcyBpblxuICAgKiB0aGlzIGZpbGUgYW5kIGluIHRoZSBmaWxlcyBpdCBpbXBvcnRzIHdpdGggYEBpbXBvcnRgLCBzbyB0aGF0IHRoZVxuICAgKiBUYWlsd2luZCBydWxlcyBrbm93IHlvdXIgdGhlbWUgdmFsdWVzLCB1dGlsaXRpZXMsIGFuZCB2YXJpYW50cy5cbiAgICpcbiAgICogVG8gcmVhZCB0aGUgZmlsZSwgQmlvbWUgc2NhbnMgeW91ciBwcm9qZWN0IHdoZW4gYSBUYWlsd2luZCBydWxlIGlzXG4gICAqIGVuYWJsZWQuIFNldHRpbmcgdGhpcyBvcHRpb24gYWxzbyB0dXJucyBvbiBgY3NzLnBhcnNlci50YWlsd2luZERpcmVjdGl2ZXNgLFxuICAgKiB1bmxlc3MgeW91IHNldCB0aGF0IG9wdGlvbiB5b3Vyc2VsZi5cbiAgICpcbiAgICogQHNjaGVtYSBUYWlsd2luZENvbmZpZ3VyYXRpb24jc3R5bGVzaGVldFxuICAgKi9cbiAgcmVhZG9ubHkgc3R5bGVzaGVldD86IHN0cmluZztcblxuICAvKipcbiAgICogRnVuY3Rpb25zIHRoYXQgZGVzY3JpYmUgYSBjb21wb25lbnQncyBzdHlsZXMgd2l0aCBhbiBvYmplY3QsIHN1Y2ggYXNcbiAgICogYGN2YWAgYW5kIGB0dmAuXG4gICAqXG4gICAqIEJpb21lIGNoZWNrcyBldmVyeSBzdHJpbmcgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZXNlIGZ1bmN0aW9ucy4gSW4gYW5cbiAgICogb2JqZWN0IHBhc3NlZCB0byB0aGVtLCBCaW9tZSBjaGVja3MgdGhlIGNsYXNzZXMgdW5kZXIgdGhlc2UgcHJvcGVydGllczpcbiAgICpcbiAgICogLSBgYmFzZWAsIGBjbGFzc2AsIGFuZCBgY2xhc3NOYW1lYDogY2xhc3NlcyB0aGF0IGFsd2F5cyBhcHBseS5cbiAgICogLSBgdmFyaWFudHNgOiBjbGFzc2VzIGZvciBlYWNoIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgc3VjaCBhcyBlYWNoXG4gICAqIGJ1dHRvbiBzaXplLlxuICAgKiAtIGBzbG90c2A6IGNsYXNzZXMgZm9yIGVhY2ggcGFydCBvZiB0aGUgY29tcG9uZW50LCBzdWNoIGFzIGl0cyBpY29uLlxuICAgKiAtIGBjb21wb3VuZFZhcmlhbnRzYCBhbmQgYGNvbXBvdW5kU2xvdHNgOiBvbmx5IHRoZSBgY2xhc3NgIGFuZFxuICAgKiBgY2xhc3NOYW1lYCBvZiBlYWNoIGVudHJ5LlxuICAgKlxuICAgKiBPdGhlciBwcm9wZXJ0aWVzLCBzdWNoIGFzIGBkZWZhdWx0VmFyaWFudHNgLCBob2xkIG5hbWVzIHJhdGhlciB0aGFuXG4gICAqIGNsYXNzZXMsIHNvIEJpb21lIHNraXBzIHRoZW0uIEZvciBleGFtcGxlLCBCaW9tZSBjaGVja3MgYFwicm91bmRlZFwiYCxcbiAgICogYFwicHgtMlwiYCwgYW5kIGBcInB4LTRcImAgaGVyZSwgYnV0IG5vdCBgXCJzbWFsbFwiYDpcbiAgICpcbiAgICogYGBganNcbiAgICogY3ZhKFwicm91bmRlZFwiLCB7XG4gICAqIHZhcmlhbnRzOiB7XG4gICAqIHNpemU6IHsgc21hbGw6IFwicHgtMlwiLCBsYXJnZTogXCJweC00XCIgfSxcbiAgICogfSxcbiAgICogZGVmYXVsdFZhcmlhbnRzOiB7IHNpemU6IFwic21hbGxcIiB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBjdmFgIGFuZCBgdHZgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjdmFgIGFuZCBgdHZgLlxuICAgKiBAc2NoZW1hIFRhaWx3aW5kQ29uZmlndXJhdGlvbiN2YXJpYW50RnVuY3Rpb25zXG4gICAqL1xuICByZWFkb25seSB2YXJpYW50RnVuY3Rpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1RhaWx3aW5kQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1RhaWx3aW5kQ29uZmlndXJhdGlvbihvYmo6IFRhaWx3aW5kQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZXMnOiBvYmouYXR0cmlidXRlcz8ubWFwKHkgPT4geSksXG4gICAgJ21lcmdlRnVuY3Rpb25zJzogb2JqLm1lcmdlRnVuY3Rpb25zPy5tYXAoeSA9PiB5KSxcbiAgICAnc3R5bGVzaGVldCc6IG9iai5zdHlsZXNoZWV0LFxuICAgICd2YXJpYW50RnVuY3Rpb25zJzogb2JqLnZhcmlhbnRGdW5jdGlvbnM/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29uZmlndXJlcyBob3cgQmlvbWUgaW50ZWdyYXRlcyB3aXRoIGEgdmVyc2lvbiBjb250cm9sIHN5c3RlbS5cbiAqXG4gKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWY3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHZlcnNpb24tY29udHJvbCBjbGllbnQuIEN1cnJlbnRseSwgb25seSBgZ2l0YCBpcyBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiNjbGllbnRLaW5kXG4gICAqL1xuICByZWFkb25seSBjbGllbnRLaW5kPzogVmNzQ2xpZW50S2luZDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYmFzZSBicmFuY2ggdXNlZCBieSBgLS1jaGFuZ2VkYCB3aGVuIGAtLXNpbmNlYCBpcyBub3QgcHJvdmlkZWQuIElmIG5laXRoZXIgdGhpcyBvcHRpb25cbiAgICogbm9yIGAtLXNpbmNlYCBpcyBzZXQsIGNvbW1hbmRzIHVzaW5nIGAtLWNoYW5nZWRgIGZhaWwgYmVjYXVzZSBCaW9tZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZVxuICAgKiBjb21wYXJpc29uIGJhc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiNkZWZhdWx0QnJhbmNoXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHZlcnNpb24tY29udHJvbCBpbnRlZ3JhdGlvbi4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gRW5hYmxpbmcgaW50ZWdyYXRpb25cbiAgICogcmVxdWlyZXMgYHZjcy5jbGllbnRLaW5kYCB0byBiZSBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC4gRW5hYmxpbmcgaW50ZWdyYXRpb25cbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgQmlvbWUgbG9va3MgZm9yIHZlcnNpb24tY29udHJvbCBmaWxlcy4gQSByZWxhdGl2ZSB2YWx1ZSBpcyByZXNvbHZlZFxuICAgKiBmcm9tIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWxlIGFuIGFic29sdXRlIHBhdGggaXMgdXNlZFxuICAgKiBkaXJlY3RseS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBiaW9tZS5qc29uYCBvciBgYmlvbWUuanNvbmNgLiBJZiBubyBjb25maWd1cmF0aW9uIGlzXG4gICAqIGZvdW5kLCBCaW9tZSB1c2VzIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBJZiBuZWl0aGVyIGRpcmVjdG9yeSBpcyBhdmFpbGFibGUsIEJpb21lIGRpc2FibGVzIHZlcnNpb24gY29udHJvbCBpbnRlZ3JhdGlvbiBhbmQgZW1pdHMgYVxuICAgKiBkaWFnbm9zdGljLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGJpb21lLmpzb25gIG9yIGBiaW9tZS5qc29uY2AuIElmIG5vIGNvbmZpZ3VyYXRpb24gaXNcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI3Jvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgQmlvbWUgYXBwbGllcyBwYXR0ZXJucyBmcm9tIGAuZ2l0aWdub3JlYCwgR2l0J3MgbG9jYWwgYC5naXQvaW5mby9leGNsdWRlYCxcbiAgICogYW5kIHN1cHBvcnRlZCBgLmlnbm9yZWAgZmlsZXMsIGluY2x1ZGluZyBuZXN0ZWQgaWdub3JlIGZpbGVzLiBQYXR0ZXJucyBpbiB0aGUgcm9vdCBpZ25vcmUgZmlsZVxuICAgKiBhcmUgcmVzb2x2ZWQgZnJvbSBgdmNzLnJvb3RgLiBQYXR0ZXJucyBpbiBuZXN0ZWQgaWdub3JlIGZpbGVzIGFyZSByZXNvbHZlZCBmcm9tIHRoZSBkaXJlY3RvcnlcbiAgICogY29udGFpbmluZyB0aGF0IGZpbGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI3VzZUlnbm9yZUZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZUlnbm9yZUZpbGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdWY3NDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVmNzQ29uZmlndXJhdGlvbihvYmo6IFZjc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjbGllbnRLaW5kJzogb2JqLmNsaWVudEtpbmQsXG4gICAgJ2RlZmF1bHRCcmFuY2gnOiBvYmouZGVmYXVsdEJyYW5jaCxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdyb290Jzogb2JqLnJvb3QsXG4gICAgJ3VzZUlnbm9yZUZpbGUnOiBvYmoudXNlSWdub3JlRmlsZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBZYW1sIGZpbGVzXG4gKlxuICogQHNjaGVtYSBZYW1sQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFlhbWxDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEZvcm1hdHRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgWWFtbENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBZYW1sQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IFlhbWxMaW50ZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdZYW1sQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1lhbWxDb25maWd1cmF0aW9uKG9iajogWWFtbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fWWFtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9ZYW1sTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbnMge1xuICAvKipcbiAgICogU2VsZWN0cyB0aGUgYmFzZWxpbmUgc2V0IG9mIGFzc2lzdCBhY3Rpb25zLiBgcmVjb21tZW5kZWRgIGVuYWJsZXMgQmlvbWUnc1xuICAgKiByZWNvbW1lbmRlZCBhY3Rpb25zLCBgYWxsYCBlbmFibGVzIGFsbCBhY3Rpb25zLCBhbmQgYG5vbmVgIHN0YXJ0cyB3aXRoIG5vIGFjdGlvbnNcbiAgICogZW5hYmxlZC4gR3JvdXAgcHJlc2V0cyBhbmQgZXhwbGljaXQgYWN0aW9uIHNldHRpbmdzIG92ZXJyaWRlIHRoaXMgcHJlc2V0LlxuICAgKiBEZWZhdWx0cyB0byBgcmVjb21tZW5kZWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCByZWNvbW1lbmRlZGAuXG4gICAqIEBzY2hlbWEgQWN0aW9ucyNwcmVzZXRcbiAgICovXG4gIHJlYWRvbmx5IHByZXNldD86IFByZXNldENvbmZpZztcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBCaW9tZSdzIHJlY29tbWVuZGVkIGFzc2lzdCBhY3Rpb25zIGFjcm9zcyBhbGwgYWN0aW9uIGdyb3Vwcy5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlYC5cbiAgICogQHNjaGVtYSBBY3Rpb25zI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgc291cmNlLWxldmVsIGFjdGlvbnMgc3VjaCBhcyBvcmdhbml6aW5nIGltcG9ydHMgYW5kIHNvcnRpbmcgZGVjbGFyYXRpb25zLiBUaGVzZSBhY3Rpb25zIGFyZSBleHBvc2VkIHRocm91Z2ggZWRpdG9yIHNvdXJjZSBhY3Rpb25zIGFuZCB0aHJvdWdoIENMSSBjaGVja2luZyBhbmQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQWN0aW9ucyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IFNvdXJjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQWN0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0FjdGlvbnMob2JqOiBBY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncHJlc2V0Jzogb2JqLnByZXNldCxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NvdXJjZSc6IHRvSnNvbl9Tb3VyY2Uob2JqLnNvdXJjZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBDU1MgYXNzaXN0IGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBDc3NBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFzc2lzdCBhY3Rpb25zIGZvciBDU1MuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBDc3NBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIENTUyBmb3JtYXR0ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbnNpZGUgQ1NTIHBhcmVudGhlc2VzIGFuZCBzcXVhcmUgYnJhY2tldHMgd2hlbiB0aGVpciBjb250ZW50IGZpdHMgb24gb25lXG4gICAqIGxpbmUuIFdoZW4gZW5hYmxlZCwgYHJnYigwLCAwLCAwKWAgYmVjb21lcyBgcmdiKCAwLCAwLCAwIClgIGFuZCBgW2RhdGEtYXR0cl1gIGJlY29tZXNcbiAgICogYFsgZGF0YS1hdHRyIF1gLiBFbXB0eSBkZWxpbWl0ZXJzIGFyZSB1bmNoYW5nZWQuXG4gICAqXG4gICAqIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGRlbGltaXRlciBzcGFjaW5nIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNkZWxpbWl0ZXJTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBkZWxpbWl0ZXJTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybWF0dGVyIGZvciBDU1MgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gQ1NTIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnRhdGlvbiB3aWR0aCBhcHBsaWVkIHRvIENTUyBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlXG4gICAqIGdsb2JhbCBpbmRlbnRhdGlvbiB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gQ1NTIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmZXJyZWQgbWF4aW11bSBsaW5lIHdpZHRoIGZvciBDU1MgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzXG4gICAqIHRoZSBnbG9iYWwgbGluZSB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBwcmVmZXJyZWQgcXVvdGUgc3R5bGUgZm9yIENTUyBzdHJpbmdzLiBCaW9tZSBtYXkgdXNlIHRoZSBhbHRlcm5hdGUgcXVvdGUgd2hlblxuICAgKiB0aGF0IGF2b2lkcyBhZGRpdGlvbmFsIGVzY2FwaW5nLiBRdW90ZXMgaW4gYEBjaGFyc2V0YCBydWxlcyBhcmUgY3VycmVudGx5IHByZXNlcnZlZC5cbiAgICogRGVmYXVsdHMgdG8gYGRvdWJsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZWAuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIHRyYWlsaW5nIG5ld2xpbmUgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVsaW1pdGVyU3BhY2luZyc6IG9iai5kZWxpbWl0ZXJTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgQ1NTIGxpbnRlciBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbGludGVyIGZvciBDU1MuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIENTUyBwYXJzZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgYC8vYCBsaW5lIGNvbW1lbnRzIGluIHBsYWluIENTUy4gU3RhbmRhcmQgQ1NTIHRyZWF0cyBgLy9gIGFzIGRlbGltaXRlciBjaGFyYWN0ZXJzXG4gICAqIHJhdGhlciB0aGFuIGFzIGEgY29tbWVudCwgYW5kIFNDU1MgYWNjZXB0cyBgLy9gIGNvbW1lbnRzIGluZGVwZW5kZW50bHkgb2YgdGhpcyBvcHRpb24uXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI2FsbG93V3JvbmdMaW5lQ29tbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93V3JvbmdMaW5lQ29tbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIENTUyBNb2R1bGVzLXNwZWNpZmljIHN5bnRheCBzdWNoIGFzIGA6bG9jYWxgLCBgOmdsb2JhbGAsIGBjb21wb3Nlc2AsIGFuZCBgQHZhbHVlYC5cbiAgICogV2hlbiB1bnNldCwgQmlvbWUgZW5hYmxlcyB0aGlzIHN5bnRheCBhdXRvbWF0aWNhbGx5IGZvciBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgaW5cbiAgICogYC5tb2R1bGUuY3NzYCBvciBgLm1vZHVsZS5zY3NzOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIGBmYWxzZWAuIEVuYWJsZSBpdCBleHBsaWNpdGx5IHdoZW4gQ1NTIE1vZHVsZSBmaWxlc1xuICAgKiB1c2UgYW5vdGhlciBuYW1pbmcgY29udmVudGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI2Nzc01vZHVsZXNcbiAgICovXG4gIHJlYWRvbmx5IGNzc01vZHVsZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgVGFpbHdpbmQgQ1NTIDQuMCBkaXJlY3RpdmVzIGFuZCBmdW5jdGlvbnMsIGluY2x1ZGluZyBgQHRoZW1lYCwgYEB1dGlsaXR5YCxcbiAgICogYEB2YXJpYW50YCwgYEBzb3VyY2VgLCBhbmQgYEBhcHBseWAuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI3RhaWx3aW5kRGlyZWN0aXZlc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFpbHdpbmREaXJlY3RpdmVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NQYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsb3dXcm9uZ0xpbmVDb21tZW50cyc6IG9iai5hbGxvd1dyb25nTGluZUNvbW1lbnRzLFxuICAgICdjc3NNb2R1bGVzJzogb2JqLmNzc01vZHVsZXMsXG4gICAgJ3RhaWx3aW5kRGlyZWN0aXZlcyc6IG9iai50YWlsd2luZERpcmVjdGl2ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250cm9scyBhdHRyaWJ1dGUgcGxhY2VtZW50IGluIEhUTUwtbGlrZSBsYW5ndWFnZXMuXG4gKlxuICogQHNjaGVtYSBBdHRyaWJ1dGVQb3NpdGlvblxuICovXG5leHBvcnQgZW51bSBBdHRyaWJ1dGVQb3NpdGlvbiB7XG4gIC8qKiBQbGFjZXMgYXR0cmlidXRlcyBhdXRvbWF0aWNhbGx5IGFuZCB3cmFwcyB0aGVtIHdoZW4gbmVlZGVkLiAoYXV0bykgKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuICAvKiogUGxhY2VzIGVhY2ggYXR0cmlidXRlIG9uIGl0cyBvd24gbGluZSB3aGVuIGFuIGVsZW1lbnQgaGFzIG11bHRpcGxlIGF0dHJpYnV0ZXMuIChtdWx0aWxpbmUpICovXG4gIE1VTFRJTElORSA9IFwibXVsdGlsaW5lXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBFeHBhbmRcbiAqL1xuZXhwb3J0IGVudW0gRXhwYW5kIHtcbiAgLyoqIE9iamVjdHMgYXJlIGV4cGFuZGVkIHdoZW4gdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIGxlYWRpbmcgbmV3bGluZS4gQXJyYXlzIHJlbWFpbiBvbiBvbmVcbmxpbmUgaWYgdGhleSBmaXQuIChhdXRvKSAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG4gIC8qKiBPYmplY3RzIGFuZCBhcnJheXMgYXJlIGFsd2F5cyBleHBhbmRlZC4gKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIE9iamVjdHMgYW5kIGFycmF5cyByZW1haW4gb24gb25lIGxpbmUgaWYgdGhleSBmaXQuIChuZXZlcikgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBJbmRlbnRTdHlsZVxuICovXG5leHBvcnQgZW51bSBJbmRlbnRTdHlsZSB7XG4gIC8qKiBVc2VzIHRhYnMgZm9yIGluZGVudGF0aW9uLiAodGFiKSAqL1xuICBUQUIgPSBcInRhYlwiLFxuICAvKiogVXNlcyBzcGFjZXMgZm9yIGluZGVudGF0aW9uLiAoc3BhY2UpICovXG4gIFNQQUNFID0gXCJzcGFjZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgTGluZUVuZGluZ1xuICovXG5leHBvcnQgZW51bSBMaW5lRW5kaW5nIHtcbiAgLyoqIExpbmUgRmVlZCBvbmx5IChcXG4pLCBjb21tb24gb24gTGludXggYW5kIG1hY09TIGFzIHdlbGwgYXMgaW5zaWRlIGdpdCByZXBvcyAobGYpICovXG4gIExGID0gXCJsZlwiLFxuICAvKiogQ2FycmlhZ2UgUmV0dXJuICsgTGluZSBGZWVkIGNoYXJhY3RlcnMgKFxcclxcbiksIGNvbW1vbiBvbiBXaW5kb3dzIChjcmxmKSAqL1xuICBDUkxGID0gXCJjcmxmXCIsXG4gIC8qKiBDYXJyaWFnZSBSZXR1cm4gY2hhcmFjdGVyIG9ubHkgKFxcciksIHVzZWQgdmVyeSByYXJlbHkgKGNyKSAqL1xuICBDUiA9IFwiY3JcIixcbiAgLyoqIEF1dG9tYXRpY2FsbHkgdXNlIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zIChhdXRvKSAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgR3JhcGhRTCBhc3Npc3QgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhc3Npc3QgYWN0aW9ucyBmb3IgR3JhcGhRTC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgR3JhcGhRTCBmb3JtYXR0ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbHMgc3BhY2VzIGluc2lkZSB0aGUgYnJhY2VzIG9mIHNpbmdsZS1saW5lIEdyYXBoUUwgb2JqZWN0IHZhbHVlcy4gQmlvbWUgZm9ybWF0c1xuICAgKiBge25hbWU6IFwiQmlvbWVcIn1gIHdoZW4gZGlzYWJsZWQgYW5kIGB7IG5hbWU6IFwiQmlvbWVcIiB9YCB3aGVuIGVuYWJsZWQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGJyYWNrZXQgc3BhY2luZyBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTC5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBpbmRlbnRhdGlvblxuICAgKiB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlZmVycmVkIG1heGltdW0gbGluZSB3aWR0aCBmb3IgR3JhcGhRTCBmaWxlcy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgbGluZVxuICAgKiB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBmb3JtYXR0ZXIgc3VwcG9ydC4gVGhlIGN1cnJlbnQgZm9ybWF0dGVyIHByZXNlcnZlcyBzdGFuZGFyZFxuICAgKiBkb3VibGUtcXVvdGVkIEdyYXBoUUwgc3RyaW5ncyBhbmQgZG9lcyBub3QgdXNlIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIHRyYWlsaW5nIG5ld2xpbmUgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgR3JhcGhRTCBsaW50ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbGludGVyIGZvciBHcmFwaFFMLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyBHcml0UUwgYXNzaXN0IGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcml0QXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYXNzaXN0IGFjdGlvbnMgZm9yIEdyaXRRTC5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0QXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0QXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEdyaXRBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEdyaXRRTCBmb3JtYXR0ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybWF0dGVyIGZvciBHcml0UUwuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBHcml0UUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBHcml0UUwgZmlsZXMuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGluZGVudGF0aW9uXG4gICAqIHdpZHRoLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gR3JpdFFMIGZpbGVzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBtYXhpbXVtIGxpbmUgd2lkdGggZm9yIEdyaXRRTCBmaWxlcy4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgbGluZSB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSB0cmFpbGluZyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIHRyYWlsaW5nIG5ld2xpbmUgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgR3JpdFFMIGxpbnRlciBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcml0TGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW50ZXIgZm9yIEdyaXRRTC5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0TGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0TGludGVyQ29uZmlndXJhdGlvbihvYmo6IEdyaXRMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgSFRNTCBhc3Npc3QgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEh0bWxBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhc3Npc3QgYWN0aW9ucyBmb3IgSFRNTCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxBc3Npc3RDb25maWd1cmF0aW9uKG9iajogSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgSFRNTCBmb3JtYXR0ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBIVE1MIGVsZW1lbnRzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVcbiAgICogcG9zaXRpb24gc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgY2xvc2luZyBicmFja2V0IGZvciBtdWx0aWxpbmUgSFRNTCBvcGVuaW5nIHRhZ3MuIEJpb21lIHBsYWNlc1xuICAgKiB0aGUgYnJhY2tldCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGF0dHJpYnV0ZSBsaW5lIHdoZW4gZW5hYmxlZCBhbmQgb24gaXRzIG93biBsaW5lIGFmdGVyIHRoZVxuICAgKiBsYXN0IGF0dHJpYnV0ZSB3aGVuIGRpc2FibGVkLiBUaGlzIG9wdGlvbiBhbHNvIGFmZmVjdHMgc2VsZi1jbG9zaW5nIEhUTUwgZWxlbWVudHMuIElmIHVuc2V0LFxuICAgKiBpbmhlcml0cyB0aGUgZ2xvYmFsIGBicmFja2V0U2FtZUxpbmVgIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb3JtYXR0ZXIgZm9yIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gVGhlIGZvcm1hdHRlciBpc1xuICAgKiBleHBlcmltZW50YWwgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEZvcm1hdHRpbmcgY29tcGxldGUgSFRNTCwgVnVlLCBTdmVsdGUsIGFuZCBBc3RybyBmaWxlc1xuICAgKiByZXF1aXJlcyBgaHRtbC5leHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWRgIHRvIGJlIGB0cnVlYC5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0aGUgY29udGVudCBvZiBgPHNjcmlwdD5gIGFuZCBgPHN0eWxlPmAgdGFncyBpcyBpbmRlbnRlZCBieSBvbmUgbGV2ZWwgaW5cbiAgICogSFRNTCwgVnVlLCBTdmVsdGUsIGFuZCBBc3RybyBmaWxlcy4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFNjcmlwdEFuZFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTY3JpcHRBbmRTdHlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBIVE1MIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBIVE1MIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGluZGVudGF0aW9uIHdpZHRoLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSFRNTCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBtYXhpbXVtIGxpbmUgd2lkdGggZm9yIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsIGluaGVyaXRzXG4gICAqIHRoZSBnbG9iYWwgbGluZSB3aWR0aC5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB2b2lkIGVsZW1lbnRzIGFyZSBzZWxmLWNsb3NlZC4gRGVmYXVsdHMgdG8gYG5ldmVyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgbmV2ZXJgLlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3NlbGZDbG9zZVZvaWRFbGVtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgc2VsZkNsb3NlVm9pZEVsZW1lbnRzPzogU2VsZkNsb3NlVm9pZEVsZW1lbnRzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4gVW5saWtlIG90aGVyIGxhbmd1YWdlLXNwZWNpZmljXG4gICAqIHRyYWlsaW5nIG5ld2xpbmUgc2V0dGluZ3MsIHRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIGB0cnVlYCBpbnN0ZWFkIG9mIGluaGVyaXRpbmcgdGhlIGdsb2JhbFxuICAgKiBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgaG93IHRoZSBmb3JtYXR0ZXIgdHJlYXRzIHdoaXRlc3BhY2UgYXJvdW5kIHRleHQgYW5kIGNoaWxkIGVsZW1lbnRzIGluIEhUTUwsIFZ1ZSxcbiAgICogU3ZlbHRlLCBhbmQgQXN0cm8gbWFya3VwLiBUaGUgYGlnbm9yZWAgc2V0dGluZyBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gd2hpdGVzcGFjZSBjYW5ub3RcbiAgICogYWZmZWN0IHJlbmRlcmVkIG91dHB1dC4gRGVmYXVsdHMgdG8gYGNzc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGNzc2AuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jd2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gICAqL1xuICByZWFkb25seSB3aGl0ZXNwYWNlU2Vuc2l0aXZpdHk/OiBXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFNjcmlwdEFuZFN0eWxlJzogb2JqLmluZGVudFNjcmlwdEFuZFN0eWxlLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAnc2VsZkNsb3NlVm9pZEVsZW1lbnRzJzogb2JqLnNlbGZDbG9zZVZvaWRFbGVtZW50cyxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgICAnd2hpdGVzcGFjZVNlbnNpdGl2aXR5Jzogb2JqLndoaXRlc3BhY2VTZW5zaXRpdml0eSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBIVE1MIGxpbnRlciBiZWhhdmVzLlxuICpcbiAqIEBzY2hlbWEgSHRtbExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW50ZXIgZm9yIEhUTUwgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEhUTUwgcGFyc2VyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgZG91YmxlLWN1cmx5IGludGVycG9sYXRpb24gZXhwcmVzc2lvbnMgc3VjaCBhcyBge3sgZXhwcmVzc2lvbiB9fWAgaW4gYC5odG1sYCBmaWxlcy5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VgLlxuICAgKiBAc2NoZW1hIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uI2ludGVycG9sYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGludGVycG9sYXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgVnVlIHN5bnRheCAoYHYtaWZgLCBgdi1iaW5kYCwgZXRjLikgaW4gYC5odG1sYCBmaWxlcy4gRW5hYmxpbmcgdGhpcyBvcHRpb25cbiAgICogYWxzbyBlbmFibGVzIGBpbnRlcnBvbGF0aW9uYCBpbXBsaWNpdGx5LlxuICAgKlxuICAgKiBCaW9tZSB3aWxsIGFscmVhZHkgYXV0b21hdGljYWxseSBlbmFibGUgVnVlIHBhcnNpbmcgaW4gYC52dWVgIGZpbGVzLCBzbyB5b3UgcHJvYmFibHkgZG9uJ3QgbmVlZFxuICAgKiB0byBlbmFibGUgdGhpcyBvcHRpb24uIFRoaXMgb25seSBhZmZlY3RzIGAuaHRtbGAgZmlsZXMsIGFuZCBkb2VzIG5vdCBjaGFuZ2UgaG93IGAudnVlYCwgYC5zdmVsdGVgLFxuICAgKiBvciBgLmFzdHJvYCBmaWxlcyBhcmUgcGFyc2VkLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24jdnVlXG4gICAqL1xuICByZWFkb25seSB2dWU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxQYXJzZXJDb25maWd1cmF0aW9uKG9iajogSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpbnRlcnBvbGF0aW9uJzogb2JqLmludGVycG9sYXRpb24sXG4gICAgJ3Z1ZSc6IG9iai52dWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBc3Npc3Qgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSmF2YVNjcmlwdCBhc3Npc3RcbiAqXG4gKiBAc2NoZW1hIEpzQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFzc2lzdCBhY3Rpb25zIGZvciBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0Fzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBKc0Fzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBGb3JtYXR0aW5nIG9wdGlvbnMgc3BlY2lmaWMgdG8gSmF2YVNjcmlwdCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICpcbiAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHBhcmVudGhlc2VzIGFyb3VuZCBhcnJvdy1mdW5jdGlvbiBwYXJhbWV0ZXJzLiBgYWx3YXlzYCBhbHdheXMgcHJpbnRzIHBhcmVudGhlc2VzLFxuICAgKiB3aGlsZSBgYXNOZWVkZWRgIG9taXRzIHRoZW0gd2hlbiBhbiBhcnJvdyBmdW5jdGlvbiBoYXMgb25lIHBhcmFtZXRlciBhbmQgdGhlIHN5bnRheCBwZXJtaXRzXG4gICAqIGl0LiBEZWZhdWx0cyB0byBgYWx3YXlzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYWx3YXlzYC5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXJyb3dQYXJlbnRoZXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXJyb3dQYXJlbnRoZXNlcz86IEFycm93UGFyZW50aGVzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgcG9zaXRpb24gc3R5bGUgaW4gSlNYIGVsZW1lbnRzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVcbiAgICogcG9zaXRpb24gc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGNsb3NpbmcgYnJhY2tldCBmb3IgbXVsdGlsaW5lIEpTWCBvcGVuaW5nIHRhZ3MuIEJpb21lIHBsYWNlc1xuICAgKiB0aGUgYnJhY2tldCBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGF0dHJpYnV0ZSBsaW5lIHdoZW4gZW5hYmxlZCBhbmQgb24gaXRzIG93biBsaW5lIGFmdGVyIHRoZVxuICAgKiBsYXN0IGF0dHJpYnV0ZSB3aGVuIGRpc2FibGVkLiBTZWxmLWNsb3NpbmcgSlNYIGVsZW1lbnRzIGFyZSB1bmFmZmVjdGVkLiBJZiB1bnNldCwgaW5oZXJpdHNcbiAgICogdGhlIGdsb2JhbCBicmFja2V0IHBsYWNlbWVudCBzZXR0aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U2FtZUxpbmVcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTYW1lTGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbnNpZGUgdGhlIGJyYWNlcyBvZiBzaW5nbGUtbGluZSBvYmplY3QgbGl0ZXJhbHMuIEJpb21lIGZvcm1hdHMgYHt2YWx1ZTogMX1gXG4gICAqIHdoZW4gZGlzYWJsZWQgYW5kIGB7IHZhbHVlOiAxIH1gIHdoZW4gZW5hYmxlZC4gSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgYnJhY2tldCBzcGFjaW5nXG4gICAqIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbW1lZGlhdGVseSBpbnNpZGUgc3VwcG9ydGVkIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQgZGVsaW1pdGVycyB3aGVuIHRoZWlyXG4gICAqIGNvbnRlbnQgZml0cyBvbiBvbmUgbGluZS4gVGhpcyBhZmZlY3RzIHBhcmVudGhlc2VzLCBzcXVhcmUgYnJhY2tldHMsIHRlbXBsYXRlXG4gICAqIGludGVycG9sYXRpb25zLCBUeXBlU2NyaXB0IGFuZ2xlIGJyYWNrZXRzLCBhbmQgSlNYIGV4cHJlc3Npb24gYnJhY2VzLiBFbXB0eSBkZWxpbWl0ZXJzIGFyZVxuICAgKiB1bmNoYW5nZWQuXG4gICAqXG4gICAqIEl0IGFsc28gY29udHJvbHMgc3BhY2luZyBhZnRlciBsb2dpY2FsIE5PVCBvcGVyYXRvcnMuIEluIGEgY2hhaW4gb2YgbG9naWNhbCBOT1Qgb3BlcmF0b3JzLFxuICAgKiBvbmx5IHRoZSBmaW5hbCBvcGVyYXRvciByZWNlaXZlcyBhIGZvbGxvd2luZyBzcGFjZS4gQmlvbWUgZG9lc24ndCBhZGQgc3BhY2VzIGJlZm9yZSBvcGVuaW5nXG4gICAqIGRlbGltaXRlcnMuXG4gICAqXG4gICAqIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGRlbGltaXRlciBzcGFjaW5nIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2RlbGltaXRlclNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGRlbGltaXRlclNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb3JtYXR0ZXIgZm9yIEphdmFTY3JpcHQgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZXMgdGhlIHNhbWUgYGF1dG9gLCBgYWx3YXlzYCwgYW5kIGBuZXZlcmAgYmVoYXZpb3IgYXMgdGhlIGdsb2JhbCBleHBhbnNpb24gc2V0dGluZy5cbiAgICpcbiAgICogSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgZXhwYW5zaW9uIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlXG4gICAqIGdsb2JhbCBpbmRlbnRhdGlvbiBzdHlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnRhdGlvbiB3aWR0aCBhcHBsaWVkIHRvIEphdmFTY3JpcHQgYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC4gSWYgdW5zZXQsXG4gICAqIGluaGVyaXRzIHRoZSBnbG9iYWwgaW5kZW50YXRpb24gd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgcHJlZmVycmVkIHF1b3RlIHN0eWxlIGZvciBKU1ggYXR0cmlidXRlIHZhbHVlcy4gRGVmYXVsdHMgdG8gYGRvdWJsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZWAuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2pzeFF1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGpzeFF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBlbmRpbmcgYXBwbGllZCB0byBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBtYXhpbXVtIGxpbmUgd2lkdGggYXBwbGllZCB0byBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmXG4gICAqIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGJyZWFraW5nIGJpbmFyeSBleHByZXNzaW9ucyBpbnRvIG11bHRpcGxlIGxpbmVzLCB3aGV0aGVyIHRvIGJyZWFrIHRoZW0gYmVmb3JlIG9yIGFmdGVyXG4gICAqIHRoZSBiaW5hcnkgb3BlcmF0b3IuIERlZmF1bHRzIHRvIGBhZnRlcmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFmdGVyYC5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jb3BlcmF0b3JMaW5lYnJlYWtcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdG9yTGluZWJyZWFrPzogT3BlcmF0b3JMaW5lYnJlYWs7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgcXVvdGVzIGFyb3VuZCBvYmplY3QgcHJvcGVydHkgbmFtZXMgYXJlIHByZXNlcnZlZC4gYGFzTmVlZGVkYCByZW1vdmVzXG4gICAqIHF1b3RlcyB3aGVuIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHZhbGlkIHdpdGhvdXQgdGhlbSwgd2hpbGUgYHByZXNlcnZlYCBrZWVwcyBxdW90ZXMgYXJvdW5kXG4gICAqIHByb3BlcnR5IG5hbWVzIHRoYXQgd2VyZSBxdW90ZWQgaW4gdGhlIGlucHV0LiBEZWZhdWx0cyB0byBgYXNOZWVkZWRgIGluIGNvbmZpZ3VyYXRpb25cbiAgICogKGBhcy1uZWVkZWRgIG9uIHRoZSBDTEkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhc05lZWRlZGAgaW4gY29uZmlndXJhdGlvblxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlUHJvcGVydGllcz86IFF1b3RlUHJvcGVydGllcztcblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgcHJlZmVycmVkIHF1b3RlIHN0eWxlIGZvciBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IHN0cmluZyBsaXRlcmFscy4gQmlvbWUgbWF5XG4gICAqIHVzZSB0aGUgYWx0ZXJuYXRlIHF1b3RlIHdoZW4gdGhhdCBhdm9pZHMgYWRkaXRpb25hbCBlc2NhcGluZy4gRGVmYXVsdHMgdG8gYGRvdWJsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZWAuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBQcmludHMgc2VtaWNvbG9ucyBhZnRlciBldmVyeSBzdGF0ZW1lbnQgb3Igb25seSB3aGVyZSBuZWVkZWQgdG8gYXZvaWQgYXV0b21hdGljIHNlbWljb2xvblxuICAgKiBpbnNlcnRpb24gaGF6YXJkcy4gRGVmYXVsdHMgdG8gYGFsd2F5c2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsd2F5c2AuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3NlbWljb2xvbnNcbiAgICovXG4gIHJlYWRvbmx5IHNlbWljb2xvbnM/OiBTZW1pY29sb25zO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB0cmFpbGluZyBjb21tYXMgaW4gbXVsdGlsaW5lIGNvbW1hLXNlcGFyYXRlZCBzdHJ1Y3R1cmVzLiBgYWxsYCBhZGRzIHRyYWlsaW5nIGNvbW1hc1xuICAgKiB3aGVyZXZlciBzeW50YXggcGVybWl0cywgaW5jbHVkaW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGNhbGxzLiBgZXM1YCBhZGRzIHRoZW0gb25seSBpblxuICAgKiBjb25zdHJ1Y3RzIHN1cHBvcnRlZCBieSBFUzUsIHN1Y2ggYXMgYXJyYXkgYW5kIG9iamVjdCBsaXRlcmFscywgYW5kIGV4Y2x1ZGVzIGZ1bmN0aW9uXG4gICAqIHBhcmFtZXRlcnMsIGZ1bmN0aW9uIGNhbGxzLCBhbmQgVHlwZVNjcmlwdCB0eXBlIHBhcmFtZXRlcnMuIGBub25lYCByZW1vdmVzIHRyYWlsaW5nIGNvbW1hcy5cbiAgICogRGVmYXVsdHMgdG8gYGFsbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsbGAuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiB0cmFpbGluZyBuZXdsaW5lIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nTmV3bGluZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdOZXdsaW5lPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXJyb3dQYXJlbnRoZXNlcyc6IG9iai5hcnJvd1BhcmVudGhlc2VzLFxuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2RlbGltaXRlclNwYWNpbmcnOiBvYmouZGVsaW1pdGVyU3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2pzeFF1b3RlU3R5bGUnOiBvYmouanN4UXVvdGVTdHlsZSxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdvcGVyYXRvckxpbmVicmVhayc6IG9iai5vcGVyYXRvckxpbmVicmVhayxcbiAgICAncXVvdGVQcm9wZXJ0aWVzJzogb2JqLnF1b3RlUHJvcGVydGllcyxcbiAgICAncXVvdGVTdHlsZSc6IG9iai5xdW90ZVN0eWxlLFxuICAgICdzZW1pY29sb25zJzogb2JqLnNlbWljb2xvbnMsXG4gICAgJ3RyYWlsaW5nQ29tbWFzJzogb2JqLnRyYWlsaW5nQ29tbWFzLFxuICAgICd0cmFpbGluZ05ld2xpbmUnOiBvYmoudHJhaWxpbmdOZXdsaW5lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogSG93IEJpb21lJ3MgYW5hbHl6ZXIgYWNjb3VudHMgZm9yIGltcG9ydHMgdXNlZCBieSBKU1guXG4gKlxuICogQHNjaGVtYSBKc3hSdW50aW1lXG4gKi9cbmV4cG9ydCBlbnVtIEpzeFJ1bnRpbWUge1xuICAvKiogQW4gYXV0b21hdGljIG9yIG5hdGl2ZSBKU1ggZW52aXJvbm1lbnQgdGhhdCBkb2Vzbid0IHJlcXVpcmUgYW4gaW4tc2NvcGUgZmFjdG9yeSBpbXBvcnQuICh0cmFuc3BhcmVudCkgKi9cbiAgVFJBTlNQQVJFTlQgPSBcInRyYW5zcGFyZW50XCIsXG4gIC8qKiBBIGNsYXNzaWMgUmVhY3QgZW52aXJvbm1lbnQgdGhhdCByZXF1aXJlcyB0aGUgUmVhY3QgaW1wb3J0LCBvciBjdXN0b20gSlNYIGZhY3RvcnkgaW1wb3J0c1xuY29uZmlndXJlZCBpbiBgdHNjb25maWcuanNvbmAuXG5cbkNvcnJlc3BvbmRzIHRvIHRoZSBgcmVhY3RgIHZhbHVlIGZvciB0aGUgYGpzeGAgb3B0aW9uIGluIFR5cGVTY3JpcHQnc1xuYHRzY29uZmlnLmpzb25gLlxuXG5UaGlzIG9wdGlvbiBzaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaWYgeW91IGNhbm5vdCB1cGdyYWRlIHRvIGEgUmVhY3RcbnZlcnNpb24gdGhhdCBzdXBwb3J0cyB0aGUgbmV3IEpTWCBydW50aW1lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dFxudGhlIG9sZCB2cy4gbmV3IEpTWCBydW50aW1lLCBwbGVhc2Ugc2VlOlxuPGh0dHBzOi8vbGVnYWN5LnJlYWN0anMub3JnL2Jsb2cvMjAyMC8wOS8yMi9pbnRyb2R1Y2luZy10aGUtbmV3LWpzeC10cmFuc2Zvcm0uaHRtbD4gKHJlYWN0Q2xhc3NpYykgKi9cbiAgUkVBQ1RfQ0xBU1NJQyA9IFwicmVhY3RDbGFzc2ljXCIsXG59XG5cbi8qKlxuICogTGludGVyIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgbGludGVyXG4gKlxuICogQHNjaGVtYSBKc0xpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgbGludGVyIGZvciBKYXZhU2NyaXB0IGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc0xpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgSmF2YVNjcmlwdCBwYXJzZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGAuanNgLCBgLm1qc2AsIGFuZCBgLmNqc2AgZmlsZXMgbWF5IGNvbnRhaW4gSlNYIHN5bnRheC4gRGlzYWJsaW5nIHRoaXNcbiAgICogb3B0aW9uIGNhdXNlcyBKU1ggaW4gdGhvc2UgZmlsZXMgdG8gcmFpc2UgYSBkaWFnbm9zdGljLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVgLlxuICAgKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvbiNqc3hFdmVyeXdoZXJlXG4gICAqL1xuICByZWFkb25seSBqc3hFdmVyeXdoZXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBwYXJzaW5nIGRlY29yYXRvcnMgb24gY2xhc3MgcGFyYW1ldGVycy4gVGhpcyBzeW50YXggYmVsb25ncyB0byBhbiBvbGQgZXhwZXJpbWVudGFsXG4gICAqIHByb3Bvc2FsIGFuZCBtYXkgY2hhbmdlLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI3Vuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEpzUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2pzeEV2ZXJ5d2hlcmUnOiBvYmouanN4RXZlcnl3aGVyZSxcbiAgICAndW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQnOiBvYmoudW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBSZXNvbHZlciBvcHRpb25zIHNwZWNpZmljIHRvIEphdmFTY3JpcHQgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzUmVzb2x2ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNSZXNvbHZlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBwbnBtIHdvcmtzcGFjZSBjYXRhbG9nIHJlc29sdXRpb24gZm9yIEphdmFTY3JpcHQgcGFja2FnZSBtYW5pZmVzdHMuXG4gICAqXG4gICAqIE9wdC1pbjpcbiAgICogLSBTZXQgYGphdmFzY3JpcHQucmVzb2x2ZXIuZXhwZXJpbWVudGFsUG5wbUNhdGFsb2dzYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIFNjb3BlOlxuICAgKiAtIFJlc29sdmVzIGBjYXRhbG9nOmAgYW5kIGBjYXRhbG9nOjxuYW1lPmAgZGVwZW5kZW5jeSB2ZXJzaW9ucyBmcm9tXG4gICAqIGBwYWNrYWdlLmpzb25gLlxuICAgKiAtIEFwcGxpZXMgdG8gYGRlcGVuZGVuY2llc2AsIGBkZXZEZXBlbmRlbmNpZXNgLCBhbmQgYHBlZXJEZXBlbmRlbmNpZXNgLlxuICAgKlxuICAgKiBGYWlsLXNhZmUgYmVoYXZpb3I6XG4gICAqIC0gSWYgYHBucG0td29ya3NwYWNlLnlhbWxgIGlzIG1pc3NpbmcsIHVucmVhZGFibGUsIG9yIGNhbm5vdCBiZSBwYXJzZWQsXG4gICAqIEJpb21lIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IgKGFzIGlmIHRoaXMgb3B0aW9uXG4gICAqIHdlcmUgZGlzYWJsZWQpLlxuICAgKiAtIFVua25vd24ga2V5cyBhbmQgdW5zdXBwb3J0ZWQgdmFsdWUgc2hhcGVzIGluIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBhcmVcbiAgICogaWdub3JlZC5cbiAgICpcbiAgICogTGltaXRhdGlvbnM6XG4gICAqIC0gT25seSBgcG5wbS13b3Jrc3BhY2UueWFtbGAgaXMgcmVhZC5cbiAgICogLSBCaW9tZSBvbmx5IHJlYWRzIHRvcC1sZXZlbCBgY2F0YWxvZ2AgLyBgY2F0YWxvZ3NgIG1hcHBpbmdzIGFuZCBzY2FsYXJcbiAgICogc3RyaW5nIGVudHJpZXMuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBKc1Jlc29sdmVyQ29uZmlndXJhdGlvbiNleHBlcmltZW50YWxQbnBtQ2F0YWxvZ3NcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbFBucG1DYXRhbG9ncz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzUmVzb2x2ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNSZXNvbHZlckNvbmZpZ3VyYXRpb24ob2JqOiBKc1Jlc29sdmVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4cGVyaW1lbnRhbFBucG1DYXRhbG9ncyc6IG9iai5leHBlcmltZW50YWxQbnBtQ2F0YWxvZ3MsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBc3Npc3Qgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSlNPTiBsaW50ZXJcbiAqXG4gKiBAc2NoZW1hIEpzb25Bc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhc3Npc3QgYWN0aW9ucyBmb3IgSlNPTiBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Bc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Bc3Npc3RDb25maWd1cmF0aW9uKG9iajogSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGluc2lkZSBicmFjZXMgaW4gb2JqZWN0IGxpdGVyYWxzLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiBicmFja2V0IHNwYWNpbmcgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyBzcGFjZXMgaW5zaWRlIEpTT04gc3F1YXJlIGJyYWNrZXRzIHdoZW4gdGhlaXIgY29udGVudCBmaXRzIG9uIG9uZSBsaW5lLiBXaGVuXG4gICAqIGVuYWJsZWQsIGBbMSwgMiwgM11gIGJlY29tZXMgYFsgMSwgMiwgMyBdYC4gRW1wdHkgYnJhY2tldHMgYXJlIHVuY2hhbmdlZC5cbiAgICpcbiAgICogSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgZGVsaW1pdGVyIHNwYWNpbmcgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNkZWxpbWl0ZXJTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBkZWxpbWl0ZXJTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZm9ybWF0dGVyIGZvciBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZXMgdGhlIHNhbWUgYGF1dG9gLCBgYWx3YXlzYCwgYW5kIGBuZXZlcmAgYmVoYXZpb3IgYXMgdGhlIGdsb2JhbCBleHBhbnNpb24gc2V0dGluZy5cbiAgICpcbiAgICogSWYgdW5zZXQsIGluaGVyaXRzIHRoZSBnbG9iYWwgZXhwYW5zaW9uIHNldHRpbmcuXG4gICAqXG4gICAqIFdoZW4gZm9ybWF0dGluZyBgcGFja2FnZS5qc29uYCwgQmlvbWUgdXNlcyBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGUgZ2xvYmFsXG4gICAqIGluZGVudGF0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGggYXBwbGllZCB0byBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGluZGVudGF0aW9uIHdpZHRoLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSlNPTiBhbmQgbGFuZ3VhZ2VzIHRoYXQgZXh0ZW5kIGl0LiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogVGhlIHByZWZlcnJlZCBtYXhpbXVtIGxpbmUgd2lkdGggYXBwbGllZCB0byBKU09OIGFuZCBsYW5ndWFnZXMgdGhhdCBleHRlbmQgaXQuIElmIHVuc2V0LFxuICAgKiBpbmhlcml0cyB0aGUgZ2xvYmFsIGxpbmUgd2lkdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHRyYWlsaW5nIGNvbW1hcyBpbiBtdWx0aWxpbmUgSlNPTiBhcnJheXMgYW5kIG9iamVjdHMuIGBub25lYCByZW1vdmVzIHRyYWlsaW5nXG4gICAqIGNvbW1hcywgd2hpbGUgYGFsbGAgYWRkcyB0aGVtIHdoZXJldmVyIHRoZSBKU09OIGZvcm1hdHRlciBzdXBwb3J0cyB0aGVtLiBVc2UgYGFsbGAgb25seSBmb3JcbiAgICogSlNPTiB2YXJpYW50cyB0aGF0IGFsbG93IHRyYWlsaW5nIGNvbW1hcywgYW5kIGVuc3VyZSBganNvbi5wYXJzZXIuYWxsb3dUcmFpbGluZ0NvbW1hc2AgaXNcbiAgICogZW5hYmxlZCBvciBhdXRvbWF0aWNhbGx5IGRldGVjdGVkIGZvciB0aG9zZSBmaWxlcy4gRGVmYXVsdHMgdG8gYG5vbmVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBub25lYC5cbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ0NvbW1hc1xuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdDb21tYXM/OiBKc29uVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBJZiB1bnNldCwgaW5oZXJpdHMgdGhlIGdsb2JhbFxuICAgKiB0cmFpbGluZyBuZXdsaW5lIHNldHRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdOZXdsaW5lXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ05ld2xpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZGVsaW1pdGVyU3BhY2luZyc6IG9iai5kZWxpbWl0ZXJTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICd0cmFpbGluZ0NvbW1hcyc6IG9iai50cmFpbGluZ0NvbW1hcyxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIExpbnRlciBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKU09OIGxpbnRlclxuICpcbiAqIEBzY2hlbWEgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW50ZXIgZm9yIEpTT04gYW5kIGxhbmd1YWdlcyB0aGF0IGV4dGVuZCBpdC5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEpzb25MaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEpTT04gcGFyc2VyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25QYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgY29tbWVudHMgYXJlIGFsbG93ZWQgaW4gZmlsZXMgcGFyc2VkIGFzIEpTT04uIFdoZW4gdW5zZXQsIEJpb21lIGZvbGxvd3MgdGhlXG4gICAqIGZpbGUgdHlwZSdzIGRlZmF1bHQgYmVoYXZpb3IuIEFuIGV4cGxpY2l0IHZhbHVlIG92ZXJyaWRlcyB0aGF0IGJlaGF2aW9yLCBleGNlcHQgdGhhdFxuICAgKiBgYmlvbWUuanNvbmNgIGFsd2F5cyBhbGxvd3MgY29tbWVudHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvblBhcnNlckNvbmZpZ3VyYXRpb24jYWxsb3dDb21tZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dDb21tZW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdHJhaWxpbmcgY29tbWFzIGFyZSBhbGxvd2VkIGluIGZpbGVzIHBhcnNlZCBhcyBKU09OLiBXaGVuIHVuc2V0LCBCaW9tZVxuICAgKiBmb2xsb3dzIHRoZSBmaWxlIHR5cGUncyBkZWZhdWx0IGJlaGF2aW9yLiBBbiBleHBsaWNpdCB2YWx1ZSBvdmVycmlkZXMgdGhhdCBiZWhhdmlvciwgZXhjZXB0XG4gICAqIHRoYXQgYGJpb21lLmpzb25jYCBhbHdheXMgYWxsb3dzIHRyYWlsaW5nIGNvbW1hcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd1RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSBhbGxvd1RyYWlsaW5nQ29tbWFzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvblBhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEpzb25QYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsb3dDb21tZW50cyc6IG9iai5hbGxvd0NvbW1lbnRzLFxuICAgICdhbGxvd1RyYWlsaW5nQ29tbWFzJzogb2JqLmFsbG93VHJhaWxpbmdDb21tYXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFJ1bGVEb21haW5zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZURvbWFpbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNhc3Ryb1xuICAgKi9cbiAgcmVhZG9ubHkgYXN0cm8/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjZHJpenpsZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJpenpsZT86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNuZXh0XG4gICAqL1xuICByZWFkb25seSBuZXh0PzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3BsYXl3cmlnaHRcbiAgICovXG4gIHJlYWRvbmx5IHBsYXl3cmlnaHQ/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjcHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNxd2lrXG4gICAqL1xuICByZWFkb25seSBxd2lrPzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3JlYWN0XG4gICAqL1xuICByZWFkb25seSByZWFjdD86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyNyZWFjdE5hdGl2ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhY3ROYXRpdmU/OiBSdWxlRG9tYWluVmFsdWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZURvbWFpbnMjc29saWRcbiAgICovXG4gIHJlYWRvbmx5IHNvbGlkPzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3N2ZWx0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3ZlbHRlPzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3RhaWx3aW5kXG4gICAqL1xuICByZWFkb25seSB0YWlsd2luZD86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyN0ZXN0XG4gICAqL1xuICByZWFkb25seSB0ZXN0PzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3R1cmJvcmVwb1xuICAgKi9cbiAgcmVhZG9ubHkgdHVyYm9yZXBvPzogUnVsZURvbWFpblZhbHVlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVEb21haW5zI3R5cGVzXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IFJ1bGVEb21haW5WYWx1ZTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlRG9tYWlucyN2dWVcbiAgICovXG4gIHJlYWRvbmx5IHZ1ZT86IFJ1bGVEb21haW5WYWx1ZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUnVsZURvbWFpbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9SdWxlRG9tYWlucyhvYmo6IFJ1bGVEb21haW5zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXN0cm8nOiBvYmouYXN0cm8sXG4gICAgJ2RyaXp6bGUnOiBvYmouZHJpenpsZSxcbiAgICAnbmV4dCc6IG9iai5uZXh0LFxuICAgICdwbGF5d3JpZ2h0Jzogb2JqLnBsYXl3cmlnaHQsXG4gICAgJ3Byb2plY3QnOiBvYmoucHJvamVjdCxcbiAgICAncXdpayc6IG9iai5xd2lrLFxuICAgICdyZWFjdCc6IG9iai5yZWFjdCxcbiAgICAncmVhY3ROYXRpdmUnOiBvYmoucmVhY3ROYXRpdmUsXG4gICAgJ3NvbGlkJzogb2JqLnNvbGlkLFxuICAgICdzdmVsdGUnOiBvYmouc3ZlbHRlLFxuICAgICd0YWlsd2luZCc6IG9iai50YWlsd2luZCxcbiAgICAndGVzdCc6IG9iai50ZXN0LFxuICAgICd0dXJib3JlcG8nOiBvYmoudHVyYm9yZXBvLFxuICAgICd0eXBlcyc6IG9iai50eXBlcyxcbiAgICAndnVlJzogb2JqLnZ1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI2ExMXlcbiAgICovXG4gIHJlYWRvbmx5IGExMVk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjY29tcGxleGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGxleGl0eT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNjb3JyZWN0bmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgY29ycmVjdG5lc3M/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjbnVyc2VyeVxuICAgKi9cbiAgcmVhZG9ubHkgbnVyc2VyeT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNwZXJmb3JtYW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVyZm9ybWFuY2U/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIGJhc2VsaW5lIHNldCBvZiBsaW50IHJ1bGVzLiBgcmVjb21tZW5kZWRgIGVuYWJsZXMgQmlvbWUncyByZWNvbW1lbmRlZFxuICAgKiBub24tbnVyc2VyeSBydWxlcywgYGFsbGAgZW5hYmxlcyBhbGwgbm9uLW51cnNlcnkgcnVsZXMsIGFuZCBgbm9uZWAgc3RhcnRzIHdpdGggbm9cbiAgICogcnVsZXMgZW5hYmxlZC4gR3JvdXAtbGV2ZWwgc2V0dGluZ3MgYW5kIGV4cGxpY2l0IHJ1bGUgc2V0dGluZ3Mgb3ZlcnJpZGUgdGhpc1xuICAgKiBwcmVzZXQuIERlZmF1bHRzIHRvIGByZWNvbW1lbmRlZGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHJlY29tbWVuZGVkYC5cbiAgICogQHNjaGVtYSBSdWxlcyNwcmVzZXRcbiAgICovXG4gIHJlYWRvbmx5IHByZXNldD86IFByZXNldENvbmZpZztcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBCaW9tZSdzIHJlY29tbWVuZGVkIG5vbi1udXJzZXJ5IHJ1bGVzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqICoqRGVwcmVjYXRlZDoqKiBUaGlzIG9wdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi4gVXNlXG4gICAqIGBsaW50ZXIucnVsZXMucHJlc2V0YCBpbnN0ZWFkLCBvciBydW4gYGJpb21lIG1pZ3JhdGVgIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZWAuXG4gICAqIEBzY2hlbWEgUnVsZXMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNzZWN1cml0eVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3N1c3BpY2lvdXNcbiAgICovXG4gIHJlYWRvbmx5IHN1c3BpY2lvdXM/OiBhbnk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1J1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUnVsZXMob2JqOiBSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ExMXknOiBvYmouYTExWSxcbiAgICAnY29tcGxleGl0eSc6IG9iai5jb21wbGV4aXR5LFxuICAgICdjb3JyZWN0bmVzcyc6IG9iai5jb3JyZWN0bmVzcyxcbiAgICAnbnVyc2VyeSc6IG9iai5udXJzZXJ5LFxuICAgICdwZXJmb3JtYW5jZSc6IG9iai5wZXJmb3JtYW5jZSxcbiAgICAncHJlc2V0Jzogb2JqLnByZXNldCxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NlY3VyaXR5Jzogb2JqLnNlY3VyaXR5LFxuICAgICdzdHlsZSc6IG9iai5zdHlsZSxcbiAgICAnc3VzcGljaW91cyc6IG9iai5zdXNwaWNpb3VzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIE1hcmtkb3duIGZvcm1hdHRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBNYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBNYXJrZG93biAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIE1hcmtkb3duRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRm9ybWF0cyB0aGUgY29kZSBpbnNpZGUgZmVuY2VkIGNvZGUgYmxvY2tzLCBmcm9udG1hdHRlciwgYW5kIEhUTUwgYmxvY2tzIHdpdGggdGhlIGZvcm1hdHRlclxuICAgKiBvZiB0aGUgY29kZSdzIGxhbmd1YWdlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqXG4gICAqIEEgYmxvY2sgd2l0aCBhIHN5bnRheCBlcnJvciBzdGF5cyBhcyB3cml0dGVuLCBhbmQgQmlvbWUgc3RpbGwgZm9ybWF0cyB0aGUgcmVzdCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogV2hlbiB0aGlzIG9wdGlvbiBpcyBgZmFsc2VgLCBCaW9tZSBrZWVwcyBldmVyeSBibG9jayBhcyB3cml0dGVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlYC5cbiAgICogQHNjaGVtYSBNYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0RW1iZWRzXG4gICAqL1xuICByZWFkb25seSBmb3JtYXRFbWJlZHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gTWFya2Rvd24gZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgTWFya2Rvd25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBNYXJrZG93biBmaWxlcy4gRGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBNYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIE1hcmtkb3duIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIE1hcmtkb3duRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gTWFya2Rvd24gZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBNYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgQmlvbWUga2VlcHMsIGFkZHMsIG9yIHJlbW92ZXMgbGluZSBicmVha3MgaW4gTWFya2Rvd24gcGFyYWdyYXBocy5cbiAgICpcbiAgICogTWFudWFsIGxpbmUgYnJlYWtzIGFyZSBhbHdheXMga2VwdC4gSW4gTWFya2Rvd24sIGEgbWFudWFsIGxpbmUgYnJlYWsgaXMgY3JlYXRlZCBieSBlbmRpbmcgYVxuICAgKiBsaW5lIHdpdGggdHdvIHNwYWNlcyBvciBhIGJhY2tzbGFzaC5cbiAgICpcbiAgICogQHNjaGVtYSBNYXJrZG93bkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jcHJvc2VXcmFwXG4gICAqL1xuICByZWFkb25seSBwcm9zZVdyYXA/OiBQcm9zZVdyYXA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgaXMgKipoaWdobHkgZGlzY291cmFnZWQqKiBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIG1hbnkgcHJvYmxlbXMgd2l0aCBvdGhlciB0b29sczpcbiAgICogLSBodHRwczovL3Rob3VnaHRib3QuY29tL2Jsb2cvbm8tbmV3bGluZS1hdC1lbmQtb2YtZmlsZVxuICAgKiAtIGh0dHBzOi8vY2FsbG1lcnlhbi5tZWRpdW0uY29tL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGUtbmF2aWdhdGluZy1naXRzLXdhcm5pbmctZm9yLWFuZHJvaWQtZGV2ZWxvcGVycy1hZjE0ZTczZGQ4MDRcbiAgICogLSBodHRwczovL3VuaXguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzM0NTU0OC9ob3ctdG8tY2F0LWZpbGVzLXRvZ2V0aGVyLWFkZGluZy1taXNzaW5nLW5ld2xpbmVzLWF0LWVuZC1vZi1zb21lLWZpbGVzXG4gICAqXG4gICAqIERpc2FibGUgdGhlIG9wdGlvbiBhdCB5b3VyIG93biByaXNrLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIE1hcmtkb3duRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ01hcmtkb3duRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX01hcmtkb3duRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IE1hcmtkb3duRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZm9ybWF0RW1iZWRzJzogb2JqLmZvcm1hdEVtYmVkcyxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3Byb3NlV3JhcCc6IG9iai5wcm9zZVdyYXAsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgTWFya2Rvd24gbGludGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIE1hcmtkb3duTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtkb3duTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIE1hcmtkb3duIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIE1hcmtkb3duTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnTWFya2Rvd25MaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTWFya2Rvd25MaW50ZXJDb25maWd1cmF0aW9uKG9iajogTWFya2Rvd25MaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIE1hcmtkb3duIHBhcnNlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogUmVjb2duaXplcyBib2xkLCBpdGFsaWMsIGFuZCBzdHJpa2V0aHJvdWdoIG1hcmtlcnMgcGxhY2VkIGRpcmVjdGx5IG5leHQgdG8gQ2hpbmVzZSwgSmFwYW5lc2UsIG9yIEtvcmVhbiB0ZXh0LiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBTdGFuZGFyZCBNYXJrZG93biBkb2Vzbid0IHRyZWF0IGAqKuODhuOCueODiOOAgioq44OG44K544OIYCBhcyBib2xkIHRleHQsIGJlY2F1c2UgdGhlIGNsb3NpbmcgYCoqYFxuICAgKiBpcyBiZXR3ZWVuIGEgcHVuY3R1YXRpb24gbWFyayBhbmQgYSBsZXR0ZXIgd2l0aCBubyBzcGFjZSBhcm91bmQgaXQuIExhbmd1YWdlcyB0aGF0IGRvbid0XG4gICAqIHB1dCBzcGFjZXMgYmV0d2VlbiB3b3JkcyBydW4gaW50byB0aGlzIG9mdGVuLiBXaGVuIGVuYWJsZWQsIEJpb21lIGZvbGxvd3MgdGhlXG4gICAqIFtDb21tb25NYXJrIENKSy1mcmllbmRseSBhbWVuZG1lbnRzXShodHRwczovL2dpdGh1Yi5jb20vdGF0cy11L21hcmtkb3duLWNqay1mcmllbmRseS9ibG9iL21haW4vc3BlY2lmaWNhdGlvbi5tZClcbiAgICogYW5kIHRyZWF0cyBzdWNoIHRleHQgYXMgYm9sZCBvciBpdGFsaWMuIFRoZSBvcHRpb24gYXBwbGllcyB0byBgKmAsIGBfYCwgYW5kIGB+fmAgbWFya2Vycy5cbiAgICogQWZ0ZXIgYSB2YXJpYXRpb24gc2VsZWN0b3IgKGFuIGludmlzaWJsZSBjaGFyYWN0ZXIgdGhhdCBwaWNrcyBhIGdseXBoIHN0eWxlIGZvciB0aGVcbiAgICogY2hhcmFjdGVyIGJlZm9yZSBpdCksIEJpb21lIGNsYXNzaWZpZXMgYSBtYXJrZXIgYnkgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIHNlbGVjdG9yLlxuICAgKlxuICAgKiBUaGUgb3B0aW9uIGNhbiBhbHNvIGNoYW5nZSBtYXJrZXJzIHRoYXQgYXJlbid0IG5leHQgdG8gQ2hpbmVzZSwgSmFwYW5lc2UsIG9yIEtvcmVhbiB0ZXh0LFxuICAgKiBiZWNhdXNlIGEgbWFya2VyIHRoYXQgY2FuIG5vdyBvcGVuIG9yIGNsb3NlIGZvcm1hdHRpbmcgY2FuIHRha2UgYW5vdGhlciBtYXJrZXIncyBwYXJ0bmVyXG4gICAqIGluIHRoZSBzYW1lIHBhcmFncmFwaCwgaGVhZGluZywgb3IgdGFibGUgY2VsbC4gRm9yIGV4YW1wbGUsIHN0YW5kYXJkIE1hcmtkb3duIHNob3dzXG4gICAqIGAqKuODhuOCueODiOOAgioq44OG44K544OIIGEqKmAgd2l0aCBg44OG44K544OIIGFgIGluIGJvbGQuIFdpdGggdGhlIG9wdGlvbiBlbmFibGVkLCBg44OG44K544OI44CCYCBpcyBib2xkXG4gICAqIGFuZCB0aGUgbGFzdCBgKipgIGlzIHNob3duIGFzIHdyaXR0ZW4uXG4gICAqXG4gICAqIFRoZSBmb3JtYXR0ZXIgYW5kIHRoZSBsaW50ZXIgYm90aCB1c2UgdGhpcyByZWFkaW5nIG9mIHRoZSBkb2N1bWVudC4gRW5hYmxlIHRoZSBvcHRpb24gb25seVxuICAgKiB3aGVuIHRoZSB0b29sIHRoYXQgcmVuZGVycyB5b3VyIE1hcmtkb3duIGFsc28gc3VwcG9ydHMgdGhlc2UgYW1lbmRtZW50cy4gT3RoZXJ3aXNlLCBCaW9tZVxuICAgKiB0cmVhdHMgYXMgYm9sZCBzb21lIHRleHQgdGhhdCB5b3VyIHJlbmRlcmVyIHNob3dzIHdpdGggbGl0ZXJhbCBgKipgLCBhbmQgZm9ybWF0dGluZyBjYW5cbiAgICogY2hhbmdlIHdoYXQgeW91ciByZW5kZXJlciBzaG93cy4gRm9yIGV4YW1wbGUsIHRoZSBvcHRpb24gbWFrZXMgYF9fYCBhZnRlciBhIHZhcmlhdGlvblxuICAgKiBzZWxlY3RvciBhIGJvbGQgbWFya2VyLCBhbmQgdGhlIGZvcm1hdHRlciByZXdyaXRlcyBpdCBhcyBgKipgLCB3aGljaCBzdGFuZGFyZCBNYXJrZG93blxuICAgKiBzaG93cyBhcyBib2xkIGV2ZW4gd2hlcmUgaXQgc2hvd2VkIHRoZSBvcmlnaW5hbCBgX19gIGFzIHdyaXR0ZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24jY2prRnJpZW5kbHlFbXBoYXNpc1xuICAgKi9cbiAgcmVhZG9ubHkgY2prRnJpZW5kbHlFbXBoYXNpcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBmcm9udG1hdHRlciBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24jZnJvbnRtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZyb250bWF0dGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gZXh0ZW5zaW9ucy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlYC5cbiAgICogQHNjaGVtYSBNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24jZ2ZtXG4gICAqL1xuICByZWFkb25seSBnZm0/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9NYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBNYXJrZG93blBhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjamtGcmllbmRseUVtcGhhc2lzJzogb2JqLmNqa0ZyaWVuZGx5RW1waGFzaXMsXG4gICAgJ2Zyb250bWF0dGVyJzogb2JqLmZyb250bWF0dGVyLFxuICAgICdnZm0nOiBvYmouZ2ZtLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGFzc2lzdC1hY3Rpb24gY29uZmlndXJhdGlvbiBmb3IgbWF0Y2hlZCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24jYWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9ucz86IEFjdGlvbnM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgYXNzaXN0IGFjdGlvbnMgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb25zJzogdG9Kc29uX0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIG1heGltdW0gc291cmNlLWZpbGUgc2l6ZSBpbiBieXRlcyBmb3IgbWF0Y2hlZCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlIGluIEhUTUwtbGlrZSBsYW5ndWFnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2F0dHJpYnV0ZVBvc2l0aW9uXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVQb3NpdGlvbj86IEF0dHJpYnV0ZVBvc2l0aW9uO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgcGxhY2VtZW50IG9mIHRoZSBjbG9zaW5nIGJyYWNrZXQgZm9yIG11bHRpbGluZSBIVE1MIGFuZCBKU1ggb3BlbmluZyB0YWdzLiBCaW9tZVxuICAgKiBwbGFjZXMgdGhlIGJyYWNrZXQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBhdHRyaWJ1dGUgbGluZSB3aGVuIGVuYWJsZWQgYW5kIG9uIGl0cyBvd24gbGluZSB3aGVuXG4gICAqIGRpc2FibGVkLiBUaGlzIGFsc28gYWZmZWN0cyBzZWxmLWNsb3NpbmcgSFRNTCBlbGVtZW50cywgYnV0IHNlbGYtY2xvc2luZyBKU1ggZWxlbWVudHMgYXJlXG4gICAqIHVuYWZmZWN0ZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbHMgc3BhY2VzIGluc2lkZSBicmFjZXMgaW4gc3VwcG9ydGVkIHNpbmdsZS1saW5lIHN0cnVjdHVyZXMuIFRoZSBhZmZlY3RlZCBzdHJ1Y3R1cmVzXG4gICAqIHZhcnkgYnkgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHNwYWNlcyBpbW1lZGlhdGVseSBpbnNpZGUgc3VwcG9ydGVkIGRlbGltaXRlcnMgd2hlbiB0aGVpciBjb250ZW50IGZpdHMgb24gb25lIGxpbmUuXG4gICAqIEl0IGRvZXNuJ3QgYWRkIHNwYWNlcyBiZWZvcmUgb3BlbmluZyBkZWxpbWl0ZXJzIG9yIGluc2lkZSBlbXB0eSBkZWxpbWl0ZXJzLlxuICAgKlxuICAgKiBUaGUgYWZmZWN0ZWQgZGVsaW1pdGVycyB2YXJ5IGJ5IGxhbmd1YWdlLiBJZiB1bnNldCwgdXNlcyB0aGUgY29uZmlndXJlZCBmb3JtYXR0ZXIgc2V0dGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZGVsaW1pdGVyU3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgZGVsaW1pdGVyU3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGZvcm1hdHRlciBmb3IgbWF0Y2hlZCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgYXJyYXlzIGFuZCBvYmplY3RzIGFyZSBmb3JtYXR0ZWQgb24gb25lIGxpbmUgb3IgbXVsdGlwbGUgbGluZXMuXG4gICAqXG4gICAqIGBhdXRvYCBmb3JtYXRzIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsIGFuZCBhcnJheXMgb25cbiAgICogb25lIGxpbmUgaWYgdGhleSBmaXQuXG4gICAqXG4gICAqIGBhbHdheXNgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG11bHRpcGxlIGxpbmVzLlxuICAgKlxuICAgKiBgbmV2ZXJgIGZvcm1hdHMgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG9uZSBsaW5lIGlmIHRoZXkgZml0LlxuICAgKlxuICAgKiBJZiB1bnNldCwgdXNlcyB0aGUgY29uZmlndXJlZCBmb3JtYXR0ZXIgc2V0dGluZy5cbiAgICpcbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB1c2VzIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBmb3JtYXR0aW5nIG1hdGNoZWQgZmlsZXMgdGhhdCBjb250YWluIHN5bnRheCBlcnJvcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Zvcm1hdFdpdGhFcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdFdpdGhFcnJvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50YXRpb24gd2lkdGguIERlcHJlY2F0ZWQsIHVzZSBgaW5kZW50V2lkdGhgIGluc3RlYWQuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFNpemVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFVzZXMgdGFicyBvciBzcGFjZXMgZm9yIGluZGVudGF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5kZW50YXRpb24gd2lkdGguIFdpdGggc3BhY2UgaW5kZW50YXRpb24sIHRoaXMgaXMgdGhlIG51bWJlciBvZiBzcGFjZXMgZW1pdHRlZCBwZXJcbiAgICogaW5kZW50YXRpb24gbGV2ZWwuIFdpdGggdGFiIGluZGVudGF0aW9uLCBCaW9tZSBlbWl0cyBvbmUgdGFiIHBlciBsZXZlbCBhbmQgdXNlcyB0aGlzIHZhbHVlIGFzXG4gICAqIHRoZSB0YWIncyBkaXNwbGF5IHdpZHRoIHdoZW4gY2FsY3VsYXRpbmcgbGluZSBsZW5ndGguIEFjY2VwdGVkIHZhbHVlcyBhcmUgYDBgIHRocm91Z2ggYDI0YC5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbGluZSBlbmRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwcmVmZXJyZWQgbWF4aW11bSBsaW5lIHdpZHRoIHVzZWQgd2hlbiBkZWNpZGluZyB3aGVyZSB0byB3cmFwIGNvZGUuIFNvbWUgY29udGVudCxcbiAgICogc3VjaCBhcyBsb25nIHVuYnJlYWthYmxlIHN0cmluZ3MsIG1heSBzdGlsbCBleGNlZWQgdGhpcyB3aWR0aC4gQWNjZXB0ZWQgdmFsdWVzIGFyZSBgMWAgdGhyb3VnaFxuICAgKiBgMzIwYC5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFByaW50cyB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGlsaW5lIGNvbW1hLXNlcGFyYXRlZCBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGFcbiAgICogbGVnYWN5IG92ZXJyaWRlIG9wdGlvbi4gUHJlZmVyIGBqYXZhc2NyaXB0LmZvcm1hdHRlci50cmFpbGluZ0NvbW1hc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IEpzVHJhaWxpbmdDb21tYXM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgdHJhaWxpbmcgbmV3bGluZSBhdCB0aGUgZW5kIG9mIG1hdGNoZWQgZmlsZXMuIERpc2FibGluZyB0aGlzIG9wdGlvbiBjYW5cbiAgICogY2F1c2UgY29tcGF0aWJpbGl0eSBwcm9ibGVtcyB3aXRoIG90aGVyIHRvb2xzLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2F0dHJpYnV0ZVBvc2l0aW9uJzogb2JqLmF0dHJpYnV0ZVBvc2l0aW9uLFxuICAgICdicmFja2V0U2FtZUxpbmUnOiBvYmouYnJhY2tldFNhbWVMaW5lLFxuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZGVsaW1pdGVyU3BhY2luZyc6IG9iai5kZWxpbWl0ZXJTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2Zvcm1hdFdpdGhFcnJvcnMnOiBvYmouZm9ybWF0V2l0aEVycm9ycyxcbiAgICAnaW5kZW50U2l6ZSc6IG9iai5pbmRlbnRTaXplLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gICAgJ3RyYWlsaW5nTmV3bGluZSc6IG9iai50cmFpbGluZ05ld2xpbmUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbGludC1kb21haW4gY29uZmlndXJhdGlvbiBmb3IgbWF0Y2hlZCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24jZG9tYWluc1xuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWlucz86IFJ1bGVEb21haW5zO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBsaW50ZXIgZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGludC1ydWxlIGNvbmZpZ3VyYXRpb24gZm9yIG1hdGNoZWQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogdG9Kc29uX1J1bGVEb21haW5zKG9iai5kb21haW5zKSxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdydWxlcyc6IHRvSnNvbl9SdWxlcyhvYmoucnVsZXMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogSW50ZWdyYXRpb24gd2l0aCBHaXQgYXMgdGhlIHZlcnNpb24gY29udHJvbCBjbGllbnQuXG4gKlxuICogQHNjaGVtYSBWY3NDbGllbnRLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIFZjc0NsaWVudEtpbmQge1xuICAvKiogZ2l0ICovXG4gIEdJVCA9IFwiZ2l0XCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIFlhbWwgZm9ybWF0dGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIFlhbWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWWFtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGluc2lkZSBub24tZW1wdHkgZmxvdyBtYXBwaW5ncyAoYHsga2V5OiB2YWx1ZSB9YClcbiAgICogYW5kIHNlcXVlbmNlcyAoYFsgaXRlbSBdYCkgdGhhdCBmaXQgb24gb25lIGxpbmUuIElmIHVuc2V0LCBpbmhlcml0cyB0aGVcbiAgICogZ2xvYmFsIGJyYWNrZXQgc3BhY2luZyBzZXR0aW5nLiBXaGVuIG5laXRoZXIgaXMgc2V0LCBtYXBwaW5ncyBoYXZlIHNwYWNlc1xuICAgKiBhbmQgc2VxdWVuY2VzIGRvIG5vdC5cbiAgICpcbiAgICogQHNjaGVtYSBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIFlhbWwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gWWFtbCBmaWxlcy4gRGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gWWFtbCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gWWFtbCBmaWxlcy4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIFlhbWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBZQU1MIGNvZGUuIERlZmF1bHRzIHRvIGBkb3VibGVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGVgLlxuICAgKiBAc2NoZW1hIFlhbWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBhIHRyYWlsaW5nIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIGlzICoqaGlnaGx5IGRpc2NvdXJhZ2VkKiogYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSBtYW55IHByb2JsZW1zIHdpdGggb3RoZXIgdG9vbHM6XG4gICAqIC0gaHR0cHM6Ly90aG91Z2h0Ym90LmNvbS9ibG9nL25vLW5ld2xpbmUtYXQtZW5kLW9mLWZpbGVcbiAgICogLSBodHRwczovL2NhbGxtZXJ5YW4ubWVkaXVtLmNvbS9uby1uZXdsaW5lLWF0LWVuZC1vZi1maWxlLW5hdmlnYXRpbmctZ2l0cy13YXJuaW5nLWZvci1hbmRyb2lkLWRldmVsb3BlcnMtYWYxNGU3M2RkODA0XG4gICAqIC0gaHR0cHM6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL3F1ZXN0aW9ucy8zNDU1NDgvaG93LXRvLWNhdC1maWxlcy10b2dldGhlci1hZGRpbmctbWlzc2luZy1uZXdsaW5lcy1hdC1lbmQtb2Ytc29tZS1maWxlc1xuICAgKlxuICAgKiBEaXNhYmxlIHRoZSBvcHRpb24gYXQgeW91ciBvd24gcmlzay5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ05ld2xpbmVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nTmV3bGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1lhbWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fWWFtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBZYW1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3F1b3RlU3R5bGUnOiBvYmoucXVvdGVTdHlsZSxcbiAgICAndHJhaWxpbmdOZXdsaW5lJzogb2JqLnRyYWlsaW5nTmV3bGluZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2UgaG93IHRoZSBZYW1sIGxpbnRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBZYW1sTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFlhbWxMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGxpbnRlciBmb3IgWWFtbCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBZYW1sTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnWWFtbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9ZYW1sTGludGVyQ29uZmlndXJhdGlvbihvYmo6IFlhbWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBwcmVzZXQgY29uZmlndXJhdGlvbiBmb3IgZW5hYmxpbmcgYSBzZXQgb2YgcnVsZXMuXG4gKlxuICogQHNjaGVtYSBQcmVzZXRDb25maWdcbiAqL1xuZXhwb3J0IGVudW0gUHJlc2V0Q29uZmlnIHtcbiAgLyoqIHJlY29tbWVuZGVkICovXG4gIFJFQ09NTUVOREVEID0gXCJyZWNvbW1lbmRlZFwiLFxuICAvKiogYWxsICovXG4gIEFMTCA9IFwiYWxsXCIsXG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIG9uZSBncm91cCBvZiBhc3Npc3QgYWN0aW9ucy5cbiAqXG4gKiBAc2NoZW1hIFNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZSB7XG4gIC8qKlxuICAgKiBSZW1vdmUgcmVwZWF0ZWQgQ1NTIGNsYXNzIG5hbWVzIGZyb20gSFRNTCBjbGFzcyBhdHRyaWJ1dGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy9uby1kdXBsaWNhdGUtY2xhc3Nlc1xuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSNub0R1cGxpY2F0ZUNsYXNzZXNcbiAgICovXG4gIHJlYWRvbmx5IG5vRHVwbGljYXRlQ2xhc3Nlcz86IGFueTtcblxuICAvKipcbiAgICogT3JnYW5pemUgaW1wb3J0cyBhbmQgZXhwb3J0cyBpbiBKYXZhU2NyaXB0IGFuZCBUeXBlU2NyaXB0IGZpbGVzLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy9vcmdhbml6ZS1pbXBvcnRzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI29yZ2FuaXplSW1wb3J0c1xuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemVJbXBvcnRzPzogYW55O1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBiYXNlbGluZSBzZXQgb2YgYXNzaXN0IGFjdGlvbnMgZm9yIHRoaXMgZ3JvdXAuIGByZWNvbW1lbmRlZGAgZW5hYmxlc1xuICAgKiB0aGUgZ3JvdXAncyByZWNvbW1lbmRlZCBhY3Rpb25zLCBgYWxsYCBlbmFibGVzIGFsbCBhY3Rpb25zIGluIHRoZSBncm91cCwgYW5kXG4gICAqIGBub25lYCBzdGFydHMgd2l0aCBubyBhY3Rpb25zIGVuYWJsZWQgaW4gdGhlIGdyb3VwLiBFeHBsaWNpdCBhY3Rpb24gc2V0dGluZ3NcbiAgICogb3ZlcnJpZGUgdGhpcyBncm91cCBwcmVzZXQsIHdoaWNoIG92ZXJyaWRlcyBgYXNzaXN0LmFjdGlvbnMucHJlc2V0YCBmb3IgdGhlIGdyb3VwLlxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSNwcmVzZXRcbiAgICovXG4gIHJlYWRvbmx5IHByZXNldD86IFByZXNldENvbmZpZztcblxuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcmVjb21tZW5kZWQgYWN0aW9ucyBpbiB0aGlzIGdyb3VwLiBUaGUgZ3JvdXAncyBgcHJlc2V0YFxuICAgKiBzZXR0aW5nIHRha2VzIHByZWNlZGVuY2Ugd2hlbiBib3RoIG9wdGlvbnMgYXJlIHNldC5cbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU29ydCB0aGUgYXJndW1lbnRzIG9mIEdyYXBoUUwgZmllbGRzIGFuZCBkaXJlY3RpdmVzIGluIG5hdHVyYWwgb3JkZXIuXG4gICAqIFNlZSBodHRwczovL2Jpb21lanMuZGV2L2Fzc2lzdC9hY3Rpb25zL3VzZS1ncmFwaHFsLXNvcnRlZC1hcmd1bWVudHNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlR3JhcGhxbFNvcnRlZEFyZ3VtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlR3JhcGhxbFNvcnRlZEFyZ3VtZW50cz86IGFueTtcblxuICAvKipcbiAgICogU29ydCB0aGUgbmFtZWQgZGVmaW5pdGlvbnMgaW4gYSBHcmFwaFFMIGRvY3VtZW50LlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2UtZ3JhcGhxbC1zb3J0ZWQtZGVmaW5pdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlR3JhcGhxbFNvcnRlZERlZmluaXRpb25zXG4gICAqL1xuICByZWFkb25seSB1c2VHcmFwaHFsU29ydGVkRGVmaW5pdGlvbnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb25zIG9mIEdyYXBoUUwgb3BlcmF0aW9ucyBpbiBuYXR1cmFsIG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2UtZ3JhcGhxbC1zb3J0ZWQtdmFyaWFibGVzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZUdyYXBocWxTb3J0ZWRWYXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IHVzZUdyYXBocWxTb3J0ZWRWYXJpYWJsZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgSFRNTCBhdHRyaWJ1dGVzIGFuZCBmcmFtZXdvcmsgZGlyZWN0aXZlcyBpbnRvIGEgY29uc2lzdGVudCBvcmRlci5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1hdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEF0dHJpYnV0ZXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgR3JhcGhRTCBlbnVtIHZhbHVlcyBpbiBuYXR1cmFsIG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWVudW0tbWVtYmVyc1xuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRFbnVtTWVtYmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkRW51bU1lbWJlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQgbmFtZWQgbWVtYmVycyBvZiBhIFR5cGVTY3JpcHQgaW50ZXJmYWNlLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWludGVyZmFjZS1tZW1iZXJzXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZEludGVyZmFjZU1lbWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNvcnRlZEludGVyZmFjZU1lbWJlcnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFNvcnQga2V5cyBpbiBhIEpTT04gb2JqZWN0LlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLWtleXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkS2V5c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkS2V5cz86IGFueTtcblxuICAvKipcbiAgICogT3JnYW5pemUgcGFja2FnZS5qc29uIGZpZWxkcyBhY2NvcmRpbmcgdG8gZXN0YWJsaXNoZWQgY29udmVudGlvbnMuXG4gICAqIFNlZSBodHRwczovL2Jpb21lanMuZGV2L2Fzc2lzdC9hY3Rpb25zL3VzZS1zb3J0ZWQtcGFja2FnZS1qc29uXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZFBhY2thZ2VKc29uXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRQYWNrYWdlSnNvbj86IGFueTtcblxuICAvKipcbiAgICogU29ydCBDU1MgcHJvcGVydGllcyBhbmQgbmVzdGVkIHJ1bGVzIGludG8gYSBjb25zaXN0ZW50IG9yZGVyLlxuICAgKiBTZWUgaHR0cHM6Ly9iaW9tZWpzLmRldi9hc3Npc3QvYWN0aW9ucy91c2Utc29ydGVkLXByb3BlcnRpZXNcbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkUHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkUHJvcGVydGllcz86IGFueTtcblxuICAvKipcbiAgICogU29ydCBzZWxlY3Rpb25zIGluc2lkZSBHcmFwaFFMIG9wZXJhdGlvbnMgYW5kIGZyYWdtZW50cy5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1zZWxlY3Rpb24tc2V0XG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3VzZVNvcnRlZFNlbGVjdGlvblNldFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkU2VsZWN0aW9uU2V0PzogYW55O1xuXG4gIC8qKlxuICAgKiBTb3J0IGZpZWxkcyBpbiBHcmFwaFFMIHR5cGUgZGVmaW5pdGlvbnMgYnkgbmFtZS5cbiAgICogU2VlIGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC10eXBlLWZpZWxkc1xuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRUeXBlRmllbGRzXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRUeXBlRmllbGRzPzogYW55O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTb3VyY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Tb3VyY2Uob2JqOiBTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdub0R1cGxpY2F0ZUNsYXNzZXMnOiBvYmoubm9EdXBsaWNhdGVDbGFzc2VzLFxuICAgICdvcmdhbml6ZUltcG9ydHMnOiBvYmoub3JnYW5pemVJbXBvcnRzLFxuICAgICdwcmVzZXQnOiBvYmoucHJlc2V0LFxuICAgICdyZWNvbW1lbmRlZCc6IG9iai5yZWNvbW1lbmRlZCxcbiAgICAndXNlR3JhcGhxbFNvcnRlZEFyZ3VtZW50cyc6IG9iai51c2VHcmFwaHFsU29ydGVkQXJndW1lbnRzLFxuICAgICd1c2VHcmFwaHFsU29ydGVkRGVmaW5pdGlvbnMnOiBvYmoudXNlR3JhcGhxbFNvcnRlZERlZmluaXRpb25zLFxuICAgICd1c2VHcmFwaHFsU29ydGVkVmFyaWFibGVzJzogb2JqLnVzZUdyYXBocWxTb3J0ZWRWYXJpYWJsZXMsXG4gICAgJ3VzZVNvcnRlZEF0dHJpYnV0ZXMnOiBvYmoudXNlU29ydGVkQXR0cmlidXRlcyxcbiAgICAndXNlU29ydGVkRW51bU1lbWJlcnMnOiBvYmoudXNlU29ydGVkRW51bU1lbWJlcnMsXG4gICAgJ3VzZVNvcnRlZEludGVyZmFjZU1lbWJlcnMnOiBvYmoudXNlU29ydGVkSW50ZXJmYWNlTWVtYmVycyxcbiAgICAndXNlU29ydGVkS2V5cyc6IG9iai51c2VTb3J0ZWRLZXlzLFxuICAgICd1c2VTb3J0ZWRQYWNrYWdlSnNvbic6IG9iai51c2VTb3J0ZWRQYWNrYWdlSnNvbixcbiAgICAndXNlU29ydGVkUHJvcGVydGllcyc6IG9iai51c2VTb3J0ZWRQcm9wZXJ0aWVzLFxuICAgICd1c2VTb3J0ZWRTZWxlY3Rpb25TZXQnOiBvYmoudXNlU29ydGVkU2VsZWN0aW9uU2V0LFxuICAgICd1c2VTb3J0ZWRUeXBlRmllbGRzJzogb2JqLnVzZVNvcnRlZFR5cGVGaWVsZHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFF1b3RlU3R5bGVcbiAqL1xuZXhwb3J0IGVudW0gUXVvdGVTdHlsZSB7XG4gIC8qKiBkb3VibGUgKi9cbiAgRE9VQkxFID0gXCJkb3VibGVcIixcbiAgLyoqIHNpbmdsZSAqL1xuICBTSU5HTEUgPSBcInNpbmdsZVwiLFxufVxuXG4vKipcbiAqIENvbnRyb2xzIHdoZXRoZXIgSFRNTCB2b2lkIGVsZW1lbnRzIHN1Y2ggYXMgYDxpbWc+YCBhbmQgYDxpbnB1dD5gIGluY2x1ZGUgYSBzbGFzaCBiZWZvcmUgYD5gLlxuICpcbiAqIEBzY2hlbWEgU2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGZDbG9zZVZvaWRFbGVtZW50cyB7XG4gIC8qKiBSZW1vdmVzIHRoZSBzbGFzaCwgZm9yIGV4YW1wbGUgYDxpbWcgc3JjPVwiaW1hZ2UucG5nXCI+YC4gKG5ldmVyKSAqL1xuICBORVZFUiA9IFwibmV2ZXJcIixcbiAgLyoqIEFkZHMgdGhlIHNsYXNoLCBmb3IgZXhhbXBsZSBgPGltZyBzcmM9XCJpbWFnZS5wbmdcIiAvPmAuIChhbHdheXMpICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgaG93IHRoZSBmb3JtYXR0ZXIgdHJlYXRzIHdoaXRlc3BhY2UgYXJvdW5kIHRleHQgYW5kIGNoaWxkIGVsZW1lbnRzIGluIEhUTUwsIFZ1ZSxcbiAqIFN2ZWx0ZSwgYW5kIEFzdHJvIG1hcmt1cC5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIHR3byBjYXNlcyB3b24ndCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dDpcbiAqXG4gKiB8ICAgICAgICAgICAgICAgIHwgICAgICBodG1sICAgICAgfCAgICBvdXRwdXQgICAgfFxuICogfCAtLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS06IHwgOi0tLS0tLS0tLS06IHxcbiAqIHwgd2l0aCBzcGFjZXMgICAgfCBgMTxiPiAyIDwvYj4zYCB8IDE8Yj4gMiA8L2I+MyB8XG4gKiB8IHdpdGhvdXQgc3BhY2VzIHwgIGAxPGI+MjwvYj4zYCAgfCAgMTxiPjI8L2I+MyAgfFxuICpcbiAqIFRoaXMgaGFwcGVucyBiZWNhdXNlIHdoaXRlc3BhY2UgaXMgc2lnbmlmaWNhbnQgaW4gaW5saW5lIGVsZW1lbnRzLlxuICpcbiAqIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcywgdGhlIGZvcm1hdHRlciBtdXN0IGZvcm1hdCBibG9ja3MgdGhhdCBsb29rIGxpa2UgdGhpcyAoYXNzdW1lIGEgc21hbGwgbGluZSB3aWR0aCwgPDIwKTpcbiAqIGBgYGh0bWxcbiAqIDxzcGFuPnJlYWxseSBsb25nIGNvbnRlbnQ8L3NwYW4+XG4gKiBgYGBcbiAqIGFzIHRoaXMsIHdoZXJlIHRoZSBjb250ZW50IGh1Z3MgdGhlIHRhZ3M6XG4gKiBgYGBodG1sXG4gKiA8c3BhblxuICogPnJlYWxseSBsb25nIGNvbnRlbnQ8L3NwYW5cbiAqID5cbiAqIGBgYFxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBpbmxpbmUgZWxlbWVudHMuIEJsb2NrIGVsZW1lbnRzIGRvIG5vdCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24uXG4gKlxuICogQHNjaGVtYSBXaGl0ZXNwYWNlU2Vuc2l0aXZpdHlcbiAqL1xuZXhwb3J0IGVudW0gV2hpdGVzcGFjZVNlbnNpdGl2aXR5IHtcbiAgLyoqIFRyZWF0cyB3aGl0ZXNwYWNlIGFzIHNpZ25pZmljYW50IGZvciBlbGVtZW50cyB0aGF0IGJyb3dzZXJzIGRpc3BsYXkgaW5saW5lIGJ5IGRlZmF1bHQuIChjc3MpICovXG4gIENTUyA9IFwiY3NzXCIsXG4gIC8qKiBUcmVhdHMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBhcyBzaWduaWZpY2FudCBmb3IgZXZlcnkgZWxlbWVudC4gRXhpc3Rpbmcgd2hpdGVzcGFjZVxuaXMgcHJlc2VydmVkIGFzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYW5kIGFic2VudCB3aGl0ZXNwYWNlIGlzIG5vdCBhZGRlZC5cblxuRXhhbXBsZSBvZiB0ZXh0IGh1Z2dpbmcgdGhlIHRhZ3M6XG5gYGBodG1sXG48YlxuICAgID5jb250ZW50PC9iXG4+XG5gYGAgKHN0cmljdCkgKi9cbiAgU1RSSUNUID0gXCJzdHJpY3RcIixcbiAgLyoqIFRyZWF0cyB3aGl0ZXNwYWNlIGFzIGluc2lnbmlmaWNhbnQsIGFsbG93aW5nIHRoZSBmb3JtYXR0ZXIgdG8gYWRkIG9yIHJlbW92ZSBpdC4gVXNlIHRoaXMgb25seVxud2hlbiB3aGl0ZXNwYWNlIGNhbm5vdCBhZmZlY3QgcmVuZGVyZWQgb3V0cHV0LiAoaWdub3JlKSAqL1xuICBJR05PUkUgPSBcImlnbm9yZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgQXJyb3dQYXJlbnRoZXNlc1xuICovXG5leHBvcnQgZW51bSBBcnJvd1BhcmVudGhlc2VzIHtcbiAgLyoqIEFsd2F5cyBwcmludHMgcGFyZW50aGVzZXMgYXJvdW5kIGFycm93LWZ1bmN0aW9uIHBhcmFtZXRlcnMuIChhbHdheXMpICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBPbWl0cyBwYXJlbnRoZXNlcyB3aGVuIGFuIGFycm93IGZ1bmN0aW9uIGhhcyBvbmUgcGFyYW1ldGVyIGFuZCB0aGUgc3ludGF4IHBlcm1pdHMgaXQuIChhc05lZWRlZCkgKi9cbiAgQVNfTkVFREVEID0gXCJhc05lZWRlZFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgT3BlcmF0b3JMaW5lYnJlYWtcbiAqL1xuZXhwb3J0IGVudW0gT3BlcmF0b3JMaW5lYnJlYWsge1xuICAvKiogVGhlIG9wZXJhdG9yIGlzIHBsYWNlZCBhZnRlciB0aGUgZXhwcmVzc2lvbiAoYWZ0ZXIpICovXG4gIEFGVEVSID0gXCJhZnRlclwiLFxuICAvKiogVGhlIG9wZXJhdG9yIGlzIHBsYWNlZCBiZWZvcmUgdGhlIGV4cHJlc3Npb24gKGJlZm9yZSkgKi9cbiAgQkVGT1JFID0gXCJiZWZvcmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFF1b3RlUHJvcGVydGllc1xuICovXG5leHBvcnQgZW51bSBRdW90ZVByb3BlcnRpZXMge1xuICAvKiogUmVtb3ZlcyBxdW90ZXMgd2hlbiB0aGUgcHJvcGVydHkgbmFtZSBpcyB2YWxpZCB3aXRob3V0IHRoZW0uIChhc05lZWRlZCkgKi9cbiAgQVNfTkVFREVEID0gXCJhc05lZWRlZFwiLFxuICAvKiogUHJlc2VydmVzIHF1b3RlcyBhcm91bmQgcHJvcGVydHkgbmFtZXMgdGhhdCB3ZXJlIHF1b3RlZCBpbiB0aGUgaW5wdXQuIChwcmVzZXJ2ZSkgKi9cbiAgUFJFU0VSVkUgPSBcInByZXNlcnZlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBTZW1pY29sb25zXG4gKi9cbmV4cG9ydCBlbnVtIFNlbWljb2xvbnMge1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG59XG5cbi8qKlxuICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzIGZvciBKYXZhU2NyaXB0L1R5cGVTY3JpcHQgZmlsZXMuXG4gKlxuICogQHNjaGVtYSBKc1RyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIEpzVHJhaWxpbmdDb21tYXMge1xuICAvKiogYWxsICovXG4gIEFMTCA9IFwiYWxsXCIsXG4gIC8qKiBlczUgKi9cbiAgRVM1ID0gXCJlczVcIixcbiAgLyoqIG5vbmUgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIENvbnRyb2xzIHRyYWlsaW5nIGNvbW1hcyBpbiBtdWx0aWxpbmUgSlNPTiBhcnJheXMgYW5kIG9iamVjdHMuIFVzZSBgYWxsYCBvbmx5IGZvciBKU09OIHZhcmlhbnRzIHRoYXQgYWxsb3cgdHJhaWxpbmcgY29tbWFzLCBhbmQgZW5zdXJlIGBqc29uLnBhcnNlci5hbGxvd1RyYWlsaW5nQ29tbWFzYCBpcyBlbmFibGVkIG9yIGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQgZm9yIHRob3NlIGZpbGVzLlxuICpcbiAqIEBzY2hlbWEgSnNvblRyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIEpzb25UcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIGFsbCAqL1xuICBBTEwgPSBcImFsbFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUnVsZURvbWFpblZhbHVlXG4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVEb21haW5WYWx1ZSB7XG4gIC8qKiBFbmFibGVzIGFsbCBydWxlcyBpbiB0aGUgZG9tYWluLiAoYWxsKSAqL1xuICBBTEwgPSBcImFsbFwiLFxuICAvKiogRGlzYWJsZXMgdGhlIGRvbWFpbi4gKG5vbmUpICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIEVuYWJsZXMgdGhlIGRvbWFpbidzIHJlY29tbWVuZGVkIG5vbi1udXJzZXJ5IHJ1bGVzLiAocmVjb21tZW5kZWQpICovXG4gIFJFQ09NTUVOREVEID0gXCJyZWNvbW1lbmRlZFwiLFxufVxuXG4vKipcbiAqIENvbnRyb2xzIHdoZXRoZXIgQmlvbWUga2VlcHMsIGFkZHMsIG9yIHJlbW92ZXMgbGluZSBicmVha3MgaW4gTWFya2Rvd24gcGFyYWdyYXBocy5cbiAqXG4gKiBNYW51YWwgbGluZSBicmVha3MgYXJlIGFsd2F5cyBrZXB0LiBJbiBNYXJrZG93biwgYSBtYW51YWwgbGluZSBicmVhayBpcyBjcmVhdGVkIGJ5IGVuZGluZyBhXG4gKiBsaW5lIHdpdGggdHdvIHNwYWNlcyBvciBhIGJhY2tzbGFzaC5cbiAqXG4gKiBAc2NoZW1hIFByb3NlV3JhcFxuICovXG5leHBvcnQgZW51bSBQcm9zZVdyYXAge1xuICAvKiogS2VlcCBsaW5lIGJyZWFrcyBhcyB3cml0dGVuIGluIHRoZSBzb3VyY2UgZmlsZS4gVGhpcyBpcyB0aGUgZGVmYXVsdC4gKHByZXNlcnZlKSAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbiAgLyoqIFdyYXAgcGFyYWdyYXBocyB0byBmaXQgdGhlIGNvbmZpZ3VyZWQgYGxpbmVXaWR0aGAuIChhbHdheXMpICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBSZW1vdmUgbGluZSBicmVha3MgZnJvbSBwYXJhZ3JhcGhzIHNvIHRoYXQgZWFjaCBwYXJhZ3JhcGggaXMgb24gb25lIGxpbmUuIChuZXZlcikgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG4iXX0=
|