@sapui5/sap.fe.base 1.148.3 → 1.150.0

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.
@@ -59,8 +59,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
59
59
  * @returns The proper getAPI function for this constructor
60
60
  */
61
61
  function prepareGetAPIFunction(target) {
62
- return function (oEvent) {
63
- let apiFQN = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : target.getMetadata().getName();
62
+ return function (oEvent, apiFQN = target.getMetadata().getName()) {
64
63
  let oSource = oEvent.getSource();
65
64
  if (target._getAPIExtension) {
66
65
  oSource = target._getAPIExtension(oSource) ?? oSource;
@@ -387,10 +386,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
387
386
  return function (target, propertykey) {
388
387
  const currentConstructor = target.constructor;
389
388
  ensureGetAPI(currentConstructor);
390
- currentConstructor[propertykey.toString()] = function () {
391
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
392
- args[_key] = arguments[_key];
393
- }
389
+ currentConstructor[propertykey.toString()] = function (...args) {
394
390
  if (args?.length) {
395
391
  const currentTarget = currentConstructor.getAPI(args[0]);
396
392
  currentTarget?.[propertykey.toString()](...args);
@@ -729,11 +725,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
729
725
  const output = clazz.extend(name, obj);
730
726
  const fnInit = output.prototype.init;
731
727
  const fnAfterInit = output.prototype.afterInit;
732
- output.prototype.init = function () {
733
- var _this = this;
734
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
735
- args[_key2] = arguments[_key2];
736
- }
728
+ output.prototype.init = function (...args) {
737
729
  if (fnInit) {
738
730
  fnInit.apply(this, args);
739
731
  }
@@ -860,17 +852,14 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
860
852
  return this.methodHolder[methodName].push(v);
861
853
  },
862
854
  get: () => {
863
- return async function () {
864
- const methodArrays = _this.methodHolder[methodName];
855
+ return async (...methodArgs) => {
856
+ const methodArrays = this.methodHolder[methodName];
865
857
  if (methodDefinition.overrideExecution === "BeforeAsync") {
866
858
  methodArrays.reverse();
867
859
  }
868
860
  let result;
869
- for (var _len3 = arguments.length, methodArgs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
870
- methodArgs[_key3] = arguments[_key3];
871
- }
872
861
  for (const arg of methodArrays) {
873
- result = await arg.apply(_this, methodArgs);
862
+ result = await arg.apply(this, methodArgs);
874
863
  }
875
864
  return result;
876
865
  };
@@ -886,10 +875,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
886
875
  };
887
876
  clazz.override = function (oExtension) {
888
877
  const pol = {};
889
- pol.constructor = function () {
890
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
891
- args[_key4] = arguments[_key4];
892
- }
878
+ pol.constructor = function (...args) {
893
879
  return clazz.apply(this, args);
894
880
  };
895
881
  const oClass = Metadata.createClass(clazz, `anonymousExtension~${uid()}`, pol, ControllerMetadata);
@@ -902,4 +888,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/base/
902
888
  }
903
889
  return _exports;
904
890
  }, false);
905
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGFzc1N1cHBvcnROYW1lc3BhY2UiLCJfZXhwb3J0cyIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwibWV0YWRhdGEiLCJtZXJnZSIsImNvbnRyb2xsZXJFeHRlbnNpb25zIiwicHJvcGVydGllcyIsImFnZ3JlZ2F0aW9ucyIsInJlZmVyZW5jZXMiLCJhc3NvY2lhdGlvbnMiLCJtZXRob2RzIiwiZXZlbnRzIiwiaW50ZXJmYWNlcyIsInByZXBhcmVHZXRBUElGdW5jdGlvbiIsIm9FdmVudCIsImFwaUZRTiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJfZ2V0QVBJRXh0ZW5zaW9uIiwiaXNBIiwiZ2V0UGFyZW50IiwiaXNEZXBlbmRlbnRCb3VuZCIsIm9EZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImhhc0NvcnJlY3REZXBlbmRlbnQiLCJmaW5kIiwib0RlcGVuZGVudCIsIm9Tb3VyY2VNYXAiLCJpbnN0YW5jZU1hcCIsImdldCIsInRhcmdldENvbnRyb2wiLCJlbnN1cmVHZXRBUEkiLCJfX2FwaVJlZ2lzdGVyZWQiLCJXZWFrTWFwIiwicmVnaXN0ZXJJbnN0YW5jZSIsIl9pbnN0YW5jZSIsImNvbnN0cnVjdG9yIiwic2V0IiwicHVzaCIsImdldEFQSSIsImRlZmluZVN0YXRlIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJzdGF0ZVByb3BlcnR5IiwiRXJyb3IiLCJ3cml0YWJsZSIsInN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWUiLCJpbml0aWFsaXplciIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZGVmaW5lVUk1Q2xhc3MiLCJtZXRhZGF0YURlZmluaXRpb24iLCJwcm90b3R5cGUiLCJrZXkiLCJpc0FycmF5IiwiY29uY2F0IiwicmVnaXN0ZXJVSTVNZXRhZGF0YSIsIm1peGluIiwiaW50ZXJmYWNlQ2xhc3MiLCJiYXNlQ3RvciIsImV4dGVuZCIsImludGVyZmFjZVByb3RvVHlwZVRvTWl4IiwiX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwicHJvcGFnYXRlSG9va0Zyb21NaXhpbiIsInNldHVwTWl4aW4iLCJjcmVhdGVSZWZlcmVuY2UiLCJjdXJyZW50Iiwic2V0Q3VycmVudCIsIm9Db250cm9sSW5zdGFuY2UiLCJkZWZpbmVSZWZlcmVuY2UiLCJCYXNlT2JqZWN0IiwiaXNPYmplY3RBIiwiYmFzZUNsYXNzTWV0YWRhdGEiLCJpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZSIsImdldEludGVyZmFjZU5hbWUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZm9yRWFjaCIsIm5hbWUiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImNyZWF0ZSIsIlNUQVRFX01PREVMX05BTUUiLCJfZ2V0SGFuZGxlckZvclN0YXRlUHJvcGVydHkiLCJqc29uTW9kZWwiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJvT2JqIiwiZGVlcENsb25lIiwiZ2V0T2JqZWN0Iiwib1RhcmdldCIsIm1vZGVsIiwiUHJveHkiLCJwIiwicmVjZWl2ZXIiLCJyZWYiLCJSZWZsZWN0IiwiYmluZCIsImlzTmFOIiwiTnVtYmVyIiwiX19iaW5kaW5nSW5mbyIsInBhdGgiLCJib3VuZFByb3BlcnRpZXMiLCJTeW1ib2wiLCJjcmVhdGVTdGF0ZVByb3h5Iiwic3RhdGVQcm9wZXJ0eU5hbWUiLCJib3VuZFRvU3RhdGVQcm9wcyIsImluaXRpYWxEYXRhIiwic2V0TW9kZWwiLCJKU09OTW9kZWwiLCJzdGF0ZU1vZGVsIiwiZ2V0TW9kZWwiLCJhdHRhY2hQcm9wZXJ0eUNoYW5nZSIsImV2dCIsImdldFBhcmFtZXRlciIsInN1YnN0cmluZyIsImluY2x1ZGVzIiwic2V0UHJvcGVydHkiLCJfX3N0YXRlQ3JlYXRlZCIsInByb3h5Iiwic2V0U3RhdGVNb2RlbCIsInZhbHVlIiwia25vd25Cb3VuZFByb3BlcnRpZXMiLCJfaWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSIsInNldFJlc3VsdCIsIl91cGRhdGVTdGF0ZURlYm91bmNlZCIsImNvbmZpZ3VyYWJsZSIsIl9jcmVhdGVTdGF0ZVByb3BlcnR5Iiwib2JqIiwidXBkYXRpbmdTdGF0ZSIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5RGVmIiwiYmluZFRvU3RhdGUiLCJfdXBkYXRlU3RhdGUiLCJfdXBkYXRlU3RhdGVUaW1lciIsIm9uU3RhdGVDaGFuZ2UiLCJfY2hhbmdlZFByb3BzIiwiY2hhbmdlZFByb3AiLCJzZXRUaW1lb3V0IiwiX19zdGF0ZU5hbWUiLCJmbkFwcGx5U2V0dGluZ3MiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwic2NvcGUiLCJtb2RlbHMiLCIkY29tcG9uZW50U3RhdGUiLCJjYWxsIiwiZm5TZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJvVmFsdWUiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiY2xhenoiLCJpbk9iaiIsIm9iak5hbWUiLCJiYXNlVHlwZSIsImdldFN0ZXJlb3R5cGUiLCJyZW5kZXJlckRlZmluaXRpb24iLCJyZW5kZXJlciIsInJlbmRlciIsImFwaVZlcnNpb24iLCJrZXlzIiwiZSIsImNFeHROYW1lIiwib3V0cHV0IiwiZm5Jbml0IiwiaW5pdCIsImZuQWZ0ZXJJbml0IiwiYWZ0ZXJJbml0IiwiX3RoaXMiLCJfbGVuMiIsIl9rZXkyIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwicHJvcGVydHlEZWZhdWx0IiwiX2JpbmRpbmdQcm9wZXJ0aWVzIiwidiIsIm1Qcm9wZXJ0aWVzIiwicHJvcGVydHlWYWx1ZSIsImdldFByb3BlcnR5IiwiYmluZGluZ1Byb3BlcnR5VmFsdWUiLCJwcm9wVmFsdWUiLCJfYXBwbHlpbmdTZXR0aW5ncyIsImFBZ2dyZWdhdGlvbktleXMiLCJhZ2dyZWdhdGlvbktleSIsImFnZ3JlZ2F0aW9uRGVmIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImFBc3NvY2lhdGlvbktleXMiLCJhc3NvY2lhdGlvbktleSIsInNldEFzc29jaWF0aW9uIiwiZ2V0QXNzb2NpYXRpb24iLCJyZWZlcmVuY2VQcm9wZXJ0aWVzIiwibWV0aG9kTmFtZSIsIm1ldGhvZERlZmluaXRpb24iLCJtZXRob2RIb2xkZXIiLCJtZXRob2RBcnJheXMiLCJyZXZlcnNlIiwicmVzdWx0IiwiX2xlbjMiLCJtZXRob2RBcmdzIiwiX2tleTMiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwiX2xlbjQiLCJfa2V5NCIsIm9DbGFzcyIsIk1ldGFkYXRhIiwiY3JlYXRlQ2xhc3MiLCJ1aWQiLCJDb250cm9sbGVyTWV0YWRhdGEiLCJfc3RhdGljT3ZlcnJpZGUiLCJfb3ZlcnJpZGUiLCJPYmplY3RQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDbGFzc1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGhvb2thYmxlLCBwcm9wYWdhdGVIb29rRnJvbU1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IE1ldGFkYXRhIGZyb20gXCJzYXAvdWkvYmFzZS9NZXRhZGF0YVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQ29udHJvbGxlck1ldGFkYXRhIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlck1ldGFkYXRhXCI7XG5pbXBvcnQgdHlwZSBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5cbnR5cGUgT3ZlcnJpZGVEZWZpbml0aW9uID0gUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xudHlwZSBVSTVDb250cm9sbGVyTWV0aG9kRGVmaW5pdGlvbiA9IHtcblx0b3ZlcnJpZGVFeGVjdXRpb24/OiBPdmVycmlkZUV4ZWN1dGlvbjtcblx0cHVibGljPzogYm9vbGVhbjtcblx0ZmluYWw/OiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIE5vbkFic3RyYWN0Q2xhc3M8VD4gPSBQaWNrPFQsIGtleW9mIFQ+ICYgKG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUKTtcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGRlY29yYXRvcnMgdG8gc3VwcG9ydCB0aGUgY3JlYXRpb24gb2YgVUk1IGNsYXNzZXMuXG4gKiBAbmFtZXNwYWNlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGFzc1N1cHBvcnROYW1lc3BhY2UgPSBcInNhcC5mZS5iYXNlLkNsYXNzU3VwcG9ydFwiO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBVSTUgcHJvcGVydHkgbWV0YWRhdGEuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFVJNVByb3BlcnR5TWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YmluZGFibGU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRieVZhbHVlPzogYm9vbGVhbjtcblx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdGJpbmRUb1N0YXRlPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBVSTUgYWdncmVnYXRpb24gbWV0YWRhdGEuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YWx0VHlwZXM/OiBzdHJpbmdbXTtcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRpc0RlZmF1bHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRkZWZhdWx0Q2xhc3M/OiB1bmtub3duO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG5cdGZvcndhcmRpbmc/OiBvYmplY3Q7XG59O1xuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgVUk1IGFzc29jaWF0aW9uIG1ldGFkYXRhLlxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0c3RhdGVQcm9wZXJ0eT86IHN0cmluZztcblx0c3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0cmV0dXJuVHlwZXM/OiBzdHJpbmdbXTtcblx0YnVpbGRpbmdCbG9ja01ldGFkYXRhPzogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NvckRlc2NyaXB0b3I8VD4gPSBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiAmIHsgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUIH07XG50eXBlIFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZT86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0b3ZlcnJpZGVzPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2xEZWZpbml0aW9uID0ge1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdG92ZXJyaWRlPzogdW5rbm93bjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcblx0X19hcGlSZWdpc3RlcmVkOiBib29sZWFuO1xufSAmIHtcblx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgWE1MRXZlbnRIb2xkZXIgPSB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcbn07XG5cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdC8vIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBUUyBjb21waWxlclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm9wZXJ0aWVzIG9mIGEgY29udHJvbC5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5cbnR5cGUgRXZlbnROYW1lc09mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIChldmVudDogaW5mZXIgRSkgPT4gdm9pZCA/IChFIGV4dGVuZHMgVUk1RXZlbnQgPyBLIDogbmV2ZXIpIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgRXZlbnRzT2Y8VD4gPSBQYXJ0aWFsPFBpY2s8VCwgRXZlbnROYW1lc09mPFQ+Pj47XG5cbmV4cG9ydCB0eXBlIENvbnZlcnRDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBLIGV4dGVuZHMgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiID8gc3RyaW5nIDogVFtLXTtcbn07XG50eXBlIENvbnRleHRUb1N0cmluZzxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBDb250ZXh0IHwgdW5kZWZpbmVkID8gc3RyaW5nIHwgdW5kZWZpbmVkIDogVFtLXTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZkJ1aWxkaW5nQmxvY2s8VD4gPSBDb250ZXh0VG9TdHJpbmc8UHJvcGVydGllc09mPFQ+PjtcbmV4cG9ydCB0eXBlIFN0cmljdFByb3BlcnRpZXNPZjxUPiA9IFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+O1xuZXhwb3J0IHR5cGUgVUk1QWNjZXNzb3JzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBnZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYGdldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKCkgPT4gVFtQXTtcbn07XG5leHBvcnQgdHlwZSBVSTVTZXR0ZXJzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBzZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYHNldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKHZhbHVlOiBUW1BdKSA9PiBUO1xufTtcbmV4cG9ydCB0eXBlIEVuaGFuY2VXaXRoVUk1PFQ+ID0ge1xuXHRuZXcgKHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcblx0bmV3IChzSWQ6IHN0cmluZywgcHJvcHM6IFByb3BlcnRpZXNPZjxUPik6IEVuaGFuY2VXaXRoVUk1PFQ+O1xufSAmIFQgJlxuXHRVSTVBY2Nlc3NvcnM8VD4gJlxuXHRVSTVTZXR0ZXJzPFQ+O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiA9IFwiSW5zdGVhZFwiIHwgXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiQWZ0ZXJBc3luY1wiIHwgXCJCZWZvcmVBc3luY1wiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uIHwgVUk1Q29udHJvbERlZmluaXRpb24pOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uIHtcblx0dGFyZ2V0Lm1ldGFkYXRhID0gbWVyZ2UoXG5cdFx0e1xuXHRcdFx0Y29udHJvbGxlckV4dGVuc2lvbnM6IHt9LFxuXHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0cmVmZXJlbmNlczoge30sXG5cdFx0XHRhc3NvY2lhdGlvbnM6IHt9LFxuXHRcdFx0bWV0aG9kczoge30sXG5cdFx0XHRldmVudHM6IHt9LFxuXHRcdFx0aW50ZXJmYWNlczogW11cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSA/PyB7fVxuXHQpIGFzIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0aGF0IHdpbGwgZmluZCB0aGUgY29ycmVjdCBBUEkgb2JqZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRyb2wgaGllcmFyY2h5LlxuICogQHBhcmFtIHRhcmdldFxuICogQHJldHVybnMgVGhlIHByb3BlciBnZXRBUEkgZnVuY3Rpb24gZm9yIHRoaXMgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldDogVUk1QVBJQ29udHJvbCkge1xuXHRyZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBVSTVBUElDb250cm9sPihcblx0XHR0aGlzOiBVSTVBUElDb250cm9sLFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0YXBpRlFOOiBzdHJpbmcgPSB0YXJnZXQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKClcblx0KTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0aWYgKHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKSB7XG5cdFx0XHRvU291cmNlID0gdGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24ob1NvdXJjZSkgPz8gb1NvdXJjZTtcblx0XHR9XG5cdFx0d2hpbGUgKG9Tb3VyY2UgJiYgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikgJiYgb1NvdXJjZS5nZXRQYXJlbnQpIHtcblx0XHRcdGlmICh0aGlzLmlzRGVwZW5kZW50Qm91bmQpIHtcblx0XHRcdFx0Y29uc3Qgb0RlcGVuZGVudHMgPSAob1NvdXJjZSBhcyBDb250cm9sKS5nZXREZXBlbmRlbnRzKCk7XG5cdFx0XHRcdGNvbnN0IGhhc0NvcnJlY3REZXBlbmRlbnQgPSBvRGVwZW5kZW50cy5maW5kKChvRGVwZW5kZW50OiBVSTVFbGVtZW50KSA9PiBvRGVwZW5kZW50LmlzQShhcGlGUU4pKTtcblx0XHRcdFx0aWYgKGhhc0NvcnJlY3REZXBlbmRlbnQpIHtcblx0XHRcdFx0XHRvU291cmNlID0gaGFzQ29ycmVjdERlcGVuZGVudCBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIW9Tb3VyY2UgfHwgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2VNYXAgPSB0aGlzLmluc3RhbmNlTWFwLmdldCh0aGlzKSBhcyBUW107XG5cdFx0XHRvU291cmNlID0gb1NvdXJjZU1hcD8uW29Tb3VyY2VNYXAubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRDb250cm9sO1xuXHRcdGlmIChvU291cmNlICYmIG9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdHRhcmdldENvbnRyb2wgPSBvU291cmNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcblx0fTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgd2hlbiBhbiB4bWxFdmVudEhhbmRsZXIgaXMgZGVmaW5lZCwgdGhlIGBnZXRBUElgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGFzc2lnbmVkLlxuICogQHBhcmFtIHRhcmdldCBUaGUgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBzaG91bGQgaG9sZCB0aGUgc3RhdGljIGZ1bmN0aW9uc1xuICovXG5jb25zdCBlbnN1cmVHZXRBUEkgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVBUElDb250cm9sKTogdm9pZCB7XG5cdGlmICghdGFyZ2V0Ll9fYXBpUmVnaXN0ZXJlZCkge1xuXHRcdHRhcmdldC5fX2FwaVJlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHRhcmdldC5pbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+KCk7XG5cdFx0dGFyZ2V0LnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoX2luc3RhbmNlOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0aWYgKCF0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpKSB7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2VNYXAuc2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvciwgW10pO1xuXHRcdFx0fVxuXHRcdFx0KHRoaXMuaW5zdGFuY2VNYXAuZ2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvcikgYXMgb2JqZWN0W10pLnB1c2goX2luc3RhbmNlKTtcblx0XHR9O1xuXHRcdHRhcmdldC5nZXRBUEkgPSBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0KTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xudHlwZSBFeHRlbmRXaXRoT2JqZWN0PFQsIEs+ID0gVCBleHRlbmRzIG9iamVjdCA/IEsgJiB7IFtUS2V5IGluIGtleW9mIFRdPzogQmluZGluZ0luZm9Ib2xkZXI8VFtUS2V5XT4gfSA6IEs7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2JqZWN0IG9mIGEgYnVpbGRpbmcgYmxvY2suXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXRlT2Y8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gfCBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gRXh0ZW5kV2l0aE9iamVjdDxVLCBSZWFkb25seUFycmF5PFU+PiA6IFRbS107XG59O1xuLyoqXG4gKiBUeXBlIGZvciBhIGdlbmVyaWMgc3RhdGUgb2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ0luZm9Ib2xkZXI8VD4gPSBUICYge1xuXHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsOiBzdHJpbmc7XG5cdFx0dHlwZTogVDtcblx0fTtcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGRlZmluZSBhIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIGNvbnRyb2wgc3RhdGUuXG4gKlxuICogUHJvcGVydGllcyBkZWZpbmVkIHdpdGggdGhpcyBkZWNvcmF0b3IgYXJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgaXMgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBhcyBhIG1hbmFnZWQgb2JqZWN0IGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb24gVGhlIHByb3BlcnR5IGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShhdHRyaWJ1dGVEZWZpbml0aW9uOiBVSTVQcm9wZXJ0eU1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSBmYWxzZTtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZ3JvdXAgPSBcIkRhdGFcIjtcblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGlmICghYXR0cmlidXRlRGVmaW5pdGlvbi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0Ly8gTm90IGV4cGxpY2l0ZWx5IGRlZmluZWRcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkRlZmluaXRpb24gVGhlIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFVJNSBkZWZhdWx0cyB0aGlzIHRvIHRydWUgYnV0IHRoaXMgaXMganVzdCB3ZWlyZC4uLlxuXHRcdFx0YWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgSSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgZm9sbG93aW5nIGFzc29jaWF0aW9uIGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIHVpNUFzc29jaWF0aW9uTWV0YWRhdGEgVGhlIGRlZmluaXRpb24gb2YgdGhlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IHVpNUFzc29jaWF0aW9uTWV0YWRhdGE7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDQuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbGVtZW50SW50ZXJmYWNlKGludGVyZmFjZU5hbWU6IHN0cmluZyk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIFhNTC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWxFdmVudEhhbmRsZXIoKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eWtleSkge1xuXHRcdGNvbnN0IGN1cnJlbnRDb25zdHJ1Y3RvcjogVUk1QVBJQ29udHJvbCA9IHRhcmdldC5jb25zdHJ1Y3RvciBhcyB1bmtub3duIGFzIFVJNUFQSUNvbnRyb2w7XG5cdFx0ZW5zdXJlR2V0QVBJKGN1cnJlbnRDb25zdHJ1Y3Rvcik7XG5cdFx0Y3VycmVudENvbnN0cnVjdG9yW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdFx0aWYgKGFyZ3M/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudENvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRcdFx0Y3VycmVudFRhcmdldD8uW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG59XG5cbnR5cGUgVUk1Q29udHJvbEFuZE1vcmUgPSB0eXBlb2YgQ29udHJvbCAmXG5cdEZ1bmN0aW9uICYge1xuXHRcdHJlZ2lzdGVySW5zdGFuY2U/OiBGdW5jdGlvbjtcblx0XHRvdmVycmlkZT86IEZ1bmN0aW9uO1xuXHRcdHJlbmRlcmVyPzogdW5rbm93bjtcblx0XHRyZW5kZXI6IEZ1bmN0aW9uO1xuXHRcdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0fTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIGNsYXNzIHNob3VsZCBkZWZpbmUgYSBVSTUgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgVUk1IGNsYXNzXG4gKiBAcGFyYW0gbWV0YWRhdGFEZWZpbml0aW9uIEFkZGl0aW9uYWwgaW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgY3JlYXRlcyBhIFVJNSBjbGFzcyBvdXQgb2YgdGhlIFRTIGNsYXNzXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVVSTVDbGFzcyh0YXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCB0YXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG5cdH0gYXMgQ2xhc3NEZWNvcmF0b3I7XG59XG50eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmE6IHVua25vd25bXSkgPT4gVDtcblxuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXG5cdFx0bGV0IGludGVyZmFjZVByb3RvVHlwZVRvTWl4ID0gaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlO1xuXHRcdHdoaWxlIChpbnRlcmZhY2VQcm90b1R5cGVUb01peCkge1xuXHRcdFx0YmFzZUN0b3IgPSBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKGJhc2VDdG9yLCBtZXRhZGF0YSwgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdFx0aW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdH1cblx0XHRwcm9wYWdhdGVIb29rRnJvbU1peGluKGJhc2VDdG9yLCBpbnRlcmZhY2VDbGFzcyk7XG5cblx0XHQvLyBIb29rIHRvIGFkZCBwb3RlbnRpYWxseSBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpblxuXHRcdGludGVyZmFjZUNsYXNzLnByb3RvdHlwZS5zZXR1cE1peGluPy4oYmFzZUN0b3IpO1xuXHRcdHJldHVybiBiYXNlQ3Rvcjtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVjZWl2aW5nIGNvbnRyb2wuXG5cdCAqIElmIG5vdCBkZWZpbmVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFkZGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2VOYW1lPygpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gYWRkIG1vcmUgbG9naWMgdG8gdGhlIG1peGluLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIHRoZSBiYXNlIGNsYXNzLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBiYXNlIGNsYXNzIHRoYXQgd2lsbCBiZSBleHRlbmRlZFxuXHQgKi9cblx0c2V0dXBNaXhpbj8oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2U8VCBleHRlbmRzIFVJNUVsZW1lbnQ+KCk6IFJlZjxUPiB7XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcblx0XHRzZXRDdXJyZW50OiBmdW5jdGlvbiAob0NvbnRyb2xJbnN0YW5jZTogVCk6IHZvaWQge1xuXHRcdFx0dGhpcy5jdXJyZW50ID0gb0NvbnRyb2xJbnN0YW5jZTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG9iamVjdCB3aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIHRocm91Z2gganN4IHRlbXBsYXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuZnVuY3Rpb24gX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyhcblx0YmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRiYXNlQ2xhc3NNZXRhZGF0YTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbixcblx0aW50ZXJmYWNlQ2xhc3NQcm90b3R5cGU6IEZ1bmN0aW9uW1wicHJvdG90eXBlXCJdXG4pOiBVSTVDb250cm9sQW5kTW9yZSB7XG5cdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZT8uZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdGlmIChpbnRlcmZhY2VOYW1lKSB7XG5cdFx0YmFzZUNsYXNzTWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9XG5cblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAobmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIG5hbWUgIT09IFwic2V0dXBNaXhpblwiICYmIG5hbWUgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0aWYgKCFiYXNlQ3Rvci5wcm90b3R5cGVbbmFtZV0pIHtcblx0XHRcdFx0Ly8gVGhlIGJhc2UgY2xhc3MgXCJ3aW5zXCIgb3ZlciB0aGUgbWl4aW5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUsIG5hbWUpIHx8IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0gbWVyZ2UoYmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhLCBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZS5tZXRhZGF0YSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJhc2VDdG9yO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIGlkZW50aWZpZXIgdXNlZCB0byByZWZlcmVuY2UgdGhlIGNvbXBvbmVudCBzdGF0ZSBtb2RlbCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBzeXN0ZW0uXG4gKiBUaGlzIGNvbnN0YW50IGRlZmluZXMgdGhlIGtleSB1bmRlciB3aGljaCBjb21wb25lbnQgc3RhdGUgZGF0YSBpcyBzdG9yZWQgYW5kIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX01PREVMX05BTUUgPSBcIiRjb21wb25lbnRTdGF0ZVwiO1xuZnVuY3Rpb24gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KGpzb25Nb2RlbDogSlNPTk1vZGVsLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgcGF0aEluTW9kZWwgPSBgLyR7cHJvcC50b1N0cmluZygpfWA7XG5cdGNvbnN0IG9PYmogPSBkZWVwQ2xvbmUoanNvbk1vZGVsLmdldE9iamVjdChwYXRoSW5Nb2RlbCkpO1xuXHRsZXQgb1RhcmdldDtcblx0aWYgKHByb3AgPT09IFwiX19iaW5kaW5nSW5mb1wiKSB7XG5cdFx0cmV0dXJuIHsgbW9kZWw6IFNUQVRFX01PREVMX05BTUUgfTtcblx0fVxuXHRpZiAob09iaiA9PT0gdW5kZWZpbmVkIHx8IG9PYmogPT09IG51bGwpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSBvT2JqO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvT2JqKSkge1xuXHRcdG9UYXJnZXQgPSBuZXcgUHJveHkob09iaiwge1xuXHRcdFx0Z2V0KHRhcmdldDogdW5rbm93bltdLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgcmVmID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmLmJpbmQodGFyZ2V0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWYgPT09IHVuZGVmaW5lZCAmJiBpc05hTihOdW1iZXIocC50b1N0cmluZygpKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X19iaW5kaW5nSW5mbzoge1xuXHRcdFx0XHRcdFx0XHRtb2RlbDogU1RBVEVfTU9ERUxfTkFNRSxcblx0XHRcdFx0XHRcdFx0cGF0aDogcFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlZjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0ID0geyAuLi5vT2JqIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIG9UYXJnZXQgIT09IG51bGwpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogU1RBVEVfTU9ERUxfTkFNRSxcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgU1RBVEVfTU9ERUxfTkFNRSk7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFNUQVRFX01PREVMX05BTUUpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAoXG5cdFx0XHRcdG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSxcblx0XHRcdFx0c2NvcGU/OiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHRcdCk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGUpIHtcblx0XHRcdFx0XHQvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBtb2RlbCBkaXJlY3RseSBmcm9tIG1TZXR0aW5ncy5tb2RlbHMgYXMgdGhpcyBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCB3aGVuIGNsb25pbmdcblx0XHRcdFx0XHRtU2V0dGluZ3MubW9kZWxzID0geyAuLi5tU2V0dGluZ3MubW9kZWxzIH07XG5cdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5tb2RlbHMuJGNvbXBvbmVudFN0YXRlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncywgc2NvcGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFNUQVRFX01PREVMX05BTUUpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlICE9PSBiaW5kaW5nUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gdGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BWYWx1ZSB9OyAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJvcGVydHlEZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgdGhpc1twcm9wZXJ0eUtleV0gIT09IHByb3BlcnR5RGVmYXVsdCkge1xuXHRcdFx0XHRcdC8vIGRvbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmVcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5RGVmYXVsdDtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZiA9IG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldO1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA/PyBhZ2dyZWdhdGlvbkRlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgKGRlZmF1bHRWYWx1ZSBhcyBVSTVFbGVtZW50KT8uaXNBKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1thZ2dyZWdhdGlvbktleV0gPSBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucmVmZXJlbmNlcyk7XG5cdFx0XHRyZWZlcmVuY2VQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogY3JlYXRlUmVmZXJlbmNlKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGhvZE5hbWUgaW4gb2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IG9iai5tZXRhZGF0YS5tZXRob2RzW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIgfHwgbWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLm1ldGhvZEhvbGRlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXIgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbdGhpc1ttZXRob2ROYW1lXV07XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG1ldGhvZE5hbWUsIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXS5wdXNoKHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKC4uLm1ldGhvZEFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZEFycmF5cy5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhcmcgb2YgbWV0aG9kQXJyYXlzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBhcmcuYXBwbHkodGhpcywgbWV0aG9kQXJncyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQkFBcUIsR0FBRywwQkFBMEI7O0VBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQWdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFDLFFBQUEsQ0FBQUQscUJBQUEsR0FBQUEscUJBQUE7RUF3Q0EsTUFBTUUsY0FBYyxHQUFHLFNBQUFBLENBQVVDLE1BQXNELEVBQWdDO0lBQ3RIQSxNQUFNLENBQUNDLFFBQVEsR0FBR0MsS0FBSyxDQUN0QjtNQUNDQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7TUFDeEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsVUFBVSxFQUFFLENBQUMsQ0FBQztNQUNkQyxZQUFZLEVBQUUs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
891
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGFzc1N1cHBvcnROYW1lc3BhY2UiLCJfZXhwb3J0cyIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwibWV0YWRhdGEiLCJtZXJnZSIsImNvbnRyb2xsZXJFeHRlbnNpb25zIiwicHJvcGVydGllcyIsImFnZ3JlZ2F0aW9ucyIsInJlZmVyZW5jZXMiLCJhc3NvY2lhdGlvbnMiLCJtZXRob2RzIiwiZXZlbnRzIiwiaW50ZXJmYWNlcyIsInByZXBhcmVHZXRBUElGdW5jdGlvbiIsIm9FdmVudCIsImFwaUZRTiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJfZ2V0QVBJRXh0ZW5zaW9uIiwiaXNBIiwiZ2V0UGFyZW50IiwiaXNEZXBlbmRlbnRCb3VuZCIsIm9EZXBlbmRlbnRzIiwiZ2V0RGVwZW5kZW50cyIsImhhc0NvcnJlY3REZXBlbmRlbnQiLCJmaW5kIiwib0RlcGVuZGVudCIsIm9Tb3VyY2VNYXAiLCJpbnN0YW5jZU1hcCIsImdldCIsImxlbmd0aCIsInRhcmdldENvbnRyb2wiLCJlbnN1cmVHZXRBUEkiLCJfX2FwaVJlZ2lzdGVyZWQiLCJXZWFrTWFwIiwicmVnaXN0ZXJJbnN0YW5jZSIsIl9pbnN0YW5jZSIsImNvbnN0cnVjdG9yIiwic2V0IiwicHVzaCIsImdldEFQSSIsImRlZmluZVN0YXRlIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJzdGF0ZVByb3BlcnR5IiwidW5kZWZpbmVkIiwiRXJyb3IiLCJ3cml0YWJsZSIsInN0YXRlUHJvcGVydHlEZWZhdWx0VmFsdWUiLCJpbml0aWFsaXplciIsIm1ldGhvZE92ZXJyaWRlIiwiZXh0ZW5zaW9uTmFtZSIsIm92ZXJyaWRlIiwib3ZlcnJpZGVzIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsInRvU3RyaW5nIiwiZXh0ZW5zaWJsZSIsIm92ZXJyaWRlRXhlY3V0aW9uIiwiZGVzY3JpcHRvciIsImhvb2thYmxlIiwicHVibGljRXh0ZW5zaW9uIiwiZW51bWVyYWJsZSIsInB1YmxpYyIsInByaXZhdGVFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImZpbmFsIiwidXNpbmdFeHRlbnNpb24iLCJleHRlbnNpb25DbGFzcyIsImV2ZW50IiwiZXZlbnRLZXkiLCJwcm9wZXJ0eSIsImF0dHJpYnV0ZURlZmluaXRpb24iLCJiaW5kYWJsZSIsImlzQmluZGluZ0luZm8iLCJncm91cCIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdFZhbHVlIiwiYWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJtdWx0aXBsZSIsImlzRGVmYXVsdCIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFzc29jaWF0aW9uIiwidWk1QXNzb2NpYXRpb25NZXRhZGF0YSIsImltcGxlbWVudEludGVyZmFjZSIsImludGVyZmFjZU5hbWUiLCJ4bWxFdmVudEhhbmRsZXIiLCJwcm9wZXJ0eWtleSIsImN1cnJlbnRDb25zdHJ1Y3RvciIsImFyZ3MiLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsInByb3RvdHlwZSIsImtleSIsIkFycmF5IiwiaXNBcnJheSIsImNvbmNhdCIsInJlZ2lzdGVyVUk1TWV0YWRhdGEiLCJtaXhpbiIsImludGVyZmFjZUNsYXNzIiwiYmFzZUN0b3IiLCJleHRlbmQiLCJpbnRlcmZhY2VQcm90b1R5cGVUb01peCIsIl9hZGRJbnRlcmZhY2VQcm90b1R5cGVzVG9CYXNlQ2xhc3MiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsInByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4iLCJzZXR1cE1peGluIiwiY3JlYXRlUmVmZXJlbmNlIiwiY3VycmVudCIsInNldEN1cnJlbnQiLCJvQ29udHJvbEluc3RhbmNlIiwiZGVmaW5lUmVmZXJlbmNlIiwiQmFzZU9iamVjdCIsImlzT2JqZWN0QSIsImJhc2VDbGFzc01ldGFkYXRhIiwiaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUiLCJnZXRJbnRlcmZhY2VOYW1lIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJuYW1lIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJjcmVhdGUiLCJTVEFURV9NT0RFTF9OQU1FIiwiX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5IiwianNvbk1vZGVsIiwicHJvcCIsInBhdGhJbk1vZGVsIiwib09iaiIsImRlZXBDbG9uZSIsImdldE9iamVjdCIsIm9UYXJnZXQiLCJtb2RlbCIsIlByb3h5IiwicCIsInJlY2VpdmVyIiwicmVmIiwiUmVmbGVjdCIsImJpbmQiLCJpc05hTiIsIk51bWJlciIsIl9fYmluZGluZ0luZm8iLCJwYXRoIiwiYm91bmRQcm9wZXJ0aWVzIiwiU3ltYm9sIiwiY3JlYXRlU3RhdGVQcm94eSIsInN0YXRlUHJvcGVydHlOYW1lIiwiYm91bmRUb1N0YXRlUHJvcHMiLCJpbml0aWFsRGF0YSIsInNldE1vZGVsIiwiSlNPTk1vZGVsIiwic3RhdGVNb2RlbCIsImdldE1vZGVsIiwiYXR0YWNoUHJvcGVydHlDaGFuZ2UiLCJldnQiLCJnZXRQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJpbmNsdWRlcyIsInNldFByb3BlcnR5IiwiX19zdGF0ZUNyZWF0ZWQiLCJwcm94eSIsInNldFN0YXRlTW9kZWwiLCJ2YWx1ZSIsImtub3duQm91bmRQcm9wZXJ0aWVzIiwiX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUiLCJzZXRSZXN1bHQiLCJfdXBkYXRlU3RhdGVEZWJvdW5jZWQiLCJjb25maWd1cmFibGUiLCJfY3JlYXRlU3RhdGVQcm9wZXJ0eSIsIm9iaiIsInVwZGF0aW5nU3RhdGUiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eURlZiIsImJpbmRUb1N0YXRlIiwiX3VwZGF0ZVN0YXRlIiwiX3VwZGF0ZVN0YXRlVGltZXIiLCJvblN0YXRlQ2hhbmdlIiwiX2NoYW5nZWRQcm9wcyIsImNoYW5nZWRQcm9wIiwic2V0VGltZW91dCIsIl9fc3RhdGVOYW1lIiwiZm5BcHBseVNldHRpbmdzIiwiYXBwbHlTZXR0aW5ncyIsIm1TZXR0aW5ncyIsInNjb3BlIiwibW9kZWxzIiwiJGNvbXBvbmVudFN0YXRlIiwiY2FsbCIsImZuU2V0UHJvcGVydHkiLCJzUHJvcGVydHlOYW1lIiwib1ZhbHVlIiwiYlN1cHByZXNzSW52YWxpZGF0ZSIsImNsYXp6IiwiaW5PYmoiLCJvYmpOYW1lIiwiYmFzZVR5cGUiLCJnZXRTdGVyZW90eXBlIiwicmVuZGVyZXJEZWZpbml0aW9uIiwicmVuZGVyZXIiLCJyZW5kZXIiLCJhcGlWZXJzaW9uIiwia2V5cyIsImUiLCJjRXh0TmFtZSIsIm91dHB1dCIsImZuSW5pdCIsImluaXQiLCJmbkFmdGVySW5pdCIsImFmdGVySW5pdCIsImFwcGx5IiwiYVByb3BlcnR5S2V5cyIsInByb3BlcnR5RGVmYXVsdCIsIl9iaW5kaW5nUHJvcGVydGllcyIsInYiLCJtUHJvcGVydGllcyIsInByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eSIsImJpbmRpbmdQcm9wZXJ0eVZhbHVlIiwicHJvcFZhbHVlIiwiX2FwcGx5aW5nU2V0dGluZ3MiLCJhQWdncmVnYXRpb25LZXlzIiwiYWdncmVnYXRpb25LZXkiLCJhZ2dyZWdhdGlvbkRlZiIsInNldEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25Db250ZW50IiwiZ2V0QWdncmVnYXRpb24iLCJhQXNzb2NpYXRpb25LZXlzIiwiYXNzb2NpYXRpb25LZXkiLCJzZXRBc3NvY2lhdGlvbiIsImdldEFzc29jaWF0aW9uIiwicmVmZXJlbmNlUHJvcGVydGllcyIsIm1ldGhvZE5hbWUiLCJtZXRob2REZWZpbml0aW9uIiwibWV0aG9kSG9sZGVyIiwibWV0aG9kQXJncyIsIm1ldGhvZEFycmF5cyIsInJldmVyc2UiLCJyZXN1bHQiLCJhcmciLCJvRXh0ZW5zaW9uIiwicG9sIiwib0NsYXNzIiwiTWV0YWRhdGEiLCJjcmVhdGVDbGFzcyIsInVpZCIsIkNvbnRyb2xsZXJNZXRhZGF0YSIsIl9zdGF0aWNPdmVycmlkZSIsIl9vdmVycmlkZSIsIk9iamVjdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgaG9va2FibGUsIHByb3BhZ2F0ZUhvb2tGcm9tTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgTWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01ldGFkYXRhXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBDb250cm9sbGVyTWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyTWV0YWRhdGFcIjtcbmltcG9ydCB0eXBlIE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1vZGVsJFByb3BlcnR5Q2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxudHlwZSBPdmVycmlkZURlZmluaXRpb24gPSBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbj47XG50eXBlIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uO1xuXHRwdWJsaWM/OiBib29sZWFuO1xuXHRmaW5hbD86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgTm9uQWJzdHJhY3RDbGFzczxUPiA9IFBpY2s8VCwga2V5b2YgVD4gJiAobmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQpO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgZGVjb3JhdG9ycyB0byBzdXBwb3J0IHRoZSBjcmVhdGlvbiBvZiBVSTUgY2xhc3Nlcy5cbiAqIEBuYW1lc3BhY2VcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsYXNzU3VwcG9ydE5hbWVzcGFjZSA9IFwic2FwLmZlLmJhc2UuQ2xhc3NTdXBwb3J0XCI7XG5cbi8qKlxuICogRGVmaW5pdGlvbiBvZiBhIFVJNSBwcm9wZXJ0eSBtZXRhZGF0YS5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgVUk1UHJvcGVydHlNZXRhZGF0YSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHR1bmRlcmx5aW5nVHlwZT86IHN0cmluZztcblx0YmluZGFibGU/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRieVZhbHVlPzogYm9vbGVhbjtcblx0aXNCaW5kaW5nSW5mbz86IGJvb2xlYW47XG5cdGJpbmRUb1N0YXRlPzogYm9vbGVhbjtcblx0ZXhwZWN0ZWRBbm5vdGF0aW9ucz86IHN0cmluZ1tdO1xuXHRleHBlY3RlZFR5cGVzPzogc3RyaW5nW107XG5cdGFsbG93ZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblx0dmlzaWJpbGl0eT86IHN0cmluZztcbn07XG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBVSTUgYWdncmVnYXRpb24gbWV0YWRhdGEuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEgPSB7XG5cdHR5cGU6IHN0cmluZztcblx0YWx0VHlwZXM/OiBzdHJpbmdbXTtcblx0bXVsdGlwbGU/OiBib29sZWFuO1xuXHRpc0RlZmF1bHQ/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuXHRkZWZhdWx0Q2xhc3M/OiB1bmtub3duO1xuXHRzaW5ndWxhck5hbWU/OiBzdHJpbmc7XG5cdHZpc2liaWxpdHk/OiBzdHJpbmc7XG5cdGZvcndhcmRpbmc/OiBvYmplY3Q7XG59O1xuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgVUk1IGFzc29jaWF0aW9uIG1ldGFkYXRhLlxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgdHlwZSBVSTVBc3NvY2lhdGlvbk1ldGFkYXRhID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdG11bHRpcGxlPzogYm9vbGVhbjtcblx0c2luZ3VsYXJOYW1lPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb24gPSB7XG5cdGRlZmF1bHRBZ2dyZWdhdGlvbj86IHN0cmluZztcblx0Y29udHJvbGxlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIHR5cGVvZiBDb250cm9sbGVyRXh0ZW5zaW9uIHwgRnVuY3Rpb24+O1xuXHRwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBVSTVQcm9wZXJ0eU1ldGFkYXRhPjtcblx0YWdncmVnYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBVSTVBZ2dyZWdhdGlvbk1ldGFkYXRhPjtcblx0cmVmZXJlbmNlczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cdGFzc29jaWF0aW9uczogUmVjb3JkPHN0cmluZywgVUk1QXNzb2NpYXRpb25NZXRhZGF0YT47XG5cdG1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVJNUNvbnRyb2xsZXJNZXRob2REZWZpbml0aW9uPjtcblx0ZXZlbnRzOiBSZWNvcmQ8c3RyaW5nLCB7fT47XG5cdGludGVyZmFjZXM6IHN0cmluZ1tdO1xuXHRsaWJyYXJ5Pzogc3RyaW5nO1xuXHRkZXNpZ250aW1lPzogc3RyaW5nO1xuXHRjb25maWc/OiB7XG5cdFx0ZnVsbFdpZHRoPzogYm9vbGVhbjtcblx0fTtcblx0c3RhdGVQcm9wZXJ0eT86IHN0cmluZztcblx0c3RhdGVQcm9wZXJ0eURlZmF1bHRWYWx1ZT86IHVua25vd247XG5cdG1hbmlmZXN0Pzogc3RyaW5nIHwgdW5rbm93bjtcblx0cmV0dXJuVHlwZXM/OiBzdHJpbmdbXTtcblx0YnVpbGRpbmdCbG9ja01ldGFkYXRhPzogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBY2Nlc3NvckRlc2NyaXB0b3I8VD4gPSBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPiAmIHsgaW5pdGlhbGl6ZXI/OiAoKSA9PiBUIH07XG50eXBlIFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uID0ge1xuXHRvdmVycmlkZT86IHsgZXh0ZW5zaW9uPzogUmVjb3JkPHN0cmluZywgT3ZlcnJpZGVEZWZpbml0aW9uPiB9ICYge1xuXHRcdFtrOiBzdHJpbmddOiBGdW5jdGlvbjtcblx0fTtcblx0b3ZlcnJpZGVzPzogeyBleHRlbnNpb24/OiBSZWNvcmQ8c3RyaW5nLCBPdmVycmlkZURlZmluaXRpb24+IH0gJiB7XG5cdFx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xuXHR9O1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJlbmRlcmVyPzogRnVuY3Rpb247XG59O1xuXG50eXBlIFVJNUNvbnRyb2xEZWZpbml0aW9uID0ge1xuXHRtZXRhZGF0YT86IFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdG92ZXJyaWRlPzogdW5rbm93bjtcblx0cmVuZGVyZXI/OiBGdW5jdGlvbjtcbn07XG5cbnR5cGUgVUk1QVBJQ29udHJvbCA9IENvbnRyb2wgJiB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcblx0X19hcGlSZWdpc3RlcmVkOiBib29sZWFuO1xufSAmIHtcblx0W2s6IHN0cmluZ106IEZ1bmN0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgWE1MRXZlbnRIb2xkZXIgPSB7XG5cdGdldEFQSShldmVudDogVUk1RXZlbnQsIGZxZG4/OiBzdHJpbmcpOiBVSTVBUElDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRpbnN0YW5jZU1hcDogV2Vha01hcDxvYmplY3QsIG9iamVjdFtdPjtcbn07XG5cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdC8vIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBUUyBjb21waWxlclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLO1xufVtrZXlvZiBUXTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm9wZXJ0aWVzIG9mIGEgY29udHJvbC5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQsIEsgZXh0ZW5kcyBrZXlvZiBUIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiA9IFBhcnRpYWw8UGljazxULCBDb250cm9sUHJvcGVydHlOYW1lczxUPj4+ICZcblx0KEsgZXh0ZW5kcyBrZXlvZiBUID8gUGFydGlhbDxQaWNrPFQsIEs+PiA6IHt9KSAmXG5cdCRDb250cm9sU2V0dGluZ3M7XG5cbnR5cGUgRXZlbnROYW1lc09mPFQ+ID0ge1xuXHRbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIChldmVudDogaW5mZXIgRSkgPT4gdm9pZCA/IChFIGV4dGVuZHMgVUk1RXZlbnQgPyBLIDogbmV2ZXIpIDogbmV2ZXI7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgRXZlbnRzT2Y8VD4gPSBQYXJ0aWFsPFBpY2s8VCwgRXZlbnROYW1lc09mPFQ+Pj47XG5cbmV4cG9ydCB0eXBlIENvbnZlcnRDb250ZXh0VG9TdHJpbmc8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBLIGV4dGVuZHMgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiID8gc3RyaW5nIDogVFtLXTtcbn07XG50eXBlIENvbnRleHRUb1N0cmluZzxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBDb250ZXh0IHwgdW5kZWZpbmVkID8gc3RyaW5nIHwgdW5kZWZpbmVkIDogVFtLXTtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnRpZXNPZkJ1aWxkaW5nQmxvY2s8VD4gPSBDb250ZXh0VG9TdHJpbmc8UHJvcGVydGllc09mPFQ+PjtcbmV4cG9ydCB0eXBlIFN0cmljdFByb3BlcnRpZXNPZjxUPiA9IFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+O1xuZXhwb3J0IHR5cGUgVUk1QWNjZXNzb3JzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBnZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYGdldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKCkgPT4gVFtQXTtcbn07XG5leHBvcnQgdHlwZSBVSTVTZXR0ZXJzPFQ+ID0ge1xuXHQvLyBBZGQgYWxsIHRoZSBzZXRYWFggbWV0aG9kLCBtaWdodCBhZGQgdG9vIG11Y2ggYXMgSSdtIG5vdCBmaWx0ZXJpbmcgb24gYWN0dWFsIHByb3BlcnRpZXMuLi5cblx0W1AgaW4ga2V5b2YgUmVxdWlyZWQ8VD4gYXMgYHNldCR7Q2FwaXRhbGl6ZTxzdHJpbmcgJiBQPn1gXTogKHZhbHVlOiBUW1BdKSA9PiBUO1xufTtcbmV4cG9ydCB0eXBlIEVuaGFuY2VXaXRoVUk1PFQ+ID0ge1xuXHRuZXcgKHByb3BzOiBQcm9wZXJ0aWVzT2Y8VD4pOiBFbmhhbmNlV2l0aFVJNTxUPjtcblx0bmV3IChzSWQ6IHN0cmluZywgcHJvcHM6IFByb3BlcnRpZXNPZjxUPik6IEVuaGFuY2VXaXRoVUk1PFQ+O1xufSAmIFQgJlxuXHRVSTVBY2Nlc3NvcnM8VD4gJlxuXHRVSTVTZXR0ZXJzPFQ+O1xuXG5leHBvcnQgdHlwZSBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiA9IFwiSW5zdGVhZFwiIHwgXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiQWZ0ZXJBc3luY1wiIHwgXCJCZWZvcmVBc3luY1wiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uIHwgVUk1Q29udHJvbERlZmluaXRpb24pOiBVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uIHtcblx0dGFyZ2V0Lm1ldGFkYXRhID0gbWVyZ2UoXG5cdFx0e1xuXHRcdFx0Y29udHJvbGxlckV4dGVuc2lvbnM6IHt9LFxuXHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0cmVmZXJlbmNlczoge30sXG5cdFx0XHRhc3NvY2lhdGlvbnM6IHt9LFxuXHRcdFx0bWV0aG9kczoge30sXG5cdFx0XHRldmVudHM6IHt9LFxuXHRcdFx0aW50ZXJmYWNlczogW11cblx0XHR9LFxuXHRcdHRhcmdldC5tZXRhZGF0YSA/PyB7fVxuXHQpIGFzIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb247XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0aGF0IHdpbGwgZmluZCB0aGUgY29ycmVjdCBBUEkgb2JqZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbnRyb2wgaGllcmFyY2h5LlxuICogQHBhcmFtIHRhcmdldFxuICogQHJldHVybnMgVGhlIHByb3BlciBnZXRBUEkgZnVuY3Rpb24gZm9yIHRoaXMgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUdldEFQSUZ1bmN0aW9uKHRhcmdldDogVUk1QVBJQ29udHJvbCkge1xuXHRyZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBVSTVBUElDb250cm9sPihcblx0XHR0aGlzOiBVSTVBUElDb250cm9sLFxuXHRcdG9FdmVudDogVUk1RXZlbnQsXG5cdFx0YXBpRlFOOiBzdHJpbmcgPSB0YXJnZXQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKClcblx0KTogVCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgTWFuYWdlZE9iamVjdCB8IG51bGw7XG5cdFx0aWYgKHRhcmdldC5fZ2V0QVBJRXh0ZW5zaW9uKSB7XG5cdFx0XHRvU291cmNlID0gdGFyZ2V0Ll9nZXRBUElFeHRlbnNpb24ob1NvdXJjZSkgPz8gb1NvdXJjZTtcblx0XHR9XG5cdFx0d2hpbGUgKG9Tb3VyY2UgJiYgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikgJiYgb1NvdXJjZS5nZXRQYXJlbnQpIHtcblx0XHRcdGlmICh0aGlzLmlzRGVwZW5kZW50Qm91bmQpIHtcblx0XHRcdFx0Y29uc3Qgb0RlcGVuZGVudHMgPSAob1NvdXJjZSBhcyBDb250cm9sKS5nZXREZXBlbmRlbnRzKCk7XG5cdFx0XHRcdGNvbnN0IGhhc0NvcnJlY3REZXBlbmRlbnQgPSBvRGVwZW5kZW50cy5maW5kKChvRGVwZW5kZW50OiBVSTVFbGVtZW50KSA9PiBvRGVwZW5kZW50LmlzQShhcGlGUU4pKTtcblx0XHRcdFx0aWYgKGhhc0NvcnJlY3REZXBlbmRlbnQpIHtcblx0XHRcdFx0XHRvU291cmNlID0gaGFzQ29ycmVjdERlcGVuZGVudCBhcyB1bmtub3duIGFzIFQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0b1NvdXJjZSA9IG9Tb3VyY2UuZ2V0UGFyZW50KCkgYXMgdW5rbm93biBhcyBUO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvU291cmNlID0gb1NvdXJjZS5nZXRQYXJlbnQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIW9Tb3VyY2UgfHwgIW9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2VNYXAgPSB0aGlzLmluc3RhbmNlTWFwLmdldCh0aGlzKSBhcyBUW107XG5cdFx0XHRvU291cmNlID0gb1NvdXJjZU1hcD8uW29Tb3VyY2VNYXAubGVuZ3RoIC0gMV07XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRDb250cm9sO1xuXHRcdGlmIChvU291cmNlICYmIG9Tb3VyY2UuaXNBPFQ+KGFwaUZRTikpIHtcblx0XHRcdHRhcmdldENvbnRyb2wgPSBvU291cmNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0Q29udHJvbDtcblx0fTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgd2hlbiBhbiB4bWxFdmVudEhhbmRsZXIgaXMgZGVmaW5lZCwgdGhlIGBnZXRBUElgIGZ1bmN0aW9uIGlzIHByb3Blcmx5IGFzc2lnbmVkLlxuICogQHBhcmFtIHRhcmdldCBUaGUgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBzaG91bGQgaG9sZCB0aGUgc3RhdGljIGZ1bmN0aW9uc1xuICovXG5jb25zdCBlbnN1cmVHZXRBUEkgPSBmdW5jdGlvbiAodGFyZ2V0OiBVSTVBUElDb250cm9sKTogdm9pZCB7XG5cdGlmICghdGFyZ2V0Ll9fYXBpUmVnaXN0ZXJlZCkge1xuXHRcdHRhcmdldC5fX2FwaVJlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHRhcmdldC5pbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwPG9iamVjdCwgb2JqZWN0W10+KCk7XG5cdFx0dGFyZ2V0LnJlZ2lzdGVySW5zdGFuY2UgPSBmdW5jdGlvbiAoX2luc3RhbmNlOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0aWYgKCF0aGlzLmluc3RhbmNlTWFwLmdldChfaW5zdGFuY2UuY29uc3RydWN0b3IpKSB7XG5cdFx0XHRcdHRoaXMuaW5zdGFuY2VNYXAuc2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvciwgW10pO1xuXHRcdFx0fVxuXHRcdFx0KHRoaXMuaW5zdGFuY2VNYXAuZ2V0KF9pbnN0YW5jZS5jb25zdHJ1Y3RvcikgYXMgb2JqZWN0W10pLnB1c2goX2luc3RhbmNlKTtcblx0XHR9O1xuXHRcdHRhcmdldC5nZXRBUEkgPSBwcmVwYXJlR2V0QVBJRnVuY3Rpb24odGFyZ2V0KTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xudHlwZSBFeHRlbmRXaXRoT2JqZWN0PFQsIEs+ID0gVCBleHRlbmRzIG9iamVjdCA/IEsgJiB7IFtUS2V5IGluIGtleW9mIFRdPzogQmluZGluZ0luZm9Ib2xkZXI8VFtUS2V5XT4gfSA6IEs7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2JqZWN0IG9mIGEgYnVpbGRpbmcgYmxvY2suXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCB0eXBlIFN0YXRlT2Y8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gfCBSZWFkb25seUFycmF5PGluZmVyIFU+ID8gRXh0ZW5kV2l0aE9iamVjdDxVLCBSZWFkb25seUFycmF5PFU+PiA6IFRbS107XG59O1xuLyoqXG4gKiBUeXBlIGZvciBhIGdlbmVyaWMgc3RhdGUgb2JqZWN0XG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNTdGF0ZSA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvYmplY3Qgb2YgYSBidWlsZGluZyBibG9jay5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ0luZm9Ib2xkZXI8VD4gPSBUICYge1xuXHRfX2JpbmRpbmdJbmZvOiB7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsOiBzdHJpbmc7XG5cdFx0dHlwZTogVDtcblx0fTtcbn07XG5cbi8qKlxuICogQWxsb3dzIHRvIGRlZmluZSBhIHByb3BlcnR5IHRoYXQgaG9sZHMgdGhlIGNvbnRyb2wgc3RhdGUuXG4gKlxuICogUHJvcGVydGllcyBkZWZpbmVkIHdpdGggdGhpcyBkZWNvcmF0b3IgYXJlIGF1dG9tYXRpY2FsbHkgYm91bmQgdG8gdGhlIGNvbnRyb2wgc3RhdGUgd2hlbiB1c2VkIGluIEpTWC5cbiAqIEFycmF5cyBuZWVkIHRvIGJlIGJvdW5kIHVzaW5nIHRoZSBgYmluZFN0YXRlYCBmdW5jdGlvbi5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTdGF0ZSgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAobWV0YWRhdGEuc3RhdGVQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBzdGF0ZSBwcm9wZXJ0eSBwZXIgY29udHJvbCBpcyBhbGxvd2VkXCIpO1xuXHRcdH1cblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5ID0gcHJvcGVydHlLZXk7XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRtZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyO1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyB1bmtub3duIGFzIFByb3BlcnR5RGVjb3JhdG9yOyAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGFuIGFjY2Vzc29yIGRlY29yYXRvciwgYnV0IHNvbWVob3cgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBpdCBpZiBpIGRlY2xhcmUgaXQgYXMgc3VjaC47XG59XG5cbi8qICNyZWdpb24gQ09OVFJPTExFUiBFWFRFTlNJT05TICovXG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIGlzIGFuIG92ZXJyaWRlIGZvciB0aGUgbWV0aG9kIG5hbWUgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoZSBzcGVjaWZpYyBjb250cm9sbGVyIGV4dGVuc2lvbiBvciBiYXNlIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiB0aGF0IHdpbGwgYmUgb3ZlcnJpZGRlblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ldGhvZE92ZXJyaWRlKGV4dGVuc2lvbk5hbWU/OiBzdHJpbmcpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5KSB7XG5cdFx0aWYgKCF0YXJnZXQub3ZlcnJpZGUpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZSA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZXMpIHtcblx0XHRcdHRhcmdldC5vdmVycmlkZXMgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGVzO1xuXHRcdGlmIChleHRlbnNpb25OYW1lKSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW2V4dGVuc2lvbk5hbWVdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bZXh0ZW5zaW9uTmFtZV07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSAodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPilbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHRoZSBtZXRob2QgY2FuIGJlIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGJhc2VkIG9uIHRoZSBkZWZpbmVkIG92ZXJyaWRlRXhlY3V0aW9uVHlwZS5cbiAqIEBwYXJhbSBvdmVycmlkZUV4ZWN1dGlvbiBUaGUgT3ZlcnJpZGVFeGVjdXRpb24gZGVmaW5pbmcgd2hlbiB0aGUgb3ZlcnJpZGUgc2hvdWxkIHJ1biAoQmVmb3JlIC8gQWZ0ZXIgLyBJbnN0ZWFkKVxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2libGUob3ZlcnJpZGVFeGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xsZXJEZWZpbml0aW9uLCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLm92ZXJyaWRlRXhlY3V0aW9uID0gb3ZlcnJpZGVFeGVjdXRpb24gYXMgdW5rbm93biBhcyBPdmVycmlkZUV4ZWN1dGlvbjtcblxuXHRcdC8vIGJ5IGRlZmF1bHQsIGV2ZXJ5IGV4dGVuc2libGUgbWV0aG9kIGlzIGFsc28gaG9va2FibGUgKGV4Y2VwdCB0aG9zZSBkZWZpbmVkIGFzIEluc3RlYWQpXG5cdFx0aWYgKG92ZXJyaWRlRXhlY3V0aW9uICE9PSBcIkluc3RlYWRcIikge1xuXHRcdFx0aG9va2FibGUob3ZlcnJpZGVFeGVjdXRpb24pKHRhcmdldCwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpO1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlciBleHRlbnNpb24gdXNhZ2UuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpOiB2b2lkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdWJsaWMgPSB0cnVlO1xuXHR9O1xufVxuLyoqXG4gKiBEZWZpbmVzIHRoYXQgdGhlIG1ldGhvZCB3aWxsIGJlIG9ubHkgYXZhaWxhYmxlIGZvciBpbnRlcm5hbCB1c2FnZSBvZiB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpdmF0ZUV4dGVuc2lvbigpOiBNZXRob2REZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0ucHVibGljID0gZmFsc2U7XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgbWV0aG9kIGNhbm5vdCBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IG90aGVyIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBtZXRob2RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsRXh0ZW5zaW9uKCk6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sbGVyRGVmaW5pdGlvbiwgcHJvcGVydHlLZXksIGRlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gdHJ1ZTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSB7fTtcblx0XHR9XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5maW5hbCA9IHRydWU7XG5cdH07XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGF0IHdlIGFyZSBnb2luZyB0byB1c2UgaW5zdGFudGlhdGUgYSBjb250cm9sbGVyIGV4dGVuc2lvbiB1bmRlciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUuXG4gKiBAcGFyYW0gZXh0ZW5zaW9uQ2xhc3MgVGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIHRoYXQgd2lsbCBiZSBpbnN0YW50aWF0ZWRcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzaW5nRXh0ZW5zaW9uKGV4dGVuc2lvbkNsYXNzOiB0eXBlb2YgQ29udHJvbGxlckV4dGVuc2lvbiB8IEZ1bmN0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbGxlckRlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0bWV0YWRhdGEuY29udHJvbGxlckV4dGVuc2lvbnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0gPSBleHRlbnNpb25DbGFzcztcblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIEkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKiAjZW5kcmVnaW9uICovXG5cbi8qICNyZWdpb24gQ09OVFJPTCAqL1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgaXMgZGVjbGFyZWQgYXMgYW4gZXZlbnQgb24gdGhlIGNvbnRyb2wgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudCgpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgZXZlbnRLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleS50b1N0cmluZygpXSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5LnRvU3RyaW5nKCldID0ge307XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIERlZmluZXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBhcyBhIG1hbmFnZWQgb2JqZWN0IGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb24gVGhlIHByb3BlcnR5IGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eShhdHRyaWJ1dGVEZWZpbml0aW9uOiBVSTVQcm9wZXJ0eU1ldGFkYXRhKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogVUk1Q29udHJvbERlZmluaXRpb24sIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8dW5rbm93bj4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXR0cmlidXRlRGVmaW5pdGlvbi5iaW5kYWJsZSA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChhdHRyaWJ1dGVEZWZpbml0aW9uLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uYmluZGFibGUgPSBmYWxzZTtcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZ3JvdXAgPSBcIkRhdGFcIjtcblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGlmICghYXR0cmlidXRlRGVmaW5pdGlvbi5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0Ly8gTm90IGV4cGxpY2l0ZWx5IGRlZmluZWRcblx0XHRcdGF0dHJpYnV0ZURlZmluaXRpb24uZGVmYXVsdFZhbHVlID8/PSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIHsgaW5pdGlhbGl6ZXI/OiBGdW5jdGlvbiB9KS5pbml0aWFsaXplcj8uKCk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIGZvbGxvd2luZyBhZ2dyZWdhdGlvbiBpbiB0aGUgY29udHJvbCBtZXRhZGF0YS5cbiAqIEBwYXJhbSBhZ2dyZWdhdGlvbkRlZmluaXRpb24gVGhlIGFnZ3JlZ2F0aW9uIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHkuXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IFVJNUFnZ3JlZ2F0aW9uTWV0YWRhdGEpOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBVSTVDb250cm9sRGVmaW5pdGlvbiwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFVJNSBkZWZhdWx0cyB0aGlzIHRvIHRydWUgYnV0IHRoaXMgaXMganVzdCB3ZWlyZC4uLlxuXHRcdFx0YWdncmVnYXRpb25EZWZpbml0aW9uLm11bHRpcGxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5pc0RlZmF1bHQpIHtcblx0XHRcdG1ldGFkYXRhLmRlZmF1bHRBZ2dyZWdhdGlvbiA9IHByb3BlcnR5S2V5O1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPz89IChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IEZ1bmN0aW9uIH0pLmluaXRpYWxpemVyPy4oKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplcjtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgdW5rbm93biBhcyBQcm9wZXJ0eURlY29yYXRvcjsgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBhbiBhY2Nlc3NvciBkZWNvcmF0b3IsIGJ1dCBzb21laG93IHRoZSBjb21waWxlciBkb2Vzbid0IGxpa2UgaXQgaWYgSSBkZWNsYXJlIGl0IGFzIHN1Y2guXG59XG5cbi8qKlxuICogRGVmaW5lcyBhbmQgY29uZmlndXJlcyB0aGUgZm9sbG93aW5nIGFzc29jaWF0aW9uIGluIHRoZSBjb250cm9sIG1ldGFkYXRhLlxuICogQHBhcmFtIHVpNUFzc29jaWF0aW9uTWV0YWRhdGEgVGhlIGRlZmluaXRpb24gb2YgdGhlIGFzc29jaWF0aW9uLlxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzb2NpYXRpb24odWk1QXNzb2NpYXRpb25NZXRhZGF0YTogVUk1QXNzb2NpYXRpb25NZXRhZGF0YSk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IHVpNUFzc29jaWF0aW9uTWV0YWRhdGE7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLlxufVxuXG4vKipcbiAqIERlZmluZXMgaW4gdGhlIG1ldGFkYXRhIHRoYXQgdGhpcyBjb250cm9sIGltcGxlbWVudHMgYSBzcGVjaWZpYyBpbnRlcmZhY2UuXG4gKiBAcGFyYW0gaW50ZXJmYWNlTmFtZSBUaGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50ZWQgaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIG1ldGhvZFxuICogQHB1YmxpY1xuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDQuMFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW1wbGVtZW50SW50ZXJmYWNlKGludGVyZmFjZU5hbWU6IHN0cmluZyk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXG5cdFx0bWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9O1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmcgbWV0aG9kIHNob3VsZCBhbHNvIGJlIGV4cG9zZWQgc3RhdGljYWxseSBzbyB3ZSBjYW4gY2FsbCBpdCBmcm9tIFhNTC5cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgbWV0aG9kXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWxFdmVudEhhbmRsZXIoKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eWtleSkge1xuXHRcdGNvbnN0IGN1cnJlbnRDb25zdHJ1Y3RvcjogVUk1QVBJQ29udHJvbCA9IHRhcmdldC5jb25zdHJ1Y3RvciBhcyB1bmtub3duIGFzIFVJNUFQSUNvbnRyb2w7XG5cdFx0ZW5zdXJlR2V0QVBJKGN1cnJlbnRDb25zdHJ1Y3Rvcik7XG5cdFx0Y3VycmVudENvbnN0cnVjdG9yW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdFx0aWYgKGFyZ3M/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gY3VycmVudENvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRcdFx0Y3VycmVudFRhcmdldD8uW3Byb3BlcnR5a2V5LnRvU3RyaW5nKCldKC4uLmFyZ3MpO1xuXHRcdFx0fVxuXHRcdH07XG5cdH07XG59XG5cbnR5cGUgVUk1Q29udHJvbEFuZE1vcmUgPSB0eXBlb2YgQ29udHJvbCAmXG5cdEZ1bmN0aW9uICYge1xuXHRcdHJlZ2lzdGVySW5zdGFuY2U/OiBGdW5jdGlvbjtcblx0XHRvdmVycmlkZT86IEZ1bmN0aW9uO1xuXHRcdHJlbmRlcmVyPzogdW5rbm93bjtcblx0XHRyZW5kZXI6IEZ1bmN0aW9uO1xuXHRcdG1ldGFkYXRhPzogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbjtcblx0fTtcblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nIGNsYXNzIHNob3VsZCBkZWZpbmUgYSBVSTUgY29udHJvbCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUuXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgVUk1IGNsYXNzXG4gKiBAcGFyYW0gbWV0YWRhdGFEZWZpbml0aW9uIEFkZGl0aW9uYWwgaW5saW5lIG1ldGFkYXRhIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIEEgY2xhc3MgZGVjb3JhdG9yIHRoYXQgY3JlYXRlcyBhIFVJNSBjbGFzcyBvdXQgb2YgdGhlIFRTIGNsYXNzXG4gKiBAcHVibGljXG4gKiBAdWk1LWV4cGVyaW1lbnRhbC1zaW5jZSAxLjE0NS4wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVVSTVDbGFzcyh0YXJnZXQ6IHN0cmluZywgbWV0YWRhdGFEZWZpbml0aW9uPzogUGFydGlhbDxVSTVDb250cm9sTWV0YWRhdGFEZWZpbml0aW9uPik6IENsYXNzRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3RvcjogVUk1Q29udHJvbEFuZE1vcmUpIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXHRcdGlmIChtZXRhZGF0YURlZmluaXRpb24pIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG1ldGFkYXRhRGVmaW5pdGlvbikge1xuXHRcdFx0XHRpZiAoY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldKSkge1xuXHRcdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XS5jb25jYXQoXG5cdFx0XHRcdFx0XHRcdG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl1cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YVtrZXldID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGFba2V5XSxcblx0XHRcdFx0XHRcdFx0Li4uKG1ldGFkYXRhRGVmaW5pdGlvbltrZXkgYXMga2V5b2YgVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbl0gYXMgb2JqZWN0KVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhW2tleV0gPSBtZXRhZGF0YURlZmluaXRpb25ba2V5IGFzIGtleW9mIFVJNUNvbnRyb2xNZXRhZGF0YURlZmluaXRpb25dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWdpc3RlclVJNU1ldGFkYXRhKGNvbnN0cnVjdG9yLCB0YXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSk7XG5cdH0gYXMgQ2xhc3NEZWNvcmF0b3I7XG59XG50eXBlIENvbnN0cnVjdG9yPFQgPSB7fT4gPSBuZXcgKC4uLmE6IHVua25vd25bXSkgPT4gVDtcblxuLyoqXG4gKiBNaXhpbiBhIHNwZWNpZmljIGludGVyZmFjZSBpbmNsdWRpbmcgYWxsIGl0cyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGludG8gdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gaW50ZXJmYWNlQ2xhc3MgSW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluPFQgZXh0ZW5kcyBJSW50ZXJmYWNlV2l0aE1peGluPihpbnRlcmZhY2VDbGFzczogQ29uc3RydWN0b3I8VD4pOiBDbGFzc0RlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAoYmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlKSB7XG5cdFx0aWYgKGJhc2VDdG9yLnByb3RvdHlwZS5leHRlbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBtaXhpbkludGVyZmFjZSBkZWNvcmF0b3IgbXVzdCBiZSBwbGFjZWQgYWZ0ZXIgYGRlZmluZVVpNUNsYXNzYFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YShiYXNlQ3Rvci5wcm90b3R5cGUpO1xuXG5cdFx0bGV0IGludGVyZmFjZVByb3RvVHlwZVRvTWl4ID0gaW50ZXJmYWNlQ2xhc3MucHJvdG90eXBlO1xuXHRcdHdoaWxlIChpbnRlcmZhY2VQcm90b1R5cGVUb01peCkge1xuXHRcdFx0YmFzZUN0b3IgPSBfYWRkSW50ZXJmYWNlUHJvdG9UeXBlc1RvQmFzZUNsYXNzKGJhc2VDdG9yLCBtZXRhZGF0YSwgaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdFx0aW50ZXJmYWNlUHJvdG9UeXBlVG9NaXggPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW50ZXJmYWNlUHJvdG9UeXBlVG9NaXgpO1xuXHRcdH1cblx0XHRwcm9wYWdhdGVIb29rRnJvbU1peGluKGJhc2VDdG9yLCBpbnRlcmZhY2VDbGFzcyk7XG5cblx0XHQvLyBIb29rIHRvIGFkZCBwb3RlbnRpYWxseSBtb3JlIGxvZ2ljIHRvIHRoZSBtaXhpblxuXHRcdGludGVyZmFjZUNsYXNzLnByb3RvdHlwZS5zZXR1cE1peGluPy4oYmFzZUN0b3IpO1xuXHRcdHJldHVybiBiYXNlQ3Rvcjtcblx0fSBhcyBDbGFzc0RlY29yYXRvcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluIHtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVjZWl2aW5nIGNvbnRyb2wuXG5cdCAqIElmIG5vdCBkZWZpbmVkLCB0aGUgaW50ZXJmYWNlIHdpbGwgbm90IGJlIGFkZGVkLlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlXG5cdCAqL1xuXHRnZXRJbnRlcmZhY2VOYW1lPygpOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gYWRkIG1vcmUgbG9naWMgdG8gdGhlIG1peGluLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRyb2xzIGFyZSBjcmVhdGVkIGFuZCBjYW4gYmUgdXNlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIHRvIHRoZSBiYXNlIGNsYXNzLlxuXHQgKiBAcGFyYW0gYmFzZUNsYXNzIFRoZSBiYXNlIGNsYXNzIHRoYXQgd2lsbCBiZSBleHRlbmRlZFxuXHQgKi9cblx0c2V0dXBNaXhpbj8oYmFzZUNsYXNzOiBGdW5jdGlvbik6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2U8VCBleHRlbmRzIFVJNUVsZW1lbnQ+KCk6IFJlZjxUPiB7XG5cdHJldHVybiB7XG5cdFx0Y3VycmVudDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVCxcblx0XHRzZXRDdXJyZW50OiBmdW5jdGlvbiAob0NvbnRyb2xJbnN0YW5jZTogVCk6IHZvaWQge1xuXHRcdFx0dGhpcy5jdXJyZW50ID0gb0NvbnRyb2xJbnN0YW5jZTtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIERlZmluZXMgdGhhdCB0aGUgZm9sbG93aW5nIG9iamVjdCB3aWxsIGhvbGQgYSByZWZlcmVuY2UgdG8gYSBjb250cm9sIHRocm91Z2gganN4IHRlbXBsYXRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lUmVmZXJlbmNlKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IFVJNUNvbnRyb2xEZWZpbml0aW9uLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgeyBpbml0aWFsaXplcj86IHVua25vd24gfSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKEJhc2VPYmplY3QuaXNPYmplY3RBKHRhcmdldCwgXCJzYXAudWkuY29yZS5Db250cm9sXCIpKSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLnJlZmVyZW5jZXNbcHJvcGVydHlLZXldID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyB7IGluaXRpYWxpemVyPzogdW5rbm93biB9KS5pbml0aWFsaXplciA9IGNyZWF0ZVJlZmVyZW5jZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIHVua25vd24gYXMgUHJvcGVydHlEZWNvcmF0b3I7IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgYW4gYWNjZXNzb3IgZGVjb3JhdG9yLCBidXQgc29tZWhvdyB0aGUgY29tcGlsZXIgZG9lc24ndCBsaWtlIGl0IGlmIGkgZGVjbGFyZSBpdCBhcyBzdWNoLjtcbn1cblxuZnVuY3Rpb24gX2FkZEludGVyZmFjZVByb3RvVHlwZXNUb0Jhc2VDbGFzcyhcblx0YmFzZUN0b3I6IFVJNUNvbnRyb2xBbmRNb3JlLFxuXHRiYXNlQ2xhc3NNZXRhZGF0YTogVUk1Q29udHJvbE1ldGFkYXRhRGVmaW5pdGlvbixcblx0aW50ZXJmYWNlQ2xhc3NQcm90b3R5cGU6IEZ1bmN0aW9uW1wicHJvdG90eXBlXCJdXG4pOiBVSTVDb250cm9sQW5kTW9yZSB7XG5cdGNvbnN0IGludGVyZmFjZU5hbWUgPSBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZT8uZ2V0SW50ZXJmYWNlTmFtZT8uKCk7XG5cdGlmIChpbnRlcmZhY2VOYW1lKSB7XG5cdFx0YmFzZUNsYXNzTWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKGludGVyZmFjZU5hbWUpO1xuXHR9XG5cblx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAobmFtZSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmIG5hbWUgIT09IFwic2V0dXBNaXhpblwiICYmIG5hbWUgIT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0aWYgKCFiYXNlQ3Rvci5wcm90b3R5cGVbbmFtZV0pIHtcblx0XHRcdFx0Ly8gVGhlIGJhc2UgY2xhc3MgXCJ3aW5zXCIgb3ZlciB0aGUgbWl4aW5cblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRcdGJhc2VDdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW50ZXJmYWNlQ2xhc3NQcm90b3R5cGUsIG5hbWUpIHx8IE9iamVjdC5jcmVhdGUobnVsbClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWV0YWRhdGFcIikge1xuXHRcdFx0YmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0gbWVyZ2UoYmFzZUN0b3IucHJvdG90eXBlLm1ldGFkYXRhLCBpbnRlcmZhY2VDbGFzc1Byb3RvdHlwZS5tZXRhZGF0YSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJhc2VDdG9yO1xufVxuXG4vKipcbiAqIFRoZSBuYW1lIGlkZW50aWZpZXIgdXNlZCB0byByZWZlcmVuY2UgdGhlIGNvbXBvbmVudCBzdGF0ZSBtb2RlbCBpbiB0aGUgc3RhdGUgbWFuYWdlbWVudCBzeXN0ZW0uXG4gKiBUaGlzIGNvbnN0YW50IGRlZmluZXMgdGhlIGtleSB1bmRlciB3aGljaCBjb21wb25lbnQgc3RhdGUgZGF0YSBpcyBzdG9yZWQgYW5kIHJldHJpZXZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX01PREVMX05BTUUgPSBcIiRjb21wb25lbnRTdGF0ZVwiO1xuZnVuY3Rpb24gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KGpzb25Nb2RlbDogSlNPTk1vZGVsLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgcGF0aEluTW9kZWwgPSBgLyR7cHJvcC50b1N0cmluZygpfWA7XG5cdGNvbnN0IG9PYmogPSBkZWVwQ2xvbmUoanNvbk1vZGVsLmdldE9iamVjdChwYXRoSW5Nb2RlbCkpO1xuXHRsZXQgb1RhcmdldDtcblx0aWYgKHByb3AgPT09IFwiX19iaW5kaW5nSW5mb1wiKSB7XG5cdFx0cmV0dXJuIHsgbW9kZWw6IFNUQVRFX01PREVMX05BTUUgfTtcblx0fVxuXHRpZiAob09iaiA9PT0gdW5kZWZpbmVkIHx8IG9PYmogPT09IG51bGwpIHtcblx0XHRvVGFyZ2V0ID0gb09iajtcblx0fSBlbHNlIGlmICh0eXBlb2Ygb09iaiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG9UYXJnZXQgPSBvT2JqO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvT2JqID09PSBcIm51bWJlclwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9PYmogPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0b1RhcmdldCA9IG9PYmo7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvT2JqKSkge1xuXHRcdG9UYXJnZXQgPSBuZXcgUHJveHkob09iaiwge1xuXHRcdFx0Z2V0KHRhcmdldDogdW5rbm93bltdLCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgcmVmID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwLCByZWNlaXZlcik7XG5cdFx0XHRcdGlmICh0eXBlb2YgcmVmID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVmLmJpbmQodGFyZ2V0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChyZWYgPT09IHVuZGVmaW5lZCAmJiBpc05hTihOdW1iZXIocC50b1N0cmluZygpKSkpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X19iaW5kaW5nSW5mbzoge1xuXHRcdFx0XHRcdFx0XHRtb2RlbDogU1RBVEVfTU9ERUxfTkFNRSxcblx0XHRcdFx0XHRcdFx0cGF0aDogcFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJlZjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvVGFyZ2V0ID0geyAuLi5vT2JqIH07XG5cdH1cblx0aWYgKHR5cGVvZiBvVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIG9UYXJnZXQgIT09IG51bGwpIHtcblx0XHRvVGFyZ2V0Ll9fYmluZGluZ0luZm8gPSB7XG5cdFx0XHRtb2RlbDogU1RBVEVfTU9ERUxfTkFNRSxcblx0XHRcdHBhdGg6IHBhdGhJbk1vZGVsXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb1RhcmdldDtcbn1cbmNvbnN0IGJvdW5kUHJvcGVydGllcyA9IFN5bWJvbChcImJvdW5kUHJvcGVydGllc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU3RhdGVQcm94eShcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlOiBGdW5jdGlvbjtcblx0XHRfdXBkYXRlU3RhdGVEZWJvdW5jZWQ6IEZ1bmN0aW9uO1xuXHRcdF9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlOiBib29sZWFuO1xuXHRcdF91cGRhdGVTdGF0ZVRpbWVyOiB1bmtub3duO1xuXHRcdF9jaGFuZ2VkUHJvcHM/OiBzdHJpbmdbXTtcblx0fSxcblx0c3RhdGVQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Ym91bmRUb1N0YXRlUHJvcHM6IHN0cmluZ1tdLFxuXHRpbml0aWFsRGF0YT86IG9iamVjdFxuKTogSlNPTk1vZGVsIHtcblx0Ly8gTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgc3RhdGUgcHJvcGVydHlcblx0dGFyZ2V0Q29udHJvbC5zZXRNb2RlbChuZXcgSlNPTk1vZGVsKGluaXRpYWxEYXRhKSwgU1RBVEVfTU9ERUxfTkFNRSk7XG5cdGNvbnN0IHN0YXRlTW9kZWwgPSB0YXJnZXRDb250cm9sLmdldE1vZGVsKFNUQVRFX01PREVMX05BTUUpIGFzIEpTT05Nb2RlbDtcblx0c3RhdGVNb2RlbC5hdHRhY2hQcm9wZXJ0eUNoYW5nZSgoZXZ0OiBNb2RlbCRQcm9wZXJ0eUNoYW5nZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2dC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpPy5zdWJzdHJpbmcoMSk7IC8vIHRvIHJlbW92ZSB0aGUgZmlyc3QgL1xuXHRcdGlmIChwYXRoICYmIGJvdW5kVG9TdGF0ZVByb3BzLmluY2x1ZGVzKHBhdGgpKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5KHBhdGgsIGV2dC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSk7XG5cdFx0fVxuXHR9KTtcblx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IHRydWU7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHN0YXRlTW9kZWwsIHtcblx0XHRnZXQ6ICh0YXJnZXQ6IEpTT05Nb2RlbCwgcHJvcDogc3RyaW5nKTogdW5rbm93biA9PiB7XG5cdFx0XHRyZXR1cm4gX2dldEhhbmRsZXJGb3JTdGF0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG5cdFx0fSxcblx0XHRzZXQ6IChzZXRTdGF0ZU1vZGVsOiBKU09OTW9kZWwsIHByb3AsIHZhbHVlKTogYm9vbGVhbiA9PiB7XG5cdFx0XHQvLyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga25vd24gYm91bmQgcHJvcGVydHkgaW4gYW55IG9mIHRoZSByZWxhdGVkIGNsYXNzZXNcblx0XHRcdGNvbnN0IGtub3duQm91bmRQcm9wZXJ0aWVzID0gdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdO1xuXHRcdFx0aWYgKGtub3duQm91bmRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3AudG9TdHJpbmcoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udHJvbC5faWdub3JlU3RhdGVQcm9wZXJ0eVVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHkocHJvcC50b1N0cmluZygpLCB2YWx1ZSk7XG5cdFx0XHRcdHRhcmdldENvbnRyb2wuX2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNldFJlc3VsdCA9IHNldFN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC8ke3Byb3AudG9TdHJpbmcoKX1gLCB2YWx1ZSk7XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChwcm9wLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHNldFJlc3VsdDtcblx0XHR9XG5cdH0pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gcHJveHk7XG5cdFx0fSxcblx0XHRzZXQodmFsdWUpIHtcblx0XHRcdC8vIFJlcGxhY2luZyB0aGUgY29tcGxldGUgc3RhdGVcblx0XHRcdHN0YXRlTW9kZWwuc2V0UHJvcGVydHkoYC9gLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHByb3h5O1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlU3RhdGVQcm9wZXJ0eShcblx0b2JqOiBVSTVDb250cm9sRGVmaW5pdGlvbixcblx0dGFyZ2V0Q29udHJvbDogQ29udHJvbCAmIHtcblx0XHRbYm91bmRQcm9wZXJ0aWVzXTogc3RyaW5nW107XG5cdFx0X19zdGF0ZUNyZWF0ZWQ6IGJvb2xlYW47XG5cdFx0X19zdGF0ZU5hbWU6IHN0cmluZztcblx0XHRfdXBkYXRlU3RhdGU6IEZ1bmN0aW9uO1xuXHRcdF91cGRhdGVTdGF0ZURlYm91bmNlZDogRnVuY3Rpb247XG5cdFx0X2lnbm9yZVN0YXRlUHJvcGVydHlVcGRhdGU6IGJvb2xlYW47XG5cdFx0X3VwZGF0ZVN0YXRlVGltZXI6IHVua25vd247XG5cdFx0X2NoYW5nZWRQcm9wcz86IHN0cmluZ1tdO1xuXHR9XG4pOiB2b2lkIHtcblx0aWYgKG9iai5tZXRhZGF0YT8uc3RhdGVQcm9wZXJ0eSB8fCB0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10pIHtcblx0XHRsZXQgdXBkYXRpbmdTdGF0ZSA9IGZhbHNlO1xuXHRcdGNvbnN0IGJvdW5kVG9TdGF0ZVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG9iai5tZXRhZGF0YT8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5RGVmLmJpbmRUb1N0YXRlKSB7XG5cdFx0XHRcdGJvdW5kVG9TdGF0ZVByb3BzLnB1c2gocHJvcGVydHlOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gYXMgd2UgbWF5IGhhdmUgYm91bmQgcHJvcGVydGllcyBpbiBwYXJlbnQgY2xhc3NlcyBhbmQgc3ViY2xhc3Nlcywgd2Uga2VlcCB0cmFjayBvZiB0aG9zZSBpbiB0aGUgbW9kZWwgaXRzZWxmXG5cdFx0dGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdID8/PSBbXTtcblx0XHR0YXJnZXRDb250cm9sW2JvdW5kUHJvcGVydGllc10gPSBbLi4udGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCAuLi5ib3VuZFRvU3RhdGVQcm9wc107XG5cblx0XHRpZiAob2JqLm1ldGFkYXRhPy5zdGF0ZVByb3BlcnR5KSB7XG5cdFx0XHQvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUgc3RhdGUgdG8gYmUgYXBwbGllZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgYXBwbGllZCBpbiB0ZXN0c1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fdXBkYXRlU3RhdGUgPSBhc3luYyBmdW5jdGlvbiAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl91cGRhdGVTdGF0ZVRpbWVyO1xuXHRcdFx0XHRpZiAoIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdCAodGhpcyBhcyB7IG9uU3RhdGVDaGFuZ2U/OiBGdW5jdGlvbiB9KS5vblN0YXRlQ2hhbmdlPy4odGhpcy5fY2hhbmdlZFByb3BzKTtcblx0XHRcdFx0XHR0aGlzLl9jaGFuZ2VkUHJvcHMgPSBbXTtcblx0XHRcdFx0XHR1cGRhdGluZ1N0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZCA9IGZ1bmN0aW9uIChjaGFuZ2VkUHJvcDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcyA/Pz0gW107XG5cdFx0XHRcdGlmICghdGhpcy5fY2hhbmdlZFByb3BzLmluY2x1ZGVzKGNoYW5nZWRQcm9wKSkge1xuXHRcdFx0XHRcdHRoaXMuX2NoYW5nZWRQcm9wcy5wdXNoKGNoYW5nZWRQcm9wKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIXRoaXMuX3VwZGF0ZVN0YXRlVGltZXIgJiYgIXVwZGF0aW5nU3RhdGUpIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl91cGRhdGVTdGF0ZSgpO1xuXHRcdFx0XHRcdH0sIDIwMCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBzdGF0ZVByb3BlcnR5TmFtZSA9IG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5O1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlQ3JlYXRlZCA9IGZhbHNlO1xuXHRcdFx0dGFyZ2V0Q29udHJvbC5fX3N0YXRlTmFtZSA9IHN0YXRlUHJvcGVydHlOYW1lO1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENvbnRyb2wsIHN0YXRlUHJvcGVydHlOYW1lLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNyZWF0ZVN0YXRlUHJveHkodGFyZ2V0Q29udHJvbCwgc3RhdGVQcm9wZXJ0eU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldDogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y3JlYXRlU3RhdGVQcm94eSh0YXJnZXRDb250cm9sLCBzdGF0ZVByb3BlcnR5TmFtZSwgdGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlKSB7XG5cdFx0XHRcdHRhcmdldENvbnRyb2xbb2JqLm1ldGFkYXRhLnN0YXRlUHJvcGVydHkgYXMga2V5b2YgQ29udHJvbF0gPSB7IC4uLm9iai5tZXRhZGF0YS5zdGF0ZVByb3BlcnR5RGVmYXVsdFZhbHVlIH0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmbkFwcGx5U2V0dGluZ3MgPSB0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3M7XG5cdFx0XHR0YXJnZXRDb250cm9sLmFwcGx5U2V0dGluZ3MgPSBmdW5jdGlvbiAoXG5cdFx0XHRcdG1TZXR0aW5nczogeyBtb2RlbHM/OiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gfSxcblx0XHRcdFx0c2NvcGU/OiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHRcdCk6IHR5cGVvZiB0YXJnZXRDb250cm9sIHtcblx0XHRcdFx0aWYgKG1TZXR0aW5ncz8ubW9kZWxzPy4kY29tcG9uZW50U3RhdGUpIHtcblx0XHRcdFx0XHQvLyBXZSBjYW5ub3QgcmVtb3ZlIHRoZSBtb2RlbCBkaXJlY3RseSBmcm9tIG1TZXR0aW5ncy5tb2RlbHMgYXMgdGhpcyBvYmplY3QgaXMgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIG9iamVjdCB3aGVuIGNsb25pbmdcblx0XHRcdFx0XHRtU2V0dGluZ3MubW9kZWxzID0geyAuLi5tU2V0dGluZ3MubW9kZWxzIH07XG5cdFx0XHRcdFx0ZGVsZXRlIG1TZXR0aW5ncy5tb2RlbHMuJGNvbXBvbmVudFN0YXRlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZuQXBwbHlTZXR0aW5ncy5jYWxsKHRoaXMsIG1TZXR0aW5ncywgc2NvcGUpO1xuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgZm5TZXRQcm9wZXJ0eSA9IHRhcmdldENvbnRyb2wuc2V0UHJvcGVydHk7XG5cdFx0aWYgKHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0YXJnZXRDb250cm9sLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHNQcm9wZXJ0eU5hbWU6IHN0cmluZywgb1ZhbHVlOiB1bmtub3duLCBiU3VwcHJlc3NJbnZhbGlkYXRlKTogdHlwZW9mIHRhcmdldENvbnRyb2wge1xuXHRcdFx0XHRpZiAodGFyZ2V0Q29udHJvbFtib3VuZFByb3BlcnRpZXNdLmluY2x1ZGVzKHNQcm9wZXJ0eU5hbWUpICYmICF0aGlzLl9pZ25vcmVTdGF0ZVByb3BlcnR5VXBkYXRlKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLl9fc3RhdGVDcmVhdGVkKSB7XG5cdFx0XHRcdFx0XHRjcmVhdGVTdGF0ZVByb3h5KHRhcmdldENvbnRyb2wsIHRhcmdldENvbnRyb2wuX19zdGF0ZU5hbWUsIHRhcmdldENvbnRyb2xbYm91bmRQcm9wZXJ0aWVzXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh0aGlzLmdldE1vZGVsKFNUQVRFX01PREVMX05BTUUpIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoYC8ke3NQcm9wZXJ0eU5hbWV9YCwgb1ZhbHVlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250cm9sLl91cGRhdGVTdGF0ZURlYm91bmNlZChzUHJvcGVydHlOYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5jYWxsKHRoaXMsIHNQcm9wZXJ0eU5hbWUsIG9WYWx1ZSwgYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEludGVybmFsIGhlYXZ5IGxpZnRpbmcgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyB0aGUgY2xhc3MgcHJvcGVydHkgZm9yIHVpNSB0byB1c2UuXG4gKiBAcGFyYW0gY2xhenogVGhlIGNsYXNzIHByb3RvdHlwZVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIHRvIGNyZWF0ZVxuICogQHBhcmFtIGluT2JqIFRoZSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBtZXRhZGF0YSBjbGFzc1xuICovXG5mdW5jdGlvbiByZWdpc3RlclVJNU1ldGFkYXRhKGNsYXp6OiBVSTVDb250cm9sQW5kTW9yZSwgbmFtZTogc3RyaW5nLCBpbk9iajogVUk1Q29udHJvbGxlckRlZmluaXRpb24gfCBVSTVDb250cm9sRGVmaW5pdGlvbik6IEZ1bmN0aW9uIHtcblx0aWYgKGNsYXp6LmdldE1ldGFkYXRhPy4oKS5pc0EoXCJzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvblwiKSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluT2JqKS5mb3JFYWNoKChvYmpOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbk9iaiwgb2JqTmFtZSk7XG5cdFx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb2JqOiBhbnkgPSB7fTtcblx0b2JqLm1ldGFkYXRhID0gaW5PYmoubWV0YWRhdGEgfHwge307XG5cdG9iai5vdmVycmlkZSA9IGluT2JqLm92ZXJyaWRlO1xuXHRvYmouY29uc3RydWN0b3IgPSBjbGF6ejtcblx0b2JqLm1ldGFkYXRhLmJhc2VUeXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsYXp6LnByb3RvdHlwZSkuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cblx0aWYgKChjbGF6ej8uZ2V0TWV0YWRhdGEoKSBhcyB1bmtub3duIGFzIHsgZ2V0U3RlcmVvdHlwZTogRnVuY3Rpb24gfSk/LmdldFN0ZXJlb3R5cGUoKSA9PT0gXCJjb250cm9sXCIpIHtcblx0XHRjb25zdCByZW5kZXJlckRlZmluaXRpb24gPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXI7XG5cdFx0b2JqLnJlbmRlcmVyID0geyBhcGlWZXJzaW9uOiAyIH07XG5cdFx0aWYgKHR5cGVvZiByZW5kZXJlckRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b2JqLnJlbmRlcmVyLnJlbmRlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9IGVsc2UgaWYgKHJlbmRlcmVyRGVmaW5pdGlvbiAhPSB1bmRlZmluZWQpIHtcblx0XHRcdG9iai5yZW5kZXJlciA9IHJlbmRlcmVyRGVmaW5pdGlvbjtcblx0XHR9XG5cdH1cblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0T2JqZWN0LmtleXMoY2xhenoucHJvdG90eXBlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAoa2V5ICE9PSBcIm1ldGFkYXRhXCIpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9ialtrZXldID0gY2xhenoucHJvdG90eXBlW2tleV07XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvYmoubWV0YWRhdGE/LmNvbnRyb2xsZXJFeHRlbnNpb25zICYmIE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5jb250cm9sbGVyRXh0ZW5zaW9ucykubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgY0V4dE5hbWUgaW4gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zKSB7XG5cdFx0XHRvYmpbY0V4dE5hbWVdID0gb2JqLm1ldGFkYXRhLmNvbnRyb2xsZXJFeHRlbnNpb25zW2NFeHROYW1lXTtcblx0XHR9XG5cdH1cblx0Y29uc3Qgb3V0cHV0ID0gY2xhenouZXh0ZW5kKG5hbWUsIG9iaikgYXMgdHlwZW9mIENvbnRyb2wgJiBGdW5jdGlvbjtcblx0Y29uc3QgZm5Jbml0ID0gb3V0cHV0LnByb3RvdHlwZS5pbml0O1xuXHRjb25zdCBmbkFmdGVySW5pdCA9IG91dHB1dC5wcm90b3R5cGUuYWZ0ZXJJbml0O1xuXHRvdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0aWYgKGZuSW5pdCkge1xuXHRcdFx0Zm5Jbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0XHRpZiAoY2xhenoucmVnaXN0ZXJJbnN0YW5jZSkge1xuXHRcdFx0Y2xhenoucmVnaXN0ZXJJbnN0YW5jZSh0aGlzKTtcblx0XHR9XG5cdFx0dGhpcy5tZXRhZGF0YSA9IG9iai5tZXRhZGF0YTtcblxuXHRcdGlmIChvYmoubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaCgocHJvcGVydHlLZXkpID0+IHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlEZWYgPSBvYmoubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdC8vIElmIGEgdmFsdWUgd2FzIHNldCBpbiBgaW5pdGAgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgc2V0IGluIHRoZSB2YWx1ZSBpbiB0aGUgZW5kXG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5RGVmYXVsdCA9IHRoaXNbcHJvcGVydHlLZXldID8/IHByb3BlcnR5RGVmLmRlZmF1bHRWYWx1ZTtcblx0XHRcdFx0aWYgKHByb3BlcnR5RGVmLmlzQmluZGluZ0luZm8gPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9iaW5kaW5nUHJvcGVydGllcyA/Pz0ge307XG5cblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldID0gdjtcblx0XHRcdFx0XHRcdFx0dGhpcy5tUHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSB2O1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRnZXQoKTogdW5rbm93biB7XG5cdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgY2FzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwcm9wZXJ0eSBmaXJzdCBhbmQgbm90IGp1c3QgdGhlIF9iaW5kaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0XHQvLyBEdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLCBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHdpdGggYSBub24gYmluZGluZyB2YWx1ZSwgc2V0UHJvcGVydHkgaXMgY2FsbGVkIGFuZCBub3QgYmluZFByb3BlcnR5XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYmluZGluZ1Byb3BlcnR5VmFsdWUgPSB0aGlzLl9iaW5kaW5nUHJvcGVydGllc1twcm9wZXJ0eUtleV07XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdmFsdWUgd2UgdXBkYXRlIHRoZSBfYmluZGluZ1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eVZhbHVlICE9PSBiaW5kaW5nUHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2JpbmRpbmdQcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcFZhbHVlID0gdGhpcy5fYmluZGluZ1Byb3BlcnRpZXNbcHJvcGVydHlLZXldO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BWYWx1ZSB9OyAvLyBDcmVhdGUgc2hhbGxvdyBjb3B5XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BWYWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2V0OiAodjogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocHJvcGVydHlEZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgdGhpc1twcm9wZXJ0eUtleV0gIT09IHByb3BlcnR5RGVmYXVsdCkge1xuXHRcdFx0XHRcdC8vIGRvbid0IG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBpdCdzIGFscmVhZHkgdGhlcmVcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzW3Byb3BlcnR5S2V5XSA9IHByb3BlcnR5RGVmYXVsdDtcblx0XHRcdFx0XHR0aGlzLl9hcHBseWluZ1NldHRpbmdzID0gZmFsc2U7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2FwcGx5aW5nU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnMpO1xuXHRcdFx0YUFnZ3JlZ2F0aW9uS2V5cy5mb3JFYWNoKChhZ2dyZWdhdGlvbktleSkgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZiA9IG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldO1xuXHRcdFx0XHRjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzW2FnZ3JlZ2F0aW9uS2V5XSA/PyBhZ2dyZWdhdGlvbkRlZi5kZWZhdWx0VmFsdWU7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBhZ2dyZWdhdGlvbktleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbktleSwgdik7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IHRoaXMuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25LZXkpO1xuXHRcdFx0XHRcdFx0aWYgKG9iai5tZXRhZGF0YS5hZ2dyZWdhdGlvbnNbYWdncmVnYXRpb25LZXldLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQgfHwgW107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYWdncmVnYXRpb25Db250ZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChkZWZhdWx0VmFsdWUgJiYgKGRlZmF1bHRWYWx1ZSBhcyBVSTVFbGVtZW50KT8uaXNBKSB7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0XHRcdFx0dGhpc1thZ2dyZWdhdGlvbktleV0gPSBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLl9hcHBseWluZ1NldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFBc3NvY2lhdGlvbktleXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEuYXNzb2NpYXRpb25zKTtcblx0XHRcdGFBc3NvY2lhdGlvbktleXMuZm9yRWFjaCgoYXNzb2NpYXRpb25LZXkpID0+IHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGFzc29jaWF0aW9uS2V5LCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNldDogKHY6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnNldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gdGhpcy5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSk7XG5cdFx0XHRcdFx0XHRpZiAob2JqLm1ldGFkYXRhLmFzc29jaWF0aW9uc1thc3NvY2lhdGlvbktleV0ubXVsdGlwbGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0aW9uQ29udGVudCB8fCBbXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhZ2dyZWdhdGlvbkNvbnRlbnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob2JqLm1ldGFkYXRhLnJlZmVyZW5jZXMpIHtcblx0XHRcdGNvbnN0IHJlZmVyZW5jZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvYmoubWV0YWRhdGEucmVmZXJlbmNlcyk7XG5cdFx0XHRyZWZlcmVuY2VQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5S2V5KSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogY3JlYXRlUmVmZXJlbmNlKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5tZXRob2RzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG1ldGhvZE5hbWUgaW4gb2JqLm1ldGFkYXRhLm1ldGhvZHMpIHtcblx0XHRcdFx0Y29uc3QgbWV0aG9kRGVmaW5pdGlvbiA9IG9iai5tZXRhZGF0YS5tZXRob2RzW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRpZiAobWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIgfHwgbWV0aG9kRGVmaW5pdGlvbi5vdmVycmlkZUV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLm1ldGhvZEhvbGRlcikge1xuXHRcdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXIgPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5tZXRob2RIb2xkZXJbbWV0aG9kTmFtZV0gPSBbdGhpc1ttZXRob2ROYW1lXV07XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG1ldGhvZE5hbWUsIHtcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdHNldDogKHY6IEZ1bmN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZEhvbGRlclttZXRob2ROYW1lXS5wdXNoKHYpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXN5bmMgKC4uLm1ldGhvZEFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1ldGhvZEFycmF5cyA9IHRoaXMubWV0aG9kSG9sZGVyW21ldGhvZE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtZXRob2REZWZpbml0aW9uLm92ZXJyaWRlRXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGhvZEFycmF5cy5yZXZlcnNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGxldCByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhcmcgb2YgbWV0aG9kQXJyYXlzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBhcmcuYXBwbHkodGhpcywgbWV0aG9kQXJncyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2NyZWF0ZVN0YXRlUHJvcGVydHkob2JqLCB0aGlzKTtcblx0XHRpZiAoZm5BZnRlckluaXQpIHtcblx0XHRcdGZuQWZ0ZXJJbml0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH1cblx0fTtcblxuXHRjbGF6ei5vdmVycmlkZSA9IGZ1bmN0aW9uIChvRXh0ZW5zaW9uOiB1bmtub3duKTogRnVuY3Rpb24ge1xuXHRcdGNvbnN0IHBvbCA9IHt9O1xuXHRcdChwb2wgYXMgRnVuY3Rpb24pLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IEZ1bmN0aW9uIHtcblx0XHRcdHJldHVybiBjbGF6ei5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHR9O1xuXHRcdGNvbnN0IG9DbGFzcyA9IChNZXRhZGF0YSBhcyB1bmtub3duIGFzIHsgY3JlYXRlQ2xhc3M6IEZ1bmN0aW9uIH0pLmNyZWF0ZUNsYXNzKFxuXHRcdFx0Y2xhenosXG5cdFx0XHRgYW5vbnltb3VzRXh0ZW5zaW9ufiR7dWlkKCl9YCxcblx0XHRcdHBvbCxcblx0XHRcdENvbnRyb2xsZXJNZXRhZGF0YVxuXHRcdCk7XG5cdFx0b0NsYXNzLmdldE1ldGFkYXRhKCkuX3N0YXRpY092ZXJyaWRlID0gb0V4dGVuc2lvbjtcblx0XHRvQ2xhc3MuZ2V0TWV0YWRhdGEoKS5fb3ZlcnJpZGUgPSAoY2xhenouZ2V0TWV0YWRhdGEoKSBhcyB7IF9vdmVycmlkZT86IHVua25vd24gfSkuX292ZXJyaWRlO1xuXHRcdHJldHVybiBvQ2xhc3M7XG5cdH07XG5cblx0T2JqZWN0UGF0aC5zZXQobmFtZSwgb3V0cHV0KTtcblxuXHRyZXR1cm4gb3V0cHV0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBNEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxxQkFBcUIsR0FBRywwQkFBMEI7O0VBRS9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFnRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUpBQyxRQUFBLENBQUFELHFCQUFBLEdBQUFBLHFCQUFBO0VBd0NBLE1BQU1FLGNBQWMsR0FBRyxTQUFBQSxDQUFVQyxNQUFzRCxFQUFnQztJQUN0SEEsTUFBTSxDQUFDQyxRQUFRLEdBQUdDLEtBQUssQ0FDdEI7TUFDQ0Msb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO01BQ3hCQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO01BQ2RDLFlBQVksRUFBRSxDQUFDLENBQUM7TUFDaEJDLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDZEMsWUFBWSxFQUFFLENBQUMsQ0FBQztNQUNoQkMsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNYQyxNQUFNLEVBQUUs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
@@ -40,6 +40,7 @@ export const classSupportNamespace = "sap.fe.base.ClassSupport";
40
40
  */
41
41
  export type UI5PropertyMetadata = {
42
42
  type: string;
43
+ underlyingType?: string;
43
44
  bindable?: boolean;
44
45
  required?: boolean;
45
46
  group?: string;