semantifold 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -9
- package/build/index.d.ts +8 -8
- package/build/index.d.ts.map +1 -1
- package/build/index.js +6 -6
- package/build/src/backends/android.js +8 -4
- package/build/src/backends/dart.d.ts +19 -0
- package/build/src/backends/dart.d.ts.map +1 -1
- package/build/src/backends/dart.js +28 -16
- package/build/src/backends/flutter.d.ts +51 -0
- package/build/src/backends/flutter.d.ts.map +1 -0
- package/build/src/backends/flutter.js +1362 -0
- package/build/src/backends/identifiers.d.ts +6 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +28 -5
- package/build/src/backends/ios.js +2 -2
- package/build/src/backends/native-validation.d.ts +2 -2
- package/build/src/backends/native-validation.d.ts.map +1 -1
- package/build/src/backends/native-validation.js +2 -2
- package/build/src/backends/program.d.ts +4 -4
- package/build/src/backends/program.d.ts.map +1 -1
- package/build/src/backends/program.js +4 -4
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +2 -1
- package/build/src/backends/shared.d.ts +7 -0
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +14 -9
- package/build/src/backends/zig-runtime.d.ts +5 -0
- package/build/src/backends/zig-runtime.d.ts.map +1 -0
- package/build/src/backends/zig-runtime.js +92 -0
- package/build/src/backends/zig-validation.d.ts +9 -0
- package/build/src/backends/zig-validation.d.ts.map +1 -0
- package/build/src/backends/zig-validation.js +73 -0
- package/build/src/backends/zig.d.ts +42 -0
- package/build/src/backends/zig.d.ts.map +1 -0
- package/build/src/backends/zig.js +584 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +2 -1
- package/build/src/frontends/zig-parser.d.ts +31 -0
- package/build/src/frontends/zig-parser.d.ts.map +1 -0
- package/build/src/frontends/zig-parser.js +17 -0
- package/build/src/frontends/zig.d.ts +14 -0
- package/build/src/frontends/zig.d.ts.map +1 -0
- package/build/src/frontends/zig.js +970 -0
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +40 -1
- package/build/src/mapping.js +2 -2
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +154 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +39 -3
- package/build/src/semantic/validate.js +2 -2
- package/build/src/toolchains.d.ts +6 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +2 -1
- package/build/src/zig-bindings.d.ts +10 -0
- package/build/src/zig-bindings.d.ts.map +1 -0
- package/build/src/zig-bindings.js +54 -0
- package/docs/android.md +7 -3
- package/docs/architecture.md +13 -5
- package/docs/flutter.md +47 -0
- package/docs/goals.md +1 -1
- package/docs/language-support.md +16 -5
- package/docs/parser-qualification.md +31 -1
- package/docs/source-maps.md +7 -3
- package/docs/testing.md +47 -4
- package/docs/zig.md +33 -0
- package/index.js +5 -5
- package/node_modules/semantifold-tree-sitter-zig-internal/LICENSE +15 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/README.md +5 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/README.md +21 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/binding.gyp +29 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/grammar.js +900 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/package.json +57 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/darwin-arm64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/darwin-x64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/linux-arm64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/linux-x64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/win32-arm64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/prebuilds/win32-x64/@tree-sitter-grammars+tree-sitter-zig.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/folds.scm +23 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/highlights.scm +291 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/indents.scm +22 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/queries/injections.scm +10 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/grammar.json +6570 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/node-types.json +3178 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/parser.c +169829 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/tree_sitter/array.h +291 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/tree-sitter-zig.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/@tree-sitter-grammars/tree-sitter-zig/tree-sitter.json +38 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/README.md +128 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/binding.gyp +80 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/index.js +916 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/package.json +76 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/language.cc +106 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/node.cc +1088 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/parser.cc +306 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/query.cc +397 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/query.h +40 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree.cc +316 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/tree-sitter.d.ts +1042 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1318 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +223 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +297 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +435 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +920 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2165 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +206 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4187 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +130 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1066 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +712 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +83 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1302 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1859 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/package.json +21 -0
- package/node_modules/semantifold-tree-sitter-zig-internal/src/zig.js +134 -0
- package/package.json +11 -6
- package/src/backends/android.js +7 -3
- package/src/backends/dart.js +28 -15
- package/src/backends/flutter.js +1465 -0
- package/src/backends/identifiers.js +28 -4
- package/src/backends/ios.js +1 -1
- package/src/backends/native-validation.js +1 -1
- package/src/backends/program.js +3 -3
- package/src/backends/scalars.js +1 -0
- package/src/backends/shared.js +15 -11
- package/src/backends/zig-runtime.js +93 -0
- package/src/backends/zig-validation.js +68 -0
- package/src/backends/zig.js +579 -0
- package/src/frontends/scalars.js +1 -0
- package/src/frontends/zig-parser.js +20 -0
- package/src/frontends/zig.js +994 -0
- package/src/language-registry.js +40 -0
- package/src/mapping.js +1 -1
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +41 -2
- package/src/semantic/validate.js +1 -1
- package/src/toolchains.js +1 -0
- package/src/zig-bindings.js +46 -0
|
@@ -11,7 +11,7 @@ import { emitScalarType, emitStringLiteral } from "./scalars.js";
|
|
|
11
11
|
import { SourceWriter } from "./writer.js";
|
|
12
12
|
/** @type {Readonly<Set<import("../semantic/types.js").SemanticLanguage>>} */
|
|
13
13
|
const iosSourceLanguages = new Set([
|
|
14
|
-
"php", "ruby", "javascript", "typescript", "java", "kotlin", "python", "csharp", "go", "c", "cpp", "rust", "swift", "dart"
|
|
14
|
+
"php", "ruby", "javascript", "typescript", "java", "kotlin", "python", "csharp", "go", "c", "cpp", "rust", "swift", "dart", "zig"
|
|
15
15
|
]);
|
|
16
16
|
const configurationFields = new Set([
|
|
17
17
|
"bundleIdentifier", "capabilities", "deploymentTarget", "displayName", "entitlements", "infoPlist", "lifecycle",
|
|
@@ -1500,4 +1500,4 @@ function rekeyModuleDeclarations(module, moduleId) {
|
|
|
1500
1500
|
function isPlainObject(value) {
|
|
1501
1501
|
return Boolean(value) && typeof value == "object" && !Array.isArray(value) && Object.getPrototypeOf(value) == Object.prototype;
|
|
1502
1502
|
}
|
|
1503
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2lvcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3hGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQzdFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsNkVBQTZFO0FBQzdFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU07Q0FDM0gsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNsQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxX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Q0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7Z0JBQ25ELENBQUM7O29CQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUN0QixDQUFDO1FBQ0gsQ0FBQzs7WUFBTSxLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUs7Z0JBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDZixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUE7QUFDaEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4uL2FycmF5LmpzXCJcbmltcG9ydCB7ZmluZFBvcnRhYmxlQXJ0aWZhY3RQYXRoQ29uZmxpY3QsIGlzU2FmZUFydGlmYWN0UGF0aH0gZnJvbSBcIi4uL2FydGlmYWN0LXBhdGguanNcIlxuaW1wb3J0IHtjcmVhdGVCeXRlTWFwcGluZ30gZnJvbSBcIi4uL2JpbmFyeS1tYXBwaW5nLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljLCB1bnN1cHBvcnRlZENhcGFiaWxpdHl9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7ZmluYWxpemVNYXBwaW5nLCB0b1NvdXJjZU1hcFYzfSBmcm9tIFwiLi4vbWFwcGluZy5qc1wiXG5pbXBvcnQge2hhc09ubHlVbmljb2RlU2NhbGFyc30gZnJvbSBcIi4uL3NlbWFudGljL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtwcmVmbGlnaHRTZW1hbnRpY1Byb2dyYW19IGZyb20gXCIuL3Byb2dyYW0uanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZSwgZW1pdFN0cmluZ0xpdGVyYWx9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuaW1wb3J0IHtTb3VyY2VXcml0ZXJ9IGZyb20gXCIuL3dyaXRlci5qc1wiXG5cbi8qKiBAdHlwZSB7UmVhZG9ubHk8U2V0PGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2U+Pn0gKi9cbmNvbnN0IGlvc1NvdXJjZUxhbmd1YWdlcyA9IG5ldyBTZXQoW1xuICBcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIiwgXCJrb3RsaW5cIiwgXCJweXRob25cIiwgXCJjc2hhcnBcIiwgXCJnb1wiLCBcImNcIiwgXCJjcHBcIiwgXCJydXN0XCIsIFwic3dpZnRcIiwgXCJkYXJ0XCJcbl0pXG5jb25zdCBjb25maWd1cmF0aW9uRmllbGRzID0gbmV3IFNldChbXG4gIFwiYnVuZGxlSWRlbnRpZmllclwiLCBcImNhcGFiaWxpdGllc1wiLCBcImRlcGxveW1lbnRUYXJnZXRcIiwgXCJkaXNwbGF5TmFtZVwiLCBcImVudGl0bGVtZW50c1wiLCBcImluZm9QbGlzdFwiLCBcImxpZmVjeWNsZVwiLFxuICBcIm1vZHVsZU5hbWVcIiwgXCJvcmdhbml6YXRpb25QcmVmaXhcIiwgXCJwZXJtaXNzaW9uc1wiLCBcInByaXZhY3lEZWNsYXJhdGlvbnNcIiwgXCJwcm9kdWN0TmFtZVwiLCBcInJlc291cmNlUm9vdFwiLCBcInNvdXJjZVJvb3RcIlxuXSlcbmNvbnN0IGFzc2V0RmllbGRzID0gbmV3IFNldChbXCJjb250ZW50XCIsIFwibWVkaWFUeXBlXCIsIFwicGF0aFwiLCBcInNoYTI1NlwiXSlcbmNvbnN0IGdlbmVyYXRvclZlcnNpb24gPSBcIjAuMy4wXCJcbmNvbnN0IGV4Y2x1ZGVkUGF0aFBhdHRlcm5zID0gT2JqZWN0LmZyZWV6ZShbXG4gIFwiKiovKi54Y3VzZXJzdGF0ZVwiLFxuICBcIioqL3hjdXNlcmRhdGEvKipcIixcbiAgXCIuc3dpZnRwbS8qKlwiLFxuICBcIkRlcml2ZWREYXRhLyoqXCIsXG4gIFwiYnVpbGQvKipcIlxuXSlcbmNvbnN0IG1lZGlhVHlwZVBhdHRlcm4gPSAvXltBLVphLXowLTkhIyQmXl8uKy1dK1xcL1tBLVphLXowLTkhIyQmXl8uKy1dKyg/OjtbXFx1MDAyMC1cXHUwMDdlXSspPyQvdVxuY29uc3QgYmluYXJ5T3BlcmF0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICBCb29sZWFuQW5kOiBcIiYmXCIsXG4gIEJvb2xlYW5FcXVhbDogXCI9PVwiLFxuICBCb29sZWFuTm90RXF1YWw6IFwiIT1cIixcbiAgQm9vbGVhbk9yOiBcInx8XCIsXG4gIEludGVnZXJBZGQ6IFwiK1wiLFxuICBJbnRlZ2VyRXF1YWw6IFwiPT1cIixcbiAgSW50ZWdlckdyZWF0ZXJUaGFuOiBcIj5cIixcbiAgSW50ZWdlckdyZWF0ZXJUaGFuT3JFcXVhbDogXCI+PVwiLFxuICBJbnRlZ2VyTGVzc1RoYW46IFwiPFwiLFxuICBJbnRlZ2VyTGVzc1RoYW5PckVxdWFsOiBcIjw9XCIsXG4gIEludGVnZXJNdWx0aXBseTogXCIqXCIsXG4gIEludGVnZXJOb3RFcXVhbDogXCIhPVwiLFxuICBJbnRlZ2VyU3VidHJhY3Q6IFwiLVwiLFxuICBTdHJpbmdDb25jYXQ6IFwiK1wiLFxuICBTdHJpbmdFcXVhbDogXCI9PVwiLFxuICBTdHJpbmdOb3RFcXVhbDogXCIhPVwiXG59KVxuY29uc3QgdW5hcnlPcGVyYXRpb25zID0gT2JqZWN0LmZyZWV6ZSh7Qm9vbGVhbk5vdDogXCIhXCIsIEludGVnZXJOZWdhdGU6IFwiLVwifSlcbmNvbnN0IGlvc1N3aWZ0UnVudGltZSA9IGBmaW5hbCBjbGFzcyBTZW1hbnRpZm9sZE91dHB1dFNpbmsge1xuICBwcml2YXRlKHNldCkgdmFyIGxpbmVzOiBbU3RyaW5nXSA9IFtdXG5cbiAgZnVuYyB3cml0ZShfIHZhbHVlOiBJbnQ2NCkge1xuICAgIGxpbmVzLmFwcGVuZChTdHJpbmcodmFsdWUpKVxuICB9XG5cbiAgZnVuYyB3cml0ZShfIHZhbHVlOiBCb29sKSB7XG4gICAgbGluZXMuYXBwZW5kKHZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIpXG4gIH1cblxuICBmdW5jIHdyaXRlKF8gdmFsdWU6IFN0cmluZykge1xuICAgIGxpbmVzLmFwcGVuZCh2YWx1ZSlcbiAgfVxufVxuXG5mdW5jIHNlbWFudGlmb2xkX3N0cmluZ19lcXVhbChfIGxlZnQ6IFN0cmluZywgXyByaWdodDogU3RyaW5nKSAtPiBCb29sIHtcbiAgcmV0dXJuIGxlZnQudW5pY29kZVNjYWxhcnMuZWxlbWVudHNFcXVhbChyaWdodC51bmljb2RlU2NhbGFycylcbn1cblxuZnVuYyBzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsKF8gbGVmdDogU3RyaW5nLCBfIHJpZ2h0OiBTdHJpbmcpIC0+IEJvb2wge1xuICByZXR1cm4gIWxlZnQudW5pY29kZVNjYWxhcnMuZWxlbWVudHNFcXVhbChyaWdodC51bmljb2RlU2NhbGFycylcbn1cblxuZnVuYyBzZW1hbnRpZm9sZF9rZWVwX211dGFibGU8VD4oXyB2YWx1ZTogaW5vdXQgVCkge1xufVxuYFxuXG4vKiogQHR5cGVkZWYge3tjb250ZW50OiBzdHJpbmcsIGZpZWxkOiBzdHJpbmd9fSBDb25maWd1cmF0aW9uRnJhZ21lbnQgKi9cbi8qKiBAdHlwZWRlZiB7c3RyaW5nIHwgQ29uZmlndXJhdGlvbkZyYWdtZW50fSBDb25maWd1cmF0aW9uVGV4dFBhcnQgKi9cbi8qKiBAdHlwZWRlZiB7c3RyaW5nIHwgcmVhZG9ubHkgQ29uZmlndXJhdGlvblRleHRQYXJ0W119IENvbmZpZ3VyYXRpb25MaW5lICovXG4vKiogQHR5cGVkZWYge3tlbmQ6IG51bWJlciwgZmllbGQ6IHN0cmluZywgc3RhcnQ6IG51bWJlcn19IENvbmZpZ3VyYXRpb25TcGFuICovXG4vKiogQHR5cGVkZWYge3tjb250ZW50OiBzdHJpbmcsIGNvbmZpZ3VyYXRpb25TcGFuczogQ29uZmlndXJhdGlvblNwYW5bXX19IFJlbmRlcmVkQ29uZmlndXJhdGlvblRleHQgKi9cbi8qKiBAdHlwZWRlZiB7e2VuZDogbnVtYmVyLCBmaWVsZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXJ9fSBDb25maWd1cmF0aW9uQXJ0aWZhY3RTcGFuICovXG5cbi8qKiBSZWNvcmRzIGNvbmZpZ3VyYXRpb24gY2F1c2FsaXR5IHdoaWxlIGFuIG93bmluZyByZW5kZXJlciBlbWl0cyB0ZXh0LiAqL1xuY2xhc3MgQ29uZmlndXJhdGlvblRleHRXcml0ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbnRlbnQgPSBcIlwiXG4gICAgLyoqIEB0eXBlIHtDb25maWd1cmF0aW9uU3BhbltdfSAqL1xuICAgIHRoaXMuY29uZmlndXJhdGlvblNwYW5zID0gW11cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmRzIGxpdGVyYWwgb3IgZmllbGQtb3duZWQgdGV4dC5cbiAgICogQHBhcmFtIHtDb25maWd1cmF0aW9uVGV4dFBhcnQgfCByZWFkb25seSBDb25maWd1cmF0aW9uVGV4dFBhcnRbXX0gdmFsdWUgLSBPcmRlcmVkIG91dHB1dCB0ZXh0LlxuICAgKi9cbiAgYXBwZW5kKHZhbHVlKSB7XG4gICAgY29uc3QgcGFydHMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnQgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmNvbnRlbnQgKz0gcGFydFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNvbnRlbnQubGVuZ3RoXG5cbiAgICAgICAgdGhpcy5jb250ZW50ICs9IHBhcnQuY29udGVudFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TcGFucy5wdXNoKHtlbmQ6IHRoaXMuY29udGVudC5sZW5ndGgsIGZpZWxkOiBwYXJ0LmZpZWxkLCBzdGFydH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmlzaGVzIHJlbmRlcmVyLW93bmVkIHRleHQgY29sbGVjdGlvbi5cbiAgICogQHJldHVybnMge1JlbmRlcmVkQ29uZmlndXJhdGlvblRleHR9IEZpbmlzaGVkIGNvbnRlbnQgYW5kIGNhdXNhbCBzcGFucy5cbiAgICovXG4gIGZpbmlzaCgpIHtcbiAgICByZXR1cm4ge2NvbmZpZ3VyYXRpb25TcGFuczogdGhpcy5jb25maWd1cmF0aW9uU3BhbnMsIGNvbnRlbnQ6IHRoaXMuY29udGVudH1cbiAgfVxufVxuXG4vKipcbiAqIE1hcmtzIHRleHQgYXMgY2F1c2FsbHkgb3duZWQgYnkgb25lIG5vcm1hbGl6ZWQgY29uZmlndXJhdGlvbiBmaWVsZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIENvbmZpZ3VyYXRpb24gZmllbGQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIEV4YWN0IHJlbmRlcmVkIHRva2VuIGNvbnRlbnQuXG4gKiBAcmV0dXJucyB7Q29uZmlndXJhdGlvbkZyYWdtZW50fSBUYWdnZWQgdG9rZW4uXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyYXRpb25GcmFnbWVudChmaWVsZCwgY29udGVudCkge1xuICByZXR1cm4ge2NvbnRlbnQsIGZpZWxkfVxufVxuXG4vKipcbiAqIFByZWZsaWdodHMgb25lIGNvbXBsZXRlIHByb2plY3QgYWdhaW5zdCB0aGUgZGVsaXZlcmVkIFN3aWZ0IFRhc2tzIDAwMS0wMDQgcHJvZmlsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIGlPUyBhcHBsaWNhdGlvbiBnZW5lcmF0aW9uIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gW2lucHV0Lm1vZHVsZV0gLSBTaW5nbGUgbW9kdWxlIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBbaW5wdXQucHJvZ3JhbV0gLSBDYWxsZXItb3duZWQgVGFzayAwMTAgcHJvamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9uSW5wdXR9IFtpbnB1dC5jb25maWd1cmF0aW9uXSAtIENsb3NlZCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkFzc2V0SW5wdXRbXX0gW2lucHV0LmFzc2V0c10gLSBFeGFjdCBjYWxsZXItcHJvdmlkZWQgYXNzZXRzLlxuICogQHJldHVybnMge3thc3NldHM6IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQXNzZXRJbnB1dFtdLCBjb25maWd1cmF0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24sIG1vZHVsZVBhdGhzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LCBtb2R1bGVzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZVtdLCBwcm9ncmFtOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW0sIHNvdXJjZXM6IHtjb250ZW50OiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX19IFByZXBhcmVkIGFwcGxpY2F0aW9uIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbihpbnB1dCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpIHx8IEJvb2xlYW4oaW5wdXQubW9kdWxlKSA9PSBCb29sZWFuKGlucHV0LnByb2dyYW0pKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVBQTElDQVRJT05fSU5QVVRcIixcbiAgICAgIGxhbmd1YWdlOiBcImlvc1wiLFxuICAgICAgbWVzc2FnZTogXCJpT1MgYXBwbGljYXRpb24gZ2VuZXJhdGlvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzZW1hbnRpYyBtb2R1bGUgb3IgcHJvZ3JhbS5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IG5vcm1hbGl6ZUNvbmZpZ3VyYXRpb24oaW5wdXQuY29uZmlndXJhdGlvbilcbiAgY29uc3QgcHJvZ3JhbSA9IGlucHV0LnByb2dyYW0gPz8gbm9ybWFsaXplU2luZ2xlTW9kdWxlKGlucHV0Lm1vZHVsZSlcbiAgY29uc3QgcHJlcGFyZWQgPSBwcmVmbGlnaHRTZW1hbnRpY1Byb2dyYW0oe1xuICAgIGJhY2tlbmRMYW5ndWFnZTogXCJzd2lmdFwiLFxuICAgIGRpYWdub3N0aWNMYW5ndWFnZTogXCJpb3NcIixcbiAgICBwcm9ncmFtLFxuICAgIHNvdXJjZUxhbmd1YWdlczogaW9zU291cmNlTGFuZ3VhZ2VzXG4gIH0pXG4gIGNvbnN0IG1vZHVsZVBhdGhzID0gbmV3IE1hcChwcmVwYXJlZC5tb2R1bGVzLm1hcChtb2R1bGUgPT4gW1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoUmVmbGVjdC5nZXQobW9kdWxlLCBcImlkXCIpKSxcbiAgICBgJHtjb25maWd1cmF0aW9uLnNvdXJjZVJvb3R9L0dlbmVyYXRlZC8ke21vZHVsZU5hbWUoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChSZWZsZWN0LmdldChtb2R1bGUsIFwiaWRcIikpKX0uc3dpZnRgXG4gIF0pKVxuICBjb25zdCBhc3NldHMgPSBub3JtYWxpemVBc3NldHMoaW5wdXQuYXNzZXRzLCBjb25maWd1cmF0aW9uLnJlc291cmNlUm9vdClcbiAgY29uc3QgY29uZmxpY3QgPSBmaW5kUG9ydGFibGVBcnRpZmFjdFBhdGhDb25mbGljdChbXG4gICAgYCR7Y29uZmlndXJhdGlvbi5zb3VyY2VSb290fS9HZW5lcmF0ZWQvU2VtYW50aWZvbGRSdW50aW1lLnN3aWZ0YCxcbiAgICAuLi5tb2R1bGVQYXRocy52YWx1ZXMoKSxcbiAgICBgJHtjb25maWd1cmF0aW9uLnJlc291cmNlUm9vdH0vQ29udGVudHMuanNvbmAsXG4gICAgLi4uYXNzZXRzLm1hcCgoe3BhdGh9KSA9PiBwYXRoKVxuICBdKVxuXG4gIGlmIChjb25mbGljdCkgaW52YWxpZFBhdGgoYEFwcGxpY2F0aW9uIGFydGlmYWN0IHBhdGggJyR7Y29uZmxpY3QucGF0aH0nIGhhcyBhICR7Y29uZmxpY3Qua2luZH0gY29uZmxpY3Qke2NvbmZsaWN0Lm90aGVyID8gYCB3aXRoICcke2NvbmZsaWN0Lm90aGVyfSdgIDogXCJcIn0uYClcblxuICByZXR1cm4gey4uLnByZXBhcmVkLCBhc3NldHMsIGNvbmZpZ3VyYXRpb24sIG1vZHVsZVBhdGhzfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZGV0ZXJtaW5pc3RpYyBzZW1hbnRpYyBTd2lmdCBwb3J0aW9uIG9mIG9uZSBpT1MgYXBwbGljYXRpb24gYXJ0aWZhY3Qgc2V0LlxuICogQHBhcmFtIHtQYXJhbWV0ZXJzPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj5bMF19IGlucHV0IC0gaU9TIGdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEByZXR1cm5zIHt7YXJ0aWZhY3RzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdLCBtZXRhZGF0YToge2FwcGxpY2F0aW9uTWFuaWZlc3Q6IHN0cmluZywgcGxhdGZvcm1RdWFsaWZpY2F0aW9uOiBzdHJpbmd9LCB0YXJnZXQ6IFwiaW9zXCJ9fSBDYW5kaWRhdGUgYXJ0aWZhY3Qgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJb3NBcHBsaWNhdGlvbihpbnB1dCkge1xuICBjb25zdCBwcmVwYXJlZCA9IHByZWZsaWdodElvc0FwcGxpY2F0aW9uKGlucHV0KVxuICBjb25zdCBzZW1hbnRpY0FydGlmYWN0cyA9IHJlbmRlclNlbWFudGljQXJ0aWZhY3RzKHByZXBhcmVkKVxuICBjb25zdCBhcHBsaWNhdGlvblBhdGhzID0gYXBwbGljYXRpb25BcnRpZmFjdFBhdGhzKHByZXBhcmVkKVxuICBjb25zdCBwcm9qZWN0ID0gcmVuZGVyUGJ4UHJvamVjdChwcmVwYXJlZCwgYXBwbGljYXRpb25QYXRocylcbiAgY29uc3Qgc2NoZW1lID0gcmVuZGVyU2hhcmVkU2NoZW1lKHByZXBhcmVkKVxuICBjb25zdCBiYXNlQ29uZmlndXJhdGlvbiA9IHJlbmRlckJhc2VDb25maWd1cmF0aW9uKHByZXBhcmVkLmNvbmZpZ3VyYXRpb24pXG4gIGNvbnN0IGluZm9QbGlzdCA9IHJlbmRlckluZm9QbGlzdChwcmVwYXJlZC5jb25maWd1cmF0aW9uKVxuICBjb25zdCB1bml0VGVzdHMgPSByZW5kZXJVbml0VGVzdHMocHJlcGFyZWQuY29uZmlndXJhdGlvbilcbiAgY29uc3QgdWlUZXN0cyA9IHJlbmRlclVpVGVzdHMocHJlcGFyZWQuY29uZmlndXJhdGlvbilcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IHByZXBhcmVkLmNvbmZpZ3VyYXRpb25cbiAgY29uc3QgZW50cnlOYW1lc3BhY2UgPSBgU2VtYW50aWZvbGRNb2R1bGUke21vZHVsZU5hbWUocHJlcGFyZWQucHJvZ3JhbS5lbnRyeU1vZHVsZSl9YFxuICBjb25zdCBhcHAgPSBgaW1wb3J0IFN3aWZ0VUlcblxuQG1haW5cbnN0cnVjdCBTZW1hbnRpZm9sZEFwcGxpY2F0aW9uOiBBcHAge1xuICB2YXIgYm9keTogc29tZSBTY2VuZSB7XG4gICAgV2luZG93R3JvdXAge1xuICAgICAgU2VtYW50aWZvbGRPdXRwdXRWaWV3KGxpbmVzOiBTZW1hbnRpZm9sZEJyaWRnZS5ydW4oKSlcbiAgICB9XG4gIH1cbn1cbmBcbiAgY29uc3QgYnJpZGdlID0gYGVudW0gU2VtYW50aWZvbGRCcmlkZ2Uge1xuICBzdGF0aWMgZnVuYyBydW4oKSAtPiBbU3RyaW5nXSB7XG4gICAgcmV0dXJuICR7ZW50cnlOYW1lc3BhY2V9LnNlbWFudGlmb2xkRW50cnkoKVxuICB9XG59XG5gXG4gIGNvbnN0IHZpZXcgPSBgaW1wb3J0IFN3aWZ0VUlcblxuc3RydWN0IFNlbWFudGlmb2xkT3V0cHV0VmlldzogVmlldyB7XG4gIGxldCBsaW5lczogW1N0cmluZ11cblxuICB2YXIgYm9keTogc29tZSBWaWV3IHtcbiAgICBUZXh0KGxpbmVzLmpvaW5lZChzZXBhcmF0b3I6IFwiXFxcXG5cIikpXG4gICAgICAuYWNjZXNzaWJpbGl0eUlkZW50aWZpZXIoXCJzZW1hbnRpZm9sZC1vdXRwdXRcIilcbiAgfVxufVxuYFxuICBjb25zdCBwcm9kdWN0ID0gY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZVxuICAvKiogQHR5cGUge0NvbmZpZ3VyYXRpb25BcnRpZmFjdFNwYW5bXX0gKi9cbiAgY29uc3QgY29uZmlndXJhdGlvblNwYW5zID0gW11cbiAgY29uc3QgYXJ0aWZhY3RzID0gW1xuICAgIGNvbmZpZ3VyZWRTeW50aGV0aWNUZXh0KGAke3Byb2R1Y3R9Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2pgLCBcIm1hbmlmZXN0XCIsIHByb2plY3QsXG4gICAgICBjb25maWd1cmF0aW9uU3BhbnMsXG4gICAgICBcIkNhbm9uaWNhbCBkZXRlcm1pbmlzdGljIFhjb2RlIHByb2plY3Qgc3RydWN0dXJlLlwiKSxcbiAgICBjb25maWd1cmVkU3ludGhldGljVGV4dChgJHtwcm9kdWN0fS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy8ke3Byb2R1Y3R9Lnhjc2NoZW1lYCwgXCJzdXBwb3J0XCIsXG4gICAgICBzY2hlbWUsIGNvbmZpZ3VyYXRpb25TcGFucywgXCJDYW5vbmljYWwgc2hhcmVkIFhjb2RlIGFwcGxpY2F0aW9uL3Rlc3Qgc2NoZW1lLlwiKSxcbiAgICBjb25maWd1cmVkU3ludGhldGljVGV4dChcIkNvbmZpZ3VyYXRpb24vQmFzZS54Y2NvbmZpZ1wiLCBcInN1cHBvcnRcIiwgYmFzZUNvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb25TcGFucyxcbiAgICAgIFwiQ2xvc2VkIHVuc2lnbmVkIGlPUyBidWlsZCBjb25maWd1cmF0aW9uLlwiKSxcbiAgICBjb25maWd1cmVkU3ludGhldGljVGV4dChcIkNvbmZpZ3VyYXRpb24vSW5mby5wbGlzdFwiLCBcInN1cHBvcnRcIiwgaW5mb1BsaXN0LCBjb25maWd1cmF0aW9uU3BhbnMsXG4gICAgICBcIkFsbG93bGlzdGVkIGlPUyBhcHBsaWNhdGlvbiBwcm9wZXJ0eSBsaXN0LlwiKSxcbiAgICAuLi5zZW1hbnRpY0FydGlmYWN0cyxcbiAgICBzeW50aGV0aWNUZXh0KFwiU291cmNlcy9BcHBsaWNhdGlvbi9BcHAuc3dpZnRcIiwgXCJlbnRyeVwiLCBhcHAsIFwiU3ludGhldGljIFN3aWZ0VUkgYXBwbGljYXRpb24gbGlmZWN5Y2xlLlwiKSxcbiAgICBzeW50aGV0aWNUZXh0KFwiU291cmNlcy9BcHBsaWNhdGlvbi9TZW1hbnRpZm9sZEJyaWRnZS5zd2lmdFwiLCBcInN1cHBvcnRcIiwgYnJpZGdlLFxuICAgICAgXCJTeW50aGV0aWMgYnJpZGdlIGZyb20gU3dpZnRVSSB0byB0aGUgc2VtYW50aWMgZW50cnkuXCIpLFxuICAgIHN5bnRoZXRpY1RleHQoXCJTb3VyY2VzL0FwcGxpY2F0aW9uL1NlbWFudGlmb2xkT3V0cHV0Vmlldy5zd2lmdFwiLCBcInN1cHBvcnRcIiwgdmlldyxcbiAgICAgIFwiU3ludGhldGljIHN0YWJsZSB0ZXh0IG91dHB1dCB2aWV3IGFuZCBhY2Nlc3NpYmlsaXR5IGlkZW50aWZpZXIuXCIpLFxuICAgIHN5bnRoZXRpY1RleHQoXCJBc3NldHMueGNhc3NldHMvQ29udGVudHMuanNvblwiLCBcInJlc291cmNlXCIsIHN0cmluZ2lmeUNhbm9uaWNhbEpzb24oe1xuICAgICAgaW5mbzoge2F1dGhvcjogXCJzZW1hbnRpZm9sZFwiLCB2ZXJzaW9uOiAxfVxuICAgIH0pLCBcIkJhc2UgYXNzZXQtY2F0YWxvZyBtZXRhZGF0YTsgbm8gYXBwbGljYXRpb24gaWNvbiBpcyBzeW50aGVzaXplZC5cIiksXG4gICAgLi4ucHJlcGFyZWQuYXNzZXRzLm1hcChhc3NldEFydGlmYWN0KSxcbiAgICBjb25maWd1cmVkU3ludGhldGljVGV4dChgVGVzdHMvJHtwcm9kdWN0fVRlc3RzLnN3aWZ0YCwgXCJzdXBwb3J0XCIsIHVuaXRUZXN0cywgY29uZmlndXJhdGlvblNwYW5zLFxuICAgICAgXCJTeW50aGV0aWMgcHVyZS1sb2dpYyBkZXRlcm1pbmlzbSBYQ1Rlc3Qgc291cmNlLlwiKSxcbiAgICBjb25maWd1cmVkU3ludGhldGljVGV4dChgVUlUZXN0cy8ke3Byb2R1Y3R9VUlUZXN0cy5zd2lmdGAsIFwic3VwcG9ydFwiLCB1aVRlc3RzLCBjb25maWd1cmF0aW9uU3BhbnMsXG4gICAgICBcIlN5bnRoZXRpYyBYQ1VJIGFjY2Vzc2liaWxpdHktcm91dGUgdGVzdCBzb3VyY2UuXCIpXG4gIF1cbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gXCJzZW1hbnRpZm9sZC1wcm9qZWN0Lmpzb25cIlxuXG4gIGFydGlmYWN0cy5wdXNoKHN5bnRoZXRpY1RleHQobWFuaWZlc3RQYXRoLCBcIm1hbmlmZXN0XCIsXG4gICAgcmVuZGVyUHJvamVjdE1hbmlmZXN0KHByZXBhcmVkLCBhcnRpZmFjdHMsIG1hbmlmZXN0UGF0aCwgY29uZmlndXJhdGlvblNwYW5zKSxcbiAgICBcIlZlcnNpb25lZCBpT1MgcHJvamVjdCBvd25lcnNoaXAgYW5kIHByb3ZlbmFuY2UgbWFuaWZlc3QuXCIpKVxuXG4gIHJldHVybiB7XG4gICAgYXJ0aWZhY3RzLFxuICAgIG1ldGFkYXRhOiB7YXBwbGljYXRpb25NYW5pZmVzdDogbWFuaWZlc3RQYXRoLCBwbGF0Zm9ybVF1YWxpZmljYXRpb246IFwiZGVmZXJyZWRcIn0sXG4gICAgdGFyZ2V0OiBcImlvc1wiXG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjb21wbGV0ZSBkZXRlcm1pbmlzdGljIGFwcGxpY2F0aW9uIG93bmVyc2hpcCBhbmQgcHJvdmVuYW5jZSByZWNvcmQuXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIHByZWZsaWdodElvc0FwcGxpY2F0aW9uPn0gcHJlcGFyZWQgLSBGdWxseSBwcmVmbGlnaHRlZCBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gYXJ0aWZhY3RzIC0gQWxsIG5vbi1tYW5pZmVzdCBvdXRwdXQgYXJ0aWZhY3RzLlxuICogQHBhcmFtIHtzdHJpbmd9IG1hbmlmZXN0UGF0aCAtIE93bmVkIG1hbmlmZXN0IHBhdGguXG4gKiBAcGFyYW0ge0NvbmZpZ3VyYXRpb25BcnRpZmFjdFNwYW5bXX0gY29uZmlndXJhdGlvblNwYW5zIC0gUmVuZGVyZXItb3duZWQgY29uZmlndXJhdGlvbiByYW5nZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDYW5vbmljYWwgbWFuaWZlc3QgSlNPTi5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyUHJvamVjdE1hbmlmZXN0KHByZXBhcmVkLCBhcnRpZmFjdHMsIG1hbmlmZXN0UGF0aCwgY29uZmlndXJhdGlvblNwYW5zKSB7XG4gIGNvbnN0IGFzc2V0UGF0aHMgPSBuZXcgU2V0KHByZXBhcmVkLmFzc2V0cy5tYXAoKHtwYXRofSkgPT4gcGF0aCkpXG4gIGNvbnN0IHNlbWFudGljQXJ0aWZhY3RzID0gYXJ0aWZhY3RzLmZpbHRlcihhcnRpZmFjdCA9PiBhcnRpZmFjdC5wcm92ZW5hbmNlLmtpbmQgPT0gXCJ0ZXh0XCIpXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwcmVwYXJlZC5jb25maWd1cmF0aW9uXG5cbiAgcmV0dXJuIHN0cmluZ2lmeUNhbm9uaWNhbEpzb24oe1xuICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgZ2VuZXJhdG9yOiB7bmFtZTogXCJzZW1hbnRpZm9sZFwiLCB2ZXJzaW9uOiBnZW5lcmF0b3JWZXJzaW9ufSxcbiAgICBvd25lcnNoaXA6IHtcbiAgICAgIGV4Y2x1ZGVkUGF0aFBhdHRlcm5zLFxuICAgICAgb3duZWRQYXRoczogWy4uLmFydGlmYWN0cy5tYXAoKHtwYXRofSkgPT4gcGF0aCksIG1hbmlmZXN0UGF0aF1cbiAgICB9LFxuICAgIHBsYXRmb3JtUmVxdWlyZW1lbnRzOiB7XG4gICAgICBhcHBsZVNkazoge3N0YXR1czogXCJkZWZlcnJlZFwifSxcbiAgICAgIGlvc1NpbXVsYXRvcjoge3N0YXR1czogXCJkZWZlcnJlZFwifSxcbiAgICAgIG1hY29zSG9zdDoge3N0YXR1czogXCJkZWZlcnJlZFwifSxcbiAgICAgIHN3aWZ0Yzoge3N0YXR1czogXCJkZWZlcnJlZFwifSxcbiAgICAgIHhjb2RlOiB7c3RhdHVzOiBcImRlZmVycmVkXCJ9LFxuICAgICAgeGN0ZXN0OiB7c3RhdHVzOiBcImRlZmVycmVkXCJ9LFxuICAgICAgeGN1aWF1dG9tYXRpb246IHtzdGF0dXM6IFwiZGVmZXJyZWRcIn1cbiAgICB9LFxuICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgIGFzc2V0czogcHJlcGFyZWQuYXNzZXRzLm1hcChhc3NldCA9PiAoe1xuICAgICAgICBjb250ZW50S2luZDogdHlwZW9mIGFzc2V0LmNvbnRlbnQgPT0gXCJzdHJpbmdcIiA/IFwidGV4dFwiIDogXCJiaW5hcnlcIixcbiAgICAgICAgbWVkaWFUeXBlOiBhc3NldC5tZWRpYVR5cGUsXG4gICAgICAgIHBhdGg6IGFzc2V0LnBhdGgsXG4gICAgICAgIHNoYTI1NjogYXNzZXQuc2hhMjU2XG4gICAgICB9KSksXG4gICAgICBjb25maWd1cmF0aW9uOiBPYmplY3Qua2V5cyhjb25maWd1cmF0aW9uKS5zb3J0KCkubWFwKGZpZWxkID0+ICh7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBtYW5pZmVzdFBvaW50ZXI6IGAvY29uZmlndXJhdGlvbi8ke2ZpZWxkfWAsXG4gICAgICAgIG91dHB1dHM6IGNvbmZpZ3VyYXRpb25PdXRwdXRDaXRhdGlvbnMoY29uZmlndXJhdGlvblNwYW5zLCBmaWVsZClcbiAgICAgIH0pKSxcbiAgICAgIHNlbWFudGljU291cmNlczogcHJlcGFyZWQuc291cmNlcy5tYXAoc291cmNlID0+ICh7XG4gICAgICAgIGFydGlmYWN0czogc2VtYW50aWNBcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LnByb3ZlbmFuY2Uua2luZCA9PSBcInRleHRcIiAmJlxuICAgICAgICAgIGFydGlmYWN0LnByb3ZlbmFuY2UubWFwcGluZy5zcGFucy5zb21lKCh7b3JpZ2lufSkgPT4gb3JpZ2luUmVmZXJlbmNlc0ZpbGVuYW1lKG9yaWdpbiwgc291cmNlLmZpbGVuYW1lKSkpXG4gICAgICAgICAgLm1hcCgoe3BhdGh9KSA9PiBwYXRoKSxcbiAgICAgICAgZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZSxcbiAgICAgICAgLi4uKHNvdXJjZS5sYW5ndWFnZSA9PT0gdW5kZWZpbmVkID8ge30gOiB7bGFuZ3VhZ2U6IHNvdXJjZS5sYW5ndWFnZX0pLFxuICAgICAgICBzaGEyNTY6IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHNvdXJjZS5jb250ZW50KS5kaWdlc3QoXCJoZXhcIilcbiAgICAgIH0pKSxcbiAgICAgIHN5bnRoZXRpY1NjYWZmb2xkaW5nOiBbXG4gICAgICAgIC4uLmFydGlmYWN0cy5maWx0ZXIoYXJ0aWZhY3QgPT4gYXJ0aWZhY3QucHJvdmVuYW5jZS5raW5kID09IFwic3ludGhldGljXCIgJiYgIWFzc2V0UGF0aHMuaGFzKGFydGlmYWN0LnBhdGgpKVxuICAgICAgICAgIC5tYXAoKHtwYXRofSkgPT4gcGF0aCksXG4gICAgICAgIG1hbmlmZXN0UGF0aFxuICAgICAgXVxuICAgIH0sXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkSW9zUHJvamVjdFwiLFxuICAgIHNlbWFudGljUHJvZ3JhbTogc2VtYW50aWNQcm9ncmFtTWFuaWZlc3QocHJlcGFyZWQpLFxuICAgIHRhcmdldDogXCJpb3NcIixcbiAgICB2ZXJzaW9uOiAxXG4gIH0pXG59XG5cbi8qKlxuICogUmVjb3JkcyBzdGFibGUgc2VtYW50aWMgaW5wdXQgaWRlbnRpdGllcyBhbmQgdGhlaXIgZ2VuZXJhdGVkIFN3aWZ0IGxpbmthZ2UuXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIHByZWZsaWdodElvc0FwcGxpY2F0aW9uPn0gcHJlcGFyZWQgLSBGdWxseSBwcmVmbGlnaHRlZCBhcHBsaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gVmVyc2lvbmVkIHNlbWFudGljLXByb2dyYW0gbWFuaWZlc3Qgc2VjdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2VtYW50aWNQcm9ncmFtTWFuaWZlc3QocHJlcGFyZWQpIHtcbiAgY29uc3QgbW9kdWxlSWRzID0gbmV3IE1hcChwcmVwYXJlZC5wcm9ncmFtLm1vZHVsZXMubWFwKChtb2R1bGUsIGluZGV4KSA9PiBbbW9kdWxlLmlkLCBpbmRleF0pKVxuICBjb25zdCBzb3VyY2VDb250ZW50ID0gbmV3IE1hcChwcmVwYXJlZC5zb3VyY2VzLm1hcChzb3VyY2UgPT4gW3NvdXJjZS5maWxlbmFtZSwgc291cmNlLmNvbnRlbnRdKSlcbiAgY29uc3QgbW9kdWxlcyA9IHByZXBhcmVkLnByb2dyYW0ubW9kdWxlcy5tYXAobW9kdWxlID0+IHtcbiAgICBjb25zdCBpZCA9IG1vZHVsZS5pZFxuICAgIGNvbnN0IHBhdGggPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHByZXBhcmVkLm1vZHVsZVBhdGhzLmdldChpZCkpXG4gICAgY29uc3Qgc291cmNlID0gcHJlcGFyZWQucHJvZ3JhbS5zb3VyY2VzLmZpbmQoY2FuZGlkYXRlID0+IGNhbmRpZGF0ZS5maWxlbmFtZSA9PSBtb2R1bGUuc291cmNlRmlsZW5hbWUpXG4gICAgY29uc3QgY29udGVudCA9IHNvdXJjZUNvbnRlbnQuZ2V0KG1vZHVsZS5zb3VyY2VGaWxlbmFtZSlcblxuICAgIGlmICghc291cmNlIHx8IGNvbnRlbnQgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IFR5cGVFcnJvcihgUHJlZmxpZ2h0ZWQgaU9TIG1vZHVsZSAnJHtpZH0nIGxvc3QgaXRzIHNvdXJjZSBvd25lcnNoaXAuYClcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBbLi4ubmV3IFNldChtb2R1bGUuaW1wb3J0cy5tYXAoKHttb2R1bGVJZH0pID0+IG1vZHVsZUlkKSldXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAobW9kdWxlSWRzLmdldChsZWZ0KSkgLSAvKiogQHR5cGUge251bWJlcn0gKi8gKG1vZHVsZUlkcy5nZXQocmlnaHQpKSlcblxuICAgIHJldHVybiB7XG4gICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICBnZW5lcmF0ZWRBcnRpZmFjdHM6IFtwYXRoXSxcbiAgICAgIGlkLFxuICAgICAgbmFtZXNwYWNlOiBgU2VtYW50aWZvbGRNb2R1bGUke21vZHVsZU5hbWUoaWQpfWAsXG4gICAgICBzb3VyY2U6IHtcbiAgICAgICAgZmlsZW5hbWU6IHNvdXJjZS5maWxlbmFtZSxcbiAgICAgICAgaWQ6IHNvdXJjZS5pZCxcbiAgICAgICAgc2hhMjU2OiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoXCJoZXhcIilcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIGNvbnN0IHNvdXJjZXMgPSBwcmVwYXJlZC5wcm9ncmFtLnNvdXJjZXMubWFwKHNvdXJjZSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHNvdXJjZUNvbnRlbnQuZ2V0KHNvdXJjZS5maWxlbmFtZSlcblxuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoYFByZWZsaWdodGVkIGlPUyBzb3VyY2UgJyR7c291cmNlLmZpbGVuYW1lfScgbG9zdCBpdHMgY29udGVudC5gKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVuYW1lOiBzb3VyY2UuZmlsZW5hbWUsXG4gICAgICBpZDogc291cmNlLmlkLFxuICAgICAgbGFuZ3VhZ2U6IHNvdXJjZS5sYW5ndWFnZSxcbiAgICAgIG1vZHVsZUlkczogbW9kdWxlcy5maWx0ZXIobW9kdWxlID0+IG1vZHVsZS5zb3VyY2UuZmlsZW5hbWUgPT0gc291cmNlLmZpbGVuYW1lKS5tYXAoKHtpZH0pID0+IGlkKSxcbiAgICAgIG93bmVyc2hpcDogc291cmNlLm93bmVyc2hpcCA/PyBcImFwcGxpY2F0aW9uXCIsXG4gICAgICBzaGEyNTY6IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdChcImhleFwiKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgZW50cnlJZCA9IHByZXBhcmVkLnByb2dyYW0uZW50cnlNb2R1bGVcbiAgY29uc3QgZW50cnlBcnRpZmFjdCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocHJlcGFyZWQubW9kdWxlUGF0aHMuZ2V0KGVudHJ5SWQpKVxuICBjb25zdCBlbnRyeU5hbWVzcGFjZSA9IGBTZW1hbnRpZm9sZE1vZHVsZSR7bW9kdWxlTmFtZShlbnRyeUlkKX1gXG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeToge1xuICAgICAgYXBwbGljYXRpb25BcnRpZmFjdDogYCR7cHJlcGFyZWQuY29uZmlndXJhdGlvbi5zb3VyY2VSb290fS9BcHBsaWNhdGlvbi9BcHAuc3dpZnRgLFxuICAgICAgYnJpZGdlQXJ0aWZhY3Q6IGAke3ByZXBhcmVkLmNvbmZpZ3VyYXRpb24uc291cmNlUm9vdH0vQXBwbGljYXRpb24vU2VtYW50aWZvbGRCcmlkZ2Uuc3dpZnRgLFxuICAgICAgZ2VuZXJhdGVkQXJ0aWZhY3Q6IGVudHJ5QXJ0aWZhY3QsXG4gICAgICBnZW5lcmF0ZWRGdW5jdGlvbklkZW50aXR5OiBgJHtlbnRyeU5hbWVzcGFjZX0uc2VtYW50aWZvbGRFbnRyeWAsXG4gICAgICBtb2R1bGVJZDogZW50cnlJZFxuICAgIH0sXG4gICAgbW9kdWxlcyxcbiAgICBzY2hlbWE6IFwiU2VtYW50aWZvbGRJb3NTZW1hbnRpY1Byb2dyYW1cIixcbiAgICBzb3VyY2VzLFxuICAgIHZlcnNpb246IDFcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBvbmUgY2xvc2VkIHNlbWFudGljIG9yaWdpbiBjaXRlcyBhIHNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNPcmlnaW59IG9yaWdpbiAtIE1hcHBlZCBvcmlnaW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSBPcmlnaW5hbCBjYWxsZXIgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgc291cmNlIHBhcnRpY2lwYXRlcyBpbiB0aGUgb3JpZ2luLlxuICovXG5mdW5jdGlvbiBvcmlnaW5SZWZlcmVuY2VzRmlsZW5hbWUob3JpZ2luLCBmaWxlbmFtZSkge1xuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJzb3VyY2VcIikgcmV0dXJuIG9yaWdpbi5sb2NhdGlvbi5maWxlbmFtZSA9PSBmaWxlbmFtZVxuICBpZiAob3JpZ2luLmtpbmQgPT0gXCJkZXJpdmVkXCIpIHJldHVybiBvcmlnaW4ub3JpZ2lucy5zb21lKCh7bG9jYXRpb259KSA9PiBsb2NhdGlvbi5maWxlbmFtZSA9PSBmaWxlbmFtZSlcblxuICByZXR1cm4gb3JpZ2luLnJlbGF0ZWRPcmlnaW5zLnNvbWUoKHtsb2NhdGlvbn0pID0+IGxvY2F0aW9uLmZpbGVuYW1lID09IGZpbGVuYW1lKVxufVxuXG4vKipcbiAqIEdyb3VwcyByZW5kZXJlci1yZWNvcmRlZCBjb25maWd1cmF0aW9uIHJhbmdlcyB3aXRob3V0IHNjYW5uaW5nIGdlbmVyYXRlZCB0ZXh0LlxuICogQHBhcmFtIHtDb25maWd1cmF0aW9uQXJ0aWZhY3RTcGFuW119IHNwYW5zIC0gQ2F1c2FsIGFydGlmYWN0IHNwYW5zLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIC0gTm9ybWFsaXplZCBjb25maWd1cmF0aW9uIGZpZWxkLlxuICogQHJldHVybnMge3twYXRoOiBzdHJpbmcsIHJhbmdlczoge2VuZDogbnVtYmVyLCBzdGFydDogbnVtYmVyfVtdfVtdfSBTdGFibGUgb3V0cHV0IGNpdGF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJhdGlvbk91dHB1dENpdGF0aW9ucyhzcGFucywgZmllbGQpIHtcbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCB7ZW5kOiBudW1iZXIsIHN0YXJ0OiBudW1iZXJ9W10+fSAqL1xuICBjb25zdCBieVBhdGggPSBuZXcgTWFwKClcblxuICBmb3IgKGNvbnN0IHNwYW4gb2Ygc3BhbnMpIHtcbiAgICBpZiAoc3Bhbi5maWVsZCAhPSBmaWVsZCkgY29udGludWVcbiAgICBjb25zdCByYW5nZXMgPSBieVBhdGguZ2V0KHNwYW4ucGF0aCkgPz8gW11cblxuICAgIHJhbmdlcy5wdXNoKHtlbmQ6IHNwYW4uZW5kLCBzdGFydDogc3Bhbi5zdGFydH0pXG4gICAgYnlQYXRoLnNldChzcGFuLnBhdGgsIHJhbmdlcylcbiAgfVxuXG4gIHJldHVybiBbLi4uYnlQYXRoXS5tYXAoKFtwYXRoLCByYW5nZXNdKSA9PiAoe3BhdGgsIHJhbmdlc30pKVxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNoYXJlZCBjYXB0dXJlIHJ1bnRpbWUgYW5kIG1hcHBlZCBwZXItbW9kdWxlIHNlbWFudGljIFN3aWZ0LlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj59IHByZXBhcmVkIC0gRnVsbHkgcHJlZmxpZ2h0ZWQgYXBwbGljYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gT3JkZXJlZCBzZW1hbnRpYyBhcnRpZmFjdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNlbWFudGljQXJ0aWZhY3RzKHByZXBhcmVkKSB7XG4gIGNvbnN0IHBhdGhzID0gcHJlcGFyZWQubW9kdWxlUGF0aHNcbiAgY29uc3QgZGVjbGFyYXRpb25zID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBtb2R1bGUgb2YgcHJlcGFyZWQubW9kdWxlcykge1xuICAgIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgZGVjbGFyYXRpb25zLnNldChkZWNsYXJhdGlvbi5pZCwge1xuICAgICAgZGVjbGFyYXRpb24sXG4gICAgICBtb2R1bGVJZDogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChSZWZsZWN0LmdldChtb2R1bGUsIFwiaWRcIikpXG4gICAgfSlcbiAgfVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W119ICovXG4gIGNvbnN0IGFydGlmYWN0cyA9IFt7XG4gICAgY29udGVudDogaW9zU3dpZnRSdW50aW1lLFxuICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXN3aWZ0XCIsXG4gICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgIHBhdGg6IFwiU291cmNlcy9HZW5lcmF0ZWQvU2VtYW50aWZvbGRSdW50aW1lLnN3aWZ0XCIsXG4gICAgcHJvdmVuYW5jZToge1xuICAgICAga2luZDogXCJzeW50aGV0aWNcIixcbiAgICAgIHJlYXNvbjogXCJTaGFyZWQgaU9TIGFwcGxpY2F0aW9uIG91dHB1dCBjYXB0dXJlIGFuZCBleGFjdCBTd2lmdCBzY2FsYXIgc3VwcG9ydC5cIixcbiAgICAgIHJlbGF0ZWRPcmlnaW5zOiBbXVxuICAgIH0sXG4gICAgcm9sZTogXCJzdXBwb3J0XCJcbiAgfV1cblxuICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBwcmVwYXJlZC5tb2R1bGVzKSB7XG4gICAgY29uc3QgbW9kdWxlSWQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKFJlZmxlY3QuZ2V0KG1vZHVsZSwgXCJpZFwiKSlcbiAgICBjb25zdCBmaWxlbmFtZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGF0aHMuZ2V0KG1vZHVsZUlkKSlcbiAgICBjb25zdCB3cml0ZXIgPSBuZXcgU291cmNlV3JpdGVyKHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbGFuZ3VhZ2U6IFwic3dpZnRcIixcbiAgICAgIG1vZHVsZSxcbiAgICAgIHByb2dyYW06IHByZXBhcmVkLnByb2dyYW0sXG4gICAgICBwcm9ncmFtUGF0aHM6IHBhdGhzLFxuICAgICAgc291cmNlczogcHJlcGFyZWQuc291cmNlc1xuICAgIH0pXG5cbiAgICBlbWl0U2VtYW50aWNNb2R1bGUod3JpdGVyLCBtb2R1bGUsIG1vZHVsZUlkLCBtb2R1bGVJZCA9PSBwcmVwYXJlZC5wcm9ncmFtLmVudHJ5TW9kdWxlLCBkZWNsYXJhdGlvbnMpXG4gICAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyh3cml0ZXIuZmluaXNoKCkpXG5cbiAgICBhcnRpZmFjdHMucHVzaCh7XG4gICAgICBjb250ZW50OiBtYXBwaW5nLmdlbmVyYXRlZC5jb250ZW50LFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiBcInRleHQveC1zd2lmdFwiLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogZmlsZW5hbWUsXG4gICAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJ0ZXh0XCIsIG1hcHBpbmcsIHNvdXJjZU1hcDogdG9Tb3VyY2VNYXBWMyhtYXBwaW5nKSwgc291cmNlTWFwRmlsZW5hbWU6IGAke2ZpbGVuYW1lfS5tYXBgfSxcbiAgICAgIHJvbGU6IFwic291cmNlXCJcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIGFydGlmYWN0c1xufVxuXG4vKipcbiAqIFByb2R1Y2VzIGFsbCBwcm9qZWN0IHBhdGhzIHJlZmVyZW5jZWQgYnkgdGhlIFhjb2RlIG1vZGVsLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj59IHByZXBhcmVkIC0gUHJlcGFyZWQgYXBwbGljYXRpb24uXG4gKiBAcmV0dXJucyB7e2FwcFNvdXJjZXM6IHN0cmluZ1tdLCBhc3NldHM6IHN0cmluZ1tdLCBpbmZvUGxpc3Q6IHN0cmluZywgdW5pdFRlc3Q6IHN0cmluZywgdWlUZXN0OiBzdHJpbmcsIHhjY29uZmlnOiBzdHJpbmd9fSBQYXRocy5cbiAqL1xuZnVuY3Rpb24gYXBwbGljYXRpb25BcnRpZmFjdFBhdGhzKHByZXBhcmVkKSB7XG4gIGNvbnN0IHtwcm9kdWN0TmFtZTogcHJvZHVjdCwgcmVzb3VyY2VSb290LCBzb3VyY2VSb290fSA9IHByZXBhcmVkLmNvbmZpZ3VyYXRpb25cblxuICByZXR1cm4ge1xuICAgIGFwcFNvdXJjZXM6IFtcbiAgICAgIGAke3NvdXJjZVJvb3R9L0dlbmVyYXRlZC9TZW1hbnRpZm9sZFJ1bnRpbWUuc3dpZnRgLFxuICAgICAgLi4ucHJlcGFyZWQubW9kdWxlUGF0aHMudmFsdWVzKCksXG4gICAgICBgJHtzb3VyY2VSb290fS9BcHBsaWNhdGlvbi9BcHAuc3dpZnRgLFxuICAgICAgYCR7c291cmNlUm9vdH0vQXBwbGljYXRpb24vU2VtYW50aWZvbGRCcmlkZ2Uuc3dpZnRgLFxuICAgICAgYCR7c291cmNlUm9vdH0vQXBwbGljYXRpb24vU2VtYW50aWZvbGRPdXRwdXRWaWV3LnN3aWZ0YFxuICAgIF0sXG4gICAgYXNzZXRzOiBbcmVzb3VyY2VSb290LCAuLi5wcmVwYXJlZC5hc3NldHMubWFwKCh7cGF0aH0pID0+IHBhdGgpXSxcbiAgICBpbmZvUGxpc3Q6IFwiQ29uZmlndXJhdGlvbi9JbmZvLnBsaXN0XCIsXG4gICAgdW5pdFRlc3Q6IGBUZXN0cy8ke3Byb2R1Y3R9VGVzdHMuc3dpZnRgLFxuICAgIHVpVGVzdDogYFVJVGVzdHMvJHtwcm9kdWN0fVVJVGVzdHMuc3dpZnRgLFxuICAgIHhjY29uZmlnOiBcIkNvbmZpZ3VyYXRpb24vQmFzZS54Y2NvbmZpZ1wiXG4gIH1cbn1cblxuLyoqXG4gKiBEZXJpdmVzIGNvbGxpc2lvbi1jaGVja2VkIHVwcGVyY2FzZSAyNC1oZXggWGNvZGUgb2JqZWN0IElEcyBmcm9tIG5vcm1hbGl6ZWQgaWRlbnRpdGllcy5cbiAqIEBwYXJhbSB7cmVhZG9ubHkgc3RyaW5nW119IGlkZW50aXRpZXMgLSBDb21wbGV0ZSBvcmRlcmVkIG9iamVjdCBpZGVudGl0aWVzLlxuICogQHBhcmFtIHsoaWRlbnRpdHk6IHN0cmluZykgPT4gc3RyaW5nfSBbZGlnZXN0XSAtIFRlc3Qtb25seSBkaWdlc3Qgc2VhbTsgcHJvZHVjdGlvbiB1c2VzIGJ1aWx0LWluIFNIQS0yNTYuXG4gKiBAcmV0dXJucyB7TWFwPHN0cmluZywgc3RyaW5nPn0gT2JqZWN0IElEIGJ5IGZ1bGwgaW5wdXQgaWRlbnRpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvY2F0ZVhjb2RlT2JqZWN0SWRzKGlkZW50aXRpZXMsIGRpZ2VzdCA9IGlkZW50aXR5ID0+IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGlkZW50aXR5KS5kaWdlc3QoXCJoZXhcIikpIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpXG4gIGNvbnN0IGZ1bGxJZGVudGl0aWVzID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBpZGVudGl0aWVzKSB7XG4gICAgaWYgKHR5cGVvZiBpZGVudGl0eSAhPSBcInN0cmluZ1wiIHx8IGlkZW50aXR5Lmxlbmd0aCA9PSAwIHx8IHJlc3VsdC5oYXMoaWRlbnRpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlhDT0RFX0lEX0NPTExJU0lPTlwiLCBsYW5ndWFnZTogXCJpb3NcIixcbiAgICAgICAgbWVzc2FnZTogXCJYY29kZSBvYmplY3QgaWRlbnRpdGllcyBtdXN0IGJlIHVuaXF1ZSBub24tZW1wdHkgc3RyaW5ncy5cIn0pXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBpZGVudGl0eS5ub3JtYWxpemUoXCJORkNcIilcbiAgICBjb25zdCBmdWxsRGlnZXN0ID0gZGlnZXN0KG5vcm1hbGl6ZWQpXG5cbiAgICBpZiAoIS9eWzAtOWEtZkEtRl17NjR9JC91LnRlc3QoZnVsbERpZ2VzdCkpIHtcbiAgICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiWENPREVfSURfQ09MTElTSU9OXCIsIGxhbmd1YWdlOiBcImlvc1wiLFxuICAgICAgICBtZXNzYWdlOiBgWGNvZGUgb2JqZWN0IGlkZW50aXR5ICcke2lkZW50aXR5fScgZGlkIG5vdCBwcm9kdWNlIGEgZnVsbCBTSEEtMjU2IGRpZ2VzdC5gfSlcbiAgICB9XG4gICAgY29uc3Qgb2JqZWN0SWQgPSBmdWxsRGlnZXN0LnNsaWNlKDAsIDI0KS50b1VwcGVyQ2FzZSgpXG4gICAgY29uc3QgcHJldmlvdXMgPSBmdWxsSWRlbnRpdGllcy5nZXQob2JqZWN0SWQpXG5cbiAgICBpZiAocHJldmlvdXMgIT09IHVuZGVmaW5lZCAmJiBwcmV2aW91cyAhPSBub3JtYWxpemVkKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlhDT0RFX0lEX0NPTExJU0lPTlwiLCBsYW5ndWFnZTogXCJpb3NcIixcbiAgICAgICAgbWVzc2FnZTogYFhjb2RlIG9iamVjdCBpZGVudGl0aWVzICcke3ByZXZpb3VzfScgYW5kICcke25vcm1hbGl6ZWR9JyBjb2xsaWRlIGF0ICcke29iamVjdElkfScuYH0pXG4gICAgfVxuICAgIGZ1bGxJZGVudGl0aWVzLnNldChvYmplY3RJZCwgbm9ybWFsaXplZClcbiAgICByZXN1bHQuc2V0KGlkZW50aXR5LCBvYmplY3RJZClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzbWFsbGVzdCBkZXRlcm1pbmlzdGljIFhjb2RlIGFwcGxpY2F0aW9uL3VuaXQvVUktdGVzdCBwcm9qZWN0IG1vZGVsLlxuICogUGxhdGZvcm0gZXhlY3V0aW9uIHJlbWFpbnMgZGVmZXJyZWQgdW50aWwgdGhlIHJlcG9zaXRvcnkgaGFzIGEgcXVhbGlmaWVkIEFwcGxlIGxhbmUuXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIHByZWZsaWdodElvc0FwcGxpY2F0aW9uPn0gcHJlcGFyZWQgLSBQcmVwYXJlZCBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgYXBwbGljYXRpb25BcnRpZmFjdFBhdGhzPn0gcGF0aHMgLSBDb21wbGV0ZSBvd25lZCBwYXRocy5cbiAqIEByZXR1cm5zIHtSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0fSBDYW5vbmljYWwgTEYgcHJvamVjdCBmaWxlIGFuZCBjYXVzYWwgY29uZmlndXJhdGlvbiBzcGFucy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyUGJ4UHJvamVjdChwcmVwYXJlZCwgcGF0aHMpIHtcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IHByZXBhcmVkLmNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcHJvZHVjdCA9IGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWVcbiAgY29uc3QgcmVzb3VyY2VSb290ID0gY29uZmlndXJhdGlvbi5yZXNvdXJjZVJvb3RcbiAgY29uc3Qgc291cmNlUm9vdCA9IGNvbmZpZ3VyYXRpb24uc291cmNlUm9vdFxuICBjb25zdCBpZGVudGl0aWVzID0gW1xuICAgIFwicHJvamVjdFwiLCBcImdyb3VwOm1haW5cIiwgXCJncm91cDpzb3VyY2VzXCIsIFwiZ3JvdXA6Z2VuZXJhdGVkXCIsIFwiZ3JvdXA6YXBwbGljYXRpb25cIiwgXCJncm91cDpjb25maWd1cmF0aW9uXCIsXG4gICAgXCJncm91cDp0ZXN0c1wiLCBcImdyb3VwOnVpdGVzdHNcIiwgXCJncm91cDpwcm9kdWN0c1wiLCBcInRhcmdldDphcHBcIiwgXCJ0YXJnZXQ6dGVzdHNcIiwgXCJ0YXJnZXQ6dWl0ZXN0c1wiLFxuICAgIFwicGhhc2U6YXBwOnNvdXJjZXNcIiwgXCJwaGFzZTphcHA6cmVzb3VyY2VzXCIsIFwicGhhc2U6YXBwOmZyYW1ld29ya3NcIiwgXCJwaGFzZTp0ZXN0czpzb3VyY2VzXCIsIFwicGhhc2U6dGVzdHM6cmVzb3VyY2VzXCIsXG4gICAgXCJwaGFzZTp0ZXN0czpmcmFtZXdvcmtzXCIsIFwicGhhc2U6dWl0ZXN0czpzb3VyY2VzXCIsIFwicGhhc2U6dWl0ZXN0czpyZXNvdXJjZXNcIiwgXCJwaGFzZTp1aXRlc3RzOmZyYW1ld29ya3NcIixcbiAgICBcInByb2R1Y3Q6YXBwXCIsIFwicHJvZHVjdDp0ZXN0c1wiLCBcInByb2R1Y3Q6dWl0ZXN0c1wiLCBcInByb3h5OnRlc3RzOmFwcFwiLCBcInByb3h5OnVpdGVzdHM6YXBwXCIsXG4gICAgXCJkZXBlbmRlbmN5OnRlc3RzOmFwcFwiLCBcImRlcGVuZGVuY3k6dWl0ZXN0czphcHBcIixcbiAgICBcImNvbmZpZy1saXN0OnByb2plY3RcIiwgXCJjb25maWctbGlzdDphcHBcIiwgXCJjb25maWctbGlzdDp0ZXN0c1wiLCBcImNvbmZpZy1saXN0OnVpdGVzdHNcIixcbiAgICBcImNvbmZpZzpwcm9qZWN0OmRlYnVnXCIsIFwiY29uZmlnOnByb2plY3Q6cmVsZWFzZVwiLCBcImNvbmZpZzphcHA6ZGVidWdcIiwgXCJjb25maWc6YXBwOnJlbGVhc2VcIixcbiAgICBcImNvbmZpZzp0ZXN0czpkZWJ1Z1wiLCBcImNvbmZpZzp0ZXN0czpyZWxlYXNlXCIsIFwiY29uZmlnOnVpdGVzdHM6ZGVidWdcIiwgXCJjb25maWc6dWl0ZXN0czpyZWxlYXNlXCIsXG4gICAgYGZpbGU6JHtwYXRocy54Y2NvbmZpZ31gLCBgZmlsZToke3BhdGhzLmluZm9QbGlzdH1gLCBgZmlsZToke3Jlc291cmNlUm9vdH1gLFxuICAgIGBmaWxlOiR7cGF0aHMudW5pdFRlc3R9YCwgYGZpbGU6JHtwYXRocy51aVRlc3R9YCxcbiAgICAuLi5wYXRocy5hcHBTb3VyY2VzLmZsYXRNYXAocGF0aCA9PiBbYGZpbGU6JHtwYXRofWAsIGBidWlsZDphcHA6JHtwYXRofWBdKSxcbiAgICBgYnVpbGQ6YXBwOiR7cmVzb3VyY2VSb290fWAsIGBidWlsZDp0ZXN0czoke3BhdGhzLnVuaXRUZXN0fWAsIGBidWlsZDp1aXRlc3RzOiR7cGF0aHMudWlUZXN0fWBcbiAgXVxuICBjb25zdCBpZHMgPSBhbGxvY2F0ZVhjb2RlT2JqZWN0SWRzKGlkZW50aXRpZXMpXG4gIC8qKlxuICAgKiBMb29rcyB1cCBvbmUgcGxhbm5lZCBYY29kZSBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5IC0gUGxhbm5lZCBpZGVudGl0eS5cbiAgICogQHJldHVybnMge3N0cmluZ30gQWxsb2NhdGVkIG9iamVjdCBJRC5cbiAgICovXG4gIGNvbnN0IGlkID0gaWRlbnRpdHkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gaWRzLmdldChpZGVudGl0eSlcblxuICAgIGlmICghdmFsdWUpIHRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgcGxhbm5lZCBYY29kZSBpZGVudGl0eSAnJHtpZGVudGl0eX0nLmApXG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHtpZGVudGl0eTogc3RyaW5nLCBib2R5OiBDb25maWd1cmF0aW9uTGluZVtdfVtdPn0gKi9cbiAgY29uc3Qgc2VjdGlvbnMgPSBuZXcgTWFwKClcbiAgLyoqXG4gICAqIEFkZHMgYW4gb2JqZWN0IHRvIG9uZSBQQlggc2VjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3Rpb24gLSBQQlggc2VjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5IC0gT2JqZWN0IGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge0NvbmZpZ3VyYXRpb25MaW5lW119IGJvZHkgLSBPYmplY3QgZmllbGRzLlxuICAgKi9cbiAgY29uc3QgYWRkID0gKHNlY3Rpb24sIGlkZW50aXR5LCBib2R5KSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IHNlY3Rpb25zLmdldChzZWN0aW9uKSA/PyBbXVxuXG4gICAgZW50cmllcy5wdXNoKHtib2R5LCBpZGVudGl0eX0pXG4gICAgc2VjdGlvbnMuc2V0KHNlY3Rpb24sIGVudHJpZXMpXG4gIH1cbiAgLyoqXG4gICAqIFJlbmRlcnMgUEJYIGxpc3QgdmFsdWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXMgLSBQQlggbGlzdCB2YWx1ZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJlbmRlcmVkIGxpc3QgYm9keS5cbiAgICovXG4gIGNvbnN0IGxpc3QgPSB2YWx1ZXMgPT4gdmFsdWVzLm1hcCh2YWx1ZSA9PiBgXFx0XFx0XFx0XFx0JHt2YWx1ZX0sYCkuam9pbihcIlxcblwiKVxuICAvKipcbiAgICogUHJvZHVjZXMgYSBzdGFibGUgc29ydGVkIGNvcHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHZhbHVlcyAtIFZhbHVlcyB0byBzb3J0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IFN0YWJsZSBzb3J0ZWQgY29weS5cbiAgICovXG4gIGNvbnN0IHNvcnRlZCA9IHZhbHVlcyA9PiBbLi4udmFsdWVzXS5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdCA8IHJpZ2h0ID8gLTEgOiBsZWZ0ID4gcmlnaHQgPyAxIDogMClcblxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMuYXBwU291cmNlcykge1xuICAgIGFkZChcIlBCWEJ1aWxkRmlsZVwiLCBgYnVpbGQ6YXBwOiR7cGF0aH1gLCBbXCJpc2EgPSBQQlhCdWlsZEZpbGU7XCIsIGBmaWxlUmVmID0gJHtpZChgZmlsZToke3BhdGh9YCl9O2BdKVxuICAgIGFkZChcIlBCWEZpbGVSZWZlcmVuY2VcIiwgYGZpbGU6JHtwYXRofWAsIFtcImlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7XCIsIFwibGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnN3aWZ0O1wiLFxuICAgICAgW1wicGF0aCA9IFwiLCAuLi5wYnhDb25maWd1cmF0aW9uUGF0aChjb25maWd1cmF0aW9uLCBwYXRoKSwgXCI7XCJdLCBcInNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDtcIl0pXG4gIH1cbiAgYWRkKFwiUEJYQnVpbGRGaWxlXCIsIGBidWlsZDphcHA6JHtyZXNvdXJjZVJvb3R9YCwgW1wiaXNhID0gUEJYQnVpbGRGaWxlO1wiLCBgZmlsZVJlZiA9ICR7aWQoYGZpbGU6JHtyZXNvdXJjZVJvb3R9YCl9O2BdKVxuICBhZGQoXCJQQlhCdWlsZEZpbGVcIiwgYGJ1aWxkOnRlc3RzOiR7cGF0aHMudW5pdFRlc3R9YCwgW1wiaXNhID0gUEJYQnVpbGRGaWxlO1wiLCBgZmlsZVJlZiA9ICR7aWQoYGZpbGU6JHtwYXRocy51bml0VGVzdH1gKX07YF0pXG4gIGFkZChcIlBCWEJ1aWxkRmlsZVwiLCBgYnVpbGQ6dWl0ZXN0czoke3BhdGhzLnVpVGVzdH1gLCBbXCJpc2EgPSBQQlhCdWlsZEZpbGU7XCIsIGBmaWxlUmVmID0gJHtpZChgZmlsZToke3BhdGhzLnVpVGVzdH1gKX07YF0pXG4gIGFkZChcIlBCWENvbnRhaW5lckl0ZW1Qcm94eVwiLCBcInByb3h5OnRlc3RzOmFwcFwiLCBbXCJpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7XCIsIGBjb250YWluZXJQb3J0YWwgPSAke2lkKFwicHJvamVjdFwiKX07YCxcbiAgICBcInByb3h5VHlwZSA9IDE7XCIsIGByZW1vdGVHbG9iYWxJRFN0cmluZyA9ICR7aWQoXCJ0YXJnZXQ6YXBwXCIpfTtgLFxuICAgIFtcInJlbW90ZUluZm8gPSBcXFwiXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIHByb2R1Y3QpLCBcIlxcXCI7XCJdXSlcbiAgYWRkKFwiUEJYQ29udGFpbmVySXRlbVByb3h5XCIsIFwicHJveHk6dWl0ZXN0czphcHBcIiwgW1wiaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5O1wiLCBgY29udGFpbmVyUG9ydGFsID0gJHtpZChcInByb2plY3RcIil9O2AsXG4gICAgXCJwcm94eVR5cGUgPSAxO1wiLCBgcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAke2lkKFwidGFyZ2V0OmFwcFwiKX07YCxcbiAgICBbXCJyZW1vdGVJbmZvID0gXFxcIlwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgXCJcXFwiO1wiXV0pXG4gIGFkZChcIlBCWEZpbGVSZWZlcmVuY2VcIiwgYGZpbGU6JHtwYXRocy54Y2NvbmZpZ31gLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZztcIixcbiAgICBgcGF0aCA9ICR7cGJ4U3RyaW5nKHBhdGhzLnhjY29uZmlnKX07YCwgXCJzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7XCJdKVxuICBhZGQoXCJQQlhGaWxlUmVmZXJlbmNlXCIsIGBmaWxlOiR7cGF0aHMuaW5mb1BsaXN0fWAsIFtcImlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7XCIsIFwibGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDtcIixcbiAgICBgcGF0aCA9ICR7cGJ4U3RyaW5nKHBhdGhzLmluZm9QbGlzdCl9O2AsIFwic291cmNlVHJlZSA9IFNPVVJDRV9ST09UO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBgZmlsZToke3Jlc291cmNlUm9vdH1gLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImxhc3RLbm93bkZpbGVUeXBlID0gZm9sZGVyLmFzc2V0Y2F0YWxvZztcIixcbiAgICBbXCJwYXRoID0gXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInJlc291cmNlUm9vdFwiLCByZXNvdXJjZVJvb3QpLCBcIjtcIl0sIFwic291cmNlVHJlZSA9IFNPVVJDRV9ST09UO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBgZmlsZToke3BhdGhzLnVuaXRUZXN0fWAsIFtcImlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7XCIsIFwibGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLnN3aWZ0O1wiLFxuICAgIFtcInBhdGggPSBcIiwgLi4ucGJ4Q29uZmlndXJhdGlvblBhdGgoY29uZmlndXJhdGlvbiwgcGF0aHMudW5pdFRlc3QpLCBcIjtcIl0sIFwic291cmNlVHJlZSA9IFNPVVJDRV9ST09UO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBgZmlsZToke3BhdGhzLnVpVGVzdH1gLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5zd2lmdDtcIixcbiAgICBbXCJwYXRoID0gXCIsIC4uLnBieENvbmZpZ3VyYXRpb25QYXRoKGNvbmZpZ3VyYXRpb24sIHBhdGhzLnVpVGVzdCksIFwiO1wiXSwgXCJzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7XCJdKVxuICBhZGQoXCJQQlhGaWxlUmVmZXJlbmNlXCIsIFwicHJvZHVjdDphcHBcIiwgW1wiaXNhID0gUEJYRmlsZVJlZmVyZW5jZTtcIiwgXCJleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5hcHBsaWNhdGlvbjtcIiwgXCJpbmNsdWRlSW5JbmRleCA9IDA7XCIsXG4gICAgW1wicGF0aCA9IFxcXCJcIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgcHJvZHVjdCksIFwiLmFwcFxcXCI7XCJdLCBcInNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7XCJdKVxuICBhZGQoXCJQQlhGaWxlUmVmZXJlbmNlXCIsIFwicHJvZHVjdDp0ZXN0c1wiLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxlO1wiLCBcImluY2x1ZGVJbkluZGV4ID0gMDtcIixcbiAgICBbXCJwYXRoID0gXFxcIlwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgXCJUZXN0cy54Y3Rlc3RcXFwiO1wiXSwgXCJzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBcInByb2R1Y3Q6dWl0ZXN0c1wiLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmNmYnVuZGxlO1wiLCBcImluY2x1ZGVJbkluZGV4ID0gMDtcIixcbiAgICBbXCJwYXRoID0gXFxcIlwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgXCJVSVRlc3RzLnhjdGVzdFxcXCI7XCJdLCBcInNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7XCJdKVxuXG4gIGNvbnN0IGdlbmVyYXRlZFJlZnMgPSBzb3J0ZWQocGF0aHMuYXBwU291cmNlcy5maWx0ZXIocGF0aCA9PiBwYXRoLnN0YXJ0c1dpdGgoYCR7c291cmNlUm9vdH0vR2VuZXJhdGVkL2ApKSkubWFwKHBhdGggPT4gaWQoYGZpbGU6JHtwYXRofWApKVxuICBjb25zdCBhcHBsaWNhdGlvblJlZnMgPSBzb3J0ZWQocGF0aHMuYXBwU291cmNlcy5maWx0ZXIocGF0aCA9PiBwYXRoLnN0YXJ0c1dpdGgoYCR7c291cmNlUm9vdH0vQXBwbGljYXRpb24vYCkpKS5tYXAocGF0aCA9PiBpZChgZmlsZToke3BhdGh9YCkpXG5cbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDptYWluXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KFtcbiAgICBpZChcImdyb3VwOmNvbmZpZ3VyYXRpb25cIiksIGlkKFwiZ3JvdXA6c291cmNlc1wiKSwgaWQoYGZpbGU6JHtyZXNvdXJjZVJvb3R9YCksIGlkKFwiZ3JvdXA6dGVzdHNcIiksIGlkKFwiZ3JvdXA6dWl0ZXN0c1wiKSxcbiAgICBpZChcImdyb3VwOnByb2R1Y3RzXCIpXG4gIF0pfVxcblxcdFxcdFxcdCk7YCwgXCJzb3VyY2VUcmVlID0gXFxcIjxncm91cD5cXFwiO1wiXSlcbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDpzb3VyY2VzXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KFtpZChcImdyb3VwOmFwcGxpY2F0aW9uXCIpLCBpZChcImdyb3VwOmdlbmVyYXRlZFwiKV0pfVxcblxcdFxcdFxcdCk7YCxcbiAgICBbXCJuYW1lID0gXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInNvdXJjZVJvb3RcIiwgc291cmNlUm9vdCksIFwiO1wiXSwgXCJzb3VyY2VUcmVlID0gXFxcIjxncm91cD5cXFwiO1wiXSlcbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDpnZW5lcmF0ZWRcIiwgW1wiaXNhID0gUEJYR3JvdXA7XCIsIGBjaGlsZHJlbiA9IChcXG4ke2xpc3QoZ2VuZXJhdGVkUmVmcyl9XFxuXFx0XFx0XFx0KTtgLFxuICAgIFwibmFtZSA9IEdlbmVyYXRlZDtcIiwgXCJzb3VyY2VUcmVlID0gXFxcIjxncm91cD5cXFwiO1wiXSlcbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDphcHBsaWNhdGlvblwiLCBbXCJpc2EgPSBQQlhHcm91cDtcIiwgYGNoaWxkcmVuID0gKFxcbiR7bGlzdChhcHBsaWNhdGlvblJlZnMpfVxcblxcdFxcdFxcdCk7YCxcbiAgICBcIm5hbWUgPSBBcHBsaWNhdGlvbjtcIiwgXCJzb3VyY2VUcmVlID0gXFxcIjxncm91cD5cXFwiO1wiXSlcbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDpjb25maWd1cmF0aW9uXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KFtpZChgZmlsZToke3BhdGhzLnhjY29uZmlnfWApLCBpZChgZmlsZToke3BhdGhzLmluZm9QbGlzdH1gKV0pfVxcblxcdFxcdFxcdCk7YCxcbiAgICBcIm5hbWUgPSBDb25maWd1cmF0aW9uO1wiLCBcInNvdXJjZVRyZWUgPSBcXFwiPGdyb3VwPlxcXCI7XCJdKVxuICBhZGQoXCJQQlhHcm91cFwiLCBcImdyb3VwOnRlc3RzXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KFtpZChgZmlsZToke3BhdGhzLnVuaXRUZXN0fWApXSl9XFxuXFx0XFx0XFx0KTtgLFxuICAgIFwibmFtZSA9IFRlc3RzO1wiLCBcInNvdXJjZVRyZWUgPSBcXFwiPGdyb3VwPlxcXCI7XCJdKVxuICBhZGQoXCJQQlhHcm91cFwiLCBcImdyb3VwOnVpdGVzdHNcIiwgW1wiaXNhID0gUEJYR3JvdXA7XCIsIGBjaGlsZHJlbiA9IChcXG4ke2xpc3QoW2lkKGBmaWxlOiR7cGF0aHMudWlUZXN0fWApXSl9XFxuXFx0XFx0XFx0KTtgLFxuICAgIFwibmFtZSA9IFVJVGVzdHM7XCIsIFwic291cmNlVHJlZSA9IFxcXCI8Z3JvdXA+XFxcIjtcIl0pXG4gIGFkZChcIlBCWEdyb3VwXCIsIFwiZ3JvdXA6cHJvZHVjdHNcIiwgW1wiaXNhID0gUEJYR3JvdXA7XCIsIGBjaGlsZHJlbiA9IChcXG4ke2xpc3QoW2lkKFwicHJvZHVjdDphcHBcIiksIGlkKFwicHJvZHVjdDp0ZXN0c1wiKSwgaWQoXCJwcm9kdWN0OnVpdGVzdHNcIildKX1cXG5cXHRcXHRcXHQpO2AsXG4gICAgXCJuYW1lID0gUHJvZHVjdHM7XCIsIFwic291cmNlVHJlZSA9IFxcXCI8Z3JvdXA+XFxcIjtcIl0pXG5cbiAgYWRkTmF0aXZlVGFyZ2V0KGFkZCwgaWQsIGNvbmZpZ3VyYXRpb24sIFwidGFyZ2V0OmFwcFwiLCBcIlwiLCBcImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYXBwbGljYXRpb25cIiwgXCJwcm9kdWN0OmFwcFwiLFxuICAgIFwiY29uZmlnLWxpc3Q6YXBwXCIsIFtcInBoYXNlOmFwcDpzb3VyY2VzXCIsIFwicGhhc2U6YXBwOmZyYW1ld29ya3NcIiwgXCJwaGFzZTphcHA6cmVzb3VyY2VzXCJdLCBbXSlcbiAgYWRkTmF0aXZlVGFyZ2V0KGFkZCwgaWQsIGNvbmZpZ3VyYXRpb24sIFwidGFyZ2V0OnRlc3RzXCIsIFwiVGVzdHNcIiwgXCJjb20uYXBwbGUucHJvZHVjdC10eXBlLmJ1bmRsZS51bml0LXRlc3RcIiwgXCJwcm9kdWN0OnRlc3RzXCIsXG4gICAgXCJjb25maWctbGlzdDp0ZXN0c1wiLCBbXCJwaGFzZTp0ZXN0czpzb3VyY2VzXCIsIFwicGhhc2U6dGVzdHM6ZnJhbWV3b3Jrc1wiLCBcInBoYXNlOnRlc3RzOnJlc291cmNlc1wiXSwgW1wiZGVwZW5kZW5jeTp0ZXN0czphcHBcIl0pXG4gIGFkZE5hdGl2ZVRhcmdldChhZGQsIGlkLCBjb25maWd1cmF0aW9uLCBcInRhcmdldDp1aXRlc3RzXCIsIFwiVUlUZXN0c1wiLCBcImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUuYnVuZGxlLnVpLXRlc3RpbmdcIiwgXCJwcm9kdWN0OnVpdGVzdHNcIixcbiAgICBcImNvbmZpZy1saXN0OnVpdGVzdHNcIiwgW1wicGhhc2U6dWl0ZXN0czpzb3VyY2VzXCIsIFwicGhhc2U6dWl0ZXN0czpmcmFtZXdvcmtzXCIsIFwicGhhc2U6dWl0ZXN0czpyZXNvdXJjZXNcIl0sIFtcImRlcGVuZGVuY3k6dWl0ZXN0czphcHBcIl0pXG4gIGFkZChcIlBCWFByb2plY3RcIiwgXCJwcm9qZWN0XCIsIFtcImlzYSA9IFBCWFByb2plY3Q7XCIsIFwiYXR0cmlidXRlcyA9IHsgQnVpbGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVTOyB9O1wiLFxuICAgIGBidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gJHtpZChcImNvbmZpZy1saXN0OnByb2plY3RcIil9O2AsIFwiZGV2ZWxvcG1lbnRSZWdpb24gPSBlbjtcIiwgXCJoYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDtcIixcbiAgICBcImtub3duUmVnaW9ucyA9ICggZW4sIEJhc2UsICk7XCIsIGBtYWluR3JvdXAgPSAke2lkKFwiZ3JvdXA6bWFpblwiKX07YCwgYHByb2R1Y3RSZWZHcm91cCA9ICR7aWQoXCJncm91cDpwcm9kdWN0c1wiKX07YCxcbiAgICBcInByb2plY3REaXJQYXRoID0gXFxcIlxcXCI7XCIsIFwicHJvamVjdFJvb3QgPSBcXFwiXFxcIjtcIixcbiAgICBgdGFyZ2V0cyA9IChcXG4ke2xpc3QoW2lkKFwidGFyZ2V0OmFwcFwiKSwgaWQoXCJ0YXJnZXQ6dGVzdHNcIiksIGlkKFwidGFyZ2V0OnVpdGVzdHNcIildKX1cXG5cXHRcXHRcXHQpO2BdKVxuXG4gIGFkZEJ1aWxkUGhhc2UoYWRkLCBpZCwgXCJQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZVwiLCBcInBoYXNlOmFwcDpmcmFtZXdvcmtzXCIsIFtdKVxuICBhZGRCdWlsZFBoYXNlKGFkZCwgaWQsIFwiUEJYUmVzb3VyY2VzQnVpbGRQaGFzZVwiLCBcInBoYXNlOmFwcDpyZXNvdXJjZXNcIiwgW2BidWlsZDphcHA6JHtyZXNvdXJjZVJvb3R9YF0pXG4gIGFkZEJ1aWxkUGhhc2UoYWRkLCBpZCwgXCJQQlhTb3VyY2VzQnVpbGRQaGFzZVwiLCBcInBoYXNlOmFwcDpzb3VyY2VzXCIsIHNvcnRlZChwYXRocy5hcHBTb3VyY2VzKS5tYXAocGF0aCA9PiBgYnVpbGQ6YXBwOiR7cGF0aH1gKSlcbiAgZm9yIChjb25zdCB0YXJnZXQgb2YgW1widGVzdHNcIiwgXCJ1aXRlc3RzXCJdKSB7XG4gICAgYWRkQnVpbGRQaGFzZShhZGQsIGlkLCBcIlBCWEZyYW1ld29ya3NCdWlsZFBoYXNlXCIsIGBwaGFzZToke3RhcmdldH06ZnJhbWV3b3Jrc2AsIFtdKVxuICAgIGFkZEJ1aWxkUGhhc2UoYWRkLCBpZCwgXCJQQlhSZXNvdXJjZXNCdWlsZFBoYXNlXCIsIGBwaGFzZToke3RhcmdldH06cmVzb3VyY2VzYCwgW10pXG4gIH1cbiAgYWRkQnVpbGRQaGFzZShhZGQsIGlkLCBcIlBCWFNvdXJjZXNCdWlsZFBoYXNlXCIsIFwicGhhc2U6dGVzdHM6c291cmNlc1wiLCBbYGJ1aWxkOnRlc3RzOiR7cGF0aHMudW5pdFRlc3R9YF0pXG4gIGFkZEJ1aWxkUGhhc2UoYWRkLCBpZCwgXCJQQlhTb3VyY2VzQnVpbGRQaGFzZVwiLCBcInBoYXNlOnVpdGVzdHM6c291cmNlc1wiLCBbYGJ1aWxkOnVpdGVzdHM6JHtwYXRocy51aVRlc3R9YF0pXG4gIGFkZChcIlBCWFRhcmdldERlcGVuZGVuY3lcIiwgXCJkZXBlbmRlbmN5OnRlc3RzOmFwcFwiLCBbXCJpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5O1wiLCBgdGFyZ2V0ID0gJHtpZChcInRhcmdldDphcHBcIil9O2AsXG4gICAgYHRhcmdldFByb3h5ID0gJHtpZChcInByb3h5OnRlc3RzOmFwcFwiKX07YF0pXG4gIGFkZChcIlBCWFRhcmdldERlcGVuZGVuY3lcIiwgXCJkZXBlbmRlbmN5OnVpdGVzdHM6YXBwXCIsIFtcImlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7XCIsIGB0YXJnZXQgPSAke2lkKFwidGFyZ2V0OmFwcFwiKX07YCxcbiAgICBgdGFyZ2V0UHJveHkgPSAke2lkKFwicHJveHk6dWl0ZXN0czphcHBcIil9O2BdKVxuXG4gIGZvciAoY29uc3Qgb3duZXIgb2YgW1wicHJvamVjdFwiLCBcImFwcFwiLCBcInRlc3RzXCIsIFwidWl0ZXN0c1wiXSkge1xuICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBbXCJkZWJ1Z1wiLCBcInJlbGVhc2VcIl0pIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gYnVpbGRTZXR0aW5ncyhvd25lciwgdmFyaWFudCwgY29uZmlndXJhdGlvbiwgcGF0aHMpXG5cbiAgICAgIGFkZChcIlhDQnVpbGRDb25maWd1cmF0aW9uXCIsIGBjb25maWc6JHtvd25lcn06JHt2YXJpYW50fWAsIFtcImlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uO1wiLFxuICAgICAgICBgYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAke2lkKGBmaWxlOiR7cGF0aHMueGNjb25maWd9YCl9O2AsIFtcImJ1aWxkU2V0dGluZ3MgPSB7XFxuXCIsIC4uLnNldHRpbmdzLCBcIlxcblxcdFxcdFxcdH07XCJdLFxuICAgICAgICBgbmFtZSA9ICR7dmFyaWFudCA9PSBcImRlYnVnXCIgPyBcIkRlYnVnXCIgOiBcIlJlbGVhc2VcIn07YF0pXG4gICAgfVxuICAgIGFkZChcIlhDQ29uZmlndXJhdGlvbkxpc3RcIiwgYGNvbmZpZy1saXN0OiR7b3duZXJ9YCwgW1wiaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDtcIixcbiAgICAgIGBidWlsZENvbmZpZ3VyYXRpb25zID0gKFxcbiR7bGlzdChbaWQoYGNvbmZpZzoke293bmVyfTpkZWJ1Z2ApLCBpZChgY29uZmlnOiR7b3duZXJ9OnJlbGVhc2VgKV0pfVxcblxcdFxcdFxcdCk7YCxcbiAgICAgIFwiZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwO1wiLCBcImRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFJlbGVhc2U7XCJdKVxuICB9XG5cbiAgY29uc3Qgb3JkZXIgPSBbXCJQQlhCdWlsZEZpbGVcIiwgXCJQQlhDb250YWluZXJJdGVtUHJveHlcIiwgXCJQQlhGaWxlUmVmZXJlbmNlXCIsIFwiUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2VcIiwgXCJQQlhHcm91cFwiLFxuICAgIFwiUEJYTmF0aXZlVGFyZ2V0XCIsIFwiUEJYUHJvamVjdFwiLCBcIlBCWFJlc291cmNlc0J1aWxkUGhhc2VcIiwgXCJQQlhTb3VyY2VzQnVpbGRQaGFzZVwiLCBcIlBCWFRhcmdldERlcGVuZGVuY3lcIixcbiAgICBcIlhDQnVpbGRDb25maWd1cmF0aW9uXCIsIFwiWENDb25maWd1cmF0aW9uTGlzdFwiXVxuICBjb25zdCB3cml0ZXIgPSBuZXcgQ29uZmlndXJhdGlvblRleHRXcml0ZXIoKVxuXG4gIHdyaXRlci5hcHBlbmQoXCIvLyAhJCpVVEY4KiQhXFxue1xcblxcdGFyY2hpdmVWZXJzaW9uID0gMTtcXG5cXHRjbGFzc2VzID0ge307XFxuXFx0b2JqZWN0VmVyc2lvbiA9IDU2O1xcblxcdG9iamVjdHMgPSB7XFxuXCIpXG5cbiAgZm9yIChjb25zdCBzZWN0aW9uIG9mIG9yZGVyKSB7XG4gICAgY29uc3QgZW50cmllcyA9IChzZWN0aW9ucy5nZXQoc2VjdGlvbikgPz8gW10pLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmlkZW50aXR5IDwgcmlnaHQuaWRlbnRpdHkgPyAtMSA6IDEpXG5cbiAgICB3cml0ZXIuYXBwZW5kKGBcXG4vKiBCZWdpbiAke3NlY3Rpb259IHNlY3Rpb24gKi9cXG5gKVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgd3JpdGVyLmFwcGVuZChgXFx0XFx0JHtpZChlbnRyeS5pZGVudGl0eSl9ID0ge1xcbmApXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZW50cnkuYm9keSkge1xuICAgICAgICB3cml0ZXIuYXBwZW5kKFwiXFx0XFx0XFx0XCIpXG4gICAgICAgIHdyaXRlci5hcHBlbmQobGluZSlcbiAgICAgICAgd3JpdGVyLmFwcGVuZChcIlxcblwiKVxuICAgICAgfVxuICAgICAgd3JpdGVyLmFwcGVuZChcIlxcdFxcdH07XFxuXCIpXG4gICAgfVxuICAgIHdyaXRlci5hcHBlbmQoYC8qIEVuZCAke3NlY3Rpb259IHNlY3Rpb24gKi9cXG5gKVxuICB9XG4gIHdyaXRlci5hcHBlbmQoYFxcdH07XFxuXFx0cm9vdE9iamVjdCA9ICR7aWQoXCJwcm9qZWN0XCIpfTtcXG59XFxuYClcblxuICByZXR1cm4gd3JpdGVyLmZpbmlzaCgpXG59XG5cbi8qKlxuICogQWRkcyBvbmUgbmF0aXZlIHRhcmdldCBvYmplY3QgdG8gdGhlIHByb2plY3QgbW9kZWwuXG4gKiBAcGFyYW0geyhzZWN0aW9uOiBzdHJpbmcsIGlkZW50aXR5OiBzdHJpbmcsIGJvZHk6IENvbmZpZ3VyYXRpb25MaW5lW10pID0+IHZvaWR9IGFkZCAtIE9iamVjdCBzaW5rLlxuICogQHBhcmFtIHsoaWRlbnRpdHk6IHN0cmluZykgPT4gc3RyaW5nfSBpZCAtIElEIGxvb2t1cC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9ufSBjb25maWd1cmF0aW9uIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lU3VmZml4IC0gVGFyZ2V0IHN1ZmZpeCBhZnRlciB0aGUgcHJvZHVjdCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb2R1Y3RUeXBlIC0gUHJvZHVjdCB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb2R1Y3RSZWZlcmVuY2UgLSBQcm9kdWN0IHJlZmVyZW5jZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWd1cmF0aW9uTGlzdCAtIENvbmZpZ3VyYXRpb24gbGlzdCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBoYXNlcyAtIFBoYXNlIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMgLSBEZXBlbmRlbmN5IGlkZW50aXRpZXMuXG4gKi9cbmZ1bmN0aW9uIGFkZE5hdGl2ZVRhcmdldChhZGQsIGlkLCBjb25maWd1cmF0aW9uLCBpZGVudGl0eSwgbmFtZVN1ZmZpeCwgcHJvZHVjdFR5cGUsIHByb2R1Y3RSZWZlcmVuY2UsIGNvbmZpZ3VyYXRpb25MaXN0LFxuICBwaGFzZXMsIGRlcGVuZGVuY2llcykge1xuICAvKipcbiAgICogUmVuZGVycyB0YXJnZXQgaWRlbnRpdHkgdmFsdWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXMgLSBUYXJnZXQgaWRlbnRpdHkgdmFsdWVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZW5kZXJlZCB0YXJnZXQgbGlzdC5cbiAgICovXG4gIGNvbnN0IGxpbmVzID0gdmFsdWVzID0+IHZhbHVlcy5tYXAodmFsdWUgPT4gYFxcdFxcdFxcdFxcdCR7aWQodmFsdWUpfSxgKS5qb2luKFwiXFxuXCIpXG4gIGNvbnN0IG5hbWUgPSBbXCJcXFwiXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpLCBgJHtuYW1lU3VmZml4fVwiYF1cblxuICBhZGQoXCJQQlhOYXRpdmVUYXJnZXRcIiwgaWRlbnRpdHksIFtcImlzYSA9IFBCWE5hdGl2ZVRhcmdldDtcIiwgYGJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAke2lkKGNvbmZpZ3VyYXRpb25MaXN0KX07YCxcbiAgICBgYnVpbGRQaGFzZXMgPSAoXFxuJHtsaW5lcyhwaGFzZXMpfVxcblxcdFxcdFxcdCk7YCwgXCJidWlsZFJ1bGVzID0gKCk7XCIsIGBkZXBlbmRlbmNpZXMgPSAoXFxuJHtsaW5lcyhkZXBlbmRlbmNpZXMpfVxcblxcdFxcdFxcdCk7YCxcbiAgICBbXCJuYW1lID0gXCIsIC4uLm5hbWUsIFwiO1wiXSwgW1wicHJvZHVjdE5hbWUgPSBcIiwgLi4ubmFtZSwgXCI7XCJdLCBgcHJvZHVjdFJlZmVyZW5jZSA9ICR7aWQocHJvZHVjdFJlZmVyZW5jZSl9O2AsXG4gICAgYHByb2R1Y3RUeXBlID0gJHtwYnhTdHJpbmcocHJvZHVjdFR5cGUpfTtgXSlcbn1cblxuLyoqXG4gKiBBZGRzIG9uZSBidWlsZCBwaGFzZSB0byB0aGUgcHJvamVjdCBtb2RlbC5cbiAqIEBwYXJhbSB7KHNlY3Rpb246IHN0cmluZywgaWRlbnRpdHk6IHN0cmluZywgYm9keTogQ29uZmlndXJhdGlvbkxpbmVbXSkgPT4gdm9pZH0gYWRkIC0gT2JqZWN0IHNpbmsuXG4gKiBAcGFyYW0geyhpZGVudGl0eTogc3RyaW5nKSA9PiBzdHJpbmd9IGlkIC0gSUQgbG9va3VwLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlY3Rpb24gLSBQaGFzZSBJU0EuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHkgLSBQaGFzZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IGZpbGVzIC0gQnVpbGQtZmlsZSBpZGVudGl0aWVzLlxuICovXG5mdW5jdGlvbiBhZGRCdWlsZFBoYXNlKGFkZCwgaWQsIHNlY3Rpb24sIGlkZW50aXR5LCBmaWxlcykge1xuICBjb25zdCBsaW5lcyA9IGZpbGVzLm1hcChmaWxlID0+IGBcXHRcXHRcXHRcXHQke2lkKGZpbGUpfSxgKS5qb2luKFwiXFxuXCIpXG5cbiAgYWRkKHNlY3Rpb24sIGlkZW50aXR5LCBbYGlzYSA9ICR7c2VjdGlvbn07YCwgXCJidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3O1wiLCBgZmlsZXMgPSAoXFxuJHtsaW5lc31cXG5cXHRcXHRcXHQpO2AsXG4gICAgXCJydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDtcIl0pXG59XG5cbi8qKlxuICogUmVuZGVycyBzb3J0ZWQgUEJYIGJ1aWxkIHNldHRpbmdzIGZvciBvbmUgb3duZXIgYW5kIHZhcmlhbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3duZXIgLSBDb25maWd1cmF0aW9uIG93bmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhcmlhbnQgLSBEZWJ1ZyBvciByZWxlYXNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb24gLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBhcHBsaWNhdGlvbkFydGlmYWN0UGF0aHM+fSBwYXRocyAtIFBsYW5uZWQgcGF0aHMuXG4gKiBAcmV0dXJucyB7Q29uZmlndXJhdGlvblRleHRQYXJ0W119IFNvcnRlZCBQQlggYnVpbGQgc2V0dGluZ3MuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2V0dGluZ3Mob3duZXIsIHZhcmlhbnQsIGNvbmZpZ3VyYXRpb24sIHBhdGhzKSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgQ29uZmlndXJhdGlvblRleHRQYXJ0IHwgQ29uZmlndXJhdGlvblRleHRQYXJ0W10+fSAqL1xuICBjb25zdCB2YWx1ZXMgPSBvd25lciA9PSBcInByb2plY3RcIiA/IHtcbiAgICBDT0RFX1NJR05JTkdfQUxMT1dFRDogXCJOT1wiLFxuICAgIENPREVfU0lHTklOR19SRVFVSVJFRDogXCJOT1wiXG4gIH0gOiBvd25lciA9PSBcImFwcFwiID8ge1xuICAgIEdFTkVSQVRFX0lORk9QTElTVF9GSUxFOiBcIk5PXCIsXG4gICAgSU5GT1BMSVNUX0ZJTEU6IHBieFN0cmluZyhwYXRocy5pbmZvUGxpc3QpLFxuICAgIElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUOiBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJkZXBsb3ltZW50VGFyZ2V0XCIsIGNvbmZpZ3VyYXRpb24uZGVwbG95bWVudFRhcmdldCksXG4gICAgUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogY29uZmlndXJhdGlvbkZyYWdtZW50KFwiYnVuZGxlSWRlbnRpZmllclwiLCBjb25maWd1cmF0aW9uLmJ1bmRsZUlkZW50aWZpZXIpLFxuICAgIFBST0RVQ1RfTU9EVUxFX05BTUU6IGNvbmZpZ3VyYXRpb25GcmFnbWVudChcIm1vZHVsZU5hbWVcIiwgY29uZmlndXJhdGlvbi5tb2R1bGVOYW1lKSxcbiAgICBQUk9EVUNUX05BTUU6IGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpLFxuICAgIFNES1JPT1Q6IFwiaXBob25lb3NcIixcbiAgICBTVVBQT1JURURfUExBVEZPUk1TOiBwYnhTdHJpbmcoXCJpcGhvbmVvcyBpcGhvbmVzaW11bGF0b3JcIiksXG4gICAgVEFSR0VURURfREVWSUNFX0ZBTUlMWTogXCIxXCJcbiAgfSA6IG93bmVyID09IFwidGVzdHNcIiA/IHtcbiAgICBCVU5ETEVfTE9BREVSOiBwYnhTdHJpbmcoXCIkKFRFU1RfSE9TVClcIiksXG4gICAgUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogW2NvbmZpZ3VyYXRpb25GcmFnbWVudChcImJ1bmRsZUlkZW50aWZpZXJcIiwgY29uZmlndXJhdGlvbi5idW5kbGVJZGVudGlmaWVyKSwgXCIudGVzdHNcIl0sXG4gICAgUFJPRFVDVF9NT0RVTEVfTkFNRTogW2NvbmZpZ3VyYXRpb25GcmFnbWVudChcIm1vZHVsZU5hbWVcIiwgY29uZmlndXJhdGlvbi5tb2R1bGVOYW1lKSwgXCJUZXN0c1wiXSxcbiAgICBQUk9EVUNUX05BTUU6IFwiJChUQVJHRVRfTkFNRSlcIixcbiAgICBURVNUX0hPU1Q6IFtcIlxcXCIkKEJVSUxUX1BST0RVQ1RTX0RJUikvXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpLFxuICAgICAgXCIuYXBwL1wiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSwgXCJcXFwiXCJdXG4gIH0gOiB7XG4gICAgUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUjogW2NvbmZpZ3VyYXRpb25GcmFnbWVudChcImJ1bmRsZUlkZW50aWZpZXJcIiwgY29uZmlndXJhdGlvbi5idW5kbGVJZGVudGlmaWVyKSwgXCIudWl0ZXN0c1wiXSxcbiAgICBQUk9EVUNUX01PRFVMRV9OQU1FOiBbY29uZmlndXJhdGlvbkZyYWdtZW50KFwibW9kdWxlTmFtZVwiLCBjb25maWd1cmF0aW9uLm1vZHVsZU5hbWUpLCBcIlVJVGVzdHNcIl0sXG4gICAgUFJPRFVDVF9OQU1FOiBcIiQoVEFSR0VUX05BTUUpXCIsXG4gICAgVEVTVF9UQVJHRVRfTkFNRTogY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZSlcbiAgfVxuXG4gIGlmICh2YXJpYW50ID09IFwicmVsZWFzZVwiKSB2YWx1ZXMuU1dJRlRfT1BUSU1JWkFUSU9OX0xFVkVMID0gcGJ4U3RyaW5nKFwiLU9cIilcblxuICAvKiogQHR5cGUge0NvbmZpZ3VyYXRpb25UZXh0UGFydFtdfSAqL1xuICBjb25zdCBvdXRwdXQgPSBbXVxuXG4gIGZvciAoY29uc3QgW2luZGV4LCBrZXldIG9mIE9iamVjdC5rZXlzKHZhbHVlcykuc29ydCgpLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2tleV1cblxuICAgIGlmIChpbmRleCA+IDApIG91dHB1dC5wdXNoKFwiXFxuXCIpXG4gICAgb3V0cHV0LnB1c2goYFxcdFxcdFxcdFxcdCR7a2V5fSA9IGApXG4gICAgb3V0cHV0LnB1c2goLi4uKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKSlcbiAgICBvdXRwdXQucHVzaChcIjtcIilcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBRdW90ZXMgb25lIFBCWCBzY2FsYXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBQQlggc2NhbGFyLlxuICogQHJldHVybnMge3N0cmluZ30gU2FmZWx5IHF1b3RlZCBQQlggc2NhbGFyLlxuICovXG5mdW5jdGlvbiBwYnhTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKVxufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBxdW90ZWQgUEJYIHBhdGggd2hpbGUgcmV0YWluaW5nIGNhdXNhbGl0eSBmb3IgaXRzIGNvbmZpZ3VyZWQgY29tcG9uZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb24gLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQbGFubmVkIGFydGlmYWN0IHBhdGguXG4gKiBAcmV0dXJucyB7Q29uZmlndXJhdGlvblRleHRQYXJ0W119IFF1b3RlZCBQQlggcGF0aCBmcmFnbWVudHMuXG4gKi9cbmZ1bmN0aW9uIHBieENvbmZpZ3VyYXRpb25QYXRoKGNvbmZpZ3VyYXRpb24sIHBhdGgpIHtcbiAgaWYgKHBhdGguc3RhcnRzV2l0aChgJHtjb25maWd1cmF0aW9uLnNvdXJjZVJvb3R9L2ApKSB7XG4gICAgcmV0dXJuIFtcIlxcXCJcIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwic291cmNlUm9vdFwiLCBjb25maWd1cmF0aW9uLnNvdXJjZVJvb3QpLCBwYXRoLnNsaWNlKGNvbmZpZ3VyYXRpb24uc291cmNlUm9vdC5sZW5ndGgpLCBcIlxcXCJcIl1cbiAgfVxuICBpZiAocGF0aCA9PSBjb25maWd1cmF0aW9uLnJlc291cmNlUm9vdCkge1xuICAgIHJldHVybiBbXCJcXFwiXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInJlc291cmNlUm9vdFwiLCBjb25maWd1cmF0aW9uLnJlc291cmNlUm9vdCksIFwiXFxcIlwiXVxuICB9XG4gIGlmIChwYXRoID09IGBUZXN0cy8ke2NvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWV9VGVzdHMuc3dpZnRgKSB7XG4gICAgcmV0dXJuIFtcIlxcXCJUZXN0cy9cIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZSksIFwiVGVzdHMuc3dpZnRcXFwiXCJdXG4gIH1cbiAgaWYgKHBhdGggPT0gYFVJVGVzdHMvJHtjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lfVVJVGVzdHMuc3dpZnRgKSB7XG4gICAgcmV0dXJuIFtcIlxcXCJVSVRlc3RzL1wiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSwgXCJVSVRlc3RzLnN3aWZ0XFxcIlwiXVxuICB9XG5cbiAgcmV0dXJuIFtwYnhTdHJpbmcocGF0aCldXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc2hhcmVkIHNjaGVtZSBYTUwuXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIHByZWZsaWdodElvc0FwcGxpY2F0aW9uPn0gcHJlcGFyZWQgLSBQcmVwYXJlZCBhcHBsaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0fSBTaGFyZWQgc2NoZW1lIFhNTCBhbmQgY2F1c2FsIGNvbmZpZ3VyYXRpb24gc3BhbnMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNoYXJlZFNjaGVtZShwcmVwYXJlZCkge1xuICBjb25zdCBwcm9kdWN0ID0gcHJlcGFyZWQuY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZVxuICBjb25zdCBhcHBJZCA9IGFsbG9jYXRlWGNvZGVPYmplY3RJZHMoW1widGFyZ2V0OmFwcFwiXSkuZ2V0KFwidGFyZ2V0OmFwcFwiKVxuICBjb25zdCB0ZXN0SWQgPSBhbGxvY2F0ZVhjb2RlT2JqZWN0SWRzKFtcInRhcmdldDp0ZXN0c1wiXSkuZ2V0KFwidGFyZ2V0OnRlc3RzXCIpXG4gIGNvbnN0IHVpVGVzdElkID0gYWxsb2NhdGVYY29kZU9iamVjdElkcyhbXCJ0YXJnZXQ6dWl0ZXN0c1wiXSkuZ2V0KFwidGFyZ2V0OnVpdGVzdHNcIilcbiAgLyoqXG4gICAqIFJlbmRlcnMgb25lIHNjaGVtZSBidWlsZGFibGUgcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVN1ZmZpeCAtIEJsdWVwcmludCBzdWZmaXggYWZ0ZXIgcHJvZHVjdCBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYnVpbGRhYmxlU3VmZml4IC0gUHJvZHVjdCBmaWxlbmFtZSBzdWZmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBpZCAtIE9iamVjdCBJRC5cbiAgICogQHJldHVybnMge0NvbmZpZ3VyYXRpb25UZXh0UGFydFtdfSBYTUwgcmVmZXJlbmNlLlxuICAgKi9cbiAgY29uc3QgcmVmZXJlbmNlID0gKG5hbWVTdWZmaXgsIGJ1aWxkYWJsZVN1ZmZpeCwgaWQpID0+IFtgPEJ1aWxkYWJsZVJlZmVyZW5jZVxuICAgICAgICAgICAgICAgQnVpbGRhYmxlSWRlbnRpZmllciA9IFwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gXCIke2lkfVwiXG4gICAgICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gXCJgLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgYCR7YnVpbGRhYmxlU3VmZml4fVwiXG4gICAgICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gXCJgLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgYCR7bmFtZVN1ZmZpeH1cIlxuICAgICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9IFwiY29udGFpbmVyOmAsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIHByb2R1Y3QpLCBgLnhjb2RlcHJvalwiPlxuICAgICAgICAgICAgPC9CdWlsZGFibGVSZWZlcmVuY2U+YF1cbiAgY29uc3Qgd3JpdGVyID0gbmV3IENvbmZpZ3VyYXRpb25UZXh0V3JpdGVyKClcblxuICB3cml0ZXIuYXBwZW5kKGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjxTY2hlbWUgdmVyc2lvbj1cIjEuN1wiPlxuICAgPEJ1aWxkQWN0aW9uIHBhcmFsbGVsaXplQnVpbGRhYmxlcz1cIllFU1wiIGJ1aWxkSW1wbGljaXREZXBlbmRlbmNpZXM9XCJZRVNcIj5cbiAgICAgIDxCdWlsZEFjdGlvbkVudHJpZXM+XG4gICAgICAgICA8QnVpbGRBY3Rpb25FbnRyeSBidWlsZEZvclRlc3Rpbmc9XCJZRVNcIiBidWlsZEZvclJ1bm5pbmc9XCJZRVNcIiBidWlsZEZvclByb2ZpbGluZz1cIllFU1wiIGJ1aWxkRm9yQXJjaGl2aW5nPVwiWUVTXCIgYnVpbGRGb3JBbmFseXppbmc9XCJZRVNcIj5cbiAgICAgICAgICAgIGApXG4gIHdyaXRlci5hcHBlbmQocmVmZXJlbmNlKFwiXCIsIFwiLmFwcFwiLCBhcHBJZCkpXG4gIHdyaXRlci5hcHBlbmQoYFxuICAgICAgICAgPC9CdWlsZEFjdGlvbkVudHJ5PlxuICAgICAgPC9CdWlsZEFjdGlvbkVudHJpZXM+XG4gICA8L0J1aWxkQWN0aW9uPlxuICAgPFRlc3RBY3Rpb24gYnVpbGRDb25maWd1cmF0aW9uPVwiRGVidWdcIiBzZWxlY3RlZERlYnVnZ2VySWRlbnRpZmllcj1cIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCXCIgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXI9XCJYY29kZS5EZWJ1Z2dlckZvdW5kYXRpb24uTGF1bmNoZXIuTExEQlwiIHNob3VsZFVzZUxhdW5jaFNjaGVtZUFyZ3NFbnY9XCJZRVNcIj5cbiAgICAgIDxUZXN0YWJsZXM+XG4gICAgICAgICA8VGVzdGFibGVSZWZlcmVuY2Ugc2tpcHBlZD1cIk5PXCI+XG4gICAgICAgICAgICBgKVxuICB3cml0ZXIuYXBwZW5kKHJlZmVyZW5jZShcIlRlc3RzXCIsIFwiVGVzdHMueGN0ZXN0XCIsIHRlc3RJZCkpXG4gIHdyaXRlci5hcHBlbmQoYFxuICAgICAgICAgPC9UZXN0YWJsZVJlZmVyZW5jZT5cbiAgICAgICAgIDxUZXN0YWJsZVJlZmVyZW5jZSBza2lwcGVkPVwiTk9cIj5cbiAgICAgICAgICAgIGApXG4gIHdyaXRlci5hcHBlbmQocmVmZXJlbmNlKFwiVUlUZXN0c1wiLCBcIlVJVGVzdHMueGN0ZXN0XCIsIHVpVGVzdElkKSlcbiAgd3JpdGVyLmFwcGVuZChgXG4gICAgICAgICA8L1Rlc3RhYmxlUmVmZXJlbmNlPlxuICAgICAgPC9UZXN0YWJsZXM+XG4gICA8L1Rlc3RBY3Rpb24+XG4gICA8TGF1bmNoQWN0aW9uIGJ1aWxkQ29uZmlndXJhdGlvbj1cIkRlYnVnXCIgc2VsZWN0ZWREZWJ1Z2dlcklkZW50aWZpZXI9XCJYY29kZS5EZWJ1Z2dlckZvdW5kYXRpb24uRGVidWdnZXIuTExEQlwiIHNlbGVjdGVkTGF1bmNoZXJJZGVudGlmaWVyPVwiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREJcIiBsYXVuY2hTdHlsZT1cIjBcIiB1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5PVwiTk9cIiBpZ25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2g9XCJOT1wiIGRlYnVnRG9jdW1lbnRWZXJzaW9uaW5nPVwiWUVTXCIgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uPVwiaW50ZXJuYWxcIiBhbGxvd0xvY2F0aW9uU2ltdWxhdGlvbj1cIllFU1wiPlxuICAgICAgPEJ1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZSBydW5uYWJsZURlYnVnZ2luZ01vZGU9XCIwXCI+XG4gICAgICAgICBgKVxuICB3cml0ZXIuYXBwZW5kKHJlZmVyZW5jZShcIlwiLCBcIi5hcHBcIiwgYXBwSWQpKVxuICB3cml0ZXIuYXBwZW5kKGBcbiAgICAgIDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPlxuICAgPC9MYXVuY2hBY3Rpb24+XG4gICA8UHJvZmlsZUFjdGlvbiBidWlsZENvbmZpZ3VyYXRpb249XCJSZWxlYXNlXCIgc2hvdWxkVXNlTGF1bmNoU2NoZW1lQXJnc0Vudj1cIllFU1wiIHNhdmVkVG9vbElkZW50aWZpZXI9XCJcIiB1c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5PVwiTk9cIiBkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZz1cIllFU1wiPlxuICAgICAgPEJ1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZSBydW5uYWJsZURlYnVnZ2luZ01vZGU9XCIwXCI+XG4gICAgICAgICBgKVxuICB3cml0ZXIuYXBwZW5kKHJlZmVyZW5jZShcIlwiLCBcIi5hcHBcIiwgYXBwSWQpKVxuICB3cml0ZXIuYXBwZW5kKGBcbiAgICAgIDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPlxuICAgPC9Qcm9maWxlQWN0aW9uPlxuICAgPEFuYWx5emVBY3Rpb24gYnVpbGRDb25maWd1cmF0aW9uPVwiRGVidWdcIi8+XG4gICA8QXJjaGl2ZUFjdGlvbiBidWlsZENvbmZpZ3VyYXRpb249XCJSZWxlYXNlXCIgcmV2ZWFsQXJjaGl2ZUluT3JnYW5pemVyPVwiWUVTXCIvPlxuPC9TY2hlbWU+XG5gKVxuXG4gIHJldHVybiB3cml0ZXIuZmluaXNoKClcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBjbG9zZWQgdW5zaWduZWQgYmFzZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb24gLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge1JlbmRlcmVkQ29uZmlndXJhdGlvblRleHR9IEJhc2UgeGNjb25maWcgYW5kIGNhdXNhbCBjb25maWd1cmF0aW9uIHNwYW5zLlxuICovXG5mdW5jdGlvbiByZW5kZXJCYXNlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IHdyaXRlciA9IG5ldyBDb25maWd1cmF0aW9uVGV4dFdyaXRlcigpXG5cbiAgd3JpdGVyLmFwcGVuZChgQ09ERV9TSUdOSU5HX0FMTE9XRUQgPSBOT1xuQ09ERV9TSUdOSU5HX1JFUVVJUkVEID0gTk9cbkdFTkVSQVRFX0lORk9QTElTVF9GSUxFID0gTk9cbklQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gYClcbiAgd3JpdGVyLmFwcGVuZChjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJkZXBsb3ltZW50VGFyZ2V0XCIsIGNvbmZpZ3VyYXRpb24uZGVwbG95bWVudFRhcmdldCkpXG4gIHdyaXRlci5hcHBlbmQoXCJcXG5QUk9EVUNUX0JVTkRMRV9JREVOVElGSUVSID0gXCIpXG4gIHdyaXRlci5hcHBlbmQoY29uZmlndXJhdGlvbkZyYWdtZW50KFwiYnVuZGxlSWRlbnRpZmllclwiLCBjb25maWd1cmF0aW9uLmJ1bmRsZUlkZW50aWZpZXIpKVxuICB3cml0ZXIuYXBwZW5kKFwiXFxuUFJPRFVDVF9NT0RVTEVfTkFNRSA9IFwiKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcIm1vZHVsZU5hbWVcIiwgY29uZmlndXJhdGlvbi5tb2R1bGVOYW1lKSlcbiAgd3JpdGVyLmFwcGVuZChcIlxcblBST0RVQ1RfTkFNRSA9IFwiKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpKVxuICB3cml0ZXIuYXBwZW5kKGBcblNES1JPT1QgPSBpcGhvbmVvc1xuU1VQUE9SVEVEX1BMQVRGT1JNUyA9IGlwaG9uZW9zIGlwaG9uZXNpbXVsYXRvclxuVEFSR0VURURfREVWSUNFX0ZBTUlMWSA9IDFcbmApXG5cbiAgcmV0dXJuIHdyaXRlci5maW5pc2goKVxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGFsbG93bGlzdGVkIGFwcGxpY2F0aW9uIHByb3BlcnR5IGxpc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbn0gY29uZmlndXJhdGlvbiAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7UmVuZGVyZWRDb25maWd1cmF0aW9uVGV4dH0gUHJvcGVydHktbGlzdCBYTUwgYW5kIGNhdXNhbCBjb25maWd1cmF0aW9uIHNwYW5zLlxuICovXG5mdW5jdGlvbiByZW5kZXJJbmZvUGxpc3QoY29uZmlndXJhdGlvbikge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgQ29uZmlndXJhdGlvblRleHRXcml0ZXIoKVxuXG4gIHdyaXRlci5hcHBlbmQoYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuPCFET0NUWVBFIHBsaXN0IFBVQkxJQyBcIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTlwiIFwiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZFwiPlxuPHBsaXN0IHZlcnNpb249XCIxLjBcIj5cbjxkaWN0PlxuICA8a2V5PkNGQnVuZGxlRGlzcGxheU5hbWU8L2tleT5cbiAgPHN0cmluZz5gKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcImRpc3BsYXlOYW1lXCIsIHhtbEVzY2FwZShjb25maWd1cmF0aW9uLmRpc3BsYXlOYW1lKSkpXG4gIHdyaXRlci5hcHBlbmQoYDwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PlxuICA8c3RyaW5nPiQoRVhFQ1VUQUJMRV9OQU1FKTwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PlxuICA8c3RyaW5nPiQoUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUik8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PlxuICA8c3RyaW5nPjYuMDwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlTmFtZTwva2V5PlxuICA8c3RyaW5nPiQoUFJPRFVDVF9OQU1FKTwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlUGFja2FnZVR5cGU8L2tleT5cbiAgPHN0cmluZz5BUFBMPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT5cbiAgPHN0cmluZz4xLjA8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT5cbiAgPHN0cmluZz4xPC9zdHJpbmc+XG4gIDxrZXk+TFNSZXF1aXJlc0lQaG9uZU9TPC9rZXk+XG4gIDx0cnVlLz5cbiAgPGtleT5VSUxhdW5jaFNjcmVlbjwva2V5PlxuICA8ZGljdC8+XG48L2RpY3Q+XG48L3BsaXN0PlxuYClcblxuICByZXR1cm4gd3JpdGVyLmZpbmlzaCgpXG59XG5cbi8qKlxuICogUmVuZGVycyBwdXJlLWxvZ2ljIFhDVGVzdCBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbn0gY29uZmlndXJhdGlvbiAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7UmVuZGVyZWRDb25maWd1cmF0aW9uVGV4dH0gWENUZXN0IHNvdXJjZSBhbmQgY2F1c2FsIGNvbmZpZ3VyYXRpb24gc3BhbnMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclVuaXRUZXN0cyhjb25maWd1cmF0aW9uKSB7XG4gIGNvbnN0IHdyaXRlciA9IG5ldyBDb25maWd1cmF0aW9uVGV4dFdyaXRlcigpXG5cbiAgd3JpdGVyLmFwcGVuZChcImltcG9ydCBYQ1Rlc3RcXG5AdGVzdGFibGUgaW1wb3J0IFwiKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcIm1vZHVsZU5hbWVcIiwgY29uZmlndXJhdGlvbi5tb2R1bGVOYW1lKSlcbiAgd3JpdGVyLmFwcGVuZChcIlxcblxcbmZpbmFsIGNsYXNzIFwiKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpKVxuICB3cml0ZXIuYXBwZW5kKGBUZXN0czogWENUZXN0Q2FzZSB7XG4gIGZ1bmMgdGVzdFNlbWFudGljT3V0cHV0SXNEZXRlcm1pbmlzdGljKCkge1xuICAgIFhDVEFzc2VydEVxdWFsKFNlbWFudGlmb2xkQnJpZGdlLnJ1bigpLCBTZW1hbnRpZm9sZEJyaWRnZS5ydW4oKSlcbiAgfVxuXG4gIGZ1bmMgdGVzdE91dHB1dFNpbmtQcmVzZXJ2ZXNTY2FsYXJMaW5lcygpIHtcbiAgICBsZXQgb3V0cHV0ID0gU2VtYW50aWZvbGRPdXRwdXRTaW5rKClcbiAgICBvdXRwdXQud3JpdGUoSW50NjQoNykpXG4gICAgb3V0cHV0LndyaXRlKHRydWUpXG4gICAgb3V0cHV0LndyaXRlKFwiw6nwn5iAXCIpXG4gICAgWENUQXNzZXJ0RXF1YWwob3V0cHV0LmxpbmVzLCBbXCI3XCIsIFwidHJ1ZVwiLCBcIsOp8J+YgFwiXSlcbiAgfVxufVxuYClcblxuICByZXR1cm4gd3JpdGVyLmZpbmlzaCgpXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgYWNjZXNzaWJpbGl0eS1yb3V0ZSBYQ1VJIHNvdXJjZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9ufSBjb25maWd1cmF0aW9uIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0fSBYQ1VJIHNvdXJjZSBhbmQgY2F1c2FsIGNvbmZpZ3VyYXRpb24gc3BhbnMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclVpVGVzdHMoY29uZmlndXJhdGlvbikge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgQ29uZmlndXJhdGlvblRleHRXcml0ZXIoKVxuXG4gIHdyaXRlci5hcHBlbmQoXCJpbXBvcnQgWENUZXN0XFxuXFxuZmluYWwgY2xhc3MgXCIpXG4gIHdyaXRlci5hcHBlbmQoY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZSkpXG4gIHdyaXRlci5hcHBlbmQoYFVJVGVzdHM6IFhDVGVzdENhc2Uge1xuICBmdW5jIHRlc3RPdXRwdXRWaWV3SXNBY2Nlc3NpYmxlKCkge1xuICAgIGxldCBhcHBsaWNhdGlvbiA9IFhDVUlBcHBsaWNhdGlvbigpXG4gICAgYXBwbGljYXRpb24ubGF1bmNoKClcbiAgICBYQ1RBc3NlcnRUcnVlKGFwcGxpY2F0aW9uLnN0YXRpY1RleHRzW1wic2VtYW50aWZvbGQtb3V0cHV0XCJdLndhaXRGb3JFeGlzdGVuY2UodGltZW91dDogNSkpXG4gIH1cbn1cbmApXG5cbiAgcmV0dXJuIHdyaXRlci5maW5pc2goKVxufVxuXG4vKipcbiAqIEVzY2FwZXMgWE1MIHRleHQgYW5kIGF0dHJpYnV0ZSBjb250ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gWE1MIHRleHQgb3IgYXR0cmlidXRlIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gRXNjYXBlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24geG1sRXNjYXBlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlQWxsKFwiJlwiLCBcIiZhbXA7XCIpLnJlcGxhY2VBbGwoXCI8XCIsIFwiJmx0O1wiKS5yZXBsYWNlQWxsKFwiPlwiLCBcIiZndDtcIilcbiAgICAucmVwbGFjZUFsbChcIlxcXCJcIiwgXCImcXVvdDtcIikucmVwbGFjZUFsbChcIidcIiwgXCImYXBvcztcIilcbn1cblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBzeW50aGV0aWMgdGV4dCBhcnRpZmFjdCBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0Um9sZX0gcm9sZSAtIEFydGlmYWN0IHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIEV4YWN0IExGIGNvbnRlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gUHJvdmVuYW5jZSByZWFzb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3R9IEFydGlmYWN0IGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gc3ludGhldGljVGV4dChwYXRoLCByb2xlLCBjb250ZW50LCByZWFzb24pIHtcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50LFxuICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICBtZWRpYVR5cGU6IHBhdGguZW5kc1dpdGgoXCIuc3dpZnRcIikgPyBcInRleHQveC1zd2lmdFwiIDogcGF0aC5lbmRzV2l0aChcIi5qc29uXCIpID8gXCJhcHBsaWNhdGlvbi9qc29uXCIgOlxuICAgICAgcGF0aC5lbmRzV2l0aChcIi5wbGlzdFwiKSB8fCBwYXRoLmVuZHNXaXRoKFwiLnhjc2NoZW1lXCIpID8gXCJhcHBsaWNhdGlvbi94bWxcIiA6IFwidGV4dC9wbGFpblwiLFxuICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICBwYXRoLFxuICAgIHByb3ZlbmFuY2U6IHtraW5kOiBcInN5bnRoZXRpY1wiLCByZWFzb24sIHJlbGF0ZWRPcmlnaW5zOiBbXX0sXG4gICAgcm9sZVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN5bnRoZXRpYyBhcnRpZmFjdCBhbmQgdHJhbnNmZXJzIGl0cyByZW5kZXJlci1vd25lZCBjb25maWd1cmF0aW9uIHNwYW5zIHRvIHRoZSBtYW5pZmVzdCBsZWRnZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0Um9sZX0gcm9sZSAtIEFydGlmYWN0IHJvbGUuXG4gKiBAcGFyYW0ge1JlbmRlcmVkQ29uZmlndXJhdGlvblRleHR9IHJlbmRlcmVkIC0gUmVuZGVyZWQgY29udGVudCBhbmQgY2F1c2FsIHNwYW5zLlxuICogQHBhcmFtIHtDb25maWd1cmF0aW9uQXJ0aWZhY3RTcGFuW119IHNwYW5zIC0gQXBwbGljYXRpb24td2lkZSBjYXVzYWwgc3BhbiBsZWRnZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gUHJvdmVuYW5jZSByZWFzb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3R9IEFydGlmYWN0IGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlZFN5bnRoZXRpY1RleHQocGF0aCwgcm9sZSwgcmVuZGVyZWQsIHNwYW5zLCByZWFzb24pIHtcbiAgc3BhbnMucHVzaCguLi5yZW5kZXJlZC5jb25maWd1cmF0aW9uU3BhbnMubWFwKHNwYW4gPT4gKHsuLi5zcGFuLCBwYXRofSkpKVxuXG4gIHJldHVybiBzeW50aGV0aWNUZXh0KHBhdGgsIHJvbGUsIHJlbmRlcmVkLmNvbnRlbnQsIHJlYXNvbilcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHJlY3Vyc2l2ZWx5IHNvcnRlZCBjYW5vbmljYWwgSlNPTiB3aXRoIGFuIExGLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEpTT04gdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDYW5vbmljYWwgSlNPTiB3aXRoIExGLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlDYW5vbmljYWxKc29uKHZhbHVlKSB7XG4gIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShzb3J0SnNvbih2YWx1ZSksIG51bGwsIDIpfVxcbmBcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzb3J0cyBKU09OIG9iamVjdCBrZXlzIHdpdGhvdXQgcmVvcmRlcmluZyBhcnJheXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gSlNPTiB2YWx1ZS5cbiAqIEByZXR1cm5zIHt1bmtub3dufSBSZWN1cnNpdmVseSBrZXktc29ydGVkIEpTT04uXG4gKi9cbmZ1bmN0aW9uIHNvcnRKc29uKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLm1hcChzb3J0SnNvbilcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpLm1hcChrZXkgPT4gW2tleSwgc29ydEpzb24odmFsdWVba2V5XSldKSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW5kIHNuYXBzaG90cyB0aGUgc3RyaWN0IGJhc2VsaW5lIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBJZGVudGl0eSBhbmQgZGVwbG95bWVudCBmaWVsZHMgaW50ZW50aW9uYWxseSBoYXZlIG5vIGRlZmF1bHRzIHdpdGhvdXQgQXBwbGUtbGFuZSBldmlkZW5jZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gQ2FuZGlkYXRlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9ufSBOb3JtYWxpemVkIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbmZpZ3VyYXRpb24oY2FuZGlkYXRlKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUpIHx8IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuc29tZShrZXkgPT4gIWNvbmZpZ3VyYXRpb25GaWVsZHMuaGFzKGtleSkpKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJpT1MgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBtdXN0IGJlIGEgY2xvc2VkIHBsYWluIG9iamVjdC5cIilcbiAgfVxuICBjb25zdCBwcm9kdWN0TmFtZSA9IGNhbmRpZGF0ZS5wcm9kdWN0TmFtZVxuICBjb25zdCBtb2R1bGVOYW1lID0gY2FuZGlkYXRlLm1vZHVsZU5hbWVcbiAgY29uc3Qgb3JnYW5pemF0aW9uUHJlZml4ID0gY2FuZGlkYXRlLm9yZ2FuaXphdGlvblByZWZpeFxuICBjb25zdCBidW5kbGVJZGVudGlmaWVyID0gY2FuZGlkYXRlLmJ1bmRsZUlkZW50aWZpZXJcbiAgY29uc3QgZGVwbG95bWVudFRhcmdldCA9IGNhbmRpZGF0ZS5kZXBsb3ltZW50VGFyZ2V0XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gY2FuZGlkYXRlLmRpc3BsYXlOYW1lXG5cbiAgaWYgKHR5cGVvZiBwcm9kdWN0TmFtZSAhPSBcInN0cmluZ1wiIHx8ICEvXltBLVpdW0EtWmEtejAtOV0qJC91LnRlc3QocHJvZHVjdE5hbWUpKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJQcm9kdWN0IG5hbWUgbXVzdCBiZSBhbiBBU0NJSSB1cHBlci1jYW1lbCBpZGVudGlmaWVyLlwiKVxuICB9XG4gIGlmICh0eXBlb2YgbW9kdWxlTmFtZSAhPSBcInN0cmluZ1wiIHx8ICEvXltBLVpdW0EtWmEtejAtOV0qJC91LnRlc3QobW9kdWxlTmFtZSkpIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIk1vZHVsZSBuYW1lIG11c3QgYmUgYW4gQVNDSUkgdXBwZXItY2FtZWwgaWRlbnRpZmllci5cIilcbiAgfVxuICBpZiAodHlwZW9mIG9yZ2FuaXphdGlvblByZWZpeCAhPSBcInN0cmluZ1wiIHx8ICFpc1JldmVyc2VEbnMob3JnYW5pemF0aW9uUHJlZml4LCAyKSkge1xuICAgIGludmFsaWRDb25maWd1cmF0aW9uKFwiT3JnYW5pemF0aW9uIHByZWZpeCBtdXN0IGJlIGEgbG93ZXJjYXNlIHJldmVyc2UtRE5TIGlkZW50aXR5IHdpdGggYXQgbGVhc3QgdHdvIHNlZ21lbnRzLlwiKVxuICB9XG4gIGlmICh0eXBlb2YgYnVuZGxlSWRlbnRpZmllciAhPSBcInN0cmluZ1wiIHx8ICFpc1JldmVyc2VEbnMoYnVuZGxlSWRlbnRpZmllciwgMykgfHxcbiAgICAhYnVuZGxlSWRlbnRpZmllci5zdGFydHNXaXRoKGAke29yZ2FuaXphdGlvblByZWZpeH0uYCkpIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIkJ1bmRsZSBpZGVudGlmaWVyIG11c3QgZXh0ZW5kIHRoZSBleGFjdCBvcmdhbml6YXRpb24gcHJlZml4IGFzIGxvd2VyY2FzZSByZXZlcnNlIEROUy5cIilcbiAgfVxuICBpZiAodHlwZW9mIGRlcGxveW1lbnRUYXJnZXQgIT0gXCJzdHJpbmdcIiB8fCAhL15bMS05XVswLTldKlxcLig/OjB8WzEtOV1bMC05XSopJC91LnRlc3QoZGVwbG95bWVudFRhcmdldCkpIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIkRlcGxveW1lbnQgdGFyZ2V0IG11c3QgYmUgYSBjYWxsZXItc3VwcGxpZWQgY2Fub25pY2FsIG1ham9yLm1pbm9yIHZlcnNpb24uXCIpXG4gIH1cbiAgaWYgKHR5cGVvZiBkaXNwbGF5TmFtZSAhPSBcInN0cmluZ1wiIHx8IGRpc3BsYXlOYW1lLmxlbmd0aCA9PSAwIHx8IGRpc3BsYXlOYW1lLnRyaW0oKSAhPSBkaXNwbGF5TmFtZSB8fFxuICAgIFsuLi5kaXNwbGF5TmFtZV0ubGVuZ3RoID4gNjQgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhkaXNwbGF5TmFtZSkgfHwgL1xccHtDY30vdS50ZXN0KGRpc3BsYXlOYW1lKSkge1xuICAgIGludmFsaWRDb25maWd1cmF0aW9uKFwiRGlzcGxheSBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc2luZ2xlLWxpbmUgVW5pY29kZSBzY2FsYXIgc3RyaW5nIG9mIGF0IG1vc3QgNjQgY2hhcmFjdGVycy5cIilcbiAgfVxuICBjb25zdCBzb3VyY2VSb290ID0gY2FuZGlkYXRlLnNvdXJjZVJvb3QgPz8gXCJTb3VyY2VzXCJcbiAgY29uc3QgcmVzb3VyY2VSb290ID0gY2FuZGlkYXRlLnJlc291cmNlUm9vdCA/PyBcIkFzc2V0cy54Y2Fzc2V0c1wiXG4gIGNvbnN0IGxpZmVjeWNsZSA9IGNhbmRpZGF0ZS5saWZlY3ljbGUgPz8gXCJzd2lmdHVpXCJcblxuICBpZiAoc291cmNlUm9vdCAhPSBcIlNvdXJjZXNcIiB8fCAhaXNTYWZlQXJ0aWZhY3RQYXRoKHNvdXJjZVJvb3QpKSBpbnZhbGlkQ29uZmlndXJhdGlvbihcIlRoZSBzdXBwb3J0ZWQgc291cmNlIHJvb3QgaXMgZXhhY3RseSAnU291cmNlcycuXCIpXG4gIGlmIChyZXNvdXJjZVJvb3QgIT0gXCJBc3NldHMueGNhc3NldHNcIiB8fCAhaXNTYWZlQXJ0aWZhY3RQYXRoKHJlc291cmNlUm9vdCkpIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIlRoZSBzdXBwb3J0ZWQgcmVzb3VyY2Ugcm9vdCBpcyBleGFjdGx5ICdBc3NldHMueGNhc3NldHMnLlwiKVxuICB9XG4gIGlmIChsaWZlY3ljbGUgIT0gXCJzd2lmdHVpXCIpIGludmFsaWRDb25maWd1cmF0aW9uKFwiVGhlIHN1cHBvcnRlZCBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgaXMgZXhhY3RseSAnc3dpZnR1aScuXCIpXG4gIGNvbnN0IGluZm9QbGlzdCA9IGNhbmRpZGF0ZS5pbmZvUGxpc3QgPz8ge31cblxuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5mb1BsaXN0KSB8fCBPYmplY3Qua2V5cyhpbmZvUGxpc3QpLmxlbmd0aCA+IDApIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIlRoZSBiYXNlbGluZSBjYWxsZXIgSW5mby5wbGlzdCBleHRlbnNpb24gYWxsb3dsaXN0IGlzIGVtcHR5LlwiKVxuICB9XG4gIGNvbnN0IHBlcm1pc3Npb25zID0gZW1wdHlDb25maWd1cmF0aW9uU2V0KGNhbmRpZGF0ZS5wZXJtaXNzaW9ucywgXCJwZXJtaXNzaW9uc1wiKVxuICBjb25zdCBlbnRpdGxlbWVudHMgPSBlbXB0eUNvbmZpZ3VyYXRpb25TZXQoY2FuZGlkYXRlLmVudGl0bGVtZW50cywgXCJlbnRpdGxlbWVudHNcIilcbiAgY29uc3QgcHJpdmFjeURlY2xhcmF0aW9ucyA9IGVtcHR5Q29uZmlndXJhdGlvblNldChjYW5kaWRhdGUucHJpdmFjeURlY2xhcmF0aW9ucywgXCJwcml2YWN5IGRlY2xhcmF0aW9uc1wiKVxuICBjb25zdCBjYXBhYmlsaXRpZXMgPSBlbXB0eUNvbmZpZ3VyYXRpb25TZXQoY2FuZGlkYXRlLmNhcGFiaWxpdGllcywgXCJjYXBhYmlsaXRpZXNcIilcblxuICByZXR1cm4ge1xuICAgIGJ1bmRsZUlkZW50aWZpZXIsXG4gICAgY2FwYWJpbGl0aWVzLFxuICAgIGRlcGxveW1lbnRUYXJnZXQsXG4gICAgZGlzcGxheU5hbWUsXG4gICAgZW50aXRsZW1lbnRzLFxuICAgIGluZm9QbGlzdDoge30sXG4gICAgbGlmZWN5Y2xlOiBcInN3aWZ0dWlcIixcbiAgICBtb2R1bGVOYW1lLFxuICAgIG9yZ2FuaXphdGlvblByZWZpeCxcbiAgICBwZXJtaXNzaW9ucyxcbiAgICBwcml2YWN5RGVjbGFyYXRpb25zLFxuICAgIHByb2R1Y3ROYW1lLFxuICAgIHJlc291cmNlUm9vdDogXCJBc3NldHMueGNhc3NldHNcIixcbiAgICBzb3VyY2VSb290OiBcIlNvdXJjZXNcIlxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBvcHRpb25hbCBjbG9zZWQgZW1wdHkgY29uZmlndXJhdGlvbiBzZXQuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIE9wdGlvbmFsIGNsb3NlZCBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIGxhYmVsLlxuICogQHJldHVybnMge25ldmVyW119IEVtcHR5IHNuYXBzaG90LlxuICovXG5mdW5jdGlvbiBlbXB0eUNvbmZpZ3VyYXRpb25TZXQoY2FuZGlkYXRlLCBsYWJlbCkge1xuICBpZiAoY2FuZGlkYXRlID09PSB1bmRlZmluZWQpIHJldHVybiBbXVxuICBpZiAoIWlzRGVuc2VBcnJheShjYW5kaWRhdGUpIHx8IGNhbmRpZGF0ZS5sZW5ndGggIT0gMCkgaW52YWxpZENvbmZpZ3VyYXRpb24oYFRoZSBiYXNlbGluZSAke2xhYmVsfSBzZXQgbXVzdCBiZSBlbXB0eS5gKVxuXG4gIHJldHVybiBbXVxufVxuXG4vKipcbiAqIFRlc3RzIG9uZSBjYW5vbmljYWwgbG93ZXJjYXNlIHJldmVyc2UtRE5TIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gQ2FuZGlkYXRlIGlkZW50aXR5LlxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRzIC0gTWluaW11bSBzZWdtZW50cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGl0eS5cbiAqL1xuZnVuY3Rpb24gaXNSZXZlcnNlRG5zKHZhbHVlLCBzZWdtZW50cykge1xuICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KFwiLlwiKVxuXG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPj0gc2VnbWVudHMgJiYgcGFydHMuZXZlcnkocGFydCA9PiAvXlthLXpdW2EtejAtOS1dKiQvdS50ZXN0KHBhcnQpICYmICFwYXJ0LmVuZHNXaXRoKFwiLVwiKSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMsIGhhc2hlcywgc25hcHNob3RzLCBhbmQgY2Fub25pY2FsbHkgc29ydHMgY2FsbGVyIGFzc2V0cy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gQ2FuZGlkYXRlIGFzc2V0IGFycmF5LlxuICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlUm9vdCAtIEV4YWN0IHJlc291cmNlIHJvb3QuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Bc3NldElucHV0W119IE5vcm1hbGl6ZWQgYXNzZXRzLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBc3NldHMoY2FuZGlkYXRlLCByZXNvdXJjZVJvb3QpIHtcbiAgaWYgKGNhbmRpZGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW11cbiAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlKSkgaW52YWxpZEFzc2V0KFwiQXBwbGljYXRpb24gYXNzZXRzIG11c3QgYmUgYSBkZW5zZSBhcnJheS5cIilcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkFzc2V0SW5wdXRbXX0gKi9cbiAgY29uc3QgYXNzZXRzID0gW11cblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FuZGlkYXRlLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGFzc2V0ID0gY2FuZGlkYXRlW2luZGV4XVxuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGFzc2V0KSB8fCBPYmplY3Qua2V5cyhhc3NldCkuc29tZShrZXkgPT4gIWFzc2V0RmllbGRzLmhhcyhrZXkpKSB8fFxuICAgICAgT2JqZWN0LmtleXMoYXNzZXQpLmxlbmd0aCAhPSBhc3NldEZpZWxkcy5zaXplKSBpbnZhbGlkQXNzZXQoYEFzc2V0ICR7aW5kZXh9IG11c3QgdXNlIHRoZSBjbG9zZWQgYXNzZXQgc2NoZW1hLmApXG4gICAgY29uc3QgcGF0aCA9IGFzc2V0LnBhdGhcbiAgICBjb25zdCBjb250ZW50ID0gYXNzZXQuY29udGVudFxuICAgIGNvbnN0IG1lZGlhVHlwZSA9IGFzc2V0Lm1lZGlhVHlwZVxuICAgIGNvbnN0IHNoYTI1NiA9IGFzc2V0LnNoYTI1NlxuXG4gICAgaWYgKCFpc1NhZmVBcnRpZmFjdFBhdGgocGF0aCkgfHwgIXBhdGguc3RhcnRzV2l0aChgJHtyZXNvdXJjZVJvb3R9L2ApIHx8IHBhdGggPT0gYCR7cmVzb3VyY2VSb290fS9Db250ZW50cy5qc29uYCkge1xuICAgICAgaW52YWxpZEFzc2V0KGBBc3NldCAke2luZGV4fSByZXF1aXJlcyBhIHNhZmUgcGF0aCBiZWxvdyAnJHtyZXNvdXJjZVJvb3R9Jy5gKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgIT0gXCJzdHJpbmdcIiAmJiAhKGNvbnRlbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fFxuICAgICAgdHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiAmJiAoY29udGVudC5sZW5ndGggPT0gMCB8fCAhaGFzT25seVVuaWNvZGVTY2FsYXJzKGNvbnRlbnQpKSB8fFxuICAgICAgY29udGVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgY29udGVudC5ieXRlTGVuZ3RoID09IDApIGludmFsaWRBc3NldChgQXNzZXQgJyR7cGF0aH0nIHJlcXVpcmVzIG5vbi1lbXB0eSBleGFjdCBjb250ZW50LmApXG4gICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUgIT0gXCJzdHJpbmdcIiB8fCAhbWVkaWFUeXBlUGF0dGVybi50ZXN0KG1lZGlhVHlwZSkgfHwgL1tcXHJcXG5dL3UudGVzdChtZWRpYVR5cGUpKSB7XG4gICAgICBpbnZhbGlkQXNzZXQoYEFzc2V0ICcke3BhdGh9JyByZXF1aXJlcyBhbiBleHBsaWNpdCB2YWxpZCBtZWRpYSB0eXBlLmApXG4gICAgfVxuICAgIGNvbnN0IHNuYXBzaG90ID0gdHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIiA/IGNvbnRlbnQgOiBuZXcgVWludDhBcnJheShjb250ZW50KVxuICAgIGNvbnN0IGFjdHVhbEhhc2ggPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShzbmFwc2hvdCkuZGlnZXN0KFwiaGV4XCIpXG5cbiAgICBpZiAodHlwZW9mIHNoYTI1NiAhPSBcInN0cmluZ1wiIHx8ICEvXlswLTlhLWZdezY0fSQvdS50ZXN0KHNoYTI1NikgfHwgc2hhMjU2ICE9IGFjdHVhbEhhc2gpIHtcbiAgICAgIGludmFsaWRBc3NldChgQXNzZXQgJyR7cGF0aH0nIFNIQS0yNTYgZG9lcyBub3QgbWF0Y2ggaXRzIGV4YWN0IGNvbnRlbnQuYClcbiAgICB9XG4gICAgYXNzZXRzLnB1c2goe2NvbnRlbnQ6IHNuYXBzaG90LCBtZWRpYVR5cGUsIHBhdGgsIHNoYTI1Nn0pXG4gIH1cbiAgYXNzZXRzLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnBhdGggPCByaWdodC5wYXRoID8gLTEgOiBsZWZ0LnBhdGggPiByaWdodC5wYXRoID8gMSA6IDApXG5cbiAgcmV0dXJuIGFzc2V0c1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXhhY3QgdGV4dCBvciBiaW5hcnkgYXNzZXQgYXJ0aWZhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQXNzZXRJbnB1dH0gYXNzZXQgLSBWYWxpZGF0ZWQgYXNzZXQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3R9IEFydGlmYWN0IGNhbmRpZGF0ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXRBcnRpZmFjdChhc3NldCkge1xuICBpZiAodHlwZW9mIGFzc2V0LmNvbnRlbnQgPT0gXCJzdHJpbmdcIikgcmV0dXJuIHtcbiAgICBjb250ZW50OiBhc3NldC5jb250ZW50LFxuICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICBtZWRpYVR5cGU6IGFzc2V0Lm1lZGlhVHlwZSxcbiAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgcGF0aDogYXNzZXQucGF0aCxcbiAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uOiBgRXhhY3QgY2FsbGVyLXByb3ZpZGVkIGlPUyBhc3NldCAoc2hhMjU2OiR7YXNzZXQuc2hhMjU2fSkuYCwgcmVsYXRlZE9yaWdpbnM6IFtdfSxcbiAgICByb2xlOiBcInJlc291cmNlXCJcbiAgfVxuICBjb25zdCBjb250ZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNzZXQuY29udGVudClcblxuICByZXR1cm4ge1xuICAgIGNvbnRlbnQsXG4gICAgY29udGVudEtpbmQ6IFwiYmluYXJ5XCIsXG4gICAgbWVkaWFUeXBlOiBhc3NldC5tZWRpYVR5cGUsXG4gICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgIHBhdGg6IGFzc2V0LnBhdGgsXG4gICAgcHJvdmVuYW5jZToge2tpbmQ6IFwiYnl0ZXNcIiwgbWFwcGluZzogY3JlYXRlQnl0ZU1hcHBpbmcoe1xuICAgICAgYnl0ZUxlbmd0aDogY29udGVudC5ieXRlTGVuZ3RoLFxuICAgICAgcGF0aDogYXNzZXQucGF0aCxcbiAgICAgIHJhbmdlczogW3tcbiAgICAgICAgZ2VuZXJhdGVkOiB7ZW5kOiBjb250ZW50LmJ5dGVMZW5ndGgsIHN0YXJ0OiAwfSxcbiAgICAgICAgb3JpZ2luOiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uOiBgRXhhY3QgY2FsbGVyLXByb3ZpZGVkIGlPUyBhc3NldCAoc2hhMjU2OiR7YXNzZXQuc2hhMjU2fSkuYCwgcmVsYXRlZE9yaWdpbnM6IFtdfSxcbiAgICAgICAgcm9sZTogXCJhc3NldFwiXG4gICAgICB9XVxuICAgIH0pfSxcbiAgICByb2xlOiBcInJlc291cmNlXCJcbiAgfVxufVxuXG4vKipcbiAqIFRocm93cyBhIGNvbmZpZ3VyYXRpb24gZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRDb25maWd1cmF0aW9uKG1lc3NhZ2UpIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJJTlZBTElEX0FQUExJQ0FUSU9OX0NPTkZJR1VSQVRJT05cIiwgbGFuZ3VhZ2U6IFwiaW9zXCIsIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIFRocm93cyBhbiBhc3NldCBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBGYWlsdXJlIGRldGFpbC5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZEFzc2V0KG1lc3NhZ2UpIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJJTlZBTElEX0FQUExJQ0FUSU9OX0FTU0VUXCIsIGxhbmd1YWdlOiBcImlvc1wiLCBtZXNzYWdlfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gYXBwbGljYXRpb24tcGF0aCBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBGYWlsdXJlIGRldGFpbC5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFBhdGgobWVzc2FnZSkge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIklOVkFMSURfQVBQTElDQVRJT05fUEFUSFwiLCBsYW5ndWFnZTogXCJpb3NcIiwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogRW1pdHMgb25lIGJhY2tlbmQtbmFtZXNwYWNlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIGdlbmVyYXRlZCBTd2lmdCB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBQcmVwYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlSWQgLSBTdGFibGUgcHJvamVjdCBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGVudHJ5IC0gV2hldGhlciB0aGlzIG1vZHVsZSBvd25zIHRoZSBzZW1hbnRpYyBlbnRyeS5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IHVuZGVmaW5lZCwge2RlY2xhcmF0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uLCBtb2R1bGVJZDogc3RyaW5nfT59IGRlY2xhcmF0aW9ucyAtIFJlc29sdmVkIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZW1pdFNlbWFudGljTW9kdWxlKHdyaXRlciwgbW9kdWxlLCBtb2R1bGVJZCwgZW50cnksIGRlY2xhcmF0aW9ucykge1xuICBjb25zdCBuYW1lc3BhY2UgPSBgU2VtYW50aWZvbGRNb2R1bGUke21vZHVsZU5hbWUobW9kdWxlSWQpfWBcblxuICB3cml0ZXIuc3ludGhldGljKGBlbnVtICR7bmFtZXNwYWNlfSB7XFxuYCwgXCJpT1Mgc2VtYW50aWMgbW9kdWxlIG5hbWVzcGFjZVwiLCBbbW9kdWxlXSwgW1wiXCJdKVxuICBtb2R1bGUuZnVuY3Rpb25zLmZvckVhY2goKGRlY2xhcmF0aW9uLCBmdW5jdGlvbkluZGV4KSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGAvZnVuY3Rpb25zLyR7ZnVuY3Rpb25JbmRleH1gXG5cbiAgICB3cml0ZXIuc3ludGhldGljKFwiICBzdGF0aWMgXCIsIFwiaU9TIG5hbWVzcGFjZWQgZnVuY3Rpb24gc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCJmdW5jXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChkZWNsYXJhdGlvbi5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZGVjbGFyYXRpb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcImZ1bmN0aW9uIHBhcmFtZXRlciBzY2FmZm9sZFwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgZGVjbGFyYXRpb24ucGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbWV0ZXIsIHBhcmFtZXRlckluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJQYXRoID0gYCR7cGF0aH0vcGFyYW1ldGVycy8ke3BhcmFtZXRlckluZGV4fWBcblxuICAgICAgaWYgKHBhcmFtZXRlckluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJwYXJhbWV0ZXIgc2VwYXJhdG9yXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiXyBcIiwgXCJ1bmxhYmVsZWQgU3dpZnQgcGFyYW1ldGVyIHNjYWZmb2xkXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLCBwYXRoOiBwYXJhbWV0ZXJQYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiOiBcIiwgXCJwYXJhbWV0ZXIgYW5ub3RhdGlvbiBzY2FmZm9sZFwiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcInN3aWZ0XCIsIHBhcmFtZXRlci50eXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlci50eXBlLFxuICAgICAgICBwYXRoOiBgJHtwYXJhbWV0ZXJQYXRofS90eXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXyBzZW1hbnRpZm9sZF9vdXRwdXQ6IFNlbWFudGlmb2xkT3V0cHV0U2luaykgLT4gXCIsIFwic2hhcmVkIGlPUyBvdXRwdXQgc2luayBwYXJhbWV0ZXJcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJzd2lmdFwiLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgICBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcIlN3aWZ0IGZ1bmN0aW9uIGJvZHkgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiICAgIFwiLCBgJHtwYXRofS9ib2R5YCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgIH1cXG5cIiwgXCJTd2lmdCBmdW5jdGlvbiBib2R5IHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgfSlcbiAgaWYgKGVudHJ5KSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgc3RhdGljIGZ1bmMgc2VtYW50aWZvbGRFbnRyeSgpIC0+IFtTdHJpbmddIHtcXG5cIiwgXCJpT1Mgc2VtYW50aWMgZW50cnkgc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgICBsZXQgc2VtYW50aWZvbGRfb3V0cHV0ID0gU2VtYW50aWZvbGRPdXRwdXRTaW5rKClcXG5cIiwgXCJzaGFyZWQgaU9TIG91dHB1dCBzaW5rIGFsbG9jYXRpb25cIixcbiAgICAgIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiICAgIFwiLCBcIi9lbnRyeVBvaW50L2JvZHlcIiwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgcmV0dXJuIHNlbWFudGlmb2xkX291dHB1dC5saW5lc1xcblwiLCBcImlPUyBzZW1hbnRpYyBvdXRwdXQgcmV0dXJuXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgIH1cXG5cIiwgXCJpT1Mgc2VtYW50aWMgZW50cnkgc2NhZmZvbGRcIiwgW21vZHVsZS5lbnRyeVBvaW50XSwgW1wiL2VudHJ5UG9pbnRcIl0pXG4gIH1cbiAgd3JpdGVyLnN5bnRoZXRpYyhcIn1cXG5cIiwgXCJpT1Mgc2VtYW50aWMgbW9kdWxlIG5hbWVzcGFjZVwiLCBbbW9kdWxlXSwgW1wiXCJdKVxufVxuXG4vKipcbiAqIEVtaXRzIGEgdmFsaWRhdGVkIG9yZGVyZWQgc2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IC0gQ3VycmVudCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gQmxvY2sgb2NjdXJyZW5jZSBwYXRoLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCB7ZGVjbGFyYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24sIG1vZHVsZUlkOiBzdHJpbmd9Pn0gZGVjbGFyYXRpb25zIC0gUmVzb2x2ZWQgZnVuY3Rpb25zLlxuICovXG5mdW5jdGlvbiBlbWl0QmxvY2sod3JpdGVyLCBibG9jaywgaW5kZW50LCBwYXRoLCBkZWNsYXJhdGlvbnMpIHtcbiAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gLCBkZWNsYXJhdGlvbnMpKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBTd2lmdCBzdGF0ZW1lbnQgdGhyb3VnaCB0aGUgc2hhcmVkIGNhcHR1cmUgc2luay5cbiAqIEBwYXJhbSB7U291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2Ugd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIFZhbGlkYXRlZCBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5kZW50IC0gQ3VycmVudCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gU3RhdGVtZW50IG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IHVuZGVmaW5lZCwge2RlY2xhcmF0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uLCBtb2R1bGVJZDogc3RyaW5nfT59IGRlY2xhcmF0aW9ucyAtIFJlc29sdmVkIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBwYXRoLCBkZWNsYXJhdGlvbnMpIHtcbiAgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiaW5kZW50YXRpb25cIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQubXV0YWJsZSA/IFwidmFyXCIgOiBcImxldFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcImxvY2FsIGFubm90YXRpb24gc2NhZmZvbGRcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwic3dpZnRcIiwgc3RhdGVtZW50LnR5cGUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnR5cGUsXG4gICAgICBwYXRoOiBgJHtwYXRofS90eXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgPSBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5pbml0aWFsaXplciwgYCR7cGF0aH0vaW5pdGlhbGl6ZXJgLCBkZWNsYXJhdGlvbnMpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBpZiAoc3RhdGVtZW50Lm11dGFibGUpIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fXNlbWFudGlmb2xkX2tlZXBfbXV0YWJsZSgmJHtzdGF0ZW1lbnQubmFtZX0pXFxuYCxcbiAgICAgIFwiU3dpZnQgbXV0YWJsZS1sb2NhbCB3YXJuaW5nIG1hcmtlclwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50LnRhcmdldC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LnRhcmdldCwgcGF0aDogYCR7cGF0aH0vdGFyZ2V0YCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgPSBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXN0YXRlbWVudC5leHByZXNzaW9uKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaU9TIFN3aWZ0IGJhcmUgcmV0dXJuIHJlYWNoZWQgZW1pc3Npb24uXCIpXG4gICAgd3JpdGVyLm1hcHBlZChcInJldHVyblwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJyZXR1cm4gc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmV4cHJlc3Npb24sIGAke3BhdGh9L2V4cHJlc3Npb25gLCBkZWNsYXJhdGlvbnMpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcInNlbWFudGlmb2xkX291dHB1dC53cml0ZShcIiwgXCJpT1Mgb3V0cHV0IGNhcHR1cmVcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIpXFxuXCIsIFwiaU9TIG91dHB1dCBjYXB0dXJlXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kICE9IFwiSWZTdGF0ZW1lbnRcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIGlPUyBTd2lmdCBzdGF0ZW1lbnQgcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgd3JpdGVyLm1hcHBlZChcImlmXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJjb25kaXRpb25hbCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgc3RhdGVtZW50LmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgZGVjbGFyYXRpb25zKVxuICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJTd2lmdCBjb25kaXRpb25hbCBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmNvbnNlcXVlbnRdLCBbYCR7cGF0aH0vY29uc2VxdWVudGBdKVxuICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuY29uc2VxdWVudCwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vY29uc2VxdWVudGAsIGRlY2xhcmF0aW9ucylcbiAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9fWAsIFwiU3dpZnQgY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIGVsc2Uge1xcblwiLCBcIlN3aWZ0IGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmFsdGVybmF0ZV0sIFtgJHtwYXRofS9hbHRlcm5hdGVgXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBgJHtpbmRlbnR9ICBgLCBgJHtwYXRofS9hbHRlcm5hdGVgLCBkZWNsYXJhdGlvbnMpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9fWAsIFwiU3dpZnQgYWx0ZXJuYXRlIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnQuYWx0ZXJuYXRlXSwgW2Ake3BhdGh9L2FsdGVybmF0ZWBdKVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgb25lIHZhbGlkYXRlZCBUYXNrcyAwMDEtMDA0IGV4cHJlc3Npb24gYW5kIHRocmVhZHMgdGhlIHNoYXJlZCBzaW5rIHRocm91Z2ggY2FsbHMuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4cHJlc3Npb24gb2NjdXJyZW5jZSBwYXRoLlxuICogQHBhcmFtIHtNYXA8c3RyaW5nIHwgdW5kZWZpbmVkLCB7ZGVjbGFyYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24sIG1vZHVsZUlkOiBzdHJpbmd9Pn0gZGVjbGFyYXRpb25zIC0gUmVzb2x2ZWQgZnVuY3Rpb25zLlxuICovXG5mdW5jdGlvbiBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGRlY2xhcmF0aW9ucykge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoZXhwcmVzc2lvbi5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChTdHJpbmcoZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U3RyaW5nTGl0ZXJhbChcInN3aWZ0XCIsIGV4cHJlc3Npb24udmFsdWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBkZWNsYXJhdGlvbnMuZ2V0KGV4cHJlc3Npb24ucmVzb2x1dGlvbj8uZGVjbGFyYXRpb25JZClcblxuICAgIGlmICghcmVzb2x2ZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoYFVua25vd24gdmFsaWRhdGVkIGlPUyBmdW5jdGlvbiAnJHtleHByZXNzaW9uLnJlc29sdXRpb24/LmRlY2xhcmF0aW9uSWR9Jy5gKVxuICAgIHdyaXRlci5tYXBwZWQoYFNlbWFudGlmb2xkTW9kdWxlJHttb2R1bGVOYW1lKHJlc29sdmVkLm1vZHVsZUlkKX0uJHtyZXNvbHZlZC5kZWNsYXJhdGlvbi5uYW1lfWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGV4cHJlc3Npb24uY2FsbGVlLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNhbGxlZVwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcImlPUyBzZW1hbnRpYyBmdW5jdGlvbiBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBkZWNsYXJhdGlvbnMpXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiLCBzZW1hbnRpZm9sZF9vdXRwdXQpXCIsIFwic2hhcmVkIGlPUyBvdXRwdXQgc2luayBhcmd1bWVudFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQodW5hcnlPcGVyYXRpb25zW2V4cHJlc3Npb24ub3BlcmF0aW9uXSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBkZWNsYXJhdGlvbnMpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgaU9TIFN3aWZ0IGV4cHJlc3Npb24gcmVhY2hlZCBlbWlzc2lvbi5cIilcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiA/IFwic2VtYW50aWZvbGRfc3RyaW5nX2VxdWFsXCIgOiBcInNlbWFudGlmb2xkX3N0cmluZ19ub3RfZXF1YWxcIixcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGRlY2xhcmF0aW9ucylcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGRlY2xhcmF0aW9ucylcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICB3cml0ZXIubWFwcGVkKGJpbmFyeU9wZXJhdGlvbnNbZXhwcmVzc2lvbi5vcGVyYXRpb25dLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgZGVjbGFyYXRpb25zKVxuICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgdmFsaWRhdGVkIGxvZ2ljYWwgbW9kdWxlIGlkZW50aXR5IHRvIGl0cyBTd2lmdCBuYW1lc3BhY2Ugc3VmZml4LlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gTG9naWNhbCBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZXRlcm1pbmlzdGljIFN3aWZ0IG5hbWVzcGFjZSBzdWZmaXggYW5kIGZpbGVuYW1lLlxuICovXG5mdW5jdGlvbiBtb2R1bGVOYW1lKGlkKSB7XG4gIHJldHVybiBpZC5zcGxpdCgvWy5fLV0rL3UpLm1hcChwYXJ0ID0+IGAke3BhcnRbMF0udG9VcHBlckNhc2UoKX0ke3BhcnQuc2xpY2UoMSl9YCkuam9pbihcIlwiKVxufVxuXG4vKipcbiAqIENsb25lcyBhbmQgbm9ybWFsaXplcyBvbmUgcHJvdmVuYW5jZS1iZWFyaW5nIHNlbWFudGljIG1vZHVsZSBpbnRvIGEgb25lLW1vZHVsZSBwcm9qZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZSB8IHVuZGVmaW5lZH0gY2FuZGlkYXRlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW19IE5vcm1hbGl6ZWQgcHJvZ3JhbS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2luZ2xlTW9kdWxlKGNhbmRpZGF0ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QoY2FuZGlkYXRlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiaW9zXCIsIFwibWlzc2luZyBvciBpbnZhbGlkIG1vZHVsZVwiLCB1bmRlZmluZWQpXG4gIGNvbnN0IG1vZHVsZSA9IHN0cnVjdHVyZWRDbG9uZShjYW5kaWRhdGUpXG4gIGNvbnN0IHByb3ZlbmFuY2VTb3VyY2VzID0gbW9kdWxlLnByb3ZlbmFuY2U/LnNvdXJjZXNcblxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvdmVuYW5jZVNvdXJjZXMpIHx8IHByb3ZlbmFuY2VTb3VyY2VzLmxlbmd0aCAhPSAxIHx8IHByb3ZlbmFuY2VTb3VyY2VzWzBdLmNvbnRlbnQgPT09IG51bGwgfHxcbiAgICBwcm92ZW5hbmNlU291cmNlc1swXS5maWxlbmFtZSAhPSBtb2R1bGUubG9jYXRpb24/LmZpbGVuYW1lIHx8IHR5cGVvZiBwcm92ZW5hbmNlU291cmNlc1swXS5sYW5ndWFnZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiaW9zXCIsIFwic2luZ2xlLW1vZHVsZSBzb3VyY2Ugb3duZXJzaGlwXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICByZWtleU1vZHVsZURlY2xhcmF0aW9ucyhtb2R1bGUsIFwibWFpblwiKVxuICBjb25zdCBleHBvcnRzID0gW1xuICAgIC4uLihtb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKGRlY2xhcmF0aW9uID0+IGFwcGxpY2F0aW9uRXhwb3J0KGRlY2xhcmF0aW9uLCBcInJlY29yZFwiKSksXG4gICAgLi4uKG1vZHVsZS5jbGFzc2VzID8/IFtdKS5tYXAoZGVjbGFyYXRpb24gPT4gYXBwbGljYXRpb25FeHBvcnQoZGVjbGFyYXRpb24sIFwiY2xhc3NcIikpLFxuICAgIC4uLihtb2R1bGUuZXJyb3JzID8/IFtdKS5tYXAoZGVjbGFyYXRpb24gPT4gYXBwbGljYXRpb25FeHBvcnQoZGVjbGFyYXRpb24sIFwiZXJyb3JcIikpLFxuICAgIC4uLm1vZHVsZS5mdW5jdGlvbnMubWFwKGRlY2xhcmF0aW9uID0+IGFwcGxpY2F0aW9uRXhwb3J0KGRlY2xhcmF0aW9uLCBcImZ1bmN0aW9uXCIpKVxuICBdXG4gIGNvbnN0IHByb2dyYW1Nb2R1bGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbU1vZHVsZX0gKi8gKHtcbiAgICAuLi5tb2R1bGUsXG4gICAgZXhwb3J0cyxcbiAgICBpZDogXCJtYWluXCIsXG4gICAgaW1wb3J0czogW10sXG4gICAgc291cmNlRmlsZW5hbWU6IHByb3ZlbmFuY2VTb3VyY2VzWzBdLmZpbGVuYW1lXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBlbnRyeU1vZHVsZTogXCJtYWluXCIsXG4gICAga2luZDogXCJQcm9ncmFtXCIsXG4gICAgbW9kdWxlczogW3Byb2dyYW1Nb2R1bGVdLFxuICAgIHNvdXJjZXM6IHN0cnVjdHVyZWRDbG9uZShwcm92ZW5hbmNlU291cmNlcylcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBub3JtYWxpemVkIGV4cG9ydCBmb3IgYSBzaW5nbGUtbW9kdWxlIGRlY2xhcmF0aW9uIHdpdGhvdXQgaW52ZW50aW5nIGEgc291cmNlIHJhbmdlLlxuICogQHBhcmFtIHt7aWQ/OiBzdHJpbmcsIGxvY2F0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiwgbmFtZTogc3RyaW5nfX0gZGVjbGFyYXRpb24gLSBFeHBvcnRlZCBkZWNsYXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNEZWNsYXJhdGlvbktpbmR9IHN5bWJvbEtpbmQgLSBEZWNsYXJhdGlvbiBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNFeHBvcnR9IFN5bnRoZXRpYyBwcm9qZWN0IGVkZ2UgYW5jaG9yZWQgdG8gaXRzIGRlY2xhcmF0aW9uLlxuICovXG5mdW5jdGlvbiBhcHBsaWNhdGlvbkV4cG9ydChkZWNsYXJhdGlvbiwgc3ltYm9sS2luZCkge1xuICByZXR1cm4ge1xuICAgIGRlY2xhcmF0aW9uSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVjbGFyYXRpb24uaWQpLFxuICAgIGV4cG9ydGVkTmFtZTogZGVjbGFyYXRpb24ubmFtZSxcbiAgICBraW5kOiBcIkV4cG9ydFwiLFxuICAgIGxvY2F0aW9uOiBkZWNsYXJhdGlvbi5sb2NhdGlvbixcbiAgICBzeW1ib2xLaW5kXG4gIH1cbn1cblxuLyoqXG4gKiBQcmVmaXhlcyBkZWNsYXJhdGlvbiBpZGVudGl0aWVzIGFuZCB0eXBlZCByZWZlcmVuY2VzIGluIGEgY2xvbmVkIHNpbmdsZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDbG9uZWQgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIC0gTm9ybWFsaXplZCBtb2R1bGUgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVrZXlNb2R1bGVEZWNsYXJhdGlvbnMobW9kdWxlLCBtb2R1bGVJZCkge1xuICBjb25zdCBkZWNsYXJhdGlvbnMgPSBbLi4ubW9kdWxlLnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZS5jbGFzc2VzID8/IFtdLCAuLi5tb2R1bGUuZXJyb3JzID8/IFtdLCAuLi5tb2R1bGUuZnVuY3Rpb25zXVxuICBjb25zdCByZXBsYWNlbWVudHMgPSBuZXcgTWFwKGRlY2xhcmF0aW9uc1xuICAgIC5maWx0ZXIoZGVjbGFyYXRpb24gPT4gdHlwZW9mIGRlY2xhcmF0aW9uLmlkID09IFwic3RyaW5nXCIpXG4gICAgLm1hcChkZWNsYXJhdGlvbiA9PiBbZGVjbGFyYXRpb24uaWQsIGAke21vZHVsZUlkfSMke2RlY2xhcmF0aW9uLmlkfWBdKSlcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb24uaWQgPT0gXCJzdHJpbmdcIikgZGVjbGFyYXRpb24uaWQgPSByZXBsYWNlbWVudHMuZ2V0KGRlY2xhcmF0aW9uLmlkKVxuICB9XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgY29uc3QgaWRlbnRpdHlGaWVsZHMgPSBuZXcgU2V0KFtcImNsYXNzSWRcIiwgXCJkZWNsYXJhdGlvbklkXCIsIFwiZmllbGRcIiwgXCJtZXRob2RcIiwgXCJwYXJhbWV0ZXJJZFwiXSlcbiAgLyoqXG4gICAqIFJld3JpdGVzIGRlY2xhcmF0aW9uIGlkZW50aXRpZXMgaW4gb25lIGNsb25lZCBzZW1hbnRpYyBzdWJ0cmVlLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHNlbWFudGljIHN1YnRyZWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuXG4gICAgc2Vlbi5hZGQodmFsdWUpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCBuZXN0ZWRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICBpZiAoaWRlbnRpdHlGaWVsZHMuaGFzKGtleSkgJiYgdHlwZW9mIG5lc3RlZCA9PSBcInN0cmluZ1wiICYmIHJlcGxhY2VtZW50cy5oYXMobmVzdGVkKSkge1xuICAgICAgICAgIFJlZmxlY3Quc2V0KHZhbHVlLCBrZXksIHJlcGxhY2VtZW50cy5nZXQobmVzdGVkKSlcbiAgICAgICAgfSBlbHNlIHZpc2l0KG5lc3RlZClcbiAgICAgIH1cbiAgICB9IGVsc2UgZm9yIChjb25zdCBuZXN0ZWQgb2YgdmFsdWUpIHZpc2l0KG5lc3RlZClcbiAgfVxuICB2aXNpdChtb2R1bGUpXG59XG5cbi8qKlxuICogVGVzdHMgZm9yIGEgcGxhaW4gcmVxdWVzdCBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgaXQgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09IE9iamVjdC5wcm90b3R5cGVcbn1cbiJdfQ==
|
|
1503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2lvcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxnQ0FBZ0MsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3hGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBQzdFLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBQzVELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQzVELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFFeEMsNkVBQTZFO0FBQzdFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDakMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLO0NBQ2xJLENBQUMsQ0FBQTtBQUNGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbEMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxj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QUNyRixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO2dCQUNuRCxDQUFDOztvQkFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDdEIsQ0FBQztRQUNILENBQUM7O1lBQU0sS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLO2dCQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ2YsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFLO0lBQzFCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO0FBQ2hJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHtpc0RlbnNlQXJyYXl9IGZyb20gXCIuLi9hcnJheS5qc1wiXG5pbXBvcnQge2ZpbmRQb3J0YWJsZUFydGlmYWN0UGF0aENvbmZsaWN0LCBpc1NhZmVBcnRpZmFjdFBhdGh9IGZyb20gXCIuLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7Y3JlYXRlQnl0ZU1hcHBpbmd9IGZyb20gXCIuLi9iaW5hcnktbWFwcGluZy5qc1wiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2ZpbmFsaXplTWFwcGluZywgdG9Tb3VyY2VNYXBWM30gZnJvbSBcIi4uL21hcHBpbmcuanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcbmltcG9ydCB7cHJlZmxpZ2h0U2VtYW50aWNQcm9ncmFtfSBmcm9tIFwiLi9wcm9ncmFtLmpzXCJcbmltcG9ydCB7ZW1pdFNjYWxhclR5cGUsIGVtaXRTdHJpbmdMaXRlcmFsfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7U291cmNlV3JpdGVyfSBmcm9tIFwiLi93cml0ZXIuanNcIlxuXG4vKiogQHR5cGUge1JlYWRvbmx5PFNldDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlPj59ICovXG5jb25zdCBpb3NTb3VyY2VMYW5ndWFnZXMgPSBuZXcgU2V0KFtcbiAgXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCIsIFwia290bGluXCIsIFwicHl0aG9uXCIsIFwiY3NoYXJwXCIsIFwiZ29cIiwgXCJjXCIsIFwiY3BwXCIsIFwicnVzdFwiLCBcInN3aWZ0XCIsIFwiZGFydFwiLCBcInppZ1wiXG5dKVxuY29uc3QgY29uZmlndXJhdGlvbkZpZWxkcyA9IG5ldyBTZXQoW1xuICBcImJ1bmRsZUlkZW50aWZpZXJcIiwgXCJjYXBhYmlsaXRpZXNcIiwgXCJkZXBsb3ltZW50VGFyZ2V0XCIsIFwiZGlzcGxheU5hbWVcIiwgXCJlbnRpdGxlbWVudHNcIiwgXCJpbmZvUGxpc3RcIiwgXCJsaWZlY3ljbGVcIixcbiAgXCJtb2R1bGVOYW1lXCIsIFwib3JnYW5pemF0aW9uUHJlZml4XCIsIFwicGVybWlzc2lvbnNcIiwgXCJwcml2YWN5RGVjbGFyYXRpb25zXCIsIFwicHJvZHVjdE5hbWVcIiwgXCJyZXNvdXJjZVJvb3RcIiwgXCJzb3VyY2VSb290XCJcbl0pXG5jb25zdCBhc3NldEZpZWxkcyA9IG5ldyBTZXQoW1wiY29udGVudFwiLCBcIm1lZGlhVHlwZVwiLCBcInBhdGhcIiwgXCJzaGEyNTZcIl0pXG5jb25zdCBnZW5lcmF0b3JWZXJzaW9uID0gXCIwLjMuMFwiXG5jb25zdCBleGNsdWRlZFBhdGhQYXR0ZXJucyA9IE9iamVjdC5mcmVlemUoW1xuICBcIioqLyoueGN1c2Vyc3RhdGVcIixcbiAgXCIqKi94Y3VzZXJkYXRhLyoqXCIsXG4gIFwiLnN3aWZ0cG0vKipcIixcbiAgXCJEZXJpdmVkRGF0YS8qKlwiLFxuICBcImJ1aWxkLyoqXCJcbl0pXG5jb25zdCBtZWRpYVR5cGVQYXR0ZXJuID0gL15bQS1aYS16MC05ISMkJl5fListXStcXC9bQS1aYS16MC05ISMkJl5fListXSsoPzo7W1xcdTAwMjAtXFx1MDA3ZV0rKT8kL3VcbmNvbnN0IGJpbmFyeU9wZXJhdGlvbnMgPSBPYmplY3QuZnJlZXplKHtcbiAgQm9vbGVhbkFuZDogXCImJlwiLFxuICBCb29sZWFuRXF1YWw6IFwiPT1cIixcbiAgQm9vbGVhbk5vdEVxdWFsOiBcIiE9XCIsXG4gIEJvb2xlYW5PcjogXCJ8fFwiLFxuICBJbnRlZ2VyQWRkOiBcIitcIixcbiAgSW50ZWdlckVxdWFsOiBcIj09XCIsXG4gIEludGVnZXJHcmVhdGVyVGhhbjogXCI+XCIsXG4gIEludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWw6IFwiPj1cIixcbiAgSW50ZWdlckxlc3NUaGFuOiBcIjxcIixcbiAgSW50ZWdlckxlc3NUaGFuT3JFcXVhbDogXCI8PVwiLFxuICBJbnRlZ2VyTXVsdGlwbHk6IFwiKlwiLFxuICBJbnRlZ2VyTm90RXF1YWw6IFwiIT1cIixcbiAgSW50ZWdlclN1YnRyYWN0OiBcIi1cIixcbiAgU3RyaW5nQ29uY2F0OiBcIitcIixcbiAgU3RyaW5nRXF1YWw6IFwiPT1cIixcbiAgU3RyaW5nTm90RXF1YWw6IFwiIT1cIlxufSlcbmNvbnN0IHVuYXJ5T3BlcmF0aW9ucyA9IE9iamVjdC5mcmVlemUoe0Jvb2xlYW5Ob3Q6IFwiIVwiLCBJbnRlZ2VyTmVnYXRlOiBcIi1cIn0pXG5jb25zdCBpb3NTd2lmdFJ1bnRpbWUgPSBgZmluYWwgY2xhc3MgU2VtYW50aWZvbGRPdXRwdXRTaW5rIHtcbiAgcHJpdmF0ZShzZXQpIHZhciBsaW5lczogW1N0cmluZ10gPSBbXVxuXG4gIGZ1bmMgd3JpdGUoXyB2YWx1ZTogSW50NjQpIHtcbiAgICBsaW5lcy5hcHBlbmQoU3RyaW5nKHZhbHVlKSlcbiAgfVxuXG4gIGZ1bmMgd3JpdGUoXyB2YWx1ZTogQm9vbCkge1xuICAgIGxpbmVzLmFwcGVuZCh2YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKVxuICB9XG5cbiAgZnVuYyB3cml0ZShfIHZhbHVlOiBTdHJpbmcpIHtcbiAgICBsaW5lcy5hcHBlbmQodmFsdWUpXG4gIH1cbn1cblxuZnVuYyBzZW1hbnRpZm9sZF9zdHJpbmdfZXF1YWwoXyBsZWZ0OiBTdHJpbmcsIF8gcmlnaHQ6IFN0cmluZykgLT4gQm9vbCB7XG4gIHJldHVybiBsZWZ0LnVuaWNvZGVTY2FsYXJzLmVsZW1lbnRzRXF1YWwocmlnaHQudW5pY29kZVNjYWxhcnMpXG59XG5cbmZ1bmMgc2VtYW50aWZvbGRfc3RyaW5nX25vdF9lcXVhbChfIGxlZnQ6IFN0cmluZywgXyByaWdodDogU3RyaW5nKSAtPiBCb29sIHtcbiAgcmV0dXJuICFsZWZ0LnVuaWNvZGVTY2FsYXJzLmVsZW1lbnRzRXF1YWwocmlnaHQudW5pY29kZVNjYWxhcnMpXG59XG5cbmZ1bmMgc2VtYW50aWZvbGRfa2VlcF9tdXRhYmxlPFQ+KF8gdmFsdWU6IGlub3V0IFQpIHtcbn1cbmBcblxuLyoqIEB0eXBlZGVmIHt7Y29udGVudDogc3RyaW5nLCBmaWVsZDogc3RyaW5nfX0gQ29uZmlndXJhdGlvbkZyYWdtZW50ICovXG4vKiogQHR5cGVkZWYge3N0cmluZyB8IENvbmZpZ3VyYXRpb25GcmFnbWVudH0gQ29uZmlndXJhdGlvblRleHRQYXJ0ICovXG4vKiogQHR5cGVkZWYge3N0cmluZyB8IHJlYWRvbmx5IENvbmZpZ3VyYXRpb25UZXh0UGFydFtdfSBDb25maWd1cmF0aW9uTGluZSAqL1xuLyoqIEB0eXBlZGVmIHt7ZW5kOiBudW1iZXIsIGZpZWxkOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXJ9fSBDb25maWd1cmF0aW9uU3BhbiAqL1xuLyoqIEB0eXBlZGVmIHt7Y29udGVudDogc3RyaW5nLCBjb25maWd1cmF0aW9uU3BhbnM6IENvbmZpZ3VyYXRpb25TcGFuW119fSBSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0ICovXG4vKiogQHR5cGVkZWYge3tlbmQ6IG51bWJlciwgZmllbGQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCBzdGFydDogbnVtYmVyfX0gQ29uZmlndXJhdGlvbkFydGlmYWN0U3BhbiAqL1xuXG4vKiogUmVjb3JkcyBjb25maWd1cmF0aW9uIGNhdXNhbGl0eSB3aGlsZSBhbiBvd25pbmcgcmVuZGVyZXIgZW1pdHMgdGV4dC4gKi9cbmNsYXNzIENvbmZpZ3VyYXRpb25UZXh0V3JpdGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb250ZW50ID0gXCJcIlxuICAgIC8qKiBAdHlwZSB7Q29uZmlndXJhdGlvblNwYW5bXX0gKi9cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TcGFucyA9IFtdXG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBsaXRlcmFsIG9yIGZpZWxkLW93bmVkIHRleHQuXG4gICAqIEBwYXJhbSB7Q29uZmlndXJhdGlvblRleHRQYXJ0IHwgcmVhZG9ubHkgQ29uZmlndXJhdGlvblRleHRQYXJ0W119IHZhbHVlIC0gT3JkZXJlZCBvdXRwdXQgdGV4dC5cbiAgICovXG4gIGFwcGVuZCh2YWx1ZSkge1xuICAgIGNvbnN0IHBhcnRzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV1cblxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhpcy5jb250ZW50ICs9IHBhcnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jb250ZW50Lmxlbmd0aFxuXG4gICAgICAgIHRoaXMuY29udGVudCArPSBwYXJ0LmNvbnRlbnRcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU3BhbnMucHVzaCh7ZW5kOiB0aGlzLmNvbnRlbnQubGVuZ3RoLCBmaWVsZDogcGFydC5maWVsZCwgc3RhcnR9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5pc2hlcyByZW5kZXJlci1vd25lZCB0ZXh0IGNvbGxlY3Rpb24uXG4gICAqIEByZXR1cm5zIHtSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0fSBGaW5pc2hlZCBjb250ZW50IGFuZCBjYXVzYWwgc3BhbnMuXG4gICAqL1xuICBmaW5pc2goKSB7XG4gICAgcmV0dXJuIHtjb25maWd1cmF0aW9uU3BhbnM6IHRoaXMuY29uZmlndXJhdGlvblNwYW5zLCBjb250ZW50OiB0aGlzLmNvbnRlbnR9XG4gIH1cbn1cblxuLyoqXG4gKiBNYXJrcyB0ZXh0IGFzIGNhdXNhbGx5IG93bmVkIGJ5IG9uZSBub3JtYWxpemVkIGNvbmZpZ3VyYXRpb24gZmllbGQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgLSBDb25maWd1cmF0aW9uIGZpZWxkLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBFeGFjdCByZW5kZXJlZCB0b2tlbiBjb250ZW50LlxuICogQHJldHVybnMge0NvbmZpZ3VyYXRpb25GcmFnbWVudH0gVGFnZ2VkIHRva2VuLlxuICovXG5mdW5jdGlvbiBjb25maWd1cmF0aW9uRnJhZ21lbnQoZmllbGQsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIHtjb250ZW50LCBmaWVsZH1cbn1cblxuLyoqXG4gKiBQcmVmbGlnaHRzIG9uZSBjb21wbGV0ZSBwcm9qZWN0IGFnYWluc3QgdGhlIGRlbGl2ZXJlZCBTd2lmdCBUYXNrcyAwMDEtMDA0IHByb2ZpbGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBpT1MgYXBwbGljYXRpb24gZ2VuZXJhdGlvbiBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFtpbnB1dC5tb2R1bGVdIC0gU2luZ2xlIG1vZHVsZSB0byBub3JtYWxpemUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljUHJvZ3JhbX0gW2lucHV0LnByb2dyYW1dIC0gQ2FsbGVyLW93bmVkIFRhc2sgMDEwIHByb2plY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbklucHV0fSBbaW5wdXQuY29uZmlndXJhdGlvbl0gLSBDbG9zZWQgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Bc3NldElucHV0W119IFtpbnB1dC5hc3NldHNdIC0gRXhhY3QgY2FsbGVyLXByb3ZpZGVkIGFzc2V0cy5cbiAqIEByZXR1cm5zIHt7YXNzZXRzOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkFzc2V0SW5wdXRbXSwgY29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9uLCBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiwgbW9kdWxlczogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGVbXSwgcHJvZ3JhbTogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtLCBzb3VyY2VzOiB7Y29udGVudDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119fSBQcmVwYXJlZCBhcHBsaWNhdGlvbiBwcm9ncmFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZmxpZ2h0SW9zQXBwbGljYXRpb24oaW5wdXQpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0KSB8fCBCb29sZWFuKGlucHV0Lm1vZHVsZSkgPT0gQm9vbGVhbihpbnB1dC5wcm9ncmFtKSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJJTlZBTElEX0FQUExJQ0FUSU9OX0lOUFVUXCIsXG4gICAgICBsYW5ndWFnZTogXCJpb3NcIixcbiAgICAgIG1lc3NhZ2U6IFwiaU9TIGFwcGxpY2F0aW9uIGdlbmVyYXRpb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc2VtYW50aWMgbW9kdWxlIG9yIHByb2dyYW0uXCJcbiAgICB9KVxuICB9XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBub3JtYWxpemVDb25maWd1cmF0aW9uKGlucHV0LmNvbmZpZ3VyYXRpb24pXG4gIGNvbnN0IHByb2dyYW0gPSBpbnB1dC5wcm9ncmFtID8/IG5vcm1hbGl6ZVNpbmdsZU1vZHVsZShpbnB1dC5tb2R1bGUpXG4gIGNvbnN0IHByZXBhcmVkID0gcHJlZmxpZ2h0U2VtYW50aWNQcm9ncmFtKHtcbiAgICBiYWNrZW5kTGFuZ3VhZ2U6IFwic3dpZnRcIixcbiAgICBkaWFnbm9zdGljTGFuZ3VhZ2U6IFwiaW9zXCIsXG4gICAgcHJvZ3JhbSxcbiAgICBzb3VyY2VMYW5ndWFnZXM6IGlvc1NvdXJjZUxhbmd1YWdlc1xuICB9KVxuICBjb25zdCBtb2R1bGVQYXRocyA9IG5ldyBNYXAocHJlcGFyZWQubW9kdWxlcy5tYXAobW9kdWxlID0+IFtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi8gKFJlZmxlY3QuZ2V0KG1vZHVsZSwgXCJpZFwiKSksXG4gICAgYCR7Y29uZmlndXJhdGlvbi5zb3VyY2VSb290fS9HZW5lcmF0ZWQvJHttb2R1bGVOYW1lKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoUmVmbGVjdC5nZXQobW9kdWxlLCBcImlkXCIpKSl9LnN3aWZ0YFxuICBdKSlcbiAgY29uc3QgYXNzZXRzID0gbm9ybWFsaXplQXNzZXRzKGlucHV0LmFzc2V0cywgY29uZmlndXJhdGlvbi5yZXNvdXJjZVJvb3QpXG4gIGNvbnN0IGNvbmZsaWN0ID0gZmluZFBvcnRhYmxlQXJ0aWZhY3RQYXRoQ29uZmxpY3QoW1xuICAgIGAke2NvbmZpZ3VyYXRpb24uc291cmNlUm9vdH0vR2VuZXJhdGVkL1NlbWFudGlmb2xkUnVudGltZS5zd2lmdGAsXG4gICAgLi4ubW9kdWxlUGF0aHMudmFsdWVzKCksXG4gICAgYCR7Y29uZmlndXJhdGlvbi5yZXNvdXJjZVJvb3R9L0NvbnRlbnRzLmpzb25gLFxuICAgIC4uLmFzc2V0cy5tYXAoKHtwYXRofSkgPT4gcGF0aClcbiAgXSlcblxuICBpZiAoY29uZmxpY3QpIGludmFsaWRQYXRoKGBBcHBsaWNhdGlvbiBhcnRpZmFjdCBwYXRoICcke2NvbmZsaWN0LnBhdGh9JyBoYXMgYSAke2NvbmZsaWN0LmtpbmR9IGNvbmZsaWN0JHtjb25mbGljdC5vdGhlciA/IGAgd2l0aCAnJHtjb25mbGljdC5vdGhlcn0nYCA6IFwiXCJ9LmApXG5cbiAgcmV0dXJuIHsuLi5wcmVwYXJlZCwgYXNzZXRzLCBjb25maWd1cmF0aW9uLCBtb2R1bGVQYXRoc31cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGRldGVybWluaXN0aWMgc2VtYW50aWMgU3dpZnQgcG9ydGlvbiBvZiBvbmUgaU9TIGFwcGxpY2F0aW9uIGFydGlmYWN0IHNldC5cbiAqIEBwYXJhbSB7UGFyYW1ldGVyczx0eXBlb2YgcHJlZmxpZ2h0SW9zQXBwbGljYXRpb24+WzBdfSBpbnB1dCAtIGlPUyBnZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7e2FydGlmYWN0czogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXSwgbWV0YWRhdGE6IHthcHBsaWNhdGlvbk1hbmlmZXN0OiBzdHJpbmcsIHBsYXRmb3JtUXVhbGlmaWNhdGlvbjogc3RyaW5nfSwgdGFyZ2V0OiBcImlvc1wifX0gQ2FuZGlkYXRlIGFydGlmYWN0IHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSW9zQXBwbGljYXRpb24oaW5wdXQpIHtcbiAgY29uc3QgcHJlcGFyZWQgPSBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbihpbnB1dClcbiAgY29uc3Qgc2VtYW50aWNBcnRpZmFjdHMgPSByZW5kZXJTZW1hbnRpY0FydGlmYWN0cyhwcmVwYXJlZClcbiAgY29uc3QgYXBwbGljYXRpb25QYXRocyA9IGFwcGxpY2F0aW9uQXJ0aWZhY3RQYXRocyhwcmVwYXJlZClcbiAgY29uc3QgcHJvamVjdCA9IHJlbmRlclBieFByb2plY3QocHJlcGFyZWQsIGFwcGxpY2F0aW9uUGF0aHMpXG4gIGNvbnN0IHNjaGVtZSA9IHJlbmRlclNoYXJlZFNjaGVtZShwcmVwYXJlZClcbiAgY29uc3QgYmFzZUNvbmZpZ3VyYXRpb24gPSByZW5kZXJCYXNlQ29uZmlndXJhdGlvbihwcmVwYXJlZC5jb25maWd1cmF0aW9uKVxuICBjb25zdCBpbmZvUGxpc3QgPSByZW5kZXJJbmZvUGxpc3QocHJlcGFyZWQuY29uZmlndXJhdGlvbilcbiAgY29uc3QgdW5pdFRlc3RzID0gcmVuZGVyVW5pdFRlc3RzKHByZXBhcmVkLmNvbmZpZ3VyYXRpb24pXG4gIGNvbnN0IHVpVGVzdHMgPSByZW5kZXJVaVRlc3RzKHByZXBhcmVkLmNvbmZpZ3VyYXRpb24pXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwcmVwYXJlZC5jb25maWd1cmF0aW9uXG4gIGNvbnN0IGVudHJ5TmFtZXNwYWNlID0gYFNlbWFudGlmb2xkTW9kdWxlJHttb2R1bGVOYW1lKHByZXBhcmVkLnByb2dyYW0uZW50cnlNb2R1bGUpfWBcbiAgY29uc3QgYXBwID0gYGltcG9ydCBTd2lmdFVJXG5cbkBtYWluXG5zdHJ1Y3QgU2VtYW50aWZvbGRBcHBsaWNhdGlvbjogQXBwIHtcbiAgdmFyIGJvZHk6IHNvbWUgU2NlbmUge1xuICAgIFdpbmRvd0dyb3VwIHtcbiAgICAgIFNlbWFudGlmb2xkT3V0cHV0VmlldyhsaW5lczogU2VtYW50aWZvbGRCcmlkZ2UucnVuKCkpXG4gICAgfVxuICB9XG59XG5gXG4gIGNvbnN0IGJyaWRnZSA9IGBlbnVtIFNlbWFudGlmb2xkQnJpZGdlIHtcbiAgc3RhdGljIGZ1bmMgcnVuKCkgLT4gW1N0cmluZ10ge1xuICAgIHJldHVybiAke2VudHJ5TmFtZXNwYWNlfS5zZW1hbnRpZm9sZEVudHJ5KClcbiAgfVxufVxuYFxuICBjb25zdCB2aWV3ID0gYGltcG9ydCBTd2lmdFVJXG5cbnN0cnVjdCBTZW1hbnRpZm9sZE91dHB1dFZpZXc6IFZpZXcge1xuICBsZXQgbGluZXM6IFtTdHJpbmddXG5cbiAgdmFyIGJvZHk6IHNvbWUgVmlldyB7XG4gICAgVGV4dChsaW5lcy5qb2luZWQoc2VwYXJhdG9yOiBcIlxcXFxuXCIpKVxuICAgICAgLmFjY2Vzc2liaWxpdHlJZGVudGlmaWVyKFwic2VtYW50aWZvbGQtb3V0cHV0XCIpXG4gIH1cbn1cbmBcbiAgY29uc3QgcHJvZHVjdCA9IGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWVcbiAgLyoqIEB0eXBlIHtDb25maWd1cmF0aW9uQXJ0aWZhY3RTcGFuW119ICovXG4gIGNvbnN0IGNvbmZpZ3VyYXRpb25TcGFucyA9IFtdXG4gIGNvbnN0IGFydGlmYWN0cyA9IFtcbiAgICBjb25maWd1cmVkU3ludGhldGljVGV4dChgJHtwcm9kdWN0fS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qYCwgXCJtYW5pZmVzdFwiLCBwcm9qZWN0LFxuICAgICAgY29uZmlndXJhdGlvblNwYW5zLFxuICAgICAgXCJDYW5vbmljYWwgZGV0ZXJtaW5pc3RpYyBYY29kZSBwcm9qZWN0IHN0cnVjdHVyZS5cIiksXG4gICAgY29uZmlndXJlZFN5bnRoZXRpY1RleHQoYCR7cHJvZHVjdH0ueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvJHtwcm9kdWN0fS54Y3NjaGVtZWAsIFwic3VwcG9ydFwiLFxuICAgICAgc2NoZW1lLCBjb25maWd1cmF0aW9uU3BhbnMsIFwiQ2Fub25pY2FsIHNoYXJlZCBYY29kZSBhcHBsaWNhdGlvbi90ZXN0IHNjaGVtZS5cIiksXG4gICAgY29uZmlndXJlZFN5bnRoZXRpY1RleHQoXCJDb25maWd1cmF0aW9uL0Jhc2UueGNjb25maWdcIiwgXCJzdXBwb3J0XCIsIGJhc2VDb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uU3BhbnMsXG4gICAgICBcIkNsb3NlZCB1bnNpZ25lZCBpT1MgYnVpbGQgY29uZmlndXJhdGlvbi5cIiksXG4gICAgY29uZmlndXJlZFN5bnRoZXRpY1RleHQoXCJDb25maWd1cmF0aW9uL0luZm8ucGxpc3RcIiwgXCJzdXBwb3J0XCIsIGluZm9QbGlzdCwgY29uZmlndXJhdGlvblNwYW5zLFxuICAgICAgXCJBbGxvd2xpc3RlZCBpT1MgYXBwbGljYXRpb24gcHJvcGVydHkgbGlzdC5cIiksXG4gICAgLi4uc2VtYW50aWNBcnRpZmFjdHMsXG4gICAgc3ludGhldGljVGV4dChcIlNvdXJjZXMvQXBwbGljYXRpb24vQXBwLnN3aWZ0XCIsIFwiZW50cnlcIiwgYXBwLCBcIlN5bnRoZXRpYyBTd2lmdFVJIGFwcGxpY2F0aW9uIGxpZmVjeWNsZS5cIiksXG4gICAgc3ludGhldGljVGV4dChcIlNvdXJjZXMvQXBwbGljYXRpb24vU2VtYW50aWZvbGRCcmlkZ2Uuc3dpZnRcIiwgXCJzdXBwb3J0XCIsIGJyaWRnZSxcbiAgICAgIFwiU3ludGhldGljIGJyaWRnZSBmcm9tIFN3aWZ0VUkgdG8gdGhlIHNlbWFudGljIGVudHJ5LlwiKSxcbiAgICBzeW50aGV0aWNUZXh0KFwiU291cmNlcy9BcHBsaWNhdGlvbi9TZW1hbnRpZm9sZE91dHB1dFZpZXcuc3dpZnRcIiwgXCJzdXBwb3J0XCIsIHZpZXcsXG4gICAgICBcIlN5bnRoZXRpYyBzdGFibGUgdGV4dCBvdXRwdXQgdmlldyBhbmQgYWNjZXNzaWJpbGl0eSBpZGVudGlmaWVyLlwiKSxcbiAgICBzeW50aGV0aWNUZXh0KFwiQXNzZXRzLnhjYXNzZXRzL0NvbnRlbnRzLmpzb25cIiwgXCJyZXNvdXJjZVwiLCBzdHJpbmdpZnlDYW5vbmljYWxKc29uKHtcbiAgICAgIGluZm86IHthdXRob3I6IFwic2VtYW50aWZvbGRcIiwgdmVyc2lvbjogMX1cbiAgICB9KSwgXCJCYXNlIGFzc2V0LWNhdGFsb2cgbWV0YWRhdGE7IG5vIGFwcGxpY2F0aW9uIGljb24gaXMgc3ludGhlc2l6ZWQuXCIpLFxuICAgIC4uLnByZXBhcmVkLmFzc2V0cy5tYXAoYXNzZXRBcnRpZmFjdCksXG4gICAgY29uZmlndXJlZFN5bnRoZXRpY1RleHQoYFRlc3RzLyR7cHJvZHVjdH1UZXN0cy5zd2lmdGAsIFwic3VwcG9ydFwiLCB1bml0VGVzdHMsIGNvbmZpZ3VyYXRpb25TcGFucyxcbiAgICAgIFwiU3ludGhldGljIHB1cmUtbG9naWMgZGV0ZXJtaW5pc20gWENUZXN0IHNvdXJjZS5cIiksXG4gICAgY29uZmlndXJlZFN5bnRoZXRpY1RleHQoYFVJVGVzdHMvJHtwcm9kdWN0fVVJVGVzdHMuc3dpZnRgLCBcInN1cHBvcnRcIiwgdWlUZXN0cywgY29uZmlndXJhdGlvblNwYW5zLFxuICAgICAgXCJTeW50aGV0aWMgWENVSSBhY2Nlc3NpYmlsaXR5LXJvdXRlIHRlc3Qgc291cmNlLlwiKVxuICBdXG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IFwic2VtYW50aWZvbGQtcHJvamVjdC5qc29uXCJcblxuICBhcnRpZmFjdHMucHVzaChzeW50aGV0aWNUZXh0KG1hbmlmZXN0UGF0aCwgXCJtYW5pZmVzdFwiLFxuICAgIHJlbmRlclByb2plY3RNYW5pZmVzdChwcmVwYXJlZCwgYXJ0aWZhY3RzLCBtYW5pZmVzdFBhdGgsIGNvbmZpZ3VyYXRpb25TcGFucyksXG4gICAgXCJWZXJzaW9uZWQgaU9TIHByb2plY3Qgb3duZXJzaGlwIGFuZCBwcm92ZW5hbmNlIG1hbmlmZXN0LlwiKSlcblxuICByZXR1cm4ge1xuICAgIGFydGlmYWN0cyxcbiAgICBtZXRhZGF0YToge2FwcGxpY2F0aW9uTWFuaWZlc3Q6IG1hbmlmZXN0UGF0aCwgcGxhdGZvcm1RdWFsaWZpY2F0aW9uOiBcImRlZmVycmVkXCJ9LFxuICAgIHRhcmdldDogXCJpb3NcIlxuICB9XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29tcGxldGUgZGV0ZXJtaW5pc3RpYyBhcHBsaWNhdGlvbiBvd25lcnNoaXAgYW5kIHByb3ZlbmFuY2UgcmVjb3JkLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj59IHByZXBhcmVkIC0gRnVsbHkgcHJlZmxpZ2h0ZWQgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W119IGFydGlmYWN0cyAtIEFsbCBub24tbWFuaWZlc3Qgb3V0cHV0IGFydGlmYWN0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtYW5pZmVzdFBhdGggLSBPd25lZCBtYW5pZmVzdCBwYXRoLlxuICogQHBhcmFtIHtDb25maWd1cmF0aW9uQXJ0aWZhY3RTcGFuW119IGNvbmZpZ3VyYXRpb25TcGFucyAtIFJlbmRlcmVyLW93bmVkIGNvbmZpZ3VyYXRpb24gcmFuZ2VzLlxuICogQHJldHVybnMge3N0cmluZ30gQ2Fub25pY2FsIG1hbmlmZXN0IEpTT04uXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclByb2plY3RNYW5pZmVzdChwcmVwYXJlZCwgYXJ0aWZhY3RzLCBtYW5pZmVzdFBhdGgsIGNvbmZpZ3VyYXRpb25TcGFucykge1xuICBjb25zdCBhc3NldFBhdGhzID0gbmV3IFNldChwcmVwYXJlZC5hc3NldHMubWFwKCh7cGF0aH0pID0+IHBhdGgpKVxuICBjb25zdCBzZW1hbnRpY0FydGlmYWN0cyA9IGFydGlmYWN0cy5maWx0ZXIoYXJ0aWZhY3QgPT4gYXJ0aWZhY3QucHJvdmVuYW5jZS5raW5kID09IFwidGV4dFwiKVxuICBjb25zdCBjb25maWd1cmF0aW9uID0gcHJlcGFyZWQuY29uZmlndXJhdGlvblxuXG4gIHJldHVybiBzdHJpbmdpZnlDYW5vbmljYWxKc29uKHtcbiAgICBjb25maWd1cmF0aW9uLFxuICAgIGdlbmVyYXRvcjoge25hbWU6IFwic2VtYW50aWZvbGRcIiwgdmVyc2lvbjogZ2VuZXJhdG9yVmVyc2lvbn0sXG4gICAgb3duZXJzaGlwOiB7XG4gICAgICBleGNsdWRlZFBhdGhQYXR0ZXJucyxcbiAgICAgIG93bmVkUGF0aHM6IFsuLi5hcnRpZmFjdHMubWFwKCh7cGF0aH0pID0+IHBhdGgpLCBtYW5pZmVzdFBhdGhdXG4gICAgfSxcbiAgICBwbGF0Zm9ybVJlcXVpcmVtZW50czoge1xuICAgICAgYXBwbGVTZGs6IHtzdGF0dXM6IFwiZGVmZXJyZWRcIn0sXG4gICAgICBpb3NTaW11bGF0b3I6IHtzdGF0dXM6IFwiZGVmZXJyZWRcIn0sXG4gICAgICBtYWNvc0hvc3Q6IHtzdGF0dXM6IFwiZGVmZXJyZWRcIn0sXG4gICAgICBzd2lmdGM6IHtzdGF0dXM6IFwiZGVmZXJyZWRcIn0sXG4gICAgICB4Y29kZToge3N0YXR1czogXCJkZWZlcnJlZFwifSxcbiAgICAgIHhjdGVzdDoge3N0YXR1czogXCJkZWZlcnJlZFwifSxcbiAgICAgIHhjdWlhdXRvbWF0aW9uOiB7c3RhdHVzOiBcImRlZmVycmVkXCJ9XG4gICAgfSxcbiAgICBwcm92ZW5hbmNlOiB7XG4gICAgICBhc3NldHM6IHByZXBhcmVkLmFzc2V0cy5tYXAoYXNzZXQgPT4gKHtcbiAgICAgICAgY29udGVudEtpbmQ6IHR5cGVvZiBhc3NldC5jb250ZW50ID09IFwic3RyaW5nXCIgPyBcInRleHRcIiA6IFwiYmluYXJ5XCIsXG4gICAgICAgIG1lZGlhVHlwZTogYXNzZXQubWVkaWFUeXBlLFxuICAgICAgICBwYXRoOiBhc3NldC5wYXRoLFxuICAgICAgICBzaGEyNTY6IGFzc2V0LnNoYTI1NlxuICAgICAgfSkpLFxuICAgICAgY29uZmlndXJhdGlvbjogT2JqZWN0LmtleXMoY29uZmlndXJhdGlvbikuc29ydCgpLm1hcChmaWVsZCA9PiAoe1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgbWFuaWZlc3RQb2ludGVyOiBgL2NvbmZpZ3VyYXRpb24vJHtmaWVsZH1gLFxuICAgICAgICBvdXRwdXRzOiBjb25maWd1cmF0aW9uT3V0cHV0Q2l0YXRpb25zKGNvbmZpZ3VyYXRpb25TcGFucywgZmllbGQpXG4gICAgICB9KSksXG4gICAgICBzZW1hbnRpY1NvdXJjZXM6IHByZXBhcmVkLnNvdXJjZXMubWFwKHNvdXJjZSA9PiAoe1xuICAgICAgICBhcnRpZmFjdHM6IHNlbWFudGljQXJ0aWZhY3RzLmZpbHRlcihhcnRpZmFjdCA9PiBhcnRpZmFjdC5wcm92ZW5hbmNlLmtpbmQgPT0gXCJ0ZXh0XCIgJiZcbiAgICAgICAgICBhcnRpZmFjdC5wcm92ZW5hbmNlLm1hcHBpbmcuc3BhbnMuc29tZSgoe29yaWdpbn0pID0+IG9yaWdpblJlZmVyZW5jZXNGaWxlbmFtZShvcmlnaW4sIHNvdXJjZS5maWxlbmFtZSkpKVxuICAgICAgICAgIC5tYXAoKHtwYXRofSkgPT4gcGF0aCksXG4gICAgICAgIGZpbGVuYW1lOiBzb3VyY2UuZmlsZW5hbWUsXG4gICAgICAgIC4uLihzb3VyY2UubGFuZ3VhZ2UgPT09IHVuZGVmaW5lZCA/IHt9IDoge2xhbmd1YWdlOiBzb3VyY2UubGFuZ3VhZ2V9KSxcbiAgICAgICAgc2hhMjU2OiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShzb3VyY2UuY29udGVudCkuZGlnZXN0KFwiaGV4XCIpXG4gICAgICB9KSksXG4gICAgICBzeW50aGV0aWNTY2FmZm9sZGluZzogW1xuICAgICAgICAuLi5hcnRpZmFjdHMuZmlsdGVyKGFydGlmYWN0ID0+IGFydGlmYWN0LnByb3ZlbmFuY2Uua2luZCA9PSBcInN5bnRoZXRpY1wiICYmICFhc3NldFBhdGhzLmhhcyhhcnRpZmFjdC5wYXRoKSlcbiAgICAgICAgICAubWFwKCh7cGF0aH0pID0+IHBhdGgpLFxuICAgICAgICBtYW5pZmVzdFBhdGhcbiAgICAgIF1cbiAgICB9LFxuICAgIHNjaGVtYTogXCJTZW1hbnRpZm9sZElvc1Byb2plY3RcIixcbiAgICBzZW1hbnRpY1Byb2dyYW06IHNlbWFudGljUHJvZ3JhbU1hbmlmZXN0KHByZXBhcmVkKSxcbiAgICB0YXJnZXQ6IFwiaW9zXCIsXG4gICAgdmVyc2lvbjogMVxuICB9KVxufVxuXG4vKipcbiAqIFJlY29yZHMgc3RhYmxlIHNlbWFudGljIGlucHV0IGlkZW50aXRpZXMgYW5kIHRoZWlyIGdlbmVyYXRlZCBTd2lmdCBsaW5rYWdlLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj59IHByZXBhcmVkIC0gRnVsbHkgcHJlZmxpZ2h0ZWQgYXBwbGljYXRpb24uXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IFZlcnNpb25lZCBzZW1hbnRpYy1wcm9ncmFtIG1hbmlmZXN0IHNlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNlbWFudGljUHJvZ3JhbU1hbmlmZXN0KHByZXBhcmVkKSB7XG4gIGNvbnN0IG1vZHVsZUlkcyA9IG5ldyBNYXAocHJlcGFyZWQucHJvZ3JhbS5tb2R1bGVzLm1hcCgobW9kdWxlLCBpbmRleCkgPT4gW21vZHVsZS5pZCwgaW5kZXhdKSlcbiAgY29uc3Qgc291cmNlQ29udGVudCA9IG5ldyBNYXAocHJlcGFyZWQuc291cmNlcy5tYXAoc291cmNlID0+IFtzb3VyY2UuZmlsZW5hbWUsIHNvdXJjZS5jb250ZW50XSkpXG4gIGNvbnN0IG1vZHVsZXMgPSBwcmVwYXJlZC5wcm9ncmFtLm1vZHVsZXMubWFwKG1vZHVsZSA9PiB7XG4gICAgY29uc3QgaWQgPSBtb2R1bGUuaWRcbiAgICBjb25zdCBwYXRoID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwcmVwYXJlZC5tb2R1bGVQYXRocy5nZXQoaWQpKVxuICAgIGNvbnN0IHNvdXJjZSA9IHByZXBhcmVkLnByb2dyYW0uc291cmNlcy5maW5kKGNhbmRpZGF0ZSA9PiBjYW5kaWRhdGUuZmlsZW5hbWUgPT0gbW9kdWxlLnNvdXJjZUZpbGVuYW1lKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBzb3VyY2VDb250ZW50LmdldChtb2R1bGUuc291cmNlRmlsZW5hbWUpXG5cbiAgICBpZiAoIXNvdXJjZSB8fCBjb250ZW50ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoYFByZWZsaWdodGVkIGlPUyBtb2R1bGUgJyR7aWR9JyBsb3N0IGl0cyBzb3VyY2Ugb3duZXJzaGlwLmApXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gWy4uLm5ldyBTZXQobW9kdWxlLmltcG9ydHMubWFwKCh7bW9kdWxlSWR9KSA9PiBtb2R1bGVJZCkpXVxuICAgICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAvKiogQHR5cGUge251bWJlcn0gKi8gKG1vZHVsZUlkcy5nZXQobGVmdCkpIC0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChtb2R1bGVJZHMuZ2V0KHJpZ2h0KSkpXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgZ2VuZXJhdGVkQXJ0aWZhY3RzOiBbcGF0aF0sXG4gICAgICBpZCxcbiAgICAgIG5hbWVzcGFjZTogYFNlbWFudGlmb2xkTW9kdWxlJHttb2R1bGVOYW1lKGlkKX1gLFxuICAgICAgc291cmNlOiB7XG4gICAgICAgIGZpbGVuYW1lOiBzb3VyY2UuZmlsZW5hbWUsXG4gICAgICAgIGlkOiBzb3VyY2UuaWQsXG4gICAgICAgIHNoYTI1NjogY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoY29udGVudCkuZGlnZXN0KFwiaGV4XCIpXG4gICAgICB9XG4gICAgfVxuICB9KVxuICBjb25zdCBzb3VyY2VzID0gcHJlcGFyZWQucHJvZ3JhbS5zb3VyY2VzLm1hcChzb3VyY2UgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBzb3VyY2VDb250ZW50LmdldChzb3VyY2UuZmlsZW5hbWUpXG5cbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBQcmVmbGlnaHRlZCBpT1Mgc291cmNlICcke3NvdXJjZS5maWxlbmFtZX0nIGxvc3QgaXRzIGNvbnRlbnQuYClcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlbmFtZTogc291cmNlLmZpbGVuYW1lLFxuICAgICAgaWQ6IHNvdXJjZS5pZCxcbiAgICAgIGxhbmd1YWdlOiBzb3VyY2UubGFuZ3VhZ2UsXG4gICAgICBtb2R1bGVJZHM6IG1vZHVsZXMuZmlsdGVyKG1vZHVsZSA9PiBtb2R1bGUuc291cmNlLmZpbGVuYW1lID09IHNvdXJjZS5maWxlbmFtZSkubWFwKCh7aWR9KSA9PiBpZCksXG4gICAgICBvd25lcnNoaXA6IHNvdXJjZS5vd25lcnNoaXAgPz8gXCJhcHBsaWNhdGlvblwiLFxuICAgICAgc2hhMjU2OiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoXCJoZXhcIilcbiAgICB9XG4gIH0pXG4gIGNvbnN0IGVudHJ5SWQgPSBwcmVwYXJlZC5wcm9ncmFtLmVudHJ5TW9kdWxlXG4gIGNvbnN0IGVudHJ5QXJ0aWZhY3QgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHByZXBhcmVkLm1vZHVsZVBhdGhzLmdldChlbnRyeUlkKSlcbiAgY29uc3QgZW50cnlOYW1lc3BhY2UgPSBgU2VtYW50aWZvbGRNb2R1bGUke21vZHVsZU5hbWUoZW50cnlJZCl9YFxuXG4gIHJldHVybiB7XG4gICAgZW50cnk6IHtcbiAgICAgIGFwcGxpY2F0aW9uQXJ0aWZhY3Q6IGAke3ByZXBhcmVkLmNvbmZpZ3VyYXRpb24uc291cmNlUm9vdH0vQXBwbGljYXRpb24vQXBwLnN3aWZ0YCxcbiAgICAgIGJyaWRnZUFydGlmYWN0OiBgJHtwcmVwYXJlZC5jb25maWd1cmF0aW9uLnNvdXJjZVJvb3R9L0FwcGxpY2F0aW9uL1NlbWFudGlmb2xkQnJpZGdlLnN3aWZ0YCxcbiAgICAgIGdlbmVyYXRlZEFydGlmYWN0OiBlbnRyeUFydGlmYWN0LFxuICAgICAgZ2VuZXJhdGVkRnVuY3Rpb25JZGVudGl0eTogYCR7ZW50cnlOYW1lc3BhY2V9LnNlbWFudGlmb2xkRW50cnlgLFxuICAgICAgbW9kdWxlSWQ6IGVudHJ5SWRcbiAgICB9LFxuICAgIG1vZHVsZXMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkSW9zU2VtYW50aWNQcm9ncmFtXCIsXG4gICAgc291cmNlcyxcbiAgICB2ZXJzaW9uOiAxXG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgb25lIGNsb3NlZCBzZW1hbnRpYyBvcmlnaW4gY2l0ZXMgYSBzb3VyY2UgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBvcmlnaW4gLSBNYXBwZWQgb3JpZ2luLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYWwgY2FsbGVyIGZpbGVuYW1lLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIHNvdXJjZSBwYXJ0aWNpcGF0ZXMgaW4gdGhlIG9yaWdpbi5cbiAqL1xuZnVuY3Rpb24gb3JpZ2luUmVmZXJlbmNlc0ZpbGVuYW1lKG9yaWdpbiwgZmlsZW5hbWUpIHtcbiAgaWYgKG9yaWdpbi5raW5kID09IFwic291cmNlXCIpIHJldHVybiBvcmlnaW4ubG9jYXRpb24uZmlsZW5hbWUgPT0gZmlsZW5hbWVcbiAgaWYgKG9yaWdpbi5raW5kID09IFwiZGVyaXZlZFwiKSByZXR1cm4gb3JpZ2luLm9yaWdpbnMuc29tZSgoe2xvY2F0aW9ufSkgPT4gbG9jYXRpb24uZmlsZW5hbWUgPT0gZmlsZW5hbWUpXG5cbiAgcmV0dXJuIG9yaWdpbi5yZWxhdGVkT3JpZ2lucy5zb21lKCh7bG9jYXRpb259KSA9PiBsb2NhdGlvbi5maWxlbmFtZSA9PSBmaWxlbmFtZSlcbn1cblxuLyoqXG4gKiBHcm91cHMgcmVuZGVyZXItcmVjb3JkZWQgY29uZmlndXJhdGlvbiByYW5nZXMgd2l0aG91dCBzY2FubmluZyBnZW5lcmF0ZWQgdGV4dC5cbiAqIEBwYXJhbSB7Q29uZmlndXJhdGlvbkFydGlmYWN0U3BhbltdfSBzcGFucyAtIENhdXNhbCBhcnRpZmFjdCBzcGFucy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZCAtIE5vcm1hbGl6ZWQgY29uZmlndXJhdGlvbiBmaWVsZC5cbiAqIEByZXR1cm5zIHt7cGF0aDogc3RyaW5nLCByYW5nZXM6IHtlbmQ6IG51bWJlciwgc3RhcnQ6IG51bWJlcn1bXX1bXX0gU3RhYmxlIG91dHB1dCBjaXRhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyYXRpb25PdXRwdXRDaXRhdGlvbnMoc3BhbnMsIGZpZWxkKSB7XG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywge2VuZDogbnVtYmVyLCBzdGFydDogbnVtYmVyfVtdPn0gKi9cbiAgY29uc3QgYnlQYXRoID0gbmV3IE1hcCgpXG5cbiAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgaWYgKHNwYW4uZmllbGQgIT0gZmllbGQpIGNvbnRpbnVlXG4gICAgY29uc3QgcmFuZ2VzID0gYnlQYXRoLmdldChzcGFuLnBhdGgpID8/IFtdXG5cbiAgICByYW5nZXMucHVzaCh7ZW5kOiBzcGFuLmVuZCwgc3RhcnQ6IHNwYW4uc3RhcnR9KVxuICAgIGJ5UGF0aC5zZXQoc3Bhbi5wYXRoLCByYW5nZXMpXG4gIH1cblxuICByZXR1cm4gWy4uLmJ5UGF0aF0ubWFwKChbcGF0aCwgcmFuZ2VzXSkgPT4gKHtwYXRoLCByYW5nZXN9KSlcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzaGFyZWQgY2FwdHVyZSBydW50aW1lIGFuZCBtYXBwZWQgcGVyLW1vZHVsZSBzZW1hbnRpYyBTd2lmdC5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgcHJlZmxpZ2h0SW9zQXBwbGljYXRpb24+fSBwcmVwYXJlZCAtIEZ1bGx5IHByZWZsaWdodGVkIGFwcGxpY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W119IE9yZGVyZWQgc2VtYW50aWMgYXJ0aWZhY3RzLlxuICovXG5mdW5jdGlvbiByZW5kZXJTZW1hbnRpY0FydGlmYWN0cyhwcmVwYXJlZCkge1xuICBjb25zdCBwYXRocyA9IHByZXBhcmVkLm1vZHVsZVBhdGhzXG4gIGNvbnN0IGRlY2xhcmF0aW9ucyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3QgbW9kdWxlIG9mIHByZXBhcmVkLm1vZHVsZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIGRlY2xhcmF0aW9ucy5zZXQoZGVjbGFyYXRpb24uaWQsIHtcbiAgICAgIGRlY2xhcmF0aW9uLFxuICAgICAgbW9kdWxlSWQ6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoUmVmbGVjdC5nZXQobW9kdWxlLCBcImlkXCIpKVxuICAgIH0pXG4gIH1cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSAqL1xuICBjb25zdCBhcnRpZmFjdHMgPSBbe1xuICAgIGNvbnRlbnQ6IGlvc1N3aWZ0UnVudGltZSxcbiAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1zd2lmdFwiLFxuICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICBwYXRoOiBcIlNvdXJjZXMvR2VuZXJhdGVkL1NlbWFudGlmb2xkUnVudGltZS5zd2lmdFwiLFxuICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgIGtpbmQ6IFwic3ludGhldGljXCIsXG4gICAgICByZWFzb246IFwiU2hhcmVkIGlPUyBhcHBsaWNhdGlvbiBvdXRwdXQgY2FwdHVyZSBhbmQgZXhhY3QgU3dpZnQgc2NhbGFyIHN1cHBvcnQuXCIsXG4gICAgICByZWxhdGVkT3JpZ2luczogW11cbiAgICB9LFxuICAgIHJvbGU6IFwic3VwcG9ydFwiXG4gIH1dXG5cbiAgZm9yIChjb25zdCBtb2R1bGUgb2YgcHJlcGFyZWQubW9kdWxlcykge1xuICAgIGNvbnN0IG1vZHVsZUlkID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChSZWZsZWN0LmdldChtb2R1bGUsIFwiaWRcIikpXG4gICAgY29uc3QgZmlsZW5hbWUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKHBhdGhzLmdldChtb2R1bGVJZCkpXG4gICAgY29uc3Qgd3JpdGVyID0gbmV3IFNvdXJjZVdyaXRlcih7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGxhbmd1YWdlOiBcInN3aWZ0XCIsXG4gICAgICBtb2R1bGUsXG4gICAgICBwcm9ncmFtOiBwcmVwYXJlZC5wcm9ncmFtLFxuICAgICAgcHJvZ3JhbVBhdGhzOiBwYXRocyxcbiAgICAgIHNvdXJjZXM6IHByZXBhcmVkLnNvdXJjZXNcbiAgICB9KVxuXG4gICAgZW1pdFNlbWFudGljTW9kdWxlKHdyaXRlciwgbW9kdWxlLCBtb2R1bGVJZCwgbW9kdWxlSWQgPT0gcHJlcGFyZWQucHJvZ3JhbS5lbnRyeU1vZHVsZSwgZGVjbGFyYXRpb25zKVxuICAgIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcod3JpdGVyLmZpbmlzaCgpKVxuXG4gICAgYXJ0aWZhY3RzLnB1c2goe1xuICAgICAgY29udGVudDogbWFwcGluZy5nZW5lcmF0ZWQuY29udGVudCxcbiAgICAgIGNvbnRlbnRLaW5kOiBcInRleHRcIixcbiAgICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtc3dpZnRcIixcbiAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgIHBhdGg6IGZpbGVuYW1lLFxuICAgICAgcHJvdmVuYW5jZToge2tpbmQ6IFwidGV4dFwiLCBtYXBwaW5nLCBzb3VyY2VNYXA6IHRvU291cmNlTWFwVjMobWFwcGluZyksIHNvdXJjZU1hcEZpbGVuYW1lOiBgJHtmaWxlbmFtZX0ubWFwYH0sXG4gICAgICByb2xlOiBcInNvdXJjZVwiXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBhcnRpZmFjdHNcbn1cblxuLyoqXG4gKiBQcm9kdWNlcyBhbGwgcHJvamVjdCBwYXRocyByZWZlcmVuY2VkIGJ5IHRoZSBYY29kZSBtb2RlbC5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgcHJlZmxpZ2h0SW9zQXBwbGljYXRpb24+fSBwcmVwYXJlZCAtIFByZXBhcmVkIGFwcGxpY2F0aW9uLlxuICogQHJldHVybnMge3thcHBTb3VyY2VzOiBzdHJpbmdbXSwgYXNzZXRzOiBzdHJpbmdbXSwgaW5mb1BsaXN0OiBzdHJpbmcsIHVuaXRUZXN0OiBzdHJpbmcsIHVpVGVzdDogc3RyaW5nLCB4Y2NvbmZpZzogc3RyaW5nfX0gUGF0aHMuXG4gKi9cbmZ1bmN0aW9uIGFwcGxpY2F0aW9uQXJ0aWZhY3RQYXRocyhwcmVwYXJlZCkge1xuICBjb25zdCB7cHJvZHVjdE5hbWU6IHByb2R1Y3QsIHJlc291cmNlUm9vdCwgc291cmNlUm9vdH0gPSBwcmVwYXJlZC5jb25maWd1cmF0aW9uXG5cbiAgcmV0dXJuIHtcbiAgICBhcHBTb3VyY2VzOiBbXG4gICAgICBgJHtzb3VyY2VSb290fS9HZW5lcmF0ZWQvU2VtYW50aWZvbGRSdW50aW1lLnN3aWZ0YCxcbiAgICAgIC4uLnByZXBhcmVkLm1vZHVsZVBhdGhzLnZhbHVlcygpLFxuICAgICAgYCR7c291cmNlUm9vdH0vQXBwbGljYXRpb24vQXBwLnN3aWZ0YCxcbiAgICAgIGAke3NvdXJjZVJvb3R9L0FwcGxpY2F0aW9uL1NlbWFudGlmb2xkQnJpZGdlLnN3aWZ0YCxcbiAgICAgIGAke3NvdXJjZVJvb3R9L0FwcGxpY2F0aW9uL1NlbWFudGlmb2xkT3V0cHV0Vmlldy5zd2lmdGBcbiAgICBdLFxuICAgIGFzc2V0czogW3Jlc291cmNlUm9vdCwgLi4ucHJlcGFyZWQuYXNzZXRzLm1hcCgoe3BhdGh9KSA9PiBwYXRoKV0sXG4gICAgaW5mb1BsaXN0OiBcIkNvbmZpZ3VyYXRpb24vSW5mby5wbGlzdFwiLFxuICAgIHVuaXRUZXN0OiBgVGVzdHMvJHtwcm9kdWN0fVRlc3RzLnN3aWZ0YCxcbiAgICB1aVRlc3Q6IGBVSVRlc3RzLyR7cHJvZHVjdH1VSVRlc3RzLnN3aWZ0YCxcbiAgICB4Y2NvbmZpZzogXCJDb25maWd1cmF0aW9uL0Jhc2UueGNjb25maWdcIlxuICB9XG59XG5cbi8qKlxuICogRGVyaXZlcyBjb2xsaXNpb24tY2hlY2tlZCB1cHBlcmNhc2UgMjQtaGV4IFhjb2RlIG9iamVjdCBJRHMgZnJvbSBub3JtYWxpemVkIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IHN0cmluZ1tdfSBpZGVudGl0aWVzIC0gQ29tcGxldGUgb3JkZXJlZCBvYmplY3QgaWRlbnRpdGllcy5cbiAqIEBwYXJhbSB7KGlkZW50aXR5OiBzdHJpbmcpID0+IHN0cmluZ30gW2RpZ2VzdF0gLSBUZXN0LW9ubHkgZGlnZXN0IHNlYW07IHByb2R1Y3Rpb24gdXNlcyBidWlsdC1pbiBTSEEtMjU2LlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIHN0cmluZz59IE9iamVjdCBJRCBieSBmdWxsIGlucHV0IGlkZW50aXR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2NhdGVYY29kZU9iamVjdElkcyhpZGVudGl0aWVzLCBkaWdlc3QgPSBpZGVudGl0eSA9PiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpZGVudGl0eSkuZGlnZXN0KFwiaGV4XCIpKSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKVxuICBjb25zdCBmdWxsSWRlbnRpdGllcyA9IG5ldyBNYXAoKVxuXG4gIGZvciAoY29uc3QgaWRlbnRpdHkgb2YgaWRlbnRpdGllcykge1xuICAgIGlmICh0eXBlb2YgaWRlbnRpdHkgIT0gXCJzdHJpbmdcIiB8fCBpZGVudGl0eS5sZW5ndGggPT0gMCB8fCByZXN1bHQuaGFzKGlkZW50aXR5KSkge1xuICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJYQ09ERV9JRF9DT0xMSVNJT05cIiwgbGFuZ3VhZ2U6IFwiaW9zXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiWGNvZGUgb2JqZWN0IGlkZW50aXRpZXMgbXVzdCBiZSB1bmlxdWUgbm9uLWVtcHR5IHN0cmluZ3MuXCJ9KVxuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gaWRlbnRpdHkubm9ybWFsaXplKFwiTkZDXCIpXG4gICAgY29uc3QgZnVsbERpZ2VzdCA9IGRpZ2VzdChub3JtYWxpemVkKVxuXG4gICAgaWYgKCEvXlswLTlhLWZBLUZdezY0fSQvdS50ZXN0KGZ1bGxEaWdlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtjb2RlOiBcIlhDT0RFX0lEX0NPTExJU0lPTlwiLCBsYW5ndWFnZTogXCJpb3NcIixcbiAgICAgICAgbWVzc2FnZTogYFhjb2RlIG9iamVjdCBpZGVudGl0eSAnJHtpZGVudGl0eX0nIGRpZCBub3QgcHJvZHVjZSBhIGZ1bGwgU0hBLTI1NiBkaWdlc3QuYH0pXG4gICAgfVxuICAgIGNvbnN0IG9iamVjdElkID0gZnVsbERpZ2VzdC5zbGljZSgwLCAyNCkudG9VcHBlckNhc2UoKVxuICAgIGNvbnN0IHByZXZpb3VzID0gZnVsbElkZW50aXRpZXMuZ2V0KG9iamVjdElkKVxuXG4gICAgaWYgKHByZXZpb3VzICE9PSB1bmRlZmluZWQgJiYgcHJldmlvdXMgIT0gbm9ybWFsaXplZCkge1xuICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJYQ09ERV9JRF9DT0xMSVNJT05cIiwgbGFuZ3VhZ2U6IFwiaW9zXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBYY29kZSBvYmplY3QgaWRlbnRpdGllcyAnJHtwcmV2aW91c30nIGFuZCAnJHtub3JtYWxpemVkfScgY29sbGlkZSBhdCAnJHtvYmplY3RJZH0nLmB9KVxuICAgIH1cbiAgICBmdWxsSWRlbnRpdGllcy5zZXQob2JqZWN0SWQsIG5vcm1hbGl6ZWQpXG4gICAgcmVzdWx0LnNldChpZGVudGl0eSwgb2JqZWN0SWQpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgc21hbGxlc3QgZGV0ZXJtaW5pc3RpYyBYY29kZSBhcHBsaWNhdGlvbi91bml0L1VJLXRlc3QgcHJvamVjdCBtb2RlbC5cbiAqIFBsYXRmb3JtIGV4ZWN1dGlvbiByZW1haW5zIGRlZmVycmVkIHVudGlsIHRoZSByZXBvc2l0b3J5IGhhcyBhIHF1YWxpZmllZCBBcHBsZSBsYW5lLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj59IHByZXBhcmVkIC0gUHJlcGFyZWQgYXBwbGljYXRpb24uXG4gKiBAcGFyYW0ge1JldHVyblR5cGU8dHlwZW9mIGFwcGxpY2F0aW9uQXJ0aWZhY3RQYXRocz59IHBhdGhzIC0gQ29tcGxldGUgb3duZWQgcGF0aHMuXG4gKiBAcmV0dXJucyB7UmVuZGVyZWRDb25maWd1cmF0aW9uVGV4dH0gQ2Fub25pY2FsIExGIHByb2plY3QgZmlsZSBhbmQgY2F1c2FsIGNvbmZpZ3VyYXRpb24gc3BhbnMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclBieFByb2plY3QocHJlcGFyZWQsIHBhdGhzKSB7XG4gIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwcmVwYXJlZC5jb25maWd1cmF0aW9uXG4gIGNvbnN0IHByb2R1Y3QgPSBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lXG4gIGNvbnN0IHJlc291cmNlUm9vdCA9IGNvbmZpZ3VyYXRpb24ucmVzb3VyY2VSb290XG4gIGNvbnN0IHNvdXJjZVJvb3QgPSBjb25maWd1cmF0aW9uLnNvdXJjZVJvb3RcbiAgY29uc3QgaWRlbnRpdGllcyA9IFtcbiAgICBcInByb2plY3RcIiwgXCJncm91cDptYWluXCIsIFwiZ3JvdXA6c291cmNlc1wiLCBcImdyb3VwOmdlbmVyYXRlZFwiLCBcImdyb3VwOmFwcGxpY2F0aW9uXCIsIFwiZ3JvdXA6Y29uZmlndXJhdGlvblwiLFxuICAgIFwiZ3JvdXA6dGVzdHNcIiwgXCJncm91cDp1aXRlc3RzXCIsIFwiZ3JvdXA6cHJvZHVjdHNcIiwgXCJ0YXJnZXQ6YXBwXCIsIFwidGFyZ2V0OnRlc3RzXCIsIFwidGFyZ2V0OnVpdGVzdHNcIixcbiAgICBcInBoYXNlOmFwcDpzb3VyY2VzXCIsIFwicGhhc2U6YXBwOnJlc291cmNlc1wiLCBcInBoYXNlOmFwcDpmcmFtZXdvcmtzXCIsIFwicGhhc2U6dGVzdHM6c291cmNlc1wiLCBcInBoYXNlOnRlc3RzOnJlc291cmNlc1wiLFxuICAgIFwicGhhc2U6dGVzdHM6ZnJhbWV3b3Jrc1wiLCBcInBoYXNlOnVpdGVzdHM6c291cmNlc1wiLCBcInBoYXNlOnVpdGVzdHM6cmVzb3VyY2VzXCIsIFwicGhhc2U6dWl0ZXN0czpmcmFtZXdvcmtzXCIsXG4gICAgXCJwcm9kdWN0OmFwcFwiLCBcInByb2R1Y3Q6dGVzdHNcIiwgXCJwcm9kdWN0OnVpdGVzdHNcIiwgXCJwcm94eTp0ZXN0czphcHBcIiwgXCJwcm94eTp1aXRlc3RzOmFwcFwiLFxuICAgIFwiZGVwZW5kZW5jeTp0ZXN0czphcHBcIiwgXCJkZXBlbmRlbmN5OnVpdGVzdHM6YXBwXCIsXG4gICAgXCJjb25maWctbGlzdDpwcm9qZWN0XCIsIFwiY29uZmlnLWxpc3Q6YXBwXCIsIFwiY29uZmlnLWxpc3Q6dGVzdHNcIiwgXCJjb25maWctbGlzdDp1aXRlc3RzXCIsXG4gICAgXCJjb25maWc6cHJvamVjdDpkZWJ1Z1wiLCBcImNvbmZpZzpwcm9qZWN0OnJlbGVhc2VcIiwgXCJjb25maWc6YXBwOmRlYnVnXCIsIFwiY29uZmlnOmFwcDpyZWxlYXNlXCIsXG4gICAgXCJjb25maWc6dGVzdHM6ZGVidWdcIiwgXCJjb25maWc6dGVzdHM6cmVsZWFzZVwiLCBcImNvbmZpZzp1aXRlc3RzOmRlYnVnXCIsIFwiY29uZmlnOnVpdGVzdHM6cmVsZWFzZVwiLFxuICAgIGBmaWxlOiR7cGF0aHMueGNjb25maWd9YCwgYGZpbGU6JHtwYXRocy5pbmZvUGxpc3R9YCwgYGZpbGU6JHtyZXNvdXJjZVJvb3R9YCxcbiAgICBgZmlsZToke3BhdGhzLnVuaXRUZXN0fWAsIGBmaWxlOiR7cGF0aHMudWlUZXN0fWAsXG4gICAgLi4ucGF0aHMuYXBwU291cmNlcy5mbGF0TWFwKHBhdGggPT4gW2BmaWxlOiR7cGF0aH1gLCBgYnVpbGQ6YXBwOiR7cGF0aH1gXSksXG4gICAgYGJ1aWxkOmFwcDoke3Jlc291cmNlUm9vdH1gLCBgYnVpbGQ6dGVzdHM6JHtwYXRocy51bml0VGVzdH1gLCBgYnVpbGQ6dWl0ZXN0czoke3BhdGhzLnVpVGVzdH1gXG4gIF1cbiAgY29uc3QgaWRzID0gYWxsb2NhdGVYY29kZU9iamVjdElkcyhpZGVudGl0aWVzKVxuICAvKipcbiAgICogTG9va3MgdXAgb25lIHBsYW5uZWQgWGNvZGUgaWRlbnRpdHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eSAtIFBsYW5uZWQgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEFsbG9jYXRlZCBvYmplY3QgSUQuXG4gICAqL1xuICBjb25zdCBpZCA9IGlkZW50aXR5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGlkcy5nZXQoaWRlbnRpdHkpXG5cbiAgICBpZiAoIXZhbHVlKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBNaXNzaW5nIHBsYW5uZWQgWGNvZGUgaWRlbnRpdHkgJyR7aWRlbnRpdHl9Jy5gKVxuXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCB7aWRlbnRpdHk6IHN0cmluZywgYm9keTogQ29uZmlndXJhdGlvbkxpbmVbXX1bXT59ICovXG4gIGNvbnN0IHNlY3Rpb25zID0gbmV3IE1hcCgpXG4gIC8qKlxuICAgKiBBZGRzIGFuIG9iamVjdCB0byBvbmUgUEJYIHNlY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN0aW9uIC0gUEJYIHNlY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZGVudGl0eSAtIE9iamVjdCBpZGVudGl0eS5cbiAgICogQHBhcmFtIHtDb25maWd1cmF0aW9uTGluZVtdfSBib2R5IC0gT2JqZWN0IGZpZWxkcy5cbiAgICovXG4gIGNvbnN0IGFkZCA9IChzZWN0aW9uLCBpZGVudGl0eSwgYm9keSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBzZWN0aW9ucy5nZXQoc2VjdGlvbikgPz8gW11cblxuICAgIGVudHJpZXMucHVzaCh7Ym9keSwgaWRlbnRpdHl9KVxuICAgIHNlY3Rpb25zLnNldChzZWN0aW9uLCBlbnRyaWVzKVxuICB9XG4gIC8qKlxuICAgKiBSZW5kZXJzIFBCWCBsaXN0IHZhbHVlcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzIC0gUEJYIGxpc3QgdmFsdWVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZW5kZXJlZCBsaXN0IGJvZHkuXG4gICAqL1xuICBjb25zdCBsaXN0ID0gdmFsdWVzID0+IHZhbHVlcy5tYXAodmFsdWUgPT4gYFxcdFxcdFxcdFxcdCR7dmFsdWV9LGApLmpvaW4oXCJcXG5cIilcbiAgLyoqXG4gICAqIFByb2R1Y2VzIGEgc3RhYmxlIHNvcnRlZCBjb3B5LlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXMgLSBWYWx1ZXMgdG8gc29ydC5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBTdGFibGUgc29ydGVkIGNvcHkuXG4gICAqL1xuICBjb25zdCBzb3J0ZWQgPSB2YWx1ZXMgPT4gWy4uLnZhbHVlc10uc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQgPCByaWdodCA/IC0xIDogbGVmdCA+IHJpZ2h0ID8gMSA6IDApXG5cbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzLmFwcFNvdXJjZXMpIHtcbiAgICBhZGQoXCJQQlhCdWlsZEZpbGVcIiwgYGJ1aWxkOmFwcDoke3BhdGh9YCwgW1wiaXNhID0gUEJYQnVpbGRGaWxlO1wiLCBgZmlsZVJlZiA9ICR7aWQoYGZpbGU6JHtwYXRofWApfTtgXSlcbiAgICBhZGQoXCJQQlhGaWxlUmVmZXJlbmNlXCIsIGBmaWxlOiR7cGF0aH1gLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5zd2lmdDtcIixcbiAgICAgIFtcInBhdGggPSBcIiwgLi4ucGJ4Q29uZmlndXJhdGlvblBhdGgoY29uZmlndXJhdGlvbiwgcGF0aCksIFwiO1wiXSwgXCJzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7XCJdKVxuICB9XG4gIGFkZChcIlBCWEJ1aWxkRmlsZVwiLCBgYnVpbGQ6YXBwOiR7cmVzb3VyY2VSb290fWAsIFtcImlzYSA9IFBCWEJ1aWxkRmlsZTtcIiwgYGZpbGVSZWYgPSAke2lkKGBmaWxlOiR7cmVzb3VyY2VSb290fWApfTtgXSlcbiAgYWRkKFwiUEJYQnVpbGRGaWxlXCIsIGBidWlsZDp0ZXN0czoke3BhdGhzLnVuaXRUZXN0fWAsIFtcImlzYSA9IFBCWEJ1aWxkRmlsZTtcIiwgYGZpbGVSZWYgPSAke2lkKGBmaWxlOiR7cGF0aHMudW5pdFRlc3R9YCl9O2BdKVxuICBhZGQoXCJQQlhCdWlsZEZpbGVcIiwgYGJ1aWxkOnVpdGVzdHM6JHtwYXRocy51aVRlc3R9YCwgW1wiaXNhID0gUEJYQnVpbGRGaWxlO1wiLCBgZmlsZVJlZiA9ICR7aWQoYGZpbGU6JHtwYXRocy51aVRlc3R9YCl9O2BdKVxuICBhZGQoXCJQQlhDb250YWluZXJJdGVtUHJveHlcIiwgXCJwcm94eTp0ZXN0czphcHBcIiwgW1wiaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5O1wiLCBgY29udGFpbmVyUG9ydGFsID0gJHtpZChcInByb2plY3RcIil9O2AsXG4gICAgXCJwcm94eVR5cGUgPSAxO1wiLCBgcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAke2lkKFwidGFyZ2V0OmFwcFwiKX07YCxcbiAgICBbXCJyZW1vdGVJbmZvID0gXFxcIlwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgXCJcXFwiO1wiXV0pXG4gIGFkZChcIlBCWENvbnRhaW5lckl0ZW1Qcm94eVwiLCBcInByb3h5OnVpdGVzdHM6YXBwXCIsIFtcImlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTtcIiwgYGNvbnRhaW5lclBvcnRhbCA9ICR7aWQoXCJwcm9qZWN0XCIpfTtgLFxuICAgIFwicHJveHlUeXBlID0gMTtcIiwgYHJlbW90ZUdsb2JhbElEU3RyaW5nID0gJHtpZChcInRhcmdldDphcHBcIil9O2AsXG4gICAgW1wicmVtb3RlSW5mbyA9IFxcXCJcIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgcHJvZHVjdCksIFwiXFxcIjtcIl1dKVxuICBhZGQoXCJQQlhGaWxlUmVmZXJlbmNlXCIsIGBmaWxlOiR7cGF0aHMueGNjb25maWd9YCwgW1wiaXNhID0gUEJYRmlsZVJlZmVyZW5jZTtcIiwgXCJsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7XCIsXG4gICAgYHBhdGggPSAke3BieFN0cmluZyhwYXRocy54Y2NvbmZpZyl9O2AsIFwic291cmNlVHJlZSA9IFNPVVJDRV9ST09UO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBgZmlsZToke3BhdGhzLmluZm9QbGlzdH1gLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54bWw7XCIsXG4gICAgYHBhdGggPSAke3BieFN0cmluZyhwYXRocy5pbmZvUGxpc3QpfTtgLCBcInNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDtcIl0pXG4gIGFkZChcIlBCWEZpbGVSZWZlcmVuY2VcIiwgYGZpbGU6JHtyZXNvdXJjZVJvb3R9YCwgW1wiaXNhID0gUEJYRmlsZVJlZmVyZW5jZTtcIiwgXCJsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlci5hc3NldGNhdGFsb2c7XCIsXG4gICAgW1wicGF0aCA9IFwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJyZXNvdXJjZVJvb3RcIiwgcmVzb3VyY2VSb290KSwgXCI7XCJdLCBcInNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDtcIl0pXG4gIGFkZChcIlBCWEZpbGVSZWZlcmVuY2VcIiwgYGZpbGU6JHtwYXRocy51bml0VGVzdH1gLCBbXCJpc2EgPSBQQlhGaWxlUmVmZXJlbmNlO1wiLCBcImxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5zd2lmdDtcIixcbiAgICBbXCJwYXRoID0gXCIsIC4uLnBieENvbmZpZ3VyYXRpb25QYXRoKGNvbmZpZ3VyYXRpb24sIHBhdGhzLnVuaXRUZXN0KSwgXCI7XCJdLCBcInNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDtcIl0pXG4gIGFkZChcIlBCWEZpbGVSZWZlcmVuY2VcIiwgYGZpbGU6JHtwYXRocy51aVRlc3R9YCwgW1wiaXNhID0gUEJYRmlsZVJlZmVyZW5jZTtcIiwgXCJsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuc3dpZnQ7XCIsXG4gICAgW1wicGF0aCA9IFwiLCAuLi5wYnhDb25maWd1cmF0aW9uUGF0aChjb25maWd1cmF0aW9uLCBwYXRocy51aVRlc3QpLCBcIjtcIl0sIFwic291cmNlVHJlZSA9IFNPVVJDRV9ST09UO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBcInByb2R1Y3Q6YXBwXCIsIFtcImlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7XCIsIFwiZXhwbGljaXRGaWxlVHlwZSA9IHdyYXBwZXIuYXBwbGljYXRpb247XCIsIFwiaW5jbHVkZUluSW5kZXggPSAwO1wiLFxuICAgIFtcInBhdGggPSBcXFwiXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIHByb2R1Y3QpLCBcIi5hcHBcXFwiO1wiXSwgXCJzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSO1wiXSlcbiAgYWRkKFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBcInByb2R1Y3Q6dGVzdHNcIiwgW1wiaXNhID0gUEJYRmlsZVJlZmVyZW5jZTtcIiwgXCJleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5jZmJ1bmRsZTtcIiwgXCJpbmNsdWRlSW5JbmRleCA9IDA7XCIsXG4gICAgW1wicGF0aCA9IFxcXCJcIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgcHJvZHVjdCksIFwiVGVzdHMueGN0ZXN0XFxcIjtcIl0sIFwic291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjtcIl0pXG4gIGFkZChcIlBCWEZpbGVSZWZlcmVuY2VcIiwgXCJwcm9kdWN0OnVpdGVzdHNcIiwgW1wiaXNhID0gUEJYRmlsZVJlZmVyZW5jZTtcIiwgXCJleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5jZmJ1bmRsZTtcIiwgXCJpbmNsdWRlSW5JbmRleCA9IDA7XCIsXG4gICAgW1wicGF0aCA9IFxcXCJcIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgcHJvZHVjdCksIFwiVUlUZXN0cy54Y3Rlc3RcXFwiO1wiXSwgXCJzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSO1wiXSlcblxuICBjb25zdCBnZW5lcmF0ZWRSZWZzID0gc29ydGVkKHBhdGhzLmFwcFNvdXJjZXMuZmlsdGVyKHBhdGggPT4gcGF0aC5zdGFydHNXaXRoKGAke3NvdXJjZVJvb3R9L0dlbmVyYXRlZC9gKSkpLm1hcChwYXRoID0+IGlkKGBmaWxlOiR7cGF0aH1gKSlcbiAgY29uc3QgYXBwbGljYXRpb25SZWZzID0gc29ydGVkKHBhdGhzLmFwcFNvdXJjZXMuZmlsdGVyKHBhdGggPT4gcGF0aC5zdGFydHNXaXRoKGAke3NvdXJjZVJvb3R9L0FwcGxpY2F0aW9uL2ApKSkubWFwKHBhdGggPT4gaWQoYGZpbGU6JHtwYXRofWApKVxuXG4gIGFkZChcIlBCWEdyb3VwXCIsIFwiZ3JvdXA6bWFpblwiLCBbXCJpc2EgPSBQQlhHcm91cDtcIiwgYGNoaWxkcmVuID0gKFxcbiR7bGlzdChbXG4gICAgaWQoXCJncm91cDpjb25maWd1cmF0aW9uXCIpLCBpZChcImdyb3VwOnNvdXJjZXNcIiksIGlkKGBmaWxlOiR7cmVzb3VyY2VSb290fWApLCBpZChcImdyb3VwOnRlc3RzXCIpLCBpZChcImdyb3VwOnVpdGVzdHNcIiksXG4gICAgaWQoXCJncm91cDpwcm9kdWN0c1wiKVxuICBdKX1cXG5cXHRcXHRcXHQpO2AsIFwic291cmNlVHJlZSA9IFxcXCI8Z3JvdXA+XFxcIjtcIl0pXG4gIGFkZChcIlBCWEdyb3VwXCIsIFwiZ3JvdXA6c291cmNlc1wiLCBbXCJpc2EgPSBQQlhHcm91cDtcIiwgYGNoaWxkcmVuID0gKFxcbiR7bGlzdChbaWQoXCJncm91cDphcHBsaWNhdGlvblwiKSwgaWQoXCJncm91cDpnZW5lcmF0ZWRcIildKX1cXG5cXHRcXHRcXHQpO2AsXG4gICAgW1wibmFtZSA9IFwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJzb3VyY2VSb290XCIsIHNvdXJjZVJvb3QpLCBcIjtcIl0sIFwic291cmNlVHJlZSA9IFxcXCI8Z3JvdXA+XFxcIjtcIl0pXG4gIGFkZChcIlBCWEdyb3VwXCIsIFwiZ3JvdXA6Z2VuZXJhdGVkXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KGdlbmVyYXRlZFJlZnMpfVxcblxcdFxcdFxcdCk7YCxcbiAgICBcIm5hbWUgPSBHZW5lcmF0ZWQ7XCIsIFwic291cmNlVHJlZSA9IFxcXCI8Z3JvdXA+XFxcIjtcIl0pXG4gIGFkZChcIlBCWEdyb3VwXCIsIFwiZ3JvdXA6YXBwbGljYXRpb25cIiwgW1wiaXNhID0gUEJYR3JvdXA7XCIsIGBjaGlsZHJlbiA9IChcXG4ke2xpc3QoYXBwbGljYXRpb25SZWZzKX1cXG5cXHRcXHRcXHQpO2AsXG4gICAgXCJuYW1lID0gQXBwbGljYXRpb247XCIsIFwic291cmNlVHJlZSA9IFxcXCI8Z3JvdXA+XFxcIjtcIl0pXG4gIGFkZChcIlBCWEdyb3VwXCIsIFwiZ3JvdXA6Y29uZmlndXJhdGlvblwiLCBbXCJpc2EgPSBQQlhHcm91cDtcIiwgYGNoaWxkcmVuID0gKFxcbiR7bGlzdChbaWQoYGZpbGU6JHtwYXRocy54Y2NvbmZpZ31gKSwgaWQoYGZpbGU6JHtwYXRocy5pbmZvUGxpc3R9YCldKX1cXG5cXHRcXHRcXHQpO2AsXG4gICAgXCJuYW1lID0gQ29uZmlndXJhdGlvbjtcIiwgXCJzb3VyY2VUcmVlID0gXFxcIjxncm91cD5cXFwiO1wiXSlcbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDp0ZXN0c1wiLCBbXCJpc2EgPSBQQlhHcm91cDtcIiwgYGNoaWxkcmVuID0gKFxcbiR7bGlzdChbaWQoYGZpbGU6JHtwYXRocy51bml0VGVzdH1gKV0pfVxcblxcdFxcdFxcdCk7YCxcbiAgICBcIm5hbWUgPSBUZXN0cztcIiwgXCJzb3VyY2VUcmVlID0gXFxcIjxncm91cD5cXFwiO1wiXSlcbiAgYWRkKFwiUEJYR3JvdXBcIiwgXCJncm91cDp1aXRlc3RzXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KFtpZChgZmlsZToke3BhdGhzLnVpVGVzdH1gKV0pfVxcblxcdFxcdFxcdCk7YCxcbiAgICBcIm5hbWUgPSBVSVRlc3RzO1wiLCBcInNvdXJjZVRyZWUgPSBcXFwiPGdyb3VwPlxcXCI7XCJdKVxuICBhZGQoXCJQQlhHcm91cFwiLCBcImdyb3VwOnByb2R1Y3RzXCIsIFtcImlzYSA9IFBCWEdyb3VwO1wiLCBgY2hpbGRyZW4gPSAoXFxuJHtsaXN0KFtpZChcInByb2R1Y3Q6YXBwXCIpLCBpZChcInByb2R1Y3Q6dGVzdHNcIiksIGlkKFwicHJvZHVjdDp1aXRlc3RzXCIpXSl9XFxuXFx0XFx0XFx0KTtgLFxuICAgIFwibmFtZSA9IFByb2R1Y3RzO1wiLCBcInNvdXJjZVRyZWUgPSBcXFwiPGdyb3VwPlxcXCI7XCJdKVxuXG4gIGFkZE5hdGl2ZVRhcmdldChhZGQsIGlkLCBjb25maWd1cmF0aW9uLCBcInRhcmdldDphcHBcIiwgXCJcIiwgXCJjb20uYXBwbGUucHJvZHVjdC10eXBlLmFwcGxpY2F0aW9uXCIsIFwicHJvZHVjdDphcHBcIixcbiAgICBcImNvbmZpZy1saXN0OmFwcFwiLCBbXCJwaGFzZTphcHA6c291cmNlc1wiLCBcInBoYXNlOmFwcDpmcmFtZXdvcmtzXCIsIFwicGhhc2U6YXBwOnJlc291cmNlc1wiXSwgW10pXG4gIGFkZE5hdGl2ZVRhcmdldChhZGQsIGlkLCBjb25maWd1cmF0aW9uLCBcInRhcmdldDp0ZXN0c1wiLCBcIlRlc3RzXCIsIFwiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5idW5kbGUudW5pdC10ZXN0XCIsIFwicHJvZHVjdDp0ZXN0c1wiLFxuICAgIFwiY29uZmlnLWxpc3Q6dGVzdHNcIiwgW1wicGhhc2U6dGVzdHM6c291cmNlc1wiLCBcInBoYXNlOnRlc3RzOmZyYW1ld29ya3NcIiwgXCJwaGFzZTp0ZXN0czpyZXNvdXJjZXNcIl0sIFtcImRlcGVuZGVuY3k6dGVzdHM6YXBwXCJdKVxuICBhZGROYXRpdmVUYXJnZXQoYWRkLCBpZCwgY29uZmlndXJhdGlvbiwgXCJ0YXJnZXQ6dWl0ZXN0c1wiLCBcIlVJVGVzdHNcIiwgXCJjb20uYXBwbGUucHJvZHVjdC10eXBlLmJ1bmRsZS51aS10ZXN0aW5nXCIsIFwicHJvZHVjdDp1aXRlc3RzXCIsXG4gICAgXCJjb25maWctbGlzdDp1aXRlc3RzXCIsIFtcInBoYXNlOnVpdGVzdHM6c291cmNlc1wiLCBcInBoYXNlOnVpdGVzdHM6ZnJhbWV3b3Jrc1wiLCBcInBoYXNlOnVpdGVzdHM6cmVzb3VyY2VzXCJdLCBbXCJkZXBlbmRlbmN5OnVpdGVzdHM6YXBwXCJdKVxuICBhZGQoXCJQQlhQcm9qZWN0XCIsIFwicHJvamVjdFwiLCBbXCJpc2EgPSBQQlhQcm9qZWN0O1wiLCBcImF0dHJpYnV0ZXMgPSB7IEJ1aWxkSW5kZXBlbmRlbnRUYXJnZXRzSW5QYXJhbGxlbCA9IFlFUzsgfTtcIixcbiAgICBgYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9ICR7aWQoXCJjb25maWctbGlzdDpwcm9qZWN0XCIpfTtgLCBcImRldmVsb3BtZW50UmVnaW9uID0gZW47XCIsIFwiaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7XCIsXG4gICAgXCJrbm93blJlZ2lvbnMgPSAoIGVuLCBCYXNlLCApO1wiLCBgbWFpbkdyb3VwID0gJHtpZChcImdyb3VwOm1haW5cIil9O2AsIGBwcm9kdWN0UmVmR3JvdXAgPSAke2lkKFwiZ3JvdXA6cHJvZHVjdHNcIil9O2AsXG4gICAgXCJwcm9qZWN0RGlyUGF0aCA9IFxcXCJcXFwiO1wiLCBcInByb2plY3RSb290ID0gXFxcIlxcXCI7XCIsXG4gICAgYHRhcmdldHMgPSAoXFxuJHtsaXN0KFtpZChcInRhcmdldDphcHBcIiksIGlkKFwidGFyZ2V0OnRlc3RzXCIpLCBpZChcInRhcmdldDp1aXRlc3RzXCIpXSl9XFxuXFx0XFx0XFx0KTtgXSlcblxuICBhZGRCdWlsZFBoYXNlKGFkZCwgaWQsIFwiUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2VcIiwgXCJwaGFzZTphcHA6ZnJhbWV3b3Jrc1wiLCBbXSlcbiAgYWRkQnVpbGRQaGFzZShhZGQsIGlkLCBcIlBCWFJlc291cmNlc0J1aWxkUGhhc2VcIiwgXCJwaGFzZTphcHA6cmVzb3VyY2VzXCIsIFtgYnVpbGQ6YXBwOiR7cmVzb3VyY2VSb290fWBdKVxuICBhZGRCdWlsZFBoYXNlKGFkZCwgaWQsIFwiUEJYU291cmNlc0J1aWxkUGhhc2VcIiwgXCJwaGFzZTphcHA6c291cmNlc1wiLCBzb3J0ZWQocGF0aHMuYXBwU291cmNlcykubWFwKHBhdGggPT4gYGJ1aWxkOmFwcDoke3BhdGh9YCkpXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIFtcInRlc3RzXCIsIFwidWl0ZXN0c1wiXSkge1xuICAgIGFkZEJ1aWxkUGhhc2UoYWRkLCBpZCwgXCJQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZVwiLCBgcGhhc2U6JHt0YXJnZXR9OmZyYW1ld29ya3NgLCBbXSlcbiAgICBhZGRCdWlsZFBoYXNlKGFkZCwgaWQsIFwiUEJYUmVzb3VyY2VzQnVpbGRQaGFzZVwiLCBgcGhhc2U6JHt0YXJnZXR9OnJlc291cmNlc2AsIFtdKVxuICB9XG4gIGFkZEJ1aWxkUGhhc2UoYWRkLCBpZCwgXCJQQlhTb3VyY2VzQnVpbGRQaGFzZVwiLCBcInBoYXNlOnRlc3RzOnNvdXJjZXNcIiwgW2BidWlsZDp0ZXN0czoke3BhdGhzLnVuaXRUZXN0fWBdKVxuICBhZGRCdWlsZFBoYXNlKGFkZCwgaWQsIFwiUEJYU291cmNlc0J1aWxkUGhhc2VcIiwgXCJwaGFzZTp1aXRlc3RzOnNvdXJjZXNcIiwgW2BidWlsZDp1aXRlc3RzOiR7cGF0aHMudWlUZXN0fWBdKVxuICBhZGQoXCJQQlhUYXJnZXREZXBlbmRlbmN5XCIsIFwiZGVwZW5kZW5jeTp0ZXN0czphcHBcIiwgW1wiaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTtcIiwgYHRhcmdldCA9ICR7aWQoXCJ0YXJnZXQ6YXBwXCIpfTtgLFxuICAgIGB0YXJnZXRQcm94eSA9ICR7aWQoXCJwcm94eTp0ZXN0czphcHBcIil9O2BdKVxuICBhZGQoXCJQQlhUYXJnZXREZXBlbmRlbmN5XCIsIFwiZGVwZW5kZW5jeTp1aXRlc3RzOmFwcFwiLCBbXCJpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5O1wiLCBgdGFyZ2V0ID0gJHtpZChcInRhcmdldDphcHBcIil9O2AsXG4gICAgYHRhcmdldFByb3h5ID0gJHtpZChcInByb3h5OnVpdGVzdHM6YXBwXCIpfTtgXSlcblxuICBmb3IgKGNvbnN0IG93bmVyIG9mIFtcInByb2plY3RcIiwgXCJhcHBcIiwgXCJ0ZXN0c1wiLCBcInVpdGVzdHNcIl0pIHtcbiAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgW1wiZGVidWdcIiwgXCJyZWxlYXNlXCJdKSB7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IGJ1aWxkU2V0dGluZ3Mob3duZXIsIHZhcmlhbnQsIGNvbmZpZ3VyYXRpb24sIHBhdGhzKVxuXG4gICAgICBhZGQoXCJYQ0J1aWxkQ29uZmlndXJhdGlvblwiLCBgY29uZmlnOiR7b3duZXJ9OiR7dmFyaWFudH1gLCBbXCJpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjtcIixcbiAgICAgICAgYGJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gJHtpZChgZmlsZToke3BhdGhzLnhjY29uZmlnfWApfTtgLCBbXCJidWlsZFNldHRpbmdzID0ge1xcblwiLCAuLi5zZXR0aW5ncywgXCJcXG5cXHRcXHRcXHR9O1wiXSxcbiAgICAgICAgYG5hbWUgPSAke3ZhcmlhbnQgPT0gXCJkZWJ1Z1wiID8gXCJEZWJ1Z1wiIDogXCJSZWxlYXNlXCJ9O2BdKVxuICAgIH1cbiAgICBhZGQoXCJYQ0NvbmZpZ3VyYXRpb25MaXN0XCIsIGBjb25maWctbGlzdDoke293bmVyfWAsIFtcImlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7XCIsXG4gICAgICBgYnVpbGRDb25maWd1cmF0aW9ucyA9IChcXG4ke2xpc3QoW2lkKGBjb25maWc6JHtvd25lcn06ZGVidWdgKSwgaWQoYGNvbmZpZzoke293bmVyfTpyZWxlYXNlYCldKX1cXG5cXHRcXHRcXHQpO2AsXG4gICAgICBcImRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDtcIiwgXCJkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlO1wiXSlcbiAgfVxuXG4gIGNvbnN0IG9yZGVyID0gW1wiUEJYQnVpbGRGaWxlXCIsIFwiUEJYQ29udGFpbmVySXRlbVByb3h5XCIsIFwiUEJYRmlsZVJlZmVyZW5jZVwiLCBcIlBCWEZyYW1ld29ya3NCdWlsZFBoYXNlXCIsIFwiUEJYR3JvdXBcIixcbiAgICBcIlBCWE5hdGl2ZVRhcmdldFwiLCBcIlBCWFByb2plY3RcIiwgXCJQQlhSZXNvdXJjZXNCdWlsZFBoYXNlXCIsIFwiUEJYU291cmNlc0J1aWxkUGhhc2VcIiwgXCJQQlhUYXJnZXREZXBlbmRlbmN5XCIsXG4gICAgXCJYQ0J1aWxkQ29uZmlndXJhdGlvblwiLCBcIlhDQ29uZmlndXJhdGlvbkxpc3RcIl1cbiAgY29uc3Qgd3JpdGVyID0gbmV3IENvbmZpZ3VyYXRpb25UZXh0V3JpdGVyKClcblxuICB3cml0ZXIuYXBwZW5kKFwiLy8gISQqVVRGOCokIVxcbntcXG5cXHRhcmNoaXZlVmVyc2lvbiA9IDE7XFxuXFx0Y2xhc3NlcyA9IHt9O1xcblxcdG9iamVjdFZlcnNpb24gPSA1NjtcXG5cXHRvYmplY3RzID0ge1xcblwiKVxuXG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBvcmRlcikge1xuICAgIGNvbnN0IGVudHJpZXMgPSAoc2VjdGlvbnMuZ2V0KHNlY3Rpb24pID8/IFtdKS5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5pZGVudGl0eSA8IHJpZ2h0LmlkZW50aXR5ID8gLTEgOiAxKVxuXG4gICAgd3JpdGVyLmFwcGVuZChgXFxuLyogQmVnaW4gJHtzZWN0aW9ufSBzZWN0aW9uICovXFxuYClcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIHdyaXRlci5hcHBlbmQoYFxcdFxcdCR7aWQoZW50cnkuaWRlbnRpdHkpfSA9IHtcXG5gKVxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGVudHJ5LmJvZHkpIHtcbiAgICAgICAgd3JpdGVyLmFwcGVuZChcIlxcdFxcdFxcdFwiKVxuICAgICAgICB3cml0ZXIuYXBwZW5kKGxpbmUpXG4gICAgICAgIHdyaXRlci5hcHBlbmQoXCJcXG5cIilcbiAgICAgIH1cbiAgICAgIHdyaXRlci5hcHBlbmQoXCJcXHRcXHR9O1xcblwiKVxuICAgIH1cbiAgICB3cml0ZXIuYXBwZW5kKGAvKiBFbmQgJHtzZWN0aW9ufSBzZWN0aW9uICovXFxuYClcbiAgfVxuICB3cml0ZXIuYXBwZW5kKGBcXHR9O1xcblxcdHJvb3RPYmplY3QgPSAke2lkKFwicHJvamVjdFwiKX07XFxufVxcbmApXG5cbiAgcmV0dXJuIHdyaXRlci5maW5pc2goKVxufVxuXG4vKipcbiAqIEFkZHMgb25lIG5hdGl2ZSB0YXJnZXQgb2JqZWN0IHRvIHRoZSBwcm9qZWN0IG1vZGVsLlxuICogQHBhcmFtIHsoc2VjdGlvbjogc3RyaW5nLCBpZGVudGl0eTogc3RyaW5nLCBib2R5OiBDb25maWd1cmF0aW9uTGluZVtdKSA9PiB2b2lkfSBhZGQgLSBPYmplY3Qgc2luay5cbiAqIEBwYXJhbSB7KGlkZW50aXR5OiBzdHJpbmcpID0+IHN0cmluZ30gaWQgLSBJRCBsb29rdXAuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbn0gY29uZmlndXJhdGlvbiAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHkgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVN1ZmZpeCAtIFRhcmdldCBzdWZmaXggYWZ0ZXIgdGhlIHByb2R1Y3QgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9kdWN0VHlwZSAtIFByb2R1Y3QgdHlwZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9kdWN0UmVmZXJlbmNlIC0gUHJvZHVjdCByZWZlcmVuY2UgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlndXJhdGlvbkxpc3QgLSBDb25maWd1cmF0aW9uIGxpc3QgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwaGFzZXMgLSBQaGFzZSBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVwZW5kZW5jaWVzIC0gRGVwZW5kZW5jeSBpZGVudGl0aWVzLlxuICovXG5mdW5jdGlvbiBhZGROYXRpdmVUYXJnZXQoYWRkLCBpZCwgY29uZmlndXJhdGlvbiwgaWRlbnRpdHksIG5hbWVTdWZmaXgsIHByb2R1Y3RUeXBlLCBwcm9kdWN0UmVmZXJlbmNlLCBjb25maWd1cmF0aW9uTGlzdCxcbiAgcGhhc2VzLCBkZXBlbmRlbmNpZXMpIHtcbiAgLyoqXG4gICAqIFJlbmRlcnMgdGFyZ2V0IGlkZW50aXR5IHZhbHVlcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzIC0gVGFyZ2V0IGlkZW50aXR5IHZhbHVlcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmVuZGVyZWQgdGFyZ2V0IGxpc3QuXG4gICAqL1xuICBjb25zdCBsaW5lcyA9IHZhbHVlcyA9PiB2YWx1ZXMubWFwKHZhbHVlID0+IGBcXHRcXHRcXHRcXHQke2lkKHZhbHVlKX0sYCkuam9pbihcIlxcblwiKVxuICBjb25zdCBuYW1lID0gW1wiXFxcIlwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSwgYCR7bmFtZVN1ZmZpeH1cImBdXG5cbiAgYWRkKFwiUEJYTmF0aXZlVGFyZ2V0XCIsIGlkZW50aXR5LCBbXCJpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7XCIsIGBidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gJHtpZChjb25maWd1cmF0aW9uTGlzdCl9O2AsXG4gICAgYGJ1aWxkUGhhc2VzID0gKFxcbiR7bGluZXMocGhhc2VzKX1cXG5cXHRcXHRcXHQpO2AsIFwiYnVpbGRSdWxlcyA9ICgpO1wiLCBgZGVwZW5kZW5jaWVzID0gKFxcbiR7bGluZXMoZGVwZW5kZW5jaWVzKX1cXG5cXHRcXHRcXHQpO2AsXG4gICAgW1wibmFtZSA9IFwiLCAuLi5uYW1lLCBcIjtcIl0sIFtcInByb2R1Y3ROYW1lID0gXCIsIC4uLm5hbWUsIFwiO1wiXSwgYHByb2R1Y3RSZWZlcmVuY2UgPSAke2lkKHByb2R1Y3RSZWZlcmVuY2UpfTtgLFxuICAgIGBwcm9kdWN0VHlwZSA9ICR7cGJ4U3RyaW5nKHByb2R1Y3RUeXBlKX07YF0pXG59XG5cbi8qKlxuICogQWRkcyBvbmUgYnVpbGQgcGhhc2UgdG8gdGhlIHByb2plY3QgbW9kZWwuXG4gKiBAcGFyYW0geyhzZWN0aW9uOiBzdHJpbmcsIGlkZW50aXR5OiBzdHJpbmcsIGJvZHk6IENvbmZpZ3VyYXRpb25MaW5lW10pID0+IHZvaWR9IGFkZCAtIE9iamVjdCBzaW5rLlxuICogQHBhcmFtIHsoaWRlbnRpdHk6IHN0cmluZykgPT4gc3RyaW5nfSBpZCAtIElEIGxvb2t1cC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWN0aW9uIC0gUGhhc2UgSVNBLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5IC0gUGhhc2UgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWxlcyAtIEJ1aWxkLWZpbGUgaWRlbnRpdGllcy5cbiAqL1xuZnVuY3Rpb24gYWRkQnVpbGRQaGFzZShhZGQsIGlkLCBzZWN0aW9uLCBpZGVudGl0eSwgZmlsZXMpIHtcbiAgY29uc3QgbGluZXMgPSBmaWxlcy5tYXAoZmlsZSA9PiBgXFx0XFx0XFx0XFx0JHtpZChmaWxlKX0sYCkuam9pbihcIlxcblwiKVxuXG4gIGFkZChzZWN0aW9uLCBpZGVudGl0eSwgW2Bpc2EgPSAke3NlY3Rpb259O2AsIFwiYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NztcIiwgYGZpbGVzID0gKFxcbiR7bGluZXN9XFxuXFx0XFx0XFx0KTtgLFxuICAgIFwicnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7XCJdKVxufVxuXG4vKipcbiAqIFJlbmRlcnMgc29ydGVkIFBCWCBidWlsZCBzZXR0aW5ncyBmb3Igb25lIG93bmVyIGFuZCB2YXJpYW50LlxuICogQHBhcmFtIHtzdHJpbmd9IG93bmVyIC0gQ29uZmlndXJhdGlvbiBvd25lci5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YXJpYW50IC0gRGVidWcgb3IgcmVsZWFzZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9ufSBjb25maWd1cmF0aW9uIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTx0eXBlb2YgYXBwbGljYXRpb25BcnRpZmFjdFBhdGhzPn0gcGF0aHMgLSBQbGFubmVkIHBhdGhzLlxuICogQHJldHVybnMge0NvbmZpZ3VyYXRpb25UZXh0UGFydFtdfSBTb3J0ZWQgUEJYIGJ1aWxkIHNldHRpbmdzLlxuICovXG5mdW5jdGlvbiBidWlsZFNldHRpbmdzKG93bmVyLCB2YXJpYW50LCBjb25maWd1cmF0aW9uLCBwYXRocykge1xuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIENvbmZpZ3VyYXRpb25UZXh0UGFydCB8IENvbmZpZ3VyYXRpb25UZXh0UGFydFtdPn0gKi9cbiAgY29uc3QgdmFsdWVzID0gb3duZXIgPT0gXCJwcm9qZWN0XCIgPyB7XG4gICAgQ09ERV9TSUdOSU5HX0FMTE9XRUQ6IFwiTk9cIixcbiAgICBDT0RFX1NJR05JTkdfUkVRVUlSRUQ6IFwiTk9cIlxuICB9IDogb3duZXIgPT0gXCJhcHBcIiA/IHtcbiAgICBHRU5FUkFURV9JTkZPUExJU1RfRklMRTogXCJOT1wiLFxuICAgIElORk9QTElTVF9GSUxFOiBwYnhTdHJpbmcocGF0aHMuaW5mb1BsaXN0KSxcbiAgICBJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVDogY29uZmlndXJhdGlvbkZyYWdtZW50KFwiZGVwbG95bWVudFRhcmdldFwiLCBjb25maWd1cmF0aW9uLmRlcGxveW1lbnRUYXJnZXQpLFxuICAgIFBST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IGNvbmZpZ3VyYXRpb25GcmFnbWVudChcImJ1bmRsZUlkZW50aWZpZXJcIiwgY29uZmlndXJhdGlvbi5idW5kbGVJZGVudGlmaWVyKSxcbiAgICBQUk9EVUNUX01PRFVMRV9OQU1FOiBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJtb2R1bGVOYW1lXCIsIGNvbmZpZ3VyYXRpb24ubW9kdWxlTmFtZSksXG4gICAgUFJPRFVDVF9OQU1FOiBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSxcbiAgICBTREtST09UOiBcImlwaG9uZW9zXCIsXG4gICAgU1VQUE9SVEVEX1BMQVRGT1JNUzogcGJ4U3RyaW5nKFwiaXBob25lb3MgaXBob25lc2ltdWxhdG9yXCIpLFxuICAgIFRBUkdFVEVEX0RFVklDRV9GQU1JTFk6IFwiMVwiXG4gIH0gOiBvd25lciA9PSBcInRlc3RzXCIgPyB7XG4gICAgQlVORExFX0xPQURFUjogcGJ4U3RyaW5nKFwiJChURVNUX0hPU1QpXCIpLFxuICAgIFBST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IFtjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJidW5kbGVJZGVudGlmaWVyXCIsIGNvbmZpZ3VyYXRpb24uYnVuZGxlSWRlbnRpZmllciksIFwiLnRlc3RzXCJdLFxuICAgIFBST0RVQ1RfTU9EVUxFX05BTUU6IFtjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJtb2R1bGVOYW1lXCIsIGNvbmZpZ3VyYXRpb24ubW9kdWxlTmFtZSksIFwiVGVzdHNcIl0sXG4gICAgUFJPRFVDVF9OQU1FOiBcIiQoVEFSR0VUX05BTUUpXCIsXG4gICAgVEVTVF9IT1NUOiBbXCJcXFwiJChCVUlMVF9QUk9EVUNUU19ESVIpL1wiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSxcbiAgICAgIFwiLmFwcC9cIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZSksIFwiXFxcIlwiXVxuICB9IDoge1xuICAgIFBST0RVQ1RfQlVORExFX0lERU5USUZJRVI6IFtjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJidW5kbGVJZGVudGlmaWVyXCIsIGNvbmZpZ3VyYXRpb24uYnVuZGxlSWRlbnRpZmllciksIFwiLnVpdGVzdHNcIl0sXG4gICAgUFJPRFVDVF9NT0RVTEVfTkFNRTogW2NvbmZpZ3VyYXRpb25GcmFnbWVudChcIm1vZHVsZU5hbWVcIiwgY29uZmlndXJhdGlvbi5tb2R1bGVOYW1lKSwgXCJVSVRlc3RzXCJdLFxuICAgIFBST0RVQ1RfTkFNRTogXCIkKFRBUkdFVF9OQU1FKVwiLFxuICAgIFRFU1RfVEFSR0VUX05BTUU6IGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpXG4gIH1cblxuICBpZiAodmFyaWFudCA9PSBcInJlbGVhc2VcIikgdmFsdWVzLlNXSUZUX09QVElNSVpBVElPTl9MRVZFTCA9IHBieFN0cmluZyhcIi1PXCIpXG5cbiAgLyoqIEB0eXBlIHtDb25maWd1cmF0aW9uVGV4dFBhcnRbXX0gKi9cbiAgY29uc3Qgb3V0cHV0ID0gW11cblxuICBmb3IgKGNvbnN0IFtpbmRleCwga2V5XSBvZiBPYmplY3Qua2V5cyh2YWx1ZXMpLnNvcnQoKS5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1trZXldXG5cbiAgICBpZiAoaW5kZXggPiAwKSBvdXRwdXQucHVzaChcIlxcblwiKVxuICAgIG91dHB1dC5wdXNoKGBcXHRcXHRcXHRcXHQke2tleX0gPSBgKVxuICAgIG91dHB1dC5wdXNoKC4uLihBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSkpXG4gICAgb3V0cHV0LnB1c2goXCI7XCIpXG4gIH1cblxuICByZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogUXVvdGVzIG9uZSBQQlggc2NhbGFyLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gUEJYIHNjYWxhci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFNhZmVseSBxdW90ZWQgUEJYIHNjYWxhci5cbiAqL1xuZnVuY3Rpb24gcGJ4U3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgcXVvdGVkIFBCWCBwYXRoIHdoaWxlIHJldGFpbmluZyBjYXVzYWxpdHkgZm9yIGl0cyBjb25maWd1cmVkIGNvbXBvbmVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9ufSBjb25maWd1cmF0aW9uIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gUGxhbm5lZCBhcnRpZmFjdCBwYXRoLlxuICogQHJldHVybnMge0NvbmZpZ3VyYXRpb25UZXh0UGFydFtdfSBRdW90ZWQgUEJYIHBhdGggZnJhZ21lbnRzLlxuICovXG5mdW5jdGlvbiBwYnhDb25maWd1cmF0aW9uUGF0aChjb25maWd1cmF0aW9uLCBwYXRoKSB7XG4gIGlmIChwYXRoLnN0YXJ0c1dpdGgoYCR7Y29uZmlndXJhdGlvbi5zb3VyY2VSb290fS9gKSkge1xuICAgIHJldHVybiBbXCJcXFwiXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInNvdXJjZVJvb3RcIiwgY29uZmlndXJhdGlvbi5zb3VyY2VSb290KSwgcGF0aC5zbGljZShjb25maWd1cmF0aW9uLnNvdXJjZVJvb3QubGVuZ3RoKSwgXCJcXFwiXCJdXG4gIH1cbiAgaWYgKHBhdGggPT0gY29uZmlndXJhdGlvbi5yZXNvdXJjZVJvb3QpIHtcbiAgICByZXR1cm4gW1wiXFxcIlwiLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJyZXNvdXJjZVJvb3RcIiwgY29uZmlndXJhdGlvbi5yZXNvdXJjZVJvb3QpLCBcIlxcXCJcIl1cbiAgfVxuICBpZiAocGF0aCA9PSBgVGVzdHMvJHtjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lfVRlc3RzLnN3aWZ0YCkge1xuICAgIHJldHVybiBbXCJcXFwiVGVzdHMvXCIsIGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpLCBcIlRlc3RzLnN3aWZ0XFxcIlwiXVxuICB9XG4gIGlmIChwYXRoID09IGBVSVRlc3RzLyR7Y29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZX1VSVRlc3RzLnN3aWZ0YCkge1xuICAgIHJldHVybiBbXCJcXFwiVUlUZXN0cy9cIiwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgY29uZmlndXJhdGlvbi5wcm9kdWN0TmFtZSksIFwiVUlUZXN0cy5zd2lmdFxcXCJcIl1cbiAgfVxuXG4gIHJldHVybiBbcGJ4U3RyaW5nKHBhdGgpXVxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIHNoYXJlZCBzY2hlbWUgWE1MLlxuICogQHBhcmFtIHtSZXR1cm5UeXBlPHR5cGVvZiBwcmVmbGlnaHRJb3NBcHBsaWNhdGlvbj59IHByZXBhcmVkIC0gUHJlcGFyZWQgYXBwbGljYXRpb24uXG4gKiBAcmV0dXJucyB7UmVuZGVyZWRDb25maWd1cmF0aW9uVGV4dH0gU2hhcmVkIHNjaGVtZSBYTUwgYW5kIGNhdXNhbCBjb25maWd1cmF0aW9uIHNwYW5zLlxuICovXG5mdW5jdGlvbiByZW5kZXJTaGFyZWRTY2hlbWUocHJlcGFyZWQpIHtcbiAgY29uc3QgcHJvZHVjdCA9IHByZXBhcmVkLmNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWVcbiAgY29uc3QgYXBwSWQgPSBhbGxvY2F0ZVhjb2RlT2JqZWN0SWRzKFtcInRhcmdldDphcHBcIl0pLmdldChcInRhcmdldDphcHBcIilcbiAgY29uc3QgdGVzdElkID0gYWxsb2NhdGVYY29kZU9iamVjdElkcyhbXCJ0YXJnZXQ6dGVzdHNcIl0pLmdldChcInRhcmdldDp0ZXN0c1wiKVxuICBjb25zdCB1aVRlc3RJZCA9IGFsbG9jYXRlWGNvZGVPYmplY3RJZHMoW1widGFyZ2V0OnVpdGVzdHNcIl0pLmdldChcInRhcmdldDp1aXRlc3RzXCIpXG4gIC8qKlxuICAgKiBSZW5kZXJzIG9uZSBzY2hlbWUgYnVpbGRhYmxlIHJlZmVyZW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVTdWZmaXggLSBCbHVlcHJpbnQgc3VmZml4IGFmdGVyIHByb2R1Y3QgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGJ1aWxkYWJsZVN1ZmZpeCAtIFByb2R1Y3QgZmlsZW5hbWUgc3VmZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gaWQgLSBPYmplY3QgSUQuXG4gICAqIEByZXR1cm5zIHtDb25maWd1cmF0aW9uVGV4dFBhcnRbXX0gWE1MIHJlZmVyZW5jZS5cbiAgICovXG4gIGNvbnN0IHJlZmVyZW5jZSA9IChuYW1lU3VmZml4LCBidWlsZGFibGVTdWZmaXgsIGlkKSA9PiBbYDxCdWlsZGFibGVSZWZlcmVuY2VcbiAgICAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZpZXIgPSBcInByaW1hcnlcIlxuICAgICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9IFwiJHtpZH1cIlxuICAgICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9IFwiYCwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgcHJvZHVjdCksIGAke2J1aWxkYWJsZVN1ZmZpeH1cIlxuICAgICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9IFwiYCwgY29uZmlndXJhdGlvbkZyYWdtZW50KFwicHJvZHVjdE5hbWVcIiwgcHJvZHVjdCksIGAke25hbWVTdWZmaXh9XCJcbiAgICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSBcImNvbnRhaW5lcjpgLCBjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBwcm9kdWN0KSwgYC54Y29kZXByb2pcIj5cbiAgICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPmBdXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBDb25maWd1cmF0aW9uVGV4dFdyaXRlcigpXG5cbiAgd3JpdGVyLmFwcGVuZChgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48U2NoZW1lIHZlcnNpb249XCIxLjdcIj5cbiAgIDxCdWlsZEFjdGlvbiBwYXJhbGxlbGl6ZUJ1aWxkYWJsZXM9XCJZRVNcIiBidWlsZEltcGxpY2l0RGVwZW5kZW5jaWVzPVwiWUVTXCI+XG4gICAgICA8QnVpbGRBY3Rpb25FbnRyaWVzPlxuICAgICAgICAgPEJ1aWxkQWN0aW9uRW50cnkgYnVpbGRGb3JUZXN0aW5nPVwiWUVTXCIgYnVpbGRGb3JSdW5uaW5nPVwiWUVTXCIgYnVpbGRGb3JQcm9maWxpbmc9XCJZRVNcIiBidWlsZEZvckFyY2hpdmluZz1cIllFU1wiIGJ1aWxkRm9yQW5hbHl6aW5nPVwiWUVTXCI+XG4gICAgICAgICAgICBgKVxuICB3cml0ZXIuYXBwZW5kKHJlZmVyZW5jZShcIlwiLCBcIi5hcHBcIiwgYXBwSWQpKVxuICB3cml0ZXIuYXBwZW5kKGBcbiAgICAgICAgIDwvQnVpbGRBY3Rpb25FbnRyeT5cbiAgICAgIDwvQnVpbGRBY3Rpb25FbnRyaWVzPlxuICAgPC9CdWlsZEFjdGlvbj5cbiAgIDxUZXN0QWN0aW9uIGJ1aWxkQ29uZmlndXJhdGlvbj1cIkRlYnVnXCIgc2VsZWN0ZWREZWJ1Z2dlcklkZW50aWZpZXI9XCJYY29kZS5EZWJ1Z2dlckZvdW5kYXRpb24uRGVidWdnZXIuTExEQlwiIHNlbGVjdGVkTGF1bmNoZXJJZGVudGlmaWVyPVwiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkxhdW5jaGVyLkxMREJcIiBzaG91bGRVc2VMYXVuY2hTY2hlbWVBcmdzRW52PVwiWUVTXCI+XG4gICAgICA8VGVzdGFibGVzPlxuICAgICAgICAgPFRlc3RhYmxlUmVmZXJlbmNlIHNraXBwZWQ9XCJOT1wiPlxuICAgICAgICAgICAgYClcbiAgd3JpdGVyLmFwcGVuZChyZWZlcmVuY2UoXCJUZXN0c1wiLCBcIlRlc3RzLnhjdGVzdFwiLCB0ZXN0SWQpKVxuICB3cml0ZXIuYXBwZW5kKGBcbiAgICAgICAgIDwvVGVzdGFibGVSZWZlcmVuY2U+XG4gICAgICAgICA8VGVzdGFibGVSZWZlcmVuY2Ugc2tpcHBlZD1cIk5PXCI+XG4gICAgICAgICAgICBgKVxuICB3cml0ZXIuYXBwZW5kKHJlZmVyZW5jZShcIlVJVGVzdHNcIiwgXCJVSVRlc3RzLnhjdGVzdFwiLCB1aVRlc3RJZCkpXG4gIHdyaXRlci5hcHBlbmQoYFxuICAgICAgICAgPC9UZXN0YWJsZVJlZmVyZW5jZT5cbiAgICAgIDwvVGVzdGFibGVzPlxuICAgPC9UZXN0QWN0aW9uPlxuICAgPExhdW5jaEFjdGlvbiBidWlsZENvbmZpZ3VyYXRpb249XCJEZWJ1Z1wiIHNlbGVjdGVkRGVidWdnZXJJZGVudGlmaWVyPVwiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkRlYnVnZ2VyLkxMREJcIiBzZWxlY3RlZExhdW5jaGVySWRlbnRpZmllcj1cIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5MYXVuY2hlci5MTERCXCIgbGF1bmNoU3R5bGU9XCIwXCIgdXNlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeT1cIk5PXCIgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9uTGF1bmNoPVwiTk9cIiBkZWJ1Z0RvY3VtZW50VmVyc2lvbmluZz1cIllFU1wiIGRlYnVnU2VydmljZUV4dGVuc2lvbj1cImludGVybmFsXCIgYWxsb3dMb2NhdGlvblNpbXVsYXRpb249XCJZRVNcIj5cbiAgICAgIDxCdWlsZGFibGVQcm9kdWN0UnVubmFibGUgcnVubmFibGVEZWJ1Z2dpbmdNb2RlPVwiMFwiPlxuICAgICAgICAgYClcbiAgd3JpdGVyLmFwcGVuZChyZWZlcmVuY2UoXCJcIiwgXCIuYXBwXCIsIGFwcElkKSlcbiAgd3JpdGVyLmFwcGVuZChgXG4gICAgICA8L0J1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZT5cbiAgIDwvTGF1bmNoQWN0aW9uPlxuICAgPFByb2ZpbGVBY3Rpb24gYnVpbGRDb25maWd1cmF0aW9uPVwiUmVsZWFzZVwiIHNob3VsZFVzZUxhdW5jaFNjaGVtZUFyZ3NFbnY9XCJZRVNcIiBzYXZlZFRvb2xJZGVudGlmaWVyPVwiXCIgdXNlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeT1cIk5PXCIgZGVidWdEb2N1bWVudFZlcnNpb25pbmc9XCJZRVNcIj5cbiAgICAgIDxCdWlsZGFibGVQcm9kdWN0UnVubmFibGUgcnVubmFibGVEZWJ1Z2dpbmdNb2RlPVwiMFwiPlxuICAgICAgICAgYClcbiAgd3JpdGVyLmFwcGVuZChyZWZlcmVuY2UoXCJcIiwgXCIuYXBwXCIsIGFwcElkKSlcbiAgd3JpdGVyLmFwcGVuZChgXG4gICAgICA8L0J1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZT5cbiAgIDwvUHJvZmlsZUFjdGlvbj5cbiAgIDxBbmFseXplQWN0aW9uIGJ1aWxkQ29uZmlndXJhdGlvbj1cIkRlYnVnXCIvPlxuICAgPEFyY2hpdmVBY3Rpb24gYnVpbGRDb25maWd1cmF0aW9uPVwiUmVsZWFzZVwiIHJldmVhbEFyY2hpdmVJbk9yZ2FuaXplcj1cIllFU1wiLz5cbjwvU2NoZW1lPlxuYClcblxuICByZXR1cm4gd3JpdGVyLmZpbmlzaCgpXG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY2xvc2VkIHVuc2lnbmVkIGJhc2UgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Db25maWd1cmF0aW9ufSBjb25maWd1cmF0aW9uIC0gQXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIHtSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0fSBCYXNlIHhjY29uZmlnIGFuZCBjYXVzYWwgY29uZmlndXJhdGlvbiBzcGFucy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyQmFzZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgQ29uZmlndXJhdGlvblRleHRXcml0ZXIoKVxuXG4gIHdyaXRlci5hcHBlbmQoYENPREVfU0lHTklOR19BTExPV0VEID0gTk9cbkNPREVfU0lHTklOR19SRVFVSVJFRCA9IE5PXG5HRU5FUkFURV9JTkZPUExJU1RfRklMRSA9IE5PXG5JUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IGApXG4gIHdyaXRlci5hcHBlbmQoY29uZmlndXJhdGlvbkZyYWdtZW50KFwiZGVwbG95bWVudFRhcmdldFwiLCBjb25maWd1cmF0aW9uLmRlcGxveW1lbnRUYXJnZXQpKVxuICB3cml0ZXIuYXBwZW5kKFwiXFxuUFJPRFVDVF9CVU5ETEVfSURFTlRJRklFUiA9IFwiKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcImJ1bmRsZUlkZW50aWZpZXJcIiwgY29uZmlndXJhdGlvbi5idW5kbGVJZGVudGlmaWVyKSlcbiAgd3JpdGVyLmFwcGVuZChcIlxcblBST0RVQ1RfTU9EVUxFX05BTUUgPSBcIilcbiAgd3JpdGVyLmFwcGVuZChjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJtb2R1bGVOYW1lXCIsIGNvbmZpZ3VyYXRpb24ubW9kdWxlTmFtZSkpXG4gIHdyaXRlci5hcHBlbmQoXCJcXG5QUk9EVUNUX05BTUUgPSBcIilcbiAgd3JpdGVyLmFwcGVuZChjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSlcbiAgd3JpdGVyLmFwcGVuZChgXG5TREtST09UID0gaXBob25lb3NcblNVUFBPUlRFRF9QTEFURk9STVMgPSBpcGhvbmVvcyBpcGhvbmVzaW11bGF0b3JcblRBUkdFVEVEX0RFVklDRV9GQU1JTFkgPSAxXG5gKVxuXG4gIHJldHVybiB3cml0ZXIuZmluaXNoKClcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBhbGxvd2xpc3RlZCBhcHBsaWNhdGlvbiBwcm9wZXJ0eSBsaXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb24gLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge1JlbmRlcmVkQ29uZmlndXJhdGlvblRleHR9IFByb3BlcnR5LWxpc3QgWE1MIGFuZCBjYXVzYWwgY29uZmlndXJhdGlvbiBzcGFucy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVySW5mb1BsaXN0KGNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IENvbmZpZ3VyYXRpb25UZXh0V3JpdGVyKClcblxuICB3cml0ZXIuYXBwZW5kKGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgXCItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU5cIiBcImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGRcIj5cbjxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+XG48ZGljdD5cbiAgPGtleT5DRkJ1bmRsZURpc3BsYXlOYW1lPC9rZXk+XG4gIDxzdHJpbmc+YClcbiAgd3JpdGVyLmFwcGVuZChjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJkaXNwbGF5TmFtZVwiLCB4bWxFc2NhcGUoY29uZmlndXJhdGlvbi5kaXNwbGF5TmFtZSkpKVxuICB3cml0ZXIuYXBwZW5kKGA8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT5cbiAgPHN0cmluZz4kKEVYRUNVVEFCTEVfTkFNRSk8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT5cbiAgPHN0cmluZz4kKFBST0RVQ1RfQlVORExFX0lERU5USUZJRVIpPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb248L2tleT5cbiAgPHN0cmluZz42LjA8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZU5hbWU8L2tleT5cbiAgPHN0cmluZz4kKFBST0RVQ1RfTkFNRSk8L3N0cmluZz5cbiAgPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+XG4gIDxzdHJpbmc+QVBQTDwvc3RyaW5nPlxuICA8a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPC9rZXk+XG4gIDxzdHJpbmc+MS4wPC9zdHJpbmc+XG4gIDxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+XG4gIDxzdHJpbmc+MTwvc3RyaW5nPlxuICA8a2V5PkxTUmVxdWlyZXNJUGhvbmVPUzwva2V5PlxuICA8dHJ1ZS8+XG4gIDxrZXk+VUlMYXVuY2hTY3JlZW48L2tleT5cbiAgPGRpY3QvPlxuPC9kaWN0PlxuPC9wbGlzdD5cbmApXG5cbiAgcmV0dXJuIHdyaXRlci5maW5pc2goKVxufVxuXG4vKipcbiAqIFJlbmRlcnMgcHVyZS1sb2dpYyBYQ1Rlc3Qgc291cmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb24gLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge1JlbmRlcmVkQ29uZmlndXJhdGlvblRleHR9IFhDVGVzdCBzb3VyY2UgYW5kIGNhdXNhbCBjb25maWd1cmF0aW9uIHNwYW5zLlxuICovXG5mdW5jdGlvbiByZW5kZXJVbml0VGVzdHMoY29uZmlndXJhdGlvbikge1xuICBjb25zdCB3cml0ZXIgPSBuZXcgQ29uZmlndXJhdGlvblRleHRXcml0ZXIoKVxuXG4gIHdyaXRlci5hcHBlbmQoXCJpbXBvcnQgWENUZXN0XFxuQHRlc3RhYmxlIGltcG9ydCBcIilcbiAgd3JpdGVyLmFwcGVuZChjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJtb2R1bGVOYW1lXCIsIGNvbmZpZ3VyYXRpb24ubW9kdWxlTmFtZSkpXG4gIHdyaXRlci5hcHBlbmQoXCJcXG5cXG5maW5hbCBjbGFzcyBcIilcbiAgd3JpdGVyLmFwcGVuZChjb25maWd1cmF0aW9uRnJhZ21lbnQoXCJwcm9kdWN0TmFtZVwiLCBjb25maWd1cmF0aW9uLnByb2R1Y3ROYW1lKSlcbiAgd3JpdGVyLmFwcGVuZChgVGVzdHM6IFhDVGVzdENhc2Uge1xuICBmdW5jIHRlc3RTZW1hbnRpY091dHB1dElzRGV0ZXJtaW5pc3RpYygpIHtcbiAgICBYQ1RBc3NlcnRFcXVhbChTZW1hbnRpZm9sZEJyaWRnZS5ydW4oKSwgU2VtYW50aWZvbGRCcmlkZ2UucnVuKCkpXG4gIH1cblxuICBmdW5jIHRlc3RPdXRwdXRTaW5rUHJlc2VydmVzU2NhbGFyTGluZXMoKSB7XG4gICAgbGV0IG91dHB1dCA9IFNlbWFudGlmb2xkT3V0cHV0U2luaygpXG4gICAgb3V0cHV0LndyaXRlKEludDY0KDcpKVxuICAgIG91dHB1dC53cml0ZSh0cnVlKVxuICAgIG91dHB1dC53cml0ZShcIsOp8J+YgFwiKVxuICAgIFhDVEFzc2VydEVxdWFsKG91dHB1dC5saW5lcywgW1wiN1wiLCBcInRydWVcIiwgXCLDqfCfmIBcIl0pXG4gIH1cbn1cbmApXG5cbiAgcmV0dXJuIHdyaXRlci5maW5pc2goKVxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGFjY2Vzc2liaWxpdHktcm91dGUgWENVSSBzb3VyY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbn0gY29uZmlndXJhdGlvbiAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyB7UmVuZGVyZWRDb25maWd1cmF0aW9uVGV4dH0gWENVSSBzb3VyY2UgYW5kIGNhdXNhbCBjb25maWd1cmF0aW9uIHNwYW5zLlxuICovXG5mdW5jdGlvbiByZW5kZXJVaVRlc3RzKGNvbmZpZ3VyYXRpb24pIHtcbiAgY29uc3Qgd3JpdGVyID0gbmV3IENvbmZpZ3VyYXRpb25UZXh0V3JpdGVyKClcblxuICB3cml0ZXIuYXBwZW5kKFwiaW1wb3J0IFhDVGVzdFxcblxcbmZpbmFsIGNsYXNzIFwiKVxuICB3cml0ZXIuYXBwZW5kKGNvbmZpZ3VyYXRpb25GcmFnbWVudChcInByb2R1Y3ROYW1lXCIsIGNvbmZpZ3VyYXRpb24ucHJvZHVjdE5hbWUpKVxuICB3cml0ZXIuYXBwZW5kKGBVSVRlc3RzOiBYQ1Rlc3RDYXNlIHtcbiAgZnVuYyB0ZXN0T3V0cHV0Vmlld0lzQWNjZXNzaWJsZSgpIHtcbiAgICBsZXQgYXBwbGljYXRpb24gPSBYQ1VJQXBwbGljYXRpb24oKVxuICAgIGFwcGxpY2F0aW9uLmxhdW5jaCgpXG4gICAgWENUQXNzZXJ0VHJ1ZShhcHBsaWNhdGlvbi5zdGF0aWNUZXh0c1tcInNlbWFudGlmb2xkLW91dHB1dFwiXS53YWl0Rm9yRXhpc3RlbmNlKHRpbWVvdXQ6IDUpKVxuICB9XG59XG5gKVxuXG4gIHJldHVybiB3cml0ZXIuZmluaXNoKClcbn1cblxuLyoqXG4gKiBFc2NhcGVzIFhNTCB0ZXh0IGFuZCBhdHRyaWJ1dGUgY29udGVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFhNTCB0ZXh0IG9yIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEVzY2FwZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHhtbEVzY2FwZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZUFsbChcIiZcIiwgXCImYW1wO1wiKS5yZXBsYWNlQWxsKFwiPFwiLCBcIiZsdDtcIikucmVwbGFjZUFsbChcIj5cIiwgXCImZ3Q7XCIpXG4gICAgLnJlcGxhY2VBbGwoXCJcXFwiXCIsIFwiJnF1b3Q7XCIpLnJlcGxhY2VBbGwoXCInXCIsIFwiJmFwb3M7XCIpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBvbmUgc3ludGhldGljIHRleHQgYXJ0aWZhY3QgY2FuZGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBBcnRpZmFjdCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFJvbGV9IHJvbGUgLSBBcnRpZmFjdCByb2xlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBFeGFjdCBMRiBjb250ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIFByb3ZlbmFuY2UgcmVhc29uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0fSBBcnRpZmFjdCBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIHN5bnRoZXRpY1RleHQocGF0aCwgcm9sZSwgY29udGVudCwgcmVhc29uKSB7XG4gIHJldHVybiB7XG4gICAgY29udGVudCxcbiAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgbWVkaWFUeXBlOiBwYXRoLmVuZHNXaXRoKFwiLnN3aWZ0XCIpID8gXCJ0ZXh0L3gtc3dpZnRcIiA6IHBhdGguZW5kc1dpdGgoXCIuanNvblwiKSA/IFwiYXBwbGljYXRpb24vanNvblwiIDpcbiAgICAgIHBhdGguZW5kc1dpdGgoXCIucGxpc3RcIikgfHwgcGF0aC5lbmRzV2l0aChcIi54Y3NjaGVtZVwiKSA/IFwiYXBwbGljYXRpb24veG1sXCIgOiBcInRleHQvcGxhaW5cIixcbiAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgcGF0aCxcbiAgICBwcm92ZW5hbmNlOiB7a2luZDogXCJzeW50aGV0aWNcIiwgcmVhc29uLCByZWxhdGVkT3JpZ2luczogW119LFxuICAgIHJvbGVcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzeW50aGV0aWMgYXJ0aWZhY3QgYW5kIHRyYW5zZmVycyBpdHMgcmVuZGVyZXItb3duZWQgY29uZmlndXJhdGlvbiBzcGFucyB0byB0aGUgbWFuaWZlc3QgbGVkZ2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBBcnRpZmFjdCBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFJvbGV9IHJvbGUgLSBBcnRpZmFjdCByb2xlLlxuICogQHBhcmFtIHtSZW5kZXJlZENvbmZpZ3VyYXRpb25UZXh0fSByZW5kZXJlZCAtIFJlbmRlcmVkIGNvbnRlbnQgYW5kIGNhdXNhbCBzcGFucy5cbiAqIEBwYXJhbSB7Q29uZmlndXJhdGlvbkFydGlmYWN0U3BhbltdfSBzcGFucyAtIEFwcGxpY2F0aW9uLXdpZGUgY2F1c2FsIHNwYW4gbGVkZ2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIFByb3ZlbmFuY2UgcmVhc29uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0fSBBcnRpZmFjdCBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIGNvbmZpZ3VyZWRTeW50aGV0aWNUZXh0KHBhdGgsIHJvbGUsIHJlbmRlcmVkLCBzcGFucywgcmVhc29uKSB7XG4gIHNwYW5zLnB1c2goLi4ucmVuZGVyZWQuY29uZmlndXJhdGlvblNwYW5zLm1hcChzcGFuID0+ICh7Li4uc3BhbiwgcGF0aH0pKSlcblxuICByZXR1cm4gc3ludGhldGljVGV4dChwYXRoLCByb2xlLCByZW5kZXJlZC5jb250ZW50LCByZWFzb24pXG59XG5cbi8qKlxuICogU2VyaWFsaXplcyByZWN1cnNpdmVseSBzb3J0ZWQgY2Fub25pY2FsIEpTT04gd2l0aCBhbiBMRi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBKU09OIHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gQ2Fub25pY2FsIEpTT04gd2l0aCBMRi5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5Q2Fub25pY2FsSnNvbih2YWx1ZSkge1xuICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkoc29ydEpzb24odmFsdWUpLCBudWxsLCAyKX1cXG5gXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc29ydHMgSlNPTiBvYmplY3Qga2V5cyB3aXRob3V0IHJlb3JkZXJpbmcgYXJyYXlzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIEpTT04gdmFsdWUuXG4gKiBAcmV0dXJucyB7dW5rbm93bn0gUmVjdXJzaXZlbHkga2V5LXNvcnRlZCBKU09OLlxuICovXG5mdW5jdGlvbiBzb3J0SnNvbih2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5tYXAoc29ydEpzb24pXG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKS5tYXAoa2V5ID0+IFtrZXksIHNvcnRKc29uKHZhbHVlW2tleV0pXSkpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBzbmFwc2hvdHMgdGhlIHN0cmljdCBiYXNlbGluZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICogSWRlbnRpdHkgYW5kIGRlcGxveW1lbnQgZmllbGRzIGludGVudGlvbmFsbHkgaGF2ZSBubyBkZWZhdWx0cyB3aXRob3V0IEFwcGxlLWxhbmUgZXZpZGVuY2UuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIENhbmRpZGF0ZSBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbn0gTm9ybWFsaXplZCBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb25maWd1cmF0aW9uKGNhbmRpZGF0ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QoY2FuZGlkYXRlKSB8fCBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLnNvbWUoa2V5ID0+ICFjb25maWd1cmF0aW9uRmllbGRzLmhhcyhrZXkpKSkge1xuICAgIGludmFsaWRDb25maWd1cmF0aW9uKFwiaU9TIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gbXVzdCBiZSBhIGNsb3NlZCBwbGFpbiBvYmplY3QuXCIpXG4gIH1cbiAgY29uc3QgcHJvZHVjdE5hbWUgPSBjYW5kaWRhdGUucHJvZHVjdE5hbWVcbiAgY29uc3QgbW9kdWxlTmFtZSA9IGNhbmRpZGF0ZS5tb2R1bGVOYW1lXG4gIGNvbnN0IG9yZ2FuaXphdGlvblByZWZpeCA9IGNhbmRpZGF0ZS5vcmdhbml6YXRpb25QcmVmaXhcbiAgY29uc3QgYnVuZGxlSWRlbnRpZmllciA9IGNhbmRpZGF0ZS5idW5kbGVJZGVudGlmaWVyXG4gIGNvbnN0IGRlcGxveW1lbnRUYXJnZXQgPSBjYW5kaWRhdGUuZGVwbG95bWVudFRhcmdldFxuICBjb25zdCBkaXNwbGF5TmFtZSA9IGNhbmRpZGF0ZS5kaXNwbGF5TmFtZVxuXG4gIGlmICh0eXBlb2YgcHJvZHVjdE5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhL15bQS1aXVtBLVphLXowLTldKiQvdS50ZXN0KHByb2R1Y3ROYW1lKSkge1xuICAgIGludmFsaWRDb25maWd1cmF0aW9uKFwiUHJvZHVjdCBuYW1lIG11c3QgYmUgYW4gQVNDSUkgdXBwZXItY2FtZWwgaWRlbnRpZmllci5cIilcbiAgfVxuICBpZiAodHlwZW9mIG1vZHVsZU5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhL15bQS1aXVtBLVphLXowLTldKiQvdS50ZXN0KG1vZHVsZU5hbWUpKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJNb2R1bGUgbmFtZSBtdXN0IGJlIGFuIEFTQ0lJIHVwcGVyLWNhbWVsIGlkZW50aWZpZXIuXCIpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcmdhbml6YXRpb25QcmVmaXggIT0gXCJzdHJpbmdcIiB8fCAhaXNSZXZlcnNlRG5zKG9yZ2FuaXphdGlvblByZWZpeCwgMikpIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIk9yZ2FuaXphdGlvbiBwcmVmaXggbXVzdCBiZSBhIGxvd2VyY2FzZSByZXZlcnNlLUROUyBpZGVudGl0eSB3aXRoIGF0IGxlYXN0IHR3byBzZWdtZW50cy5cIilcbiAgfVxuICBpZiAodHlwZW9mIGJ1bmRsZUlkZW50aWZpZXIgIT0gXCJzdHJpbmdcIiB8fCAhaXNSZXZlcnNlRG5zKGJ1bmRsZUlkZW50aWZpZXIsIDMpIHx8XG4gICAgIWJ1bmRsZUlkZW50aWZpZXIuc3RhcnRzV2l0aChgJHtvcmdhbml6YXRpb25QcmVmaXh9LmApKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJCdW5kbGUgaWRlbnRpZmllciBtdXN0IGV4dGVuZCB0aGUgZXhhY3Qgb3JnYW5pemF0aW9uIHByZWZpeCBhcyBsb3dlcmNhc2UgcmV2ZXJzZSBETlMuXCIpXG4gIH1cbiAgaWYgKHR5cGVvZiBkZXBsb3ltZW50VGFyZ2V0ICE9IFwic3RyaW5nXCIgfHwgIS9eWzEtOV1bMC05XSpcXC4oPzowfFsxLTldWzAtOV0qKSQvdS50ZXN0KGRlcGxveW1lbnRUYXJnZXQpKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJEZXBsb3ltZW50IHRhcmdldCBtdXN0IGJlIGEgY2FsbGVyLXN1cHBsaWVkIGNhbm9uaWNhbCBtYWpvci5taW5vciB2ZXJzaW9uLlwiKVxuICB9XG4gIGlmICh0eXBlb2YgZGlzcGxheU5hbWUgIT0gXCJzdHJpbmdcIiB8fCBkaXNwbGF5TmFtZS5sZW5ndGggPT0gMCB8fCBkaXNwbGF5TmFtZS50cmltKCkgIT0gZGlzcGxheU5hbWUgfHxcbiAgICBbLi4uZGlzcGxheU5hbWVdLmxlbmd0aCA+IDY0IHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMoZGlzcGxheU5hbWUpIHx8IC9cXHB7Q2N9L3UudGVzdChkaXNwbGF5TmFtZSkpIHtcbiAgICBpbnZhbGlkQ29uZmlndXJhdGlvbihcIkRpc3BsYXkgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHNpbmdsZS1saW5lIFVuaWNvZGUgc2NhbGFyIHN0cmluZyBvZiBhdCBtb3N0IDY0IGNoYXJhY3RlcnMuXCIpXG4gIH1cbiAgY29uc3Qgc291cmNlUm9vdCA9IGNhbmRpZGF0ZS5zb3VyY2VSb290ID8/IFwiU291cmNlc1wiXG4gIGNvbnN0IHJlc291cmNlUm9vdCA9IGNhbmRpZGF0ZS5yZXNvdXJjZVJvb3QgPz8gXCJBc3NldHMueGNhc3NldHNcIlxuICBjb25zdCBsaWZlY3ljbGUgPSBjYW5kaWRhdGUubGlmZWN5Y2xlID8/IFwic3dpZnR1aVwiXG5cbiAgaWYgKHNvdXJjZVJvb3QgIT0gXCJTb3VyY2VzXCIgfHwgIWlzU2FmZUFydGlmYWN0UGF0aChzb3VyY2VSb290KSkgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJUaGUgc3VwcG9ydGVkIHNvdXJjZSByb290IGlzIGV4YWN0bHkgJ1NvdXJjZXMnLlwiKVxuICBpZiAocmVzb3VyY2VSb290ICE9IFwiQXNzZXRzLnhjYXNzZXRzXCIgfHwgIWlzU2FmZUFydGlmYWN0UGF0aChyZXNvdXJjZVJvb3QpKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJUaGUgc3VwcG9ydGVkIHJlc291cmNlIHJvb3QgaXMgZXhhY3RseSAnQXNzZXRzLnhjYXNzZXRzJy5cIilcbiAgfVxuICBpZiAobGlmZWN5Y2xlICE9IFwic3dpZnR1aVwiKSBpbnZhbGlkQ29uZmlndXJhdGlvbihcIlRoZSBzdXBwb3J0ZWQgYXBwbGljYXRpb24gbGlmZWN5Y2xlIGlzIGV4YWN0bHkgJ3N3aWZ0dWknLlwiKVxuICBjb25zdCBpbmZvUGxpc3QgPSBjYW5kaWRhdGUuaW5mb1BsaXN0ID8/IHt9XG5cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGluZm9QbGlzdCkgfHwgT2JqZWN0LmtleXMoaW5mb1BsaXN0KS5sZW5ndGggPiAwKSB7XG4gICAgaW52YWxpZENvbmZpZ3VyYXRpb24oXCJUaGUgYmFzZWxpbmUgY2FsbGVyIEluZm8ucGxpc3QgZXh0ZW5zaW9uIGFsbG93bGlzdCBpcyBlbXB0eS5cIilcbiAgfVxuICBjb25zdCBwZXJtaXNzaW9ucyA9IGVtcHR5Q29uZmlndXJhdGlvblNldChjYW5kaWRhdGUucGVybWlzc2lvbnMsIFwicGVybWlzc2lvbnNcIilcbiAgY29uc3QgZW50aXRsZW1lbnRzID0gZW1wdHlDb25maWd1cmF0aW9uU2V0KGNhbmRpZGF0ZS5lbnRpdGxlbWVudHMsIFwiZW50aXRsZW1lbnRzXCIpXG4gIGNvbnN0IHByaXZhY3lEZWNsYXJhdGlvbnMgPSBlbXB0eUNvbmZpZ3VyYXRpb25TZXQoY2FuZGlkYXRlLnByaXZhY3lEZWNsYXJhdGlvbnMsIFwicHJpdmFjeSBkZWNsYXJhdGlvbnNcIilcbiAgY29uc3QgY2FwYWJpbGl0aWVzID0gZW1wdHlDb25maWd1cmF0aW9uU2V0KGNhbmRpZGF0ZS5jYXBhYmlsaXRpZXMsIFwiY2FwYWJpbGl0aWVzXCIpXG5cbiAgcmV0dXJuIHtcbiAgICBidW5kbGVJZGVudGlmaWVyLFxuICAgIGNhcGFiaWxpdGllcyxcbiAgICBkZXBsb3ltZW50VGFyZ2V0LFxuICAgIGRpc3BsYXlOYW1lLFxuICAgIGVudGl0bGVtZW50cyxcbiAgICBpbmZvUGxpc3Q6IHt9LFxuICAgIGxpZmVjeWNsZTogXCJzd2lmdHVpXCIsXG4gICAgbW9kdWxlTmFtZSxcbiAgICBvcmdhbml6YXRpb25QcmVmaXgsXG4gICAgcGVybWlzc2lvbnMsXG4gICAgcHJpdmFjeURlY2xhcmF0aW9ucyxcbiAgICBwcm9kdWN0TmFtZSxcbiAgICByZXNvdXJjZVJvb3Q6IFwiQXNzZXRzLnhjYXNzZXRzXCIsXG4gICAgc291cmNlUm9vdDogXCJTb3VyY2VzXCJcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgb3B0aW9uYWwgY2xvc2VkIGVtcHR5IGNvbmZpZ3VyYXRpb24gc2V0LlxuICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBPcHRpb25hbCBjbG9zZWQgc2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRGlhZ25vc3RpYyBsYWJlbC5cbiAqIEByZXR1cm5zIHtuZXZlcltdfSBFbXB0eSBzbmFwc2hvdC5cbiAqL1xuZnVuY3Rpb24gZW1wdHlDb25maWd1cmF0aW9uU2V0KGNhbmRpZGF0ZSwgbGFiZWwpIHtcbiAgaWYgKGNhbmRpZGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW11cbiAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlKSB8fCBjYW5kaWRhdGUubGVuZ3RoICE9IDApIGludmFsaWRDb25maWd1cmF0aW9uKGBUaGUgYmFzZWxpbmUgJHtsYWJlbH0gc2V0IG11c3QgYmUgZW1wdHkuYClcblxuICByZXR1cm4gW11cbn1cblxuLyoqXG4gKiBUZXN0cyBvbmUgY2Fub25pY2FsIGxvd2VyY2FzZSByZXZlcnNlLUROUyBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIENhbmRpZGF0ZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50cyAtIE1pbmltdW0gc2VnbWVudHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsaWRpdHkuXG4gKi9cbmZ1bmN0aW9uIGlzUmV2ZXJzZURucyh2YWx1ZSwgc2VnbWVudHMpIHtcbiAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdChcIi5cIilcblxuICByZXR1cm4gcGFydHMubGVuZ3RoID49IHNlZ21lbnRzICYmIHBhcnRzLmV2ZXJ5KHBhcnQgPT4gL15bYS16XVthLXowLTktXSokL3UudGVzdChwYXJ0KSAmJiAhcGFydC5lbmRzV2l0aChcIi1cIikpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzLCBoYXNoZXMsIHNuYXBzaG90cywgYW5kIGNhbm9uaWNhbGx5IHNvcnRzIGNhbGxlciBhc3NldHMuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIENhbmRpZGF0ZSBhc3NldCBhcnJheS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXNvdXJjZVJvb3QgLSBFeGFjdCByZXNvdXJjZSByb290LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklvc0FwcGxpY2F0aW9uQXNzZXRJbnB1dFtdfSBOb3JtYWxpemVkIGFzc2V0cy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQXNzZXRzKGNhbmRpZGF0ZSwgcmVzb3VyY2VSb290KSB7XG4gIGlmIChjYW5kaWRhdGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtdXG4gIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZSkpIGludmFsaWRBc3NldChcIkFwcGxpY2F0aW9uIGFzc2V0cyBtdXN0IGJlIGEgZGVuc2UgYXJyYXkuXCIpXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSW9zQXBwbGljYXRpb25Bc3NldElucHV0W119ICovXG4gIGNvbnN0IGFzc2V0cyA9IFtdXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhbmRpZGF0ZS5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBhc3NldCA9IGNhbmRpZGF0ZVtpbmRleF1cblxuICAgIGlmICghaXNQbGFpbk9iamVjdChhc3NldCkgfHwgT2JqZWN0LmtleXMoYXNzZXQpLnNvbWUoa2V5ID0+ICFhc3NldEZpZWxkcy5oYXMoa2V5KSkgfHxcbiAgICAgIE9iamVjdC5rZXlzKGFzc2V0KS5sZW5ndGggIT0gYXNzZXRGaWVsZHMuc2l6ZSkgaW52YWxpZEFzc2V0KGBBc3NldCAke2luZGV4fSBtdXN0IHVzZSB0aGUgY2xvc2VkIGFzc2V0IHNjaGVtYS5gKVxuICAgIGNvbnN0IHBhdGggPSBhc3NldC5wYXRoXG4gICAgY29uc3QgY29udGVudCA9IGFzc2V0LmNvbnRlbnRcbiAgICBjb25zdCBtZWRpYVR5cGUgPSBhc3NldC5tZWRpYVR5cGVcbiAgICBjb25zdCBzaGEyNTYgPSBhc3NldC5zaGEyNTZcblxuICAgIGlmICghaXNTYWZlQXJ0aWZhY3RQYXRoKHBhdGgpIHx8ICFwYXRoLnN0YXJ0c1dpdGgoYCR7cmVzb3VyY2VSb290fS9gKSB8fCBwYXRoID09IGAke3Jlc291cmNlUm9vdH0vQ29udGVudHMuanNvbmApIHtcbiAgICAgIGludmFsaWRBc3NldChgQXNzZXQgJHtpbmRleH0gcmVxdWlyZXMgYSBzYWZlIHBhdGggYmVsb3cgJyR7cmVzb3VyY2VSb290fScuYClcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjb250ZW50ICE9IFwic3RyaW5nXCIgJiYgIShjb250ZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkgfHxcbiAgICAgIHR5cGVvZiBjb250ZW50ID09IFwic3RyaW5nXCIgJiYgKGNvbnRlbnQubGVuZ3RoID09IDAgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhjb250ZW50KSkgfHxcbiAgICAgIGNvbnRlbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5ICYmIGNvbnRlbnQuYnl0ZUxlbmd0aCA9PSAwKSBpbnZhbGlkQXNzZXQoYEFzc2V0ICcke3BhdGh9JyByZXF1aXJlcyBub24tZW1wdHkgZXhhY3QgY29udGVudC5gKVxuICAgIGlmICh0eXBlb2YgbWVkaWFUeXBlICE9IFwic3RyaW5nXCIgfHwgIW1lZGlhVHlwZVBhdHRlcm4udGVzdChtZWRpYVR5cGUpIHx8IC9bXFxyXFxuXS91LnRlc3QobWVkaWFUeXBlKSkge1xuICAgICAgaW52YWxpZEFzc2V0KGBBc3NldCAnJHtwYXRofScgcmVxdWlyZXMgYW4gZXhwbGljaXQgdmFsaWQgbWVkaWEgdHlwZS5gKVxuICAgIH1cbiAgICBjb25zdCBzbmFwc2hvdCA9IHR5cGVvZiBjb250ZW50ID09IFwic3RyaW5nXCIgPyBjb250ZW50IDogbmV3IFVpbnQ4QXJyYXkoY29udGVudClcbiAgICBjb25zdCBhY3R1YWxIYXNoID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoc25hcHNob3QpLmRpZ2VzdChcImhleFwiKVxuXG4gICAgaWYgKHR5cGVvZiBzaGEyNTYgIT0gXCJzdHJpbmdcIiB8fCAhL15bMC05YS1mXXs2NH0kL3UudGVzdChzaGEyNTYpIHx8IHNoYTI1NiAhPSBhY3R1YWxIYXNoKSB7XG4gICAgICBpbnZhbGlkQXNzZXQoYEFzc2V0ICcke3BhdGh9JyBTSEEtMjU2IGRvZXMgbm90IG1hdGNoIGl0cyBleGFjdCBjb250ZW50LmApXG4gICAgfVxuICAgIGFzc2V0cy5wdXNoKHtjb250ZW50OiBzbmFwc2hvdCwgbWVkaWFUeXBlLCBwYXRoLCBzaGEyNTZ9KVxuICB9XG4gIGFzc2V0cy5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5wYXRoIDwgcmlnaHQucGF0aCA/IC0xIDogbGVmdC5wYXRoID4gcmlnaHQucGF0aCA/IDEgOiAwKVxuXG4gIHJldHVybiBhc3NldHNcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGV4YWN0IHRleHQgb3IgYmluYXJ5IGFzc2V0IGFydGlmYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Jb3NBcHBsaWNhdGlvbkFzc2V0SW5wdXR9IGFzc2V0IC0gVmFsaWRhdGVkIGFzc2V0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0fSBBcnRpZmFjdCBjYW5kaWRhdGUuXG4gKi9cbmZ1bmN0aW9uIGFzc2V0QXJ0aWZhY3QoYXNzZXQpIHtcbiAgaWYgKHR5cGVvZiBhc3NldC5jb250ZW50ID09IFwic3RyaW5nXCIpIHJldHVybiB7XG4gICAgY29udGVudDogYXNzZXQuY29udGVudCxcbiAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgbWVkaWFUeXBlOiBhc3NldC5tZWRpYVR5cGUsXG4gICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgIHBhdGg6IGFzc2V0LnBhdGgsXG4gICAgcHJvdmVuYW5jZToge2tpbmQ6IFwic3ludGhldGljXCIsIHJlYXNvbjogYEV4YWN0IGNhbGxlci1wcm92aWRlZCBpT1MgYXNzZXQgKHNoYTI1Njoke2Fzc2V0LnNoYTI1Nn0pLmAsIHJlbGF0ZWRPcmlnaW5zOiBbXX0sXG4gICAgcm9sZTogXCJyZXNvdXJjZVwiXG4gIH1cbiAgY29uc3QgY29udGVudCA9IG5ldyBVaW50OEFycmF5KGFzc2V0LmNvbnRlbnQpXG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50LFxuICAgIGNvbnRlbnRLaW5kOiBcImJpbmFyeVwiLFxuICAgIG1lZGlhVHlwZTogYXNzZXQubWVkaWFUeXBlLFxuICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICBwYXRoOiBhc3NldC5wYXRoLFxuICAgIHByb3ZlbmFuY2U6IHtraW5kOiBcImJ5dGVzXCIsIG1hcHBpbmc6IGNyZWF0ZUJ5dGVNYXBwaW5nKHtcbiAgICAgIGJ5dGVMZW5ndGg6IGNvbnRlbnQuYnl0ZUxlbmd0aCxcbiAgICAgIHBhdGg6IGFzc2V0LnBhdGgsXG4gICAgICByYW5nZXM6IFt7XG4gICAgICAgIGdlbmVyYXRlZDoge2VuZDogY29udGVudC5ieXRlTGVuZ3RoLCBzdGFydDogMH0sXG4gICAgICAgIG9yaWdpbjoge2tpbmQ6IFwic3ludGhldGljXCIsIHJlYXNvbjogYEV4YWN0IGNhbGxlci1wcm92aWRlZCBpT1MgYXNzZXQgKHNoYTI1Njoke2Fzc2V0LnNoYTI1Nn0pLmAsIHJlbGF0ZWRPcmlnaW5zOiBbXX0sXG4gICAgICAgIHJvbGU6IFwiYXNzZXRcIlxuICAgICAgfV1cbiAgICB9KX0sXG4gICAgcm9sZTogXCJyZXNvdXJjZVwiXG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBjb25maWd1cmF0aW9uIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEZhaWx1cmUgZGV0YWlsLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkQ29uZmlndXJhdGlvbihtZXNzYWdlKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiSU5WQUxJRF9BUFBMSUNBVElPTl9DT05GSUdVUkFUSU9OXCIsIGxhbmd1YWdlOiBcImlvc1wiLCBtZXNzYWdlfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gYXNzZXQgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRBc3NldChtZXNzYWdlKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiSU5WQUxJRF9BUFBMSUNBVElPTl9BU1NFVFwiLCBsYW5ndWFnZTogXCJpb3NcIiwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGFwcGxpY2F0aW9uLXBhdGggZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRQYXRoKG1lc3NhZ2UpIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJJTlZBTElEX0FQUExJQ0FUSU9OX1BBVEhcIiwgbGFuZ3VhZ2U6IFwiaW9zXCIsIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSBiYWNrZW5kLW5hbWVzcGFjZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSBnZW5lcmF0ZWQgU3dpZnQgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gUHJlcGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZUlkIC0gU3RhYmxlIHByb2plY3QgbW9kdWxlIGlkZW50aXR5LlxuICogQHBhcmFtIHtib29sZWFufSBlbnRyeSAtIFdoZXRoZXIgdGhpcyBtb2R1bGUgb3ducyB0aGUgc2VtYW50aWMgZW50cnkuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcgfCB1bmRlZmluZWQsIHtkZWNsYXJhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbiwgbW9kdWxlSWQ6IHN0cmluZ30+fSBkZWNsYXJhdGlvbnMgLSBSZXNvbHZlZCBmdW5jdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGVtaXRTZW1hbnRpY01vZHVsZSh3cml0ZXIsIG1vZHVsZSwgbW9kdWxlSWQsIGVudHJ5LCBkZWNsYXJhdGlvbnMpIHtcbiAgY29uc3QgbmFtZXNwYWNlID0gYFNlbWFudGlmb2xkTW9kdWxlJHttb2R1bGVOYW1lKG1vZHVsZUlkKX1gXG5cbiAgd3JpdGVyLnN5bnRoZXRpYyhgZW51bSAke25hbWVzcGFjZX0ge1xcbmAsIFwiaU9TIHNlbWFudGljIG1vZHVsZSBuYW1lc3BhY2VcIiwgW21vZHVsZV0sIFtcIlwiXSlcbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgZnVuY3Rpb25JbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9YFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiAgc3RhdGljIFwiLCBcImlPUyBuYW1lc3BhY2VkIGZ1bmN0aW9uIHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiZnVuY1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZGVjbGFyYXRpb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJmdW5jdGlvbiBwYXJhbWV0ZXIgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW1ldGVyLCBwYXJhbWV0ZXJJbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGFyYW1ldGVyUGF0aCA9IGAke3BhdGh9L3BhcmFtZXRlcnMvJHtwYXJhbWV0ZXJJbmRleH1gXG5cbiAgICAgIGlmIChwYXJhbWV0ZXJJbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwicGFyYW1ldGVyIHNlcGFyYXRvclwiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIl8gXCIsIFwidW5sYWJlbGVkIFN3aWZ0IHBhcmFtZXRlciBzY2FmZm9sZFwiLCBbcGFyYW1ldGVyXSwgW3BhcmFtZXRlclBhdGhdKVxuICAgICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHBhcmFtZXRlciwgcGF0aDogcGFyYW1ldGVyUGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIjogXCIsIFwicGFyYW1ldGVyIGFubm90YXRpb24gc2NhZmZvbGRcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJzd2lmdFwiLCBwYXJhbWV0ZXIudHlwZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIudHlwZSxcbiAgICAgICAgcGF0aDogYCR7cGFyYW1ldGVyUGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwifSlcbiAgICB9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIsIF8gc2VtYW50aWZvbGRfb3V0cHV0OiBTZW1hbnRpZm9sZE91dHB1dFNpbmspIC0+IFwiLCBcInNoYXJlZCBpT1Mgb3V0cHV0IHNpbmsgcGFyYW1ldGVyXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwic3dpZnRcIiwgZGVjbGFyYXRpb24ucmV0dXJuVHlwZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlLFxuICAgICAgcGF0aDogYCR7cGF0aH0vcmV0dXJuVHlwZWAsIHJvbGU6IFwidHlwZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIHtcXG5cIiwgXCJTd2lmdCBmdW5jdGlvbiBib2R5IHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBkZWNsYXJhdGlvbi5ib2R5LCBcIiAgICBcIiwgYCR7cGF0aH0vYm9keWAsIGRlY2xhcmF0aW9ucylcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICB9XFxuXCIsIFwiU3dpZnQgZnVuY3Rpb24gYm9keSBzY2FmZm9sZFwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gIH0pXG4gIGlmIChlbnRyeSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgIHN0YXRpYyBmdW5jIHNlbWFudGlmb2xkRW50cnkoKSAtPiBbU3RyaW5nXSB7XFxuXCIsIFwiaU9TIHNlbWFudGljIGVudHJ5IHNjYWZmb2xkXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgICAgbGV0IHNlbWFudGlmb2xkX291dHB1dCA9IFNlbWFudGlmb2xkT3V0cHV0U2luaygpXFxuXCIsIFwic2hhcmVkIGlPUyBvdXRwdXQgc2luayBhbGxvY2F0aW9uXCIsXG4gICAgICBbbW9kdWxlLmVudHJ5UG9pbnRdLCBbXCIvZW50cnlQb2ludFwiXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBcIiAgICBcIiwgXCIvZW50cnlQb2ludC9ib2R5XCIsIGRlY2xhcmF0aW9ucylcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICAgIHJldHVybiBzZW1hbnRpZm9sZF9vdXRwdXQubGluZXNcXG5cIiwgXCJpT1Mgc2VtYW50aWMgb3V0cHV0IHJldHVyblwiLCBbbW9kdWxlLmVudHJ5UG9pbnRdLCBbXCIvZW50cnlQb2ludFwiXSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiICB9XFxuXCIsIFwiaU9TIHNlbWFudGljIGVudHJ5IHNjYWZmb2xkXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICB9XG4gIHdyaXRlci5zeW50aGV0aWMoXCJ9XFxuXCIsIFwiaU9TIHNlbWFudGljIG1vZHVsZSBuYW1lc3BhY2VcIiwgW21vZHVsZV0sIFtcIlwiXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIHZhbGlkYXRlZCBvcmRlcmVkIHNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEJsb2NrIG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IHVuZGVmaW5lZCwge2RlY2xhcmF0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uLCBtb2R1bGVJZDogc3RyaW5nfT59IGRlY2xhcmF0aW9ucyAtIFJlc29sdmVkIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZW1pdEJsb2NrKHdyaXRlciwgYmxvY2ssIGluZGVudCwgcGF0aCwgZGVjbGFyYXRpb25zKSB7XG4gIGJsb2NrLnN0YXRlbWVudHMuZm9yRWFjaCgoc3RhdGVtZW50LCBpbmRleCkgPT4gZW1pdFN0YXRlbWVudCh3cml0ZXIsIHN0YXRlbWVudCwgaW5kZW50LCBgJHtwYXRofS9zdGF0ZW1lbnRzLyR7aW5kZXh9YCwgZGVjbGFyYXRpb25zKSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgU3dpZnQgc3RhdGVtZW50IHRocm91Z2ggdGhlIHNoYXJlZCBjYXB0dXJlIHNpbmsuXG4gKiBAcGFyYW0ge1NvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50fSBzdGF0ZW1lbnQgLSBWYWxpZGF0ZWQgc3RhdGVtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGluZGVudCAtIEN1cnJlbnQgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFN0YXRlbWVudCBvY2N1cnJlbmNlIHBhdGguXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcgfCB1bmRlZmluZWQsIHtkZWNsYXJhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbiwgbW9kdWxlSWQ6IHN0cmluZ30+fSBkZWNsYXJhdGlvbnMgLSBSZXNvbHZlZCBmdW5jdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGVtaXRTdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCwgZGVjbGFyYXRpb25zKSB7XG4gIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcImluZGVudGF0aW9uXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50Lm11dGFibGUgPyBcInZhclwiIDogXCJsZXRcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiZGVjbGFyYXRpb24gc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoc3RhdGVtZW50Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiOiBcIiwgXCJsb2NhbCBhbm5vdGF0aW9uIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U2NhbGFyVHlwZShcInN3aWZ0XCIsIHN0YXRlbWVudC50eXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50eXBlLFxuICAgICAgcGF0aDogYCR7cGF0aH0vdHlwZWAsIHJvbGU6IFwidHlwZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiID0gXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgaWYgKHN0YXRlbWVudC5tdXRhYmxlKSB3cml0ZXIuc3ludGhldGljKGAke2luZGVudH1zZW1hbnRpZm9sZF9rZWVwX211dGFibGUoJiR7c3RhdGVtZW50Lm5hbWV9KVxcbmAsXG4gICAgICBcIlN3aWZ0IG11dGFibGUtbG9jYWwgd2FybmluZyBtYXJrZXJcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC50YXJnZXQubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHN0YXRlbWVudC50YXJnZXQsIHBhdGg6IGAke3BhdGh9L3RhcmdldGAsIHJvbGU6IFwibmFtZVwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiID0gXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIGRlY2xhcmF0aW9ucylcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQuZXhwcmVzc2lvbikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImlPUyBTd2lmdCBiYXJlIHJldHVybiByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICAgIHdyaXRlci5tYXBwZWQoXCJyZXR1cm5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicmV0dXJuIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCJcXG5cIiwgXCJsaW5lIGJyZWFrXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHdyaXRlci5zeW50aGV0aWMoXCJzZW1hbnRpZm9sZF9vdXRwdXQud3JpdGUoXCIsIFwiaU9TIG91dHB1dCBjYXB0dXJlXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIGRlY2xhcmF0aW9ucylcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKVxcblwiLCBcImlPUyBvdXRwdXQgY2FwdHVyZVwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCAhPSBcIklmU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCBpT1MgU3dpZnQgc3RhdGVtZW50IHJlYWNoZWQgZW1pc3Npb24uXCIpXG4gIHdyaXRlci5tYXBwZWQoXCJpZlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIGRlY2xhcmF0aW9ucylcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiB7XFxuXCIsIFwiU3dpZnQgY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmNvbnNlcXVlbnQsIGAke2luZGVudH0gIGAsIGAke3BhdGh9L2NvbnNlcXVlbnRgLCBkZWNsYXJhdGlvbnMpXG4gIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fX1gLCBcIlN3aWZ0IGNvbmRpdGlvbmFsIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnQuY29uc2VxdWVudF0sIFtgJHtwYXRofS9jb25zZXF1ZW50YF0pXG4gIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBlbHNlIHtcXG5cIiwgXCJTd2lmdCBhbHRlcm5hdGUgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5hbHRlcm5hdGVdLCBbYCR7cGF0aH0vYWx0ZXJuYXRlYF0pXG4gICAgZW1pdEJsb2NrKHdyaXRlciwgc3RhdGVtZW50LmFsdGVybmF0ZSwgYCR7aW5kZW50fSAgYCwgYCR7cGF0aH0vYWx0ZXJuYXRlYCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fX1gLCBcIlN3aWZ0IGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmFsdGVybmF0ZV0sIFtgJHtwYXRofS9hbHRlcm5hdGVgXSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIEVtaXRzIG9uZSB2YWxpZGF0ZWQgVGFza3MgMDAxLTAwNCBleHByZXNzaW9uIGFuZCB0aHJlYWRzIHRoZSBzaGFyZWQgc2luayB0aHJvdWdoIGNhbGxzLlxuICogQHBhcmFtIHtTb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeHByZXNzaW9uIG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZyB8IHVuZGVmaW5lZCwge2RlY2xhcmF0aW9uOiBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uLCBtb2R1bGVJZDogc3RyaW5nfT59IGRlY2xhcmF0aW9ucyAtIFJlc29sdmVkIGZ1bmN0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBkZWNsYXJhdGlvbnMpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24ubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIHdyaXRlci5tYXBwZWQoU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChleHByZXNzaW9uLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgIHdyaXRlci5tYXBwZWQoZW1pdFN0cmluZ0xpdGVyYWwoXCJzd2lmdFwiLCBleHByZXNzaW9uLnZhbHVlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IHJlc29sdmVkID0gZGVjbGFyYXRpb25zLmdldChleHByZXNzaW9uLnJlc29sdXRpb24/LmRlY2xhcmF0aW9uSWQpXG5cbiAgICBpZiAoIXJlc29sdmVkKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHZhbGlkYXRlZCBpT1MgZnVuY3Rpb24gJyR7ZXhwcmVzc2lvbi5yZXNvbHV0aW9uPy5kZWNsYXJhdGlvbklkfScuYClcbiAgICB3cml0ZXIubWFwcGVkKGBTZW1hbnRpZm9sZE1vZHVsZSR7bW9kdWxlTmFtZShyZXNvbHZlZC5tb2R1bGVJZCl9LiR7cmVzb2x2ZWQuZGVjbGFyYXRpb24ubmFtZX1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBleHByZXNzaW9uLmNhbGxlZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJpT1Mgc2VtYW50aWMgZnVuY3Rpb24gY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgZGVjbGFyYXRpb25zKVxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiwgc2VtYW50aWZvbGRfb3V0cHV0KVwiLCBcInNoYXJlZCBpT1Mgb3V0cHV0IHNpbmsgYXJndW1lbnRcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKHVuYXJ5T3BlcmF0aW9uc1tleHByZXNzaW9uLm9wZXJhdGlvbl0sIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgZGVjbGFyYXRpb25zKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCAhPSBcIkJpbmFyeUV4cHJlc3Npb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIGlPUyBTd2lmdCBleHByZXNzaW9uIHJlYWNoZWQgZW1pc3Npb24uXCIpXG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgfHwgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgPyBcInNlbWFudGlmb2xkX3N0cmluZ19lcXVhbFwiIDogXCJzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsXCIsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGRlY2xhcmF0aW9ucylcbiAgICB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBkZWNsYXJhdGlvbnMpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBkZWNsYXJhdGlvbnMpXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgd3JpdGVyLm1hcHBlZChiaW5hcnlPcGVyYXRpb25zW2V4cHJlc3Npb24ub3BlcmF0aW9uXSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGRlY2xhcmF0aW9ucylcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHZhbGlkYXRlZCBsb2dpY2FsIG1vZHVsZSBpZGVudGl0eSB0byBpdHMgU3dpZnQgbmFtZXNwYWNlIHN1ZmZpeC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIExvZ2ljYWwgbW9kdWxlIGlkZW50aXR5LlxuICogQHJldHVybnMge3N0cmluZ30gRGV0ZXJtaW5pc3RpYyBTd2lmdCBuYW1lc3BhY2Ugc3VmZml4IGFuZCBmaWxlbmFtZS5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlTmFtZShpZCkge1xuICByZXR1cm4gaWQuc3BsaXQoL1suXy1dKy91KS5tYXAocGFydCA9PiBgJHtwYXJ0WzBdLnRvVXBwZXJDYXNlKCl9JHtwYXJ0LnNsaWNlKDEpfWApLmpvaW4oXCJcIilcbn1cblxuLyoqXG4gKiBDbG9uZXMgYW5kIG5vcm1hbGl6ZXMgb25lIHByb3ZlbmFuY2UtYmVhcmluZyBzZW1hbnRpYyBtb2R1bGUgaW50byBhIG9uZS1tb2R1bGUgcHJvamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGUgfCB1bmRlZmluZWR9IGNhbmRpZGF0ZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNQcm9ncmFtfSBOb3JtYWxpemVkIHByb2dyYW0uXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNpbmdsZU1vZHVsZShjYW5kaWRhdGUpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImlvc1wiLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtb2R1bGVcIiwgdW5kZWZpbmVkKVxuICBjb25zdCBtb2R1bGUgPSBzdHJ1Y3R1cmVkQ2xvbmUoY2FuZGlkYXRlKVxuICBjb25zdCBwcm92ZW5hbmNlU291cmNlcyA9IG1vZHVsZS5wcm92ZW5hbmNlPy5zb3VyY2VzXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHByb3ZlbmFuY2VTb3VyY2VzKSB8fCBwcm92ZW5hbmNlU291cmNlcy5sZW5ndGggIT0gMSB8fCBwcm92ZW5hbmNlU291cmNlc1swXS5jb250ZW50ID09PSBudWxsIHx8XG4gICAgcHJvdmVuYW5jZVNvdXJjZXNbMF0uZmlsZW5hbWUgIT0gbW9kdWxlLmxvY2F0aW9uPy5maWxlbmFtZSB8fCB0eXBlb2YgcHJvdmVuYW5jZVNvdXJjZXNbMF0ubGFuZ3VhZ2UgIT0gXCJzdHJpbmdcIikge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImlvc1wiLCBcInNpbmdsZS1tb2R1bGUgc291cmNlIG93bmVyc2hpcFwiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgcmVrZXlNb2R1bGVEZWNsYXJhdGlvbnMobW9kdWxlLCBcIm1haW5cIilcbiAgY29uc3QgZXhwb3J0cyA9IFtcbiAgICAuLi4obW9kdWxlLnJlY29yZHMgPz8gW10pLm1hcChkZWNsYXJhdGlvbiA9PiBhcHBsaWNhdGlvbkV4cG9ydChkZWNsYXJhdGlvbiwgXCJyZWNvcmRcIikpLFxuICAgIC4uLihtb2R1bGUuY2xhc3NlcyA/PyBbXSkubWFwKGRlY2xhcmF0aW9uID0+IGFwcGxpY2F0aW9uRXhwb3J0KGRlY2xhcmF0aW9uLCBcImNsYXNzXCIpKSxcbiAgICAuLi4obW9kdWxlLmVycm9ycyA/PyBbXSkubWFwKGRlY2xhcmF0aW9uID0+IGFwcGxpY2F0aW9uRXhwb3J0KGRlY2xhcmF0aW9uLCBcImVycm9yXCIpKSxcbiAgICAuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcChkZWNsYXJhdGlvbiA9PiBhcHBsaWNhdGlvbkV4cG9ydChkZWNsYXJhdGlvbiwgXCJmdW5jdGlvblwiKSlcbiAgXVxuICBjb25zdCBwcm9ncmFtTW9kdWxlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1Byb2dyYW1Nb2R1bGV9ICovICh7XG4gICAgLi4ubW9kdWxlLFxuICAgIGV4cG9ydHMsXG4gICAgaWQ6IFwibWFpblwiLFxuICAgIGltcG9ydHM6IFtdLFxuICAgIHNvdXJjZUZpbGVuYW1lOiBwcm92ZW5hbmNlU291cmNlc1swXS5maWxlbmFtZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgZW50cnlNb2R1bGU6IFwibWFpblwiLFxuICAgIGtpbmQ6IFwiUHJvZ3JhbVwiLFxuICAgIG1vZHVsZXM6IFtwcm9ncmFtTW9kdWxlXSxcbiAgICBzb3VyY2VzOiBzdHJ1Y3R1cmVkQ2xvbmUocHJvdmVuYW5jZVNvdXJjZXMpXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbm9ybWFsaXplZCBleHBvcnQgZm9yIGEgc2luZ2xlLW1vZHVsZSBkZWNsYXJhdGlvbiB3aXRob3V0IGludmVudGluZyBhIHNvdXJjZSByYW5nZS5cbiAqIEBwYXJhbSB7e2lkPzogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24sIG5hbWU6IHN0cmluZ319IGRlY2xhcmF0aW9uIC0gRXhwb3J0ZWQgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRGVjbGFyYXRpb25LaW5kfSBzeW1ib2xLaW5kIC0gRGVjbGFyYXRpb24gbmFtZXNwYWNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljRXhwb3J0fSBTeW50aGV0aWMgcHJvamVjdCBlZGdlIGFuY2hvcmVkIHRvIGl0cyBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbGljYXRpb25FeHBvcnQoZGVjbGFyYXRpb24sIHN5bWJvbEtpbmQpIHtcbiAgcmV0dXJuIHtcbiAgICBkZWNsYXJhdGlvbklkOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKGRlY2xhcmF0aW9uLmlkKSxcbiAgICBleHBvcnRlZE5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsXG4gICAga2luZDogXCJFeHBvcnRcIixcbiAgICBsb2NhdGlvbjogZGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgc3ltYm9sS2luZFxuICB9XG59XG5cbi8qKlxuICogUHJlZml4ZXMgZGVjbGFyYXRpb24gaWRlbnRpdGllcyBhbmQgdHlwZWQgcmVmZXJlbmNlcyBpbiBhIGNsb25lZCBzaW5nbGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2xvbmVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVJZCAtIE5vcm1hbGl6ZWQgbW9kdWxlIGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJla2V5TW9kdWxlRGVjbGFyYXRpb25zKG1vZHVsZSwgbW9kdWxlSWQpIHtcbiAgY29uc3QgZGVjbGFyYXRpb25zID0gWy4uLm1vZHVsZS5yZWNvcmRzID8/IFtdLCAuLi5tb2R1bGUuY2xhc3NlcyA/PyBbXSwgLi4ubW9kdWxlLmVycm9ycyA/PyBbXSwgLi4ubW9kdWxlLmZ1bmN0aW9uc11cbiAgY29uc3QgcmVwbGFjZW1lbnRzID0gbmV3IE1hcChkZWNsYXJhdGlvbnNcbiAgICAuZmlsdGVyKGRlY2xhcmF0aW9uID0+IHR5cGVvZiBkZWNsYXJhdGlvbi5pZCA9PSBcInN0cmluZ1wiKVxuICAgIC5tYXAoZGVjbGFyYXRpb24gPT4gW2RlY2xhcmF0aW9uLmlkLCBgJHttb2R1bGVJZH0jJHtkZWNsYXJhdGlvbi5pZH1gXSkpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGRlY2xhcmF0aW9uLmlkID09IFwic3RyaW5nXCIpIGRlY2xhcmF0aW9uLmlkID0gcmVwbGFjZW1lbnRzLmdldChkZWNsYXJhdGlvbi5pZClcbiAgfVxuICBjb25zdCBzZWVuID0gbmV3IFNldCgpXG4gIGNvbnN0IGlkZW50aXR5RmllbGRzID0gbmV3IFNldChbXCJjbGFzc0lkXCIsIFwiZGVjbGFyYXRpb25JZFwiLCBcImZpZWxkXCIsIFwibWV0aG9kXCIsIFwicGFyYW1ldGVySWRcIl0pXG4gIC8qKlxuICAgKiBSZXdyaXRlcyBkZWNsYXJhdGlvbiBpZGVudGl0aWVzIGluIG9uZSBjbG9uZWQgc2VtYW50aWMgc3VidHJlZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBzZW1hbnRpYyBzdWJ0cmVlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0KHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVyblxuICAgIHNlZW4uYWRkKHZhbHVlKVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgbmVzdGVkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGlkZW50aXR5RmllbGRzLmhhcyhrZXkpICYmIHR5cGVvZiBuZXN0ZWQgPT0gXCJzdHJpbmdcIiAmJiByZXBsYWNlbWVudHMuaGFzKG5lc3RlZCkpIHtcbiAgICAgICAgICBSZWZsZWN0LnNldCh2YWx1ZSwga2V5LCByZXBsYWNlbWVudHMuZ2V0KG5lc3RlZCkpXG4gICAgICAgIH0gZWxzZSB2aXNpdChuZXN0ZWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGZvciAoY29uc3QgbmVzdGVkIG9mIHZhbHVlKSB2aXNpdChuZXN0ZWQpXG4gIH1cbiAgdmlzaXQobW9kdWxlKVxufVxuXG4vKipcbiAqIFRlc3RzIGZvciBhIHBsYWluIHJlcXVlc3Qgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSByZXF1ZXN0LlxuICogQHJldHVybnMge3ZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+fSBXaGV0aGVyIGl0IGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PSBPYmplY3QucHJvdG90eXBlXG59XG4iXX0=
|