semantifold 0.3.0 → 0.4.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 +58 -15
- package/build/index.d.ts +48 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +57 -8
- package/build/src/artifact-path.d.ts +23 -1
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +45 -3
- package/build/src/artifacts.d.ts.map +1 -1
- package/build/src/artifacts.js +66 -1
- package/build/src/backends/c-validation.d.ts.map +1 -1
- package/build/src/backends/c-validation.js +7 -3
- package/build/src/backends/cpp-validation.d.ts.map +1 -1
- package/build/src/backends/cpp-validation.js +7 -3
- package/build/src/backends/csharp.js +7 -1
- package/build/src/backends/dart-runtime.d.ts +2 -0
- package/build/src/backends/dart-runtime.d.ts.map +1 -0
- package/build/src/backends/dart-runtime.js +41 -0
- package/build/src/backends/dart.d.ts +20 -0
- package/build/src/backends/dart.d.ts.map +1 -0
- package/build/src/backends/dart.js +321 -0
- package/build/src/backends/effects.d.ts +60 -0
- package/build/src/backends/effects.d.ts.map +1 -0
- package/build/src/backends/effects.js +746 -0
- package/build/src/backends/go.js +18 -4
- package/build/src/backends/identifiers.d.ts +36 -4
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +154 -10
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +27 -4
- package/build/src/backends/ios.d.ts +68 -0
- package/build/src/backends/ios.d.ts.map +1 -0
- package/build/src/backends/ios.js +1503 -0
- package/build/src/backends/java.d.ts.map +1 -1
- package/build/src/backends/java.js +429 -36
- package/build/src/backends/javascript.d.ts +6 -0
- package/build/src/backends/javascript.d.ts.map +1 -1
- package/build/src/backends/javascript.js +380 -24
- package/build/src/backends/kotlin-runtime.d.ts +3 -0
- package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
- package/build/src/backends/kotlin-runtime.js +29 -0
- package/build/src/backends/kotlin.d.ts +23 -0
- package/build/src/backends/kotlin.d.ts.map +1 -0
- package/build/src/backends/kotlin.js +136 -0
- 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/ordered-expressions.d.ts.map +1 -1
- package/build/src/backends/ordered-expressions.js +39 -7
- package/build/src/backends/php-stdlib-support.d.ts +19 -0
- package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
- package/build/src/backends/php-stdlib-support.js +227 -0
- package/build/src/backends/php.d.ts.map +1 -1
- package/build/src/backends/php.js +448 -33
- package/build/src/backends/program.d.ts +81 -0
- package/build/src/backends/program.d.ts.map +1 -0
- package/build/src/backends/program.js +1308 -0
- package/build/src/backends/python.js +7 -1
- package/build/src/backends/ruby.d.ts.map +1 -1
- package/build/src/backends/ruby.js +310 -24
- package/build/src/backends/rust-runtime.d.ts +7 -0
- package/build/src/backends/rust-runtime.d.ts.map +1 -0
- package/build/src/backends/rust-runtime.js +32 -0
- package/build/src/backends/rust-validation.d.ts +9 -0
- package/build/src/backends/rust-validation.d.ts.map +1 -0
- package/build/src/backends/rust-validation.js +78 -0
- package/build/src/backends/rust.d.ts +24 -0
- package/build/src/backends/rust.d.ts.map +1 -0
- package/build/src/backends/rust.js +344 -0
- package/build/src/backends/scalars.d.ts +14 -6
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +167 -17
- package/build/src/backends/shared.d.ts +23 -4
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +2158 -62
- package/build/src/backends/stdlib-support.d.ts +14 -0
- package/build/src/backends/stdlib-support.d.ts.map +1 -0
- package/build/src/backends/stdlib-support.js +237 -0
- package/build/src/backends/swift-runtime.d.ts +3 -0
- package/build/src/backends/swift-runtime.d.ts.map +1 -0
- package/build/src/backends/swift-runtime.js +14 -0
- package/build/src/backends/swift.d.ts +8 -0
- package/build/src/backends/swift.d.ts.map +1 -0
- package/build/src/backends/swift.js +127 -0
- package/build/src/backends/typescript.d.ts.map +1 -1
- package/build/src/backends/typescript.js +344 -24
- package/build/src/backends/wasm.d.ts +43 -0
- package/build/src/backends/wasm.d.ts.map +1 -0
- package/build/src/backends/wasm.js +2164 -0
- package/build/src/backends/writer.d.ts +235 -4
- package/build/src/backends/writer.d.ts.map +1 -1
- package/build/src/backends/writer.js +468 -3
- package/build/src/diagnostic.d.ts +4 -3
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +5 -3
- package/build/src/frontends/c.d.ts.map +1 -1
- package/build/src/frontends/c.js +5 -3
- package/build/src/frontends/cpp.d.ts.map +1 -1
- package/build/src/frontends/cpp.js +5 -3
- package/build/src/frontends/csharp.d.ts.map +1 -1
- package/build/src/frontends/csharp.js +7 -3
- package/build/src/frontends/dart.d.ts +10 -0
- package/build/src/frontends/dart.d.ts.map +1 -0
- package/build/src/frontends/dart.js +913 -0
- package/build/src/frontends/index.d.ts +3 -1
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +15 -5
- package/build/src/frontends/java.d.ts +110 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +1725 -70
- package/build/src/frontends/javascript-typescript.d.ts +69 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +1825 -93
- package/build/src/frontends/kotlin.d.ts +10 -0
- package/build/src/frontends/kotlin.d.ts.map +1 -0
- package/build/src/frontends/kotlin.js +685 -0
- package/build/src/frontends/php.d.ts +118 -1
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +1583 -76
- package/build/src/frontends/program.d.ts +74 -0
- package/build/src/frontends/program.d.ts.map +1 -0
- package/build/src/frontends/program.js +989 -0
- package/build/src/frontends/ruby.d.ts +68 -1
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +1446 -101
- package/build/src/frontends/rust-parser.d.ts +11 -0
- package/build/src/frontends/rust-parser.d.ts.map +1 -0
- package/build/src/frontends/rust-parser.js +15 -0
- package/build/src/frontends/rust.d.ts +14 -0
- package/build/src/frontends/rust.d.ts.map +1 -0
- package/build/src/frontends/rust.js +715 -0
- package/build/src/frontends/scalars.d.ts +10 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +28 -2
- package/build/src/frontends/swift.d.ts +10 -0
- package/build/src/frontends/swift.d.ts.map +1 -0
- package/build/src/frontends/swift.js +860 -0
- package/build/src/frontends/types.d.ts +186 -0
- package/build/src/frontends/types.d.ts.map +1 -0
- package/build/src/frontends/types.js +634 -0
- package/build/src/language-registry.d.ts +46 -4
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +167 -13
- package/build/src/mapping.d.ts +2 -2
- package/build/src/mapping.d.ts.map +1 -1
- package/build/src/mapping.js +31 -10
- package/build/src/semantic/capabilities.d.ts +66 -0
- package/build/src/semantic/capabilities.d.ts.map +1 -0
- package/build/src/semantic/capabilities.js +649 -0
- package/build/src/semantic/effects.d.ts +26 -0
- package/build/src/semantic/effects.d.ts.map +1 -0
- package/build/src/semantic/effects.js +764 -0
- package/build/src/semantic/generics.d.ts +23 -0
- package/build/src/semantic/generics.d.ts.map +1 -0
- package/build/src/semantic/generics.js +61 -0
- package/build/src/semantic/lifetime.d.ts +37 -0
- package/build/src/semantic/lifetime.d.ts.map +1 -0
- package/build/src/semantic/lifetime.js +527 -0
- package/build/src/semantic/provenance.d.ts +9 -2
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +462 -20
- package/build/src/semantic/scalars.d.ts +11 -0
- package/build/src/semantic/scalars.d.ts.map +1 -1
- package/build/src/semantic/scalars.js +16 -1
- package/build/src/semantic/stdlib.d.ts +254 -0
- package/build/src/semantic/stdlib.d.ts.map +1 -0
- package/build/src/semantic/stdlib.js +880 -0
- package/build/src/semantic/types.d.ts +2952 -202
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +688 -15
- package/build/src/semantic/validate.d.ts +85 -5
- package/build/src/semantic/validate.d.ts.map +1 -1
- package/build/src/semantic/validate.js +2576 -98
- package/build/src/stdlib-facades.d.ts +304 -0
- package/build/src/stdlib-facades.d.ts.map +1 -0
- package/build/src/stdlib-facades.js +1167 -0
- package/build/src/stdlib-negotiation.d.ts +69 -0
- package/build/src/stdlib-negotiation.d.ts.map +1 -0
- package/build/src/stdlib-negotiation.js +403 -0
- package/build/src/stdlib-providers.d.ts +72 -0
- package/build/src/stdlib-providers.d.ts.map +1 -0
- package/build/src/stdlib-providers.js +339 -0
- package/build/src/toolchains.d.ts +55 -1
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +15 -4
- package/docs/architecture.md +45 -13
- package/docs/dart.md +60 -0
- package/docs/goals.md +3 -3
- package/docs/ios.md +121 -0
- package/docs/kotlin.md +42 -0
- package/docs/language-support.md +231 -26
- package/docs/multi-file-modules.md +52 -0
- package/docs/parser-qualification.md +121 -8
- package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
- package/docs/rust.md +88 -0
- package/docs/source-maps.md +15 -7
- package/docs/standard-library-portability.md +39 -8
- package/docs/swift.md +44 -0
- package/docs/testing.md +366 -4
- package/docs/webassembly.md +52 -0
- package/index.js +63 -8
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
- package/package.json +5 -2
- package/src/artifact-path.js +47 -2
- package/src/artifacts.js +67 -0
- package/src/backends/c-validation.js +6 -1
- package/src/backends/cpp-validation.js +6 -1
- package/src/backends/csharp.js +3 -0
- package/src/backends/dart-runtime.js +41 -0
- package/src/backends/dart.js +326 -0
- package/src/backends/effects.js +705 -0
- package/src/backends/go.js +14 -2
- package/src/backends/identifiers.js +160 -9
- package/src/backends/index.js +27 -2
- package/src/backends/ios.js +1612 -0
- package/src/backends/java.js +454 -36
- package/src/backends/javascript.js +389 -23
- package/src/backends/kotlin-runtime.js +29 -0
- package/src/backends/kotlin.js +141 -0
- package/src/backends/native-validation.js +1 -1
- package/src/backends/ordered-expressions.js +40 -6
- package/src/backends/php-stdlib-support.js +239 -0
- package/src/backends/php.js +469 -32
- package/src/backends/program.js +1407 -0
- package/src/backends/python.js +3 -0
- package/src/backends/ruby.js +326 -23
- package/src/backends/rust-runtime.js +34 -0
- package/src/backends/rust-validation.js +75 -0
- package/src/backends/rust.js +335 -0
- package/src/backends/scalars.js +141 -16
- package/src/backends/shared.js +2304 -124
- package/src/backends/stdlib-support.js +234 -0
- package/src/backends/swift-runtime.js +14 -0
- package/src/backends/swift.js +132 -0
- package/src/backends/typescript.js +349 -23
- package/src/backends/wasm.js +2208 -0
- package/src/backends/writer.js +520 -2
- package/src/diagnostic.js +4 -2
- package/src/frontends/c.js +4 -2
- package/src/frontends/cpp.js +4 -2
- package/src/frontends/csharp.js +4 -2
- package/src/frontends/dart.js +963 -0
- package/src/frontends/index.js +14 -4
- package/src/frontends/java.js +1977 -69
- package/src/frontends/javascript-typescript.js +2046 -102
- package/src/frontends/kotlin.js +713 -0
- package/src/frontends/php.js +1725 -79
- package/src/frontends/program.js +1062 -0
- package/src/frontends/ruby.js +1624 -98
- package/src/frontends/rust-parser.js +18 -0
- package/src/frontends/rust.js +714 -0
- package/src/frontends/scalars.js +31 -1
- package/src/frontends/swift.js +893 -0
- package/src/frontends/types.js +750 -0
- package/src/language-registry.js +172 -12
- package/src/mapping.js +33 -9
- package/src/semantic/capabilities.js +671 -0
- package/src/semantic/effects.js +737 -0
- package/src/semantic/generics.js +58 -0
- package/src/semantic/lifetime.js +517 -0
- package/src/semantic/provenance.js +412 -19
- package/src/semantic/scalars.js +17 -0
- package/src/semantic/stdlib.js +921 -0
- package/src/semantic/types.js +765 -14
- package/src/semantic/validate.js +2934 -209
- package/src/stdlib-facades.js +1211 -0
- package/src/stdlib-negotiation.js +446 -0
- package/src/stdlib-providers.js +377 -0
- package/src/toolchains.js +16 -3
|
@@ -5,9 +5,31 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare function isValidFilenameMetadata(value: unknown): value is string;
|
|
7
7
|
/**
|
|
8
|
-
* Validates a safe relative POSIX
|
|
8
|
+
* Validates a safe relative POSIX source path while retaining Unicode filename metadata.
|
|
9
9
|
* @param {unknown} value - Candidate path.
|
|
10
10
|
* @returns {value is string} Whether the value is safe.
|
|
11
11
|
*/
|
|
12
|
+
export declare function isSafeSourcePath(value: unknown): value is string;
|
|
13
|
+
/**
|
|
14
|
+
* Validates a safe portable artifact/resource path in the closed ASCII comparison domain.
|
|
15
|
+
* @param {unknown} value - Candidate path.
|
|
16
|
+
* @returns {value is string} Whether the value is safe and portably comparable.
|
|
17
|
+
*/
|
|
12
18
|
export declare function isSafeArtifactPath(value: unknown): value is string;
|
|
19
|
+
/**
|
|
20
|
+
* Produces a conservative portable comparison key for a validated artifact path.
|
|
21
|
+
* @param {string} value - Safe relative POSIX path.
|
|
22
|
+
* @returns {string} Complete ASCII case-fold key.
|
|
23
|
+
*/
|
|
24
|
+
export declare function portableArtifactPathKey(value: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Finds the first unsafe, duplicate, portable case-fold, or file/directory-prefix conflict.
|
|
27
|
+
* @param {readonly string[]} paths - Ordered candidate artifact paths.
|
|
28
|
+
* @returns {{kind: "case-fold" | "duplicate" | "prefix" | "unsafe", path: string, other?: string} | null} First conflict.
|
|
29
|
+
*/
|
|
30
|
+
export declare function findPortableArtifactPathConflict(paths: readonly string[]): {
|
|
31
|
+
kind: "case-fold" | "duplicate" | "prefix" | "unsafe";
|
|
32
|
+
path: string;
|
|
33
|
+
other?: string;
|
|
34
|
+
} | null;
|
|
13
35
|
//# sourceMappingURL=artifact-path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-path.d.ts","sourceRoot":"","sources":["../../src/artifact-path.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"artifact-path.d.ts","sourceRoot":"","sources":["../../src/artifact-path.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAHlC,OAGkC,GAFhC,KAAK,IAAI,MAAM,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAH3B,OAG2B,GAFzB,KAAK,IAAI,MAAM,CAe3B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAH7B,OAG6B,GAF3B,KAAK,IAAI,MAAM,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAHlC,MAGkC,GAFhC,MAAM,CAIlB;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,EAH3C,SAAS,MAAM,EAG4B,GAFzC;IAAC,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAqBxG"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { hasOnlyUnicodeScalars } from "./semantic/scalars.js";
|
|
3
3
|
const lineTerminatorPattern = /[\n\r\u2028\u2029]/u;
|
|
4
|
+
const portableArtifactComponentPattern = /^[A-Za-z0-9._-]+$/u;
|
|
4
5
|
/**
|
|
5
6
|
* Validates filename metadata without imposing artifact-set path semantics.
|
|
6
7
|
* @param {unknown} value - Candidate filename.
|
|
@@ -10,11 +11,11 @@ export function isValidFilenameMetadata(value) {
|
|
|
10
11
|
return typeof value == "string" && value.length > 0 && !lineTerminatorPattern.test(value);
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
|
-
* Validates a safe relative POSIX
|
|
14
|
+
* Validates a safe relative POSIX source path while retaining Unicode filename metadata.
|
|
14
15
|
* @param {unknown} value - Candidate path.
|
|
15
16
|
* @returns {value is string} Whether the value is safe.
|
|
16
17
|
*/
|
|
17
|
-
export function
|
|
18
|
+
export function isSafeSourcePath(value) {
|
|
18
19
|
if (typeof value != "string" || value.length == 0 || value.includes("\\") || value.includes("\0") ||
|
|
19
20
|
!hasOnlyUnicodeScalars(value))
|
|
20
21
|
return false;
|
|
@@ -27,4 +28,45 @@ export function isSafeArtifactPath(value) {
|
|
|
27
28
|
return codePoint != undefined && codePoint > 31 && codePoint != 127;
|
|
28
29
|
}));
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Validates a safe portable artifact/resource path in the closed ASCII comparison domain.
|
|
33
|
+
* @param {unknown} value - Candidate path.
|
|
34
|
+
* @returns {value is string} Whether the value is safe and portably comparable.
|
|
35
|
+
*/
|
|
36
|
+
export function isSafeArtifactPath(value) {
|
|
37
|
+
return isSafeSourcePath(value) && value.split("/").every(part => portableArtifactComponentPattern.test(part));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Produces a conservative portable comparison key for a validated artifact path.
|
|
41
|
+
* @param {string} value - Safe relative POSIX path.
|
|
42
|
+
* @returns {string} Complete ASCII case-fold key.
|
|
43
|
+
*/
|
|
44
|
+
export function portableArtifactPathKey(value) {
|
|
45
|
+
return value.toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Finds the first unsafe, duplicate, portable case-fold, or file/directory-prefix conflict.
|
|
49
|
+
* @param {readonly string[]} paths - Ordered candidate artifact paths.
|
|
50
|
+
* @returns {{kind: "case-fold" | "duplicate" | "prefix" | "unsafe", path: string, other?: string} | null} First conflict.
|
|
51
|
+
*/
|
|
52
|
+
export function findPortableArtifactPathConflict(paths) {
|
|
53
|
+
/** @type {{key: string, path: string}[]} */
|
|
54
|
+
const accepted = [];
|
|
55
|
+
for (const path of paths) {
|
|
56
|
+
if (!isSafeArtifactPath(path))
|
|
57
|
+
return { kind: "unsafe", path: String(path) };
|
|
58
|
+
const key = portableArtifactPathKey(path);
|
|
59
|
+
for (const previous of accepted) {
|
|
60
|
+
if (path == previous.path)
|
|
61
|
+
return { kind: "duplicate", other: previous.path, path };
|
|
62
|
+
if (key == previous.key)
|
|
63
|
+
return { kind: "case-fold", other: previous.path, path };
|
|
64
|
+
if (key.startsWith(`${previous.key}/`) || previous.key.startsWith(`${key}/`)) {
|
|
65
|
+
return { kind: "prefix", other: previous.path, path };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
accepted.push({ key, path });
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3QtcGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcnRpZmFjdC1wYXRoLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFBO0FBQ25ELE1BQU0sZ0NBQWdDLEdBQUcsb0JBQW9CLENBQUE7QUFFN0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxLQUFLO0lBQzNDLE9BQU8sT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzNGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQUs7SUFDcEMsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUMvRixDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQzdDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXBFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFOUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJO1FBQ3pFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUM1QixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRTFDLE9BQU8sU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsSUFBSSxHQUFHLENBQUE7UUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQUs7SUFDdEMsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQy9HLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEtBQUs7SUFDM0MsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDNUIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsS0FBSztJQUNwRCw0Q0FBNEM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBRW5CLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQTtRQUMxRSxNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUV6QyxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFBO1lBQ2pGLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHO2dCQUFFLE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFBO1lBQy9FLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3RSxPQUFPLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQTtZQUNyRCxDQUFDO1FBQ0gsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aGFzT25seVVuaWNvZGVTY2FsYXJzfSBmcm9tIFwiLi9zZW1hbnRpYy9zY2FsYXJzLmpzXCJcblxuY29uc3QgbGluZVRlcm1pbmF0b3JQYXR0ZXJuID0gL1tcXG5cXHJcXHUyMDI4XFx1MjAyOV0vdVxuY29uc3QgcG9ydGFibGVBcnRpZmFjdENvbXBvbmVudFBhdHRlcm4gPSAvXltBLVphLXowLTkuXy1dKyQvdVxuXG4vKipcbiAqIFZhbGlkYXRlcyBmaWxlbmFtZSBtZXRhZGF0YSB3aXRob3V0IGltcG9zaW5nIGFydGlmYWN0LXNldCBwYXRoIHNlbWFudGljcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgZmlsZW5hbWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgc3RyaW5nfSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBzaW5nbGUtbGluZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YSh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiAhbGluZVRlcm1pbmF0b3JQYXR0ZXJuLnRlc3QodmFsdWUpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgc2FmZSByZWxhdGl2ZSBQT1NJWCBzb3VyY2UgcGF0aCB3aGlsZSByZXRhaW5pbmcgVW5pY29kZSBmaWxlbmFtZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgcGF0aC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBzdHJpbmd9IFdoZXRoZXIgdGhlIHZhbHVlIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVTb3VyY2VQYXRoKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCB8fCB2YWx1ZS5pbmNsdWRlcyhcIlxcXFxcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJcXDBcIikgfHxcbiAgICAhaGFzT25seVVuaWNvZGVTY2FsYXJzKHZhbHVlKSkgcmV0dXJuIGZhbHNlXG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiL1wiKSB8fCAvXltBLVphLXpdOi91LnRlc3QodmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KFwiL1wiKVxuXG4gIHJldHVybiBwYXJ0cy5ldmVyeSgocGFydCkgPT4gcGFydC5sZW5ndGggPiAwICYmIHBhcnQgIT0gXCIuXCIgJiYgcGFydCAhPSBcIi4uXCIgJiZcbiAgICBbLi4ucGFydF0uZXZlcnkoKGNoYXJhY3RlcikgPT4ge1xuICAgICAgY29uc3QgY29kZVBvaW50ID0gY2hhcmFjdGVyLmNvZGVQb2ludEF0KDApXG5cbiAgICAgIHJldHVybiBjb2RlUG9pbnQgIT0gdW5kZWZpbmVkICYmIGNvZGVQb2ludCA+IDMxICYmIGNvZGVQb2ludCAhPSAxMjdcbiAgICB9KSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzYWZlIHBvcnRhYmxlIGFydGlmYWN0L3Jlc291cmNlIHBhdGggaW4gdGhlIGNsb3NlZCBBU0NJSSBjb21wYXJpc29uIGRvbWFpbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgcGF0aC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBzdHJpbmd9IFdoZXRoZXIgdGhlIHZhbHVlIGlzIHNhZmUgYW5kIHBvcnRhYmx5IGNvbXBhcmFibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVBcnRpZmFjdFBhdGgodmFsdWUpIHtcbiAgcmV0dXJuIGlzU2FmZVNvdXJjZVBhdGgodmFsdWUpICYmIHZhbHVlLnNwbGl0KFwiL1wiKS5ldmVyeShwYXJ0ID0+IHBvcnRhYmxlQXJ0aWZhY3RDb21wb25lbnRQYXR0ZXJuLnRlc3QocGFydCkpXG59XG5cbi8qKlxuICogUHJvZHVjZXMgYSBjb25zZXJ2YXRpdmUgcG9ydGFibGUgY29tcGFyaXNvbiBrZXkgZm9yIGEgdmFsaWRhdGVkIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBTYWZlIHJlbGF0aXZlIFBPU0lYIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb21wbGV0ZSBBU0NJSSBjYXNlLWZvbGQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9ydGFibGVBcnRpZmFjdFBhdGhLZXkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgdW5zYWZlLCBkdXBsaWNhdGUsIHBvcnRhYmxlIGNhc2UtZm9sZCwgb3IgZmlsZS9kaXJlY3RvcnktcHJlZml4IGNvbmZsaWN0LlxuICogQHBhcmFtIHtyZWFkb25seSBzdHJpbmdbXX0gcGF0aHMgLSBPcmRlcmVkIGNhbmRpZGF0ZSBhcnRpZmFjdCBwYXRocy5cbiAqIEByZXR1cm5zIHt7a2luZDogXCJjYXNlLWZvbGRcIiB8IFwiZHVwbGljYXRlXCIgfCBcInByZWZpeFwiIHwgXCJ1bnNhZmVcIiwgcGF0aDogc3RyaW5nLCBvdGhlcj86IHN0cmluZ30gfCBudWxsfSBGaXJzdCBjb25mbGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQb3J0YWJsZUFydGlmYWN0UGF0aENvbmZsaWN0KHBhdGhzKSB7XG4gIC8qKiBAdHlwZSB7e2tleTogc3RyaW5nLCBwYXRoOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IGFjY2VwdGVkID0gW11cblxuICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICBpZiAoIWlzU2FmZUFydGlmYWN0UGF0aChwYXRoKSkgcmV0dXJuIHtraW5kOiBcInVuc2FmZVwiLCBwYXRoOiBTdHJpbmcocGF0aCl9XG4gICAgY29uc3Qga2V5ID0gcG9ydGFibGVBcnRpZmFjdFBhdGhLZXkocGF0aClcblxuICAgIGZvciAoY29uc3QgcHJldmlvdXMgb2YgYWNjZXB0ZWQpIHtcbiAgICAgIGlmIChwYXRoID09IHByZXZpb3VzLnBhdGgpIHJldHVybiB7a2luZDogXCJkdXBsaWNhdGVcIiwgb3RoZXI6IHByZXZpb3VzLnBhdGgsIHBhdGh9XG4gICAgICBpZiAoa2V5ID09IHByZXZpb3VzLmtleSkgcmV0dXJuIHtraW5kOiBcImNhc2UtZm9sZFwiLCBvdGhlcjogcHJldmlvdXMucGF0aCwgcGF0aH1cbiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChgJHtwcmV2aW91cy5rZXl9L2ApIHx8IHByZXZpb3VzLmtleS5zdGFydHNXaXRoKGAke2tleX0vYCkpIHtcbiAgICAgICAgcmV0dXJuIHtraW5kOiBcInByZWZpeFwiLCBvdGhlcjogcHJldmlvdXMucGF0aCwgcGF0aH1cbiAgICAgIH1cbiAgICB9XG4gICAgYWNjZXB0ZWQucHVzaCh7a2V5LCBwYXRofSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/artifacts.js"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAHzC,OAGyC,GAFvC,OAAO,qBAAqB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/artifacts.js"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAHzC,OAGyC,GAFvC,OAAO,qBAAqB,EAAE,oBAAoB,CAoG9D"}
|
package/build/src/artifacts.js
CHANGED
|
@@ -24,6 +24,9 @@ export function createGeneratedArtifactSet(candidate) {
|
|
|
24
24
|
invalidArtifactSet("Artifact set requires a non-empty ordered artifact array.", candidate.target);
|
|
25
25
|
}
|
|
26
26
|
const target = candidate.target;
|
|
27
|
+
const metadata = candidate.metadata === undefined
|
|
28
|
+
? undefined
|
|
29
|
+
: snapshotMetadataObject(candidate.metadata, target);
|
|
27
30
|
const paths = new Set();
|
|
28
31
|
const directoryPaths = new Set();
|
|
29
32
|
/** @type {string[]} */
|
|
@@ -99,6 +102,7 @@ export function createGeneratedArtifactSet(candidate) {
|
|
|
99
102
|
return Object.freeze({
|
|
100
103
|
artifacts: Object.freeze(artifacts),
|
|
101
104
|
entry: entryPaths[0],
|
|
105
|
+
...(metadata === undefined ? {} : { metadata }),
|
|
102
106
|
schema: /** @type {const} */ ("GeneratedArtifactSet"),
|
|
103
107
|
target,
|
|
104
108
|
version: /** @type {const} */ (1)
|
|
@@ -110,6 +114,67 @@ export function createGeneratedArtifactSet(candidate) {
|
|
|
110
114
|
return invalidArtifactSet("Artifact-set validation failed.", targetOf(candidate), error);
|
|
111
115
|
}
|
|
112
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Validates target-specific metadata as detached, immutable JSON.
|
|
119
|
+
* @param {unknown} value - Metadata candidate.
|
|
120
|
+
* @param {string} target - Artifact target.
|
|
121
|
+
* @returns {Readonly<Record<string, unknown>>} Metadata snapshot.
|
|
122
|
+
*/
|
|
123
|
+
function snapshotMetadataObject(value, target) {
|
|
124
|
+
if (!isPlainObject(value))
|
|
125
|
+
invalidArtifactSet("Artifact-set metadata must be a plain JSON object.", target);
|
|
126
|
+
return /** @type {Readonly<Record<string, unknown>>} */ (deepFreeze(snapshotMetadataValue(value, target, new WeakSet())));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Recursively snapshots a JSON metadata value without retaining caller objects.
|
|
130
|
+
* @param {unknown} value - JSON candidate.
|
|
131
|
+
* @param {string} target - Artifact target.
|
|
132
|
+
* @param {WeakSet<object>} ancestors - Active object path for cycle rejection.
|
|
133
|
+
* @returns {unknown} Detached JSON value.
|
|
134
|
+
*/
|
|
135
|
+
function snapshotMetadataValue(value, target, ancestors) {
|
|
136
|
+
if (value === null || typeof value == "boolean")
|
|
137
|
+
return value;
|
|
138
|
+
if (typeof value == "string") {
|
|
139
|
+
if (!hasOnlyUnicodeScalars(value))
|
|
140
|
+
invalidArtifactSet("Artifact-set metadata contains a lone Unicode surrogate.", target);
|
|
141
|
+
return value;
|
|
142
|
+
}
|
|
143
|
+
if (typeof value == "number") {
|
|
144
|
+
if (!Number.isFinite(value))
|
|
145
|
+
invalidArtifactSet("Artifact-set metadata numbers must be finite.", target);
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
if (typeof value != "object")
|
|
149
|
+
invalidArtifactSet("Artifact-set metadata must contain only JSON values.", target);
|
|
150
|
+
if (ancestors.has(value))
|
|
151
|
+
invalidArtifactSet("Artifact-set metadata must not contain cycles.", target);
|
|
152
|
+
ancestors.add(value);
|
|
153
|
+
if (Array.isArray(value)) {
|
|
154
|
+
if (!isDenseArray(value))
|
|
155
|
+
invalidArtifactSet("Artifact-set metadata arrays must be dense.", target);
|
|
156
|
+
/** @type {unknown[]} */
|
|
157
|
+
const result = [];
|
|
158
|
+
for (let index = 0; index < value.length; index += 1)
|
|
159
|
+
result.push(snapshotMetadataValue(value[index], target, ancestors));
|
|
160
|
+
ancestors.delete(value);
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
if (!isPlainObject(value))
|
|
164
|
+
invalidArtifactSet("Artifact-set metadata must contain only plain JSON objects.", target);
|
|
165
|
+
/** @type {Record<string, unknown>} */
|
|
166
|
+
const result = {};
|
|
167
|
+
for (const key of Object.keys(value).sort()) {
|
|
168
|
+
Object.defineProperty(result, key, {
|
|
169
|
+
configurable: true,
|
|
170
|
+
enumerable: true,
|
|
171
|
+
value: snapshotMetadataValue(value[key], target, ancestors),
|
|
172
|
+
writable: true
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
ancestors.delete(value);
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
113
178
|
/**
|
|
114
179
|
* Validates artifact-level text, byte, or synthetic provenance.
|
|
115
180
|
* @param {unknown} value - Provenance candidate.
|
|
@@ -386,4 +451,4 @@ function deepFreeze(value) {
|
|
|
386
451
|
deepFreeze(nested);
|
|
387
452
|
return Object.freeze(value);
|
|
388
453
|
}
|
|
389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FydGlmYWN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDekcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUcsTUFBTSxnQkFBZ0IsR0FBRyx1RUFBdUUsQ0FBQTtBQUVoRzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFNBQVM7SUFDbEQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDbEcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0Msa0JBQWtCLENBQUMscURBQXFELEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDaEcsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFFLGtCQUFrQixDQUFDLDJEQUEyRCxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuRyxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQTtRQUUvQixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDaEMsdUJBQXVCO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNyQixtRUFBbUU7UUFDbkUsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO1FBRXBCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUUzQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFBRSxrQkFBa0IsQ0FBQyxZQUFZLEtBQUssMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDckcsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUNsQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFBO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUE7WUFDMUIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQTtZQUV4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDO2dCQUFFLGtCQUFrQixDQUFDLFlBQVksS0FBSyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUMxRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUFFLGtCQUFrQixDQUFDLDRCQUE0QixZQUFZLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUNyRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsa0JBQWtCLENBQUMsa0JBQWtCLFlBQVksdUNBQXVDLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDbkcsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFBO1lBRXhELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUMxQixrQkFBa0IsQ0FBQyxrQkFBa0IsWUFBWSxrQ0FBa0MsVUFBVSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7Z0JBQzVHLENBQUM7WUFDSCxDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUN2QixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVc7Z0JBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUNwRSxJQUFJLE9BQU8sU0FBUyxJQUFJLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25HLGtCQUFrQixDQUFDLGFBQWEsWUFBWSw4QkFBOEIsRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUNyRixDQUFDO1lBQ0QsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQkFBRSxrQkFBa0IsQ0FBQyxhQUFhLFlBQVksd0JBQXdCLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFDdEksSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLFdBQVc7Z0JBQUUsa0JBQWtCLENBQUMsYUFBYSxZQUFZLGtDQUFrQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQzlILElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxrQkFBa0IsQ0FBQyx1REFBdUQsRUFBRSxNQUFNLENBQUMsQ0FBQTtnQkFDOUcsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUMvQixDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQTtZQUNyQyxrQ0FBa0M7WUFDbEMsSUFBSSxPQUFPLENBQUE7WUFFWCxJQUFJLFdBQVcsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxPQUFPLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUN4RyxrQkFBa0IsQ0FBQyxrQkFBa0IsWUFBWSxzQ0FBc0MsRUFBRSxNQUFNLENBQUMsQ0FBQTtnQkFDbEcsQ0FBQztnQkFDRCxPQUFPLEdBQUcsWUFBWSxDQUFBO1lBQ3hCLENBQUM7aUJBQU0sSUFBSSxXQUFXLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxDQUFDLFlBQVksWUFBWSxVQUFVLENBQUMsSUFBSSxZQUFZLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMxRSxrQkFBa0IsQ0FBQyxvQkFBb0IsWUFBWSw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQTtnQkFDM0YsQ0FBQztnQkFDRCxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDeEMsQ0FBQzs7Z0JBQU0sa0JBQWtCLENBQUMsYUFBYSxZQUFZLGdDQUFnQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBRTVGLE1BQU0sVUFBVSxHQUFHLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7WUFFOUcsU0FBUyxDQUFDLElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQztnQkFDL0YsT0FBTztnQkFDUCxXQUFXO2dCQUNYLFNBQVM7Z0JBQ1QsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUM3QyxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsVUFBVTtnQkFDVixJQUFJO2FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLGtCQUFrQixDQUFDLHVEQUF1RCxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUV6SCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ25DLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO1lBQ3JELE1BQU07WUFDTixPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxxQkFBcUIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLHNCQUFzQjtZQUFFLE1BQU0sS0FBSyxDQUFBO1FBRS9GLE9BQU8sa0JBQWtCLENBQUMsaUNBQWlDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQzFGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNO0lBQ25GLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsa0JBQWtCLENBQUMsYUFBYSxZQUFZLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRXhHLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM5QixJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3ZHLGtCQUFrQixDQUFDLHVCQUF1QixZQUFZLG9EQUFvRCxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3JILENBQUM7UUFDRCxJQUFJLFdBQVcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM1QixrQkFBa0IsQ0FBQyxvQkFBb0IsWUFBWSxtQ0FBbUMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNqRyxDQUFDO1FBQ0QsNERBQTREO1FBQzVELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQTtRQUV6QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BFLGNBQWMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDdEcsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFDLENBQUMsQ0FBQTtJQUN2SSxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUV0QyxJQUFJLFdBQVcsSUFBSSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksb0JBQW9CO1lBQzlHLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksWUFBWTtZQUNqRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNuRixrQkFBa0IsQ0FBQyxrQkFBa0IsWUFBWSxpREFBaUQsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM3RyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUMvRixrQkFBa0IsQ0FBQyxrQkFBa0IsWUFBWSw2Q0FBNkMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN6RyxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDakQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDMUUsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFakQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ2xELGtCQUFrQixDQUFDLGtCQUFrQixZQUFZLGdFQUFnRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzVILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbkIsSUFBSSxFQUFFLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ25DLE9BQU87WUFDUCxTQUFTO1lBQ1QsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksV0FBVyxJQUFJLFFBQVE7WUFBRSxrQkFBa0IsQ0FBQyxnREFBZ0QsWUFBWSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDekgsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWxELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksWUFBWSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLHlCQUF5QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0gsa0JBQWtCLENBQUMsNENBQTRDLFlBQVksSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQzFGLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3ZFLENBQUM7SUFFRCxPQUFPLGtCQUFrQixDQUFDLGFBQWEsWUFBWSxtQ0FBbUMsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUNqRyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsY0FBYyxDQUFDLFFBQVE7SUFDOUIsSUFBSSxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQy9FLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUE7UUFFaEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFO1lBQ3pDLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUc7Z0JBQ0QsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNoQyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNoQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsc0JBQXNCLENBQUMsWUFBWTtJQUMxQyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3JDLHVCQUF1QjtJQUN2QixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUE7SUFFdEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUM7UUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBRXZHLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSztJQUNoRCxNQUFNLElBQUkscUJBQXFCLENBQUM7UUFDOUIsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNqRCxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLE9BQU87S0FDUixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLEtBQUs7SUFDckIsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtBQUN2SCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO0FBQy9ILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNO0lBQy9ELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQzFGLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQztRQUNuSCxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNoRixLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdILGtCQUFrQixDQUFDLGFBQWEsWUFBWSxrQ0FBa0MsS0FBSyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDakcsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO1FBQ2hCLFFBQVEsRUFBRTtZQUNSLEdBQUcsRUFBRSxFQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUM7WUFDNUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUTtZQUNqQyxLQUFLLEVBQUUsRUFBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFDO1NBQ2pDO1FBQ0QsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RSxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3JFLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNO0lBQ2xFLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUNsQyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xELGtCQUFrQixDQUFDLGFBQWEsWUFBWSxpQkFBaUIsUUFBUSxzQkFBc0IsS0FBSyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDOUcsQ0FBQztJQUVELE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFBO0FBQzVCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzdCLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ2hILE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3pGLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUE7QUFDOUYsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNO0lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxZQUFZLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVE7UUFDaEgsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLFFBQVEsQ0FBQztRQUNuRixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDO1FBQzNGLENBQUMsS0FBSyxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQ3pFLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0Ysa0JBQWtCLENBQUMsa0JBQWtCLFlBQVksMkNBQTJDLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDdkcsQ0FBQztJQUNELGdDQUFnQztJQUM5QixtRUFBbUUsQ0FBQyxFQUFDLHNCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3BHLFlBQVksRUFDWixNQUFNLENBQ1AsQ0FBQTtJQUVELE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFFaEUsT0FBTyxVQUFVLENBQUMsaUVBQWlFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ2pHLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdDQUFnQyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTTtJQUN2RSxpRkFBaUY7SUFDakYsSUFBSSxPQUFPLENBQUE7SUFDWCxJQUFJLGlCQUFpQixDQUFBO0lBRXJCLElBQUksQ0FBQztRQUNILE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNsRCxNQUFNLFVBQVUsR0FBRyxtRUFBbUUsQ0FBQyxDQUFDO1lBQ3RGLEdBQUcsU0FBUztZQUNaLFFBQVEsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDO1NBQ25DLENBQUMsQ0FBQTtRQUVGLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2Ysa0JBQWtCLENBQUMsa0JBQWtCLFlBQVksNENBQTRDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQy9HLENBQUM7SUFFRCxJQUFJLGlCQUFpQixJQUFJLFNBQVMsQ0FBQyxRQUFRO1FBQ3pDLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1RixrQkFBa0IsQ0FBQyxrQkFBa0IsWUFBWSw0Q0FBNEMsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN4RyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsNkJBQTZCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTO0lBQ2xFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2xELElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDbkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQ3RGLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFDcEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBRTNDLE9BQU8sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQTtJQUN0RCxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUs7SUFDaEMsSUFBSSxJQUFJLEtBQUssS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTTtZQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBQy9ELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDbEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVwQyxPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU07UUFDeEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzlGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUs7SUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU5RSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVjb2RlZE1hcHBpbmdzLCBlbmNvZGVkTWFwcGluZ3MsIHByZXNvcnRlZERlY29kZWRNYXAsIFRyYWNlTWFwfSBmcm9tIFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtpc1NhZmVBcnRpZmFjdFBhdGgsIGlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhfSBmcm9tIFwiLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7ZmluYWxpemVCeXRlTWFwcGluZ30gZnJvbSBcIi4vYmluYXJ5LW1hcHBpbmcuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuL21hcHBpbmcuanNcIlxuaW1wb3J0IHtpc1NvdXJjZVJhbmdlT3JkZXJlZH0gZnJvbSBcIi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuL3NlbWFudGljL3NjYWxhcnMuanNcIlxuXG5jb25zdCBhcnRpZmFjdFJvbGVzID0gbmV3IFNldChbXCJlbnRyeVwiLCBcInNvdXJjZVwiLCBcIm1hbmlmZXN0XCIsIFwic3VwcG9ydFwiLCBcIm1hcHBpbmdcIiwgXCJyZXNvdXJjZVwiLCBcImxvYWRlclwiXSlcbmNvbnN0IG1lZGlhVHlwZVBhdHRlcm4gPSAvXltBLVphLXowLTkhIyQmXl8uKy1dK1xcL1tBLVphLXowLTkhIyQmXl8uKy1dKyg/OjtbXFx1MDAyMC1cXHUwMDdlXSspPyQvdVxuXG4vKipcbiAqIFRyYW5zYWN0aW9uYWxseSB2YWxpZGF0ZXMgYW5kIGNvbnN0cnVjdHMgb25lIGRldGVybWluaXN0aWMgZ2VuZXJhdGVkIGFydGlmYWN0IHNldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gQXJ0aWZhY3Qtc2V0IGZpZWxkcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBEZXRhY2hlZCBpbW11dGFibGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQoY2FuZGlkYXRlKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkgfHwgdHlwZW9mIGNhbmRpZGF0ZS50YXJnZXQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUudGFyZ2V0Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAhL15bYS16XVthLXowLTktXSokL3UudGVzdChjYW5kaWRhdGUudGFyZ2V0KSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qgc2V0IHJlcXVpcmVzIGEgc3RhYmxlIGxvd2VyY2FzZSB0YXJnZXQgSUQuXCIsIHRhcmdldE9mKGNhbmRpZGF0ZSkpXG4gICAgfVxuICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcnRpZmFjdHMpIHx8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoID09IDApIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCByZXF1aXJlcyBhIG5vbi1lbXB0eSBvcmRlcmVkIGFydGlmYWN0IGFycmF5LlwiLCBjYW5kaWRhdGUudGFyZ2V0KVxuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBjYW5kaWRhdGUudGFyZ2V0XG5cbiAgICBjb25zdCBwYXRocyA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IGRpcmVjdG9yeVBhdGhzID0gbmV3IFNldCgpXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICBjb25zdCBlbnRyeVBhdGhzID0gW11cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gKi9cbiAgICBjb25zdCBhcnRpZmFjdHMgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBhcnRpZmFjdCA9IGNhbmRpZGF0ZS5hcnRpZmFjdHNbaW5kZXhdXG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChhcnRpZmFjdCkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJHtpbmRleH0gbXVzdCBiZSBhIHBsYWluIG9iamVjdC5gLCB0YXJnZXQpXG4gICAgICBjb25zdCBhcnRpZmFjdFBhdGggPSBhcnRpZmFjdC5wYXRoXG4gICAgICBjb25zdCBtZWRpYVR5cGUgPSBhcnRpZmFjdC5tZWRpYVR5cGVcbiAgICAgIGNvbnN0IHJvbGUgPSBhcnRpZmFjdC5yb2xlXG4gICAgICBjb25zdCBjb250ZW50S2luZCA9IGFydGlmYWN0LmNvbnRlbnRLaW5kXG5cbiAgICAgIGlmICghaXNTYWZlQXJ0aWZhY3RQYXRoKGFydGlmYWN0UGF0aCkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJHtpbmRleH0gaGFzIGFuIHVuc2FmZSBwYXRoLmAsIHRhcmdldClcbiAgICAgIGlmIChwYXRocy5oYXMoYXJ0aWZhY3RQYXRoKSkgaW52YWxpZEFydGlmYWN0U2V0KGBEdXBsaWNhdGUgYXJ0aWZhY3QgcGF0aCAnJHthcnRpZmFjdFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgICBpZiAoZGlyZWN0b3J5UGF0aHMuaGFzKGFydGlmYWN0UGF0aCkpIHtcbiAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCBwYXRoICcke2FydGlmYWN0UGF0aH0nIGNvbGxpZGVzIHdpdGggYSByZXF1aXJlZCBkaXJlY3RvcnkuYCwgdGFyZ2V0KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGF0aHMgPSBhcnRpZmFjdERpcmVjdG9yeVBhdGhzKGFydGlmYWN0UGF0aClcblxuICAgICAgZm9yIChjb25zdCBwYXJlbnRQYXRoIG9mIHBhcmVudFBhdGhzKSB7XG4gICAgICAgIGlmIChwYXRocy5oYXMocGFyZW50UGF0aCkpIHtcbiAgICAgICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0IHBhdGggJyR7YXJ0aWZhY3RQYXRofScgZGVzY2VuZHMgZnJvbSBhcnRpZmFjdCBmaWxlICcke3BhcmVudFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhdGhzLmFkZChhcnRpZmFjdFBhdGgpXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudFBhdGggb2YgcGFyZW50UGF0aHMpIGRpcmVjdG9yeVBhdGhzLmFkZChwYXJlbnRQYXRoKVxuICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUgIT0gXCJzdHJpbmdcIiB8fCAhbWVkaWFUeXBlUGF0dGVybi50ZXN0KG1lZGlhVHlwZSkgfHwgL1tcXHJcXG5dL3UudGVzdChtZWRpYVR5cGUpKSB7XG4gICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgbWVkaWEgdHlwZS5gLCB0YXJnZXQpXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RSb2xlcy5oYXMocm9sZSkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgcm9sZS5gLCB0YXJnZXQpXG4gICAgICBpZiAoYXJ0aWZhY3Qub3duZXJzaGlwICE9IFwiZ2VuZXJhdGVkXCIpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgbXVzdCBoYXZlIGdlbmVyYXRlZCBvd25lcnNoaXAuYCwgdGFyZ2V0KVxuICAgICAgaWYgKHJvbGUgPT0gXCJlbnRyeVwiKSB7XG4gICAgICAgIGlmIChlbnRyeVBhdGhzLmxlbmd0aCA+IDApIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCBtdXN0IGRlY2xhcmUgZXhhY3RseSBvbmUgZW50cnkgYXJ0aWZhY3QuXCIsIHRhcmdldClcbiAgICAgICAgZW50cnlQYXRocy5wdXNoKGFydGlmYWN0UGF0aClcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFZhbHVlID0gYXJ0aWZhY3QuY29udGVudFxuICAgICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBVaW50OEFycmF5fSAqL1xuICAgICAgbGV0IGNvbnRlbnRcblxuICAgICAgaWYgKGNvbnRlbnRLaW5kID09IFwidGV4dFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudFZhbHVlICE9IFwic3RyaW5nXCIgfHwgY29udGVudFZhbHVlLmxlbmd0aCA9PSAwIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMoY29udGVudFZhbHVlKSkge1xuICAgICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyByZXF1aXJlcyBub24tZW1wdHkgc3RyaW5nIGNvbnRlbnQuYCwgdGFyZ2V0KVxuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50VmFsdWVcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIikge1xuICAgICAgICBpZiAoIShjb250ZW50VmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBjb250ZW50VmFsdWUuYnl0ZUxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCaW5hcnkgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgbm9uLWVtcHR5IGJ5dGVzLmAsIHRhcmdldClcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50ID0gbmV3IFVpbnQ4QXJyYXkoY29udGVudFZhbHVlKVxuICAgICAgfSBlbHNlIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgY29udGVudCBraW5kLmAsIHRhcmdldClcblxuICAgICAgY29uc3QgcHJvdmVuYW5jZSA9IHZhbGlkYXRlQXJ0aWZhY3RQcm92ZW5hbmNlKGFydGlmYWN0LnByb3ZlbmFuY2UsIGNvbnRlbnRLaW5kLCBhcnRpZmFjdFBhdGgsIGNvbnRlbnQsIHRhcmdldClcblxuICAgICAgYXJ0aWZhY3RzLnB1c2goLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0fSAqLyAoZnJlZXplQXJ0aWZhY3Qoe1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjb250ZW50S2luZCxcbiAgICAgICAgbWVkaWFUeXBlLFxuICAgICAgICBvd25lcnNoaXA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcImdlbmVyYXRlZFwiKSxcbiAgICAgICAgcGF0aDogYXJ0aWZhY3RQYXRoLFxuICAgICAgICBwcm92ZW5hbmNlLFxuICAgICAgICByb2xlXG4gICAgICB9KSkpXG4gICAgfVxuXG4gICAgaWYgKGVudHJ5UGF0aHMubGVuZ3RoICE9IDEpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCBtdXN0IGRlY2xhcmUgZXhhY3RseSBvbmUgZW50cnkgYXJ0aWZhY3QuXCIsIGNhbmRpZGF0ZS50YXJnZXQpXG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBhcnRpZmFjdHM6IE9iamVjdC5mcmVlemUoYXJ0aWZhY3RzKSxcbiAgICAgIGVudHJ5OiBlbnRyeVBhdGhzWzBdLFxuICAgICAgc2NoZW1hOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJHZW5lcmF0ZWRBcnRpZmFjdFNldFwiKSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHZlcnNpb246IC8qKiBAdHlwZSB7Y29uc3R9ICovICgxKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiKSB0aHJvdyBlcnJvclxuXG4gICAgcmV0dXJuIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCB2YWxpZGF0aW9uIGZhaWxlZC5cIiwgdGFyZ2V0T2YoY2FuZGlkYXRlKSwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYXJ0aWZhY3QtbGV2ZWwgdGV4dCwgYnl0ZSwgb3Igc3ludGhldGljIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUHJvdmVuYW5jZSBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3Vua25vd259IGNvbnRlbnRLaW5kIC0gVmFsaWRhdGVkIGFydGlmYWN0IGNvbnRlbnQga2luZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBWYWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gY29udGVudCAtIERldGFjaGVkIGFydGlmYWN0IGNvbnRlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQXJ0aWZhY3RQcm92ZW5hbmNlfSBWYWxpZGF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBcnRpZmFjdFByb3ZlbmFuY2UodmFsdWUsIGNvbnRlbnRLaW5kLCBhcnRpZmFjdFBhdGgsIGNvbnRlbnQsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIHJlcXVpcmVzIHByb3ZlbmFuY2UuYCwgdGFyZ2V0KVxuXG4gIGlmICh2YWx1ZS5raW5kID09IFwic3ludGhldGljXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlLnJlYXNvbiAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLnJlYXNvbi5sZW5ndGggPT0gMCB8fCAhaXNEZW5zZUFycmF5KHZhbHVlLnJlbGF0ZWRPcmlnaW5zKSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBTeW50aGV0aWMgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgYW4gZXhwbGljaXQgcmVhc29uIGFuZCByZWxhdGVkIG9yaWdpbnMuYCwgdGFyZ2V0KVxuICAgIH1cbiAgICBpZiAoY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIikge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCaW5hcnkgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgYnl0ZS1yYW5nZSBwcm92ZW5hbmNlLmAsIHRhcmdldClcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi9cbiAgICBjb25zdCByZWxhdGVkT3JpZ2lucyA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUucmVsYXRlZE9yaWdpbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICByZWxhdGVkT3JpZ2lucy5wdXNoKHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZS5yZWxhdGVkT3JpZ2luc1tpbmRleF0sIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInN5bnRoZXRpY1wiKSwgcmVhc29uOiB2YWx1ZS5yZWFzb24sIHJlbGF0ZWRPcmlnaW5zOiBPYmplY3QuZnJlZXplKHJlbGF0ZWRPcmlnaW5zKX0pXG4gIH1cblxuICBpZiAodmFsdWUua2luZCA9PSBcInRleHRcIikge1xuICAgIGNvbnN0IG1hcHBpbmdDYW5kaWRhdGUgPSB2YWx1ZS5tYXBwaW5nXG5cbiAgICBpZiAoY29udGVudEtpbmQgIT0gXCJ0ZXh0XCIgfHwgIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZSkgfHwgbWFwcGluZ0NhbmRpZGF0ZS5zY2hlbWEgIT0gXCJTZW1hbnRpZm9sZE1hcHBpbmdcIiB8fFxuICAgICAgIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZS5nZW5lcmF0ZWQpIHx8IG1hcHBpbmdDYW5kaWRhdGUuZ2VuZXJhdGVkLmZpbGVuYW1lICE9IGFydGlmYWN0UGF0aCB8fFxuICAgICAgbWFwcGluZ0NhbmRpZGF0ZS5nZW5lcmF0ZWQuY29udGVudCAhPSBjb250ZW50IHx8ICFpc1BsYWluT2JqZWN0KHZhbHVlLnNvdXJjZU1hcCkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgbWlzbWF0Y2hlZCByaWNoIG9yIFNvdXJjZSBNYXAgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gICAgfVxuICAgIGlmICh2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YSh2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZSkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgaW52YWxpZCBTb3VyY2UgTWFwIGZpbGVuYW1lIG1ldGFkYXRhLmAsIHRhcmdldClcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyhtYXBwaW5nQ2FuZGlkYXRlKVxuICAgIGNvbnN0IHNvdXJjZU1hcCA9IHZhbGlkYXRlU291cmNlTWFwKHZhbHVlLnNvdXJjZU1hcCwgYXJ0aWZhY3RQYXRoLCB0YXJnZXQpXG4gICAgY29uc3QgcHJvamVjdGVkU291cmNlTWFwID0gdG9Tb3VyY2VNYXBWMyhtYXBwaW5nKVxuXG4gICAgaWYgKCFzYW1lSnNvblZhbHVlKHNvdXJjZU1hcCwgcHJvamVjdGVkU291cmNlTWFwKSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBUZXh0IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBTb3VyY2UgTWFwIHByb3ZlbmFuY2UgdGhhdCBjb250cmFkaWN0cyBpdHMgcmljaCBtYXBwaW5nLmAsIHRhcmdldClcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ0ZXh0XCIpLFxuICAgICAgbWFwcGluZyxcbiAgICAgIHNvdXJjZU1hcCxcbiAgICAgIHNvdXJjZU1hcEZpbGVuYW1lOiB2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZVxuICAgIH0pXG4gIH1cblxuICBpZiAodmFsdWUua2luZCA9PSBcImJ5dGVzXCIpIHtcbiAgICBpZiAoY29udGVudEtpbmQgIT0gXCJiaW5hcnlcIikgaW52YWxpZEFydGlmYWN0U2V0KGBCeXRlIHByb3ZlbmFuY2UgcmVxdWlyZXMgYmluYXJ5IGNvbnRlbnQgZm9yICcke2FydGlmYWN0UGF0aH0nLmAsIHRhcmdldClcbiAgICBjb25zdCBtYXBwaW5nID0gZmluYWxpemVCeXRlTWFwcGluZyh2YWx1ZS5tYXBwaW5nKVxuXG4gICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkLnBhdGggIT0gYXJ0aWZhY3RQYXRoIHx8IG1hcHBpbmcuZ2VuZXJhdGVkLmJ5dGVMZW5ndGggIT0gLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqLyAoY29udGVudCkuYnl0ZUxlbmd0aCkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCeXRlIHByb3ZlbmFuY2UgZG9lcyBub3QgbWF0Y2ggYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScuYCwgdGFyZ2V0KVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJieXRlc1wiKSwgbWFwcGluZ30pXG4gIH1cblxuICByZXR1cm4gaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgYW4gdW5rbm93biBwcm92ZW5hbmNlIGtpbmQuYCwgdGFyZ2V0KVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgb25lIHZhbGlkYXRlZCBhcnRpZmFjdCByZWNvcmQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBhcnRpZmFjdCAtIFZhbGlkYXRlZCBmaWVsZHMuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+fSBGcm96ZW4gcmVjb3JkLlxuICovXG5mdW5jdGlvbiBmcmVlemVBcnRpZmFjdChhcnRpZmFjdCkge1xuICBpZiAoYXJ0aWZhY3QuY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIiAmJiBhcnRpZmFjdC5jb250ZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhcnRpZmFjdC5jb250ZW50XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJ0aWZhY3QsIFwiY29udGVudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNvbnRlbnQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKGFydGlmYWN0KVxufVxuXG4vKipcbiAqIExpc3RzIGV2ZXJ5IGRpcmVjdG9yeSBhIHNhZmUgcmVsYXRpdmUgUE9TSVggYXJ0aWZhY3QgcGF0aCByZXF1aXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBWYWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gT3JkZXJlZCBwYXJlbnQgZGlyZWN0b3J5IHBhdGhzLlxuICovXG5mdW5jdGlvbiBhcnRpZmFjdERpcmVjdG9yeVBhdGhzKGFydGlmYWN0UGF0aCkge1xuICBjb25zdCBwYXJ0cyA9IGFydGlmYWN0UGF0aC5zcGxpdChcIi9cIilcbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4ICs9IDEpIGRpcmVjdG9yaWVzLnB1c2gocGFydHMuc2xpY2UoMCwgaW5kZXgpLmpvaW4oXCIvXCIpKVxuXG4gIHJldHVybiBkaXJlY3Rvcmllc1xufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgYXJ0aWZhY3Qtc2V0IGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEZhaWx1cmUgZGV0YWlsLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gW2Vycm9yXSAtIFByZXNlcnZlZCB2YWxpZGF0aW9uIGNhdXNlLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkQXJ0aWZhY3RTZXQobWVzc2FnZSwgdGFyZ2V0LCBlcnJvcikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICBsYW5ndWFnZTogdGFyZ2V0LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEgc2FmZSBkaWFnbm9zdGljIGlkZW50aXR5IGZyb20gYW4gdW5rbm93biByZXF1ZXN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEaWFnbm9zdGljIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiB0YXJnZXRPZih2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLnRhcmdldCA9PSBcInN0cmluZ1wiICYmIHZhbHVlLnRhcmdldC5sZW5ndGggPiAwID8gdmFsdWUudGFyZ2V0IDogXCJhcnRpZmFjdFwiXG59XG5cbi8qKlxuICogQ2hlY2tzIGZvciBhbiBvcmRpbmFyeSBzdHJpbmcta2V5ZWQgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gV2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT0gT2JqZWN0LnByb3RvdHlwZVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbiBhcnRpZmFjdC1sZXZlbCByZWxhdGVkIG9yaWdpbiB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2Ugb2Zmc2V0cyBhcyBnZW5lcmF0ZWQgYnl0ZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmVsYXRlZC1vcmlnaW4gY2FuZGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFydGlmYWN0UGF0aCAtIE93bmluZyBhcnRpZmFjdCBwYXRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gT3JpZ2luIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW59IERldGFjaGVkIHJlbGF0ZWQgb3JpZ2luLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlbGF0ZWRPcmlnaW4odmFsdWUsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZS5zb3VyY2VJZCAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLnNvdXJjZUlkLmxlbmd0aCA9PSAwIHx8XG4gICAgIWlzUGxhaW5PYmplY3QodmFsdWUubG9jYXRpb24pIHx8IHR5cGVvZiB2YWx1ZS5sb2NhdGlvbi5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLmxvY2F0aW9uLmZpbGVuYW1lLmxlbmd0aCA9PSAwIHx8XG4gICAgIXZhbGlkU291cmNlUG9pbnQodmFsdWUubG9jYXRpb24uc3RhcnQpIHx8ICF2YWxpZFNvdXJjZVBvaW50KHZhbHVlLmxvY2F0aW9uLmVuZCkgfHxcbiAgICB2YWx1ZS5sb2NhdGlvbi5lbmQub2Zmc2V0IDwgdmFsdWUubG9jYXRpb24uc3RhcnQub2Zmc2V0IHx8ICFpc1NvdXJjZVJhbmdlT3JkZXJlZCh2YWx1ZS5sb2NhdGlvbi5zdGFydCwgdmFsdWUubG9jYXRpb24uZW5kKSkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIG1hbGZvcm1lZCByZWxhdGVkIG9yaWdpbiAke2luZGV4fS5gLCB0YXJnZXQpXG4gIH1cblxuICByZXR1cm4gZGVlcEZyZWV6ZSh7XG4gICAgbG9jYXRpb246IHtcbiAgICAgIGVuZDogey4uLnZhbHVlLmxvY2F0aW9uLmVuZH0sXG4gICAgICBmaWxlbmFtZTogdmFsdWUubG9jYXRpb24uZmlsZW5hbWUsXG4gICAgICBzdGFydDogey4uLnZhbHVlLmxvY2F0aW9uLnN0YXJ0fVxuICAgIH0sXG4gICAgc291cmNlSWQ6IHZhbHVlLnNvdXJjZUlkLFxuICAgIC4uLihvcHRpb25hbFN0cmluZyh2YWx1ZS5ub2RlSWQsIFwibm9kZUlkXCIsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpLFxuICAgIC4uLihvcHRpb25hbFN0cmluZyh2YWx1ZS5zeW1ib2xJZCwgXCJzeW1ib2xJZFwiLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpKSxcbiAgICAuLi4ob3B0aW9uYWxTdHJpbmcodmFsdWUucm9sZSwgXCJyb2xlXCIsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpXG4gIH0pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBvcHRpb25hbCByZWxhdGVkLW9yaWdpbiBzdHJpbmcgZmllbGQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gUHJvcGVydHkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE9yaWdpbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gUHJlc2VudCB2YWxpZGF0ZWQgcHJvcGVydHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbFN0cmluZyh2YWx1ZSwgcHJvcGVydHksIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgJHtwcm9wZXJ0eX0gaW4gcmVsYXRlZCBvcmlnaW4gJHtpbmRleH0uYCwgdGFyZ2V0KVxuICB9XG5cbiAgcmV0dXJuIHtbcHJvcGVydHldOiB2YWx1ZX1cbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIFVURi0xNiBzb3VyY2UgcG9pbnQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHBvaW50LlxuICogQHJldHVybnMge3ZhbHVlIGlzIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlUG9pbnR9IFdoZXRoZXIgdGhlIHBvaW50IGlzIHN0cnVjdHVyYWxseSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRTb3VyY2VQb2ludCh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLmxpbmUgPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZS5saW5lKSAmJiB2YWx1ZS5saW5lID4gMCAmJlxuICAgIHR5cGVvZiB2YWx1ZS5jb2x1bW4gPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZS5jb2x1bW4pICYmIHZhbHVlLmNvbHVtbiA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUub2Zmc2V0ID09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUub2Zmc2V0KSAmJiB2YWx1ZS5vZmZzZXQgPj0gMFxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgZGV0YWNoZXMgdGhlIFNvdXJjZSBNYXAgdjMgcHJvamVjdGlvbiBjYXJyaWVkIGJ5IGEgdGV4dCBhcnRpZmFjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBTb3VyY2UgTWFwIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gRGV0YWNoZWQgU291cmNlIE1hcC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTb3VyY2VNYXAodmFsdWUsIGFydGlmYWN0UGF0aCwgdGFyZ2V0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgdmFsdWUudmVyc2lvbiAhPSAzIHx8IHZhbHVlLmZpbGUgIT0gYXJ0aWZhY3RQYXRoIHx8IHR5cGVvZiB2YWx1ZS5tYXBwaW5ncyAhPSBcInN0cmluZ1wiIHx8XG4gICAgIWlzRGVuc2VBcnJheSh2YWx1ZS5uYW1lcykgfHwgIXZhbHVlLm5hbWVzLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKSB8fFxuICAgICFpc0RlbnNlQXJyYXkodmFsdWUuc291cmNlcykgfHwgIXZhbHVlLnNvdXJjZXMuZXZlcnkoKHNvdXJjZSkgPT4gdHlwZW9mIHNvdXJjZSA9PSBcInN0cmluZ1wiKSB8fFxuICAgICh2YWx1ZS5zb3VyY2VzQ29udGVudCAhPT0gdW5kZWZpbmVkICYmICghaXNEZW5zZUFycmF5KHZhbHVlLnNvdXJjZXNDb250ZW50KSB8fFxuICAgICAgIXZhbHVlLnNvdXJjZXNDb250ZW50LmV2ZXJ5KChzb3VyY2UpID0+IHNvdXJjZSA9PSBudWxsIHx8IHR5cGVvZiBzb3VyY2UgPT0gXCJzdHJpbmdcIikpKSkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgbWFsZm9ybWVkIFNvdXJjZSBNYXAgdjMgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gIH1cbiAgdmFsaWRhdGVFbmNvZGVkU291cmNlTWFwTWFwcGluZ3MoXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh2YWx1ZSkpLFxuICAgIGFydGlmYWN0UGF0aCxcbiAgICB0YXJnZXRcbiAgKVxuXG4gIGNvbnN0IGRldGFjaGVkID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc3RydWN0dXJlZENsb25lKHZhbHVlKSlcblxuICByZXR1cm4gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9ICovIChkZXRhY2hlZCkpXG59XG5cbi8qKlxuICogRGVjb2RlcyBhbmQgdmFsaWRhdGVzIHRoZSBTb3VyY2UgTWFwIHBheWxvYWQgd2l0aCB0aGUgaW5zdGFsbGVkIG1hcHBpbmcgaW1wbGVtZW50YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gc291cmNlTWFwIC0gU3RydWN0dXJhbGx5IHZhbGlkYXRlZCBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gT3duaW5nIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRW5jb2RlZFNvdXJjZU1hcE1hcHBpbmdzKHNvdXJjZU1hcCwgYXJ0aWZhY3RQYXRoLCB0YXJnZXQpIHtcbiAgLyoqIEB0eXBlIHtSZWFkb25seTxpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLlNvdXJjZU1hcFNlZ21lbnRbXVtdPn0gKi9cbiAgbGV0IGRlY29kZWRcbiAgbGV0IGNhbm9uaWNhbE1hcHBpbmdzXG5cbiAgdHJ5IHtcbiAgICBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG5ldyBUcmFjZU1hcChzb3VyY2VNYXApKVxuICAgIGNvbnN0IGRlY29kZWRNYXAgPSAvKiogQHR5cGUge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmdcIikuRGVjb2RlZFNvdXJjZU1hcH0gKi8gKHtcbiAgICAgIC4uLnNvdXJjZU1hcCxcbiAgICAgIG1hcHBpbmdzOiBzdHJ1Y3R1cmVkQ2xvbmUoZGVjb2RlZClcbiAgICB9KVxuXG4gICAgY2Fub25pY2FsTWFwcGluZ3MgPSBlbmNvZGVkTWFwcGluZ3MocHJlc29ydGVkRGVjb2RlZE1hcChkZWNvZGVkTWFwKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgZW5jb2RlZCBTb3VyY2UgTWFwIG1hcHBpbmdzLmAsIHRhcmdldCwgZXJyb3IpXG4gIH1cblxuICBpZiAoY2Fub25pY2FsTWFwcGluZ3MgIT0gc291cmNlTWFwLm1hcHBpbmdzIHx8XG4gICAgIXZhbGlkRGVjb2RlZFNvdXJjZU1hcE1hcHBpbmdzKGRlY29kZWQsIHNvdXJjZU1hcC5zb3VyY2VzLmxlbmd0aCwgc291cmNlTWFwLm5hbWVzLmxlbmd0aCkpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgZW5jb2RlZCBTb3VyY2UgTWFwIG1hcHBpbmdzLmAsIHRhcmdldClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBkZWNvZGVkIFNvdXJjZSBNYXAgc2VnbWVudCBzaGFwZSBhbmQgcmVmZXJlbmNlZCBpbmRpY2VzLlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLlNvdXJjZU1hcFNlZ21lbnRbXVtdPn0gbGluZXMgLSBEZWNvZGVkIG1hcHBpbmcgbGluZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gc291cmNlQ291bnQgLSBEZWNsYXJlZCBzb3VyY2UgY291bnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbmFtZUNvdW50IC0gRGVjbGFyZWQgbmFtZSBjb3VudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGV2ZXJ5IHNlZ21lbnQgaXMgc2VtYW50aWNhbGx5IHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZERlY29kZWRTb3VyY2VNYXBNYXBwaW5ncyhsaW5lcywgc291cmNlQ291bnQsIG5hbWVDb3VudCkge1xuICByZXR1cm4gbGluZXMuZXZlcnkoKGxpbmUpID0+IGxpbmUuZXZlcnkoKHNlZ21lbnQpID0+IHtcbiAgICBpZiAoc2VnbWVudC5sZW5ndGggIT0gMSAmJiBzZWdtZW50Lmxlbmd0aCAhPSA0ICYmIHNlZ21lbnQubGVuZ3RoICE9IDUpIHJldHVybiBmYWxzZVxuICAgIGlmICghc2VnbWVudC5ldmVyeSgoZmllbGQpID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKGZpZWxkKSAmJiBmaWVsZCA+PSAwKSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNlZ21lbnQubGVuZ3RoID09IDEpIHJldHVybiB0cnVlXG4gICAgaWYgKHNlZ21lbnRbMV0gPj0gc291cmNlQ291bnQpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID09IDQgfHwgc2VnbWVudFs0XSA8IG5hbWVDb3VudFxuICB9KSlcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBkZXRhY2hlZCBKU09OIHZhbHVlcyB3aXRob3V0IGRlcGVuZGluZyBvbiBjYWxsZXIgb2JqZWN0LWtleSBvcmRlci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbGVmdCAtIEZpcnN0IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHJpZ2h0IC0gU2Vjb25kIEpTT04gdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBib3RoIHZhbHVlcyBhcmUgc3RydWN0dXJhbGx5IGlkZW50aWNhbC5cbiAqL1xuZnVuY3Rpb24gc2FtZUpzb25WYWx1ZShsZWZ0LCByaWdodCkge1xuICBpZiAobGVmdCA9PT0gcmlnaHQpIHJldHVybiB0cnVlXG4gIGlmIChBcnJheS5pc0FycmF5KGxlZnQpIHx8IEFycmF5LmlzQXJyYXkocmlnaHQpKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobGVmdCkgJiYgQXJyYXkuaXNBcnJheShyaWdodCkgJiYgbGVmdC5sZW5ndGggPT0gcmlnaHQubGVuZ3RoICYmXG4gICAgICBsZWZ0LmV2ZXJ5KChlbnRyeSwgaW5kZXgpID0+IHNhbWVKc29uVmFsdWUoZW50cnksIHJpZ2h0W2luZGV4XSkpXG4gIH1cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGxlZnQpIHx8ICFpc1BsYWluT2JqZWN0KHJpZ2h0KSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGxlZnRLZXlzID0gT2JqZWN0LmtleXMobGVmdClcbiAgY29uc3QgcmlnaHRLZXlzID0gT2JqZWN0LmtleXMocmlnaHQpXG5cbiAgcmV0dXJuIGxlZnRLZXlzLmxlbmd0aCA9PSByaWdodEtleXMubGVuZ3RoICYmXG4gICAgbGVmdEtleXMuZXZlcnkoKGtleSkgPT4gT2JqZWN0Lmhhc093bihyaWdodCwga2V5KSAmJiBzYW1lSnNvblZhbHVlKGxlZnRba2V5XSwgcmlnaHRba2V5XSkpXG59XG5cbi8qKlxuICogRGVlcGx5IGZyZWV6ZXMgYSBkZXRhY2hlZCBKU09OIHZhbHVlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWUgLSBEZXRhY2hlZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtUfSBGcm96ZW4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGRlZXBGcmVlemUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuICBmb3IgKGNvbnN0IG5lc3RlZCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkgZGVlcEZyZWV6ZShuZXN0ZWQpXG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUodmFsdWUpXG59XG4iXX0=
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FydGlmYWN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDekcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUcsTUFBTSxnQkFBZ0IsR0FBRyx1RUFBdUUsQ0FBQTtBQUVoRzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFNBQVM7SUFDbEQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDbEcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0s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Q0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU07UUFDeEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzlGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUs7SUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU5RSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVjb2RlZE1hcHBpbmdzLCBlbmNvZGVkTWFwcGluZ3MsIHByZXNvcnRlZERlY29kZWRNYXAsIFRyYWNlTWFwfSBmcm9tIFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtpc1NhZmVBcnRpZmFjdFBhdGgsIGlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhfSBmcm9tIFwiLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7ZmluYWxpemVCeXRlTWFwcGluZ30gZnJvbSBcIi4vYmluYXJ5LW1hcHBpbmcuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuL21hcHBpbmcuanNcIlxuaW1wb3J0IHtpc1NvdXJjZVJhbmdlT3JkZXJlZH0gZnJvbSBcIi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuL3NlbWFudGljL3NjYWxhcnMuanNcIlxuXG5jb25zdCBhcnRpZmFjdFJvbGVzID0gbmV3IFNldChbXCJlbnRyeVwiLCBcInNvdXJjZVwiLCBcIm1hbmlmZXN0XCIsIFwic3VwcG9ydFwiLCBcIm1hcHBpbmdcIiwgXCJyZXNvdXJjZVwiLCBcImxvYWRlclwiXSlcbmNvbnN0IG1lZGlhVHlwZVBhdHRlcm4gPSAvXltBLVphLXowLTkhIyQmXl8uKy1dK1xcL1tBLVphLXowLTkhIyQmXl8uKy1dKyg/OjtbXFx1MDAyMC1cXHUwMDdlXSspPyQvdVxuXG4vKipcbiAqIFRyYW5zYWN0aW9uYWxseSB2YWxpZGF0ZXMgYW5kIGNvbnN0cnVjdHMgb25lIGRldGVybWluaXN0aWMgZ2VuZXJhdGVkIGFydGlmYWN0IHNldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gQXJ0aWZhY3Qtc2V0IGZpZWxkcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBEZXRhY2hlZCBpbW11dGFibGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQoY2FuZGlkYXRlKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkgfHwgdHlwZW9mIGNhbmRpZGF0ZS50YXJnZXQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUudGFyZ2V0Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAhL15bYS16XVthLXowLTktXSokL3UudGVzdChjYW5kaWRhdGUudGFyZ2V0KSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qgc2V0IHJlcXVpcmVzIGEgc3RhYmxlIGxvd2VyY2FzZSB0YXJnZXQgSUQuXCIsIHRhcmdldE9mKGNhbmRpZGF0ZSkpXG4gICAgfVxuICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcnRpZmFjdHMpIHx8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoID09IDApIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCByZXF1aXJlcyBhIG5vbi1lbXB0eSBvcmRlcmVkIGFydGlmYWN0IGFycmF5LlwiLCBjYW5kaWRhdGUudGFyZ2V0KVxuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBjYW5kaWRhdGUudGFyZ2V0XG4gICAgY29uc3QgbWV0YWRhdGEgPSBjYW5kaWRhdGUubWV0YWRhdGEgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogc25hcHNob3RNZXRhZGF0YU9iamVjdChjYW5kaWRhdGUubWV0YWRhdGEsIHRhcmdldClcblxuICAgIGNvbnN0IHBhdGhzID0gbmV3IFNldCgpXG4gICAgY29uc3QgZGlyZWN0b3J5UGF0aHMgPSBuZXcgU2V0KClcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIGNvbnN0IGVudHJ5UGF0aHMgPSBbXVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSAqL1xuICAgIGNvbnN0IGFydGlmYWN0cyA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FuZGlkYXRlLmFydGlmYWN0cy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGFydGlmYWN0ID0gY2FuZGlkYXRlLmFydGlmYWN0c1tpbmRleF1cblxuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGFydGlmYWN0KSkgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAke2luZGV4fSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LmAsIHRhcmdldClcbiAgICAgIGNvbnN0IGFydGlmYWN0UGF0aCA9IGFydGlmYWN0LnBhdGhcbiAgICAgIGNvbnN0IG1lZGlhVHlwZSA9IGFydGlmYWN0Lm1lZGlhVHlwZVxuICAgICAgY29uc3Qgcm9sZSA9IGFydGlmYWN0LnJvbGVcbiAgICAgIGNvbnN0IGNvbnRlbnRLaW5kID0gYXJ0aWZhY3QuY29udGVudEtpbmRcblxuICAgICAgaWYgKCFpc1NhZmVBcnRpZmFjdFBhdGgoYXJ0aWZhY3RQYXRoKSkgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAke2luZGV4fSBoYXMgYW4gdW5zYWZlIHBhdGguYCwgdGFyZ2V0KVxuICAgICAgaWYgKHBhdGhzLmhhcyhhcnRpZmFjdFBhdGgpKSBpbnZhbGlkQXJ0aWZhY3RTZXQoYER1cGxpY2F0ZSBhcnRpZmFjdCBwYXRoICcke2FydGlmYWN0UGF0aH0nLmAsIHRhcmdldClcbiAgICAgIGlmIChkaXJlY3RvcnlQYXRocy5oYXMoYXJ0aWZhY3RQYXRoKSkge1xuICAgICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0IHBhdGggJyR7YXJ0aWZhY3RQYXRofScgY29sbGlkZXMgd2l0aCBhIHJlcXVpcmVkIGRpcmVjdG9yeS5gLCB0YXJnZXQpXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnRQYXRocyA9IGFydGlmYWN0RGlyZWN0b3J5UGF0aHMoYXJ0aWZhY3RQYXRoKVxuXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudFBhdGggb2YgcGFyZW50UGF0aHMpIHtcbiAgICAgICAgaWYgKHBhdGhzLmhhcyhwYXJlbnRQYXRoKSkge1xuICAgICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgcGF0aCAnJHthcnRpZmFjdFBhdGh9JyBkZXNjZW5kcyBmcm9tIGFydGlmYWN0IGZpbGUgJyR7cGFyZW50UGF0aH0nLmAsIHRhcmdldClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcGF0aHMuYWRkKGFydGlmYWN0UGF0aClcbiAgICAgIGZvciAoY29uc3QgcGFyZW50UGF0aCBvZiBwYXJlbnRQYXRocykgZGlyZWN0b3J5UGF0aHMuYWRkKHBhcmVudFBhdGgpXG4gICAgICBpZiAodHlwZW9mIG1lZGlhVHlwZSAhPSBcInN0cmluZ1wiIHx8ICFtZWRpYVR5cGVQYXR0ZXJuLnRlc3QobWVkaWFUeXBlKSB8fCAvW1xcclxcbl0vdS50ZXN0KG1lZGlhVHlwZSkpIHtcbiAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgYW4gaW52YWxpZCBtZWRpYSB0eXBlLmAsIHRhcmdldClcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygcm9sZSAhPSBcInN0cmluZ1wiIHx8ICFhcnRpZmFjdFJvbGVzLmhhcyhyb2xlKSkgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgYW4gaW52YWxpZCByb2xlLmAsIHRhcmdldClcbiAgICAgIGlmIChhcnRpZmFjdC5vd25lcnNoaXAgIT0gXCJnZW5lcmF0ZWRcIikgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBtdXN0IGhhdmUgZ2VuZXJhdGVkIG93bmVyc2hpcC5gLCB0YXJnZXQpXG4gICAgICBpZiAocm9sZSA9PSBcImVudHJ5XCIpIHtcbiAgICAgICAgaWYgKGVudHJ5UGF0aHMubGVuZ3RoID4gMCkgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qgc2V0IG11c3QgZGVjbGFyZSBleGFjdGx5IG9uZSBlbnRyeSBhcnRpZmFjdC5cIiwgdGFyZ2V0KVxuICAgICAgICBlbnRyeVBhdGhzLnB1c2goYXJ0aWZhY3RQYXRoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50VmFsdWUgPSBhcnRpZmFjdC5jb250ZW50XG4gICAgICAvKiogQHR5cGUge3N0cmluZyB8IFVpbnQ4QXJyYXl9ICovXG4gICAgICBsZXQgY29udGVudFxuXG4gICAgICBpZiAoY29udGVudEtpbmQgPT0gXCJ0ZXh0XCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50VmFsdWUgIT0gXCJzdHJpbmdcIiB8fCBjb250ZW50VmFsdWUubGVuZ3RoID09IDAgfHwgIWhhc09ubHlVbmljb2RlU2NhbGFycyhjb250ZW50VmFsdWUpKSB7XG4gICAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBUZXh0IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIHJlcXVpcmVzIG5vbi1lbXB0eSBzdHJpbmcgY29udGVudC5gLCB0YXJnZXQpXG4gICAgICAgIH1cbiAgICAgICAgY29udGVudCA9IGNvbnRlbnRWYWx1ZVxuICAgICAgfSBlbHNlIGlmIChjb250ZW50S2luZCA9PSBcImJpbmFyeVwiKSB7XG4gICAgICAgIGlmICghKGNvbnRlbnRWYWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHx8IGNvbnRlbnRWYWx1ZS5ieXRlTGVuZ3RoID09IDApIHtcbiAgICAgICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEJpbmFyeSBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyByZXF1aXJlcyBub24tZW1wdHkgYnl0ZXMuYCwgdGFyZ2V0KVxuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQgPSBuZXcgVWludDhBcnJheShjb250ZW50VmFsdWUpXG4gICAgICB9IGVsc2UgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgYW4gaW52YWxpZCBjb250ZW50IGtpbmQuYCwgdGFyZ2V0KVxuXG4gICAgICBjb25zdCBwcm92ZW5hbmNlID0gdmFsaWRhdGVBcnRpZmFjdFByb3ZlbmFuY2UoYXJ0aWZhY3QucHJvdmVuYW5jZSwgY29udGVudEtpbmQsIGFydGlmYWN0UGF0aCwgY29udGVudCwgdGFyZ2V0KVxuXG4gICAgICBhcnRpZmFjdHMucHVzaCgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3R9ICovIChmcmVlemVBcnRpZmFjdCh7XG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGNvbnRlbnRLaW5kLFxuICAgICAgICBtZWRpYVR5cGUsXG4gICAgICAgIG93bmVyc2hpcDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiZ2VuZXJhdGVkXCIpLFxuICAgICAgICBwYXRoOiBhcnRpZmFjdFBhdGgsXG4gICAgICAgIHByb3ZlbmFuY2UsXG4gICAgICAgIHJvbGVcbiAgICAgIH0pKSlcbiAgICB9XG5cbiAgICBpZiAoZW50cnlQYXRocy5sZW5ndGggIT0gMSkgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qgc2V0IG11c3QgZGVjbGFyZSBleGFjdGx5IG9uZSBlbnRyeSBhcnRpZmFjdC5cIiwgY2FuZGlkYXRlLnRhcmdldClcblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgIGFydGlmYWN0czogT2JqZWN0LmZyZWV6ZShhcnRpZmFjdHMpLFxuICAgICAgZW50cnk6IGVudHJ5UGF0aHNbMF0sXG4gICAgICAuLi4obWV0YWRhdGEgPT09IHVuZGVmaW5lZCA/IHt9IDoge21ldGFkYXRhfSksXG4gICAgICBzY2hlbWE6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIkdlbmVyYXRlZEFydGlmYWN0U2V0XCIpLFxuICAgICAgdGFyZ2V0LFxuICAgICAgdmVyc2lvbjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKDEpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZW1hbnRpZm9sZERpYWdub3N0aWMgJiYgZXJyb3IuY29kZSA9PSBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIpIHRocm93IGVycm9yXG5cbiAgICByZXR1cm4gaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qtc2V0IHZhbGlkYXRpb24gZmFpbGVkLlwiLCB0YXJnZXRPZihjYW5kaWRhdGUpLCBlcnJvcilcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0YXJnZXQtc3BlY2lmaWMgbWV0YWRhdGEgYXMgZGV0YWNoZWQsIGltbXV0YWJsZSBKU09OLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIE1ldGFkYXRhIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+fSBNZXRhZGF0YSBzbmFwc2hvdC5cbiAqL1xuZnVuY3Rpb24gc25hcHNob3RNZXRhZGF0YU9iamVjdCh2YWx1ZSwgdGFyZ2V0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCBtZXRhZGF0YSBtdXN0IGJlIGEgcGxhaW4gSlNPTiBvYmplY3QuXCIsIHRhcmdldClcblxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj59ICovIChcbiAgICBkZWVwRnJlZXplKHNuYXBzaG90TWV0YWRhdGFWYWx1ZSh2YWx1ZSwgdGFyZ2V0LCBuZXcgV2Vha1NldCgpKSkpXG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc25hcHNob3RzIGEgSlNPTiBtZXRhZGF0YSB2YWx1ZSB3aXRob3V0IHJldGFpbmluZyBjYWxsZXIgb2JqZWN0cy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBKU09OIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcGFyYW0ge1dlYWtTZXQ8b2JqZWN0Pn0gYW5jZXN0b3JzIC0gQWN0aXZlIG9iamVjdCBwYXRoIGZvciBjeWNsZSByZWplY3Rpb24uXG4gKiBAcmV0dXJucyB7dW5rbm93bn0gRGV0YWNoZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc25hcHNob3RNZXRhZGF0YVZhbHVlKHZhbHVlLCB0YXJnZXQsIGFuY2VzdG9ycykge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09IFwiYm9vbGVhblwiKSByZXR1cm4gdmFsdWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKCFoYXNPbmx5VW5pY29kZVNjYWxhcnModmFsdWUpKSBpbnZhbGlkQXJ0aWZhY3RTZXQoXCJBcnRpZmFjdC1zZXQgbWV0YWRhdGEgY29udGFpbnMgYSBsb25lIFVuaWNvZGUgc3Vycm9nYXRlLlwiLCB0YXJnZXQpXG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCBtZXRhZGF0YSBudW1iZXJzIG11c3QgYmUgZmluaXRlLlwiLCB0YXJnZXQpXG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCBtZXRhZGF0YSBtdXN0IGNvbnRhaW4gb25seSBKU09OIHZhbHVlcy5cIiwgdGFyZ2V0KVxuICBpZiAoYW5jZXN0b3JzLmhhcyh2YWx1ZSkpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCBtZXRhZGF0YSBtdXN0IG5vdCBjb250YWluIGN5Y2xlcy5cIiwgdGFyZ2V0KVxuICBhbmNlc3RvcnMuYWRkKHZhbHVlKVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICghaXNEZW5zZUFycmF5KHZhbHVlKSkgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qtc2V0IG1ldGFkYXRhIGFycmF5cyBtdXN0IGJlIGRlbnNlLlwiLCB0YXJnZXQpXG4gICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgY29uc3QgcmVzdWx0ID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZS5sZW5ndGg7IGluZGV4ICs9IDEpIHJlc3VsdC5wdXNoKHNuYXBzaG90TWV0YWRhdGFWYWx1ZSh2YWx1ZVtpbmRleF0sIHRhcmdldCwgYW5jZXN0b3JzKSlcbiAgICBhbmNlc3RvcnMuZGVsZXRlKHZhbHVlKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCBtZXRhZGF0YSBtdXN0IGNvbnRhaW4gb25seSBwbGFpbiBKU09OIG9iamVjdHMuXCIsIHRhcmdldClcbiAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge31cblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHNuYXBzaG90TWV0YWRhdGFWYWx1ZSh2YWx1ZVtrZXldLCB0YXJnZXQsIGFuY2VzdG9ycyksXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbiAgYW5jZXN0b3JzLmRlbGV0ZSh2YWx1ZSlcblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFydGlmYWN0LWxldmVsIHRleHQsIGJ5dGUsIG9yIHN5bnRoZXRpYyBwcm92ZW5hbmNlLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFByb3ZlbmFuY2UgY2FuZGlkYXRlLlxuICogQHBhcmFtIHt1bmtub3dufSBjb250ZW50S2luZCAtIFZhbGlkYXRlZCBhcnRpZmFjdCBjb250ZW50IGtpbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gVmFsaWRhdGVkIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGNvbnRlbnQgLSBEZXRhY2hlZCBhcnRpZmFjdCBjb250ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFydGlmYWN0UHJvdmVuYW5jZX0gVmFsaWRhdGVkIHByb3ZlbmFuY2UuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJ0aWZhY3RQcm92ZW5hbmNlKHZhbHVlLCBjb250ZW50S2luZCwgYXJ0aWZhY3RQYXRoLCBjb250ZW50LCB0YXJnZXQpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyByZXF1aXJlcyBwcm92ZW5hbmNlLmAsIHRhcmdldClcblxuICBpZiAodmFsdWUua2luZCA9PSBcInN5bnRoZXRpY1wiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZS5yZWFzb24gIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5yZWFzb24ubGVuZ3RoID09IDAgfHwgIWlzRGVuc2VBcnJheSh2YWx1ZS5yZWxhdGVkT3JpZ2lucykpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgU3ludGhldGljIGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIHJlcXVpcmVzIGFuIGV4cGxpY2l0IHJlYXNvbiBhbmQgcmVsYXRlZCBvcmlnaW5zLmAsIHRhcmdldClcbiAgICB9XG4gICAgaWYgKGNvbnRlbnRLaW5kID09IFwiYmluYXJ5XCIpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgQmluYXJ5IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIHJlcXVpcmVzIGJ5dGUtcmFuZ2UgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gICAgfVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2luW119ICovXG4gICAgY29uc3QgcmVsYXRlZE9yaWdpbnMgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlLnJlbGF0ZWRPcmlnaW5zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgcmVsYXRlZE9yaWdpbnMucHVzaCh2YWxpZGF0ZVJlbGF0ZWRPcmlnaW4odmFsdWUucmVsYXRlZE9yaWdpbnNbaW5kZXhdLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpKVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJzeW50aGV0aWNcIiksIHJlYXNvbjogdmFsdWUucmVhc29uLCByZWxhdGVkT3JpZ2luczogT2JqZWN0LmZyZWV6ZShyZWxhdGVkT3JpZ2lucyl9KVxuICB9XG5cbiAgaWYgKHZhbHVlLmtpbmQgPT0gXCJ0ZXh0XCIpIHtcbiAgICBjb25zdCBtYXBwaW5nQ2FuZGlkYXRlID0gdmFsdWUubWFwcGluZ1xuXG4gICAgaWYgKGNvbnRlbnRLaW5kICE9IFwidGV4dFwiIHx8ICFpc1BsYWluT2JqZWN0KG1hcHBpbmdDYW5kaWRhdGUpIHx8IG1hcHBpbmdDYW5kaWRhdGUuc2NoZW1hICE9IFwiU2VtYW50aWZvbGRNYXBwaW5nXCIgfHxcbiAgICAgICFpc1BsYWluT2JqZWN0KG1hcHBpbmdDYW5kaWRhdGUuZ2VuZXJhdGVkKSB8fCBtYXBwaW5nQ2FuZGlkYXRlLmdlbmVyYXRlZC5maWxlbmFtZSAhPSBhcnRpZmFjdFBhdGggfHxcbiAgICAgIG1hcHBpbmdDYW5kaWRhdGUuZ2VuZXJhdGVkLmNvbnRlbnQgIT0gY29udGVudCB8fCAhaXNQbGFpbk9iamVjdCh2YWx1ZS5zb3VyY2VNYXApKSB7XG4gICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIG1pc21hdGNoZWQgcmljaCBvciBTb3VyY2UgTWFwIHByb3ZlbmFuY2UuYCwgdGFyZ2V0KVxuICAgIH1cbiAgICBpZiAodmFsdWUuc291cmNlTWFwRmlsZW5hbWUgIT09IHVuZGVmaW5lZCAmJiAhaXNWYWxpZEZpbGVuYW1lTWV0YWRhdGEodmFsdWUuc291cmNlTWFwRmlsZW5hbWUpKSB7XG4gICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgU291cmNlIE1hcCBmaWxlbmFtZSBtZXRhZGF0YS5gLCB0YXJnZXQpXG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmcgPSBmaW5hbGl6ZU1hcHBpbmcobWFwcGluZ0NhbmRpZGF0ZSlcbiAgICBjb25zdCBzb3VyY2VNYXAgPSB2YWxpZGF0ZVNvdXJjZU1hcCh2YWx1ZS5zb3VyY2VNYXAsIGFydGlmYWN0UGF0aCwgdGFyZ2V0KVxuICAgIGNvbnN0IHByb2plY3RlZFNvdXJjZU1hcCA9IHRvU291cmNlTWFwVjMobWFwcGluZylcblxuICAgIGlmICghc2FtZUpzb25WYWx1ZShzb3VyY2VNYXAsIHByb2plY3RlZFNvdXJjZU1hcCkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgU291cmNlIE1hcCBwcm92ZW5hbmNlIHRoYXQgY29udHJhZGljdHMgaXRzIHJpY2ggbWFwcGluZy5gLCB0YXJnZXQpXG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgICAga2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwidGV4dFwiKSxcbiAgICAgIG1hcHBpbmcsXG4gICAgICBzb3VyY2VNYXAsXG4gICAgICBzb3VyY2VNYXBGaWxlbmFtZTogdmFsdWUuc291cmNlTWFwRmlsZW5hbWVcbiAgICB9KVxuICB9XG5cbiAgaWYgKHZhbHVlLmtpbmQgPT0gXCJieXRlc1wiKSB7XG4gICAgaWYgKGNvbnRlbnRLaW5kICE9IFwiYmluYXJ5XCIpIGludmFsaWRBcnRpZmFjdFNldChgQnl0ZSBwcm92ZW5hbmNlIHJlcXVpcmVzIGJpbmFyeSBjb250ZW50IGZvciAnJHthcnRpZmFjdFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplQnl0ZU1hcHBpbmcodmFsdWUubWFwcGluZylcblxuICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZC5wYXRoICE9IGFydGlmYWN0UGF0aCB8fCBtYXBwaW5nLmdlbmVyYXRlZC5ieXRlTGVuZ3RoICE9IC8qKiBAdHlwZSB7VWludDhBcnJheX0gKi8gKGNvbnRlbnQpLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgQnl0ZSBwcm92ZW5hbmNlIGRvZXMgbm90IG1hdGNoIGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nLmAsIHRhcmdldClcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7a2luZDogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiYnl0ZXNcIiksIG1hcHBpbmd9KVxuICB9XG5cbiAgcmV0dXJuIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIHVua25vd24gcHJvdmVuYW5jZSBraW5kLmAsIHRhcmdldClcbn1cblxuLyoqXG4gKiBGcmVlemVzIG9uZSB2YWxpZGF0ZWQgYXJ0aWZhY3QgcmVjb3JkLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gYXJ0aWZhY3QgLSBWYWxpZGF0ZWQgZmllbGRzLlxuICogQHJldHVybnMge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pn0gRnJvemVuIHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gZnJlZXplQXJ0aWZhY3QoYXJ0aWZhY3QpIHtcbiAgaWYgKGFydGlmYWN0LmNvbnRlbnRLaW5kID09IFwiYmluYXJ5XCIgJiYgYXJ0aWZhY3QuY29udGVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCBjb250ZW50ID0gYXJ0aWZhY3QuY29udGVudFxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFydGlmYWN0LCBcImNvbnRlbnRcIiwge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjb250ZW50KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShhcnRpZmFjdClcbn1cblxuLyoqXG4gKiBMaXN0cyBldmVyeSBkaXJlY3RvcnkgYSBzYWZlIHJlbGF0aXZlIFBPU0lYIGFydGlmYWN0IHBhdGggcmVxdWlyZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gVmFsaWRhdGVkIGFydGlmYWN0IHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IE9yZGVyZWQgcGFyZW50IGRpcmVjdG9yeSBwYXRocy5cbiAqL1xuZnVuY3Rpb24gYXJ0aWZhY3REaXJlY3RvcnlQYXRocyhhcnRpZmFjdFBhdGgpIHtcbiAgY29uc3QgcGFydHMgPSBhcnRpZmFjdFBhdGguc3BsaXQoXCIvXCIpXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gW11cblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGFydHMubGVuZ3RoOyBpbmRleCArPSAxKSBkaXJlY3Rvcmllcy5wdXNoKHBhcnRzLnNsaWNlKDAsIGluZGV4KS5qb2luKFwiL1wiKSlcblxuICByZXR1cm4gZGlyZWN0b3JpZXNcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBub3JtYWxpemVkIGFydGlmYWN0LXNldCBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBGYWlsdXJlIGRldGFpbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcGFyYW0ge3Vua25vd259IFtlcnJvcl0gLSBQcmVzZXJ2ZWQgdmFsaWRhdGlvbiBjYXVzZS5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZEFydGlmYWN0U2V0KG1lc3NhZ2UsIHRhcmdldCwgZXJyb3IpIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY2F1c2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgbGFuZ3VhZ2U6IHRhcmdldCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbi8qKlxuICogRGVyaXZlcyBhIHNhZmUgZGlhZ25vc3RpYyBpZGVudGl0eSBmcm9tIGFuIHVua25vd24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgc2V0LlxuICogQHJldHVybnMge3N0cmluZ30gRGlhZ25vc3RpYyBpZGVudGl0eS5cbiAqL1xuZnVuY3Rpb24gdGFyZ2V0T2YodmFsdWUpIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS50YXJnZXQgPT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS50YXJnZXQubGVuZ3RoID4gMCA/IHZhbHVlLnRhcmdldCA6IFwiYXJ0aWZhY3RcIlxufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgYW4gb3JkaW5hcnkgc3RyaW5nLWtleWVkIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09IE9iamVjdC5wcm90b3R5cGVcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW4gYXJ0aWZhY3QtbGV2ZWwgcmVsYXRlZCBvcmlnaW4gd2l0aG91dCBpbnRlcnByZXRpbmcgc291cmNlIG9mZnNldHMgYXMgZ2VuZXJhdGVkIGJ5dGVzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIFJlbGF0ZWQtb3JpZ2luIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE9yaWdpbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWxhdGVkT3JpZ2lufSBEZXRhY2hlZCByZWxhdGVkIG9yaWdpbi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWxhdGVkT3JpZ2luKHZhbHVlLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUuc291cmNlSWQgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5zb3VyY2VJZC5sZW5ndGggPT0gMCB8fFxuICAgICFpc1BsYWluT2JqZWN0KHZhbHVlLmxvY2F0aW9uKSB8fCB0eXBlb2YgdmFsdWUubG9jYXRpb24uZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sb2NhdGlvbi5maWxlbmFtZS5sZW5ndGggPT0gMCB8fFxuICAgICF2YWxpZFNvdXJjZVBvaW50KHZhbHVlLmxvY2F0aW9uLnN0YXJ0KSB8fCAhdmFsaWRTb3VyY2VQb2ludCh2YWx1ZS5sb2NhdGlvbi5lbmQpIHx8XG4gICAgdmFsdWUubG9jYXRpb24uZW5kLm9mZnNldCA8IHZhbHVlLmxvY2F0aW9uLnN0YXJ0Lm9mZnNldCB8fCAhaXNTb3VyY2VSYW5nZU9yZGVyZWQodmFsdWUubG9jYXRpb24uc3RhcnQsIHZhbHVlLmxvY2F0aW9uLmVuZCkpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBtYWxmb3JtZWQgcmVsYXRlZCBvcmlnaW4gJHtpbmRleH0uYCwgdGFyZ2V0KVxuICB9XG5cbiAgcmV0dXJuIGRlZXBGcmVlemUoe1xuICAgIGxvY2F0aW9uOiB7XG4gICAgICBlbmQ6IHsuLi52YWx1ZS5sb2NhdGlvbi5lbmR9LFxuICAgICAgZmlsZW5hbWU6IHZhbHVlLmxvY2F0aW9uLmZpbGVuYW1lLFxuICAgICAgc3RhcnQ6IHsuLi52YWx1ZS5sb2NhdGlvbi5zdGFydH1cbiAgICB9LFxuICAgIHNvdXJjZUlkOiB2YWx1ZS5zb3VyY2VJZCxcbiAgICAuLi4ob3B0aW9uYWxTdHJpbmcodmFsdWUubm9kZUlkLCBcIm5vZGVJZFwiLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpKSxcbiAgICAuLi4ob3B0aW9uYWxTdHJpbmcodmFsdWUuc3ltYm9sSWQsIFwic3ltYm9sSWRcIiwgYXJ0aWZhY3RQYXRoLCBpbmRleCwgdGFyZ2V0KSksXG4gICAgLi4uKG9wdGlvbmFsU3RyaW5nKHZhbHVlLnJvbGUsIFwicm9sZVwiLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpKVxuICB9KVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgb3B0aW9uYWwgcmVsYXRlZC1vcmlnaW4gc3RyaW5nIGZpZWxkLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gT3duaW5nIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBPcmlnaW4gaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFByZXNlbnQgdmFsaWRhdGVkIHByb3BlcnR5IG9yIGFuIGVtcHR5IHJlY29yZC5cbiAqL1xuZnVuY3Rpb24gb3B0aW9uYWxTdHJpbmcodmFsdWUsIHByb3BlcnR5LCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB7fVxuICBpZiAodHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoID09IDApIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBpbnZhbGlkICR7cHJvcGVydHl9IGluIHJlbGF0ZWQgb3JpZ2luICR7aW5kZXh9LmAsIHRhcmdldClcbiAgfVxuXG4gIHJldHVybiB7W3Byb3BlcnR5XTogdmFsdWV9XG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBVVEYtMTYgc291cmNlIHBvaW50LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBwb2ludC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSBXaGV0aGVyIHRoZSBwb2ludCBpcyBzdHJ1Y3R1cmFsbHkgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkU291cmNlUG9pbnQodmFsdWUpIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5saW5lID09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUubGluZSkgJiYgdmFsdWUubGluZSA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUuY29sdW1uID09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUuY29sdW1uKSAmJiB2YWx1ZS5jb2x1bW4gPiAwICYmXG4gICAgdHlwZW9mIHZhbHVlLm9mZnNldCA9PSBcIm51bWJlclwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlLm9mZnNldCkgJiYgdmFsdWUub2Zmc2V0ID49IDBcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW5kIGRldGFjaGVzIHRoZSBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24gY2FycmllZCBieSBhIHRleHQgYXJ0aWZhY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gU291cmNlIE1hcCBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gT3duaW5nIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9IERldGFjaGVkIFNvdXJjZSBNYXAuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU291cmNlTWFwKHZhbHVlLCBhcnRpZmFjdFBhdGgsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpIHx8IHZhbHVlLnZlcnNpb24gIT0gMyB8fCB2YWx1ZS5maWxlICE9IGFydGlmYWN0UGF0aCB8fCB0eXBlb2YgdmFsdWUubWFwcGluZ3MgIT0gXCJzdHJpbmdcIiB8fFxuICAgICFpc0RlbnNlQXJyYXkodmFsdWUubmFtZXMpIHx8ICF2YWx1ZS5uYW1lcy5ldmVyeSgobmFtZSkgPT4gdHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIikgfHxcbiAgICAhaXNEZW5zZUFycmF5KHZhbHVlLnNvdXJjZXMpIHx8ICF2YWx1ZS5zb3VyY2VzLmV2ZXJ5KChzb3VyY2UpID0+IHR5cGVvZiBzb3VyY2UgPT0gXCJzdHJpbmdcIikgfHxcbiAgICAodmFsdWUuc291cmNlc0NvbnRlbnQgIT09IHVuZGVmaW5lZCAmJiAoIWlzRGVuc2VBcnJheSh2YWx1ZS5zb3VyY2VzQ29udGVudCkgfHxcbiAgICAgICF2YWx1ZS5zb3VyY2VzQ29udGVudC5ldmVyeSgoc291cmNlKSA9PiBzb3VyY2UgPT0gbnVsbCB8fCB0eXBlb2Ygc291cmNlID09IFwic3RyaW5nXCIpKSkpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIG1hbGZvcm1lZCBTb3VyY2UgTWFwIHYzIHByb3ZlbmFuY2UuYCwgdGFyZ2V0KVxuICB9XG4gIHZhbGlkYXRlRW5jb2RlZFNvdXJjZU1hcE1hcHBpbmdzKFxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSAqLyAoLyoqIEB0eXBlIHt1bmtub3dufSAqLyAodmFsdWUpKSxcbiAgICBhcnRpZmFjdFBhdGgsXG4gICAgdGFyZ2V0XG4gIClcblxuICBjb25zdCBkZXRhY2hlZCA9IC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSkpXG5cbiAgcmV0dXJuIGRlZXBGcmVlemUoLyoqIEB0eXBlIHtpbXBvcnQoXCJAanJpZGdld2VsbC9nZW4tbWFwcGluZ1wiKS5FbmNvZGVkU291cmNlTWFwfSAqLyAoZGV0YWNoZWQpKVxufVxuXG4vKipcbiAqIERlY29kZXMgYW5kIHZhbGlkYXRlcyB0aGUgU291cmNlIE1hcCBwYXlsb2FkIHdpdGggdGhlIGluc3RhbGxlZCBtYXBwaW5nIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9IHNvdXJjZU1hcCAtIFN0cnVjdHVyYWxseSB2YWxpZGF0ZWQgbWFwLlxuICogQHBhcmFtIHtzdHJpbmd9IGFydGlmYWN0UGF0aCAtIE93bmluZyBhcnRpZmFjdCBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVuY29kZWRTb3VyY2VNYXBNYXBwaW5ncyhzb3VyY2VNYXAsIGFydGlmYWN0UGF0aCwgdGFyZ2V0KSB7XG4gIC8qKiBAdHlwZSB7UmVhZG9ubHk8aW1wb3J0KFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiKS5Tb3VyY2VNYXBTZWdtZW50W11bXT59ICovXG4gIGxldCBkZWNvZGVkXG4gIGxldCBjYW5vbmljYWxNYXBwaW5nc1xuXG4gIHRyeSB7XG4gICAgZGVjb2RlZCA9IGRlY29kZWRNYXBwaW5ncyhuZXcgVHJhY2VNYXAoc291cmNlTWFwKSlcbiAgICBjb25zdCBkZWNvZGVkTWFwID0gLyoqIEB0eXBlIHtpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLkRlY29kZWRTb3VyY2VNYXB9ICovICh7XG4gICAgICAuLi5zb3VyY2VNYXAsXG4gICAgICBtYXBwaW5nczogc3RydWN0dXJlZENsb25lKGRlY29kZWQpXG4gICAgfSlcblxuICAgIGNhbm9uaWNhbE1hcHBpbmdzID0gZW5jb2RlZE1hcHBpbmdzKHByZXNvcnRlZERlY29kZWRNYXAoZGVjb2RlZE1hcCkpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW52YWxpZEFydGlmYWN0U2V0KGBUZXh0IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBpbnZhbGlkIGVuY29kZWQgU291cmNlIE1hcCBtYXBwaW5ncy5gLCB0YXJnZXQsIGVycm9yKVxuICB9XG5cbiAgaWYgKGNhbm9uaWNhbE1hcHBpbmdzICE9IHNvdXJjZU1hcC5tYXBwaW5ncyB8fFxuICAgICF2YWxpZERlY29kZWRTb3VyY2VNYXBNYXBwaW5ncyhkZWNvZGVkLCBzb3VyY2VNYXAuc291cmNlcy5sZW5ndGgsIHNvdXJjZU1hcC5uYW1lcy5sZW5ndGgpKSB7XG4gICAgaW52YWxpZEFydGlmYWN0U2V0KGBUZXh0IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBpbnZhbGlkIGVuY29kZWQgU291cmNlIE1hcCBtYXBwaW5ncy5gLCB0YXJnZXQpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgZGVjb2RlZCBTb3VyY2UgTWFwIHNlZ21lbnQgc2hhcGUgYW5kIHJlZmVyZW5jZWQgaW5kaWNlcy5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8aW1wb3J0KFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiKS5Tb3VyY2VNYXBTZWdtZW50W11bXT59IGxpbmVzIC0gRGVjb2RlZCBtYXBwaW5nIGxpbmVzLlxuICogQHBhcmFtIHtudW1iZXJ9IHNvdXJjZUNvdW50IC0gRGVjbGFyZWQgc291cmNlIGNvdW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG5hbWVDb3VudCAtIERlY2xhcmVkIG5hbWUgY291bnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBldmVyeSBzZWdtZW50IGlzIHNlbWFudGljYWxseSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWREZWNvZGVkU291cmNlTWFwTWFwcGluZ3MobGluZXMsIHNvdXJjZUNvdW50LCBuYW1lQ291bnQpIHtcbiAgcmV0dXJuIGxpbmVzLmV2ZXJ5KChsaW5lKSA9PiBsaW5lLmV2ZXJ5KChzZWdtZW50KSA9PiB7XG4gICAgaWYgKHNlZ21lbnQubGVuZ3RoICE9IDEgJiYgc2VnbWVudC5sZW5ndGggIT0gNCAmJiBzZWdtZW50Lmxlbmd0aCAhPSA1KSByZXR1cm4gZmFsc2VcbiAgICBpZiAoIXNlZ21lbnQuZXZlcnkoKGZpZWxkKSA9PiBOdW1iZXIuaXNTYWZlSW50ZWdlcihmaWVsZCkgJiYgZmllbGQgPj0gMCkpIHJldHVybiBmYWxzZVxuICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PSAxKSByZXR1cm4gdHJ1ZVxuICAgIGlmIChzZWdtZW50WzFdID49IHNvdXJjZUNvdW50KSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiBzZWdtZW50Lmxlbmd0aCA9PSA0IHx8IHNlZ21lbnRbNF0gPCBuYW1lQ291bnRcbiAgfSkpXG59XG5cbi8qKlxuICogQ29tcGFyZXMgZGV0YWNoZWQgSlNPTiB2YWx1ZXMgd2l0aG91dCBkZXBlbmRpbmcgb24gY2FsbGVyIG9iamVjdC1rZXkgb3JkZXIuXG4gKiBAcGFyYW0ge3Vua25vd259IGxlZnQgLSBGaXJzdCBKU09OIHZhbHVlLlxuICogQHBhcmFtIHt1bmtub3dufSByaWdodCAtIFNlY29uZCBKU09OIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgYm90aCB2YWx1ZXMgYXJlIHN0cnVjdHVyYWxseSBpZGVudGljYWwuXG4gKi9cbmZ1bmN0aW9uIHNhbWVKc29uVmFsdWUobGVmdCwgcmlnaHQpIHtcbiAgaWYgKGxlZnQgPT09IHJpZ2h0KSByZXR1cm4gdHJ1ZVxuICBpZiAoQXJyYXkuaXNBcnJheShsZWZ0KSB8fCBBcnJheS5pc0FycmF5KHJpZ2h0KSkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGxlZnQpICYmIEFycmF5LmlzQXJyYXkocmlnaHQpICYmIGxlZnQubGVuZ3RoID09IHJpZ2h0Lmxlbmd0aCAmJlxuICAgICAgbGVmdC5ldmVyeSgoZW50cnksIGluZGV4KSA9PiBzYW1lSnNvblZhbHVlKGVudHJ5LCByaWdodFtpbmRleF0pKVxuICB9XG4gIGlmICghaXNQbGFpbk9iamVjdChsZWZ0KSB8fCAhaXNQbGFpbk9iamVjdChyaWdodCkpIHJldHVybiBmYWxzZVxuICBjb25zdCBsZWZ0S2V5cyA9IE9iamVjdC5rZXlzKGxlZnQpXG4gIGNvbnN0IHJpZ2h0S2V5cyA9IE9iamVjdC5rZXlzKHJpZ2h0KVxuXG4gIHJldHVybiBsZWZ0S2V5cy5sZW5ndGggPT0gcmlnaHRLZXlzLmxlbmd0aCAmJlxuICAgIGxlZnRLZXlzLmV2ZXJ5KChrZXkpID0+IE9iamVjdC5oYXNPd24ocmlnaHQsIGtleSkgJiYgc2FtZUpzb25WYWx1ZShsZWZ0W2tleV0sIHJpZ2h0W2tleV0pKVxufVxuXG4vKipcbiAqIERlZXBseSBmcmVlemVzIGEgZGV0YWNoZWQgSlNPTiB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbHVlIC0gRGV0YWNoZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7VH0gRnJvemVuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cbiAgZm9yIChjb25zdCBuZXN0ZWQgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIGRlZXBGcmVlemUobmVzdGVkKVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHZhbHVlKVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/c-validation.js"],"names":[],"mappings":"AAII,YAAyD,cAAc,GAA7D,OAAO,sBAAsB,EAAE,cAAc,CAAgB;AACvE,YAAqD,UAAU,GAArD,OAAO,sBAAsB,EAAE,UAAU,CAAY;AAC/D,YAAyD,cAAc,GAA7D,OAAO,sBAAsB,EAAE,cAAc,CAAgB;AAG3E,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,QAAQ,CAAA;AAEzC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAH3B,cAG2B,GAFzB,IAAI,
|
|
1
|
+
{"version":3,"file":"c-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/c-validation.js"],"names":[],"mappings":"AAII,YAAyD,cAAc,GAA7D,OAAO,sBAAsB,EAAE,cAAc,CAAgB;AACvE,YAAqD,UAAU,GAArD,OAAO,sBAAsB,EAAE,UAAU,CAAY;AAC/D,YAAyD,cAAc,GAA7D,OAAO,sBAAsB,EAAE,cAAc,CAAgB;AAG3E,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,QAAQ,CAAA;AAEzC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAH3B,cAG2B,GAFzB,IAAI,CAwEhB"}
|
|
@@ -73,8 +73,12 @@ export function validateCMemory(module) {
|
|
|
73
73
|
lengths.set(name, left.get(name) === right.get(name) ? left.get(name) : undefined);
|
|
74
74
|
arena.bytes = leftArena.bytes < rightArena.bytes ? leftArena.bytes : rightArena.bytes;
|
|
75
75
|
}
|
|
76
|
-
else
|
|
77
|
-
|
|
76
|
+
else if (statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement" ||
|
|
77
|
+
statement.kind == "ReturnStatement") {
|
|
78
|
+
const expression = statement.expression;
|
|
79
|
+
if (expression)
|
|
80
|
+
size(expression, lengths, arena);
|
|
81
|
+
}
|
|
78
82
|
}
|
|
79
83
|
return lengths;
|
|
80
84
|
}
|
|
@@ -82,4 +86,4 @@ export function validateCMemory(module) {
|
|
|
82
86
|
visit(declaration.body, new Map(), { bytes: 0n });
|
|
83
87
|
visit(module.entryPoint.body, new Map(), { bytes: 0n });
|
|
84
88
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy12YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2MtdmFsaWRhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFdEQsOEVBQThFO0FBQzlFLHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFFOUUsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQTtBQUMvQyw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFBO0FBQ3pDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFBO0FBQ2xDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQU07SUFDcEM7Ozs7OztPQU1HO0lBQ0gsU0FBUyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLO1FBQ3RDLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFFakUsSUFBSSxLQUFLLEdBQUcsS0FBSztnQkFBRSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsa0VBQWtFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3RJLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxzQkFBc0I7WUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xGLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxDQUFDLFNBQVM7Z0JBQUUsSUFB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QyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ3JILEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFBO1lBQ3ZGLENBQUM7O2dCQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVM7UUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUE7SUFDM0YsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQTtBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljTW9kdWxlICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IEV4cHJlc3Npb24gKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFNvdXJjZUxvY2F0aW9uICovXG5cbmNvbnN0IG1heGltdW1PYmplY3RCeXRlcyA9IDkyMjMzNzIwMzY4NTQ3NzU4MDduXG4vKiogTWF4aW11bSBVVEYtMTYgaW5wdXQgYWNjZXB0ZWQgYnkgdGhlIHVuY2hhbmdlZCBxdWFsaWZpZWQgbGVnYWN5IHBhcnNlci4gKi9cbmV4cG9ydCBjb25zdCBtYXhpbXVtQ1NvdXJjZUxlbmd0aCA9IDMyNzY3XG5jb25zdCBhbGxvY2F0aW9uTWV0YWRhdGFCeXRlcyA9IDhuXG4vKipcbiAqIFJlamVjdHMgY29tcGlsZS10aW1lLWtub3duIG9iamVjdCBhbmQgYXJlbmEgc2l6ZXM7IHVua25vd24gcnVudGltZSBsZW5ndGhzIHJlbWFpbiBjaGVja2VkIGluIEMuXG4gKiBAcGFyYW0ge1NlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTaGFwZS90eXBlLXZhbGlkYXRlZCBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ01lbW9yeShtb2R1bGUpIHtcbiAgLyoqXG4gICAqIENoZWNrcyBvbmUgZXhwcmVzc2lvbiBhbmQgaXRzIGtub3duIGJ5dGUgbGVuZ3RocyB3aXRob3V0IGZvbGRpbmcgdGhlIElSLlxuICAgKiBAcGFyYW0ge0V4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIGJpZ2ludCB8IHVuZGVmaW5lZD59IGxlbmd0aHMgLSBWaXNpYmxlIGltbXV0YWJsZSBvciBhc3NpZ25lZCBsZW5ndGhzLlxuICAgKiBAcGFyYW0ge3tieXRlczogYmlnaW50fX0gYXJlbmEgLSBLbm93biBtaW5pbXVtIGFsbG9jYXRpb25zIGluIHRoaXMgbGV4aWNhbCBwYXRoLlxuICAgKiBAcmV0dXJucyB7YmlnaW50IHwgdW5kZWZpbmVkfSBLbm93biBVVEYtOCBieXRlIGxlbmd0aC5cbiAgICovXG4gIGZ1bmN0aW9uIHNpemUoZXhwcmVzc2lvbiwgbGVuZ3RocywgYXJlbmEpIHtcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICBjb25zdCBieXRlcyA9IEJpZ0ludChCdWZmZXIuYnl0ZUxlbmd0aChleHByZXNzaW9uLnZhbHVlLCBcInV0ZjhcIikpXG5cbiAgICAgIGlmIChieXRlcyA+IDQwOTVuKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJjXCIsIFwiVVRGLTggbGl0ZXJhbCBleGNlZWRzIHRoZSBzdHJpY3QgQzE3IDQwOTUtYnl0ZSB0cmFuc2xhdGlvbiBsaW1pdFwiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgICAgcmV0dXJuIGJ5dGVzXG4gICAgfVxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZXR1cm4gbGVuZ3Rocy5nZXQoZXhwcmVzc2lvbi5uYW1lKVxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGV4cHJlc3Npb24uYXJndW1lbnRzKSBzaXplKGFyZ3VtZW50LCBsZW5ndGhzLCBhcmVuYSlcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSBzaXplKGV4cHJlc3Npb24ub3BlcmFuZCwgbGVuZ3RocywgYXJlbmEpXG4gICAgZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBsZWZ0ID0gc2l6ZShleHByZXNzaW9uLmxlZnQsIGxlbmd0aHMsIGFyZW5hKVxuICAgICAgY29uc3QgcmlnaHQgPSBzaXplKGV4cHJlc3Npb24ucmlnaHQsIGxlbmd0aHMsIGFyZW5hKVxuXG4gICAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdDb25jYXRcIikge1xuICAgICAgICBjb25zdCBtaW5pbXVtID0gKGxlZnQgPz8gMG4pICsgKHJpZ2h0ID8/IDBuKVxuXG4gICAgICAgIGFyZW5hLmJ5dGVzICs9IGFsbG9jYXRpb25NZXRhZGF0YUJ5dGVzICsgbWluaW11bVxuICAgICAgICBpZiAobWluaW11bSA+IG1heGltdW1PYmplY3RCeXRlcyAtIGFsbG9jYXRpb25NZXRhZGF0YUJ5dGVzIHx8IGFyZW5hLmJ5dGVzID4gbWF4aW11bU9iamVjdEJ5dGVzKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiY1wiLCBcImtub3duIGltbXV0YWJsZSBzbGljZSBvciBtb2R1bGUgYXJlbmEgc2l6ZSBleGNlZWRzIFBUUkRJRkZfTUFYXCIsIGV4cHJlc3Npb24ubG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbGVmdCArIHJpZ2h0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9wYWdhdGVzIGtub3duIGxvY2FsIGRlc2NyaXB0b3Igc2l6ZXMgdGhyb3VnaCBzdHJhaWdodC1saW5lIGNvZGUgYW5kIGJvdGggYnJhbmNoIHBhdGhzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIGJpZ2ludCB8IHVuZGVmaW5lZD59IGluaGVyaXRlZCAtIFZpc2libGUga25vd24gbGVuZ3Rocy5cbiAgICogQHBhcmFtIHt7Ynl0ZXM6IGJpZ2ludH19IGFyZW5hIC0gS25vd24gcGF0aCBhbGxvY2F0aW9uIHNpemUuXG4gICAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBiaWdpbnQgfCB1bmRlZmluZWQ+fSBPdXRnb2luZyBrbm93biBsZW5ndGhzLlxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQoYmxvY2ssIGluaGVyaXRlZCwgYXJlbmEpIHtcbiAgICBjb25zdCBsZW5ndGhzID0gbmV3IE1hcChpbmhlcml0ZWQpXG5cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBibG9jay5zdGF0ZW1lbnRzKSB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIGxlbmd0aHMuc2V0KHN0YXRlbWVudC5uYW1lLCBzaXplKHN0YXRlbWVudC5pbml0aWFsaXplciwgbGVuZ3RocywgYXJlbmEpKVxuICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIpIGxlbmd0aHMuc2V0KHN0YXRlbWVudC50YXJnZXQubmFtZSwgc2l6ZShzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgbGVuZ3RocywgYXJlbmEpKVxuICAgICAgZWxzZSBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHNpemUoc3RhdGVtZW50LmNvbmRpdGlvbiwgbGVuZ3RocywgYXJlbmEpXG4gICAgICAgIGNvbnN0IGxlZnRBcmVuYSA9IHtieXRlczogYXJlbmEuYnl0ZXN9XG4gICAgICAgIGNvbnN0IHJpZ2h0QXJlbmEgPSB7Ynl0ZXM6IGFyZW5hLmJ5dGVzfVxuICAgICAgICBjb25zdCBsZWZ0ID0gdmlzaXQoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGxlbmd0aHMsIGxlZnRBcmVuYSlcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGF0ZW1lbnQuYWx0ZXJuYXRlID8gdmlzaXQoc3RhdGVtZW50LmFsdGVybmF0ZSwgbGVuZ3RocywgcmlnaHRBcmVuYSkgOiBsZW5ndGhzXG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGxlbmd0aHMua2V5cygpKSBsZW5ndGhzLnNldChuYW1lLCBsZWZ0LmdldChuYW1lKSA9PT0gcmlnaHQuZ2V0KG5hbWUpID8gbGVmdC5nZXQobmFtZSkgOiB1bmRlZmluZWQpXG4gICAgICAgIGFyZW5hLmJ5dGVzID0gbGVmdEFyZW5hLmJ5dGVzIDwgcmlnaHRBcmVuYS5ieXRlcyA/IGxlZnRBcmVuYS5ieXRlcyA6IHJpZ2h0QXJlbmEuYnl0ZXNcbiAgICAgIH0gZWxzZSBzaXplKHN0YXRlbWVudC5leHByZXNzaW9uLCBsZW5ndGhzLCBhcmVuYSlcbiAgICB9XG4gICAgcmV0dXJuIGxlbmd0aHNcbiAgfVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgdmlzaXQoZGVjbGFyYXRpb24uYm9keSwgbmV3IE1hcCgpLCB7Ynl0ZXM6IDBufSlcbiAgdmlzaXQobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbmV3IE1hcCgpLCB7Ynl0ZXM6IDBufSlcbn1cbiJdfQ==
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYy12YWxpZGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL2MtdmFsaWRhdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFFdEQsOEVBQThFO0FBQzlFLHNFQUFzRTtBQUN0RSw4RUFBOEU7QUFFOUUsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQTtBQUMvQyw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFBO0FBQ3pDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFBO0FBQ2xDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQU07SUFDcEM7Ozs7OztPQU1HO0lBQ0gsU0FBUyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLO1FBQ3RDLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFFakUsSUFBSSxLQUFLLEdBQUcsS0FBSztnQkFBRSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsa0VBQWtFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3RJLE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxzQkFBc0I7WUFBRSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xGLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxDQUFDLFNBQVM7Z0JBQUUsSUFB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QyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ3JILEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFBO1lBQ3ZGLENBQUM7aUJBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksZ0JBQWdCO2dCQUN0RixTQUFTLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUE7Z0JBRXZDLElBQUksVUFBVTtvQkFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsRCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFFRCxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxTQUFTO1FBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFBO0lBQzNGLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUE7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpY01vZHVsZSAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBFeHByZXNzaW9uICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2VMb2NhdGlvbiAqL1xuXG5jb25zdCBtYXhpbXVtT2JqZWN0Qnl0ZXMgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3blxuLyoqIE1heGltdW0gVVRGLTE2IGlucHV0IGFjY2VwdGVkIGJ5IHRoZSB1bmNoYW5nZWQgcXVhbGlmaWVkIGxlZ2FjeSBwYXJzZXIuICovXG5leHBvcnQgY29uc3QgbWF4aW11bUNTb3VyY2VMZW5ndGggPSAzMjc2N1xuY29uc3QgYWxsb2NhdGlvbk1ldGFkYXRhQnl0ZXMgPSA4blxuLyoqXG4gKiBSZWplY3RzIGNvbXBpbGUtdGltZS1rbm93biBvYmplY3QgYW5kIGFyZW5hIHNpemVzOyB1bmtub3duIHJ1bnRpbWUgbGVuZ3RocyByZW1haW4gY2hlY2tlZCBpbiBDLlxuICogQHBhcmFtIHtTZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2hhcGUvdHlwZS12YWxpZGF0ZWQgbW9kdWxlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNNZW1vcnkobW9kdWxlKSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgb25lIGV4cHJlc3Npb24gYW5kIGl0cyBrbm93biBieXRlIGxlbmd0aHMgd2l0aG91dCBmb2xkaW5nIHRoZSBJUi5cbiAgICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBiaWdpbnQgfCB1bmRlZmluZWQ+fSBsZW5ndGhzIC0gVmlzaWJsZSBpbW11dGFibGUgb3IgYXNzaWduZWQgbGVuZ3Rocy5cbiAgICogQHBhcmFtIHt7Ynl0ZXM6IGJpZ2ludH19IGFyZW5hIC0gS25vd24gbWluaW11bSBhbGxvY2F0aW9ucyBpbiB0aGlzIGxleGljYWwgcGF0aC5cbiAgICogQHJldHVybnMge2JpZ2ludCB8IHVuZGVmaW5lZH0gS25vd24gVVRGLTggYnl0ZSBsZW5ndGguXG4gICAqL1xuICBmdW5jdGlvbiBzaXplKGV4cHJlc3Npb24sIGxlbmd0aHMsIGFyZW5hKSB7XG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikge1xuICAgICAgY29uc3QgYnl0ZXMgPSBCaWdJbnQoQnVmZmVyLmJ5dGVMZW5ndGgoZXhwcmVzc2lvbi52YWx1ZSwgXCJ1dGY4XCIpKVxuXG4gICAgICBpZiAoYnl0ZXMgPiA0MDk1bikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFwiY1wiLCBcIlVURi04IGxpdGVyYWwgZXhjZWVkcyB0aGUgc3RyaWN0IEMxNyA0MDk1LWJ5dGUgdHJhbnNsYXRpb24gbGltaXRcIiwgZXhwcmVzc2lvbi5sb2NhdGlvbilcbiAgICAgIHJldHVybiBieXRlc1xuICAgIH1cbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIGxlbmd0aHMuZ2V0KGV4cHJlc3Npb24ubmFtZSlcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBleHByZXNzaW9uLmFyZ3VtZW50cykgc2l6ZShhcmd1bWVudCwgbGVuZ3RocywgYXJlbmEpXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgc2l6ZShleHByZXNzaW9uLm9wZXJhbmQsIGxlbmd0aHMsIGFyZW5hKVxuICAgIGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgICAgY29uc3QgbGVmdCA9IHNpemUoZXhwcmVzc2lvbi5sZWZ0LCBsZW5ndGhzLCBhcmVuYSlcbiAgICAgIGNvbnN0IHJpZ2h0ID0gc2l6ZShleHByZXNzaW9uLnJpZ2h0LCBsZW5ndGhzLCBhcmVuYSlcblxuICAgICAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nQ29uY2F0XCIpIHtcbiAgICAgICAgY29uc3QgbWluaW11bSA9IChsZWZ0ID8/IDBuKSArIChyaWdodCA/PyAwbilcblxuICAgICAgICBhcmVuYS5ieXRlcyArPSBhbGxvY2F0aW9uTWV0YWRhdGFCeXRlcyArIG1pbmltdW1cbiAgICAgICAgaWYgKG1pbmltdW0gPiBtYXhpbXVtT2JqZWN0Qnl0ZXMgLSBhbGxvY2F0aW9uTWV0YWRhdGFCeXRlcyB8fCBhcmVuYS5ieXRlcyA+IG1heGltdW1PYmplY3RCeXRlcykge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImNcIiwgXCJrbm93biBpbW11dGFibGUgc2xpY2Ugb3IgbW9kdWxlIGFyZW5hIHNpemUgZXhjZWVkcyBQVFJESUZGX01BWFwiLCBleHByZXNzaW9uLmxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGxlZnQgKyByaWdodFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUHJvcGFnYXRlcyBrbm93biBsb2NhbCBkZXNjcmlwdG9yIHNpemVzIHRocm91Z2ggc3RyYWlnaHQtbGluZSBjb2RlIGFuZCBib3RoIGJyYW5jaCBwYXRocy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBiaWdpbnQgfCB1bmRlZmluZWQ+fSBpbmhlcml0ZWQgLSBWaXNpYmxlIGtub3duIGxlbmd0aHMuXG4gICAqIEBwYXJhbSB7e2J5dGVzOiBiaWdpbnR9fSBhcmVuYSAtIEtub3duIHBhdGggYWxsb2NhdGlvbiBzaXplLlxuICAgKiBAcmV0dXJucyB7TWFwPHN0cmluZywgYmlnaW50IHwgdW5kZWZpbmVkPn0gT3V0Z29pbmcga25vd24gbGVuZ3Rocy5cbiAgICovXG4gIGZ1bmN0aW9uIHZpc2l0KGJsb2NrLCBpbmhlcml0ZWQsIGFyZW5hKSB7XG4gICAgY29uc3QgbGVuZ3RocyA9IG5ldyBNYXAoaW5oZXJpdGVkKVxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSBsZW5ndGhzLnNldChzdGF0ZW1lbnQubmFtZSwgc2l6ZShzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGxlbmd0aHMsIGFyZW5hKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSBsZW5ndGhzLnNldChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHNpemUoc3RhdGVtZW50LmV4cHJlc3Npb24sIGxlbmd0aHMsIGFyZW5hKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgICBzaXplKHN0YXRlbWVudC5jb25kaXRpb24sIGxlbmd0aHMsIGFyZW5hKVxuICAgICAgICBjb25zdCBsZWZ0QXJlbmEgPSB7Ynl0ZXM6IGFyZW5hLmJ5dGVzfVxuICAgICAgICBjb25zdCByaWdodEFyZW5hID0ge2J5dGVzOiBhcmVuYS5ieXRlc31cbiAgICAgICAgY29uc3QgbGVmdCA9IHZpc2l0KHN0YXRlbWVudC5jb25zZXF1ZW50LCBsZW5ndGhzLCBsZWZ0QXJlbmEpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc3RhdGVtZW50LmFsdGVybmF0ZSA/IHZpc2l0KHN0YXRlbWVudC5hbHRlcm5hdGUsIGxlbmd0aHMsIHJpZ2h0QXJlbmEpIDogbGVuZ3Roc1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBsZW5ndGhzLmtleXMoKSkgbGVuZ3Rocy5zZXQobmFtZSwgbGVmdC5nZXQobmFtZSkgPT09IHJpZ2h0LmdldChuYW1lKSA/IGxlZnQuZ2V0KG5hbWUpIDogdW5kZWZpbmVkKVxuICAgICAgICBhcmVuYS5ieXRlcyA9IGxlZnRBcmVuYS5ieXRlcyA8IHJpZ2h0QXJlbmEuYnl0ZXMgPyBsZWZ0QXJlbmEuYnl0ZXMgOiByaWdodEFyZW5hLmJ5dGVzXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiB8fFxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQuZXhwcmVzc2lvblxuXG4gICAgICAgIGlmIChleHByZXNzaW9uKSBzaXplKGV4cHJlc3Npb24sIGxlbmd0aHMsIGFyZW5hKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGVuZ3Roc1xuICB9XG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB2aXNpdChkZWNsYXJhdGlvbi5ib2R5LCBuZXcgTWFwKCksIHtieXRlczogMG59KVxuICB2aXNpdChtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBuZXcgTWFwKCksIHtieXRlczogMG59KVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpp-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/cpp-validation.js"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"cpp-validation.d.ts","sourceRoot":"","sources":["../../../src/backends/cpp-validation.js"],"names":[],"mappings":"AAIA,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,QAAQ,CAAA;AA2D3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAH7B,OAAO,sBAAsB,EAAE,cAGF,GAF3B,IAAI,CAOhB"}
|
|
@@ -54,8 +54,12 @@ class CppValueValidator {
|
|
|
54
54
|
for (const name of sizes.keys())
|
|
55
55
|
sizes.set(name, left.get(name) === right.get(name) ? left.get(name) : undefined);
|
|
56
56
|
}
|
|
57
|
-
else
|
|
58
|
-
|
|
57
|
+
else if (statement.kind == "ExpressionStatement" || statement.kind == "PrintStatement" ||
|
|
58
|
+
statement.kind == "ReturnStatement") {
|
|
59
|
+
const expression = statement.expression;
|
|
60
|
+
if (expression)
|
|
61
|
+
this.size(expression, sizes);
|
|
62
|
+
}
|
|
59
63
|
}
|
|
60
64
|
return sizes;
|
|
61
65
|
}
|
|
@@ -71,4 +75,4 @@ export function validateCppValues(module) {
|
|
|
71
75
|
validator.block(declaration.body, new Map());
|
|
72
76
|
validator.block(module.entryPoint.body, new Map());
|
|
73
77
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BwLXZhbGlkYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvY3BwLXZhbGlkYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxLQUFLLENBQUE7QUFFM0MsZ0dBQWdHO0FBQ2hHLE1BQU0saUJBQWlCO0lBQ3JCOzs7OztPQUtHO0lBQ0gsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLO1FBQ3BCLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxlQUFlO1lBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDbEcsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHNCQUFzQjtZQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEYsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUztnQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN6RSxDQUFDO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTthQUNoRixJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7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QUFJLE1BQU0sQ0FBQyxTQUFTO1FBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUN4RixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQTtBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5cbi8qKiBRdWFsaWZpZWQgZnJvemVuIHBhcnNlciBpbnB1dCBib3VuZCwgaW5jbHVkaW5nIHRoZSBpbmxpbmUgc3VwcG9ydC4gKi9cbmV4cG9ydCBjb25zdCBtYXhpbXVtQ3BwU291cmNlTGVuZ3RoID0gMzI3NjdcblxuLyoqIFByb3BhZ2F0ZXMgcHJvdmVuIFVURi04IHZhbHVlIHNpemVzIHdpdGhvdXQgZXZhbHVhdGluZyBvciByZXdyaXRpbmcgc2VtYW50aWMgZXhwcmVzc2lvbnMuICovXG5jbGFzcyBDcHBWYWx1ZVZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBDaGVja3MgZXZlcnkgZXhwcmVzc2lvbiwgaW5jbHVkaW5nIHNraXBwZWQtcnVudGltZSBjYW5kaWRhdGVzIGJlZm9yZSBnZW5lcmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBWYWxpZGF0ZWQgZXhwcmVzc2lvbi5cbiAgICogQHBhcmFtIHtNYXA8c3RyaW5nLCBiaWdpbnQgfCB1bmRlZmluZWQ+fSBzaXplcyAtIFZpc2libGUgdmFsdWUgYnl0ZSBzaXplcy5cbiAgICogQHJldHVybnMge2JpZ2ludCB8IHVuZGVmaW5lZH0gU3RhdGljYWxseSBrbm93biBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIHNpemUoZXhwcmVzc2lvbiwgc2l6ZXMpIHtcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm4gQmlnSW50KEJ1ZmZlci5ieXRlTGVuZ3RoKGV4cHJlc3Npb24udmFsdWUsIFwidXRmOFwiKSlcbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIHNpemVzLmdldChleHByZXNzaW9uLm5hbWUpXG4gICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgZXhwcmVzc2lvbi5hcmd1bWVudHMpIHRoaXMuc2l6ZShhcmd1bWVudCwgc2l6ZXMpXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgdGhpcy5zaXplKGV4cHJlc3Npb24ub3BlcmFuZCwgc2l6ZXMpXG4gICAgZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgICBjb25zdCBsZWZ0ID0gdGhpcy5zaXplKGV4cHJlc3Npb24ubGVmdCwgc2l6ZXMpXG4gICAgICBjb25zdCByaWdodCA9IHRoaXMuc2l6ZShleHByZXNzaW9uLnJpZ2h0LCBzaXplcylcblxuICAgICAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nQ29uY2F0XCIpIHtcbiAgICAgICAgaWYgKChsZWZ0ID8/IDBuKSArIChyaWdodCA/PyAwbikgPiA5MjIzMzcyMDM2ODU0Nzc1ODA3bikge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImNwcFwiLCBcImtub3duIG93bmVkIHN0cmluZyBzaXplIGV4Y2VlZHMgdGhlIHF1YWxpZmllZCA2NC1iaXQgb2JqZWN0IGxpbWl0XCIsIGV4cHJlc3Npb24ubG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCAmJiByaWdodCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbGVmdCArIHJpZ2h0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2xsb3dzIHZhbHVlIGNvcGllcyBhbmQgbWVyZ2VzIG9ubHkgaWRlbnRpY2FsIHByb3ZlbiBicmFuY2ggcmVzdWx0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBMZXhpY2FsIGJsb2NrLlxuICAgKiBAcGFyYW0ge01hcDxzdHJpbmcsIGJpZ2ludCB8IHVuZGVmaW5lZD59IGluaGVyaXRlZCAtIFZpc2libGUgYnl0ZSBzaXplcy5cbiAgICogQHJldHVybnMge01hcDxzdHJpbmcsIGJpZ2ludCB8IHVuZGVmaW5lZD59IE91dGdvaW5nIHByb3ZlbiBzaXplcy5cbiAgICovXG4gIGJsb2NrKGJsb2NrLCBpbmhlcml0ZWQpIHtcbiAgICBjb25zdCBzaXplcyA9IG5ldyBNYXAoaW5oZXJpdGVkKVxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSBzaXplcy5zZXQoc3RhdGVtZW50Lm5hbWUsIHRoaXMuc2l6ZShzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIHNpemVzKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSBzaXplcy5zZXQoc3RhdGVtZW50LnRhcmdldC5uYW1lLCB0aGlzLnNpemUoc3RhdGVtZW50LmV4cHJlc3Npb24sIHNpemVzKSlcbiAgICAgIGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgICB0aGlzLnNpemUoc3RhdGVtZW50LmNvbmRpdGlvbiwgc2l6ZXMpXG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmJsb2NrKHN0YXRlbWVudC5jb25zZXF1ZW50LCBzaXplcylcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGF0ZW1lbnQuYWx0ZXJuYXRlID8gdGhpcy5ibG9jayhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBzaXplcykgOiBzaXplc1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBzaXplcy5rZXlzKCkpIHNpemVzLnNldChuYW1lLCBsZWZ0LmdldChuYW1lKSA9PT0gcmlnaHQuZ2V0KG5hbWUpID8gbGVmdC5nZXQobmFtZSkgOiB1bmRlZmluZWQpXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiB8fFxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQuZXhwcmVzc2lvblxuXG4gICAgICAgIGlmIChleHByZXNzaW9uKSB0aGlzLnNpemUoZXhwcmVzc2lvbiwgc2l6ZXMpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaXplc1xuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBrbm93biB1bnJlcHJlc2VudGFibGUgdmFsdWVzIGJlZm9yZSB0YXJnZXQgZW1pc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBGdWxseSB2YWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNwcFZhbHVlcyhtb2R1bGUpIHtcbiAgY29uc3QgdmFsaWRhdG9yID0gbmV3IENwcFZhbHVlVmFsaWRhdG9yKClcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHZhbGlkYXRvci5ibG9jayhkZWNsYXJhdGlvbi5ib2R5LCBuZXcgTWFwKCkpXG4gIHZhbGlkYXRvci5ibG9jayhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBuZXcgTWFwKCkpXG59XG4iXX0=
|