@senior-agronegocio/angular-components 0.0.70-origination → 0.0.71-origination
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 +114 -5
- package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js +1 -1
- package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
- package/common/agro-regex.constant.d.ts +10 -0
- package/esm2015/common/agro-regex.constant.js +11 -1
- package/esm2015/form-validator/agro-form-validator.js +94 -6
- package/esm5/common/agro-regex.constant.js +11 -1
- package/esm5/form-validator/agro-form-validator.js +106 -6
- package/fesm2015/senior-agronegocio-angular-components.js +103 -5
- package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
- package/fesm5/senior-agronegocio-angular-components.js +115 -6
- package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
- package/form-validator/agro-form-validator.d.ts +14 -0
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { __assign, __values } from "tslib";
|
|
1
2
|
import { DateComparisonType } from '../enums/date-comparison-type.enum';
|
|
2
3
|
import { AGRO_REGEX } from '../common/agro-regex.constant';
|
|
3
4
|
import { NumberComparisonType } from '../enums/number-comparison-type.enum';
|
|
@@ -185,13 +186,14 @@ var AgroFormValidator = /** @class */ (function () {
|
|
|
185
186
|
AgroFormValidator.checkValueBetween = function (minorFormControl, targetFormControl, majorFormControl) {
|
|
186
187
|
var checkValue = function (control) {
|
|
187
188
|
var _a, _b;
|
|
188
|
-
var _c, _d, _e
|
|
189
|
+
var _c, _d, _e;
|
|
189
190
|
var formGroup = control;
|
|
190
191
|
var valueA = (_c = formGroup.get(minorFormControl)) === null || _c === void 0 ? void 0 : _c.value;
|
|
191
192
|
var valueB = (_d = formGroup.get(targetFormControl)) === null || _d === void 0 ? void 0 : _d.value;
|
|
192
193
|
var valueC = (_e = formGroup.get(majorFormControl)) === null || _e === void 0 ? void 0 : _e.value;
|
|
193
194
|
var methodName = 'checkValueBetween';
|
|
194
|
-
|
|
195
|
+
var areNumbers = [valueA, valueB, valueC].every(function (v) { return v !== null && v !== undefined; });
|
|
196
|
+
if (areNumbers) {
|
|
195
197
|
if (valueB < valueA || valueB > valueC) {
|
|
196
198
|
var targetControl = formGroup.get(targetFormControl);
|
|
197
199
|
if (targetControl) {
|
|
@@ -199,10 +201,12 @@ var AgroFormValidator = /** @class */ (function () {
|
|
|
199
201
|
}
|
|
200
202
|
return _b = {}, _b[methodName] = true, _b;
|
|
201
203
|
}
|
|
202
|
-
else
|
|
204
|
+
else {
|
|
203
205
|
var targetControl = formGroup.get(targetFormControl);
|
|
204
|
-
if (targetControl) {
|
|
205
|
-
targetControl.
|
|
206
|
+
if (targetControl === null || targetControl === void 0 ? void 0 : targetControl.hasError(methodName)) {
|
|
207
|
+
var errors = __assign({}, targetControl.errors);
|
|
208
|
+
delete errors[methodName];
|
|
209
|
+
targetControl.setErrors(Object.keys(errors).length ? errors : null);
|
|
206
210
|
}
|
|
207
211
|
}
|
|
208
212
|
}
|
|
@@ -233,7 +237,103 @@ var AgroFormValidator = /** @class */ (function () {
|
|
|
233
237
|
};
|
|
234
238
|
return objectProperty;
|
|
235
239
|
};
|
|
240
|
+
/**
|
|
241
|
+
* Valida se o campo é um CPF (Cadastro de Pessoa Física) válido.
|
|
242
|
+
*/
|
|
243
|
+
AgroFormValidator.CPFValidator = function () {
|
|
244
|
+
var cpfVal = function (control) {
|
|
245
|
+
var cpf = (control.value || '').replace(/[^\d]/g, '');
|
|
246
|
+
if (!cpf) {
|
|
247
|
+
return null; // Não valida campo vazio, use Validators.required junto se quiser obrigatoriedade
|
|
248
|
+
}
|
|
249
|
+
if (cpf.length !== 11) {
|
|
250
|
+
return { cpfValidator: true };
|
|
251
|
+
}
|
|
252
|
+
// Verifica se todos os dígitos são iguais (ex.: 11111111111)
|
|
253
|
+
if (/^(\d)\1{10}$/.test(cpf)) {
|
|
254
|
+
return { cpfValidator: true };
|
|
255
|
+
}
|
|
256
|
+
// Validação dos dígitos verificadores
|
|
257
|
+
var calcCheckDigit = function (cpfSlice, factor) {
|
|
258
|
+
var e_1, _a;
|
|
259
|
+
var total = 0;
|
|
260
|
+
try {
|
|
261
|
+
for (var cpfSlice_1 = __values(cpfSlice), cpfSlice_1_1 = cpfSlice_1.next(); !cpfSlice_1_1.done; cpfSlice_1_1 = cpfSlice_1.next()) {
|
|
262
|
+
var digit = cpfSlice_1_1.value;
|
|
263
|
+
total += parseInt(digit, 10) * factor--;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
267
|
+
finally {
|
|
268
|
+
try {
|
|
269
|
+
if (cpfSlice_1_1 && !cpfSlice_1_1.done && (_a = cpfSlice_1.return)) _a.call(cpfSlice_1);
|
|
270
|
+
}
|
|
271
|
+
finally { if (e_1) throw e_1.error; }
|
|
272
|
+
}
|
|
273
|
+
var remainder = total % 11;
|
|
274
|
+
return remainder < 2 ? 0 : 11 - remainder;
|
|
275
|
+
};
|
|
276
|
+
var digit1 = calcCheckDigit(cpf.substring(0, 9), 10);
|
|
277
|
+
var digit2 = calcCheckDigit(cpf.substring(0, 9) + digit1, 11);
|
|
278
|
+
var isValid = digit1 === parseInt(cpf.charAt(9), 10) &&
|
|
279
|
+
digit2 === parseInt(cpf.charAt(10), 10);
|
|
280
|
+
return isValid ? null : { cpfValidator: true };
|
|
281
|
+
};
|
|
282
|
+
return cpfVal;
|
|
283
|
+
};
|
|
284
|
+
/**
|
|
285
|
+
* Validator de CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
286
|
+
* @returns
|
|
287
|
+
*/
|
|
288
|
+
AgroFormValidator.prototype.CNPJValidator = function () {
|
|
289
|
+
return function (control) {
|
|
290
|
+
var _a;
|
|
291
|
+
var value = (_a = control.value) === null || _a === void 0 ? void 0 : _a.replace(/\D/g, '');
|
|
292
|
+
if (!value || value.length !== 14) {
|
|
293
|
+
return { cnpjValidator: true };
|
|
294
|
+
}
|
|
295
|
+
// Verifica CNPJs com todos os dígitos iguais (inválidos)
|
|
296
|
+
if (/^(\d)\1{13}$/.test(value)) {
|
|
297
|
+
return { cnpjValidator: true };
|
|
298
|
+
}
|
|
299
|
+
var validateCheckDigit = function (cnpj, length) {
|
|
300
|
+
var weights = length === 12
|
|
301
|
+
? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
302
|
+
: [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
|
|
303
|
+
var sum = cnpj
|
|
304
|
+
.slice(0, length)
|
|
305
|
+
.split('')
|
|
306
|
+
.reduce(function (acc, digit, index) {
|
|
307
|
+
return acc + parseInt(digit, 10) * weights[index];
|
|
308
|
+
}, 0);
|
|
309
|
+
var remainder = sum % 11;
|
|
310
|
+
return remainder < 2 ? 0 : 11 - remainder;
|
|
311
|
+
};
|
|
312
|
+
var firstCheckDigit = validateCheckDigit(value, 12);
|
|
313
|
+
var secondCheckDigit = validateCheckDigit(value, 13);
|
|
314
|
+
if (firstCheckDigit !== parseInt(value.charAt(12), 10) ||
|
|
315
|
+
secondCheckDigit !== parseInt(value.charAt(13), 10)) {
|
|
316
|
+
return { cnpjValidator: true };
|
|
317
|
+
}
|
|
318
|
+
return null; // válido
|
|
319
|
+
};
|
|
320
|
+
};
|
|
321
|
+
/**
|
|
322
|
+
* Valida se a placa do veículo é válida.
|
|
323
|
+
* @returns
|
|
324
|
+
*/
|
|
325
|
+
AgroFormValidator.prototype.licensePlateValidator = function () {
|
|
326
|
+
return function (control) {
|
|
327
|
+
var value = (control.value || '').toUpperCase().trim().replace(/-/g, '');
|
|
328
|
+
if (!value) {
|
|
329
|
+
return null; // Campo vazio não é responsabilidade desse validador
|
|
330
|
+
}
|
|
331
|
+
var isValid = AGRO_REGEX.isMercosulLicensePlate.test(value) ||
|
|
332
|
+
AGRO_REGEX.isOldLicensePlate.test(value);
|
|
333
|
+
return isValid ? null : { licensePlateInvalid: true };
|
|
334
|
+
};
|
|
335
|
+
};
|
|
236
336
|
return AgroFormValidator;
|
|
237
337
|
}());
|
|
238
338
|
export { AgroFormValidator };
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWhFO0lBQUE7SUF1T0EsQ0FBQztJQXJPRzs7Ozs7Ozs7O09BU0c7SUFDVyxnQ0FBYyxHQUE1QixVQUE2QixPQUF3QjtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDVyxzQ0FBb0IsR0FBbEMsVUFBbUMsY0FBa0M7UUFDakUsSUFBTSxXQUFXLEdBQUcsVUFBQyxPQUF3Qjs7WUFDekMsSUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUM7WUFDekMsSUFBTSxZQUFZLEdBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQU0sV0FBVyxHQUFTLElBQUks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S0FBRztpQkFDakM7cUJBQU0sVUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLDBDQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUc7b0JBQy9ELElBQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDakM7aUJBQ0o7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDVyx5Q0FBdUIsR0FBckMsVUFBc0MsWUFBb0I7UUFDdEQsSUFBTSxjQUFjLEdBQUcsVUFBQyxPQUF3Qjs7WUFDNUMsSUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7WUFDcEMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDbEcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE9BQU8sQ0FBQyxTQUFTLFdBQUcsR0FBQyxVQUFVLElBQUcsSUFBSSxNQUFHLENBQUM7WUFDMUMsZ0JBQVMsR0FBQyxVQUFVLElBQUcsSUFBSSxLQUFHO1FBQ2xDLENBQUMsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFHTCx3QkFBQztBQUFELENBQUMsQUF2T0QsSUF1T0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVtYWlsVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGFkb3IgZW0gdW0gY2FtcG8gZG8gdGlwbyBEYXRlLCBwYXJhIHZlcmlmaWNhciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgw6kgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXplIG8gcGFyw6JtZXRybyBjb21wYXJpc29uVHlwZSBwYXJhIGRlZmluaXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIGRldmUgc2VyIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKiBBIHZhbGlkYcOnw6NvIHNlcsOhIGF0cmF2w6lzIGRvIGVudW0gRGF0ZUNvbXBhcmlzb25UeXBlLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5PTUVfQ0FNUE86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVEYXRlV2l0aFRvZGF5KERhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW4pXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbXBhcmlzb25UeXBlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aFRvZGF5KGNvbXBhcmlzb25UeXBlOiBEYXRlQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2RhdGVDb21wYXJpc29uVG9kYXknO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuXTogc2VsZWN0ZWREYXRlIDw9IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5sZXNzVGhhbl06IHNlbGVjdGVkRGF0ZSA+PSBjdXJyZW50RGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnNbY29tcGFyaXNvblR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmEgZG9pcyBjYW1wb3MgZG8gdGlwbyBEYXRlLCB2ZXJpZmljYW5kbyBzZSBvIGNhbXBvIEEgw6kgbWFpb3IgcXVlIG8gY2FtcG8gQi4gU2UgQSBmb3IgbWFpb3IgcXVlIEIsIGVudMOjb1xyXG4gICAgICogbyBjYW1wbyBBIMOpIGludmFsaWRhZG8uIENhc28gY29udHLDoXJpbywgbyBjYW1wbyBBIMOpIHZhbGlkYWRvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSBjYW1wbyBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVBOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVCOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmRhdGVDb21wYXJpc29uVmFsaWRhdG9yKCdOT01FX0NBTVBPX2RhdGVBJywgJ05PTUVfQ0FNUE9fZGF0ZUInKSB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQoY29udHJvbE5hbWVBOiBzdHJpbmcsIGNvbnRyb2xOYW1lQjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkJztcclxuICAgICAgICAgICAgaWYgKGRhdGVBICYmIGRhdGVCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQU9iaiA9IG5ldyBEYXRlKGRhdGVBKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCT2JqID0gbmV3IERhdGUoZGF0ZUIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVBT2JqIDwgZGF0ZUJPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSBhY29yZG8gY29tIHVtYSBtw6FzY2FyYSBpbmZvcm1hZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgVEVMRUZPTkVfRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLnBob25lVmFsaWRhdG9yKCcoOTkpIDk5OTktOTk5OScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcGhvbmVWYWxpZGF0b3IobWFzazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IHBob25lQ29udHJvbFZhbGlkYXRpb24gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Bob25lVmFsaWRhdG9yJztcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHttYXNrLnJlcGxhY2UoLzkvZywgJ1xcXFxkJykucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpLnJlcGxhY2UoL1xcKS9nLCAnXFxcXCknKS5yZXBsYWNlKC8tL2csICdcXFxcLScpfSRgKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIXJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHBob25lQ29udHJvbFZhbGlkYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgdW0gY2FtcG8gZGUgbsO6bWVyb3Mgw6kgbWFpb3Igb3UgbWVub3IgcXVlIG91dHJvIGNhbXBvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGF0b3Igbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOVU1FUk9fQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBOVU1FUk9fQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVOdW1iZXJGaWVsZHMoJ05VTUVST19BJywgJ05VTUVST19CJywgTnVtYmVyQ29tcGFyaXNvblR5cGUuRVFVQUxTKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyBOVU1FUk9fQSDDqSBpZ3VhbCBhbyBOVU1FUkJfQi5cclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZU51bWJlckZpZWxkcyhjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcsIGNvbXBhcmlzb25NZXRob2Q6IE51bWJlckNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVOdW1iZXIgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVOdW1iZXJGaWVsZHMnO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyQSAmJiBudW1iZXJCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBOdW1iZXJDb21wYXJpc29uVHlwZVtjb21wYXJpc29uTWV0aG9kXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29uZGl0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFNdOiBudW1iZXJBICE9PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5dOiBudW1iZXJBIDw9IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl06IG51bWJlckEgPj0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogbnVtYmVyQSA8IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl9PUl9FUVVBTF06IG51bWJlckEgPiBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5OT1RfRVFVQUxTXTogbnVtYmVyQSA9PT0gbnVtYmVyQlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb25kaXRpb25bY29tcGFyaXNvbk1ldGhvZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiBjb21wYXJpc29uTWV0aG9kIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IGVycm9yVHlwZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xBKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xBLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSB2YWxvciBlc3TDoSBlbnRyZSBvcyBkZW1haXMgdmFsb3JlcyBkZSB0csOqcyBmb3JtQ29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyB0csOqcyBmb3JtQ29udHJvbHMgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIG1pbm9yRm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgdGFyZ2V0Rm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgbWFqb3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNoZWNrVmFsdWVCZXR3ZWVuKCdtaW5vckZvcm1Db250cm9sJywgJ3RhcmdldEZvcm1Db250cm9sJywgJ21ham9yRm9ybUNvbnRyb2wnKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyB0YXJnZXRGb3JtQ29udHJvbCBlc3TDoSBlbnRyZSBvIG1pbm9yRm9ybUNvbnRyb2wgZSBvIG1ham9yRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBAcGFyYW0gbWlub3JGb3JtQ29udHJvbFxyXG4gICAgICogQHBhcmFtIHRhcmdldEZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gbWFqb3JGb3JtQ29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbHVlQmV0d2VlbihtaW5vckZvcm1Db250cm9sOiBzdHJpbmcsIHRhcmdldEZvcm1Db250cm9sOiBzdHJpbmcsIG1ham9yRm9ybUNvbnRyb2w6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IGZvcm1Hcm91cC5nZXQobWlub3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUIgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQyA9IGZvcm1Hcm91cC5nZXQobWFqb3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NoZWNrVmFsdWVCZXR3ZWVuJztcclxuICAgICAgICAgICAgaWYgKHZhbHVlQSAmJiB2YWx1ZUIgJiYgdmFsdWVDKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVCIDwgdmFsdWVBIHx8IHZhbHVlQiA+IHZhbHVlQykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5nZXQodGFyZ2V0Rm9ybUNvbnRyb2wpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2hlY2tWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSBvIGNhbXBvIMOpIHVtIG9iamV0byBlIHNlIHBvc3N1aSB1bWEgcHJvcHJpZWRhZGUgZXNwZWPDrWZpY2EuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgT0JKRVRPX0ZJRUxEOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBBZ3JvRm9ybVZhbGlkYXRvci5vYmplY3RQcm9wZXJ0eVZhbGlkYXRvcigncHJvcHJpZWRhZGUnKV1dXHJcbiAgICAgKiB9KTtcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgb2JqZWN0UHJvcGVydHlWYWxpZGF0b3IocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydHkgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ29iamVjdFByb3BlcnR5JztcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzT2JqZWN0KGNvbnRyb2wudmFsdWUpICYmIE9iamVjdFV0aWxzLmNvbnRhaW5zUHJvcGVydHkoY29udHJvbC52YWx1ZSwgcHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0UHJvcGVydHk7XHJcbiAgICB9XHJcblxyXG5cclxufSJdfQ==
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVoRTtJQUFBO0lBMFZBLENBQUM7SUF4Vkc7Ozs7Ozs7OztPQVNHO0lBQ1csZ0NBQWMsR0FBNUIsVUFBNkIsT0FBd0I7UUFDakQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ25DO1FBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR0Q7Ozs7Ozs7Ozs7OztPQVlHO0lBQ1csc0NBQW9CLEdBQWxDLFVBQW1DLGNBQWtDO1FBQ2pFLElBQU0sV0FBVyxHQUFHLFVBQUMsT0FBd0I7O1lBQ3pDLElBQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLElBQU0sWUFBWSxHQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFNLFdBQVcsR0FBUyxJQUFJ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LE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDckQ7Z0JBQ0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNsQztZQUVELE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUztRQUMxQixDQUFDLENBQUM7SUFDTixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsaURBQXFCLEdBQXJCO1FBQ0ksT0FBTyxVQUFDLE9BQXdCO1lBQzVCLElBQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRTNFLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsQ0FBQyxxREFBcUQ7YUFDckU7WUFFRCxJQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDekQsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QyxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQztJQUNOLENBQUM7SUFJTCx3QkFBQztBQUFELENBQUMsQUExVkQsSUEwVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVtYWlsVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGFkb3IgZW0gdW0gY2FtcG8gZG8gdGlwbyBEYXRlLCBwYXJhIHZlcmlmaWNhciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgw6kgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXplIG8gcGFyw6JtZXRybyBjb21wYXJpc29uVHlwZSBwYXJhIGRlZmluaXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIGRldmUgc2VyIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKiBBIHZhbGlkYcOnw6NvIHNlcsOhIGF0cmF2w6lzIGRvIGVudW0gRGF0ZUNvbXBhcmlzb25UeXBlLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5PTUVfQ0FNUE86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVEYXRlV2l0aFRvZGF5KERhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW4pXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbXBhcmlzb25UeXBlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aFRvZGF5KGNvbXBhcmlzb25UeXBlOiBEYXRlQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2RhdGVDb21wYXJpc29uVG9kYXknO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuXTogc2VsZWN0ZWREYXRlIDw9IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5sZXNzVGhhbl06IHNlbGVjdGVkRGF0ZSA+PSBjdXJyZW50RGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnNbY29tcGFyaXNvblR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmEgZG9pcyBjYW1wb3MgZG8gdGlwbyBEYXRlLCB2ZXJpZmljYW5kbyBzZSBvIGNhbXBvIEEgw6kgbWFpb3IgcXVlIG8gY2FtcG8gQi4gU2UgQSBmb3IgbWFpb3IgcXVlIEIsIGVudMOjb1xyXG4gICAgICogbyBjYW1wbyBBIMOpIGludmFsaWRhZG8uIENhc28gY29udHLDoXJpbywgbyBjYW1wbyBBIMOpIHZhbGlkYWRvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSBjYW1wbyBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVBOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVCOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmRhdGVDb21wYXJpc29uVmFsaWRhdG9yKCdOT01FX0NBTVBPX2RhdGVBJywgJ05PTUVfQ0FNUE9fZGF0ZUInKSB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQoY29udHJvbE5hbWVBOiBzdHJpbmcsIGNvbnRyb2xOYW1lQjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkJztcclxuICAgICAgICAgICAgaWYgKGRhdGVBICYmIGRhdGVCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQU9iaiA9IG5ldyBEYXRlKGRhdGVBKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCT2JqID0gbmV3IERhdGUoZGF0ZUIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVBT2JqIDwgZGF0ZUJPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSBhY29yZG8gY29tIHVtYSBtw6FzY2FyYSBpbmZvcm1hZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgVEVMRUZPTkVfRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLnBob25lVmFsaWRhdG9yKCcoOTkpIDk5OTktOTk5OScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcGhvbmVWYWxpZGF0b3IobWFzazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IHBob25lQ29udHJvbFZhbGlkYXRpb24gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Bob25lVmFsaWRhdG9yJztcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHttYXNrLnJlcGxhY2UoLzkvZywgJ1xcXFxkJykucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpLnJlcGxhY2UoL1xcKS9nLCAnXFxcXCknKS5yZXBsYWNlKC8tL2csICdcXFxcLScpfSRgKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIXJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHBob25lQ29udHJvbFZhbGlkYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgdW0gY2FtcG8gZGUgbsO6bWVyb3Mgw6kgbWFpb3Igb3UgbWVub3IgcXVlIG91dHJvIGNhbXBvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGF0b3Igbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOVU1FUk9fQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBOVU1FUk9fQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVOdW1iZXJGaWVsZHMoJ05VTUVST19BJywgJ05VTUVST19CJywgTnVtYmVyQ29tcGFyaXNvblR5cGUuRVFVQUxTKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyBOVU1FUk9fQSDDqSBpZ3VhbCBhbyBOVU1FUkJfQi5cclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZU51bWJlckZpZWxkcyhjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcsIGNvbXBhcmlzb25NZXRob2Q6IE51bWJlckNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVOdW1iZXIgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVOdW1iZXJGaWVsZHMnO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyQSAmJiBudW1iZXJCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBOdW1iZXJDb21wYXJpc29uVHlwZVtjb21wYXJpc29uTWV0aG9kXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29uZGl0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFNdOiBudW1iZXJBICE9PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5dOiBudW1iZXJBIDw9IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl06IG51bWJlckEgPj0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogbnVtYmVyQSA8IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl9PUl9FUVVBTF06IG51bWJlckEgPiBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5OT1RfRVFVQUxTXTogbnVtYmVyQSA9PT0gbnVtYmVyQlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb25kaXRpb25bY29tcGFyaXNvbk1ldGhvZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiBjb21wYXJpc29uTWV0aG9kIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IGVycm9yVHlwZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xBKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xBLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSB2YWxvciBlc3TDoSBlbnRyZSBvcyBkZW1haXMgdmFsb3JlcyBkZSB0csOqcyBmb3JtQ29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyB0csOqcyBmb3JtQ29udHJvbHMgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIG1pbm9yRm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgdGFyZ2V0Rm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgbWFqb3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNoZWNrVmFsdWVCZXR3ZWVuKCdtaW5vckZvcm1Db250cm9sJywgJ3RhcmdldEZvcm1Db250cm9sJywgJ21ham9yRm9ybUNvbnRyb2wnKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyB0YXJnZXRGb3JtQ29udHJvbCBlc3TDoSBlbnRyZSBvIG1pbm9yRm9ybUNvbnRyb2wgZSBvIG1ham9yRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBAcGFyYW0gbWlub3JGb3JtQ29udHJvbFxyXG4gICAgICogQHBhcmFtIHRhcmdldEZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gbWFqb3JGb3JtQ29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbHVlQmV0d2VlbihtaW5vckZvcm1Db250cm9sOiBzdHJpbmcsIHRhcmdldEZvcm1Db250cm9sOiBzdHJpbmcsIG1ham9yRm9ybUNvbnRyb2w6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IGZvcm1Hcm91cC5nZXQobWlub3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUIgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQyA9IGZvcm1Hcm91cC5nZXQobWFqb3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NoZWNrVmFsdWVCZXR3ZWVuJztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFyZU51bWJlcnMgPSBbdmFsdWVBLCB2YWx1ZUIsIHZhbHVlQ10uZXZlcnkodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJlTnVtYmVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlQiA8IHZhbHVlQSB8fCB2YWx1ZUIgPiB2YWx1ZUMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRDb250cm9sID0gZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbnRyb2w/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHsgLi4udGFyZ2V0Q29udHJvbC5lcnJvcnMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGVycm9yc1ttZXRob2ROYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29udHJvbC5zZXRFcnJvcnMoT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPyBlcnJvcnMgOiBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2hlY2tWYWx1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBvYmpldG8gZSBzZSBwb3NzdWkgdW1hIHByb3ByaWVkYWRlIGVzcGVjw61maWNhLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE9CSkVUT19GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3Iub2JqZWN0UHJvcGVydHlWYWxpZGF0b3IoJ3Byb3ByaWVkYWRlJyldXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG9iamVjdFByb3BlcnR5VmFsaWRhdG9yKHByb3BlcnR5TmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdFByb3BlcnR5ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9ICdvYmplY3RQcm9wZXJ0eSc7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3RVdGlscy5pc09iamVjdChjb250cm9sLnZhbHVlKSAmJiBPYmplY3RVdGlscy5jb250YWluc1Byb3BlcnR5KGNvbnRyb2wudmFsdWUsIHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogdHJ1ZSB9O1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdFByb3BlcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhIHNlIG8gY2FtcG8gw6kgdW0gQ1BGIChDYWRhc3RybyBkZSBQZXNzb2EgRsOtc2ljYSkgdsOhbGlkby5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDUEZWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNwZlZhbCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNwZiA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjcGYpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBOw6NvIHZhbGlkYSBjYW1wbyB2YXppbywgdXNlIFZhbGlkYXRvcnMucmVxdWlyZWQganVudG8gc2UgcXVpc2VyIG9icmlnYXRvcmllZGFkZVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY3BmLmxlbmd0aCAhPT0gMTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNwZlZhbGlkYXRvcjogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBWZXJpZmljYSBzZSB0b2RvcyBvcyBkw61naXRvcyBzw6NvIGlndWFpcyAoZXguOiAxMTExMTExMTExMSlcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTB9JC8udGVzdChjcGYpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjcGZWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmFsaWRhw6fDo28gZG9zIGTDrWdpdG9zIHZlcmlmaWNhZG9yZXNcclxuICAgICAgICAgICAgY29uc3QgY2FsY0NoZWNrRGlnaXQgPSAoY3BmU2xpY2U6IHN0cmluZywgZmFjdG9yOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRpZ2l0IG9mIGNwZlNsaWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gcGFyc2VJbnQoZGlnaXQsIDEwKSAqIGZhY3Rvci0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gdG90YWwgJSAxMTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZW1haW5kZXIgPCAyID8gMCA6IDExIC0gcmVtYWluZGVyO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGlnaXQxID0gY2FsY0NoZWNrRGlnaXQoY3BmLnN1YnN0cmluZygwLCA5KSwgMTApO1xyXG4gICAgICAgICAgICBjb25zdCBkaWdpdDIgPSBjYWxjQ2hlY2tEaWdpdChjcGYuc3Vic3RyaW5nKDAsIDkpICsgZGlnaXQxLCAxMSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gZGlnaXQxID09PSBwYXJzZUludChjcGYuY2hhckF0KDkpLCAxMCkgJiZcclxuICAgICAgICAgICAgICAgIGRpZ2l0MiA9PT0gcGFyc2VJbnQoY3BmLmNoYXJBdCgxMCksIDEwKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkID8gbnVsbCA6IHsgY3BmVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3BmVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIGRlIENOUEogKENhZGFzdHJvIE5hY2lvbmFsIGRhIFBlc3NvYSBKdXLDrWRpY2EpLlxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIENOUEpWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU/LnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCAhPT0gMTQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gVmVyaWZpY2EgQ05QSnMgY29tIHRvZG9zIG9zIGTDrWdpdG9zIGlndWFpcyAoaW52w6FsaWRvcylcclxuICAgICAgICAgICAgaWYgKC9eKFxcZClcXDF7MTN9JC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVDaGVja0RpZ2l0ID0gKGNucGo6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2VpZ2h0cyA9IGxlbmd0aCA9PT0gMTJcclxuICAgICAgICAgICAgICAgICAgICA/IFs1LCA0LCAzLCAyLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyXVxyXG4gICAgICAgICAgICAgICAgICAgIDogWzYsIDUsIDQsIDMsIDIsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDJdO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IGNucGpcclxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgbGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcclxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGRpZ2l0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjICsgcGFyc2VJbnQoZGlnaXQsIDEwKSAqIHdlaWdodHNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHN1bSAlIDExO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA8IDIgPyAwIDogMTEgLSByZW1haW5kZXI7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXJzdENoZWNrRGlnaXQgPSB2YWxpZGF0ZUNoZWNrRGlnaXQodmFsdWUsIDEyKTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kQ2hlY2tEaWdpdCA9IHZhbGlkYXRlQ2hlY2tEaWdpdCh2YWx1ZSwgMTMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlyc3RDaGVja0RpZ2l0ICE9PSBwYXJzZUludCh2YWx1ZS5jaGFyQXQoMTIpLCAxMCkgfHxcclxuICAgICAgICAgICAgICAgIHNlY29uZENoZWNrRGlnaXQgIT09IHBhcnNlSW50KHZhbHVlLmNoYXJBdCgxMyksIDEwKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGNucGpWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIHbDoWxpZG9cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYSBzZSBhIHBsYWNhIGRvIHZlw61jdWxvIMOpIHbDoWxpZGEuXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgbGljZW5zZVBsYXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoY29udHJvbC52YWx1ZSB8fCAnJykudG9VcHBlckNhc2UoKS50cmltKCkucmVwbGFjZSgvLS9nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gQ2FtcG8gdmF6aW8gbsOjbyDDqSByZXNwb25zYWJpbGlkYWRlIGRlc3NlIHZhbGlkYWRvclxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gQUdST19SRUdFWC5pc01lcmNvc3VsTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpIHx8XHJcbiAgICAgICAgICAgICAgICBBR1JPX1JFR0VYLmlzT2xkTGljZW5zZVBsYXRlLnRlc3QodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQgPyBudWxsIDogeyBsaWNlbnNlUGxhdGVJbnZhbGlkOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG5cclxufSJdfQ==
|
|
@@ -175,6 +175,16 @@ const AGRO_REGEX = {
|
|
|
175
175
|
* Validação se todos os dígitos são iguais
|
|
176
176
|
*/
|
|
177
177
|
isAllDigitsEqual: /^(.)\1+$/,
|
|
178
|
+
/**
|
|
179
|
+
* Validação de Placa de Veículo do Mercosul
|
|
180
|
+
* Formato: ABC1D23
|
|
181
|
+
*/
|
|
182
|
+
isMercosulLicensePlate: /^[A-Z]{3}[0-9]{1}[A-Z]{1}[0-9]{2}$/,
|
|
183
|
+
/**
|
|
184
|
+
* Validação de Placa de Veículo Antiga
|
|
185
|
+
* Formato: AAA-0000
|
|
186
|
+
*/
|
|
187
|
+
isOldLicensePlate: /^[A-Z]{3}[0-9]{4}$/
|
|
178
188
|
};
|
|
179
189
|
|
|
180
190
|
var NumberComparisonType;
|
|
@@ -1698,13 +1708,14 @@ class AgroFormValidator {
|
|
|
1698
1708
|
*/
|
|
1699
1709
|
static checkValueBetween(minorFormControl, targetFormControl, majorFormControl) {
|
|
1700
1710
|
const checkValue = (control) => {
|
|
1701
|
-
var _a, _b, _c
|
|
1711
|
+
var _a, _b, _c;
|
|
1702
1712
|
const formGroup = control;
|
|
1703
1713
|
const valueA = (_a = formGroup.get(minorFormControl)) === null || _a === void 0 ? void 0 : _a.value;
|
|
1704
1714
|
const valueB = (_b = formGroup.get(targetFormControl)) === null || _b === void 0 ? void 0 : _b.value;
|
|
1705
1715
|
const valueC = (_c = formGroup.get(majorFormControl)) === null || _c === void 0 ? void 0 : _c.value;
|
|
1706
1716
|
const methodName = 'checkValueBetween';
|
|
1707
|
-
|
|
1717
|
+
const areNumbers = [valueA, valueB, valueC].every(v => v !== null && v !== undefined);
|
|
1718
|
+
if (areNumbers) {
|
|
1708
1719
|
if (valueB < valueA || valueB > valueC) {
|
|
1709
1720
|
const targetControl = formGroup.get(targetFormControl);
|
|
1710
1721
|
if (targetControl) {
|
|
@@ -1712,10 +1723,12 @@ class AgroFormValidator {
|
|
|
1712
1723
|
}
|
|
1713
1724
|
return { [methodName]: true };
|
|
1714
1725
|
}
|
|
1715
|
-
else
|
|
1726
|
+
else {
|
|
1716
1727
|
const targetControl = formGroup.get(targetFormControl);
|
|
1717
|
-
if (targetControl) {
|
|
1718
|
-
targetControl.
|
|
1728
|
+
if (targetControl === null || targetControl === void 0 ? void 0 : targetControl.hasError(methodName)) {
|
|
1729
|
+
const errors = Object.assign({}, targetControl.errors);
|
|
1730
|
+
delete errors[methodName];
|
|
1731
|
+
targetControl.setErrors(Object.keys(errors).length ? errors : null);
|
|
1719
1732
|
}
|
|
1720
1733
|
}
|
|
1721
1734
|
}
|
|
@@ -1745,6 +1758,91 @@ class AgroFormValidator {
|
|
|
1745
1758
|
};
|
|
1746
1759
|
return objectProperty;
|
|
1747
1760
|
}
|
|
1761
|
+
/**
|
|
1762
|
+
* Valida se o campo é um CPF (Cadastro de Pessoa Física) válido.
|
|
1763
|
+
*/
|
|
1764
|
+
static CPFValidator() {
|
|
1765
|
+
const cpfVal = (control) => {
|
|
1766
|
+
const cpf = (control.value || '').replace(/[^\d]/g, '');
|
|
1767
|
+
if (!cpf) {
|
|
1768
|
+
return null; // Não valida campo vazio, use Validators.required junto se quiser obrigatoriedade
|
|
1769
|
+
}
|
|
1770
|
+
if (cpf.length !== 11) {
|
|
1771
|
+
return { cpfValidator: true };
|
|
1772
|
+
}
|
|
1773
|
+
// Verifica se todos os dígitos são iguais (ex.: 11111111111)
|
|
1774
|
+
if (/^(\d)\1{10}$/.test(cpf)) {
|
|
1775
|
+
return { cpfValidator: true };
|
|
1776
|
+
}
|
|
1777
|
+
// Validação dos dígitos verificadores
|
|
1778
|
+
const calcCheckDigit = (cpfSlice, factor) => {
|
|
1779
|
+
let total = 0;
|
|
1780
|
+
for (const digit of cpfSlice) {
|
|
1781
|
+
total += parseInt(digit, 10) * factor--;
|
|
1782
|
+
}
|
|
1783
|
+
const remainder = total % 11;
|
|
1784
|
+
return remainder < 2 ? 0 : 11 - remainder;
|
|
1785
|
+
};
|
|
1786
|
+
const digit1 = calcCheckDigit(cpf.substring(0, 9), 10);
|
|
1787
|
+
const digit2 = calcCheckDigit(cpf.substring(0, 9) + digit1, 11);
|
|
1788
|
+
const isValid = digit1 === parseInt(cpf.charAt(9), 10) &&
|
|
1789
|
+
digit2 === parseInt(cpf.charAt(10), 10);
|
|
1790
|
+
return isValid ? null : { cpfValidator: true };
|
|
1791
|
+
};
|
|
1792
|
+
return cpfVal;
|
|
1793
|
+
}
|
|
1794
|
+
/**
|
|
1795
|
+
* Validator de CNPJ (Cadastro Nacional da Pessoa Jurídica).
|
|
1796
|
+
* @returns
|
|
1797
|
+
*/
|
|
1798
|
+
CNPJValidator() {
|
|
1799
|
+
return (control) => {
|
|
1800
|
+
var _a;
|
|
1801
|
+
const value = (_a = control.value) === null || _a === void 0 ? void 0 : _a.replace(/\D/g, '');
|
|
1802
|
+
if (!value || value.length !== 14) {
|
|
1803
|
+
return { cnpjValidator: true };
|
|
1804
|
+
}
|
|
1805
|
+
// Verifica CNPJs com todos os dígitos iguais (inválidos)
|
|
1806
|
+
if (/^(\d)\1{13}$/.test(value)) {
|
|
1807
|
+
return { cnpjValidator: true };
|
|
1808
|
+
}
|
|
1809
|
+
const validateCheckDigit = (cnpj, length) => {
|
|
1810
|
+
const weights = length === 12
|
|
1811
|
+
? [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
1812
|
+
: [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
|
|
1813
|
+
const sum = cnpj
|
|
1814
|
+
.slice(0, length)
|
|
1815
|
+
.split('')
|
|
1816
|
+
.reduce((acc, digit, index) => {
|
|
1817
|
+
return acc + parseInt(digit, 10) * weights[index];
|
|
1818
|
+
}, 0);
|
|
1819
|
+
const remainder = sum % 11;
|
|
1820
|
+
return remainder < 2 ? 0 : 11 - remainder;
|
|
1821
|
+
};
|
|
1822
|
+
const firstCheckDigit = validateCheckDigit(value, 12);
|
|
1823
|
+
const secondCheckDigit = validateCheckDigit(value, 13);
|
|
1824
|
+
if (firstCheckDigit !== parseInt(value.charAt(12), 10) ||
|
|
1825
|
+
secondCheckDigit !== parseInt(value.charAt(13), 10)) {
|
|
1826
|
+
return { cnpjValidator: true };
|
|
1827
|
+
}
|
|
1828
|
+
return null; // válido
|
|
1829
|
+
};
|
|
1830
|
+
}
|
|
1831
|
+
/**
|
|
1832
|
+
* Valida se a placa do veículo é válida.
|
|
1833
|
+
* @returns
|
|
1834
|
+
*/
|
|
1835
|
+
licensePlateValidator() {
|
|
1836
|
+
return (control) => {
|
|
1837
|
+
const value = (control.value || '').toUpperCase().trim().replace(/-/g, '');
|
|
1838
|
+
if (!value) {
|
|
1839
|
+
return null; // Campo vazio não é responsabilidade desse validador
|
|
1840
|
+
}
|
|
1841
|
+
const isValid = AGRO_REGEX.isMercosulLicensePlate.test(value) ||
|
|
1842
|
+
AGRO_REGEX.isOldLicensePlate.test(value);
|
|
1843
|
+
return isValid ? null : { licensePlateInvalid: true };
|
|
1844
|
+
};
|
|
1845
|
+
}
|
|
1748
1846
|
}
|
|
1749
1847
|
|
|
1750
1848
|
class AgroCookieUtils {
|