@ngx-formly/core 5.10.21 → 5.10.25

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.
Files changed (33) hide show
  1. package/bundles/ngx-formly-core-json-schema.umd.js +15 -13
  2. package/bundles/ngx-formly-core-json-schema.umd.js.map +1 -1
  3. package/bundles/ngx-formly-core-json-schema.umd.min.js +1 -1
  4. package/bundles/ngx-formly-core-json-schema.umd.min.js.map +1 -1
  5. package/bundles/ngx-formly-core.umd.js +77 -34
  6. package/bundles/ngx-formly-core.umd.js.map +1 -1
  7. package/bundles/ngx-formly-core.umd.min.js +1 -1
  8. package/bundles/ngx-formly-core.umd.min.js.map +1 -1
  9. package/esm2015/json-schema/formly-json-schema.service.js +16 -14
  10. package/esm2015/lib/components/formly.attributes.js +8 -3
  11. package/esm2015/lib/components/formly.field.js +24 -2
  12. package/esm2015/lib/components/formly.form.js +2 -2
  13. package/esm2015/lib/extensions/field-expression/field-expression.js +35 -16
  14. package/esm2015/lib/extensions/field-form/field-form.js +19 -17
  15. package/esm2015/lib/utils.js +3 -1
  16. package/esm5/json-schema/formly-json-schema.service.js +16 -14
  17. package/esm5/lib/components/formly.attributes.js +8 -3
  18. package/esm5/lib/components/formly.field.js +24 -2
  19. package/esm5/lib/components/formly.form.js +2 -2
  20. package/esm5/lib/extensions/field-expression/field-expression.js +35 -16
  21. package/esm5/lib/extensions/field-form/field-form.js +19 -17
  22. package/esm5/lib/utils.js +3 -1
  23. package/fesm2015/ngx-formly-core-json-schema.js +15 -13
  24. package/fesm2015/ngx-formly-core-json-schema.js.map +1 -1
  25. package/fesm2015/ngx-formly-core.js +79 -35
  26. package/fesm2015/ngx-formly-core.js.map +1 -1
  27. package/fesm5/ngx-formly-core-json-schema.js +15 -13
  28. package/fesm5/ngx-formly-core-json-schema.js.map +1 -1
  29. package/fesm5/ngx-formly-core.js +79 -35
  30. package/fesm5/ngx-formly-core.js.map +1 -1
  31. package/lib/components/formly.field.d.ts +1 -0
  32. package/ngx-formly-core.metadata.json +1 -1
  33. package/package.json +1 -1
@@ -274,11 +274,11 @@ var FormlyJsonschema = /** @class */ (function () {
274
274
  if (Array.isArray(schema.required) && schema.required.indexOf(property) !== -1) {
275
275
  return true;
276
276
  }
277
- return propDeps_1[property] && propDeps_1[property].some((/**
277
+ return propDeps_1[property] && (m && propDeps_1[property].some((/**
278
278
  * @param {?} k
279
279
  * @return {?}
280
280
  */
281
- function (k) { return !isEmpty(m[k]); }));
281
+ function (k) { return !isEmpty(m[k]); })));
282
282
  }) });
283
283
  }
