@senior-agronegocio/angular-components 0.0.9863 → 0.0.9864
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/bundles/senior-agronegocio-angular-components.umd.js +330 -25
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js +2 -2
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
- package/common/agro-object-stringifier.class.d.ts +16 -0
- package/common/agro-regex.constant.d.ts +3 -0
- package/common/agro-string-utils.class.d.ts +8 -0
- package/esm2015/common/agro-object-stringifier.class.js +31 -0
- package/esm2015/common/agro-platform-utils.class.js +8 -7
- package/esm2015/common/agro-regex.constant.js +5 -2
- package/esm2015/common/agro-string-utils.class.js +89 -11
- package/esm2015/pipe/cnpj-cpf/cnpj-cpf.pipe.js +28 -0
- package/esm2015/pipe/cnpj-cpf/cnpj-cpf.pipe.module.js +15 -0
- package/esm2015/pipe/cnpj-cpf/index.js +3 -0
- package/esm2015/pipe/index.js +4 -1
- package/esm2015/pipe/stringifier/index.js +3 -0
- package/esm2015/pipe/stringifier/stringifier.pipe.js +13 -0
- package/esm2015/pipe/stringifier/stringifier.pipe.module.js +15 -0
- package/esm2015/pipe/telephone/index.js +3 -0
- package/esm2015/pipe/telephone/telephone.pipe.js +91 -0
- package/esm2015/pipe/telephone/telephone.pipe.module.js +15 -0
- package/esm2015/public-api.js +3 -3
- package/esm2015/senior-agronegocio-angular-components.js +3 -2
- package/esm2015/services/lib-translation.service.js +2 -2
- package/esm5/common/agro-object-stringifier.class.js +35 -0
- package/esm5/common/agro-platform-utils.class.js +8 -7
- package/esm5/common/agro-regex.constant.js +5 -2
- package/esm5/common/agro-string-utils.class.js +106 -17
- package/esm5/pipe/cnpj-cpf/cnpj-cpf.pipe.js +35 -0
- package/esm5/pipe/cnpj-cpf/cnpj-cpf.pipe.module.js +18 -0
- package/esm5/pipe/cnpj-cpf/index.js +3 -0
- package/esm5/pipe/index.js +4 -1
- package/esm5/pipe/stringifier/index.js +3 -0
- package/esm5/pipe/stringifier/stringifier.pipe.js +16 -0
- package/esm5/pipe/stringifier/stringifier.pipe.module.js +18 -0
- package/esm5/pipe/telephone/index.js +3 -0
- package/esm5/pipe/telephone/telephone.pipe.js +95 -0
- package/esm5/pipe/telephone/telephone.pipe.module.js +18 -0
- package/esm5/public-api.js +3 -3
- package/esm5/senior-agronegocio-angular-components.js +3 -2
- package/esm5/services/lib-translation.service.js +2 -2
- package/fesm2015/senior-agronegocio-angular-components.js +280 -19
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
- package/fesm5/senior-agronegocio-angular-components.js +323 -25
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
- package/package.json +7 -55
- package/pipe/cnpj-cpf/cnpj-cpf.pipe.d.ts +4 -0
- package/pipe/cnpj-cpf/cnpj-cpf.pipe.module.d.ts +2 -0
- package/pipe/cnpj-cpf/index.d.ts +2 -0
- package/pipe/index.d.ts +3 -0
- package/pipe/stringifier/index.d.ts +2 -0
- package/pipe/stringifier/stringifier.pipe.d.ts +9 -0
- package/pipe/stringifier/stringifier.pipe.module.d.ts +2 -0
- package/pipe/telephone/index.d.ts +2 -0
- package/pipe/telephone/telephone.pipe.d.ts +21 -0
- package/pipe/telephone/telephone.pipe.module.d.ts +2 -0
- package/public-api.d.ts +2 -2
- package/senior-agronegocio-angular-components.d.ts +2 -1
- package/senior-agronegocio-angular-components.metadata.json +1 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PipeTransform } from "@angular/core";
|
|
2
|
+
export declare type UsePipes = {
|
|
3
|
+
[key: string]: PipeTransform;
|
|
4
|
+
};
|
|
5
|
+
export declare class AgroObjectStringifier {
|
|
6
|
+
/**
|
|
7
|
+
* Formata um objeto concatenando valores segundo as chaves e pipes informados.
|
|
8
|
+
*
|
|
9
|
+
* @param separator Separador entre os valores (ex: "-")
|
|
10
|
+
* @param fields Campos a extrair. Podem conter subpropriedades ("propriedade.subPropriedade") e pipes ("propriedade|nomeDaPipe:arg1:arg2")
|
|
11
|
+
* @param obj Objeto origem
|
|
12
|
+
*/
|
|
13
|
+
static formatObject(separator: string, fields: string[], obj: any, usePipes?: UsePipes): string;
|
|
14
|
+
/** Resolve um caminho tipo "empresa.cargo" dentro de um objeto */
|
|
15
|
+
private static resolvePath;
|
|
16
|
+
}
|
|
@@ -83,6 +83,11 @@ export declare class AgroStringUtils {
|
|
|
83
83
|
static uncapitalize(str: string): string;
|
|
84
84
|
/** Conta o número de ocorrências de uma substring dentro de uma string */
|
|
85
85
|
static countMatches(str: string, substring: string): number;
|
|
86
|
+
/**
|
|
87
|
+
* Remove uma máscara simples da string fornecida.O padrão de máscaras é definido pelo enum AgroStringMasks ou
|
|
88
|
+
* pode ser uma string personalizada onde '9' representa um dígito a ser mantido da string.
|
|
89
|
+
*/
|
|
90
|
+
static removeMask(value: string, mask: AgroStringMasks | string): string;
|
|
86
91
|
/**
|
|
87
92
|
* Aplica uma máscara simples à string fornecida.O padrão de máscaras é definido pelo enum AgroStringMasks ou
|
|
88
93
|
* pode ser uma string personalizada onde '9' representa um dígito a ser substituído pelo caractere correspondente
|
|
@@ -91,4 +96,7 @@ export declare class AgroStringUtils {
|
|
|
91
96
|
static applyMask(value: string, mask: AgroStringMasks | string): string;
|
|
92
97
|
static isValid(str: NullableString): boolean;
|
|
93
98
|
static isInvalid(str: NullableString): boolean;
|
|
99
|
+
static isISODate(value: string): boolean;
|
|
100
|
+
static isISOTime(value: string): boolean;
|
|
101
|
+
static isISODatetime(value: string): boolean;
|
|
94
102
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AgroStringUtils } from "./agro-string-utils.class";
|
|
2
|
+
export class AgroObjectStringifier {
|
|
3
|
+
/**
|
|
4
|
+
* Formata um objeto concatenando valores segundo as chaves e pipes informados.
|
|
5
|
+
*
|
|
6
|
+
* @param separator Separador entre os valores (ex: "-")
|
|
7
|
+
* @param fields Campos a extrair. Podem conter subpropriedades ("propriedade.subPropriedade") e pipes ("propriedade|nomeDaPipe:arg1:arg2")
|
|
8
|
+
* @param obj Objeto origem
|
|
9
|
+
*/
|
|
10
|
+
static formatObject(separator, fields, obj, usePipes) {
|
|
11
|
+
function mapField(field) {
|
|
12
|
+
const value = AgroObjectStringifier.resolvePath(obj, field);
|
|
13
|
+
if (usePipes === null || usePipes === void 0 ? void 0 : usePipes.hasOwnProperty(field)) {
|
|
14
|
+
return usePipes[field].transform(value);
|
|
15
|
+
}
|
|
16
|
+
return value !== null && value !== void 0 ? value : "";
|
|
17
|
+
}
|
|
18
|
+
function filterValid(v) {
|
|
19
|
+
return typeof v === "number" || AgroStringUtils.isValid(v);
|
|
20
|
+
}
|
|
21
|
+
return fields.map(mapField).filter(filterValid).join(` ${separator} `);
|
|
22
|
+
}
|
|
23
|
+
/** Resolve um caminho tipo "empresa.cargo" dentro de um objeto */
|
|
24
|
+
static resolvePath(obj, path) {
|
|
25
|
+
function reducer(acc, key) {
|
|
26
|
+
return acc === null || acc === void 0 ? void 0 : acc[key];
|
|
27
|
+
}
|
|
28
|
+
return path.split(".").reduce(reducer, obj);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1vYmplY3Qtc3RyaW5naWZpZXIuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLW9iamVjdC1zdHJpbmdpZmllci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNNUQsTUFBTSxPQUFPLHFCQUFxQjtJQUM5Qjs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQWlCLEVBQUUsTUFBZ0IsRUFBRSxHQUFRLEVBQUUsUUFBbUI7UUFDbEYsU0FBUyxRQUFRLENBQUMsS0FBYTtZQUMzQixNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGNBQWMsQ0FBQyxLQUFLLEdBQUc7Z0JBQ2pDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQztZQUNELE9BQU8sS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxTQUFTLFdBQVcsQ0FBQyxDQUFrQjtZQUNuQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtFQUFrRTtJQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVEsRUFBRSxJQUFZO1FBQzdDLFNBQVMsT0FBTyxDQUFDLEdBQVEsRUFBRSxHQUFXO1lBQ2xDLE9BQU8sR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFHLEdBQUcsRUFBRTtRQUN0QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZVRyYW5zZm9ybSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFncm9TdHJpbmdVdGlscyB9IGZyb20gXCIuL2Fncm8tc3RyaW5nLXV0aWxzLmNsYXNzXCI7XHJcblxyXG5leHBvcnQgdHlwZSBVc2VQaXBlcyA9IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFBpcGVUcmFuc2Zvcm07XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb09iamVjdFN0cmluZ2lmaWVyIHtcclxuICAgIC8qKlxyXG4gICAgICogRm9ybWF0YSB1bSBvYmpldG8gY29uY2F0ZW5hbmRvIHZhbG9yZXMgc2VndW5kbyBhcyBjaGF2ZXMgZSBwaXBlcyBpbmZvcm1hZG9zLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhZG9yIGVudHJlIG9zIHZhbG9yZXMgKGV4OiBcIi1cIilcclxuICAgICAqIEBwYXJhbSBmaWVsZHMgQ2FtcG9zIGEgZXh0cmFpci4gUG9kZW0gY29udGVyIHN1YnByb3ByaWVkYWRlcyAoXCJwcm9wcmllZGFkZS5zdWJQcm9wcmllZGFkZVwiKSBlIHBpcGVzIChcInByb3ByaWVkYWRlfG5vbWVEYVBpcGU6YXJnMTphcmcyXCIpXHJcbiAgICAgKiBAcGFyYW0gb2JqIE9iamV0byBvcmlnZW1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZvcm1hdE9iamVjdChzZXBhcmF0b3I6IHN0cmluZywgZmllbGRzOiBzdHJpbmdbXSwgb2JqOiBhbnksIHVzZVBpcGVzPzogVXNlUGlwZXMpOiBzdHJpbmcge1xyXG4gICAgICAgIGZ1bmN0aW9uIG1hcEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEFncm9PYmplY3RTdHJpbmdpZmllci5yZXNvbHZlUGF0aChvYmosIGZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKHVzZVBpcGVzPy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VQaXBlc1tmaWVsZF0udHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGZpbHRlclZhbGlkKHY6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIgfHwgQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQodik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmllbGRzLm1hcChtYXBGaWVsZCkuZmlsdGVyKGZpbHRlclZhbGlkKS5qb2luKGAgJHtzZXBhcmF0b3J9IGApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXNvbHZlIHVtIGNhbWluaG8gdGlwbyBcImVtcHJlc2EuY2FyZ29cIiBkZW50cm8gZGUgdW0gb2JqZXRvICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZXNvbHZlUGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuICAgICAgICBmdW5jdGlvbiByZWR1Y2VyKGFjYzogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M/LltrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKHJlZHVjZXIsIG9iaik7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -12,7 +12,7 @@ export class AgroPlatformUtils {
|
|
|
12
12
|
* @returns
|
|
13
13
|
*/
|
|
14
14
|
static getCurrentTenant() {
|
|
15
|
-
const tenant = AgroPlatformUtils.getTokenField(
|
|
15
|
+
const tenant = AgroPlatformUtils.getTokenField("tenantName");
|
|
16
16
|
if (tenant) {
|
|
17
17
|
return tenant;
|
|
18
18
|
}
|
|
@@ -24,17 +24,18 @@ export class AgroPlatformUtils {
|
|
|
24
24
|
* @returns
|
|
25
25
|
*/
|
|
26
26
|
static getCurrentTenantLocale() {
|
|
27
|
-
const locale = AgroPlatformUtils.getTokenField(
|
|
27
|
+
const locale = AgroPlatformUtils.getTokenField("locale");
|
|
28
28
|
if (locale) {
|
|
29
29
|
return locale;
|
|
30
30
|
}
|
|
31
|
-
throw new Error(`
|
|
31
|
+
throw new Error(`'locale' não encontrado para o tenant atual.`);
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* @deprecated Use getCurrentTenantLocale()
|
|
35
35
|
* Mantido por compatibilidade retroativa.
|
|
36
36
|
*/
|
|
37
37
|
static getCurrenTenantLocale() {
|
|
38
|
+
// legacy typo retained
|
|
38
39
|
return AgroPlatformUtils.getCurrentTenantLocale();
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
@@ -43,7 +44,7 @@ export class AgroPlatformUtils {
|
|
|
43
44
|
* @returns string || null
|
|
44
45
|
*/
|
|
45
46
|
static getCurrentUserName() {
|
|
46
|
-
const name = AgroPlatformUtils.getTokenField(
|
|
47
|
+
const name = AgroPlatformUtils.getTokenField("fullName");
|
|
47
48
|
return name || null;
|
|
48
49
|
}
|
|
49
50
|
/**
|
|
@@ -52,7 +53,7 @@ export class AgroPlatformUtils {
|
|
|
52
53
|
* @returns string
|
|
53
54
|
*/
|
|
54
55
|
static getCurrentUserEmail() {
|
|
55
|
-
const email = AgroPlatformUtils.getTokenField(
|
|
56
|
+
const email = AgroPlatformUtils.getTokenField("email");
|
|
56
57
|
if (!email) {
|
|
57
58
|
console.info(`Cookie: "${COOKIE_TOKEN}" não encontrado.`);
|
|
58
59
|
}
|
|
@@ -87,7 +88,7 @@ export class AgroPlatformUtils {
|
|
|
87
88
|
* Caso contrário, retorna uma instância de Error
|
|
88
89
|
*/
|
|
89
90
|
static getCurrentAccessToken() {
|
|
90
|
-
const token = AgroPlatformUtils.getTokenField(
|
|
91
|
+
const token = AgroPlatformUtils.getTokenField("access_token");
|
|
91
92
|
if (!token) {
|
|
92
93
|
console.info(`Cookie: "${COOKIE_TOKEN}" não encontrado.`);
|
|
93
94
|
}
|
|
@@ -105,4 +106,4 @@ export class AgroPlatformUtils {
|
|
|
105
106
|
return obj[field];
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1wbGF0Zm9ybS11dGlscy5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tcGxhdGZvcm0tdXRpbHMuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCx3QkFBd0I7QUFDeEIsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFDeEMsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUM7QUFDOUMsTUFBTSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsaUJBQWlCLElBQUksR0FBRyxFQUFFLGlCQUFpQixJQUFJLGFBQWEsRUFBQyxDQUFDO0FBRXRFLE1BQU0sT0FBTyxpQkFBaUI7SUFDMUI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0I7UUFDbkIsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdELElBQUksTUFBTSxFQUFFO1lBQ1IsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksWUFBWSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQjtRQUN6QixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxNQUFNLEVBQUU7WUFDUixPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQjtRQUN4Qix1QkFBdUI7UUFDdkIsT0FBTyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQjtRQUNyQixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLG1CQUFtQjtRQUN0QixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLG1CQUFtQixDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVTtRQUNiLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxNQUFNLEVBQUU7WUFDUixPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLGVBQWUsbUJBQW1CLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5RCxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxtQkFBbUIsbUJBQW1CLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQjtRQUN4QixNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxZQUFZLG1CQUFtQixDQUFDLENBQUM7U0FDN0Q7UUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFhO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sU0FBUyxDQUFDO1NBQ3BCO1FBQ0QsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZ3JvQ29va2llVXRpbHMgfSBmcm9tIFwiLi9hZ3JvLWNvb2tpZS11dGlscy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBBZ3JvT2JqZWN0VXRpbHMgfSBmcm9tIFwiLi9hZ3JvLW9iamVjdC11dGlscy5jbGFzc1wiO1xyXG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gXCIuL2Fncm8tc3RyaW5nLXV0aWxzLmNsYXNzXCI7XHJcblxyXG4vLyBDb29raWUgbmFtZSBjb25zdGFudHNcclxuY29uc3QgQ09PS0lFX1RPS0VOID0gJ2NvbS5zZW5pb3IudG9rZW4nO1xyXG5jb25zdCBDT09LSUVfQkFTRV9VUkwgPSAnY29tLnNlbmlvci5iYXNlLnVybCc7XHJcbmNvbnN0IENPT0tJRV9TRVJWSUNFU19VUkwgPSAnY29tLnNlbmlvci5zZXJ2aWNlcy51cmwnO1xyXG5cclxuZXhwb3J0IHtBZ3JvUGxhdGZvcm1VdGlscyBhcyBBUFUsIEFncm9QbGF0Zm9ybVV0aWxzIGFzIFBsYXRmb3JtVXRpbHN9O1xyXG5cclxuZXhwb3J0IGNsYXNzIEFncm9QbGF0Zm9ybVV0aWxzIHtcclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIHRlbmFudCBhdHVhbFxyXG4gICAgICogQ2FzbyBjb250csOhcmlvLCByZXRvcm5hIHVtYSBpbnN0w6JuY2lhIGRlIEVycm9yXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudFRlbmFudCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHRlbmFudCA9IEFncm9QbGF0Zm9ybVV0aWxzLmdldFRva2VuRmllbGQoXCJ0ZW5hbnROYW1lXCIpO1xyXG4gICAgICAgIGlmICh0ZW5hbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRlbmFudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb29raWU6IFwiJHtDT09LSUVfVE9LRU59XCIgbsOjbyBlbmNvbnRyYWRvLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIGxvY2FsZSBkbyB0ZW5hbnQgYXR1YWxcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0Q3VycmVudFRlbmFudExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IEFncm9QbGF0Zm9ybVV0aWxzLmdldFRva2VuRmllbGQoXCJsb2NhbGVcIik7XHJcbiAgICAgICAgaWYgKGxvY2FsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdsb2NhbGUnIG7Do28gZW5jb250cmFkbyBwYXJhIG8gdGVuYW50IGF0dWFsLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGdldEN1cnJlbnRUZW5hbnRMb2NhbGUoKVxyXG4gICAgICogTWFudGlkbyBwb3IgY29tcGF0aWJpbGlkYWRlIHJldHJvYXRpdmEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRDdXJyZW5UZW5hbnRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBsZWdhY3kgdHlwbyByZXRhaW5lZFxyXG4gICAgICAgIHJldHVybiBBZ3JvUGxhdGZvcm1VdGlscy5nZXRDdXJyZW50VGVuYW50TG9jYWxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRvcm5hIG8gdXN1w6FyaW8gbG9nYWRvXHJcbiAgICAgKiBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmEgdW1hIGluc3TDom5jaWEgZGUgRXJyb3JcclxuICAgICAqIEByZXR1cm5zIHN0cmluZyB8fCBudWxsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRDdXJyZW50VXNlck5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IEFncm9QbGF0Zm9ybVV0aWxzLmdldFRva2VuRmllbGQoXCJmdWxsTmFtZVwiKTtcclxuICAgICAgICByZXR1cm4gbmFtZSB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSBvIGUtbWFpbCBkbyB1c3XDoXJpbyBsb2dhZG9cclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICogQHJldHVybnMgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRDdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGVtYWlsID0gQWdyb1BsYXRmb3JtVXRpbHMuZ2V0VG9rZW5GaWVsZChcImVtYWlsXCIpO1xyXG4gICAgICAgIGlmICghZW1haWwpIHtcclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBDb29raWU6IFwiJHtDT09LSUVfVE9LRU59XCIgbsOjbyBlbmNvbnRyYWRvLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW1haWwgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldG9ybmEgdW1hIHN0cmluZyBjb20gYSBiYXNlVVJMIGF0dWFsXHJcbiAgICAgKiBDYXNvIGNvbnRyw6FyaW8sIHJldG9ybmEgdW1hIGluc3TDom5jaWEgZGUgRXJyb3JcclxuICAgICAqIEBleGFtcGxlIFwiaHR0cHM6Ly9jbG91ZC1sZWFmLnNlbmlvci5jb20uYnJcIiB8fCBcImh0dHBzOi8vcGxhdGZvcm0uc2VuaW9yLmNvbS5iclwiXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCYXNlVVJMKCk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29va2llID0gQWdyb0Nvb2tpZVV0aWxzLmdldENvb2tpZShDT09LSUVfQkFTRV9VUkwpO1xyXG4gICAgICAgIGlmIChjb29raWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvb2tpZTogXCIke0NPT0tJRV9CQVNFX1VSTH1cIiBuw6NvIGVuY29udHJhZG8uYCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRvcm5hIHVtYSBzdHJpbmcgY29tIGEgVVJMIGRvcyBzZXJ2acOnb3NcclxuICAgICAqIENhc28gY29udHLDoXJpbywgcmV0b3JuYSB1bWEgaW5zdMOibmNpYSBkZSBFcnJvclxyXG4gICAgICogQGV4YW1wbGUgXCJodHRwczovL2Nsb3VkLWxlYWYuc2VuaW9yLmNvbS5ici90L3Nlbmlvci5jb20uYnIvYnJpZGdlLzEuMC9cIlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0U2VydmljZXNVUkwoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb29raWUgPSBBZ3JvQ29va2llVXRpbHMuZ2V0Q29va2llKENPT0tJRV9TRVJWSUNFU19VUkwpO1xyXG4gICAgICAgIGlmIChTdHJpbmdVdGlscy5pc05vdEVtcHR5KGNvb2tpZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvb2tpZTogXCIke0NPT0tJRV9TRVJWSUNFU19VUkx9XCIgbsOjbyBlbmNvbnRyYWRvLmApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0b3JuYSB1bWEgc3RyaW5nIGNvbSBvIHRva2VuIGRlIGFjZXNzbyBhdHVhbFxyXG4gICAgICogQ2FzbyBjb250csOhcmlvLCByZXRvcm5hIHVtYSBpbnN0w6JuY2lhIGRlIEVycm9yXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRDdXJyZW50QWNjZXNzVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSBBZ3JvUGxhdGZvcm1VdGlscy5nZXRUb2tlbkZpZWxkKFwiYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBDb29raWU6IFwiJHtDT09LSUVfVE9LRU59XCIgbsOjbyBlbmNvbnRyYWRvLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG9rZW4gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwYXJhIGV4dHJhaXIgdW0gY2FtcG8gZG8gY29va2llIGRlIHRva2VuLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRUb2tlbkZpZWxkKGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGNvbnN0IGNvb2tpZSA9IEFncm9Db29raWVVdGlscy5nZXRDb29raWUoQ09PS0lFX1RPS0VOKTtcclxuICAgICAgICBpZiAoIWNvb2tpZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvYmogPSBBZ3JvQ29va2llVXRpbHMucGFyc2VDb29raWVUb09iamVjdChjb29raWUsIHRydWUpO1xyXG4gICAgICAgIHJldHVybiBvYmpbZmllbGRdO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -148,6 +148,9 @@ export const AGRO_REGEX = {
|
|
|
148
148
|
* Validação de Placa de Veículo Antiga
|
|
149
149
|
* Formato: AAA-0000
|
|
150
150
|
*/
|
|
151
|
-
isOldLicensePlate: /^[A-Z]{3}
|
|
151
|
+
isOldLicensePlate: /^[A-Z]{3}\d{4}$/,
|
|
152
|
+
isISODate: /^\d{4}-\d{2}-\d{2}$/,
|
|
153
|
+
isISOTime: /^\d{2}:\d{2}:\d{2}$/,
|
|
154
|
+
isISODateTime: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/,
|
|
152
155
|
};
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1yZWdleC5jb25zdGFudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3RCOztPQUVHO0lBQ0gsT0FBTyxFQUFFLDRCQUE0QjtJQUVyQzs7T0FFRztJQUNILGVBQWUsRUFBRSxZQUFZO0lBRTdCOztPQUVHO0lBQ0gsZUFBZSxFQUFFLGFBQWE7SUFFOUI7O09BRUc7SUFDSCxlQUFlLEVBQUUsT0FBTztJQUV4Qjs7T0FFRztJQUNILE9BQU8sRUFBRSx1QkFBdUI7SUFFaEM7O09BRUc7SUFDSCxRQUFRLEVBQUUsV0FBVztJQUVyQjs7T0FFRztJQUNILE1BQU0sRUFBRSw0RkFBNEY7SUFFcEc7O09BRUc7SUFDSCxRQUFRLEVBQUUsU0FBUztJQUVuQjs7T0FFRztJQUNILFNBQVMsRUFBRSxhQUFhO0lBRXhCOztPQUVHO0lBQ0gsY0FBYyxFQUFFLHNDQUFzQztJQUV0RDs7T0FFRztJQUNILGFBQWEsRUFBRSx3QkFBd0I7SUFFdkM7O09BRUc7SUFDSCxNQUFNLEVBQUUscUJBQXFCO0lBRTdCOztPQUVHO0lBQ0gsTUFBTSxFQUFFLDRCQUE0QjtJQUVwQzs7T0FFRztJQUNILFVBQVUsRUFBRSw4Q0FBOEM7SUFFMUQ7O09BRUc7SUFDSCxLQUFLLEVBQUUsd0RBQXdEO0lBRS9EOztPQUVHO0lBQ0gsV0FBVyxFQUFFLGdCQUFnQjtJQUU3Qjs7T0FFRztJQUNILFFBQVEsRUFBRSx3QkFBd0I7SUFFbEM7O09BRUc7SUFDSCxVQUFVLEVBQUUsWUFBWTtJQUV4Qjs7T0FFRztJQUNILGNBQWMsRUFBRSxnQkFBZ0I7SUFFaEM7O09BRUc7SUFDSCxNQUFNLEVBQUUsY0FBYztJQUV0Qjs7T0FFRztJQUNILFlBQVksRUFBRSwyQkFBMkI7SUFFekM7O09BRUc7SUFDSCxhQUFhLEVBQUUsZ0JBQWdCO0lBRS9COztPQUVHO0lBQ0gsVUFBVSxFQUFFLG1CQUFtQjtJQUUvQjs7T0FFRztJQUNILFlBQVksRUFBRSx5Q0FBeUM7SUFFdkQ7O09BRUc7SUFDSCxTQUFTLEVBQUUsMkNBQTJDO0lBRXREOztPQUVHO0lBQ0gsb0JBQW9CLEVBQUUsdUJBQXVCO0lBRTdDOztPQUVHO0lBQ0gsZ0JBQWdCLEVBQUUsc0VBQXNFO0lBRXhGOztPQUVHO0lBQ0gsWUFBWSxFQUFFLGFBQWE7SUFFM0I7O09BRUc7SUFDSCxZQUFZLEVBQUUsbUNBQW1DO0lBRWpEOztPQUVHO0lBQ0gsVUFBVSxFQUFFLHFDQUFxQztJQUVqRDs7T0FFRztJQUNILFdBQVcsRUFBRSxxREFBcUQ7SUFFbEU7O09BRUc7SUFDSCxZQUFZLEVBQUUsMkNBQTJDO0lBRXpEOztPQUVHO0lBQ0gsc0JBQXNCLEVBQUUsMEJBQTBCO0lBRWxEOztPQUVHO0lBQ0gsS0FBSyxFQUFFLHFCQUFxQjtJQUU1Qjs7T0FFRztJQUNILGdCQUFnQixFQUFFLFVBQVU7SUFFNUI7OztPQUdHO0lBQ0gsc0JBQXNCLEVBQUUsb0NBQW9DO0lBRTVEOzs7T0FHRztJQUNILGlCQUFpQixFQUFFLGlCQUFpQjtJQUVwQyxTQUFTLEVBQUUscUJBQXFCO0lBQ2hDLFNBQVMsRUFBRSxxQkFBcUI7SUFDaEMsYUFBYSxFQUFFLGtEQUFrRDtDQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFHUk9fUkVHRVggPSB7XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIEUtbWFpbFxyXG4gICAgICovXHJcbiAgICBpc0VtYWlsOiAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm9zIEludGVpcm9zIFBvc2l0aXZvc1xyXG4gICAgICovXHJcbiAgICBwb3NpdGl2ZUludGVnZXI6IC9eWzEtOV1cXGQqJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvcyBEZWNpbWFpcyBQb3NpdGl2b3NcclxuICAgICAqL1xyXG4gICAgcG9zaXRpdmVEZWNpbWFsOiAvXlxcZCpcXC4/XFxkKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgc3RyaW5nIHF1ZSBjb25zaXN0ZSBhcGVuYXMgZW0gZXNwYcOnb3MgZW0gYnJhbmNvIG91IGVzdMOhIHZhemlhLlxyXG4gICAgICovXHJcbiAgICBvbmx5QmxhbmtTcGFjZXM6IC9eXFxzKiQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgQ0VQIChDw7NkaWdvIFBvc3RhbClcclxuICAgICAqL1xyXG4gICAgemlwQ29kZTogL15cXGR7OH0kfF5cXGR7NX0tXFxkezN9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBTdHJpbmcgKHF1YWxxdWVyIGNhcmFjdGVyZSlcclxuICAgICAqL1xyXG4gICAgaXNTdHJpbmc6IC9eW1xcc1xcU10qJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBVVUlEXHJcbiAgICAgKi9cclxuICAgIGlzVVVJRDogL15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMS01XVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBOw7ptZXJvXHJcbiAgICAgKi9cclxuICAgIGlzTnVtYmVyOiAvXi0/XFxkKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVybyBEZWNpbWFsXHJcbiAgICAgKi9cclxuICAgIGlzRGVjaW1hbDogL15cXGQqXFwuP1xcZCskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFBsYWNhIGRlIFZlw61jdWxvXHJcbiAgICAgKi9cclxuICAgIGlzTGljZW5zZVBsYXRlOiAvXltBLVphLXowLTldezEsN30tP1tBLVphLXowLTldezEsN30kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gZGUgVGVsZWZvbmVcclxuICAgICAqL1xyXG4gICAgaXNQaG9uZU51bWJlcjogL15cXCs/XFxkezEsNH0tP1xcZHs2LDExfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgRGF0YSAoRm9ybWF0byBZWVlZLU1NLUREKVxyXG4gICAgICovXHJcbiAgICBpc0RhdGU6IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIEhvcmEgKEZvcm1hdG8gSEg6bW0pXHJcbiAgICAgKi9cclxuICAgIGlzVGltZTogL14oMFxcZHwxXFxkfDJbMC0zXSk6WzAtNV1cXGQkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIERhdGEgZSBIb3JhIChGb3JtYXRvIFlZWVktTU0tREQgSEg6bW0pXHJcbiAgICAgKi9cclxuICAgIGlzRGF0ZVRpbWU6IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0gKDBcXGR8MVxcZHwyWzAtM10pOlswLTVdXFxkJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBVUkxcclxuICAgICAqL1xyXG4gICAgaXNVUkw6IC9eKGh0dHB8aHR0cHMpOlxcL1xcLyhbXFx3LV0rXFwuKStbXFx3LV0rKFxcL1tcXHctIC4vPyUmPV0qKT8kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gSGV4YWRlY2ltYWxcclxuICAgICAqL1xyXG4gICAgaXNIZXhOdW1iZXI6IC9eWzAtOWEtZkEtRl0rJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBCYXNlNjRcclxuICAgICAqL1xyXG4gICAgaXNCYXNlNjQ6IC9eW2EtekEtWjAtOSsvXSs9ezAsMn0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE5vbWUgZGUgVXN1w6FyaW8gKDMgYSAyMCBjYXJhY3RlcmVzIGFsZmFudW3DqXJpY29zKVxyXG4gICAgICovXHJcbiAgICBpc1VzZXJuYW1lOiAvXlxcd3szLDIwfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgQWxmYW51bcOpcmljb1xyXG4gICAgICovXHJcbiAgICBpc0FscGhhbnVtZXJpYzogL15bYS16QS1aMC05XSskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFNsdWcgKGxldHJhcyBtaW7DunNjdWxhcywgbsO6bWVyb3MgZSB0cmHDp29zKVxyXG4gICAgICovXHJcbiAgICBpc1NsdWc6IC9eW2EtejAtOS1dKyQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTsO6bWVybyBkZSBDYXJ0w6NvIGRlIENyw6lkaXRvXHJcbiAgICAgKi9cclxuICAgIGlzQ3JlZGl0Q2FyZDogL15cXGR7NH0tXFxkezR9LVxcZHs0fS1cXGR7NH0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gSGV4YWRlY2ltYWxcclxuICAgICAqL1xyXG4gICAgaXNIZXhhZGVjaW1hbDogL15bMC05YS1mQS1GXSskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE1vZWRhXHJcbiAgICAgKi9cclxuICAgIGlzQ3VycmVuY3k6IC9eXFxkKyhcXC5cXGR7MSwyfSk/JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBQb3JjZW50YWdlbVxyXG4gICAgICovXHJcbiAgICBpc1BlcmNlbnRhZ2U6IC9eKDEwMChcXC4wezEsMn0pP3xbMS05XT9cXGQoXFwuXFxkezEsMn0pPykkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIFRhZyBIVE1MIFNpbXBsZXNcclxuICAgICAqL1xyXG4gICAgaXNIVE1MVGFnOiAvXjwoW2Etel0rKShbXjxdKykqKD86PiguKik8XFwvXFwxPnxcXHMrXFwvPikkLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE5vbWUgZGUgVXN1w6FyaW8gY29tIEVzcGHDp29zICgzIGEgMjAgY2FyYWN0ZXJlcyBhbGZhbnVtw6lyaWNvcyBlIGVzcGHDp29zKVxyXG4gICAgICovXHJcbiAgICBpc1VzZXJuYW1lV2l0aFNwYWNlczogL15bYS16QS1aMC05XyBdezMsMjB9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBTZW5oYSBGb3J0ZSAobcOtbmltbyA4IGNhcmFjdGVyZXMsIHVtYSBsZXRyYSBtaW7DunNjdWxhLCB1bWEgbGV0cmEgbWFpw7pzY3VsYSwgdW0gbsO6bWVybyBlIHVtIGNhcmFjdGVyZSBlc3BlY2lhbClcclxuICAgICAqL1xyXG4gICAgaXNTdHJvbmdQYXNzd29yZDogL14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXGQpKD89LipbQCQhJSo/Jl0pW0EtWmEtelxcZEAkISUqPyZdezgsfSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgU3RyaW5nIEFsZmFiw6l0aWNhXHJcbiAgICAgKi9cclxuICAgIGlzQWxwaGFiZXRpYzogL15bYS16QS1aXSskLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIEhvcmEgbm8gRm9ybWF0byBkZSAxMiBIb3Jhc1xyXG4gICAgICovXHJcbiAgICBpc1RpbWUxMkhvdXI6IC9eKDA/WzEtOV18MVswLTJdKTpcXGR7Mn0gKEFNfFBNKSQvaSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIExhdGl0dWRlXHJcbiAgICAgKi9cclxuICAgIGlzTGF0aXR1ZGU6IC9eWy0rXT8oWzEtOF0/XFxkKFxcLlxcZCspP3w5MChcXC4wKyk/KSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgTG9uZ2l0dWRlXHJcbiAgICAgKi9cclxuICAgIGlzTG9uZ2l0dWRlOiAvXlstK10/KDE4MChcXC4wKyk/fCgoMVswLTddXFxkKXwoWzEtOV0/XFxkKSkoXFwuXFxkKyk/KSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gZGUgRW5kZXJlw6dvIE1BQ1xyXG4gICAgICovXHJcbiAgICBpc01BQ0FkZHJlc3M6IC9eKFswLTlBLUZhLWZdezJ9WzotXSl7NX0oWzAtOUEtRmEtZl17Mn0pJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBEYXRhIGRlIEV4cGlyYcOnw6NvIGRlIENhcnTDo28gZGUgQ3LDqWRpdG9cclxuICAgICAqL1xyXG4gICAgaXNDcmVkaXRDYXJkRXhwaXJhdGlvbjogL14oMFsxLTldfDFbMC0yXSlcXC9cXGR7Mn0kLyxcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYcOnw6NvIGRlIE7Dum1lcm8gZGUgU2VndXJvIFNvY2lhbCAoU1NOKVxyXG4gICAgICovXHJcbiAgICBpc1NTTjogL15cXGR7M30tXFxkezJ9LVxcZHs0fSQvLFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhw6fDo28gc2UgdG9kb3Mgb3MgZMOtZ2l0b3Mgc8OjbyBpZ3VhaXNcclxuICAgICAqL1xyXG4gICAgaXNBbGxEaWdpdHNFcXVhbDogL14oLilcXDErJC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBQbGFjYSBkZSBWZcOtY3VsbyBkbyBNZXJjb3N1bFxyXG4gICAgICogRm9ybWF0bzogQUJDMUQyM1xyXG4gICAgICovXHJcbiAgICBpc01lcmNvc3VsTGljZW5zZVBsYXRlOiAvXltBLVpdezN9WzAtOV17MX1bQS1aXXsxfVswLTldezJ9JC8sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGHDp8OjbyBkZSBQbGFjYSBkZSBWZcOtY3VsbyBBbnRpZ2FcclxuICAgICAqIEZvcm1hdG86IEFBQS0wMDAwXHJcbiAgICAgKi9cclxuICAgIGlzT2xkTGljZW5zZVBsYXRlOiAvXltBLVpdezN9XFxkezR9JC8sXHJcblxyXG4gICAgaXNJU09EYXRlOiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8sXHJcbiAgICBpc0lTT1RpbWU6IC9eXFxkezJ9OlxcZHsyfTpcXGR7Mn0kLyxcclxuICAgIGlzSVNPRGF0ZVRpbWU6IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT9aJC8sXHJcbn07XHJcbiJdfQ==
|
|
@@ -38,13 +38,19 @@ export class AgroStringUtils {
|
|
|
38
38
|
*/
|
|
39
39
|
static isEmpty(str) {
|
|
40
40
|
var _a;
|
|
41
|
-
|
|
41
|
+
if (str && AgroStringUtils.isString(str)) {
|
|
42
|
+
return ((_a = str === null || str === void 0 ? void 0 : str.trim()) === null || _a === void 0 ? void 0 : _a.length) === AGRO_NUMBERS.ZERO;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
42
45
|
}
|
|
43
46
|
/**
|
|
44
47
|
* Verifica se a string não está vazia.
|
|
45
48
|
*/
|
|
46
49
|
static isNotEmpty(str) {
|
|
47
|
-
|
|
50
|
+
if (str && AgroStringUtils.isString(str)) {
|
|
51
|
+
return !AgroStringUtils.isEmpty(str);
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
48
54
|
}
|
|
49
55
|
/** Verifica se a string é nula, indefinida ou contém apenas espaços em branco */
|
|
50
56
|
static isBlank(str) {
|
|
@@ -99,7 +105,7 @@ export class AgroStringUtils {
|
|
|
99
105
|
return AGRO_REGEX.isUUID.test(str);
|
|
100
106
|
}
|
|
101
107
|
static isNumber(str) {
|
|
102
|
-
return AGRO_REGEX.isNumber.test(str);
|
|
108
|
+
return [AGRO_REGEX.isNumber.test(str), AGRO_REGEX.isDecimal.test(str)].includes(true);
|
|
103
109
|
}
|
|
104
110
|
static validateCPF(cpf) {
|
|
105
111
|
cpf = cpf.replace(/\D/g, "");
|
|
@@ -116,7 +122,7 @@ export class AgroStringUtils {
|
|
|
116
122
|
};
|
|
117
123
|
const digit1 = calcVerifier(cpf, AGRO_NUMBERS.NINE);
|
|
118
124
|
const digit2 = calcVerifier(cpf, AGRO_NUMBERS.TEN);
|
|
119
|
-
return digit1 === parseInt(cpf[AGRO_NUMBERS.NINE], AGRO_NUMBERS.TEN) && digit2 === parseInt(cpf[AGRO_NUMBERS.TEN], AGRO_NUMBERS.TEN);
|
|
125
|
+
return (digit1 === parseInt(cpf[AGRO_NUMBERS.NINE], AGRO_NUMBERS.TEN) && digit2 === parseInt(cpf[AGRO_NUMBERS.TEN], AGRO_NUMBERS.TEN));
|
|
120
126
|
}
|
|
121
127
|
/**
|
|
122
128
|
* Detecta automaticamente se é CNPJ antigo ou novo formato.
|
|
@@ -159,7 +165,8 @@ export class AgroStringUtils {
|
|
|
159
165
|
}
|
|
160
166
|
resto = soma % AGRO_NUMBERS.ELEVEN;
|
|
161
167
|
const digito2 = resto < AGRO_NUMBERS.TWO ? AGRO_NUMBERS.ZERO : AGRO_NUMBERS.ELEVEN - resto;
|
|
162
|
-
return parseInt(cnpj.charAt(AGRO_NUMBERS.TWELVE), AGRO_NUMBERS.TEN) === digito1 &&
|
|
168
|
+
return (parseInt(cnpj.charAt(AGRO_NUMBERS.TWELVE), AGRO_NUMBERS.TEN) === digito1 &&
|
|
169
|
+
parseInt(cnpj.charAt(AGRO_NUMBERS.THIRTEEN), AGRO_NUMBERS.TEN) === digito2);
|
|
163
170
|
}
|
|
164
171
|
/**
|
|
165
172
|
* Valida o CNPJ em formato alfanumérico (padrão 2026)
|
|
@@ -255,13 +262,75 @@ export class AgroStringUtils {
|
|
|
255
262
|
const matches = str.match(regex);
|
|
256
263
|
return matches ? matches.length : AGRO_NUMBERS.ZERO;
|
|
257
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Remove uma máscara simples da string fornecida.O padrão de máscaras é definido pelo enum AgroStringMasks ou
|
|
267
|
+
* pode ser uma string personalizada onde '9' representa um dígito a ser mantido da string.
|
|
268
|
+
*/
|
|
269
|
+
static removeMask(value, mask) {
|
|
270
|
+
if (!value || !mask) {
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
const valueChars = value.toString().split("");
|
|
274
|
+
const maskChars = mask.split("");
|
|
275
|
+
let unmaskedValue = "";
|
|
276
|
+
let j = 0;
|
|
277
|
+
const isDigit = (c) => /\d/.test(c);
|
|
278
|
+
const isAlpha = (c) => /[A-Za-z]/.test(c);
|
|
279
|
+
const isAlnum = (c) => /[A-Za-z0-9]/.test(c);
|
|
280
|
+
const extractNext = (testFn) => {
|
|
281
|
+
let k = j;
|
|
282
|
+
while (k < valueChars.length && !testFn(valueChars[k])) {
|
|
283
|
+
k++;
|
|
284
|
+
}
|
|
285
|
+
if (k < valueChars.length) {
|
|
286
|
+
const found = valueChars[k];
|
|
287
|
+
j = k + 1;
|
|
288
|
+
return found;
|
|
289
|
+
}
|
|
290
|
+
const fallback = valueChars[j];
|
|
291
|
+
j++;
|
|
292
|
+
return fallback;
|
|
293
|
+
};
|
|
294
|
+
const processMaskChar = (maskChar) => {
|
|
295
|
+
var _a, _b;
|
|
296
|
+
if (j >= valueChars.length) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const current = valueChars[j];
|
|
300
|
+
switch (maskChar) {
|
|
301
|
+
case "9":
|
|
302
|
+
unmaskedValue += (_a = extractNext(isDigit)) !== null && _a !== void 0 ? _a : "";
|
|
303
|
+
break;
|
|
304
|
+
case "A":
|
|
305
|
+
unmaskedValue += (_b = extractNext(isAlpha)) !== null && _b !== void 0 ? _b : "";
|
|
306
|
+
break;
|
|
307
|
+
default:
|
|
308
|
+
handleSeparator(maskChar, current);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
const handleSeparator = (maskChar, current) => {
|
|
313
|
+
if (current === maskChar) {
|
|
314
|
+
j++; // separador presente no valor
|
|
315
|
+
}
|
|
316
|
+
if (isAlnum(current)) {
|
|
317
|
+
unmaskedValue += current;
|
|
318
|
+
j++;
|
|
319
|
+
}
|
|
320
|
+
// se for pontuação diferente, apenas ignora (não consome j)
|
|
321
|
+
};
|
|
322
|
+
for (const maskChar of maskChars) {
|
|
323
|
+
processMaskChar(maskChar);
|
|
324
|
+
}
|
|
325
|
+
return unmaskedValue;
|
|
326
|
+
}
|
|
258
327
|
/**
|
|
259
328
|
* Aplica uma máscara simples à string fornecida.O padrão de máscaras é definido pelo enum AgroStringMasks ou
|
|
260
329
|
* pode ser uma string personalizada onde '9' representa um dígito a ser substituído pelo caractere correspondente
|
|
261
330
|
* da string.
|
|
262
331
|
*/
|
|
263
332
|
static applyMask(value, mask) {
|
|
264
|
-
const valueChars = value.toString().split("");
|
|
333
|
+
const valueChars = AgroStringUtils.removeMask(value, mask).toString().split("");
|
|
265
334
|
const maskChars = mask.split("");
|
|
266
335
|
let maskedValue = "";
|
|
267
336
|
let j = AGRO_NUMBERS.ZERO;
|
|
@@ -285,6 +354,15 @@ export class AgroStringUtils {
|
|
|
285
354
|
static isInvalid(str) {
|
|
286
355
|
return !AgroStringUtils.isValid(str);
|
|
287
356
|
}
|
|
357
|
+
static isISODate(value) {
|
|
358
|
+
return AGRO_REGEX.isISODate.test(value);
|
|
359
|
+
}
|
|
360
|
+
static isISOTime(value) {
|
|
361
|
+
return AGRO_REGEX.isISOTime.test(value);
|
|
362
|
+
}
|
|
363
|
+
static isISODatetime(value) {
|
|
364
|
+
return AGRO_REGEX.isISODateTime.test(value);
|
|
365
|
+
}
|
|
288
366
|
}
|
|
289
367
|
AgroStringUtils.CNPJ_TRADICIONAL_PESOS_1 = [
|
|
290
368
|
AGRO_NUMBERS.FIVE,
|
|
@@ -298,7 +376,7 @@ AgroStringUtils.CNPJ_TRADICIONAL_PESOS_1 = [
|
|
|
298
376
|
AGRO_NUMBERS.FIVE,
|
|
299
377
|
AGRO_NUMBERS.FOUR,
|
|
300
378
|
AGRO_NUMBERS.THREE,
|
|
301
|
-
AGRO_NUMBERS.TWO
|
|
379
|
+
AGRO_NUMBERS.TWO,
|
|
302
380
|
];
|
|
303
381
|
AgroStringUtils.CNPJ_TRADICIONAL_PESOS_2 = [
|
|
304
382
|
AGRO_NUMBERS.SIX,
|
|
@@ -313,7 +391,7 @@ AgroStringUtils.CNPJ_TRADICIONAL_PESOS_2 = [
|
|
|
313
391
|
AGRO_NUMBERS.FIVE,
|
|
314
392
|
AGRO_NUMBERS.FOUR,
|
|
315
393
|
AGRO_NUMBERS.THREE,
|
|
316
|
-
AGRO_NUMBERS.TWO
|
|
394
|
+
AGRO_NUMBERS.TWO,
|
|
317
395
|
];
|
|
318
396
|
// Pesos utilizados para cálculo de dígitos verificadores do CNPJ alfanumérico (2026)
|
|
319
397
|
AgroStringUtils.CNPJ_ALFANUMERICO_PESOS_1 = [
|
|
@@ -328,7 +406,7 @@ AgroStringUtils.CNPJ_ALFANUMERICO_PESOS_1 = [
|
|
|
328
406
|
AGRO_NUMBERS.FIVE,
|
|
329
407
|
AGRO_NUMBERS.FOUR,
|
|
330
408
|
AGRO_NUMBERS.THREE,
|
|
331
|
-
AGRO_NUMBERS.TWO
|
|
409
|
+
AGRO_NUMBERS.TWO,
|
|
332
410
|
];
|
|
333
411
|
AgroStringUtils.CNPJ_ALFANUMERICO_PESOS_2 = [
|
|
334
412
|
AGRO_NUMBERS.SIX,
|
|
@@ -343,6 +421,6 @@ AgroStringUtils.CNPJ_ALFANUMERICO_PESOS_2 = [
|
|
|
343
421
|
AGRO_NUMBERS.FIVE,
|
|
344
422
|
AGRO_NUMBERS.FOUR,
|
|
345
423
|
AGRO_NUMBERS.THREE,
|
|
346
|
-
AGRO_NUMBERS.TWO
|
|
424
|
+
AGRO_NUMBERS.TWO,
|
|
347
425
|
];
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLFVBQVUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUkxQzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBNER4QixvREFBb0Q7SUFDcEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBbUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFP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LFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0NBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBR1JPX05VTUJFUlMsIEFncm9TdHJpbmdNYXNrcyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgb3BlcmHDp8O1ZXMgZGUgc3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFncm9TdHJpbmdVdGlscyB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXT1xyXG4gICAgXTtcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENOUEpfVFJBRElDSU9OQUxfUEVTT1NfMjogbnVtYmVyW10gPSBbXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgICAgICBBR1JPX05VTUJFUlMuTklORSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRUlHSFQsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNFVkVOLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TSVgsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZJVkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZPVVIsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRIUkVFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5UV09cclxuICAgIF07XHJcbiAgICAvLyBQZXNvcyB1dGlsaXphZG9zIHBhcmEgY8OhbGN1bG8gZGUgZMOtZ2l0b3MgdmVyaWZpY2Fkb3JlcyBkbyBDTlBKIGFsZmFudW3DqXJpY28gKDIwMjYpXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX0FMRkFOVU1FUklDT19QRVNPU18xOiBudW1iZXJbXSA9IFtcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgICAgICBBR1JPX05VTUJFUlMuTklORSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRUlHSFQsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNFVkVOLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TSVgsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZJVkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZPVVIsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRIUkVFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5UV09cclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX0FMRkFOVU1FUklDT19QRVNPU18yOiBudW1iZXJbXSA9IFtcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXT1xyXG4gICAgXTtcclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBhcGVuYXMgbGV0cmFzICovXHJcbiAgICBzdGF0aWMgaXNPbmx5TGV0dGVycyhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gL15bQS1aYS16XSskLy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldG9ybmEgdHJ1ZSBzZSBhIHN0cmluZyBjb250w6ltIHBlbG8gbWVub3MgdW1hIGxldHJhICovXHJcbiAgICBzdGF0aWMgaGFzTGV0dGVycyhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gL1tBLVphLXpdLy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldG9ybmEgdHJ1ZSBzZSBhIHN0cmluZyBjb250w6ltIGFwZW5hcyBuw7ptZXJvcyAqL1xyXG4gICAgc3RhdGljIGlzT25seU51bWJlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9eXFxkKyQvLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogUmV0b3JuYSB0cnVlIHNlIGEgc3RyaW5nIGNvbnTDqW0gcGVsbyBtZW5vcyB1bSBuw7ptZXJvICovXHJcbiAgICBzdGF0aWMgaGFzTnVtYmVycyhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gL1xcZC8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgZXN0w6EgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpc0VtcHR5KHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBzdHIudHJpbSgpPy5sZW5ndGggPT09IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzRW1wdHkoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2UgYSBzdHJpbmcgw6kgbnVsYSwgaW5kZWZpbmlkYSBvdSBjb250w6ltIGFwZW5hcyBlc3Bhw6dvcyBlbSBicmFuY28gKi9cclxuICAgIHN0YXRpYyBpc0JsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ciB8fCBBR1JPX1JFR0VYLm9ubHlCbGFua1NwYWNlcy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIG7Do28gw6kgbnVsYSwgaW5kZWZpbmlkYSBvdSBjb250w6ltIGFwZW5hcyBlc3Bhw6dvcyBlbSBicmFuY28gKi9cclxuICAgIHN0YXRpYyBpc05vdEJsYW5rKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIUFncm9TdHJpbmdVdGlscy5pc0JsYW5rKHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgZXNwYcOnb3MgZW0gYnJhbmNvIGRvIGluw61jaW8gZSBkbyBmaW0gZGEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdHJpbVRvTnVsbChzdHI6IE51bGxhYmxlU3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSBzdHIudHJpbSgpO1xyXG4gICAgICAgIHJldHVybiB0cmltbWVkID09PSBcIlwiID8gbnVsbCA6IHRyaW1tZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJhIGR1YXMgc3RyaW5ncyBpZ25vcmFuZG8gZGlmZXJlbsOnYXMgZW50cmUgbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFsc0lnbm9yZUNhc2Uoc3RyMTogTnVsbGFibGVTdHJpbmcsIHN0cjI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjE/LnRvTG93ZXJDYXNlKCkgPT09IHN0cjI/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJhIGR1YXMgc3RyaW5ncyBjb25zaWRlcmFuZG8gZGlmZXJlbsOnYXMgZW50cmUgbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVxdWFscyhzdHIxOiBOdWxsYWJsZVN0cmluZywgc3RyMjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmV2ZXJzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNFbWFpbChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzRW1haWwudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1Bvc2l0aXZlSW50ZWdlcihzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLnBvc2l0aXZlSW50ZWdlci50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldG9ybmEgdHJ1ZSBzZSBhIHN0cmluZyDDqSB1bWEgc3RyaW5nIHbDoWxpZGEgKG7Do28gbnVsbCwgbsOjbyB1bmRlZmluZWQsIG7Do28gdmF6aWEpICovXHJcbiAgICBzdGF0aWMgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzUG9zaXRpdmVEZWNpbWFsKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVgucG9zaXRpdmVEZWNpbWFsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNaaXBDb2RlKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguemlwQ29kZS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzVVVJRChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBBR1JPX1JFR0VYLmlzVVVJRC50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzTnVtYmVyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNOdW1iZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSBBR1JPX05VTUJFUlMuRUxFVkVOIHx8IC9eKFxcZClcXDErJC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgY29uc3QgY2FsY1ZlcmlmaWVyID0gKGNwZjogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdW0gPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2ldLCBBR1JPX05VTUJFUlMuVEVOKSAqIChsZW5ndGggKyBBR1JPX05VTUJFUlMuT05FIC0gaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VtICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICBjb25zdCBkaWdpdDEgPSBjYWxjVmVyaWZpZXIoY3BmLCBBR1JPX05VTUJFUlMuTklORSk7XHJcbiAgICBjb25zdCBkaWdpdDIgPSBjYWxjVmVyaWZpZXIoY3BmLCBBR1JPX05VTUJFUlMuVEVOKTtcclxuXHJcbiAgICByZXR1cm4gZGlnaXQxID09PSBwYXJzZUludChjcGZbQUdST19OVU1CRVJTLk5JTkVdLCBBR1JPX05VTUJFUlMuVEVOKSAmJiBkaWdpdDIgPT09IHBhcnNlSW50KGNwZltBR1JPX05VTUJFUlMuVEVOXSwgQUdST19OVU1CRVJTLlRFTik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3RhIGF1dG9tYXRpY2FtZW50ZSBzZSDDqSBDTlBKIGFudGlnbyBvdSBub3ZvIGZvcm1hdG8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNOUEooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFjbnBqKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY25waiA9IGNucGoudHJpbSgpO1xyXG5cclxuICAgICAgICAvLyBTZSBjb250w6ltIGxldHJhcyDihpIgdmFsaWRhIGZvcm1hdG8gYWxmYW51bcOpcmljb1xyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQWdyb1N0cmluZ1V0aWxzLnZhbGlkYXRlQ05QSkFsZmFudW1lcmljbyhjbnBqKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhc28gY29udHLDoXJpbywgdmFsaWRhIGNvbW8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIHJldHVybiBBZ3JvU3RyaW5nVXRpbHMudmFsaWRhdGVDTlBKQW50aWdvKGNucGopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIG8gQ05QSiB0cmFkaWNpb25hbCAoc29tZW50ZSBuw7ptZXJvcylcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDTlBKQW50aWdvKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNPbmx5TnVtYmVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gQUdST19OVU1CRVJTLkZPVVJURUVOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdChjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5UV0VMVkU7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpLCBBR1JPX05VTUJFUlMuVEVOKSAqIEFncm9TdHJpbmdVdGlscy5DTlBKX1RSQURJQ0lPTkFMX1BFU09TXzFbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN0byA9IHNvbWEgJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0bzEgPSByZXN0byA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN0bztcclxuXHJcbiAgICAgICAgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5USElSVEVFTjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSksIEFHUk9fTlVNQkVSUy5URU4pICogQWdyb1N0cmluZ1V0aWxzLkNOUEpfVFJBRElDSU9OQUxfUEVTT1NfMltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICBjb25zdCBkaWdpdG8yID0gcmVzdG8gPCBBR1JPX05VTUJFUlMuVFdPID8gQUdST19OVU1CRVJTLlpFUk8gOiBBR1JPX05VTUJFUlMuRUxFVkVOIC0gcmVzdG87XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlSW50KGNucGouY2hhckF0KEFHUk9fTlVNQkVSUy5UV0VMVkUpLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMSAmJiBwYXJzZUludChjbnBqLmNoYXJBdChBR1JPX05VTUJFUlMuVEhJUlRFRU4pLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBvIENOUEogZW0gZm9ybWF0byBhbGZhbnVtw6lyaWNvIChwYWRyw6NvIDIwMjYpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlQ05QSkFsZmFudW1lcmljbyhjbnBqOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIUFncm9TdHJpbmdVdGlscy5pc1N0cmluZyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZW1vdmUgY2FyYWN0ZXJlcyBlc3BlY2lhaXMgKHBvbnRvcywgYmFycmEsIHRyYcOnbywgZXNwYcOnb3MpXHJcbiAgICAgICAgY29uc3QgY2xlYW4gPSBjbnBqLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCBcIlwiKS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAvLyBPIENOUEogZGV2ZSB0ZXIgZXhhdGFtZW50ZSAxNCBwb3Npw6fDtWVzXHJcbiAgICAgICAgaWYgKGNsZWFuLmxlbmd0aCAhPT0gQUdST19OVU1CRVJTLkZPVVJURUVOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFZlcmlmaWNhIHNlIGjDoSBwZWxvIG1lbm9zIHVtYSBsZXRyYSBlIHVtIG7Dum1lcm9cclxuICAgICAgICBpZiAoIUFncm9TdHJpbmdVdGlscy5oYXNMZXR0ZXJzKGNsZWFuKSB8fCAhQWdyb1N0cmluZ1V0aWxzLmhhc051bWJlcnMoY2xlYW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGEgbyBwcmltZWlybyBkw61naXRvIHZlcmlmaWNhZG9yXHJcbiAgICBjb25zdCBwZXNvczEgPSBBZ3JvU3RyaW5nVXRpbHMuQ05QSl9BTEZBTlVNRVJJQ09fUEVTT1NfMTtcclxuICAgIGNvbnN0IHBlc29zMiA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18yO1xyXG5cclxuICAgICAgICAvLyBQZWdhIG9zIDEyIHByaW1laXJvcyBjYXJhY3RlcmVzXHJcbiAgICBjb25zdCBiYXNlID0gY2xlYW4uc3Vic3RyaW5nKEFHUk9fTlVNQkVSUy5aRVJPLCBBR1JPX05VTUJFUlMuVFdFTFZFKTtcclxuICAgIGNvbnN0IGR2SW5mb3JtYWRvID0gY2xlYW4uc3Vic3RyaW5nKEFHUk9fTlVNQkVSUy5UV0VMVkUsIEFHUk9fTlVNQkVSUy5GT1VSVEVFTik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbGN1bGFEViA9IChzdHI6IHN0cmluZywgcGVzb3M6IG51bWJlcltdKTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgbGV0IHNvbWEgPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgcGVzb3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckF0KGkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXNjaWlWYWx1ZSA9IGNoYXIuY2hhckNvZGVBdCgwKSAtIEFHUk9fTlVNQkVSUy5GT1JUWV9FSUdIVDsgLy8gY29uZm9ybWUgZG9jdW1lbnRvICg0OCA9ICcwJylcclxuICAgICAgICAgICAgICAgIHNvbWEgKz0gYXNjaWlWYWx1ZSAqIHBlc29zW2ldOyAvLyBhc2NpaVZhbHVlIGrDoSBjYWxjdWxhZG8gYSBwYXJ0aXIgZG8gZW51bSBGT1JUWV9FSUdIVFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3RvID0gc29tYSAlIEFHUk9fTlVNQkVSUy5FTEVWRU47XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0byA9IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN0bztcclxuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0byA+IEFHUk9fTlVNQkVSUy5OSU5FID8gQUdST19OVU1CRVJTLlpFUk8gOiBkaWdpdG87IC8vIHNlZ3VlIG1lc21hIHJlZ3JhIGRvIENOUEogdHJhZGljaW9uYWxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBkdjEgPSBjYWxjdWxhRFYoYmFzZSwgcGVzb3MxKTtcclxuICAgICAgICBjb25zdCBkdjIgPSBjYWxjdWxhRFYoYmFzZSArIGR2MS50b1N0cmluZygpLCBwZXNvczIpO1xyXG5cclxuICAgICAgICBjb25zdCBkdkNhbGN1bGFkbyA9IGAke2R2MX0ke2R2Mn1gO1xyXG5cclxuICAgICAgICByZXR1cm4gZHZDYWxjdWxhZG8gPT09IGR2SW5mb3JtYWRvO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDYWxjdWxhIGEgZGlmZXJlbsOnYSBlbnRyZSBkdWFzIHN0cmluZ3MgZW0gdGVybW9zIGRlIG7Dum1lcm8gZGUgY2FyYWN0ZXJlcyBkaWZlcmVudGVzICovXHJcbiAgICBzdGF0aWMgZGlmZmVyZW5jZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbGVuMSA9IHN0cjEubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGxlbjIgPSBzdHIyLmxlbmd0aDtcclxuICAgICAgICBsZXQgZGlmZiA9IE1hdGguYWJzKGxlbjEgLSBsZW4yKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBNYXRoLm1pbihsZW4xLCBsZW4yKTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzdHIxW2ldICE9PSBzdHIyW2ldKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpZmY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgdGVybWluYSBjb20gc3RyMiAqL1xyXG4gICAgc3RhdGljIGVuZHNXaXRoKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuZW5kc1dpdGgoc3RyMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgY29tZcOnYSBjb20gc3RyMiAqL1xyXG4gICAgc3RhdGljIHN0YXJ0c1dpdGgoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5zdGFydHNXaXRoKHN0cjIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWZXJpZmljYSBzZSBzdHIxIGNvbnTDqW0gc3RyMiAqL1xyXG4gICAgc3RhdGljIGNvbnRhaW5zKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEuaW5jbHVkZXMoc3RyMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgY29tZcOnYSBjb20gc3RyMiwgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMgKi9cclxuICAgIHN0YXRpYyBzdGFydHNXaXRoSWdub3JlQ2FzZShzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWZXJpZmljYSBzZSBzdHIxIHRlcm1pbmEgY29tIHN0cjIsIGlnbm9yYW5kbyBtYWnDunNjdWxhcyBlIG1pbsO6c2N1bGFzICovXHJcbiAgICBzdGF0aWMgZW5kc1dpdGhJZ25vcmVDYXNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChzdHIyLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbnZlcnRlIG8gY2FzbyBkZSBjYWRhIGxldHJhIG5hIHN0cmluZyAqL1xyXG4gICAgc3RhdGljIHN3YXBDYXNlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgc3dhcHBlZCA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IEFHUk9fTlVNQkVSUy5aRVJPOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBzdHJbaV07XHJcbiAgICAgICAgICAgIHN3YXBwZWQgKz0gY2hhciA9PT0gY2hhci50b1VwcGVyQ2FzZSgpID8gY2hhci50b0xvd2VyQ2FzZSgpIDogY2hhci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3dhcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29sb2NhIGEgcHJpbWVpcmEgbGV0cmEgZGEgc3RyaW5nIGVtIG1hacO6c2N1bG8gKi9cclxuICAgIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdChBR1JPX05VTUJFUlMuWkVSTykudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29sb2NhIGEgcHJpbWVpcmEgbGV0cmEgZGEgc3RyaW5nIGVtIG1pbsO6c2N1bG8gKi9cclxuICAgIHN0YXRpYyB1bmNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb250YSBvIG7Dum1lcm8gZGUgb2NvcnLDqm5jaWFzIGRlIHVtYSBzdWJzdHJpbmcgZGVudHJvIGRlIHVtYSBzdHJpbmcgKi9cclxuICAgIHN0YXRpYyBjb3VudE1hdGNoZXMoc3RyOiBzdHJpbmcsIHN1YnN0cmluZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoc3Vic3RyaW5nLCBcImdcIik7XHJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHN0ci5tYXRjaChyZWdleCk7XHJcbiAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcGxpY2EgdW1hIG3DoXNjYXJhIHNpbXBsZXMgw6Agc3RyaW5nIGZvcm5lY2lkYS5PIHBhZHLDo28gZGUgbcOhc2NhcmFzIMOpIGRlZmluaWRvIHBlbG8gZW51bSBBZ3JvU3RyaW5nTWFza3Mgb3VcclxuICAgICAqIHBvZGUgc2VyIHVtYSBzdHJpbmcgcGVyc29uYWxpemFkYSBvbmRlICc5JyByZXByZXNlbnRhIHVtIGTDrWdpdG8gYSBzZXIgc3Vic3RpdHXDrWRvIHBlbG8gY2FyYWN0ZXJlIGNvcnJlc3BvbmRlbnRlXHJcbiAgICAgKiBkYSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBseU1hc2sodmFsdWU6IHN0cmluZywgbWFzazogQWdyb1N0cmluZ01hc2tzIHwgc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUNoYXJzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIlwiKTtcclxuICAgICAgICBjb25zdCBtYXNrQ2hhcnMgPSBtYXNrLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGogPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBmb3IgKGNvbnN0IG1hc2tDaGFyIG9mIG1hc2tDaGFycykge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hc2tDaGFyID09PSBcIjlcIikge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gdmFsdWVDaGFyc1tqXTtcclxuICAgICAgICAgICAgICAgIGogKz0gQUdST19OVU1CRVJTLk9ORTsgLy8gaW5jcmVtZW50IGV4dHJhY3RlZCBwZXIgU29uYXIgcmVjb21tZW5kYXRpb25cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IG1hc2tDaGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXNrZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNWYWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdHIgIT09IFwidW5kZWZpbmVkXCIgJiYgc3RyICE9PSBudWxsICYmIHRoaXMuaXNOb3RFbXB0eShzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0ludmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQoc3RyKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1zdHJpbmctdXRpbHMuY2xhc3MuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFtQixNQUFNLFVBQVUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUkxQzs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBNER4QixvREFBb0Q7SUFDcEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQW1CO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQscURBQXFEO0lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBbUI7UUFDcEMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFtQjtRQUNqQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFP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WSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEdBQUc7SUFDaEIsWUFBWSxDQUFDLElBQUk7SUFDakIsWUFBWSxDQUFDLElBQUk7SUFDakIsWUFBWSxDQUFDLEtBQUs7SUFDbEIsWUFBWSxDQUFDLEdBQUc7Q0FDbkIsQ0FBQztBQUNGLHFGQUFxRjtBQUM3RCx5Q0FBeUIsR0FBYTtJQUMxRCxZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztJQUNoQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsS0FBSztJQUNsQixZQUFZLENBQUMsR0FBRztDQUNuQixDQUFDO0FBQ3NCLHlDQUF5QixHQUFhO0lBQzFELFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0lBQ2hCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxJQUFJO0lBQ2pCLFlBQVksQ0FBQyxLQUFLO0lBQ2xCLFlBQVksQ0FBQyxHQUFHO0NBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBR1JPX05VTUJFUlMsIEFncm9TdHJpbmdNYXNrcyB9IGZyb20gXCIuLi9lbnVtc1wiO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSBcIi4vYWdyby1yZWdleC5jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IHsgQWdyb1N0cmluZ1V0aWxzIGFzIFN0cmluZ1V0aWxzIH07XHJcblxyXG5leHBvcnQgdHlwZSBOdWxsYWJsZVN0cmluZyA9IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIHV0aWxpdMOhcmlhIHBhcmEgb3BlcmHDp8O1ZXMgZGUgc3RyaW5nLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFncm9TdHJpbmdVdGlscyB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX1RSQURJQ0lPTkFMX1BFU09TXzI6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TSVgsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZJVkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkZPVVIsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRIUkVFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5UV08sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLk5JTkUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLkVJR0hULFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5TRVZFTixcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgXTtcclxuICAgIC8vIFBlc29zIHV0aWxpemFkb3MgcGFyYSBjw6FsY3VsbyBkZSBkw61naXRvcyB2ZXJpZmljYWRvcmVzIGRvIENOUEogYWxmYW51bcOpcmljbyAoMjAyNilcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IENOUEpfQUxGQU5VTUVSSUNPX1BFU09TXzE6IG51bWJlcltdID0gW1xyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBDTlBKX0FMRkFOVU1FUklDT19QRVNPU18yOiBudW1iZXJbXSA9IFtcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0lYLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GSVZFLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5GT1VSLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5USFJFRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuVFdPLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5OSU5FLFxyXG4gICAgICAgIEFHUk9fTlVNQkVSUy5FSUdIVCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuU0VWRU4sXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlNJWCxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRklWRSxcclxuICAgICAgICBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgQUdST19OVU1CRVJTLlRXTyxcclxuICAgIF07XHJcbiAgICAvKiogUmV0b3JuYSB0cnVlIHNlIGEgc3RyaW5nIGNvbnTDqW0gYXBlbmFzIGxldHJhcyAqL1xyXG4gICAgc3RhdGljIGlzT25seUxldHRlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9eW0EtWmEtel0rJC8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBwZWxvIG1lbm9zIHVtYSBsZXRyYSAqL1xyXG4gICAgc3RhdGljIGhhc0xldHRlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9bQS1aYS16XS8udGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgY29udMOpbSBhcGVuYXMgbsO6bWVyb3MgKi9cclxuICAgIHN0YXRpYyBpc09ubHlOdW1iZXJzKHN0cjogTnVsbGFibGVTdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXN0cikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAvXlxcZCskLy50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJldG9ybmEgdHJ1ZSBzZSBhIHN0cmluZyBjb250w6ltIHBlbG8gbWVub3MgdW0gbsO6bWVybyAqL1xyXG4gICAgc3RhdGljIGhhc051bWJlcnMoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC9cXGQvLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIGVzdMOhIHZhemlhLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaXNFbXB0eShzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHN0ciAmJiBBZ3JvU3RyaW5nVXRpbHMuaXNTdHJpbmcoc3RyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyPy50cmltKCk/Lmxlbmd0aCA9PT0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmVyaWZpY2Egc2UgYSBzdHJpbmcgbsOjbyBlc3TDoSB2YXppYS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlzTm90RW1wdHkoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzdHIgJiYgQWdyb1N0cmluZ1V0aWxzLmlzU3RyaW5nKHN0cikpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNFbXB0eShzdHIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIMOpIG51bGEsIGluZGVmaW5pZGEgb3UgY29udMOpbSBhcGVuYXMgZXNwYcOnb3MgZW0gYnJhbmNvICovXHJcbiAgICBzdGF0aWMgaXNCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdHIgfHwgQUdST19SRUdFWC5vbmx5QmxhbmtTcGFjZXMudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBWZXJpZmljYSBzZSBhIHN0cmluZyBuw6NvIMOpIG51bGEsIGluZGVmaW5pZGEgb3UgY29udMOpbSBhcGVuYXMgZXNwYcOnb3MgZW0gYnJhbmNvICovXHJcbiAgICBzdGF0aWMgaXNOb3RCbGFuayhzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFBZ3JvU3RyaW5nVXRpbHMuaXNCbGFuayhzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlIGVzcGHDp29zIGVtIGJyYW5jbyBkbyBpbsOtY2lvIGUgZG8gZmltIGRhIHN0cmluZy5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRyaW1Ub051bGwoc3RyOiBOdWxsYWJsZVN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICghc3RyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmltbWVkID0gc3RyLnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gdHJpbW1lZCA9PT0gXCJcIiA/IG51bGwgOiB0cmltbWVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkdWFzIHN0cmluZ3MgaWdub3JhbmRvIGRpZmVyZW7Dp2FzIGVudHJlIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHNJZ25vcmVDYXNlKHN0cjE6IE51bGxhYmxlU3RyaW5nLCBzdHIyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxPy50b0xvd2VyQ2FzZSgpID09PSBzdHIyPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGFyYSBkdWFzIHN0cmluZ3MgY29uc2lkZXJhbmRvIGRpZmVyZW7Dp2FzIGVudHJlIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBlcXVhbHMoc3RyMTogTnVsbGFibGVTdHJpbmcsIHN0cjI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEgPT09IHN0cjI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJldmVyc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzRW1haWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0VtYWlsLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZUludGVnZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZUludGVnZXIudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXRvcm5hIHRydWUgc2UgYSBzdHJpbmcgw6kgdW1hIHN0cmluZyB2w6FsaWRhIChuw6NvIG51bGwsIG7Do28gdW5kZWZpbmVkLCBuw6NvIHZhemlhKSAqL1xyXG4gICAgc3RhdGljIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPiBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNQb3NpdGl2ZURlY2ltYWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5wb3NpdGl2ZURlY2ltYWwudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc1ppcENvZGUoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC56aXBDb2RlLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNVVUlEKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNVVUlELnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNOdW1iZXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gW0FHUk9fUkVHRVguaXNOdW1iZXIudGVzdChzdHIpLCBBR1JPX1JFR0VYLmlzRGVjaW1hbC50ZXN0KHN0cildLmluY2x1ZGVzKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNQRihjcGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNwZiA9IGNwZi5yZXBsYWNlKC9cXEQvZywgXCJcIik7XHJcblxyXG4gICAgICAgIGlmIChjcGYubGVuZ3RoICE9PSBBR1JPX05VTUJFUlMuRUxFVkVOIHx8IC9eKFxcZClcXDErJC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbGNWZXJpZmllciA9IChjcGY6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3VtID0gQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdW0gKz0gcGFyc2VJbnQoY3BmW2ldLCBBR1JPX05VTUJFUlMuVEVOKSAqIChsZW5ndGggKyBBR1JPX05VTUJFUlMuT05FIC0gaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VtICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN1bHQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY1ZlcmlmaWVyKGNwZiwgQUdST19OVU1CRVJTLk5JTkUpO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0MiA9IGNhbGNWZXJpZmllcihjcGYsIEFHUk9fTlVNQkVSUy5URU4pO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBkaWdpdDEgPT09IHBhcnNlSW50KGNwZltBR1JPX05VTUJFUlMuTklORV0sIEFHUk9fTlVNQkVSUy5URU4pICYmIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmW0FHUk9fTlVNQkVSUy5URU5dLCBBR1JPX05VTUJFUlMuVEVOKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlY3RhIGF1dG9tYXRpY2FtZW50ZSBzZSDDqSBDTlBKIGFudGlnbyBvdSBub3ZvIGZvcm1hdG8uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB2YWxpZGF0ZUNOUEooY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFjbnBqKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY25waiA9IGNucGoudHJpbSgpO1xyXG5cclxuICAgICAgICAvLyBTZSBjb250w6ltIGxldHJhcyDihpIgdmFsaWRhIGZvcm1hdG8gYWxmYW51bcOpcmljb1xyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQWdyb1N0cmluZ1V0aWxzLnZhbGlkYXRlQ05QSkFsZmFudW1lcmljbyhjbnBqKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENhc28gY29udHLDoXJpbywgdmFsaWRhIGNvbW8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIHJldHVybiBBZ3JvU3RyaW5nVXRpbHMudmFsaWRhdGVDTlBKQW50aWdvKGNucGopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIG8gQ05QSiB0cmFkaWNpb25hbCAoc29tZW50ZSBuw7ptZXJvcylcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVDTlBKQW50aWdvKGNucGo6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNucGogPSBjbnBqLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNPbmx5TnVtYmVycyhjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjbnBqLmxlbmd0aCAhPT0gQUdST19OVU1CRVJTLkZPVVJURUVOKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdChjbnBqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5UV0VMVkU7IGkrKykge1xyXG4gICAgICAgICAgICBzb21hICs9IHBhcnNlSW50KGNucGouY2hhckF0KGkpLCBBR1JPX05VTUJFUlMuVEVOKSAqIEFncm9TdHJpbmdVdGlscy5DTlBKX1RSQURJQ0lPTkFMX1BFU09TXzFbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXN0byA9IHNvbWEgJSBBR1JPX05VTUJFUlMuRUxFVkVOO1xyXG4gICAgICAgIGNvbnN0IGRpZ2l0bzEgPSByZXN0byA8IEFHUk9fTlVNQkVSUy5UV08gPyBBR1JPX05VTUJFUlMuWkVSTyA6IEFHUk9fTlVNQkVSUy5FTEVWRU4gLSByZXN0bztcclxuXHJcbiAgICAgICAgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IEFHUk9fTlVNQkVSUy5USElSVEVFTjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNvbWEgKz0gcGFyc2VJbnQoY25wai5jaGFyQXQoaSksIEFHUk9fTlVNQkVSUy5URU4pICogQWdyb1N0cmluZ1V0aWxzLkNOUEpfVFJBRElDSU9OQUxfUEVTT1NfMltpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICBjb25zdCBkaWdpdG8yID0gcmVzdG8gPCBBR1JPX05VTUJFUlMuVFdPID8gQUdST19OVU1CRVJTLlpFUk8gOiBBR1JPX05VTUJFUlMuRUxFVkVOIC0gcmVzdG87XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHBhcnNlSW50KGNucGouY2hhckF0KEFHUk9fTlVNQkVSUy5UV0VMVkUpLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMSAmJlxyXG4gICAgICAgICAgICBwYXJzZUludChjbnBqLmNoYXJBdChBR1JPX05VTUJFUlMuVEhJUlRFRU4pLCBBR1JPX05VTUJFUlMuVEVOKSA9PT0gZGlnaXRvMlxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGEgbyBDTlBKIGVtIGZvcm1hdG8gYWxmYW51bcOpcmljbyAocGFkcsOjbyAyMDI2KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUNOUEpBbGZhbnVtZXJpY28oY25wajogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaXNTdHJpbmcoY25waikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGNhcmFjdGVyZXMgZXNwZWNpYWlzIChwb250b3MsIGJhcnJhLCB0cmHDp28sIGVzcGHDp29zKVxyXG4gICAgICAgIGNvbnN0IGNsZWFuID0gY25wai5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgXCJcIikudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgLy8gTyBDTlBKIGRldmUgdGVyIGV4YXRhbWVudGUgMTQgcG9zacOnw7Vlc1xyXG4gICAgICAgIGlmIChjbGVhbi5sZW5ndGggIT09IEFHUk9fTlVNQkVSUy5GT1VSVEVFTikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBWZXJpZmljYSBzZSBow6EgcGVsbyBtZW5vcyB1bWEgbGV0cmEgZSB1bSBuw7ptZXJvXHJcbiAgICAgICAgaWYgKCFBZ3JvU3RyaW5nVXRpbHMuaGFzTGV0dGVycyhjbGVhbikgfHwgIUFncm9TdHJpbmdVdGlscy5oYXNOdW1iZXJzKGNsZWFuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDYWxjdWxhIG8gcHJpbWVpcm8gZMOtZ2l0byB2ZXJpZmljYWRvclxyXG4gICAgICAgIGNvbnN0IHBlc29zMSA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18xO1xyXG4gICAgICAgIGNvbnN0IHBlc29zMiA9IEFncm9TdHJpbmdVdGlscy5DTlBKX0FMRkFOVU1FUklDT19QRVNPU18yO1xyXG5cclxuICAgICAgICAvLyBQZWdhIG9zIDEyIHByaW1laXJvcyBjYXJhY3RlcmVzXHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGNsZWFuLnN1YnN0cmluZyhBR1JPX05VTUJFUlMuWkVSTywgQUdST19OVU1CRVJTLlRXRUxWRSk7XHJcbiAgICAgICAgY29uc3QgZHZJbmZvcm1hZG8gPSBjbGVhbi5zdWJzdHJpbmcoQUdST19OVU1CRVJTLlRXRUxWRSwgQUdST19OVU1CRVJTLkZPVVJURUVOKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FsY3VsYURWID0gKHN0cjogc3RyaW5nLCBwZXNvczogbnVtYmVyW10pOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc29tYSA9IEFHUk9fTlVNQkVSUy5aRVJPO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBwZXNvcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQXQoaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc2NpaVZhbHVlID0gY2hhci5jaGFyQ29kZUF0KDApIC0gQUdST19OVU1CRVJTLkZPUlRZX0VJR0hUOyAvLyBjb25mb3JtZSBkb2N1bWVudG8gKDQ4ID0gJzAnKVxyXG4gICAgICAgICAgICAgICAgc29tYSArPSBhc2NpaVZhbHVlICogcGVzb3NbaV07IC8vIGFzY2lpVmFsdWUgasOhIGNhbGN1bGFkbyBhIHBhcnRpciBkbyBlbnVtIEZPUlRZX0VJR0hUXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdG8gPSBzb21hICUgQUdST19OVU1CRVJTLkVMRVZFTjtcclxuICAgICAgICAgICAgY29uc3QgZGlnaXRvID0gQUdST19OVU1CRVJTLkVMRVZFTiAtIHJlc3RvO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlnaXRvID4gQUdST19OVU1CRVJTLk5JTkUgPyBBR1JPX05VTUJFUlMuWkVSTyA6IGRpZ2l0bzsgLy8gc2VndWUgbWVzbWEgcmVncmEgZG8gQ05QSiB0cmFkaWNpb25hbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGR2MSA9IGNhbGN1bGFEVihiYXNlLCBwZXNvczEpO1xyXG4gICAgICAgIGNvbnN0IGR2MiA9IGNhbGN1bGFEVihiYXNlICsgZHYxLnRvU3RyaW5nKCksIHBlc29zMik7XHJcblxyXG4gICAgICAgIGNvbnN0IGR2Q2FsY3VsYWRvID0gYCR7ZHYxfSR7ZHYyfWA7XHJcblxyXG4gICAgICAgIHJldHVybiBkdkNhbGN1bGFkbyA9PT0gZHZJbmZvcm1hZG87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENhbGN1bGEgYSBkaWZlcmVuw6dhIGVudHJlIGR1YXMgc3RyaW5ncyBlbSB0ZXJtb3MgZGUgbsO6bWVybyBkZSBjYXJhY3RlcmVzIGRpZmVyZW50ZXMgKi9cclxuICAgIHN0YXRpYyBkaWZmZXJlbmNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBsZW4xID0gc3RyMS5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgbGVuMiA9IHN0cjIubGVuZ3RoO1xyXG4gICAgICAgIGxldCBkaWZmID0gTWF0aC5hYnMobGVuMSAtIGxlbjIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBBR1JPX05VTUJFUlMuWkVSTzsgaSA8IE1hdGgubWluKGxlbjEsIGxlbjIpOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHN0cjFbaV0gIT09IHN0cjJbaV0pIHtcclxuICAgICAgICAgICAgICAgIGRpZmYrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGlmZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSB0ZXJtaW5hIGNvbSBzdHIyICovXHJcbiAgICBzdGF0aWMgZW5kc1dpdGgoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5lbmRzV2l0aChzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSBjb21lw6dhIGNvbSBzdHIyICovXHJcbiAgICBzdGF0aWMgc3RhcnRzV2l0aChzdHIxOiBzdHJpbmcsIHN0cjI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBzdHIxLnN0YXJ0c1dpdGgoc3RyMik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgY29udMOpbSBzdHIyICovXHJcbiAgICBzdGF0aWMgY29udGFpbnMoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS5pbmNsdWRlcyhzdHIyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVmVyaWZpY2Egc2Ugc3RyMSBjb21lw6dhIGNvbSBzdHIyLCBpZ25vcmFuZG8gbWFpw7pzY3VsYXMgZSBtaW7DunNjdWxhcyAqL1xyXG4gICAgc3RhdGljIHN0YXJ0c1dpdGhJZ25vcmVDYXNlKHN0cjE6IHN0cmluZywgc3RyMjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHN0cjEudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFZlcmlmaWNhIHNlIHN0cjEgdGVybWluYSBjb20gc3RyMiwgaWdub3JhbmRvIG1hacO6c2N1bGFzIGUgbWluw7pzY3VsYXMgKi9cclxuICAgIHN0YXRpYyBlbmRzV2l0aElnbm9yZUNhc2Uoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3RyMS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHN0cjIudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEludmVydGUgbyBjYXNvIGRlIGNhZGEgbGV0cmEgbmEgc3RyaW5nICovXHJcbiAgICBzdGF0aWMgc3dhcENhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBzd2FwcGVkID0gXCJcIjtcclxuICAgICAgICBmb3IgKGxldCBpID0gQUdST19OVU1CRVJTLlpFUk87IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0cltpXTtcclxuICAgICAgICAgICAgc3dhcHBlZCArPSBjaGFyID09PSBjaGFyLnRvVXBwZXJDYXNlKCkgPyBjaGFyLnRvTG93ZXJDYXNlKCkgOiBjaGFyLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzd2FwcGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb2xvY2EgYSBwcmltZWlyYSBsZXRyYSBkYSBzdHJpbmcgZW0gbWFpw7pzY3VsbyAqL1xyXG4gICAgc3RhdGljIGNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KEFHUk9fTlVNQkVSUy5aRVJPKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb2xvY2EgYSBwcmltZWlyYSBsZXRyYSBkYSBzdHJpbmcgZW0gbWluw7pzY3VsbyAqL1xyXG4gICAgc3RhdGljIHVuY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoQUdST19OVU1CRVJTLlpFUk8pLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnRhIG8gbsO6bWVybyBkZSBvY29ycsOqbmNpYXMgZGUgdW1hIHN1YnN0cmluZyBkZW50cm8gZGUgdW1hIHN0cmluZyAqL1xyXG4gICAgc3RhdGljIGNvdW50TWF0Y2hlcyhzdHI6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdWJzdHJpbmcsIFwiZ1wiKTtcclxuICAgICAgICBjb25zdCBtYXRjaGVzID0gc3RyLm1hdGNoKHJlZ2V4KTtcclxuICAgICAgICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogQUdST19OVU1CRVJTLlpFUk87XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdW1hIG3DoXNjYXJhIHNpbXBsZXMgZGEgc3RyaW5nIGZvcm5lY2lkYS5PIHBhZHLDo28gZGUgbcOhc2NhcmFzIMOpIGRlZmluaWRvIHBlbG8gZW51bSBBZ3JvU3RyaW5nTWFza3Mgb3VcclxuICAgICAqIHBvZGUgc2VyIHVtYSBzdHJpbmcgcGVyc29uYWxpemFkYSBvbmRlICc5JyByZXByZXNlbnRhIHVtIGTDrWdpdG8gYSBzZXIgbWFudGlkbyBkYSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZW1vdmVNYXNrKHZhbHVlOiBzdHJpbmcsIG1hc2s6IEFncm9TdHJpbmdNYXNrcyB8IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhbWFzaykge3JldHVybiB2YWx1ZTt9XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhcnMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IG1hc2tDaGFycyA9IG1hc2suc3BsaXQoXCJcIik7XHJcbiAgICAgICAgbGV0IHVubWFza2VkVmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIGxldCBqID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgaXNEaWdpdCA9IChjOiBzdHJpbmcpID0+IC9cXGQvLnRlc3QoYyk7XHJcbiAgICAgICAgY29uc3QgaXNBbHBoYSA9IChjOiBzdHJpbmcpID0+IC9bQS1aYS16XS8udGVzdChjKTtcclxuICAgICAgICBjb25zdCBpc0FsbnVtID0gKGM6IHN0cmluZykgPT4gL1tBLVphLXowLTldLy50ZXN0KGMpO1xyXG5cclxuICAgICAgICBjb25zdCBleHRyYWN0TmV4dCA9ICh0ZXN0Rm46IChjOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgbGV0IGsgPSBqO1xyXG4gICAgICAgICAgICB3aGlsZSAoayA8IHZhbHVlQ2hhcnMubGVuZ3RoICYmICF0ZXN0Rm4odmFsdWVDaGFyc1trXSkpIHtrKys7fVxyXG4gICAgICAgICAgICBpZiAoayA8IHZhbHVlQ2hhcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IHZhbHVlQ2hhcnNba107XHJcbiAgICAgICAgICAgICAgICBqID0gayArIDE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZmFsbGJhY2sgPSB2YWx1ZUNoYXJzW2pdO1xyXG4gICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBwcm9jZXNzTWFza0NoYXIgPSAobWFza0NoYXI6IHN0cmluZyk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge3JldHVybjt9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdmFsdWVDaGFyc1tqXTtcclxuICAgICAgICAgICAgc3dpdGNoIChtYXNrQ2hhcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIjlcIjpcclxuICAgICAgICAgICAgICAgICAgICB1bm1hc2tlZFZhbHVlICs9IGV4dHJhY3ROZXh0KGlzRGlnaXQpID8/IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiQVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHVubWFza2VkVmFsdWUgKz0gZXh0cmFjdE5leHQoaXNBbHBoYSkgPz8gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VwYXJhdG9yKG1hc2tDaGFyLCBjdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbmRsZVNlcGFyYXRvciA9IChtYXNrQ2hhcjogc3RyaW5nLCBjdXJyZW50OiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG1hc2tDaGFyKSB7XHJcbiAgICAgICAgICAgICAgICBqKys7IC8vIHNlcGFyYWRvciBwcmVzZW50ZSBubyB2YWxvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0FsbnVtKGN1cnJlbnQpKSB7XHJcbiAgICAgICAgICAgICAgICB1bm1hc2tlZFZhbHVlICs9IGN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICBqKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2UgZm9yIHBvbnR1YcOnw6NvIGRpZmVyZW50ZSwgYXBlbmFzIGlnbm9yYSAobsOjbyBjb25zb21lIGopXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBtYXNrQ2hhciBvZiBtYXNrQ2hhcnMpIHtcclxuICAgICAgICAgICAgcHJvY2Vzc01hc2tDaGFyKG1hc2tDaGFyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB1bm1hc2tlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBsaWNhIHVtYSBtw6FzY2FyYSBzaW1wbGVzIMOgIHN0cmluZyBmb3JuZWNpZGEuTyBwYWRyw6NvIGRlIG3DoXNjYXJhcyDDqSBkZWZpbmlkbyBwZWxvIGVudW0gQWdyb1N0cmluZ01hc2tzIG91XHJcbiAgICAgKiBwb2RlIHNlciB1bWEgc3RyaW5nIHBlcnNvbmFsaXphZGEgb25kZSAnOScgcmVwcmVzZW50YSB1bSBkw61naXRvIGEgc2VyIHN1YnN0aXR1w61kbyBwZWxvIGNhcmFjdGVyZSBjb3JyZXNwb25kZW50ZVxyXG4gICAgICogZGEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYXBwbHlNYXNrKHZhbHVlOiBzdHJpbmcsIG1hc2s6IEFncm9TdHJpbmdNYXNrcyB8IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVDaGFycyA9IEFncm9TdHJpbmdVdGlscy5yZW1vdmVNYXNrKHZhbHVlLCBtYXNrKS50b1N0cmluZygpLnNwbGl0KFwiXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXNrQ2hhcnMgPSBtYXNrLnNwbGl0KFwiXCIpO1xyXG4gICAgICAgIGxldCBtYXNrZWRWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGogPSBBR1JPX05VTUJFUlMuWkVSTztcclxuICAgICAgICBmb3IgKGNvbnN0IG1hc2tDaGFyIG9mIG1hc2tDaGFycykge1xyXG4gICAgICAgICAgICBpZiAoaiA+PSB2YWx1ZUNoYXJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hc2tDaGFyID09PSBcIjlcIikge1xyXG4gICAgICAgICAgICAgICAgbWFza2VkVmFsdWUgKz0gdmFsdWVDaGFyc1tqXTtcclxuICAgICAgICAgICAgICAgIGogKz0gQUdST19OVU1CRVJTLk9ORTsgLy8gaW5jcmVtZW50IGV4dHJhY3RlZCBwZXIgU29uYXIgcmVjb21tZW5kYXRpb25cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hc2tlZFZhbHVlICs9IG1hc2tDaGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXNrZWRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNWYWxpZChzdHI6IE51bGxhYmxlU3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBzdHIgIT09IFwidW5kZWZpbmVkXCIgJiYgc3RyICE9PSBudWxsICYmIHRoaXMuaXNOb3RFbXB0eShzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0ludmFsaWQoc3RyOiBOdWxsYWJsZVN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhQWdyb1N0cmluZ1V0aWxzLmlzVmFsaWQoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaXNJU09EYXRlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0lTT0RhdGUudGVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzSVNPVGltZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIEFHUk9fUkVHRVguaXNJU09UaW1lLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc0lTT0RhdGV0aW1lKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gQUdST19SRUdFWC5pc0lTT0RhdGVUaW1lLnRlc3QodmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Pipe } from "@angular/core";
|
|
3
|
+
import { AgroStringUtils } from "../../common";
|
|
4
|
+
import { AgroStringMasks } from "../../enums";
|
|
5
|
+
let CnpjCpfPipe = class CnpjCpfPipe {
|
|
6
|
+
transform(value, ...args) {
|
|
7
|
+
if (typeof value !== "string" && typeof value === "number") {
|
|
8
|
+
value = value === null || value === void 0 ? void 0 : value.toString();
|
|
9
|
+
}
|
|
10
|
+
if (typeof value !== "string") {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
if (AgroStringUtils.validateCNPJ(value)) {
|
|
14
|
+
return AgroStringUtils.applyMask(value, AgroStringMasks.CNPJ);
|
|
15
|
+
}
|
|
16
|
+
if (AgroStringUtils.validateCPF(value)) {
|
|
17
|
+
return AgroStringUtils.applyMask(value, AgroStringMasks.CPF);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
CnpjCpfPipe = __decorate([
|
|
23
|
+
Pipe({
|
|
24
|
+
name: "cnpjCpf",
|
|
25
|
+
})
|
|
26
|
+
], CnpjCpfPipe);
|
|
27
|
+
export { CnpjCpfPipe };
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY25wai1jcGYucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsicGlwZS9jbnBqLWNwZi9jbnBqLWNwZi5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFLOUMsSUFBYSxXQUFXLEdBQXhCLE1BQWEsV0FBVztJQUNwQixTQUFTLENBQUMsS0FBYyxFQUFFLEdBQUcsSUFBZTtRQUN4QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDeEQsS0FBSyxHQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxRQUFRLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKLENBQUE7QUFuQlksV0FBVztJQUh2QixJQUFJLENBQUM7UUFDRixJQUFJLEVBQUUsU0FBUztLQUNsQixDQUFDO0dBQ1csV0FBVyxDQW1CdkI7U0FuQlksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBZ3JvU3RyaW5nVXRpbHMgfSBmcm9tIFwiLi4vLi4vY29tbW9uXCI7XHJcbmltcG9ydCB7IEFncm9TdHJpbmdNYXNrcyB9IGZyb20gXCIuLi8uLi9lbnVtc1wiO1xyXG5cclxuQFBpcGUoe1xyXG4gICAgbmFtZTogXCJjbnBqQ3BmXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbnBqQ3BmUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoQWdyb1N0cmluZ1V0aWxzLnZhbGlkYXRlQ05QSih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEFncm9TdHJpbmdVdGlscy5hcHBseU1hc2sodmFsdWUsIEFncm9TdHJpbmdNYXNrcy5DTlBKKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChBZ3JvU3RyaW5nVXRpbHMudmFsaWRhdGVDUEYodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBZ3JvU3RyaW5nVXRpbHMuYXBwbHlNYXNrKHZhbHVlLCBBZ3JvU3RyaW5nTWFza3MuQ1BGKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|