@sapui5/sap.fe.base 1.125.0 → 1.126.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -244,6 +244,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
244
244
  _exports.property = property;
245
245
  function aggregation(aggregationDefinition) {
246
246
  return function (target, propertyKey, propertyDescriptor) {
247
+ var _initializer2, _ref2;
247
248
  const metadata = ensureMetadata(target);
248
249
  if (aggregationDefinition.multiple === undefined) {
249
250
  // UI5 defaults this to true but this is just weird...
@@ -256,6 +257,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
256
257
  metadata.defaultAggregation = propertyKey;
257
258
  }
258
259
  delete propertyDescriptor.writable;
260
+ aggregationDefinition.defaultValue ??= (_initializer2 = (_ref2 = propertyDescriptor).initializer) === null || _initializer2 === void 0 ? void 0 : _initializer2.call(_ref2);
259
261
  delete propertyDescriptor.initializer;
260
262
  return propertyDescriptor;
261
263
  }; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
@@ -450,6 +452,8 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
450
452
  const aPropertyKeys = Object.keys(obj.metadata.properties);
451
453
  aPropertyKeys.forEach(propertyKey => {
452
454
  const propertyDef = obj.metadata.properties[propertyKey];
455
+ // If a value was set in `init` we need to make sure it is set in the value in the end
456
+ const propertyDefault = this[propertyKey] ?? propertyDef.defaultValue;
453
457
  if (propertyDef.isBindingInfo === true) {
454
458
  this._bindingProperties ??= {};
455
459
  Object.defineProperty(this, propertyKey, {
@@ -460,7 +464,15 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
460
464
  return this;
461
465
  },
462
466
  get() {
463
- const propValue = this._bindingProperties[propertyKey] ?? this.getProperty(propertyKey);
467
+ // Special case we need to consider the property first and not just the _bindingProperties
468
+ // During the initialization, if the property is set with a non binding value, setProperty is called and not bindProperty
469
+ const propertyValue = this.getProperty(propertyKey);
470
+ const bindingPropertyValue = this._bindingProperties[propertyKey];
471
+ // If the property is set to a different value we update the _bindingProperties
472
+ if (propertyValue && propertyValue !== bindingPropertyValue) {
473
+ this._bindingProperties[propertyKey] = propertyValue;
474
+ }
475
+ const propValue = this._bindingProperties[propertyKey];
464
476
  if (typeof propValue === "object") {
465
477
  return {
466
478
  ...propValue
@@ -481,15 +493,17 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
481
493
  }
482
494
  });
483
495
  }
484
- if (propertyDef.defaultValue !== undefined) {
496
+ if (propertyDefault !== undefined) {
485
497
  this._applyingSettings = true;
486
- this[propertyKey] = propertyDef.defaultValue;
498
+ this[propertyKey] = propertyDefault;
487
499
  this._applyingSettings = false;
488
500
  delete this._applyingSettings;
489
501
  }
490
502
  });
491
503
  const aAggregationKeys = Object.keys(obj.metadata.aggregations);
492
504
  aAggregationKeys.forEach(aggregationKey => {
505
+ const aggregationDef = obj.metadata.aggregations[aggregationKey];
506
+ const defaultValue = this[aggregationKey] ?? aggregationDef.defaultValue;
493
507
  Object.defineProperty(this, aggregationKey, {
494
508
  configurable: true,
495
509
  set: v => {
@@ -504,6 +518,12 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
504
518
  }
505
519
  }
506
520
  });
521
+ if (defaultValue && defaultValue !== null && defaultValue !== void 0 && defaultValue.isA) {
522
+ this._applyingSettings = true;
523
+ this[aggregationKey] = defaultValue;
524
+ this._applyingSettings = false;
525
+ delete this._applyingSettings;
526
+ }
507
527
  });
508
528
  const aAssociationKeys = Object.keys(obj.metadata.associations);
509
529
  aAssociationKeys.forEach(associationKey => {
@@ -587,4 +607,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/merge", "sap/base/util
587
607
  }
588
608
  return _exports;
589
609
  }, false);
590
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJsZW5ndGgiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJtZXRob2RPdmVycmlkZSIsImV4dGVuc2lvbk5hbWUiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uVHlwZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwicHVibGljRXh0ZW5zaW9uIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJwcml2YXRlRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJmaW5hbCIsInVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsInVuZGVmaW5lZCIsImlzQmluZGluZ0luZm8iLCJncm91cCIsIndyaXRhYmxlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsImFyZ3MiLCJkZWZpbmVVSTVDbGFzcyIsInNUYXJnZXQiLCJtZXRhZGF0YURlZmluaXRpb24iLCJmb3JjZURlZmluZUNhbGwiLCJwcm90b3R5cGUiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsImNsYXp6IiwibmFtZSIsImluT2JqIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZXh0ZW5kIiwiZm5Jbml0IiwiaW5pdCIsImFwcGx5IiwiYVByb3BlcnR5S2V5cyIsInByb3BlcnR5RGVmIiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJ2IiwibVByb3BlcnRpZXMiLCJwcm9wVmFsdWUiLCJnZXRQcm9wZXJ0eSIsInNldFByb3BlcnR5IiwiX2FwcGx5aW5nU2V0dGluZ3MiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiYUFzc29jaWF0aW9uS2V5cyIsImFzc29jaWF0aW9uS2V5Iiwic2V0QXNzb2NpYXRpb24iLCJnZXRBc3NvY2lhdGlvbiIsInJlZmVyZW5jZVByb3BlcnRpZXMiLCJ2YWx1ZSIsIm1ldGhvZE5hbWUiLCJtZXRob2REZWZpbml0aW9uIiwibWV0aG9kSG9sZGVyIiwibWV0aG9kQXJyYXlzIiwicmV2ZXJzZSIsIm1ldGhvZEFyZ3MiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiLCJzYXAiLCJ1aSIsImRlZmluZSIsInJlcGxhY2VBbGwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbnR5cGUgVUk1UHJvcGVydHlNZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRiaW5kYWJsZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdGJ5VmFsdWU/OiBib29sZWFuO1xuXHRpc0JpbmRpbmdJbmZvPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcbn07XG5leHBvcnQgdHlwZSBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGFsdFR5cGVzPzogc3RyaW5nW107XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0aXNEZWZhdWx0PzogYm9vbGVhbjtcblx0ZGVmYXVsdENsYXNzPzogdW5rbm93bjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xuXHR2aXNpYmlsaXR5Pzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUFzc29jaWF0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiA9IHtcblx0ZGVmYXVsdEFnZ3JlZ2F0aW9uPzogc3RyaW5nO1xuXHRjb250cm9sbGVyRXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgdHlwZW9mIENvbnRyb2xsZXJFeHRlbnNpb24gfCBGdW5jdGlvbj47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFVJNVByb3BlcnR5TWV0YWRhdGE+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGE+O1xuXHRyZWZlcmVuY2VzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblx0YXNzb2NpYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhPjtcblx0bWV0aG9kczogUmVjb3JkPHN0cmluZywgVUk1Q29udHJvbGxlck1ldGhvZERlZmluaXRpb24+O1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIHt9Pjtcblx0aW50ZXJmYWNlczogc3RyaW5nW107XG5cdGxpYnJhcnk/OiBzdHJpbmc7XG5cdGRlc2lnbnRpbWU/OiBzdHJpbmc7XG5cdGNvbmZpZz86IHtcblx0XHRmdWxsV2lkdGg/OiBib29sZWFuO1xuXHR9O1xuXHRtYW5pZmVzdD86IHN0cmluZyB8IHVua25vd247XG5cdHJldHVyblR5cGVzPzogc3RyaW5nW107XG5cdGJ1aWxkaW5nQmxvY2tNZXRhZGF0YT86IHVua25vd247XG59O1xudHlwZSBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGU/OiB7IGV4dGVuc2lvbj86IFJlY29yZDxzdHJpbmcsIE92ZXJyaWRlRGVmaW5pdGlvbj4gfSAmIHtcblx0XHRbazogc3RyaW5nXTogRnVuY3Rpb247XG5cdH07XG5cdG92ZXJyaWRlcz86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0bWV0YWRhdGE/OiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZW5kZXJlcj86IEZ1bmN0aW9uO1xufTtcblxudHlwZSBVSTVDb250cm9sRGVmaW5pdGlvbiA9IHtcblx0bWV0YWRhdGE/OiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRvdmVycmlkZT86IHVua25vd247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUFQSUNvbnRyb2wgPSBDb250cm9sICYge1xuXHRnZXRBUEkoZXZlbnQ6IFVJNUV2ZW50LCBmcWRuPzogc3RyaW5nKTogVUk1QVBJQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0aW5zdGFuY2VNYXA6IFdlYWtNYXA8b2JqZWN0LCBvYmplY3RbXT47XG5cdF9fYXBpUmVnaXN0ZXJlZDogYm9vbGVhbjtcbn0gJiB7XG5cdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG5cbmV4cG9ydCB0eXBlIFhNTEV2ZW50SG9sZGVyID0ge1xuXHRnZXRBUEkoZXZlbnQ6IFVJNUV2ZW50LCBmcWRuPzogc3RyaW5nKTogVUk1QVBJQ29udHJvbCB8IHVuZGVmaW5lZDtcblx0aW5zdGFuY2VNYXA6IFdlYWtNYXA8b2JqZWN0LCBvYmplY3RbXT47XG59O1xuXG50eXBlIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+ID0ge1xuXHQvLyBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgVFMgY29tcGlsZXJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBGdW5jdGlvbiA/IG5ldmVyIDogSztcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2Y8VCwgSyBleHRlbmRzIGtleW9mIFQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+ID0gUGFydGlhbDxQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+Pj4gJlxuXHQoSyBleHRlbmRzIGtleW9mIFQgPyBQYXJ0aWFsPFBpY2s8VCwgSz4+IDoge30pICZcblx0JENvbnRyb2xTZXR0aW5ncztcbmV4cG9ydCB0eXBlIENvbnZlcnRDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBLIGV4dGVuZHMgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiID8gc3RyaW5nIDogVFtLXTtcbn07XG5leHBvcnQgdHlwZSBTdHJpY3RQcm9wZXJ0aWVzT2Y8VCwgSyBleHRlbmRzIGtleW9mIFQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+ID0gUGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4gJlxuXHQoSyBleHRlbmRzIGtleW9mIFQgPyBQaWNrPFQsIEs+IDoge30pICZcblx0JENvbnRyb2xTZXR0aW5ncztcbmV4cG9ydCB0eXBlIFVJNUFjY2Vzc29yczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgZ2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBnZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICgpID0+IFRbUF07XG59O1xuZXhwb3J0IHR5cGUgVUk1U2V0dGVyczxUPiA9IHtcblx0Ly8gQWRkIGFsbCB0aGUgc2V0WFhYIG1ldGhvZCwgbWlnaHQgYWRkIHRvbyBtdWNoIGFzIEknbSBub3QgZmlsdGVyaW5nIG9uIGFjdHVhbCBwcm9wZXJ0aWVzLi4uXG5cdFtQIGluIGtleW9mIFJlcXVpcmVkPFQ+IGFzIGBzZXQke0NhcGl0YWxpemU8c3RyaW5nICYgUD59YF06ICh2YWx1ZTogVFtQXSkgPT4gVDtcbn07XG5leHBvcnQgdHlwZSBFbmhhbmNlV2l0aFVJNTxUPiA9IHtcblx0bmV3IChwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG5cdG5ldyAoc0lkOiBzdHJpbmcsIHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcbn0gJiBUICZcblx0VUk1QWNjZXNzb3JzPFQ+ICZcblx0VUk1U2V0dGVyczxUPjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uKTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbiB7XG5cdHRhcmdldC5tZXRhZGF0YSA9IG1lcmdlKFxuXHRcdHtcblx0XHRcdGNvbnRyb2xsZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdHByb3BlcnRpZXM6IHt9LFxuXHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdHJlZmVyZW5jZXM6IHt9LFxuXHRcdFx0YXNzb2NpYXRpb25zOiB7fSxcblx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0ZXZlbnRzOiB7fSxcblx0XHRcdGludGVyZmFjZXM6IFtdXG5cdFx0fSxcblx0XHR0YXJnZXQubWV0YWRhdGEgPz8ge31cblx0KSBhcyBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdGhhdCB3aWxsIGZpbmQgdGhlIGNvcnJlY3QgQVBJIG9iamVjdCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250cm9sIGhpZXJhcmNoeS5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0XG4gKiBAcmV0dXJucyBUaGUgcHJvcGVyIGdldEFQSSBmdW5jdGlvbiBmb3IgdGhpcyBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0OiBVSTVBUElDb250cm9sKSB7XG5cdHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIFVJNUFQSUNvbnRyb2w+KFxuXHRcdHRoaXM6IFVJNUFQSUNvbnRyb2wsXG5cdFx0b0V2ZW50OiBVSTVFdmVudCxcblx0XHRhcGlGUU46IHN0cmluZyA9IHRhcmdldC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKVxuXHQpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb1NvdXJjZSA9IG9FdmVudC5nZXRTb3VyY2UoKSBhcyBNYW5hZ2VkT2JqZWN0IHwgbnVsbDtcblx0XHRpZiAodGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24pIHtcblx0XHRcdG9Tb3VyY2UgPSB0YXJnZXQuX2dldEFQSUV4dGVuc2lvbihvU291cmNlKSA/PyBvU291cmNlO1xuXHRcdH1cblx0XHR3aGlsZSAob1NvdXJjZSAmJiAhb1NvdXJjZS5pc0E8VD4oYXBpRlFOKSAmJiBvU291cmNlLmdldFBhcmVudCkge1xuXHRcdFx0aWYgKHRoaXMuaXNEZXBlbmRlbnRCb3VuZCkge1xuXHRcdFx0XHRjb25zdCBvRGVwZW5kZW50cyA9IChvU291cmNlIGFzIENvbnRyb2wpLmdldERlcGVuZGVudHMoKTtcblx0XHRcdFx0Y29uc3QgaGFzQ29ycmVjdERlcGVuZGVudCA9IG9EZXBlbmRlbnRzLmZpbmQoKG9EZXBlbmRlbnQ6IFVJNUVsZW1lbnQpID0+IG9EZXBlbmRlbnQuaXNBKGFwaUZRTikpO1xuXHRcdFx0XHRpZiAoaGFzQ29ycmVjdERlcGVuZGVudCkge1xuXHRcdFx0XHRcdG9Tb3VyY2UgPSBoYXNDb3JyZWN0RGVwZW5kZW50IGFzIHVua25vd24gYXMgVDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKSBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9Tb3VyY2UgPSBvU291cmNlLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghb1NvdXJjZSB8fCAhb1NvdXJjZS5pc0E8VD4oYXBpRlFOKSkge1xuXHRcdFx0Y29uc3Qgb1NvdXJjZU1hcCA9IHRoaXMuaW5zdGFuY2VNYXAuZ2V0KHRoaXMpIGFzIFRbXTtcblx0XHRcdG9Tb3VyY2UgPSBvU291cmNlTWFwPy5bb1NvdXJjZU1hcC5sZW5ndGggLSAxXTtcblx0XHR9XG5cdFx0bGV0IHRhcmdldENvbnRyb2w7XG5cdFx0aWYgKG9Tb3VyY2UgJiYgb1NvdXJjZS5pc0E8VD4oYXBpRlFOKSkge1xuXHRcdFx0dGFyZ2V0Q29udHJvbCA9IG9Tb3VyY2U7XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXRDb250cm9sO1xuXHR9O1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB3aGVuIGFuIHhtbEV2ZW50SGFuZGxlciBpcyBkZWZpbmVkLCB0aGUgYGdldEFQSWAgZnVuY3Rpb24gaXMgcHJvcGVybHkgYXNzaWduZWQuXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBzaG91bGQgaG9sZCB0aGUgc3RhdGljIGZ1bmN0aW9uc1xuICovXG5jb25zdCBlbnN1cmVHZXRBUEkgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVBUElDb250cm9sKTogdm9pZCB7XG5cdGlmICghdGFyZ2V0Ll9fYXBpUmVnaXN0ZXJlZCkge1xuXHRcdHRhcmdldC5fX2FwaVJlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHRhcmdldC5pbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+KCk7XG5cdFx0dGFyZ2V0LnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoX2luc3RhbmNlOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0aWYgKCF0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpKSB7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2VNYXAuc2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvciwgW10pO1xuXHRcdFx0fVxuXHRcdFx0KHRoaXMuaW5zdGFuY2VNYXAuZ2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvcikgYXMgb2JqZWN0W10pLnB1c2goX2luc3RhbmNlKTtcblx0XHR9O1xuXHRcdHRhcmdldC5nZXRBUEkgPSBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0KTtcblx0fVxufTtcblxuLyogI3JlZ2lvbiBDT05UUk9MTEVSIEVYVEVOU0lPTlMgKi9cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBtZXRob2QgaXMgYW4gb3ZlcnJpZGUgZm9yIHRoZSBtZXRob2QgbmFtZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlIHNwZWNpZmljIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9yIGJhc2UgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqXG4gKiBAcGFyYW0gb3ZlcnJpZGVFeGVjdXRpb25UeXBlIFRoZSBPdmVycmlkZUV4ZWN1dGlvbiBkZWZpbmluZyB3aGVuIHRoZSBvdmVycmlkZSBzaG91bGQgcnVuIChCZWZvcmUgLyBBZnRlciAvIEluc3RlYWQpXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5zaWJsZShvdmVycmlkZUV4ZWN1dGlvblR5cGU/OiBPdmVycmlkZUV4ZWN1dGlvbiB8IFwiQWZ0ZXJBc3luY1wiIHwgXCJCZWZvcmVBc3luY1wiKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5vdmVycmlkZUV4ZWN1dGlvbiA9IG92ZXJyaWRlRXhlY3V0aW9uVHlwZSBhcyB1bmtub3duIGFzIE92ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIHdpbGwgYmUgcHVibGljbHkgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyIGV4dGVuc2lvbiB1c2FnZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaXZhdGVFeHRlbnNpb24oKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1YmxpYyA9IGZhbHNlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCBjYW5ub3QgYmUgZnVydGhlciBleHRlbmRlZCBieSBvdGhlciBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluYWxFeHRlbnNpb24oKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLmZpbmFsID0gdHJ1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgd2UgYXJlIGdvaW5nIHRvIHVzZSBpbnN0YW50aWF0ZSBhIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHVuZGVyIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIGV2ZW50S2V5KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGluIHRoZSBjb250cm9sIG1ldGF0YWRhLlxuICpcbiAqIEBwYXJhbSBhdHRyaWJ1dGVEZWZpbml0aW9uIFRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkoYXR0cmlidXRlRGVmaW5pdGlvbjogVUk1UHJvcGVydHlNZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5pc0JpbmRpbmdJbmZvID09PSB0cnVlKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gZmFsc2U7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmdyb3VwID0gXCJEYXRhXCI7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA/Pz0gKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogRnVuY3Rpb24gfSkuaW5pdGlhbGl6ZXI/LigpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgYWdncmVnYXRpb24gaW4gdGhlIGNvbnRyb2wgbWV0YXRhZGEuXG4gKlxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiBUaGUgYWdncmVnYXRpb24gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjogVUk1QWdncmVnYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChhZ2dyZWdhdGlvbkRlZmluaXRpb24ubXVsdGlwbGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gVUk1IGRlZmF1bHRzIHRoaXMgdG8gdHJ1ZSBidXQgdGhpcyBpcyBqdXN0IHdlaXJkLi4uXG5cdFx0XHRhZ2dyZWdhdGlvbkRlZmluaXRpb24ubXVsdGlwbGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gYWdncmVnYXRpb25EZWZpbml0aW9uO1xuXHRcdH1cblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLmlzRGVmYXVsdCkge1xuXHRcdFx0bWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uID0gcHJvcGVydHlLZXk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuZCBjb25maWd1cmUgdGhlIGZvbGxvd2luZyBhc3NvY2lhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhdGFkYS5cbiAqXG4gKiBAcGFyYW0gdWk1QXNzb2NpYXRpb25NZXRhZGF0YSBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgYXNzb2NpYXRpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NvY2lhdGlvbih1aTVBc3NvY2lhdGlvbk1ldGFkYXRhOiBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hc3NvY2lhdGlvbnNbcHJvcGVydHlLZXldID0gdWk1QXNzb2NpYXRpb25NZXRhZGF0YTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIGludGVyZmFjZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGltcGxlbWVudGVkIGludGVyZmFjZVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcGxlbWVudEludGVyZmFjZShpbnRlcmZhY2VOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblxuXHRcdG1ldGFkYXRhLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VOYW1lKTtcblx0fTtcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIG1ldGhvZCBzaG91bGQgYWxzbyBiZSBleHBvc2VkIHN0YXRpY2FsbHkgc28gd2UgY2FuIGNhbGwgaXQgZnJvbSBYTUwuXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50SGFuZGxlcigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5a2V5KSB7XG5cdFx0Y29uc3QgY3VycmVudENvbnN0cnVjdG9yOiBVSTVBUElDb250cm9sID0gdGFyZ2V0LmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgVUk1QVBJQ29udHJvbDtcblx0XHRlbnN1cmVHZXRBUEkoY3VycmVudENvbnN0cnVjdG9yKTtcblx0XHRjdXJyZW50Q29uc3RydWN0b3JbcHJvcGVydHlrZXkudG9TdHJpbmcoKV0gPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0XHRpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudENvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRcdFx0Y3VycmVudFRhcmdldD8uW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG59XG5cbnR5cGUgVUk1Q29udHJvbEFuZE1vcmUgPSB0eXBlb2YgQ29udHJvbCAmXG5cdEZ1bmN0aW9uICYge1xuXHRcdHJlZ2lzdGVySW5zdGFuY2U/OiBGdW5jdGlvbjtcblx0XHRvdmVycmlkZT86IEZ1bmN0aW9uO1xuXHRcdHJlbmRlcmVyPzogdW5rbm93bjtcblx0XHRyZW5kZXI6IEZ1bmN0aW9uO1xuXHRcdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0fTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIGNsYXNzIHNob3VsZCBkZWZpbmUgYSBVSTUgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gKlxuICogQHBhcmFtIHNUYXJnZXQgVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBVSTUgY2xhc3NcbiAqIEBwYXJhbSBtZXRhZGF0YURlZmluaXRpb24gSW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEBwYXJhbSBmb3JjZURlZmluZUNhbGwgV2hldGhlciBhIGRlZmluZSBjYWxsIHNob3VsZCBiZSBhZGRlZCBmb3IgdGhpcywgdXNlZnVsIHdoZW4gZGVmaW5pbmcgc3ViIGNsYXNzZXNcbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgd2lsbCBjcmVhdGUgYSB1aTUgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVJNUNsYXNzKFxuXHRzVGFyZ2V0OiBzdHJpbmcsXG5cdG1ldGFkYXRhRGVmaW5pdGlvbj86IFBhcnRpYWw8VUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbj4sXG5cdGZvcmNlRGVmaW5lQ2FsbCA9IGZhbHNlXG4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoY29uc3RydWN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRpZiAobWV0YWRhdGFEZWZpbml0aW9uKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdFx0aWYgKGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSB7XG5cdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pKSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldLmNvbmNhdChcblx0XHRcdFx0XHRcdFx0bWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSB7XG5cdFx0XHRcdFx0XHRcdC4uLmNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldLFxuXHRcdFx0XHRcdFx0XHQuLi4obWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXSBhcyBvYmplY3QpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlZ2lzdGVyVUk1TWV0YWRhdGEoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZm9yY2VEZWZpbmVDYWxsKTtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZmVyZW5jZTxUIGV4dGVuZHMgVUk1RWxlbWVudD4oKTogUmVmPFQ+IHtcblx0cmV0dXJuIHtcblx0XHRjdXJyZW50OiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBULFxuXHRcdHNldEN1cnJlbnQ6IGZ1bmN0aW9uIChvQ29udHJvbEluc3RhbmNlOiBUKTogdm9pZCB7XG5cdFx0XHR0aGlzLmN1cnJlbnQgPSBvQ29udHJvbEluc3RhbmNlO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgb2JqZWN0IHdpbGwgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNvbnRyb2wgdGhyb3VnaCBqc3ggdGVtcGxhdGluZy5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBoZWF2eSBsaWZ0aW5nIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgY3JlYXRpbmcgdGhlIGNsYXNzIHByb3BlcnR5IGZvciB1aTUgdG8gdXNlLlxuICpcbiAqIEBwYXJhbSBjbGF6eiBUaGUgY2xhc3MgcHJvdG90eXBlXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgdG8gY3JlYXRlXG4gKiBAcGFyYW0gaW5PYmogVGhlIG1ldGFkYXRhIG9iamVjdFxuICogQHBhcmFtIGZvcmNlRGVmaW5lQ2FsbCBXaGV0aGVyIGEgZGVmaW5lIGNhbGwgc2hvdWxkIGJlIGFkZGVkIGZvciB0aGlzLCB1c2VmdWwgd2hlbiBkZWZpbmluZyBzdWIgY2xhc3Nlc1xuICogQHJldHVybnMgVGhlIG1ldGFkYXRhIGNsYXNzXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyVUk1TWV0YWRhdGEoXG5cdGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSxcblx0bmFtZTogc3RyaW5nLFxuXHRpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0Zm9yY2VEZWZpbmVDYWxsOiBib29sZWFuXG4pOiBGdW5jdGlvbiB7XG5cdGlmIChjbGF6ei5nZXRNZXRhZGF0YT8uKCkuaXNBKFwic2FwLnVpLmNvcmUubXZjLkNvbnRyb2xsZXJFeHRlbnNpb25cIikpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpbk9iaikuZm9yRWFjaCgob2JqTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5PYmosIG9iak5hbWUpO1xuXHRcdFx0aWYgKGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuXHRcdFx0XHRkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdG9iai5tZXRhZGF0YSA9IGluT2JqLm1ldGFkYXRhIHx8IHt9O1xuXHRvYmoub3ZlcnJpZGUgPSBpbk9iai5vdmVycmlkZTtcblx0b2JqLmNvbnN0cnVjdG9yID0gY2xheno7XG5cdG9iai5tZXRhZGF0YS5iYXNlVHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGF6ei5wcm90b3R5cGUpLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXG5cdGlmICgoY2xheno/LmdldE1ldGFkYXRhKCkgYXMgdW5rbm93biBhcyB7IGdldFN0ZXJlb3R5cGU6IEZ1bmN0aW9uIH0pPy5nZXRTdGVyZW90eXBlKCkgPT09IFwiY29udHJvbFwiKSB7XG5cdFx0Y29uc3QgcmVuZGVyZXJEZWZpbml0aW9uID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyO1xuXHRcdG9iai5yZW5kZXJlciA9IHsgYXBpVmVyc2lvbjogMiB9O1xuXHRcdGlmICh0eXBlb2YgcmVuZGVyZXJEZWZpbml0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdG9iai5yZW5kZXJlci5yZW5kZXIgPSByZW5kZXJlckRlZmluaXRpb247XG5cdFx0fSBlbHNlIGlmIChyZW5kZXJlckRlZmluaXRpb24gIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvYmoucmVuZGVyZXIgPSByZW5kZXJlckRlZmluaXRpb247XG5cdFx0fVxuXHR9XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdE9iamVjdC5rZXlzKGNsYXp6LnByb3RvdHlwZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKGtleSAhPT0gXCJtZXRhZGF0YVwiKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvYmpba2V5XSA9IGNsYXp6LnByb3RvdHlwZVtrZXldO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHQvLyBEbyBub3RoaW5nXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRpZiAob2JqLm1ldGFkYXRhPy5jb250cm9sbGVyRXh0ZW5zaW9ucyAmJiBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGNFeHROYW1lIGluIG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykge1xuXHRcdFx0b2JqW2NFeHROYW1lXSA9IG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9uc1tjRXh0TmFtZV07XG5cdFx0fVxuXHR9XG5cdGNvbnN0IG91dHB1dCA9IGNsYXp6LmV4dGVuZChuYW1lLCBvYmopIGFzIHR5cGVvZiBDb250cm9sICYgRnVuY3Rpb247XG5cdGNvbnN0IGZuSW5pdCA9IG91dHB1dC5wcm90b3R5cGUuaW5pdDtcblx0b3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdGlmIChmbkluaXQpIHtcblx0XHRcdGZuSW5pdC5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9XG5cdFx0aWYgKGNsYXp6LnJlZ2lzdGVySW5zdGFuY2UpIHtcblx0XHRcdGNsYXp6LnJlZ2lzdGVySW5zdGFuY2UodGhpcyk7XG5cdFx0fVxuXHRcdHRoaXMubWV0YWRhdGEgPSBvYmoubWV0YWRhdGE7XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpIHtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0eUtleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucHJvcGVydGllcyk7XG5cdFx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmID0gb2JqLm1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRpZiAocHJvcGVydHlEZWYuaXNCaW5kaW5nSW5mbyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzID8/PSB7fTtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA/PyB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFnZ3JlZ2F0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFnZ3JlZ2F0aW9uc1thZ2dyZWdhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnMpO1xuXHRcdFx0YUFzc29jaWF0aW9uS2V5cy5mb3JFYWNoKChhc3NvY2lhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYXNzb2NpYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zW2Fzc29jaWF0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEucmVmZXJlbmNlcykge1xuXHRcdFx0Y29uc3QgcmVmZXJlbmNlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKTtcblx0XHRcdHJlZmVyZW5jZVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiBjcmVhdGVSZWZlcmVuY2UoKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdGZvciAoY29uc3QgbWV0aG9kTmFtZSBpbiBvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0XHRjb25zdCBtZXRob2REZWZpbml0aW9uID0gb2JqLm1ldGFkYXRhLm1ldGhvZHNbbWV0aG9kTmFtZV07XG5cdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkFmdGVyQXN5bmNcIiB8fCBtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMubWV0aG9kSG9sZGVyKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlciA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXSA9IFt0aGlzW21ldGhvZE5hbWVdXTtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbWV0aG9kTmFtZSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogRnVuY3Rpb24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdLnB1c2godik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhc3luYyAoLi4ubWV0aG9kQXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWV0aG9kQXJyYXlzID0gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWV0aG9kQXJyYXlzLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhcmcgb2YgbWV0aG9kQXJyYXlzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhd2FpdCBhcmcuYXBwbHkodGhpcywgbWV0aG9kQXJncyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRpZiAoZm9yY2VEZWZpbmVDYWxsKSB7XG5cdFx0c2FwLnVpLmRlZmluZShvdXRwdXQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gb3V0cHV0O1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG91dHB1dDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUE2SEEsTUFBTUEsY0FBYyxHQUFHLFVBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hDLE1BQU0sRUFBRSxDQUFDLENBQUM7TUFDVkMsVUFBVSxFQUFFO0lBQ2IsQ0FBQyxFQUNEVixNQUFNLENBQUNDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FDVztJQUNqQyxPQUFPRCxNQUFNLENBQUNDLFFBQVE7RUFDdkIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTVSxxQkFBcUIsQ0FBQ1gsTUFBcUIsRUFBRTtJQUNyRCxPQUFPLFVBRU5ZLE1BQWdCLEVBRUE7TUFBQSxJQURoQkMsTUFB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
610
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsIm1ldGFkYXRhIiwibWVyZ2UiLCJjb250cm9sbGVyRXh0ZW5zaW9ucyIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJyZWZlcmVuY2VzIiwiYXNzb2NpYXRpb25zIiwibWV0aG9kcyIsImV2ZW50cyIsImludGVyZmFjZXMiLCJwcmVwYXJlR2V0QVBJRnVuY3Rpb24iLCJvRXZlbnQiLCJhcGlGUU4iLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvU291cmNlIiwiZ2V0U291cmNlIiwiX2dldEFQSUV4dGVuc2lvbiIsImlzQSIsImdldFBhcmVudCIsImlzRGVwZW5kZW50Qm91bmQiLCJvRGVwZW5kZW50cyIsImdldERlcGVuZGVudHMiLCJoYXNDb3JyZWN0RGVwZW5kZW50IiwiZmluZCIsIm9EZXBlbmRlbnQiLCJvU291cmNlTWFwIiwiaW5zdGFuY2VNYXAiLCJnZXQiLCJsZW5ndGgiLCJ0YXJnZXRDb250cm9sIiwiZW5zdXJlR2V0QVBJIiwiX19hcGlSZWdpc3RlcmVkIiwiV2Vha01hcCIsInJlZ2lzdGVySW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjb25zdHJ1Y3RvciIsInNldCIsInB1c2giLCJnZXRBUEkiLCJtZXRob2RPdmVycmlkZSIsImV4dGVuc2lvbk5hbWUiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uVHlwZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwicHVibGljRXh0ZW5zaW9uIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdWJsaWMiLCJwcml2YXRlRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJmaW5hbCIsInVzaW5nRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uQ2xhc3MiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJpbml0aWFsaXplciIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsInVuZGVmaW5lZCIsImlzQmluZGluZ0luZm8iLCJncm91cCIsIndyaXRhYmxlIiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsImFyZ3MiLCJkZWZpbmVVSTVDbGFzcyIsInNUYXJnZXQiLCJtZXRhZGF0YURlZmluaXRpb24iLCJmb3JjZURlZmluZUNhbGwiLCJwcm90b3R5cGUiLCJrZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25jYXQiLCJyZWdpc3RlclVJNU1ldGFkYXRhIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsImNsYXp6IiwibmFtZSIsImluT2JqIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJvYmpOYW1lIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib2JqIiwiYmFzZVR5cGUiLCJnZXRQcm90b3R5cGVPZiIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZXh0ZW5kIiwiZm5Jbml0IiwiaW5pdCIsImFwcGx5IiwiYVByb3BlcnR5S2V5cyIsInByb3BlcnR5RGVmIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJ2IiwibVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZhbHVlIiwiZ2V0UHJvcGVydHkiLCJiaW5kaW5nUHJvcGVydHlWYWx1ZSIsInByb3BWYWx1ZSIsInNldFByb3BlcnR5IiwiX2FwcGx5aW5nU2V0dGluZ3MiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJhZ2dyZWdhdGlvbkRlZiIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25Db250ZW50IiwiZ2V0QWdncmVnYXRpb24iLCJhQXNzb2NpYXRpb25LZXlzIiwiYXNzb2NpYXRpb25LZXkiLCJzZXRBc3NvY2lhdGlvbiIsImdldEFzc29jaWF0aW9uIiwicmVmZXJlbmNlUHJvcGVydGllcyIsInZhbHVlIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwibWV0aG9kQXJncyIsImFyZyIsIm9FeHRlbnNpb24iLCJwb2wiLCJvQ2xhc3MiLCJNZXRhZGF0YSIsImNyZWF0ZUNsYXNzIiwidWlkIiwiQ29udHJvbGxlck1ldGFkYXRhIiwiX3N0YXRpY092ZXJyaWRlIiwiX292ZXJyaWRlIiwiT2JqZWN0UGF0aCIsInNhcCIsInVpIiwiZGVmaW5lIiwicmVwbGFjZUFsbCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2xhc3NTdXBwb3J0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPYmplY3RQYXRoIGZyb20gXCJzYXAvYmFzZS91dGlsL09iamVjdFBhdGhcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcblxudHlwZSBPdmVycmlkZURlZmluaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG50eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uO1xuXHRwdWJsaWM/OiBib29sZWFuO1xuXHRmaW5hbD86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTm9uQWJzdHJhY3RDbGFzczxUPiA9IFBpY2s8VCwga2V5b2YgVD4gJiAobmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQpO1xuXG50eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YmluZGFibGU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRieVZhbHVlPzogYm9vbGVhbjtcblx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdGV4cGVjdGVkQW5ub3RhdGlvbnM/OiBzdHJpbmdbXTtcblx0ZXhwZWN0ZWRUeXBlcz86IHN0cmluZ1tdO1xuXHRhbGxvd2VkVmFsdWVzPzogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgVUk1QWdncmVnYXRpb25NZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRhbHRUeXBlcz86IHN0cmluZ1tdO1xuXHRtdWx0aXBsZT86IGJvb2xlYW47XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG5cdGRlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdGRlZmF1bHRDbGFzcz86IHVua25vd247XG5cdHNpbmd1bGFyTmFtZT86IHN0cmluZztcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0bWFuaWZlc3Q/OiBzdHJpbmcgfCB1bmtub3duO1xuXHRyZXR1cm5UeXBlcz86IHN0cmluZ1tdO1xuXHRidWlsZGluZ0Jsb2NrTWV0YWRhdGE/OiB1bmtub3duO1xufTtcbnR5cGUgVUk1Q29udHJvbGxlckRlZmluaXRpb24gPSB7XG5cdG92ZXJyaWRlPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRvdmVycmlkZXM/OiB7IGV4dGVuc2lvbj86IFJlY29yZDxzdHJpbmcsIE92ZXJyaWRlRGVmaW5pdGlvbj4gfSAmIHtcblx0XHRbazogc3RyaW5nXTogRnVuY3Rpb247XG5cdH07XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1Q29udHJvbERlZmluaXRpb24gPSB7XG5cdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0b3ZlcnJpZGU/OiB1bmtub3duO1xuXHRyZW5kZXJlcj86IEZ1bmN0aW9uO1xufTtcblxudHlwZSBVSTVBUElDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xuXHRfX2FwaVJlZ2lzdGVyZWQ6IGJvb2xlYW47XG59ICYge1xuXHRbazogc3RyaW5nXTogRnVuY3Rpb247XG59O1xuXG5leHBvcnQgdHlwZSBYTUxFdmVudEhvbGRlciA9IHtcblx0Z2V0QVBJKGV2ZW50OiBVSTVFdmVudCwgZnFkbj86IHN0cmluZyk6IFVJNUFQSUNvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdGluc3RhbmNlTWFwOiBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+O1xufTtcblxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0Ly8gbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIFRTIGNvbXBpbGVyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBDb252ZXJ0Q29udGV4dFRvU3RyaW5nPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogSyBleHRlbmRzIFwibWV0YVBhdGhcIiB8IFwiY29udGV4dFBhdGhcIiA/IHN0cmluZyA6IFRbS107XG59O1xuZXhwb3J0IHR5cGUgU3RyaWN0UHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGljazxULCBLPiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5leHBvcnQgdHlwZSBVSTVBY2Nlc3NvcnM8VD4gPSB7XG5cdC8vIEFkZCBhbGwgdGhlIGdldFhYWCBtZXRob2QsIG1pZ2h0IGFkZCB0b28gbXVjaCBhcyBJJ20gbm90IGZpbHRlcmluZyBvbiBhY3R1YWwgcHJvcGVydGllcy4uLlxuXHRbUCBpbiBrZXlvZiBSZXF1aXJlZDxUPiBhcyBgZ2V0JHtDYXBpdGFsaXplPHN0cmluZyAmIFA+fWBdOiAoKSA9PiBUW1BdO1xufTtcbmV4cG9ydCB0eXBlIFVJNVNldHRlcnM8VD4gPSB7XG5cdC8vIEFkZCBhbGwgdGhlIHNldFhYWCBtZXRob2QsIG1pZ2h0IGFkZCB0b28gbXVjaCBhcyBJJ20gbm90IGZpbHRlcmluZyBvbiBhY3R1YWwgcHJvcGVydGllcy4uLlxuXHRbUCBpbiBrZXlvZiBSZXF1aXJlZDxUPiBhcyBgc2V0JHtDYXBpdGFsaXplPHN0cmluZyAmIFA+fWBdOiAodmFsdWU6IFRbUF0pID0+IFQ7XG59O1xuZXhwb3J0IHR5cGUgRW5oYW5jZVdpdGhVSTU8VD4gPSB7XG5cdG5ldyAocHJvcHM6IFByb3BlcnRpZXNPZjxUPik6IEVuaGFuY2VXaXRoVUk1PFQ+O1xuXHRuZXcgKHNJZDogc3RyaW5nLCBwcm9wczogUHJvcGVydGllc09mPFQ+KTogRW5oYW5jZVdpdGhVSTU8VD47XG59ICYgVCAmXG5cdFVJNUFjY2Vzc29yczxUPiAmXG5cdFVJNVNldHRlcnM8VD47XG5cbmNvbnN0IGVuc3VyZU1ldGFkYXRhID0gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24ge1xuXHR0YXJnZXQubWV0YWRhdGEgPSBtZXJnZShcblx0XHR7XG5cdFx0XHRjb250cm9sbGVyRXh0ZW5zaW9uczoge30sXG5cdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRyZWZlcmVuY2VzOiB7fSxcblx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdGV2ZW50czoge30sXG5cdFx0XHRpbnRlcmZhY2VzOiBbXVxuXHRcdH0sXG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID8/IHt9XG5cdCkgYXMgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRoYXQgd2lsbCBmaW5kIHRoZSBjb3JyZWN0IEFQSSBvYmplY3QgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udHJvbCBoaWVyYXJjaHkuXG4gKlxuICogQHBhcmFtIHRhcmdldFxuICogQHJldHVybnMgVGhlIHByb3BlciBnZXRBUEkgZnVuY3Rpb24gZm9yIHRoaXMgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldDogVUk1QVBJQ29udHJvbCkge1xuXHRyZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBVSTVBUElDb250cm9sPihcblx0XHR0aGlzOiBVSTVBUElDb250cm9sLFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0YXBpRlFOOiBzdHJpbmcgPSB0YXJnZXQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKClcblx0KTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0aWYgKHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKSB7XG5cdFx0XHRvU291cmNlID0gdGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24ob1NvdXJjZSkgPz8gb1NvdXJjZTtcblx0XHR9XG5cdFx0d2hpbGUgKG9Tb3VyY2UgJiYgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikgJiYgb1NvdXJjZS5nZXRQYXJlbnQpIHtcblx0XHRcdGlmICh0aGlzLmlzRGVwZW5kZW50Qm91bmQpIHtcblx0XHRcdFx0Y29uc3Qgb0RlcGVuZGVudHMgPSAob1NvdXJjZSBhcyBDb250cm9sKS5nZXREZXBlbmRlbnRzKCk7XG5cdFx0XHRcdGNvbnN0IGhhc0NvcnJlY3REZXBlbmRlbnQgPSBvRGVwZW5kZW50cy5maW5kKChvRGVwZW5kZW50OiBVSTVFbGVtZW50KSA9PiBvRGVwZW5kZW50LmlzQShhcGlGUU4pKTtcblx0XHRcdFx0aWYgKGhhc0NvcnJlY3REZXBlbmRlbnQpIHtcblx0XHRcdFx0XHRvU291cmNlID0gaGFzQ29ycmVjdERlcGVuZGVudCBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIW9Tb3VyY2UgfHwgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2VNYXAgPSB0aGlzLmluc3RhbmNlTWFwLmdldCh0aGlzKSBhcyBUW107XG5cdFx0XHRvU291cmNlID0gb1NvdXJjZU1hcD8uW29Tb3VyY2VNYXAubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRDb250cm9sO1xuXHRcdGlmIChvU291cmNlICYmIG9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdHRhcmdldENvbnRyb2wgPSBvU291cmNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcblx0fTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgd2hlbiBhbiB4bWxFdmVudEhhbmRsZXIgaXMgZGVmaW5lZCwgdGhlIGBnZXRBUElgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGFzc2lnbmVkLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgVGhlIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgc2hvdWxkIGhvbGQgdGhlIHN0YXRpYyBmdW5jdGlvbnNcbiAqL1xuY29uc3QgZW5zdXJlR2V0QVBJID0gZnVuY3Rpb24gKHRhcmdldDogVUk1QVBJQ29udHJvbCk6IHZvaWQge1xuXHRpZiAoIXRhcmdldC5fX2FwaVJlZ2lzdGVyZWQpIHtcblx0XHR0YXJnZXQuX19hcGlSZWdpc3RlcmVkID0gdHJ1ZTtcblx0XHR0YXJnZXQuaW5zdGFuY2VNYXAgPSBuZXcgV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPigpO1xuXHRcdHRhcmdldC5yZWdpc3Rlckluc3RhbmNlID0gZnVuY3Rpb24gKF9pbnN0YW5jZTogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGlmICghdGhpcy5pbnN0YW5jZU1hcC5nZXQoX2luc3RhbmNlLmNvbnN0cnVjdG9yKSkge1xuXHRcdFx0XHR0aGlzLmluc3RhbmNlTWFwLnNldChfaW5zdGFuY2UuY29uc3RydWN0b3IsIFtdKTtcblx0XHRcdH1cblx0XHRcdCh0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpIGFzIG9iamVjdFtdKS5wdXNoKF9pbnN0YW5jZSk7XG5cdFx0fTtcblx0XHR0YXJnZXQuZ2V0QVBJID0gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldCk7XG5cdH1cbn07XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdGhhdCB3aWxsIGJlIG92ZXJyaWRkZW5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXRob2RPdmVycmlkZShleHRlbnNpb25OYW1lPzogc3RyaW5nKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSkge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGVzKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGVzID0ge307XG5cdFx0fVxuXHRcdGxldCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0Lm92ZXJyaWRlcztcblx0XHRpZiAoZXh0ZW5zaW9uTmFtZSkge1xuXHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbikge1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbiA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXSkge1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltleHRlbnNpb25OYW1lXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdO1xuXHRcdH1cblx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj4pW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldO1xuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbiBiZSBleHRlbmRlZCBieSBvdGhlciBjb250cm9sbGVyIGV4dGVuc2lvbiBiYXNlZCBvbiB0aGUgZGVmaW5lZCBvdmVycmlkZUV4ZWN1dGlvblR5cGUuXG4gKlxuICogQHBhcmFtIG92ZXJyaWRlRXhlY3V0aW9uVHlwZSBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb25UeXBlPzogT3ZlcnJpZGVFeGVjdXRpb24gfCBcIkFmdGVyQXN5bmNcIiB8IFwiQmVmb3JlQXN5bmNcIik6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXkpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ub3ZlcnJpZGVFeGVjdXRpb24gPSBvdmVycmlkZUV4ZWN1dGlvblR5cGUgYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0V4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gdHJ1ZTtcblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2Qgd2lsbCBiZSBvbmx5IGF2YWlsYWJsZSBmb3IgaW50ZXJuYWwgdXNhZ2Ugb2YgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcml2YXRlRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSBmYWxzZTtcblx0fTtcbn1cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2Fubm90IGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgb3RoZXIgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbkNsYXNzIFRoZSBjb250cm9sbGVyIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgaW5zdGFudGlhdGVkXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2luZ0V4dGVuc2lvbihleHRlbnNpb25DbGFzczogdHlwZW9mIENvbnRyb2xsZXJFeHRlbnNpb24gfCBGdW5jdGlvbik6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXHRcdG1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gZXh0ZW5zaW9uQ2xhc3M7XG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBJIGRlY2xhcmUgaXQgYXMgc3VjaC5cbn1cblxuLyogI2VuZHJlZ2lvbiAqL1xuXG4vKiAjcmVnaW9uIENPTlRST0wgKi9cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIGV2ZW50IG9uIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50KCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBldmVudEtleSkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpbiB0aGUgY29udHJvbCBtZXRhdGFkYS5cbiAqXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvbiBUaGUgcHJvcGVydHkgZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BlcnR5KGF0dHJpYnV0ZURlZmluaXRpb246IFVJNVByb3BlcnR5TWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRhdHRyaWJ1dGVEZWZpbml0aW9uLmJpbmRhYmxlID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKGF0dHJpYnV0ZURlZmluaXRpb24uaXNCaW5kaW5nSW5mbyA9PT0gdHJ1ZSkge1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9IGZhbHNlO1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5ncm91cCA9IFwiRGF0YVwiO1xuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IGF0dHJpYnV0ZURlZmluaXRpb247XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nIGFnZ3JlZ2F0aW9uIGluIHRoZSBjb250cm9sIG1ldGF0YWRhLlxuICpcbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkRlZmluaXRpb24gVGhlIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFVJNSBkZWZhdWx0cyB0aGlzIHRvIHRydWUgYnV0IHRoaXMgaXMganVzdCB3ZWlyZC4uLlxuXHRcdFx0YWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nIGFzc29jaWF0aW9uIGluIHRoZSBjb250cm9sIG1ldGF0YWRhLlxuICpcbiAqIEBwYXJhbSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBhc3NvY2lhdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc29jaWF0aW9uKHVpNUFzc29jaWF0aW9uTWV0YWRhdGE6IFVJNUFzc29jaWF0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSB1aTVBc3NvY2lhdGlvbk1ldGFkYXRhO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qKlxuICogRGVmaW5lcyBpbiB0aGUgbWV0YWRhdGEgdGhhdCB0aGlzIGNvbnRyb2wgaW1wbGVtZW50cyBhIHNwZWNpZmljIGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbGVtZW50SW50ZXJmYWNlKGludGVyZmFjZU5hbWU6IHN0cmluZyk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIFhNTC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnRIYW5kbGVyKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlrZXkpIHtcblx0XHRjb25zdCBjdXJyZW50Q29uc3RydWN0b3I6IFVJNUFQSUNvbnRyb2wgPSB0YXJnZXQuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBVSTVBUElDb250cm9sO1xuXHRcdGVuc3VyZUdldEFQSShjdXJyZW50Q29uc3RydWN0b3IpO1xuXHRcdGN1cnJlbnRDb25zdHJ1Y3Rvcltwcm9wZXJ0eWtleS50b1N0cmluZygpXSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHRcdGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50Q29uc3RydWN0b3IuZ2V0QVBJKGFyZ3NbMF0gYXMgVUk1RXZlbnQpO1xuXHRcdFx0XHRjdXJyZW50VGFyZ2V0Py5bcHJvcGVydHlrZXkudG9TdHJpbmcoKV0oLi4uYXJncyk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcbn1cblxudHlwZSBVSTVDb250cm9sQW5kTW9yZSA9IHR5cGVvZiBDb250cm9sICZcblx0RnVuY3Rpb24gJiB7XG5cdFx0cmVnaXN0ZXJJbnN0YW5jZT86IEZ1bmN0aW9uO1xuXHRcdG92ZXJyaWRlPzogRnVuY3Rpb247XG5cdFx0cmVuZGVyZXI/OiB1bmtub3duO1xuXHRcdHJlbmRlcjogRnVuY3Rpb247XG5cdFx0bWV0YWRhdGE/OiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uO1xuXHR9O1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgY2xhc3Mgc2hvdWxkIGRlZmluZSBhIFVJNSBjb250cm9sIG9mIHRoZSBzcGVjaWZpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0gc1RhcmdldCBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIFVJNSBjbGFzc1xuICogQHBhcmFtIG1ldGFkYXRhRGVmaW5pdGlvbiBJbmxpbmUgbWV0YWRhdGEgZGVmaW5pdGlvblxuICogQHBhcmFtIGZvcmNlRGVmaW5lQ2FsbCBXaGV0aGVyIGEgZGVmaW5lIGNhbGwgc2hvdWxkIGJlIGFkZGVkIGZvciB0aGlzLCB1c2VmdWwgd2hlbiBkZWZpbmluZyBzdWIgY2xhc3Nlc1xuICogQHJldHVybnMgQSBjbGFzcyBkZWNvcmF0b3IgdGhhdCB3aWxsIGNyZWF0ZSBhIHVpNSBjbGFzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lVUk1Q2xhc3MoXG5cdHNUYXJnZXQ6IHN0cmluZyxcblx0bWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPixcblx0Zm9yY2VEZWZpbmVDYWxsID0gZmFsc2Vcbik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0pIHtcblx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0uY29uY2F0KFxuXHRcdFx0XHRcdFx0XHRtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0sXG5cdFx0XHRcdFx0XHRcdC4uLihtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dIGFzIG9iamVjdClcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0gbWV0YWRhdGFEZWZpbml0aW9uW2tleSBhcyBrZXlvZiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVnaXN0ZXJVSTVNZXRhZGF0YShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlLCBmb3JjZURlZmluZUNhbGwpO1xuXHR9IGFzIENsYXNzRGVjb3JhdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmZXJlbmNlPFQgZXh0ZW5kcyBVSTVFbGVtZW50PigpOiBSZWY8VD4ge1xuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFQsXG5cdFx0c2V0Q3VycmVudDogZnVuY3Rpb24gKG9Db250cm9sSW5zdGFuY2U6IFQpOiB2b2lkIHtcblx0XHRcdHRoaXMuY3VycmVudCA9IG9Db250cm9sSW5zdGFuY2U7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIGZvbGxvd2luZyBvYmplY3Qgd2lsbCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgY29udHJvbCB0aHJvdWdoIGpzeCB0ZW1wbGF0aW5nLlxuICpcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVSZWZlcmVuY2UoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblx0XHRpZiAoQmFzZU9iamVjdC5pc09iamVjdEEodGFyZ2V0LCBcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIHtcblx0XHRcdGlmICghbWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0bWV0YWRhdGEucmVmZXJlbmNlc1twcm9wZXJ0eUtleV0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiB1bmtub3duIH0pLmluaXRpYWxpemVyID0gY3JlYXRlUmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgaSBkZWNsYXJlIGl0IGFzIHN1Y2guO1xufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKlxuICogQHBhcmFtIGNsYXp6IFRoZSBjbGFzcyBwcm90b3R5cGVcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB0byBjcmVhdGVcbiAqIEBwYXJhbSBpbk9iaiBUaGUgbWV0YWRhdGEgb2JqZWN0XG4gKiBAcGFyYW0gZm9yY2VEZWZpbmVDYWxsIFdoZXRoZXIgYSBkZWZpbmUgY2FsbCBzaG91bGQgYmUgYWRkZWQgZm9yIHRoaXMsIHVzZWZ1bCB3aGVuIGRlZmluaW5nIHN1YiBjbGFzc2VzXG4gKiBAcmV0dXJucyBUaGUgbWV0YWRhdGEgY2xhc3NcbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJVSTVNZXRhZGF0YShcblx0Y2xheno6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRuYW1lOiBzdHJpbmcsXG5cdGluT2JqOiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiB8IFVJNUNvbnRyb2xEZWZpbml0aW9uLFxuXHRmb3JjZURlZmluZUNhbGw6IGJvb2xlYW5cbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgJiYgcHJvcGVydHlWYWx1ZSAhPT0gYmluZGluZ1Byb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BWYWx1ZSA9IHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XTtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5wcm9wVmFsdWUgfTsgLy8gQ3JlYXRlIHNoYWxsb3cgY29weVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wVmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1twcm9wZXJ0eUtleV0gPSBwcm9wZXJ0eURlZmF1bHQ7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zKTtcblx0XHRcdGFBZ2dyZWdhdGlvbktleXMuZm9yRWFjaCgoYWdncmVnYXRpb25LZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25EZWYgPSBvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0Y29uc3QgZGVmYXVsdFZhbHVlID0gdGhpc1thZ2dyZWdhdGlvbktleV0gPz8gYWdncmVnYXRpb25EZWYuZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgYWdncmVnYXRpb25LZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXksIHYpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uS2V5KTtcblx0XHRcdFx0XHRcdGlmIChvYmoubWV0YWRhdGEuYWdncmVnYXRpb25zW2FnZ3JlZ2F0aW9uS2V5XS5tdWx0aXBsZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50IHx8IFtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgYXMgVUk1RWxlbWVudCk/LmlzQSkge1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXNbYWdncmVnYXRpb25LZXldID0gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5fYXBwbHlpbmdTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBhQXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9ucyk7XG5cdFx0XHRhQXNzb2NpYXRpb25LZXlzLmZvckVhY2goKGFzc29jaWF0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhc3NvY2lhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QXNzb2NpYXRpb24oYXNzb2NpYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hc3NvY2lhdGlvbnNbYXNzb2NpYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG5cdFx0XHRjb25zdCByZWZlcmVuY2VQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpO1xuXHRcdFx0cmVmZXJlbmNlUHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eUtleSkgPT4ge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IGNyZWF0ZVJlZmVyZW5jZSgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChvYmoubWV0YWRhdGEubWV0aG9kcykge1xuXHRcdFx0Zm9yIChjb25zdCBtZXRob2ROYW1lIGluIG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRcdGNvbnN0IG1ldGhvZERlZmluaXRpb24gPSBvYmoubWV0YWRhdGEubWV0aG9kc1ttZXRob2ROYW1lXTtcblx0XHRcdFx0aWYgKG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiIHx8IG1ldGhvZERlZmluaXRpb24ub3ZlcnJpZGVFeGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIikge1xuXHRcdFx0XHRcdGlmICghdGhpcy5tZXRob2RIb2xkZXIpIHtcblx0XHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdID0gW3RoaXNbbWV0aG9kTmFtZV1dO1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBtZXRob2ROYW1lLCB7XG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0XHRzZXQ6ICh2OiBGdW5jdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0ucHVzaCh2KTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFzeW5jICguLi5tZXRob2RBcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtZXRob2RBcnJheXMgPSB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRtZXRob2RBcnJheXMucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGFyZyBvZiBtZXRob2RBcnJheXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGF3YWl0IGFyZy5hcHBseSh0aGlzLCBtZXRob2RBcmdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNsYXp6Lm92ZXJyaWRlID0gZnVuY3Rpb24gKG9FeHRlbnNpb246IHVua25vd24pOiBGdW5jdGlvbiB7XG5cdFx0Y29uc3QgcG9sID0ge307XG5cdFx0KHBvbCBhcyBGdW5jdGlvbikuY29uc3RydWN0b3IgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogRnVuY3Rpb24ge1xuXHRcdFx0cmV0dXJuIGNsYXp6LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH07XG5cdFx0Y29uc3Qgb0NsYXNzID0gKE1ldGFkYXRhIGFzIHVua25vd24gYXMgeyBjcmVhdGVDbGFzczogRnVuY3Rpb24gfSkuY3JlYXRlQ2xhc3MoXG5cdFx0XHRjbGF6eixcblx0XHRcdGBhbm9ueW1vdXNFeHRlbnNpb25+JHt1aWQoKX1gLFxuXHRcdFx0cG9sLFxuXHRcdFx0Q29udHJvbGxlck1ldGFkYXRhXG5cdFx0KTtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fc3RhdGljT3ZlcnJpZGUgPSBvRXh0ZW5zaW9uO1xuXHRcdG9DbGFzcy5nZXRNZXRhZGF0YSgpLl9vdmVycmlkZSA9IChjbGF6ei5nZXRNZXRhZGF0YSgpIGFzIHsgX292ZXJyaWRlPzogdW5rbm93biB9KS5fb3ZlcnJpZGU7XG5cdFx0cmV0dXJuIG9DbGFzcztcblx0fTtcblxuXHRPYmplY3RQYXRoLnNldChuYW1lLCBvdXRwdXQpO1xuXG5cdGlmIChmb3JjZURlZmluZUNhbGwpIHtcblx0XHRzYXAudWkuZGVmaW5lKG91dHB1dC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKS5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIiksICgpID0+IHtcblx0XHRcdHJldHVybiBvdXRwdXQ7XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQWdJQSxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsTUFBc0QsRUFBZ0M7SUFDdEhBLE1BQU0sQ0FBQ0MsUUFBUSxHQUFHQyxLQUFLLENBQ3RCO01BQ0NDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztNQUN4QkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2RDLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDaEJDLE9BQU8sRUFBRSxDQUFDLENBQUM7TUFDWEMsTUFBTSxFQUFFLENBQUMsQ0FBQztNQUNWQyxVQUFVLEVBQUU7SUFDYixDQUFDLEVBQ0RWLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUNXO0lBQ2pDLE9BQU9ELE1BQU0sQ0FBQ0MsUUFBUTtFQUN2QixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNVLHFCQUFxQixDQUFDWCxNQUFxQixFQUFFO0lBQ3JELE9BQU8sVUFFTlksTUFBZ0IsRUFFQTtNQUFBLElBRGhCQyxNQUFjLHVFQUFHYixNQUFNLENBQUNjLFdBQVcsRUFBRSxDQUFDQyxPQUFPLEVBQUU7TUFFL0MsSUFBSUMsT0FBTyxHQUFHSixNQUFNLENBQUNLLFNBQVMsRUFBMEI7TUFDeEQsSUFBSWpCLE1BQU0sQ0FBQ2tCLGdCQUFnQixFQUFFO1FBQzVCRixPQUFPLEdBQUdoQixNQUFNLENBQUNrQixnQkFBZ0IsQ0FBQ0YsT0FBTyxDQUFDLElBQUlBLE9BQU87TUFDdEQ7TUFDQSxPQUFPQSxPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDRyxHQUFHLENBQUlOLE1BQU0sQ0FBQyxJQUFJRyxPQUFPLENBQUNJLFNBQVMsRUFBRTtRQUMvRCxJQUFJLElBQUksQ0FBQ0Ms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
@@ -19,6 +19,8 @@ type UI5ControllerMethodDefinition = {
19
19
  public?: boolean;
20
20
  final?: boolean;
21
21
  };
22
+ export type NonAbstractClass<T> = Pick<T, keyof T> & (new (...args: unknown[]) => T);
23
+
22
24
  type UI5PropertyMetadata = {
23
25
  type: string;
24
26
  bindable?: boolean;
@@ -36,6 +38,7 @@ export type UI5AggregationMetadata = {
36
38
  altTypes?: string[];
37
39
  multiple?: boolean;
38
40
  isDefault?: boolean;
41
+ defaultValue?: unknown;
39
42
  defaultClass?: unknown;
40
43
  singularName?: string;
41
44
  visibility?: string;
@@ -372,6 +375,7 @@ export function aggregation(aggregationDefinition: UI5AggregationMetadata): Prop
372
375
  metadata.defaultAggregation = propertyKey;
373
376
  }
374
377
  delete propertyDescriptor.writable;
378
+ aggregationDefinition.defaultValue ??= (propertyDescriptor as { initializer?: Function }).initializer?.();
375
379
  delete (propertyDescriptor as { initializer?: unknown }).initializer;
376
380
 
377
381
  return propertyDescriptor;
@@ -577,8 +581,11 @@ function registerUI5Metadata(
577
581
  const aPropertyKeys = Object.keys(obj.metadata.properties);
578
582
  aPropertyKeys.forEach((propertyKey) => {
579
583
  const propertyDef = obj.metadata.properties[propertyKey];
584
+ // If a value was set in `init` we need to make sure it is set in the value in the end
585
+ const propertyDefault = this[propertyKey] ?? propertyDef.defaultValue;
580
586
  if (propertyDef.isBindingInfo === true) {
581
587
  this._bindingProperties ??= {};
588
+
582
589
  Object.defineProperty(this, propertyKey, {
583
590
  configurable: true,
584
591
  set: (v: unknown) => {
@@ -587,7 +594,15 @@ function registerUI5Metadata(
587
594
  return this;
588
595
  },
589
596
  get(): unknown {
590
- const propValue = this._bindingProperties[propertyKey] ?? this.getProperty(propertyKey);
597
+ // Special case we need to consider the property first and not just the _bindingProperties
598
+ // During the initialization, if the property is set with a non binding value, setProperty is called and not bindProperty
599
+ const propertyValue = this.getProperty(propertyKey);
600
+ const bindingPropertyValue = this._bindingProperties[propertyKey];
601
+ // If the property is set to a different value we update the _bindingProperties
602
+ if (propertyValue && propertyValue !== bindingPropertyValue) {
603
+ this._bindingProperties[propertyKey] = propertyValue;
604
+ }
605
+ const propValue = this._bindingProperties[propertyKey];
591
606
  if (typeof propValue === "object") {
592
607
  return { ...propValue }; // Create shallow copy
593
608
  } else {
@@ -606,15 +621,17 @@ function registerUI5Metadata(
606
621
  }
607
622
  });
608
623
  }
609
- if (propertyDef.defaultValue !== undefined) {
624
+ if (propertyDefault !== undefined) {
610
625
  this._applyingSettings = true;
611
- this[propertyKey] = propertyDef.defaultValue;
626
+ this[propertyKey] = propertyDefault;
612
627
  this._applyingSettings = false;
613
628
  delete this._applyingSettings;
614
629
  }
615
630
  });
616
631
  const aAggregationKeys = Object.keys(obj.metadata.aggregations);
617
632
  aAggregationKeys.forEach((aggregationKey) => {
633
+ const aggregationDef = obj.metadata.aggregations[aggregationKey];
634
+ const defaultValue = this[aggregationKey] ?? aggregationDef.defaultValue;
618
635
  Object.defineProperty(this, aggregationKey, {
619
636
  configurable: true,
620
637
  set: (v: unknown) => {
@@ -629,6 +646,12 @@ function registerUI5Metadata(
629
646
  }
630
647
  }
631
648
  });
649
+ if (defaultValue && (defaultValue as UI5Element)?.isA) {
650
+ this._applyingSettings = true;
651
+ this[aggregationKey] = defaultValue;
652
+ this._applyingSettings = false;
653
+ delete this._applyingSettings;
654
+ }
632
655
  });
633
656
  const aAssociationKeys = Object.keys(obj.metadata.associations);
634
657
  aAssociationKeys.forEach((associationKey) => {
@@ -90,4 +90,4 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/ui/base/ManagedObject", "sap/ui/
90
90
  _exports = ViewLoader;
91
91
  return _exports;
92
92
  }, false);
93
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaWV3TG9hZGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJtU2V0dGluZ3MiLCJjYWNoZSIsInNWaWV3TmFtZSIsInZpZXdOYW1lIiwiX29Db250YWluaW5nVmlldyIsImxvYWREZXBlbmRlbmN5IiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiTURYQ29udGVudCIsImluaXRWaWV3U2V0dGluZ3MiLCJ2aWV3Q29uZmlnIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3Q29udGVudCIsIl9qc3hWaWV3TmFtZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiY29udHJvbGxlciIsInZpZXdDb250ZW50Rm4iLCJnZXRDb250cm9sbGVyTmFtZSIsInZpZXdEYXRhIiwiY29udHJvbGxlck5hbWUiLCJjcmVhdGVDb250ZW50Iiwib0NvbnRyb2xsZXIiLCJwcmVwcm9jZXNzb3JEYXRhIiwibVByZXByb2Nlc3NvcnMiLCJ4bWwiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwicnVuQXNPd25lciIsImZuIiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyIiwiaWQiLCJzSWQiLCJjcmVhdGVJZCIsInNldHRpbmdzIiwiVmlldyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlld0xvYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBYTUxQcmVwcm9jZXNzb3JDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbnR5cGUgSlNYVmlld0NvbnRyb2xsZXIgPSBDb250cm9sbGVyICYgeyByZW5kZXI/OiAoKSA9PiBDb250cm9sIH07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuYmFzZS5qc3gtcnVudGltZS5NRFhWaWV3TG9hZGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWV3TG9hZGVyIGV4dGVuZHMgVmlldyB7XG5cdHN0YXRpYyBwcmVwcm9jZXNzb3JEYXRhPzogWE1MUHJlcHJvY2Vzc29yQ29udGV4dDtcblxuXHRzdGF0aWMgY29udHJvbGxlcjogQ29udHJvbGxlcjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZpZXdOYW1lITogc3RyaW5nO1xuXG5cdHByaXZhdGUgdmlld0NvbnRlbnQ/OiBDb250cm9sO1xuXG5cdHByaXZhdGUgdmlld0NvbnRlbnRGbj86IEZ1bmN0aW9uO1xuXG5cdHB1YmxpYyBzVmlld05hbWU6IHN0cmluZztcblxuXHRwdWJsaWMgX29Db250YWluaW5nVmlldzogdGhpcztcblxuXHRjb25zdHJ1Y3RvcihtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5jYWNoZTtcblx0XHRzdXBlcihtU2V0dGluZ3MpO1xuXHRcdHRoaXMuc1ZpZXdOYW1lID0gdGhpcy52aWV3TmFtZTtcblx0XHR0aGlzLl9vQ29udGFpbmluZ1ZpZXcgPSB0aGlzO1xuXHR9XG5cblx0YXN5bmMgbG9hZERlcGVuZGVuY3kobmFtZTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRzYXAudWkucmVxdWlyZShbbmFtZV0sIChNRFhDb250ZW50OiBGdW5jdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKE1EWENvbnRlbnQpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBpbml0Vmlld1NldHRpbmdzKG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB2aWV3Q29uZmlnID0gdGhpcy5nZXRWaWV3RGF0YSgpIGFzIHsgdmlld0NvbnRlbnQ/OiBDb250cm9sOyBfanN4Vmlld05hbWU6IHN0cmluZyB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29uc3Qgdmlld0NvbnRlbnQgPSB2aWV3Q29uZmlnLnZpZXdDb250ZW50IHx8ICgoYXdhaXQgdGhpcy5sb2FkRGVwZW5kZW5jeSh2aWV3Q29uZmlnLl9qc3hWaWV3TmFtZSkpIGFzIENvbnRyb2wgfCBGdW5jdGlvbik7XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5jYWNoZTtcblx0XHRpZiAoKHZpZXdDb250ZW50IGFzIENvbnRyb2wpPy5nZXRNZXRhZGF0YT8uKCkuaXNBKFwic2FwLnVpLmNvcmUubXZjLkNvbnRyb2xsZXJcIikpIHtcblx0XHRcdG1TZXR0aW5ncy5jb250cm9sbGVyID0gbmV3ICh2aWV3Q29udGVudCBhcyB0eXBlb2YgQ29udHJvbCkodmlld0NvbmZpZyBhcyAkQ29udHJvbFNldHRpbmdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy52aWV3Q29udGVudEZuID0gdmlld0NvbnRlbnQgYXMgRnVuY3Rpb247XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q29udHJvbGxlck5hbWUoKTogc3RyaW5nIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHRoaXMuZ2V0Vmlld0RhdGEoKSBhcyB7IGNvbnRyb2xsZXJOYW1lOiBzdHJpbmcgfTtcblx0XHRyZXR1cm4gdmlld0RhdGEuY29udHJvbGxlck5hbWU7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdC8vIEB0cy1pZ25vcmVcblx0Y3JlYXRlQ29udGVudChvQ29udHJvbGxlcjogSlNYVmlld0NvbnRyb2xsZXIpOiBDb250cm9sIHtcblx0XHRWaWV3TG9hZGVyLnByZXByb2Nlc3NvckRhdGEgPSAodGhpcyBhcyB7IG1QcmVwcm9jZXNzb3JzPzogeyB4bWw/OiBYTUxQcmVwcm9jZXNzb3JDb250ZXh0IH0gfSk/Lm1QcmVwcm9jZXNzb3JzPy54bWw7XG5cdFx0Vmlld0xvYWRlci5jb250cm9sbGVyID0gb0NvbnRyb2xsZXI7XG5cblx0XHRjb25zdCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzKSEgPz8geyBydW5Bc093bmVyOiAoZm46IEZ1bmN0aW9uKSA9PiBmbigpIH07XG5cdFx0cmV0dXJuIG93bmVyLnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0cmV0dXJuIChNYW5hZ2VkT2JqZWN0IGFzIE1hbmFnZWRPYmplY3RFeCkucnVuV2l0aFByZXByb2Nlc3NvcnMoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIucmVuZGVyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIucmVuZGVyKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnZpZXdDb250ZW50Rm4/LigpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWQ6IChzSWQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlSWQoc0lkKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHNldHRpbmdzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xsZXIgPSBvQ29udHJvbGxlcjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7TUFZcUJBLFVBQVUsV0FEOUJDLGNBQWMsQ0FBQyx1Q0FBdUMsQ0FBQyxVQU10REMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQztJQUFBO0lBVzdCLG9CQUFZQyxTQUFrQyxFQUFFO01BQUE7TUFDL0MsT0FBT0EsU0FBUyxDQUFDQyxLQUFLO01BQ3RCLHlCQUFNRCxTQUFTLENBQUM7TUFBQztNQUNqQixNQUFLRSxTQUFTLEdBQUcsTUFBS0MsUUFBUTtNQUM5QixNQUFLQyxnQkFBZ0IsZ0NBQU87TUFBQztJQUM5QjtJQUFDO0lBQUE7SUFBQSxPQUVLQyxjQUFjLEdBQXBCLDhCQUFxQkMsSUFBWSxFQUFvQjtNQUNwRCxPQUFPLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQy9CQyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0MsT0FBTyxDQUFDLENBQUNMLElBQUksQ0FBQyxFQUFHTSxVQUFvQixJQUFXO1VBQ3RESixPQUFPLENBQUNJLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUM7TUFDSCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQUEsT0FFS0MsZ0JBQWdCLEdBQXRCLGdDQUF1QmIsU0FBa0MsRUFBaUI7TUFBQTtNQUN6RSxNQUFNYyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxXQUFXLEVBQStFO01BQ2xILE1BQU1DLFdBQVcsR0FBR0YsVUFBVSxDQUFDRSxXQUFXLEtBQU0sTUFBTSxJQUFJLENBQUNYLGNBQWMsQ0FBQ1MsVUFBVSxDQUFDRyxZQUFZLENBQUMsQ0FBd0I7TUFDMUgsT0FBT2pCLFNBQVMsQ0FBQ0MsS0FBSztNQUN0QixJQUFLZSxXQUFXLGFBQVhBLFdBQVcsK0JBQVosUUFBQ0EsV0FBVyxFQUFjRSxXQUFXLHlDQUFyQyx1QkFBeUMsQ0FBQ0MsR0FBRyxDQUFDLDRCQUE0QixDQUFDLEVBQUU7UUFDaEZuQixTQUFTLENBQUNvQixVQUFVLEdBQUcsSUFBS0osV0FBVyxDQUFvQkYsVUFBVSxDQUFxQjtNQUMzRixDQUFDLE1BQU07UUFDTixJQUFJLENBQUNPLGFBQWEsR0FBR0wsV0FBdUI7TUFDN0M7SUFDRCxDQUFDO0lBQUEsT0FFRE0saUJBQWlCLEdBQWpCLDZCQUE0QjtNQUMzQixNQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDUixXQUFXLEVBQWdDO01BQ2pFLE9BQU9RLFFBQVEsQ0FBQ0MsY0FBYztJQUMvQjs7SUFFQTtJQUNBO0lBQUE7SUFBQSxPQUNBQyxhQUFhLEdBQWIsdUJBQWNDLFdBQThCLEVBQVc7TUFBQTtNQUN0RDlCLFVBQVUsQ0FBQytCLGdCQUFnQixHQUFJLElBQUksYUFBSixJQUFJLDBDQUFKLElBQUksQ0FBNERDLGNBQWMsb0RBQS9FLGdCQUFpRkMsR0FBRztNQUNsSGpDLFVBQVUsQ0FBQ3dCLFVBQVUsR0FBR00sV0FBVztNQUVuQyxNQUFNSSxLQUFLLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUs7UUFBRUMsVUFBVSxFQUFHQyxFQUFZLElBQUtBLEVBQUU7TUFBRyxDQUFDO01BQzdGLE9BQU9KLEtBQUssQ0FBQ0csVUFBVSxDQUFDLE1BQU07UUFDN0IsT0FBUUUsYUFBYSxDQUFxQkMsb0JBQW9CLENBQzdELE1BQU07VUFBQTtVQUNMLElBQUlWLFdBQVcsSUFBSUEsV0FBVyxDQUFDVyxNQUFNLEVBQUU7WUFDdEMsT0FBT1gsV0FBVyxDQUFDVyxNQUFNLEVBQUU7VUFDNUI7VUFDQSw4QkFBTyxJQUFJLENBQUNoQixhQUFhLHdEQUFsQiw2QkFBSSxDQUFrQjtRQUM5QixDQUFDLEVBQ0Q7VUFDQ2lCLEVBQUUsRUFBR0MsR0FBVyxJQUFLO1lBQ3BCLE9BQU8sSUFBSSxDQUFDQyxRQUFRLENBQUNELEdBQUcsQ0FBQztVQUMxQixDQUFDO1VBQ0RFLFFBQVEsRUFBRSxZQUFZO1lBQ3JCLElBQUksQ0FBQ3JCLFVBQVUsR0FBR00sV0FBVztVQUM5QjtRQUNELENBQUMsQ0FDRDtNQUNGLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQTtFQUFBLEVBeEVzQ2dCLElBQUk7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0VBQUE7RUFBQTtBQUFBIn0=
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaWV3TG9hZGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJtU2V0dGluZ3MiLCJjYWNoZSIsInNWaWV3TmFtZSIsInZpZXdOYW1lIiwiX29Db250YWluaW5nVmlldyIsImxvYWREZXBlbmRlbmN5IiwibmFtZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiTURYQ29udGVudCIsImluaXRWaWV3U2V0dGluZ3MiLCJ2aWV3Q29uZmlnIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3Q29udGVudCIsIl9qc3hWaWV3TmFtZSIsImdldE1ldGFkYXRhIiwiaXNBIiwiY29udHJvbGxlciIsInZpZXdDb250ZW50Rm4iLCJnZXRDb250cm9sbGVyTmFtZSIsInZpZXdEYXRhIiwiY29udHJvbGxlck5hbWUiLCJjcmVhdGVDb250ZW50Iiwib0NvbnRyb2xsZXIiLCJwcmVwcm9jZXNzb3JEYXRhIiwibVByZXByb2Nlc3NvcnMiLCJ4bWwiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwicnVuQXNPd25lciIsImZuIiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyIiwiaWQiLCJzSWQiLCJjcmVhdGVJZCIsInNldHRpbmdzIiwiVmlldyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlld0xvYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOb25BYnN0cmFjdENsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBYTUxQcmVwcm9jZXNzb3JDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0RXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbnR5cGUgSlNYVmlld0NvbnRyb2xsZXIgPSBDb250cm9sbGVyICYgeyByZW5kZXI/OiAoKSA9PiBDb250cm9sIH07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuYmFzZS5qc3gtcnVudGltZS5NRFhWaWV3TG9hZGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWV3TG9hZGVyIGV4dGVuZHMgVmlldyB7XG5cdHN0YXRpYyBwcmVwcm9jZXNzb3JEYXRhPzogWE1MUHJlcHJvY2Vzc29yQ29udGV4dDtcblxuXHRzdGF0aWMgY29udHJvbGxlcjogQ29udHJvbGxlcjtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZpZXdOYW1lITogc3RyaW5nO1xuXG5cdHByaXZhdGUgdmlld0NvbnRlbnQ/OiBDb250cm9sO1xuXG5cdHByaXZhdGUgdmlld0NvbnRlbnRGbj86IEZ1bmN0aW9uO1xuXG5cdHB1YmxpYyBzVmlld05hbWU6IHN0cmluZztcblxuXHRwdWJsaWMgX29Db250YWluaW5nVmlldzogdGhpcztcblxuXHRjb25zdHJ1Y3RvcihtU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5jYWNoZTtcblx0XHRzdXBlcihtU2V0dGluZ3MpO1xuXHRcdHRoaXMuc1ZpZXdOYW1lID0gdGhpcy52aWV3TmFtZTtcblx0XHR0aGlzLl9vQ29udGFpbmluZ1ZpZXcgPSB0aGlzO1xuXHR9XG5cblx0YXN5bmMgbG9hZERlcGVuZGVuY3kobmFtZTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRzYXAudWkucmVxdWlyZShbbmFtZV0sIChNRFhDb250ZW50OiBGdW5jdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0XHRyZXNvbHZlKE1EWENvbnRlbnQpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBpbml0Vmlld1NldHRpbmdzKG1TZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCB2aWV3Q29uZmlnID0gdGhpcy5nZXRWaWV3RGF0YSgpIGFzIHsgdmlld0NvbnRlbnQ/OiBDb250cm9sOyBfanN4Vmlld05hbWU6IHN0cmluZyB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29uc3Qgdmlld0NvbnRlbnQgPSB2aWV3Q29uZmlnLnZpZXdDb250ZW50IHx8ICgoYXdhaXQgdGhpcy5sb2FkRGVwZW5kZW5jeSh2aWV3Q29uZmlnLl9qc3hWaWV3TmFtZSkpIGFzIENvbnRyb2wgfCBGdW5jdGlvbik7XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5jYWNoZTtcblx0XHRpZiAoKHZpZXdDb250ZW50IGFzIENvbnRyb2wpPy5nZXRNZXRhZGF0YT8uKCkuaXNBKFwic2FwLnVpLmNvcmUubXZjLkNvbnRyb2xsZXJcIikpIHtcblx0XHRcdG1TZXR0aW5ncy5jb250cm9sbGVyID0gbmV3ICh2aWV3Q29udGVudCBhcyBOb25BYnN0cmFjdENsYXNzPENvbnRyb2w+KSh2aWV3Q29uZmlnIGFzICRDb250cm9sU2V0dGluZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnZpZXdDb250ZW50Rm4gPSB2aWV3Q29udGVudCBhcyBGdW5jdGlvbjtcblx0XHR9XG5cdH1cblxuXHRnZXRDb250cm9sbGVyTmFtZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gdGhpcy5nZXRWaWV3RGF0YSgpIGFzIHsgY29udHJvbGxlck5hbWU6IHN0cmluZyB9O1xuXHRcdHJldHVybiB2aWV3RGF0YS5jb250cm9sbGVyTmFtZTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0Ly8gQHRzLWlnbm9yZVxuXHRjcmVhdGVDb250ZW50KG9Db250cm9sbGVyOiBKU1hWaWV3Q29udHJvbGxlcik6IENvbnRyb2wge1xuXHRcdFZpZXdMb2FkZXIucHJlcHJvY2Vzc29yRGF0YSA9ICh0aGlzIGFzIHsgbVByZXByb2Nlc3NvcnM/OiB7IHhtbD86IFhNTFByZXByb2Nlc3NvckNvbnRleHQgfSB9KT8ubVByZXByb2Nlc3NvcnM/LnhtbDtcblx0XHRWaWV3TG9hZGVyLmNvbnRyb2xsZXIgPSBvQ29udHJvbGxlcjtcblxuXHRcdGNvbnN0IG93bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMpISA/PyB7IHJ1bkFzT3duZXI6IChmbjogRnVuY3Rpb24pID0+IGZuKCkgfTtcblx0XHRyZXR1cm4gb3duZXIucnVuQXNPd25lcigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgTWFuYWdlZE9iamVjdEV4KS5ydW5XaXRoUHJlcHJvY2Vzc29ycyhcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci5yZW5kZXIpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci5yZW5kZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudmlld0NvbnRlbnRGbj8uKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZDogKHNJZDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVJZChzSWQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0c2V0dGluZ3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbGxlciA9IG9Db250cm9sbGVyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7OztNQWFxQkEsVUFBVSxXQUQ5QkMsY0FBYyxDQUFDLHVDQUF1QyxDQUFDLFVBTXREQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDO0lBQUE7SUFXN0Isb0JBQVlDLFNBQWtDLEVBQUU7TUFBQTtNQUMvQyxPQUFPQSxTQUFTLENBQUNDLEtBQUs7TUFDdEIseUJBQU1ELFNBQVMsQ0FBQztNQUFDO01BQ2pCLE1BQUtFLFNBQVMsR0FBRyxNQUFLQyxRQUFRO01BQzlCLE1BQUtDLGdCQUFnQixnQ0FBTztNQUFDO0lBQzlCO0lBQUM7SUFBQTtJQUFBLE9BRUtDLGNBQWMsR0FBcEIsOEJBQXFCQyxJQUFZLEVBQW9CO01BQ3BELE9BQU8sSUFBSUMsT0FBTyxDQUFFQyxPQUFPLElBQUs7UUFDL0JDLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxPQUFPLENBQUMsQ0FBQ0wsSUFBSSxDQUFDLEVBQUdNLFVBQW9CLElBQVc7VUFDdERKLE9BQU8sQ0FBQ0ksVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQztNQUNILENBQUMsQ0FBQztJQUNILENBQUM7SUFBQSxPQUVLQyxnQkFBZ0IsR0FBdEIsZ0NBQXVCYixTQUFrQyxFQUFpQjtNQUFBO01BQ3pFLE1BQU1jLFVBQVUsR0FBRyxJQUFJLENBQUNDLFdBQVcsRUFBK0U7TUFDbEgsTUFBTUMsV0FBVyxHQUFHRixVQUFVLENBQUNFLFdBQVcsS0FBTSxNQUFNLElBQUksQ0FBQ1gsY0FBYyxDQUFDUyxVQUFVLENBQUNHLFlBQVksQ0FBQyxDQUF3QjtNQUMxSCxPQUFPakIsU0FBUyxDQUFDQyxLQUFLO01BQ3RCLElBQUtlLFdBQVcsYUFBWEEsV0FBVywrQkFBWixRQUFDQSxXQUFXLEVBQWNFLFdBQVcseUNBQXJDLHVCQUF5QyxDQUFDQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsRUFBRTtRQUNoRm5CLFNBQVMsQ0FBQ29CLFVBQVUsR0FBRyxJQUFLSixXQUFXLENBQStCRixVQUFVLENBQXFCO01BQ3RHLENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQ08sYUFBYSxHQUFHTCxXQUF1QjtNQUM3QztJQUNELENBQUM7SUFBQSxPQUVETSxpQkFBaUIsR0FBakIsNkJBQTRCO01BQzNCLE1BQU1DLFFBQVEsR0FBRyxJQUFJLENBQUNSLFdBQVcsRUFBZ0M7TUFDakUsT0FBT1EsUUFBUSxDQUFDQyxjQUFjO0lBQy9COztJQUVBO0lBQ0E7SUFBQTtJQUFBLE9BQ0FDLGFBQWEsR0FBYix1QkFBY0MsV0FBOEIsRUFBVztNQUFBO01BQ3REOUIsVUFBVSxDQUFDK0IsZ0JBQWdCLEdBQUksSUFBSSxhQUFKLElBQUksMENBQUosSUFBSSxDQUE0REMsY0FBYyxvREFBL0UsZ0JBQWlGQyxHQUFHO01BQ2xIakMsVUFBVSxDQUFDd0IsVUFBVSxHQUFHTSxXQUFXO01BRW5DLE1BQU1JLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSztRQUFFQyxVQUFVLEVBQUdDLEVBQVksSUFBS0EsRUFBRTtNQUFHLENBQUM7TUFDN0YsT0FBT0osS0FBSyxDQUFDRyxVQUFVLENBQUMsTUFBTTtRQUM3QixPQUFRRSxhQUFhLENBQXFCQyxvQkFBb0IsQ0FDN0QsTUFBTTtVQUFBO1VBQ0wsSUFBSVYsV0FBVyxJQUFJQSxXQUFXLENBQUNXLE1BQU0sRUFBRTtZQUN0QyxPQUFPWCxXQUFXLENBQUNXLE1BQU0sRUFBRTtVQUM1QjtVQUNBLDhCQUFPLElBQUksQ0FBQ2hCLGFBQWEsd0RBQWxCLDZCQUFJLENBQWtCO1FBQzlCLENBQUMsRUFDRDtVQUNDaUIsRUFBRSxFQUFHQyxHQUFXLElBQUs7WUFDcEIsT0FBTyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0QsR0FBRyxDQUFDO1VBQzFCLENBQUM7VUFDREUsUUFBUSxFQUFFLFlBQVk7WUFDckIsSUFBSSxDQUFDckIsVUFBVSxHQUFHTSxXQUFXO1VBQzlCO1FBQ0QsQ0FBQyxDQUNEO01BQ0YsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBO0VBQUEsRUF4RXNDZ0IsSUFBSTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQTtFQUFBO0FBQUEifQ==
@@ -1,3 +1,4 @@
1
+ import type { NonAbstractClass } from "sap/fe/base/ClassSupport";
1
2
  import { defineUI5Class, property } from "sap/fe/base/ClassSupport";
2
3
  import type { XMLPreprocessorContext } from "sap/fe/core/TemplateComponent";
3
4
  import ManagedObject from "sap/ui/base/ManagedObject";
@@ -46,7 +47,7 @@ export default class ViewLoader extends View {
46
47
  const viewContent = viewConfig.viewContent || ((await this.loadDependency(viewConfig._jsxViewName)) as Control | Function);
47
48
  delete mSettings.cache;
48
49
  if ((viewContent as Control)?.getMetadata?.().isA("sap.ui.core.mvc.Controller")) {
49
- mSettings.controller = new (viewContent as typeof Control)(viewConfig as $ControlSettings);
50
+ mSettings.controller = new (viewContent as NonAbstractClass<Control>)(viewConfig as $ControlSettings);
50
51
  } else {
51
52
  this.viewContentFn = viewContent as Function;
52
53
  }