284
284
  if (schemaDeps_1[property]) {
@@ -384,18 +384,20 @@ var FormlyJsonschema = /** @class */ (function () {
384
384
  * @return {?}
385
385
  */
386
386
  function () {
387
- if (!Array.isArray(schema.items)) {
387
+ if (schema.items && !Array.isArray(schema.items)) {
388
388
  // When items is a single schema, the additionalItems keyword is meaningless, and it should not be used.
389
389
  return _this_2._toFieldConfig((/** @type {?} */ (schema.items)), options);
390
390
  }
391
391
  /** @type {?} */
392
392
  var length = this.fieldGroup ? this.fieldGroup.length : 0;
393
- /** @type {?} */
394
- var itemSchema = schema.items[length]
395
- ? schema.items[length]
396
- : schema.additionalItems;
397
- return itemSchema
398
- ? _this_2._toFieldConfig((/** @type {?} */ (itemSchema)), options)
393
+ if (schema.items && schema.items[length]) {
394
+ /** @type {?} */
395
+ var f = _this_2._toFieldConfig((/** @type {?} */ (schema.items[length])), tslib_1.__assign({}, options));
396
+ f.templateOptions.removable = false;
397
+ return f;
398
+ }
399
+ return schema.additionalItems
400
+ ? _this_2._toFieldConfig((/** @type {?} */ (schema.additionalItems)), options)
399
401
  : {};
400
402
  }),
401
403
  enumerable: true,
@@ -445,10 +447,10 @@ var FormlyJsonschema = /** @class */ (function () {
445
447
  * @return {?}
446
448
  */
447
449
  function (schema, options) {
448
- if (schema.$ref) {
450
+ if (schema && schema.$ref) {
449
451
  schema = this.resolveDefinition(schema, options);
450
452
  }
451
- if (schema.allOf) {
453
+ if (schema && schema.allOf) {
452
454
  schema = this.resolveAllOf(schema, options);
453
455
  }
454
456
  return schema;
@@ -730,8 +732,8 @@ var FormlyJsonschema = /** @class */ (function () {
730
732
  */
731
733
  function (schema) {
732
734
  /** @type {?} */
733
- var type = (/** @type {?} */ (schema.type));
734
- if (!type && schema.properties) {
735
+ var type = schema ? (/** @type {?} */ (schema.type)) : null;
736
+ if (!type && schema && schema.properties) {
735
737
  return 'object';
736
738
  }
737
739
  if (Array.isArray(type)) {
@@ -871,4 +873,4 @@ var FormlyJsonschema = /** @class */ (function () {
871
873
  return FormlyJsonschema;
872
874
  }());
873
875
  export { FormlyJsonschema };
874
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlL2pzb24tc2NoZW1hLyIsInNvdXJjZXMiOlsiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGlCQUFpQixJQUFJLGdCQUFnQixFQUNyQyxxQkFBcUIsSUFBSSxvQkFBb0IsRUFDN0MsTUFBTSxJQUFJLEtBQUssR0FDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXJDLDZDQU9DOzs7Ozs7OztJQURDLHNDQUFvRjs7Ozs7OztBQUl0RixTQUFTLGFBQWEsQ0FBQyxDQUFTO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLENBQUM7S0FDVjs7UUFFRyxDQUFDLEdBQUcsQ0FBQzs7UUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQUMsQ0FBQyxFQUFFLENBQUM7S0FBRTtJQUVyRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7Ozs7O0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBTTtJQUNyQixPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ25ELENBQUM7Ozs7O0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBTTtJQUN0QixPQUFPLENBQUMsSUFBSSxJ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QUU7OzsyQkE3RGxDO0NBaWpCQyxBQXBmRCxJQW9mQztTQW5mWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYTcsIEpTT05TY2hlbWE3VHlwZU5hbWUgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIMm1cmV2ZXJzZURlZXBNZXJnZSBhcyByZXZlcnNlRGVlcE1lcmdlLFxuICDJtWdldEZpZWxkSW5pdGlhbFZhbHVlIGFzIGdldEZpZWxkSW5pdGlhbFZhbHVlLFxuICDJtWNsb25lIGFzIGNsb25lLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBhbGxvd3MgdG8gaW50ZXJjZXB0IHRoZSBtYXBwaW5nLCB0YWtpbmcgdGhlIGFscmVhZHkgbWFwcGVkXG4gICAqIGZvcm1seSBmaWVsZCBhbmQgdGhlIG9yaWdpbmFsIEpTT05TY2hlbWEgc291cmNlIGZyb20gd2hpY2ggaXRcbiAgICogd2FzIG1hcHBlZC5cbiAgICovXG4gIG1hcD86IChtYXBwZWRGaWVsZDogRm9ybWx5RmllbGRDb25maWcsIG1hcFNvdXJjZTogSlNPTlNjaGVtYTcpID0+IEZvcm1seUZpZWxkQ29uZmlnO1xufVxuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjc4NjUyODVcbmZ1bmN0aW9uIGRlY2ltYWxQbGFjZXMoYTogbnVtYmVyKSB7XG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBlID0gMSwgcCA9IDA7XG4gIHdoaWxlIChNYXRoLnJvdW5kKGEgKiBlKSAvIGUgIT09IGEpIHsgZSAqPSAxMDsgcCsrOyB9XG5cbiAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkodjogYW55KSB7XG4gIHJldHVybiB2ID09PSAnJyB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodjogYW55KSB7XG4gIHJldHVybiB2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpO1xufVxuXG5mdW5jdGlvbiBpc0NvbnN0KHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgcmV0dXJuIHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSB8fCAoc2NoZW1hLmVudW0gJiYgc2NoZW1hLmVudW0ubGVuZ3RoID09PSAxKTtcbn1cblxuZnVuY3Rpb24gdG90YWxNYXRjaGVkRmllbGRzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IG51bWJlciB7XG4gIGlmICghZmllbGQuZmllbGRHcm91cCkge1xuICAgIHJldHVybiBmaWVsZC5rZXkgJiYgZ2V0RmllbGRJbml0aWFsVmFsdWUoZmllbGQpICE9PSB1bmRlZmluZWQgPyAxIDogMDtcbiAgfVxuXG4gIHJldHVybiBmaWVsZC5maWVsZEdyb3VwLnJlZHVjZSgocywgZikgPT4gdG90YWxNYXRjaGVkRmllbGRzKGYpICsgcywgMCk7XG59XG5cbmludGVyZmFjZSBJT3B0aW9ucyBleHRlbmRzIEZvcm1seUpzb25zY2hlbWFPcHRpb25zIHtcbiAgc2NoZW1hOiBKU09OU2NoZW1hNztcbiAgcmVzZXRPbkhpZGU/OiBib29sZWFuO1xuICBzaGFyZUZvcm1Db250cm9sPzogYm9vbGVhbjtcbiAgaWdub3JlRGVmYXVsdD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAga2V5PzogRm9ybWx5RmllbGRDb25maWdbJ2tleSddO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZvcm1seUpzb25zY2hlbWEge1xuICB0b0ZpZWxkQ29uZmlnKHNjaGVtYTogSlNPTlNjaGVtYTcsIG9wdGlvbnM/OiBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fdG9GaWVsZENvbmZpZyhzY2hlbWEsIHsgc2NoZW1hLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSk7XG4gIH1cblxuICBwcml2YXRlIF90b0ZpZWxkQ29uZmlnKHNjaGVtYTogSlNPTlNjaGVtYTcsIHsga2V5LCAuLi5vcHRpb25zIH06IElPcHRpb25zKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZVNjaGVtYShzY2hlbWEsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgIHR5cGU6IHRoaXMuZ3Vlc3NUeXBlKHNjaGVtYSksXG4gICAgICBkZWZhdWx0VmFsdWU6IHNjaGVtYS5kZWZhdWx0LFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBzY2hlbWEudGl0bGUsXG4gICAgICAgIHJlYWRvbmx5OiBzY2hlbWEucmVhZE9ubHksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzY2hlbWEuZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuaWdub3JlRGVmYXVsdCAmJiAoc2NoZW1hLnJlYWRPbmx5IHx8IG9wdGlvbnMucmVhZE9ubHkpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgcmVhZE9ubHk6IHRydWUgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yZXNldE9uSGlkZSkge1xuICAgICAgZmllbGRbJ3Jlc2V0T25IaWRlJ10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNoYXJlRm9ybUNvbnRyb2wgPT09IGZhbHNlKSB7XG4gICAgICBmaWVsZFsnc2hhcmVGb3JtQ29udHJvbCddID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlRGVmYXVsdCkge1xuICAgICAgZGVsZXRlIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bGwnOiB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbnVsbCcsICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnaW50ZWdlcic6IHtcbiAgICAgICAgZmllbGQucGFyc2VycyA9IFt2ID0+IGlzRW1wdHkodikgPyBudWxsIDogTnVtYmVyKHYpXTtcbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWluaW11bScpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm1pbiA9IHNjaGVtYS5taW5pbXVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4aW11bScpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm1heCA9IHNjaGVtYS5tYXhpbXVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZXhjbHVzaXZlTWluaW11bScpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLmV4Y2x1c2l2ZU1pbmltdW0gPSBzY2hlbWEuZXhjbHVzaXZlTWluaW11bTtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ2V4Y2x1c2l2ZU1pbmltdW0nLCAoeyB2YWx1ZSB9KSA9PiBpc0VtcHR5KHZhbHVlKSB8fCAodmFsdWUgPiBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnZXhjbHVzaXZlTWF4aW11bScpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLmV4Y2x1c2l2ZU1heGltdW0gPSBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bTtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ2V4Y2x1c2l2ZU1heGltdW0nLCAoeyB2YWx1ZSB9KSA9PiBpc0VtcHR5KHZhbHVlKSB8fCAodmFsdWUgPCBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbXVsdGlwbGVPZicpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLnN0ZXAgPSBzY2hlbWEubXVsdGlwbGVPZjtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ211bHRpcGxlT2YnLCAoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCB2YWx1ZSA9PT0gMCB8fCBzY2hlbWEubXVsdGlwbGVPZiA8PSAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYWp2LXZhbGlkYXRvci9hanYvaXNzdWVzLzY1MiNpc3N1ZS0yODM2MTA4NTlcbiAgICAgICAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGVjaW1hbFBsYWNlcyhzY2hlbWEubXVsdGlwbGVPZikpO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBtdWx0aXBsaWVyKSAlIE1hdGgucm91bmQoc2NoZW1hLm11bHRpcGxlT2YgKiBtdWx0aXBsaWVyKSA9PT0gMDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3N0cmluZyc6IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hVHlwZSA9IHNjaGVtYS50eXBlIGFzIEpTT05TY2hlbWE3VHlwZU5hbWU7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYVR5cGUpICYmIChzY2hlbWFUeXBlLmluZGV4T2YoJ251bGwnKSAhPT0gLTEpKSB7XG4gICAgICAgICAgZmllbGQucGFyc2VycyA9IFt2ID0+IGlzRW1wdHkodikgPyBudWxsIDogdl07XG4gICAgICAgIH1cblxuICAgICAgICBbJ21pbkxlbmd0aCcsICdtYXhMZW5ndGgnLCAncGF0dGVybiddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zW3Byb3BdID0gc2NoZW1hW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgICBmaWVsZC5maWVsZEdyb3VwID0gW107XG5cbiAgICAgICAgY29uc3QgW3Byb3BEZXBzLCBzY2hlbWFEZXBzXSA9IHRoaXMucmVzb2x2ZURlcGVuZGVuY2llcyhzY2hlbWEpO1xuICAgICAgICBPYmplY3Qua2V5cyhzY2hlbWEucHJvcGVydGllcyB8fCB7fSkuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgY29uc3QgZiA9IHRoaXMuX3RvRmllbGRDb25maWcoPEpTT05TY2hlbWE3PiBzY2hlbWEucHJvcGVydGllc1twcm9wZXJ0eV0sIHsgLi4ub3B0aW9ucywga2V5OiBwcm9wZXJ0eSB9KTtcbiAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLnB1c2goZik7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSAmJiBzY2hlbWEucmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eSkgIT09IC0xKVxuICAgICAgICAgICAgfHwgcHJvcERlcHNbcHJvcGVydHldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmLmV4cHJlc3Npb25Qcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAuLi4oZi5leHByZXNzaW9uUHJvcGVydGllcyB8fCB7fSksXG4gICAgICAgICAgICAgICd0ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQnOiAobSwgcywgZikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBmLnBhcmVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGYuZmllbGRHcm91cCAmJiBmLmtleSAhPSBudWxsID8gcGFyZW50Lm1vZGVsIDogZi5tb2RlbDtcbiAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50LmtleSA9PSBudWxsICYmIHBhcmVudC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSBwYXJlbnQgJiYgcGFyZW50LnRlbXBsYXRlT3B0aW9ucyA/IHBhcmVudC50ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIW1vZGVsICYmICFyZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5yZXF1aXJlZCkgJiYgc2NoZW1hLnJlcXVpcmVkLmluZGV4T2YocHJvcGVydHkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BEZXBzW3Byb3BlcnR5XSAmJiBwcm9wRGVwc1twcm9wZXJ0eV0uc29tZShrID0+ICFpc0VtcHR5KG1ba10pKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNjaGVtYURlcHNbcHJvcGVydHldKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb25zdFZhbHVlID0gKHM6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBzLmhhc093blByb3BlcnR5KCdjb25zdCcpID8gcy5jb25zdCA6IHMuZW51bVswXTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG9uZU9mU2NoZW1hID0gc2NoZW1hRGVwc1twcm9wZXJ0eV0ub25lT2Y7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9uZU9mU2NoZW1hXG4gICAgICAgICAgICAgICYmIG9uZU9mU2NoZW1hLmV2ZXJ5KG8gPT4gby5wcm9wZXJ0aWVzICYmIG8ucHJvcGVydGllc1twcm9wZXJ0eV0gJiYgaXNDb25zdChvLnByb3BlcnRpZXNbcHJvcGVydHldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBvbmVPZlNjaGVtYS5mb3JFYWNoKG9uZU9mU2NoZW1hSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBbcHJvcGVydHldOiBjb25zdFNjaGVtYSwgLi4ucHJvcGVydGllcyB9ID0gb25lT2ZTY2hlbWFJdGVtLnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcoeyAuLi5vbmVPZlNjaGVtYUl0ZW0sIHByb3BlcnRpZXMgfSwgeyAuLi5vcHRpb25zLCByZXNldE9uSGlkZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiBtID0+ICFtIHx8IGdldENvbnN0VmFsdWUoY29uc3RTY2hlbWEpICE9PSBtW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcoc2NoZW1hRGVwc1twcm9wZXJ0eV0sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiBtID0+ICFtIHx8IGlzRW1wdHkobVtwcm9wZXJ0eV0pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS5vbmVPZikge1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh0aGlzLnJlc29sdmVNdWx0aVNjaGVtYShcbiAgICAgICAgICAgICdvbmVPZicsXG4gICAgICAgICAgICA8SlNPTlNjaGVtYTdbXT4gc2NoZW1hLm9uZU9mLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBzaGFyZUZvcm1Db250cm9sOiBmYWxzZSB9LFxuICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5hbnlPZikge1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh0aGlzLnJlc29sdmVNdWx0aVNjaGVtYShcbiAgICAgICAgICAgICdhbnlPZicsXG4gICAgICAgICAgICA8SlNPTlNjaGVtYTdbXT4gc2NoZW1hLmFueU9mLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5JdGVtcycpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm1pbkl0ZW1zID0gc2NoZW1hLm1pbkl0ZW1zO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbWluSXRlbXMnLCAoeyB2YWx1ZSB9KSA9PiBpc0VtcHR5KHZhbHVlKSB8fCAodmFsdWUubGVuZ3RoID49IHNjaGVtYS5taW5JdGVtcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heEl0ZW1zJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWF4SXRlbXMgPSBzY2hlbWEubWF4SXRlbXM7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdtYXhJdGVtcycsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZS5sZW5ndGggPD0gc2NoZW1hLm1heEl0ZW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgndW5pcXVlSXRlbXMnKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy51bmlxdWVJdGVtcyA9IHNjaGVtYS51bmlxdWVJdGVtcztcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ3VuaXF1ZUl0ZW1zJywgKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkodmFsdWUpIHx8ICFzY2hlbWEudW5pcXVlSXRlbXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUl0ZW1zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgbmV3IFNldCh2YWx1ZS5tYXAoKHY6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkodikpKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB1bmlxdWVJdGVtcy5sZW5ndGggPT09IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc29sdmUgaXRlbXMgc2NoZW1hIG5lZWRlZCBmb3IgaXNFbnVtIGNoZWNrXG4gICAgICAgIGlmIChzY2hlbWEuaXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IHRoaXMucmVzb2x2ZVNjaGVtYSg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgaXNFbnVtIGNoZWNrIG9uY2UgYWRkaW5nIGFuIG9wdGlvbiB0byBza2lwIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXRoaXMuaXNFbnVtKHNjaGVtYSkpIHtcbiAgICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnZmllbGRBcnJheScsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gaXRlbXMgaXMgYSBzaW5nbGUgc2NoZW1hLCB0aGUgYWRkaXRpb25hbEl0ZW1zIGtleXdvcmQgaXMgbWVhbmluZ2xlc3MsIGFuZCBpdCBzaG91bGQgbm90IGJlIHVzZWQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90b0ZpZWxkQ29uZmlnKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuZmllbGRHcm91cCA/IHRoaXMuZmllbGRHcm91cC5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICBjb25zdCBpdGVtU2NoZW1hID0gc2NoZW1hLml0ZW1zW2xlbmd0aF1cbiAgICAgICAgICAgICAgICA/IHNjaGVtYS5pdGVtc1tsZW5ndGhdXG4gICAgICAgICAgICAgICAgOiBzY2hlbWEuYWRkaXRpb25hbEl0ZW1zO1xuXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtU2NoZW1hXG4gICAgICAgICAgICAgICAgPyBfdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IGl0ZW1TY2hlbWEsIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSkge1xuICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLmNvbnN0ID0gc2NoZW1hLmNvbnN0O1xuICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdjb25zdCcsICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBzY2hlbWEuY29uc3QpO1xuICAgICAgaWYgKCFmaWVsZC50eXBlKSB7XG4gICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5jb25zdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0VudW0oc2NoZW1hKSkge1xuICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm11bHRpcGxlID0gZmllbGQudHlwZSA9PT0gJ2FycmF5JztcbiAgICAgIGZpZWxkLnR5cGUgPSAnZW51bSc7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyA9IHRoaXMudG9FbnVtT3B0aW9ucyhzY2hlbWEpO1xuICAgIH1cblxuICAgIC8vIG1hcCBpbiBwb3NzaWJsZSBmb3JtbHlDb25maWcgb3B0aW9ucyBmcm9tIHRoZSB3aWRnZXQgcHJvcGVydHlcbiAgICBpZiAoc2NoZW1hWyd3aWRnZXQnXSAmJiBzY2hlbWFbJ3dpZGdldCddLmZvcm1seUNvbmZpZykge1xuICAgICAgZmllbGQgPSB0aGlzLm1lcmdlRmllbGRzKGZpZWxkLCBzY2hlbWFbJ3dpZGdldCddLmZvcm1seUNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBtYXAgZnVuY3Rpb24gcGFzc2VkIGluLCB1c2UgaXQgdG8gYWxsb3cgdGhlIHVzZXIgdG9cbiAgICAvLyBmdXJ0aGVyIGN1c3RvbWl6ZSBob3cgZmllbGRzIGFyZSBiZWluZyBtYXBwZWRcbiAgICByZXR1cm4gb3B0aW9ucy5tYXAgPyBvcHRpb25zLm1hcChmaWVsZCwgc2NoZW1hKSA6IGZpZWxkO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2NoZW1hKHNjaGVtYTogSlNPTlNjaGVtYTcsIG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICBzY2hlbWEgPSB0aGlzLnJlc29sdmVEZWZpbml0aW9uKHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5hbGxPZikge1xuICAgICAgc2NoZW1hID0gdGhpcy5yZXNvbHZlQWxsT2Yoc2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQWxsT2YoeyBhbGxPZiwgLi4uYmFzZVNjaGVtYSB9OiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpIHtcbiAgICBpZiAoIWFsbE9mLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoYGFsbE9mIGFycmF5IGNhbiBub3QgYmUgZW1wdHkgJHthbGxPZn0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbE9mLnJlZHVjZSgoYmFzZTogSlNPTlNjaGVtYTcsIHNjaGVtYTogSlNPTlNjaGVtYTcpID0+IHtcbiAgICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZVNjaGVtYShzY2hlbWEsIG9wdGlvbnMpO1xuICAgICAgaWYgKGJhc2UucmVxdWlyZWQgJiYgc2NoZW1hLnJlcXVpcmVkKSB7XG4gICAgICAgIGJhc2UucmVxdWlyZWQgPSBbLi4uYmFzZS5yZXF1aXJlZCwgLi4uc2NoZW1hLnJlcXVpcmVkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjaGVtYS51bmlxdWVJdGVtcykge1xuICAgICAgICBiYXNlLnVuaXF1ZUl0ZW1zID0gc2NoZW1hLnVuaXF1ZUl0ZW1zO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNvbHZlIHRvIG1pbiB2YWx1ZVxuICAgICAgWydtYXhMZW5ndGgnLCAnbWF4aW11bScsICdleGNsdXNpdmVNYXhpbXVtJywgJ21heEl0ZW1zJywgJ21heFByb3BlcnRpZXMnXVxuICAgICAgICAuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoIWlzRW1wdHkoYmFzZVtwcm9wXSkgJiYgIWlzRW1wdHkoc2NoZW1hW3Byb3BdKSkge1xuICAgICAgICAgICAgYmFzZVtwcm9wXSA9IGJhc2VbcHJvcF0gPCBzY2hlbWFbcHJvcF0gPyBiYXNlW3Byb3BdIDogc2NoZW1hW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHJlc29sdmUgdG8gbWF4IHZhbHVlXG4gICAgICBbJ21pbkxlbmd0aCcsICdtaW5pbXVtJywgJ2V4Y2x1c2l2ZU1pbmltdW0nLCAnbWluSXRlbXMnLCAnbWluUHJvcGVydGllcyddXG4gICAgICAgIC5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmICghaXNFbXB0eShiYXNlW3Byb3BdKSAmJiAhaXNFbXB0eShzY2hlbWFbcHJvcF0pKSB7XG4gICAgICAgICAgICBiYXNlW3Byb3BdID0gYmFzZVtwcm9wXSA+IHNjaGVtYVtwcm9wXSA/IGJhc2VbcHJvcF0gOiBzY2hlbWFbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJldmVyc2VEZWVwTWVyZ2UoYmFzZSwgc2NoZW1hKTtcbiAgICB9LCBiYXNlU2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU11bHRpU2NoZW1hKFxuICAgIG1vZGU6ICdvbmVPZicgfCAnYW55T2YnLFxuICAgIHNjaGVtYXM6IEpTT05TY2hlbWE3W10sXG4gICAgb3B0aW9uczogSU9wdGlvbnMsXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ211bHRpc2NoZW1hJyxcbiAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdlbnVtJyxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgbXVsdGlwbGU6IG1vZGUgPT09ICdhbnlPZicsXG4gICAgICAgICAgICBvcHRpb25zOiBzY2hlbWFzXG4gICAgICAgICAgICAgIC5tYXAoKHMsIGkpID0+ICh7IGxhYmVsOiBzLnRpdGxlLCB2YWx1ZTogaSwgZGlzYWJsZWQ6IHMucmVhZE9ubHkgfSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgIG9uSW5pdDogZiA9PiBmLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gKGYub3B0aW9ucyBhcyBhbnkpLl9jaGVja0ZpZWxkKGYucGFyZW50KSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZEdyb3VwOiBzY2hlbWFzLm1hcCgocywgaSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcocywgeyAuLi5vcHRpb25zLCByZXNldE9uSGlkZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiAobSwgZnMsIGYpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGYucGFyZW50LnBhcmVudC5maWVsZEdyb3VwWzBdLmZvcm1Db250cm9sO1xuICAgICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICAgICAgICAgICAgICAubWFwKChmLCBpKSA9PiBbZiwgaV0gYXMgW0Zvcm1seUZpZWxkQ29uZmlnLCBudW1iZXJdKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoW2YsIGldKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRmllbGRWYWxpZChmLCBzY2hlbWFzW2ldLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuc29ydCgoW2YxXSwgW2YyXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkRmllbGRzMSA9IHRvdGFsTWF0Y2hlZEZpZWxkcyhmMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRGaWVsZHMyID0gdG90YWxNYXRjaGVkRmllbGRzKGYyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRGaWVsZHMxID09PSBtYXRjaGVkRmllbGRzMikge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChmMS50ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQgPT09IGYyLnRlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYxLnRlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkRmllbGRzMiA+IG1hdGNoZWRGaWVsZHMxID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKFssIGldKSA9PiBpKVxuICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdhbnlPZicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluZWRWYWx1ZSA9IHZhbHVlLmZpbHRlcihpID0+IHRvdGFsTWF0Y2hlZEZpZWxkcyhmLnBhcmVudC5maWVsZEdyb3VwW2ldKSk7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmluZWRWYWx1ZS5sZW5ndGggPiAwID8gZGVmaW5lZFZhbHVlIDogW3ZhbHVlWzBdIHx8IDBdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogWzBdO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobW9kZSA9PT0gJ2FueU9mJyA/IHZhbHVlIDogdmFsdWVbMF0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IGNvbnRyb2wudmFsdWUuaW5kZXhPZihpKSA9PT0gLTFcbiAgICAgICAgICAgICAgICA6IGNvbnRyb2wudmFsdWUgIT09IGk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURlZmluaXRpb24oc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpOiBKU09OU2NoZW1hNyB7XG4gICAgY29uc3QgW3VyaSwgcG9pbnRlcl0gPSBzY2hlbWEuJHJlZi5zcGxpdCgnIy8nKTtcbiAgICBpZiAodXJpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgUmVtb3RlIHNjaGVtYXMgZm9yICR7c2NoZW1hLiRyZWZ9IG5vdCBzdXBwb3J0ZWQgeWV0LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSAhcG9pbnRlciA/IG51bGwgOiBwb2ludGVyLnNwbGl0KCcvJykucmVkdWNlKFxuICAgICAgKGRlZiwgcGF0aCkgPT4gZGVmICYmIGRlZi5oYXNPd25Qcm9wZXJ0eShwYXRoKSA/IGRlZltwYXRoXSA6IG51bGwsXG4gICAgICBvcHRpb25zLnNjaGVtYSxcbiAgICApO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkZWZpbml0aW9uIGZvciAke3NjaGVtYS4kcmVmfS5gKTtcbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvbi4kcmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgIC4uLlsndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAnZGVmYXVsdCcsICd3aWRnZXQnXS5yZWR1Y2UoKGFubm90YXRpb24sIHApID0+IHtcbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eShwKSkge1xuICAgICAgICAgIGFubm90YXRpb25bcF0gPSBzY2hlbWFbcF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcbiAgICAgIH0sIHt9KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRGVwZW5kZW5jaWVzKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICBjb25zdCBkZXBzID0ge307XG4gICAgY29uc3Qgc2NoZW1hRGVwcyA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyB8fCB7fSkuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBzY2hlbWEuZGVwZW5kZW5jaWVzW3Byb3BdIGFzIEpTT05TY2hlbWE3O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgLy8gUHJvcGVydHkgZGVwZW5kZW5jaWVzXG4gICAgICAgIGRlcGVuZGVuY3kuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICAgIGlmICghZGVwc1tkZXBdKSB7XG4gICAgICAgICAgICBkZXBzW2RlcF0gPSBbcHJvcF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlcHNbZGVwXS5wdXNoKHByb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzY2hlbWEgZGVwZW5kZW5jaWVzXG4gICAgICAgIHNjaGVtYURlcHNbcHJvcF0gPSBkZXBlbmRlbmN5O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtkZXBzLCBzY2hlbWFEZXBzXTtcbiAgfVxuXG4gIHByaXZhdGUgZ3Vlc3NUeXBlKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICBjb25zdCB0eXBlID0gc2NoZW1hLnR5cGUgYXMgSlNPTlNjaGVtYTdUeXBlTmFtZTtcbiAgICBpZiAoIXR5cGUgJiYgc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgaWYgKHR5cGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0eXBlWzBdO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZS5sZW5ndGggPT09IDIgJiYgdHlwZS5pbmRleE9mKCdudWxsJykgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB0eXBlW3R5cGVbMF0gPT09ICdudWxsJyA/IDEgOiAwXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVmFsaWRhdG9yKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgbmFtZTogc3RyaW5nLCB2YWxpZGF0b3I6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW4pIHtcbiAgICBmaWVsZC52YWxpZGF0b3JzID0gZmllbGQudmFsaWRhdG9ycyB8fCB7fTtcbiAgICBmaWVsZC52YWxpZGF0b3JzW25hbWVdID0gdmFsaWRhdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VudW0oc2NoZW1hOiBKU09OU2NoZW1hNykge1xuICAgIHJldHVybiBzY2hlbWEuZW51bVxuICAgICAgfHwgKHNjaGVtYS5hbnlPZiAmJiBzY2hlbWEuYW55T2YuZXZlcnkoaXNDb25zdCkpXG4gICAgICB8fCAoc2NoZW1hLm9uZU9mICYmIHNjaGVtYS5vbmVPZi5ldmVyeShpc0NvbnN0KSlcbiAgICAgIHx8IHNjaGVtYS51bmlxdWVJdGVtcyAmJiBzY2hlbWEuaXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSAmJiB0aGlzLmlzRW51bSg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHRvRW51bU9wdGlvbnMoc2NoZW1hOiBKU09OU2NoZW1hNykge1xuICAgIGlmIChzY2hlbWEuZW51bSkge1xuICAgICAgcmV0dXJuIHNjaGVtYS5lbnVtLm1hcCh2YWx1ZSA9PiAoeyB2YWx1ZSwgbGFiZWw6IHZhbHVlIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b0VudW0gPSAoczogSlNPTlNjaGVtYTcpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcy5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSA/IHMuY29uc3QgOiBzLmVudW1bMF07XG4gICAgICBjb25zdCBvcHRpb246IGFueSA9IHsgdmFsdWU6IHZhbHVlLCBsYWJlbDogcy50aXRsZSB8fCB2YWx1ZSB9O1xuICAgICAgaWYgKHMucmVhZE9ubHkpIHtcbiAgICAgICAgb3B0aW9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9O1xuXG4gICAgaWYgKHNjaGVtYS5hbnlPZikge1xuICAgICAgcmV0dXJuIHNjaGVtYS5hbnlPZi5tYXAodG9FbnVtKTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLm9uZU9mKSB7XG4gICAgICByZXR1cm4gc2NoZW1hLm9uZU9mLm1hcCh0b0VudW0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvRW51bU9wdGlvbnMoPEpTT05TY2hlbWE3PiBzY2hlbWEuaXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpZWxkVmFsaWQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zOiBJT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZm9ybSB9ID0gKGZpZWxkLm9wdGlvbnMgYXMgYW55KS5fYnVpbGRGaWVsZCh7XG4gICAgICBmb3JtOiBuZXcgRm9ybUdyb3VwKHt9KSxcbiAgICAgIGZpZWxkR3JvdXA6IFt0aGlzLl90b0ZpZWxkQ29uZmlnKHNjaGVtYSwgeyAuLi5vcHRpb25zLCByZXNldE9uSGlkZTogdHJ1ZSwgaWdub3JlRGVmYXVsdDogdHJ1ZSwgbWFwOiBudWxsIH0pXSxcbiAgICAgIG1vZGVsOiBmaWVsZC5tb2RlbCA/IGNsb25lKGZpZWxkLm1vZGVsKSA6IChmaWVsZC5maWVsZEFycmF5ID8gW10gOiB7fSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybS52YWxpZDtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VGaWVsZHMoZjE6IEZvcm1seUZpZWxkQ29uZmlnLCBmMjogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBmb3IgKGxldCBwcm9wIGluIGYyKSB7XG4gICAgICBpZiAoaXNPYmplY3QoZjFbcHJvcF0pICYmIGlzT2JqZWN0KGYyW3Byb3BdKSkge1xuICAgICAgICBmMVtwcm9wXSA9IHRoaXMubWVyZ2VGaWVsZHMoZjFbcHJvcF0sIGYyW3Byb3BdKTtcbiAgICAgIH0gZWxzZSBpZiAoZjJbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICBmMVtwcm9wXSA9IGYyW3Byb3BdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmMTtcbiAgfVxufVxuIl19
876
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlL2pzb24tc2NoZW1hLyIsInNvdXJjZXMiOlsiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGlCQUFpQixJQUFJLGdCQUFnQixFQUNyQyxxQkFBcUIsSUFBSSxvQkFBb0IsRUFDN0MsTUFBTSxJQUFJLEtBQUssR0FDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXJDLDZDQU9DOzs7Ozs7OztJQURDLHNDQUFvRjs7Ozs7OztBQUl0RixTQUFTLGFBQWEsQ0FBQyxDQUFTO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLENBQUM7S0FDVjs7UUFFRyxDQUFDLEdBQUcsQ0FBQzs7UUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQUMsQ0FBQyxFQUFFLENBQUM7S0FBRTtJQUVyRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7Ozs7O0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBTTtJQUNyQixPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ25ELENBQUM7Ozs7O0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBTTtJQUN0QixPQUFPLENBQUMsSUFBSSxJ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LENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDakQ7aUJBQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUMzQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JCO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O2dCQXRmRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7MkJBN0RsQztDQW9qQkMsQUF2ZkQsSUF1ZkM7U0F0ZlksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IEpTT05TY2hlbWE3LCBKU09OU2NoZW1hN1R5cGVOYW1lIH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICDJtXJldmVyc2VEZWVwTWVyZ2UgYXMgcmV2ZXJzZURlZXBNZXJnZSxcbiAgybVnZXRGaWVsZEluaXRpYWxWYWx1ZSBhcyBnZXRGaWVsZEluaXRpYWxWYWx1ZSxcbiAgybVjbG9uZSBhcyBjbG9uZSxcbn0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5SnNvbnNjaGVtYU9wdGlvbnMge1xuICAvKipcbiAgICogYWxsb3dzIHRvIGludGVyY2VwdCB0aGUgbWFwcGluZywgdGFraW5nIHRoZSBhbHJlYWR5IG1hcHBlZFxuICAgKiBmb3JtbHkgZmllbGQgYW5kIHRoZSBvcmlnaW5hbCBKU09OU2NoZW1hIHNvdXJjZSBmcm9tIHdoaWNoIGl0XG4gICAqIHdhcyBtYXBwZWQuXG4gICAqL1xuICBtYXA/OiAobWFwcGVkRmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBtYXBTb3VyY2U6IEpTT05TY2hlbWE3KSA9PiBGb3JtbHlGaWVsZENvbmZpZztcbn1cblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI3ODY1Mjg1XG5mdW5jdGlvbiBkZWNpbWFsUGxhY2VzKGE6IG51bWJlcikge1xuICBpZiAoIWlzRmluaXRlKGEpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBsZXQgZSA9IDEsIHAgPSAwO1xuICB3aGlsZSAoTWF0aC5yb3VuZChhICogZSkgLyBlICE9PSBhKSB7IGUgKj0gMTA7IHArKzsgfVxuXG4gIHJldHVybiBwO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5KHY6IGFueSkge1xuICByZXR1cm4gdiA9PT0gJycgfHwgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHY6IGFueSkge1xuICByZXR1cm4gdiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KTtcbn1cblxuZnVuY3Rpb24gaXNDb25zdChzY2hlbWE6IEpTT05TY2hlbWE3KSB7XG4gIHJldHVybiBzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykgfHwgKHNjaGVtYS5lbnVtICYmIHNjaGVtYS5lbnVtLmxlbmd0aCA9PT0gMSk7XG59XG5cbmZ1bmN0aW9uIHRvdGFsTWF0Y2hlZEZpZWxkcyhmaWVsZDogRm9ybWx5RmllbGRDb25maWcpOiBudW1iZXIge1xuICBpZiAoIWZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICByZXR1cm4gZmllbGQua2V5ICYmIGdldEZpZWxkSW5pdGlhbFZhbHVlKGZpZWxkKSAhPT0gdW5kZWZpbmVkID8gMSA6IDA7XG4gIH1cblxuICByZXR1cm4gZmllbGQuZmllbGRHcm91cC5yZWR1Y2UoKHMsIGYpID0+IHRvdGFsTWF0Y2hlZEZpZWxkcyhmKSArIHMsIDApO1xufVxuXG5pbnRlcmZhY2UgSU9wdGlvbnMgZXh0ZW5kcyBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyB7XG4gIHNjaGVtYTogSlNPTlNjaGVtYTc7XG4gIHJlc2V0T25IaWRlPzogYm9vbGVhbjtcbiAgc2hhcmVGb3JtQ29udHJvbD86IGJvb2xlYW47XG4gIGlnbm9yZURlZmF1bHQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGtleT86IEZvcm1seUZpZWxkQ29uZmlnWydrZXknXTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlKc29uc2NoZW1hIHtcbiAgdG9GaWVsZENvbmZpZyhzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zPzogRm9ybWx5SnNvbnNjaGVtYU9wdGlvbnMpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RvRmllbGRDb25maWcoc2NoZW1hLCB7IHNjaGVtYSwgLi4uKG9wdGlvbnMgfHwge30pIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9GaWVsZENvbmZpZyhzY2hlbWE6IEpTT05TY2hlbWE3LCB7IGtleSwgLi4ub3B0aW9ucyB9OiBJT3B0aW9ucyk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBzY2hlbWEgPSB0aGlzLnJlc29sdmVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKTtcblxuICAgIGxldCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICB0eXBlOiB0aGlzLmd1ZXNzVHlwZShzY2hlbWEpLFxuICAgICAgZGVmYXVsdFZhbHVlOiBzY2hlbWEuZGVmYXVsdCxcbiAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICBsYWJlbDogc2NoZW1hLnRpdGxlLFxuICAgICAgICByZWFkb25seTogc2NoZW1hLnJlYWRPbmx5LFxuICAgICAgICBkZXNjcmlwdGlvbjogc2NoZW1hLmRlc2NyaXB0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICBmaWVsZC5rZXkgPSBrZXk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmlnbm9yZURlZmF1bHQgJiYgKHNjaGVtYS5yZWFkT25seSB8fCBvcHRpb25zLnJlYWRPbmx5KSkge1xuICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIHJlYWRPbmx5OiB0cnVlIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucmVzZXRPbkhpZGUpIHtcbiAgICAgIGZpZWxkWydyZXNldE9uSGlkZSddID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaGFyZUZvcm1Db250cm9sID09PSBmYWxzZSkge1xuICAgICAgZmllbGRbJ3NoYXJlRm9ybUNvbnRyb2wnXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlnbm9yZURlZmF1bHQpIHtcbiAgICAgIGRlbGV0ZSBmaWVsZC5kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdudWxsJzoge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ251bGwnLCAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2ludGVnZXInOiB7XG4gICAgICAgIGZpZWxkLnBhcnNlcnMgPSBbdiA9PiBpc0VtcHR5KHYpID8gbnVsbCA6IE51bWJlcih2KV07XG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21pbmltdW0nKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5taW4gPSBzY2hlbWEubWluaW11bTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heGltdW0nKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5tYXggPSBzY2hlbWEubWF4aW11bTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2V4Y2x1c2l2ZU1pbmltdW0nKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5leGNsdXNpdmVNaW5pbXVtID0gc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW07XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdleGNsdXNpdmVNaW5pbXVtJywgKHsgdmFsdWUgfSkgPT4gaXNFbXB0eSh2YWx1ZSkgfHwgKHZhbHVlID4gc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2V4Y2x1c2l2ZU1heGltdW0nKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5leGNsdXNpdmVNYXhpbXVtID0gc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW07XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdleGNsdXNpdmVNYXhpbXVtJywgKHsgdmFsdWUgfSkgPT4gaXNFbXB0eSh2YWx1ZSkgfHwgKHZhbHVlIDwgc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ211bHRpcGxlT2YnKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5zdGVwID0gc2NoZW1hLm11bHRpcGxlT2Y7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdtdWx0aXBsZU9mJywgKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgdmFsdWUgPT09IDAgfHwgc2NoZW1hLm11bHRpcGxlT2YgPD0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy82NTIjaXNzdWUtMjgzNjEwODU5XG4gICAgICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIGRlY2ltYWxQbGFjZXMoc2NoZW1hLm11bHRpcGxlT2YpKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogbXVsdGlwbGllcikgJSBNYXRoLnJvdW5kKHNjaGVtYS5tdWx0aXBsZU9mICogbXVsdGlwbGllcikgPT09IDA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdzdHJpbmcnOiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBzY2hlbWEudHlwZSBhcyBKU09OU2NoZW1hN1R5cGVOYW1lO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWFUeXBlKSAmJiAoc2NoZW1hVHlwZS5pbmRleE9mKCdudWxsJykgIT09IC0xKSkge1xuICAgICAgICAgIGZpZWxkLnBhcnNlcnMgPSBbdiA9PiBpc0VtcHR5KHYpID8gbnVsbCA6IHZdO1xuICAgICAgICB9XG5cbiAgICAgICAgWydtaW5MZW5ndGgnLCAnbWF4TGVuZ3RoJywgJ3BhdHRlcm4nXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9uc1twcm9wXSA9IHNjaGVtYVtwcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgICAgZmllbGQuZmllbGRHcm91cCA9IFtdO1xuXG4gICAgICAgIGNvbnN0IFtwcm9wRGVwcywgc2NoZW1hRGVwc10gPSB0aGlzLnJlc29sdmVEZXBlbmRlbmNpZXMoc2NoZW1hKTtcbiAgICAgICAgT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMgfHwge30pLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICAgIGNvbnN0IGYgPSB0aGlzLl90b0ZpZWxkQ29uZmlnKDxKU09OU2NoZW1hNz4gc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldLCB7IC4uLm9wdGlvbnMsIGtleTogcHJvcGVydHkgfSk7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cC5wdXNoKGYpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KHNjaGVtYS5yZXF1aXJlZCkgJiYgc2NoZW1hLnJlcXVpcmVkLmluZGV4T2YocHJvcGVydHkpICE9PSAtMSlcbiAgICAgICAgICAgIHx8IHByb3BEZXBzW3Byb3BlcnR5XVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZi5leHByZXNzaW9uUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgLi4uKGYuZXhwcmVzc2lvblByb3BlcnRpZXMgfHwge30pLFxuICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkJzogKG0sIHMsIGYpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZi5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWwgPSBmLmZpZWxkR3JvdXAgJiYgZi5rZXkgIT0gbnVsbCA/IHBhcmVudC5tb2RlbCA6IGYubW9kZWw7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudC5rZXkgPT0gbnVsbCAmJiBwYXJlbnQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gcGFyZW50ICYmIHBhcmVudC50ZW1wbGF0ZU9wdGlvbnMgPyBwYXJlbnQudGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCFtb2RlbCAmJiAhcmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEucmVxdWlyZWQpICYmIHNjaGVtYS5yZXF1aXJlZC5pbmRleE9mKHByb3BlcnR5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wRGVwc1twcm9wZXJ0eV0gJiYgKG0gJiYgcHJvcERlcHNbcHJvcGVydHldLnNvbWUoayA9PiAhaXNFbXB0eShtW2tdKSkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2NoZW1hRGVwc1twcm9wZXJ0eV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGdldENvbnN0VmFsdWUgPSAoczogSlNPTlNjaGVtYTcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykgPyBzLmNvbnN0IDogcy5lbnVtWzBdO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3Qgb25lT2ZTY2hlbWEgPSBzY2hlbWFEZXBzW3Byb3BlcnR5XS5vbmVPZjtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb25lT2ZTY2hlbWFcbiAgICAgICAgICAgICAgJiYgb25lT2ZTY2hlbWEuZXZlcnkobyA9PiBvLnByb3BlcnRpZXMgJiYgby5wcm9wZXJ0aWVzW3Byb3BlcnR5XSAmJiBpc0NvbnN0KG8ucHJvcGVydGllc1twcm9wZXJ0eV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG9uZU9mU2NoZW1hLmZvckVhY2gob25lT2ZTY2hlbWFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IFtwcm9wZXJ0eV06IGNvbnN0U2NoZW1hLCAuLi5wcm9wZXJ0aWVzIH0gPSBvbmVPZlNjaGVtYUl0ZW0ucHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLnB1c2goe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5fdG9GaWVsZENvbmZpZyh7IC4uLm9uZU9mU2NoZW1hSXRlbSwgcHJvcGVydGllcyB9LCB7IC4uLm9wdGlvbnMsIHJlc2V0T25IaWRlOiB0cnVlIH0pLFxuICAgICAgICAgICAgICAgICAgaGlkZUV4cHJlc3Npb246IG0gPT4gIW0gfHwgZ2V0Q29uc3RWYWx1ZShjb25zdFNjaGVtYSkgIT09IG1bcHJvcGVydHldLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fdG9GaWVsZENvbmZpZyhzY2hlbWFEZXBzW3Byb3BlcnR5XSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgaGlkZUV4cHJlc3Npb246IG0gPT4gIW0gfHwgaXNFbXB0eShtW3Byb3BlcnR5XSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoc2NoZW1hLm9uZU9mKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cC5wdXNoKHRoaXMucmVzb2x2ZU11bHRpU2NoZW1hKFxuICAgICAgICAgICAgJ29uZU9mJyxcbiAgICAgICAgICAgIDxKU09OU2NoZW1hN1tdPiBzY2hlbWEub25lT2YsXG4gICAgICAgICAgICB7IC4uLm9wdGlvbnMsIHNoYXJlRm9ybUNvbnRyb2w6IGZhbHNlIH0sXG4gICAgICAgICAgKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmFueU9mKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRHcm91cC5wdXNoKHRoaXMucmVzb2x2ZU11bHRpU2NoZW1hKFxuICAgICAgICAgICAgJ2FueU9mJyxcbiAgICAgICAgICAgIDxKU09OU2NoZW1hN1tdPiBzY2hlbWEuYW55T2YsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21pbkl0ZW1zJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWluSXRlbXMgPSBzY2hlbWEubWluSXRlbXM7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdtaW5JdGVtcycsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZS5sZW5ndGggPj0gc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnbWF4SXRlbXMnKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5tYXhJdGVtcyA9IHNjaGVtYS5tYXhJdGVtcztcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ21heEl0ZW1zJywgKHsgdmFsdWUgfSkgPT4gaXNFbXB0eSh2YWx1ZSkgfHwgKHZhbHVlLmxlbmd0aCA8PSBzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCd1bmlxdWVJdGVtcycpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLnVuaXF1ZUl0ZW1zID0gc2NoZW1hLnVuaXF1ZUl0ZW1zO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAndW5pcXVlSXRlbXMnLCAoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eSh2YWx1ZSkgfHwgIXNjaGVtYS51bmlxdWVJdGVtcykge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdW5pcXVlSXRlbXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgICBuZXcgU2V0KHZhbHVlLm1hcCgodjogYW55KSA9PiBKU09OLnN0cmluZ2lmeSh2KSkpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZUl0ZW1zLmxlbmd0aCA9PT0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzb2x2ZSBpdGVtcyBzY2hlbWEgbmVlZGVkIGZvciBpc0VudW0gY2hlY2tcbiAgICAgICAgaWYgKHNjaGVtYS5pdGVtcyAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgc2NoZW1hLml0ZW1zID0gdGhpcy5yZXNvbHZlU2NoZW1hKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBpc0VudW0gY2hlY2sgb25jZSBhZGRpbmcgYW4gb3B0aW9uIHRvIHNraXAgZXh0ZW5zaW9uXG4gICAgICAgIGlmICghdGhpcy5pc0VudW0oc2NoZW1hKSkge1xuICAgICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdmaWVsZEFycmF5Jywge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmIChzY2hlbWEuaXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIC8vIFdoZW4gaXRlbXMgaXMgYSBzaW5nbGUgc2NoZW1hLCB0aGUgYWRkaXRpb25hbEl0ZW1zIGtleXdvcmQgaXMgbWVhbmluZ2xlc3MsIGFuZCBpdCBzaG91bGQgbm90IGJlIHVzZWQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90b0ZpZWxkQ29uZmlnKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuZmllbGRHcm91cCA/IHRoaXMuZmllbGRHcm91cC5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICBpZiAoc2NoZW1hLml0ZW1zICYmIHNjaGVtYS5pdGVtc1tsZW5ndGhdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZiA9IF90aGlzLl90b0ZpZWxkQ29uZmlnKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zW2xlbmd0aF0sIHsgLi4ub3B0aW9uc30pO1xuICAgICAgICAgICAgICAgIGYudGVtcGxhdGVPcHRpb25zLnJlbW92YWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gc2NoZW1hLmFkZGl0aW9uYWxJdGVtc1xuICAgICAgICAgICAgICAgID8gX3RoaXMuX3RvRmllbGRDb25maWcoPEpTT05TY2hlbWE3PiBzY2hlbWEuYWRkaXRpb25hbEl0ZW1zLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykpIHtcbiAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5jb25zdCA9IHNjaGVtYS5jb25zdDtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnY29uc3QnLCAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gc2NoZW1hLmNvbnN0KTtcbiAgICAgIGlmICghZmllbGQudHlwZSkge1xuICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSBzY2hlbWEuY29uc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFbnVtKHNjaGVtYSkpIHtcbiAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5tdWx0aXBsZSA9IGZpZWxkLnR5cGUgPT09ICdhcnJheSc7XG4gICAgICBmaWVsZC50eXBlID0gJ2VudW0nO1xuICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm9wdGlvbnMgPSB0aGlzLnRvRW51bU9wdGlvbnMoc2NoZW1hKTtcbiAgICB9XG5cbiAgICAvLyBtYXAgaW4gcG9zc2libGUgZm9ybWx5Q29uZmlnIG9wdGlvbnMgZnJvbSB0aGUgd2lkZ2V0IHByb3BlcnR5XG4gICAgaWYgKHNjaGVtYVsnd2lkZ2V0J10gJiYgc2NoZW1hWyd3aWRnZXQnXS5mb3JtbHlDb25maWcpIHtcbiAgICAgIGZpZWxkID0gdGhpcy5tZXJnZUZpZWxkcyhmaWVsZCwgc2NoZW1hWyd3aWRnZXQnXS5mb3JtbHlDb25maWcpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZXJlIGlzIGEgbWFwIGZ1bmN0aW9uIHBhc3NlZCBpbiwgdXNlIGl0IHRvIGFsbG93IHRoZSB1c2VyIHRvXG4gICAgLy8gZnVydGhlciBjdXN0b21pemUgaG93IGZpZWxkcyBhcmUgYmVpbmcgbWFwcGVkXG4gICAgcmV0dXJuIG9wdGlvbnMubWFwID8gb3B0aW9ucy5tYXAoZmllbGQsIHNjaGVtYSkgOiBmaWVsZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNjaGVtYShzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zOiBJT3B0aW9ucykge1xuICAgIGlmIChzY2hlbWEgJiYgc2NoZW1hLiRyZWYpIHtcbiAgICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZURlZmluaXRpb24oc2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hICYmIHNjaGVtYS5hbGxPZikge1xuICAgICAgc2NoZW1hID0gdGhpcy5yZXNvbHZlQWxsT2Yoc2NoZW1hLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQWxsT2YoeyBhbGxPZiwgLi4uYmFzZVNjaGVtYSB9OiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpIHtcbiAgICBpZiAoIWFsbE9mLmxlbmd0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoYGFsbE9mIGFycmF5IGNhbiBub3QgYmUgZW1wdHkgJHthbGxPZn0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbE9mLnJlZHVjZSgoYmFzZTogSlNPTlNjaGVtYTcsIHNjaGVtYTogSlNPTlNjaGVtYTcpID0+IHtcbiAgICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZVNjaGVtYShzY2hlbWEsIG9wdGlvbnMpO1xuICAgICAgaWYgKGJhc2UucmVxdWlyZWQgJiYgc2NoZW1hLnJlcXVpcmVkKSB7XG4gICAgICAgIGJhc2UucmVxdWlyZWQgPSBbLi4uYmFzZS5yZXF1aXJlZCwgLi4uc2NoZW1hLnJlcXVpcmVkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjaGVtYS51bmlxdWVJdGVtcykge1xuICAgICAgICBiYXNlLnVuaXF1ZUl0ZW1zID0gc2NoZW1hLnVuaXF1ZUl0ZW1zO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNvbHZlIHRvIG1pbiB2YWx1ZVxuICAgICAgWydtYXhMZW5ndGgnLCAnbWF4aW11bScsICdleGNsdXNpdmVNYXhpbXVtJywgJ21heEl0ZW1zJywgJ21heFByb3BlcnRpZXMnXVxuICAgICAgICAuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoIWlzRW1wdHkoYmFzZVtwcm9wXSkgJiYgIWlzRW1wdHkoc2NoZW1hW3Byb3BdKSkge1xuICAgICAgICAgICAgYmFzZVtwcm9wXSA9IGJhc2VbcHJvcF0gPCBzY2hlbWFbcHJvcF0gPyBiYXNlW3Byb3BdIDogc2NoZW1hW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIHJlc29sdmUgdG8gbWF4IHZhbHVlXG4gICAgICBbJ21pbkxlbmd0aCcsICdtaW5pbXVtJywgJ2V4Y2x1c2l2ZU1pbmltdW0nLCAnbWluSXRlbXMnLCAnbWluUHJvcGVydGllcyddXG4gICAgICAgIC5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmICghaXNFbXB0eShiYXNlW3Byb3BdKSAmJiAhaXNFbXB0eShzY2hlbWFbcHJvcF0pKSB7XG4gICAgICAgICAgICBiYXNlW3Byb3BdID0gYmFzZVtwcm9wXSA+IHNjaGVtYVtwcm9wXSA/IGJhc2VbcHJvcF0gOiBzY2hlbWFbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJldmVyc2VEZWVwTWVyZ2UoYmFzZSwgc2NoZW1hKTtcbiAgICB9LCBiYXNlU2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU11bHRpU2NoZW1hKFxuICAgIG1vZGU6ICdvbmVPZicgfCAnYW55T2YnLFxuICAgIHNjaGVtYXM6IEpTT05TY2hlbWE3W10sXG4gICAgb3B0aW9uczogSU9wdGlvbnMsXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ211bHRpc2NoZW1hJyxcbiAgICAgIGZpZWxkR3JvdXA6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdlbnVtJyxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgbXVsdGlwbGU6IG1vZGUgPT09ICdhbnlPZicsXG4gICAgICAgICAgICBvcHRpb25zOiBzY2hlbWFzXG4gICAgICAgICAgICAgIC5tYXAoKHMsIGkpID0+ICh7IGxhYmVsOiBzLnRpdGxlLCB2YWx1ZTogaSwgZGlzYWJsZWQ6IHMucmVhZE9ubHkgfSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgIG9uSW5pdDogZiA9PiBmLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gKGYub3B0aW9ucyBhcyBhbnkpLl9jaGVja0ZpZWxkKGYucGFyZW50KSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZEdyb3VwOiBzY2hlbWFzLm1hcCgocywgaSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcocywgeyAuLi5vcHRpb25zLCByZXNldE9uSGlkZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiAobSwgZnMsIGYpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGYucGFyZW50LnBhcmVudC5maWVsZEdyb3VwWzBdLmZvcm1Db250cm9sO1xuICAgICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBmLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICAgICAgICAgICAgICAubWFwKChmLCBpKSA9PiBbZiwgaV0gYXMgW0Zvcm1seUZpZWxkQ29uZmlnLCBudW1iZXJdKVxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoW2YsIGldKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlzRmllbGRWYWxpZChmLCBzY2hlbWFzW2ldLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAuc29ydCgoW2YxXSwgW2YyXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkRmllbGRzMSA9IHRvdGFsTWF0Y2hlZEZpZWxkcyhmMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRGaWVsZHMyID0gdG90YWxNYXRjaGVkRmllbGRzKGYyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZWRGaWVsZHMxID09PSBtYXRjaGVkRmllbGRzMikge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChmMS50ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQgPT09IGYyLnRlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYxLnRlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVkRmllbGRzMiA+IG1hdGNoZWRGaWVsZHMxID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoKFssIGldKSA9PiBpKVxuICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdhbnlPZicpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluZWRWYWx1ZSA9IHZhbHVlLmZpbHRlcihpID0+IHRvdGFsTWF0Y2hlZEZpZWxkcyhmLnBhcmVudC5maWVsZEdyb3VwW2ldKSk7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmluZWRWYWx1ZS5sZW5ndGggPiAwID8gZGVmaW5lZFZhbHVlIDogW3ZhbHVlWzBdIHx8IDBdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogWzBdO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobW9kZSA9PT0gJ2FueU9mJyA/IHZhbHVlIDogdmFsdWVbMF0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IGNvbnRyb2wudmFsdWUuaW5kZXhPZihpKSA9PT0gLTFcbiAgICAgICAgICAgICAgICA6IGNvbnRyb2wudmFsdWUgIT09IGk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURlZmluaXRpb24oc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpOiBKU09OU2NoZW1hNyB7XG4gICAgY29uc3QgW3VyaSwgcG9pbnRlcl0gPSBzY2hlbWEuJHJlZi5zcGxpdCgnIy8nKTtcbiAgICBpZiAodXJpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgUmVtb3RlIHNjaGVtYXMgZm9yICR7c2NoZW1hLiRyZWZ9IG5vdCBzdXBwb3J0ZWQgeWV0LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSAhcG9pbnRlciA/IG51bGwgOiBwb2ludGVyLnNwbGl0KCcvJykucmVkdWNlKFxuICAgICAgKGRlZiwgcGF0aCkgPT4gZGVmICYmIGRlZi5oYXNPd25Qcm9wZXJ0eShwYXRoKSA/IGRlZltwYXRoXSA6IG51bGwsXG4gICAgICBvcHRpb25zLnNjaGVtYSxcbiAgICApO1xuXG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkZWZpbml0aW9uIGZvciAke3NjaGVtYS4kcmVmfS5gKTtcbiAgICB9XG5cbiAgICBpZiAoZGVmaW5pdGlvbi4kcmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlRGVmaW5pdGlvbihkZWZpbml0aW9uLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmaW5pdGlvbixcbiAgICAgIC4uLlsndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAnZGVmYXVsdCcsICd3aWRnZXQnXS5yZWR1Y2UoKGFubm90YXRpb24sIHApID0+IHtcbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eShwKSkge1xuICAgICAgICAgIGFubm90YXRpb25bcF0gPSBzY2hlbWFbcF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYW5ub3RhdGlvbjtcbiAgICAgIH0sIHt9KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRGVwZW5kZW5jaWVzKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICBjb25zdCBkZXBzID0ge307XG4gICAgY29uc3Qgc2NoZW1hRGVwcyA9IHt9O1xuXG4gICAgT2JqZWN0LmtleXMoc2NoZW1hLmRlcGVuZGVuY2llcyB8fCB7fSkuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBzY2hlbWEuZGVwZW5kZW5jaWVzW3Byb3BdIGFzIEpTT05TY2hlbWE3O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgLy8gUHJvcGVydHkgZGVwZW5kZW5jaWVzXG4gICAgICAgIGRlcGVuZGVuY3kuZm9yRWFjaChkZXAgPT4ge1xuICAgICAgICAgIGlmICghZGVwc1tkZXBdKSB7XG4gICAgICAgICAgICBkZXBzW2RlcF0gPSBbcHJvcF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlcHNbZGVwXS5wdXNoKHByb3ApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzY2hlbWEgZGVwZW5kZW5jaWVzXG4gICAgICAgIHNjaGVtYURlcHNbcHJvcF0gPSBkZXBlbmRlbmN5O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFtkZXBzLCBzY2hlbWFEZXBzXTtcbiAgfVxuXG4gIHByaXZhdGUgZ3Vlc3NUeXBlKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICBjb25zdCB0eXBlID0gc2NoZW1hID8gc2NoZW1hLnR5cGUgYXMgSlNPTlNjaGVtYTdUeXBlTmFtZSA6IG51bGw7XG4gICAgaWYgKCF0eXBlICYmIHNjaGVtYSAmJiBzY2hlbWEucHJvcGVydGllcykge1xuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICBpZiAodHlwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVbMF07XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlLmxlbmd0aCA9PT0gMiAmJiB0eXBlLmluZGV4T2YoJ251bGwnKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVbdHlwZVswXSA9PT0gJ251bGwnID8gMSA6IDBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRWYWxpZGF0b3IoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLCBuYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gYm9vbGVhbikge1xuICAgIGZpZWxkLnZhbGlkYXRvcnMgPSBmaWVsZC52YWxpZGF0b3JzIHx8IHt9O1xuICAgIGZpZWxkLnZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XG4gIH1cblxuICBwcml2YXRlIGlzRW51bShzY2hlbWE6IEpTT05TY2hlbWE3KSB7XG4gICAgcmV0dXJuIHNjaGVtYS5lbnVtXG4gICAgICB8fCAoc2NoZW1hLmFueU9mICYmIHNjaGVtYS5hbnlPZi5ldmVyeShpc0NvbnN0KSlcbiAgICAgIHx8IChzY2hlbWEub25lT2YgJiYgc2NoZW1hLm9uZU9mLmV2ZXJ5KGlzQ29uc3QpKVxuICAgICAgfHwgc2NoZW1hLnVuaXF1ZUl0ZW1zICYmIHNjaGVtYS5pdGVtcyAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpICYmIHRoaXMuaXNFbnVtKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9FbnVtT3B0aW9ucyhzY2hlbWE6IEpTT05TY2hlbWE3KSB7XG4gICAgaWYgKHNjaGVtYS5lbnVtKSB7XG4gICAgICByZXR1cm4gc2NoZW1hLmVudW0ubWFwKHZhbHVlID0+ICh7IHZhbHVlLCBsYWJlbDogdmFsdWUgfSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvRW51bSA9IChzOiBKU09OU2NoZW1hNykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBzLmhhc093blByb3BlcnR5KCdjb25zdCcpID8gcy5jb25zdCA6IHMuZW51bVswXTtcbiAgICAgIGNvbnN0IG9wdGlvbjogYW55ID0geyB2YWx1ZTogdmFsdWUsIGxhYmVsOiBzLnRpdGxlIHx8IHZhbHVlIH07XG4gICAgICBpZiAocy5yZWFkT25seSkge1xuICAgICAgICBvcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH07XG5cbiAgICBpZiAoc2NoZW1hLmFueU9mKSB7XG4gICAgICByZXR1cm4gc2NoZW1hLmFueU9mLm1hcCh0b0VudW0pO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEub25lT2YpIHtcbiAgICAgIHJldHVybiBzY2hlbWEub25lT2YubWFwKHRvRW51bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9FbnVtT3B0aW9ucyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIGlzRmllbGRWYWxpZChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIHNjaGVtYTogSlNPTlNjaGVtYTcsIG9wdGlvbnM6IElPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBmb3JtIH0gPSAoZmllbGQub3B0aW9ucyBhcyBhbnkpLl9idWlsZEZpZWxkKHtcbiAgICAgIGZvcm06IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZmllbGRHcm91cDogW3RoaXMuX3RvRmllbGRDb25maWcoc2NoZW1hLCB7IC4uLm9wdGlvbnMsIHJlc2V0T25IaWRlOiB0cnVlLCBpZ25vcmVEZWZhdWx0OiB0cnVlLCBtYXA6IG51bGwgfSldLFxuICAgICAgbW9kZWw6IGZpZWxkLm1vZGVsID8gY2xvbmUoZmllbGQubW9kZWwpIDogKGZpZWxkLmZpZWxkQXJyYXkgPyBbXSA6IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3JtLnZhbGlkO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZUZpZWxkcyhmMTogRm9ybWx5RmllbGRDb25maWcsIGYyOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGZvciAobGV0IHByb3AgaW4gZjIpIHtcbiAgICAgIGlmIChpc09iamVjdChmMVtwcm9wXSkgJiYgaXNPYmplY3QoZjJbcHJvcF0pKSB7XG4gICAgICAgIGYxW3Byb3BdID0gdGhpcy5tZXJnZUZpZWxkcyhmMVtwcm9wXSwgZjJbcHJvcF0pO1xuICAgICAgfSBlbHNlIGlmIChmMltwcm9wXSAhPSBudWxsKSB7XG4gICAgICAgIGYxW3Byb3BdID0gZjJbcHJvcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGYxO1xuICB9XG59XG4iXX0=
@@ -100,7 +100,11 @@ var FormlyAttributes = /** @class */ (function () {
100
100
  * @param {?} attr
101
101
  * @return {?}
102
102
  */
103
- function (attr) { return _this.setAttribute(attr, currentValue[attr]); }));
103
+ function (attr) {
104
+ if (currentValue[attr] != null) {
105
+ _this.setAttribute(attr, currentValue[attr]);
106
+ }
107
+ }));
104
108
  }
105
109
  }));
106
110
  }
@@ -157,7 +161,8 @@ var FormlyAttributes = /** @class */ (function () {
157
161
  function (attr) {
158
162
  /** @type {?} */
159
163
  var value = _this.to[attr];
160
- if (_this.uiAttributesCache[attr] !== value) {
164
+ if (_this.uiAttributesCache[attr] !== value
165
+ && (!_this.to.attributes || !_this.to.attributes.hasOwnProperty(attr.toLowerCase()))) {
161
166
  _this.uiAttributesCache[attr] = value;
162
167
  if (value || value === 0) {
163
168
  _this.setAttribute(attr, value === true ? attr : "" + value);
@@ -387,4 +392,4 @@ if (false) {
387
392
  */
388
393
  FormlyAttributes.prototype.elementRef;
389
394
  }
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybWx5LmF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBVyxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0M7SUEwQ0UsMEJBQ1UsUUFBbUIsRUFDbkIsVUFBc0IsRUFDWixTQUFjO1FBRnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQS9CeEIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLG9CQUNmLGlCQUFpQjtZQUNwQixVQUFVO1lBQ1YsYUFBYTtZQUNiLFVBQVU7WUFDVixVQUFVO1lBQ1YsTUFBTTtXQUNOOzs7Ozs7UUFPTSxhQUFRLEdBQUc7WUFDakIsU0FBUyxFQUFFLEVBQUU7WUFDYixNQUFNLEVBQUU7Z0JBQ04sT0FBTztnQkFDUCxPQUFPO2dCQUNQLFNBQVM7Z0JBQ1QsVUFBVTthQUNYO1NBQ0YsQ0FBQztRQVdBLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFWRCxzQkFBSSxnQ0FBRTs7OztRQUFOLGNBQWtDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFFNUUsc0JBQVksK0NBQWlCOzs7OztRQUE3QixjQUFnRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMs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QUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsQ0FBQzs7Ozs7O0lBRU8sMENBQWU7Ozs7O0lBQXZCLFVBQXdCLElBQVk7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7Z0JBMUxGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixJQUFJLEVBQUU7d0JBQ0osU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsUUFBUSxFQUFFLGdCQUFnQjt3QkFDMUIsVUFBVSxFQUFFLGtCQUFrQjtxQkFDL0I7aUJBQ0Y7Ozs7Z0JBWmdFLFNBQVM7Z0JBQXRELFVBQVU7Z0RBa0R6QixNQUFNLFNBQUMsUUFBUTs7O3dCQXBDakIsS0FBSyxTQUFDLGtCQUFrQjtxQkFDeEIsS0FBSzs7SUFpTFIsdUJBQUM7Q0FBQSxBQTNMRCxJQTJMQztTQW5MWSxnQkFBZ0I7OztJQUMzQixpQ0FBb0Q7O0lBQ3BELDhCQUFvQjs7Ozs7SUFFcEIsb0NBQTJCOzs7OztJQUMzQiw2Q0FBb0M7Ozs7O0lBQ3BDLHdDQU9FOzs7Ozs7OztJQU9GLG9DQVFFOzs7OztJQU9BLG9DQUEyQjs7Ozs7SUFDM0Isc0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBSZW5kZXJlcjIsIERvQ2hlY2ssIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5VGVtcGxhdGVPcHRpb25zIH0gZnJvbSAnLi9mb3JtbHkuZmllbGQuY29uZmlnJztcbmltcG9ydCB7IHdyYXBQcm9wZXJ0eSwgZGVmaW5lSGlkZGVuUHJvcCwgRk9STUxZX1ZBTElEQVRPUlMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmb3JtbHlBdHRyaWJ1dGVzXScsXG4gIGhvc3Q6IHtcbiAgICAnKGZvY3VzKSc6ICdvbkZvY3VzKCRldmVudCknLFxuICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknLFxuICAgICcoY2hhbmdlKSc6ICdvbkNoYW5nZSgkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5QXR0cmlidXRlcyBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgQElucHV0KCdmb3JtbHlBdHRyaWJ1dGVzJykgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50O1xuICBwcml2YXRlIHVpQXR0cmlidXRlc0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSB1aUF0dHJpYnV0ZXMgPSBbXG4gICAgLi4uRk9STUxZX1ZBTElEQVRPUlMsXG4gICAgJ3RhYmluZGV4JyxcbiAgICAncGxhY2Vob2xkZXInLFxuICAgICdyZWFkb25seScsXG4gICAgJ2Rpc2FibGVkJyxcbiAgICAnc3RlcCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIEhvc3RCaW5kaW5nIGRvZXNuJ3QgcmVnaXN0ZXIgbGlzdGVuZXJzIGNvbmRpdGlvbmFsbHkgd2hpY2ggbWF5IHByb2R1Y2Ugc29tZSBwZXJmIGlzc3Vlcy5cbiAgICpcbiAgICogRm9ybWx5IGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbmd4LWZvcm1seS9uZ3gtZm9ybWx5L2lzc3Vlcy8xOTkxXG4gICAqL1xuICBwcml2YXRlIHVpRXZlbnRzID0ge1xuICAgIGxpc3RlbmVyczogW10sXG4gICAgZXZlbnRzOiBbXG4gICAgICAnY2xpY2snLFxuICAgICAgJ2tleXVwJyxcbiAgICAgICdrZXlkb3duJyxcbiAgICAgICdrZXlwcmVzcycsXG4gICAgXSxcbiAgfTtcblxuICBnZXQgdG8oKTogRm9ybWx5VGVtcGxhdGVPcHRpb25zIHsgcmV0dXJuIHRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zIHx8IHt9OyB9XG5cbiAgcHJpdmF0ZSBnZXQgZmllbGRBdHRyRWxlbWVudHMoKTogRWxlbWVudFJlZltdIHsgcmV0dXJuICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGRbJ19lbGVtZW50UmVmcyddKSB8fCBbXTsgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgX2RvY3VtZW50OiBhbnksXG4gICkge1xuICAgIHRoaXMuZG9jdW1lbnQgPSBfZG9jdW1lbnQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuZmllbGQpIHtcbiAgICAgIHRoaXMuZmllbGQubmFtZSAmJiB0aGlzLnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMuZmllbGQubmFtZSk7XG4gICAgICB0aGlzLnVpRXZlbnRzLmxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKCkpO1xuICAgICAgdGhpcy51aUV2ZW50cy5ldmVudHMuZm9yRWFjaChldmVudE5hbWUgPT4ge1xuICAgICAgICBpZiAodGhpcy50byAmJiB0aGlzLnRvW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICB0aGlzLnVpRXZlbnRzLmxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICAgIChlKSA9PiB0aGlzLnRvW2V2ZW50TmFtZV0odGhpcy5maWVsZCwgZSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy50byAmJiB0aGlzLnRvLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgd3JhcFByb3BlcnR5KHRoaXMudG8sICdhdHRyaWJ1dGVzJywgKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJldmlvdXNWYWx1ZSkuZm9yRWFjaChhdHRyID0+IHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmZvckVhY2goYXR0ciA9PiB0aGlzLnNldEF0dHJpYnV0ZShhdHRyLCBjdXJyZW50VmFsdWVbYXR0cl0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRldGFjaEVsZW1lbnRSZWYoY2hhbmdlcy5maWVsZC5wcmV2aW91c1ZhbHVlKTtcbiAgICAgIHRoaXMuYXR0YWNoRWxlbWVudFJlZihjaGFuZ2VzLmZpZWxkLmN1cnJlbnRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5maWVsZEF0dHJFbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgIXRoaXMuaWQgJiYgdGhpcy5maWVsZC5pZCAmJiB0aGlzLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmZpZWxkLmlkKTtcbiAgICAgICAgd3JhcFByb3BlcnR5KHRoaXMuZmllbGQsICdmb2N1cycsICh7IGN1cnJlbnRWYWx1ZSB9KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVGb2N1cyhjdXJyZW50VmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5pZCkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5pZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgYWxsIHRoZSBhdHRyaWJ1dGVzIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUsIGJlY2F1c2VcbiAgICogYnkgdXNpbmcgYSBIb3N0QmluZGluZyB3ZSBydW4gaW50byBjZXJ0YWluIGVkZ2UgY2FzZXMuIFRoaXMgbWVhbnMgdGhhdCB3aGF0ZXZlciBsb2dpY1xuICAgKiBpcyBpbiBoZXJlIGhhcyB0byBiZSBzdXBlciBsZWFuIG9yIHdlIHJpc2sgc2VyaW91c2x5IGRhbWFnaW5nIG9yIGRlc3Ryb3lpbmcgdGhlIHBlcmZvcm1hbmNlLlxuICAgKlxuICAgKiBGb3JtbHkgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3gtZm9ybWx5L25neC1mb3JtbHkvaXNzdWVzLzEzMTdcbiAgICogTWF0ZXJpYWwgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzE0MDI0XG4gICAqL1xuICBuZ0RvQ2hlY2soKSB7XG4gICAgdGhpcy51aUF0dHJpYnV0ZXMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy50b1thdHRyXTtcbiAgICAgIGlmICh0aGlzLnVpQXR0cmlidXRlc0NhY2hlW2F0dHJdICE9PSB2YWx1ZSkge1xuICAgICAgICB0aGlzLnVpQXR0cmlidXRlc0NhY2hlW2F0dHJdID0gdmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGF0dHIsIHZhbHVlID09PSB0cnVlID8gYXR0ciA6IGAke3ZhbHVlfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVpRXZlbnRzLmxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKCkpO1xuICAgIHRoaXMuZGV0YWNoRWxlbWVudFJlZih0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIHRvZ2dsZUZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmllbGRBdHRyRWxlbWVudHMgPyB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzWzBdIDogbnVsbDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9jdXNlZCA9ICEhdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAmJiB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzXG4gICAgICAgIC5zb21lKCh7IG5hdGl2ZUVsZW1lbnQgfSkgPT4gdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBuYXRpdmVFbGVtZW50IHx8IG5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSk7XG5cbiAgICBpZiAodmFsdWUgJiYgIWlzRm9jdXNlZCkge1xuICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWUgJiYgaXNGb2N1c2VkKSB7XG4gICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkWydfX18kZm9jdXMnXSA9IHRydWU7XG4gICAgaWYgKHRoaXMudG8uZm9jdXMpIHtcbiAgICAgIHRoaXMudG8uZm9jdXModGhpcy5maWVsZCwgJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkWydfX18kZm9jdXMnXSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRvLmJsdXIpIHtcbiAgICAgIHRoaXMudG8uYmx1cih0aGlzLmZpZWxkLCAkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMudG8uY2hhbmdlKSB7XG4gICAgICB0aGlzLnRvLmNoYW5nZSh0aGlzLmZpZWxkLCAkZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpZWxkLmZvcm1Db250cm9sKSB7XG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hFbGVtZW50UmVmKGY6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgaWYgKCFmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZbJ19lbGVtZW50UmVmcyddICYmIGZbJ19lbGVtZW50UmVmcyddLmluZGV4T2YodGhpcy5lbGVtZW50UmVmKSA9PT0gLTEpIHtcbiAgICAgIGZbJ19lbGVtZW50UmVmcyddLnB1c2godGhpcy5lbGVtZW50UmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChmLCAnX2VsZW1lbnRSZWZzJywgW3RoaXMuZWxlbWVudFJlZl0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0YWNoRWxlbWVudFJlZihmOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGNvbnN0IGluZGV4ID0gZiAmJiBmWydfZWxlbWVudFJlZnMnXSA/IHRoaXMuZmllbGRBdHRyRWxlbWVudHMuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYpIDogLTE7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWVsZFsnX2VsZW1lbnRSZWZzJ10uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEF0dHJpYnV0ZShhdHRyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBdHRyaWJ1dGUoYXR0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGF0dHIpO1xuICB9XG59XG4iXX0=
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybWx5LmF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBVyxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0M7SUEwQ0UsMEJBQ1UsUUFBbUIsRUFDbkIsVUFBc0IsRUFDWixTQUFjO1FBRnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQS9CeEIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLG9CQUNmLGlCQUFpQjtZQUNwQixVQUFVO1lBQ1YsYUFBYTtZQUNiLFVBQVU7WUFDVixVQUFVO1lBQ1YsTUFBTTtXQUNOOzs7Ozs7UUFPTSxhQUFRLEdBQUc7WUFDakIsU0FBUyxFQUFFLEVBQUU7WUFDYixNQUFNLEVBQUU7Z0JBQ04sT0FBTztnQkFDUCxPQUFPO2dCQUNQLFNBQVM7Z0JBQ1QsVUFBVTthQUNYO1NBQ0YsQ0FBQztRQVdBLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFWRCxzQkFBSSxnQ0FBRTs7OztRQUFOLGNBQWtDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7O09BQUE7SUFFNUUsc0JBQVksK0NBQWlCOzs7OztRQUE3QixjQUFnRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMs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QzNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7Ozs7Ozs7SUFFTyx1Q0FBWTs7Ozs7O0lBQXBCLFVBQXFCLElBQVksRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RSxDQUFDOzs7Ozs7SUFFTywwQ0FBZTs7Ozs7SUFBdkIsVUFBd0IsSUFBWTtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDOztnQkFqTUYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLElBQUksRUFBRTt3QkFDSixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1QixRQUFRLEVBQUUsZ0JBQWdCO3dCQUMxQixVQUFVLEVBQUUsa0JBQWtCO3FCQUMvQjtpQkFDRjs7OztnQkFaZ0UsU0FBUztnQkFBdEQsVUFBVTtnREFrRHpCLE1BQU0sU0FBQyxRQUFROzs7d0JBcENqQixLQUFLLFNBQUMsa0JBQWtCO3FCQUN4QixLQUFLOztJQXdMUix1QkFBQztDQUFBLEFBbE1ELElBa01DO1NBMUxZLGdCQUFnQjs7O0lBQzNCLGlDQUFvRDs7SUFDcEQsOEJBQW9COzs7OztJQUVwQixvQ0FBMkI7Ozs7O0lBQzNCLDZDQUFvQzs7Ozs7SUFDcEMsd0NBT0U7Ozs7Ozs7O0lBT0Ysb0NBUUU7Ozs7O0lBT0Esb0NBQTJCOzs7OztJQUMzQixzQ0FBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFJlbmRlcmVyMiwgRG9DaGVjaywgSW5qZWN0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tICcuL2Zvcm1seS5maWVsZC5jb25maWcnO1xuaW1wb3J0IHsgd3JhcFByb3BlcnR5LCBkZWZpbmVIaWRkZW5Qcm9wLCBGT1JNTFlfVkFMSURBVE9SUyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2Zvcm1seUF0dHJpYnV0ZXNdJyxcbiAgaG9zdDoge1xuICAgICcoZm9jdXMpJzogJ29uRm9jdXMoJGV2ZW50KScsXG4gICAgJyhibHVyKSc6ICdvbkJsdXIoJGV2ZW50KScsXG4gICAgJyhjaGFuZ2UpJzogJ29uQ2hhbmdlKCRldmVudCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlBdHRyaWJ1dGVzIGltcGxlbWVudHMgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ2Zvcm1seUF0dHJpYnV0ZXMnKSBmaWVsZDogRm9ybWx5RmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQ7XG4gIHByaXZhdGUgdWlBdHRyaWJ1dGVzQ2FjaGU6IGFueSA9IHt9O1xuICBwcml2YXRlIHVpQXR0cmlidXRlcyA9IFtcbiAgICAuLi5GT1JNTFlfVkFMSURBVE9SUyxcbiAgICAndGFiaW5kZXgnLFxuICAgICdwbGFjZWhvbGRlcicsXG4gICAgJ3JlYWRvbmx5JyxcbiAgICAnZGlzYWJsZWQnLFxuICAgICdzdGVwJyxcbiAgXTtcblxuICAvKipcbiAgICogSG9zdEJpbmRpbmcgZG9lc24ndCByZWdpc3RlciBsaXN0ZW5lcnMgY29uZGl0aW9uYWxseSB3aGljaCBtYXkgcHJvZHVjZSBzb21lIHBlcmYgaXNzdWVzLlxuICAgKlxuICAgKiBGb3JtbHkgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3gtZm9ybWx5L25neC1mb3JtbHkvaXNzdWVzLzE5OTFcbiAgICovXG4gIHByaXZhdGUgdWlFdmVudHMgPSB7XG4gICAgbGlzdGVuZXJzOiBbXSxcbiAgICBldmVudHM6IFtcbiAgICAgICdjbGljaycsXG4gICAgICAna2V5dXAnLFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgJ2tleXByZXNzJyxcbiAgICBdLFxuICB9O1xuXG4gIGdldCB0bygpOiBGb3JtbHlUZW1wbGF0ZU9wdGlvbnMgeyByZXR1cm4gdGhpcy5maWVsZC50ZW1wbGF0ZU9wdGlvbnMgfHwge307IH1cblxuICBwcml2YXRlIGdldCBmaWVsZEF0dHJFbGVtZW50cygpOiBFbGVtZW50UmVmW10geyByZXR1cm4gKHRoaXMuZmllbGQgJiYgdGhpcy5maWVsZFsnX2VsZW1lbnRSZWZzJ10pIHx8IFtdOyB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBfZG9jdW1lbnQ6IGFueSxcbiAgKSB7XG4gICAgdGhpcy5kb2N1bWVudCA9IF9kb2N1bWVudDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5maWVsZCkge1xuICAgICAgdGhpcy5maWVsZC5uYW1lICYmIHRoaXMuc2V0QXR0cmlidXRlKCduYW1lJywgdGhpcy5maWVsZC5uYW1lKTtcbiAgICAgIHRoaXMudWlFdmVudHMubGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XG4gICAgICB0aGlzLnVpRXZlbnRzLmV2ZW50cy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRvICYmIHRoaXMudG9bZXZlbnROYW1lXSkge1xuICAgICAgICAgIHRoaXMudWlFdmVudHMubGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgKGUpID0+IHRoaXMudG9bZXZlbnROYW1lXSh0aGlzLmZpZWxkLCBlKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnRvICYmIHRoaXMudG8uYXR0cmlidXRlcykge1xuICAgICAgICB3cmFwUHJvcGVydHkodGhpcy50bywgJ2F0dHJpYnV0ZXMnLCAoeyBjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUgfSkgPT4ge1xuICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwcmV2aW91c1ZhbHVlKS5mb3JFYWNoKGF0dHIgPT4gdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYXR0cikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRWYWx1ZSkuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZVthdHRyXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoYXR0ciwgY3VycmVudFZhbHVlW2F0dHJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZXRhY2hFbGVtZW50UmVmKGNoYW5nZXMuZmllbGQucHJldmlvdXNWYWx1ZSk7XG4gICAgICB0aGlzLmF0dGFjaEVsZW1lbnRSZWYoY2hhbmdlcy5maWVsZC5jdXJyZW50VmFsdWUpO1xuICAgICAgaWYgKHRoaXMuZmllbGRBdHRyRWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICF0aGlzLmlkICYmIHRoaXMuZmllbGQuaWQgJiYgdGhpcy5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5maWVsZC5pZCk7XG4gICAgICAgIHdyYXBQcm9wZXJ0eSh0aGlzLmZpZWxkLCAnZm9jdXMnLCAoeyBjdXJyZW50VmFsdWUgfSkgPT4ge1xuICAgICAgICAgIHRoaXMudG9nZ2xlRm9jdXMoY3VycmVudFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuaWQpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXZSBuZWVkIHRvIHJlLWV2YWx1YXRlIGFsbCB0aGUgYXR0cmlidXRlcyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLCBiZWNhdXNlXG4gICAqIGJ5IHVzaW5nIGEgSG9zdEJpbmRpbmcgd2UgcnVuIGludG8gY2VydGFpbiBlZGdlIGNhc2VzLiBUaGlzIG1lYW5zIHRoYXQgd2hhdGV2ZXIgbG9naWNcbiAgICogaXMgaW4gaGVyZSBoYXMgdG8gYmUgc3VwZXIgbGVhbiBvciB3ZSByaXNrIHNlcmlvdXNseSBkYW1hZ2luZyBvciBkZXN0cm95aW5nIHRoZSBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogRm9ybWx5IGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbmd4LWZvcm1seS9uZ3gtZm9ybWx5L2lzc3Vlcy8xMzE3XG4gICAqIE1hdGVyaWFsIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8xNDAyNFxuICAgKi9cbiAgbmdEb0NoZWNrKCkge1xuICAgIHRoaXMudWlBdHRyaWJ1dGVzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudG9bYXR0cl07XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudWlBdHRyaWJ1dGVzQ2FjaGVbYXR0cl0gIT09IHZhbHVlXG4gICAgICAgICYmICghdGhpcy50by5hdHRyaWJ1dGVzIHx8ICF0aGlzLnRvLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0ci50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnVpQXR0cmlidXRlc0NhY2hlW2F0dHJdID0gdmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGF0dHIsIHZhbHVlID09PSB0cnVlID8gYXR0ciA6IGAke3ZhbHVlfWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVpRXZlbnRzLmxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKCkpO1xuICAgIHRoaXMuZGV0YWNoRWxlbWVudFJlZih0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIHRvZ2dsZUZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmllbGRBdHRyRWxlbWVudHMgPyB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzWzBdIDogbnVsbDtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9jdXNlZCA9ICEhdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAmJiB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzXG4gICAgICAgIC5zb21lKCh7IG5hdGl2ZUVsZW1lbnQgfSkgPT4gdGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBuYXRpdmVFbGVtZW50IHx8IG5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSk7XG5cbiAgICBpZiAodmFsdWUgJiYgIWlzRm9jdXNlZCkge1xuICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghdmFsdWUgJiYgaXNGb2N1c2VkKSB7XG4gICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9jdXMoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkWydfX18kZm9jdXMnXSA9IHRydWU7XG4gICAgaWYgKHRoaXMudG8uZm9jdXMpIHtcbiAgICAgIHRoaXMudG8uZm9jdXModGhpcy5maWVsZCwgJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbkJsdXIoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkWydfX18kZm9jdXMnXSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRvLmJsdXIpIHtcbiAgICAgIHRoaXMudG8uYmx1cih0aGlzLmZpZWxkLCAkZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMudG8uY2hhbmdlKSB7XG4gICAgICB0aGlzLnRvLmNoYW5nZSh0aGlzLmZpZWxkLCAkZXZlbnQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpZWxkLmZvcm1Db250cm9sKSB7XG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hFbGVtZW50UmVmKGY6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgaWYgKCFmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZbJ19lbGVtZW50UmVmcyddICYmIGZbJ19lbGVtZW50UmVmcyddLmluZGV4T2YodGhpcy5lbGVtZW50UmVmKSA9PT0gLTEpIHtcbiAgICAgIGZbJ19lbGVtZW50UmVmcyddLnB1c2godGhpcy5lbGVtZW50UmVmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChmLCAnX2VsZW1lbnRSZWZzJywgW3RoaXMuZWxlbWVudFJlZl0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0YWNoRWxlbWVudFJlZihmOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGNvbnN0IGluZGV4ID0gZiAmJiBmWydfZWxlbWVudFJlZnMnXSA/IHRoaXMuZmllbGRBdHRyRWxlbWVudHMuaW5kZXhPZih0aGlzLmVsZW1lbnRSZWYpIDogLTE7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWVsZFsnX2VsZW1lbnRSZWZzJ10uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEF0dHJpYnV0ZShhdHRyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgYXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBdHRyaWJ1dGUoYXR0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGF0dHIpO1xuICB9XG59XG4iXX0=
@@ -21,6 +21,7 @@ var FormlyField = /** @class */ (function () {
21
21
  this.hostObservers = [];
22
22
  this.componentRefs = [];
23
23
  this.hooksObservers = [];
24
+ this.detectFieldBuild = false;
24
25
  this.warnDeprecation = hideDeprecation === null;
25
26
  }
26
27
  Object.defineProperty(FormlyField.prototype, "model", {
@@ -100,6 +101,9 @@ var FormlyField = /** @class */ (function () {
100
101
  */
101
102
  function () {
102
103
  this.triggerHook('doCheck');
104
+ if (this.detectFieldBuild && (this.field && this.field.options)) {
105
+ this.render();
106
+ }
103
107
  };
104
108
  /**
105
109
  * @return {?}
@@ -265,6 +269,12 @@ var FormlyField = /** @class */ (function () {
265
269
  if (!this.field) {
266
270
  return;
267
271
  }
272
+ // require Formly build
273
+ if (!this.field.options) {
274
+ this.detectFieldBuild = true;
275
+ return;
276
+ }
277
+ this.detectFieldBuild = false;
268
278
  this.hostObservers.forEach((/**
269
279
  * @param {?} unsubscribe
270
280
  * @return {?}
@@ -286,9 +296,15 @@ var FormlyField = /** @class */ (function () {
286
296
  else {
287
297
  if (currentValue) {
288
298
  _this.containerRef.clear();
299
+ if (_this.field.className) {
300
+ _this.renderer.removeAttribute(_this.elementRef.nativeElement, 'class');
301
+ }
289
302
  }
290
303
  else {
291
304
  _this.renderField(_this.containerRef, _this.field);
305
+ if (_this.field.className) {
306
+ _this.renderer.setAttribute(_this.elementRef.nativeElement, 'class', _this.field.className);
307
+ }
292
308
  }
293
309
  }
294
310
  })),
@@ -298,7 +314,8 @@ var FormlyField = /** @class */ (function () {
298
314
  */
299
315
  function (_a) {
300
316
  var firstChange = _a.firstChange, currentValue = _a.currentValue;
301
- if (!firstChange || (firstChange && currentValue)) {
317
+ if ((!firstChange || (firstChange && currentValue))
318
+ && (!_this.formlyConfig.extras.lazyRender || (_this.field.hide !== true))) {
302
319
  _this.renderer.setAttribute(_this.elementRef.nativeElement, 'class', currentValue);
303
320
  }
304
321
  })),
@@ -379,6 +396,11 @@ if (false) {
379
396
  * @private
380
397
  */
381
398
  FormlyField.prototype.hooksObservers;
399
+ /**
400
+ * @type {?}
401
+ * @private
402
+ */
403
+ FormlyField.prototype.detectFieldBuild;
382
404
  /**
383
405
  * @type {?}
384
406
  * @private
@@ -400,4 +422,4 @@ if (false) {
400
422
  */
401
423
  FormlyField.prototype.elementRef;
402
424
  }
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmZpZWxkLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1mb3JtbHkvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2Zvcm1seS5maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQ3RDLGdCQUFnQixFQUFFLFNBQVMsRUFBK0IsU0FBUyxFQUFFLHdCQUF3QixFQUNrQixTQUFTLEVBQUUsVUFBVSxHQUNySSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQztJQTRCRSxxQkFDVSxZQUEwQixFQUMxQixRQUFtQixFQUNuQixRQUFrQyxFQUNsQyxVQUFzQjtJQUM5QiwyQkFBMkI7SUFDSSxlQUFlO1FBTHRDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXpCaEMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFjZCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3RELGtCQUFhLEdBQWUsRUFBRSxDQUFDO1FBQy9CLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQWUsRUFBRSxDQUFDO1FBVXRDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxLQUFLLElBQUksQ0FBQztJQUNsRCxDQUFDO0lBNUJELHNCQUFhLDhCQUFLOzs7OztRQUFsQixVQUFtQixDQUFNO1lB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QUF3QjtnQkFDNkIsVUFBVTtnREE0Q2pJLFNBQVMsU0FBQyxrQkFBa0I7Ozt3QkE3QjlCLEtBQUs7d0JBSUwsS0FBSzt1QkFJTCxLQUFLOzBCQUlMLEtBQUs7OEJBSUwsTUFBTTsrQkFFTixTQUFTLFNBQUMsV0FBVyxFQUFFLG1CQUFNLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBQTs7SUErSnZFLGtCQUFDO0NBQUEsQUF0TEQsSUFzTEM7U0FsTFksV0FBVzs7O0lBQ3RCLDRCQUFrQzs7SUFFbEMsc0NBQXdCOztJQWN4QixrQ0FBOEQ7O0lBRTlELG1DQUFzRzs7Ozs7SUFDdEcsb0NBQXVDOzs7OztJQUN2QyxvQ0FBa0M7Ozs7O0lBQ2xDLHFDQUF3Qzs7Ozs7SUFHdEMsbUNBQWtDOzs7OztJQUNsQywrQkFBMkI7Ozs7O0lBQzNCLCtCQUEwQzs7Ozs7SUFDMUMsaUNBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsXG4gIFZpZXdDb250YWluZXJSZWYsIFZpZXdDaGlsZCwgQ29tcG9uZW50UmVmLCBTaW1wbGVDaGFuZ2VzLCBBdHRyaWJ1dGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgRG9DaGVjaywgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgUmVuZGVyZXIyLCBFbGVtZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seUNvbmZpZyB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zLCBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlIH0gZnJvbSAnLi9mb3JtbHkuZmllbGQuY29uZmlnJztcbmltcG9ydCB7IGRlZmluZUhpZGRlblByb3AsIHdyYXBQcm9wZXJ0eSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJy4uL3RlbXBsYXRlcy9maWVsZC53cmFwcGVyJztcbmltcG9ydCB7IEZpZWxkVHlwZSB9IGZyb20gJy4uL3RlbXBsYXRlcy9maWVsZC50eXBlJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmb3JtbHktZmllbGQnLFxuICB0ZW1wbGF0ZTogYDxuZy10ZW1wbGF0ZSAjY29udGFpbmVyPjwvbmctdGVtcGxhdGU+YCxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5RmllbGQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjaywgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnO1xuXG4gIHdhcm5EZXByZWNhdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBtb2RlbChtOiBhbnkpIHtcbiAgICB0aGlzLndhcm5EZXByZWNhdGlvbiAmJiBjb25zb2xlLndhcm4oYE5neEZvcm1seTogcGFzc2luZyAnbW9kZWwnIGlucHV0IHRvICcke3RoaXMuY29uc3RydWN0b3IubmFtZX0nIGNvbXBvbmVudCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSwgeW91IG1heSByZW1vdmUgaXQhYCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZm9ybShmb3JtOiBGb3JtR3JvdXApIHtcbiAgICB0aGlzLndhcm5EZXByZWNhdGlvbiAmJiBjb25zb2xlLndhcm4oYE5neEZvcm1seTogcGFzc2luZyAnZm9ybScgaW5wdXQgdG8gJyR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfScgY29tcG9uZW50IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLCB5b3UgbWF5IHJlbW92ZSBpdCFgKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zKSB7XG4gICAgdGhpcy53YXJuRGVwcmVjYXRpb24gJiYgY29uc29sZS53YXJuKGBOZ3hGb3JtbHk6IHBhc3NpbmcgJ29wdGlvbnMnIGlucHV0IHRvICcke3RoaXMuY29uc3RydWN0b3IubmFtZX0nIGNvbXBvbmVudCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSwgeW91IG1heSByZW1vdmUgaXQhYCk7XG4gIH1cblxuICBAT3V0cHV0KCkgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvLyBUT0RPOiByZW1vdmUgYGFueWAsIG9uY2UgZHJvcHBpbmcgYW5ndWxhciBgVjdgIHN1cHBvcnQuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIDxhbnk+IHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICBwcml2YXRlIGhvc3RPYnNlcnZlcnM6IEZ1bmN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWZzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGhvb2tzT2JzZXJ2ZXJzOiBGdW5jdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtbHlDb25maWc6IEZvcm1seUNvbmZpZyxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBAQXR0cmlidXRlKCdoaWRlLWRlcHJlY2F0aW9uJykgaGlkZURlcHJlY2F0aW9uLFxuICApIHtcbiAgICB0aGlzLndhcm5EZXByZWNhdGlvbiA9IGhpZGVEZXByZWNhdGlvbiA9PT0gbnVsbDtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnRyaWdnZXJIb29rKCdhZnRlckNvbnRlbnRJbml0Jyk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgdGhpcy50cmlnZ2VySG9vaygnYWZ0ZXJDb250ZW50Q2hlY2tlZCcpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudHJpZ2dlckhvb2soJ2FmdGVyVmlld0luaXQnKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICB0aGlzLnRyaWdnZXJIb29rKCdhZnRlclZpZXdDaGVja2VkJyk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgdGhpcy50cmlnZ2VySG9vaygnZG9DaGVjaycpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50cmlnZ2VySG9vaygnb25Jbml0Jyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdGhpcy50cmlnZ2VySG9vaygnb25DaGFuZ2VzJywgY2hhbmdlcyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2V0UmVmcyh0aGlzLmZpZWxkKTtcbiAgICB0aGlzLmhvc3RPYnNlcnZlcnMuZm9yRWFjaCh1bnN1YnNjcmliZSA9PiB1bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmhvb2tzT2JzZXJ2ZXJzLmZvckVhY2godW5zdWJzY3JpYmUgPT4gdW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy50cmlnZ2VySG9vaygnb25EZXN0cm95Jyk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckZpZWxkKGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgd3JhcHBlcnM6IHN0cmluZ1tdID0gW10pIHtcbiAgICBpZiAodGhpcy5jb250YWluZXJSZWYgPT09IGNvbnRhaW5lclJlZikge1xuICAgICAgdGhpcy5yZXNldFJlZnModGhpcy5maWVsZCk7XG4gICAgICB0aGlzLmNvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgd3JhcHBlcnMgPSB0aGlzLmZpZWxkID8gdGhpcy5maWVsZC53cmFwcGVycyA6IFtdO1xuICAgIH1cblxuICAgIGlmICh3cmFwcGVycyAmJiB3cmFwcGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBbd3JhcHBlciwgLi4ud3BzXSA9IHdyYXBwZXJzO1xuICAgICAgY29uc3QgeyBjb21wb25lbnQgfSA9IHRoaXMuZm9ybWx5Q29uZmlnLmdldFdyYXBwZXIod3JhcHBlcik7XG5cbiAgICAgIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQ8RmllbGRXcmFwcGVyPih0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCkpO1xuICAgICAgdGhpcy5hdHRhY2hDb21wb25lbnRSZWYocmVmLCBmKTtcbiAgICAgIHdyYXBQcm9wZXJ0eTxWaWV3Q29udGFpbmVyUmVmPihyZWYuaW5zdGFuY2UsICdmaWVsZENvbXBvbmVudCcsICh7IGZpcnN0Q2hhbmdlLCBwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUgfSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUgJiYgcHJldmlvdXNWYWx1ZVsnX2xDb250YWluZXInXSA9PT0gY3VycmVudFZhbHVlWydfbENvbnRhaW5lciddKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgdmlld1JlZiA9IHByZXZpb3VzVmFsdWUgPyBwcmV2aW91c1ZhbHVlLmRldGFjaCgpIDogbnVsbDtcbiAgICAgICAgICBpZiAodmlld1JlZiAmJiAhdmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5pbnNlcnQodmlld1JlZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmllbGQoY3VycmVudFZhbHVlLCBmLCB3cHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICFmaXJzdENoYW5nZSAmJiByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGYgJiYgZi50eXBlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCB9ID0gdGhpcy5mb3JtbHlDb25maWcuZ2V0VHlwZShmLnR5cGUpO1xuICAgICAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxGaWVsZFdyYXBwZXI+KHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KSk7XG4gICAgICB0aGlzLmF0dGFjaENvbXBvbmVudFJlZihyZWYsIGYpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlckhvb2sobmFtZTogc3RyaW5nLCBjaGFuZ2VzPzogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuaG9va3MgJiYgdGhpcy5maWVsZC5ob29rc1tuYW1lXSkge1xuICAgICAgaWYgKCFjaGFuZ2VzIHx8IGNoYW5nZXMuZmllbGQpIHtcbiAgICAgICAgY29uc3QgciA9IHRoaXMuZmllbGQuaG9va3NbbmFtZV0odGhpcy5maWVsZCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUocikgJiYgWydvbkluaXQnLCAnYWZ0ZXJDb250ZW50SW5pdCcsICdhZnRlclZpZXdJbml0J10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICBjb25zdCBzdWIgPSByLnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuaG9va3NPYnNlcnZlcnMucHVzaCgoKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkLmxpZmVjeWNsZSAmJiB0aGlzLmZpZWxkLmxpZmVjeWNsZVtuYW1lXSkge1xuICAgICAgdGhpcy5maWVsZC5saWZlY3ljbGVbbmFtZV0oXG4gICAgICAgIHRoaXMuZmllbGQuZm9ybSxcbiAgICAgICAgdGhpcy5maWVsZCxcbiAgICAgICAgdGhpcy5maWVsZC5tb2RlbCxcbiAgICAgICAgdGhpcy5maWVsZC5vcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSA9PT0gJ29uQ2hhbmdlcycgJiYgY2hhbmdlcy5maWVsZCkge1xuICAgICAgdGhpcy5yZXNldFJlZnMoY2hhbmdlcy5maWVsZC5wcmV2aW91c1ZhbHVlKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hDb21wb25lbnRSZWY8VCBleHRlbmRzIEZpZWxkVHlwZT4ocmVmOiBDb21wb25lbnRSZWY8VD4sIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgdGhpcy5jb21wb25lbnRSZWZzLnB1c2gocmVmKTtcbiAgICBmaWVsZC5fY29tcG9uZW50UmVmcy5wdXNoKHJlZik7XG4gICAgT2JqZWN0LmFzc2lnbihyZWYuaW5zdGFuY2UsIHsgZmllbGQgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZmllbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmhvc3RPYnNlcnZlcnMuZm9yRWFjaCh1bnN1YnNjcmliZSA9PiB1bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmhvc3RPYnNlcnZlcnMgPSBbXG4gICAgICB3cmFwUHJvcGVydHkodGhpcy5maWVsZCwgJ2hpZGUnLCAoeyBmaXJzdENoYW5nZSwgY3VycmVudFZhbHVlIH0pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1seUNvbmZpZy5leHRyYXMubGF6eVJlbmRlcikge1xuICAgICAgICAgIGZpcnN0Q2hhbmdlICYmIHRoaXMucmVuZGVyRmllbGQodGhpcy5jb250YWluZXJSZWYsIHRoaXMuZmllbGQpO1xuICAgICAgICAgIGlmICghZmlyc3RDaGFuZ2UgfHwgKGZpcnN0Q2hhbmdlICYmIGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgY3VycmVudFZhbHVlID8gJ25vbmUnIDogJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckZpZWxkKHRoaXMuY29udGFpbmVyUmVmLCB0aGlzLmZpZWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgd3JhcFByb3BlcnR5KHRoaXMuZmllbGQsICdjbGFzc05hbWUnLCAoeyBmaXJzdENoYW5nZSwgY3VycmVudFZhbHVlIH0pID0+IHtcbiAgICAgICAgaWYgKCFmaXJzdENoYW5nZSB8fCAoZmlyc3RDaGFuZ2UgJiYgY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xhc3MnLCBjdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFJlZnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBpZiAoZmllbGQpIHtcbiAgICAgIGlmIChmaWVsZC5fY29tcG9uZW50UmVmcykge1xuICAgICAgICBmaWVsZC5fY29tcG9uZW50UmVmcyA9IGZpZWxkLl9jb21wb25lbnRSZWZzLmZpbHRlcihyZWYgPT4gdGhpcy5jb21wb25lbnRSZWZzLmluZGV4T2YocmVmKSA9PT0gLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lSGlkZGVuUHJvcCh0aGlzLmZpZWxkLCAnX2NvbXBvbmVudFJlZnMnLCBbXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRSZWZzID0gW107XG4gIH1cbn1cbiJdfQ==
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmZpZWxkLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neC1mb3JtbHkvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2Zvcm1seS5maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQ3RDLGdCQUFnQixFQUFFLFNBQVMsRUFBK0IsU0FBUyxFQUFFLHdCQUF3QixFQUNrQixTQUFTLEVBQUUsVUFBVSxHQUNySSxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQztJQTZCRSxxQkFDVSxZQUEwQixFQUMxQixRQUFtQixFQUNuQixRQUFrQyxFQUNsQyxVQUFzQjtJQUM5QiwyQkFBMkI7SUFDSSxlQUFlO1FBTHRDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTFCaEMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFjZCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3RELGtCQUFhLEdBQWUsRUFBRSxDQUFDO1FBQy9CLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQWUsRUFBRSxDQUFDO1FBQ2hDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQVUvQixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsS0FBSyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQTdCRCxzQkFBYSw4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QW9MdkUsa0JBQUM7Q0FBQSxBQTNNRCxJQTJNQztTQXZNWSxXQUFXOzs7SUFDdEIsNEJBQWtDOztJQUVsQyxzQ0FBd0I7O0lBY3hCLGtDQUE4RDs7SUFFOUQsbUNBQXNHOzs7OztJQUN0RyxvQ0FBdUM7Ozs7O0lBQ3ZDLG9DQUFrQzs7Ozs7SUFDbEMscUNBQXdDOzs7OztJQUN4Qyx1Q0FBaUM7Ozs7O0lBRy9CLG1DQUFrQzs7Ozs7SUFDbEMsK0JBQTJCOzs7OztJQUMzQiwrQkFBMEM7Ozs7O0lBQzFDLGlDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LFxuICBWaWV3Q29udGFpbmVyUmVmLCBWaWV3Q2hpbGQsIENvbXBvbmVudFJlZiwgU2ltcGxlQ2hhbmdlcywgQXR0cmlidXRlLCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIFJlbmRlcmVyMiwgRWxlbWVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtbHlDb25maWcgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtbHkuY29uZmlnJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucywgRm9ybWx5RmllbGRDb25maWdDYWNoZSB9IGZyb20gJy4vZm9ybWx5LmZpZWxkLmNvbmZpZyc7XG5pbXBvcnQgeyBkZWZpbmVIaWRkZW5Qcm9wLCB3cmFwUHJvcGVydHkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQud3JhcHBlcic7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LWZpZWxkJyxcbiAgdGVtcGxhdGU6IGA8bmctdGVtcGxhdGUgI2NvbnRhaW5lcj48L25nLXRlbXBsYXRlPmAsXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1seUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIERvQ2hlY2ssIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZztcblxuICB3YXJuRGVwcmVjYXRpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgbW9kZWwobTogYW55KSB7XG4gICAgdGhpcy53YXJuRGVwcmVjYXRpb24gJiYgY29uc29sZS53YXJuKGBOZ3hGb3JtbHk6IHBhc3NpbmcgJ21vZGVsJyBpbnB1dCB0byAnJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9JyBjb21wb25lbnQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUsIHlvdSBtYXkgcmVtb3ZlIGl0IWApO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZvcm0oZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgdGhpcy53YXJuRGVwcmVjYXRpb24gJiYgY29uc29sZS53YXJuKGBOZ3hGb3JtbHk6IHBhc3NpbmcgJ2Zvcm0nIGlucHV0IHRvICcke3RoaXMuY29uc3RydWN0b3IubmFtZX0nIGNvbXBvbmVudCBpcyBub3QgcmVxdWlyZWQgYW55bW9yZSwgeW91IG1heSByZW1vdmUgaXQhYCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucykge1xuICAgIHRoaXMud2FybkRlcHJlY2F0aW9uICYmIGNvbnNvbGUud2FybihgTmd4Rm9ybWx5OiBwYXNzaW5nICdvcHRpb25zJyBpbnB1dCB0byAnJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9JyBjb21wb25lbnQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUsIHlvdSBtYXkgcmVtb3ZlIGl0IWApO1xuICB9XG5cbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gVE9ETzogcmVtb3ZlIGBhbnlgLCBvbmNlIGRyb3BwaW5nIGFuZ3VsYXIgYFY3YCBzdXBwb3J0LlxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCA8YW55PiB7cmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgcHJpdmF0ZSBob3N0T2JzZXJ2ZXJzOiBGdW5jdGlvbltdID0gW107XG4gIHByaXZhdGUgY29tcG9uZW50UmVmczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBob29rc09ic2VydmVyczogRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIGRldGVjdEZpZWxkQnVpbGQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1seUNvbmZpZzogRm9ybWx5Q29uZmlnLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgIEBBdHRyaWJ1dGUoJ2hpZGUtZGVwcmVjYXRpb24nKSBoaWRlRGVwcmVjYXRpb24sXG4gICkge1xuICAgIHRoaXMud2FybkRlcHJlY2F0aW9uID0gaGlkZURlcHJlY2F0aW9uID09PSBudWxsO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudHJpZ2dlckhvb2soJ2FmdGVyQ29udGVudEluaXQnKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICB0aGlzLnRyaWdnZXJIb29rKCdhZnRlckNvbnRlbnRDaGVja2VkJyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy50cmlnZ2VySG9vaygnYWZ0ZXJWaWV3SW5pdCcpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMudHJpZ2dlckhvb2soJ2FmdGVyVmlld0NoZWNrZWQnKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICB0aGlzLnRyaWdnZXJIb29rKCdkb0NoZWNrJyk7XG4gICAgaWYgKHRoaXMuZGV0ZWN0RmllbGRCdWlsZCAmJiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkLm9wdGlvbnMpKSB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudHJpZ2dlckhvb2soJ29uSW5pdCcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMudHJpZ2dlckhvb2soJ29uQ2hhbmdlcycsIGNoYW5nZXMpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNldFJlZnModGhpcy5maWVsZCk7XG4gICAgdGhpcy5ob3N0T2JzZXJ2ZXJzLmZvckVhY2godW5zdWJzY3JpYmUgPT4gdW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5ob29rc09ic2VydmVycy5mb3JFYWNoKHVuc3Vic2NyaWJlID0+IHVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMudHJpZ2dlckhvb2soJ29uRGVzdHJveScpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJGaWVsZChjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIGY6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHdyYXBwZXJzOiBzdHJpbmdbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMuY29udGFpbmVyUmVmID09PSBjb250YWluZXJSZWYpIHtcbiAgICAgIHRoaXMucmVzZXRSZWZzKHRoaXMuZmllbGQpO1xuICAgICAgdGhpcy5jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgIHdyYXBwZXJzID0gdGhpcy5maWVsZCA/IHRoaXMuZmllbGQud3JhcHBlcnMgOiBbXTtcbiAgICB9XG5cbiAgICBpZiAod3JhcHBlcnMgJiYgd3JhcHBlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgW3dyYXBwZXIsIC4uLndwc10gPSB3cmFwcGVycztcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50IH0gPSB0aGlzLmZvcm1seUNvbmZpZy5nZXRXcmFwcGVyKHdyYXBwZXIpO1xuXG4gICAgICBjb25zdCByZWYgPSBjb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50PEZpZWxkV3JhcHBlcj4odGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpKTtcbiAgICAgIHRoaXMuYXR0YWNoQ29tcG9uZW50UmVmKHJlZiwgZik7XG4gICAgICB3cmFwUHJvcGVydHk8Vmlld0NvbnRhaW5lclJlZj4ocmVmLmluc3RhbmNlLCAnZmllbGRDb21wb25lbnQnLCAoeyBmaXJzdENoYW5nZSwgcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlIH0pID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGlmIChwcmV2aW91c1ZhbHVlICYmIHByZXZpb3VzVmFsdWVbJ19sQ29udGFpbmVyJ10gPT09IGN1cnJlbnRWYWx1ZVsnX2xDb250YWluZXInXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSBwcmV2aW91c1ZhbHVlID8gcHJldmlvdXNWYWx1ZS5kZXRhY2goKSA6IG51bGw7XG4gICAgICAgICAgaWYgKHZpZXdSZWYgJiYgIXZpZXdSZWYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWUuaW5zZXJ0KHZpZXdSZWYpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckZpZWxkKGN1cnJlbnRWYWx1ZSwgZiwgd3BzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAhZmlyc3RDaGFuZ2UgJiYgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmICYmIGYudHlwZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnQgfSA9IHRoaXMuZm9ybWx5Q29uZmlnLmdldFR5cGUoZi50eXBlKTtcbiAgICAgIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQ8RmllbGRXcmFwcGVyPih0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCkpO1xuICAgICAgdGhpcy5hdHRhY2hDb21wb25lbnRSZWYocmVmLCBmKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJIb29rKG5hbWU6IHN0cmluZywgY2hhbmdlcz86IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkLmhvb2tzICYmIHRoaXMuZmllbGQuaG9va3NbbmFtZV0pIHtcbiAgICAgIGlmICghY2hhbmdlcyB8fCBjaGFuZ2VzLmZpZWxkKSB7XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLmZpZWxkLmhvb2tzW25hbWVdKHRoaXMuZmllbGQpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHIpICYmIFsnb25Jbml0JywgJ2FmdGVyQ29udGVudEluaXQnLCAnYWZ0ZXJWaWV3SW5pdCddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgY29uc3Qgc3ViID0gci5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLmhvb2tzT2JzZXJ2ZXJzLnB1c2goKCkgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmllbGQgJiYgdGhpcy5maWVsZC5saWZlY3ljbGUgJiYgdGhpcy5maWVsZC5saWZlY3ljbGVbbmFtZV0pIHtcbiAgICAgIHRoaXMuZmllbGQubGlmZWN5Y2xlW25hbWVdKFxuICAgICAgICB0aGlzLmZpZWxkLmZvcm0sXG4gICAgICAgIHRoaXMuZmllbGQsXG4gICAgICAgIHRoaXMuZmllbGQubW9kZWwsXG4gICAgICAgIHRoaXMuZmllbGQub3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdvbkNoYW5nZXMnICYmIGNoYW5nZXMuZmllbGQpIHtcbiAgICAgIHRoaXMucmVzZXRSZWZzKGNoYW5nZXMuZmllbGQucHJldmlvdXNWYWx1ZSk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoQ29tcG9uZW50UmVmPFQgZXh0ZW5kcyBGaWVsZFR5cGU+KHJlZjogQ29tcG9uZW50UmVmPFQ+LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIHRoaXMuY29tcG9uZW50UmVmcy5wdXNoKHJlZik7XG4gICAgZmllbGQuX2NvbXBvbmVudFJlZnMucHVzaChyZWYpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVmLmluc3RhbmNlLCB7IGZpZWxkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLmZpZWxkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gcmVxdWlyZSBGb3JtbHkgYnVpbGRcbiAgICBpZiAoIXRoaXMuZmllbGQub3B0aW9ucykge1xuICAgICAgdGhpcy5kZXRlY3RGaWVsZEJ1aWxkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGV0ZWN0RmllbGRCdWlsZCA9IGZhbHNlO1xuICAgIHRoaXMuaG9zdE9ic2VydmVycy5mb3JFYWNoKHVuc3Vic2NyaWJlID0+IHVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuaG9zdE9ic2VydmVycyA9IFtcbiAgICAgIHdyYXBQcm9wZXJ0eSh0aGlzLmZpZWxkLCAnaGlkZScsICh7IGZpcnN0Q2hhbmdlLCBjdXJyZW50VmFsdWUgfSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybWx5Q29uZmlnLmV4dHJhcy5sYXp5UmVuZGVyKSB7XG4gICAgICAgICAgZmlyc3RDaGFuZ2UgJiYgdGhpcy5yZW5kZXJGaWVsZCh0aGlzLmNvbnRhaW5lclJlZiwgdGhpcy5maWVsZCk7XG4gICAgICAgICAgaWYgKCFmaXJzdENoYW5nZSB8fCAoZmlyc3RDaGFuZ2UgJiYgY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCBjdXJyZW50VmFsdWUgPyAnbm9uZScgOiAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5maWVsZC5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGFzcycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckZpZWxkKHRoaXMuY29udGFpbmVyUmVmLCB0aGlzLmZpZWxkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsYXNzJywgdGhpcy5maWVsZC5jbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB3cmFwUHJvcGVydHkodGhpcy5maWVsZCwgJ2NsYXNzTmFtZScsICh7IGZpcnN0Q2hhbmdlLCBjdXJyZW50VmFsdWUgfSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKCFmaXJzdENoYW5nZSB8fCAoZmlyc3RDaGFuZ2UgJiYgY3VycmVudFZhbHVlKSlcbiAgICAgICAgICAmJiAoIXRoaXMuZm9ybWx5Q29uZmlnLmV4dHJhcy5sYXp5UmVuZGVyIHx8ICh0aGlzLmZpZWxkLmhpZGUgIT09IHRydWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsYXNzJywgY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRSZWZzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBpZiAoZmllbGQuX2NvbXBvbmVudFJlZnMpIHtcbiAgICAgICAgZmllbGQuX2NvbXBvbmVudFJlZnMgPSBmaWVsZC5fY29tcG9uZW50UmVmcy5maWx0ZXIocmVmID0+IHRoaXMuY29tcG9uZW50UmVmcy5pbmRleE9mKHJlZikgPT09IC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmluZUhpZGRlblByb3AodGhpcy5maWVsZCwgJ19jb21wb25lbnRSZWZzJywgW10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50UmVmcyA9IFtdO1xuICB9XG59XG4iXX0=