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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../src/language-registry.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../src/language-registry.js"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { generateGoModule } from "./backends/go.js";
|
|
|
8
8
|
import { generateRustProject } from "./backends/rust.js";
|
|
9
9
|
import { generateSwift } from "./backends/swift.js";
|
|
10
10
|
import { generateDartPackage } from "./backends/dart.js";
|
|
11
|
+
import { generateZigProject } from "./backends/zig.js";
|
|
11
12
|
import { generateJavaScript } from "./backends/javascript.js";
|
|
12
13
|
import { generatePhp } from "./backends/php.js";
|
|
13
14
|
import { generatePython } from "./backends/python.js";
|
|
@@ -16,6 +17,7 @@ import { generateTypeScript } from "./backends/typescript.js";
|
|
|
16
17
|
import { generateBrowserWasm } from "./backends/wasm.js";
|
|
17
18
|
import { generateIosApplication } from "./backends/ios.js";
|
|
18
19
|
import { generateAndroidApplication } from "./backends/android.js";
|
|
20
|
+
import { generateFlutterApplication } from "./backends/flutter.js";
|
|
19
21
|
import { parseJava } from "./frontends/java.js";
|
|
20
22
|
import { parseKotlin } from "./frontends/kotlin.js";
|
|
21
23
|
import { parseCSharp } from "./frontends/csharp.js";
|
|
@@ -23,6 +25,7 @@ import { parseGo } from "./frontends/go.js";
|
|
|
23
25
|
import { parseRust } from "./frontends/rust.js";
|
|
24
26
|
import { parseSwift } from "./frontends/swift.js";
|
|
25
27
|
import { parseDart } from "./frontends/dart.js";
|
|
28
|
+
import { parseZig } from "./frontends/zig.js";
|
|
26
29
|
import { parseCpp } from "./frontends/cpp.js";
|
|
27
30
|
import { generateCpp } from "./backends/cpp.js";
|
|
28
31
|
import { parseC } from "./frontends/c.js";
|
|
@@ -339,6 +342,11 @@ const goFrontend = ({ filename, source }) => parseGo({ filename, source });
|
|
|
339
342
|
* @type {Frontend}
|
|
340
343
|
*/
|
|
341
344
|
const dartFrontend = ({ filename, source }) => parseDart({ filename, source });
|
|
345
|
+
/**
|
|
346
|
+
* Zig registry frontend wrapper.
|
|
347
|
+
* @type {Frontend}
|
|
348
|
+
*/
|
|
349
|
+
const zigFrontend = ({ filename, source }) => parseZig({ filename, source });
|
|
342
350
|
const records = [
|
|
343
351
|
language({
|
|
344
352
|
acceptance: { stages: ["parse", "generate", "execute"], toolchains: ["php82"] },
|
|
@@ -456,6 +464,28 @@ const records = [
|
|
|
456
464
|
mediaType: "text/x-dart",
|
|
457
465
|
textBackend: generateDartPackage
|
|
458
466
|
}),
|
|
467
|
+
language({
|
|
468
|
+
acceptance: { stages: ["parse", "generate", "compile", "validate", "execute"], toolchains: ["zig"] },
|
|
469
|
+
artifactMultiplicity: "multiple",
|
|
470
|
+
defaultFilename: "src/main.zig",
|
|
471
|
+
features: {
|
|
472
|
+
closedRecords: false,
|
|
473
|
+
conditionControlledLoops: false,
|
|
474
|
+
effectfulCapabilitiesAndResources: false,
|
|
475
|
+
generalFunctionsAndCalls: true,
|
|
476
|
+
immutableCollections: false,
|
|
477
|
+
optionalValues: false,
|
|
478
|
+
orderedListIteration: false,
|
|
479
|
+
orderedMapIteration: false,
|
|
480
|
+
referenceClasses: false,
|
|
481
|
+
typedErrors: false,
|
|
482
|
+
typeParametersAndGenerics: false
|
|
483
|
+
},
|
|
484
|
+
frontend: zigFrontend,
|
|
485
|
+
id: "zig",
|
|
486
|
+
mediaType: "text/x-zig",
|
|
487
|
+
textBackend: generateZigProject
|
|
488
|
+
}),
|
|
459
489
|
{
|
|
460
490
|
acceptance: { stages: ["generate", "validate", "instantiate", "execute"], toolchains: ["wasm-validate", "node", "chromium"] },
|
|
461
491
|
applicationBackend: generateBrowserWasm,
|
|
@@ -485,6 +515,15 @@ const records = [
|
|
|
485
515
|
id: "ios",
|
|
486
516
|
mapping: { binaryRanges: true, richText: true, sourceMapV3: true },
|
|
487
517
|
roundTrip: false
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
acceptance: { stages: ["generate", "restore", "compile", "validate", "instantiate", "execute"], toolchains: ["flutter", "android"] },
|
|
521
|
+
applicationBackend: generateFlutterApplication,
|
|
522
|
+
artifactMultiplicity: "multiple",
|
|
523
|
+
features: { closedRecords: false, conditionControlledLoops: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
524
|
+
id: "flutter",
|
|
525
|
+
mapping: { binaryRanges: true, richText: true, sourceMapV3: true },
|
|
526
|
+
roundTrip: false
|
|
488
527
|
}
|
|
489
528
|
];
|
|
490
529
|
export const languageRegistry = createLanguageRegistry(records);
|
|
@@ -582,4 +621,4 @@ function deepFreeze(value) {
|
|
|
582
621
|
deepFreeze(nested);
|
|
583
622
|
return Object.freeze(value);
|
|
584
623
|
}
|
|
585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3hELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHVCQUF1QixDQUFBO0FBQ2hF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SyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLHdCQUF3QixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLGlDQUFpQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xILHdCQUF3QixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLG9CQUFvQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLGNBQWMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRixvQkFBb0IsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFN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QUMsQ0FBQTtJQUU3RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkUm9sZX0gZnJvbSBcIi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlSmF2YX0gZnJvbSBcIi4vYmFja2VuZHMvamF2YS5qc1wiXG5pbXBvcnQge2dlbmVyYXRlS290bGlufSBmcm9tIFwiLi9iYWNrZW5kcy9rb3RsaW4uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUNTaGFycFByb2plY3R9IGZyb20gXCIuL2JhY2tlbmRzL2NzaGFycC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlR29Nb2R1bGV9IGZyb20gXCIuL2JhY2tlbmRzL2dvLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVSdXN0UHJvamVjdH0gZnJvbSBcIi4vYmFja2VuZHMvcnVzdC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlU3dpZnR9IGZyb20gXCIuL2JhY2tlbmRzL3N3aWZ0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVEYXJ0UGFja2FnZX0gZnJvbSBcIi4vYmFja2VuZHMvZGFydC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlSmF2YVNjcmlwdH0gZnJvbSBcIi4vYmFja2VuZHMvamF2YXNjcmlwdC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlUGhwfSBmcm9tIFwiLi9iYWNrZW5kcy9waHAuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVB5dGhvbn0gZnJvbSBcIi4vYmFja2VuZHMvcHl0aG9uLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVSdWJ5fSBmcm9tIFwiLi9iYWNrZW5kcy9ydWJ5LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVUeXBlU2NyaXB0fSBmcm9tIFwiLi9iYWNrZW5kcy90eXBlc2NyaXB0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVCcm93c2VyV2FzbX0gZnJvbSBcIi4vYmFja2VuZHMvd2FzbS5qc1wiXG5pbXBvcnQge2dlbmVyYXRlSW9zQXBwbGljYXRpb259IGZyb20gXCIuL2JhY2tlbmRzL2lvcy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQW5kcm9pZEFwcGxpY2F0aW9ufSBmcm9tIFwiLi9iYWNrZW5kcy9hbmRyb2lkLmpzXCJcbmltcG9ydCB7cGFyc2VKYXZhfSBmcm9tIFwiLi9mcm9udGVuZHMvamF2YS5qc1wiXG5pbXBvcnQge3BhcnNlS290bGlufSBmcm9tIFwiLi9mcm9udGVuZHMva290bGluLmpzXCJcbmltcG9ydCB7cGFyc2VDU2hhcnB9IGZyb20gXCIuL2Zyb250ZW5kcy9jc2hhcnAuanNcIlxuaW1wb3J0IHtwYXJzZUdvfSBmcm9tIFwiLi9mcm9udGVuZHMvZ28uanNcIlxuaW1wb3J0IHtwYXJzZVJ1c3R9IGZyb20gXCIuL2Zyb250ZW5kcy9ydXN0LmpzXCJcbmltcG9ydCB7cGFyc2VTd2lmdH0gZnJvbSBcIi4vZnJvbnRlbmRzL3N3aWZ0LmpzXCJcbmltcG9ydCB7cGFyc2VEYXJ0fSBmcm9tIFwiLi9mcm9udGVuZHMvZGFydC5qc1wiXG5pbXBvcnQge3BhcnNlQ3BwfSBmcm9tIFwiLi9mcm9udGVuZHMvY3BwLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVDcHB9IGZyb20gXCIuL2JhY2tlbmRzL2NwcC5qc1wiXG5pbXBvcnQge3BhcnNlQ30gZnJvbSBcIi4vZnJvbnRlbmRzL2MuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUNQcm9ncmFtfSBmcm9tIFwiLi9iYWNrZW5kcy9jLmpzXCJcbmltcG9ydCB7cGFyc2VKYXZhU2NyaXB0VHlwZVNjcmlwdH0gZnJvbSBcIi4vZnJvbnRlbmRzL2phdmFzY3JpcHQtdHlwZXNjcmlwdC5qc1wiXG5pbXBvcnQge3BhcnNlUGhwfSBmcm9tIFwiLi9mcm9udGVuZHMvcGhwLmpzXCJcbmltcG9ydCB7cGFyc2VQeXRob259IGZyb20gXCIuL2Zyb250ZW5kcy9weXRob24uanNcIlxuaW1wb3J0IHtwYXJzZVJ1Ynl9IGZyb20gXCIuL2Zyb250ZW5kcy9ydWJ5LmpzXCJcblxuY29uc3QgcmVnaXN0cnlSb2xlcyA9IE9iamVjdC5mcmVlemUoW1wiZnJvbnRlbmRcIiwgXCJ0ZXh0QmFja2VuZFwiLCBcImJpbmFyeUJhY2tlbmRcIiwgXCJhcHBsaWNhdGlvbkJhY2tlbmRcIiwgXCJpbnRlcm9wZXJhYmlsaXR5XCJdKVxuY29uc3QgYWNjZXB0YW5jZVN0YWdlT3JkZXIgPSBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwicmVzdG9yZVwiLCBcImNvbXBpbGVcIiwgXCJsaW5rXCIsIFwidmFsaWRhdGVcIiwgXCJpbnN0YW50aWF0ZVwiLCBcImV4ZWN1dGVcIl1cbmNvbnN0IGFjY2VwdGFuY2VTdGFnZXMgPSBuZXcgTWFwKGFjY2VwdGFuY2VTdGFnZU9yZGVyLm1hcCgoc3RhZ2UsIGluZGV4KSA9PiBbc3RhZ2UsIGluZGV4XSkpXG5jb25zdCByZWdpc3RyeUtleXMgPSBuZXcgU2V0KFtcbiAgXCJhY2NlcHRhbmNlXCIsIFwiYXBwbGljYXRpb25CYWNrZW5kXCIsIFwiYXJ0aWZhY3RNdWx0aXBsaWNpdHlcIiwgXCJiaW5hcnlCYWNrZW5kXCIsIFwiZGVmYXVsdEZpbGVuYW1lXCIsIFwiZnJvbnRlbmRcIiwgXCJpZFwiLFxuICBcImZlYXR1cmVzXCIsIFwiaW50ZXJvcGVyYWJpbGl0eVwiLCBcIm1hcHBpbmdcIiwgXCJtZWRpYVR5cGVcIiwgXCJwcm92aWRlclwiLCBcInJvdW5kVHJpcFwiLCBcInRleHRCYWNrZW5kXCJcbl0pXG5cbi8qKiBAdHlwZWRlZiB7XCJmcm9udGVuZFwiIHwgXCJ0ZXh0QmFja2VuZFwiIHwgXCJiaW5hcnlCYWNrZW5kXCIgfCBcImFwcGxpY2F0aW9uQmFja2VuZFwiIHwgXCJpbnRlcm9wZXJhYmlsaXR5XCJ9IFJlZ2lzdHJ5Um9sZSAqL1xuLyoqIEB0eXBlZGVmIHsoLi4udmFsdWVzOiB1bmtub3duW10pID0+IHVua25vd259IFJlZ2lzdHJ5SW1wbGVtZW50YXRpb24gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBGcm9udGVuZElucHV0XG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtjYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcHJvcGVydHkge3tpc0VudHJ5OiBib29sZWFuLCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2YWx1ZVJlY29yZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn19IFtwcm9ncmFtXSAtIFByb2dyYW0gY29udmVyc2lvbiBjb250ZXh0LlxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIEZyb250ZW5kXG4gKiBAcGFyYW0ge0Zyb250ZW5kSW5wdXR9IGlucHV0IC0gRnJvbnRlbmQgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZVJlZ2lzdHJ5UmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTdGFibGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3tzdGFnZXM6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlW10sIHRvb2xjaGFpbnM6IHN0cmluZ1tdfX0gYWNjZXB0YW5jZSAtIEFjY2VwdGFuY2UgZGVjbGFyYXRpb24uXG4gKiBAcHJvcGVydHkge1wic2luZ2xlXCIgfCBcIm11bHRpcGxlXCJ9IGFydGlmYWN0TXVsdGlwbGljaXR5IC0gQXJ0aWZhY3QgbXVsdGlwbGljaXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlRmVhdHVyZUNhcGFiaWxpdGllc30gZmVhdHVyZXMgLSBTZW1hbnRpYyBmZWF0dXJlIGNhcGFiaWxpdGllcy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXN9IG1hcHBpbmcgLSBNYXBwaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcm91bmRUcmlwIC0gUm91bmQtdHJpcCBkZWNsYXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVmYXVsdEZpbGVuYW1lXSAtIERlZmF1bHQgYmFja2VuZCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbWVkaWFUeXBlXSAtIERlZmF1bHQgYmFja2VuZCBtZWRpYSB0eXBlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHJvdmlkZXJdIC0gVGFyZ2V0IGhvc3Qgc3RkbGliIHByb3ZpZGVyL25hdGl2ZS1iaW5kaW5nIHJvbGUuXG4gKiBAcHJvcGVydHkge1JlZ2lzdHJ5SW1wbGVtZW50YXRpb259IFtmcm9udGVuZF0gLSBGcm9udGVuZCBhZGFwdGVyLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbdGV4dEJhY2tlbmRdIC0gVGV4dCBiYWNrZW5kLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbYmluYXJ5QmFja2VuZF0gLSBCaW5hcnkgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gW2FwcGxpY2F0aW9uQmFja2VuZF0gLSBBcHBsaWNhdGlvbi1hcnRpZmFjdCBiYWNrZW5kLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbaW50ZXJvcGVyYWJpbGl0eV0gLSBJbnRlcm9wZXJhYmlsaXR5IGJyaWRnZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUmVnaXN0cnlcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZUNhcGFiaWxpdGllc1tdfSBkZXNjcmlwdG9ycyAtIFB1YmxpYyBkZXNjcmlwdG9ycy5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IGlkcyAtIFJlZ2lzdGVyZWQgSURzIGluIHN0YWJsZSBvcmRlci5cbiAqIEBwcm9wZXJ0eSB7KGlkOiBzdHJpbmcpID0+IFJlYWRvbmx5PExhbmd1YWdlUmVnaXN0cnlSZWNvcmQ+fSByZWNvcmQgLSBFeGFjdCByZWNvcmQgbG9va3VwLlxuICogQHByb3BlcnR5IHsoaWQ6IHN0cmluZywgcm9sZTogUmVnaXN0cnlSb2xlLCBsb2NhdGlvbj86IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24pID0+IFJlZ2lzdHJ5SW1wbGVtZW50YXRpb259IHJlc29sdmUgLSBSb2xlIGxvb2t1cC5cbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYW4gaW1tdXRhYmxlIHJvbGUgcmVnaXN0cnkgZnJvbSBvcmRlcmVkIHJlY29yZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZVJlY29yZHMgLSBPcmRlcmVkIGxhbmd1YWdlIHJlY29yZHMuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeT59IFJlZ2lzdHJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGFuZ3VhZ2VSZWdpc3RyeShjYW5kaWRhdGVSZWNvcmRzKSB7XG4gIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZVJlY29yZHMpKSBpbnZhbGlkUmVnaXN0cnkoXCJSZWdpc3RyeSByZWNvcmRzIG11c3QgYmUgYW4gb3JkZXJlZCBkZW5zZSBhcnJheS5cIilcblxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIFJlYWRvbmx5PExhbmd1YWdlUmVnaXN0cnlSZWNvcmQ+Pn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQ2FwYWJpbGl0aWVzW119ICovXG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gW11cblxuICBmb3IgKGxldCByZWNvcmRJbmRleCA9IDA7IHJlY29yZEluZGV4IDwgY2FuZGlkYXRlUmVjb3Jkcy5sZW5ndGg7IHJlY29yZEluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVSZWNvcmRzW3JlY29yZEluZGV4XVxuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkpIGludmFsaWRSZWdpc3RyeShcIkV2ZXJ5IHJlZ2lzdHJ5IHJlY29yZCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LlwiKVxuICAgIGNvbnN0IGlkID0gY2FuZGlkYXRlLmlkXG5cbiAgICBpZiAodHlwZW9mIGlkICE9IFwic3RyaW5nXCIgfHwgaWQubGVuZ3RoID09IDAgfHwgIS9eW2Etel1bYS16MC05LV0qJC91LnRlc3QoaWQpKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoXCJFdmVyeSByZWdpc3RyeSByZWNvcmQgcmVxdWlyZXMgYSBzdGFibGUgbG93ZXJjYXNlIElELlwiLCB0eXBlb2YgaWQgPT0gXCJzdHJpbmdcIiA/IGlkIDogdW5kZWZpbmVkKVxuICAgIH1cbiAgICBpZiAocmVjb3Jkc0J5SWQuaGFzKGlkKSkgaW52YWxpZFJlZ2lzdHJ5KGBEdXBsaWNhdGUgcmVnaXN0cnkgSUQgJyR7aWR9Jy5gLCBpZClcbiAgICBpZiAoT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5zb21lKChrZXkpID0+ICFyZWdpc3RyeUtleXMuaGFzKGtleSkpKSBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyB1bmtub3duIGZpZWxkcy5gLCBpZClcbiAgICBpZiAoY2FuZGlkYXRlLnByb3ZpZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGNhbmRpZGF0ZS5wcm92aWRlciAhPSBcImJvb2xlYW5cIikge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyBhbiBpbnZhbGlkIHByb3ZpZGVyIHJvbGUuYCwgaWQpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb2xlIG9mIHJlZ2lzdHJ5Um9sZXMpIHtcbiAgICAgIGlmIChjYW5kaWRhdGVbcm9sZV0gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgY2FuZGlkYXRlW3JvbGVdICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJvbGUgJyR7cm9sZX0nIGZvciAnJHtpZH0nIG11c3QgYmUgYSBmdW5jdGlvbiB3aGVuIHByZXNlbnQuYCwgaWQpXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFydGlmYWN0TXVsdGlwbGljaXR5ID0gY2FuZGlkYXRlLmFydGlmYWN0TXVsdGlwbGljaXR5XG5cbiAgICBpZiAoYXJ0aWZhY3RNdWx0aXBsaWNpdHkgIT0gXCJzaW5nbGVcIiAmJiBhcnRpZmFjdE11bHRpcGxpY2l0eSAhPSBcIm11bHRpcGxlXCIpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgYXJ0aWZhY3QgbXVsdGlwbGljaXR5LmAsIGlkKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5yb3VuZFRyaXAgIT0gXCJib29sZWFuXCIpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgcmVxdWlyZXMgYSBCb29sZWFuIHJvdW5kLXRyaXAgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgY29uc3QgZmVhdHVyZXNDYW5kaWRhdGUgPSBjYW5kaWRhdGUuZmVhdHVyZXMgPz8ge1xuICAgICAgY2xvc2VkUmVjb3JkczogZmFsc2UsXG4gICAgICBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLFxuICAgICAgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSxcbiAgICAgIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsXG4gICAgICBpbW11dGFibGVDb2xsZWN0aW9uczogZmFsc2UsXG4gICAgICBvcHRpb25hbFZhbHVlczogZmFsc2UsXG4gICAgICBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLFxuICAgICAgdHlwZWRFcnJvcnM6IGZhbHNlLFxuICAgICAgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZmVhdHVyZXNDYW5kaWRhdGUpIHx8XG4gICAgICBPYmplY3Qua2V5cyhmZWF0dXJlc0NhbmRpZGF0ZSkuc29ydCgpLmpvaW4oXCIsXCIpICE9IFwiY2xvc2VkUmVjb3Jkcyxjb25kaXRpb25Db250cm9sbGVkTG9vcHMsZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzLGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxscyxpbW11dGFibGVDb2xsZWN0aW9ucyxvcHRpb25hbFZhbHVlcyxvcmRlcmVkTGlzdEl0ZXJhdGlvbixvcmRlcmVkTWFwSXRlcmF0aW9uLHJlZmVyZW5jZUNsYXNzZXMsdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljcyx0eXBlZEVycm9yc1wiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuY2xvc2VkUmVjb3JkcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmNvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmdlbmVyYWxGdW5jdGlvbnNBbmRDYWxscyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmltbXV0YWJsZUNvbGxlY3Rpb25zICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUub3B0aW9uYWxWYWx1ZXMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5vcmRlcmVkTGlzdEl0ZXJhdGlvbiAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRNYXBJdGVyYXRpb24gIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5yZWZlcmVuY2VDbGFzc2VzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUudHlwZWRFcnJvcnMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS50eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGZlYXR1cmUgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IGZlYXR1cmVzID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VGZWF0dXJlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgY2xvc2VkUmVjb3JkczogZmVhdHVyZXNDYW5kaWRhdGUuY2xvc2VkUmVjb3JkcyxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmVhdHVyZXNDYW5kaWRhdGUuY29uZGl0aW9uQ29udHJvbGxlZExvb3BzLFxuICAgICAgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmZWF0dXJlc0NhbmRpZGF0ZS5lZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXMsXG4gICAgICBnZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHM6IGZlYXR1cmVzQ2FuZGlkYXRlLmdlbmVyYWxGdW5jdGlvbnNBbmRDYWxscyxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmZWF0dXJlc0NhbmRpZGF0ZS5pbW11dGFibGVDb2xsZWN0aW9ucyxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBmZWF0dXJlc0NhbmRpZGF0ZS5vcHRpb25hbFZhbHVlcyxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmZWF0dXJlc0NhbmRpZGF0ZS5vcmRlcmVkTGlzdEl0ZXJhdGlvbixcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRNYXBJdGVyYXRpb24sXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmZWF0dXJlc0NhbmRpZGF0ZS5yZWZlcmVuY2VDbGFzc2VzLFxuICAgICAgdHlwZWRFcnJvcnM6IGZlYXR1cmVzQ2FuZGlkYXRlLnR5cGVkRXJyb3JzLFxuICAgICAgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmVhdHVyZXNDYW5kaWRhdGUudHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljc1xuICAgIH0pKVxuICAgIGNvbnN0IG1hcHBpbmdDYW5kaWRhdGUgPSBjYW5kaWRhdGUubWFwcGluZ1xuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KG1hcHBpbmdDYW5kaWRhdGUpKSBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIG1hcHBpbmcgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgY29uc3QgbWFwcGluZ1NuYXBzaG90ID0ge1xuICAgICAgYmluYXJ5UmFuZ2VzOiBtYXBwaW5nQ2FuZGlkYXRlLmJpbmFyeVJhbmdlcyxcbiAgICAgIHJpY2hUZXh0OiBtYXBwaW5nQ2FuZGlkYXRlLnJpY2hUZXh0LFxuICAgICAgc291cmNlTWFwVjM6IG1hcHBpbmdDYW5kaWRhdGUuc291cmNlTWFwVjNcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1hcHBpbmdTbmFwc2hvdC5yaWNoVGV4dCAhPSBcImJvb2xlYW5cIiB8fCB0eXBlb2YgbWFwcGluZ1NuYXBzaG90LnNvdXJjZU1hcFYzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgbWFwcGluZ1NuYXBzaG90LmJpbmFyeVJhbmdlcyAhPSBcImJvb2xlYW5cIikge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgYW4gaW52YWxpZCBtYXBwaW5nIGRlY2xhcmF0aW9uLmAsIGlkKVxuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VNYXBwaW5nQ2FwYWJpbGl0aWVzfSAqLyAobWFwcGluZ1NuYXBzaG90KSlcbiAgICBjb25zdCBhY2NlcHRhbmNlQ2FuZGlkYXRlID0gY2FuZGlkYXRlLmFjY2VwdGFuY2VcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChhY2NlcHRhbmNlQ2FuZGlkYXRlKSB8fCAhaXNEZW5zZUFycmF5KGFjY2VwdGFuY2VDYW5kaWRhdGUuc3RhZ2VzKSB8fFxuICAgICAgIWlzRGVuc2VBcnJheShhY2NlcHRhbmNlQ2FuZGlkYXRlLnRvb2xjaGFpbnMpKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGFjY2VwdGFuY2UgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIC8qKiBAdHlwZSB7dW5rbm93bltdfSAqL1xuICAgIGNvbnN0IHN0YWdlU25hcHNob3QgPSBbXVxuICAgIC8qKiBAdHlwZSB7dW5rbm93bltdfSAqL1xuICAgIGNvbnN0IHRvb2xjaGFpblNuYXBzaG90ID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhY2NlcHRhbmNlQ2FuZGlkYXRlLnN0YWdlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIHN0YWdlU25hcHNob3QucHVzaChhY2NlcHRhbmNlQ2FuZGlkYXRlLnN0YWdlc1tpbmRleF0pXG4gICAgfVxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhY2NlcHRhbmNlQ2FuZGlkYXRlLnRvb2xjaGFpbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICB0b29sY2hhaW5TbmFwc2hvdC5wdXNoKGFjY2VwdGFuY2VDYW5kaWRhdGUudG9vbGNoYWluc1tpbmRleF0pXG4gICAgfVxuICAgIGlmICghc3RhZ2VTbmFwc2hvdC5ldmVyeSgoc3RhZ2UpID0+IHR5cGVvZiBzdGFnZSA9PSBcInN0cmluZ1wiICYmIGFjY2VwdGFuY2VTdGFnZXMuaGFzKHN0YWdlKSkgfHxcbiAgICAgICF0b29sY2hhaW5TbmFwc2hvdC5ldmVyeSgodG9vbGNoYWluKSA9PiB0eXBlb2YgdG9vbGNoYWluID09IFwic3RyaW5nXCIgJiYgdG9vbGNoYWluLmxlbmd0aCA+IDApKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGFjY2VwdGFuY2UgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IHN0YWdlcyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VbXX0gKi8gKHN0YWdlU25hcHNob3QpXG4gICAgY29uc3QgdG9vbGNoYWlucyA9IC8qKiBAdHlwZSB7c3RyaW5nW119ICovICh0b29sY2hhaW5TbmFwc2hvdClcbiAgICBsZXQgcHJldmlvdXNTdGFnZSA9IC0xXG4gICAgY29uc3QgZGVjbGFyZWRTdGFnZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICBjb25zdCBzdGFnZUluZGV4ID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChhY2NlcHRhbmNlU3RhZ2VzLmdldCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHN0YWdlKSkpXG5cbiAgICAgIGlmIChkZWNsYXJlZFN0YWdlcy5oYXMoc3RhZ2UpIHx8IHN0YWdlSW5kZXggPCBwcmV2aW91c1N0YWdlKSBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyB1bm9yZGVyZWQgb3IgZHVwbGljYXRlIGFjY2VwdGFuY2Ugc3RhZ2VzLmAsIGlkKVxuICAgICAgZGVjbGFyZWRTdGFnZXMuYWRkKHN0YWdlKVxuICAgICAgcHJldmlvdXNTdGFnZSA9IHN0YWdlSW5kZXhcbiAgICB9XG4gICAgaWYgKG5ldyBTZXQodG9vbGNoYWlucykuc2l6ZSAhPSB0b29sY2hhaW5zLmxlbmd0aCkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgZHVwbGljYXRlIGFjY2VwdGFuY2UgdG9vbGNoYWlucy5gLCBpZClcbiAgICB9XG5cbiAgICBjb25zdCBoYXNGcm9udGVuZCA9IHR5cGVvZiBjYW5kaWRhdGUuZnJvbnRlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzVGV4dEJhY2tlbmQgPSB0eXBlb2YgY2FuZGlkYXRlLnRleHRCYWNrZW5kID09IFwiZnVuY3Rpb25cIlxuICAgIGNvbnN0IGhhc0JpbmFyeUJhY2tlbmQgPSB0eXBlb2YgY2FuZGlkYXRlLmJpbmFyeUJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzQXBwbGljYXRpb25CYWNrZW5kID0gdHlwZW9mIGNhbmRpZGF0ZS5hcHBsaWNhdGlvbkJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzQmFja2VuZCA9IGhhc1RleHRCYWNrZW5kIHx8IGhhc0JpbmFyeUJhY2tlbmQgfHwgaGFzQXBwbGljYXRpb25CYWNrZW5kXG5cbiAgICBpZiAoKG1hcHBpbmcucmljaFRleHQgfHwgbWFwcGluZy5zb3VyY2VNYXBWMyB8fCBtYXBwaW5nLmJpbmFyeVJhbmdlcykgJiYgIWhhc0JhY2tlbmQgfHxcbiAgICAgIG1hcHBpbmcuc291cmNlTWFwVjMgJiYgIW1hcHBpbmcucmljaFRleHQgfHxcbiAgICAgIG1hcHBpbmcuYmluYXJ5UmFuZ2VzICYmICFoYXNCaW5hcnlCYWNrZW5kICYmICFoYXNBcHBsaWNhdGlvbkJhY2tlbmQpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgbWFwcGluZyBzdXBwb3J0IHdpdGhvdXQgaXRzIHJlcXVpcmVkIGJhY2tlbmQgcm9sZS5gLCBpZClcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5yb3VuZFRyaXAgJiYgKCFoYXNGcm9udGVuZCB8fCAhaGFzQmFja2VuZCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgcm91bmQtdHJpcCBzdXBwb3J0IHdpdGhvdXQgZnJvbnRlbmQgYW5kIGJhY2tlbmQgcm9sZXMuYCwgaWQpXG4gICAgfVxuICAgIGlmIChzdGFnZXMuaW5jbHVkZXMoXCJwYXJzZVwiKSAmJiAhaGFzRnJvbnRlbmQgfHwgc3RhZ2VzLmluY2x1ZGVzKFwiZ2VuZXJhdGVcIikgJiYgIWhhc0JhY2tlbmQpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgYW4gYWNjZXB0YW5jZSBzdGFnZSB3aXRob3V0IGl0cyByZXF1aXJlZCByb2xlLmAsIGlkKVxuICAgIH1cblxuICAgIGNvbnN0IGhhc0RlZmF1bHRlZEJhY2tlbmQgPSBoYXNUZXh0QmFja2VuZCB8fCBoYXNCaW5hcnlCYWNrZW5kXG5cbiAgICBpZiAoKGhhc0RlZmF1bHRlZEJhY2tlbmQgfHwgY2FuZGlkYXRlLmRlZmF1bHRGaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmRlZmF1bHRGaWxlbmFtZS5sZW5ndGggPT0gMCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgYmFja2VuZCAnJHtpZH0nIHJlcXVpcmVzIGEgZGVmYXVsdCBmaWxlbmFtZS5gLCBpZClcbiAgICB9XG4gICAgaWYgKChoYXNEZWZhdWx0ZWRCYWNrZW5kIHx8IGNhbmRpZGF0ZS5tZWRpYVR5cGUgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICh0eXBlb2YgY2FuZGlkYXRlLm1lZGlhVHlwZSAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5tZWRpYVR5cGUubGVuZ3RoID09IDApKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IGJhY2tlbmQgJyR7aWR9JyByZXF1aXJlcyBhIG1lZGlhIHR5cGUuYCwgaWQpXG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXB0YW5jZSA9IGRlZXBGcmVlemUoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQWNjZXB0YW5jZUNhcGFiaWxpdGllc30gKi8gKHtcbiAgICAgIHN0YWdlcyxcbiAgICAgIHRvb2xjaGFpbnNcbiAgICB9KSlcbiAgICBjb25zdCByZWNvcmQgPSBkZWVwRnJlZXplKC8qKiBAdHlwZSB7TGFuZ3VhZ2VSZWdpc3RyeVJlY29yZH0gKi8gKHtcbiAgICAgIGFjY2VwdGFuY2UsXG4gICAgICBhcnRpZmFjdE11bHRpcGxpY2l0eSxcbiAgICAgIGZlYXR1cmVzLFxuICAgICAgaWQsXG4gICAgICBtYXBwaW5nLFxuICAgICAgcm91bmRUcmlwOiBjYW5kaWRhdGUucm91bmRUcmlwLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lID09IFwic3RyaW5nXCIgPyB7ZGVmYXVsdEZpbGVuYW1lOiBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLm1lZGlhVHlwZSA9PSBcInN0cmluZ1wiID8ge21lZGlhVHlwZTogY2FuZGlkYXRlLm1lZGlhVHlwZX0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5wcm92aWRlciA9PSBcImJvb2xlYW5cIiA/IHtwcm92aWRlcjogY2FuZGlkYXRlLnByb3ZpZGVyfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLmZyb250ZW5kID09IFwiZnVuY3Rpb25cIiA/IHtmcm9udGVuZDogY2FuZGlkYXRlLmZyb250ZW5kfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLnRleHRCYWNrZW5kID09IFwiZnVuY3Rpb25cIiA/IHt0ZXh0QmFja2VuZDogY2FuZGlkYXRlLnRleHRCYWNrZW5kfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLmJpbmFyeUJhY2tlbmQgPT0gXCJmdW5jdGlvblwiID8ge2JpbmFyeUJhY2tlbmQ6IGNhbmRpZGF0ZS5iaW5hcnlCYWNrZW5kfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLmFwcGxpY2F0aW9uQmFja2VuZCA9PSBcImZ1bmN0aW9uXCIgPyB7YXBwbGljYXRpb25CYWNrZW5kOiBjYW5kaWRhdGUuYXBwbGljYXRpb25CYWNrZW5kfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLmludGVyb3BlcmFiaWxpdHkgPT0gXCJmdW5jdGlvblwiID8ge2ludGVyb3BlcmFiaWxpdHk6IGNhbmRpZGF0ZS5pbnRlcm9wZXJhYmlsaXR5fSA6IHt9KVxuICAgIH0pKVxuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBkZWVwRnJlZXplKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZUNhcGFiaWxpdGllc30gKi8gKHtcbiAgICAgIGFjY2VwdGFuY2UsXG4gICAgICBhcnRpZmFjdE11bHRpcGxpY2l0eSxcbiAgICAgIGZlYXR1cmVzLFxuICAgICAgaWQsXG4gICAgICBtYXBwaW5nLFxuICAgICAgcm9sZXM6IHtcbiAgICAgICAgYXBwbGljYXRpb25CYWNrZW5kOiB0eXBlb2YgY2FuZGlkYXRlLmFwcGxpY2F0aW9uQmFja2VuZCA9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgIGJpbmFyeUJhY2tlbmQ6IHR5cGVvZiBjYW5kaWRhdGUuYmluYXJ5QmFja2VuZCA9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgIGZyb250ZW5kOiB0eXBlb2YgY2FuZGlkYXRlLmZyb250ZW5kID09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgaW50ZXJvcGVyYWJpbGl0eTogdHlwZW9mIGNhbmRpZGF0ZS5pbnRlcm9wZXJhYmlsaXR5ID09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgcHJvdmlkZXI6IGNhbmRpZGF0ZS5wcm92aWRlciA9PT0gdHJ1ZSxcbiAgICAgICAgdGV4dEJhY2tlbmQ6IHR5cGVvZiBjYW5kaWRhdGUudGV4dEJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgICB9LFxuICAgICAgcm91bmRUcmlwOiBjYW5kaWRhdGUucm91bmRUcmlwXG4gICAgfSkpXG5cbiAgICByZWNvcmRzQnlJZC5zZXQoaWQsIHJlY29yZClcbiAgICBkZXNjcmlwdG9ycy5wdXNoKGRlc2NyaXB0b3IpXG4gIH1cblxuICBjb25zdCBmcm96ZW5EZXNjcmlwdG9ycyA9IGRlZXBGcmVlemUoZGVzY3JpcHRvcnMpXG4gIGNvbnN0IGlkcyA9IE9iamVjdC5mcmVlemUoZnJvemVuRGVzY3JpcHRvcnMubWFwKCh7aWR9KSA9PiBpZCkpXG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIGRlc2NyaXB0b3JzOiBmcm96ZW5EZXNjcmlwdG9ycyxcbiAgICBpZHMsXG4gICAgcmVjb3JkKGlkKSB7XG4gICAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzQnlJZC5nZXQoaWQpXG5cbiAgICAgIGlmICghcmVjb3JkKSB1bnN1cHBvcnRlZExhbmd1YWdlKGlkKVxuXG4gICAgICByZXR1cm4gcmVjb3JkXG4gICAgfSxcbiAgICByZXNvbHZlKGlkLCByb2xlLCBsb2NhdGlvbikge1xuICAgICAgaWYgKCFyZWdpc3RyeVJvbGVzLmluY2x1ZGVzKHJvbGUpKSBpbnZhbGlkUmVnaXN0cnkoYFVua25vd24gcmVnaXN0cnkgcm9sZSAnJHtyb2xlfScuYCwgaWQpXG4gICAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzQnlJZC5nZXQoaWQpXG5cbiAgICAgIGlmICghcmVjb3JkKSB1bnN1cHBvcnRlZExhbmd1YWdlKGlkLCBsb2NhdGlvbiwgcm9sZSlcbiAgICAgIGNvbnN0IGltcGxlbWVudGF0aW9uID0gcmVjb3JkW3JvbGVdXG5cbiAgICAgIGlmICh0eXBlb2YgaW1wbGVtZW50YXRpb24gIT0gXCJmdW5jdGlvblwiKSB1bnN1cHBvcnRlZFJvbGUoaWQsIHB1YmxpY1JvbGVOYW1lKHJvbGUpLCBsb2NhdGlvbilcblxuICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIFBIUCByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBwaHBGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VQaHAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pXG5cbi8qKlxuICogUnVieSByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBydWJ5RnJvbnRlbmQgPSAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pID0+IHBhcnNlUnVieSh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBKYXZhU2NyaXB0IHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGphdmFTY3JpcHRGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VKYXZhU2NyaXB0VHlwZVNjcmlwdCh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgbGFuZ3VhZ2U6IFwiamF2YXNjcmlwdFwiLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIFR5cGVTY3JpcHQgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgdHlwZVNjcmlwdEZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBsYW5ndWFnZTogXCJ0eXBlc2NyaXB0XCIsIHByb2dyYW0sIHNvdXJjZX0pXG5cbi8qKlxuICogSmF2YSByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBqYXZhRnJvbnRlbmQgPSAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pID0+IHBhcnNlSmF2YSh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBLb3RsaW4gcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3Qga290bGluRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZUtvdGxpbih7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbi8qKlxuICogUHl0aG9uIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IHB5dGhvbkZyb250ZW5kID0gKHtmaWxlbmFtZSwgc291cmNlfSkgPT4gcGFyc2VQeXRob24oe2ZpbGVuYW1lLCBzb3VyY2V9KVxuXG4vKipcbiAqIEMjIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGNzaGFycEZyb250ZW5kID0gKHtmaWxlbmFtZSwgc291cmNlfSkgPT4gcGFyc2VDU2hhcnAoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuXG4vKipcbiAqIEdvIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGdvRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZUdvKHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBEYXJ0IHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGRhcnRGcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlRGFydCh7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbmNvbnN0IHJlY29yZHMgPSBbXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicGhwODJcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnBocFwiLFxuICAgIGZyb250ZW5kOiBwaHBGcm9udGVuZCxcbiAgICBpZDogXCJwaHBcIixcbiAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVQaHBcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicnVieVwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0ucmJcIixcbiAgICBmcm9udGVuZDogcnVieUZyb250ZW5kLFxuICAgIGlkOiBcInJ1YnlcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXJ1YnlcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVSdWJ5XG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcIm5vZGVcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmpzXCIsXG4gICAgZnJvbnRlbmQ6IGphdmFTY3JpcHRGcm9udGVuZCxcbiAgICBpZDogXCJqYXZhc2NyaXB0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUphdmFTY3JpcHRcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInRzY1wiLCBcIm5vZGVcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnRzXCIsXG4gICAgZnJvbnRlbmQ6IHR5cGVTY3JpcHRGcm9udGVuZCxcbiAgICBpZDogXCJ0eXBlc2NyaXB0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQvdHlwZXNjcmlwdFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVR5cGVTY3JpcHRcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImphdmFjXCIsIFwiamF2YVwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIk1haW4uamF2YVwiLFxuICAgIGZyb250ZW5kOiBqYXZhRnJvbnRlbmQsXG4gICAgaWQ6IFwiamF2YVwiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtamF2YS1zb3VyY2VcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVKYXZhXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJrb3RsaW5jXCIsIFwiamF2YTI1XCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiUHJvZ3JhbS5rdFwiLFxuICAgIGZyb250ZW5kOiBrb3RsaW5Gcm9udGVuZCxcbiAgICBpZDogXCJrb3RsaW5cIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWtvdGxpblwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUtvdGxpblxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicHl0aG9uXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5weVwiLFxuICAgIGZyb250ZW5kOiBweXRob25Gcm9udGVuZCxcbiAgICBpZDogXCJweXRob25cIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXB5dGhvblwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVB5dGhvblxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImRvdG5ldFwiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiUHJvZ3JhbS5jc1wiLFxuICAgIGZyb250ZW5kOiBjc2hhcnBGcm9udGVuZCxcbiAgICBpZDogXCJjc2hhcnBcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWNzaGFycFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUNTaGFycFByb2plY3RcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiZ29cIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIm1haW4uZ29cIixcbiAgICBmcm9udGVuZDogZ29Gcm9udGVuZCxcbiAgICBpZDogXCJnb1wiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtZ29cIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVHb01vZHVsZVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5nXCJdfSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmNcIixcbiAgICBmcm9udGVuZDogcGFyc2VDLFxuICAgIGlkOiBcImNcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWNcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDUHJvZ3JhbVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5ncHBcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmNwcFwiLCBmcm9udGVuZDogcGFyc2VDcHAsIGlkOiBcImNwcFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LWMrK3NyY1wiLCB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDcHBcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicnVzdGNcIiwgXCJjYXJnb1wiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwic3JjL21haW4ucnNcIiwgZnJvbnRlbmQ6IHBhcnNlUnVzdCwgaWQ6IFwicnVzdFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LXJ1c3RcIiwgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlUnVzdFByb2plY3RcbiAgfSksXG4gIGxhbmd1YWdlKHthY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInN3aWZ0Y1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0uc3dpZnRcIiwgZnJvbnRlbmQ6IHBhcnNlU3dpZnQsIGlkOiBcInN3aWZ0XCIsIG1lZGlhVHlwZTogXCJ0ZXh0L3gtc3dpZnRcIiwgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlU3dpZnR9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiZGFydFwiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiYmluL3Byb2dyYW0uZGFydFwiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiB0cnVlLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgIHR5cGVkRXJyb3JzOiBmYWxzZSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlXG4gICAgfSxcbiAgICBmcm9udGVuZDogZGFydEZyb250ZW5kLFxuICAgIGlkOiBcImRhcnRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWRhcnRcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVEYXJ0UGFja2FnZVxuICB9KSxcbiAge1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcImdlbmVyYXRlXCIsIFwidmFsaWRhdGVcIiwgXCJpbnN0YW50aWF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcIndhc20tdmFsaWRhdGVcIiwgXCJub2RlXCIsIFwiY2hyb21pdW1cIl19LFxuICAgIGFwcGxpY2F0aW9uQmFja2VuZDogZ2VuZXJhdGVCcm93c2VyV2FzbSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGJpbmFyeUJhY2tlbmQ6IGdlbmVyYXRlQnJvd3Nlcldhc20sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0ud2FzbVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwid2FzbVwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL3dhc21cIixcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiYW5kcm9pZFwiXX0sXG4gICAgYXBwbGljYXRpb25CYWNrZW5kOiBnZW5lcmF0ZUFuZHJvaWRBcHBsaWNhdGlvbixcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwiYW5kcm9pZFwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcm91bmRUcmlwOiBmYWxzZVxuICB9LFxuICB7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wiZ2VuZXJhdGVcIl0sIHRvb2xjaGFpbnM6IFtdfSxcbiAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IGdlbmVyYXRlSW9zQXBwbGljYXRpb24sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBmZWF0dXJlczoge2Nsb3NlZFJlY29yZHM6IGZhbHNlLCBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLCBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLCBnZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHM6IGZhbHNlLCBpbW11dGFibGVDb2xsZWN0aW9uczogZmFsc2UsIG9wdGlvbmFsVmFsdWVzOiBmYWxzZSwgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLCBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmYWxzZSwgcmVmZXJlbmNlQ2xhc3NlczogZmFsc2UsIHR5cGVkRXJyb3JzOiBmYWxzZSwgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmFsc2V9LFxuICAgIGlkOiBcImlvc1wiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcm91bmRUcmlwOiBmYWxzZVxuICB9XG5dXG5cbmV4cG9ydCBjb25zdCBsYW5ndWFnZVJlZ2lzdHJ5ID0gY3JlYXRlTGFuZ3VhZ2VSZWdpc3RyeShyZWNvcmRzKVxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlQ2FwYWJpbGl0aWVzID0gbGFuZ3VhZ2VSZWdpc3RyeS5kZXNjcmlwdG9yc1xuLyoqIEB0eXBlIHtyZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2VbXX0gKi9cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRMYW5ndWFnZXMgPSBPYmplY3QuZnJlZXplKGxhbmd1YWdlQ2FwYWJpbGl0aWVzXG4gIC5maWx0ZXIoKHtyb2xlc30pID0+IHJvbGVzLmZyb250ZW5kICYmIHJvbGVzLnRleHRCYWNrZW5kKVxuICAubWFwKCh7aWR9KSA9PiAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gKi8gKGlkKSkpXG5cbi8qKlxuICogU3VwcGxpZXMgY29tbW9uIG9yaWdpbmFsLWZpdmUgY2FwYWJpbGl0eSBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSB2YWx1ZXMgLSBMYW5ndWFnZS1zcGVjaWZpYyByZWNvcmQgZmllbGRzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBDb21wbGV0ZSByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGxhbmd1YWdlKHZhbHVlcykge1xuICByZXR1cm4ge1xuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcInNpbmdsZVwiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgcmVmZXJlbmNlQ2xhc3NlczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICB0eXBlZEVycm9yczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKVxuICAgIH0sXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogZmFsc2UsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcHJvdmlkZXI6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgIHJvdW5kVHJpcDogdHJ1ZSxcbiAgICAuLi52YWx1ZXNcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYW4gaW50ZXJuYWwgcmVnaXN0cnkga2V5IGZvciBhIHB1YmxpYyByb2xlIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIEludGVybmFsIHJvbGUga2V5LlxuICogQHJldHVybnMge3N0cmluZ30gUHVibGljIHJvbGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcHVibGljUm9sZU5hbWUocm9sZSkge1xuICBpZiAocm9sZSA9PSBcInRleHRCYWNrZW5kXCIpIHJldHVybiBcInRleHQgYmFja2VuZFwiXG4gIGlmIChyb2xlID09IFwiYmluYXJ5QmFja2VuZFwiKSByZXR1cm4gXCJiaW5hcnkgYmFja2VuZFwiXG4gIGlmIChyb2xlID09IFwiYXBwbGljYXRpb25CYWNrZW5kXCIpIHJldHVybiBcImFwcGxpY2F0aW9uLWFydGlmYWN0IGJhY2tlbmRcIlxuXG4gIHJldHVybiByb2xlXG59XG5cbi8qKlxuICogVGhyb3dzIGFuIHVua25vd24tbGFuZ3VhZ2UgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIFVua25vd24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFtsb2NhdGlvbl0gLSBSZWxhdGVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtSZWdpc3RyeVJvbGUgfCB1bmRlZmluZWR9IFtyb2xlXSAtIFJlcXVlc3RlZCByb2xlLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiB1bnN1cHBvcnRlZExhbmd1YWdlKGlkLCBsb2NhdGlvbiwgcm9sZSkge1xuICBjb25zdCBtZXNzYWdlID0gcm9sZSA9PSBcImZyb250ZW5kXCIgPyBcIk5vIGZyb250ZW5kIGFkYXB0ZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBsYW5ndWFnZS5cIiA6XG4gICAgcm9sZSA9PSBcInRleHRCYWNrZW5kXCIgPyBcIk5vIHNvdXJjZSBiYWNrZW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgbGFuZ3VhZ2UuXCIgOlxuICAgICAgXCJObyBsYW5ndWFnZSBvciB0YXJnZXQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBJRC5cIlxuXG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiVU5TVVBQT1JURURfTEFOR1VBR0VcIixcbiAgICBsYW5ndWFnZTogaWQsXG4gICAgbG9jYXRpb24sXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgcmVnaXN0cnktc2hhcGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2lkXSAtIENhbmRpZGF0ZSByZWdpc3RyeSBJRC5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFJlZ2lzdHJ5KG1lc3NhZ2UsIGlkID0gXCJyZWdpc3RyeVwiKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiSU5WQUxJRF9SRUdJU1RSWVwiLCBsYW5ndWFnZTogaWQsIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgYW4gb3JkaW5hcnkgc3RyaW5nLWtleWVkIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09IE9iamVjdC5wcm90b3R5cGVcbn1cblxuLyoqXG4gKiBEZWVwbHkgZnJlZXplcyByZWdpc3RyeSByZWNvcmRzIGFuZCBwdWJsaWMgZGVzY3JpcHRvcnMuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSB2YWx1ZSAtIFJlZ2lzdHJ5LW93bmVkIHZhbHVlLlxuICogQHJldHVybnMge1R9IEZyb3plbiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXG4gIGZvciAoY29uc3QgbmVzdGVkIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSBkZWVwRnJlZXplKG5lc3RlZClcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh2YWx1ZSlcbn1cbiJdfQ==
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3hE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QixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtBQUNwRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO0FBQy9ILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUs7SUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU5RSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aXNEZW5zZUFycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRSb2xlfSBmcm9tIFwiLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVKYXZhfSBmcm9tIFwiLi9iYWNrZW5kcy9qYXZhLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVLb3RsaW59IGZyb20gXCIuL2JhY2tlbmRzL2tvdGxpbi5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQ1NoYXJwUHJvamVjdH0gZnJvbSBcIi4vYmFja2VuZHMvY3NoYXJwLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVHb01vZHVsZX0gZnJvbSBcIi4vYmFja2VuZHMvZ28uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVJ1c3RQcm9qZWN0fSBmcm9tIFwiLi9iYWNrZW5kcy9ydXN0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVTd2lmdH0gZnJvbSBcIi4vYmFja2VuZHMvc3dpZnQuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZURhcnRQYWNrYWdlfSBmcm9tIFwiLi9iYWNrZW5kcy9kYXJ0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVaaWdQcm9qZWN0fSBmcm9tIFwiLi9iYWNrZW5kcy96aWcuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUphdmFTY3JpcHR9IGZyb20gXCIuL2JhY2tlbmRzL2phdmFzY3JpcHQuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVBocH0gZnJvbSBcIi4vYmFja2VuZHMvcGhwLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVQeXRob259IGZyb20gXCIuL2JhY2tlbmRzL3B5dGhvbi5qc1wiXG5pbXBvcnQge2dlbmVyYXRlUnVieX0gZnJvbSBcIi4vYmFja2VuZHMvcnVieS5qc1wiXG5pbXBvcnQge2dlbmVyYXRlVHlwZVNjcmlwdH0gZnJvbSBcIi4vYmFja2VuZHMvdHlwZXNjcmlwdC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQnJvd3Nlcldhc219IGZyb20gXCIuL2JhY2tlbmRzL3dhc20uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUlvc0FwcGxpY2F0aW9ufSBmcm9tIFwiLi9iYWNrZW5kcy9pb3MuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUFuZHJvaWRBcHBsaWNhdGlvbn0gZnJvbSBcIi4vYmFja2VuZHMvYW5kcm9pZC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlRmx1dHRlckFwcGxpY2F0aW9ufSBmcm9tIFwiLi9iYWNrZW5kcy9mbHV0dGVyLmpzXCJcbmltcG9ydCB7cGFyc2VKYXZhfSBmcm9tIFwiLi9mcm9udGVuZHMvamF2YS5qc1wiXG5pbXBvcnQge3BhcnNlS290bGlufSBmcm9tIFwiLi9mcm9udGVuZHMva290bGluLmpzXCJcbmltcG9ydCB7cGFyc2VDU2hhcnB9IGZyb20gXCIuL2Zyb250ZW5kcy9jc2hhcnAuanNcIlxuaW1wb3J0IHtwYXJzZUdvfSBmcm9tIFwiLi9mcm9udGVuZHMvZ28uanNcIlxuaW1wb3J0IHtwYXJzZVJ1c3R9IGZyb20gXCIuL2Zyb250ZW5kcy9ydXN0LmpzXCJcbmltcG9ydCB7cGFyc2VTd2lmdH0gZnJvbSBcIi4vZnJvbnRlbmRzL3N3aWZ0LmpzXCJcbmltcG9ydCB7cGFyc2VEYXJ0fSBmcm9tIFwiLi9mcm9udGVuZHMvZGFydC5qc1wiXG5pbXBvcnQge3BhcnNlWmlnfSBmcm9tIFwiLi9mcm9udGVuZHMvemlnLmpzXCJcbmltcG9ydCB7cGFyc2VDcHB9IGZyb20gXCIuL2Zyb250ZW5kcy9jcHAuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUNwcH0gZnJvbSBcIi4vYmFja2VuZHMvY3BwLmpzXCJcbmltcG9ydCB7cGFyc2VDfSBmcm9tIFwiLi9mcm9udGVuZHMvYy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQ1Byb2dyYW19IGZyb20gXCIuL2JhY2tlbmRzL2MuanNcIlxuaW1wb3J0IHtwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0fSBmcm9tIFwiLi9mcm9udGVuZHMvamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzXCJcbmltcG9ydCB7cGFyc2VQaHB9IGZyb20gXCIuL2Zyb250ZW5kcy9waHAuanNcIlxuaW1wb3J0IHtwYXJzZVB5dGhvbn0gZnJvbSBcIi4vZnJvbnRlbmRzL3B5dGhvbi5qc1wiXG5pbXBvcnQge3BhcnNlUnVieX0gZnJvbSBcIi4vZnJvbnRlbmRzL3J1YnkuanNcIlxuXG5jb25zdCByZWdpc3RyeVJvbGVzID0gT2JqZWN0LmZyZWV6ZShbXCJmcm9udGVuZFwiLCBcInRleHRCYWNrZW5kXCIsIFwiYmluYXJ5QmFja2VuZFwiLCBcImFwcGxpY2F0aW9uQmFja2VuZFwiLCBcImludGVyb3BlcmFiaWxpdHlcIl0pXG5jb25zdCBhY2NlcHRhbmNlU3RhZ2VPcmRlciA9IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcImxpbmtcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXVxuY29uc3QgYWNjZXB0YW5jZVN0YWdlcyA9IG5ldyBNYXAoYWNjZXB0YW5jZVN0YWdlT3JkZXIubWFwKChzdGFnZSwgaW5kZXgpID0+IFtzdGFnZSwgaW5kZXhdKSlcbmNvbnN0IHJlZ2lzdHJ5S2V5cyA9IG5ldyBTZXQoW1xuICBcImFjY2VwdGFuY2VcIiwgXCJhcHBsaWNhdGlvbkJhY2tlbmRcIiwgXCJhcnRpZmFjdE11bHRpcGxpY2l0eVwiLCBcImJpbmFyeUJhY2tlbmRcIiwgXCJkZWZhdWx0RmlsZW5hbWVcIiwgXCJmcm9udGVuZFwiLCBcImlkXCIsXG4gIFwiZmVhdHVyZXNcIiwgXCJpbnRlcm9wZXJhYmlsaXR5XCIsIFwibWFwcGluZ1wiLCBcIm1lZGlhVHlwZVwiLCBcInByb3ZpZGVyXCIsIFwicm91bmRUcmlwXCIsIFwidGV4dEJhY2tlbmRcIlxuXSlcblxuLyoqIEB0eXBlZGVmIHtcImZyb250ZW5kXCIgfCBcInRleHRCYWNrZW5kXCIgfCBcImJpbmFyeUJhY2tlbmRcIiB8IFwiYXBwbGljYXRpb25CYWNrZW5kXCIgfCBcImludGVyb3BlcmFiaWxpdHlcIn0gUmVnaXN0cnlSb2xlICovXG4vKiogQHR5cGVkZWYgeyguLi52YWx1ZXM6IHVua25vd25bXSkgPT4gdW5rbm93bn0gUmVnaXN0cnlJbXBsZW1lbnRhdGlvbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEZyb250ZW5kSW5wdXRcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2NhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwcm9wZXJ0eSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj4sIHZhbHVlUmVjb3Jkcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fX0gW3Byb2dyYW1dIC0gUHJvZ3JhbSBjb252ZXJzaW9uIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgRnJvbnRlbmRcbiAqIEBwYXJhbSB7RnJvbnRlbmRJbnB1dH0gaW5wdXQgLSBGcm9udGVuZCByZXF1ZXN0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUmVnaXN0cnlSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFN0YWJsZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7e3N0YWdlczogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VbXSwgdG9vbGNoYWluczogc3RyaW5nW119fSBhY2NlcHRhbmNlIC0gQWNjZXB0YW5jZSBkZWNsYXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7XCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIn0gYXJ0aWZhY3RNdWx0aXBsaWNpdHkgLSBBcnRpZmFjdCBtdWx0aXBsaWNpdHkuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VGZWF0dXJlQ2FwYWJpbGl0aWVzfSBmZWF0dXJlcyAtIFNlbWFudGljIGZlYXR1cmUgY2FwYWJpbGl0aWVzLlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlTWFwcGluZ0NhcGFiaWxpdGllc30gbWFwcGluZyAtIE1hcHBpbmcgY2FwYWJpbGl0aWVzLlxuICogQHByb3BlcnR5IHtib29sZWFufSByb3VuZFRyaXAgLSBSb3VuZC10cmlwIGRlY2xhcmF0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtkZWZhdWx0RmlsZW5hbWVdIC0gRGVmYXVsdCBiYWNrZW5kIGZpbGVuYW1lLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFttZWRpYVR5cGVdIC0gRGVmYXVsdCBiYWNrZW5kIG1lZGlhIHR5cGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtwcm92aWRlcl0gLSBUYXJnZXQgaG9zdCBzdGRsaWIgcHJvdmlkZXIvbmF0aXZlLWJpbmRpbmcgcm9sZS5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gW2Zyb250ZW5kXSAtIEZyb250ZW5kIGFkYXB0ZXIuXG4gKiBAcHJvcGVydHkge1JlZ2lzdHJ5SW1wbGVtZW50YXRpb259IFt0ZXh0QmFja2VuZF0gLSBUZXh0IGJhY2tlbmQuXG4gKiBAcHJvcGVydHkge1JlZ2lzdHJ5SW1wbGVtZW50YXRpb259IFtiaW5hcnlCYWNrZW5kXSAtIEJpbmFyeSBiYWNrZW5kLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbYXBwbGljYXRpb25CYWNrZW5kXSAtIEFwcGxpY2F0aW9uLWFydGlmYWN0IGJhY2tlbmQuXG4gKiBAcHJvcGVydHkge1JlZ2lzdHJ5SW1wbGVtZW50YXRpb259IFtpbnRlcm9wZXJhYmlsaXR5XSAtIEludGVyb3BlcmFiaWxpdHkgYnJpZGdlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTGFuZ3VhZ2VSZWdpc3RyeVxuICogQHByb3BlcnR5IHtyZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQ2FwYWJpbGl0aWVzW119IGRlc2NyaXB0b3JzIC0gUHVibGljIGRlc2NyaXB0b3JzLlxuICogQHByb3BlcnR5IHtyZWFkb25seSBzdHJpbmdbXX0gaWRzIC0gUmVnaXN0ZXJlZCBJRHMgaW4gc3RhYmxlIG9yZGVyLlxuICogQHByb3BlcnR5IHsoaWQ6IHN0cmluZykgPT4gUmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeVJlY29yZD59IHJlY29yZCAtIEV4YWN0IHJlY29yZCBsb29rdXAuXG4gKiBAcHJvcGVydHkgeyhpZDogc3RyaW5nLCByb2xlOiBSZWdpc3RyeVJvbGUsIGxvY2F0aW9uPzogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbikgPT4gUmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gcmVzb2x2ZSAtIFJvbGUgbG9va3VwLlxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBpbW11dGFibGUgcm9sZSByZWdpc3RyeSBmcm9tIG9yZGVyZWQgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlUmVjb3JkcyAtIE9yZGVyZWQgbGFuZ3VhZ2UgcmVjb3Jkcy5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxMYW5ndWFnZVJlZ2lzdHJ5Pn0gUmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYW5ndWFnZVJlZ2lzdHJ5KGNhbmRpZGF0ZVJlY29yZHMpIHtcbiAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlUmVjb3JkcykpIGludmFsaWRSZWdpc3RyeShcIlJlZ2lzdHJ5IHJlY29yZHMgbXVzdCBiZSBhbiBvcmRlcmVkIGRlbnNlIGFycmF5LlwiKVxuXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgUmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeVJlY29yZD4+fSAqL1xuICBjb25zdCByZWNvcmRzQnlJZCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VDYXBhYmlsaXRpZXNbXX0gKi9cbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBbXVxuXG4gIGZvciAobGV0IHJlY29yZEluZGV4ID0gMDsgcmVjb3JkSW5kZXggPCBjYW5kaWRhdGVSZWNvcmRzLmxlbmd0aDsgcmVjb3JkSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVJlY29yZHNbcmVjb3JkSW5kZXhdXG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoY2FuZGlkYXRlKSkgaW52YWxpZFJlZ2lzdHJ5KFwiRXZlcnkgcmVnaXN0cnkgcmVjb3JkIG11c3QgYmUgYSBwbGFpbiBvYmplY3QuXCIpXG4gICAgY29uc3QgaWQgPSBjYW5kaWRhdGUuaWRcblxuICAgIGlmICh0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIiB8fCBpZC5sZW5ndGggPT0gMCB8fCAhL15bYS16XVthLXowLTktXSokL3UudGVzdChpZCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShcIkV2ZXJ5IHJlZ2lzdHJ5IHJlY29yZCByZXF1aXJlcyBhIHN0YWJsZSBsb3dlcmNhc2UgSUQuXCIsIHR5cGVvZiBpZCA9PSBcInN0cmluZ1wiID8gaWQgOiB1bmRlZmluZWQpXG4gICAgfVxuICAgIGlmIChyZWNvcmRzQnlJZC5oYXMoaWQpKSBpbnZhbGlkUmVnaXN0cnkoYER1cGxpY2F0ZSByZWdpc3RyeSBJRCAnJHtpZH0nLmAsIGlkKVxuICAgIGlmIChPYmplY3Qua2V5cyhjYW5kaWRhdGUpLnNvbWUoKGtleSkgPT4gIXJlZ2lzdHJ5S2V5cy5oYXMoa2V5KSkpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIHVua25vd24gZmllbGRzLmAsIGlkKVxuICAgIGlmIChjYW5kaWRhdGUucHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgY2FuZGlkYXRlLnByb3ZpZGVyICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGRlY2xhcmVzIGFuIGludmFsaWQgcHJvdmlkZXIgcm9sZS5gLCBpZClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvbGUgb2YgcmVnaXN0cnlSb2xlcykge1xuICAgICAgaWYgKGNhbmRpZGF0ZVtyb2xlXSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjYW5kaWRhdGVbcm9sZV0gIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcm9sZSAnJHtyb2xlfScgZm9yICcke2lkfScgbXVzdCBiZSBhIGZ1bmN0aW9uIHdoZW4gcHJlc2VudC5gLCBpZClcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJ0aWZhY3RNdWx0aXBsaWNpdHkgPSBjYW5kaWRhdGUuYXJ0aWZhY3RNdWx0aXBsaWNpdHlcblxuICAgIGlmIChhcnRpZmFjdE11bHRpcGxpY2l0eSAhPSBcInNpbmdsZVwiICYmIGFydGlmYWN0TXVsdGlwbGljaXR5ICE9IFwibXVsdGlwbGVcIikge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgYW4gaW52YWxpZCBhcnRpZmFjdCBtdWx0aXBsaWNpdHkuYCwgaWQpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlLnJvdW5kVHJpcCAhPSBcImJvb2xlYW5cIikgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyByZXF1aXJlcyBhIEJvb2xlYW4gcm91bmQtdHJpcCBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICBjb25zdCBmZWF0dXJlc0NhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5mZWF0dXJlcyA/PyB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmYWxzZSxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBmYWxzZSxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLFxuICAgICAgcmVmZXJlbmNlQ2xhc3NlczogZmFsc2UsXG4gICAgICB0eXBlZEVycm9yczogZmFsc2UsXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZVxuICAgIH1cblxuICAgIGlmICghaXNQbGFpbk9iamVjdChmZWF0dXJlc0NhbmRpZGF0ZSkgfHxcbiAgICAgIE9iamVjdC5rZXlzKGZlYXR1cmVzQ2FuZGlkYXRlKS5zb3J0KCkuam9pbihcIixcIikgIT0gXCJjbG9zZWRSZWNvcmRzLGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyxlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXMsZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzLGltbXV0YWJsZUNvbGxlY3Rpb25zLG9wdGlvbmFsVmFsdWVzLG9yZGVyZWRMaXN0SXRlcmF0aW9uLG9yZGVyZWRNYXBJdGVyYXRpb24scmVmZXJlbmNlQ2xhc3Nlcyx0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzLHR5cGVkRXJyb3JzXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5jbG9zZWRSZWNvcmRzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuY29uZGl0aW9uQ29udHJvbGxlZExvb3BzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuaW1tdXRhYmxlQ29sbGVjdGlvbnMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5vcHRpb25hbFZhbHVlcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRMaXN0SXRlcmF0aW9uICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUub3JkZXJlZE1hcEl0ZXJhdGlvbiAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLnJlZmVyZW5jZUNsYXNzZXMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS50eXBlZEVycm9ycyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLnR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3MgIT0gXCJib29sZWFuXCIpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgZmVhdHVyZSBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICB9XG4gICAgY29uc3QgZmVhdHVyZXMgPSBkZWVwRnJlZXplKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZUZlYXR1cmVDYXBhYmlsaXRpZXN9ICovICh7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmZWF0dXJlc0NhbmRpZGF0ZS5jbG9zZWRSZWNvcmRzLFxuICAgICAgY29uZGl0aW9uQ29udHJvbGxlZExvb3BzOiBmZWF0dXJlc0NhbmRpZGF0ZS5jb25kaXRpb25Db250cm9sbGVkTG9vcHMsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZlYXR1cmVzQ2FuZGlkYXRlLmVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlcyxcbiAgICAgIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmVhdHVyZXNDYW5kaWRhdGUuZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZlYXR1cmVzQ2FuZGlkYXRlLmltbXV0YWJsZUNvbGxlY3Rpb25zLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IGZlYXR1cmVzQ2FuZGlkYXRlLm9wdGlvbmFsVmFsdWVzLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRMaXN0SXRlcmF0aW9uLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmVhdHVyZXNDYW5kaWRhdGUub3JkZXJlZE1hcEl0ZXJhdGlvbixcbiAgICAgIHJlZmVyZW5jZUNsYXNzZXM6IGZlYXR1cmVzQ2FuZGlkYXRlLnJlZmVyZW5jZUNsYXNzZXMsXG4gICAgICB0eXBlZEVycm9yczogZmVhdHVyZXNDYW5kaWRhdGUudHlwZWRFcnJvcnMsXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmZWF0dXJlc0NhbmRpZGF0ZS50eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzXG4gICAgfSkpXG4gICAgY29uc3QgbWFwcGluZ0NhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5tYXBwaW5nXG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZSkpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgbWFwcGluZyBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICBjb25zdCBtYXBwaW5nU25hcHNob3QgPSB7XG4gICAgICBiaW5hcnlSYW5nZXM6IG1hcHBpbmdDYW5kaWRhdGUuYmluYXJ5UmFuZ2VzLFxuICAgICAgcmljaFRleHQ6IG1hcHBpbmdDYW5kaWRhdGUucmljaFRleHQsXG4gICAgICBzb3VyY2VNYXBWMzogbWFwcGluZ0NhbmRpZGF0ZS5zb3VyY2VNYXBWM1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWFwcGluZ1NuYXBzaG90LnJpY2hUZXh0ICE9IFwiYm9vbGVhblwiIHx8IHR5cGVvZiBtYXBwaW5nU25hcHNob3Quc291cmNlTWFwVjMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBtYXBwaW5nU25hcHNob3QuYmluYXJ5UmFuZ2VzICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIG1hcHBpbmcgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmcgPSBkZWVwRnJlZXplKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXN9ICovIChtYXBwaW5nU25hcHNob3QpKVxuICAgIGNvbnN0IGFjY2VwdGFuY2VDYW5kaWRhdGUgPSBjYW5kaWRhdGUuYWNjZXB0YW5jZVxuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGFjY2VwdGFuY2VDYW5kaWRhdGUpIHx8ICFpc0RlbnNlQXJyYXkoYWNjZXB0YW5jZUNhbmRpZGF0ZS5zdGFnZXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGFjY2VwdGFuY2VDYW5kaWRhdGUudG9vbGNoYWlucykpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgYWNjZXB0YW5jZSBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICB9XG4gICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgY29uc3Qgc3RhZ2VTbmFwc2hvdCA9IFtdXG4gICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgY29uc3QgdG9vbGNoYWluU25hcHNob3QgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFjY2VwdGFuY2VDYW5kaWRhdGUuc3RhZ2VzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgc3RhZ2VTbmFwc2hvdC5wdXNoKGFjY2VwdGFuY2VDYW5kaWRhdGUuc3RhZ2VzW2luZGV4XSlcbiAgICB9XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFjY2VwdGFuY2VDYW5kaWRhdGUudG9vbGNoYWlucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIHRvb2xjaGFpblNuYXBzaG90LnB1c2goYWNjZXB0YW5jZUNhbmRpZGF0ZS50b29sY2hhaW5zW2luZGV4XSlcbiAgICB9XG4gICAgaWYgKCFzdGFnZVNuYXBzaG90LmV2ZXJ5KChzdGFnZSkgPT4gdHlwZW9mIHN0YWdlID09IFwic3RyaW5nXCIgJiYgYWNjZXB0YW5jZVN0YWdlcy5oYXMoc3RhZ2UpKSB8fFxuICAgICAgIXRvb2xjaGFpblNuYXBzaG90LmV2ZXJ5KCh0b29sY2hhaW4pID0+IHR5cGVvZiB0b29sY2hhaW4gPT0gXCJzdHJpbmdcIiAmJiB0b29sY2hhaW4ubGVuZ3RoID4gMCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgYWNjZXB0YW5jZSBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICB9XG4gICAgY29uc3Qgc3RhZ2VzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VTdGFnZVtdfSAqLyAoc3RhZ2VTbmFwc2hvdClcbiAgICBjb25zdCB0b29sY2hhaW5zID0gLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8gKHRvb2xjaGFpblNuYXBzaG90KVxuICAgIGxldCBwcmV2aW91c1N0YWdlID0gLTFcbiAgICBjb25zdCBkZWNsYXJlZFN0YWdlcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGFjY2VwdGFuY2VTdGFnZXMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoc3RhZ2UpKSlcblxuICAgICAgaWYgKGRlY2xhcmVkU3RhZ2VzLmhhcyhzdGFnZSkgfHwgc3RhZ2VJbmRleCA8IHByZXZpb3VzU3RhZ2UpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIHVub3JkZXJlZCBvciBkdXBsaWNhdGUgYWNjZXB0YW5jZSBzdGFnZXMuYCwgaWQpXG4gICAgICBkZWNsYXJlZFN0YWdlcy5hZGQoc3RhZ2UpXG4gICAgICBwcmV2aW91c1N0YWdlID0gc3RhZ2VJbmRleFxuICAgIH1cbiAgICBpZiAobmV3IFNldCh0b29sY2hhaW5zKS5zaXplICE9IHRvb2xjaGFpbnMubGVuZ3RoKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBkdXBsaWNhdGUgYWNjZXB0YW5jZSB0b29sY2hhaW5zLmAsIGlkKVxuICAgIH1cblxuICAgIGNvbnN0IGhhc0Zyb250ZW5kID0gdHlwZW9mIGNhbmRpZGF0ZS5mcm9udGVuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICBjb25zdCBoYXNUZXh0QmFja2VuZCA9IHR5cGVvZiBjYW5kaWRhdGUudGV4dEJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzQmluYXJ5QmFja2VuZCA9IHR5cGVvZiBjYW5kaWRhdGUuYmluYXJ5QmFja2VuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICBjb25zdCBoYXNBcHBsaWNhdGlvbkJhY2tlbmQgPSB0eXBlb2YgY2FuZGlkYXRlLmFwcGxpY2F0aW9uQmFja2VuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICBjb25zdCBoYXNCYWNrZW5kID0gaGFzVGV4dEJhY2tlbmQgfHwgaGFzQmluYXJ5QmFja2VuZCB8fCBoYXNBcHBsaWNhdGlvbkJhY2tlbmRcblxuICAgIGlmICgobWFwcGluZy5yaWNoVGV4dCB8fCBtYXBwaW5nLnNvdXJjZU1hcFYzIHx8IG1hcHBpbmcuYmluYXJ5UmFuZ2VzKSAmJiAhaGFzQmFja2VuZCB8fFxuICAgICAgbWFwcGluZy5zb3VyY2VNYXBWMyAmJiAhbWFwcGluZy5yaWNoVGV4dCB8fFxuICAgICAgbWFwcGluZy5iaW5hcnlSYW5nZXMgJiYgIWhhc0JpbmFyeUJhY2tlbmQgJiYgIWhhc0FwcGxpY2F0aW9uQmFja2VuZCkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyBtYXBwaW5nIHN1cHBvcnQgd2l0aG91dCBpdHMgcmVxdWlyZWQgYmFja2VuZCByb2xlLmAsIGlkKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLnJvdW5kVHJpcCAmJiAoIWhhc0Zyb250ZW5kIHx8ICFoYXNCYWNrZW5kKSkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyByb3VuZC10cmlwIHN1cHBvcnQgd2l0aG91dCBmcm9udGVuZCBhbmQgYmFja2VuZCByb2xlcy5gLCBpZClcbiAgICB9XG4gICAgaWYgKHN0YWdlcy5pbmNsdWRlcyhcInBhcnNlXCIpICYmICFoYXNGcm9udGVuZCB8fCBzdGFnZXMuaW5jbHVkZXMoXCJnZW5lcmF0ZVwiKSAmJiAhaGFzQmFja2VuZCkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyBhbiBhY2NlcHRhbmNlIHN0YWdlIHdpdGhvdXQgaXRzIHJlcXVpcmVkIHJvbGUuYCwgaWQpXG4gICAgfVxuXG4gICAgY29uc3QgaGFzRGVmYXVsdGVkQmFja2VuZCA9IGhhc1RleHRCYWNrZW5kIHx8IGhhc0JpbmFyeUJhY2tlbmRcblxuICAgIGlmICgoaGFzRGVmYXVsdGVkQmFja2VuZCB8fCBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAodHlwZW9mIGNhbmRpZGF0ZS5kZWZhdWx0RmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lLmxlbmd0aCA9PSAwKSkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSBiYWNrZW5kICcke2lkfScgcmVxdWlyZXMgYSBkZWZhdWx0IGZpbGVuYW1lLmAsIGlkKVxuICAgIH1cbiAgICBpZiAoKGhhc0RlZmF1bHRlZEJhY2tlbmQgfHwgY2FuZGlkYXRlLm1lZGlhVHlwZSAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUubWVkaWFUeXBlICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLm1lZGlhVHlwZS5sZW5ndGggPT0gMCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgYmFja2VuZCAnJHtpZH0nIHJlcXVpcmVzIGEgbWVkaWEgdHlwZS5gLCBpZClcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRhbmNlID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VBY2NlcHRhbmNlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgc3RhZ2VzLFxuICAgICAgdG9vbGNoYWluc1xuICAgIH0pKVxuICAgIGNvbnN0IHJlY29yZCA9IGRlZXBGcmVlemUoLyoqIEB0eXBlIHtMYW5ndWFnZVJlZ2lzdHJ5UmVjb3JkfSAqLyAoe1xuICAgICAgYWNjZXB0YW5jZSxcbiAgICAgIGFydGlmYWN0TXVsdGlwbGljaXR5LFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBpZCxcbiAgICAgIG1hcHBpbmcsXG4gICAgICByb3VuZFRyaXA6IGNhbmRpZGF0ZS5yb3VuZFRyaXAsXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5kZWZhdWx0RmlsZW5hbWUgPT0gXCJzdHJpbmdcIiA/IHtkZWZhdWx0RmlsZW5hbWU6IGNhbmRpZGF0ZS5kZWZhdWx0RmlsZW5hbWV9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUubWVkaWFUeXBlID09IFwic3RyaW5nXCIgPyB7bWVkaWFUeXBlOiBjYW5kaWRhdGUubWVkaWFUeXBlfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLnByb3ZpZGVyID09IFwiYm9vbGVhblwiID8ge3Byb3ZpZGVyOiBjYW5kaWRhdGUucHJvdmlkZXJ9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuZnJvbnRlbmQgPT0gXCJmdW5jdGlvblwiID8ge2Zyb250ZW5kOiBjYW5kaWRhdGUuZnJvbnRlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUudGV4dEJhY2tlbmQgPT0gXCJmdW5jdGlvblwiID8ge3RleHRCYWNrZW5kOiBjYW5kaWRhdGUudGV4dEJhY2tlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuYmluYXJ5QmFja2VuZCA9PSBcImZ1bmN0aW9uXCIgPyB7YmluYXJ5QmFja2VuZDogY2FuZGlkYXRlLmJpbmFyeUJhY2tlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuYXBwbGljYXRpb25CYWNrZW5kID09IFwiZnVuY3Rpb25cIiA/IHthcHBsaWNhdGlvbkJhY2tlbmQ6IGNhbmRpZGF0ZS5hcHBsaWNhdGlvbkJhY2tlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuaW50ZXJvcGVyYWJpbGl0eSA9PSBcImZ1bmN0aW9uXCIgPyB7aW50ZXJvcGVyYWJpbGl0eTogY2FuZGlkYXRlLmludGVyb3BlcmFiaWxpdHl9IDoge30pXG4gICAgfSkpXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGRlZXBGcmVlemUoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgYWNjZXB0YW5jZSxcbiAgICAgIGFydGlmYWN0TXVsdGlwbGljaXR5LFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBpZCxcbiAgICAgIG1hcHBpbmcsXG4gICAgICByb2xlczoge1xuICAgICAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IHR5cGVvZiBjYW5kaWRhdGUuYXBwbGljYXRpb25CYWNrZW5kID09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgYmluYXJ5QmFja2VuZDogdHlwZW9mIGNhbmRpZGF0ZS5iaW5hcnlCYWNrZW5kID09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgZnJvbnRlbmQ6IHR5cGVvZiBjYW5kaWRhdGUuZnJvbnRlbmQgPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICBpbnRlcm9wZXJhYmlsaXR5OiB0eXBlb2YgY2FuZGlkYXRlLmludGVyb3BlcmFiaWxpdHkgPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICBwcm92aWRlcjogY2FuZGlkYXRlLnByb3ZpZGVyID09PSB0cnVlLFxuICAgICAgICB0ZXh0QmFja2VuZDogdHlwZW9mIGNhbmRpZGF0ZS50ZXh0QmFja2VuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICAgIH0sXG4gICAgICByb3VuZFRyaXA6IGNhbmRpZGF0ZS5yb3VuZFRyaXBcbiAgICB9KSlcblxuICAgIHJlY29yZHNCeUlkLnNldChpZCwgcmVjb3JkKVxuICAgIGRlc2NyaXB0b3JzLnB1c2goZGVzY3JpcHRvcilcbiAgfVxuXG4gIGNvbnN0IGZyb3plbkRlc2NyaXB0b3JzID0gZGVlcEZyZWV6ZShkZXNjcmlwdG9ycylcbiAgY29uc3QgaWRzID0gT2JqZWN0LmZyZWV6ZShmcm96ZW5EZXNjcmlwdG9ycy5tYXAoKHtpZH0pID0+IGlkKSlcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgZGVzY3JpcHRvcnM6IGZyb3plbkRlc2NyaXB0b3JzLFxuICAgIGlkcyxcbiAgICByZWNvcmQoaWQpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNCeUlkLmdldChpZClcblxuICAgICAgaWYgKCFyZWNvcmQpIHVuc3VwcG9ydGVkTGFuZ3VhZ2UoaWQpXG5cbiAgICAgIHJldHVybiByZWNvcmRcbiAgICB9LFxuICAgIHJlc29sdmUoaWQsIHJvbGUsIGxvY2F0aW9uKSB7XG4gICAgICBpZiAoIXJlZ2lzdHJ5Um9sZXMuaW5jbHVkZXMocm9sZSkpIGludmFsaWRSZWdpc3RyeShgVW5rbm93biByZWdpc3RyeSByb2xlICcke3JvbGV9Jy5gLCBpZClcbiAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNCeUlkLmdldChpZClcblxuICAgICAgaWYgKCFyZWNvcmQpIHVuc3VwcG9ydGVkTGFuZ3VhZ2UoaWQsIGxvY2F0aW9uLCByb2xlKVxuICAgICAgY29uc3QgaW1wbGVtZW50YXRpb24gPSByZWNvcmRbcm9sZV1cblxuICAgICAgaWYgKHR5cGVvZiBpbXBsZW1lbnRhdGlvbiAhPSBcImZ1bmN0aW9uXCIpIHVuc3VwcG9ydGVkUm9sZShpZCwgcHVibGljUm9sZU5hbWUocm9sZSksIGxvY2F0aW9uKVxuXG4gICAgICByZXR1cm4gaW1wbGVtZW50YXRpb25cbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUEhQIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IHBocEZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZVBocCh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBSdWJ5IHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IHJ1YnlGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VSdWJ5KHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIEphdmFTY3JpcHQgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgamF2YVNjcmlwdEZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBsYW5ndWFnZTogXCJqYXZhc2NyaXB0XCIsIHByb2dyYW0sIHNvdXJjZX0pXG5cbi8qKlxuICogVHlwZVNjcmlwdCByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCB0eXBlU2NyaXB0RnJvbnRlbmQgPSAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pID0+IHBhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHQoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIGxhbmd1YWdlOiBcInR5cGVzY3JpcHRcIiwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBKYXZhIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGphdmFGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VKYXZhKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIEtvdGxpbiByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBrb3RsaW5Gcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlS290bGluKHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBQeXRob24gcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgcHl0aG9uRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZVB5dGhvbih7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbi8qKlxuICogQyMgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgY3NoYXJwRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZUNTaGFycCh7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbi8qKlxuICogR28gcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgZ29Gcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlR28oe2ZpbGVuYW1lLCBzb3VyY2V9KVxuXG4vKipcbiAqIERhcnQgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgZGFydEZyb250ZW5kID0gKHtmaWxlbmFtZSwgc291cmNlfSkgPT4gcGFyc2VEYXJ0KHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBaaWcgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgemlnRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZVppZyh7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbmNvbnN0IHJlY29yZHMgPSBbXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicGhwODJcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnBocFwiLFxuICAgIGZyb250ZW5kOiBwaHBGcm9udGVuZCxcbiAgICBpZDogXCJwaHBcIixcbiAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVQaHBcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicnVieVwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0ucmJcIixcbiAgICBmcm9udGVuZDogcnVieUZyb250ZW5kLFxuICAgIGlkOiBcInJ1YnlcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXJ1YnlcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVSdWJ5XG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcIm5vZGVcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmpzXCIsXG4gICAgZnJvbnRlbmQ6IGphdmFTY3JpcHRGcm9udGVuZCxcbiAgICBpZDogXCJqYXZhc2NyaXB0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUphdmFTY3JpcHRcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInRzY1wiLCBcIm5vZGVcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnRzXCIsXG4gICAgZnJvbnRlbmQ6IHR5cGVTY3JpcHRGcm9udGVuZCxcbiAgICBpZDogXCJ0eXBlc2NyaXB0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQvdHlwZXNjcmlwdFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVR5cGVTY3JpcHRcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImphdmFjXCIsIFwiamF2YVwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIk1haW4uamF2YVwiLFxuICAgIGZyb250ZW5kOiBqYXZhRnJvbnRlbmQsXG4gICAgaWQ6IFwiamF2YVwiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtamF2YS1zb3VyY2VcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVKYXZhXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJrb3RsaW5jXCIsIFwiamF2YTI1XCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiUHJvZ3JhbS5rdFwiLFxuICAgIGZyb250ZW5kOiBrb3RsaW5Gcm9udGVuZCxcbiAgICBpZDogXCJrb3RsaW5cIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWtvdGxpblwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUtvdGxpblxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicHl0aG9uXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5weVwiLFxuICAgIGZyb250ZW5kOiBweXRob25Gcm9udGVuZCxcbiAgICBpZDogXCJweXRob25cIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXB5dGhvblwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVB5dGhvblxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImRvdG5ldFwiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiUHJvZ3JhbS5jc1wiLFxuICAgIGZyb250ZW5kOiBjc2hhcnBGcm9udGVuZCxcbiAgICBpZDogXCJjc2hhcnBcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWNzaGFycFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUNTaGFycFByb2plY3RcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiZ29cIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIm1haW4uZ29cIixcbiAgICBmcm9udGVuZDogZ29Gcm9udGVuZCxcbiAgICBpZDogXCJnb1wiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtZ29cIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVHb01vZHVsZVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5nXCJdfSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmNcIixcbiAgICBmcm9udGVuZDogcGFyc2VDLFxuICAgIGlkOiBcImNcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWNcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDUHJvZ3JhbVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5ncHBcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmNwcFwiLCBmcm9udGVuZDogcGFyc2VDcHAsIGlkOiBcImNwcFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LWMrK3NyY1wiLCB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDcHBcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicnVzdGNcIiwgXCJjYXJnb1wiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwic3JjL21haW4ucnNcIiwgZnJvbnRlbmQ6IHBhcnNlUnVzdCwgaWQ6IFwicnVzdFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LXJ1c3RcIiwgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlUnVzdFByb2plY3RcbiAgfSksXG4gIGxhbmd1YWdlKHthY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInN3aWZ0Y1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0uc3dpZnRcIiwgZnJvbnRlbmQ6IHBhcnNlU3dpZnQsIGlkOiBcInN3aWZ0XCIsIG1lZGlhVHlwZTogXCJ0ZXh0L3gtc3dpZnRcIiwgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlU3dpZnR9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiZGFydFwiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiYmluL3Byb2dyYW0uZGFydFwiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiB0cnVlLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgIHR5cGVkRXJyb3JzOiBmYWxzZSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlXG4gICAgfSxcbiAgICBmcm9udGVuZDogZGFydEZyb250ZW5kLFxuICAgIGlkOiBcImRhcnRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWRhcnRcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVEYXJ0UGFja2FnZVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJ6aWdcIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInNyYy9tYWluLnppZ1wiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiB0cnVlLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgIHR5cGVkRXJyb3JzOiBmYWxzZSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlXG4gICAgfSxcbiAgICBmcm9udGVuZDogemlnRnJvbnRlbmQsXG4gICAgaWQ6IFwiemlnXCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC16aWdcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVaaWdQcm9qZWN0XG4gIH0pLFxuICB7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wiZ2VuZXJhdGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wid2FzbS12YWxpZGF0ZVwiLCBcIm5vZGVcIiwgXCJjaHJvbWl1bVwiXX0sXG4gICAgYXBwbGljYXRpb25CYWNrZW5kOiBnZW5lcmF0ZUJyb3dzZXJXYXNtLFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgYmluYXJ5QmFja2VuZDogZ2VuZXJhdGVCcm93c2VyV2FzbSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS53YXNtXCIsXG4gICAgZmVhdHVyZXM6IHtjbG9zZWRSZWNvcmRzOiBmYWxzZSwgY29uZGl0aW9uQ29udHJvbGxlZExvb3BzOiBmYWxzZSwgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSwgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmYWxzZSwgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLCBvcHRpb25hbFZhbHVlczogZmFsc2UsIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSwgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLCB0eXBlZEVycm9yczogZmFsc2UsIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlfSxcbiAgICBpZDogXCJ3YXNtXCIsXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogdHJ1ZSwgcmljaFRleHQ6IHRydWUsIHNvdXJjZU1hcFYzOiB0cnVlfSxcbiAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24vd2FzbVwiLFxuICAgIHJvdW5kVHJpcDogZmFsc2VcbiAgfSxcbiAge1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiaW5zdGFudGlhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJhbmRyb2lkXCJdfSxcbiAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IGdlbmVyYXRlQW5kcm9pZEFwcGxpY2F0aW9uLFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgZmVhdHVyZXM6IHtjbG9zZWRSZWNvcmRzOiBmYWxzZSwgY29uZGl0aW9uQ29udHJvbGxlZExvb3BzOiBmYWxzZSwgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSwgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmYWxzZSwgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLCBvcHRpb25hbFZhbHVlczogZmFsc2UsIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSwgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLCB0eXBlZEVycm9yczogZmFsc2UsIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlfSxcbiAgICBpZDogXCJhbmRyb2lkXCIsXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogdHJ1ZSwgcmljaFRleHQ6IHRydWUsIHNvdXJjZU1hcFYzOiB0cnVlfSxcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiXSwgdG9vbGNoYWluczogW119LFxuICAgIGFwcGxpY2F0aW9uQmFja2VuZDogZ2VuZXJhdGVJb3NBcHBsaWNhdGlvbixcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwiaW9zXCIsXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogdHJ1ZSwgcmljaFRleHQ6IHRydWUsIHNvdXJjZU1hcFYzOiB0cnVlfSxcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiLCBcInJlc3RvcmVcIiwgXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIiwgXCJpbnN0YW50aWF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImZsdXR0ZXJcIiwgXCJhbmRyb2lkXCJdfSxcbiAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IGdlbmVyYXRlRmx1dHRlckFwcGxpY2F0aW9uLFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgZmVhdHVyZXM6IHtjbG9zZWRSZWNvcmRzOiBmYWxzZSwgY29uZGl0aW9uQ29udHJvbGxlZExvb3BzOiBmYWxzZSwgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSwgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmYWxzZSwgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLCBvcHRpb25hbFZhbHVlczogZmFsc2UsIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSwgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLCB0eXBlZEVycm9yczogZmFsc2UsIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlfSxcbiAgICBpZDogXCJmbHV0dGVyXCIsXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogdHJ1ZSwgcmljaFRleHQ6IHRydWUsIHNvdXJjZU1hcFYzOiB0cnVlfSxcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH1cbl1cblxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlUmVnaXN0cnkgPSBjcmVhdGVMYW5ndWFnZVJlZ2lzdHJ5KHJlY29yZHMpXG5leHBvcnQgY29uc3QgbGFuZ3VhZ2VDYXBhYmlsaXRpZXMgPSBsYW5ndWFnZVJlZ2lzdHJ5LmRlc2NyaXB0b3JzXG4vKiogQHR5cGUge3JlYWRvbmx5IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZVtdfSAqL1xuZXhwb3J0IGNvbnN0IHN1cHBvcnRlZExhbmd1YWdlcyA9IE9iamVjdC5mcmVlemUobGFuZ3VhZ2VDYXBhYmlsaXRpZXNcbiAgLmZpbHRlcigoe3JvbGVzfSkgPT4gcm9sZXMuZnJvbnRlbmQgJiYgcm9sZXMudGV4dEJhY2tlbmQpXG4gIC5tYXAoKHtpZH0pID0+IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSAqLyAoaWQpKSlcblxuLyoqXG4gKiBTdXBwbGllcyBjb21tb24gb3JpZ2luYWwtZml2ZSBjYXBhYmlsaXR5IGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IHZhbHVlcyAtIExhbmd1YWdlLXNwZWNpZmljIHJlY29yZCBmaWVsZHMuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IENvbXBsZXRlIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gbGFuZ3VhZ2UodmFsdWVzKSB7XG4gIHJldHVybiB7XG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwic2luZ2xlXCIsXG4gICAgZmVhdHVyZXM6IHtcbiAgICAgIGNsb3NlZFJlY29yZHM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgY29uZGl0aW9uQ29udHJvbGxlZExvb3BzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICBnZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIHR5cGVkRXJyb3JzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpXG4gICAgfSxcbiAgICBtYXBwaW5nOiB7YmluYXJ5UmFuZ2VzOiBmYWxzZSwgcmljaFRleHQ6IHRydWUsIHNvdXJjZU1hcFYzOiB0cnVlfSxcbiAgICBwcm92aWRlcjogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgcm91bmRUcmlwOiB0cnVlLFxuICAgIC4uLnZhbHVlc1xuICB9XG59XG5cbi8qKlxuICogRm9ybWF0cyBhbiBpbnRlcm5hbCByZWdpc3RyeSBrZXkgZm9yIGEgcHVibGljIHJvbGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gSW50ZXJuYWwgcm9sZSBrZXkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBQdWJsaWMgcm9sZSBuYW1lLlxuICovXG5mdW5jdGlvbiBwdWJsaWNSb2xlTmFtZShyb2xlKSB7XG4gIGlmIChyb2xlID09IFwidGV4dEJhY2tlbmRcIikgcmV0dXJuIFwidGV4dCBiYWNrZW5kXCJcbiAgaWYgKHJvbGUgPT0gXCJiaW5hcnlCYWNrZW5kXCIpIHJldHVybiBcImJpbmFyeSBiYWNrZW5kXCJcbiAgaWYgKHJvbGUgPT0gXCJhcHBsaWNhdGlvbkJhY2tlbmRcIikgcmV0dXJuIFwiYXBwbGljYXRpb24tYXJ0aWZhY3QgYmFja2VuZFwiXG5cbiAgcmV0dXJuIHJvbGVcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gdW5rbm93bi1sYW5ndWFnZSBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gVW5rbm93biBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gW2xvY2F0aW9uXSAtIFJlbGF0ZWQgbG9jYXRpb24uXG4gKiBAcGFyYW0ge1JlZ2lzdHJ5Um9sZSB8IHVuZGVmaW5lZH0gW3JvbGVdIC0gUmVxdWVzdGVkIHJvbGUuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIHVuc3VwcG9ydGVkTGFuZ3VhZ2UoaWQsIGxvY2F0aW9uLCByb2xlKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSByb2xlID09IFwiZnJvbnRlbmRcIiA/IFwiTm8gZnJvbnRlbmQgYWRhcHRlciBpcyByZWdpc3RlcmVkIGZvciB0aGlzIGxhbmd1YWdlLlwiIDpcbiAgICByb2xlID09IFwidGV4dEJhY2tlbmRcIiA/IFwiTm8gc291cmNlIGJhY2tlbmQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBsYW5ndWFnZS5cIiA6XG4gICAgICBcIk5vIGxhbmd1YWdlIG9yIHRhcmdldCBpcyByZWdpc3RlcmVkIGZvciB0aGlzIElELlwiXG5cbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY29kZTogXCJVTlNVUFBPUlRFRF9MQU5HVUFHRVwiLFxuICAgIGxhbmd1YWdlOiBpZCxcbiAgICBsb2NhdGlvbixcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbi8qKlxuICogVGhyb3dzIGEgbm9ybWFsaXplZCByZWdpc3RyeS1zaGFwZSBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBGYWlsdXJlIGRldGFpbC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbaWRdIC0gQ2FuZGlkYXRlIHJlZ2lzdHJ5IElELlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkUmVnaXN0cnkobWVzc2FnZSwgaWQgPSBcInJlZ2lzdHJ5XCIpIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZTogXCJJTlZBTElEX1JFR0lTVFJZXCIsIGxhbmd1YWdlOiBpZCwgbWVzc2FnZX0pXG59XG5cbi8qKlxuICogQ2hlY2tzIGZvciBhbiBvcmRpbmFyeSBzdHJpbmcta2V5ZWQgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gV2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT0gT2JqZWN0LnByb3RvdHlwZVxufVxuXG4vKipcbiAqIERlZXBseSBmcmVlemVzIHJlZ2lzdHJ5IHJlY29yZHMgYW5kIHB1YmxpYyBkZXNjcmlwdG9ycy5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbHVlIC0gUmVnaXN0cnktb3duZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7VH0gRnJvemVuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cbiAgZm9yIChjb25zdCBuZXN0ZWQgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIGRlZXBGcmVlemUobmVzdGVkKVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHZhbHVlKVxufVxuIl19
|