@senior-agronegocio/angular-components 0.0.52 → 0.0.55

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.
@@ -1,7 +1,7 @@
1
1
  import { DateComparisonType } from '../enums/date-comparison-type.enum';
2
- import { AGRO_REGEX } from '../common/agro-regex.constant';
3
2
  import { NumberComparisonType } from '../enums/number-comparison-type.enum';
4
3
  import { ObjectUtils } from '../common/agro-object-utils.class';
4
+ import { AgroStringUtils } from '../common';
5
5
  var AgroFormValidator = /** @class */ (function () {
6
6
  function AgroFormValidator() {
7
7
  }
@@ -16,12 +16,11 @@ var AgroFormValidator = /** @class */ (function () {
16
16
  * @returns
17
17
  */
18
18
  AgroFormValidator.emailValidator = function (control) {
19
- if (control.value && !AGRO_REGEX.isEmail.test(control.value)) {
20
- control.setErrors({ emailValidator: true });
21
- return { emailValidator: true };
19
+ var email = control.value;
20
+ if (!email) {
21
+ return null;
22
22
  }
23
- control.setErrors(null);
24
- return null;
23
+ return AgroStringUtils.isValidEmail(email) ? null : { emailValidator: true };
25
24
  };
26
25
  /**
27
26
  * Aplique esse validador em um campo do tipo Date, para verificar se a data selecionada é maior ou menor que a data atual.
@@ -90,30 +89,6 @@ var AgroFormValidator = /** @class */ (function () {
90
89
  };
91
90
  return compareDate;
92
91
  };
93
- /**
94
- * Validator para checar se o campo é um número de telefone de acordo com uma máscara informada.
95
- *
96
- * @example
97
- * this.myForm = this.fb.group({
98
- * TELEFONE_FIELD: ['', [Validators.required, AgroFormValidator.phoneValidator('(99) 9999-9999')]]
99
- * });
100
- * @param mask
101
- * @returns
102
- */
103
- AgroFormValidator.phoneValidator = function (mask) {
104
- var phoneControlValidation = function (control) {
105
- var _a, _b;
106
- var methodName = 'phoneValidator';
107
- var regex = new RegExp("^" + mask.replace(/9/g, '\\d').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/-/g, '\\-') + "$");
108
- if (control.value && !regex.test(control.value)) {
109
- control.setErrors((_a = {}, _a[methodName] = true, _a));
110
- return _b = {}, _b[methodName] = true, _b;
111
- }
112
- control.setErrors(null);
113
- return null;
114
- };
115
- return phoneControlValidation;
116
- };
117
92
  /**
118
93
  * Validator para checar se um campo de números é maior ou menor que outro campo.
119
94
  *
@@ -233,7 +208,29 @@ var AgroFormValidator = /** @class */ (function () {
233
208
  };
234
209
  return objectProperty;
235
210
  };
211
+ /**
212
+ * Verifica se a string informada é um CPF válido.
213
+ * Se a validação for false, retorna um objeto com a chave cpfValidator.
214
+ */
215
+ AgroFormValidator.CPFValidator = function (control) {
216
+ var cpf = control.value;
217
+ if (!cpf) {
218
+ return null;
219
+ }
220
+ return AgroStringUtils.validateCPF(cpf) ? null : { cpfValidator: true };
221
+ };
222
+ /**
223
+ * Verifica se a string informada é um CNPJ válido.
224
+ * Se a validação for false, retorna um objeto com a chave cnpjValidator.
225
+ */
226
+ AgroFormValidator.CNPJValidator = function (control) {
227
+ var cnpj = control.value;
228
+ if (!cnpj) {
229
+ return null;
230
+ }
231
+ return AgroStringUtils.validateCNPJ(cnpj) ? null : { cnpjValidator: true };
232
+ };
236
233
  return AgroFormValidator;
237
234
  }());
238
235
  export { AgroFormValidator };
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWhFO0lBQUE7SUF1T0EsQ0FBQztJQXJPRzs7Ozs7Ozs7O09BU0c7SUFDVyxnQ0FBYyxHQUE1QixVQUE2QixPQUF3QjtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFHRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDVyxzQ0FBb0IsR0FBbEMsVUFBbUMsY0FBa0M7UUFDakUsSUFBTSxXQUFXLEdBQUcsVUFBQyxPQUF3Qjs7WUFDekMsSUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUM7WUFDekMsSUFBTSxZQUFZLEdBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQU0sV0FBVyxHQUFTLElBQUks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S0FBRztpQkFDakM7cUJBQU0sVUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLDBDQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUc7b0JBQy9ELElBQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxhQUFhLEVBQUU7d0JBQ2YsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDakM7aUJBQ0o7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUNGLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDVyx5Q0FBdUIsR0FBckMsVUFBc0MsWUFBb0I7UUFDdEQsSUFBTSxjQUFjLEdBQUcsVUFBQyxPQUF3Qjs7WUFDNUMsSUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7WUFDcEMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDbEcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDeEIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE9BQU8sQ0FBQyxTQUFTLFdBQUcsR0FBQyxVQUFVLElBQUcsSUFBSSxNQUFHLENBQUM7WUFDMUMsZ0JBQVMsR0FBQyxVQUFVLElBQUcsSUFBSSxLQUFHO1FBQ2xDLENBQUMsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFHTCx3QkFBQztBQUFELENBQUMsQUF2T0QsSUF1T0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBlbWFpbFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUFHUk9fUkVHRVguaXNFbWFpbC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVtYWlsVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGFkb3IgZW0gdW0gY2FtcG8gZG8gdGlwbyBEYXRlLCBwYXJhIHZlcmlmaWNhciBzZSBhIGRhdGEgc2VsZWNpb25hZGEgw6kgbWFpb3Igb3UgbWVub3IgcXVlIGEgZGF0YSBhdHVhbC5cclxuICAgICAqXHJcbiAgICAgKiBVdGlsaXplIG8gcGFyw6JtZXRybyBjb21wYXJpc29uVHlwZSBwYXJhIGRlZmluaXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIGRldmUgc2VyIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKiBBIHZhbGlkYcOnw6NvIHNlcsOhIGF0cmF2w6lzIGRvIGVudW0gRGF0ZUNvbXBhcmlzb25UeXBlLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5PTUVfQ0FNUE86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVEYXRlV2l0aFRvZGF5KERhdGVDb21wYXJpc29uVHlwZS5ncmVhdGhlclRoYW4pXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIGNvbXBhcmlzb25UeXBlXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aFRvZGF5KGNvbXBhcmlzb25UeXBlOiBEYXRlQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZURhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2RhdGVDb21wYXJpc29uVG9kYXknO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZShjb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuXTogc2VsZWN0ZWREYXRlIDw9IGN1cnJlbnREYXRlLFxyXG4gICAgICAgICAgICAgICAgW0RhdGVDb21wYXJpc29uVHlwZS5sZXNzVGhhbl06IHNlbGVjdGVkRGF0ZSA+PSBjdXJyZW50RGF0ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbnNbY29tcGFyaXNvblR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmEgZG9pcyBjYW1wb3MgZG8gdGlwbyBEYXRlLCB2ZXJpZmljYW5kbyBzZSBvIGNhbXBvIEEgw6kgbWFpb3IgcXVlIG8gY2FtcG8gQi4gU2UgQSBmb3IgbWFpb3IgcXVlIEIsIGVudMOjb1xyXG4gICAgICogbyBjYW1wbyBBIMOpIGludmFsaWRhZG8uIENhc28gY29udHLDoXJpbywgbyBjYW1wbyBBIMOpIHZhbGlkYWRvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSBjYW1wbyBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVBOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBOT01FX0NBTVBPX2RhdGVCOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmRhdGVDb21wYXJpc29uVmFsaWRhdG9yKCdOT01FX0NBTVBPX2RhdGVBJywgJ05PTUVfQ0FNUE9fZGF0ZUInKSB9KTtcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZURhdGVXaXRoT3RoZXJEYXRlRmllbGQoY29udHJvbE5hbWVBOiBzdHJpbmcsIGNvbnRyb2xOYW1lQjogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkJztcclxuICAgICAgICAgICAgaWYgKGRhdGVBICYmIGRhdGVCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQU9iaiA9IG5ldyBEYXRlKGRhdGVBKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCT2JqID0gbmV3IERhdGUoZGF0ZUIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVBT2JqIDwgZGF0ZUJPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gbsO6bWVybyBkZSB0ZWxlZm9uZSBkZSBhY29yZG8gY29tIHVtYSBtw6FzY2FyYSBpbmZvcm1hZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgVEVMRUZPTkVfRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLnBob25lVmFsaWRhdG9yKCcoOTkpIDk5OTktOTk5OScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIG1hc2tcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcGhvbmVWYWxpZGF0b3IobWFzazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IHBob25lQ29udHJvbFZhbGlkYXRpb24gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Bob25lVmFsaWRhdG9yJztcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHttYXNrLnJlcGxhY2UoLzkvZywgJ1xcXFxkJykucmVwbGFjZSgvXFwoL2csICdcXFxcKCcpLnJlcGxhY2UoL1xcKS9nLCAnXFxcXCknKS5yZXBsYWNlKC8tL2csICdcXFxcLScpfSRgKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIXJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHBob25lQ29udHJvbFZhbGlkYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgdW0gY2FtcG8gZGUgbsO6bWVyb3Mgw6kgbWFpb3Igb3UgbWVub3IgcXVlIG91dHJvIGNhbXBvLlxyXG4gICAgICpcclxuICAgICAqIEFwbGlxdWUgZXNzZSB2YWxpZGF0b3Igbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOVU1FUk9fQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBOVU1FUk9fQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNvbXBhcmVOdW1iZXJGaWVsZHMoJ05VTUVST19BJywgJ05VTUVST19CJywgTnVtYmVyQ29tcGFyaXNvblR5cGUuRVFVQUxTKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyBOVU1FUk9fQSDDqSBpZ3VhbCBhbyBOVU1FUkJfQi5cclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUFcclxuICAgICAqIEBwYXJhbSBjb250cm9sTmFtZUJcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFyZU51bWJlckZpZWxkcyhjb250cm9sTmFtZUE6IHN0cmluZywgY29udHJvbE5hbWVCOiBzdHJpbmcsIGNvbXBhcmlzb25NZXRob2Q6IE51bWJlckNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVOdW1iZXIgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckIgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQik/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NvbXBhcmVOdW1iZXJGaWVsZHMnO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyQSAmJiBudW1iZXJCKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclR5cGUgPSBOdW1iZXJDb21wYXJpc29uVHlwZVtjb21wYXJpc29uTWV0aG9kXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29uZGl0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFNdOiBudW1iZXJBICE9PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5dOiBudW1iZXJBIDw9IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl06IG51bWJlckEgPj0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogbnVtYmVyQSA8IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkxFU1NfVEhBTl9PUl9FUVVBTF06IG51bWJlckEgPiBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5OT1RfRVFVQUxTXTogbnVtYmVyQSA9PT0gbnVtYmVyQlxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JDb25kaXRpb25bY29tcGFyaXNvbk1ldGhvZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiBjb21wYXJpc29uTWV0aG9kIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IGVycm9yVHlwZSB9O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbEEgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xBKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xBLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSB2YWxvciBlc3TDoSBlbnRyZSBvcyBkZW1haXMgdmFsb3JlcyBkZSB0csOqcyBmb3JtQ29udHJvbHMuXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyB0csOqcyBmb3JtQ29udHJvbHMgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIG1pbm9yRm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgdGFyZ2V0Rm9ybUNvbnRyb2w6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgKiAgICAgbWFqb3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICogfSwgeyB2YWxpZGF0b3I6IEFncm9Gb3JtVmFsaWRhdG9yLmNoZWNrVmFsdWVCZXR3ZWVuKCdtaW5vckZvcm1Db250cm9sJywgJ3RhcmdldEZvcm1Db250cm9sJywgJ21ham9yRm9ybUNvbnRyb2wnKSB9KTtcclxuICAgICAqXHJcbiAgICAgKiBOZXN0ZSBjYXNvLCBhIHZlcmlmaWNhw6fDo28gc2Vyw6Egc2UgbyB0YXJnZXRGb3JtQ29udHJvbCBlc3TDoSBlbnRyZSBvIG1pbm9yRm9ybUNvbnRyb2wgZSBvIG1ham9yRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBAcGFyYW0gbWlub3JGb3JtQ29udHJvbFxyXG4gICAgICogQHBhcmFtIHRhcmdldEZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gbWFqb3JGb3JtQ29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjaGVja1ZhbHVlQmV0d2VlbihtaW5vckZvcm1Db250cm9sOiBzdHJpbmcsIHRhcmdldEZvcm1Db250cm9sOiBzdHJpbmcsIG1ham9yRm9ybUNvbnRyb2w6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjaGVja1ZhbHVlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQSA9IGZvcm1Hcm91cC5nZXQobWlub3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUIgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQyA9IGZvcm1Hcm91cC5nZXQobWFqb3JGb3JtQ29udHJvbCk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ2NoZWNrVmFsdWVCZXR3ZWVuJztcclxuICAgICAgICAgICAgaWYgKHZhbHVlQSAmJiB2YWx1ZUIgJiYgdmFsdWVDKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVCIDwgdmFsdWVBIHx8IHZhbHVlQiA+IHZhbHVlQykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5nZXQodGFyZ2V0Rm9ybUNvbnRyb2wpPy5oYXNFcnJvcihtZXRob2ROYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KHRhcmdldEZvcm1Db250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY2hlY2tWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSBvIGNhbXBvIMOpIHVtIG9iamV0byBlIHNlIHBvc3N1aSB1bWEgcHJvcHJpZWRhZGUgZXNwZWPDrWZpY2EuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgT0JKRVRPX0ZJRUxEOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBBZ3JvRm9ybVZhbGlkYXRvci5vYmplY3RQcm9wZXJ0eVZhbGlkYXRvcigncHJvcHJpZWRhZGUnKV1dXHJcbiAgICAgKiB9KTtcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgb2JqZWN0UHJvcGVydHlWYWxpZGF0b3IocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJvcGVydHkgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ29iamVjdFByb3BlcnR5JztcclxuICAgICAgICAgICAgaWYgKE9iamVjdFV0aWxzLmlzT2JqZWN0KGNvbnRyb2wudmFsdWUpICYmIE9iamVjdFV0aWxzLmNvbnRhaW5zUHJvcGVydHkoY29udHJvbC52YWx1ZSwgcHJvcGVydHlOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IFttZXRob2ROYW1lXTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0UHJvcGVydHk7XHJcbiAgICB9XHJcblxyXG5cclxufSJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby1mb3JtLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiZm9ybS12YWxpZGF0b3IvYWdyby1mb3JtLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU1QztJQUFBO0lBdU9BLENBQUM7SUFyT0c7Ozs7Ozs7OztPQVNHO0lBQ0ksZ0NBQWMsR0FBckIsVUFBc0IsT0FBd0I7UUFDMUMsSUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBR0Q7Ozs7Ozs7Ozs7OztPQVlHO0lBQ1csc0NBQW9CLEdBQWxDLFVBQW1DLGNBQWtDO1FBQ2pFLElBQU0sV0FBVyxHQUFHLFVBQUMsT0FBd0I7O1lBQ3pDLElBQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDO1lBQ3pDLElBQU0sWUFBWSxHQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxJQUFNLFdBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBRXJDLElBQU0sVUFBVTtnQkFDWixHQUFDLGtCQUFrQixDQUFDLFlBQVksSUFBRyxZ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QUFHO1FBQ2xDLENBQUMsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFHRDs7O09BR0c7SUFDSSw4QkFBWSxHQUFuQixVQUFvQixPQUF3QjtRQUN4QyxJQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzVFLENBQUM7SUFFRDs7O09BR0c7SUFDSSwrQkFBYSxHQUFwQixVQUFxQixPQUF3QjtRQUN6QyxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQy9FLENBQUM7SUFHTCx3QkFBQztBQUFELENBQUMsQUF2T0QsSUF1T0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL2RhdGUtY29tcGFyaXNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tcmVnZXguY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBOdW1iZXJDb21wYXJpc29uVHlwZSB9IGZyb20gJy4uL2VudW1zL251bWJlci1jb21wYXJpc29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vY29tbW9uL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuaW1wb3J0IHsgQWdyb1N0cmluZ1V0aWxzIH0gZnJvbSAnLi4vY29tbW9uJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBZ3JvRm9ybVZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgcGFyYSBjaGVjYXIgc2UgbyBjYW1wbyDDqSB1bSBlLW1haWxcclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBFTUFJTF9GSUVMRDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgQWdyb0Zvcm1WYWxpZGF0b3IuZW1haWxWYWxpZGF0b3JdXVxyXG4gICAgICogfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVtYWlsVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBlbWFpbCA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgaWYgKCFlbWFpbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEFncm9TdHJpbmdVdGlscy5pc1ZhbGlkRW1haWwoZW1haWwpID8gbnVsbCA6IHsgZW1haWxWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcGxpcXVlIGVzc2UgdmFsaWRhZG9yIGVtIHVtIGNhbXBvIGRvIHRpcG8gRGF0ZSwgcGFyYSB2ZXJpZmljYXIgc2UgYSBkYXRhIHNlbGVjaW9uYWRhIMOpIG1haW9yIG91IG1lbm9yIHF1ZSBhIGRhdGEgYXR1YWwuXHJcbiAgICAgKlxyXG4gICAgICogVXRpbGl6ZSBvIHBhcsOibWV0cm8gY29tcGFyaXNvblR5cGUgcGFyYSBkZWZpbmlyIHNlIGEgZGF0YSBzZWxlY2lvbmFkYSBkZXZlIHNlciBtYWlvciBvdSBtZW5vciBxdWUgYSBkYXRhIGF0dWFsLlxyXG4gICAgICogQSB2YWxpZGHDp8OjbyBzZXLDoSBhdHJhdsOpcyBkbyBlbnVtIERhdGVDb21wYXJpc29uVHlwZS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBOT01FX0NBTVBPOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBBZ3JvRm9ybVZhbGlkYXRvci5jb21wYXJlRGF0ZVdpdGhUb2RheShEYXRlQ29tcGFyaXNvblR5cGUuZ3JlYXRoZXJUaGFuKV1dXHJcbiAgICAgKiB9KTtcclxuICAgICAqIEBwYXJhbSBjb21wYXJpc29uVHlwZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlRGF0ZVdpdGhUb2RheShjb21wYXJpc29uVHlwZTogRGF0ZUNvbXBhcmlzb25UeXBlKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVEYXRlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9ICdkYXRlQ29tcGFyaXNvblRvZGF5JztcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlOiBEYXRlID0gbmV3IERhdGUoY29udHJvbC52YWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBbRGF0ZUNvbXBhcmlzb25UeXBlLmdyZWF0aGVyVGhhbl06IHNlbGVjdGVkRGF0ZSA8PSBjdXJyZW50RGF0ZSxcclxuICAgICAgICAgICAgICAgIFtEYXRlQ29tcGFyaXNvblR5cGUubGVzc1RoYW5dOiBzZWxlY3RlZERhdGUgPj0gY3VycmVudERhdGVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb25zW2NvbXBhcmlzb25UeXBlXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB7IHZhbHVlOiBjb250cm9sLnZhbHVlIH0gfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY29tcGFyZURhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb21wYXJhIGRvaXMgY2FtcG9zIGRvIHRpcG8gRGF0ZSwgdmVyaWZpY2FuZG8gc2UgbyBjYW1wbyBBIMOpIG1haW9yIHF1ZSBvIGNhbXBvIEIuIFNlIEEgZm9yIG1haW9yIHF1ZSBCLCBlbnTDo29cclxuICAgICAqIG8gY2FtcG8gQSDDqSBpbnZhbGlkYWRvLiBDYXNvIGNvbnRyw6FyaW8sIG8gY2FtcG8gQSDDqSB2YWxpZGFkby5cclxuICAgICAqXHJcbiAgICAgKiBBcGxpcXVlIGVzc2UgY2FtcG8gbm8gRm9ybUdyb3VwLCBwYXNzYW5kbyBvcyBub21lcyBkb3MgY2FtcG9zIHF1ZSBkZXNlamEgY29tcGFyYXIuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgTk9NRV9DQU1QT19kYXRlQTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgTk9NRV9DQU1QT19kYXRlQjogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICAgIH0sIHsgdmFsaWRhdG9yOiBBZ3JvRm9ybVZhbGlkYXRvci5kYXRlQ29tcGFyaXNvblZhbGlkYXRvcignTk9NRV9DQU1QT19kYXRlQScsICdOT01FX0NBTVBPX2RhdGVCJykgfSk7XHJcbiAgICAgKiBAcGFyYW0gY29udHJvbE5hbWVBXHJcbiAgICAgKiBAcGFyYW0gY29udHJvbE5hbWVCXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNvbXBhcmVEYXRlV2l0aE90aGVyRGF0ZUZpZWxkKGNvbnRyb2xOYW1lQTogc3RyaW5nLCBjb250cm9sTmFtZUI6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBjb21wYXJlRGF0ZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUIpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9ICdjb21wYXJlRGF0ZVdpdGhPdGhlckRhdGVGaWVsZCc7XHJcbiAgICAgICAgICAgIGlmIChkYXRlQSAmJiBkYXRlQikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUFPYmogPSBuZXcgRGF0ZShkYXRlQSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlQk9iaiA9IG5ldyBEYXRlKGRhdGVCKTtcclxuICAgICAgICAgICAgICAgIGlmIChkYXRlQU9iaiA8IGRhdGVCT2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgW21ldGhvZE5hbWVdOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uaGFzRXJyb3IobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lQSk/LnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBwYXJhIGNoZWNhciBzZSB1bSBjYW1wbyBkZSBuw7ptZXJvcyDDqSBtYWlvciBvdSBtZW5vciBxdWUgb3V0cm8gY2FtcG8uXHJcbiAgICAgKlxyXG4gICAgICogQXBsaXF1ZSBlc3NlIHZhbGlkYXRvciBubyBGb3JtR3JvdXAsIHBhc3NhbmRvIG9zIG5vbWVzIGRvcyBjYW1wb3MgcXVlIGRlc2VqYSBjb21wYXJhci5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB0aGlzLm15Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICogICAgIE5VTUVST19BOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICogICAgIE5VTUVST19COiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgKiB9LCB7IHZhbGlkYXRvcjogQWdyb0Zvcm1WYWxpZGF0b3IuY29tcGFyZU51bWJlckZpZWxkcygnTlVNRVJPX0EnLCAnTlVNRVJPX0InLCBOdW1iZXJDb21wYXJpc29uVHlwZS5FUVVBTFMpIH0pO1xyXG4gICAgICpcclxuICAgICAqIE5lc3RlIGNhc28sIGEgdmVyaWZpY2HDp8OjbyBzZXLDoSBzZSBvIE5VTUVST19BIMOpIGlndWFsIGFvIE5VTUVSQl9CLlxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xOYW1lQVxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xOYW1lQlxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjb21wYXJlTnVtYmVyRmllbGRzKGNvbnRyb2xOYW1lQTogc3RyaW5nLCBjb250cm9sTmFtZUI6IHN0cmluZywgY29tcGFyaXNvbk1ldGhvZDogTnVtYmVyQ29tcGFyaXNvblR5cGUpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZU51bWJlciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXJBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyQiA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVCKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnY29tcGFyZU51bWJlckZpZWxkcyc7XHJcbiAgICAgICAgICAgIGlmIChudW1iZXJBICYmIG51bWJlckIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVHlwZSA9IE51bWJlckNvbXBhcmlzb25UeXBlW2NvbXBhcmlzb25NZXRob2RdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3JDb25kaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkVRVUFMU106IG51bWJlckEgIT09IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLkdSRUFURVJfVEhBTl06IG51bWJlckEgPD0gbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuTEVTU19USEFOXTogbnVtYmVyQSA+PSBudW1iZXJCLFxyXG4gICAgICAgICAgICAgICAgICAgIFtOdW1iZXJDb21wYXJpc29uVHlwZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUxdOiBudW1iZXJBIDwgbnVtYmVyQixcclxuICAgICAgICAgICAgICAgICAgICBbTnVtYmVyQ29tcGFyaXNvblR5cGUuTEVTU19USEFOX09SX0VRVUFMXTogbnVtYmVyQSA+IG51bWJlckIsXHJcbiAgICAgICAgICAgICAgICAgICAgW051bWJlckNvbXBhcmlzb25UeXBlLk5PVF9FUVVBTFNdOiBudW1iZXJBID09PSBudW1iZXJCXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlcnJvckNvbmRpdGlvbltjb21wYXJpc29uTWV0aG9kXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xBID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZUEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sQSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sQS5zZXRFcnJvcnMoeyBbbWV0aG9kTmFtZV06IGNvbXBhcmlzb25NZXRob2QgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IFttZXRob2ROYW1lXTogZXJyb3JUeXBlIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKT8uaGFzRXJyb3IobWV0aG9kTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sQSA9IGZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWVBKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbEEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbEEuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjb21wYXJlTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIHVtIHZhbG9yIGVzdMOhIGVudHJlIG9zIGRlbWFpcyB2YWxvcmVzIGRlIHRyw6pzIGZvcm1Db250cm9scy5cclxuICAgICAqXHJcbiAgICAgKiBBcGxpcXVlIGVzc2UgdmFsaWRhdG9yIG5vIEZvcm1Hcm91cCwgcGFzc2FuZG8gb3Mgbm9tZXMgZG9zIHRyw6pzIGZvcm1Db250cm9scyBxdWUgZGVzZWphIGNvbXBhcmFyLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHRoaXMubXlGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgKiAgICAgbWlub3JGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICB0YXJnZXRGb3JtQ29udHJvbDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAqICAgICBtYWpvckZvcm1Db250cm9sOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgKiB9LCB7IHZhbGlkYXRvcjogQWdyb0Zvcm1WYWxpZGF0b3IuY2hlY2tWYWx1ZUJldHdlZW4oJ21pbm9yRm9ybUNvbnRyb2wnLCAndGFyZ2V0Rm9ybUNvbnRyb2wnLCAnbWFqb3JGb3JtQ29udHJvbCcpIH0pO1xyXG4gICAgICpcclxuICAgICAqIE5lc3RlIGNhc28sIGEgdmVyaWZpY2HDp8OjbyBzZXLDoSBzZSBvIHRhcmdldEZvcm1Db250cm9sIGVzdMOhIGVudHJlIG8gbWlub3JGb3JtQ29udHJvbCBlIG8gbWFqb3JGb3JtQ29udHJvbC5cclxuICAgICAqIEBwYXJhbSBtaW5vckZvcm1Db250cm9sXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0Rm9ybUNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBtYWpvckZvcm1Db250cm9sXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGNoZWNrVmFsdWVCZXR3ZWVuKG1pbm9yRm9ybUNvbnRyb2w6IHN0cmluZywgdGFyZ2V0Rm9ybUNvbnRyb2w6IHN0cmluZywgbWFqb3JGb3JtQ29udHJvbDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrVmFsdWUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVBID0gZm9ybUdyb3VwLmdldChtaW5vckZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQiA9IGZvcm1Hcm91cC5nZXQodGFyZ2V0Rm9ybUNvbnRyb2wpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVDID0gZm9ybUdyb3VwLmdldChtYWpvckZvcm1Db250cm9sKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnY2hlY2tWYWx1ZUJldHdlZW4nO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVBICYmIHZhbHVlQiAmJiB2YWx1ZUMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUIgPCB2YWx1ZUEgfHwgdmFsdWVCID4gdmFsdWVDKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29udHJvbCA9IGZvcm1Hcm91cC5nZXQodGFyZ2V0Rm9ybUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldENvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmdldCh0YXJnZXRGb3JtQ29udHJvbCk/Lmhhc0Vycm9yKG1ldGhvZE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29udHJvbCA9IGZvcm1Hcm91cC5nZXQodGFyZ2V0Rm9ybUNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldENvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBjaGVja1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yIHBhcmEgY2hlY2FyIHNlIG8gY2FtcG8gw6kgdW0gb2JqZXRvIGUgc2UgcG9zc3VpIHVtYSBwcm9wcmllZGFkZSBlc3BlY8OtZmljYS5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdGhpcy5teUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAqICAgICBPQkpFVE9fRklFTEQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIEFncm9Gb3JtVmFsaWRhdG9yLm9iamVjdFByb3BlcnR5VmFsaWRhdG9yKCdwcm9wcmllZGFkZScpXV1cclxuICAgICAqIH0pO1xyXG4gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBvYmplY3RQcm9wZXJ0eVZhbGlkYXRvcihwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuICAgICAgICBjb25zdCBvYmplY3RQcm9wZXJ0eSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnb2JqZWN0UHJvcGVydHknO1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNPYmplY3QoY29udHJvbC52YWx1ZSkgJiYgT2JqZWN0VXRpbHMuY29udGFpbnNQcm9wZXJ0eShjb250cm9sLnZhbHVlLCBwcm9wZXJ0eU5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKHsgW21ldGhvZE5hbWVdOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4geyBbbWV0aG9kTmFtZV06IHRydWUgfTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBvYmplY3RQcm9wZXJ0eTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWZXJpZmljYSBzZSBhIHN0cmluZyBpbmZvcm1hZGEgw6kgdW0gQ1BGIHbDoWxpZG8uXHJcbiAgICAgKiBTZSBhIHZhbGlkYcOnw6NvIGZvciBmYWxzZSwgcmV0b3JuYSB1bSBvYmpldG8gY29tIGEgY2hhdmUgY3BmVmFsaWRhdG9yLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgQ1BGVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBjcGYgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgIGlmICghY3BmKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQWdyb1N0cmluZ1V0aWxzLnZhbGlkYXRlQ1BGKGNwZikgPyBudWxsIDogeyBjcGZWYWxpZGF0b3I6IHRydWUgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFZlcmlmaWNhIHNlIGEgc3RyaW5nIGluZm9ybWFkYSDDqSB1bSBDTlBKIHbDoWxpZG8uXHJcbiAgICAgKiBTZSBhIHZhbGlkYcOnw6NvIGZvciBmYWxzZSwgcmV0b3JuYSB1bSBvYmpldG8gY29tIGEgY2hhdmUgY25walZhbGlkYXRvci5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIENOUEpWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGNucGogPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgIGlmICghY25waikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEFncm9TdHJpbmdVdGlscy52YWxpZGF0ZUNOUEooY25waikgPyBudWxsIDogeyBjbnBqVmFsaWRhdG9yOiB0cnVlIH07XHJcbiAgICB9XHJcblxyXG5cclxufSJdfQ==