@dbx-tools/shared-core 0.4.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +36 -36
- package/lib/index.d.ts +36 -36
- package/lib/index.js +1 -1
- package/lib/src/async.js +1 -1
- package/lib/src/error.js +1 -1
- package/lib/src/json.js +1 -1
- package/lib/src/log.d.ts +1 -1
- package/lib/src/log.js +10 -2
- package/lib/src/net.d.ts +1 -1
- package/lib/src/net.js +1 -1
- package/lib/src/string.js +1 -1
- package/lib/src/token.d.ts +1 -1
- package/lib/src/token.js +1 -1
- package/package.json +1 -1
- package/src/async.ts +1 -1
- package/src/error.ts +1 -1
- package/src/json.ts +1 -1
- package/src/log.ts +2 -2
- package/src/net.ts +1 -1
- package/src/string.ts +1 -1
- package/src/token.ts +3 -3
package/index.ts
CHANGED
|
@@ -2,39 +2,39 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
|
-
export * as async from "./src/async";
|
|
6
|
-
export * as brand from "./src/brand";
|
|
7
|
-
export * as error from "./src/error";
|
|
8
|
-
export * as functionModule from "./src/function";
|
|
9
|
-
export * as hash from "./src/hash";
|
|
10
|
-
export * as http from "./src/http";
|
|
11
|
-
export * as json from "./src/json";
|
|
12
|
-
export * as log from "./src/log";
|
|
13
|
-
export * as net from "./src/net";
|
|
14
|
-
export * as object from "./src/object";
|
|
15
|
-
export * as predicate from "./src/predicate";
|
|
16
|
-
export * as string from "./src/string";
|
|
17
|
-
export * as token from "./src/token";
|
|
18
|
-
export { poll, tieAbortSignal, combineAbortSignals, sleep } from "./src/async";
|
|
19
|
-
export type { PollContext, PollProducer, PollOptions } from "./src/async";
|
|
20
|
-
export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, parseBrandContext, defaultBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand";
|
|
21
|
-
export type { BrandContext, BrandContextInput, BrandAssetSet } from "./src/brand";
|
|
22
|
-
export { toError, errorMessage, errorMessages, errorNodes, errorContext } from "./src/error";
|
|
23
|
-
export type { ErrorContext } from "./src/error";
|
|
24
|
-
export { memoize } from "./src/function";
|
|
25
|
-
export type { MemoizeOptions } from "./src/function";
|
|
26
|
-
export { id, fnvHash, fnvHashWithOptions, toBase32 } from "./src/hash";
|
|
27
|
-
export { forEachHeaderValue, parseCookies, createFetchError } from "./src/http";
|
|
28
|
-
export type { HeaderLike } from "./src/http";
|
|
29
|
-
export { parse, parseRecord } from "./src/json";
|
|
30
|
-
export { isLevelEnabled, logger } from "./src/log";
|
|
31
|
-
export type { LogLevel, Logger } from "./src/log";
|
|
32
|
-
export { urlBuilder, pathMatch, parseEmails, isEmail, parseIp, parseCidr, ipInCidr, findContainingCidr, isLoopbackHost } from "./src/net";
|
|
33
|
-
export type { UrlLike, IpVersion, ParsedIp, Cidr, UrlBuilder, ParseEmailsOptions } from "./src/net";
|
|
34
|
-
export { isOneOrMany, isCollection, isEmpty, values, isContainer, map, filter, nonNull, flatMap, flat, distinct, concat, take, group, find, findLast, findIndex, findLastIndex, some, every, forEach, at, toOneOrMany, toArray, sequence, generator, isRecord, toBoolean, deepEqual } from "./src/object";
|
|
35
|
-
export type { Sequence, Container, Collection, OneOrMany, NameLike, NonFunctionKeys, DeepEqualComparator } from "./src/object";
|
|
36
|
-
export { create } from "./src/predicate";
|
|
37
|
-
export type { PredicateFunction, TypePredicateFunction, PredicateInput, Predicate } from "./src/predicate";
|
|
38
|
-
export { tokenizeWithOptions, tokenize, toIdentifierWithOptions, toIdentifier, toSlugWithOptions, toSlug, trimToNull, parseList, trimToEmpty, firstNonEmpty, escapeHtml, toUniqueSlug, toDescription, pluralize, toLabel, capitalize } from "./src/string";
|
|
39
|
-
export type { TokenizeOptions, KeyOptions, IdentifierOptions, Description } from "./src/string";
|
|
40
|
-
export { getAccessTokenPayload, getAccessTokenScopes, includesAccessTokenScope } from "./src/token";
|
|
5
|
+
export * as async from "./src/async.ts";
|
|
6
|
+
export * as brand from "./src/brand.ts";
|
|
7
|
+
export * as error from "./src/error.ts";
|
|
8
|
+
export * as functionModule from "./src/function.ts";
|
|
9
|
+
export * as hash from "./src/hash.ts";
|
|
10
|
+
export * as http from "./src/http.ts";
|
|
11
|
+
export * as json from "./src/json.ts";
|
|
12
|
+
export * as log from "./src/log.ts";
|
|
13
|
+
export * as net from "./src/net.ts";
|
|
14
|
+
export * as object from "./src/object.ts";
|
|
15
|
+
export * as predicate from "./src/predicate.ts";
|
|
16
|
+
export * as string from "./src/string.ts";
|
|
17
|
+
export * as token from "./src/token.ts";
|
|
18
|
+
export { poll, tieAbortSignal, combineAbortSignals, sleep } from "./src/async.ts";
|
|
19
|
+
export type { PollContext, PollProducer, PollOptions } from "./src/async.ts";
|
|
20
|
+
export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, parseBrandContext, defaultBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand.ts";
|
|
21
|
+
export type { BrandContext, BrandContextInput, BrandAssetSet } from "./src/brand.ts";
|
|
22
|
+
export { toError, errorMessage, errorMessages, errorNodes, errorContext } from "./src/error.ts";
|
|
23
|
+
export type { ErrorContext } from "./src/error.ts";
|
|
24
|
+
export { memoize } from "./src/function.ts";
|
|
25
|
+
export type { MemoizeOptions } from "./src/function.ts";
|
|
26
|
+
export { id, fnvHash, fnvHashWithOptions, toBase32 } from "./src/hash.ts";
|
|
27
|
+
export { forEachHeaderValue, parseCookies, createFetchError } from "./src/http.ts";
|
|
28
|
+
export type { HeaderLike } from "./src/http.ts";
|
|
29
|
+
export { parse, parseRecord } from "./src/json.ts";
|
|
30
|
+
export { isLevelEnabled, logger } from "./src/log.ts";
|
|
31
|
+
export type { LogLevel, Logger } from "./src/log.ts";
|
|
32
|
+
export { urlBuilder, pathMatch, parseEmails, isEmail, parseIp, parseCidr, ipInCidr, findContainingCidr, isLoopbackHost } from "./src/net.ts";
|
|
33
|
+
export type { UrlLike, IpVersion, ParsedIp, Cidr, UrlBuilder, ParseEmailsOptions } from "./src/net.ts";
|
|
34
|
+
export { isOneOrMany, isCollection, isEmpty, values, isContainer, map, filter, nonNull, flatMap, flat, distinct, concat, take, group, find, findLast, findIndex, findLastIndex, some, every, forEach, at, toOneOrMany, toArray, sequence, generator, isRecord, toBoolean, deepEqual } from "./src/object.ts";
|
|
35
|
+
export type { Sequence, Container, Collection, OneOrMany, NameLike, NonFunctionKeys, DeepEqualComparator } from "./src/object.ts";
|
|
36
|
+
export { create } from "./src/predicate.ts";
|
|
37
|
+
export type { PredicateFunction, TypePredicateFunction, PredicateInput, Predicate } from "./src/predicate.ts";
|
|
38
|
+
export { tokenizeWithOptions, tokenize, toIdentifierWithOptions, toIdentifier, toSlugWithOptions, toSlug, trimToNull, parseList, trimToEmpty, firstNonEmpty, escapeHtml, toUniqueSlug, toDescription, pluralize, toLabel, capitalize } from "./src/string.ts";
|
|
39
|
+
export type { TokenizeOptions, KeyOptions, IdentifierOptions, Description } from "./src/string.ts";
|
|
40
|
+
export { getAccessTokenPayload, getAccessTokenScopes, includesAccessTokenScope } from "./src/token.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
export * as async from "./src/async.
|
|
2
|
-
export * as brand from "./src/brand.
|
|
3
|
-
export * as error from "./src/error.
|
|
4
|
-
export * as functionModule from "./src/function.
|
|
5
|
-
export * as hash from "./src/hash.
|
|
6
|
-
export * as http from "./src/http.
|
|
7
|
-
export * as json from "./src/json.
|
|
8
|
-
export * as log from "./src/log.
|
|
9
|
-
export * as net from "./src/net.
|
|
10
|
-
export * as object from "./src/object.
|
|
11
|
-
export * as predicate from "./src/predicate.
|
|
12
|
-
export * as string from "./src/string.
|
|
13
|
-
export * as token from "./src/token.
|
|
14
|
-
export { poll, tieAbortSignal, combineAbortSignals, sleep } from "./src/async.
|
|
15
|
-
export type { PollContext, PollProducer, PollOptions } from "./src/async.
|
|
16
|
-
export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, parseBrandContext, defaultBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand.
|
|
17
|
-
export type { BrandContext, BrandContextInput, BrandAssetSet } from "./src/brand.
|
|
18
|
-
export { toError, errorMessage, errorMessages, errorNodes, errorContext } from "./src/error.
|
|
19
|
-
export type { ErrorContext } from "./src/error.
|
|
20
|
-
export { memoize } from "./src/function.
|
|
21
|
-
export type { MemoizeOptions } from "./src/function.
|
|
22
|
-
export { id, fnvHash, fnvHashWithOptions, toBase32 } from "./src/hash.
|
|
23
|
-
export { forEachHeaderValue, parseCookies, createFetchError } from "./src/http.
|
|
24
|
-
export type { HeaderLike } from "./src/http.
|
|
25
|
-
export { parse, parseRecord } from "./src/json.
|
|
26
|
-
export { isLevelEnabled, logger } from "./src/log.
|
|
27
|
-
export type { LogLevel, Logger } from "./src/log.
|
|
28
|
-
export { urlBuilder, pathMatch, parseEmails, isEmail, parseIp, parseCidr, ipInCidr, findContainingCidr, isLoopbackHost } from "./src/net.
|
|
29
|
-
export type { UrlLike, IpVersion, ParsedIp, Cidr, UrlBuilder, ParseEmailsOptions } from "./src/net.
|
|
30
|
-
export { isOneOrMany, isCollection, isEmpty, values, isContainer, map, filter, nonNull, flatMap, flat, distinct, concat, take, group, find, findLast, findIndex, findLastIndex, some, every, forEach, at, toOneOrMany, toArray, sequence, generator, isRecord, toBoolean, deepEqual } from "./src/object.
|
|
31
|
-
export type { Sequence, Container, Collection, OneOrMany, NameLike, NonFunctionKeys, DeepEqualComparator } from "./src/object.
|
|
32
|
-
export { create } from "./src/predicate.
|
|
33
|
-
export type { PredicateFunction, TypePredicateFunction, PredicateInput, Predicate } from "./src/predicate.
|
|
34
|
-
export { tokenizeWithOptions, tokenize, toIdentifierWithOptions, toIdentifier, toSlugWithOptions, toSlug, trimToNull, parseList, trimToEmpty, firstNonEmpty, escapeHtml, toUniqueSlug, toDescription, pluralize, toLabel, capitalize } from "./src/string.
|
|
35
|
-
export type { TokenizeOptions, KeyOptions, IdentifierOptions, Description } from "./src/string.
|
|
36
|
-
export { getAccessTokenPayload, getAccessTokenScopes, includesAccessTokenScope } from "./src/token.
|
|
1
|
+
export * as async from "./src/async.ts";
|
|
2
|
+
export * as brand from "./src/brand.ts";
|
|
3
|
+
export * as error from "./src/error.ts";
|
|
4
|
+
export * as functionModule from "./src/function.ts";
|
|
5
|
+
export * as hash from "./src/hash.ts";
|
|
6
|
+
export * as http from "./src/http.ts";
|
|
7
|
+
export * as json from "./src/json.ts";
|
|
8
|
+
export * as log from "./src/log.ts";
|
|
9
|
+
export * as net from "./src/net.ts";
|
|
10
|
+
export * as object from "./src/object.ts";
|
|
11
|
+
export * as predicate from "./src/predicate.ts";
|
|
12
|
+
export * as string from "./src/string.ts";
|
|
13
|
+
export * as token from "./src/token.ts";
|
|
14
|
+
export { poll, tieAbortSignal, combineAbortSignals, sleep } from "./src/async.ts";
|
|
15
|
+
export type { PollContext, PollProducer, PollOptions } from "./src/async.ts";
|
|
16
|
+
export { DEFAULT_BRAND_ASSETS, BrandAssetSetSchema, BrandColorsSchema, BrandVoiceSchema, BrandContextSchema, parseBrandContext, defaultBrandContext, brandContextJsonSchema, brandContextPrompt } from "./src/brand.ts";
|
|
17
|
+
export type { BrandContext, BrandContextInput, BrandAssetSet } from "./src/brand.ts";
|
|
18
|
+
export { toError, errorMessage, errorMessages, errorNodes, errorContext } from "./src/error.ts";
|
|
19
|
+
export type { ErrorContext } from "./src/error.ts";
|
|
20
|
+
export { memoize } from "./src/function.ts";
|
|
21
|
+
export type { MemoizeOptions } from "./src/function.ts";
|
|
22
|
+
export { id, fnvHash, fnvHashWithOptions, toBase32 } from "./src/hash.ts";
|
|
23
|
+
export { forEachHeaderValue, parseCookies, createFetchError } from "./src/http.ts";
|
|
24
|
+
export type { HeaderLike } from "./src/http.ts";
|
|
25
|
+
export { parse, parseRecord } from "./src/json.ts";
|
|
26
|
+
export { isLevelEnabled, logger } from "./src/log.ts";
|
|
27
|
+
export type { LogLevel, Logger } from "./src/log.ts";
|
|
28
|
+
export { urlBuilder, pathMatch, parseEmails, isEmail, parseIp, parseCidr, ipInCidr, findContainingCidr, isLoopbackHost } from "./src/net.ts";
|
|
29
|
+
export type { UrlLike, IpVersion, ParsedIp, Cidr, UrlBuilder, ParseEmailsOptions } from "./src/net.ts";
|
|
30
|
+
export { isOneOrMany, isCollection, isEmpty, values, isContainer, map, filter, nonNull, flatMap, flat, distinct, concat, take, group, find, findLast, findIndex, findLastIndex, some, every, forEach, at, toOneOrMany, toArray, sequence, generator, isRecord, toBoolean, deepEqual } from "./src/object.ts";
|
|
31
|
+
export type { Sequence, Container, Collection, OneOrMany, NameLike, NonFunctionKeys, DeepEqualComparator } from "./src/object.ts";
|
|
32
|
+
export { create } from "./src/predicate.ts";
|
|
33
|
+
export type { PredicateFunction, TypePredicateFunction, PredicateInput, Predicate } from "./src/predicate.ts";
|
|
34
|
+
export { tokenizeWithOptions, tokenize, toIdentifierWithOptions, toIdentifier, toSlugWithOptions, toSlug, trimToNull, parseList, trimToEmpty, firstNonEmpty, escapeHtml, toUniqueSlug, toDescription, pluralize, toLabel, capitalize } from "./src/string.ts";
|
|
35
|
+
export type { TokenizeOptions, KeyOptions, IdentifierOptions, Description } from "./src/string.ts";
|
|
36
|
+
export { getAccessTokenPayload, getAccessTokenScopes, includesAccessTokenScope } from "./src/token.ts";
|
package/lib/index.js
CHANGED
|
@@ -27,4 +27,4 @@ export { isOneOrMany, isCollection, isEmpty, values, isContainer, map, filter, n
|
|
|
27
27
|
export { create } from "./src/predicate.js";
|
|
28
28
|
export { tokenizeWithOptions, tokenize, toIdentifierWithOptions, toIdentifier, toSlugWithOptions, toSlug, trimToNull, parseList, trimToEmpty, firstNonEmpty, escapeHtml, toUniqueSlug, toDescription, pluralize, toLabel, capitalize } from "./src/string.js";
|
|
29
29
|
export { getAccessTokenPayload, getAccessTokenScopes, includesAccessTokenScope } from "./src/token.js";
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssY0FBYyxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFNBQVMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeE4sT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkYsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0ksT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3UyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlQLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0ICogYXMgYXN5bmMgZnJvbSBcIi4vc3JjL2FzeW5jLnRzXCI7XG5leHBvcnQgKiBhcyBicmFuZCBmcm9tIFwiLi9zcmMvYnJhbmQudHNcIjtcbmV4cG9ydCAqIGFzIGVycm9yIGZyb20gXCIuL3NyYy9lcnJvci50c1wiO1xuZXhwb3J0ICogYXMgZnVuY3Rpb25Nb2R1bGUgZnJvbSBcIi4vc3JjL2Z1bmN0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBoYXNoIGZyb20gXCIuL3NyYy9oYXNoLnRzXCI7XG5leHBvcnQgKiBhcyBodHRwIGZyb20gXCIuL3NyYy9odHRwLnRzXCI7XG5leHBvcnQgKiBhcyBqc29uIGZyb20gXCIuL3NyYy9qc29uLnRzXCI7XG5leHBvcnQgKiBhcyBsb2cgZnJvbSBcIi4vc3JjL2xvZy50c1wiO1xuZXhwb3J0ICogYXMgbmV0IGZyb20gXCIuL3NyYy9uZXQudHNcIjtcbmV4cG9ydCAqIGFzIG9iamVjdCBmcm9tIFwiLi9zcmMvb2JqZWN0LnRzXCI7XG5leHBvcnQgKiBhcyBwcmVkaWNhdGUgZnJvbSBcIi4vc3JjL3ByZWRpY2F0ZS50c1wiO1xuZXhwb3J0ICogYXMgc3RyaW5nIGZyb20gXCIuL3NyYy9zdHJpbmcudHNcIjtcbmV4cG9ydCAqIGFzIHRva2VuIGZyb20gXCIuL3NyYy90b2tlbi50c1wiO1xuZXhwb3J0IHsgcG9sbCwgdGllQWJvcnRTaWduYWwsIGNvbWJpbmVBYm9ydFNpZ25hbHMsIHNsZWVwIH0gZnJvbSBcIi4vc3JjL2FzeW5jLnRzXCI7XG5leHBvcnQgdHlwZSB7IFBvbGxDb250ZXh0LCBQb2xsUHJvZHVjZXIsIFBvbGxPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2FzeW5jLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0JSQU5EX0FTU0VUUywgQnJhbmRBc3NldFNldFNjaGVtYSwgQnJhbmRDb2xvcnNTY2hlbWEsIEJyYW5kVm9pY2VTY2hlbWEsIEJyYW5kQ29udGV4dFNjaGVtYSwgcGFyc2VCcmFuZENvbnRleHQsIGRlZmF1bHRCcmFuZENvbnRleHQsIGJyYW5kQ29udGV4dEpzb25TY2hlbWEsIGJyYW5kQ29udGV4dFByb21wdCB9IGZyb20gXCIuL3NyYy9icmFuZC50c1wiO1xuZXhwb3J0IHR5cGUgeyBCcmFuZENvbnRleHQsIEJyYW5kQ29udGV4dElucHV0LCBCcmFuZEFzc2V0U2V0IH0gZnJvbSBcIi4vc3JjL2JyYW5kLnRzXCI7XG5leHBvcnQgeyB0b0Vycm9yLCBlcnJvck1lc3NhZ2UsIGVycm9yTWVzc2FnZXMsIGVycm9yTm9kZXMsIGVycm9yQ29udGV4dCB9IGZyb20gXCIuL3NyYy9lcnJvci50c1wiO1xuZXhwb3J0IHR5cGUgeyBFcnJvckNvbnRleHQgfSBmcm9tIFwiLi9zcmMvZXJyb3IudHNcIjtcbmV4cG9ydCB7IG1lbW9pemUgfSBmcm9tIFwiLi9zcmMvZnVuY3Rpb24udHNcIjtcbmV4cG9ydCB0eXBlIHsgTWVtb2l6ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZnVuY3Rpb24udHNcIjtcbmV4cG9ydCB7IGlkLCBmbnZIYXNoLCBmbnZIYXNoV2l0aE9wdGlvbnMsIHRvQmFzZTMyIH0gZnJvbSBcIi4vc3JjL2hhc2gudHNcIjtcbmV4cG9ydCB7IGZvckVhY2hIZWFkZXJWYWx1ZSwgcGFyc2VDb29raWVzLCBjcmVhdGVGZXRjaEVycm9yIH0gZnJvbSBcIi4vc3JjL2h0dHAudHNcIjtcbmV4cG9ydCB0eXBlIHsgSGVhZGVyTGlrZSB9IGZyb20gXCIuL3NyYy9odHRwLnRzXCI7XG5leHBvcnQgeyBwYXJzZSwgcGFyc2VSZWNvcmQgfSBmcm9tIFwiLi9zcmMvanNvbi50c1wiO1xuZXhwb3J0IHsgaXNMZXZlbEVuYWJsZWQsIGxvZ2dlciB9IGZyb20gXCIuL3NyYy9sb2cudHNcIjtcbmV4cG9ydCB0eXBlIHsgTG9nTGV2ZWwsIExvZ2dlciB9IGZyb20gXCIuL3NyYy9sb2cudHNcIjtcbmV4cG9ydCB7IHVybEJ1aWxkZXIsIHBhdGhNYXRjaCwgcGFyc2VFbWFpbHMsIGlzRW1haWwsIHBhcnNlSXAsIHBhcnNlQ2lkciwgaXBJbkNpZHIsIGZpbmRDb250YWluaW5nQ2lkciwgaXNMb29wYmFja0hvc3QgfSBmcm9tIFwiLi9zcmMvbmV0LnRzXCI7XG5leHBvcnQgdHlwZSB7IFVybExpa2UsIElwVmVyc2lvbiwgUGFyc2VkSXAsIENpZHIsIFVybEJ1aWxkZXIsIFBhcnNlRW1haWxzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9uZXQudHNcIjtcbmV4cG9ydCB7IGlzT25lT3JNYW55LCBpc0NvbGxlY3Rpb24sIGlzRW1wdHksIHZhbHVlcywgaXNDb250YWluZXIsIG1hcCwgZmlsdGVyLCBub25OdWxsLCBmbGF0TWFwLCBmbGF0LCBkaXN0aW5jdCwgY29uY2F0LCB0YWtlLCBncm91cCwgZmluZCwgZmluZExhc3QsIGZpbmRJbmRleCwgZmluZExhc3RJbmRleCwgc29tZSwgZXZlcnksIGZvckVhY2gsIGF0LCB0b09uZU9yTWFueSwgdG9BcnJheSwgc2VxdWVuY2UsIGdlbmVyYXRvciwgaXNSZWNvcmQsIHRvQm9vbGVhbiwgZGVlcEVxdWFsIH0gZnJvbSBcIi4vc3JjL29iamVjdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZXF1ZW5jZSwgQ29udGFpbmVyLCBDb2xsZWN0aW9uLCBPbmVPck1hbnksIE5hbWVMaWtlLCBOb25GdW5jdGlvbktleXMsIERlZXBFcXVhbENvbXBhcmF0b3IgfSBmcm9tIFwiLi9zcmMvb2JqZWN0LnRzXCI7XG5leHBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiLi9zcmMvcHJlZGljYXRlLnRzXCI7XG5leHBvcnQgdHlwZSB7IFByZWRpY2F0ZUZ1bmN0aW9uLCBUeXBlUHJlZGljYXRlRnVuY3Rpb24sIFByZWRpY2F0ZUlucHV0LCBQcmVkaWNhdGUgfSBmcm9tIFwiLi9zcmMvcHJlZGljYXRlLnRzXCI7XG5leHBvcnQgeyB0b2tlbml6ZVdpdGhPcHRpb25zLCB0b2tlbml6ZSwgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMsIHRvSWRlbnRpZmllciwgdG9TbHVnV2l0aE9wdGlvbnMsIHRvU2x1ZywgdHJpbVRvTnVsbCwgcGFyc2VMaXN0LCB0cmltVG9FbXB0eSwgZmlyc3ROb25FbXB0eSwgZXNjYXBlSHRtbCwgdG9VbmlxdWVTbHVnLCB0b0Rlc2NyaXB0aW9uLCBwbHVyYWxpemUsIHRvTGFiZWwsIGNhcGl0YWxpemUgfSBmcm9tIFwiLi9zcmMvc3RyaW5nLnRzXCI7XG5leHBvcnQgdHlwZSB7IFRva2VuaXplT3B0aW9ucywgS2V5T3B0aW9ucywgSWRlbnRpZmllck9wdGlvbnMsIERlc2NyaXB0aW9uIH0gZnJvbSBcIi4vc3JjL3N0cmluZy50c1wiO1xuZXhwb3J0IHsgZ2V0QWNjZXNzVG9rZW5QYXlsb2FkLCBnZXRBY2Nlc3NUb2tlblNjb3BlcywgaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlIH0gZnJvbSBcIi4vc3JjL3Rva2VuLnRzXCI7XG4iXX0=
|
package/lib/src/async.js
CHANGED
|
@@ -160,4 +160,4 @@ export function sleep(ms, signal) {
|
|
|
160
160
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFrRnJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN6QixRQUE0QixFQUM1QixPQUEwQjtJQUUxQixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLElBQUksTUFBTTtRQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsY0FBYyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELG1FQUFtRTtJQUNuRSxtRUFBbUU7SUFDbkUsZ0VBQWdFO0lBQ2hFLGtEQUFrRDtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsSUFBSyxFQUFRLENBQUM7SUFDakQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxRQUF1QixDQUFDO1FBQzVCLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFJLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEdBQUcsR0FBc0I7Z0JBQzdCLE9BQU87Z0JBQ1AsUUFBUTtnQkFDUixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0IsQ0FBQztZ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LENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FuY2VsbGF0aW9uLWF3YXJlIGFzeW5jIHByaW1pdGl2ZXM6IGFuIGFib3J0YWJsZSB7QGxpbmsgc2xlZXB9LCBhblxuICoge0BsaW5rIEFib3J0Q29udHJvbGxlcn0gbGlua2VyICh7QGxpbmsgdGllQWJvcnRTaWduYWx9KSwgYW5kIGEgcGVyaW9kaWNcbiAqIHtAbGluayBwb2xsfSBnZW5lcmF0b3IuIERlcGVuZGVuY3ktZnJlZTsgYHBvbGxgJ3MgYFwiZGlzdGluY3RcImAgZmlsdGVyXG4gKiB1c2VzIHRoZSBsb2NhbCB7QGxpbmsgZGVlcEVxdWFsfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gXCIuL29iamVjdFwiO1xuXG4vKipcbiAqIFBlci1pdGVyYXRpb24gY29udGV4dCBoYW5kZWQgdG8ge0BsaW5rIFBvbGxQcm9kdWNlcn0gYW5kIHRoZVxuICogcHJlZGljYXRlIG9uIGVhY2ggc3RlcCBvZiBhIHtAbGluayBwb2xsfSBsb29wLiBCdW5kbGVzIHRoZVxuICogaXRlcmF0aW9uIG1ldGFkYXRhIHNvIHRoZSBjYWxsIHNpZ25hdHVyZXMgc3RheSBzdGFibGUgYXMgYHBvbGxgXG4gKiBncm93cyBhZGRpdGlvbmFsIGZpZWxkcy5cbiAqXG4gKiBgc2lnbmFsYCBpcyBvd25lZCBieSBgcG9sbGA6IGl0IHRyYWNrcyB0aGUgZXh0ZXJuYWxcbiAqIGBQb2xsT3B0aW9ucy5zaWduYWxgICh3aGVuIHN1cHBsaWVkKSBhbmQgYWxzbyBmaXJlcyB3aGVuIHRoZVxuICogY29uc3VtZXIgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCwgc28gcHJvZHVjZXJzIGNhbiBmb3J3YXJkIGl0IHRvXG4gKiBhbnkgaW4tZmxpZ2h0IHdvcmsgKGBmZXRjaGAsIFNESyBjYWxscywgZXRjLikgYW5kIGhhdmUgYSBzaW5nbGVcbiAqIGNhbmNlbGxhdGlvbiBzb3VyY2UgdGVhciBkb3duIGJvdGggdGhlIHJlcXVlc3QgYW5kIHRoZSBsb29wLlxuICpcbiAqIGBhdHRyaWJ1dGVzYCBpcyBhIG11dGFibGUgc2NyYXRjaHBhZCBzaGFyZWQgYWNyb3NzIGV2ZXJ5XG4gKiBpdGVyYXRpb24gb2YgYSBzaW5nbGUgYHBvbGxgIHJ1bi4gVGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSBpc1xuICogcGFzc2VkIGVhY2ggY2FsbCBzbyB3cml0ZXMgZnJvbSBvbmUgaXRlcmF0aW9uIGFyZSB2aXNpYmxlIHRvIHRoZVxuICogbmV4dCAtIHVzZWZ1bCBmb3Igc3Rhc2hpbmcgcGVyLWxvb3Agc3RhdGUgKHJldHJ5IGNvdW50ZXJzLCBzdGFydFxuICogdGltZXN0YW1wcywgYW55dGhpbmcgeW91J2Qgb3RoZXJ3aXNlIGNsb3NlIG92ZXIgdmlhIGEgbGV0KS5cbiAqIEdlbmVyaWMgYEFgIGxldHMgY2FsbGVycyB0eXBlIHRoZSBiYWc7IGRlZmF1bHRzIHRvXG4gKiBgUmVjb3JkPHN0cmluZywgdW5rbm93bj5gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGxDb250ZXh0PFQsIEEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogWmVyby1iYXNlZCBpdGVyYXRpb24gaW5kZXggKGAwYCBvbiB0aGUgZmlyc3QgY2FsbCkuICovXG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgLyoqIFZhbHVlIHlpZWxkZWQgb24gdGhlIHByaW9yIGl0ZXJhdGlvbjsgYHVuZGVmaW5lZGAgb24gdGhlIGZpcnN0LiAqL1xuICBwcmV2aW91czogVCB8IHVuZGVmaW5lZDtcbiAgLyoqIENhbmNlbGxhdGlvbiBoYW5kbGUuIEFsd2F5cyBkZWZpbmVkOyBmb3J3YXJkIHRvIGluLWZsaWdodCB3b3JrLiAqL1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICAvKiogUGVyLXJ1biBtdXRhYmxlIHNjcmF0Y2hwYWQgc2hhcmVkIGFjcm9zcyBpdGVyYXRpb25zLiAqL1xuICBhdHRyaWJ1dGVzOiBBO1xufVxuXG4vKiogT25lIHN0ZXAgb2YgYSB7QGxpbmsgcG9sbH0gbG9vcC4gU2VlIHtAbGluayBQb2xsQ29udGV4dH0uICovXG5leHBvcnQgdHlwZSBQb2xsUHJvZHVjZXI8VCwgQSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IChcbiAgY3R4OiBQb2xsQ29udGV4dDxULCBBPixcbikgPT4gVCB8IFByb21pc2VMaWtlPFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGxPcHRpb25zPFQsIEEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogTWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBwb2xscy4gKi9cbiAgaW50ZXJ2YWxNczogbnVtYmVyO1xuICAvKipcbiAgICogUHJlZGljYXRlIGV2YWx1YXRlZCBhZ2FpbnN0IGVhY2ggeWllbGRlZCB2YWx1ZTogcmV0dXJuIGB0cnVlYCB0b1xuICAgKiBrZWVwIGl0LCBgZmFsc2VgIHRvIHNraXAgaXQgKHdpdGhvdXQgc3RvcHBpbmcgdGhlIGxvb3ApLiBNYXkgYmVcbiAgICogc3luYyBvciBhc3luYyAtIGEgYFByb21pc2VMaWtlPGJvb2xlYW4+YCBpcyBhd2FpdGVkIGJlZm9yZSB0aGVcbiAgICogZGVjaXNpb24gaXMgbWFkZS4gUmVjZWl2ZXMgdGhlIHNhbWUge0BsaW5rIFBvbGxDb250ZXh0fSBhcyB0aGVcbiAgICogcHJvZHVjZXIgKHNhbWUgYHNpZ25hbGAsIHNhbWUgYGF0dHJpYnV0ZXNgIGJhZykuIFRoZSBzcGVjaWFsXG4gICAqIHZhbHVlIGBcImRpc3RpbmN0XCJgIHNraXBzIGEgdmFsdWUgdGhhdCBkZWVwLWVxdWFscyB0aGUgcHJldmlvdXNcbiAgICogb25lLlxuICAgKi9cbiAgZmlsdGVyPzogKCh2YWx1ZTogVCwgY3R4OiBQb2xsQ29udGV4dDxULCBBPikgPT4gYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+KSB8IFwiZGlzdGluY3RcIjtcbiAgLyoqXG4gICAqIFByZWRpY2F0ZSBldmFsdWF0ZWQgYWdhaW5zdCBlYWNoIHlpZWxkZWQgdmFsdWU6IHJldHVybiBgdHJ1ZWAgdG9cbiAgICoga2VlcCBwb2xsaW5nLCBgZmFsc2VgIHRvIHN0b3AuIE1heSBiZSBzeW5jIG9yIGFzeW5jLiBPbWl0IHRvIHBvbGxcbiAgICogZm9yZXZlciAodGhlIGNvbnN1bWVyIHN0b3BzIGJ5IGJyZWFraW5nIG91dCBvZiB0aGUgbG9vcCBvciBieVxuICAgKiBhYm9ydGluZyBgc2lnbmFsYCkuXG4gICAqL1xuICBwcmVkaWNhdGU/OiAodmFsdWU6IFQsIGN0eDogUG9sbENvbnRleHQ8VCwgQT4pID0+IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEV4dGVybmFsIGNhbmNlbGxhdGlvbiBoYW5kbGUuIFRpZWQgaW50byB0aGUgaW50ZXJuYWwgc2lnbmFsIHRoYXRcbiAgICogYHBvbGxgIGhhbmRzIHRvIGBwcm9kdWNlcmAsIHNvIGFib3J0aW5nIGl0IHRlYXJzIGRvd24gYm90aCB0aGVcbiAgICogaW4tZmxpZ2h0IHJlcXVlc3QgYW5kIHRoZSBpbnRlci1wb2xsIHNsZWVwLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBIYXJkIHVwcGVyIGJvdW5kIG9uIHRoZSB0b3RhbCBsaWZldGltZSBvZiB0aGUgcG9sbCBsb29wLCBpblxuICAgKiBtaWxsaXNlY29uZHMuIFdoZW4gdGhlIGJ1ZGdldCBlbGFwc2VzLCBgcG9sbGAgYWJvcnRzIGl0cyBpbnRlcm5hbFxuICAgKiBzaWduYWwgc28gdGhlIGluLWZsaWdodCBwcm9kdWNlciBhbmQgaW50ZXItcG9sbCBzbGVlcCBib3RoIHRlYXJcbiAgICogZG93biBwcm9tcHRseSwgYW5kIHRoZSBsb29wIHRocm93cyB0aGUgYFRpbWVvdXRFcnJvcmBcbiAgICogYERPTUV4Y2VwdGlvbmAgcHJvZHVjZWQgYnkgYEFib3J0U2lnbmFsLnRpbWVvdXQodGltZW91dE1zKWAuIFRoZVxuICAgKiBidWRnZXQgc3RhcnRzIHRpY2tpbmcgdGhlIG1vbWVudCB0aGUgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlIGZvciBgY3R4LmF0dHJpYnV0ZXNgLiBEZWZhdWx0cyB0byBge31gLiBUaGUgc2FtZVxuICAgKiBvYmplY3QgaXMgcmV1c2VkIGFjcm9zcyBpdGVyYXRpb25zLCBzbyBjYWxsZXJzIGNhbiBwcmUtcG9wdWxhdGVcbiAgICogZmllbGRzICh0aW1lcnMsIHJldHJ5IGNvdW50ZXJzLCBldGMuKSBhbmQgdGhlIHByb2R1Y2VyIC9cbiAgICogcHJlZGljYXRlIGNhbiBtdXRhdGUgdGhlbSBpbiBwbGFjZS5cbiAgICovXG4gIGF0dHJpYnV0ZXM/OiBBO1xufVxuXG4vKipcbiAqIEFzeW5jIGl0ZXJhYmxlIHRoYXQgZHJpdmVzIGEgcGVyaW9kaWMgcG9sbC4gRWFjaCBpdGVyYXRpb246XG4gKlxuICogICAxLiBCdWlsZHMgYSB7QGxpbmsgUG9sbENvbnRleHR9IChgYXR0ZW1wdGAsIGBwcmV2aW91c2AsIGBzaWduYWxgLFxuICogICAgICBzaGFyZWQgYGF0dHJpYnV0ZXNgKSBhbmQgY2FsbHMgYHByb2R1Y2VyKGN0eClgOyB5aWVsZHMgdGhlXG4gKiAgICAgIHJlc29sdmVkIHZhbHVlIChzdWJqZWN0IHRvIGBmaWx0ZXJgKS5cbiAqICAgMi4gRXZhbHVhdGVzIGBvcHRpb25zLnByZWRpY2F0ZSh2YWx1ZSwgY3R4KWA7IHN0b3BzIHdoZW4gaXRcbiAqICAgICAgcmV0dXJucyAob3IgcmVzb2x2ZXMgdG8pIGBmYWxzZWAuXG4gKiAgIDMuIFNsZWVwcyBgb3B0aW9ucy5pbnRlcnZhbE1zYCBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC5cbiAqXG4gKiBUaGUgZmlyc3QgY2FsbCBydW5zIGltbWVkaWF0ZWx5IChubyBsZWFkaW5nIHNsZWVwKSBzbyB0aGUgY29uc3VtZXJcbiAqIHNlZXMgYSB2YWx1ZSB3aXRob3V0IHdhaXRpbmcgYW4gaW50ZXJ2YWwuIEVycm9ycyB0aHJvd24gYnlcbiAqIGBwcm9kdWNlcmAgcHJvcGFnYXRlIHRocm91Z2ggdGhlIGdlbmVyYXRvci5cbiAqXG4gKiBgcG9sbGAgYWx3YXlzIGNyZWF0ZXMgYW4gaW50ZXJuYWwgYEFib3J0Q29udHJvbGxlcmAgYW5kIGV4cG9zZXNcbiAqIGBpbnRlcm5hbC5zaWduYWxgIGFzIGBjdHguc2lnbmFsYCwgc28gcHJvZHVjZXJzIGNhbiByZWx5IG9uIGFcbiAqIGRlZmluZWQgc2lnbmFsIHdpdGhvdXQgYSBudWxsaXNoIGNoZWNrLiBUaGUgZXh0ZXJuYWxcbiAqIGBvcHRpb25zLnNpZ25hbGAgaXMgdGllZCBpbiwgYW5kIGEgYHRyeS9maW5hbGx5YCBhYm9ydHMgdGhlXG4gKiBpbnRlcm5hbCBzaWduYWwgd2hlbiB0aGUgY29uc3VtZXIgYnJlYWtzIG91dCBvZiB0aGUgYGZvciBhd2FpdGBcbiAqIChvciB0aGUgbG9vcCB0aHJvd3MpLCBzbyBhbnkgcHJvZHVjZXIgd29yayBzdGlsbCBob2xkaW5nIHRoZVxuICogc2lnbmFsIHNlZXMgdGhlIGNhbmNlbGxhdGlvbiB0b28uXG4gKlxuICogQGV4YW1wbGVcbiAqIGZvciBhd2FpdCAoY29uc3QgbXNnIG9mIHBvbGwoXG4gKiAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PlxuICogICAgIGNsaWVudC5nZW5pZS5nZXRNZXNzYWdlKHsgLi4uIH0sIHsgYWJvcnRTaWduYWw6IHNpZ25hbCB9KSxcbiAqICAge1xuICogICAgIGludGVydmFsTXM6IDI1MCxcbiAqICAgICBwcmVkaWNhdGU6IChtKSA9PiAhVEVSTUlOQUxfU1RBVFVTRVMuaGFzKG0uc3RhdHVzKSxcbiAqICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICogICB9LFxuICogKSkge1xuICogICByZW5kZXIobXNnKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBwb2xsPFQsIEEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHByb2R1Y2VyOiBQb2xsUHJvZHVjZXI8VCwgQT4sXG4gIG9wdGlvbnM6IFBvbGxPcHRpb25zPFQsIEE+LFxuKTogQXN5bmNHZW5lcmF0b3I8VCwgdm9pZCwgdm9pZD4ge1xuICBjb25zdCB7IGludGVydmFsTXMsIHByZWRpY2F0ZSwgc2lnbmFsLCBhdHRyaWJ1dGVzLCB0aW1lb3V0TXMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGlmIChzaWduYWwpIHRpZUFib3J0U2lnbmFsKGNvbnRyb2xsZXIsIHNpZ25hbCk7XG4gIGlmICh0aW1lb3V0TXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRpZUFib3J0U2lnbmFsKGNvbnRyb2xsZXIsIEFib3J0U2lnbmFsLnRpbWVvdXQodGltZW91dE1zKSk7XG4gIH1cbiAgLy8gU2luZ2xlIHNoYXJlZCBhdHRyaWJ1dGVzIG9iamVjdCBzbyB3cml0ZXMgZnJvbSBvbmUgaXRlcmF0aW9uIGFyZVxuICAvLyB2aXNpYmxlIG9uIHRoZSBuZXh0LiBge30gYXMgQWAgaXMgc2FmZSBiZWNhdXNlIGVpdGhlciB0aGUgY2FsbGVyXG4gIC8vIHN1cHBsaWVkIGBhdHRyaWJ1dGVzYCAodHlwZWQpIG9yIGBBYCBkZWZhdWx0ZWQgdG8gdGhlIHVua25vd25cbiAgLy8gcmVjb3JkIHNoYXBlIChpbiB3aGljaCBjYXNlIGB7fWAgc2F0aXNmaWVzIGl0KS5cbiAgY29uc3Qgc2hhcmVkQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgPz8gKHt9IGFzIEEpO1xuICB0cnkge1xuICAgIGxldCBwcmV2aW91czogVCB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgOyBhdHRlbXB0KyspIHtcbiAgICAgIGNvbnRyb2xsZXIuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBjdHg6IFBvbGxDb250ZXh0PFQsIEE+ID0ge1xuICAgICAgICBhdHRlbXB0LFxuICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgYXR0cmlidXRlczogc2hhcmVkQXR0cmlidXRlcyxcbiAgICAgIH07XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHByb2R1Y2VyKGN0eCk7XG4gICAgICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyID09PSBcImRpc3RpbmN0XCIpIHtcbiAgICAgICAgICBpZiAoZGVlcEVxdWFsKHByZXZpb3VzLCB2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCEoYXdhaXQgb3B0aW9ucy5maWx0ZXIodmFsdWUsIGN0eCkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgaWYgKHByZWRpY2F0ZSAmJiAhKGF3YWl0IHByZWRpY2F0ZSh2YWx1ZSwgY3R4KSkpIHJldHVybjtcbiAgICAgIGF3YWl0IHNsZWVwKGludGVydmFsTXMsIGNvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIHByZXZpb3VzID0gdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRpZSBhIGNoaWxkIGBBYm9ydENvbnRyb2xsZXJgIHRvIGEgcGFyZW50IHNpZ25hbC4gVGhlIGNoaWxkIGFib3J0c1xuICogd2hlbmV2ZXIgdGhlIHBhcmVudCBhYm9ydHM7IGFib3J0aW5nIHRoZSBjaGlsZCBkb2VzIG5vdCBhZmZlY3QgdGhlXG4gKiBwYXJlbnQgKHNvIGEgZmV0Y2gtbGV2ZWwgY2FuY2VsIGRvZXNuJ3QgdGVhciBkb3duIHRoZSBtYWluIHBvbGwgbG9vcCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWVBYm9ydFNpZ25hbChjaGlsZDogQWJvcnRDb250cm9sbGVyLCBwYXJlbnQ/OiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChwYXJlbnQuYWJvcnRlZCkge1xuICAgIGNoaWxkLmFib3J0KHBhcmVudC5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGNoaWxkLmFib3J0KHBhcmVudC5yZWFzb24pLCB7XG4gICAgb25jZTogdHJ1ZSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tYmluZSBzZXZlcmFsIG9wdGlvbmFsIGNhbmNlbGxhdGlvbiBzb3VyY2VzIGludG8gb25lIHNpZ25hbCB0aGF0IGFib3J0c1xuICogYXMgc29vbiBhcyBhbnkgb2YgdGhlbSBkb2VzLlxuICpcbiAqIFRoZSB1c3VhbCBjYWxsZXIgaXMgYW4gb3BlcmF0aW9uIHRoYXQgaGFzIHRvIGhvbm9yIG1vcmUgdGhhbiBvbmUgc291cmNlIGF0XG4gKiBvbmNlIC0gYSBjYWxsZXIncyBvd24gc2lnbmFsIChhIGNsb3NlZCBjb25uZWN0aW9uLCBhbiBhZ2VudCBydW4gYmVpbmdcbiAqIGNhbmNlbGxlZCkgcGx1cyBvbmUgZGVyaXZlZCBmcm9tIGEgdGltZW91dCAtIHdoZXJlIHRoZSBhd2FpdGVkIEkvTyBhY2NlcHRzXG4gKiBvbmx5IGEgc2luZ2xlIHNpZ25hbC4gQWJzZW50IHNvdXJjZXMgYXJlIGlnbm9yZWQsIGFuZCBhIGxvbmUgc2lnbmFsIGlzXG4gKiByZXR1cm5lZCBhcy1pcyBzbyB0aGUgY29tbW9uIHBhdGggYWxsb2NhdGVzIG5vdGhpbmcuIFJldHVybnMgYHVuZGVmaW5lZGBcbiAqIG9ubHkgd2hlbiBldmVyeSBpbnB1dCBpcyBhYnNlbnQsIHdoaWNoIGNhbGxlcnMgY2FuIHBhc3Mgc3RyYWlnaHQgdGhyb3VnaFxuICogdG8gYW4gb3B0aW9uYWwgYHNpZ25hbGAgcGFyYW1ldGVyLlxuICpcbiAqIEFib3J0aW5nIGFuIGlucHV0IGFib3J0cyB0aGUgcmVzdWx0IChjYXJyeWluZyB0aGF0IGlucHV0J3MgYHJlYXNvbmApO1xuICogbm90aGluZyBwcm9wYWdhdGVzIGJhY2sgdGhlIG90aGVyIHdheS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29tYmluZUFib3J0U2lnbmFscyhyZXEuc2lnbmFsLCB0aW1lb3V0LnNpZ25hbCkgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lQWJvcnRTaWduYWxzKFxuICAuLi5zaWduYWxzOiAoQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpW11cbik6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcHJlc2VudCA9IHNpZ25hbHMuZmlsdGVyKChzaWduYWwpOiBzaWduYWwgaXMgQWJvcnRTaWduYWwgPT4gc2lnbmFsICE9PSB1bmRlZmluZWQpO1xuICBpZiAocHJlc2VudC5sZW5ndGggPD0gMSkgcmV0dXJuIHByZXNlbnRbMF07XG4gIGNvbnN0IGNvbWJpbmVkID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBwcmVzZW50KSB0aWVBYm9ydFNpZ25hbChjb21iaW5lZCwgc2lnbmFsKTtcbiAgcmV0dXJuIGNvbWJpbmVkLnNpZ25hbDtcbn1cblxuLyoqXG4gKiBQcm9taXNpZmllZCBgc2V0VGltZW91dGAgdGhhdCB3YWtlcyB1cCBlYXJseSAoYW5kIHJlamVjdHMgd2l0aFxuICogYHNpZ25hbC5yZWFzb25gKSB3aGVuIGBzaWduYWxgIGFib3J0cyBtaWQtd2FpdC4gU2hvcnQtY2lyY3VpdHMgdG8gYVxuICogcmVqZWN0ZWQgcHJvbWlzZSB3aGVuIHRoZSBzaWduYWwgaXMgYWxyZWFkeSBhYm9ydGVkIG9uIGVudHJ5LCBzbyB0aGVcbiAqIGFib3J0IHBhdGggaXMgY29uc2lzdGVudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHdhaXQgYWN0dWFsbHlcbiAqIHN0YXJ0ZWQuXG4gKlxuICogVXNlIGFzIHRoZSBidWlsZGluZyBibG9jayBmb3IgYW55IFwid2FpdCwgYnV0IGNhbmNlbCBjbGVhbmx5XCIgcGF0dGVybiAtXG4gKiBpbnRlci1wb2xsIGJhY2tvZmYsIHBhY2luZyBsb29wcywgcmV0cnkgdGltZXJzLCBsb25nLXBvbGwgYnVkZ2V0cyAtIHNvXG4gKiBjYW5jZWxsYXRpb24gYWx3YXlzIHJlamVjdHMgd2l0aCB0aGUgY2FsbGVyJ3MgYHNpZ25hbC5yZWFzb25gIHJhdGhlclxuICogdGhhbiBzaWxlbnRseSByZXNvbHZpbmcgYWZ0ZXIgdGhlIHRpbWVyIGV4cGlyZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHNsZWVwKDI1MCwgcmVxLnNpZ25hbCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3Qoc2lnbmFsIS5yZWFzb24pO1xuICAgIH07XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIG1zKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gIH0pO1xufVxuIl19
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFrRnhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN6QixRQUE0QixFQUM1QixPQUEwQjtJQUUxQixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3pDLElBQUksTUFBTTtRQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0MsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsY0FBYyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELG1FQUFtRTtJQUNuRSxtRUFBbUU7SUFDbkUsZ0VBQWdFO0lBQ2hFLGtEQUFrRDtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLFVBQVUsSUFBSyxFQUFRLENBQUM7SUFDakQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxRQUF1QixDQUFDO1FBQzVCLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFJLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEdBQUcsR0FBc0I7Z0JBQzdCLE9BQU87Z0JBQ1AsUUFBUTtnQkFDUixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLFVBQVUsRUFBRSxnQkFBZ0I7YUFDN0IsQ0FBQztZ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LENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FuY2VsbGF0aW9uLWF3YXJlIGFzeW5jIHByaW1pdGl2ZXM6IGFuIGFib3J0YWJsZSB7QGxpbmsgc2xlZXB9LCBhblxuICoge0BsaW5rIEFib3J0Q29udHJvbGxlcn0gbGlua2VyICh7QGxpbmsgdGllQWJvcnRTaWduYWx9KSwgYW5kIGEgcGVyaW9kaWNcbiAqIHtAbGluayBwb2xsfSBnZW5lcmF0b3IuIERlcGVuZGVuY3ktZnJlZTsgYHBvbGxgJ3MgYFwiZGlzdGluY3RcImAgZmlsdGVyXG4gKiB1c2VzIHRoZSBsb2NhbCB7QGxpbmsgZGVlcEVxdWFsfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gXCIuL29iamVjdC50c1wiO1xuXG4vKipcbiAqIFBlci1pdGVyYXRpb24gY29udGV4dCBoYW5kZWQgdG8ge0BsaW5rIFBvbGxQcm9kdWNlcn0gYW5kIHRoZVxuICogcHJlZGljYXRlIG9uIGVhY2ggc3RlcCBvZiBhIHtAbGluayBwb2xsfSBsb29wLiBCdW5kbGVzIHRoZVxuICogaXRlcmF0aW9uIG1ldGFkYXRhIHNvIHRoZSBjYWxsIHNpZ25hdHVyZXMgc3RheSBzdGFibGUgYXMgYHBvbGxgXG4gKiBncm93cyBhZGRpdGlvbmFsIGZpZWxkcy5cbiAqXG4gKiBgc2lnbmFsYCBpcyBvd25lZCBieSBgcG9sbGA6IGl0IHRyYWNrcyB0aGUgZXh0ZXJuYWxcbiAqIGBQb2xsT3B0aW9ucy5zaWduYWxgICh3aGVuIHN1cHBsaWVkKSBhbmQgYWxzbyBmaXJlcyB3aGVuIHRoZVxuICogY29uc3VtZXIgYnJlYWtzIG91dCBvZiB0aGUgbG9vcCwgc28gcHJvZHVjZXJzIGNhbiBmb3J3YXJkIGl0IHRvXG4gKiBhbnkgaW4tZmxpZ2h0IHdvcmsgKGBmZXRjaGAsIFNESyBjYWxscywgZXRjLikgYW5kIGhhdmUgYSBzaW5nbGVcbiAqIGNhbmNlbGxhdGlvbiBzb3VyY2UgdGVhciBkb3duIGJvdGggdGhlIHJlcXVlc3QgYW5kIHRoZSBsb29wLlxuICpcbiAqIGBhdHRyaWJ1dGVzYCBpcyBhIG11dGFibGUgc2NyYXRjaHBhZCBzaGFyZWQgYWNyb3NzIGV2ZXJ5XG4gKiBpdGVyYXRpb24gb2YgYSBzaW5nbGUgYHBvbGxgIHJ1bi4gVGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSBpc1xuICogcGFzc2VkIGVhY2ggY2FsbCBzbyB3cml0ZXMgZnJvbSBvbmUgaXRlcmF0aW9uIGFyZSB2aXNpYmxlIHRvIHRoZVxuICogbmV4dCAtIHVzZWZ1bCBmb3Igc3Rhc2hpbmcgcGVyLWxvb3Agc3RhdGUgKHJldHJ5IGNvdW50ZXJzLCBzdGFydFxuICogdGltZXN0YW1wcywgYW55dGhpbmcgeW91J2Qgb3RoZXJ3aXNlIGNsb3NlIG92ZXIgdmlhIGEgbGV0KS5cbiAqIEdlbmVyaWMgYEFgIGxldHMgY2FsbGVycyB0eXBlIHRoZSBiYWc7IGRlZmF1bHRzIHRvXG4gKiBgUmVjb3JkPHN0cmluZywgdW5rbm93bj5gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvbGxDb250ZXh0PFQsIEEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogWmVyby1iYXNlZCBpdGVyYXRpb24gaW5kZXggKGAwYCBvbiB0aGUgZmlyc3QgY2FsbCkuICovXG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgLyoqIFZhbHVlIHlpZWxkZWQgb24gdGhlIHByaW9yIGl0ZXJhdGlvbjsgYHVuZGVmaW5lZGAgb24gdGhlIGZpcnN0LiAqL1xuICBwcmV2aW91czogVCB8IHVuZGVmaW5lZDtcbiAgLyoqIENhbmNlbGxhdGlvbiBoYW5kbGUuIEFsd2F5cyBkZWZpbmVkOyBmb3J3YXJkIHRvIGluLWZsaWdodCB3b3JrLiAqL1xuICBzaWduYWw6IEFib3J0U2lnbmFsO1xuICAvKiogUGVyLXJ1biBtdXRhYmxlIHNjcmF0Y2hwYWQgc2hhcmVkIGFjcm9zcyBpdGVyYXRpb25zLiAqL1xuICBhdHRyaWJ1dGVzOiBBO1xufVxuXG4vKiogT25lIHN0ZXAgb2YgYSB7QGxpbmsgcG9sbH0gbG9vcC4gU2VlIHtAbGluayBQb2xsQ29udGV4dH0uICovXG5leHBvcnQgdHlwZSBQb2xsUHJvZHVjZXI8VCwgQSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IChcbiAgY3R4OiBQb2xsQ29udGV4dDxULCBBPixcbikgPT4gVCB8IFByb21pc2VMaWtlPFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGxPcHRpb25zPFQsIEEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogTWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBwb2xscy4gKi9cbiAgaW50ZXJ2YWxNczogbnVtYmVyO1xuICAvKipcbiAgICogUHJlZGljYXRlIGV2YWx1YXRlZCBhZ2FpbnN0IGVhY2ggeWllbGRlZCB2YWx1ZTogcmV0dXJuIGB0cnVlYCB0b1xuICAgKiBrZWVwIGl0LCBgZmFsc2VgIHRvIHNraXAgaXQgKHdpdGhvdXQgc3RvcHBpbmcgdGhlIGxvb3ApLiBNYXkgYmVcbiAgICogc3luYyBvciBhc3luYyAtIGEgYFByb21pc2VMaWtlPGJvb2xlYW4+YCBpcyBhd2FpdGVkIGJlZm9yZSB0aGVcbiAgICogZGVjaXNpb24gaXMgbWFkZS4gUmVjZWl2ZXMgdGhlIHNhbWUge0BsaW5rIFBvbGxDb250ZXh0fSBhcyB0aGVcbiAgICogcHJvZHVjZXIgKHNhbWUgYHNpZ25hbGAsIHNhbWUgYGF0dHJpYnV0ZXNgIGJhZykuIFRoZSBzcGVjaWFsXG4gICAqIHZhbHVlIGBcImRpc3RpbmN0XCJgIHNraXBzIGEgdmFsdWUgdGhhdCBkZWVwLWVxdWFscyB0aGUgcHJldmlvdXNcbiAgICogb25lLlxuICAgKi9cbiAgZmlsdGVyPzogKCh2YWx1ZTogVCwgY3R4OiBQb2xsQ29udGV4dDxULCBBPikgPT4gYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+KSB8IFwiZGlzdGluY3RcIjtcbiAgLyoqXG4gICAqIFByZWRpY2F0ZSBldmFsdWF0ZWQgYWdhaW5zdCBlYWNoIHlpZWxkZWQgdmFsdWU6IHJldHVybiBgdHJ1ZWAgdG9cbiAgICoga2VlcCBwb2xsaW5nLCBgZmFsc2VgIHRvIHN0b3AuIE1heSBiZSBzeW5jIG9yIGFzeW5jLiBPbWl0IHRvIHBvbGxcbiAgICogZm9yZXZlciAodGhlIGNvbnN1bWVyIHN0b3BzIGJ5IGJyZWFraW5nIG91dCBvZiB0aGUgbG9vcCBvciBieVxuICAgKiBhYm9ydGluZyBgc2lnbmFsYCkuXG4gICAqL1xuICBwcmVkaWNhdGU/OiAodmFsdWU6IFQsIGN0eDogUG9sbENvbnRleHQ8VCwgQT4pID0+IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEV4dGVybmFsIGNhbmNlbGxhdGlvbiBoYW5kbGUuIFRpZWQgaW50byB0aGUgaW50ZXJuYWwgc2lnbmFsIHRoYXRcbiAgICogYHBvbGxgIGhhbmRzIHRvIGBwcm9kdWNlcmAsIHNvIGFib3J0aW5nIGl0IHRlYXJzIGRvd24gYm90aCB0aGVcbiAgICogaW4tZmxpZ2h0IHJlcXVlc3QgYW5kIHRoZSBpbnRlci1wb2xsIHNsZWVwLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBIYXJkIHVwcGVyIGJvdW5kIG9uIHRoZSB0b3RhbCBsaWZldGltZSBvZiB0aGUgcG9sbCBsb29wLCBpblxuICAgKiBtaWxsaXNlY29uZHMuIFdoZW4gdGhlIGJ1ZGdldCBlbGFwc2VzLCBgcG9sbGAgYWJvcnRzIGl0cyBpbnRlcm5hbFxuICAgKiBzaWduYWwgc28gdGhlIGluLWZsaWdodCBwcm9kdWNlciBhbmQgaW50ZXItcG9sbCBzbGVlcCBib3RoIHRlYXJcbiAgICogZG93biBwcm9tcHRseSwgYW5kIHRoZSBsb29wIHRocm93cyB0aGUgYFRpbWVvdXRFcnJvcmBcbiAgICogYERPTUV4Y2VwdGlvbmAgcHJvZHVjZWQgYnkgYEFib3J0U2lnbmFsLnRpbWVvdXQodGltZW91dE1zKWAuIFRoZVxuICAgKiBidWRnZXQgc3RhcnRzIHRpY2tpbmcgdGhlIG1vbWVudCB0aGUgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlIGZvciBgY3R4LmF0dHJpYnV0ZXNgLiBEZWZhdWx0cyB0byBge31gLiBUaGUgc2FtZVxuICAgKiBvYmplY3QgaXMgcmV1c2VkIGFjcm9zcyBpdGVyYXRpb25zLCBzbyBjYWxsZXJzIGNhbiBwcmUtcG9wdWxhdGVcbiAgICogZmllbGRzICh0aW1lcnMsIHJldHJ5IGNvdW50ZXJzLCBldGMuKSBhbmQgdGhlIHByb2R1Y2VyIC9cbiAgICogcHJlZGljYXRlIGNhbiBtdXRhdGUgdGhlbSBpbiBwbGFjZS5cbiAgICovXG4gIGF0dHJpYnV0ZXM/OiBBO1xufVxuXG4vKipcbiAqIEFzeW5jIGl0ZXJhYmxlIHRoYXQgZHJpdmVzIGEgcGVyaW9kaWMgcG9sbC4gRWFjaCBpdGVyYXRpb246XG4gKlxuICogICAxLiBCdWlsZHMgYSB7QGxpbmsgUG9sbENvbnRleHR9IChgYXR0ZW1wdGAsIGBwcmV2aW91c2AsIGBzaWduYWxgLFxuICogICAgICBzaGFyZWQgYGF0dHJpYnV0ZXNgKSBhbmQgY2FsbHMgYHByb2R1Y2VyKGN0eClgOyB5aWVsZHMgdGhlXG4gKiAgICAgIHJlc29sdmVkIHZhbHVlIChzdWJqZWN0IHRvIGBmaWx0ZXJgKS5cbiAqICAgMi4gRXZhbHVhdGVzIGBvcHRpb25zLnByZWRpY2F0ZSh2YWx1ZSwgY3R4KWA7IHN0b3BzIHdoZW4gaXRcbiAqICAgICAgcmV0dXJucyAob3IgcmVzb2x2ZXMgdG8pIGBmYWxzZWAuXG4gKiAgIDMuIFNsZWVwcyBgb3B0aW9ucy5pbnRlcnZhbE1zYCBiZWZvcmUgdGhlIG5leHQgYXR0ZW1wdC5cbiAqXG4gKiBUaGUgZmlyc3QgY2FsbCBydW5zIGltbWVkaWF0ZWx5IChubyBsZWFkaW5nIHNsZWVwKSBzbyB0aGUgY29uc3VtZXJcbiAqIHNlZXMgYSB2YWx1ZSB3aXRob3V0IHdhaXRpbmcgYW4gaW50ZXJ2YWwuIEVycm9ycyB0aHJvd24gYnlcbiAqIGBwcm9kdWNlcmAgcHJvcGFnYXRlIHRocm91Z2ggdGhlIGdlbmVyYXRvci5cbiAqXG4gKiBgcG9sbGAgYWx3YXlzIGNyZWF0ZXMgYW4gaW50ZXJuYWwgYEFib3J0Q29udHJvbGxlcmAgYW5kIGV4cG9zZXNcbiAqIGBpbnRlcm5hbC5zaWduYWxgIGFzIGBjdHguc2lnbmFsYCwgc28gcHJvZHVjZXJzIGNhbiByZWx5IG9uIGFcbiAqIGRlZmluZWQgc2lnbmFsIHdpdGhvdXQgYSBudWxsaXNoIGNoZWNrLiBUaGUgZXh0ZXJuYWxcbiAqIGBvcHRpb25zLnNpZ25hbGAgaXMgdGllZCBpbiwgYW5kIGEgYHRyeS9maW5hbGx5YCBhYm9ydHMgdGhlXG4gKiBpbnRlcm5hbCBzaWduYWwgd2hlbiB0aGUgY29uc3VtZXIgYnJlYWtzIG91dCBvZiB0aGUgYGZvciBhd2FpdGBcbiAqIChvciB0aGUgbG9vcCB0aHJvd3MpLCBzbyBhbnkgcHJvZHVjZXIgd29yayBzdGlsbCBob2xkaW5nIHRoZVxuICogc2lnbmFsIHNlZXMgdGhlIGNhbmNlbGxhdGlvbiB0b28uXG4gKlxuICogQGV4YW1wbGVcbiAqIGZvciBhd2FpdCAoY29uc3QgbXNnIG9mIHBvbGwoXG4gKiAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PlxuICogICAgIGNsaWVudC5nZW5pZS5nZXRNZXNzYWdlKHsgLi4uIH0sIHsgYWJvcnRTaWduYWw6IHNpZ25hbCB9KSxcbiAqICAge1xuICogICAgIGludGVydmFsTXM6IDI1MCxcbiAqICAgICBwcmVkaWNhdGU6IChtKSA9PiAhVEVSTUlOQUxfU1RBVFVTRVMuaGFzKG0uc3RhdHVzKSxcbiAqICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICogICB9LFxuICogKSkge1xuICogICByZW5kZXIobXNnKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBwb2xsPFQsIEEgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHByb2R1Y2VyOiBQb2xsUHJvZHVjZXI8VCwgQT4sXG4gIG9wdGlvbnM6IFBvbGxPcHRpb25zPFQsIEE+LFxuKTogQXN5bmNHZW5lcmF0b3I8VCwgdm9pZCwgdm9pZD4ge1xuICBjb25zdCB7IGludGVydmFsTXMsIHByZWRpY2F0ZSwgc2lnbmFsLCBhdHRyaWJ1dGVzLCB0aW1lb3V0TXMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGlmIChzaWduYWwpIHRpZUFib3J0U2lnbmFsKGNvbnRyb2xsZXIsIHNpZ25hbCk7XG4gIGlmICh0aW1lb3V0TXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRpZUFib3J0U2lnbmFsKGNvbnRyb2xsZXIsIEFib3J0U2lnbmFsLnRpbWVvdXQodGltZW91dE1zKSk7XG4gIH1cbiAgLy8gU2luZ2xlIHNoYXJlZCBhdHRyaWJ1dGVzIG9iamVjdCBzbyB3cml0ZXMgZnJvbSBvbmUgaXRlcmF0aW9uIGFyZVxuICAvLyB2aXNpYmxlIG9uIHRoZSBuZXh0LiBge30gYXMgQWAgaXMgc2FmZSBiZWNhdXNlIGVpdGhlciB0aGUgY2FsbGVyXG4gIC8vIHN1cHBsaWVkIGBhdHRyaWJ1dGVzYCAodHlwZWQpIG9yIGBBYCBkZWZhdWx0ZWQgdG8gdGhlIHVua25vd25cbiAgLy8gcmVjb3JkIHNoYXBlIChpbiB3aGljaCBjYXNlIGB7fWAgc2F0aXNmaWVzIGl0KS5cbiAgY29uc3Qgc2hhcmVkQXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgPz8gKHt9IGFzIEEpO1xuICB0cnkge1xuICAgIGxldCBwcmV2aW91czogVCB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgOyBhdHRlbXB0KyspIHtcbiAgICAgIGNvbnRyb2xsZXIuc2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBjdHg6IFBvbGxDb250ZXh0PFQsIEE+ID0ge1xuICAgICAgICBhdHRlbXB0LFxuICAgICAgICBwcmV2aW91cyxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgYXR0cmlidXRlczogc2hhcmVkQXR0cmlidXRlcyxcbiAgICAgIH07XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHByb2R1Y2VyKGN0eCk7XG4gICAgICBpZiAob3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsdGVyID09PSBcImRpc3RpbmN0XCIpIHtcbiAgICAgICAgICBpZiAoZGVlcEVxdWFsKHByZXZpb3VzLCB2YWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCEoYXdhaXQgb3B0aW9ucy5maWx0ZXIodmFsdWUsIGN0eCkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgaWYgKHByZWRpY2F0ZSAmJiAhKGF3YWl0IHByZWRpY2F0ZSh2YWx1ZSwgY3R4KSkpIHJldHVybjtcbiAgICAgIGF3YWl0IHNsZWVwKGludGVydmFsTXMsIGNvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIHByZXZpb3VzID0gdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRpZSBhIGNoaWxkIGBBYm9ydENvbnRyb2xsZXJgIHRvIGEgcGFyZW50IHNpZ25hbC4gVGhlIGNoaWxkIGFib3J0c1xuICogd2hlbmV2ZXIgdGhlIHBhcmVudCBhYm9ydHM7IGFib3J0aW5nIHRoZSBjaGlsZCBkb2VzIG5vdCBhZmZlY3QgdGhlXG4gKiBwYXJlbnQgKHNvIGEgZmV0Y2gtbGV2ZWwgY2FuY2VsIGRvZXNuJ3QgdGVhciBkb3duIHRoZSBtYWluIHBvbGwgbG9vcCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWVBYm9ydFNpZ25hbChjaGlsZDogQWJvcnRDb250cm9sbGVyLCBwYXJlbnQ/OiBBYm9ydFNpZ25hbCk6IHZvaWQge1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmIChwYXJlbnQuYWJvcnRlZCkge1xuICAgIGNoaWxkLmFib3J0KHBhcmVudC5yZWFzb24pO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IGNoaWxkLmFib3J0KHBhcmVudC5yZWFzb24pLCB7XG4gICAgb25jZTogdHJ1ZSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tYmluZSBzZXZlcmFsIG9wdGlvbmFsIGNhbmNlbGxhdGlvbiBzb3VyY2VzIGludG8gb25lIHNpZ25hbCB0aGF0IGFib3J0c1xuICogYXMgc29vbiBhcyBhbnkgb2YgdGhlbSBkb2VzLlxuICpcbiAqIFRoZSB1c3VhbCBjYWxsZXIgaXMgYW4gb3BlcmF0aW9uIHRoYXQgaGFzIHRvIGhvbm9yIG1vcmUgdGhhbiBvbmUgc291cmNlIGF0XG4gKiBvbmNlIC0gYSBjYWxsZXIncyBvd24gc2lnbmFsIChhIGNsb3NlZCBjb25uZWN0aW9uLCBhbiBhZ2VudCBydW4gYmVpbmdcbiAqIGNhbmNlbGxlZCkgcGx1cyBvbmUgZGVyaXZlZCBmcm9tIGEgdGltZW91dCAtIHdoZXJlIHRoZSBhd2FpdGVkIEkvTyBhY2NlcHRzXG4gKiBvbmx5IGEgc2luZ2xlIHNpZ25hbC4gQWJzZW50IHNvdXJjZXMgYXJlIGlnbm9yZWQsIGFuZCBhIGxvbmUgc2lnbmFsIGlzXG4gKiByZXR1cm5lZCBhcy1pcyBzbyB0aGUgY29tbW9uIHBhdGggYWxsb2NhdGVzIG5vdGhpbmcuIFJldHVybnMgYHVuZGVmaW5lZGBcbiAqIG9ubHkgd2hlbiBldmVyeSBpbnB1dCBpcyBhYnNlbnQsIHdoaWNoIGNhbGxlcnMgY2FuIHBhc3Mgc3RyYWlnaHQgdGhyb3VnaFxuICogdG8gYW4gb3B0aW9uYWwgYHNpZ25hbGAgcGFyYW1ldGVyLlxuICpcbiAqIEFib3J0aW5nIGFuIGlucHV0IGFib3J0cyB0aGUgcmVzdWx0IChjYXJyeWluZyB0aGF0IGlucHV0J3MgYHJlYXNvbmApO1xuICogbm90aGluZyBwcm9wYWdhdGVzIGJhY2sgdGhlIG90aGVyIHdheS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29tYmluZUFib3J0U2lnbmFscyhyZXEuc2lnbmFsLCB0aW1lb3V0LnNpZ25hbCkgfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lQWJvcnRTaWduYWxzKFxuICAuLi5zaWduYWxzOiAoQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpW11cbik6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcHJlc2VudCA9IHNpZ25hbHMuZmlsdGVyKChzaWduYWwpOiBzaWduYWwgaXMgQWJvcnRTaWduYWwgPT4gc2lnbmFsICE9PSB1bmRlZmluZWQpO1xuICBpZiAocHJlc2VudC5sZW5ndGggPD0gMSkgcmV0dXJuIHByZXNlbnRbMF07XG4gIGNvbnN0IGNvbWJpbmVkID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBwcmVzZW50KSB0aWVBYm9ydFNpZ25hbChjb21iaW5lZCwgc2lnbmFsKTtcbiAgcmV0dXJuIGNvbWJpbmVkLnNpZ25hbDtcbn1cblxuLyoqXG4gKiBQcm9taXNpZmllZCBgc2V0VGltZW91dGAgdGhhdCB3YWtlcyB1cCBlYXJseSAoYW5kIHJlamVjdHMgd2l0aFxuICogYHNpZ25hbC5yZWFzb25gKSB3aGVuIGBzaWduYWxgIGFib3J0cyBtaWQtd2FpdC4gU2hvcnQtY2lyY3VpdHMgdG8gYVxuICogcmVqZWN0ZWQgcHJvbWlzZSB3aGVuIHRoZSBzaWduYWwgaXMgYWxyZWFkeSBhYm9ydGVkIG9uIGVudHJ5LCBzbyB0aGVcbiAqIGFib3J0IHBhdGggaXMgY29uc2lzdGVudCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHdhaXQgYWN0dWFsbHlcbiAqIHN0YXJ0ZWQuXG4gKlxuICogVXNlIGFzIHRoZSBidWlsZGluZyBibG9jayBmb3IgYW55IFwid2FpdCwgYnV0IGNhbmNlbCBjbGVhbmx5XCIgcGF0dGVybiAtXG4gKiBpbnRlci1wb2xsIGJhY2tvZmYsIHBhY2luZyBsb29wcywgcmV0cnkgdGltZXJzLCBsb25nLXBvbGwgYnVkZ2V0cyAtIHNvXG4gKiBjYW5jZWxsYXRpb24gYWx3YXlzIHJlamVjdHMgd2l0aCB0aGUgY2FsbGVyJ3MgYHNpZ25hbC5yZWFzb25gIHJhdGhlclxuICogdGhhbiBzaWxlbnRseSByZXNvbHZpbmcgYWZ0ZXIgdGhlIHRpbWVyIGV4cGlyZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGF3YWl0IHNsZWVwKDI1MCwgcmVxLnNpZ25hbCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25BYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3Qoc2lnbmFsIS5yZWFzb24pO1xuICAgIH07XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIG1zKTtcbiAgICBzaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBvbkFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG4gIH0pO1xufVxuIl19
|
package/lib/src/error.js
CHANGED
|
@@ -165,4 +165,4 @@ class ErrorContextImpl {
|
|
|
165
165
|
export function errorContext(err) {
|
|
166
166
|
return new ErrorContextImpl(err ?? {});
|
|
167
167
|
}
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWM7SUFDcEMsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYztJQUN6QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ2xELE9BQU8sT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQWM7SUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2hCLE1BQU0sS0FBSyxHQUFJLElBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUN2QyxNQUFNLEtBQUssQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7WUFDSCxD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LENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUM7Z0JBQ3hFLElBQUksS0FBSztvQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsYUFBcUIsRUFBRSxHQUFHLGNBQXdCO1FBQzNELE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUM7YUFDdEMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDakYsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDRjtBQUVELG1HQUFtRztBQUNuRyxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVk7SUFDdkMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFcnJvciBub3JtYWxpemF0aW9uIGhlbHBlcnM6IGNvbGxhcHNlIHRoZSB1YmlxdWl0b3VzXG4gKiBgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpYCBkYW5jZSBpbnRvIGEgc2luZ2xlXG4gKiBjYWxsLCB3YWxrIGBjYXVzZWAgLyBgQWdncmVnYXRlRXJyb3JgIGNoYWlucywgYW5kIGNvZXJjZSBhbnkgdGhyb3duXG4gKiB2YWx1ZSBpbnRvIGEgcmVhbCBgRXJyb3JgLiBEZXBlbmRlbmN5LWZyZWUgYW5kIGJyb3dzZXItc2FmZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgdG9rZW5pemVXaXRoT3B0aW9ucyB9IGZyb20gXCIuL3N0cmluZ1wiO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbnkgdGhyb3duIHZhbHVlIGludG8gYW4gYEVycm9yYC4gUmV0dXJucyBgdmFsdWVgIHVuY2hhbmdlZFxuICogd2hlbiBpdCBhbHJlYWR5IGlzIGFuIGBFcnJvcmAsIG90aGVyd2lzZSB3cmFwcyBpdHMge0BsaW5rIGVycm9yTWVzc2FnZX1cbiAqIGluIGEgZnJlc2ggYEVycm9yYC4gVXNlIHdoZW4gYSBjb25zdW1lciBuZWVkcyBhIHJlYWwgYEVycm9yYCBvYmplY3RcbiAqIChSZWFjdCBlcnJvciBzdGF0ZSwgYHJlamVjdGAsIHJldGhyb3cpIHJhdGhlciB0aGFuIGp1c3QgYSBwcmludGFibGVcbiAqIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRXJyb3IodmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yID8gdmFsdWUgOiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKHZhbHVlKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhbnkgdGhyb3duIHZhbHVlLiBSZXR1cm5zXG4gKiBgdmFsdWUubWVzc2FnZWAgd2hlbiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIG90aGVyd2lzZSBjb2VyY2VzIHZpYVxuICogYFN0cmluZyh2YWx1ZSlgLiBDb2xsYXBzZXMgdGhlIHViaXF1aXRvdXNcbiAqXG4gKiBgYGB0c1xuICogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpXG4gKiBgYGBcbiAqXG4gKiBkYW5jZSBpbnRvIGEgc2luZ2xlIGhlbHBlciwgdXNlZnVsIGZvciBsb2cgYXR0cmlidXRlcyBhbmQgYW55IG90aGVyXG4gKiBcImdpdmUgbWUgc29tZXRoaW5nIHByaW50YWJsZVwiIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck1lc3NhZ2UodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3JNZXNzYWdlcyh2YWx1ZSkubmV4dCgpLnZhbHVlO1xuICByZXR1cm4gbWVzc2FnZSA/PyBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFlpZWxkIGBtZXNzYWdlYCAvIGBlcnJvckNvZGVgIHN0cmluZ3MgZnJvbSBldmVyeSBub2RlIGluIHRoZSBlcnJvclxuICogdHJlZSAoc2VlIHtAbGluayBlcnJvck5vZGVzfSkuIFVzZWQgYnkge0BsaW5rIGVycm9yTWVzc2FnZX0gYW5kXG4gKiBtZXNzYWdlIHByZWRpY2F0ZXMgZWxzZXdoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGVycm9yTWVzc2FnZXModmFsdWU6IHVua25vd24pOiBHZW5lcmF0b3I8c3RyaW5nLCB2b2lkLCB1bmRlZmluZWQ+IHtcbiAgZm9yIChjb25zdCBub2RlIG9mIGVycm9yTm9kZXModmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBbXCJtZXNzYWdlXCIsIFwiZXJyb3JDb2RlXCJdKSB7XG4gICAgICAgIGlmIChrZXkgaW4gbm9kZSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIiAmJiBub2RlKSB7XG4gICAgICB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlcHRoLWZpcnN0IHdhbGsgb2YgYW4gZXJyb3IgdmFsdWU6IHRoZSByb290LCB0aGVuIGBlcnJvcnNgIChlLmcuXG4gKiBgQWdncmVnYXRlRXJyb3JgKSBhbmQgYGNhdXNlYCBjaGFpbnMuIEN5Y2xlLXNhZmUgdmlhIGEgYHNlZW5gIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBlcnJvck5vZGVzKGVycjogdW5rbm93bik6IEdlbmVyYXRvcjxOb25OdWxsYWJsZTx1bmtub3duPiwgdm9pZCwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG5cbiAgZnVuY3Rpb24qIHZpc2l0KG5vZGU6IHVua25vd24pOiBHZW5lcmF0b3I8Tm9uTnVsbGFibGU8dW5rbm93bj4sIHZvaWQsIHVuZGVmaW5lZD4ge1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUpIHtcbiAgICAgICAgeWllbGQqIHZpc2l0KGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKG5vZGUpKSByZXR1cm47XG4gICAgc2Vlbi5hZGQobm9kZSk7XG4gICAgeWllbGQgbm9kZTtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFtcImVycm9yc1wiLCBcImNhdXNlXCJdKSB7XG4gICAgICAgIGlmIChrZXkgaW4gbm9kZSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgeWllbGQqIHZpc2l0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB5aWVsZCogdmlzaXQoZXJyKTtcbn1cblxuLyoqXG4gKiBMYXp5IHZpZXcgb3ZlciBhIHRocm93biB2YWx1ZSBmb3IgSFRUUC1zdGF0dXMgKyBtZXNzYWdlIGNsYXNzaWZpY2F0aW9uLlxuICogU3RhdHVzIGNvbWVzIGZyb20gdGhlIGxhc3QgcG9zaXRpdmUgYHN0YXR1c0NvZGVgIC8gYGNvZGVgIG9uIHRoZSBlcnJvciB0cmVlO1xuICogbWVzc2FnZXMvdG9rZW5zIGNvbWUgZnJvbSBldmVyeSBgbWVzc2FnZWAgLyBgZXJyb3JDb2RlYCBmaWVsZCAoaW5jbHVkaW5nXG4gKiBgY2F1c2VgIGFuZCBgQWdncmVnYXRlRXJyb3IuZXJyb3JzYCkuIEJ1aWxkIHdpdGgge0BsaW5rIGVycm9yQ29udGV4dH0uXG4gKi9cbmV4cG9ydCB0eXBlIEVycm9yQ29udGV4dCA9IEVycm9yQ29udGV4dEltcGw7XG5cbmNsYXNzIEVycm9yQ29udGV4dEltcGwge1xuICBwcml2YXRlIF9zdGF0dXNDb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX21lc3NhZ2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfbWVzc2FnZVRva2Vuczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlcnI6IE5vbk51bGxhYmxlPHVua25vd24+KSB7fVxuXG4gIC8qKiBMYXN0IHBvc2l0aXZlIGBzdGF0dXNDb2RlYCAvIGBjb2RlYCBmb3VuZCBvbiB0aGUgZXJyb3IgdHJlZSwgZWxzZSBgdW5kZWZpbmVkYCAoMCBpZ25vcmVkKS4gKi9cbiAgZ2V0IHN0YXR1c0NvZGUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fc3RhdHVzQ29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRlcjogZm9yIChjb25zdCBub2RlIG9mIGVycm9yTm9kZXModGhpcy5lcnIpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIiB8fCBub2RlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgW1wic3RhdHVzQ29kZVwiLCBcImNvZGVcIl0gYXMgY29uc3QpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gbm9kZSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiB2YWx1ZSA+IDk5ICYmIHZhbHVlIDwgNjAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDb2RlID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9zdGF0dXNDb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3RhdHVzQ29kZSA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzQ29kZSA9PSAtMSA/IHVuZGVmaW5lZCA6IHRoaXMuX3N0YXR1c0NvZGU7XG4gIH1cblxuICAvKiogRXZlcnkgYG1lc3NhZ2VgIC8gYGVycm9yQ29kZWAgc3RyaW5nIGluIHRoZSBlcnJvciB0cmVlLiAqL1xuICBnZXQgbWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLl9tZXNzYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlcyA9IFsuLi5lcnJvck1lc3NhZ2VzKHRoaXMuZXJyKV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlcztcbiAgfVxuXG4gIC8qKiBMb3dlcmNhc2VkIHRva2VucyBmcm9tIHtAbGluayBtZXNzYWdlc30uICovXG4gIGdldCBtZXNzYWdlVG9rZW5zKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5fbWVzc2FnZVRva2VucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlVG9rZW5zID0gWy4uLnRva2VuaXplV2l0aE9wdGlvbnMoeyBsb3dlckNhc2U6IHRydWUgfSwgLi4udGhpcy5tZXNzYWdlcyldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVRva2VucztcbiAgfVxuXG4gIC8qKiBUcnVlIGZvciBhbnkgNHh4IHN0YXR1cyBvciBtZXNzYWdlIHRva2VucyBgbm90IGV4aXN0YCAvIGBub3QgZm91bmRgLiAqL1xuICBnZXQgbm90QWNjZXNzaWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5oYXNTdGF0dXNDb2RlKDQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5oYXNNZXNzYWdlKFwibm90XCIsIFwiZXhpc3RcIikgfHwgdGhpcy5oYXNNZXNzYWdlKFwibm90XCIsIFwiZm91bmRcIik7XG4gIH1cblxuICAvKipcbiAgICogTWF0Y2ggSFRUUCBzdGF0dXMuIFBhc3MgYSBmdWxsIGNvZGUgKGA0MDRgKSBvciBhIGNsYXNzIChgNGAgZm9yIGFueSA0eHgpLlxuICAgKiBFeHRyYSBmaWx0ZXJzIGFyZSBPUidkLiBgZmFsc2VgIHdoZW4gbm8gc3RhdHVzIGlzIG9uIHRoZSBlcnJvciB0cmVlLlxuICAgKi9cbiAgaGFzU3RhdHVzQ29kZShzdGF0dXNDb2RlRmlsdGVyOiBudW1iZXIsIC4uLnN0YXR1c0NvZGVGaWx0ZXJzOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvZGUgPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIFtzdGF0dXNDb2RlRmlsdGVyLCAuLi5zdGF0dXNDb2RlRmlsdGVyc10pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAoZmlsdGVyIDwgMTAwID8gTWF0aC50cnVuYyhjb2RlIC8gMTAwKSA6IGNvZGUpID09PSBmaWx0ZXI7XG4gICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVlIHdoZW4gZXZlcnkgdG9rZW4gZnJvbSB0aGUgZmlsdGVyIHBocmFzZShzKSBhcHBlYXJzIGluXG4gICAqIHtAbGluayBtZXNzYWdlVG9rZW5zfS4gRWFjaCBhcmd1bWVudCBpcyB0b2tlbml6ZWQgb24gbm9uLWFscGhhbnVtZXJpY1xuICAgKiBib3VuZGFyaWVzIChlLmcuIGBoYXNNZXNzYWdlKFwibm90XCIsIFwiZm91bmRcIilgIG9yIGBoYXNNZXNzYWdlKFwibm90IGZvdW5kXCIpYCkuXG4gICAqL1xuICBoYXNNZXNzYWdlKG1lc3NhZ2VGaWx0ZXI6IHN0cmluZywgLi4ubWVzc2FnZUZpbHRlcnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFttZXNzYWdlRmlsdGVyLCAuLi5tZXNzYWdlRmlsdGVyc11cbiAgICAgIC5mbGF0TWFwKChmaWx0ZXIpID0+IEFycmF5LmZyb20odG9rZW5pemVXaXRoT3B0aW9ucyh7IGxvd2VyQ2FzZTogdHJ1ZSB9LCBmaWx0ZXIpKSlcbiAgICAgIC5ldmVyeSgoZmlsdGVyVG9rZW4pID0+IHRoaXMubWVzc2FnZVRva2Vucy5pbmNsdWRlcyhmaWx0ZXJUb2tlbikpO1xuICB9XG59XG5cbi8qKiBCdWlsZCBhbiB7QGxpbmsgRXJyb3JDb250ZXh0fSBmb3Igc3RhdHVzICsgbWVzc2FnZSBjaGVja3MuIGBudWxsYCAvIGB1bmRlZmluZWRgIGJlY29tZSBge31gLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yQ29udGV4dChlcnI6IHVua25vd24pOiBFcnJvckNvbnRleHQge1xuICByZXR1cm4gbmV3IEVycm9yQ29udGV4dEltcGwoZXJyID8/IHt9KTtcbn1cbiJdfQ==
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWM7SUFDcEMsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYztJQUN6QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ2xELE9BQU8sT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQWM7SUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2hCLE1BQU0sS0FBSyxHQUFJLElBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3JELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUN2QyxNQUFNLEtBQUssQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7WUFDSCxD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LENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUM7Z0JBQ3hFLElBQUksS0FBSztvQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsYUFBcUIsRUFBRSxHQUFHLGNBQXdCO1FBQzNELE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUM7YUFDdEMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDakYsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDRjtBQUVELG1HQUFtRztBQUNuRyxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVk7SUFDdkMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFcnJvciBub3JtYWxpemF0aW9uIGhlbHBlcnM6IGNvbGxhcHNlIHRoZSB1YmlxdWl0b3VzXG4gKiBgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpYCBkYW5jZSBpbnRvIGEgc2luZ2xlXG4gKiBjYWxsLCB3YWxrIGBjYXVzZWAgLyBgQWdncmVnYXRlRXJyb3JgIGNoYWlucywgYW5kIGNvZXJjZSBhbnkgdGhyb3duXG4gKiB2YWx1ZSBpbnRvIGEgcmVhbCBgRXJyb3JgLiBEZXBlbmRlbmN5LWZyZWUgYW5kIGJyb3dzZXItc2FmZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgdG9rZW5pemVXaXRoT3B0aW9ucyB9IGZyb20gXCIuL3N0cmluZy50c1wiO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbnkgdGhyb3duIHZhbHVlIGludG8gYW4gYEVycm9yYC4gUmV0dXJucyBgdmFsdWVgIHVuY2hhbmdlZFxuICogd2hlbiBpdCBhbHJlYWR5IGlzIGFuIGBFcnJvcmAsIG90aGVyd2lzZSB3cmFwcyBpdHMge0BsaW5rIGVycm9yTWVzc2FnZX1cbiAqIGluIGEgZnJlc2ggYEVycm9yYC4gVXNlIHdoZW4gYSBjb25zdW1lciBuZWVkcyBhIHJlYWwgYEVycm9yYCBvYmplY3RcbiAqIChSZWFjdCBlcnJvciBzdGF0ZSwgYHJlamVjdGAsIHJldGhyb3cpIHJhdGhlciB0aGFuIGp1c3QgYSBwcmludGFibGVcbiAqIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRXJyb3IodmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yID8gdmFsdWUgOiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKHZhbHVlKSk7XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhbnkgdGhyb3duIHZhbHVlLiBSZXR1cm5zXG4gKiBgdmFsdWUubWVzc2FnZWAgd2hlbiBgdmFsdWVgIGlzIGFuIGBFcnJvcmAsIG90aGVyd2lzZSBjb2VyY2VzIHZpYVxuICogYFN0cmluZyh2YWx1ZSlgLiBDb2xsYXBzZXMgdGhlIHViaXF1aXRvdXNcbiAqXG4gKiBgYGB0c1xuICogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpXG4gKiBgYGBcbiAqXG4gKiBkYW5jZSBpbnRvIGEgc2luZ2xlIGhlbHBlciwgdXNlZnVsIGZvciBsb2cgYXR0cmlidXRlcyBhbmQgYW55IG90aGVyXG4gKiBcImdpdmUgbWUgc29tZXRoaW5nIHByaW50YWJsZVwiIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvck1lc3NhZ2UodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3JNZXNzYWdlcyh2YWx1ZSkubmV4dCgpLnZhbHVlO1xuICByZXR1cm4gbWVzc2FnZSA/PyBTdHJpbmcodmFsdWUpO1xufVxuXG4vKipcbiAqIFlpZWxkIGBtZXNzYWdlYCAvIGBlcnJvckNvZGVgIHN0cmluZ3MgZnJvbSBldmVyeSBub2RlIGluIHRoZSBlcnJvclxuICogdHJlZSAoc2VlIHtAbGluayBlcnJvck5vZGVzfSkuIFVzZWQgYnkge0BsaW5rIGVycm9yTWVzc2FnZX0gYW5kXG4gKiBtZXNzYWdlIHByZWRpY2F0ZXMgZWxzZXdoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24qIGVycm9yTWVzc2FnZXModmFsdWU6IHVua25vd24pOiBHZW5lcmF0b3I8c3RyaW5nLCB2b2lkLCB1bmRlZmluZWQ+IHtcbiAgZm9yIChjb25zdCBub2RlIG9mIGVycm9yTm9kZXModmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiBub2RlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBbXCJtZXNzYWdlXCIsIFwiZXJyb3JDb2RlXCJdKSB7XG4gICAgICAgIGlmIChrZXkgaW4gbm9kZSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gXCJzdHJpbmdcIiAmJiBub2RlKSB7XG4gICAgICB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERlcHRoLWZpcnN0IHdhbGsgb2YgYW4gZXJyb3IgdmFsdWU6IHRoZSByb290LCB0aGVuIGBlcnJvcnNgIChlLmcuXG4gKiBgQWdncmVnYXRlRXJyb3JgKSBhbmQgYGNhdXNlYCBjaGFpbnMuIEN5Y2xlLXNhZmUgdmlhIGEgYHNlZW5gIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uKiBlcnJvck5vZGVzKGVycjogdW5rbm93bik6IEdlbmVyYXRvcjxOb25OdWxsYWJsZTx1bmtub3duPiwgdm9pZCwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHVua25vd24+KCk7XG5cbiAgZnVuY3Rpb24qIHZpc2l0KG5vZGU6IHVua25vd24pOiBHZW5lcmF0b3I8Tm9uTnVsbGFibGU8dW5rbm93bj4sIHZvaWQsIHVuZGVmaW5lZD4ge1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQgfHwgbm9kZSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUpIHtcbiAgICAgICAgeWllbGQqIHZpc2l0KGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKG5vZGUpKSByZXR1cm47XG4gICAgc2Vlbi5hZGQobm9kZSk7XG4gICAgeWllbGQgbm9kZTtcbiAgICBpZiAodHlwZW9mIG5vZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFtcImVycm9yc1wiLCBcImNhdXNlXCJdKSB7XG4gICAgICAgIGlmIChrZXkgaW4gbm9kZSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgeWllbGQqIHZpc2l0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICB5aWVsZCogdmlzaXQoZXJyKTtcbn1cblxuLyoqXG4gKiBMYXp5IHZpZXcgb3ZlciBhIHRocm93biB2YWx1ZSBmb3IgSFRUUC1zdGF0dXMgKyBtZXNzYWdlIGNsYXNzaWZpY2F0aW9uLlxuICogU3RhdHVzIGNvbWVzIGZyb20gdGhlIGxhc3QgcG9zaXRpdmUgYHN0YXR1c0NvZGVgIC8gYGNvZGVgIG9uIHRoZSBlcnJvciB0cmVlO1xuICogbWVzc2FnZXMvdG9rZW5zIGNvbWUgZnJvbSBldmVyeSBgbWVzc2FnZWAgLyBgZXJyb3JDb2RlYCBmaWVsZCAoaW5jbHVkaW5nXG4gKiBgY2F1c2VgIGFuZCBgQWdncmVnYXRlRXJyb3IuZXJyb3JzYCkuIEJ1aWxkIHdpdGgge0BsaW5rIGVycm9yQ29udGV4dH0uXG4gKi9cbmV4cG9ydCB0eXBlIEVycm9yQ29udGV4dCA9IEVycm9yQ29udGV4dEltcGw7XG5cbmNsYXNzIEVycm9yQ29udGV4dEltcGwge1xuICBwcml2YXRlIF9zdGF0dXNDb2RlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX21lc3NhZ2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfbWVzc2FnZVRva2Vuczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlcnI6IE5vbk51bGxhYmxlPHVua25vd24+KSB7fVxuXG4gIC8qKiBMYXN0IHBvc2l0aXZlIGBzdGF0dXNDb2RlYCAvIGBjb2RlYCBmb3VuZCBvbiB0aGUgZXJyb3IgdHJlZSwgZWxzZSBgdW5kZWZpbmVkYCAoMCBpZ25vcmVkKS4gKi9cbiAgZ2V0IHN0YXR1c0NvZGUoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fc3RhdHVzQ29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXRlcjogZm9yIChjb25zdCBub2RlIG9mIGVycm9yTm9kZXModGhpcy5lcnIpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gXCJvYmplY3RcIiB8fCBub2RlID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgW1wic3RhdHVzQ29kZVwiLCBcImNvZGVcIl0gYXMgY29uc3QpIHtcbiAgICAgICAgICBpZiAoIShrZXkgaW4gbm9kZSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiB2YWx1ZSA+IDk5ICYmIHZhbHVlIDwgNjAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDb2RlID0gdmFsdWU7XG4gICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9zdGF0dXNDb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3RhdHVzQ29kZSA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzQ29kZSA9PSAtMSA/IHVuZGVmaW5lZCA6IHRoaXMuX3N0YXR1c0NvZGU7XG4gIH1cblxuICAvKiogRXZlcnkgYG1lc3NhZ2VgIC8gYGVycm9yQ29kZWAgc3RyaW5nIGluIHRoZSBlcnJvciB0cmVlLiAqL1xuICBnZXQgbWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLl9tZXNzYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlcyA9IFsuLi5lcnJvck1lc3NhZ2VzKHRoaXMuZXJyKV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlcztcbiAgfVxuXG4gIC8qKiBMb3dlcmNhc2VkIHRva2VucyBmcm9tIHtAbGluayBtZXNzYWdlc30uICovXG4gIGdldCBtZXNzYWdlVG9rZW5zKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5fbWVzc2FnZVRva2VucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlVG9rZW5zID0gWy4uLnRva2VuaXplV2l0aE9wdGlvbnMoeyBsb3dlckNhc2U6IHRydWUgfSwgLi4udGhpcy5tZXNzYWdlcyldO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVRva2VucztcbiAgfVxuXG4gIC8qKiBUcnVlIGZvciBhbnkgNHh4IHN0YXR1cyBvciBtZXNzYWdlIHRva2VucyBgbm90IGV4aXN0YCAvIGBub3QgZm91bmRgLiAqL1xuICBnZXQgbm90QWNjZXNzaWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5oYXNTdGF0dXNDb2RlKDQpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5oYXNNZXNzYWdlKFwibm90XCIsIFwiZXhpc3RcIikgfHwgdGhpcy5oYXNNZXNzYWdlKFwibm90XCIsIFwiZm91bmRcIik7XG4gIH1cblxuICAvKipcbiAgICogTWF0Y2ggSFRUUCBzdGF0dXMuIFBhc3MgYSBmdWxsIGNvZGUgKGA0MDRgKSBvciBhIGNsYXNzIChgNGAgZm9yIGFueSA0eHgpLlxuICAgKiBFeHRyYSBmaWx0ZXJzIGFyZSBPUidkLiBgZmFsc2VgIHdoZW4gbm8gc3RhdHVzIGlzIG9uIHRoZSBlcnJvciB0cmVlLlxuICAgKi9cbiAgaGFzU3RhdHVzQ29kZShzdGF0dXNDb2RlRmlsdGVyOiBudW1iZXIsIC4uLnN0YXR1c0NvZGVGaWx0ZXJzOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvZGUgPSB0aGlzLnN0YXR1c0NvZGU7XG4gICAgaWYgKGNvZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIFtzdGF0dXNDb2RlRmlsdGVyLCAuLi5zdGF0dXNDb2RlRmlsdGVyc10pIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAoZmlsdGVyIDwgMTAwID8gTWF0aC50cnVuYyhjb2RlIC8gMTAwKSA6IGNvZGUpID09PSBmaWx0ZXI7XG4gICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnVlIHdoZW4gZXZlcnkgdG9rZW4gZnJvbSB0aGUgZmlsdGVyIHBocmFzZShzKSBhcHBlYXJzIGluXG4gICAqIHtAbGluayBtZXNzYWdlVG9rZW5zfS4gRWFjaCBhcmd1bWVudCBpcyB0b2tlbml6ZWQgb24gbm9uLWFscGhhbnVtZXJpY1xuICAgKiBib3VuZGFyaWVzIChlLmcuIGBoYXNNZXNzYWdlKFwibm90XCIsIFwiZm91bmRcIilgIG9yIGBoYXNNZXNzYWdlKFwibm90IGZvdW5kXCIpYCkuXG4gICAqL1xuICBoYXNNZXNzYWdlKG1lc3NhZ2VGaWx0ZXI6IHN0cmluZywgLi4ubWVzc2FnZUZpbHRlcnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFttZXNzYWdlRmlsdGVyLCAuLi5tZXNzYWdlRmlsdGVyc11cbiAgICAgIC5mbGF0TWFwKChmaWx0ZXIpID0+IEFycmF5LmZyb20odG9rZW5pemVXaXRoT3B0aW9ucyh7IGxvd2VyQ2FzZTogdHJ1ZSB9LCBmaWx0ZXIpKSlcbiAgICAgIC5ldmVyeSgoZmlsdGVyVG9rZW4pID0+IHRoaXMubWVzc2FnZVRva2Vucy5pbmNsdWRlcyhmaWx0ZXJUb2tlbikpO1xuICB9XG59XG5cbi8qKiBCdWlsZCBhbiB7QGxpbmsgRXJyb3JDb250ZXh0fSBmb3Igc3RhdHVzICsgbWVzc2FnZSBjaGVja3MuIGBudWxsYCAvIGB1bmRlZmluZWRgIGJlY29tZSBge31gLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yQ29udGV4dChlcnI6IHVua25vd24pOiBFcnJvckNvbnRleHQge1xuICByZXR1cm4gbmV3IEVycm9yQ29udGV4dEltcGwoZXJyID8/IHt9KTtcbn1cbiJdfQ==
|
package/lib/src/json.js
CHANGED
|
@@ -46,4 +46,4 @@ export function parseRecord(text) {
|
|
|
46
46
|
const parsed = parse(text);
|
|
47
47
|
return isRecord(parsed) ? parsed : undefined;
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWdCdkMsTUFBTSxVQUFVLEtBQUssQ0FBYyxJQUFhLEVBQUUsUUFBWTtJQUM1RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUMxRSxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFNLENBQUM7SUFDL0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFhO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnJvd3Nlci1zYWZlIEpTT04gaGVscGVycyBmb3IgdGhlIHBhcnNlLXVudHJ1c3RlZC10ZXh0IGNhc2UuXG4gKlxuICogYEpTT04ucGFyc2VgIHRocm93cyBvbiBtYWxmb3JtZWQgaW5wdXQgYW5kIHJldHVybnMgYGFueWAsIHNvIGFsbW9zdCBldmVyeVxuICogY2FsbGVyIGluIHRoaXMgcmVwbyB3cmFwcGVkIGl0IGluIHRoZSBzYW1lIHRyeS9jYXRjaCBhbmQgdGhlbiByZS1uYXJyb3dlZCB0aGVcbiAqIHJlc3VsdCBieSBoYW5kLiB7QGxpbmsgcGFyc2V9IGNvbGxhcHNlcyB0aGUgdHJ5L2NhdGNoIChhIGJhZCBkb2N1bWVudCB5aWVsZHNcbiAqIHRoZSBmYWxsYmFjayBpbnN0ZWFkIG9mIHRocm93aW5nKSBhbmQge0BsaW5rIHBhcnNlUmVjb3JkfSBhZGRzIHRoZSBuYXJyb3dpbmdcbiAqIHRoYXQgdW50cnVzdGVkIEpTT04gYWxtb3N0IGFsd2F5cyBuZWVkcyBiZWZvcmUgaXQgY2FuIGJlIGluZGV4ZWQuXG4gKlxuICogVXNlIHRoZXNlIHdoZW4gdGhlIGRvY3VtZW50IGNvbWVzIGZyb20gT1VUU0lERSB0aGUgcHJvY2VzcyAtIGEgcmVxdWVzdCBib2R5LFxuICogYW4gZW52IHZhciwgYSBjb25maWcgZmlsZSwgYSBzdWJwcm9jZXNzJ3Mgc3Rkb3V0LCBhIHRoaXJkLXBhcnR5IEFQSS4gS2VlcFxuICogYmFyZSBgSlNPTi5wYXJzZWAgd2hlcmUgYSB0aHJvdyBpcyB0aGUgY29ycmVjdCBvdXRjb21lIChhbiBpbnRlcm5hbGx5XG4gKiBwcm9kdWNlZCBkb2N1bWVudCB0aGF0IG11c3QgYmUgd2VsbC1mb3JtZWQpLlxuICpcbiAqIFRoZXNlIGRlbGliZXJhdGVseSBkbyBOT1QgdmFsaWRhdGUgc2hhcGUgYmV5b25kIFwiaXMgaXQgYSByZWNvcmRcIi4gUmVhY2ggZm9yXG4gKiBhIHpvZCBzY2hlbWEgd2hlbiB0aGUgcGF5bG9hZCBoYXMgYSBjb250cmFjdDsgdGhlc2Ugb25seSBnZXQgeW91IGZyb20gYHN0cmluZ2BcbiAqIHRvIGEgc2FmZWx5IHR5cGVkIHN0YXJ0aW5nIHBvaW50LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBpc1JlY29yZCB9IGZyb20gXCIuL29iamVjdC50c1wiO1xuXG4vKipcbiAqIFBhcnNlIEpTT04gdGV4dCwgcmV0dXJuaW5nIGBmYWxsYmFja2AgKGRlZmF1bHQgYHVuZGVmaW5lZGApIGluc3RlYWQgb2ZcbiAqIHRocm93aW5nIHdoZW4gYHRleHRgIGlzIGFic2VudCBvciBtYWxmb3JtZWQuXG4gKlxuICogVGhlIHJldHVybiB0eXBlIGlzIGNhbGxlci1hc3NlcnRlZCwgZXhhY3RseSBsaWtlIGBKU09OLnBhcnNlYCAtIHRoaXMgb25seVxuICogcmVtb3ZlcyB0aGUgdHJ5L2NhdGNoLCBpdCBkb2VzIG5vdCB2YWxpZGF0ZS4gUHJlZmVyIHtAbGluayBwYXJzZVJlY29yZH0gb3IgYVxuICogc2NoZW1hIHdoZW4gdGhlIHJlc3VsdCBpcyBpbmRleGVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBjb25maWcgPSBqc29uLnBhcnNlPENvbmZpZz4oYXdhaXQgcmVhZEZpbGUocGF0aCwgXCJ1dGY4XCIpKTtcbiAqIGNvbnN0IHRhZ3MgPSBqc29uLnBhcnNlKHByb2Nlc3MuZW52LlRBR1MsIFtdKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlPFQgPSB1bmtub3duPih0ZXh0OiB1bmtub3duLCBmYWxsYmFjazogVCk6IFQ7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2U8VCA9IHVua25vd24+KHRleHQ6IHVua25vd24pOiBUIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlPFQgPSB1bmtub3duPih0ZXh0OiB1bmtub3duLCBmYWxsYmFjaz86IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ICE9PSBcInN0cmluZ1wiIHx8IHRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbGxiYWNrO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpIGFzIFQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlIEpTT04gdGV4dCB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgcmV0dXJuaW5nIGB1bmRlZmluZWRgIHdoZW5cbiAqIGl0IGlzIGFic2VudCwgbWFsZm9ybWVkLCBvciBwYXJzZXMgdG8gYSBub24tcmVjb3JkIChhbiBhcnJheSwgYSBiYXJlIHN0cmluZyxcbiAqIGBudWxsYCwgLi4uKS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSBmb3IgbWFuaWZlc3RzLCBlbnYtdmFyIGNvbmZpZyBibG9icywgYW5kIHVudHlwZWQgQVBJXG4gKiBwYXlsb2Fkczoge0BsaW5rIHBhcnNlfSBmb2xsb3dlZCBieSB7QGxpbmsgaXNSZWNvcmR9LCBzbyB0aGUgcmVzdWx0IGNhbiBiZVxuICogaW5kZXhlZCB3aXRob3V0IGFuIGBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPmAgY2FzdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbWFuaWZlc3QgPSBqc29uLnBhcnNlUmVjb3JkKGF3YWl0IHJlYWRGaWxlKFwicGFja2FnZS5qc29uXCIsIFwidXRmOFwiKSkgPz8ge307XG4gKiBjb25zdCBuYW1lID0gbWFuaWZlc3QubmFtZTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVjb3JkKHRleHQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlKHRleHQpO1xuICByZXR1cm4gaXNSZWNvcmQocGFyc2VkKSA/IHBhcnNlZCA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
package/lib/src/log.d.ts
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
*
|
|
32
32
|
* @module
|
|
33
33
|
*/
|
|
34
|
-
import { type NameLike } from "./object.
|
|
34
|
+
import { type NameLike } from "./object.ts";
|
|
35
35
|
declare const LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
|
|
36
36
|
/**
|
|
37
37
|
* Supported severities, lowest to highest: `debug`, `info`, `warn`, `error`.
|
package/lib/src/log.js
CHANGED
|
@@ -31,6 +31,14 @@
|
|
|
31
31
|
*
|
|
32
32
|
* @module
|
|
33
33
|
*/
|
|
34
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
35
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
36
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
37
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return path;
|
|
41
|
+
};
|
|
34
42
|
import { memoize } from "./function.js";
|
|
35
43
|
import { toBoolean } from "./object.js";
|
|
36
44
|
const globalProcess = globalThis.process;
|
|
@@ -142,7 +150,7 @@ async function createConsoleLoggerFactory(globalProcessStdErr) {
|
|
|
142
150
|
// Indirect specifier so this browser-safe module doesn't statically pull in
|
|
143
151
|
// node types: `node:util` is optional (the JSON fallback covers its absence).
|
|
144
152
|
const nodeUtil = "node:util";
|
|
145
|
-
const utils = await import(/* @vite-ignore */ nodeUtil).catch(() => undefined);
|
|
153
|
+
const utils = await import(__rewriteRelativeImportExtension(/* @vite-ignore */ nodeUtil)).catch(() => undefined);
|
|
146
154
|
const bunInspect = globalBun !== undefined && !toBoolean(globalBun.env?.LOG_BUN_CONSOLE_DISABLED)
|
|
147
155
|
? globalBun.inspect
|
|
148
156
|
: undefined;
|
|
@@ -349,4 +357,4 @@ export function logger(loggerName) {
|
|
|
349
357
|
const name = extractLoggerName(loggerName);
|
|
350
358
|
return createLogger(name);
|
|
351
359
|
}
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBY3BELE1BQU0sYUFBYSxHQUFJLFVBQXdDLENBQUMsT0FBTyxDQUFDO0FBQ3hFLE1BQU0sU0FBUyxHQUFJLFVBQWdDLENBQUMsR0FBRyxDQUFDO0FBRXhEOzs7Ozs7R0FNRztBQUNILDhEQUE4RDtBQUM5RCxNQUFNLG1CQUFtQixHQUN2QixhQUFhLElBQUksT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxVQUFVO0lBQ2hFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtJQUN0QixDQUFDLENBQUMsU0FBUyxDQUFDO0FBRWhCLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFDL0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDdkMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQ3JCLENBQUM7QUFDOUIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDdkIsSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsT0FBTztJQUMvQixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxNQUFNO1lBQ1QsS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLE9BQU87WUFDM0IsTUFBTTtRQUNSLEtBQUssTUFBTTtZQUNULEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxTQUFTO1lBQzdCLE1BQU07UUFDUixLQUFLLE9BQU87WUFDVixLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsTUFBTTtZQUMxQixNQUFNO0lBQ1YsQ0FBQztJQUNELE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQ3lCLENBQUM7QUFDOUIsTUFBTSxxQkFBcUIsR0FBRyxTQUFTLENBQUM7QUFDeEMsTUFBTSxhQUFhLEdBQWEsTUFBTSxDQUFDO0FBMEJ2Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBd0MsRUFBRTtJQUN4RixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6RixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3ZDLE1BQU0sb0JBQW9CLEdBQUc7Z0JBQzNCLEdBQUcsT0FBTyxDQUFDLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQzFCLHlFQUF5RTtnQkFDekUsdUVBQXVFO2dCQUN2RSxLQUFLLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQ3hCLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7NEJBQ25CLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztnQ0FBRSxPQUFPOzRCQUN4QyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzs0QkFDckMsSUFBSSxDQUFDO2dDQUNILElBQUksbUJBQW1CLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQ0FDaEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUM7Z0NBQzNDLENBQUM7Z0NBQ0QsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7NEJBQzVFLENBQUM7b0NBQVMsQ0FBQztnQ0FDVCxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7NEJBQ2pDLENBQUM7d0JBQ0gsQ0FBQztxQkFDRjtpQkFDRjthQUNrRCxDQUFDO1lBQ3RELE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFhLEVBQUUsRUFBRTtnQkFDdkIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUM1RCxDQUFDLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHdFQUF3RTtZQUN4RSx3RUFBd0U7WUFDeEUscUVBQXFFO1lBQ3JFLHdFQUF3RTtZQUN4RSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDO0FBRUg7Ozs7Ozs7O0dBUUc7QUFDSCxLQUFLLFVBQVUsMEJBQTBCLENBQUMsbUJBQXdCO0lBQ2hFLDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFrQyxNQUFNLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQzFGLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FDaEIsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUNkLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQztRQUM1RSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU87UUFDbkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixNQUFNLGlCQUFpQixHQUFHLFVBQVUsS0FBSyxTQUFTLENBQUM7SUFFbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFRLEVBQUUsTUFBZ0IsRUFBRSxFQUFFO1FBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNyQixNQUFNLEVBQUUsTUFBTTtvQkFDZCxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsS0FBSyxJQUFJLFNBQVM7aUJBQzFELENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7b0JBQ3hCLEdBQUcsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjO29CQUNqQyxNQUFNLEVBQUUsS0FBSztpQkFDZCxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNoRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDOzRCQUFFLE9BQU8sWUFBWSxDQUFDO3dCQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNsQixDQUFDO29CQUNELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQy9CLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0QsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7b0JBQUUsT0FBTztnQkFDckMsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUQsSUFBSSxXQUFXO3dCQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztvQkFDMUQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQzNELENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdCLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7d0JBQ2xDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUN4QixDQUFDO29CQUNELElBQUksTUFBTTt3QkFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3BELE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FDTyxDQUFDO1FBQ1osNEVBQTRFO1FBQzVFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxZQUFZLEdBQWtCLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNwRCxPQUFPLENBQ0wsQ0FBQyxNQUFNLDBCQUEwQixFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sMEJBQTBCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUNoRyxDQUFDO0FBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FDdEIsSUFBUyxFQUNULE1BQVcsRUFDWCxpQkFBMkI7SUFFM0IsTUFBTSxJQUFJLEdBQUcsVUFBc0QsQ0FBQztJQUNwRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztJQUMzRSxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdkQsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRTtRQUMxQixNQUFNLEtBQUssR0FBRyxhQUFhLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN6RixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO2FBQzdFLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sc0JBQXNCLEdBQUcsaUJBQWlCLElBQUksTUFBTSxLQUFLLEtBQUssQ0FBQztZQUNyRSxJQUFJLENBQUMsc0JBQXNCO2dCQUFFLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDaEQsTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQzVGLENBQUM7UUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQy9ELENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsU0FBUyxtQkFBbUIsQ0FBQyxNQUFnQjtJQUMzQyxJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDL0YsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQTZCLENBQUM7SUFDaEQsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3BELElBQUksTUFBTSxJQUFJLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNqQyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxhQUFhLENBQUMsR0FBWTtJQUNqQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLElBQUksR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNWLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QyxJQUFJLElBQUksS0FBSyxVQUFVO2dCQUFFLE1BQU07WUFDL0IsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTTtRQUNSLENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNsQyxPQUFPLElBQWdCLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLFNBQVMsV0FBVztJQUNsQixPQUFPLGFBQWEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsVUFBVSxDQUFDLEdBQVksRUFBRSxhQUF1QjtJQUN2RCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sYUFBYSxJQUFJLEtBQUssQ0FBQztJQUN2RCxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFlO0lBQzVDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLGlCQUFpQixHQUFHLHdEQUF3RCxDQUFDO0FBRW5GOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUF5QztJQUNsRSxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsVUFBeUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFnZ2VkLCBsZXZlbGVkIGxvZ2dpbmcgZm9yIGV2ZXJ5IHJ1bnRpbWUgLSB0aGUgb25lIGxvZ2dlciB0aGUgd2hvbGVcbiAqIG1vbm9yZXBvIHNoYXJlcy5cbiAqXG4gKiB7QGxpbmsgbG9nZ2VyfSByZXNvbHZlcyBhIHRhZ2dlZCB7QGxpbmsgTG9nZ2VyfSB2aWEgYSB7QGxpbmsgTG9nZ2VyRmFjdG9yeX1cbiAqIGNob3NlbiBvbmNlIGF0IG1vZHVsZSBsb2FkLiB7QGxpbmsgTG9nTGV2ZWx9IGZpbHRlcmluZyBydW5zIHRocm91Z2hcbiAqIHtAbGluayBzaG91bGRFbWl0fSBpbiB0aGUgY29uc29sYSByZXBvcnRlciBvciBpbiBwZXItbGV2ZWwgd3JhcHBlcnMgb24gdGhlXG4gKiBgY29uc29sZWAgZmFsbGJhY2tzLlxuICpcbiAqIFNpbmsgc2VsZWN0aW9uIGNoYWlucyB0d28gZmFjdG9yaWVzIHdpdGggbnVsbGlzaCBjb2FsZXNjaW5nIChmaXJzdCBtYXRjaFxuICogd2lucyk6XG4gKlxuICogMS4ge0BsaW5rIGNyZWF0ZUNvbnNvbGFMb2dnZXJGYWN0b3J5fSB3aGVuIGNvbnNvbGEgcmVzb2x2ZXMgYW5kXG4gKiAgICBgTE9HX0NPTlNPTEFfRElTQUJMRURgIGlzIG5vdCB0cnV0aHkuXG4gKiAyLiB7QGxpbmsgY3JlYXRlQ29uc29sZUxvZ2dlckZhY3Rvcnl9IGV2ZXJ5d2hlcmUgZWxzZS5cbiAqXG4gKiBUaGUgY29uc29sZSBmYWxsYmFjayB3cml0ZXMgZm9ybWF0dGVkIGxpbmVzIHRvIGBwcm9jZXNzLnN0ZGVycmAgd2hlbiBpdCBpc1xuICogYXZhaWxhYmxlIChCdW4gYGluc3BlY3RgIHBlciBhcmd1bWVudCB3aGVuIGBMT0dfQlVOX0NPTlNPTEVfRElTQUJMRURgIGlzXG4gKiB1bnNldCwgb3RoZXJ3aXNlIGBub2RlOnV0aWxgIGBmb3JtYXRXaXRoT3B0aW9uc2ApLCBvciBkZWxlZ2F0ZXMgdG8gZ2xvYmFsXG4gKiBgY29uc29sZS4qYCB3aGVuIHN0ZGVyciBvciBgbm9kZTp1dGlsYCBpcyB1bmF2YWlsYWJsZS4gQnJvd3NlciBob3N0cyBvbWl0XG4gKiB0aGUgYExFVkVMYCB0ZXh0IHByZWZpeCAoZGV2dG9vbHMgc2hvdyBzZXZlcml0eSkgYW5kIGtlZXAgb25seSB0aGUgYFtuYW1lXWBcbiAqIHRhZy5cbiAqXG4gKiBFbnYgdG9nZ2xlcyAocmVhZCBvbmNlIGF0IGluaXQpOiBgTE9HX0xFVkVMYCwgYExPR19DT05TT0xBX0RJU0FCTEVEYCxcbiAqIGBMT0dfQlVOX0NPTlNPTEVfRElTQUJMRURgLlxuICpcbiAqIEJyb3dzZXItc2FmZTogYHByb2Nlc3NgIC8gYEJ1bmAgLyBgd2luZG93YCAvIGBkb2N1bWVudGAgYXJlIGFsbCByZWFjaGVkXG4gKiB0aHJvdWdoIGBnbG9iYWxUaGlzYCBhbmQgZ3VhcmRlZCwgYW5kIGNvbnNvbGEgLyBgbm9kZTp1dGlsYCBsb2FkIGxhemlseSwgc29cbiAqIHRoZSBtb2R1bGUgd29ya3MgaW4gYW55IHJ1bnRpbWUuIENvbnNvbGEgaXMgYW4gb3B0aW9uYWwgcGVlcjsgdGhlIG1vZHVsZVxuICogbG9hZHMgZmluZSB3aXRob3V0IGl0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4vZnVuY3Rpb25cIjtcbmltcG9ydCB7IHR5cGUgTmFtZUxpa2UsIHRvQm9vbGVhbiB9IGZyb20gXCIuL29iamVjdFwiO1xuXG4vKiogYHByb2Nlc3NgLXNoYXBlZCB2aWV3IG9mZiBgZ2xvYmFsVGhpc2AsIHNvIG5vIG5vZGUgdHlwZXMgYXJlIG5lZWRlZC4gKi9cbmludGVyZmFjZSBQcm9jZXNzTGlrZSB7XG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHN0ZGVycj86IHsgd3JpdGU/OiAoY2h1bms6IHN0cmluZykgPT4gdm9pZDsgaXNUVFk/OiB1bmtub3duIH07XG59XG5cbi8qKiBgQnVuYC1zaGFwZWQgdmlldyBvZmYgYGdsb2JhbFRoaXNgLCBzbyBubyBgQHR5cGVzL2J1bmAgaXMgbmVlZGVkLiAqL1xuaW50ZXJmYWNlIEJ1bkxpa2Uge1xuICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBpbnNwZWN0PzogKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBjb2xvcnM/OiBib29sZWFuOyBkZXB0aD86IG51bWJlciB9KSA9PiBzdHJpbmc7XG59XG5cbmNvbnN0IGdsb2JhbFByb2Nlc3MgPSAoZ2xvYmFsVGhpcyBhcyB7IHByb2Nlc3M/OiBQcm9jZXNzTGlrZSB9KS5wcm9jZXNzO1xuY29uc3QgZ2xvYmFsQnVuID0gKGdsb2JhbFRoaXMgYXMgeyBCdW4/OiBCdW5MaWtlIH0pLkJ1bjtcblxuLyoqXG4gKiBOb2RlIGBwcm9jZXNzLnN0ZGVycmAgd2hlbiB3cml0YWJsZSwgZWxzZSBgdW5kZWZpbmVkYCAoc3RhYmxlIGZvciB0aGVcbiAqIHByb2Nlc3MpLiBUeXBlZCBsb29zZWx5IChgYW55YCkgYmVjYXVzZSBpdCBpcyBoYW5kZWQgdG8gY29uc29sYSdzXG4gKiBgY3R4Lm9wdGlvbnMuc3Rkb3V0YCAoYSBgV3JpdGVTdHJlYW1gKSBhbmQgdG8gdGhlIGNvbnNvbGUgZmFsbGJhY2snc1xuICogYC53cml0ZWAsIG5laXRoZXIgb2Ygd2hpY2ggb3VyIHN0cnVjdHVyYWwge0BsaW5rIFByb2Nlc3NMaWtlfSBzaGFwZSBzYXRpc2ZpZXNcbiAqIG5vbWluYWxseS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IGdsb2JhbFByb2Nlc3NTdGRFcnI6IGFueSA9XG4gIGdsb2JhbFByb2Nlc3MgJiYgdHlwZW9mIGdsb2JhbFByb2Nlc3Muc3RkZXJyPy53cml0ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBnbG9iYWxQcm9jZXNzLnN0ZGVyclxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBMT0dfTEVWRUxTID0gW1wiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCJdIGFzIGNvbnN0O1xuY29uc3QgTE9HX0xFVkVMX1JBTksgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIExPR19MRVZFTFMubWFwKChsZXZlbCwgaW5kZXgpID0+IFtsZXZlbCwgaW5kZXhdKSxcbikgYXMgUmVjb3JkPExvZ0xldmVsLCBudW1iZXI+O1xuY29uc3QgTE9HX0xFVkVMX0NPTE9SUyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgTE9HX0xFVkVMUy5tYXAoKGxldmVsKSA9PiB7XG4gICAgbGV0IGNvbG9yID0gXCJcXHgxYls5MG1cIjsgLy8gZ3JheVxuICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgIGNhc2UgXCJpbmZvXCI6XG4gICAgICAgIGNvbG9yID0gXCJcXHgxYlszNG1cIjsgLy8gYmx1ZVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ3YXJuXCI6XG4gICAgICAgIGNvbG9yID0gXCJcXHgxYlszM21cIjsgLy8geWVsbG93XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgIGNvbG9yID0gXCJcXHgxYlszMW1cIjsgLy8gcmVkXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gW2xldmVsLCBjb2xvcl07XG4gIH0pLFxuKSBhcyBSZWNvcmQ8TG9nTGV2ZWwsIHN0cmluZz47XG5jb25zdCBMT0dfTEVWRUxfQ09MT1JfUkVTRVQgPSBcIlxceDFiWzBtXCI7XG5jb25zdCBERUZBVUxUX0xFVkVMOiBMb2dMZXZlbCA9IFwiaW5mb1wiO1xuXG4vKipcbiAqIFN1cHBvcnRlZCBzZXZlcml0aWVzLCBsb3dlc3QgdG8gaGlnaGVzdDogYGRlYnVnYCwgYGluZm9gLCBgd2FybmAsIGBlcnJvcmAuXG4gKiBBIGNhbGwgYmVsb3cgdGhlIGFjdGl2ZSB0aHJlc2hvbGQgaXMgZGlzY2FyZGVkIGJlZm9yZSBhbnkgc3RyaW5nIHdvcmsgb3JcbiAqIHNpbmsgSS9PLlxuICpcbiAqIFRoZSB0aHJlc2hvbGQgY29tZXMgZnJvbSBgcHJvY2Vzcy5lbnYuTE9HX0xFVkVMYCBvbiBldmVyeSBjYWxsXG4gKiAoY2FzZS1pbnNlbnNpdGl2ZSwgZGVmYXVsdCBgaW5mb2Agd2hlbiB1bnNldCwgZW1wdHksIG9yIHVua25vd24pIHNvIHRlc3RcbiAqIHJ1bm5lcnMgYW5kIGVtYmVkZGVycyBjYW4gY2hhbmdlIHZlcmJvc2l0eSBhZnRlciBpbXBvcnQgd2l0aG91dCByZXN0YXJ0aW5nXG4gKiB0aGUgcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAodHlwZW9mIExPR19MRVZFTFMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIExvZ2dlciA9IHtcbiAgW0sgaW4gTG9nTGV2ZWxdOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59ICYge1xuICAvKiogU3VjY2VzcyBtZXNzYWdlIChjb25zb2xhIGBzdWNjZXNzYDsgZmFsbHMgYmFjayB0byBgaW5mb2AtbGV2ZWwgb3V0cHV0KS4gKi9cbiAgc3VjY2VzczogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuICAvKiogU3RhcnQgLyBpbi1wcm9ncmVzcyBtZXNzYWdlIChjb25zb2xhIGBzdGFydGA7IGZhbGxzIGJhY2sgdG8gYGluZm9gLWxldmVsIG91dHB1dCkuICovXG4gIHN0YXJ0OiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKiogYChuYW1lPykgPT4gTG9nZ2VyYCBzaW5rIGNvbnN0cnVjdG9yIHJldHVybmVkIGJ5IHRoZSBpbml0LXRpbWUgZmFjdG9yeSBjaGFpbi4gKi9cbnR5cGUgTG9nZ2VyRmFjdG9yeSA9IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cbi8qKlxuICogQ29uc29sYS1iYWNrZWQge0BsaW5rIExvZ2dlckZhY3Rvcnl9LCBvciBgdW5kZWZpbmVkYCB3aGVuIGNvbnNvbGEgaXNcbiAqIGRpc2FibGVkLCBmYWlscyB0byBpbXBvcnQsIG9yIHRocm93cyBkdXJpbmcgc2V0dXAuXG4gKlxuICogQnVpbGRzIG9uZSBgY3JlYXRlQ29uc29sYWAgaW5zdGFuY2UgKGJhZGdlIG9mZiwgbGV2ZWwgYHZlcmJvc2VgKSB3aG9zZVxuICogcmVwb3J0ZXIgY2FsbHMge0BsaW5rIHNob3VsZEVtaXR9IG9uIGBsb2dPYmoudHlwZWAgYmVmb3JlIGRlbGVnYXRpbmcgdG9cbiAqIGNvbnNvbGEncyBkZWZhdWx0IHJlcG9ydGVycy4gSW4gTm9kZSwgd2hlbiBgZ2xvYmFsUHJvY2Vzc1N0ZEVycmAgaXMgc2V0LFxuICogcmVjb2duaXplZCB7QGxpbmsgTG9nTGV2ZWx9IHR5cGVzIGFyZSByZWRpcmVjdGVkIHRvIHN0ZGVyciBmb3IgdGhhdCB3cml0ZS5cbiAqIFRhZ3MgdXNlIGB3aXRoVGFnYCAocmVuZGVyZWQgYFtuYW1lXWAsIG5vdCBtZXJnZWQgaW50byBhcmdzKS5cbiAqXG4gKiBNZW1vaXplZDogdGhlIGR5bmFtaWMgYGNvbnNvbGFgIGltcG9ydCwgZW52IGNoZWNrcywgYW5kIGBjcmVhdGVDb25zb2xhYFxuICogc2V0dXAgKHBsdXMgdGhlIGltcG9ydC90aHJvdyBmYWxsYmFjaykgcnVuIG9uY2U7IGxhdGVyIGNhbGxzIHNoYXJlIHRoZSBvbmVcbiAqIHJlc29sdmVkIGZhY3RvcnkgKG9yIHRoZSBvbmUgcmVzb2x2ZWQgYHVuZGVmaW5lZGApLiBBIHJlamVjdGlvbiBpcyBldmljdGVkXG4gKiBieSB7QGxpbmsgbWVtb2l6ZX0gc28gYSBsYXRlciBjYWxsIHJldHJpZXMuXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnNvbGFMb2dnZXJGYWN0b3J5ID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxMb2dnZXJGYWN0b3J5IHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IGNvbnNvbGFEaXNhYmxlZCA9IHRvQm9vbGVhbihnbG9iYWxQcm9jZXNzPy5lbnY/LkxPR19DT05TT0xBX0RJU0FCTEVEKTtcbiAgaWYgKCFjb25zb2xhRGlzYWJsZWQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBjb25zb2xhLCBjcmVhdGVDb25zb2xhLCBMb2dMZXZlbHMgfSA9IGF3YWl0IGltcG9ydCgvKiBAdml0ZS1pZ25vcmUgKi8gXCJjb25zb2xhXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBjb25zb2xhLm9wdGlvbnM7XG4gICAgICBjb25zdCBjcmVhdGVDb25zb2xhT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uY29uc29sYS5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0czogeyBiYWRnZTogZmFsc2UgfSxcbiAgICAgICAgLy8gYExPR19MRVZFTGAgaXMgZW5mb3JjZWQgaW4ge0BsaW5rIHNob3VsZEVtaXR9OyBrZWVwIGNvbnNvbGEgcGVybWlzc2l2ZVxuICAgICAgICAvLyBzbyBhIHRocmVzaG9sZCBjaGFuZ2UgYWZ0ZXIgaW1wb3J0IGlzIG5vdCBibG9ja2VkIGJ5IGl0cyBvd24gZmlsdGVyLlxuICAgICAgICBsZXZlbDogTG9nTGV2ZWxzLnZlcmJvc2UsXG4gICAgICAgIHJlcG9ydGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxvZzogKGxvZ09iaiwgY3R4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGxvZ0xldmVsID0gcGFyc2VMb2dMZXZlbChsb2dPYmoudHlwZSk7XG4gICAgICAgICAgICAgIGlmICghc2hvdWxkRW1pdChsb2dMZXZlbCwgdHJ1ZSkpIHJldHVybjtcbiAgICAgICAgICAgICAgY29uc3QgY3R4U3Rkb3V0ID0gY3R4Lm9wdGlvbnMuc3Rkb3V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxQcm9jZXNzU3RkRXJyICE9PSB1bmRlZmluZWQgJiYgbG9nTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMuc3Rkb3V0ID0gZ2xvYmFsUHJvY2Vzc1N0ZEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnMucmVwb3J0ZXJzLmZvckVhY2goKHJlcG9ydGVyKSA9PiByZXBvcnRlci5sb2cobG9nT2JqLCBjdHgpKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjdHgub3B0aW9ucy5zdGRvdXQgPSBjdHhTdGRvdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgTm9uTnVsbGFibGU8UGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQ29uc29sYT5bMF0+O1xuICAgICAgY29uc3QgY29uc29sYUxvZ2dlciA9IGNyZWF0ZUNvbnNvbGEoY3JlYXRlQ29uc29sYU9wdGlvbnMpO1xuICAgICAgcmV0dXJuIChuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBuYW1lID8gY29uc29sYUxvZ2dlci53aXRoVGFnKG5hbWUpIDogY29uc29sYUxvZ2dlcjtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGNvbnNvbGEgaXMgYW4gT1BUSU9OQUwgcGVlciAtIG5vdCBoYXZpbmcgaXQgaW5zdGFsbGVkIGlzIHRoZSBFWFBFQ1RFRFxuICAgICAgLy8gcGF0aCAodGhlIG1vZHVsZSBkZWdyYWRlcyB0byB0aGUgY29uc29sZSBmYWxsYmFjayksIHNvIHRoaXMgaXMgbm90IGFuXG4gICAgICAvLyBlcnJvci4gTm90ZSBpdCBvbmx5IGF0IGRlYnVnIGxldmVsLCBhbmQgd2l0aG91dCBhIHN0YWNrIHRyYWNlICh0aGVcbiAgICAgIC8vIG1lc3NhZ2UsIG5vdCBgY29uc29sZS50cmFjZWAsIHNvIGEgbWlzc2luZyBvcHRpb25hbCBkZXAgc3RheXMgcXVpZXQpLlxuICAgICAgaWYgKGlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIikpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcImNvbnNvbGEgbm90IGF2YWlsYWJsZTsgdXNpbmcgY29uc29sZSBmYWxsYmFjazpcIiwgU3RyaW5nKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59KTtcblxuLyoqXG4gKiBDb25zb2xlIHtAbGluayBMb2dnZXJGYWN0b3J5fTsgYWx3YXlzIHN1Y2NlZWRzLlxuICpcbiAqIFdoZW4gYHByb2Nlc3Muc3RkZXJyYCBpcyBhdmFpbGFibGUsIGZvcm1hdHMgZWFjaCBsaW5lIGFuZCB3cml0ZXMgb25seSB0b1xuICogc3RkZXJyLiBCdW4gYGluc3BlY3RgIGZvcm1hdHMgZWFjaCBhcmd1bWVudCB3aGVuIGVuYWJsZWQ7IG90aGVyd2lzZVxuICogYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnNgIHdoZW4gYG5vZGU6dXRpbGAgbG9hZHMsIG9yIGEgYEpTT04uc3RyaW5naWZ5YFxuICogZmFsbGJhY2sgd2hlbiBpdCBkb2VzIG5vdC4gV2hlbiBzdGRlcnIgaXMgdW5hdmFpbGFibGUsIGJpbmRzXG4gKiB7QGxpbmsgY3JlYXRlRm9ybWF0dGVyfSBwcmVmaXhlcyBpbnRvIGdsb2JhbCBgY29uc29sZS4qYCBjYWxscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29uc29sZUxvZ2dlckZhY3RvcnkoZ2xvYmFsUHJvY2Vzc1N0ZEVycjogYW55KTogUHJvbWlzZTxMb2dnZXJGYWN0b3J5PiB7XG4gIC8vIEluZGlyZWN0IHNwZWNpZmllciBzbyB0aGlzIGJyb3dzZXItc2FmZSBtb2R1bGUgZG9lc24ndCBzdGF0aWNhbGx5IHB1bGwgaW5cbiAgLy8gbm9kZSB0eXBlczogYG5vZGU6dXRpbGAgaXMgb3B0aW9uYWwgKHRoZSBKU09OIGZhbGxiYWNrIGNvdmVycyBpdHMgYWJzZW5jZSkuXG4gIGNvbnN0IG5vZGVVdGlsID0gXCJub2RlOnV0aWxcIjtcbiAgY29uc3QgdXRpbHM6IHsgaW5zcGVjdD86IGFueSB9IHwgdW5kZWZpbmVkID0gYXdhaXQgaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyBub2RlVXRpbCkuY2F0Y2goXG4gICAgKCkgPT4gdW5kZWZpbmVkLFxuICApO1xuICBjb25zdCBidW5JbnNwZWN0ID1cbiAgICBnbG9iYWxCdW4gIT09IHVuZGVmaW5lZCAmJiAhdG9Cb29sZWFuKGdsb2JhbEJ1bi5lbnY/LkxPR19CVU5fQ09OU09MRV9ESVNBQkxFRClcbiAgICAgID8gZ2xvYmFsQnVuLmluc3BlY3RcbiAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCByZXNldENvbG9yc1ByZWZpeCA9IGJ1bkluc3BlY3QgIT09IHVuZGVmaW5lZDtcblxuICBjb25zdCBpbnNwZWN0ID0gKGFyZzogYW55LCBjb2xvcnM/OiBib29sZWFuKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSB8fCAodHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJiBhcmcgIT09IG51bGwpKSB7XG4gICAgICBpZiAoYnVuSW5zcGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBidW5JbnNwZWN0KGFyZywge1xuICAgICAgICAgIGNvbG9yczogY29sb3JzLFxuICAgICAgICAgIGRlcHRoOiB1dGlscz8uaW5zcGVjdD8uZGVmYXVsdE9wdGlvbnM/LmRlcHRoID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmluc3BlY3QoYXJnLCB7XG4gICAgICAgICAgLi4udXRpbHM/Lmluc3BlY3Q/LmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAgIGNvbG9yczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmcsIChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmcpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBmYWN0b3J5ID0gKG5hbWU/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcmVmaXhGb3JtYXR0ZXIgPSBjcmVhdGVGb3JtYXR0ZXIobmFtZSwgZ2xvYmFsUHJvY2Vzc1N0ZEVyciwgcmVzZXRDb2xvcnNQcmVmaXgpO1xuICAgIGNvbnN0IGxvZ2dlciA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIExPR19MRVZFTFMubWFwKChsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IHByZWZpeCwgY29sb3JzLCByZXNldENvbG9ycyB9ID0gcHJlZml4Rm9ybWF0dGVyKGxldmVsKTtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkRW1pdChsZXZlbCwgdHJ1ZSkpIHJldHVybjtcbiAgICAgICAgICBpZiAoZ2xvYmFsUHJvY2Vzc1N0ZEVyciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlUGFydHMgPSBwcmVmaXggPyBbcHJlZml4XSA6IFtdO1xuICAgICAgICAgICAgbWVzc2FnZVBhcnRzLnB1c2goLi4uYXJncy5tYXAoKGFyZykgPT4gaW5zcGVjdChhcmcsIGNvbG9ycykpKTtcbiAgICAgICAgICAgIGlmIChyZXNldENvbG9ycykgbWVzc2FnZVBhcnRzLnB1c2goTE9HX0xFVkVMX0NPTE9SX1JFU0VUKTtcbiAgICAgICAgICAgIGdsb2JhbFByb2Nlc3NTdGRFcnIud3JpdGUobWVzc2FnZVBhcnRzLmpvaW4oXCIgXCIpICsgXCJcXG5cIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsZXZlbEZuID0gY29uc29sZVtsZXZlbF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxldmVsRm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICBsZXZlbEZuID0gY29uc29sZS5sb2c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJlZml4KSBsZXZlbEZuID0gbGV2ZWxGbi5iaW5kKGNvbnNvbGUsIHByZWZpeCk7XG4gICAgICAgICAgICBsZXZlbEZuKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFtsZXZlbCwgZW1pdHRlcl07XG4gICAgICB9KSxcbiAgICApIGFzIExvZ2dlcjtcbiAgICAvLyBjb25zb2xhIHN1Z2FyIHRoZSBjb25zb2xlIGZhbGxiYWNrIGRvZXNuJ3QgaGF2ZSBuYXRpdmVseSAtIHJvdXRlIHRvIGluZm8uXG4gICAgbG9nZ2VyLnN1Y2Nlc3MgPSBsb2dnZXIuaW5mbztcbiAgICBsb2dnZXIuc3RhcnQgPSBsb2dnZXIuaW5mbztcbiAgICByZXR1cm4gbG9nZ2VyO1xuICB9O1xuICBjb25zdCBkZWZhdWx0RmFjdG9yeSA9IG1lbW9pemUoZmFjdG9yeSk7XG4gIHJldHVybiAobmFtZT86IHN0cmluZykgPT4gKG5hbWUgPyBmYWN0b3J5KG5hbWUpIDogZGVmYXVsdEZhY3RvcnkoKSk7XG59XG5cbi8qKlxuICogTW9kdWxlLXNjb3BlZCB7QGxpbmsgTG9nZ2VyRmFjdG9yeX0sIGluaXRpYWxpemVkIG9uY2UgdmlhIHRvcC1sZXZlbCBgYXdhaXRgLlxuICogRGVsZWdhdGVzIHRvIHtAbGluayBjcmVhdGVDb25zb2xhTG9nZ2VyRmFjdG9yeX0sIHRoZW5cbiAqIHtAbGluayBjcmVhdGVDb25zb2xlTG9nZ2VyRmFjdG9yeX0uIEVhY2gge0BsaW5rIGxvZ2dlcn0gY2FsbCBpbnZva2VzIHRoZVxuICogY2hvc2VuIGZhY3Rvcnkgd2l0aCBhIHJlc29sdmVkIHRhZy4gRW52IHRvZ2dsZXMgYXJlIHJlYWQgb25seSBkdXJpbmcgaW5pdC5cbiAqL1xuY29uc3QgY3JlYXRlTG9nZ2VyOiBMb2dnZXJGYWN0b3J5ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICAoYXdhaXQgY3JlYXRlQ29uc29sYUxvZ2dlckZhY3RvcnkoKSkgPz8gKGF3YWl0IGNyZWF0ZUNvbnNvbGVMb2dnZXJGYWN0b3J5KGdsb2JhbFByb2Nlc3NTdGRFcnIpKVxuICApO1xufSkoKTtcblxuLyoqXG4gKiBCdWlsZCBhIGxpbmUgcHJlZml4IG9mIGBMRVZFTCBbbmFtZV1gIG9uIE5vZGUvQnVuIGhvc3RzLCBvciBgW25hbWVdYCBhbG9uZVxuICogaW4gYnJvd3NlcnMgKGVpdGhlciBwYXJ0IG9taXR0ZWQgd2hlbiBhYnNlbnQpLiBBcHBsaWVzIHBlci1sZXZlbCBBTlNJIGNvbG9yXG4gKiB3aGVuIGBzdHJlYW1TdXBwb3J0c0NvbG9yYCBpcyB0cnVlIGZvciB0aGUgZ2l2ZW4gc3RkZXJyIHN0cmVhbS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyKFxuICBuYW1lOiBhbnksXG4gIHN0cmVhbTogYW55LFxuICByZXNldENvbG9yc1ByZWZpeD86IGJvb2xlYW4sXG4pOiAobGV2ZWw/OiBMb2dMZXZlbCkgPT4geyBwcmVmaXg6IHN0cmluZzsgY29sb3JzOiBib29sZWFuOyByZXNldENvbG9yczogYm9vbGVhbiB9IHtcbiAgY29uc3QgZ2xvYiA9IGdsb2JhbFRoaXMgYXMgeyB3aW5kb3c/OiB1bmtub3duOyBkb2N1bWVudD86IHVua25vd24gfTtcbiAgY29uc3QgaXNCcm93c2VyID0gZ2xvYi53aW5kb3cgIT09IHVuZGVmaW5lZCAmJiBnbG9iLmRvY3VtZW50ICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IHN1cHBvcnRzQ29sb3IgPSAhaXNCcm93c2VyID8gc3RyZWFtU3VwcG9ydHNDb2xvcihzdHJlYW0pIDogZmFsc2U7XG4gIGNvbnN0IG5hbWVQcmVmaXggPSBuYW1lID8gXCJbXCIgKyBuYW1lICsgXCJdXCIgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAobGV2ZWw/OiBMb2dMZXZlbCkgPT4ge1xuICAgIGNvbnN0IGNvbG9yID0gc3VwcG9ydHNDb2xvciAmJiBsZXZlbCAhPT0gdW5kZWZpbmVkID8gTE9HX0xFVkVMX0NPTE9SU1tsZXZlbF0gOiB1bmRlZmluZWQ7XG4gICAgbGV0IHByZWZpeCA9IFshaXNCcm93c2VyICYmIGxldmVsID8gbGV2ZWwudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCwgbmFtZVByZWZpeF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiIFwiKTtcbiAgICBsZXQgcmVzZXRDb2xvcnMgPSBmYWxzZTtcbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IGFwcGx5UmVzZXRDb2xvcnNQcmVmaXggPSByZXNldENvbG9yc1ByZWZpeCB8fCBcImluZm9cIiA9PT0gbGV2ZWw7XG4gICAgICBpZiAoIWFwcGx5UmVzZXRDb2xvcnNQcmVmaXgpIHJlc2V0Q29sb3JzID0gdHJ1ZTtcbiAgICAgIHByZWZpeCA9IGFwcGx5UmVzZXRDb2xvcnNQcmVmaXggPyBjb2xvciArIHByZWZpeCArIExPR19MRVZFTF9DT0xPUl9SRVNFVCA6IGNvbG9yICsgcHJlZml4O1xuICAgIH1cbiAgICByZXR1cm4geyBwcmVmaXgsIGNvbG9yczogY29sb3IgPyB0cnVlIDogZmFsc2UsIHJlc2V0Q29sb3JzIH07XG4gIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gYHN0cmVhbWAgaXMgYSBUVFkgYW5kIHRoZSB0ZXJtaW5hbCBpcyBub3QgYGR1bWJgLiAqL1xuZnVuY3Rpb24gc3RyZWFtU3VwcG9ydHNDb2xvcihzdHJlYW0/OiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChnbG9iYWxQcm9jZXNzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHN0cmVhbSAhPT0gXCJvYmplY3RcIiB8fCBzdHJlYW0gPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgeyBpc1RUWSB9ID0gc3RyZWFtIGFzIHsgaXNUVFk/OiB1bmtub3duIH07XG4gIGlmIChpc1RUWSAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0ZXJtID0gZ2xvYmFsUHJvY2Vzcy5lbnY/LlRFUk0/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChcImR1bWJcIiA9PSB0ZXJtKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUGFyc2UgYSByYXcgdmFsdWUgYXMge0BsaW5rIExvZ0xldmVsfSAodHJpbW1lZCwgY2FzZS1pbnNlbnNpdGl2ZSkuICovXG5mdW5jdGlvbiBwYXJzZUxvZ0xldmVsKHJhdzogdW5rbm93bik6IExvZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHRleHQgPSB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiID8gcmF3IDogU3RyaW5nKHJhdyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gdGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0ZXh0ID09PSBub3JtYWxpemVkKSBicmVhaztcbiAgICAgIHRleHQgPSBub3JtYWxpemVkO1xuICAgIH1cbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAodGV4dCBpbiBMT0dfTEVWRUxfUkFOSykge1xuICAgICAgcmV0dXJuIHRleHQgYXMgTG9nTGV2ZWw7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBBY3RpdmUgdGhyZXNob2xkIGZyb20gYHByb2Nlc3MuZW52LkxPR19MRVZFTGAsIGRlZmF1bHQge0BsaW5rIERFRkFVTFRfTEVWRUx9LiAqL1xuZnVuY3Rpb24gYWN0aXZlTGV2ZWwoKTogTG9nTGV2ZWwge1xuICByZXR1cm4gcGFyc2VMb2dMZXZlbChnbG9iYWxQcm9jZXNzPy5lbnY/LkxPR19MRVZFTCkgPz8gREVGQVVMVF9MRVZFTDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGByYXdgIG1lZXRzIHRoZSBjdXJyZW50IGBMT0dfTEVWRUxgIHRocmVzaG9sZC5cbiAqXG4gKiBQYXJzZXMgYHJhd2AgYXMgYSB7QGxpbmsgTG9nTGV2ZWx9OyB3aGVuIHBhcnNpbmcgZmFpbHMsIHJldHVybnNcbiAqIGBkZWZhdWx0UmVzdWx0YCBpZiBzdXBwbGllZCwgb3RoZXJ3aXNlIGBmYWxzZWAuIFVzZWQgZm9yIGNvbnNvbGEgcmVwb3J0ZXJcbiAqIGxpbmVzIHdoZXJlIHVua25vd24gYGxvZ09iai50eXBlYCB2YWx1ZXMgc2hvdWxkIHBhc3MgdGhyb3VnaCB3aGVuXG4gKiBgZGVmYXVsdFJlc3VsdGAgaXMgYHRydWVgLlxuICovXG5mdW5jdGlvbiBzaG91bGRFbWl0KHJhdzogdW5rbm93biwgZGVmYXVsdFJlc3VsdD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgY29uc3QgbGV2ZWwgPSBwYXJzZUxvZ0xldmVsKHJhdyk7XG4gIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFJlc3VsdCA/PyBmYWxzZTtcbiAgcmV0dXJuIExPR19MRVZFTF9SQU5LW2xldmVsXSA+PSBMT0dfTEVWRUxfUkFOS1thY3RpdmVMZXZlbCgpXTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgY2FsbCBhdCBgbGV2ZWxgIHdvdWxkIGJlIGVtaXR0ZWQgYXQgdGhlIGN1cnJlbnRcbiAqIGBwcm9jZXNzLmVudi5MT0dfTEVWRUxgIHRocmVzaG9sZC4gVXNlIGJlZm9yZSBidWlsZGluZyBleHBlbnNpdmUgZGVidWdcbiAqIHBheWxvYWRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpZiAoaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKSkge1xuICogICBsb2cuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJcIiwgeyBjb250cmlidXRpb246IGF3YWl0IGhlYXZ5U25hcHNob3QoKSB9KTtcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGV2ZWxFbmFibGVkKGxldmVsOiBMb2dMZXZlbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2hvdWxkRW1pdChsZXZlbCk7XG59XG5cbmNvbnN0IExPR0dFUl9OQU1FX1JFR0VYID0gL14oPzpbYS16XVthLXowLTkrLi1dKjpcXC9cXC8pPy4qXFwvKFteLy5dKykoPzpcXC5bXi9dKyk/JC9pO1xuXG4vKipcbiAqIERlcml2ZSB0aGUgdGFnIHN0cmluZyBmcm9tIGEgbG9nZ2VyIG5hbWUsIHBsdWdpbiwgb3IgcGF0aC4gU2xhc2gtIGFuZFxuICogVVJMLXNoYXBlZCBzdHJpbmdzIHVzZSB0aGUgbGFzdCBwYXRoIHNlZ21lbnQgKGV4dGVuc2lvbiBzdHJpcHBlZCk7IHBsYWluXG4gKiBzdHJpbmdzIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQuIEVtcHR5IG9yIG1pc3NpbmcgbmFtZXMgLT4gYHVuZGVmaW5lZGBcbiAqICh1bnRhZ2dlZCBzaW5rKS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdExvZ2dlck5hbWUobG9nZ2VyTmFtZTogTmFtZUxpa2UgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWxvZ2dlck5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgbG9nZ2VyTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG1hdGNoID0gbG9nZ2VyTmFtZS5tYXRjaChMT0dHRVJfTkFNRV9SRUdFWCk7XG4gICAgcmV0dXJuIG1hdGNoPy5bMV0gPz8gbG9nZ2VyTmFtZTtcbiAgfVxuICByZXR1cm4gZXh0cmFjdExvZ2dlck5hbWUobG9nZ2VyTmFtZS5uYW1lKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHRhZ2dlZCBsb2dnZXIgZm9yIGEgcGx1Z2luIG9yIG1vZHVsZS5cbiAqXG4gKiBUaGUgdGFnIGlzIGBbbmFtZV1gIHdoZW4gYGxvZ2dlck5hbWVgIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgYVxuICoge0BsaW5rIE5hbWVMaWtlfSB3aXRoIGBuYW1lYCwgb3IgYSBmaWxlIC8gVVJMIHBhdGggKHRoZSBiYXNlbmFtZSB3aXRob3V0XG4gKiBleHRlbnNpb24gaXMgdXNlZCkuIENvbnNvbGEgYXBwbGllcyB0aGUgdGFnIHZpYSBgd2l0aFRhZ2AgKHJlbmRlci10aW1lKS5cbiAqIFRoZSBgY29uc29sZWAgZmFsbGJhY2tzIHByZXBlbmQgYExFVkVMIFtuYW1lXWAgb24gTm9kZS9CdW4gaG9zdHMgb3IgYFtuYW1lXWBcbiAqIGFsb25lIGluIGJyb3dzZXJzIHZpYSB7QGxpbmsgY3JlYXRlRm9ybWF0dGVyfS5cbiAqXG4gKiBDYWxscyBiZWxvdyBgcHJvY2Vzcy5lbnYuTE9HX0xFVkVMYCBhcmUgZHJvcHBlZCBieSB7QGxpbmsgc2hvdWxkRW1pdH0gYmVmb3JlXG4gKiB0aGUgc2luayBmb3JtYXRzIG9yIHdyaXRlcyB0aGUgbGluZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbiAqXG4gKiBjb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZ2VuaWUvY2hhdFwiKTtcbiAqIGxvZ2dlci5pbmZvKFwic3RhcnRpbmdcIik7XG4gKiBsb2dnZXIud2FybihcIm1pc3Npbmcgb3B0aW9uYWwgY29uZmlnXCIsIHsgcmVhc29uOiBcIm5vIGVudiB2YXJcIiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ2dlcihsb2dnZXJOYW1lOiBOYW1lTGlrZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IExvZ2dlciB7XG4gIGNvbnN0IG5hbWUgPSBleHRyYWN0TG9nZ2VyTmFtZShsb2dnZXJOYW1lKTtcbiAgcmV0dXJuIGNyZWF0ZUxvZ2dlcihuYW1lKTtcbn1cbiJdfQ==
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7Ozs7Ozs7OztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFjdkQsTUFBTSxhQUFhLEdBQUksVUFBd0MsQ0FBQyxPQUFPLENBQUM7QUFDeEUsTUFBTSxTQUFTLEdBQUksVUFBZ0MsQ0FBQyxHQUFHLENBQUM7QUFFeEQ7Ozs7OztHQU1HO0FBQ0gsOERBQThEO0FBQzlELE1BQU0sbUJBQW1CLEdBQ3ZCLGFBQWEsSUFBSSxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxLQUFLLFVBQVU7SUFDaEUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNO0lBQ3RCLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFFaEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQVUsQ0FBQztBQUMvRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUN2QyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDckIsQ0FBQztBQUM5QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ3pDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUN2QixJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxPQUFPO0lBQy9CLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDZCxLQUFLLE1BQU07WUFDVCxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsT0FBTztZQUMzQixNQUFNO1FBQ1Is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QUssQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLGlCQUFpQixHQUFHLHdEQUF3RCxDQUFDO0FBRW5GOzs7OztHQUtHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUF5QztJQUNsRSxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsVUFBeUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGFnZ2VkLCBsZXZlbGVkIGxvZ2dpbmcgZm9yIGV2ZXJ5IHJ1bnRpbWUgLSB0aGUgb25lIGxvZ2dlciB0aGUgd2hvbGVcbiAqIG1vbm9yZXBvIHNoYXJlcy5cbiAqXG4gKiB7QGxpbmsgbG9nZ2VyfSByZXNvbHZlcyBhIHRhZ2dlZCB7QGxpbmsgTG9nZ2VyfSB2aWEgYSB7QGxpbmsgTG9nZ2VyRmFjdG9yeX1cbiAqIGNob3NlbiBvbmNlIGF0IG1vZHVsZSBsb2FkLiB7QGxpbmsgTG9nTGV2ZWx9IGZpbHRlcmluZyBydW5zIHRocm91Z2hcbiAqIHtAbGluayBzaG91bGRFbWl0fSBpbiB0aGUgY29uc29sYSByZXBvcnRlciBvciBpbiBwZXItbGV2ZWwgd3JhcHBlcnMgb24gdGhlXG4gKiBgY29uc29sZWAgZmFsbGJhY2tzLlxuICpcbiAqIFNpbmsgc2VsZWN0aW9uIGNoYWlucyB0d28gZmFjdG9yaWVzIHdpdGggbnVsbGlzaCBjb2FsZXNjaW5nIChmaXJzdCBtYXRjaFxuICogd2lucyk6XG4gKlxuICogMS4ge0BsaW5rIGNyZWF0ZUNvbnNvbGFMb2dnZXJGYWN0b3J5fSB3aGVuIGNvbnNvbGEgcmVzb2x2ZXMgYW5kXG4gKiAgICBgTE9HX0NPTlNPTEFfRElTQUJMRURgIGlzIG5vdCB0cnV0aHkuXG4gKiAyLiB7QGxpbmsgY3JlYXRlQ29uc29sZUxvZ2dlckZhY3Rvcnl9IGV2ZXJ5d2hlcmUgZWxzZS5cbiAqXG4gKiBUaGUgY29uc29sZSBmYWxsYmFjayB3cml0ZXMgZm9ybWF0dGVkIGxpbmVzIHRvIGBwcm9jZXNzLnN0ZGVycmAgd2hlbiBpdCBpc1xuICogYXZhaWxhYmxlIChCdW4gYGluc3BlY3RgIHBlciBhcmd1bWVudCB3aGVuIGBMT0dfQlVOX0NPTlNPTEVfRElTQUJMRURgIGlzXG4gKiB1bnNldCwgb3RoZXJ3aXNlIGBub2RlOnV0aWxgIGBmb3JtYXRXaXRoT3B0aW9uc2ApLCBvciBkZWxlZ2F0ZXMgdG8gZ2xvYmFsXG4gKiBgY29uc29sZS4qYCB3aGVuIHN0ZGVyciBvciBgbm9kZTp1dGlsYCBpcyB1bmF2YWlsYWJsZS4gQnJvd3NlciBob3N0cyBvbWl0XG4gKiB0aGUgYExFVkVMYCB0ZXh0IHByZWZpeCAoZGV2dG9vbHMgc2hvdyBzZXZlcml0eSkgYW5kIGtlZXAgb25seSB0aGUgYFtuYW1lXWBcbiAqIHRhZy5cbiAqXG4gKiBFbnYgdG9nZ2xlcyAocmVhZCBvbmNlIGF0IGluaXQpOiBgTE9HX0xFVkVMYCwgYExPR19DT05TT0xBX0RJU0FCTEVEYCxcbiAqIGBMT0dfQlVOX0NPTlNPTEVfRElTQUJMRURgLlxuICpcbiAqIEJyb3dzZXItc2FmZTogYHByb2Nlc3NgIC8gYEJ1bmAgLyBgd2luZG93YCAvIGBkb2N1bWVudGAgYXJlIGFsbCByZWFjaGVkXG4gKiB0aHJvdWdoIGBnbG9iYWxUaGlzYCBhbmQgZ3VhcmRlZCwgYW5kIGNvbnNvbGEgLyBgbm9kZTp1dGlsYCBsb2FkIGxhemlseSwgc29cbiAqIHRoZSBtb2R1bGUgd29ya3MgaW4gYW55IHJ1bnRpbWUuIENvbnNvbGEgaXMgYW4gb3B0aW9uYWwgcGVlcjsgdGhlIG1vZHVsZVxuICogbG9hZHMgZmluZSB3aXRob3V0IGl0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4vZnVuY3Rpb24udHNcIjtcbmltcG9ydCB7IHR5cGUgTmFtZUxpa2UsIHRvQm9vbGVhbiB9IGZyb20gXCIuL29iamVjdC50c1wiO1xuXG4vKiogYHByb2Nlc3NgLXNoYXBlZCB2aWV3IG9mZiBgZ2xvYmFsVGhpc2AsIHNvIG5vIG5vZGUgdHlwZXMgYXJlIG5lZWRlZC4gKi9cbmludGVyZmFjZSBQcm9jZXNzTGlrZSB7XG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHN0ZGVycj86IHsgd3JpdGU/OiAoY2h1bms6IHN0cmluZykgPT4gdm9pZDsgaXNUVFk/OiB1bmtub3duIH07XG59XG5cbi8qKiBgQnVuYC1zaGFwZWQgdmlldyBvZmYgYGdsb2JhbFRoaXNgLCBzbyBubyBgQHR5cGVzL2J1bmAgaXMgbmVlZGVkLiAqL1xuaW50ZXJmYWNlIEJ1bkxpa2Uge1xuICBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBpbnNwZWN0PzogKHZhbHVlOiB1bmtub3duLCBvcHRpb25zPzogeyBjb2xvcnM/OiBib29sZWFuOyBkZXB0aD86IG51bWJlciB9KSA9PiBzdHJpbmc7XG59XG5cbmNvbnN0IGdsb2JhbFByb2Nlc3MgPSAoZ2xvYmFsVGhpcyBhcyB7IHByb2Nlc3M/OiBQcm9jZXNzTGlrZSB9KS5wcm9jZXNzO1xuY29uc3QgZ2xvYmFsQnVuID0gKGdsb2JhbFRoaXMgYXMgeyBCdW4/OiBCdW5MaWtlIH0pLkJ1bjtcblxuLyoqXG4gKiBOb2RlIGBwcm9jZXNzLnN0ZGVycmAgd2hlbiB3cml0YWJsZSwgZWxzZSBgdW5kZWZpbmVkYCAoc3RhYmxlIGZvciB0aGVcbiAqIHByb2Nlc3MpLiBUeXBlZCBsb29zZWx5IChgYW55YCkgYmVjYXVzZSBpdCBpcyBoYW5kZWQgdG8gY29uc29sYSdzXG4gKiBgY3R4Lm9wdGlvbnMuc3Rkb3V0YCAoYSBgV3JpdGVTdHJlYW1gKSBhbmQgdG8gdGhlIGNvbnNvbGUgZmFsbGJhY2snc1xuICogYC53cml0ZWAsIG5laXRoZXIgb2Ygd2hpY2ggb3VyIHN0cnVjdHVyYWwge0BsaW5rIFByb2Nlc3NMaWtlfSBzaGFwZSBzYXRpc2ZpZXNcbiAqIG5vbWluYWxseS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmNvbnN0IGdsb2JhbFByb2Nlc3NTdGRFcnI6IGFueSA9XG4gIGdsb2JhbFByb2Nlc3MgJiYgdHlwZW9mIGdsb2JhbFByb2Nlc3Muc3RkZXJyPy53cml0ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgPyBnbG9iYWxQcm9jZXNzLnN0ZGVyclxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBMT0dfTEVWRUxTID0gW1wiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCJdIGFzIGNvbnN0O1xuY29uc3QgTE9HX0xFVkVMX1JBTksgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIExPR19MRVZFTFMubWFwKChsZXZlbCwgaW5kZXgpID0+IFtsZXZlbCwgaW5kZXhdKSxcbikgYXMgUmVjb3JkPExvZ0xldmVsLCBudW1iZXI+O1xuY29uc3QgTE9HX0xFVkVMX0NPTE9SUyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgTE9HX0xFVkVMUy5tYXAoKGxldmVsKSA9PiB7XG4gICAgbGV0IGNvbG9yID0gXCJcXHgxYls5MG1cIjsgLy8gZ3JheVxuICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgIGNhc2UgXCJpbmZvXCI6XG4gICAgICAgIGNvbG9yID0gXCJcXHgxYlszNG1cIjsgLy8gYmx1ZVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ3YXJuXCI6XG4gICAgICAgIGNvbG9yID0gXCJcXHgxYlszM21cIjsgLy8geWVsbG93XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgIGNvbG9yID0gXCJcXHgxYlszMW1cIjsgLy8gcmVkXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gW2xldmVsLCBjb2xvcl07XG4gIH0pLFxuKSBhcyBSZWNvcmQ8TG9nTGV2ZWwsIHN0cmluZz47XG5jb25zdCBMT0dfTEVWRUxfQ09MT1JfUkVTRVQgPSBcIlxceDFiWzBtXCI7XG5jb25zdCBERUZBVUxUX0xFVkVMOiBMb2dMZXZlbCA9IFwiaW5mb1wiO1xuXG4vKipcbiAqIFN1cHBvcnRlZCBzZXZlcml0aWVzLCBsb3dlc3QgdG8gaGlnaGVzdDogYGRlYnVnYCwgYGluZm9gLCBgd2FybmAsIGBlcnJvcmAuXG4gKiBBIGNhbGwgYmVsb3cgdGhlIGFjdGl2ZSB0aHJlc2hvbGQgaXMgZGlzY2FyZGVkIGJlZm9yZSBhbnkgc3RyaW5nIHdvcmsgb3JcbiAqIHNpbmsgSS9PLlxuICpcbiAqIFRoZSB0aHJlc2hvbGQgY29tZXMgZnJvbSBgcHJvY2Vzcy5lbnYuTE9HX0xFVkVMYCBvbiBldmVyeSBjYWxsXG4gKiAoY2FzZS1pbnNlbnNpdGl2ZSwgZGVmYXVsdCBgaW5mb2Agd2hlbiB1bnNldCwgZW1wdHksIG9yIHVua25vd24pIHNvIHRlc3RcbiAqIHJ1bm5lcnMgYW5kIGVtYmVkZGVycyBjYW4gY2hhbmdlIHZlcmJvc2l0eSBhZnRlciBpbXBvcnQgd2l0aG91dCByZXN0YXJ0aW5nXG4gKiB0aGUgcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAodHlwZW9mIExPR19MRVZFTFMpW251bWJlcl07XG5cbmV4cG9ydCB0eXBlIExvZ2dlciA9IHtcbiAgW0sgaW4gTG9nTGV2ZWxdOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59ICYge1xuICAvKiogU3VjY2VzcyBtZXNzYWdlIChjb25zb2xhIGBzdWNjZXNzYDsgZmFsbHMgYmFjayB0byBgaW5mb2AtbGV2ZWwgb3V0cHV0KS4gKi9cbiAgc3VjY2VzczogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuICAvKiogU3RhcnQgLyBpbi1wcm9ncmVzcyBtZXNzYWdlIChjb25zb2xhIGBzdGFydGA7IGZhbGxzIGJhY2sgdG8gYGluZm9gLWxldmVsIG91dHB1dCkuICovXG4gIHN0YXJ0OiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59O1xuXG4vKiogYChuYW1lPykgPT4gTG9nZ2VyYCBzaW5rIGNvbnN0cnVjdG9yIHJldHVybmVkIGJ5IHRoZSBpbml0LXRpbWUgZmFjdG9yeSBjaGFpbi4gKi9cbnR5cGUgTG9nZ2VyRmFjdG9yeSA9IChuYW1lPzogc3RyaW5nKSA9PiBMb2dnZXI7XG5cbi8qKlxuICogQ29uc29sYS1iYWNrZWQge0BsaW5rIExvZ2dlckZhY3Rvcnl9LCBvciBgdW5kZWZpbmVkYCB3aGVuIGNvbnNvbGEgaXNcbiAqIGRpc2FibGVkLCBmYWlscyB0byBpbXBvcnQsIG9yIHRocm93cyBkdXJpbmcgc2V0dXAuXG4gKlxuICogQnVpbGRzIG9uZSBgY3JlYXRlQ29uc29sYWAgaW5zdGFuY2UgKGJhZGdlIG9mZiwgbGV2ZWwgYHZlcmJvc2VgKSB3aG9zZVxuICogcmVwb3J0ZXIgY2FsbHMge0BsaW5rIHNob3VsZEVtaXR9IG9uIGBsb2dPYmoudHlwZWAgYmVmb3JlIGRlbGVnYXRpbmcgdG9cbiAqIGNvbnNvbGEncyBkZWZhdWx0IHJlcG9ydGVycy4gSW4gTm9kZSwgd2hlbiBgZ2xvYmFsUHJvY2Vzc1N0ZEVycmAgaXMgc2V0LFxuICogcmVjb2duaXplZCB7QGxpbmsgTG9nTGV2ZWx9IHR5cGVzIGFyZSByZWRpcmVjdGVkIHRvIHN0ZGVyciBmb3IgdGhhdCB3cml0ZS5cbiAqIFRhZ3MgdXNlIGB3aXRoVGFnYCAocmVuZGVyZWQgYFtuYW1lXWAsIG5vdCBtZXJnZWQgaW50byBhcmdzKS5cbiAqXG4gKiBNZW1vaXplZDogdGhlIGR5bmFtaWMgYGNvbnNvbGFgIGltcG9ydCwgZW52IGNoZWNrcywgYW5kIGBjcmVhdGVDb25zb2xhYFxuICogc2V0dXAgKHBsdXMgdGhlIGltcG9ydC90aHJvdyBmYWxsYmFjaykgcnVuIG9uY2U7IGxhdGVyIGNhbGxzIHNoYXJlIHRoZSBvbmVcbiAqIHJlc29sdmVkIGZhY3RvcnkgKG9yIHRoZSBvbmUgcmVzb2x2ZWQgYHVuZGVmaW5lZGApLiBBIHJlamVjdGlvbiBpcyBldmljdGVkXG4gKiBieSB7QGxpbmsgbWVtb2l6ZX0gc28gYSBsYXRlciBjYWxsIHJldHJpZXMuXG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnNvbGFMb2dnZXJGYWN0b3J5ID0gbWVtb2l6ZShhc3luYyAoKTogUHJvbWlzZTxMb2dnZXJGYWN0b3J5IHwgdW5kZWZpbmVkPiA9PiB7XG4gIGNvbnN0IGNvbnNvbGFEaXNhYmxlZCA9IHRvQm9vbGVhbihnbG9iYWxQcm9jZXNzPy5lbnY/LkxPR19DT05TT0xBX0RJU0FCTEVEKTtcbiAgaWYgKCFjb25zb2xhRGlzYWJsZWQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBjb25zb2xhLCBjcmVhdGVDb25zb2xhLCBMb2dMZXZlbHMgfSA9IGF3YWl0IGltcG9ydCgvKiBAdml0ZS1pZ25vcmUgKi8gXCJjb25zb2xhXCIpO1xuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBjb25zb2xhLm9wdGlvbnM7XG4gICAgICBjb25zdCBjcmVhdGVDb25zb2xhT3B0aW9ucyA9IHtcbiAgICAgICAgLi4uY29uc29sYS5vcHRpb25zLFxuICAgICAgICBkZWZhdWx0czogeyBiYWRnZTogZmFsc2UgfSxcbiAgICAgICAgLy8gYExPR19MRVZFTGAgaXMgZW5mb3JjZWQgaW4ge0BsaW5rIHNob3VsZEVtaXR9OyBrZWVwIGNvbnNvbGEgcGVybWlzc2l2ZVxuICAgICAgICAvLyBzbyBhIHRocmVzaG9sZCBjaGFuZ2UgYWZ0ZXIgaW1wb3J0IGlzIG5vdCBibG9ja2VkIGJ5IGl0cyBvd24gZmlsdGVyLlxuICAgICAgICBsZXZlbDogTG9nTGV2ZWxzLnZlcmJvc2UsXG4gICAgICAgIHJlcG9ydGVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxvZzogKGxvZ09iaiwgY3R4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGxvZ0xldmVsID0gcGFyc2VMb2dMZXZlbChsb2dPYmoudHlwZSk7XG4gICAgICAgICAgICAgIGlmICghc2hvdWxkRW1pdChsb2dMZXZlbCwgdHJ1ZSkpIHJldHVybjtcbiAgICAgICAgICAgICAgY29uc3QgY3R4U3Rkb3V0ID0gY3R4Lm9wdGlvbnMuc3Rkb3V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxQcm9jZXNzU3RkRXJyICE9PSB1bmRlZmluZWQgJiYgbG9nTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMuc3Rkb3V0ID0gZ2xvYmFsUHJvY2Vzc1N0ZEVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdE9wdGlvbnMucmVwb3J0ZXJzLmZvckVhY2goKHJlcG9ydGVyKSA9PiByZXBvcnRlci5sb2cobG9nT2JqLCBjdHgpKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjdHgub3B0aW9ucy5zdGRvdXQgPSBjdHhTdGRvdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgTm9uTnVsbGFibGU8UGFyYW1ldGVyczx0eXBlb2YgY3JlYXRlQ29uc29sYT5bMF0+O1xuICAgICAgY29uc3QgY29uc29sYUxvZ2dlciA9IGNyZWF0ZUNvbnNvbGEoY3JlYXRlQ29uc29sYU9wdGlvbnMpO1xuICAgICAgcmV0dXJuIChuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBuYW1lID8gY29uc29sYUxvZ2dlci53aXRoVGFnKG5hbWUpIDogY29uc29sYUxvZ2dlcjtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGNvbnNvbGEgaXMgYW4gT1BUSU9OQUwgcGVlciAtIG5vdCBoYXZpbmcgaXQgaW5zdGFsbGVkIGlzIHRoZSBFWFBFQ1RFRFxuICAgICAgLy8gcGF0aCAodGhlIG1vZHVsZSBkZWdyYWRlcyB0byB0aGUgY29uc29sZSBmYWxsYmFjayksIHNvIHRoaXMgaXMgbm90IGFuXG4gICAgICAvLyBlcnJvci4gTm90ZSBpdCBvbmx5IGF0IGRlYnVnIGxldmVsLCBhbmQgd2l0aG91dCBhIHN0YWNrIHRyYWNlICh0aGVcbiAgICAgIC8vIG1lc3NhZ2UsIG5vdCBgY29uc29sZS50cmFjZWAsIHNvIGEgbWlzc2luZyBvcHRpb25hbCBkZXAgc3RheXMgcXVpZXQpLlxuICAgICAgaWYgKGlzTGV2ZWxFbmFibGVkKFwiZGVidWdcIikpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhcImNvbnNvbGEgbm90IGF2YWlsYWJsZTsgdXNpbmcgY29uc29sZSBmYWxsYmFjazpcIiwgU3RyaW5nKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59KTtcblxuLyoqXG4gKiBDb25zb2xlIHtAbGluayBMb2dnZXJGYWN0b3J5fTsgYWx3YXlzIHN1Y2NlZWRzLlxuICpcbiAqIFdoZW4gYHByb2Nlc3Muc3RkZXJyYCBpcyBhdmFpbGFibGUsIGZvcm1hdHMgZWFjaCBsaW5lIGFuZCB3cml0ZXMgb25seSB0b1xuICogc3RkZXJyLiBCdW4gYGluc3BlY3RgIGZvcm1hdHMgZWFjaCBhcmd1bWVudCB3aGVuIGVuYWJsZWQ7IG90aGVyd2lzZVxuICogYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnNgIHdoZW4gYG5vZGU6dXRpbGAgbG9hZHMsIG9yIGEgYEpTT04uc3RyaW5naWZ5YFxuICogZmFsbGJhY2sgd2hlbiBpdCBkb2VzIG5vdC4gV2hlbiBzdGRlcnIgaXMgdW5hdmFpbGFibGUsIGJpbmRzXG4gKiB7QGxpbmsgY3JlYXRlRm9ybWF0dGVyfSBwcmVmaXhlcyBpbnRvIGdsb2JhbCBgY29uc29sZS4qYCBjYWxscy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29uc29sZUxvZ2dlckZhY3RvcnkoZ2xvYmFsUHJvY2Vzc1N0ZEVycjogYW55KTogUHJvbWlzZTxMb2dnZXJGYWN0b3J5PiB7XG4gIC8vIEluZGlyZWN0IHNwZWNpZmllciBzbyB0aGlzIGJyb3dzZXItc2FmZSBtb2R1bGUgZG9lc24ndCBzdGF0aWNhbGx5IHB1bGwgaW5cbiAgLy8gbm9kZSB0eXBlczogYG5vZGU6dXRpbGAgaXMgb3B0aW9uYWwgKHRoZSBKU09OIGZhbGxiYWNrIGNvdmVycyBpdHMgYWJzZW5jZSkuXG4gIGNvbnN0IG5vZGVVdGlsID0gXCJub2RlOnV0aWxcIjtcbiAgY29uc3QgdXRpbHM6IHsgaW5zcGVjdD86IGFueSB9IHwgdW5kZWZpbmVkID0gYXdhaXQgaW1wb3J0KC8qIEB2aXRlLWlnbm9yZSAqLyBub2RlVXRpbCkuY2F0Y2goXG4gICAgKCkgPT4gdW5kZWZpbmVkLFxuICApO1xuICBjb25zdCBidW5JbnNwZWN0ID1cbiAgICBnbG9iYWxCdW4gIT09IHVuZGVmaW5lZCAmJiAhdG9Cb29sZWFuKGdsb2JhbEJ1bi5lbnY/LkxPR19CVU5fQ09OU09MRV9ESVNBQkxFRClcbiAgICAgID8gZ2xvYmFsQnVuLmluc3BlY3RcbiAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCByZXNldENvbG9yc1ByZWZpeCA9IGJ1bkluc3BlY3QgIT09IHVuZGVmaW5lZDtcblxuICBjb25zdCBpbnNwZWN0ID0gKGFyZzogYW55LCBjb2xvcnM/OiBib29sZWFuKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSB8fCAodHlwZW9mIGFyZyA9PT0gXCJvYmplY3RcIiAmJiBhcmcgIT09IG51bGwpKSB7XG4gICAgICBpZiAoYnVuSW5zcGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBidW5JbnNwZWN0KGFyZywge1xuICAgICAgICAgIGNvbG9yczogY29sb3JzLFxuICAgICAgICAgIGRlcHRoOiB1dGlscz8uaW5zcGVjdD8uZGVmYXVsdE9wdGlvbnM/LmRlcHRoID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHV0aWxzLmluc3BlY3QoYXJnLCB7XG4gICAgICAgICAgLi4udXRpbHM/Lmluc3BlY3Q/LmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAgIGNvbG9yczogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmcsIChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFN0cmluZyhhcmcpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBmYWN0b3J5ID0gKG5hbWU/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcmVmaXhGb3JtYXR0ZXIgPSBjcmVhdGVGb3JtYXR0ZXIobmFtZSwgZ2xvYmFsUHJvY2Vzc1N0ZEVyciwgcmVzZXRDb2xvcnNQcmVmaXgpO1xuICAgIGNvbnN0IGxvZ2dlciA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIExPR19MRVZFTFMubWFwKChsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IHByZWZpeCwgY29sb3JzLCByZXNldENvbG9ycyB9ID0gcHJlZml4Rm9ybWF0dGVyKGxldmVsKTtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkRW1pdChsZXZlbCwgdHJ1ZSkpIHJldHVybjtcbiAgICAgICAgICBpZiAoZ2xvYmFsUHJvY2Vzc1N0ZEVyciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlUGFydHMgPSBwcmVmaXggPyBbcHJlZml4XSA6IFtdO1xuICAgICAgICAgICAgbWVzc2FnZVBhcnRzLnB1c2goLi4uYXJncy5tYXAoKGFyZykgPT4gaW5zcGVjdChhcmcsIGNvbG9ycykpKTtcbiAgICAgICAgICAgIGlmIChyZXNldENvbG9ycykgbWVzc2FnZVBhcnRzLnB1c2goTE9HX0xFVkVMX0NPTE9SX1JFU0VUKTtcbiAgICAgICAgICAgIGdsb2JhbFByb2Nlc3NTdGRFcnIud3JpdGUobWVzc2FnZVBhcnRzLmpvaW4oXCIgXCIpICsgXCJcXG5cIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBsZXZlbEZuID0gY29uc29sZVtsZXZlbF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGxldmVsRm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICBsZXZlbEZuID0gY29uc29sZS5sb2c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJlZml4KSBsZXZlbEZuID0gbGV2ZWxGbi5iaW5kKGNvbnNvbGUsIHByZWZpeCk7XG4gICAgICAgICAgICBsZXZlbEZuKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFtsZXZlbCwgZW1pdHRlcl07XG4gICAgICB9KSxcbiAgICApIGFzIExvZ2dlcjtcbiAgICAvLyBjb25zb2xhIHN1Z2FyIHRoZSBjb25zb2xlIGZhbGxiYWNrIGRvZXNuJ3QgaGF2ZSBuYXRpdmVseSAtIHJvdXRlIHRvIGluZm8uXG4gICAgbG9nZ2VyLnN1Y2Nlc3MgPSBsb2dnZXIuaW5mbztcbiAgICBsb2dnZXIuc3RhcnQgPSBsb2dnZXIuaW5mbztcbiAgICByZXR1cm4gbG9nZ2VyO1xuICB9O1xuICBjb25zdCBkZWZhdWx0RmFjdG9yeSA9IG1lbW9pemUoZmFjdG9yeSk7XG4gIHJldHVybiAobmFtZT86IHN0cmluZykgPT4gKG5hbWUgPyBmYWN0b3J5KG5hbWUpIDogZGVmYXVsdEZhY3RvcnkoKSk7XG59XG5cbi8qKlxuICogTW9kdWxlLXNjb3BlZCB7QGxpbmsgTG9nZ2VyRmFjdG9yeX0sIGluaXRpYWxpemVkIG9uY2UgdmlhIHRvcC1sZXZlbCBgYXdhaXRgLlxuICogRGVsZWdhdGVzIHRvIHtAbGluayBjcmVhdGVDb25zb2xhTG9nZ2VyRmFjdG9yeX0sIHRoZW5cbiAqIHtAbGluayBjcmVhdGVDb25zb2xlTG9nZ2VyRmFjdG9yeX0uIEVhY2gge0BsaW5rIGxvZ2dlcn0gY2FsbCBpbnZva2VzIHRoZVxuICogY2hvc2VuIGZhY3Rvcnkgd2l0aCBhIHJlc29sdmVkIHRhZy4gRW52IHRvZ2dsZXMgYXJlIHJlYWQgb25seSBkdXJpbmcgaW5pdC5cbiAqL1xuY29uc3QgY3JlYXRlTG9nZ2VyOiBMb2dnZXJGYWN0b3J5ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICAoYXdhaXQgY3JlYXRlQ29uc29sYUxvZ2dlckZhY3RvcnkoKSkgPz8gKGF3YWl0IGNyZWF0ZUNvbnNvbGVMb2dnZXJGYWN0b3J5KGdsb2JhbFByb2Nlc3NTdGRFcnIpKVxuICApO1xufSkoKTtcblxuLyoqXG4gKiBCdWlsZCBhIGxpbmUgcHJlZml4IG9mIGBMRVZFTCBbbmFtZV1gIG9uIE5vZGUvQnVuIGhvc3RzLCBvciBgW25hbWVdYCBhbG9uZVxuICogaW4gYnJvd3NlcnMgKGVpdGhlciBwYXJ0IG9taXR0ZWQgd2hlbiBhYnNlbnQpLiBBcHBsaWVzIHBlci1sZXZlbCBBTlNJIGNvbG9yXG4gKiB3aGVuIGBzdHJlYW1TdXBwb3J0c0NvbG9yYCBpcyB0cnVlIGZvciB0aGUgZ2l2ZW4gc3RkZXJyIHN0cmVhbS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyKFxuICBuYW1lOiBhbnksXG4gIHN0cmVhbTogYW55LFxuICByZXNldENvbG9yc1ByZWZpeD86IGJvb2xlYW4sXG4pOiAobGV2ZWw/OiBMb2dMZXZlbCkgPT4geyBwcmVmaXg6IHN0cmluZzsgY29sb3JzOiBib29sZWFuOyByZXNldENvbG9yczogYm9vbGVhbiB9IHtcbiAgY29uc3QgZ2xvYiA9IGdsb2JhbFRoaXMgYXMgeyB3aW5kb3c/OiB1bmtub3duOyBkb2N1bWVudD86IHVua25vd24gfTtcbiAgY29uc3QgaXNCcm93c2VyID0gZ2xvYi53aW5kb3cgIT09IHVuZGVmaW5lZCAmJiBnbG9iLmRvY3VtZW50ICE9PSB1bmRlZmluZWQ7XG4gIGNvbnN0IHN1cHBvcnRzQ29sb3IgPSAhaXNCcm93c2VyID8gc3RyZWFtU3VwcG9ydHNDb2xvcihzdHJlYW0pIDogZmFsc2U7XG4gIGNvbnN0IG5hbWVQcmVmaXggPSBuYW1lID8gXCJbXCIgKyBuYW1lICsgXCJdXCIgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAobGV2ZWw/OiBMb2dMZXZlbCkgPT4ge1xuICAgIGNvbnN0IGNvbG9yID0gc3VwcG9ydHNDb2xvciAmJiBsZXZlbCAhPT0gdW5kZWZpbmVkID8gTE9HX0xFVkVMX0NPTE9SU1tsZXZlbF0gOiB1bmRlZmluZWQ7XG4gICAgbGV0IHByZWZpeCA9IFshaXNCcm93c2VyICYmIGxldmVsID8gbGV2ZWwudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCwgbmFtZVByZWZpeF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5qb2luKFwiIFwiKTtcbiAgICBsZXQgcmVzZXRDb2xvcnMgPSBmYWxzZTtcbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IGFwcGx5UmVzZXRDb2xvcnNQcmVmaXggPSByZXNldENvbG9yc1ByZWZpeCB8fCBcImluZm9cIiA9PT0gbGV2ZWw7XG4gICAgICBpZiAoIWFwcGx5UmVzZXRDb2xvcnNQcmVmaXgpIHJlc2V0Q29sb3JzID0gdHJ1ZTtcbiAgICAgIHByZWZpeCA9IGFwcGx5UmVzZXRDb2xvcnNQcmVmaXggPyBjb2xvciArIHByZWZpeCArIExPR19MRVZFTF9DT0xPUl9SRVNFVCA6IGNvbG9yICsgcHJlZml4O1xuICAgIH1cbiAgICByZXR1cm4geyBwcmVmaXgsIGNvbG9yczogY29sb3IgPyB0cnVlIDogZmFsc2UsIHJlc2V0Q29sb3JzIH07XG4gIH07XG59XG5cbi8qKiBUcnVlIHdoZW4gYHN0cmVhbWAgaXMgYSBUVFkgYW5kIHRoZSB0ZXJtaW5hbCBpcyBub3QgYGR1bWJgLiAqL1xuZnVuY3Rpb24gc3RyZWFtU3VwcG9ydHNDb2xvcihzdHJlYW0/OiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChnbG9iYWxQcm9jZXNzID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHN0cmVhbSAhPT0gXCJvYmplY3RcIiB8fCBzdHJlYW0gPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgeyBpc1RUWSB9ID0gc3RyZWFtIGFzIHsgaXNUVFk/OiB1bmtub3duIH07XG4gIGlmIChpc1RUWSAhPT0gdHJ1ZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB0ZXJtID0gZ2xvYmFsUHJvY2Vzcy5lbnY/LlRFUk0/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChcImR1bWJcIiA9PSB0ZXJtKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogUGFyc2UgYSByYXcgdmFsdWUgYXMge0BsaW5rIExvZ0xldmVsfSAodHJpbW1lZCwgY2FzZS1pbnNlbnNpdGl2ZSkuICovXG5mdW5jdGlvbiBwYXJzZUxvZ0xldmVsKHJhdzogdW5rbm93bik6IExvZ0xldmVsIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IHRleHQgPSB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiID8gcmF3IDogU3RyaW5nKHJhdyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XG4gICAgaWYgKGkgPiAwKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gdGV4dC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0ZXh0ID09PSBub3JtYWxpemVkKSBicmVhaztcbiAgICAgIHRleHQgPSBub3JtYWxpemVkO1xuICAgIH1cbiAgICBpZiAoIXRleHQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAodGV4dCBpbiBMT0dfTEVWRUxfUkFOSykge1xuICAgICAgcmV0dXJuIHRleHQgYXMgTG9nTGV2ZWw7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBBY3RpdmUgdGhyZXNob2xkIGZyb20gYHByb2Nlc3MuZW52LkxPR19MRVZFTGAsIGRlZmF1bHQge0BsaW5rIERFRkFVTFRfTEVWRUx9LiAqL1xuZnVuY3Rpb24gYWN0aXZlTGV2ZWwoKTogTG9nTGV2ZWwge1xuICByZXR1cm4gcGFyc2VMb2dMZXZlbChnbG9iYWxQcm9jZXNzPy5lbnY/LkxPR19MRVZFTCkgPz8gREVGQVVMVF9MRVZFTDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGByYXdgIG1lZXRzIHRoZSBjdXJyZW50IGBMT0dfTEVWRUxgIHRocmVzaG9sZC5cbiAqXG4gKiBQYXJzZXMgYHJhd2AgYXMgYSB7QGxpbmsgTG9nTGV2ZWx9OyB3aGVuIHBhcnNpbmcgZmFpbHMsIHJldHVybnNcbiAqIGBkZWZhdWx0UmVzdWx0YCBpZiBzdXBwbGllZCwgb3RoZXJ3aXNlIGBmYWxzZWAuIFVzZWQgZm9yIGNvbnNvbGEgcmVwb3J0ZXJcbiAqIGxpbmVzIHdoZXJlIHVua25vd24gYGxvZ09iai50eXBlYCB2YWx1ZXMgc2hvdWxkIHBhc3MgdGhyb3VnaCB3aGVuXG4gKiBgZGVmYXVsdFJlc3VsdGAgaXMgYHRydWVgLlxuICovXG5mdW5jdGlvbiBzaG91bGRFbWl0KHJhdzogdW5rbm93biwgZGVmYXVsdFJlc3VsdD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgY29uc3QgbGV2ZWwgPSBwYXJzZUxvZ0xldmVsKHJhdyk7XG4gIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFJlc3VsdCA/PyBmYWxzZTtcbiAgcmV0dXJuIExPR19MRVZFTF9SQU5LW2xldmVsXSA+PSBMT0dfTEVWRUxfUkFOS1thY3RpdmVMZXZlbCgpXTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgY2FsbCBhdCBgbGV2ZWxgIHdvdWxkIGJlIGVtaXR0ZWQgYXQgdGhlIGN1cnJlbnRcbiAqIGBwcm9jZXNzLmVudi5MT0dfTEVWRUxgIHRocmVzaG9sZC4gVXNlIGJlZm9yZSBidWlsZGluZyBleHBlbnNpdmUgZGVidWdcbiAqIHBheWxvYWRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBpZiAoaXNMZXZlbEVuYWJsZWQoXCJkZWJ1Z1wiKSkge1xuICogICBsb2cuZGVidWcoXCJtb3VudHM6cmVzb2x2ZXJcIiwgeyBjb250cmlidXRpb246IGF3YWl0IGhlYXZ5U25hcHNob3QoKSB9KTtcbiAqIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGV2ZWxFbmFibGVkKGxldmVsOiBMb2dMZXZlbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc2hvdWxkRW1pdChsZXZlbCk7XG59XG5cbmNvbnN0IExPR0dFUl9OQU1FX1JFR0VYID0gL14oPzpbYS16XVthLXowLTkrLi1dKjpcXC9cXC8pPy4qXFwvKFteLy5dKykoPzpcXC5bXi9dKyk/JC9pO1xuXG4vKipcbiAqIERlcml2ZSB0aGUgdGFnIHN0cmluZyBmcm9tIGEgbG9nZ2VyIG5hbWUsIHBsdWdpbiwgb3IgcGF0aC4gU2xhc2gtIGFuZFxuICogVVJMLXNoYXBlZCBzdHJpbmdzIHVzZSB0aGUgbGFzdCBwYXRoIHNlZ21lbnQgKGV4dGVuc2lvbiBzdHJpcHBlZCk7IHBsYWluXG4gKiBzdHJpbmdzIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQuIEVtcHR5IG9yIG1pc3NpbmcgbmFtZXMgLT4gYHVuZGVmaW5lZGBcbiAqICh1bnRhZ2dlZCBzaW5rKS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdExvZ2dlck5hbWUobG9nZ2VyTmFtZTogTmFtZUxpa2UgfCBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWxvZ2dlck5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgbG9nZ2VyTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNvbnN0IG1hdGNoID0gbG9nZ2VyTmFtZS5tYXRjaChMT0dHRVJfTkFNRV9SRUdFWCk7XG4gICAgcmV0dXJuIG1hdGNoPy5bMV0gPz8gbG9nZ2VyTmFtZTtcbiAgfVxuICByZXR1cm4gZXh0cmFjdExvZ2dlck5hbWUobG9nZ2VyTmFtZS5uYW1lKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHRhZ2dlZCBsb2dnZXIgZm9yIGEgcGx1Z2luIG9yIG1vZHVsZS5cbiAqXG4gKiBUaGUgdGFnIGlzIGBbbmFtZV1gIHdoZW4gYGxvZ2dlck5hbWVgIGlzIGEgbm9uLWVtcHR5IHN0cmluZywgYVxuICoge0BsaW5rIE5hbWVMaWtlfSB3aXRoIGBuYW1lYCwgb3IgYSBmaWxlIC8gVVJMIHBhdGggKHRoZSBiYXNlbmFtZSB3aXRob3V0XG4gKiBleHRlbnNpb24gaXMgdXNlZCkuIENvbnNvbGEgYXBwbGllcyB0aGUgdGFnIHZpYSBgd2l0aFRhZ2AgKHJlbmRlci10aW1lKS5cbiAqIFRoZSBgY29uc29sZWAgZmFsbGJhY2tzIHByZXBlbmQgYExFVkVMIFtuYW1lXWAgb24gTm9kZS9CdW4gaG9zdHMgb3IgYFtuYW1lXWBcbiAqIGFsb25lIGluIGJyb3dzZXJzIHZpYSB7QGxpbmsgY3JlYXRlRm9ybWF0dGVyfS5cbiAqXG4gKiBDYWxscyBiZWxvdyBgcHJvY2Vzcy5lbnYuTE9HX0xFVkVMYCBhcmUgZHJvcHBlZCBieSB7QGxpbmsgc2hvdWxkRW1pdH0gYmVmb3JlXG4gKiB0aGUgc2luayBmb3JtYXRzIG9yIHdyaXRlcyB0aGUgbGluZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbiAqXG4gKiBjb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZ2VuaWUvY2hhdFwiKTtcbiAqIGxvZ2dlci5pbmZvKFwic3RhcnRpbmdcIik7XG4gKiBsb2dnZXIud2FybihcIm1pc3Npbmcgb3B0aW9uYWwgY29uZmlnXCIsIHsgcmVhc29uOiBcIm5vIGVudiB2YXJcIiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ2dlcihsb2dnZXJOYW1lOiBOYW1lTGlrZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IExvZ2dlciB7XG4gIGNvbnN0IG5hbWUgPSBleHRyYWN0TG9nZ2VyTmFtZShsb2dnZXJOYW1lKTtcbiAgcmV0dXJuIGNyZWF0ZUxvZ2dlcihuYW1lKTtcbn1cbiJdfQ==
|
package/lib/src/net.d.ts
CHANGED
package/lib/src/net.js
CHANGED
|
@@ -462,4 +462,4 @@ function hextetsToValue(hextets) {
|
|
|
462
462
|
value = (value << 16n) | BigInt(hextet);
|
|
463
463
|
return value;
|
|
464
464
|
}
|
|
465
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUlILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFDbkMsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUM1RCxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUVuQywrREFBK0Q7QUFDL0QsTUFBTSxPQUFPLEdBQXdDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkUsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQy9CLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXpDLG9FQUFvRTtBQUNwRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztBQUN2QyxvRUFBb0U7QUFDcEUsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUM7QUFvRG5EOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxHQUFHO0lBQzlCLFlBQVksR0FBUTtRQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUEyQixHQUFNLEVBQUUsS0FBd0I7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMzQixPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLEdBQUcsWUFBbUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGVBQWUsQ0FBQyxHQUFHLFlBQW1DO1FBQ3BELE1BQU0sYUFBYSxHQUFhLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixNQUFNLFFBQVEsR0FBRyxhQUFhO2FBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNoRCxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxXQUFXLENBQUMsSUFBWTtRQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksUUFBUSxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztRQUM3QyxJQUFJLFFBQVEsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUE4QkQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFlO0lBQ3hDLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ2xFLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUUsTUFBTSxTQUFTLEdBQUcsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMvRCxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUNsRCxLQUFLLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM3QyxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxHQUFHLEdBQUcsWUFBWSxHQUFHLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxHQUFHLEdBQUcsa0JBQWtCLE1BQU0sS0FBSyxFQUFFLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDM0MsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWMsRUFBRSxJQUFZO0lBQ3BELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxVQUFVO0lBQ2pCLG1FQUFtRTtJQUNuRSxpRUFBaUU7SUFDakUsTUFBTSxNQUFNLEdBQUksVUFBOEQsQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUM3RixFQUFFLE1BQU0sQ0FBQztJQUNYLElBQUksTUFBTSxJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYTtJQUM3QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFBQyxNQUFNLENBQUMsQ0FBQSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQWlCRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBb0QsRUFDcEQsVUFBOEIsRUFBRTtJQUVoQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyRCxNQUFNLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFlLENBQUMsQ0FBQztJQUNqRSxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztJQUN6QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLFNBQVM7UUFDeEMsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU87Z0JBQUUsU0FBUztZQUN2QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzVELElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUFFLFNBQVM7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhO0lBQ25DLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsbUVBQW1FO0FBQ25FLCtCQUErQjtBQUMvQixtRUFBbUU7QUFFbkU7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhO0lBQ25DLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2Qix3RUFBd0U7UUFDeEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksSUFBSSxDQUFDO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixPQUFPLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYTtJQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDOUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxJQUFJLE1BQU0sR0FBRyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE9BQU87UUFDTCxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87UUFDbkIsSUFBSTtRQUNKLE1BQU07UUFDTixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQUU7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUFxQixFQUFFLElBQW1CO0lBQ2pFLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxFQUFxQixFQUNyQixLQUFrQjtJQUVsQixNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLE9BQU87WUFBRSxTQUFTO1FBQ2hELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3pELENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYztJQUMzQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3pDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsSUFBSSxJQUFJLEtBQUssV0FBVztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3RDLG9FQUFvRTtJQUNwRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxPQUFPLFFBQVEsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsTUFBYztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzdCLEtBQUssR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxTQUFTLENBQUMsS0FBYTtJQUM5QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFbkMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDO0lBQ3RDLElBQUksSUFBSSxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksSUFBSSxLQUFLLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMvQix1REFBdUQ7UUFDdkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM5QyxJQUFJLE9BQU8sR0FBRyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0IsT0FBTyxjQUFjLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ25DLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsSUFBWTtJQUNoQyxJQUFJLElBQUksS0FBSyxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFFLENBQUM7UUFDekIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QyxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFBSSxFQUFFLEtBQUssSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLFNBQVMsY0FBYyxDQUFDLE9BQWlCO0lBQ3ZDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2YsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPO1FBQUUsS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBuZXR3b3JraW5nIGhlbHBlcnMgYnVpbHQgYXJvdW5kIHtAbGluayB1cmxCdWlsZGVyfTogYVxuICogdG9sZXJhbnQgYFVSTGAgY29lcmNpb24gKyBjaGFpbmFibGUgYnVpbGRlciB0aGF0IGdyYWNlZnVsbHkgaGFuZGxlc1xuICogcGFydGlhbCBpbnB1dHMgKGJhcmUgaG9zdHMsIHBhdGgtb25seSBzdHJpbmdzLCBgeyB1cmwgfWAgd3JhcHBlcnMpLFxuICogYSBzbWFsbCBJUHY0IC8gSVB2NiBhZGRyZXNzICsgQ0lEUiB0b29sa2l0IChwYXJzaW5nIGFuZCBtZW1iZXJzaGlwXG4gKiBsb29rdXBzKSwgYW5kIGVtYWlsLWFkZHJlc3MgcGFyc2luZyAoe0BsaW5rIHBhcnNlRW1haWxzfSAvXG4gKiB7QGxpbmsgaXNFbWFpbH0pIHRoYXQgbm9ybWFsaXplcyB0aGUgQ1NWIC8gc2luZ2xlLXN0cmluZyAvIGFycmF5XG4gKiBpbnB1dHMgZW1haWwgcmVjaXBpZW50IGFuZCBhbGxvdy1saXN0IGZpZWxkcyBhY2NlcHQgaW50byBhIGNsZWFuXG4gKiBgc3RyaW5nW11gLiBObyBub2RlLW9ubHkgaW1wb3J0cywgc28gdGhpcyBtb2R1bGUgaXMgdGhlIGNhbm9uaWNhbFxuICogaG9tZSBmb3IgYW55dGhpbmcgVVJMLSwgSVAtLCBvciBlbWFpbC1zaGFwZWQgdGhhdCBhbHNvIGhhcyB0byBydW4gaW5cbiAqIGEgVml0ZSAvIFdlYnBhY2sgLyBlc2J1aWxkIGNsaWVudCBidW5kbGUuIE5vZGUtb25seSBuZXR3b3JrIGhlbHBlcnNcbiAqIChlLmcuIEROUyByZXNvbHV0aW9uKSBiZWxvbmcgaW4gYSBub2RlLXRhZ2dlZCBwYWNrYWdlLCBub3QgaGVyZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBOb25GdW5jdGlvbktleXMgfSBmcm9tIFwiLi9vYmplY3RcIjtcblxuY29uc3QgTE9DQUxfSE9TVF9VUkwgPSBuZXcgVVJMKFwiaHR0cDovL2xvY2FsaG9zdFwiKTtcbmNvbnN0IFVSTF9TQ0hFTUVfREVGQVVMVCA9IFwiaHR0cHNcIjtcbmNvbnN0IFVSTF9TQ0hFTUVfUFJFRklYID0gL14oW0EtWmEtel1bQS1aYS16MC05Ky4tXSo6XFwvXFwvKS87XG5jb25zdCBVUkxfUEFUSF9TRUdNRU5UX1RSSU0gPSAvXlxcLyt8XFwvKyQvZztcbmNvbnN0IFVSTF9TQ0hFTUVfU0VQQVJBVE9SID0gXCI6Ly9cIjtcblxuLyoqIFRvdGFsIGJpdCB3aWR0aCBvZiBhbiBhZGRyZXNzIG9mIGVhY2gge0BsaW5rIElwVmVyc2lvbn0uICovXG5jb25zdCBJUF9CSVRTOiBSZWFkb25seTxSZWNvcmQ8SXBWZXJzaW9uLCBudW1iZXI+PiA9IHsgNDogMzIsIDY6IDEyOCB9O1xuY29uc3QgSVBWNF9PQ1RFVCA9IC9eXFxkezEsM30kLztcbmNvbnN0IElQVjZfSEVYVEVUID0gL15bMC05YS1mQS1GXXsxLDR9JC87XG5cbi8qKiBEZWxpbWl0ZXJzIGJldHdlZW4gYWRkcmVzc2VzIGluIGEgZnJlZS10ZXh0IC8gQ1NWIGVtYWlsIGxpc3QuICovXG5jb25zdCBFTUFJTF9MSVNUX1NFUEFSQVRPUiA9IC9bXFxzLDtdKy87XG4vKiogUHJhZ21hdGljIGBsb2NhbEBkb21haW4udGxkYCBzaGFwZSBjaGVjayAobm90IGZ1bGwgUkZDIDUzMjIpLiAqL1xuY29uc3QgRU1BSUxfQUREUkVTUyA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBbnl0aGluZyB7QGxpbmsgdXJsQnVpbGRlcn0gKGFuZCB7QGxpbmsgcGF0aE1hdGNofSkga25vdyBob3cgdG8gY29lcmNlXG4gKiBpbnRvIGEgVVJMOlxuICpcbiAqIC0gQSBzdHJpbmc6IGEgaG9zdCwgYSBmdWxsIFVSTCwgb3IgYSBwYXRoIC8gcXVlcnkgLyBoYXNoIGZyYWdtZW50LlxuICogLSBBIFdIQVRXRyBgVVJMYCBpbnN0YW5jZS5cbiAqIC0gQW55IG9iamVjdCB3aXRoIGEgYHVybGAgZmllbGQgKGUuZy4gYSBmZXRjaCBgUmVxdWVzdGAsIGEgRGF0YWJyaWNrc1xuICogICBgV29ya3NwYWNlQ2xpZW50YCBjb25maWcpLlxuICovXG5leHBvcnQgdHlwZSBVcmxMaWtlID0gc3RyaW5nIHwgVVJMIHwgeyB1cmw6IHN0cmluZyB9O1xuXG4vKiogSVAgcHJvdG9jb2wgZmFtaWx5OiBgNGAgZm9yIElQdjQsIGA2YCBmb3IgSVB2Ni4gKi9cbmV4cG9ydCB0eXBlIElwVmVyc2lvbiA9IDQgfCA2O1xuXG4vKipcbiAqIEEgcGFyc2VkIElQIGFkZHJlc3MuIGB2YWx1ZWAgaXMgdGhlIGFkZHJlc3MgYXMgYW4gdW5zaWduZWQgaW50ZWdlclxuICogKGEgMzItYml0IHJhbmdlIGZvciB2NCwgMTI4LWJpdCBmb3IgdjYpIGhlbGQgaW4gYSBgYmlnaW50YCBzbyBib3RoXG4gKiBmYW1pbGllcyBzaGFyZSBvbmUgY29tcGFyaXNvbiAvIG1hc2tpbmcgcGF0aC4gUHJvZHVjZSBvbmUgd2l0aFxuICoge0BsaW5rIHBhcnNlSXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZElwIHtcbiAgdmVyc2lvbjogSXBWZXJzaW9uO1xuICAvKiogVGhlIGFkZHJlc3MgYXMgYW4gdW5zaWduZWQgaW50ZWdlciAoYGJpZ2ludGAgZm9yIHVuaWZvcm0gdjQvdjYgbWF0aCkuICovXG4gIHZhbHVlOiBiaWdpbnQ7XG59XG5cbi8qKlxuICogQSBwYXJzZWQgQ0lEUiBibG9jayAoYDEwLjAuMC4wLzhgLCBgMjAwMTpkYjg6Oi8zMmApLiBgYmFzZWAgaXMgdGhlXG4gKiBuZXR3b3JrIGFkZHJlc3Mgd2l0aCBhbGwgaG9zdCBiaXRzIGNsZWFyZWQsIHNvIG1lbWJlcnNoaXAgaXMgYVxuICogc2luZ2xlIG1hc2tlZCBjb21wYXJlIChzZWUge0BsaW5rIGlwSW5DaWRyfSkuIFByb2R1Y2Ugb25lIHdpdGhcbiAqIHtAbGluayBwYXJzZUNpZHJ9LiBDYXJyaWVzIHRoZSBub3JtYWxpemVkIGBjaWRyYCBzdHJpbmcgZm9yIGxvZ2dpbmdcbiAqIGFuZCB0byBrZXkgYmFjayB0byBjYWxsZXItc2lkZSBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaWRyIHtcbiAgdmVyc2lvbjogSXBWZXJzaW9uO1xuICAvKiogTmV0d29yayBhZGRyZXNzIChob3N0IGJpdHMgemVyb2VkKSBhcyBhbiB1bnNpZ25lZCBgYmlnaW50YC4gKi9cbiAgYmFzZTogYmlnaW50O1xuICAvKiogUHJlZml4IGxlbmd0aCBpbiBiaXRzICh0aGUgbnVtYmVyIGFmdGVyIHRoZSBgL2ApLiAqL1xuICBwcmVmaXg6IG51bWJlcjtcbiAgLyoqIE5vcm1hbGl6ZWQgYDxhZGRyZXNzPi88cHJlZml4PmAgc3RyaW5nLiAqL1xuICBjaWRyOiBzdHJpbmc7XG59XG5cbi8qKiBTZXR0YWJsZSwgbm9uLW1ldGhvZCBgVVJMYCBwcm9wZXJ0aWVzIC0gdGhlIGtleXMge0BsaW5rIFVybEJ1aWxkZXIud2l0aH0gYWNjZXB0cy4gKi9cbnR5cGUgVXJsUHJvcGVydHlLZXkgPSBOb25GdW5jdGlvbktleXM8VXJsQnVpbGRlckltcGw+O1xuXG4vKipcbiAqIEEgYFVSTGAgc3ViY2xhc3Mgd2l0aCBjaGFpbmFibGUsIGNvcHktb24td3JpdGUgaGVscGVycy4gRXZlcnkgbXV0YXRpbmdcbiAqIG1ldGhvZCByZXR1cm5zIGEgZnJlc2ggYnVpbGRlciByYXRoZXIgdGhhbiBlZGl0aW5nIGluIHBsYWNlLCBzbyBhIGJhc2VcbiAqIGJ1aWxkZXIgY2FuIGJlIHNhZmVseSByZXVzZWQuIENvbnN0cnVjdCBvbmUgdmlhIHtAbGluayB1cmxCdWlsZGVyfS5cbiAqL1xuY2xhc3MgVXJsQnVpbGRlckltcGwgZXh0ZW5kcyBVUkwge1xuICBjb25zdHJ1Y3Rvcih1cmw6IFVSTCkge1xuICAgIHN1cGVyKHVybCk7XG4gIH1cblxuICAvKiogVGhlIHNjaGVtZSB3aXRob3V0IHRoZSB0cmFpbGluZyBjb2xvbiAoYGh0dHBzYCwgbm90IGBodHRwczpgKS4gKi9cbiAgZ2V0IHNjaGVtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIHNldCBzY2hlbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvdG9jb2wgPSB2YWx1ZSArIFwiOlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgd2l0aCBhIHNpbmdsZSBgVVJMYCBwcm9wZXJ0eSAoYHBhdGhuYW1lYCwgYHNlYXJjaGAsXG4gICAqIGBob3N0bmFtZWAsIGBzY2hlbWVgLCAuLi4pIHNldCB0byBgdmFsdWVgLCBsZWF2aW5nIHRoaXMgYnVpbGRlclxuICAgKiB1bnRvdWNoZWQuXG4gICAqL1xuICB3aXRoPEsgZXh0ZW5kcyBVcmxQcm9wZXJ0eUtleT4oa2V5OiBLLCB2YWx1ZTogVXJsQnVpbGRlckltcGxbS10pOiBVcmxCdWlsZGVyIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFVybEJ1aWxkZXJJbXBsKHRoaXMpO1xuICAgIChuZXh0IGFzIGFueSlba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBuZXcgVXJsQnVpbGRlckltcGwobmV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSB3aXRoIGBwYXRoU2VnbWVudHNgIGFwcGVuZGVkIHRvIHRoZSBjdXJyZW50IHBhdGhuYW1lLlxuICAgKiBTZWdtZW50cyBtYXkgYmUgc3RyaW5ncyBvciBzdHJpbmcgYXJyYXlzOyBlYWNoIGlzIHRyaW1tZWQgb2ZcbiAgICogYm91bmRhcnkgc2xhc2hlcyBhbmQgYmxhbmtzIGFyZSBkcm9wcGVkIGJlZm9yZSBqb2luaW5nIHdpdGggYC9gLlxuICAgKi9cbiAgd2l0aFBhdGhBcHBlbmQoLi4ucGF0aFNlZ21lbnRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBVcmxCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy53aXRoUGF0aFJlcGxhY2UodGhpcy5wYXRobmFtZSwgLi4ucGF0aFNlZ21lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IHdob3NlIHBhdGhuYW1lIGlzIGBwYXRoU2VnbWVudHNgIGpvaW5lZCB3aXRoIGAvYCxcbiAgICogcmVwbGFjaW5nIGFueSBleGlzdGluZyBwYXRoLiBTZWdtZW50cyBtYXkgYmUgc3RyaW5ncyBvciBzdHJpbmdcbiAgICogYXJyYXlzOyBlYWNoIGlzIHRyaW1tZWQgb2YgYm91bmRhcnkgc2xhc2hlcyBhbmQgYmxhbmtzIGFyZSBkcm9wcGVkLlxuICAgKi9cbiAgd2l0aFBhdGhSZXBsYWNlKC4uLnBhdGhTZWdtZW50czogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogVXJsQnVpbGRlciB7XG4gICAgY29uc3QgcGF0aG5hbWVQYXJ0czogc3RyaW5nW10gPSBbLi4ucGF0aFNlZ21lbnRzXS5mbGF0TWFwKChwKSA9PiAoQXJyYXkuaXNBcnJheShwKSA/IHAgOiBbcF0pKTtcbiAgICBjb25zdCBwYXRobmFtZSA9IHBhdGhuYW1lUGFydHNcbiAgICAgIC5tYXAoKHApID0+IHAucmVwbGFjZShVUkxfUEFUSF9TRUdNRU5UX1RSSU0sIFwiXCIpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIvXCIpO1xuICAgIHJldHVybiB0aGlzLndpdGgoXCJwYXRobmFtZVwiLCBcIi9cIiArIHBhdGhuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBVUkwncyBwYXRobmFtZSBpcyBgcGF0aGAgb3IgbGl2ZXMgYmVuZWF0aCBpdCxcbiAgICogbWF0Y2hpbmcgb24gc2VnbWVudCBib3VuZGFyaWVzIHNvIGAvYXBpYCBtYXRjaGVzIGAvYXBpYCBhbmRcbiAgICogYC9hcGkvY29vbGAgYnV0IG5vdCBgL2FwaWNvb2xgLiBBIG1pc3NpbmcgbGVhZGluZyBzbGFzaCBvbiBgcGF0aGBcbiAgICogaXMgdG9sZXJhdGVkOyBxdWVyeSBhbmQgaGFzaCBhcmUgaWdub3JlZCAodGhleSBhcmVuJ3QgcGFydCBvZlxuICAgKiBgcGF0aG5hbWVgKS4gTWF0Y2hpbmcgaXMgZXhhY3Qgb3RoZXJ3aXNlIC0gdHJhaWxpbmcgc2xhc2hlcyBhcmVcbiAgICogbm90IG5vcm1hbGl6ZWQgYW5kIGAvYCBtYXRjaGVzIG9ubHkgdGhlIHJvb3QuXG4gICAqL1xuICBwYXRoTWF0Y2hlcyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWU7XG4gICAgaWYgKHBhdGhuYW1lID09IHBhdGgpIHJldHVybiB0cnVlO1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkgcGF0aCA9IFwiL1wiICsgcGF0aDtcbiAgICBpZiAocGF0aG5hbWUgPT0gcGF0aCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHBhdGhuYW1lLnN0YXJ0c1dpdGgocGF0aCArIFwiL1wiKTtcbiAgfVxufVxuXG4vKiogUHVibGljIHR5cGUgZm9yIHRoZSB7QGxpbmsgdXJsQnVpbGRlcn0gcmV0dXJuIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgVXJsQnVpbGRlciA9IFVybEJ1aWxkZXJJbXBsO1xuXG4vKiogV2l0aCBubyBhcmd1bWVudCwgcmVzb2x2ZXMgdG8gdGhlIGJhc2Ugb3JpZ2luIChuZXZlciBgbnVsbGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybEJ1aWxkZXIoKTogVXJsQnVpbGRlcjtcblxuLyoqXG4gKiBDb2VyY2UgYSB7QGxpbmsgVXJsTGlrZX0gaW50byBhIGNoYWluYWJsZSB7QGxpbmsgVXJsQnVpbGRlcn0sIG9yIGBudWxsYFxuICogd2hlbiB0aGUgaW5wdXQgY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEgVVJMLiBOZXZlciB0aHJvd3MuXG4gKlxuICogLSBBIGBVUkxgIGluc3RhbmNlIG9yIGB7IHVybCB9YCB3cmFwcGVyIGlzIGFkb3B0ZWQgYXMtaXMuXG4gKiAtIEEgYmFyZSBob3N0bmFtZSAoYFwiZXhhbXBsZS5jb21cImApIGlzIHVwZ3JhZGVkIHRvIGBodHRwczovL2A7IGFuXG4gKiAgIGV4cGxpY2l0IHNjaGVtZSBpcyBwcmVzZXJ2ZWQuXG4gKiAtIEEgcGF0aCAvIHF1ZXJ5IC8gaGFzaCBmcmFnbWVudCAoYFwiL2FwaVwiYCwgYFwiP3E9MVwiYCwgYFwiI3hcImApIGlzXG4gKiAgIHJlc29sdmVkIGFnYWluc3Qge0BsaW5rIGRlZmF1bHRVcmx9ICh0aGUgYnJvd3NlciBvcmlnaW4sIGVsc2VcbiAqICAgYGh0dHA6Ly9sb2NhbGhvc3RgKS5cbiAqIC0gQW4gZW1wdHkgLyBibGFuayBzdHJpbmcgb3Igb21pdHRlZCBpbnB1dCByZXNvbHZlcyB0byB0aGUgYmFzZVxuICogICBvcmlnaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIHVybEJ1aWxkZXIoXCJleGFtcGxlLmNvbVwiKTsgICAgICAgICAgLy8gaHR0cHM6Ly9leGFtcGxlLmNvbS9cbiAqIHVybEJ1aWxkZXIoXCJodHRwOi8veC9wYXRoXCIpOyAgICAgICAgLy8gaHR0cDovL3gvcGF0aFxuICogdXJsQnVpbGRlcihcIi9hcGkvdjJcIik7ICAgICAgICAgICAgICAvLyBodHRwOi8vbG9jYWxob3N0L2FwaS92MlxuICogdXJsQnVpbGRlcih7IHVybDogXCJodHRwOi8veVwiIH0pOyAgICAvLyBodHRwOi8veS9cbiAqIHVybEJ1aWxkZXIoKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3QvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmxCdWlsZGVyKGlucHV0PzogVXJsTGlrZSk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxCdWlsZGVyKGlucHV0PzogVXJsTGlrZSk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICByZXR1cm4gbmV3IFVybEJ1aWxkZXJJbXBsKGlucHV0KTtcbiAgfVxuICBpZiAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIFwidXJsXCIgaW4gaW5wdXQpIHtcbiAgICBpbnB1dCA9IGlucHV0LnVybDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG4gIH1cbiAgaWYgKGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXCIvXCIpIHx8IGlucHV0LnN0YXJ0c1dpdGgoXCI/XCIpIHx8IGlucHV0LnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBjb25zdCBqb2luZWRVcmwgPSBkZWZhdWx0VXJsKCkudG9TdHJpbmcoKS5zbGljZSgwLCAtMSkgKyBpbnB1dDtcbiAgICAgIHJldHVybiB1cmxCdWlsZGVyKGpvaW5lZFVybCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFVSTF9TQ0hFTUVfU0VQQVJBVE9SKSkge1xuICAgICAgaW5wdXQgPSBgJHtVUkxfU0NIRU1FX0RFRkFVTFR9JHtpbnB1dH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKFVSTF9TQ0hFTUVfUFJFRklYKTtcbiAgICAgIGNvbnN0IHNjaGVtZVByZWZpeCA9IG1hdGNoPy5bMV07XG4gICAgICBpZiAoc2NoZW1lUHJlZml4KSB7XG4gICAgICAgIGNvbnN0IHJlc3QgPSBpbnB1dC5zbGljZShzY2hlbWVQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgaW5wdXQgPSBgJHtzY2hlbWVQcmVmaXh9JHtyZXN0IHx8IGRlZmF1bHRVcmwoKS5ob3N0bmFtZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQgPSBgJHtVUkxfU0NIRU1FX0RFRkFVTFR9Oi8vJHtpbnB1dH1gO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXJsQnVpbGRlcihkZWZhdWx0VXJsKCkpO1xuICB9XG4gIGNvbnN0IHVybCA9IHBhcnNlVXJsKGlucHV0KTtcbiAgcmV0dXJuIHVybCA/IHVybEJ1aWxkZXIodXJsKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIG92ZXIge0BsaW5rIFVybEJ1aWxkZXIucGF0aE1hdGNoZXN9OiBjb2VyY2VcbiAqIGBpbnB1dGAgdmlhIHtAbGluayB1cmxCdWlsZGVyfSBhbmQgdGVzdCBpdHMgcGF0aG5hbWUgYWdhaW5zdCBgcGF0aGAuXG4gKiBSZXR1cm5zIGBmYWxzZWAgZm9yIGlucHV0IHRoYXQgY2FuJ3QgYmUgcGFyc2VkIGludG8gYSBVUkwuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhdGhNYXRjaChcIi9hcGkvY29vbD9xPTFcIiwgXCIvYXBpXCIpOyAgICAgIC8vIHRydWVcbiAqIHBhdGhNYXRjaChcIi9hcGljb29sXCIsIFwiL2FwaVwiKTsgICAgICAgICAgIC8vIGZhbHNlXG4gKiBwYXRoTWF0Y2goXCJodHRwczovL2hvc3QvYXBpXCIsIFwiL2FwaVwiKTsgICAvLyB0cnVlXG4gKiBwYXRoTWF0Y2gocmVxdWVzdCwgXCIvYXBpL3YyXCIpOyAgICAgICAgICAgLy8gZmV0Y2ggUmVxdWVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aE1hdGNoKGlucHV0OiBVcmxMaWtlLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdXJsYiA9IHVybEJ1aWxkZXIoaW5wdXQpO1xuICBpZiAoIXVybGIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHVybGIucGF0aE1hdGNoZXMocGF0aCk7XG59XG5cbi8qKlxuICogQmFzZSBvcmlnaW4gZm9yIHJlc29sdmluZyBwYXRoLW9ubHkgaW5wdXRzLiBJbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGVcbiAqIGN1cnJlbnQgcGFnZSdzIG9yaWdpbiAoYHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5gKSwgc28gYHVybEJ1aWxkZXIoXCIvYXBpXCIpYFxuICogcmVmbGVjdHMgd2hlcmUgdGhlIGFwcCBpcyBhY3R1YWxseSBzZXJ2ZWQgZnJvbTsgb24gdGhlIHNlcnZlciAvIGluXG4gKiB0ZXN0cyAobm8gYHdpbmRvd2AsIG9yIGFuIG9wYXF1ZSBgXCJudWxsXCJgIG9yaWdpbikgaXQgZmFsbHMgYmFjayB0b1xuICogYGh0dHA6Ly9sb2NhbGhvc3RgLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0VXJsKCk6IFVSTCB7XG4gIC8vIFJlYWNoIGB3aW5kb3dgIHZpYSBgZ2xvYmFsVGhpc2Agc28gdGhpcyBjb21waWxlcyB3aXRob3V0IHRoZSBET01cbiAgLy8gbGliIChpdCdzIGB1bmRlZmluZWRgIG9uIHRoZSBzZXJ2ZXIgLyBpbiB3b3JrZXJzIHdpdGhvdXQgb25lKS5cbiAgY29uc3Qgb3JpZ2luID0gKGdsb2JhbFRoaXMgYXMgeyB3aW5kb3c/OiB7IGxvY2F0aW9uPzogeyBvcmlnaW4/OiBzdHJpbmcgfSB9IH0pLndpbmRvdz8ubG9jYXRpb25cbiAgICA/Lm9yaWdpbjtcbiAgaWYgKG9yaWdpbiAmJiBvcmlnaW4gIT09IFwibnVsbFwiKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gcGFyc2VVcmwob3JpZ2luKTtcbiAgICBpZiAob3JpZ2luVXJsKSB7XG4gICAgICByZXR1cm4gb3JpZ2luVXJsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFVSTChMT0NBTF9IT1NUX1VSTCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKGlucHV0OiBzdHJpbmcpOiBVUkwgfCBudWxsIHtcbiAgaWYgKGlucHV0ICYmIGlucHV0LmluY2x1ZGVzKFVSTF9TQ0hFTUVfU0VQQVJBVE9SKSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChpbnB1dCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEVtYWlsIGFkZHJlc3Nlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgcGFyc2VFbWFpbHN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUVtYWlsc09wdGlvbnMge1xuICAvKiogTG93ZXItY2FzZSBldmVyeSBhZGRyZXNzICh1c2VmdWwgZm9yIGFsbG93LWxpc3RzIC8gbWF0Y2hpbmcpLiBPZmYgYnkgZGVmYXVsdC4gKi9cbiAgbG93ZXJjYXNlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERyb3AgbGF0ZXIgY2FzZS1pbnNlbnNpdGl2ZSBkdXBsaWNhdGVzLCBrZWVwaW5nIGZpcnN0LXNlZW4gY2FzaW5nLlxuICAgKiBPbiBieSBkZWZhdWx0IC0gYSByZWNpcGllbnQgb3IgcGF0dGVybiBsaXN0IHJhcmVseSB3YW50cyByZXBlYXRzLlxuICAgKi9cbiAgZGVkdXBlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHNoYXBlcyBhbiBlbWFpbCBhZGRyZXNzIGZpZWxkIGFjY2VwdHMgLSBhIHNpbmdsZSBzdHJpbmcsXG4gKiBhIGNvbW1hIC8gc2VtaWNvbG9uIC8gd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCwgYW4gYXJyYXkgb2YgZWl0aGVyLFxuICogb3Igbm90aGluZyAtIGludG8gYSBjbGVhbiBgc3RyaW5nW11gLiBFYWNoIGVudHJ5IGlzIHNwbGl0IG9uIHRoZSBsaXN0XG4gKiBzZXBhcmF0b3JzLCB0cmltbWVkLCBhbmQgZGUtZW1wdGllZDsgYmxhbmtzIGFuZCBub24tc3RyaW5nIGFycmF5XG4gKiBtZW1iZXJzIGFyZSBkcm9wcGVkLiBCeSBkZWZhdWx0IGR1cGxpY2F0ZXMgYXJlIHJlbW92ZWRcbiAqIGNhc2UtaW5zZW5zaXRpdmVseSAoZmlyc3Qtc2VlbiBjYXNpbmcgd2lucykgYW5kIGNhc2luZyBpcyBvdGhlcndpc2VcbiAqIHByZXNlcnZlZDsgcGFzcyBgbG93ZXJjYXNlYCB0byBmb2xkIGV2ZXJ5dGhpbmcgdG8gbG93ZXIgY2FzZSAoZS5nLiBmb3JcbiAqIGFuIGFsbG93LWxpc3QpLiBUaGlzIGlzIHRoZSBvbmUgcGxhY2UgcmVjaXBpZW50IGxpc3RzLCBDQy9CQ0MgaW5wdXRzLFxuICogYW5kIHNlbmRlciBhbGxvdy1saXN0cyBhY3Jvc3MgdGhlIHJlcG8gYWdyZWUgb24gaG93IGZyZWUtdGV4dCBlbWFpbFxuICogaW5wdXQgaXMgcmVhZC4gTmV2ZXIgdGhyb3dzOyBkb2VzIG5vdCB2YWxpZGF0ZSAtIHBhaXIgd2l0aFxuICoge0BsaW5rIGlzRW1haWx9IHdoZW4geW91IG5lZWQgdG8gcmVqZWN0IG1hbGZvcm1lZCBhZGRyZXNzZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlRW1haWxzKFwiYUB4LmNvbSwgYkB5LmNvbTsgYUB4LmNvbVwiKTsgLy8gW1wiYUB4LmNvbVwiLCBcImJAeS5jb21cIl1cbiAqIHBhcnNlRW1haWxzKFtcIkFAeC5jb21cIiwgXCIgYkB5LmNvbSBcIl0pOyAgICAgIC8vIFtcIkFAeC5jb21cIiwgXCJiQHkuY29tXCJdXG4gKiBwYXJzZUVtYWlscyhcIipAY29ycC5jb21cIiwgeyBsb3dlcmNhc2U6IHRydWUgfSk7IC8vIFtcIipAY29ycC5jb21cIl1cbiAqIHBhcnNlRW1haWxzKHVuZGVmaW5lZCk7ICAgICAgICAgICAgICAgICAgICAgLy8gW11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW1haWxzKFxuICBpbnB1dDogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBQYXJzZUVtYWlsc09wdGlvbnMgPSB7fSxcbik6IHN0cmluZ1tdIHtcbiAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgY29uc3QgeyBsb3dlcmNhc2UgPSBmYWxzZSwgZGVkdXBlID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBbaW5wdXQgYXMgc3RyaW5nXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICh0eXBlb2YgZW50cnkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZW50cnkuc3BsaXQoRU1BSUxfTElTVF9TRVBBUkFUT1IpKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gdG9rZW4udHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBsb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkO1xuICAgICAgaWYgKGRlZHVwZSkge1xuICAgICAgICBjb25zdCBrZXkgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICAgIG91dC5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFByYWdtYXRpYyBgbG9jYWxAZG9tYWluLnRsZGAgc2hhcGUgY2hlY2s6IG5vbi1lbXB0eSBsb2NhbCBhbmQgZG9tYWluXG4gKiBwYXJ0cyBhcm91bmQgYSBzaW5nbGUgYEBgLCB3aXRoIGEgZG90dGVkIGRvbWFpbiBhbmQgbm8gd2hpdGVzcGFjZS5cbiAqIERlbGliZXJhdGVseSBsb29zZSAobm90IGZ1bGwgUkZDIDUzMjIpIC0gZW5vdWdoIHRvIGNhdGNoIG9idmlvdXMgdHlwb3NcbiAqIGFuZCBnaXZlIENMSSAvIGZvcm0gZmVlZGJhY2ssIG5vdCB0byBnYXRlIGRlbGl2ZXJ5LiBUcmltcyBmaXJzdC4gVGhpc1xuICogaXMgYSBwdXJlbHkgc3ludGFjdGljIHRlc3QsIHNvIGEgd2lsZGNhcmQgYWxsb3ctbGlzdCBwYXR0ZXJuIGxpa2VcbiAqIGAqQGV4YW1wbGUuY29tYCBwYXNzZXM7IGRpc3Rpbmd1aXNoaW5nIGEgcGF0dGVybiBmcm9tIGEgcmVhbCBhZGRyZXNzXG4gKiBpcyB0aGUgc2VuZGVyIHBvbGljeSdzIGpvYiwgbm90IHRoaXMgdmFsaWRhdG9yJ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGlzRW1haWwoXCJhbGljZUBleGFtcGxlLmNvbVwiKTsgLy8gdHJ1ZVxuICogaXNFbWFpbChcIm5vcGVcIik7ICAgICAgICAgICAgICAvLyBmYWxzZSAobm8gQClcbiAqIGlzRW1haWwoXCJub0Bkb21haW5cIik7ICAgICAgICAgLy8gZmFsc2UgKG5vIGRvdHRlZCBkb21haW4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEVNQUlMX0FERFJFU1MudGVzdCh2YWx1ZS50cmltKCkpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIElQIGFkZHJlc3NlcyBhbmQgQ0lEUiBibG9ja3Ncbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBhcnNlIGFuIElQdjQgKGBcIjEuMi4zLjRcImApIG9yIElQdjYgKGBcIjIwMDE6ZGI4OjoxXCJgLFxuICogYFwiOjpmZmZmOjEuMi4zLjRcImAsIGBcIjo6MVwiYCkgYWRkcmVzcyBpbnRvIGEge0BsaW5rIFBhcnNlZElwfSwgb3JcbiAqIGBudWxsYCB3aGVuIHRoZSBpbnB1dCBpc24ndCBhIHZhbGlkIGxpdGVyYWwuIE5ldmVyIHRocm93cy4gU3Vycm91bmRpbmdcbiAqIHdoaXRlc3BhY2UsIGBbLi4uXWAgYnJhY2tldHMgYXJvdW5kIGFuIElQdjYgbGl0ZXJhbCwgYW5kIGFuIElQdjYgem9uZVxuICogaWQgKGBmZTgwOjoxJWV0aDBgKSBhcmUgYWxsIHRvbGVyYXRlZC4gVGhlIGB2YWx1ZWAgaXMgcmV0dXJuZWQgYXMgYVxuICogYGJpZ2ludGAgc28gdjQgYW5kIHY2IHNoYXJlIG9uZSBjb21wYXJpc29uIHBhdGguXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlSXAoXCIxMC4wLjAuMVwiKTsgICAgICAgIC8vIHsgdmVyc2lvbjogNCwgdmFsdWU6IDE2Nzc3MjE2MW4gfVxuICogcGFyc2VJcChcIjIwMDE6ZGI4OjoxXCIpOyAgICAgLy8geyB2ZXJzaW9uOiA2LCB2YWx1ZTogLi4uIH1cbiAqIHBhcnNlSXAoXCJub3QtYW4taXBcIik7ICAgICAgIC8vIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXAoaW5wdXQ6IHN0cmluZyk6IFBhcnNlZElwIHwgbnVsbCB7XG4gIGxldCB0ZXh0ID0gaW5wdXQudHJpbSgpO1xuICBpZiAodGV4dC5zdGFydHNXaXRoKFwiW1wiKSAmJiB0ZXh0LmVuZHNXaXRoKFwiXVwiKSkgdGV4dCA9IHRleHQuc2xpY2UoMSwgLTEpO1xuICBpZiAodGV4dC5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAvLyBEcm9wIGFuIElQdjYgem9uZSBpZCAoYGZlODA6OjElZXRoMGApIC0gaXQgaXNuJ3QgcGFydCBvZiB0aGUgYWRkcmVzcy5cbiAgICBjb25zdCB6b25lID0gdGV4dC5pbmRleE9mKFwiJVwiKTtcbiAgICBpZiAoem9uZSA+PSAwKSB0ZXh0ID0gdGV4dC5zbGljZSgwLCB6b25lKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSXB2Nih0ZXh0KTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBudWxsIDogeyB2ZXJzaW9uOiA2LCB2YWx1ZSB9O1xuICB9XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VJcHY0KHRleHQpO1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBudWxsIDogeyB2ZXJzaW9uOiA0LCB2YWx1ZSB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGEgQ0lEUiBibG9jayAoYFwiMTAuMC4wLjAvOFwiYCwgYFwiMjAwMTpkYjg6Oi8zMlwiYCkgaW50byBhXG4gKiB7QGxpbmsgQ2lkcn0gd2l0aCBob3N0IGJpdHMgY2xlYXJlZCBmcm9tIGBiYXNlYCwgb3IgYG51bGxgIHdoZW4gdGhlXG4gKiBpbnB1dCBpc24ndCBhIHZhbGlkIGJsb2NrIChiYWQgYWRkcmVzcywgbWlzc2luZyAvIG91dC1vZi1yYW5nZVxuICogcHJlZml4KS4gTmV2ZXIgdGhyb3dzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwYXJzZUNpZHIoXCIxMC4wLjAuMC84XCIpPy5iYXNlOyAgIC8vIDE2Nzc3MjE2MG4gKDEwLjAuMC4wKVxuICogcGFyc2VDaWRyKFwiMTAuMS4yLjMvOFwiKT8uYmFzZTsgICAvLyAxNjc3NzIxNjBuIChob3N0IGJpdHMgZHJvcHBlZClcbiAqIHBhcnNlQ2lkcihcIjEwLjAuMC4wLzQwXCIpOyAgICAgICAgLy8gbnVsbCAocHJlZml4ID4gMzIgZm9yIHY0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDaWRyKGlucHV0OiBzdHJpbmcpOiBDaWRyIHwgbnVsbCB7XG4gIGNvbnN0IHRleHQgPSBpbnB1dC50cmltKCk7XG4gIGNvbnN0IHNsYXNoID0gdGV4dC5sYXN0SW5kZXhPZihcIi9cIik7XG4gIGlmIChzbGFzaCA8IDApIHJldHVybiBudWxsO1xuICBjb25zdCBwcmVmaXhUZXh0ID0gdGV4dC5zbGljZShzbGFzaCArIDEpO1xuICBpZiAoIUlQVjRfT0NURVQudGVzdChwcmVmaXhUZXh0KSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGlwID0gcGFyc2VJcCh0ZXh0LnNsaWNlKDAsIHNsYXNoKSk7XG4gIGlmICghaXApIHJldHVybiBudWxsO1xuICBjb25zdCBwcmVmaXggPSBOdW1iZXIocHJlZml4VGV4dCk7XG4gIGNvbnN0IGJpdHMgPSBJUF9CSVRTW2lwLnZlcnNpb25dO1xuICBpZiAocHJlZml4ID4gYml0cykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGJhc2UgPSBpcC52YWx1ZSAmIG5ldHdvcmtNYXNrKGJpdHMsIHByZWZpeCk7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogaXAudmVyc2lvbixcbiAgICBiYXNlLFxuICAgIHByZWZpeCxcbiAgICBjaWRyOiBgJHt0ZXh0LnNsaWNlKDAsIHNsYXNoKX0vJHtwcmVmaXh9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYGlwYCBmYWxscyBpbnNpZGUgYGNpZHJgLiBCb3RoIGFyZ3VtZW50cyBhY2NlcHQgZWl0aGVyXG4gKiBhIHN0cmluZyAocGFyc2VkIG9uIHRoZSBmbHkgdmlhIHtAbGluayBwYXJzZUlwfSAvIHtAbGluayBwYXJzZUNpZHJ9KVxuICogb3IgYW4gYWxyZWFkeS1wYXJzZWQgdmFsdWUgLSBwYXNzIHBhcnNlZCB2YWx1ZXMgaW4gaG90IGxvb3BzIHRvIHNraXBcbiAqIHJlLXBhcnNpbmcuIFJldHVybnMgYGZhbHNlYCBmb3IgdW5wYXJzZWFibGUgaW5wdXQgb3IgYSB2ZXJzaW9uXG4gKiBtaXNtYXRjaCAoYW4gSVB2NCBhZGRyZXNzIGlzIG5ldmVyIGluc2lkZSBhbiBJUHY2IGJsb2NrKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaXBJbkNpZHIoXCIxMC4xLjIuM1wiLCBcIjEwLjAuMC4wLzhcIik7ICAgLy8gdHJ1ZVxuICogaXBJbkNpZHIoXCIxMS4wLjAuMVwiLCBcIjEwLjAuMC4wLzhcIik7ICAgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlwSW5DaWRyKGlwOiBzdHJpbmcgfCBQYXJzZWRJcCwgY2lkcjogc3RyaW5nIHwgQ2lkcik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZWRJcCA9IHR5cGVvZiBpcCA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSXAoaXApIDogaXA7XG4gIGNvbnN0IHBhcnNlZENpZHIgPSB0eXBlb2YgY2lkciA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlQ2lkcihjaWRyKSA6IGNpZHI7XG4gIGlmICghcGFyc2VkSXAgfHwgIXBhcnNlZENpZHIgfHwgcGFyc2VkSXAudmVyc2lvbiAhPT0gcGFyc2VkQ2lkci52ZXJzaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1hc2sgPSBuZXR3b3JrTWFzayhJUF9CSVRTW3BhcnNlZENpZHIudmVyc2lvbl0sIHBhcnNlZENpZHIucHJlZml4KTtcbiAgcmV0dXJuIChwYXJzZWRJcC52YWx1ZSAmIG1hc2spID09PSBwYXJzZWRDaWRyLmJhc2U7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBDSURSIGluIGBjaWRyc2AgdGhhdCBjb250YWlucyBgaXBgLCBvciBgbnVsbGAgd2hlblxuICogbm9uZSBtYXRjaC4gYGNpZHJzYCBob2xkcyBwcmUtcGFyc2VkIHtAbGluayBDaWRyfSB2YWx1ZXMgKG9yIGFueVxuICogb2JqZWN0IGV4dGVuZGluZyBpdCksIHNvIGNhbGxlcnMgY2FuIGNhcnJ5IHNpZGUgbWV0YWRhdGEgb24gZWFjaFxuICogZW50cnkgKGUuZy4gYSByZWdpb24gdGFnKSBhbmQgcmVhZCBpdCBzdHJhaWdodCBvZmYgdGhlIHJldHVybmVkXG4gKiBtYXRjaC4gTGluZWFyIHNjYW47IHBhcnNlIHRoZSBhZGRyZXNzIG9uY2UgYnkgcGFzc2luZyBhXG4gKiB7QGxpbmsgUGFyc2VkSXB9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZXMgPSBbXCIxMC4wLjAuMC84XCIsIFwiMTkyLjE2OC4wLjAvMTZcIl1cbiAqICAgLm1hcChwYXJzZUNpZHIpXG4gKiAgIC5maWx0ZXIoKGMpOiBjIGlzIENpZHIgPT4gYyAhPT0gbnVsbCk7XG4gKiBmaW5kQ29udGFpbmluZ0NpZHIoXCIxMC4xLjIuM1wiLCByYW5nZXMpPy5jaWRyOyAvLyBcIjEwLjAuMC4wLzhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbnRhaW5pbmdDaWRyPFQgZXh0ZW5kcyBDaWRyPihcbiAgaXA6IHN0cmluZyB8IFBhcnNlZElwLFxuICBjaWRyczogSXRlcmFibGU8VD4sXG4pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnNlZElwID0gdHlwZW9mIGlwID09PSBcInN0cmluZ1wiID8gcGFyc2VJcChpcCkgOiBpcDtcbiAgaWYgKCFwYXJzZWRJcCkgcmV0dXJuIG51bGw7XG4gIGZvciAoY29uc3QgY2lkciBvZiBjaWRycykge1xuICAgIGlmIChjaWRyLnZlcnNpb24gIT09IHBhcnNlZElwLnZlcnNpb24pIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1hc2sgPSBuZXR3b3JrTWFzayhJUF9CSVRTW2NpZHIudmVyc2lvbl0sIGNpZHIucHJlZml4KTtcbiAgICBpZiAoKHBhcnNlZElwLnZhbHVlICYgbWFzaykgPT09IGNpZHIuYmFzZSkgcmV0dXJuIGNpZHI7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV2hldGhlciBgaW5wdXRgJ3MgaG9zdCBpcyBhIGxvb3BiYWNrIGFkZHJlc3MgLSBgbG9jYWxob3N0YCwgYW4gSVB2NFxuICogYDEyNy4wLjAuMC84YCBhZGRyZXNzLCBvciBJUHY2IGA6OjFgIC0gaS5lLiBhIHNlcnZpY2UgcnVubmluZyBvbiB0aGlzXG4gKiBtYWNoaW5lIChlLmcuIGEgbG9jYWwgcmVnaXN0cnkpLiBBY2NlcHRzIGFueXRoaW5nIHtAbGluayB1cmxCdWlsZGVyfVxuICogY29lcmNlcyAoYSBVUkwgc3RyaW5nLCBgVVJMYCwgb3IgYHsgdXJsIH1gKTsgcmV0dXJucyBgZmFsc2VgIHdoZW4gdGhlXG4gKiBpbnB1dCBoYXMgbm8gcmVzb2x2YWJsZSBob3N0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHA6Ly9sb2NhbGhvc3Q6NDg3M1wiKTsgLy8gdHJ1ZVxuICogaXNMb29wYmFja0hvc3QoXCJodHRwOi8vMTI3LjAuMC4xXCIpOyAgICAgICAvLyB0cnVlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCIpOyAvLyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMb29wYmFja0hvc3QoaW5wdXQ6IFVybExpa2UpOiBib29sZWFuIHtcbiAgY29uc3QgaG9zdCA9IHVybEJ1aWxkZXIoaW5wdXQpPy5ob3N0bmFtZTtcbiAgaWYgKCFob3N0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm4gdHJ1ZTtcbiAgLy8gYFVSTGAgYnJhY2tldHMgYW4gSVB2NiBob3N0IChgWzo6MV1gKTsgc3RyaXAgdGhlbSBiZWZvcmUgcGFyc2luZy5cbiAgY29uc3QgaXAgPSBob3N0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCBcIlwiKTtcbiAgcmV0dXJuIGlwSW5DaWRyKGlwLCBcIjEyNy4wLjAuMC84XCIpIHx8IGlwSW5DaWRyKGlwLCBcIjo6MS8xMjhcIik7XG59XG5cbi8qKlxuICogTmV0d29yayBtYXNrIGZvciBgcHJlZml4YCBsZWFkaW5nIGJpdHMgb2YgYSBgYml0c2Atd2lkZSBhZGRyZXNzIGFzIGFcbiAqIGBiaWdpbnRgOiB0aGUgdG9wIGBwcmVmaXhgIGJpdHMgc2V0LCB0aGUgbG93IGhvc3QgYml0cyBjbGVhcmVkLlxuICogYHByZWZpeCA9PT0gMGAgeWllbGRzIGAwbmAgKG1hdGNoZXMgZXZlcnl0aGluZyk7IGBwcmVmaXggPT09IGJpdHNgXG4gKiB5aWVsZHMgdGhlIGFsbC1vbmVzIG1hc2sgKG1hdGNoZXMgYSBzaW5nbGUgYWRkcmVzcykuXG4gKi9cbmZ1bmN0aW9uIG5ldHdvcmtNYXNrKGJpdHM6IG51bWJlciwgcHJlZml4OiBudW1iZXIpOiBiaWdpbnQge1xuICBjb25zdCBob3N0Qml0cyA9IEJpZ0ludChiaXRzIC0gcHJlZml4KTtcbiAgY29uc3QgZnVsbCA9ICgxbiA8PCBCaWdJbnQoYml0cykpIC0gMW47XG4gIHJldHVybiBmdWxsIF4gKCgxbiA8PCBob3N0Qml0cykgLSAxbik7XG59XG5cbi8qKiBQYXJzZSBhIGRvdHRlZC1xdWFkIElQdjQgbGl0ZXJhbCBpbnRvIGEgMzItYml0IHZhbHVlLCBlbHNlIGBudWxsYC4gKi9cbmZ1bmN0aW9uIHBhcnNlSXB2NChpbnB1dDogc3RyaW5nKTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgbGV0IHZhbHVlID0gMG47XG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmICghSVBWNF9PQ1RFVC50ZXN0KHBhcnQpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBvY3RldCA9IE51bWJlcihwYXJ0KTtcbiAgICBpZiAob2N0ZXQgPiAyNTUpIHJldHVybiBudWxsO1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDhuKSB8IEJpZ0ludChvY3RldCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIElQdjYgbGl0ZXJhbCBpbnRvIGEgMTI4LWJpdCB2YWx1ZSwgZWxzZSBgbnVsbGAuIEhhbmRsZXMgYDo6YFxuICogemVyby1jb21wcmVzc2lvbiAoYXQgbW9zdCBvbmNlKSBhbmQgYSB0cmFpbGluZyBlbWJlZGRlZCBJUHY0IGdyb3VwXG4gKiAoYDo6ZmZmZjoxLjIuMy40YCkuIFRoZSB6b25lIGlkLCBpZiBhbnksIGlzIGV4cGVjdGVkIHRvIGJlIHN0cmlwcGVkXG4gKiBieSB7QGxpbmsgcGFyc2VJcH0gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUlwdjYoaW5wdXQ6IHN0cmluZyk6IGJpZ2ludCB8IG51bGwge1xuICBjb25zdCBoYWx2ZXMgPSBpbnB1dC5zcGxpdChcIjo6XCIpO1xuICBpZiAoaGFsdmVzLmxlbmd0aCA+IDIpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGhlYWQgPSBwYXJzZUhleHRldHMoaGFsdmVzWzBdISk7XG4gIGlmIChoZWFkID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBpZiAoaGFsdmVzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IHRhaWwgPSBwYXJzZUhleHRldHMoaGFsdmVzWzFdISk7XG4gICAgaWYgKHRhaWwgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIC8vIFwiOjpcIiBtdXN0IHN0YW5kIGluIGZvciBhdCBsZWFzdCBvbmUgYWxsLXplcm8gaGV4dGV0LlxuICAgIGNvbnN0IG1pc3NpbmcgPSA4IC0gaGVhZC5sZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgICBpZiAobWlzc2luZyA8IDEpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBoZXh0ZXRzVG9WYWx1ZShbLi4uaGVhZCwgLi4uQXJyYXkobWlzc2luZykuZmlsbCgwKSwgLi4udGFpbF0pO1xuICB9XG5cbiAgaWYgKGhlYWQubGVuZ3RoICE9PSA4KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGhleHRldHNUb1ZhbHVlKGhlYWQpO1xufVxuXG4vKipcbiAqIFBhcnNlIG9uZSBjb2xvbi1zZXBhcmF0ZWQgcnVuIG9mIElQdjYgaGV4dGV0cywgZXhwYW5kaW5nIGEgdHJhaWxpbmdcbiAqIGVtYmVkZGVkIElQdjQgZ3JvdXAgaW50byBpdHMgdHdvIGhleHRldHMuIEFuIGVtcHR5IHN0cmluZyB5aWVsZHMgYW5cbiAqIGVtcHR5IGxpc3QgKHRoZSBzaWRlIG9mIGEgbGVhZGluZyAvIHRyYWlsaW5nIGA6OmApLlxuICovXG5mdW5jdGlvbiBwYXJzZUhleHRldHMocGFydDogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgaWYgKHBhcnQgPT09IFwiXCIpIHJldHVybiBbXTtcbiAgY29uc3QgdG9rZW5zID0gcGFydC5zcGxpdChcIjpcIik7XG4gIGNvbnN0IGhleHRldHM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV0hO1xuICAgIGlmICh0b2tlbi5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgIC8vIEEgZG90dGVkLXF1YWQgaXMgb25seSBsZWdhbCBhcyB0aGUgZmluYWwgZ3JvdXAuXG4gICAgICBpZiAoaSAhPT0gdG9rZW5zLmxlbmd0aCAtIDEpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgdjQgPSBwYXJzZUlwdjQodG9rZW4pO1xuICAgICAgaWYgKHY0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIGhleHRldHMucHVzaChOdW1iZXIoKHY0ID4+IDE2bikgJiAweGZmZmZuKSwgTnVtYmVyKHY0ICYgMHhmZmZmbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUlQVjZfSEVYVEVULnRlc3QodG9rZW4pKSByZXR1cm4gbnVsbDtcbiAgICAgIGhleHRldHMucHVzaChwYXJzZUludCh0b2tlbiwgMTYpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhleHRldHM7XG59XG5cbi8qKiBGb2xkIGV4YWN0bHkgOCBoZXh0ZXRzIGludG8gYSBzaW5nbGUgMTI4LWJpdCBgYmlnaW50YCwgZWxzZSBgbnVsbGAuICovXG5mdW5jdGlvbiBoZXh0ZXRzVG9WYWx1ZShoZXh0ZXRzOiBudW1iZXJbXSk6IGJpZ2ludCB8IG51bGwge1xuICBpZiAoaGV4dGV0cy5sZW5ndGggIT09IDgpIHJldHVybiBudWxsO1xuICBsZXQgdmFsdWUgPSAwbjtcbiAgZm9yIChjb25zdCBoZXh0ZXQgb2YgaGV4dGV0cykgdmFsdWUgPSAodmFsdWUgPDwgMTZuKSB8IEJpZ0ludChoZXh0ZXQpO1xuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUlILE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFDbkMsTUFBTSxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUM1RCxNQUFNLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUVuQywrREFBK0Q7QUFDL0QsTUFBTSxPQUFPLEdBQXdDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkUsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQy9CLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXpDLG9FQUFvRTtBQUNwRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQztBQUN2QyxvRUFBb0U7QUFDcEUsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUM7QUFvRG5EOzs7O0dBSUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxHQUFHO0lBQzlCLFlBQVksR0FBUTtRQUNsQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUEyQixHQUFNLEVBQUUsS0FBd0I7UUFDN0QsTUFBTSxJQUFJLEdB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LEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBuZXR3b3JraW5nIGhlbHBlcnMgYnVpbHQgYXJvdW5kIHtAbGluayB1cmxCdWlsZGVyfTogYVxuICogdG9sZXJhbnQgYFVSTGAgY29lcmNpb24gKyBjaGFpbmFibGUgYnVpbGRlciB0aGF0IGdyYWNlZnVsbHkgaGFuZGxlc1xuICogcGFydGlhbCBpbnB1dHMgKGJhcmUgaG9zdHMsIHBhdGgtb25seSBzdHJpbmdzLCBgeyB1cmwgfWAgd3JhcHBlcnMpLFxuICogYSBzbWFsbCBJUHY0IC8gSVB2NiBhZGRyZXNzICsgQ0lEUiB0b29sa2l0IChwYXJzaW5nIGFuZCBtZW1iZXJzaGlwXG4gKiBsb29rdXBzKSwgYW5kIGVtYWlsLWFkZHJlc3MgcGFyc2luZyAoe0BsaW5rIHBhcnNlRW1haWxzfSAvXG4gKiB7QGxpbmsgaXNFbWFpbH0pIHRoYXQgbm9ybWFsaXplcyB0aGUgQ1NWIC8gc2luZ2xlLXN0cmluZyAvIGFycmF5XG4gKiBpbnB1dHMgZW1haWwgcmVjaXBpZW50IGFuZCBhbGxvdy1saXN0IGZpZWxkcyBhY2NlcHQgaW50byBhIGNsZWFuXG4gKiBgc3RyaW5nW11gLiBObyBub2RlLW9ubHkgaW1wb3J0cywgc28gdGhpcyBtb2R1bGUgaXMgdGhlIGNhbm9uaWNhbFxuICogaG9tZSBmb3IgYW55dGhpbmcgVVJMLSwgSVAtLCBvciBlbWFpbC1zaGFwZWQgdGhhdCBhbHNvIGhhcyB0byBydW4gaW5cbiAqIGEgVml0ZSAvIFdlYnBhY2sgLyBlc2J1aWxkIGNsaWVudCBidW5kbGUuIE5vZGUtb25seSBuZXR3b3JrIGhlbHBlcnNcbiAqIChlLmcuIEROUyByZXNvbHV0aW9uKSBiZWxvbmcgaW4gYSBub2RlLXRhZ2dlZCBwYWNrYWdlLCBub3QgaGVyZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBOb25GdW5jdGlvbktleXMgfSBmcm9tIFwiLi9vYmplY3QudHNcIjtcblxuY29uc3QgTE9DQUxfSE9TVF9VUkwgPSBuZXcgVVJMKFwiaHR0cDovL2xvY2FsaG9zdFwiKTtcbmNvbnN0IFVSTF9TQ0hFTUVfREVGQVVMVCA9IFwiaHR0cHNcIjtcbmNvbnN0IFVSTF9TQ0hFTUVfUFJFRklYID0gL14oW0EtWmEtel1bQS1aYS16MC05Ky4tXSo6XFwvXFwvKS87XG5jb25zdCBVUkxfUEFUSF9TRUdNRU5UX1RSSU0gPSAvXlxcLyt8XFwvKyQvZztcbmNvbnN0IFVSTF9TQ0hFTUVfU0VQQVJBVE9SID0gXCI6Ly9cIjtcblxuLyoqIFRvdGFsIGJpdCB3aWR0aCBvZiBhbiBhZGRyZXNzIG9mIGVhY2gge0BsaW5rIElwVmVyc2lvbn0uICovXG5jb25zdCBJUF9CSVRTOiBSZWFkb25seTxSZWNvcmQ8SXBWZXJzaW9uLCBudW1iZXI+PiA9IHsgNDogMzIsIDY6IDEyOCB9O1xuY29uc3QgSVBWNF9PQ1RFVCA9IC9eXFxkezEsM30kLztcbmNvbnN0IElQVjZfSEVYVEVUID0gL15bMC05YS1mQS1GXXsxLDR9JC87XG5cbi8qKiBEZWxpbWl0ZXJzIGJldHdlZW4gYWRkcmVzc2VzIGluIGEgZnJlZS10ZXh0IC8gQ1NWIGVtYWlsIGxpc3QuICovXG5jb25zdCBFTUFJTF9MSVNUX1NFUEFSQVRPUiA9IC9bXFxzLDtdKy87XG4vKiogUHJhZ21hdGljIGBsb2NhbEBkb21haW4udGxkYCBzaGFwZSBjaGVjayAobm90IGZ1bGwgUkZDIDUzMjIpLiAqL1xuY29uc3QgRU1BSUxfQUREUkVTUyA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBbnl0aGluZyB7QGxpbmsgdXJsQnVpbGRlcn0gKGFuZCB7QGxpbmsgcGF0aE1hdGNofSkga25vdyBob3cgdG8gY29lcmNlXG4gKiBpbnRvIGEgVVJMOlxuICpcbiAqIC0gQSBzdHJpbmc6IGEgaG9zdCwgYSBmdWxsIFVSTCwgb3IgYSBwYXRoIC8gcXVlcnkgLyBoYXNoIGZyYWdtZW50LlxuICogLSBBIFdIQVRXRyBgVVJMYCBpbnN0YW5jZS5cbiAqIC0gQW55IG9iamVjdCB3aXRoIGEgYHVybGAgZmllbGQgKGUuZy4gYSBmZXRjaCBgUmVxdWVzdGAsIGEgRGF0YWJyaWNrc1xuICogICBgV29ya3NwYWNlQ2xpZW50YCBjb25maWcpLlxuICovXG5leHBvcnQgdHlwZSBVcmxMaWtlID0gc3RyaW5nIHwgVVJMIHwgeyB1cmw6IHN0cmluZyB9O1xuXG4vKiogSVAgcHJvdG9jb2wgZmFtaWx5OiBgNGAgZm9yIElQdjQsIGA2YCBmb3IgSVB2Ni4gKi9cbmV4cG9ydCB0eXBlIElwVmVyc2lvbiA9IDQgfCA2O1xuXG4vKipcbiAqIEEgcGFyc2VkIElQIGFkZHJlc3MuIGB2YWx1ZWAgaXMgdGhlIGFkZHJlc3MgYXMgYW4gdW5zaWduZWQgaW50ZWdlclxuICogKGEgMzItYml0IHJhbmdlIGZvciB2NCwgMTI4LWJpdCBmb3IgdjYpIGhlbGQgaW4gYSBgYmlnaW50YCBzbyBib3RoXG4gKiBmYW1pbGllcyBzaGFyZSBvbmUgY29tcGFyaXNvbiAvIG1hc2tpbmcgcGF0aC4gUHJvZHVjZSBvbmUgd2l0aFxuICoge0BsaW5rIHBhcnNlSXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZElwIHtcbiAgdmVyc2lvbjogSXBWZXJzaW9uO1xuICAvKiogVGhlIGFkZHJlc3MgYXMgYW4gdW5zaWduZWQgaW50ZWdlciAoYGJpZ2ludGAgZm9yIHVuaWZvcm0gdjQvdjYgbWF0aCkuICovXG4gIHZhbHVlOiBiaWdpbnQ7XG59XG5cbi8qKlxuICogQSBwYXJzZWQgQ0lEUiBibG9jayAoYDEwLjAuMC4wLzhgLCBgMjAwMTpkYjg6Oi8zMmApLiBgYmFzZWAgaXMgdGhlXG4gKiBuZXR3b3JrIGFkZHJlc3Mgd2l0aCBhbGwgaG9zdCBiaXRzIGNsZWFyZWQsIHNvIG1lbWJlcnNoaXAgaXMgYVxuICogc2luZ2xlIG1hc2tlZCBjb21wYXJlIChzZWUge0BsaW5rIGlwSW5DaWRyfSkuIFByb2R1Y2Ugb25lIHdpdGhcbiAqIHtAbGluayBwYXJzZUNpZHJ9LiBDYXJyaWVzIHRoZSBub3JtYWxpemVkIGBjaWRyYCBzdHJpbmcgZm9yIGxvZ2dpbmdcbiAqIGFuZCB0byBrZXkgYmFjayB0byBjYWxsZXItc2lkZSBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaWRyIHtcbiAgdmVyc2lvbjogSXBWZXJzaW9uO1xuICAvKiogTmV0d29yayBhZGRyZXNzIChob3N0IGJpdHMgemVyb2VkKSBhcyBhbiB1bnNpZ25lZCBgYmlnaW50YC4gKi9cbiAgYmFzZTogYmlnaW50O1xuICAvKiogUHJlZml4IGxlbmd0aCBpbiBiaXRzICh0aGUgbnVtYmVyIGFmdGVyIHRoZSBgL2ApLiAqL1xuICBwcmVmaXg6IG51bWJlcjtcbiAgLyoqIE5vcm1hbGl6ZWQgYDxhZGRyZXNzPi88cHJlZml4PmAgc3RyaW5nLiAqL1xuICBjaWRyOiBzdHJpbmc7XG59XG5cbi8qKiBTZXR0YWJsZSwgbm9uLW1ldGhvZCBgVVJMYCBwcm9wZXJ0aWVzIC0gdGhlIGtleXMge0BsaW5rIFVybEJ1aWxkZXIud2l0aH0gYWNjZXB0cy4gKi9cbnR5cGUgVXJsUHJvcGVydHlLZXkgPSBOb25GdW5jdGlvbktleXM8VXJsQnVpbGRlckltcGw+O1xuXG4vKipcbiAqIEEgYFVSTGAgc3ViY2xhc3Mgd2l0aCBjaGFpbmFibGUsIGNvcHktb24td3JpdGUgaGVscGVycy4gRXZlcnkgbXV0YXRpbmdcbiAqIG1ldGhvZCByZXR1cm5zIGEgZnJlc2ggYnVpbGRlciByYXRoZXIgdGhhbiBlZGl0aW5nIGluIHBsYWNlLCBzbyBhIGJhc2VcbiAqIGJ1aWxkZXIgY2FuIGJlIHNhZmVseSByZXVzZWQuIENvbnN0cnVjdCBvbmUgdmlhIHtAbGluayB1cmxCdWlsZGVyfS5cbiAqL1xuY2xhc3MgVXJsQnVpbGRlckltcGwgZXh0ZW5kcyBVUkwge1xuICBjb25zdHJ1Y3Rvcih1cmw6IFVSTCkge1xuICAgIHN1cGVyKHVybCk7XG4gIH1cblxuICAvKiogVGhlIHNjaGVtZSB3aXRob3V0IHRoZSB0cmFpbGluZyBjb2xvbiAoYGh0dHBzYCwgbm90IGBodHRwczpgKS4gKi9cbiAgZ2V0IHNjaGVtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIHNldCBzY2hlbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHJvdG9jb2wgPSB2YWx1ZSArIFwiOlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvcHkgd2l0aCBhIHNpbmdsZSBgVVJMYCBwcm9wZXJ0eSAoYHBhdGhuYW1lYCwgYHNlYXJjaGAsXG4gICAqIGBob3N0bmFtZWAsIGBzY2hlbWVgLCAuLi4pIHNldCB0byBgdmFsdWVgLCBsZWF2aW5nIHRoaXMgYnVpbGRlclxuICAgKiB1bnRvdWNoZWQuXG4gICAqL1xuICB3aXRoPEsgZXh0ZW5kcyBVcmxQcm9wZXJ0eUtleT4oa2V5OiBLLCB2YWx1ZTogVXJsQnVpbGRlckltcGxbS10pOiBVcmxCdWlsZGVyIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFVybEJ1aWxkZXJJbXBsKHRoaXMpO1xuICAgIChuZXh0IGFzIGFueSlba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBuZXcgVXJsQnVpbGRlckltcGwobmV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29weSB3aXRoIGBwYXRoU2VnbWVudHNgIGFwcGVuZGVkIHRvIHRoZSBjdXJyZW50IHBhdGhuYW1lLlxuICAgKiBTZWdtZW50cyBtYXkgYmUgc3RyaW5ncyBvciBzdHJpbmcgYXJyYXlzOyBlYWNoIGlzIHRyaW1tZWQgb2ZcbiAgICogYm91bmRhcnkgc2xhc2hlcyBhbmQgYmxhbmtzIGFyZSBkcm9wcGVkIGJlZm9yZSBqb2luaW5nIHdpdGggYC9gLlxuICAgKi9cbiAgd2l0aFBhdGhBcHBlbmQoLi4ucGF0aFNlZ21lbnRzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBVcmxCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy53aXRoUGF0aFJlcGxhY2UodGhpcy5wYXRobmFtZSwgLi4ucGF0aFNlZ21lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb3B5IHdob3NlIHBhdGhuYW1lIGlzIGBwYXRoU2VnbWVudHNgIGpvaW5lZCB3aXRoIGAvYCxcbiAgICogcmVwbGFjaW5nIGFueSBleGlzdGluZyBwYXRoLiBTZWdtZW50cyBtYXkgYmUgc3RyaW5ncyBvciBzdHJpbmdcbiAgICogYXJyYXlzOyBlYWNoIGlzIHRyaW1tZWQgb2YgYm91bmRhcnkgc2xhc2hlcyBhbmQgYmxhbmtzIGFyZSBkcm9wcGVkLlxuICAgKi9cbiAgd2l0aFBhdGhSZXBsYWNlKC4uLnBhdGhTZWdtZW50czogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogVXJsQnVpbGRlciB7XG4gICAgY29uc3QgcGF0aG5hbWVQYXJ0czogc3RyaW5nW10gPSBbLi4ucGF0aFNlZ21lbnRzXS5mbGF0TWFwKChwKSA9PiAoQXJyYXkuaXNBcnJheShwKSA/IHAgOiBbcF0pKTtcbiAgICBjb25zdCBwYXRobmFtZSA9IHBhdGhuYW1lUGFydHNcbiAgICAgIC5tYXAoKHApID0+IHAucmVwbGFjZShVUkxfUEFUSF9TRUdNRU5UX1RSSU0sIFwiXCIpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oXCIvXCIpO1xuICAgIHJldHVybiB0aGlzLndpdGgoXCJwYXRobmFtZVwiLCBcIi9cIiArIHBhdGhuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBVUkwncyBwYXRobmFtZSBpcyBgcGF0aGAgb3IgbGl2ZXMgYmVuZWF0aCBpdCxcbiAgICogbWF0Y2hpbmcgb24gc2VnbWVudCBib3VuZGFyaWVzIHNvIGAvYXBpYCBtYXRjaGVzIGAvYXBpYCBhbmRcbiAgICogYC9hcGkvY29vbGAgYnV0IG5vdCBgL2FwaWNvb2xgLiBBIG1pc3NpbmcgbGVhZGluZyBzbGFzaCBvbiBgcGF0aGBcbiAgICogaXMgdG9sZXJhdGVkOyBxdWVyeSBhbmQgaGFzaCBhcmUgaWdub3JlZCAodGhleSBhcmVuJ3QgcGFydCBvZlxuICAgKiBgcGF0aG5hbWVgKS4gTWF0Y2hpbmcgaXMgZXhhY3Qgb3RoZXJ3aXNlIC0gdHJhaWxpbmcgc2xhc2hlcyBhcmVcbiAgICogbm90IG5vcm1hbGl6ZWQgYW5kIGAvYCBtYXRjaGVzIG9ubHkgdGhlIHJvb3QuXG4gICAqL1xuICBwYXRoTWF0Y2hlcyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXRobmFtZSA9IHRoaXMucGF0aG5hbWU7XG4gICAgaWYgKHBhdGhuYW1lID09IHBhdGgpIHJldHVybiB0cnVlO1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkgcGF0aCA9IFwiL1wiICsgcGF0aDtcbiAgICBpZiAocGF0aG5hbWUgPT0gcGF0aCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHBhdGhuYW1lLnN0YXJ0c1dpdGgocGF0aCArIFwiL1wiKTtcbiAgfVxufVxuXG4vKiogUHVibGljIHR5cGUgZm9yIHRoZSB7QGxpbmsgdXJsQnVpbGRlcn0gcmV0dXJuIHZhbHVlLiAqL1xuZXhwb3J0IHR5cGUgVXJsQnVpbGRlciA9IFVybEJ1aWxkZXJJbXBsO1xuXG4vKiogV2l0aCBubyBhcmd1bWVudCwgcmVzb2x2ZXMgdG8gdGhlIGJhc2Ugb3JpZ2luIChuZXZlciBgbnVsbGApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybEJ1aWxkZXIoKTogVXJsQnVpbGRlcjtcblxuLyoqXG4gKiBDb2VyY2UgYSB7QGxpbmsgVXJsTGlrZX0gaW50byBhIGNoYWluYWJsZSB7QGxpbmsgVXJsQnVpbGRlcn0sIG9yIGBudWxsYFxuICogd2hlbiB0aGUgaW5wdXQgY2Fubm90IGJlIHBhcnNlZCBpbnRvIGEgVVJMLiBOZXZlciB0aHJvd3MuXG4gKlxuICogLSBBIGBVUkxgIGluc3RhbmNlIG9yIGB7IHVybCB9YCB3cmFwcGVyIGlzIGFkb3B0ZWQgYXMtaXMuXG4gKiAtIEEgYmFyZSBob3N0bmFtZSAoYFwiZXhhbXBsZS5jb21cImApIGlzIHVwZ3JhZGVkIHRvIGBodHRwczovL2A7IGFuXG4gKiAgIGV4cGxpY2l0IHNjaGVtZSBpcyBwcmVzZXJ2ZWQuXG4gKiAtIEEgcGF0aCAvIHF1ZXJ5IC8gaGFzaCBmcmFnbWVudCAoYFwiL2FwaVwiYCwgYFwiP3E9MVwiYCwgYFwiI3hcImApIGlzXG4gKiAgIHJlc29sdmVkIGFnYWluc3Qge0BsaW5rIGRlZmF1bHRVcmx9ICh0aGUgYnJvd3NlciBvcmlnaW4sIGVsc2VcbiAqICAgYGh0dHA6Ly9sb2NhbGhvc3RgKS5cbiAqIC0gQW4gZW1wdHkgLyBibGFuayBzdHJpbmcgb3Igb21pdHRlZCBpbnB1dCByZXNvbHZlcyB0byB0aGUgYmFzZVxuICogICBvcmlnaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIHVybEJ1aWxkZXIoXCJleGFtcGxlLmNvbVwiKTsgICAgICAgICAgLy8gaHR0cHM6Ly9leGFtcGxlLmNvbS9cbiAqIHVybEJ1aWxkZXIoXCJodHRwOi8veC9wYXRoXCIpOyAgICAgICAgLy8gaHR0cDovL3gvcGF0aFxuICogdXJsQnVpbGRlcihcIi9hcGkvdjJcIik7ICAgICAgICAgICAgICAvLyBodHRwOi8vbG9jYWxob3N0L2FwaS92MlxuICogdXJsQnVpbGRlcih7IHVybDogXCJodHRwOi8veVwiIH0pOyAgICAvLyBodHRwOi8veS9cbiAqIHVybEJ1aWxkZXIoKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3QvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cmxCdWlsZGVyKGlucHV0PzogVXJsTGlrZSk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxCdWlsZGVyKGlucHV0PzogVXJsTGlrZSk6IFVybEJ1aWxkZXIgfCB1bmRlZmluZWQge1xuICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICByZXR1cm4gbmV3IFVybEJ1aWxkZXJJbXBsKGlucHV0KTtcbiAgfVxuICBpZiAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIFwidXJsXCIgaW4gaW5wdXQpIHtcbiAgICBpbnB1dCA9IGlucHV0LnVybDtcbiAgfVxuICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG4gIH1cbiAgaWYgKGlucHV0KSB7XG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoXCIvXCIpIHx8IGlucHV0LnN0YXJ0c1dpdGgoXCI/XCIpIHx8IGlucHV0LnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBjb25zdCBqb2luZWRVcmwgPSBkZWZhdWx0VXJsKCkudG9TdHJpbmcoKS5zbGljZSgwLCAtMSkgKyBpbnB1dDtcbiAgICAgIHJldHVybiB1cmxCdWlsZGVyKGpvaW5lZFVybCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dC5zdGFydHNXaXRoKFVSTF9TQ0hFTUVfU0VQQVJBVE9SKSkge1xuICAgICAgaW5wdXQgPSBgJHtVUkxfU0NIRU1FX0RFRkFVTFR9JHtpbnB1dH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKFVSTF9TQ0hFTUVfUFJFRklYKTtcbiAgICAgIGNvbnN0IHNjaGVtZVByZWZpeCA9IG1hdGNoPy5bMV07XG4gICAgICBpZiAoc2NoZW1lUHJlZml4KSB7XG4gICAgICAgIGNvbnN0IHJlc3QgPSBpbnB1dC5zbGljZShzY2hlbWVQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgaW5wdXQgPSBgJHtzY2hlbWVQcmVmaXh9JHtyZXN0IHx8IGRlZmF1bHRVcmwoKS5ob3N0bmFtZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQgPSBgJHtVUkxfU0NIRU1FX0RFRkFVTFR9Oi8vJHtpbnB1dH1gO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdXJsQnVpbGRlcihkZWZhdWx0VXJsKCkpO1xuICB9XG4gIGNvbnN0IHVybCA9IHBhcnNlVXJsKGlucHV0KTtcbiAgcmV0dXJuIHVybCA/IHVybEJ1aWxkZXIodXJsKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZSB3cmFwcGVyIG92ZXIge0BsaW5rIFVybEJ1aWxkZXIucGF0aE1hdGNoZXN9OiBjb2VyY2VcbiAqIGBpbnB1dGAgdmlhIHtAbGluayB1cmxCdWlsZGVyfSBhbmQgdGVzdCBpdHMgcGF0aG5hbWUgYWdhaW5zdCBgcGF0aGAuXG4gKiBSZXR1cm5zIGBmYWxzZWAgZm9yIGlucHV0IHRoYXQgY2FuJ3QgYmUgcGFyc2VkIGludG8gYSBVUkwuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhdGhNYXRjaChcIi9hcGkvY29vbD9xPTFcIiwgXCIvYXBpXCIpOyAgICAgIC8vIHRydWVcbiAqIHBhdGhNYXRjaChcIi9hcGljb29sXCIsIFwiL2FwaVwiKTsgICAgICAgICAgIC8vIGZhbHNlXG4gKiBwYXRoTWF0Y2goXCJodHRwczovL2hvc3QvYXBpXCIsIFwiL2FwaVwiKTsgICAvLyB0cnVlXG4gKiBwYXRoTWF0Y2gocmVxdWVzdCwgXCIvYXBpL3YyXCIpOyAgICAgICAgICAgLy8gZmV0Y2ggUmVxdWVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aE1hdGNoKGlucHV0OiBVcmxMaWtlLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdXJsYiA9IHVybEJ1aWxkZXIoaW5wdXQpO1xuICBpZiAoIXVybGIpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHVybGIucGF0aE1hdGNoZXMocGF0aCk7XG59XG5cbi8qKlxuICogQmFzZSBvcmlnaW4gZm9yIHJlc29sdmluZyBwYXRoLW9ubHkgaW5wdXRzLiBJbiBhIGJyb3dzZXIgdGhpcyBpcyB0aGVcbiAqIGN1cnJlbnQgcGFnZSdzIG9yaWdpbiAoYHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5gKSwgc28gYHVybEJ1aWxkZXIoXCIvYXBpXCIpYFxuICogcmVmbGVjdHMgd2hlcmUgdGhlIGFwcCBpcyBhY3R1YWxseSBzZXJ2ZWQgZnJvbTsgb24gdGhlIHNlcnZlciAvIGluXG4gKiB0ZXN0cyAobm8gYHdpbmRvd2AsIG9yIGFuIG9wYXF1ZSBgXCJudWxsXCJgIG9yaWdpbikgaXQgZmFsbHMgYmFjayB0b1xuICogYGh0dHA6Ly9sb2NhbGhvc3RgLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0VXJsKCk6IFVSTCB7XG4gIC8vIFJlYWNoIGB3aW5kb3dgIHZpYSBgZ2xvYmFsVGhpc2Agc28gdGhpcyBjb21waWxlcyB3aXRob3V0IHRoZSBET01cbiAgLy8gbGliIChpdCdzIGB1bmRlZmluZWRgIG9uIHRoZSBzZXJ2ZXIgLyBpbiB3b3JrZXJzIHdpdGhvdXQgb25lKS5cbiAgY29uc3Qgb3JpZ2luID0gKGdsb2JhbFRoaXMgYXMgeyB3aW5kb3c/OiB7IGxvY2F0aW9uPzogeyBvcmlnaW4/OiBzdHJpbmcgfSB9IH0pLndpbmRvdz8ubG9jYXRpb25cbiAgICA/Lm9yaWdpbjtcbiAgaWYgKG9yaWdpbiAmJiBvcmlnaW4gIT09IFwibnVsbFwiKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gcGFyc2VVcmwob3JpZ2luKTtcbiAgICBpZiAob3JpZ2luVXJsKSB7XG4gICAgICByZXR1cm4gb3JpZ2luVXJsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IFVSTChMT0NBTF9IT1NUX1VSTCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKGlucHV0OiBzdHJpbmcpOiBVUkwgfCBudWxsIHtcbiAgaWYgKGlucHV0ICYmIGlucHV0LmluY2x1ZGVzKFVSTF9TQ0hFTUVfU0VQQVJBVE9SKSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTChpbnB1dCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEVtYWlsIGFkZHJlc3Nlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgcGFyc2VFbWFpbHN9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUVtYWlsc09wdGlvbnMge1xuICAvKiogTG93ZXItY2FzZSBldmVyeSBhZGRyZXNzICh1c2VmdWwgZm9yIGFsbG93LWxpc3RzIC8gbWF0Y2hpbmcpLiBPZmYgYnkgZGVmYXVsdC4gKi9cbiAgbG93ZXJjYXNlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERyb3AgbGF0ZXIgY2FzZS1pbnNlbnNpdGl2ZSBkdXBsaWNhdGVzLCBrZWVwaW5nIGZpcnN0LXNlZW4gY2FzaW5nLlxuICAgKiBPbiBieSBkZWZhdWx0IC0gYSByZWNpcGllbnQgb3IgcGF0dGVybiBsaXN0IHJhcmVseSB3YW50cyByZXBlYXRzLlxuICAgKi9cbiAgZGVkdXBlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHNoYXBlcyBhbiBlbWFpbCBhZGRyZXNzIGZpZWxkIGFjY2VwdHMgLSBhIHNpbmdsZSBzdHJpbmcsXG4gKiBhIGNvbW1hIC8gc2VtaWNvbG9uIC8gd2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCwgYW4gYXJyYXkgb2YgZWl0aGVyLFxuICogb3Igbm90aGluZyAtIGludG8gYSBjbGVhbiBgc3RyaW5nW11gLiBFYWNoIGVudHJ5IGlzIHNwbGl0IG9uIHRoZSBsaXN0XG4gKiBzZXBhcmF0b3JzLCB0cmltbWVkLCBhbmQgZGUtZW1wdGllZDsgYmxhbmtzIGFuZCBub24tc3RyaW5nIGFycmF5XG4gKiBtZW1iZXJzIGFyZSBkcm9wcGVkLiBCeSBkZWZhdWx0IGR1cGxpY2F0ZXMgYXJlIHJlbW92ZWRcbiAqIGNhc2UtaW5zZW5zaXRpdmVseSAoZmlyc3Qtc2VlbiBjYXNpbmcgd2lucykgYW5kIGNhc2luZyBpcyBvdGhlcndpc2VcbiAqIHByZXNlcnZlZDsgcGFzcyBgbG93ZXJjYXNlYCB0byBmb2xkIGV2ZXJ5dGhpbmcgdG8gbG93ZXIgY2FzZSAoZS5nLiBmb3JcbiAqIGFuIGFsbG93LWxpc3QpLiBUaGlzIGlzIHRoZSBvbmUgcGxhY2UgcmVjaXBpZW50IGxpc3RzLCBDQy9CQ0MgaW5wdXRzLFxuICogYW5kIHNlbmRlciBhbGxvdy1saXN0cyBhY3Jvc3MgdGhlIHJlcG8gYWdyZWUgb24gaG93IGZyZWUtdGV4dCBlbWFpbFxuICogaW5wdXQgaXMgcmVhZC4gTmV2ZXIgdGhyb3dzOyBkb2VzIG5vdCB2YWxpZGF0ZSAtIHBhaXIgd2l0aFxuICoge0BsaW5rIGlzRW1haWx9IHdoZW4geW91IG5lZWQgdG8gcmVqZWN0IG1hbGZvcm1lZCBhZGRyZXNzZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlRW1haWxzKFwiYUB4LmNvbSwgYkB5LmNvbTsgYUB4LmNvbVwiKTsgLy8gW1wiYUB4LmNvbVwiLCBcImJAeS5jb21cIl1cbiAqIHBhcnNlRW1haWxzKFtcIkFAeC5jb21cIiwgXCIgYkB5LmNvbSBcIl0pOyAgICAgIC8vIFtcIkFAeC5jb21cIiwgXCJiQHkuY29tXCJdXG4gKiBwYXJzZUVtYWlscyhcIipAY29ycC5jb21cIiwgeyBsb3dlcmNhc2U6IHRydWUgfSk7IC8vIFtcIipAY29ycC5jb21cIl1cbiAqIHBhcnNlRW1haWxzKHVuZGVmaW5lZCk7ICAgICAgICAgICAgICAgICAgICAgLy8gW11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW1haWxzKFxuICBpbnB1dDogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBQYXJzZUVtYWlsc09wdGlvbnMgPSB7fSxcbik6IHN0cmluZ1tdIHtcbiAgaWYgKGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQpIHJldHVybiBbXTtcbiAgY29uc3QgeyBsb3dlcmNhc2UgPSBmYWxzZSwgZGVkdXBlID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkoaW5wdXQpID8gaW5wdXQgOiBbaW5wdXQgYXMgc3RyaW5nXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICh0eXBlb2YgZW50cnkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZW50cnkuc3BsaXQoRU1BSUxfTElTVF9TRVBBUkFUT1IpKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gdG9rZW4udHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBsb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkO1xuICAgICAgaWYgKGRlZHVwZSkge1xuICAgICAgICBjb25zdCBrZXkgPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgICAgc2Vlbi5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICAgIG91dC5wdXNoKGFkZHJlc3MpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFByYWdtYXRpYyBgbG9jYWxAZG9tYWluLnRsZGAgc2hhcGUgY2hlY2s6IG5vbi1lbXB0eSBsb2NhbCBhbmQgZG9tYWluXG4gKiBwYXJ0cyBhcm91bmQgYSBzaW5nbGUgYEBgLCB3aXRoIGEgZG90dGVkIGRvbWFpbiBhbmQgbm8gd2hpdGVzcGFjZS5cbiAqIERlbGliZXJhdGVseSBsb29zZSAobm90IGZ1bGwgUkZDIDUzMjIpIC0gZW5vdWdoIHRvIGNhdGNoIG9idmlvdXMgdHlwb3NcbiAqIGFuZCBnaXZlIENMSSAvIGZvcm0gZmVlZGJhY2ssIG5vdCB0byBnYXRlIGRlbGl2ZXJ5LiBUcmltcyBmaXJzdC4gVGhpc1xuICogaXMgYSBwdXJlbHkgc3ludGFjdGljIHRlc3QsIHNvIGEgd2lsZGNhcmQgYWxsb3ctbGlzdCBwYXR0ZXJuIGxpa2VcbiAqIGAqQGV4YW1wbGUuY29tYCBwYXNzZXM7IGRpc3Rpbmd1aXNoaW5nIGEgcGF0dGVybiBmcm9tIGEgcmVhbCBhZGRyZXNzXG4gKiBpcyB0aGUgc2VuZGVyIHBvbGljeSdzIGpvYiwgbm90IHRoaXMgdmFsaWRhdG9yJ3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGlzRW1haWwoXCJhbGljZUBleGFtcGxlLmNvbVwiKTsgLy8gdHJ1ZVxuICogaXNFbWFpbChcIm5vcGVcIik7ICAgICAgICAgICAgICAvLyBmYWxzZSAobm8gQClcbiAqIGlzRW1haWwoXCJub0Bkb21haW5cIik7ICAgICAgICAgLy8gZmFsc2UgKG5vIGRvdHRlZCBkb21haW4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIEVNQUlMX0FERFJFU1MudGVzdCh2YWx1ZS50cmltKCkpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIElQIGFkZHJlc3NlcyBhbmQgQ0lEUiBibG9ja3Ncbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBhcnNlIGFuIElQdjQgKGBcIjEuMi4zLjRcImApIG9yIElQdjYgKGBcIjIwMDE6ZGI4OjoxXCJgLFxuICogYFwiOjpmZmZmOjEuMi4zLjRcImAsIGBcIjo6MVwiYCkgYWRkcmVzcyBpbnRvIGEge0BsaW5rIFBhcnNlZElwfSwgb3JcbiAqIGBudWxsYCB3aGVuIHRoZSBpbnB1dCBpc24ndCBhIHZhbGlkIGxpdGVyYWwuIE5ldmVyIHRocm93cy4gU3Vycm91bmRpbmdcbiAqIHdoaXRlc3BhY2UsIGBbLi4uXWAgYnJhY2tldHMgYXJvdW5kIGFuIElQdjYgbGl0ZXJhbCwgYW5kIGFuIElQdjYgem9uZVxuICogaWQgKGBmZTgwOjoxJWV0aDBgKSBhcmUgYWxsIHRvbGVyYXRlZC4gVGhlIGB2YWx1ZWAgaXMgcmV0dXJuZWQgYXMgYVxuICogYGJpZ2ludGAgc28gdjQgYW5kIHY2IHNoYXJlIG9uZSBjb21wYXJpc29uIHBhdGguXG4gKlxuICogQGV4YW1wbGVcbiAqIHBhcnNlSXAoXCIxMC4wLjAuMVwiKTsgICAgICAgIC8vIHsgdmVyc2lvbjogNCwgdmFsdWU6IDE2Nzc3MjE2MW4gfVxuICogcGFyc2VJcChcIjIwMDE6ZGI4OjoxXCIpOyAgICAgLy8geyB2ZXJzaW9uOiA2LCB2YWx1ZTogLi4uIH1cbiAqIHBhcnNlSXAoXCJub3QtYW4taXBcIik7ICAgICAgIC8vIG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXAoaW5wdXQ6IHN0cmluZyk6IFBhcnNlZElwIHwgbnVsbCB7XG4gIGxldCB0ZXh0ID0gaW5wdXQudHJpbSgpO1xuICBpZiAodGV4dC5zdGFydHNXaXRoKFwiW1wiKSAmJiB0ZXh0LmVuZHNXaXRoKFwiXVwiKSkgdGV4dCA9IHRleHQuc2xpY2UoMSwgLTEpO1xuICBpZiAodGV4dC5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAvLyBEcm9wIGFuIElQdjYgem9uZSBpZCAoYGZlODA6OjElZXRoMGApIC0gaXQgaXNuJ3QgcGFydCBvZiB0aGUgYWRkcmVzcy5cbiAgICBjb25zdCB6b25lID0gdGV4dC5pbmRleE9mKFwiJVwiKTtcbiAgICBpZiAoem9uZSA+PSAwKSB0ZXh0ID0gdGV4dC5zbGljZSgwLCB6b25lKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSXB2Nih0ZXh0KTtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBudWxsIDogeyB2ZXJzaW9uOiA2LCB2YWx1ZSB9O1xuICB9XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VJcHY0KHRleHQpO1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBudWxsIDogeyB2ZXJzaW9uOiA0LCB2YWx1ZSB9O1xufVxuXG4vKipcbiAqIFBhcnNlIGEgQ0lEUiBibG9jayAoYFwiMTAuMC4wLjAvOFwiYCwgYFwiMjAwMTpkYjg6Oi8zMlwiYCkgaW50byBhXG4gKiB7QGxpbmsgQ2lkcn0gd2l0aCBob3N0IGJpdHMgY2xlYXJlZCBmcm9tIGBiYXNlYCwgb3IgYG51bGxgIHdoZW4gdGhlXG4gKiBpbnB1dCBpc24ndCBhIHZhbGlkIGJsb2NrIChiYWQgYWRkcmVzcywgbWlzc2luZyAvIG91dC1vZi1yYW5nZVxuICogcHJlZml4KS4gTmV2ZXIgdGhyb3dzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwYXJzZUNpZHIoXCIxMC4wLjAuMC84XCIpPy5iYXNlOyAgIC8vIDE2Nzc3MjE2MG4gKDEwLjAuMC4wKVxuICogcGFyc2VDaWRyKFwiMTAuMS4yLjMvOFwiKT8uYmFzZTsgICAvLyAxNjc3NzIxNjBuIChob3N0IGJpdHMgZHJvcHBlZClcbiAqIHBhcnNlQ2lkcihcIjEwLjAuMC4wLzQwXCIpOyAgICAgICAgLy8gbnVsbCAocHJlZml4ID4gMzIgZm9yIHY0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDaWRyKGlucHV0OiBzdHJpbmcpOiBDaWRyIHwgbnVsbCB7XG4gIGNvbnN0IHRleHQgPSBpbnB1dC50cmltKCk7XG4gIGNvbnN0IHNsYXNoID0gdGV4dC5sYXN0SW5kZXhPZihcIi9cIik7XG4gIGlmIChzbGFzaCA8IDApIHJldHVybiBudWxsO1xuICBjb25zdCBwcmVmaXhUZXh0ID0gdGV4dC5zbGljZShzbGFzaCArIDEpO1xuICBpZiAoIUlQVjRfT0NURVQudGVzdChwcmVmaXhUZXh0KSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGlwID0gcGFyc2VJcCh0ZXh0LnNsaWNlKDAsIHNsYXNoKSk7XG4gIGlmICghaXApIHJldHVybiBudWxsO1xuICBjb25zdCBwcmVmaXggPSBOdW1iZXIocHJlZml4VGV4dCk7XG4gIGNvbnN0IGJpdHMgPSBJUF9CSVRTW2lwLnZlcnNpb25dO1xuICBpZiAocHJlZml4ID4gYml0cykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGJhc2UgPSBpcC52YWx1ZSAmIG5ldHdvcmtNYXNrKGJpdHMsIHByZWZpeCk7XG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogaXAudmVyc2lvbixcbiAgICBiYXNlLFxuICAgIHByZWZpeCxcbiAgICBjaWRyOiBgJHt0ZXh0LnNsaWNlKDAsIHNsYXNoKX0vJHtwcmVmaXh9YCxcbiAgfTtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYGlwYCBmYWxscyBpbnNpZGUgYGNpZHJgLiBCb3RoIGFyZ3VtZW50cyBhY2NlcHQgZWl0aGVyXG4gKiBhIHN0cmluZyAocGFyc2VkIG9uIHRoZSBmbHkgdmlhIHtAbGluayBwYXJzZUlwfSAvIHtAbGluayBwYXJzZUNpZHJ9KVxuICogb3IgYW4gYWxyZWFkeS1wYXJzZWQgdmFsdWUgLSBwYXNzIHBhcnNlZCB2YWx1ZXMgaW4gaG90IGxvb3BzIHRvIHNraXBcbiAqIHJlLXBhcnNpbmcuIFJldHVybnMgYGZhbHNlYCBmb3IgdW5wYXJzZWFibGUgaW5wdXQgb3IgYSB2ZXJzaW9uXG4gKiBtaXNtYXRjaCAoYW4gSVB2NCBhZGRyZXNzIGlzIG5ldmVyIGluc2lkZSBhbiBJUHY2IGJsb2NrKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaXBJbkNpZHIoXCIxMC4xLjIuM1wiLCBcIjEwLjAuMC4wLzhcIik7ICAgLy8gdHJ1ZVxuICogaXBJbkNpZHIoXCIxMS4wLjAuMVwiLCBcIjEwLjAuMC4wLzhcIik7ICAgLy8gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlwSW5DaWRyKGlwOiBzdHJpbmcgfCBQYXJzZWRJcCwgY2lkcjogc3RyaW5nIHwgQ2lkcik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJzZWRJcCA9IHR5cGVvZiBpcCA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSXAoaXApIDogaXA7XG4gIGNvbnN0IHBhcnNlZENpZHIgPSB0eXBlb2YgY2lkciA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlQ2lkcihjaWRyKSA6IGNpZHI7XG4gIGlmICghcGFyc2VkSXAgfHwgIXBhcnNlZENpZHIgfHwgcGFyc2VkSXAudmVyc2lvbiAhPT0gcGFyc2VkQ2lkci52ZXJzaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1hc2sgPSBuZXR3b3JrTWFzayhJUF9CSVRTW3BhcnNlZENpZHIudmVyc2lvbl0sIHBhcnNlZENpZHIucHJlZml4KTtcbiAgcmV0dXJuIChwYXJzZWRJcC52YWx1ZSAmIG1hc2spID09PSBwYXJzZWRDaWRyLmJhc2U7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBDSURSIGluIGBjaWRyc2AgdGhhdCBjb250YWlucyBgaXBgLCBvciBgbnVsbGAgd2hlblxuICogbm9uZSBtYXRjaC4gYGNpZHJzYCBob2xkcyBwcmUtcGFyc2VkIHtAbGluayBDaWRyfSB2YWx1ZXMgKG9yIGFueVxuICogb2JqZWN0IGV4dGVuZGluZyBpdCksIHNvIGNhbGxlcnMgY2FuIGNhcnJ5IHNpZGUgbWV0YWRhdGEgb24gZWFjaFxuICogZW50cnkgKGUuZy4gYSByZWdpb24gdGFnKSBhbmQgcmVhZCBpdCBzdHJhaWdodCBvZmYgdGhlIHJldHVybmVkXG4gKiBtYXRjaC4gTGluZWFyIHNjYW47IHBhcnNlIHRoZSBhZGRyZXNzIG9uY2UgYnkgcGFzc2luZyBhXG4gKiB7QGxpbmsgUGFyc2VkSXB9LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByYW5nZXMgPSBbXCIxMC4wLjAuMC84XCIsIFwiMTkyLjE2OC4wLjAvMTZcIl1cbiAqICAgLm1hcChwYXJzZUNpZHIpXG4gKiAgIC5maWx0ZXIoKGMpOiBjIGlzIENpZHIgPT4gYyAhPT0gbnVsbCk7XG4gKiBmaW5kQ29udGFpbmluZ0NpZHIoXCIxMC4xLjIuM1wiLCByYW5nZXMpPy5jaWRyOyAvLyBcIjEwLjAuMC4wLzhcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZENvbnRhaW5pbmdDaWRyPFQgZXh0ZW5kcyBDaWRyPihcbiAgaXA6IHN0cmluZyB8IFBhcnNlZElwLFxuICBjaWRyczogSXRlcmFibGU8VD4sXG4pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnNlZElwID0gdHlwZW9mIGlwID09PSBcInN0cmluZ1wiID8gcGFyc2VJcChpcCkgOiBpcDtcbiAgaWYgKCFwYXJzZWRJcCkgcmV0dXJuIG51bGw7XG4gIGZvciAoY29uc3QgY2lkciBvZiBjaWRycykge1xuICAgIGlmIChjaWRyLnZlcnNpb24gIT09IHBhcnNlZElwLnZlcnNpb24pIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1hc2sgPSBuZXR3b3JrTWFzayhJUF9CSVRTW2NpZHIudmVyc2lvbl0sIGNpZHIucHJlZml4KTtcbiAgICBpZiAoKHBhcnNlZElwLnZhbHVlICYgbWFzaykgPT09IGNpZHIuYmFzZSkgcmV0dXJuIGNpZHI7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogV2hldGhlciBgaW5wdXRgJ3MgaG9zdCBpcyBhIGxvb3BiYWNrIGFkZHJlc3MgLSBgbG9jYWxob3N0YCwgYW4gSVB2NFxuICogYDEyNy4wLjAuMC84YCBhZGRyZXNzLCBvciBJUHY2IGA6OjFgIC0gaS5lLiBhIHNlcnZpY2UgcnVubmluZyBvbiB0aGlzXG4gKiBtYWNoaW5lIChlLmcuIGEgbG9jYWwgcmVnaXN0cnkpLiBBY2NlcHRzIGFueXRoaW5nIHtAbGluayB1cmxCdWlsZGVyfVxuICogY29lcmNlcyAoYSBVUkwgc3RyaW5nLCBgVVJMYCwgb3IgYHsgdXJsIH1gKTsgcmV0dXJucyBgZmFsc2VgIHdoZW4gdGhlXG4gKiBpbnB1dCBoYXMgbm8gcmVzb2x2YWJsZSBob3N0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHA6Ly9sb2NhbGhvc3Q6NDg3M1wiKTsgLy8gdHJ1ZVxuICogaXNMb29wYmFja0hvc3QoXCJodHRwOi8vMTI3LjAuMC4xXCIpOyAgICAgICAvLyB0cnVlXG4gKiBpc0xvb3BiYWNrSG9zdChcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnXCIpOyAvLyBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMb29wYmFja0hvc3QoaW5wdXQ6IFVybExpa2UpOiBib29sZWFuIHtcbiAgY29uc3QgaG9zdCA9IHVybEJ1aWxkZXIoaW5wdXQpPy5ob3N0bmFtZTtcbiAgaWYgKCFob3N0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChob3N0ID09PSBcImxvY2FsaG9zdFwiKSByZXR1cm4gdHJ1ZTtcbiAgLy8gYFVSTGAgYnJhY2tldHMgYW4gSVB2NiBob3N0IChgWzo6MV1gKTsgc3RyaXAgdGhlbSBiZWZvcmUgcGFyc2luZy5cbiAgY29uc3QgaXAgPSBob3N0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCBcIlwiKTtcbiAgcmV0dXJuIGlwSW5DaWRyKGlwLCBcIjEyNy4wLjAuMC84XCIpIHx8IGlwSW5DaWRyKGlwLCBcIjo6MS8xMjhcIik7XG59XG5cbi8qKlxuICogTmV0d29yayBtYXNrIGZvciBgcHJlZml4YCBsZWFkaW5nIGJpdHMgb2YgYSBgYml0c2Atd2lkZSBhZGRyZXNzIGFzIGFcbiAqIGBiaWdpbnRgOiB0aGUgdG9wIGBwcmVmaXhgIGJpdHMgc2V0LCB0aGUgbG93IGhvc3QgYml0cyBjbGVhcmVkLlxuICogYHByZWZpeCA9PT0gMGAgeWllbGRzIGAwbmAgKG1hdGNoZXMgZXZlcnl0aGluZyk7IGBwcmVmaXggPT09IGJpdHNgXG4gKiB5aWVsZHMgdGhlIGFsbC1vbmVzIG1hc2sgKG1hdGNoZXMgYSBzaW5nbGUgYWRkcmVzcykuXG4gKi9cbmZ1bmN0aW9uIG5ldHdvcmtNYXNrKGJpdHM6IG51bWJlciwgcHJlZml4OiBudW1iZXIpOiBiaWdpbnQge1xuICBjb25zdCBob3N0Qml0cyA9IEJpZ0ludChiaXRzIC0gcHJlZml4KTtcbiAgY29uc3QgZnVsbCA9ICgxbiA8PCBCaWdJbnQoYml0cykpIC0gMW47XG4gIHJldHVybiBmdWxsIF4gKCgxbiA8PCBob3N0Qml0cykgLSAxbik7XG59XG5cbi8qKiBQYXJzZSBhIGRvdHRlZC1xdWFkIElQdjQgbGl0ZXJhbCBpbnRvIGEgMzItYml0IHZhbHVlLCBlbHNlIGBudWxsYC4gKi9cbmZ1bmN0aW9uIHBhcnNlSXB2NChpbnB1dDogc3RyaW5nKTogYmlnaW50IHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gaW5wdXQuc3BsaXQoXCIuXCIpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgbGV0IHZhbHVlID0gMG47XG4gIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgIGlmICghSVBWNF9PQ1RFVC50ZXN0KHBhcnQpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBvY3RldCA9IE51bWJlcihwYXJ0KTtcbiAgICBpZiAob2N0ZXQgPiAyNTUpIHJldHVybiBudWxsO1xuICAgIHZhbHVlID0gKHZhbHVlIDw8IDhuKSB8IEJpZ0ludChvY3RldCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuIElQdjYgbGl0ZXJhbCBpbnRvIGEgMTI4LWJpdCB2YWx1ZSwgZWxzZSBgbnVsbGAuIEhhbmRsZXMgYDo6YFxuICogemVyby1jb21wcmVzc2lvbiAoYXQgbW9zdCBvbmNlKSBhbmQgYSB0cmFpbGluZyBlbWJlZGRlZCBJUHY0IGdyb3VwXG4gKiAoYDo6ZmZmZjoxLjIuMy40YCkuIFRoZSB6b25lIGlkLCBpZiBhbnksIGlzIGV4cGVjdGVkIHRvIGJlIHN0cmlwcGVkXG4gKiBieSB7QGxpbmsgcGFyc2VJcH0gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICovXG5mdW5jdGlvbiBwYXJzZUlwdjYoaW5wdXQ6IHN0cmluZyk6IGJpZ2ludCB8IG51bGwge1xuICBjb25zdCBoYWx2ZXMgPSBpbnB1dC5zcGxpdChcIjo6XCIpO1xuICBpZiAoaGFsdmVzLmxlbmd0aCA+IDIpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGhlYWQgPSBwYXJzZUhleHRldHMoaGFsdmVzWzBdISk7XG4gIGlmIChoZWFkID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBpZiAoaGFsdmVzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IHRhaWwgPSBwYXJzZUhleHRldHMoaGFsdmVzWzFdISk7XG4gICAgaWYgKHRhaWwgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIC8vIFwiOjpcIiBtdXN0IHN0YW5kIGluIGZvciBhdCBsZWFzdCBvbmUgYWxsLXplcm8gaGV4dGV0LlxuICAgIGNvbnN0IG1pc3NpbmcgPSA4IC0gaGVhZC5sZW5ndGggLSB0YWlsLmxlbmd0aDtcbiAgICBpZiAobWlzc2luZyA8IDEpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBoZXh0ZXRzVG9WYWx1ZShbLi4uaGVhZCwgLi4uQXJyYXkobWlzc2luZykuZmlsbCgwKSwgLi4udGFpbF0pO1xuICB9XG5cbiAgaWYgKGhlYWQubGVuZ3RoICE9PSA4KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGhleHRldHNUb1ZhbHVlKGhlYWQpO1xufVxuXG4vKipcbiAqIFBhcnNlIG9uZSBjb2xvbi1zZXBhcmF0ZWQgcnVuIG9mIElQdjYgaGV4dGV0cywgZXhwYW5kaW5nIGEgdHJhaWxpbmdcbiAqIGVtYmVkZGVkIElQdjQgZ3JvdXAgaW50byBpdHMgdHdvIGhleHRldHMuIEFuIGVtcHR5IHN0cmluZyB5aWVsZHMgYW5cbiAqIGVtcHR5IGxpc3QgKHRoZSBzaWRlIG9mIGEgbGVhZGluZyAvIHRyYWlsaW5nIGA6OmApLlxuICovXG5mdW5jdGlvbiBwYXJzZUhleHRldHMocGFydDogc3RyaW5nKTogbnVtYmVyW10gfCBudWxsIHtcbiAgaWYgKHBhcnQgPT09IFwiXCIpIHJldHVybiBbXTtcbiAgY29uc3QgdG9rZW5zID0gcGFydC5zcGxpdChcIjpcIik7XG4gIGNvbnN0IGhleHRldHM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV0hO1xuICAgIGlmICh0b2tlbi5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgIC8vIEEgZG90dGVkLXF1YWQgaXMgb25seSBsZWdhbCBhcyB0aGUgZmluYWwgZ3JvdXAuXG4gICAgICBpZiAoaSAhPT0gdG9rZW5zLmxlbmd0aCAtIDEpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgdjQgPSBwYXJzZUlwdjQodG9rZW4pO1xuICAgICAgaWYgKHY0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIGhleHRldHMucHVzaChOdW1iZXIoKHY0ID4+IDE2bikgJiAweGZmZmZuKSwgTnVtYmVyKHY0ICYgMHhmZmZmbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUlQVjZfSEVYVEVULnRlc3QodG9rZW4pKSByZXR1cm4gbnVsbDtcbiAgICAgIGhleHRldHMucHVzaChwYXJzZUludCh0b2tlbiwgMTYpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhleHRldHM7XG59XG5cbi8qKiBGb2xkIGV4YWN0bHkgOCBoZXh0ZXRzIGludG8gYSBzaW5nbGUgMTI4LWJpdCBgYmlnaW50YCwgZWxzZSBgbnVsbGAuICovXG5mdW5jdGlvbiBoZXh0ZXRzVG9WYWx1ZShoZXh0ZXRzOiBudW1iZXJbXSk6IGJpZ2ludCB8IG51bGwge1xuICBpZiAoaGV4dGV0cy5sZW5ndGggIT09IDgpIHJldHVybiBudWxsO1xuICBsZXQgdmFsdWUgPSAwbjtcbiAgZm9yIChjb25zdCBoZXh0ZXQgb2YgaGV4dGV0cykgdmFsdWUgPSAodmFsdWUgPDwgMTZuKSB8IEJpZ0ludChoZXh0ZXQpO1xuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
|
package/lib/src/string.js
CHANGED
|
@@ -506,4 +506,4 @@ export function toLabel(value, options) {
|
|
|
506
506
|
export function capitalize(value) {
|
|
507
507
|
return value ? value.charAt(0).toUpperCase() + value.slice(1) : value;
|
|
508
508
|
}
|
|
509
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQXlDNUMsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0UsaUVBQWlFO0FBQ2pFLE1BQU0sMEJBQTBCLEdBQUcsaURBQWlELENBQUM7QUFDckYsTUFBTSxnQ0FBZ0MsR0FBRyxlQUFlLENBQUM7QUFDekQsTUFBTSxrQkFBa0IsR0FBNEQ7SUFDbEYsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakIsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCw2RUFBNkU7SUFDN0UsK0RBQStEO0lBQy9ELENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUNGLE1BQU0sVUFBVSxHQUFHLG9EQUFvRCxDQUFDO0FBQ3hFLE1BQU0sWUFBWSxHQUFHLDBFQUEwRSxDQUFDO0FBRWhHLE1BQU0saUJBQWlCLEdBQTRCO0lBQ2pELFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLEtBQUs7SUFDakIsYUFBYSxFQUFFLEtBQUs7SUFDcEIsZUFBZSxF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SyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFpQyxFQUFFLEdBQVc7SUFDL0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUFFLFNBQVM7UUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYSxFQUFFLElBQVk7SUFDbkQsT0FBTyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhLEVBQUUsT0FBeUI7SUFDOUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWE7SUFDdEMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBzdHJpbmcgdG9vbGtpdDogdG9rZW5pemF0aW9uLCBpZGVudGlmaWVyIC8gc2x1Z1xuICogZ2VuZXJhdGlvbiAod2l0aCBoYXNoLXN1ZmZpeCBjb2xsaXNpb24gcmVzaXN0YW5jZSksIEhUTUwgZXNjYXBpbmcsXG4gKiBoZWFkZXItdmFsdWUgdHJpbW1pbmcsIGFuZCBhIG5lc3RlZCBkZXNjcmlwdGlvbi10cmVlIHJlbmRlcmVyIGZvclxuICogbG9uZy1mb3JtIExMTSBwcm9tcHQgLyB0b29sLWRlc2NyaXB0aW9uIHRleHQuIERlcGVuZHMgb25seSBvbiB0aGVcbiAqIGxvY2FsIHtAbGluayBmbnZIYXNoV2l0aE9wdGlvbnN9IGZvciBkZXRlcm1pbmlzdGljIGhhc2ggc3VmZml4ZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBmbnZIYXNoV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi9oYXNoXCI7XG5cbi8qKlxuICogT3B0aW9ucyBjb250cm9sbGluZyB7QGxpbmsgdG9rZW5pemVXaXRoT3B0aW9uc30uIEFsbCBkZWZhdWx0IG9mZiBleGNlcHRcbiAqIGBjYW1lbENhc2VgLlxuICpcbiAqIC0gYGRpc3RpbmN0YCAtIGRyb3AgZHVwbGljYXRlIHRva2VucyAoZmlyc3Qgb2NjdXJyZW5jZSB3aW5zKS5cbiAqIC0gYGxvd2VyQ2FzZWAgLSBsb3dlcmNhc2UgZXZlcnkgdG9rZW4uXG4gKiAtIGBjYXBpdGFsaXplYCAtIHVwcGVyLWNhc2UgZWFjaCB0b2tlbidzIGZpcnN0IGxldHRlciAodGhlblxuICogICB7QGxpbmsgVE9LRU5JWkVfT1ZFUlJJREVTfSBmaXggdXAgYGFpYCAtPiBgQUlgIGFuZCBgdjJgIC0+IGBWMmApLlxuICogLSBgb21pdFVyaVNjaGVtZWAgLSBzdHJpcCBhIGxlYWRpbmcgYHNjaGVtZTovL2AgYmVmb3JlIHRva2VuaXppbmcuXG4gKiAtIGBvbWl0RW1haWxEb21haW5gIC0ga2VlcCBvbmx5IHRoZSBsb2NhbCBwYXJ0IG9mIGFuIGVtYWlsLlxuICogLSBgY2FtZWxDYXNlYCAtIHNwbGl0IG9uIGNhbWVsQ2FzZSBib3VuZGFyaWVzIC8gZGlnaXQgcnVucyAvIGFjcm9ueW1zXG4gKiAgIChkZWZhdWx0IGB0cnVlYCk7IHdoZW4gYGZhbHNlYCwgc3BsaXQgb25seSBvbiBub24tYWxwaGFudW1lcmljcy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5pemVPcHRpb25zID0ge1xuICBkaXN0aW5jdD86IGJvb2xlYW47XG4gIGxvd2VyQ2FzZT86IGJvb2xlYW47XG4gIGNhcGl0YWxpemU/OiBib29sZWFuO1xuICBvbWl0VXJpU2NoZW1lPzogYm9vbGVhbjtcbiAgb21pdEVtYWlsRG9tYWluPzogYm9vbGVhbjtcbiAgY2FtZWxDYXNlPzogYm9vbGVhbjtcbn07XG5cbi8vIEtleXMvaWRlbnRpZmllcnMvc2x1Z3MgYXJlIGFsd2F5cyBsb3dlcmNhc2VkOyBgbG93ZXJDYXNlYCBpcyBub3QgYVxuLy8gY2FsbGVyLWNvbmZpZ3VyYWJsZSBvcHRpb24uXG5leHBvcnQgdHlwZSBLZXlPcHRpb25zID0gT21pdDxUb2tlbml6ZU9wdGlvbnMsIFwibG93ZXJDYXNlXCIgfCBcImNhcGl0YWxpemVcIj4gJiB7XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgdHJ1bmNhdGVTdHJhdGVneT86IFwiaGFzaFwiIHwgXCJ0cmltXCIgfCBcImVtcHR5XCI7XG4gIHRydW5jYXRlSGFzaExlbmd0aD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIElkZW50aWZpZXJPcHRpb25zID0gS2V5T3B0aW9ucyAmIHtcbiAgZGVsaW1pdGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBSZXNvbHZlZFRva2VuaXplT3B0aW9ucyA9IFJlcXVpcmVkPFRva2VuaXplT3B0aW9ucz47XG50eXBlIFJlc29sdmVkSWRlbnRpZmllck9wdGlvbnMgPSBSZXF1aXJlZDxcbiAgSWRlbnRpZmllck9wdGlvbnMgJiBQaWNrPFRva2VuaXplT3B0aW9ucywgXCJsb3dlckNhc2VcIiB8IFwiY2FwaXRhbGl6ZVwiPlxuPjtcblxuLy8gQSBsZWFkaW5nIGB2YC9gVmAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgZGlnaXRzIChhIHZlcnNpb24gbWFya2VyIGxpa2Vcbi8vIGB2MmApIGlzIGtlcHQgYXMgT05FIHRva2VuIGluc3RlYWQgb2Ygc3BsaXR0aW5nIGludG8gYHZgICsgYDJgOyBpdCBsZWFkcyB0aGVcbi8vIGFsdGVybmF0aW9uIHNvIGl0IHdpbnMgb3ZlciB0aGUgZ2VuZXJpYyBsZXR0ZXIgLyBkaWdpdCBydW5zLiBFdmVyeXRoaW5nIGVsc2Vcbi8vIGlzIHRoZSB1c3VhbCBjYW1lbENhc2Ugd29yZCAvIG51bWJlciAvIGFsbC1jYXBzLWFjcm9ueW0gc3BsaXQuXG5jb25zdCBUT0tFTklaRV9DQU1FTF9DQVNFX1JFR0VYUCA9IC9bdlZdWzAtOV0rfFtBLVpdP1thLXpdK3xbMC05XSt8W0EtWl0rKD8hW2Etel0pL2c7XG5jb25zdCBUT0tFTklaRV9OT05fQUxQSEFOVU1FUklDX1JFR0VYUCA9IC9bYS16QS1aMC05XSsvZztcbmNvbnN0IFRPS0VOSVpFX09WRVJSSURFUzogKCh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBUb2tlbml6ZU9wdGlvbnMpID0+IHN0cmluZylbXSA9IFtcbiAgKHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6ZSAmJiB0b2tlbi50b0xvd2VyQ2FzZSgpID09PSBcImFpXCIpIHtcbiAgICAgIHJldHVybiBcIkFJXCI7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbiAgfSxcbiAgLy8gVmVyc2lvbiBtYXJrZXIgYHYyYCAtPiBgVjJgIHdoZW4gY2FwaXRhbGl6aW5nICh0aGUgbGVhZGluZyBgdmAgdXBwZXJjYXNlcyxcbiAgLy8gdGhlIGRpZ2l0cyBzdGF5KSwgc28gaXQgcmVhZHMgYXMgb25lIHVuaXQgcmF0aGVyIHRoYW4gXCJWIDJcIi5cbiAgKHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6ZSAmJiAvXnZbMC05XSskLy50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuIGBWJHt0b2tlbi5zbGljZSgxKX1gO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG4gIH0sXG5dO1xuY29uc3QgVVJJX1JFR0VYUCA9IC9eKFthLXpBLVpdW2EtekEtWjAtOSsuLV0qKT86XFwvXFwvKFteXFxzLz8jXVteXFxzXSopPyQvO1xuY29uc3QgRU1BSUxfUkVHRVhQID0gL14oW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSspQChbYS16QS1aMC05LV0rKD86XFwuW2EtekEtWjAtOS1dKykrKSQvO1xuXG5jb25zdCBUT0tFTklaRV9ERUZBVUxUUzogUmVzb2x2ZWRUb2tlbml6ZU9wdGlvbnMgPSB7XG4gIGRpc3RpbmN0OiBmYWxzZSxcbiAgbG93ZXJDYXNlOiBmYWxzZSxcbiAgY2FwaXRhbGl6ZTogZmFsc2UsXG4gIG9taXRVcmlTY2hlbWU6IGZhbHNlLFxuICBvbWl0RW1haWxEb21haW46IGZhbHNlLFxuICBjYW1lbENhc2U6IHRydWUsXG59O1xuXG5jb25zdCBJREVOVElGSUVSX0RFRkFVTFRTOiBSZXNvbHZlZElkZW50aWZpZXJPcHRpb25zID0ge1xuICAuLi5UT0tFTklaRV9ERUZBVUxUUyxcbiAgbG93ZXJDYXNlOiB0cnVlLFxuICBtYXhMZW5ndGg6IEluZmluaXR5LFxuICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICBkZWxpbWl0ZXI6IFwiLVwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uKiB0b2tlbml6ZVdpdGhPcHRpb25zKFxuICBvcHRpb25zOiBUb2tlbml6ZU9wdGlvbnMsXG4gIC4uLnZhbHVlczogdW5rbm93bltdXG4pOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkVG9rZW5pemVPcHRpb25zID0geyAuLi5UT0tFTklaRV9ERUZBVUxUUywgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBzZWVuID0gb3B0cy5kaXN0aW5jdCA/IG5ldyBTZXQ8c3RyaW5nPigpIDogdW5kZWZpbmVkO1xuICBjb25zdCByZWdleHAgPSBvcHRzLmNhbWVsQ2FzZSA/IFRPS0VOSVpFX0NBTUVMX0NBU0VfUkVHRVhQIDogVE9LRU5JWkVfTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFA7XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgbGV0IHN0cmluZ1ZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xuICAgIGlmICghc3RyaW5nVmFsdWUpIGNvbnRpbnVlO1xuICAgIGlmIChvcHRzLm9taXRVcmlTY2hlbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc3RyaW5nVmFsdWUubWF0Y2goVVJJX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMl0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKG9wdHMub21pdEVtYWlsRG9tYWluKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHN0cmluZ1ZhbHVlLm1hdGNoKEVNQUlMX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMV0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKCFzdHJpbmdWYWx1ZSkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0b2tlbk1hdGNoIG9mIHN0cmluZ1ZhbHVlLm1hdGNoQWxsKHJlZ2V4cCkpIHtcbiAgICAgIGxldCB0b2tlbiA9IHRva2VuTWF0Y2hbMF0hO1xuICAgICAgaWYgKG9wdHMubG93ZXJDYXNlKSB0b2tlbiA9IHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAob3B0cy5jYXBpdGFsaXplKSB0b2tlbiA9IGNhcGl0YWxpemUodG9rZW4pO1xuICAgICAgaWYgKCF0b2tlbikgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIFRPS0VOSVpFX09WRVJSSURFUykge1xuICAgICAgICB0b2tlbiA9IG92ZXJyaWRlKHRva2VuLCBvcHRzKTtcbiAgICAgICAgaWYgKCF0b2tlbikgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoIXRva2VuIHx8IHNlZW4/Lmhhcyh0b2tlbikpIGNvbnRpbnVlO1xuICAgICAgc2Vlbj8uYWRkKHRva2VuKTtcbiAgICAgIHlpZWxkIHRva2VuO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHRva2VuaXplKC4uLnZhbHVlczogdW5rbm93bltdKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICB5aWVsZCogdG9rZW5pemVXaXRoT3B0aW9ucyh7fSwgLi4udmFsdWVzKTtcbn1cblxuLyoqXG4gKiBKb2luIHRva2VuaXplZCB2YWx1ZXMgd2l0aCBgZGVsaW1pdGVyYC4gV2hlbiB0aGUgbmV4dCB0b2tlbiB3b3VsZCBwdXNoIHRoZVxuICogcmVzdWx0IG92ZXIgYG1heExlbmd0aGA6IGB0cmltYCBzdG9wcyBhZGRpbmc7IGBlbXB0eWAgcmV0dXJucyBgXCJcImA7IGBoYXNoYFxuICogYXBwZW5kcyBhIGRpZ2VzdCBvZiBhY2NlcHRlZCB0b2tlbnMgcGx1cyB0aGUgb3ZlcmZsb3cgdG9rZW4gaWYgdGhlIHJlc3VsdFxuICogc3RpbGwgZml0cywgb3RoZXJ3aXNlIGBcIlwiYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSWRlbnRpZmllcldpdGhPcHRpb25zKG9wdGlvbnM6IElkZW50aWZpZXJPcHRpb25zLCAuLi52YWx1ZXM6IHVua25vd25bXSk6IHN0cmluZyB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkSWRlbnRpZmllck9wdGlvbnMgPSB7XG4gICAgLi4uSURFTlRJRklFUl9ERUZBVUxUUyxcbiAgICAuLi5vcHRpb25zLFxuICAgIGxvd2VyQ2FzZTogdHJ1ZSxcbiAgfTtcbiAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbml6ZVdpdGhPcHRpb25zKG9wdHMsIC4uLnZhbHVlcykpIHtcbiAgICBjb25zdCBzZXBMZW5ndGggPSB0b2tlbnMubGVuZ3RoID4gMCA/IG9wdHMuZGVsaW1pdGVyLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IGN1cnJlbnRMZW5ndGggKyBzZXBMZW5ndGggKyB0b2tlbi5sZW5ndGg7XG5cbiAgICBpZiAobmV4dExlbmd0aCA+IG9wdHMubWF4TGVuZ3RoKSB7XG4gICAgICBpZiAob3B0cy50cnVuY2F0ZVN0cmF0ZWd5ID09PSBcImVtcHR5XCIpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKG9wdHMudHJ1bmNhdGVTdHJhdGVneSA9PT0gXCJ0cmltXCIpIGJyZWFrO1xuXG4gICAgICBjb25zdCBoYXNoID0gZGlnZXN0VG9rZW5zKG9wdHMudHJ1bmNhdGVIYXNoTGVuZ3RoLCB0b2tlbnMsIHRva2VuKTtcbiAgICAgIGlmIChjdXJyZW50TGVuZ3RoICsgc2VwTGVuZ3RoICsgaGFzaC5sZW5ndGggPD0gb3B0cy5tYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4ob3B0cy5kZWxpbWl0ZXIpICsgb3B0cy5kZWxpbWl0ZXIgKyBoYXNoIDogaGFzaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjdXJyZW50TGVuZ3RoID0gbmV4dExlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnMuam9pbihvcHRzLmRlbGltaXRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0lkZW50aWZpZXIoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogU2x1Z2lmaWVkIGlkZW50aWZpZXI6IHNhbWUgcnVsZXMgYXMge0BsaW5rIHRvSWRlbnRpZmllcldpdGhPcHRpb25zfSB3aXRoIHRoZVxuICogZGVsaW1pdGVyIGZvcmNlZCB0byBgLWAuIEFjY2VwdHMge0BsaW5rIEtleU9wdGlvbnN9IHNvIGNhbGxlcnMgY2Fubm90XG4gKiBvdmVycmlkZSB0aGUgZGVsaW1pdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TbHVnV2l0aE9wdGlvbnMob3B0aW9uczogS2V5T3B0aW9ucywgLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyAuLi5vcHRpb25zLCBkZWxpbWl0ZXI6IFwiLVwiIH0sIC4uLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NsdWcoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbHVnV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogVHJpbSBgdmFsdWVgIGFuZCByZXR1cm4gYG51bGxgIGZvciBub24tc3RyaW5ncywgYHVuZGVmaW5lZGAsIG9yXG4gKiBzdHJpbmdzIHRoYXQgYXJlIGVtcHR5IGFmdGVyIHRyaW1taW5nLiBMZXRzIGNhbGwgc2l0ZXMgY29sbGFwc2UgdGhlXG4gKiBjb21tb25cbiAqXG4gKiBgYGB0c1xuICogdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi50cmltKCkgPyB2LnRyaW0oKSA6IG51bGxcbiAqIGBgYFxuICpcbiAqIGRhbmNlIGludG8gYSBzaW5nbGUgaGVscGVyLiBVc2VmdWwgZm9yIEhUVFAgaGVhZGVyIC8gcXVlcnkgLyBmb3JtXG4gKiBleHRyYWN0b3JzIHdoZXJlIGRvd25zdHJlYW0gY29kZSB3YW50cyBgc3RyaW5nIHwgbnVsbGAgdG8gZHJpdmUgYVxuICogY2hlYXAgYD8/YCAvIGBpZiAoeClgIGNhc2NhZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9OdWxsKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCA/IHRyaW1tZWQgOiBudWxsO1xufVxuXG4vLyBDb25maWcgbGlzdHMgYXJyaXZlIGVpdGhlciBhbHJlYWR5IHNwbGl0IChhbiBhcnJheSkgb3IgYXMgb25lIGVudi12YXIgc3RyaW5nXG4vLyB3aXRoIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcyBhbmQvb3Igd2hpdGVzcGFjZS5cbmNvbnN0IExJU1RfU0VQQVJBVE9SX1JFR0VYUCA9IC9bXFxzLF0rLztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBjb25maWcgbGlzdCB0aGF0IG1heSBhcnJpdmUgYXMgYW4gYXJyYXkgb3IgYXMgYSBzaW5nbGVcbiAqIGNvbW1hL3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzogc3BsaXQsIGFwcGx5IGB0cmFuc2Zvcm1gLCBkcm9wIGVtcHRpZXMsXG4gKiBhbmQgZGUtZHVwbGljYXRlIChmaXJzdCBvY2N1cnJlbmNlIHdpbnMpLlxuICpcbiAqIFRoaXMgaXMgdGhlIHNoYXBlIGV2ZXJ5IGFsbG93LWxpc3QgLyBmYWxsYmFjay1vcmRlciBzZXR0aW5nIGluIHRoaXMgcmVwb1xuICogdGFrZXMsIGJlY2F1c2UgdGhlIHNhbWUgdmFsdWUgY2FuIGNvbWUgZnJvbSB0eXBlZCBjb25maWcgKGBzdHJpbmdbXWApIG9yIGZyb21cbiAqIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIChgXCJhLCBiIGNcImApLiBQYXNzIGB0cmFuc2Zvcm1gIHRvIG5vcm1hbGl6ZSBlbnRyaWVzXG4gKiBhcyB0aGV5IGFyZSByZWFkOyBpdCBkZWZhdWx0cyB0byB0cmltbWluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VMaXN0KFwiZG9jcy5leGFtcGxlLmNvbSwgKi5kYXRhYnJpY2tzLmNvbVwiKTtcbiAqIHBhcnNlTGlzdChwcm9jZXNzLmVudi5NT0RFTF9GQUxMQkFDS1MpO1xuICogcGFyc2VMaXN0KHJhdywgbm9ybWFsaXplVXJsUGF0dGVybik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpc3QoXG4gIHJhdzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsLFxuICB0cmFuc2Zvcm06IChlbnRyeTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoZW50cnkpID0+IGVudHJ5LnRyaW0oKSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZW50cmllcyA9XG4gICAgdHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIiA/IHJhdy5zcGxpdChMSVNUX1NFUEFSQVRPUl9SRUdFWFApIDogQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdHJhbnNmb3JtKGVudHJ5KTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgc2Vlbi5oYXMobm9ybWFsaXplZCkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgIG91dC5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICoge0BsaW5rIHRyaW1Ub051bGx9IHdpdGggYW4gZW1wdHktc3RyaW5nIG1pc3MgaW5zdGVhZCBvZiBgbnVsbGAsIGZvciBjYWxsZXJzXG4gKiB0aGF0IGJ1aWxkIGEgc3RyaW5nIHVuY29uZGl0aW9uYWxseSBhbmQgdHJlYXQgXCJhYnNlbnRcIiBhcyBcIlwiLlxuICpcbiAqIFJlYWRpbmcgbG9vc2VseS10eXBlZCBKU09OIGlzIHRoZSBtb3RpdmF0aW5nIGNhc2U6IGEgZmllbGQgdGhhdCBzaG91bGQgYmUgYVxuICogc3RyaW5nIG1heSBiZSBtaXNzaW5nIG9yIHRoZSB3cm9uZyB0eXBlLCBhbmQgdGhlIGNhbGxlciB3YW50cyBgXCJcImAgcmF0aGVyXG4gKiB0aGFuIGEgbnVsbCBjaGVjayBhdCBldmVyeSBhY2Nlc3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRpdGxlID0gdHJpbVRvRW1wdHkocmVjb3JkLnRpdGxlKTsgLy8gYWx3YXlzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiB0cmltVG9OdWxsKHZhbHVlKSA/PyBcIlwiO1xufVxuXG4vKipcbiAqIFRyaW0gdGhlIGZpcnN0IHVzYWJsZSBzdHJpbmcgb3V0IG9mIGB2YWx1ZWAuIFJldHVybnMgYG51bGxgIHdoZW5cbiAqIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGBudWxsYCwgYW4gZW1wdHkgc3RyaW5nLCBvciBhbiBhcnJheSB3aG9zZVxuICogZmlyc3Qgc3RyaW5nIG1lbWJlciBpcyBlbXB0eS4gTWlycm9ycyBob3cgRXhwcmVzcyAvIE5vZGUgaGVhZGVyXG4gKiBhY2Nlc3NvcnMgZXhwb3NlIHNpbmdsZSB2cy4gcmVwZWF0ZWQgaGVhZGVycyAtIHRoZSBmaXJzdFxuICogbm9uLWVtcHR5IGVudHJ5IHdpbnMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBpZ25vcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb25FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltVG9OdWxsKGl0ZW0pO1xuICAgICAgaWYgKHRyaW1tZWQpIHJldHVybiB0cmltbWVkO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdHJpbVRvTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRoZSBmaXZlIGNoYXJhY3RlcnMgc2lnbmlmaWNhbnQgaW4gSFRNTCB0ZXh0IGFuZFxuICogZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIChgJmAsIGA8YCwgYD5gLCBgXCJgLCBgJ2ApIHNvIGFuXG4gKiB1bnRydXN0ZWQgc3RyaW5nIGNhbiBiZSBpbnRlcnBvbGF0ZWQgaW50byBtYXJrdXAgd2l0aG91dCBicmVha2luZ1xuICogb3V0IG9mIGl0cyBjb250ZXh0LiBgJmAgaXMgcmVwbGFjZWQgZmlyc3Qgc28gYW1wZXJzYW5kcyBpbnRyb2R1Y2VkXG4gKiBieSB0aGUgbGF0ZXIgcmVwbGFjZW1lbnRzIGFyZW4ndCBkb3VibGUtZXNjYXBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbiAgICAucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpO1xufVxuXG4vKipcbiAqIFNsdWdpZnkgYHZhbHVlYCAodXNpbmcgdGhlIHN0YW5kYXJkIHtAbGluayB0b0lkZW50aWZpZXJXaXRoT3B0aW9uc31cbiAqIHRva2VuaXplciArIGRlbGltaXRlciBydWxlcykgYW5kICoqYWx3YXlzKiogc3VmZml4IGEgc2hvcnRcbiAqIGRldGVybWluaXN0aWMgaGFzaC4gVXNlIHdoZW4geW91IG5lZWQgYSBzdGFibGUsIHNsdWdpZmllZCBpZCB0aGF0XG4gKiBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgZGVzY3JpcHRpb25zIHNoYXJpbmcgdGhlIHNhbWVcbiAqIGxlYWRpbmcgdG9rZW5zICh0b29sIGlkcywgY2FjaGUga2V5cywgZXRjLikuXG4gKlxuICogQmVoYXZpb3VyIGRpZmZlcnMgZnJvbSBgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGgsXG4gKiB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIiB9KWA6IHRoYXQgaGVscGVyIG9ubHkgYXBwZW5kcyBhIGhhc2ggd2hlblxuICogdGhlIHNsdWcgKm92ZXJmbG93cyogYG1heExlbmd0aGAuIFRoaXMgaGVscGVyIGFwcGVuZHMgYSBoYXNoXG4gKiB1bmNvbmRpdGlvbmFsbHkgc28gdGhlIHJlc3VsdCBpcyBjb2xsaXNpb24tcmVzaXN0YW50IGV2ZW4gZm9yXG4gKiBzaG9ydCBpbnB1dHMuIFRoZSBoYXNoIGlzIGNvbXB1dGVkIG92ZXIgdGhlIHJhdyBgdmFsdWVgIHNvIHR3b1xuICogZGVzY3JpcHRpb25zIHByb2R1Y2luZyB0aGUgc2FtZSBzbHVnIHN0aWxsIGdldCBkaWZmZXJlbnQgaWRzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFNvdXJjZSBzdHJpbmcgKHR5cGljYWxseSBhIHRvb2wvYWdlbnQgZGVzY3JpcHRpb24pLlxuICogQHBhcmFtIG9wdGlvbnMuZGVsaW1pdGVyIC0gVG9rZW4gc2VwYXJhdG9yIChkZWZhdWx0IGBcIl9cImApLlxuICogQHBhcmFtIG9wdGlvbnMuc2x1Z01heExlbmd0aCAtIENhcCBvbiB0aGUgc2x1ZyBwb3J0aW9uICh0aGUgcGFydFxuICogICBiZWZvcmUgdGhlIGhhc2gpLiBEZWZhdWx0IDMyLlxuICogQHBhcmFtIG9wdGlvbnMuaGFzaExlbmd0aCAtIExlbmd0aCBvZiB0aGUgc3VmZml4IHByb2R1Y2VkIGJ5XG4gKiAgIHtAbGluayBmbnZIYXNoV2l0aE9wdGlvbnN9IChDcm9ja2ZvcmQtc3R5bGUgYmFzZS0zMiBhbHBoYWJldCwgbWF4IDdcbiAqICAgY2hhcnMpLiBEZWZhdWx0IDYuXG4gKiBAcGFyYW0gb3B0aW9ucy5mYWxsYmFja1ByZWZpeCAtIFByZWZpeCB1c2VkIHdoZW4gdGhlIHNsdWcgaXMgZW1wdHlcbiAqICAgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuIERlZmF1bHQgYFwiaWRcImAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXF1ZVNsdWcoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gICAgc2x1Z01heExlbmd0aD86IG51bWJlcjtcbiAgICBoYXNoTGVuZ3RoPzogbnVtYmVyO1xuICAgIGZhbGxiYWNrUHJlZml4Pzogc3RyaW5nO1xuICB9ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciA/PyBcIl9cIjtcbiAgY29uc3Qgc2x1Z01heExlbmd0aCA9IG9wdGlvbnMuc2x1Z01heExlbmd0aCA/PyAzMjtcbiAgY29uc3QgaGFzaExlbmd0aCA9IG9wdGlvbnMuaGFzaExlbmd0aCA/PyA2O1xuICBjb25zdCBmYWxsYmFja1ByZWZpeCA9IG9wdGlvbnMuZmFsbGJhY2tQcmVmaXggPz8gXCJpZFwiO1xuICBjb25zdCBzbHVnID0gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoXG4gICAgeyBkZWxpbWl0ZXIsIG1heExlbmd0aDogc2x1Z01heExlbmd0aCwgdHJ1bmNhdGVTdHJhdGVneTogXCJ0cmltXCIgfSxcbiAgICB2YWx1ZSxcbiAgKTtcbiAgY29uc3Qgc3VmZml4ID0gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoOiBoYXNoTGVuZ3RoIH0sIHZhbHVlKTtcbiAgcmV0dXJuIHNsdWcgPyBgJHtzbHVnfSR7ZGVsaW1pdGVyfSR7c3VmZml4fWAgOiBgJHtmYWxsYmFja1ByZWZpeH0ke2RlbGltaXRlcn0ke3N1ZmZpeH1gO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUb2tlbnMobGVuZ3RoOiBudW1iZXIsIHBhcnRzOiByZWFkb25seSBzdHJpbmdbXSwgZXh0cmE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY29tYmluZWQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIGNvbWJpbmVkICs9IHBhcnQgKyBcIlxcMFwiO1xuICBpZiAoZXh0cmEgIT09IHVuZGVmaW5lZCkgY29tYmluZWQgKz0gZXh0cmEgKyBcIlxcMFwiO1xuICByZXR1cm4gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoIH0sIGNvbWJpbmVkKTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgaW4gdGhlIGRlc2NyaXB0aW9uIHRyZWUgY29uc3VtZWQgYnkge0BsaW5rIHRvRGVzY3JpcHRpb259LlxuICpcbiAqIC0gYHN0cmluZ2AgLSBhIHRleHQgcGFyYWdyYXBoLlxuICogLSBgRGVzY3JpcHRpb25bXWAgLSBhIHNlcXVlbmNlIG9mIHN0YWNrZWQgYmxvY2tzIGF0IHRoZSBzYW1lIGxldmVsXG4gKiAgIChubyBsaXN0IG1hcmtlcnMpLiBQbGFpbiB0ZXh0IGFkamFjZW50IHRvIGEgbGlzdCAoZWl0aGVyIGRpcmVjdGlvbilcbiAqICAgZmx1c2hlcyB0b2dldGhlciBzbyB0aGUgcHJvc2UgcmVhZHMgYXMgYSBsZWFkLWluIG9yIHRyYWlsaW5nXG4gKiAgIHN1bW1hcnkuIFR3byB0ZXh0IHBhcmFncmFwaHMsIHR3byBhZGphY2VudCBsaXN0cywgYW5kIGFueXRoaW5nXG4gKiAgIHRvdWNoaW5nIGEgbWFwIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsuXG4gKiAtIGB7IGJ1bGxldHM6IFsuLi5dIH1gIC8gYHsgbnVtYmVyZWQ6IFsuLi5dIH1gIC0gZXhwbGljaXQgbGlzdC4gQVxuICogICBsaXN0IG9mIG9uZSBiYXJlIHN0cmluZyBkcm9wcyBpdHMgbWFya2VyIChgLWAgLyBgMS5gKTsgYSBsaXN0IG9mXG4gKiAgIG9uZSBpdGVtIHdpdGggbmVzdGVkIGNoaWxkcmVuIGtlZXBzIGl0cyBtYXJrZXIgYXMgdGhlIHZpc3VhbCBhbmNob3JcbiAqICAgZm9yIHRoZSBpbmRlbnRlZCBjaGlsZHJlbi5cbiAqIC0gYW55IG90aGVyIG9iamVjdCAtIGhlYWRlcnMgbWFwOiBlYWNoIGtleSBiZWNvbWVzIGEgYEhlYWRlcjpgIGxpbmVcbiAqICAgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGUgcmVuZGVyZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0aW9uID0gc3RyaW5nIHwgcmVhZG9ubHkgRGVzY3JpcHRpb25bXSB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogRGVzY3JpcHRpb24gfTtcblxuY29uc3QgTElTVF9LRVlTID0gW1wiYnVsbGV0c1wiLCBcIm51bWJlcmVkXCJdIGFzIGNvbnN0O1xudHlwZSBMaXN0S2luZCA9ICh0eXBlb2YgTElTVF9LRVlTKVtudW1iZXJdO1xuXG4vKipcbiAqIEZvcm1hdCBhIG5lc3RlZCBkZXNjcmlwdGlvbiB0cmVlIGFzIGEgTWFya2Rvd24taXNoIHN0cmluZyBzdWl0YWJsZVxuICogZm9yIGFuIExMTSBzeXN0ZW0gcHJvbXB0LCBab2QgYC5kZXNjcmliZSgpYCBibG9jaywgTWFzdHJhIHRvb2xcbiAqIGRlc2NyaXB0aW9uLCBvciBhbnkgb3RoZXIgbG9uZy1mb3JtIHRleHQgZGVzdGluYXRpb24uXG4gKlxuICogRXZlcnkgc3RyaW5nIHNlY3Rpb24gaXMgZGVkZW50ZWQgKGNvbW1vbiBsZWFkaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQpLFxuICogcmlnaHQtdHJpbW1lZCBsaW5lIGJ5IGxpbmUsIGFuZCBmcmVlZCBvZiBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmtcbiAqIGxpbmVzLCBzbyBjYWxsZXJzIGNhbiB3cml0ZSBtdWx0aS1saW5lIHRlbXBsYXRlIGxpdGVyYWxzIGluZGVudGVkXG4gKiBuYXR1cmFsbHkgaW4gc291cmNlIHdpdGhvdXQgbGVha2luZyB0aGF0IGluZGVudGF0aW9uIGludG8gdGhlXG4gKiBjb25zdW1lci1mYWNpbmcgb3V0cHV0LiBQbGFpbi1zdHJpbmcgaW5wdXRzIGZsb3cgdGhyb3VnaCB1bmNoYW5nZWRcbiAqIGFwYXJ0IGZyb20gdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBwYXNzLCBzbyBhIHNpbmdsZSBtdWx0aS1saW5lXG4gKiB0ZW1wbGF0ZSBsaXRlcmFsIHdvcmtzIGRpcmVjdGx5OlxuICpcbiAqIGBgYHRzXG4gKiB0b0Rlc2NyaXB0aW9uKGBcbiAqICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBcIiR7YWxpYXN9XCIgYSBxdWVzdGlvbi5cbiAqICAgUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXMuXG4gKiBgKTtcbiAqIC8vIEFzayB0aGUgR2VuaWUgc3BhY2UgXCJkZWZhdWx0XCIgYSBxdWVzdGlvbi5cbiAqIC8vIFBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzLlxuICpcbiAqIHRvRGVzY3JpcHRpb24oW1xuICogICBgXG4gKiAgICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogICAgIFBocmFzZSBpdCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUuXG4gKiAgIGAsXG4gKiAgIHsgYnVsbGV0czogW1xuICogICAgIFtcIlBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzXCIsIHsgbnVtYmVyZWQ6IFtcIml0ZW1cIiwgXCJpdGVtXCJdIH1dLFxuICogICBdfSxcbiAqICAgeyBJbnN0cnVjdGlvbnM6IFwiUmVwbHkgd2l0aCB0aGUgU1FMIG9ubHkuXCIgfSxcbiAqIF0pO1xuICogLy8gQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogLy8gUGhyYXNlIGl0IGZyb20gdGhlIHVzZXIncyBwZXJzcGVjdGl2ZS5cbiAqIC8vIC0gUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXNcbiAqIC8vICAgMS4gaXRlbVxuICogLy8gICAyLiBpdGVtXG4gKiAvL1xuICogLy8gSW5zdHJ1Y3Rpb25zOlxuICogLy9cbiAqIC8vIFJlcGx5IHdpdGggdGhlIFNRTCBvbmx5LlxuICogYGBgXG4gKlxuICogU2VlIHtAbGluayBEZXNjcmlwdGlvbn0gZm9yIHRoZSBub2RlIGdyYW1tYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0aW9uKG5vZGU6IERlc2NyaXB0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbmRlckJsb2NrKG5vZGUsIFwiXCIpXG4gICAgLnJlcGxhY2UoL1sgXFx0XSskL2dtLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXG4rJC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCbG9jayhub2RlOiBEZXNjcmlwdGlvbiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcHJlcGVuZFBhZChkZWRlbnRTZWN0aW9uKG5vZGUpLCBwYWQpO1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIHJlbmRlclNlcXVlbmNlKG5vZGUsIHBhZCk7XG4gIGNvbnN0IGtpbmQgPSBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgaWYgKGtpbmQpIHtcbiAgICByZXR1cm4gcmVuZGVyTGlzdCgobm9kZSBhcyBSZWNvcmQ8TGlzdEtpbmQsIHJlYWRvbmx5IERlc2NyaXB0aW9uW10+KVtraW5kXSwgcGFkLCBraW5kKTtcbiAgfVxuICByZXR1cm4gcmVuZGVyTWFwKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgRGVzY3JpcHRpb24+LCBwYWQpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHN0cmluZyBzZWN0aW9uOiByaWdodC1zdHJpcCBldmVyeSBsaW5lLCBkcm9wIHRoZVxuICogY29tbW9uIGxlYWRpbmctd2hpdGVzcGFjZSBwcmVmaXggc2hhcmVkIGJ5IGFsbCBub24tYmxhbmsgbGluZXMsXG4gKiBhbmQgdHJpbSBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmsgbGluZXMuIE1hdGNoZXMgUHl0aG9uJ3NcbiAqIGB0ZXh0d3JhcC5kZWRlbnRgIHNlbWFudGljcyBzbyBlbWJlZGRlZCBpbmRlbnRlZCB0ZW1wbGF0ZVxuICogbGl0ZXJhbHMgcm91bmQtdHJpcCBjbGVhbmx5LlxuICovXG5mdW5jdGlvbiBkZWRlbnRTZWN0aW9uKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKS5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvWyBcXHRdKyQvLCBcIlwiKSk7XG4gIGxldCBtaW4gPSBJbmZpbml0eTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKCFsaW5lKSBjb250aW51ZTtcbiAgICBjb25zdCBtYXRjaCA9IC9eWyBcXHRdKi8uZXhlYyhsaW5lKTtcbiAgICBjb25zdCB3aWR0aCA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICBpZiAod2lkdGggPCBtaW4pIG1pbiA9IHdpZHRoO1xuICB9XG4gIGNvbnN0IHN0cmlwcGVkID1cbiAgICBtaW4gPT09IEluZmluaXR5IHx8IG1pbiA9PT0gMCA/IGxpbmVzIDogbGluZXMubWFwKChsaW5lKSA9PiAobGluZSA/IGxpbmUuc2xpY2UobWluKSA6IFwiXCIpKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IHN0cmlwcGVkLmxlbmd0aDtcbiAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICFzdHJpcHBlZFtzdGFydF0pIHN0YXJ0ICs9IDE7XG4gIHdoaWxlIChlbmQgPiBzdGFydCAmJiAhc3RyaXBwZWRbZW5kIC0gMV0pIGVuZCAtPSAxO1xuICByZXR1cm4gc3RyaXBwZWQuc2xpY2Uoc3RhcnQsIGVuZCkuam9pbihcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgaXMgdHJlYXRlZCBhcyBhIHR5cGVkIGxpc3Qgb25seSB3aGVuIGl0IGhhcyBleGFjdGx5IG9uZVxuICogb3duIGtleSwgdGhhdCBrZXkgaXMgYGJ1bGxldHNgIG9yIGBudW1iZXJlZGAsIGFuZCB0aGUgdmFsdWUgaXMgYW5cbiAqIGFycmF5LiBFdmVyeXRoaW5nIGVsc2UgaXMgYSBoZWFkZXJzIG1hcCAtIHNvIGNhbGxlcnMgd2FudGluZyBhXG4gKiBzaW5nbGUgaGVhZGVyIGxpdGVyYWxseSBuYW1lZCBgYnVsbGV0c2Agb3IgYG51bWJlcmVkYCBjYW4gdXNlIGFcbiAqIG11bHRpLWtleSBtYXAgb3IgcmVuYW1lLlxuICovXG5mdW5jdGlvbiBsaXN0S2luZChub2RlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IExpc3RLaW5kIHwgbnVsbCB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcbiAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5ID0ga2V5c1swXSE7XG4gIGlmICgoTElTVF9LRVlTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhrZXkpICYmIEFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgIHJldHVybiBrZXkgYXMgTGlzdEtpbmQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRQYWQodGV4dDogc3RyaW5nLCBwYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGlmICghcGFkKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIHRleHRcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiAobGluZSA/IHBhZCArIGxpbmUgOiBcIlwiKSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2VxdWVuY2UoaXRlbXM6IHJlYWRvbmx5IERlc2NyaXB0aW9uW10sIHBhZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVuZGVyZWQ6IHsgdGV4dDogc3RyaW5nOyBub2RlOiBEZXNjcmlwdGlvbiB9W10gPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdGV4dCA9IHJlbmRlckJsb2NrKGl0ZW0sIHBhZCk7XG4gICAgaWYgKCF0ZXh0KSBjb250aW51ZTtcbiAgICByZW5kZXJlZC5wdXNoKHsgdGV4dCwgbm9kZTogaXRlbSB9KTtcbiAgfVxuICBpZiAocmVuZGVyZWQubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgbGV0IG91dCA9IHJlbmRlcmVkWzBdIS50ZXh0O1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgc2VwID0gbmVlZHNCbGFua0xpbmVCZXR3ZWVuKHJlbmRlcmVkW2kgLSAxXSEubm9kZSwgcmVuZGVyZWRbaV0hLm5vZGUpID8gXCJcXG5cXG5cIiA6IFwiXFxuXCI7XG4gICAgb3V0ICs9IHNlcCArIHJlbmRlcmVkW2ldIS50ZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTWFwcyBhbHdheXMgY3JlYXRlIHRoZWlyIG93biBzZWN0aW9uIGJvdW5kYXJ5IChhIGBIZWFkZXI6YCBsaW5lIHBsdXNcbiAqIGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGJvZHkpLCBzbyBhbnl0aGluZyB0b3VjaGluZyBhIG1hcCBnZXRzIGFcbiAqIGJsYW5rLWxpbmUgYnJlYWsuIFBsYWluIHRleHQgYWRqYWNlbnQgdG8gYSB0eXBlZCBsaXN0IGZsdXNoZXNcbiAqIHRvZ2V0aGVyIGluIGVpdGhlciBkaXJlY3Rpb246IHRleHQtYmVmb3JlLWxpc3QgcmVhZHMgYXMgYSBsZWFkLWluLFxuICogdGV4dC1hZnRlci1saXN0IGFzIGEgdHJhaWxpbmcgc3VtbWFyeS4gVHdvIHRleHQgcGFyYWdyYXBocyBhbmQgdHdvXG4gKiBhZGphY2VudCBsaXN0cyBib3RoIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsgZm9yIGxlZ2liaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIG5lZWRzQmxhbmtMaW5lQmV0d2VlbihwcmV2OiBEZXNjcmlwdGlvbiwgY3VycjogRGVzY3JpcHRpb24pOiBib29sZWFuIHtcbiAgaWYgKGlzTWFwKHByZXYpIHx8IGlzTWFwKGN1cnIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcHJldklzVGV4dCA9IHR5cGVvZiBwcmV2ID09PSBcInN0cmluZ1wiO1xuICBjb25zdCBjdXJySXNUZXh0ID0gdHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCI7XG4gIGlmIChwcmV2SXNUZXh0ICE9PSBjdXJySXNUZXh0KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpcyBhIGhlYWRlcnMgbWFwIHdoZW4gaXQgaXMgYSBub24tYXJyYXksIG5vbi1saXN0IG9iamVjdC5cbiAqIGBidWxsZXRzYCAvIGBudW1iZXJlZGAgc2luZ2xlLWtleSBvYmplY3RzIGFyZSB0aGUgb25seSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3RzIHRoYXQgYXJlbid0IG1hcHMuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKG5vZGU6IERlc2NyaXB0aW9uKTogYm9vbGVhbiB7XG4gIGlmIChub2RlID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGlzdChpdGVtczogcmVhZG9ubHkgRGVzY3JpcHRpb25bXSwgcGFkOiBzdHJpbmcsIGtpbmQ6IExpc3RLaW5kKTogc3RyaW5nIHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGl0ZW1zWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHByZXBlbmRQYWQoaXRlbXNbMF0sIHBhZCk7XG4gIH1cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0hO1xuICAgIGNvbnN0IG1hcmtlciA9IGtpbmQgPT09IFwiYnVsbGV0c1wiID8gXCItIFwiIDogYCR7aSArIDF9LiBgO1xuICAgIGNvbnN0IGJvZHkgPSByZW5kZXJCbG9jayhpdGVtLCBcIlwiKTtcbiAgICBjb25zdCBib2R5TGluZXMgPSBib2R5LnNwbGl0KFwiXFxuXCIpO1xuICAgIGxpbmVzLnB1c2goYCR7cGFkfSR7bWFya2VyfSR7Ym9keUxpbmVzWzBdID8/IFwiXCJ9YCk7XG4gICAgY29uc3QgY29udGludWF0aW9uID0gcGFkICsgXCIgXCIucmVwZWF0KG1hcmtlci5sZW5ndGgpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBib2R5TGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA/IGAke2NvbnRpbnVhdGlvbn0ke2xpbmV9YCA6IFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTWFwKG5vZGU6IFJlY29yZDxzdHJpbmcsIERlc2NyaXB0aW9uPiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVuZGVyQmxvY2sodmFsdWUsIHBhZCk7XG4gICAgaWYgKCFib2R5ICYmICFoZWFkZXIudHJpbSgpKSBjb250aW51ZTtcbiAgICBjb25zdCBoZWFkZXJMaW5lID0gaGVhZGVyLnRyaW0oKSA/IGAke3BhZH0ke2hlYWRlcn06YCA6IFwiXCI7XG4gICAgcGFydHMucHVzaChib2R5ID8gYCR7aGVhZGVyTGluZX1cXG5cXG4ke2JvZHl9YCA6IGhlYWRlckxpbmUpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGNvdW50IHdpdGggaXRzIG5vdW4sIHBsdXJhbGl6aW5nIChuYWl2ZSBgK3NgKSB1bmxlc3MgdGhlIGNvdW50IGlzIDE6XG4gKiBgcGx1cmFsaXplKDEsIFwiYmFycmVsXCIpYCAtPiBgXCIxIGJhcnJlbFwiYCwgYHBsdXJhbGl6ZSgzLCBcImJhcnJlbFwiKWAgLT5cbiAqIGBcIjMgYmFycmVsc1wiYC4gQ29sbGFwc2VzIHRoZSBgJHtufSBub3VuJHtuID09PSAxID8gXCJcIiA6IFwic1wifWAgaWRpb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVyYWxpemUoY291bnQ6IG51bWJlciwgbm91bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NvdW50fSAke25vdW59JHtjb3VudCA9PT0gMSA/IFwiXCIgOiBcInNcIn1gO1xufVxuXG4vKipcbiAqIFRpdGxlLWNhc2UgYSBzbmFrZSAvIGtlYmFiIC8gY2FtZWwgaWRlbnRpZmllciBpbnRvIGEgaHVtYW4tcmVhZGFibGUgbGFiZWw6XG4gKiB0b2tlbml6ZSAobG93ZXJjYXNlZCwgY2FwaXRhbGl6ZWQpLCB0aGVuIGpvaW4gd2l0aCBzcGFjZXMuIEZhbGxzIGJhY2sgdG9cbiAqIHRoZSByYXcgYHZhbHVlYCB3aGVuIGl0IHlpZWxkcyBubyB0b2tlbnMgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuXG4gKiBgYmdlX2xhcmdlX2VuYCAtPiBgXCJCZ2UgTGFyZ2UgRW5cImAsIGBwcm9tcHRJZGAgLT4gYFwiUHJvbXB0IElkXCJgLlxuICpcbiAqIFRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgXCJodW1hbml6ZSBhIGNvbHVtbiAvIGZpZWxkIG5hbWVcIiBpZGlvbSAtXG4gKiByZXVzZWQgYnkgdGhlIGNoYXQgZGF0YS1ncmlkIGhlYWRlcnMgYW5kIHRoZSBleHBvcnQgcmVuZGVyZXIuIEV4dHJhXG4gKiB7QGxpbmsgVG9rZW5pemVPcHRpb25zfSAoZS5nLiBgY2FtZWxDYXNlOiBmYWxzZWApIG1lcmdlIG92ZXIgdGhlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9MYWJlbCh2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogVG9rZW5pemVPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zID0gWy4uLnRva2VuaXplV2l0aE9wdGlvbnMoeyBsb3dlckNhc2U6IHRydWUsIGNhcGl0YWxpemU6IHRydWUsIC4uLm9wdGlvbnMgfSwgdmFsdWUpXTtcbiAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4oXCIgXCIpIDogdmFsdWU7XG59XG5cbi8qKlxuICogVXBwZXItY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGB2YWx1ZWAsIGxlYXZpbmcgdGhlIHJlc3QgdW50b3VjaGVkLlxuICogYFwid29ya2luZ1wiYCAtPiBgXCJXb3JraW5nXCJgLiBDb2xsYXBzZXMgdGhlXG4gKiBgcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSlgIGlkaW9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlO1xufVxuIl19
|
|
509
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQXlDL0MsMEVBQTBFO0FBQzFFLCtFQUErRTtBQUMvRSwrRUFBK0U7QUFDL0UsaUVBQWlFO0FBQ2pFLE1BQU0sMEJBQTBCLEdBQUcsaURBQWlELENBQUM7QUFDckYsTUFBTSxnQ0FBZ0MsR0FBRyxlQUFlLENBQUM7QUFDekQsTUFBTSxrQkFBa0IsR0FBNEQ7SUFDbEYsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDakIsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCw2RUFBNkU7SUFDN0UsK0RBQStEO0lBQy9ELENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUNGLE1BQU0sVUFBVSxHQUFHLG9EQUFvRCxDQUFDO0FBQ3hFLE1BQU0sWUFBWSxHQUFHLDBFQUEwRSxDQUFDO0FBRWhHLE1BQU0saUJBQWlCLEdBQTRCO0lBQ2pELFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLEtBQUs7SUFDaEIsVUFBVSxFQUFFLEtBQUs7SUFDakIsYUFBYSxFQUFFLEtBQUs7SUFDcEIsZUFBZSxF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SyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFpQyxFQUFFLEdBQVc7SUFDL0QsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUFFLFNBQVM7UUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBYSxFQUFFLElBQVk7SUFDbkQsT0FBTyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhLEVBQUUsT0FBeUI7SUFDOUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRyxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWE7SUFDdEMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBzdHJpbmcgdG9vbGtpdDogdG9rZW5pemF0aW9uLCBpZGVudGlmaWVyIC8gc2x1Z1xuICogZ2VuZXJhdGlvbiAod2l0aCBoYXNoLXN1ZmZpeCBjb2xsaXNpb24gcmVzaXN0YW5jZSksIEhUTUwgZXNjYXBpbmcsXG4gKiBoZWFkZXItdmFsdWUgdHJpbW1pbmcsIGFuZCBhIG5lc3RlZCBkZXNjcmlwdGlvbi10cmVlIHJlbmRlcmVyIGZvclxuICogbG9uZy1mb3JtIExMTSBwcm9tcHQgLyB0b29sLWRlc2NyaXB0aW9uIHRleHQuIERlcGVuZHMgb25seSBvbiB0aGVcbiAqIGxvY2FsIHtAbGluayBmbnZIYXNoV2l0aE9wdGlvbnN9IGZvciBkZXRlcm1pbmlzdGljIGhhc2ggc3VmZml4ZXMuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBmbnZIYXNoV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi9oYXNoLnRzXCI7XG5cbi8qKlxuICogT3B0aW9ucyBjb250cm9sbGluZyB7QGxpbmsgdG9rZW5pemVXaXRoT3B0aW9uc30uIEFsbCBkZWZhdWx0IG9mZiBleGNlcHRcbiAqIGBjYW1lbENhc2VgLlxuICpcbiAqIC0gYGRpc3RpbmN0YCAtIGRyb3AgZHVwbGljYXRlIHRva2VucyAoZmlyc3Qgb2NjdXJyZW5jZSB3aW5zKS5cbiAqIC0gYGxvd2VyQ2FzZWAgLSBsb3dlcmNhc2UgZXZlcnkgdG9rZW4uXG4gKiAtIGBjYXBpdGFsaXplYCAtIHVwcGVyLWNhc2UgZWFjaCB0b2tlbidzIGZpcnN0IGxldHRlciAodGhlblxuICogICB7QGxpbmsgVE9LRU5JWkVfT1ZFUlJJREVTfSBmaXggdXAgYGFpYCAtPiBgQUlgIGFuZCBgdjJgIC0+IGBWMmApLlxuICogLSBgb21pdFVyaVNjaGVtZWAgLSBzdHJpcCBhIGxlYWRpbmcgYHNjaGVtZTovL2AgYmVmb3JlIHRva2VuaXppbmcuXG4gKiAtIGBvbWl0RW1haWxEb21haW5gIC0ga2VlcCBvbmx5IHRoZSBsb2NhbCBwYXJ0IG9mIGFuIGVtYWlsLlxuICogLSBgY2FtZWxDYXNlYCAtIHNwbGl0IG9uIGNhbWVsQ2FzZSBib3VuZGFyaWVzIC8gZGlnaXQgcnVucyAvIGFjcm9ueW1zXG4gKiAgIChkZWZhdWx0IGB0cnVlYCk7IHdoZW4gYGZhbHNlYCwgc3BsaXQgb25seSBvbiBub24tYWxwaGFudW1lcmljcy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5pemVPcHRpb25zID0ge1xuICBkaXN0aW5jdD86IGJvb2xlYW47XG4gIGxvd2VyQ2FzZT86IGJvb2xlYW47XG4gIGNhcGl0YWxpemU/OiBib29sZWFuO1xuICBvbWl0VXJpU2NoZW1lPzogYm9vbGVhbjtcbiAgb21pdEVtYWlsRG9tYWluPzogYm9vbGVhbjtcbiAgY2FtZWxDYXNlPzogYm9vbGVhbjtcbn07XG5cbi8vIEtleXMvaWRlbnRpZmllcnMvc2x1Z3MgYXJlIGFsd2F5cyBsb3dlcmNhc2VkOyBgbG93ZXJDYXNlYCBpcyBub3QgYVxuLy8gY2FsbGVyLWNvbmZpZ3VyYWJsZSBvcHRpb24uXG5leHBvcnQgdHlwZSBLZXlPcHRpb25zID0gT21pdDxUb2tlbml6ZU9wdGlvbnMsIFwibG93ZXJDYXNlXCIgfCBcImNhcGl0YWxpemVcIj4gJiB7XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgdHJ1bmNhdGVTdHJhdGVneT86IFwiaGFzaFwiIHwgXCJ0cmltXCIgfCBcImVtcHR5XCI7XG4gIHRydW5jYXRlSGFzaExlbmd0aD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIElkZW50aWZpZXJPcHRpb25zID0gS2V5T3B0aW9ucyAmIHtcbiAgZGVsaW1pdGVyPzogc3RyaW5nO1xufTtcblxudHlwZSBSZXNvbHZlZFRva2VuaXplT3B0aW9ucyA9IFJlcXVpcmVkPFRva2VuaXplT3B0aW9ucz47XG50eXBlIFJlc29sdmVkSWRlbnRpZmllck9wdGlvbnMgPSBSZXF1aXJlZDxcbiAgSWRlbnRpZmllck9wdGlvbnMgJiBQaWNrPFRva2VuaXplT3B0aW9ucywgXCJsb3dlckNhc2VcIiB8IFwiY2FwaXRhbGl6ZVwiPlxuPjtcblxuLy8gQSBsZWFkaW5nIGB2YC9gVmAgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgZGlnaXRzIChhIHZlcnNpb24gbWFya2VyIGxpa2Vcbi8vIGB2MmApIGlzIGtlcHQgYXMgT05FIHRva2VuIGluc3RlYWQgb2Ygc3BsaXR0aW5nIGludG8gYHZgICsgYDJgOyBpdCBsZWFkcyB0aGVcbi8vIGFsdGVybmF0aW9uIHNvIGl0IHdpbnMgb3ZlciB0aGUgZ2VuZXJpYyBsZXR0ZXIgLyBkaWdpdCBydW5zLiBFdmVyeXRoaW5nIGVsc2Vcbi8vIGlzIHRoZSB1c3VhbCBjYW1lbENhc2Ugd29yZCAvIG51bWJlciAvIGFsbC1jYXBzLWFjcm9ueW0gc3BsaXQuXG5jb25zdCBUT0tFTklaRV9DQU1FTF9DQVNFX1JFR0VYUCA9IC9bdlZdWzAtOV0rfFtBLVpdP1thLXpdK3xbMC05XSt8W0EtWl0rKD8hW2Etel0pL2c7XG5jb25zdCBUT0tFTklaRV9OT05fQUxQSEFOVU1FUklDX1JFR0VYUCA9IC9bYS16QS1aMC05XSsvZztcbmNvbnN0IFRPS0VOSVpFX09WRVJSSURFUzogKCh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBUb2tlbml6ZU9wdGlvbnMpID0+IHN0cmluZylbXSA9IFtcbiAgKHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6ZSAmJiB0b2tlbi50b0xvd2VyQ2FzZSgpID09PSBcImFpXCIpIHtcbiAgICAgIHJldHVybiBcIkFJXCI7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbjtcbiAgfSxcbiAgLy8gVmVyc2lvbiBtYXJrZXIgYHYyYCAtPiBgVjJgIHdoZW4gY2FwaXRhbGl6aW5nICh0aGUgbGVhZGluZyBgdmAgdXBwZXJjYXNlcyxcbiAgLy8gdGhlIGRpZ2l0cyBzdGF5KSwgc28gaXQgcmVhZHMgYXMgb25lIHVuaXQgcmF0aGVyIHRoYW4gXCJWIDJcIi5cbiAgKHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMuY2FwaXRhbGl6ZSAmJiAvXnZbMC05XSskLy50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuIGBWJHt0b2tlbi5zbGljZSgxKX1gO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW47XG4gIH0sXG5dO1xuY29uc3QgVVJJX1JFR0VYUCA9IC9eKFthLXpBLVpdW2EtekEtWjAtOSsuLV0qKT86XFwvXFwvKFteXFxzLz8jXVteXFxzXSopPyQvO1xuY29uc3QgRU1BSUxfUkVHRVhQID0gL14oW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSspQChbYS16QS1aMC05LV0rKD86XFwuW2EtekEtWjAtOS1dKykrKSQvO1xuXG5jb25zdCBUT0tFTklaRV9ERUZBVUxUUzogUmVzb2x2ZWRUb2tlbml6ZU9wdGlvbnMgPSB7XG4gIGRpc3RpbmN0OiBmYWxzZSxcbiAgbG93ZXJDYXNlOiBmYWxzZSxcbiAgY2FwaXRhbGl6ZTogZmFsc2UsXG4gIG9taXRVcmlTY2hlbWU6IGZhbHNlLFxuICBvbWl0RW1haWxEb21haW46IGZhbHNlLFxuICBjYW1lbENhc2U6IHRydWUsXG59O1xuXG5jb25zdCBJREVOVElGSUVSX0RFRkFVTFRTOiBSZXNvbHZlZElkZW50aWZpZXJPcHRpb25zID0ge1xuICAuLi5UT0tFTklaRV9ERUZBVUxUUyxcbiAgbG93ZXJDYXNlOiB0cnVlLFxuICBtYXhMZW5ndGg6IEluZmluaXR5LFxuICB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIixcbiAgdHJ1bmNhdGVIYXNoTGVuZ3RoOiA2LFxuICBkZWxpbWl0ZXI6IFwiLVwiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uKiB0b2tlbml6ZVdpdGhPcHRpb25zKFxuICBvcHRpb25zOiBUb2tlbml6ZU9wdGlvbnMsXG4gIC4uLnZhbHVlczogdW5rbm93bltdXG4pOiBHZW5lcmF0b3I8c3RyaW5nPiB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkVG9rZW5pemVPcHRpb25zID0geyAuLi5UT0tFTklaRV9ERUZBVUxUUywgLi4ub3B0aW9ucyB9O1xuICBjb25zdCBzZWVuID0gb3B0cy5kaXN0aW5jdCA/IG5ldyBTZXQ8c3RyaW5nPigpIDogdW5kZWZpbmVkO1xuICBjb25zdCByZWdleHAgPSBvcHRzLmNhbWVsQ2FzZSA/IFRPS0VOSVpFX0NBTUVMX0NBU0VfUkVHRVhQIDogVE9LRU5JWkVfTk9OX0FMUEhBTlVNRVJJQ19SRUdFWFA7XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgbGV0IHN0cmluZ1ZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUgOiBTdHJpbmcodmFsdWUpO1xuICAgIGlmICghc3RyaW5nVmFsdWUpIGNvbnRpbnVlO1xuICAgIGlmIChvcHRzLm9taXRVcmlTY2hlbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gc3RyaW5nVmFsdWUubWF0Y2goVVJJX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMl0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKG9wdHMub21pdEVtYWlsRG9tYWluKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IHN0cmluZ1ZhbHVlLm1hdGNoKEVNQUlMX1JFR0VYUCk7XG4gICAgICBpZiAobWF0Y2gpIHN0cmluZ1ZhbHVlID0gbWF0Y2hbMV0gPz8gXCJcIjtcbiAgICB9XG4gICAgaWYgKCFzdHJpbmdWYWx1ZSkgY29udGludWU7XG4gICAgZm9yIChjb25zdCB0b2tlbk1hdGNoIG9mIHN0cmluZ1ZhbHVlLm1hdGNoQWxsKHJlZ2V4cCkpIHtcbiAgICAgIGxldCB0b2tlbiA9IHRva2VuTWF0Y2hbMF0hO1xuICAgICAgaWYgKG9wdHMubG93ZXJDYXNlKSB0b2tlbiA9IHRva2VuLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAob3B0cy5jYXBpdGFsaXplKSB0b2tlbiA9IGNhcGl0YWxpemUodG9rZW4pO1xuICAgICAgaWYgKCF0b2tlbikgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIFRPS0VOSVpFX09WRVJSSURFUykge1xuICAgICAgICB0b2tlbiA9IG92ZXJyaWRlKHRva2VuLCBvcHRzKTtcbiAgICAgICAgaWYgKCF0b2tlbikgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoIXRva2VuIHx8IHNlZW4/Lmhhcyh0b2tlbikpIGNvbnRpbnVlO1xuICAgICAgc2Vlbj8uYWRkKHRva2VuKTtcbiAgICAgIHlpZWxkIHRva2VuO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHRva2VuaXplKC4uLnZhbHVlczogdW5rbm93bltdKTogR2VuZXJhdG9yPHN0cmluZz4ge1xuICB5aWVsZCogdG9rZW5pemVXaXRoT3B0aW9ucyh7fSwgLi4udmFsdWVzKTtcbn1cblxuLyoqXG4gKiBKb2luIHRva2VuaXplZCB2YWx1ZXMgd2l0aCBgZGVsaW1pdGVyYC4gV2hlbiB0aGUgbmV4dCB0b2tlbiB3b3VsZCBwdXNoIHRoZVxuICogcmVzdWx0IG92ZXIgYG1heExlbmd0aGA6IGB0cmltYCBzdG9wcyBhZGRpbmc7IGBlbXB0eWAgcmV0dXJucyBgXCJcImA7IGBoYXNoYFxuICogYXBwZW5kcyBhIGRpZ2VzdCBvZiBhY2NlcHRlZCB0b2tlbnMgcGx1cyB0aGUgb3ZlcmZsb3cgdG9rZW4gaWYgdGhlIHJlc3VsdFxuICogc3RpbGwgZml0cywgb3RoZXJ3aXNlIGBcIlwiYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSWRlbnRpZmllcldpdGhPcHRpb25zKG9wdGlvbnM6IElkZW50aWZpZXJPcHRpb25zLCAuLi52YWx1ZXM6IHVua25vd25bXSk6IHN0cmluZyB7XG4gIGNvbnN0IG9wdHM6IFJlc29sdmVkSWRlbnRpZmllck9wdGlvbnMgPSB7XG4gICAgLi4uSURFTlRJRklFUl9ERUZBVUxUUyxcbiAgICAuLi5vcHRpb25zLFxuICAgIGxvd2VyQ2FzZTogdHJ1ZSxcbiAgfTtcbiAgY29uc3QgdG9rZW5zOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbml6ZVdpdGhPcHRpb25zKG9wdHMsIC4uLnZhbHVlcykpIHtcbiAgICBjb25zdCBzZXBMZW5ndGggPSB0b2tlbnMubGVuZ3RoID4gMCA/IG9wdHMuZGVsaW1pdGVyLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IGN1cnJlbnRMZW5ndGggKyBzZXBMZW5ndGggKyB0b2tlbi5sZW5ndGg7XG5cbiAgICBpZiAobmV4dExlbmd0aCA+IG9wdHMubWF4TGVuZ3RoKSB7XG4gICAgICBpZiAob3B0cy50cnVuY2F0ZVN0cmF0ZWd5ID09PSBcImVtcHR5XCIpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKG9wdHMudHJ1bmNhdGVTdHJhdGVneSA9PT0gXCJ0cmltXCIpIGJyZWFrO1xuXG4gICAgICBjb25zdCBoYXNoID0gZGlnZXN0VG9rZW5zKG9wdHMudHJ1bmNhdGVIYXNoTGVuZ3RoLCB0b2tlbnMsIHRva2VuKTtcbiAgICAgIGlmIChjdXJyZW50TGVuZ3RoICsgc2VwTGVuZ3RoICsgaGFzaC5sZW5ndGggPD0gb3B0cy5tYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4ob3B0cy5kZWxpbWl0ZXIpICsgb3B0cy5kZWxpbWl0ZXIgKyBoYXNoIDogaGFzaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICBjdXJyZW50TGVuZ3RoID0gbmV4dExlbmd0aDtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnMuam9pbihvcHRzLmRlbGltaXRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0lkZW50aWZpZXIoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogU2x1Z2lmaWVkIGlkZW50aWZpZXI6IHNhbWUgcnVsZXMgYXMge0BsaW5rIHRvSWRlbnRpZmllcldpdGhPcHRpb25zfSB3aXRoIHRoZVxuICogZGVsaW1pdGVyIGZvcmNlZCB0byBgLWAuIEFjY2VwdHMge0BsaW5rIEtleU9wdGlvbnN9IHNvIGNhbGxlcnMgY2Fubm90XG4gKiBvdmVycmlkZSB0aGUgZGVsaW1pdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TbHVnV2l0aE9wdGlvbnMob3B0aW9uczogS2V5T3B0aW9ucywgLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyAuLi5vcHRpb25zLCBkZWxpbWl0ZXI6IFwiLVwiIH0sIC4uLnZhbHVlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1NsdWcoLi4udmFsdWVzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbHVnV2l0aE9wdGlvbnMoe30sIC4uLnZhbHVlcyk7XG59XG5cbi8qKlxuICogVHJpbSBgdmFsdWVgIGFuZCByZXR1cm4gYG51bGxgIGZvciBub24tc3RyaW5ncywgYHVuZGVmaW5lZGAsIG9yXG4gKiBzdHJpbmdzIHRoYXQgYXJlIGVtcHR5IGFmdGVyIHRyaW1taW5nLiBMZXRzIGNhbGwgc2l0ZXMgY29sbGFwc2UgdGhlXG4gKiBjb21tb25cbiAqXG4gKiBgYGB0c1xuICogdHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgdi50cmltKCkgPyB2LnRyaW0oKSA6IG51bGxcbiAqIGBgYFxuICpcbiAqIGRhbmNlIGludG8gYSBzaW5nbGUgaGVscGVyLiBVc2VmdWwgZm9yIEhUVFAgaGVhZGVyIC8gcXVlcnkgLyBmb3JtXG4gKiBleHRyYWN0b3JzIHdoZXJlIGRvd25zdHJlYW0gY29kZSB3YW50cyBgc3RyaW5nIHwgbnVsbGAgdG8gZHJpdmUgYVxuICogY2hlYXAgYD8/YCAvIGBpZiAoeClgIGNhc2NhZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9OdWxsKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBudWxsO1xuICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCA/IHRyaW1tZWQgOiBudWxsO1xufVxuXG4vLyBDb25maWcgbGlzdHMgYXJyaXZlIGVpdGhlciBhbHJlYWR5IHNwbGl0IChhbiBhcnJheSkgb3IgYXMgb25lIGVudi12YXIgc3RyaW5nXG4vLyB3aXRoIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcyBhbmQvb3Igd2hpdGVzcGFjZS5cbmNvbnN0IExJU1RfU0VQQVJBVE9SX1JFR0VYUCA9IC9bXFxzLF0rLztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBjb25maWcgbGlzdCB0aGF0IG1heSBhcnJpdmUgYXMgYW4gYXJyYXkgb3IgYXMgYSBzaW5nbGVcbiAqIGNvbW1hL3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzogc3BsaXQsIGFwcGx5IGB0cmFuc2Zvcm1gLCBkcm9wIGVtcHRpZXMsXG4gKiBhbmQgZGUtZHVwbGljYXRlIChmaXJzdCBvY2N1cnJlbmNlIHdpbnMpLlxuICpcbiAqIFRoaXMgaXMgdGhlIHNoYXBlIGV2ZXJ5IGFsbG93LWxpc3QgLyBmYWxsYmFjay1vcmRlciBzZXR0aW5nIGluIHRoaXMgcmVwb1xuICogdGFrZXMsIGJlY2F1c2UgdGhlIHNhbWUgdmFsdWUgY2FuIGNvbWUgZnJvbSB0eXBlZCBjb25maWcgKGBzdHJpbmdbXWApIG9yIGZyb21cbiAqIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIChgXCJhLCBiIGNcImApLiBQYXNzIGB0cmFuc2Zvcm1gIHRvIG5vcm1hbGl6ZSBlbnRyaWVzXG4gKiBhcyB0aGV5IGFyZSByZWFkOyBpdCBkZWZhdWx0cyB0byB0cmltbWluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogcGFyc2VMaXN0KFwiZG9jcy5leGFtcGxlLmNvbSwgKi5kYXRhYnJpY2tzLmNvbVwiKTtcbiAqIHBhcnNlTGlzdChwcm9jZXNzLmVudi5NT0RFTF9GQUxMQkFDS1MpO1xuICogcGFyc2VMaXN0KHJhdywgbm9ybWFsaXplVXJsUGF0dGVybik7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxpc3QoXG4gIHJhdzogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsLFxuICB0cmFuc2Zvcm06IChlbnRyeTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoZW50cnkpID0+IGVudHJ5LnRyaW0oKSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZW50cmllcyA9XG4gICAgdHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIiA/IHJhdy5zcGxpdChMSVNUX1NFUEFSQVRPUl9SRUdFWFApIDogQXJyYXkuaXNBcnJheShyYXcpID8gcmF3IDogW107XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdHJhbnNmb3JtKGVudHJ5KTtcbiAgICBpZiAoIW5vcm1hbGl6ZWQgfHwgc2Vlbi5oYXMobm9ybWFsaXplZCkpIGNvbnRpbnVlO1xuICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgIG91dC5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICoge0BsaW5rIHRyaW1Ub051bGx9IHdpdGggYW4gZW1wdHktc3RyaW5nIG1pc3MgaW5zdGVhZCBvZiBgbnVsbGAsIGZvciBjYWxsZXJzXG4gKiB0aGF0IGJ1aWxkIGEgc3RyaW5nIHVuY29uZGl0aW9uYWxseSBhbmQgdHJlYXQgXCJhYnNlbnRcIiBhcyBcIlwiLlxuICpcbiAqIFJlYWRpbmcgbG9vc2VseS10eXBlZCBKU09OIGlzIHRoZSBtb3RpdmF0aW5nIGNhc2U6IGEgZmllbGQgdGhhdCBzaG91bGQgYmUgYVxuICogc3RyaW5nIG1heSBiZSBtaXNzaW5nIG9yIHRoZSB3cm9uZyB0eXBlLCBhbmQgdGhlIGNhbGxlciB3YW50cyBgXCJcImAgcmF0aGVyXG4gKiB0aGFuIGEgbnVsbCBjaGVjayBhdCBldmVyeSBhY2Nlc3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRpdGxlID0gdHJpbVRvRW1wdHkocmVjb3JkLnRpdGxlKTsgLy8gYWx3YXlzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltVG9FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiB0cmltVG9OdWxsKHZhbHVlKSA/PyBcIlwiO1xufVxuXG4vKipcbiAqIFRyaW0gdGhlIGZpcnN0IHVzYWJsZSBzdHJpbmcgb3V0IG9mIGB2YWx1ZWAuIFJldHVybnMgYG51bGxgIHdoZW5cbiAqIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAsIGBudWxsYCwgYW4gZW1wdHkgc3RyaW5nLCBvciBhbiBhcnJheSB3aG9zZVxuICogZmlyc3Qgc3RyaW5nIG1lbWJlciBpcyBlbXB0eS4gTWlycm9ycyBob3cgRXhwcmVzcyAvIE5vZGUgaGVhZGVyXG4gKiBhY2Nlc3NvcnMgZXhwb3NlIHNpbmdsZSB2cy4gcmVwZWF0ZWQgaGVhZGVycyAtIHRoZSBmaXJzdFxuICogbm9uLWVtcHR5IGVudHJ5IHdpbnMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBpZ25vcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3ROb25FbXB0eSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSB0cmltVG9OdWxsKGl0ZW0pO1xuICAgICAgaWYgKHRyaW1tZWQpIHJldHVybiB0cmltbWVkO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gdHJpbVRvTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRoZSBmaXZlIGNoYXJhY3RlcnMgc2lnbmlmaWNhbnQgaW4gSFRNTCB0ZXh0IGFuZFxuICogZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWVzIChgJmAsIGA8YCwgYD5gLCBgXCJgLCBgJ2ApIHNvIGFuXG4gKiB1bnRydXN0ZWQgc3RyaW5nIGNhbiBiZSBpbnRlcnBvbGF0ZWQgaW50byBtYXJrdXAgd2l0aG91dCBicmVha2luZ1xuICogb3V0IG9mIGl0cyBjb250ZXh0LiBgJmAgaXMgcmVwbGFjZWQgZmlyc3Qgc28gYW1wZXJzYW5kcyBpbnRyb2R1Y2VkXG4gKiBieSB0aGUgbGF0ZXIgcmVwbGFjZW1lbnRzIGFyZW4ndCBkb3VibGUtZXNjYXBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbiAgICAucmVwbGFjZSgvJy9nLCBcIiYjMzk7XCIpO1xufVxuXG4vKipcbiAqIFNsdWdpZnkgYHZhbHVlYCAodXNpbmcgdGhlIHN0YW5kYXJkIHtAbGluayB0b0lkZW50aWZpZXJXaXRoT3B0aW9uc31cbiAqIHRva2VuaXplciArIGRlbGltaXRlciBydWxlcykgYW5kICoqYWx3YXlzKiogc3VmZml4IGEgc2hvcnRcbiAqIGRldGVybWluaXN0aWMgaGFzaC4gVXNlIHdoZW4geW91IG5lZWQgYSBzdGFibGUsIHNsdWdpZmllZCBpZCB0aGF0XG4gKiBpcyBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSBhY3Jvc3MgZGVzY3JpcHRpb25zIHNoYXJpbmcgdGhlIHNhbWVcbiAqIGxlYWRpbmcgdG9rZW5zICh0b29sIGlkcywgY2FjaGUga2V5cywgZXRjLikuXG4gKlxuICogQmVoYXZpb3VyIGRpZmZlcnMgZnJvbSBgdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGgsXG4gKiB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIiB9KWA6IHRoYXQgaGVscGVyIG9ubHkgYXBwZW5kcyBhIGhhc2ggd2hlblxuICogdGhlIHNsdWcgKm92ZXJmbG93cyogYG1heExlbmd0aGAuIFRoaXMgaGVscGVyIGFwcGVuZHMgYSBoYXNoXG4gKiB1bmNvbmRpdGlvbmFsbHkgc28gdGhlIHJlc3VsdCBpcyBjb2xsaXNpb24tcmVzaXN0YW50IGV2ZW4gZm9yXG4gKiBzaG9ydCBpbnB1dHMuIFRoZSBoYXNoIGlzIGNvbXB1dGVkIG92ZXIgdGhlIHJhdyBgdmFsdWVgIHNvIHR3b1xuICogZGVzY3JpcHRpb25zIHByb2R1Y2luZyB0aGUgc2FtZSBzbHVnIHN0aWxsIGdldCBkaWZmZXJlbnQgaWRzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFNvdXJjZSBzdHJpbmcgKHR5cGljYWxseSBhIHRvb2wvYWdlbnQgZGVzY3JpcHRpb24pLlxuICogQHBhcmFtIG9wdGlvbnMuZGVsaW1pdGVyIC0gVG9rZW4gc2VwYXJhdG9yIChkZWZhdWx0IGBcIl9cImApLlxuICogQHBhcmFtIG9wdGlvbnMuc2x1Z01heExlbmd0aCAtIENhcCBvbiB0aGUgc2x1ZyBwb3J0aW9uICh0aGUgcGFydFxuICogICBiZWZvcmUgdGhlIGhhc2gpLiBEZWZhdWx0IDMyLlxuICogQHBhcmFtIG9wdGlvbnMuaGFzaExlbmd0aCAtIExlbmd0aCBvZiB0aGUgc3VmZml4IHByb2R1Y2VkIGJ5XG4gKiAgIHtAbGluayBmbnZIYXNoV2l0aE9wdGlvbnN9IChDcm9ja2ZvcmQtc3R5bGUgYmFzZS0zMiBhbHBoYWJldCwgbWF4IDdcbiAqICAgY2hhcnMpLiBEZWZhdWx0IDYuXG4gKiBAcGFyYW0gb3B0aW9ucy5mYWxsYmFja1ByZWZpeCAtIFByZWZpeCB1c2VkIHdoZW4gdGhlIHNsdWcgaXMgZW1wdHlcbiAqICAgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuIERlZmF1bHQgYFwiaWRcImAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXF1ZVNsdWcoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHtcbiAgICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gICAgc2x1Z01heExlbmd0aD86IG51bWJlcjtcbiAgICBoYXNoTGVuZ3RoPzogbnVtYmVyO1xuICAgIGZhbGxiYWNrUHJlZml4Pzogc3RyaW5nO1xuICB9ID0ge30sXG4pOiBzdHJpbmcge1xuICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciA/PyBcIl9cIjtcbiAgY29uc3Qgc2x1Z01heExlbmd0aCA9IG9wdGlvbnMuc2x1Z01heExlbmd0aCA/PyAzMjtcbiAgY29uc3QgaGFzaExlbmd0aCA9IG9wdGlvbnMuaGFzaExlbmd0aCA/PyA2O1xuICBjb25zdCBmYWxsYmFja1ByZWZpeCA9IG9wdGlvbnMuZmFsbGJhY2tQcmVmaXggPz8gXCJpZFwiO1xuICBjb25zdCBzbHVnID0gdG9JZGVudGlmaWVyV2l0aE9wdGlvbnMoXG4gICAgeyBkZWxpbWl0ZXIsIG1heExlbmd0aDogc2x1Z01heExlbmd0aCwgdHJ1bmNhdGVTdHJhdGVneTogXCJ0cmltXCIgfSxcbiAgICB2YWx1ZSxcbiAgKTtcbiAgY29uc3Qgc3VmZml4ID0gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoOiBoYXNoTGVuZ3RoIH0sIHZhbHVlKTtcbiAgcmV0dXJuIHNsdWcgPyBgJHtzbHVnfSR7ZGVsaW1pdGVyfSR7c3VmZml4fWAgOiBgJHtmYWxsYmFja1ByZWZpeH0ke2RlbGltaXRlcn0ke3N1ZmZpeH1gO1xufVxuXG5mdW5jdGlvbiBkaWdlc3RUb2tlbnMobGVuZ3RoOiBudW1iZXIsIHBhcnRzOiByZWFkb25seSBzdHJpbmdbXSwgZXh0cmE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY29tYmluZWQgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIGNvbWJpbmVkICs9IHBhcnQgKyBcIlxcMFwiO1xuICBpZiAoZXh0cmEgIT09IHVuZGVmaW5lZCkgY29tYmluZWQgKz0gZXh0cmEgKyBcIlxcMFwiO1xuICByZXR1cm4gZm52SGFzaFdpdGhPcHRpb25zKHsgbGVuZ3RoIH0sIGNvbWJpbmVkKTtcbn1cblxuLyoqXG4gKiBBIG5vZGUgaW4gdGhlIGRlc2NyaXB0aW9uIHRyZWUgY29uc3VtZWQgYnkge0BsaW5rIHRvRGVzY3JpcHRpb259LlxuICpcbiAqIC0gYHN0cmluZ2AgLSBhIHRleHQgcGFyYWdyYXBoLlxuICogLSBgRGVzY3JpcHRpb25bXWAgLSBhIHNlcXVlbmNlIG9mIHN0YWNrZWQgYmxvY2tzIGF0IHRoZSBzYW1lIGxldmVsXG4gKiAgIChubyBsaXN0IG1hcmtlcnMpLiBQbGFpbiB0ZXh0IGFkamFjZW50IHRvIGEgbGlzdCAoZWl0aGVyIGRpcmVjdGlvbilcbiAqICAgZmx1c2hlcyB0b2dldGhlciBzbyB0aGUgcHJvc2UgcmVhZHMgYXMgYSBsZWFkLWluIG9yIHRyYWlsaW5nXG4gKiAgIHN1bW1hcnkuIFR3byB0ZXh0IHBhcmFncmFwaHMsIHR3byBhZGphY2VudCBsaXN0cywgYW5kIGFueXRoaW5nXG4gKiAgIHRvdWNoaW5nIGEgbWFwIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsuXG4gKiAtIGB7IGJ1bGxldHM6IFsuLi5dIH1gIC8gYHsgbnVtYmVyZWQ6IFsuLi5dIH1gIC0gZXhwbGljaXQgbGlzdC4gQVxuICogICBsaXN0IG9mIG9uZSBiYXJlIHN0cmluZyBkcm9wcyBpdHMgbWFya2VyIChgLWAgLyBgMS5gKTsgYSBsaXN0IG9mXG4gKiAgIG9uZSBpdGVtIHdpdGggbmVzdGVkIGNoaWxkcmVuIGtlZXBzIGl0cyBtYXJrZXIgYXMgdGhlIHZpc3VhbCBhbmNob3JcbiAqICAgZm9yIHRoZSBpbmRlbnRlZCBjaGlsZHJlbi5cbiAqIC0gYW55IG90aGVyIG9iamVjdCAtIGhlYWRlcnMgbWFwOiBlYWNoIGtleSBiZWNvbWVzIGEgYEhlYWRlcjpgIGxpbmVcbiAqICAgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGUgcmVuZGVyZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0aW9uID0gc3RyaW5nIHwgcmVhZG9ubHkgRGVzY3JpcHRpb25bXSB8IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogRGVzY3JpcHRpb24gfTtcblxuY29uc3QgTElTVF9LRVlTID0gW1wiYnVsbGV0c1wiLCBcIm51bWJlcmVkXCJdIGFzIGNvbnN0O1xudHlwZSBMaXN0S2luZCA9ICh0eXBlb2YgTElTVF9LRVlTKVtudW1iZXJdO1xuXG4vKipcbiAqIEZvcm1hdCBhIG5lc3RlZCBkZXNjcmlwdGlvbiB0cmVlIGFzIGEgTWFya2Rvd24taXNoIHN0cmluZyBzdWl0YWJsZVxuICogZm9yIGFuIExMTSBzeXN0ZW0gcHJvbXB0LCBab2QgYC5kZXNjcmliZSgpYCBibG9jaywgTWFzdHJhIHRvb2xcbiAqIGRlc2NyaXB0aW9uLCBvciBhbnkgb3RoZXIgbG9uZy1mb3JtIHRleHQgZGVzdGluYXRpb24uXG4gKlxuICogRXZlcnkgc3RyaW5nIHNlY3Rpb24gaXMgZGVkZW50ZWQgKGNvbW1vbiBsZWFkaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQpLFxuICogcmlnaHQtdHJpbW1lZCBsaW5lIGJ5IGxpbmUsIGFuZCBmcmVlZCBvZiBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmtcbiAqIGxpbmVzLCBzbyBjYWxsZXJzIGNhbiB3cml0ZSBtdWx0aS1saW5lIHRlbXBsYXRlIGxpdGVyYWxzIGluZGVudGVkXG4gKiBuYXR1cmFsbHkgaW4gc291cmNlIHdpdGhvdXQgbGVha2luZyB0aGF0IGluZGVudGF0aW9uIGludG8gdGhlXG4gKiBjb25zdW1lci1mYWNpbmcgb3V0cHV0LiBQbGFpbi1zdHJpbmcgaW5wdXRzIGZsb3cgdGhyb3VnaCB1bmNoYW5nZWRcbiAqIGFwYXJ0IGZyb20gdGhlIHNhbWUgbm9ybWFsaXphdGlvbiBwYXNzLCBzbyBhIHNpbmdsZSBtdWx0aS1saW5lXG4gKiB0ZW1wbGF0ZSBsaXRlcmFsIHdvcmtzIGRpcmVjdGx5OlxuICpcbiAqIGBgYHRzXG4gKiB0b0Rlc2NyaXB0aW9uKGBcbiAqICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBcIiR7YWxpYXN9XCIgYSBxdWVzdGlvbi5cbiAqICAgUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXMuXG4gKiBgKTtcbiAqIC8vIEFzayB0aGUgR2VuaWUgc3BhY2UgXCJkZWZhdWx0XCIgYSBxdWVzdGlvbi5cbiAqIC8vIFBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzLlxuICpcbiAqIHRvRGVzY3JpcHRpb24oW1xuICogICBgXG4gKiAgICAgQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogICAgIFBocmFzZSBpdCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUuXG4gKiAgIGAsXG4gKiAgIHsgYnVsbGV0czogW1xuICogICAgIFtcIlBhc3MgdGhlIGFuc3dlciB0aHJvdWdoIGFzLWlzXCIsIHsgbnVtYmVyZWQ6IFtcIml0ZW1cIiwgXCJpdGVtXCJdIH1dLFxuICogICBdfSxcbiAqICAgeyBJbnN0cnVjdGlvbnM6IFwiUmVwbHkgd2l0aCB0aGUgU1FMIG9ubHkuXCIgfSxcbiAqIF0pO1xuICogLy8gQXNrIHRoZSBHZW5pZSBzcGFjZSBhIHF1ZXN0aW9uLlxuICogLy8gUGhyYXNlIGl0IGZyb20gdGhlIHVzZXIncyBwZXJzcGVjdGl2ZS5cbiAqIC8vIC0gUGFzcyB0aGUgYW5zd2VyIHRocm91Z2ggYXMtaXNcbiAqIC8vICAgMS4gaXRlbVxuICogLy8gICAyLiBpdGVtXG4gKiAvL1xuICogLy8gSW5zdHJ1Y3Rpb25zOlxuICogLy9cbiAqIC8vIFJlcGx5IHdpdGggdGhlIFNRTCBvbmx5LlxuICogYGBgXG4gKlxuICogU2VlIHtAbGluayBEZXNjcmlwdGlvbn0gZm9yIHRoZSBub2RlIGdyYW1tYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0aW9uKG5vZGU6IERlc2NyaXB0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlbmRlckJsb2NrKG5vZGUsIFwiXCIpXG4gICAgLnJlcGxhY2UoL1sgXFx0XSskL2dtLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXG4rJC8sIFwiXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCbG9jayhub2RlOiBEZXNjcmlwdGlvbiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gXCJcIjtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gcHJlcGVuZFBhZChkZWRlbnRTZWN0aW9uKG5vZGUpLCBwYWQpO1xuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkgcmV0dXJuIHJlbmRlclNlcXVlbmNlKG5vZGUsIHBhZCk7XG4gIGNvbnN0IGtpbmQgPSBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgaWYgKGtpbmQpIHtcbiAgICByZXR1cm4gcmVuZGVyTGlzdCgobm9kZSBhcyBSZWNvcmQ8TGlzdEtpbmQsIHJlYWRvbmx5IERlc2NyaXB0aW9uW10+KVtraW5kXSwgcGFkLCBraW5kKTtcbiAgfVxuICByZXR1cm4gcmVuZGVyTWFwKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgRGVzY3JpcHRpb24+LCBwYWQpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHN0cmluZyBzZWN0aW9uOiByaWdodC1zdHJpcCBldmVyeSBsaW5lLCBkcm9wIHRoZVxuICogY29tbW9uIGxlYWRpbmctd2hpdGVzcGFjZSBwcmVmaXggc2hhcmVkIGJ5IGFsbCBub24tYmxhbmsgbGluZXMsXG4gKiBhbmQgdHJpbSBsZWFkaW5nIC8gdHJhaWxpbmcgYmxhbmsgbGluZXMuIE1hdGNoZXMgUHl0aG9uJ3NcbiAqIGB0ZXh0d3JhcC5kZWRlbnRgIHNlbWFudGljcyBzbyBlbWJlZGRlZCBpbmRlbnRlZCB0ZW1wbGF0ZVxuICogbGl0ZXJhbHMgcm91bmQtdHJpcCBjbGVhbmx5LlxuICovXG5mdW5jdGlvbiBkZWRlbnRTZWN0aW9uKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IGxpbmVzID0gdGV4dC5zcGxpdChcIlxcblwiKS5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZSgvWyBcXHRdKyQvLCBcIlwiKSk7XG4gIGxldCBtaW4gPSBJbmZpbml0eTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgaWYgKCFsaW5lKSBjb250aW51ZTtcbiAgICBjb25zdCBtYXRjaCA9IC9eWyBcXHRdKi8uZXhlYyhsaW5lKTtcbiAgICBjb25zdCB3aWR0aCA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICBpZiAod2lkdGggPCBtaW4pIG1pbiA9IHdpZHRoO1xuICB9XG4gIGNvbnN0IHN0cmlwcGVkID1cbiAgICBtaW4gPT09IEluZmluaXR5IHx8IG1pbiA9PT0gMCA/IGxpbmVzIDogbGluZXMubWFwKChsaW5lKSA9PiAobGluZSA/IGxpbmUuc2xpY2UobWluKSA6IFwiXCIpKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgbGV0IGVuZCA9IHN0cmlwcGVkLmxlbmd0aDtcbiAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICFzdHJpcHBlZFtzdGFydF0pIHN0YXJ0ICs9IDE7XG4gIHdoaWxlIChlbmQgPiBzdGFydCAmJiAhc3RyaXBwZWRbZW5kIC0gMV0pIGVuZCAtPSAxO1xuICByZXR1cm4gc3RyaXBwZWQuc2xpY2Uoc3RhcnQsIGVuZCkuam9pbihcIlxcblwiKTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgaXMgdHJlYXRlZCBhcyBhIHR5cGVkIGxpc3Qgb25seSB3aGVuIGl0IGhhcyBleGFjdGx5IG9uZVxuICogb3duIGtleSwgdGhhdCBrZXkgaXMgYGJ1bGxldHNgIG9yIGBudW1iZXJlZGAsIGFuZCB0aGUgdmFsdWUgaXMgYW5cbiAqIGFycmF5LiBFdmVyeXRoaW5nIGVsc2UgaXMgYSBoZWFkZXJzIG1hcCAtIHNvIGNhbGxlcnMgd2FudGluZyBhXG4gKiBzaW5nbGUgaGVhZGVyIGxpdGVyYWxseSBuYW1lZCBgYnVsbGV0c2Agb3IgYG51bWJlcmVkYCBjYW4gdXNlIGFcbiAqIG11bHRpLWtleSBtYXAgb3IgcmVuYW1lLlxuICovXG5mdW5jdGlvbiBsaXN0S2luZChub2RlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IExpc3RLaW5kIHwgbnVsbCB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhub2RlKTtcbiAgaWYgKGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5ID0ga2V5c1swXSE7XG4gIGlmICgoTElTVF9LRVlTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhrZXkpICYmIEFycmF5LmlzQXJyYXkobm9kZVtrZXldKSkge1xuICAgIHJldHVybiBrZXkgYXMgTGlzdEtpbmQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmRQYWQodGV4dDogc3RyaW5nLCBwYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdGV4dCkgcmV0dXJuIFwiXCI7XG4gIGlmICghcGFkKSByZXR1cm4gdGV4dDtcbiAgcmV0dXJuIHRleHRcbiAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAubWFwKChsaW5lKSA9PiAobGluZSA/IHBhZCArIGxpbmUgOiBcIlwiKSlcbiAgICAuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU2VxdWVuY2UoaXRlbXM6IHJlYWRvbmx5IERlc2NyaXB0aW9uW10sIHBhZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVuZGVyZWQ6IHsgdGV4dDogc3RyaW5nOyBub2RlOiBEZXNjcmlwdGlvbiB9W10gPSBbXTtcbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgdGV4dCA9IHJlbmRlckJsb2NrKGl0ZW0sIHBhZCk7XG4gICAgaWYgKCF0ZXh0KSBjb250aW51ZTtcbiAgICByZW5kZXJlZC5wdXNoKHsgdGV4dCwgbm9kZTogaXRlbSB9KTtcbiAgfVxuICBpZiAocmVuZGVyZWQubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIjtcbiAgbGV0IG91dCA9IHJlbmRlcmVkWzBdIS50ZXh0O1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHJlbmRlcmVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qgc2VwID0gbmVlZHNCbGFua0xpbmVCZXR3ZWVuKHJlbmRlcmVkW2kgLSAxXSEubm9kZSwgcmVuZGVyZWRbaV0hLm5vZGUpID8gXCJcXG5cXG5cIiA6IFwiXFxuXCI7XG4gICAgb3V0ICs9IHNlcCArIHJlbmRlcmVkW2ldIS50ZXh0O1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogTWFwcyBhbHdheXMgY3JlYXRlIHRoZWlyIG93biBzZWN0aW9uIGJvdW5kYXJ5IChhIGBIZWFkZXI6YCBsaW5lIHBsdXNcbiAqIGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGJvZHkpLCBzbyBhbnl0aGluZyB0b3VjaGluZyBhIG1hcCBnZXRzIGFcbiAqIGJsYW5rLWxpbmUgYnJlYWsuIFBsYWluIHRleHQgYWRqYWNlbnQgdG8gYSB0eXBlZCBsaXN0IGZsdXNoZXNcbiAqIHRvZ2V0aGVyIGluIGVpdGhlciBkaXJlY3Rpb246IHRleHQtYmVmb3JlLWxpc3QgcmVhZHMgYXMgYSBsZWFkLWluLFxuICogdGV4dC1hZnRlci1saXN0IGFzIGEgdHJhaWxpbmcgc3VtbWFyeS4gVHdvIHRleHQgcGFyYWdyYXBocyBhbmQgdHdvXG4gKiBhZGphY2VudCBsaXN0cyBib3RoIGdldCBhIGJsYW5rLWxpbmUgYnJlYWsgZm9yIGxlZ2liaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIG5lZWRzQmxhbmtMaW5lQmV0d2VlbihwcmV2OiBEZXNjcmlwdGlvbiwgY3VycjogRGVzY3JpcHRpb24pOiBib29sZWFuIHtcbiAgaWYgKGlzTWFwKHByZXYpIHx8IGlzTWFwKGN1cnIpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgcHJldklzVGV4dCA9IHR5cGVvZiBwcmV2ID09PSBcInN0cmluZ1wiO1xuICBjb25zdCBjdXJySXNUZXh0ID0gdHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCI7XG4gIGlmIChwcmV2SXNUZXh0ICE9PSBjdXJySXNUZXh0KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEEgbm9kZSBpcyBhIGhlYWRlcnMgbWFwIHdoZW4gaXQgaXMgYSBub24tYXJyYXksIG5vbi1saXN0IG9iamVjdC5cbiAqIGBidWxsZXRzYCAvIGBudW1iZXJlZGAgc2luZ2xlLWtleSBvYmplY3RzIGFyZSB0aGUgb25seSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3RzIHRoYXQgYXJlbid0IG1hcHMuXG4gKi9cbmZ1bmN0aW9uIGlzTWFwKG5vZGU6IERlc2NyaXB0aW9uKTogYm9vbGVhbiB7XG4gIGlmIChub2RlID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBub2RlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBsaXN0S2luZChub2RlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGlzdChpdGVtczogcmVhZG9ubHkgRGVzY3JpcHRpb25bXSwgcGFkOiBzdHJpbmcsIGtpbmQ6IExpc3RLaW5kKTogc3RyaW5nIHtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGl0ZW1zWzBdID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHByZXBlbmRQYWQoaXRlbXNbMF0sIHBhZCk7XG4gIH1cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0hO1xuICAgIGNvbnN0IG1hcmtlciA9IGtpbmQgPT09IFwiYnVsbGV0c1wiID8gXCItIFwiIDogYCR7aSArIDF9LiBgO1xuICAgIGNvbnN0IGJvZHkgPSByZW5kZXJCbG9jayhpdGVtLCBcIlwiKTtcbiAgICBjb25zdCBib2R5TGluZXMgPSBib2R5LnNwbGl0KFwiXFxuXCIpO1xuICAgIGxpbmVzLnB1c2goYCR7cGFkfSR7bWFya2VyfSR7Ym9keUxpbmVzWzBdID8/IFwiXCJ9YCk7XG4gICAgY29uc3QgY29udGludWF0aW9uID0gcGFkICsgXCIgXCIucmVwZWF0KG1hcmtlci5sZW5ndGgpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBib2R5TGluZXMuc2xpY2UoMSkpIHtcbiAgICAgIGxpbmVzLnB1c2gobGluZSA/IGAke2NvbnRpbnVhdGlvbn0ke2xpbmV9YCA6IFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTWFwKG5vZGU6IFJlY29yZDxzdHJpbmcsIERlc2NyaXB0aW9uPiwgcGFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcbiAgICBjb25zdCBib2R5ID0gcmVuZGVyQmxvY2sodmFsdWUsIHBhZCk7XG4gICAgaWYgKCFib2R5ICYmICFoZWFkZXIudHJpbSgpKSBjb250aW51ZTtcbiAgICBjb25zdCBoZWFkZXJMaW5lID0gaGVhZGVyLnRyaW0oKSA/IGAke3BhZH0ke2hlYWRlcn06YCA6IFwiXCI7XG4gICAgcGFydHMucHVzaChib2R5ID8gYCR7aGVhZGVyTGluZX1cXG5cXG4ke2JvZHl9YCA6IGhlYWRlckxpbmUpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhIGNvdW50IHdpdGggaXRzIG5vdW4sIHBsdXJhbGl6aW5nIChuYWl2ZSBgK3NgKSB1bmxlc3MgdGhlIGNvdW50IGlzIDE6XG4gKiBgcGx1cmFsaXplKDEsIFwiYmFycmVsXCIpYCAtPiBgXCIxIGJhcnJlbFwiYCwgYHBsdXJhbGl6ZSgzLCBcImJhcnJlbFwiKWAgLT5cbiAqIGBcIjMgYmFycmVsc1wiYC4gQ29sbGFwc2VzIHRoZSBgJHtufSBub3VuJHtuID09PSAxID8gXCJcIiA6IFwic1wifWAgaWRpb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwbHVyYWxpemUoY291bnQ6IG51bWJlciwgbm91bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NvdW50fSAke25vdW59JHtjb3VudCA9PT0gMSA/IFwiXCIgOiBcInNcIn1gO1xufVxuXG4vKipcbiAqIFRpdGxlLWNhc2UgYSBzbmFrZSAvIGtlYmFiIC8gY2FtZWwgaWRlbnRpZmllciBpbnRvIGEgaHVtYW4tcmVhZGFibGUgbGFiZWw6XG4gKiB0b2tlbml6ZSAobG93ZXJjYXNlZCwgY2FwaXRhbGl6ZWQpLCB0aGVuIGpvaW4gd2l0aCBzcGFjZXMuIEZhbGxzIGJhY2sgdG9cbiAqIHRoZSByYXcgYHZhbHVlYCB3aGVuIGl0IHlpZWxkcyBubyB0b2tlbnMgKGUuZy4gcHVuY3R1YXRpb24tb25seSBpbnB1dCkuXG4gKiBgYmdlX2xhcmdlX2VuYCAtPiBgXCJCZ2UgTGFyZ2UgRW5cImAsIGBwcm9tcHRJZGAgLT4gYFwiUHJvbXB0IElkXCJgLlxuICpcbiAqIFRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgXCJodW1hbml6ZSBhIGNvbHVtbiAvIGZpZWxkIG5hbWVcIiBpZGlvbSAtXG4gKiByZXVzZWQgYnkgdGhlIGNoYXQgZGF0YS1ncmlkIGhlYWRlcnMgYW5kIHRoZSBleHBvcnQgcmVuZGVyZXIuIEV4dHJhXG4gKiB7QGxpbmsgVG9rZW5pemVPcHRpb25zfSAoZS5nLiBgY2FtZWxDYXNlOiBmYWxzZWApIG1lcmdlIG92ZXIgdGhlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9MYWJlbCh2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogVG9rZW5pemVPcHRpb25zKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zID0gWy4uLnRva2VuaXplV2l0aE9wdGlvbnMoeyBsb3dlckNhc2U6IHRydWUsIGNhcGl0YWxpemU6IHRydWUsIC4uLm9wdGlvbnMgfSwgdmFsdWUpXTtcbiAgcmV0dXJuIHRva2Vucy5sZW5ndGggPiAwID8gdG9rZW5zLmpvaW4oXCIgXCIpIDogdmFsdWU7XG59XG5cbi8qKlxuICogVXBwZXItY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGB2YWx1ZWAsIGxlYXZpbmcgdGhlIHJlc3QgdW50b3VjaGVkLlxuICogYFwid29ya2luZ1wiYCAtPiBgXCJXb3JraW5nXCJgLiBDb2xsYXBzZXMgdGhlXG4gKiBgcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSlgIGlkaW9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKSA6IHZhbHVlO1xufVxuIl19
|
package/lib/src/token.d.ts
CHANGED
package/lib/src/token.js
CHANGED
|
@@ -123,4 +123,4 @@ function* iterateClaims(input, distinct = true) {
|
|
|
123
123
|
}
|
|
124
124
|
yield* visit(input);
|
|
125
125
|
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxRQUFRLENBQUM7QUFDN0QsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFL0MsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUM7QUFDMUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVuQzs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE9BQWU7SUFDdkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRSxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMs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LENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKV1QgYWNjZXNzLXRva2VuIGhlbHBlcnMgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBQYXJzZXMgYmVhcmVyIHRva2VucyBhbmQgYHgtZm9yd2FyZGVkLWFjY2Vzcy10b2tlbmAgcGF5bG9hZHMgdG8gcmVhZFxuICogT0F1dGggc2NvcGVzIGFuZCBvdGhlciBjbGFpbXMgZnJvbSBpbmNvbWluZyBIVFRQIHJlcXVlc3RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBmb3JFYWNoSGVhZGVyVmFsdWUsIHR5cGUgSGVhZGVyTGlrZSB9IGZyb20gXCIuL2h0dHBcIjtcbmltcG9ydCAqIGFzIGpzb24gZnJvbSBcIi4vanNvblwiO1xuaW1wb3J0IHsgaXNMZXZlbEVuYWJsZWQsIGxvZ2dlciB9IGZyb20gXCIuL2xvZ1wiO1xuXG5jb25zdCBCRUFSRVJfUFJFRklYX1JFR0VYID0gL15iZWFyZXJcXHMrL2k7XG5jb25zdCBTUExJVF9SRUdFWCA9IC9cXHMrfFxccyosXFxzKi87XG5jb25zdCBsb2cgPSBsb2dnZXIoXCJzaGFyZWQvdG9rZW5cIik7XG5cbi8qKlxuICogRGVjb2RlIGEgSldUIHNlZ21lbnQgKGJhc2U2NHVybCB3aXRoIHN0YW5kYXJkIGJhc2U2NCBwYWRkaW5nKSwgb3JcbiAqIGB1bmRlZmluZWRgIHdoZW4gdGhlIHNlZ21lbnQgaXMgbm90IHZhbGlkIGJhc2U2NC5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlSnd0U2VnbWVudChzZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBub3JtYWxpemVkID0gc2VnbWVudC5yZXBsYWNlKC8tL2csIFwiK1wiKS5yZXBsYWNlKC9fL2csIFwiL1wiKTtcbiAgY29uc3QgcGFkZGVkID0gbm9ybWFsaXplZCArIFwiPVwiLnJlcGVhdCgoNCAtIChub3JtYWxpemVkLmxlbmd0aCAlIDQpKSAlIDQpO1xuICB0cnkge1xuICAgIGNvbnN0IGJpbmFyeSA9IGF0b2IocGFkZGVkKTtcbiAgICBjb25zdCBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShiaW5hcnksIChjaCkgPT4gY2guY2hhckNvZGVBdCgwKSk7XG4gICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShieXRlcyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNvZGUgdGhlIEpXVCBwYXlsb2FkIGZyb20gYSBiZWFyZXIgdG9rZW4gc3RyaW5nIG9yIHJlcXVlc3QgaGVhZGVycy5cbiAqXG4gKiBXaGVuIGBpbnB1dGAgaXMgaGVhZGVyLWxpa2UsIHdhbGtzIGV2ZXJ5IHZhbHVlIGZvciBgaGVhZGVyTmFtZWAgKGRlZmF1bHRcbiAqIGB4LWZvcndhcmRlZC1hY2Nlc3MtdG9rZW5gKSBhbmQgbWVyZ2VzIGNsYWltIGtleXMgbGVmdC10by1yaWdodC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuUGF5bG9hZChcbiAgaW5wdXQ6IEhlYWRlckxpa2UgfCBzdHJpbmcsXG4gIGhlYWRlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwieC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuXCIsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGxldCBhY2Nlc3NUb2tlblBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAoISh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgaWYgKGhlYWRlck5hbWUpIHtcbiAgICAgIGZvckVhY2hIZWFkZXJWYWx1ZShpbnB1dCwgaGVhZGVyTmFtZSwgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbcGF5bG9hZEtleSwgcGF5bG9hZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhnZXRBY2Nlc3NUb2tlblBheWxvYWQodmFsdWUpKSkge1xuICAgICAgICAgIGlmICghYWNjZXNzVG9rZW5QYXlsb2FkIHx8ICEocGF5bG9hZEtleSBpbiBhY2Nlc3NUb2tlblBheWxvYWQpKSB7XG4gICAgICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuUGF5bG9hZCkgYWNjZXNzVG9rZW5QYXlsb2FkID0ge307XG4gICAgICAgICAgICBhY2Nlc3NUb2tlblBheWxvYWRbcGF5bG9hZEtleV0gPSBwYXlsb2FkVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBtYXRjaCA9IEJFQVJFUl9QUkVGSVhfUkVHRVguZXhlYyhpbnB1dCk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShlbmRJbmRleCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KFwiLlwiLCA0KTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIgfHwgcGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIC8vIEEgbWFsZm9ybWVkIHNlZ21lbnQgeWllbGRzIHVuZGVmaW5lZDsgZmFsbCB0aHJvdWdoIHRvIGVtcHR5IG9iamVjdC5cbiAgICAgICAgYWNjZXNzVG9rZW5QYXlsb2FkID0ganNvbi5wYXJzZVJlY29yZChkZWNvZGVKd3RTZWdtZW50KHBhcnRzWzFdISkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWFjY2Vzc1Rva2VuUGF5bG9hZCkgYWNjZXNzVG9rZW5QYXlsb2FkID0ge307XG4gIGxvZy5kZWJ1ZyhcImdldEFjY2Vzc1Rva2VuUGF5bG9hZFwiLCB7IGFjY2Vzc1Rva2VuUGF5bG9hZCB9KTtcbiAgcmV0dXJuIGFjY2Vzc1Rva2VuUGF5bG9hZDtcbn1cblxuLyoqXG4gKiBPQXV0aCBzY29wZXMgZnJvbSB0aGUgYWNjZXNzLXRva2VuIEpXVCBvbiBgaW5wdXRgLlxuICpcbiAqIERlZmF1bHRzIHRvIHRoZSBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCBoZWFkZXIsIHdoaWNoIERhdGFicmlja3MgQXBwc1xuICogZm9yd2FyZCBmcm9tIHRoZSBicm93c2VyIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblNjb3BlcyhcbiAgaW5wdXQ6IEhlYWRlckxpa2UgfCBzdHJpbmcsXG4gIGhlYWRlck5hbWU/OiBzdHJpbmcsXG4pOiBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgY29uc3QgcGF5bG9hZCA9IGdldEFjY2Vzc1Rva2VuUGF5bG9hZChpbnB1dCwgaGVhZGVyTmFtZSk7XG4gIGxldCBhY2Nlc3NUb2tlblNjb3BlczogSXRlcmFibGU8c3RyaW5nPiA9IGl0ZXJhdGVDbGFpbXMocGF5bG9hZC5zY29wZSk7XG4gIGlmIChpc0xldmVsRW5hYmxlZChcImRlYnVnXCIpKSB7XG4gICAgYWNjZXNzVG9rZW5TY29wZXMgPSBBcnJheS5mcm9tKGFjY2Vzc1Rva2VuU2NvcGVzKTtcbiAgICBsb2cuZGVidWcoXCJnZXRBY2Nlc3NUb2tlblNjb3Blc1wiLCB7IGFjY2Vzc1Rva2VuU2NvcGVzIH0pO1xuICB9XG4gIHJldHVybiBhY2Nlc3NUb2tlblNjb3Blcztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSB3aGVuIGBzY29wZXNgIGNvbnRhaW5zIGFueSB2YWx1ZSBmcm9tIGBhbGxvd2VkYC5cbiAqXG4gKiBBY2NlcHRzIHRoZSByYXcge0BsaW5rIE1BU1RSQV9TQ09QRVNfS0VZfSBhcnJheSBzdGFtcGVkIG9uXG4gKiBgUmVxdWVzdENvbnRleHRgIGFzIHdlbGwgYXMgaXRlcmFibGVzIGZyb20ge0BsaW5rIGdldEFjY2Vzc1Rva2VuU2NvcGVzfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzQWNjZXNzVG9rZW5TY29wZShzY29wZXM6IHVua25vd24sIGFsbG93ZWQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChhbGxvd2VkLmxlbmd0aCkge1xuICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgaXRlcmF0ZUNsYWltcyhzY29wZXMpKSB7XG4gICAgICBpZiAoYWxsb3dlZC5pbmNsdWRlcyhzY29wZSkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlXCIsIHsgc2NvcGUsIGFsbG93ZWQgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBTcGxpdCBhIEpXVCBgc2NvcGVgIGNsYWltIHN0cmluZyBvciBhcnJheSBpbnRvIGluZGl2aWR1YWwgc2NvcGUgdG9rZW5zLiAqL1xuZnVuY3Rpb24qIGl0ZXJhdGVDbGFpbXMoaW5wdXQ6IHVua25vd24sIGRpc3RpbmN0ID0gdHJ1ZSk6IEl0ZXJhYmxlPHN0cmluZz4ge1xuICBjb25zdCBzZWVuID0gZGlzdGluY3QgPyBuZXcgU2V0PHN0cmluZz4oKSA6IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiogdmlzaXQodmFsdWU6IHVua25vd24pOiBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYWltIG9mIHZhbHVlLnNwbGl0KFNQTElUX1JFR0VYKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGNsYWltLnRyaW0oKTtcbiAgICAgICAgaWYgKCF0b2tlbiB8fCBzZWVuPy5oYXModG9rZW4pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbj8uYWRkKHRva2VuKTtcbiAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHlpZWxkKiB2aXNpdChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB5aWVsZCogdmlzaXQoaW5wdXQpO1xufVxuIl19
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEQsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUM7QUFDMUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVuQzs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE9BQWU7SUFDdkMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRSxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUEwQixFQUMxQixhQUFpQywwQkFBMEI7SUFFM0QsSUFBSSxrQkFBdUQsQ0FBQztJQUM1RCxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQ3RELEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdEYsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksa0JBQWtCLENBQUMsRUFBRSxDQUFDO3dCQUMvRCxJQUFJLENBQUMsa0JBQWtCOzRCQUFFLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzt3QkFDakQsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDO29CQUNoRCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDL0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0Msc0VBQXNFO2dCQUN0RSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxDQUFDLGtCQUFrQjtRQUFFLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUNqRCxHQUFHLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzNELE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxLQUEwQixFQUMxQixVQUFtQjtJQUVuQixNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsSUFBSSxpQkFBaUIsR0FBcUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVCLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLGlCQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxNQUFlLEVBQUUsT0FBMEI7SUFDbEYsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkIsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBYyxFQUFFLFFBQVEsR0FBRyxJQUFJO0lBQ3JELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXRELFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFjO1FBQzVCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQy9CLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQixNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBKV1QgYWNjZXNzLXRva2VuIGhlbHBlcnMgZm9yIERhdGFicmlja3MgQXBwcy5cbiAqXG4gKiBQYXJzZXMgYmVhcmVyIHRva2VucyBhbmQgYHgtZm9yd2FyZGVkLWFjY2Vzcy10b2tlbmAgcGF5bG9hZHMgdG8gcmVhZFxuICogT0F1dGggc2NvcGVzIGFuZCBvdGhlciBjbGFpbXMgZnJvbSBpbmNvbWluZyBIVFRQIHJlcXVlc3RzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBmb3JFYWNoSGVhZGVyVmFsdWUsIHR5cGUgSGVhZGVyTGlrZSB9IGZyb20gXCIuL2h0dHAudHNcIjtcbmltcG9ydCAqIGFzIGpzb24gZnJvbSBcIi4vanNvbi50c1wiO1xuaW1wb3J0IHsgaXNMZXZlbEVuYWJsZWQsIGxvZ2dlciB9IGZyb20gXCIuL2xvZy50c1wiO1xuXG5jb25zdCBCRUFSRVJfUFJFRklYX1JFR0VYID0gL15iZWFyZXJcXHMrL2k7XG5jb25zdCBTUExJVF9SRUdFWCA9IC9cXHMrfFxccyosXFxzKi87XG5jb25zdCBsb2cgPSBsb2dnZXIoXCJzaGFyZWQvdG9rZW5cIik7XG5cbi8qKlxuICogRGVjb2RlIGEgSldUIHNlZ21lbnQgKGJhc2U2NHVybCB3aXRoIHN0YW5kYXJkIGJhc2U2NCBwYWRkaW5nKSwgb3JcbiAqIGB1bmRlZmluZWRgIHdoZW4gdGhlIHNlZ21lbnQgaXMgbm90IHZhbGlkIGJhc2U2NC5cbiAqL1xuZnVuY3Rpb24gZGVjb2RlSnd0U2VnbWVudChzZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBub3JtYWxpemVkID0gc2VnbWVudC5yZXBsYWNlKC8tL2csIFwiK1wiKS5yZXBsYWNlKC9fL2csIFwiL1wiKTtcbiAgY29uc3QgcGFkZGVkID0gbm9ybWFsaXplZCArIFwiPVwiLnJlcGVhdCgoNCAtIChub3JtYWxpemVkLmxlbmd0aCAlIDQpKSAlIDQpO1xuICB0cnkge1xuICAgIGNvbnN0IGJpbmFyeSA9IGF0b2IocGFkZGVkKTtcbiAgICBjb25zdCBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShiaW5hcnksIChjaCkgPT4gY2guY2hhckNvZGVBdCgwKSk7XG4gICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShieXRlcyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNvZGUgdGhlIEpXVCBwYXlsb2FkIGZyb20gYSBiZWFyZXIgdG9rZW4gc3RyaW5nIG9yIHJlcXVlc3QgaGVhZGVycy5cbiAqXG4gKiBXaGVuIGBpbnB1dGAgaXMgaGVhZGVyLWxpa2UsIHdhbGtzIGV2ZXJ5IHZhbHVlIGZvciBgaGVhZGVyTmFtZWAgKGRlZmF1bHRcbiAqIGB4LWZvcndhcmRlZC1hY2Nlc3MtdG9rZW5gKSBhbmQgbWVyZ2VzIGNsYWltIGtleXMgbGVmdC10by1yaWdodC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuUGF5bG9hZChcbiAgaW5wdXQ6IEhlYWRlckxpa2UgfCBzdHJpbmcsXG4gIGhlYWRlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwieC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuXCIsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGxldCBhY2Nlc3NUb2tlblBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBpZiAoISh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgaWYgKGhlYWRlck5hbWUpIHtcbiAgICAgIGZvckVhY2hIZWFkZXJWYWx1ZShpbnB1dCwgaGVhZGVyTmFtZSwgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBbcGF5bG9hZEtleSwgcGF5bG9hZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhnZXRBY2Nlc3NUb2tlblBheWxvYWQodmFsdWUpKSkge1xuICAgICAgICAgIGlmICghYWNjZXNzVG9rZW5QYXlsb2FkIHx8ICEocGF5bG9hZEtleSBpbiBhY2Nlc3NUb2tlblBheWxvYWQpKSB7XG4gICAgICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuUGF5bG9hZCkgYWNjZXNzVG9rZW5QYXlsb2FkID0ge307XG4gICAgICAgICAgICBhY2Nlc3NUb2tlblBheWxvYWRbcGF5bG9hZEtleV0gPSBwYXlsb2FkVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaW5wdXQgPSBpbnB1dC50cmltKCk7XG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBjb25zdCBtYXRjaCA9IEJFQVJFUl9QUkVGSVhfUkVHRVguZXhlYyhpbnB1dCk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5zbGljZShlbmRJbmRleCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KFwiLlwiLCA0KTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIgfHwgcGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIC8vIEEgbWFsZm9ybWVkIHNlZ21lbnQgeWllbGRzIHVuZGVmaW5lZDsgZmFsbCB0aHJvdWdoIHRvIGVtcHR5IG9iamVjdC5cbiAgICAgICAgYWNjZXNzVG9rZW5QYXlsb2FkID0ganNvbi5wYXJzZVJlY29yZChkZWNvZGVKd3RTZWdtZW50KHBhcnRzWzFdISkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWFjY2Vzc1Rva2VuUGF5bG9hZCkgYWNjZXNzVG9rZW5QYXlsb2FkID0ge307XG4gIGxvZy5kZWJ1ZyhcImdldEFjY2Vzc1Rva2VuUGF5bG9hZFwiLCB7IGFjY2Vzc1Rva2VuUGF5bG9hZCB9KTtcbiAgcmV0dXJuIGFjY2Vzc1Rva2VuUGF5bG9hZDtcbn1cblxuLyoqXG4gKiBPQXV0aCBzY29wZXMgZnJvbSB0aGUgYWNjZXNzLXRva2VuIEpXVCBvbiBgaW5wdXRgLlxuICpcbiAqIERlZmF1bHRzIHRvIHRoZSBgeC1mb3J3YXJkZWQtYWNjZXNzLXRva2VuYCBoZWFkZXIsIHdoaWNoIERhdGFicmlja3MgQXBwc1xuICogZm9yd2FyZCBmcm9tIHRoZSBicm93c2VyIHNlc3Npb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlblNjb3BlcyhcbiAgaW5wdXQ6IEhlYWRlckxpa2UgfCBzdHJpbmcsXG4gIGhlYWRlck5hbWU/OiBzdHJpbmcsXG4pOiBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgY29uc3QgcGF5bG9hZCA9IGdldEFjY2Vzc1Rva2VuUGF5bG9hZChpbnB1dCwgaGVhZGVyTmFtZSk7XG4gIGxldCBhY2Nlc3NUb2tlblNjb3BlczogSXRlcmFibGU8c3RyaW5nPiA9IGl0ZXJhdGVDbGFpbXMocGF5bG9hZC5zY29wZSk7XG4gIGlmIChpc0xldmVsRW5hYmxlZChcImRlYnVnXCIpKSB7XG4gICAgYWNjZXNzVG9rZW5TY29wZXMgPSBBcnJheS5mcm9tKGFjY2Vzc1Rva2VuU2NvcGVzKTtcbiAgICBsb2cuZGVidWcoXCJnZXRBY2Nlc3NUb2tlblNjb3Blc1wiLCB7IGFjY2Vzc1Rva2VuU2NvcGVzIH0pO1xuICB9XG4gIHJldHVybiBhY2Nlc3NUb2tlblNjb3Blcztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSB3aGVuIGBzY29wZXNgIGNvbnRhaW5zIGFueSB2YWx1ZSBmcm9tIGBhbGxvd2VkYC5cbiAqXG4gKiBBY2NlcHRzIHRoZSByYXcge0BsaW5rIE1BU1RSQV9TQ09QRVNfS0VZfSBhcnJheSBzdGFtcGVkIG9uXG4gKiBgUmVxdWVzdENvbnRleHRgIGFzIHdlbGwgYXMgaXRlcmFibGVzIGZyb20ge0BsaW5rIGdldEFjY2Vzc1Rva2VuU2NvcGVzfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzQWNjZXNzVG9rZW5TY29wZShzY29wZXM6IHVua25vd24sIGFsbG93ZWQ6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChhbGxvd2VkLmxlbmd0aCkge1xuICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgaXRlcmF0ZUNsYWltcyhzY29wZXMpKSB7XG4gICAgICBpZiAoYWxsb3dlZC5pbmNsdWRlcyhzY29wZSkpIHtcbiAgICAgICAgbG9nLmRlYnVnKFwiaW5jbHVkZXNBY2Nlc3NUb2tlblNjb3BlXCIsIHsgc2NvcGUsIGFsbG93ZWQgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBTcGxpdCBhIEpXVCBgc2NvcGVgIGNsYWltIHN0cmluZyBvciBhcnJheSBpbnRvIGluZGl2aWR1YWwgc2NvcGUgdG9rZW5zLiAqL1xuZnVuY3Rpb24qIGl0ZXJhdGVDbGFpbXMoaW5wdXQ6IHVua25vd24sIGRpc3RpbmN0ID0gdHJ1ZSk6IEl0ZXJhYmxlPHN0cmluZz4ge1xuICBjb25zdCBzZWVuID0gZGlzdGluY3QgPyBuZXcgU2V0PHN0cmluZz4oKSA6IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiogdmlzaXQodmFsdWU6IHVua25vd24pOiBJdGVyYWJsZTxzdHJpbmc+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYWltIG9mIHZhbHVlLnNwbGl0KFNQTElUX1JFR0VYKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGNsYWltLnRyaW0oKTtcbiAgICAgICAgaWYgKCF0b2tlbiB8fCBzZWVuPy5oYXModG9rZW4pKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbj8uYWRkKHRva2VuKTtcbiAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHlpZWxkKiB2aXNpdChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB5aWVsZCogdmlzaXQoaW5wdXQpO1xufVxuIl19
|
package/package.json
CHANGED
package/src/async.ts
CHANGED
package/src/error.ts
CHANGED
package/src/json.ts
CHANGED
package/src/log.ts
CHANGED
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
* @module
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
|
-
import { memoize } from "./function";
|
|
36
|
-
import { type NameLike, toBoolean } from "./object";
|
|
35
|
+
import { memoize } from "./function.ts";
|
|
36
|
+
import { type NameLike, toBoolean } from "./object.ts";
|
|
37
37
|
|
|
38
38
|
/** `process`-shaped view off `globalThis`, so no node types are needed. */
|
|
39
39
|
interface ProcessLike {
|
package/src/net.ts
CHANGED
package/src/string.ts
CHANGED
package/src/token.ts
CHANGED
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { forEachHeaderValue, type HeaderLike } from "./http";
|
|
11
|
-
import * as json from "./json";
|
|
12
|
-
import { isLevelEnabled, logger } from "./log";
|
|
10
|
+
import { forEachHeaderValue, type HeaderLike } from "./http.ts";
|
|
11
|
+
import * as json from "./json.ts";
|
|
12
|
+
import { isLevelEnabled, logger } from "./log.ts";
|
|
13
13
|
|
|
14
14
|
const BEARER_PREFIX_REGEX = /^bearer\s+/i;
|
|
15
15
|
const SPLIT_REGEX = /\s+|\s*,\s*/;
|