@gravitee/ui-components 3.18.1 → 3.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -417,19 +417,19 @@ export class GvSchemaForm extends LitElement {
417
417
 
418
418
  switch (operator) {
419
419
  case '$neq':
420
- result = result && this._evaluateNotEqualsCondition(operation);
420
+ result = result && this._evaluateNotEqualsCondition(control, operation);
421
421
  break;
422
422
 
423
423
  case '$eq':
424
- result = result && this._evaluateEqualsCondition(operation);
424
+ result = result && this._evaluateEqualsCondition(control, operation);
425
425
  break;
426
426
 
427
427
  case '$nodef':
428
- result = result && this._evaluateNotDefCondition(operation);
428
+ result = result && this._evaluateNotDefCondition(control, operation);
429
429
  break;
430
430
 
431
431
  case '$def':
432
- result = result && this._evaluateDefCondition(operation);
432
+ result = result && this._evaluateDefCondition(control, operation);
433
433
  break;
434
434
 
435
435
  default:
@@ -442,28 +442,38 @@ export class GvSchemaForm extends LitElement {
442
442
  return result;
443
443
  }
444
444
 
445
- _evaluateNotEqualsCondition(condition) {
446
- return !this._evaluateEqualsCondition(condition);
445
+ _evaluateNotEqualsCondition(control, condition) {
446
+ return !this._evaluateEqualsCondition(control, condition);
447
447
  }
448
448
 
449
- _evaluateEqualsCondition(condition) {
449
+ _evaluateEqualsCondition(control, condition) {
450
450
  const operator = Object.keys(condition)[0];
451
451
  const operands = condition[operator];
452
452
  const modelAttributes = Object.keys(operands);
453
453
  return modelAttributes.map(modelAttribute => {
454
454
  const testValue = operands[modelAttribute];
455
- return get(this._values, modelAttribute) === testValue;
455
+ let value = get(this._values, modelAttribute);
456
+
457
+ if (value == null && control.type === 'string') {
458
+ value = '';
459
+ }
460
+
461
+ if (Array.isArray(testValue)) {
462
+ return testValue.includes(value);
463
+ }
464
+
465
+ return value === testValue;
456
466
  }).reduce((acc, current) => acc || current);
457
467
  }
458
468
 
459
- _evaluateNotDefCondition(condition) {
469
+ _evaluateNotDefCondition(control, condition) {
460
470
  const operator = Object.keys(condition)[0];
461
471
  const modelAttribute = condition[operator];
462
472
  return get(this._values, modelAttribute) === undefined || get(this._values, modelAttribute) === null;
463
473
  }
464
474
 
465
- _evaluateDefCondition(condition) {
466
- return !this._evaluateNotDefCondition(condition);
475
+ _evaluateDefCondition(control, condition) {
476
+ return !this._evaluateNotDefCondition(control, condition);
467
477
  }
468
478
 
469
479
  _renderPart() {
@@ -585,4 +595,4 @@ export class GvSchemaForm extends LitElement {
585
595
 
586
596
  }
587
597
  window.customElements.define('gv-schema-form', GvSchemaForm);
588
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImdldCIsInNldCIsImRlbCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJjbGFzc01hcCIsIlZhbGlkYXRvciIsImVtcHR5IiwiR3ZTY2hlbWFGb3JtIiwicHJvcGVydGllcyIsInNjaGVtYSIsInR5cGUiLCJPYmplY3QiLCJlcnJvcnMiLCJ2YWx1ZXMiLCJzdWJtaXRMYWJlbCIsIlN0cmluZyIsImhhc0Zvb3RlciIsIkJvb2xlYW4iLCJhdHRyaWJ1dGUiLCJoYXNIZWFkZXIiLCJfY29uZmlybSIsIl92YWx1ZXMiLCJkaXJ0eSIsInJlZmxlY3QiLCJoaWRlRGVwcmVjYXRlZCIsInZhbGlkYXRlT25SZW5kZXIiLCJfdmFsaWRhdG9yUmVzdWx0cyIsInNrZWxldG9uIiwiX3RvdWNoIiwicmVhZG9ubHkiLCJzY3JvbGxhYmxlIiwiY29uc3RydWN0b3IiLCJfdmFsaWRhdG9yIiwiX2lnbm9yZVByb3BlcnRpZXMiLCJfZHluYW1pY0NvbnRyb2xzIiwiX2R5bmFtaWNBdHRyaWJ1dGVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9vbkRlZmF1bHRWYWx1ZSIsImJpbmQiLCJfb25DaGFuZ2UiLCJfb25Db250cm9sUmVhZHkiLCJfaW5pdGlhbFZhbHVlcyIsInJlc2V0IiwiX3NldERpcnR5IiwiZ2V0Q29udHJvbHMiLCJmb3JFYWNoIiwicyIsInJlcXVlc3RVcGRhdGUiLCJfb25SZXNldCIsInJlcXVlc3RWYWxpZGF0aW9uIiwiY2xlYXJUaW1lb3V0IiwiX3ZhbGlkYXRlVGltZW91dCIsInNldFRpbWVvdXQiLCJ2YWxpZGF0ZSIsIl91cGRhdGVBY3Rpb25zIiwic3VibWl0IiwiX29uU3VibWl0IiwidmFsaWRhdG9yUmVzdWx0cyIsImlzVmFsaWQiLCJfc2V0VG91Y2giLCJ0b3VjaCIsImNvbmZpcm0iLCJpc1RvdWNoIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX29uQ29uZmlybVJlc2V0IiwidGhlbiIsIl9vbkNvbmZpcm1FZGl0IiwiX3VwZGF0ZUNoaWxkcmVuIiwiX2dldFN1Ym1pdEJ0biIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yIiwiX2dldFJlc2V0QnRuIiwiX2Rpc3BhdGNoQ2hhbmdlIiwiX2NoYW5nZVRpbWVvdXQiLCJ0YXJnZXQiLCJ2YWxpZGF0aW9uIiwiZGV0YWlsIiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiY29udHJvbCIsInRyaW0iLCJsZW5ndGgiLCJwYXJzZUludCIsImlkIiwiaW50VmFsdWUiLCJOdW1iZXIiLCJ2YWx1ZU9mIiwiaXNOYU4iLCJrZXlzIiwiX3VwZGF0ZUR5bmFtaWNDb250cm9scyIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImNvbnRyb2xFbGVtZW50IiwiZXZlbnQiLCJuYW1lIiwiX2hhc0NvbmRpdGlvbiIsInB1c2giLCJfdXBkYXRlRHluYW1pY0NvbnRyb2wiLCJpcyIsIl9ldmFsdWF0ZUNvbmRpdGlvbiIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInBlcmZvcm1VcGRhdGUiLCJfcmVuZGVyQ29udHJvbCIsImtleSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsImluY2x1ZGVzIiwiaXNEaXNhYmxlZCIsImRpc2FibGVkIiwiaXNIaWRkZW4iLCJpc1JlYWRvbmx5IiwicmVhZE9ubHkiLCJpc1dyaXRlT25seSIsIndyaXRlT25seSIsImZpbmQiLCJjb25kaXRpb24iLCJjb25kaXRpb25LZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25zb2xlIiwid2FybiIsInJlc3VsdCIsIm9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiX2V2YWx1YXRlTm90RXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uIiwiX2V2YWx1YXRlRGVmQ29uZGl0aW9uIiwib3BlcmFuZHMiLCJtb2RlbEF0dHJpYnV0ZXMiLCJtYXAiLCJtb2RlbEF0dHJpYnV0ZSIsInRlc3RWYWx1ZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJfcmVuZGVyUGFydCIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsInZhbGlkIiwiZmlsdGVyIiwiZXJyb3IiLCJwcm9wZXJ0eSIsInJlcGxhY2UiLCJjYW5TdWJtaXQiLCJzdWJtaXRCdG4iLCJyZXNldEJ0biIsIndpdGhWYWxpZGF0aW9uIiwiX3VwZGF0ZUFjdGlvbnNUaW1lb3V0IiwidXBkYXRlZCIsImNoYW5nZWRQcm9wZXJ0aWVzIiwiaGFzIiwiX2dldFVwZGF0ZUNvbXBsZXRlIiwiYWxsIiwidXBkYXRlQ29tcGxldGUiLCJyZW5kZXIiLCJjb250YWluZXIiLCJ0aXRsZSIsImNlbnRlciIsInN0eWxlcyIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxVQUFULEVBQXFCQyxJQUFyQixFQUEyQkMsR0FBM0IsUUFBc0MsYUFBdEM7QUFDQSxTQUFTQyxHQUFULEVBQWNDLEdBQWQsRUFBbUJDLEdBQW5CLFFBQThCLGFBQTlCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxTQUFTQyxTQUFULEVBQW9CQyxTQUFwQixRQUFxQyxjQUFyQztBQUNBLFNBQVNDLFFBQVQsUUFBeUIsK0JBQXpCO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQixZQUExQjtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsaUJBQXRCO0FBQ0EsT0FBTywwQkFBUDtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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T0FBTyxFQUFFLEtBQUt6QztBQUFqQyxLQUFELENBRGIsTUFFTCxLQUFLRCxTQUFMLEtBQW1CLElBQW5CLEdBQ0V2QixJQUFJLHFDQUVjUSxRQUFRLENBQUM7QUFBRWdLLE1BQUFBLEtBQUssRUFBRSxJQUFUO0FBQWVDLE1BQUFBLE1BQU0sRUFBRSxLQUFLbEosU0FBTCxJQUFrQixDQUFDLEtBQUtIO0FBQS9DLEtBQUQsQ0FGdEIsbUdBUUUsS0FBS2EsUUFBTCxLQUFrQixJQUFsQixJQUEwQixLQUFLYixTQUFMLEtBQW1CLElBQTdDLEdBQ0UsRUFERixHQUVFcEIsSUFBSSw4RUFLb0IsS0FBS29ELFFBTHpCLHFHQVlvQixLQUFLUSxTQVp6QiwrQkFjVSxLQUFLMUMsV0FkZix3QkFWUixVQUROLEdBOEJFLEVBaENHLHlCQWlDZ0IsS0FBS0wsTUFBTCxJQUFlLElBQWYsR0FBc0IsS0FBS3FJLFdBQUwsRUFBdEIsR0FBMkNsSixJQUFJLEVBakMvRCxVQWtDTCxLQUFLb0IsU0FBTCxLQUFtQixJQUFuQixJQUEyQixLQUFLYSxRQUFMLEtBQWtCLElBQTdDLEdBQ0VqQyxJQUFJLHVIQUlxRCxLQUFLb0QsUUFKMUQsb0dBSzZDLEtBQUtRLFNBTGxELCtCQUswRixLQUFLMUMsV0FML0YsS0FNTyxLQUFLQSxXQU5aLDZCQUROLEdBWUUsRUE5Q0csaUJBQVg7QUFpREQ7O0FBRWdCLGFBQU53SixNQUFNLEdBQUc7QUFDbEIsV0FBTyxDQUNMaEssS0FESyxFQUVMO0FBQ0FULElBQUFBLEdBQUcsNmxEQUhFLENBQVA7QUF3SkQ7O0FBem5CMEM7QUE0bkI3QzBLLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsZ0JBQTdCLEVBQStDbEssWUFBL0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgaHRtbCwgY3NzIH0gZnJvbSAnbGl0LWVsZW1lbnQnO1xuaW1wb3J0IHsgZ2V0LCBzZXQsIGRlbCB9IGZyb20gJ29iamVjdC1wYXRoJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgZGVlcEVxdWFsIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0LWh0bWwvZGlyZWN0aXZlcy9jbGFzcy1tYXAnO1xuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnanNvbnNjaGVtYSc7XG5pbXBvcnQgeyBlbXB0eSB9IGZyb20gJy4uL3N0eWxlcy9lbXB0eSc7XG5pbXBvcnQgJy4vZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCc7XG5cbi8qKlxuICogU2NoZW1hIGZvcm0gY29tcG9uZW50XG4gKlxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOnN1Ym1pdCAtIGV2ZW50IHdoZW4gdXNlciBzdWJtaXQgdmFsaWQgZm9ybVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmVycm9yIC0gZXZlbnQgd2hlbiB1c2VyIHN1Ym1pdCBpbnZhbGlkIGZvcm1cbiAqIEBmaXJlcyBndi1zY2hlbWEtZm9ybTpjaGFuZ2UgLSBldmVudCB3aGVuIHdoZW4gZm9ybSBjaGFuZ2VcbiAqIEBmaXJlcyBndi1zY2hlbWEtZm9ybTpjYW5jZWwgLSBldmVudCB3aGVuIHVzZXIgY2FuY2VsIGZvcm1cbiAqXG4gKiBAYXR0ciB7T2JqZWN0fSBzY2hlbWEgLSB0aGUgc2NoZW1hIGZvcm0gY29uZmlndXJhdGlvblxuICogQGF0dHIge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyBvZiBmaWVsZHNcbiAqIEBhdHRyIHtPYmplY3R9IGVycm9ycyAtIHRoZSBtYXAgb2YgZXJyb3JzIGJ5IGlucHV0IGtleVxuICogQGF0dHIge0Jvb2xlYW59IHZhbGlkYXRlIC0gdG8gZm9yY2UgdmFsaWRhdGlvbiBvbiBmaXJzdCByZW5kZXJcbiAqIEBhdHRyIHtCb29sZWFufSByZWFkb25seSAtIHRydWUgaWYgcmVhZG9ubHlcbiAqIEBhdHRyIHtCb29sZWFufSBzY3JvbGxhYmxlIC0gdXNlZnVsIGZvciBtYWtpbmcgY29udGVudCBzY3JvbGxhYmxlIHdpdGggZml4ZWQgaGVhZGVycyAvIGZvb3RlcnNcbiAqXG4gKiBAY3NzcHJvcCB7Q29sb3J9IFstLWd2LXNjaGVtYS1mb3JtLS1iZ2M9I2ZmZmZmZl0gLSBCYWNrZ3JvdW5kIGNvbG9yXG4gKiBAY3NzcHJvcCB7TGVuZ3RofSBbLS1ndi1zY2hlbWEtZm9ybS1jb250cm9sLS1tPTAuNHJlbV0gLSBDb250cm9sIG1hcmdpblxuICovXG5leHBvcnQgY2xhc3MgR3ZTY2hlbWFGb3JtIGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgZXJyb3JzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgdmFsdWVzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgc3VibWl0TGFiZWw6IHsgdHlwZTogU3RyaW5nIH0sXG4gICAgICBoYXNGb290ZXI6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLWZvb3RlcicgfSxcbiAgICAgIGhhc0hlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtaGVhZGVyJyB9LFxuICAgICAgX2NvbmZpcm06IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBfdmFsdWVzOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgZGlydHk6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgaGlkZURlcHJlY2F0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGlkZS1kZXByZWNhdGVkJyB9LFxuICAgICAgdmFsaWRhdGVPblJlbmRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICd2YWxpZGF0ZS1vbi1yZW5kZXInIH0sXG4gICAgICBfdmFsaWRhdG9yUmVzdWx0czogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHNrZWxldG9uOiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIF90b3VjaDogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBzY3JvbGxhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmhpZGVEZXByZWNhdGVkID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsdWVzID0ge307XG4gICAgdGhpcy5zdWJtaXRMYWJlbCA9ICdPayc7XG4gICAgdGhpcy5oYXNIZWFkZXIgPSBmYWxzZTtcbiAgICB0aGlzLmhhc0Zvb3RlciA9IGZhbHNlO1xuICAgIHRoaXMuX3RvdWNoID0gZmFsc2U7XG4gICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcigpO1xuICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB7fTtcbiAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzID0gW107XG4gICAgdGhpcy5fZHluYW1pY0NvbnRyb2xzID0gW107XG4gICAgdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMgPSBbJ2Rpc2FibGVkJywgJ3JlcXVpcmVkJywgJ2hpZGRlbiddO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZ3Ytc2NoZW1hLWZvcm0tY29udHJvbDpkZWZhdWx0LXZhbHVlJywgdGhpcy5fb25EZWZhdWx0VmFsdWUuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmNoYW5nZScsIHRoaXMuX29uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZ3Ytc2NoZW1hLWZvcm0tY29udHJvbDpjb250cm9sLXJlYWR5JywgdGhpcy5fb25Db250cm9sUmVhZHkuYmluZCh0aGlzKSk7XG4gIH1cblxuICBzZXQgdmFsdWVzKHZhbHVlcykge1xuICAgIGlmICghZGVlcEVxdWFsKHRoaXMuX3ZhbHVlcywgdmFsdWVzKSkge1xuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWVzID0geyAuLi52YWx1ZXMgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3ZhbHVlcyA9IGRlZXBDbG9uZSh0aGlzLl9pbml0aWFsVmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cblxuICByZXNldCh2YWx1ZXMgPSBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWVzID0gZGVlcENsb25lKHZhbHVlcyB8fCB0aGlzLl9pbml0aWFsVmFsdWVzKTtcbiAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgIHRoaXMuX3NldERpcnR5KGZhbHNlKTtcbiAgICB0aGlzLmdldENvbnRyb2xzKCkuZm9yRWFjaCgocykgPT4ge1xuICAgICAgcy5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBfb25SZXNldCgpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAncmVzZXQnKTtcbiAgfVxuXG4gIHJlcXVlc3RWYWxpZGF0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl92YWxpZGF0ZVRpbWVvdXQpO1xuICAgIHRoaXMuX3ZhbGlkYXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgdGhpcy5fdXBkYXRlQWN0aW9ucygpO1xuICAgIH0sIDM1MCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5fb25TdWJtaXQoKTtcbiAgfVxuXG4gIF9vblN1Ym1pdCgpIHtcbiAgICBjb25zdCB2YWxpZGF0b3JSZXN1bHRzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5faW5pdGlhbFZhbHVlcyA9IGRlZXBDbG9uZSh0aGlzLl92YWx1ZXMpO1xuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgICAgdGhpcy5fdG91Y2ggPSBmYWxzZTtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3N1Ym1pdCcsIHsgdmFsdWVzOiB0aGlzLl92YWx1ZXMsIHZhbGlkYXRvclJlc3VsdHMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2Vycm9yJywgeyB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywgdmFsaWRhdG9yUmVzdWx0cyB9KTtcbiAgICB9XG4gIH1cblxuICBfc2V0RGlydHkoZGlydHkgPSB0cnVlKSB7XG4gICAgdGhpcy5kaXJ0eSA9ICEhZGlydHk7XG4gIH1cblxuICBfc2V0VG91Y2godG91Y2ggPSB0cnVlKSB7XG4gICAgdGhpcy5fdG91Y2ggPSAhIXRvdWNoO1xuICB9XG5cbiAgY29uZmlybSgpIHtcbiAgICBpZiAodGhpcy5pc1RvdWNoKCkpIHtcbiAgICAgIGlmICh0aGlzLl9jb25maXJtICYmIHRoaXMuX2NvbmZpcm0ucHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybS5wcm9taXNlO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+ICh0aGlzLl9jb25maXJtID0geyByZXNvbHZlLCByZWplY3QgfSkpO1xuICAgICAgdGhpcy5fY29uZmlybS5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBfb25Db25maXJtUmVzZXQoKSB7XG4gICAgY29uc3QgeyByZXNvbHZlIH0gPSB0aGlzLl9jb25maXJtO1xuICAgIHRoaXMuX2NvbmZpcm0gPSBudWxsO1xuICAgIHRoaXMuX29uUmVzZXQoKTtcbiAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKS50aGVuKCgpID0+IHtcbiAgICAgIHJlc29sdmUodGhpcyk7XG4gICAgfSk7XG4gIH1cblxuICBfb25Db25maXJtRWRpdCgpIHtcbiAgICB0aGlzLl9jb25maXJtLnJlamVjdCh0aGlzKTtcbiAgICB0aGlzLl9jb25maXJtID0gbnVsbDtcbiAgICB0aGlzLl91cGRhdGVDaGlsZHJlbih0aGlzLnZhbGlkYXRlT25SZW5kZXIpO1xuICB9XG5cbiAgX2dldFN1Ym1pdEJ0bigpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNzdWJtaXQnKTtcbiAgfVxuXG4gIF9nZXRSZXNldEJ0bigpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNyZXNldCcpO1xuICB9XG5cbiAgX2Rpc3BhdGNoQ2hhbmdlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGFuZ2VUaW1lb3V0KTtcbiAgICB0aGlzLl9jaGFuZ2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UnLCB7IHRhcmdldDogdGhpcywgdmFsdWVzOiB0aGlzLl92YWx1ZXMsIHZhbGlkYXRpb246IHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgfSk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgX29uRGVmYXVsdFZhbHVlKHsgZGV0YWlsOiB7IGN1cnJlbnRUYXJnZXQsIHZhbHVlLCBjb250cm9sIH0gfSkge1xuICAgIGlmIChjb250cm9sLnR5cGUgPT09ICdpbnRlZ2VyJyAmJiB2YWx1ZSAhPSBudWxsICYmICgodmFsdWUudHJpbSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB8fCB2YWx1ZS5sZW5ndGggPiAwKSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgICBzZXQodGhpcy5fdmFsdWVzLCBjdXJyZW50VGFyZ2V0LmlkLCB2YWx1ZSk7XG4gIH1cblxuICBfb25DaGFuZ2UoeyBkZXRhaWw6IHsgY3VycmVudFRhcmdldCwgdmFsdWUsIGNvbnRyb2wgfSB9KSB7XG4gICAgdGhpcy5fc2V0VG91Y2godHJ1ZSk7XG4gICAgaWYgKGNvbnRyb2wudHlwZSA9PT0gJ2ludGVnZXInKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGludFZhbHVlID0gTnVtYmVyKHZhbHVlKS52YWx1ZU9mKCk7XG4gICAgICAgIGlmICghaXNOYU4oaW50VmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSBpbnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wudHlwZSA9PT0gJ2FycmF5JyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wudHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVsKHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldCh0aGlzLl92YWx1ZXMsIGN1cnJlbnRUYXJnZXQuaWQsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3VwZGF0ZUR5bmFtaWNDb250cm9scygpO1xuICAgIHRoaXMuX3VwZGF0ZUFjdGlvbnMoKTtcbiAgICB0aGlzLl9kaXNwYXRjaENoYW5nZSgpO1xuICB9XG5cbiAgX29uQ29udHJvbFJlYWR5KGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IGUuZGV0YWlsLmNvbnRyb2w7XG4gICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LmNvbnRyb2w7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSkge1xuICAgICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXS5ldmVudDtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCBldmVudC5uYW1lLCB7IC4uLmV2ZW50LCAuLi5lLmRldGFpbCB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGFzQ29uZGl0aW9uKGNvbnRyb2wpKSB7XG4gICAgICAgIHRoaXMuX2R5bmFtaWNDb250cm9scy5wdXNoKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVEeW5hbWljQ29udHJvbHMoKSB7XG4gICAgdGhpcy5fZHluYW1pY0NvbnRyb2xzLmZvckVhY2goKGNvbnRyb2xFbGVtZW50KSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVEeW5hbWljQ29udHJvbChjb250cm9sRWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBfdXBkYXRlRHluYW1pY0NvbnRyb2woY29udHJvbEVsZW1lbnQpIHtcbiAgICBjb25zdCBjb250cm9sID0gY29udHJvbEVsZW1lbnQuY29udHJvbDtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddKSB7XG4gICAgICB0aGlzLl9keW5hbWljQXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgY29uc3QgaXMgPSB0aGlzLl9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCBhdHRyaWJ1dGUpO1xuICAgICAgICBpZiAoaXMpIHtcbiAgICAgICAgICBjb250cm9sRWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm1VcGRhdGUoKSB7XG4gICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKHMpID0+IHtcbiAgICAgIHMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIHN1cGVyLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIF9yZW5kZXJDb250cm9sKGtleSkge1xuICAgIC8vIFRoaXMgaXMgcmVxdWlyZSB0byBjbGVhbiBjYWNoZSBvZiA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbD5cbiAgICBjb25zdCBjb250cm9sID0geyAuLi50aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW2tleV0gfTtcbiAgICBjb25zdCBpc1JlcXVpcmVkID0gKHRoaXMuc2NoZW1hLnJlcXVpcmVkICYmIHRoaXMuc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKGtleSkpIHx8IHRoaXMuX2V2YWx1YXRlQ29uZGl0aW9uKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSAodGhpcy5zY2hlbWEuZGlzYWJsZWQgJiYgdGhpcy5zY2hlbWEuZGlzYWJsZWQuaW5jbHVkZXMoa2V5KSkgfHwgdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgJ2Rpc2FibGVkJyk7XG4gICAgY29uc3QgaXNIaWRkZW4gPSB0aGlzLl9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCAnaGlkZGVuJyk7XG4gICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICB0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgY29uc3QgaXNSZWFkb25seSA9IHRoaXMucmVhZG9ubHkgfHwgY29udHJvbC5yZWFkT25seSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBpc1dyaXRlT25seSA9IGNvbnRyb2wud3JpdGVPbmx5ID09PSB0cnVlO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywga2V5KTtcbiAgICByZXR1cm4gaHRtbGA8Z3Ytc2NoZW1hLWZvcm0tY29udHJvbFxuICAgICAgLmlkPVwiJHtrZXl9XCJcbiAgICAgIC5lcnJvcnM9XCIke3RoaXMuZXJyb3JzfVwiXG4gICAgICAuY29udHJvbD1cIiR7Y29udHJvbH1cIlxuICAgICAgLnNrZWxldG9uPVwiJHt0aGlzLnNrZWxldG9ufVwiXG4gICAgICAudmFsdWU9XCIke3ZhbHVlfVwiXG4gICAgICA/cmVhZG9ubHk9XCIke2lzUmVhZG9ubHl9XCJcbiAgICAgID93cml0ZW9ubHk9XCIke2lzV3JpdGVPbmx5fVwiXG4gICAgICA/cmVxdWlyZWQ9XCIke2lzUmVxdWlyZWR9XCJcbiAgICAgID9kaXNhYmxlZD1cIiR7aXNEaXNhYmxlZH1cIlxuICAgICAgP2hpZGRlbj1cIiR7aXNIaWRkZW59XCJcbiAgICA+PC9ndi1zY2hlbWEtZm9ybS1jb250cm9sPmA7XG4gIH1cblxuICBfaGFzQ29uZGl0aW9uKGNvbnRyb2wpIHtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZHluYW1pY0F0dHJpYnV0ZXMuZmluZCgoY29uZGl0aW9uKSA9PiBjb250cm9sWyd4LXNjaGVtYS1mb3JtJ11bY29uZGl0aW9uXSAhPSBudWxsKSAhPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uS2V5KSB7XG4gICAgaWYgKGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXSA9PSBudWxsIHx8IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVtjb25kaXRpb25LZXldID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY29uZGl0aW9uID0gY29udHJvbFsneC1zY2hlbWEtZm9ybSddW2NvbmRpdGlvbktleV07XG4gICAgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgIC8vIGNvbmRpdGlvbiBpc24ndCBhbiBhcnJheSwgaWdub3JlIHRoZSBjb25kaXRpb25cbiAgICAgIGNvbnNvbGUud2FybihgJyR7Y29uZGl0aW9uS2V5fScgYXR0cmlidXRlIG9mICd4LXNjaGVtYS1mb3JtJyBzaG91bGQgYmUgYW4gYXJyYXlgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBjb25kaXRpb24pIHtcbiAgICAgIC8vIG9wZXJhdGlvbiBvbmx5IGhhdmUgb25lIG9wZXJhdG9yIHdpdGggYSBzaW5nbGUgb2JqZWN0IGNvbnRhaW5pbmcgb3BlcmFuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IG9wZXJhdG9yID0gT2JqZWN0LmtleXMob3BlcmF0aW9uKVswXTtcblxuICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgICBjYXNlICckbmVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3RFcXVhbHNDb25kaXRpb24ob3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGVxJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVFcXVhbHNDb25kaXRpb24ob3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJG5vZGVmJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVOb3REZWZDb25kaXRpb24ob3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnJGRlZic6XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHRoaXMuX2V2YWx1YXRlRGVmQ29uZGl0aW9uKG9wZXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvciAnJHtvcGVyYXRvcn0nIG9uIGRpc2FibGUgY29uZGl0aW9uYCk7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9ldmFsdWF0ZU5vdEVxdWFsc0NvbmRpdGlvbihjb25kaXRpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uKGNvbmRpdGlvbik7XG4gIH1cblxuICBfZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29uZGl0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pWzBdO1xuICAgIGNvbnN0IG9wZXJhbmRzID0gY29uZGl0aW9uW29wZXJhdG9yXTtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhvcGVyYW5kcyk7XG4gICAgcmV0dXJuIG1vZGVsQXR0cmlidXRlc1xuICAgICAgLm1hcCgobW9kZWxBdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdFZhbHVlID0gb3BlcmFuZHNbbW9kZWxBdHRyaWJ1dGVdO1xuICAgICAgICByZXR1cm4gZ2V0KHRoaXMuX3ZhbHVlcywgbW9kZWxBdHRyaWJ1dGUpID09PSB0ZXN0VmFsdWU7XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyZW50KSA9PiBhY2MgfHwgY3VycmVudCk7XG4gIH1cblxuICBfZXZhbHVhdGVOb3REZWZDb25kaXRpb24oY29uZGl0aW9uKSB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pWzBdO1xuICAgIGNvbnN0IG1vZGVsQXR0cmlidXRlID0gY29uZGl0aW9uW29wZXJhdG9yXTtcbiAgICByZXR1cm4gZ2V0KHRoaXMuX3ZhbHVlcywgbW9kZWxBdHRyaWJ1dGUpID09PSB1bmRlZmluZWQgfHwgZ2V0KHRoaXMuX3ZhbHVlcywgbW9kZWxBdHRyaWJ1dGUpID09PSBudWxsO1xuICB9XG5cbiAgX2V2YWx1YXRlRGVmQ29uZGl0aW9uKGNvbmRpdGlvbikge1xuICAgIHJldHVybiAhdGhpcy5fZXZhbHVhdGVOb3REZWZDb25kaXRpb24oY29uZGl0aW9uKTtcbiAgfVxuXG4gIF9yZW5kZXJQYXJ0KCkge1xuICAgIGlmICh0aGlzLl9jb25maXJtKSB7XG4gICAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiY29uZmlybS1ib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yXCI+VGhlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIGFuZCBjYW5ub3QgYmUgc2F2ZWQuPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25maXJtLWJveF9hY3Rpb25zXCI+XG4gICAgICAgICAgPGd2LWJ1dHRvbiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkNvbmZpcm1SZXNldH1cIiBvdXRsaW5lZCBpY29uPVwiZ2VuZXJhbDp1cGRhdGVcIiBkYW5nZXI+TG9zZSBjaGFuZ2VzPC9ndi1idXR0b24+XG4gICAgICAgICAgPGd2LWJ1dHRvbiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkNvbmZpcm1FZGl0fVwiIGljb249XCJkZXNpZ246ZWRpdFwiPkVkaXQ8L2d2LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gdGhpcy5zY2hlbWEucHJvcGVydGllcyA/IE9iamVjdC5rZXlzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG4gICAgdGhpcy5faWdub3JlUHJvcGVydGllcyA9IFtdO1xuICAgIHJldHVybiBodG1sYCR7a2V5cy5tYXAoKGtleSkgPT4gdGhpcy5fcmVuZGVyQ29udHJvbChrZXkpKX1gO1xuICB9XG5cbiAgZ2V0Q29udHJvbHMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2wnKSk7XG4gIH1cblxuICBnZXRDb250cm9sKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2lkfVwiXWApO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgaWYgKHRoaXMuc2NoZW1hKSB7XG4gICAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlKHRoaXMuX3ZhbHVlcywgdGhpcy5zY2hlbWEpO1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVycm9ycyA9IHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMuZXJyb3JzO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yUmVzdWx0cztcbiAgfVxuXG4gIGlzVmFsaWQoKSB7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMudmFsaWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9ICh0aGlzLl92YWxpZGF0b3JSZXN1bHRzLmVycm9ycyB8fCBbXSkuZmlsdGVyKChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuICF0aGlzLl9pZ25vcmVQcm9wZXJ0aWVzLmluY2x1ZGVzKGVycm9yLnByb3BlcnR5LnJlcGxhY2UoJ2luc3RhbmNlLicsICcnKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9ycy5sZW5ndGggPT09IDA7XG4gIH1cblxuICBpc1RvdWNoKCkge1xuICAgIHJldHVybiB0aGlzLl90b3VjaCB8fCAodGhpcy5kaXJ0eSAmJiB0aGlzLnZhbGlkYXRlT25SZW5kZXIpO1xuICB9XG5cbiAgY2FuU3VibWl0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVG91Y2goKSAmJiB0aGlzLmlzVmFsaWQoKTtcbiAgfVxuXG4gIF91cGRhdGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IHN1Ym1pdEJ0biA9IHRoaXMuX2dldFN1Ym1pdEJ0bigpO1xuICAgIGlmIChzdWJtaXRCdG4gIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuY2FuU3VibWl0KCkpIHtcbiAgICAgICAgdGhpcy5fZ2V0U3VibWl0QnRuKCkucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZ2V0U3VibWl0QnRuKCkuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZXNldEJ0biA9IHRoaXMuX2dldFJlc2V0QnRuKCk7XG4gICAgaWYgKHJlc2V0QnRuICE9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgIHJlc2V0QnRuLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0QnRuLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfdXBkYXRlQ2hpbGRyZW4od2l0aFZhbGlkYXRpb24pIHtcbiAgICBpZiAod2l0aFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB7fTtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbDtcbiAgICAgIHRoaXMucmVxdWVzdFZhbGlkYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlQWN0aW9uc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3VwZGF0ZUFjdGlvbnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVBY3Rpb25zVGltZW91dCk7XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX3ZhbHVlcycpKSB7XG4gICAgICB0aGlzLmdldENvbnRyb2xzKCkuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICBjb250cm9sLnZhbHVlID0gZ2V0KHRoaXMuX3ZhbHVlcywgY29udHJvbC5pZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4odGhpcy52YWxpZGF0ZU9uUmVuZGVyICYmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ192YWx1ZXMnKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NjaGVtYScpKSk7XG4gIH1cblxuICBhc3luYyBfZ2V0VXBkYXRlQ29tcGxldGUoKSB7XG4gICAgYXdhaXQgc3VwZXIuX2dldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRDb250cm9scygpLm1hcCgoZSkgPT4gZS51cGRhdGVDb21wbGV0ZSkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHJldHVybiBodG1sYDxmb3JtIGNsYXNzPVwiJHtjbGFzc01hcCh7IHNjcm9sbGFibGU6IHRoaXMuc2Nyb2xsYWJsZSB9KX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgY29udGFpbmVyOiB0cnVlLCBjb25maXJtOiB0aGlzLl9jb25maXJtIH0pfVwiPlxuICAgICAgICAke3RoaXMuaGFzSGVhZGVyID09PSB0cnVlXG4gICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiR7Y2xhc3NNYXAoeyB0aXRsZTogdHJ1ZSwgY2VudGVyOiB0aGlzLmhhc0hlYWRlciAmJiAhdGhpcy5oYXNGb290ZXIgfSl9XCI+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJoZWFkZXItbGVmdFwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAke3RoaXMucmVhZG9ubHkgPT09IHRydWUgfHwgdGhpcy5oYXNGb290ZXIgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgIDogaHRtbGA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImdlbmVyYWw6dXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25TdWJtaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjb2RlOmNoZWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aXRsZT1cIiR7dGhpcy5zdWJtaXRMYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IGB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICAgIDogJyd9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+JHt0aGlzLnNjaGVtYSAhPSBudWxsID8gdGhpcy5fcmVuZGVyUGFydCgpIDogaHRtbGBgfTwvZGl2PlxuICAgICAgICAke3RoaXMuaGFzRm9vdGVyID09PSB0cnVlICYmIHRoaXMucmVhZG9ubHkgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBpZD1cInJlc2V0XCIgb3V0bGluZWQgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldH1cIiBpY29uPVwiZ2VuZXJhbDp1cGRhdGVcIiB0aXRsZT1cIlJlc2V0XCI+UmVzZXQ8L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxndi1idXR0b24gaWQ9XCJzdWJtaXRcIiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblN1Ym1pdH1cIiBpY29uPVwiY29kZTpjaGVja1wiIC50aXRsZT1cIiR7dGhpcy5zdWJtaXRMYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICA+JHt0aGlzLnN1Ym1pdExhYmVsfTwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+YDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBlbXB0eSxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgICAtLWJnYzogdmFyKC0tZ3Ytc2NoZW1hLWZvcm0tLWJnYywgI2ZmZmZmZik7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG5cbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAgIC8qIGZvciBGaXJlZm94ICovXG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIsXG4gICAgICAgIC5mb290ZXIsXG4gICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZ2MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQge1xuICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgLyogZm9yIEZpcmVmb3ggKi9cbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRlbnQgPiBndi1zY2hlbWEtZm9ybS1jb250cm9sIHtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmNvbnRlbnQge1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5jb250ZW50ID4gZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCB7XG4gICAgICAgICAgbWF4LXdpZHRoOiA3NzVweDtcbiAgICAgICAgICB3aWR0aDogOTUlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlcixcbiAgICAgICAgLmZvb3RlciB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDQ1cHg7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiAyNnB4O1xuICAgICAgICAgIC0tZ3YtaWNvbi0tYzogI2JmYmZiZjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIge1xuICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvb3RlciB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0uc2Nyb2xsYWJsZSAuZm9vdGVyIHtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXIgLmxlZnQsXG4gICAgICAgIC5mb290ZXIgLnJpZ2h0IHtcbiAgICAgICAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciAubGVmdCxcbiAgICAgICAgLmZvb3RlciAubGVmdCxcbiAgICAgICAgLmhlYWRlciAucmlnaHQsXG4gICAgICAgIC5mb290ZXIgLnJpZ2h0IHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgei1pbmRleDogMTA7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLnJpZ2h0LFxuICAgICAgICAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLnRpdGxlIHtcbiAgICAgICAgICBjb2xvcjogIzI4NDQ0ZjtcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlciAudGl0bGUuY2VudGVyIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbmZpcm0tYm94IHtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuY29uZmlybS1ib3hfYWN0aW9ucyB7XG4gICAgICAgICAgcGFkZGluZzogMXJlbSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbmZpcm0gLmhlYWRlciAubGVmdCxcbiAgICAgICAgLmNvbmZpcm0gLmhlYWRlciAucmlnaHQsXG4gICAgICAgIC5jb25maXJtIC5mb290ZXIgLmxlZnQsXG4gICAgICAgIC5jb25maXJtIC5mb290ZXIgLnJpZ2h0IHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICBgLFxuICAgIF07XG4gIH1cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgnZ3Ytc2NoZW1hLWZvcm0nLCBHdlNjaGVtYUZvcm0pO1xuIl19
598
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL29yZ2FuaXNtcy9ndi1zY2hlbWEtZm9ybS5qcyJdLCJuYW1lcyI6WyJMaXRFbGVtZW50IiwiaHRtbCIsImNzcyIsImdldCIsInNldCIsImRlbCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJkZWVwQ2xvbmUiLCJkZWVwRXF1YWwiLCJjbGFzc01hcCIsIlZhbGlkYXRvciIsImVtcHR5IiwiR3ZTY2hlbWFGb3JtIiwicHJvcGVydGllcyIsInNjaGVtYSIsInR5cGUiLCJPYmplY3QiLCJlcnJvcnMiLCJ2YWx1ZXMiLCJzdWJtaXRMYWJlbCIsIlN0cmluZyIsImhhc0Zvb3RlciIsIkJvb2xlYW4iLCJhdHRyaWJ1dGUiLCJoYXNIZWFkZXIiLCJfY29uZmlybSIsIl92YWx1ZXMiLCJkaXJ0eSIsInJlZmxlY3QiLCJoaWRlRGVwcmVjYXRlZCIsInZhbGlkYXRlT25SZW5kZXIiLCJfdmFsaWRhdG9yUmVzdWx0cyIsInNrZWxldG9uIiwiX3RvdWNoIiwicmVhZG9ubHkiLCJzY3JvbGxhYmxlIiwiY29uc3RydWN0b3IiLCJfdmFsaWRhdG9yIiwiX2lnbm9yZVByb3BlcnRpZXMiLCJfZHluYW1pY0NvbnRyb2xzIiwiX2R5bmFtaWNBdHRyaWJ1dGVzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9vbkRlZmF1bHRWYWx1ZSIsImJpbmQiLCJfb25DaGFuZ2UiLCJfb25Db250cm9sUmVhZHkiLCJfaW5pdGlhbFZhbHVlcyIsInJlc2V0IiwiX3NldERpcnR5IiwiZ2V0Q29udHJvbHMiLCJmb3JFYWNoIiwicyIsInJlcXVlc3RVcGRhdGUiLCJfb25SZXNldCIsInJlcXVlc3RWYWxpZGF0aW9uIiwiY2xlYXJUaW1lb3V0IiwiX3ZhbGlkYXRlVGltZW91dCIsInNldFRpbWVvdXQiLCJ2YWxpZGF0ZSIsIl91cGRhdGVBY3Rpb25zIiwic3VibWl0IiwiX29uU3VibWl0IiwidmFsaWRhdG9yUmVzdWx0cyIsImlzVmFsaWQiLCJfc2V0VG91Y2giLCJ0b3VjaCIsImNvbmZpcm0iLCJpc1RvdWNoIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiX29uQ29uZmlybVJlc2V0IiwidGhlbiIsIl9vbkNvbmZpcm1FZGl0IiwiX3VwZGF0ZUNoaWxkcmVuIiwiX2dldFN1Ym1pdEJ0biIsInNoYWRvd1Jvb3QiLCJxdWVyeVNlbGVjdG9yIiwiX2dldFJlc2V0QnRuIiwiX2Rpc3BhdGNoQ2hhbmdlIiwiX2NoYW5nZVRpbWVvdXQiLCJ0YXJnZXQiLCJ2YWxpZGF0aW9uIiwiZGV0YWlsIiwiY3VycmVudFRhcmdldCIsInZhbHVlIiwiY29udHJvbCIsInRyaW0iLCJsZW5ndGgiLCJwYXJzZUludCIsImlkIiwiaW50VmFsdWUiLCJOdW1iZXIiLCJ2YWx1ZU9mIiwiaXNOYU4iLCJrZXlzIiwiX3VwZGF0ZUR5bmFtaWNDb250cm9scyIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImNvbnRyb2xFbGVtZW50IiwiZXZlbnQiLCJuYW1lIiwiX2hhc0NvbmRpdGlvbiIsInB1c2giLCJfdXBkYXRlRHluYW1pY0NvbnRyb2wiLCJpcyIsIl9ldmFsdWF0ZUNvbmRpdGlvbiIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInBlcmZvcm1VcGRhdGUiLCJfcmVuZGVyQ29udHJvbCIsImtleSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsImluY2x1ZGVzIiwiaXNEaXNhYmxlZCIsImRpc2FibGVkIiwiaXNIaWRkZW4iLCJpc1JlYWRvbmx5IiwicmVhZE9ubHkiLCJpc1dyaXRlT25seSIsIndyaXRlT25seSIsImZpbmQiLCJjb25kaXRpb24iLCJjb25kaXRpb25LZXkiLCJBcnJheSIsImlzQXJyYXkiLCJjb25zb2xlIiwid2FybiIsInJlc3VsdCIsIm9wZXJhdGlvbiIsIm9wZXJhdG9yIiwiX2V2YWx1YXRlTm90RXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlRXF1YWxzQ29uZGl0aW9uIiwiX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uIiwiX2V2YWx1YXRlRGVmQ29uZGl0aW9uIiwib3BlcmFuZHMiLCJtb2RlbEF0dHJpYnV0ZXMiLCJtYXAiLCJtb2RlbEF0dHJpYnV0ZSIsInRlc3RWYWx1ZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJfcmVuZGVyUGFydCIsImZyb20iLCJxdWVyeVNlbGVjdG9yQWxsIiwiZ2V0Q29udHJvbCIsInZhbGlkIiwiZmlsdGVyIiwiZXJyb3IiLCJwcm9wZXJ0eSIsInJlcGxhY2UiLCJjYW5TdWJtaXQiLCJzdWJtaXRCdG4iLCJyZXNldEJ0biIsIndpdGhWYWxpZGF0aW9uIiwiX3VwZGF0ZUFjdGlvbnNUaW1lb3V0IiwidXBkYXRlZCIsImNoYW5nZWRQcm9wZXJ0aWVzIiwiaGFzIiwiX2dldFVwZGF0ZUNvbXBsZXRlIiwiYWxsIiwidXBkYXRlQ29tcGxldGUiLCJyZW5kZXIiLCJjb250YWluZXIiLCJ0aXRsZSIsImNlbnRlciIsInN0eWxlcyIsIndpbmRvdyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxVQUFULEVBQXFCQyxJQUFyQixFQUEyQkMsR0FBM0IsUUFBc0MsYUFBdEM7QUFDQSxTQUFTQyxHQUFULEVBQWNDLEdBQWQsRUFBbUJDLEdBQW5CLFFBQThCLGFBQTlCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxTQUFTQyxTQUFULEVBQW9CQyxTQUFwQixRQUFxQyxjQUFyQztBQUNBLFNBQVNDLFFBQVQsUUFBeUIsK0JBQXpCO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQixZQUExQjtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsaUJBQXRCO0FBQ0EsT0FBTywwQkFBUDtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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S0FBS1EsU0FMbEQsK0JBSzBGLEtBQUsxQyxXQUwvRixLQU1PLEtBQUtBLFdBTlosNkJBRE4sR0FZRSxFQTlDRyxpQkFBWDtBQWlERDs7QUFFZ0IsYUFBTndKLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0xoSyxLQURLLEVBRUw7QUFDQVQsSUFBQUEsR0FBRyw2bERBSEUsQ0FBUDtBQXdKRDs7QUFob0IwQztBQW1vQjdDMEssTUFBTSxDQUFDQyxjQUFQLENBQXNCQyxNQUF0QixDQUE2QixnQkFBN0IsRUFBK0NsSyxZQUEvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBMaXRFbGVtZW50LCBodG1sLCBjc3MgfSBmcm9tICdsaXQtZWxlbWVudCc7XG5pbXBvcnQgeyBnZXQsIHNldCwgZGVsIH0gZnJvbSAnb2JqZWN0LXBhdGgnO1xuaW1wb3J0IHsgZGlzcGF0Y2hDdXN0b21FdmVudCB9IGZyb20gJy4uL2xpYi9ldmVudHMnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBkZWVwRXF1YWwgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgY2xhc3NNYXAgfSBmcm9tICdsaXQtaHRtbC9kaXJlY3RpdmVzL2NsYXNzLW1hcCc7XG5pbXBvcnQgeyBWYWxpZGF0b3IgfSBmcm9tICdqc29uc2NoZW1hJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vc3R5bGVzL2VtcHR5JztcbmltcG9ydCAnLi9ndi1zY2hlbWEtZm9ybS1jb250cm9sJztcblxuLyoqXG4gKiBTY2hlbWEgZm9ybSBjb21wb25lbnRcbiAqXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06c3VibWl0IC0gZXZlbnQgd2hlbiB1c2VyIHN1Ym1pdCB2YWxpZCBmb3JtXG4gKiBAZmlyZXMgZ3Ytc2NoZW1hLWZvcm06ZXJyb3IgLSBldmVudCB3aGVuIHVzZXIgc3VibWl0IGludmFsaWQgZm9ybVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNoYW5nZSAtIGV2ZW50IHdoZW4gd2hlbiBmb3JtIGNoYW5nZVxuICogQGZpcmVzIGd2LXNjaGVtYS1mb3JtOmNhbmNlbCAtIGV2ZW50IHdoZW4gdXNlciBjYW5jZWwgZm9ybVxuICpcbiAqIEBhdHRyIHtPYmplY3R9IHNjaGVtYSAtIHRoZSBzY2hlbWEgZm9ybSBjb25maWd1cmF0aW9uXG4gKiBAYXR0ciB7T2JqZWN0fSB2YWx1ZXMgLSB0aGUgdmFsdWVzIG9mIGZpZWxkc1xuICogQGF0dHIge09iamVjdH0gZXJyb3JzIC0gdGhlIG1hcCBvZiBlcnJvcnMgYnkgaW5wdXQga2V5XG4gKiBAYXR0ciB7Qm9vbGVhbn0gdmFsaWRhdGUgLSB0byBmb3JjZSB2YWxpZGF0aW9uIG9uIGZpcnN0IHJlbmRlclxuICogQGF0dHIge0Jvb2xlYW59IHJlYWRvbmx5IC0gdHJ1ZSBpZiByZWFkb25seVxuICogQGF0dHIge0Jvb2xlYW59IHNjcm9sbGFibGUgLSB1c2VmdWwgZm9yIG1ha2luZyBjb250ZW50IHNjcm9sbGFibGUgd2l0aCBmaXhlZCBoZWFkZXJzIC8gZm9vdGVyc1xuICpcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3Ytc2NoZW1hLWZvcm0tLWJnYz0jZmZmZmZmXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtMZW5ndGh9IFstLWd2LXNjaGVtYS1mb3JtLWNvbnRyb2wtLW09MC40cmVtXSAtIENvbnRyb2wgbWFyZ2luXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlNjaGVtYUZvcm0gZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgc3RhdGljIGdldCBwcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBlcnJvcnM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICB2YWx1ZXM6IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBzdWJtaXRMYWJlbDogeyB0eXBlOiBTdHJpbmcgfSxcbiAgICAgIGhhc0Zvb3RlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtZm9vdGVyJyB9LFxuICAgICAgaGFzSGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1oZWFkZXInIH0sXG4gICAgICBfY29uZmlybTogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIF92YWx1ZXM6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkaXJ0eTogeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0sXG4gICAgICBoaWRlRGVwcmVjYXRlZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoaWRlLWRlcHJlY2F0ZWQnIH0sXG4gICAgICB2YWxpZGF0ZU9uUmVuZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3ZhbGlkYXRlLW9uLXJlbmRlcicgfSxcbiAgICAgIF92YWxpZGF0b3JSZXN1bHRzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgc2tlbGV0b246IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX3RvdWNoOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIHNjcm9sbGFibGU6IHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9LFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaGlkZURlcHJlY2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl92YWx1ZXMgPSB7fTtcbiAgICB0aGlzLnN1Ym1pdExhYmVsID0gJ09rJztcbiAgICB0aGlzLmhhc0hlYWRlciA9IGZhbHNlO1xuICAgIHRoaXMuaGFzRm9vdGVyID0gZmFsc2U7XG4gICAgdGhpcy5fdG91Y2ggPSBmYWxzZTtcbiAgICB0aGlzLl92YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKCk7XG4gICAgdGhpcy5fdmFsaWRhdG9yUmVzdWx0cyA9IHt9O1xuICAgIHRoaXMuX2lnbm9yZVByb3BlcnRpZXMgPSBbXTtcbiAgICB0aGlzLl9keW5hbWljQ29udHJvbHMgPSBbXTtcbiAgICB0aGlzLl9keW5hbWljQXR0cmlidXRlcyA9IFsnZGlzYWJsZWQnLCAncmVxdWlyZWQnLCAnaGlkZGVuJ107XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmRlZmF1bHQtdmFsdWUnLCB0aGlzLl9vbkRlZmF1bHRWYWx1ZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2d2LXNjaGVtYS1mb3JtLWNvbnRyb2w6Y2hhbmdlJywgdGhpcy5fb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdndi1zY2hlbWEtZm9ybS1jb250cm9sOmNvbnRyb2wtcmVhZHknLCB0aGlzLl9vbkNvbnRyb2xSZWFkeS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHNldCB2YWx1ZXModmFsdWVzKSB7XG4gICAgaWYgKCFkZWVwRXF1YWwodGhpcy5fdmFsdWVzLCB2YWx1ZXMpKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbFZhbHVlcyA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5fdmFsdWVzID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuXG4gIHJlc2V0KHZhbHVlcyA9IG51bGwpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSBkZWVwQ2xvbmUodmFsdWVzIHx8IHRoaXMuX2luaXRpYWxWYWx1ZXMpO1xuICAgIHRoaXMuX3RvdWNoID0gZmFsc2U7XG4gICAgdGhpcy5fc2V0RGlydHkoZmFsc2UpO1xuICAgIHRoaXMuZ2V0Q29udHJvbHMoKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vblJlc2V0KCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdyZXNldCcpO1xuICB9XG5cbiAgcmVxdWVzdFZhbGlkYXRpb24oKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3ZhbGlkYXRlVGltZW91dCk7XG4gICAgdGhpcy5fdmFsaWRhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlKCk7XG4gICAgICB0aGlzLl91cGRhdGVBY3Rpb25zKCk7XG4gICAgfSwgMzUwKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLl9vblN1Ym1pdCgpO1xuICB9XG5cbiAgX29uU3VibWl0KCkge1xuICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLl9pbml0aWFsVmFsdWVzID0gZGVlcENsb25lKHRoaXMuX3ZhbHVlcyk7XG4gICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl90b3VjaCA9IGZhbHNlO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc3VibWl0JywgeyB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywgdmFsaWRhdG9yUmVzdWx0cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZXJyb3InLCB7IHZhbHVlczogdGhpcy5fdmFsdWVzLCB2YWxpZGF0b3JSZXN1bHRzIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXREaXJ0eShkaXJ0eSA9IHRydWUpIHtcbiAgICB0aGlzLmRpcnR5ID0gISFkaXJ0eTtcbiAgfVxuXG4gIF9zZXRUb3VjaCh0b3VjaCA9IHRydWUpIHtcbiAgICB0aGlzLl90b3VjaCA9ICEhdG91Y2g7XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIGlmICh0aGlzLmlzVG91Y2goKSkge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpcm0gJiYgdGhpcy5fY29uZmlybS5wcm9taXNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtLnByb21pc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gKHRoaXMuX2NvbmZpcm0gPSB7IHJlc29sdmUsIHJlamVjdCB9KSk7XG4gICAgICB0aGlzLl9jb25maXJtLnByb21pc2UgPSBwcm9taXNlO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9vbkNvbmZpcm1SZXNldCgpIHtcbiAgICBjb25zdCB7IHJlc29sdmUgfSA9IHRoaXMuX2NvbmZpcm07XG4gICAgdGhpcy5fY29uZmlybSA9IG51bGw7XG4gICAgdGhpcy5fb25SZXNldCgpO1xuICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh0aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9vbkNvbmZpcm1FZGl0KCkge1xuICAgIHRoaXMuX2NvbmZpcm0ucmVqZWN0KHRoaXMpO1xuICAgIHRoaXMuX2NvbmZpcm0gPSBudWxsO1xuICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuKHRoaXMudmFsaWRhdGVPblJlbmRlcik7XG4gIH1cblxuICBfZ2V0U3VibWl0QnRuKCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3N1Ym1pdCcpO1xuICB9XG5cbiAgX2dldFJlc2V0QnRuKCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3Jlc2V0Jyk7XG4gIH1cblxuICBfZGlzcGF0Y2hDaGFuZ2UoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NoYW5nZVRpbWVvdXQpO1xuICAgIHRoaXMuX2NoYW5nZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2NoYW5nZScsIHsgdGFyZ2V0OiB0aGlzLCB2YWx1ZXM6IHRoaXMuX3ZhbHVlcywgdmFsaWRhdGlvbjogdGhpcy5fdmFsaWRhdG9yUmVzdWx0cyB9KTtcbiAgICB9LCA1MCk7XG4gIH1cblxuICBfb25EZWZhdWx0VmFsdWUoeyBkZXRhaWw6IHsgY3VycmVudFRhcmdldCwgdmFsdWUsIGNvbnRyb2wgfSB9KSB7XG4gICAgaWYgKGNvbnRyb2wudHlwZSA9PT0gJ2ludGVnZXInICYmIHZhbHVlICE9IG51bGwgJiYgKCh2YWx1ZS50cmltICYmIHZhbHVlLmxlbmd0aCA+IDApIHx8IHZhbHVlLmxlbmd0aCA+IDApKSB7XG4gICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuICAgIHNldCh0aGlzLl92YWx1ZXMsIGN1cnJlbnRUYXJnZXQuaWQsIHZhbHVlKTtcbiAgfVxuXG4gIF9vbkNoYW5nZSh7IGRldGFpbDogeyBjdXJyZW50VGFyZ2V0LCB2YWx1ZSwgY29udHJvbCB9IH0pIHtcbiAgICB0aGlzLl9zZXRUb3VjaCh0cnVlKTtcbiAgICBpZiAoY29udHJvbC50eXBlID09PSAnaW50ZWdlcicpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW50VmFsdWUgPSBOdW1iZXIodmFsdWUpLnZhbHVlT2YoKTtcbiAgICAgICAgaWYgKCFpc05hTihpbnRWYWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IGludFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09PSAnYXJyYXknICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWwodGhpcy5fdmFsdWVzLCBjdXJyZW50VGFyZ2V0LmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0KHRoaXMuX3ZhbHVlcywgY3VycmVudFRhcmdldC5pZCwgdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5fdXBkYXRlRHluYW1pY0NvbnRyb2xzKCk7XG4gICAgdGhpcy5fdXBkYXRlQWN0aW9ucygpO1xuICAgIHRoaXMuX2Rpc3BhdGNoQ2hhbmdlKCk7XG4gIH1cblxuICBfb25Db250cm9sUmVhZHkoZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGNvbnRyb2xFbGVtZW50ID0gZS5kZXRhaWwuY29udHJvbDtcbiAgICBjb25zdCBjb250cm9sID0gY29udHJvbEVsZW1lbnQuY29udHJvbDtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddKSB7XG4gICAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddLmV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gY29udHJvbFsneC1zY2hlbWEtZm9ybSddLmV2ZW50O1xuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsIGV2ZW50Lm5hbWUsIHsgLi4uZXZlbnQsIC4uLmUuZGV0YWlsIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oYXNDb25kaXRpb24oY29udHJvbCkpIHtcbiAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRyb2xzLnB1c2goY29udHJvbEVsZW1lbnQpO1xuICAgICAgICB0aGlzLl91cGRhdGVEeW5hbWljQ29udHJvbChjb250cm9sRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3VwZGF0ZUR5bmFtaWNDb250cm9scygpIHtcbiAgICB0aGlzLl9keW5hbWljQ29udHJvbHMuZm9yRWFjaCgoY29udHJvbEVsZW1lbnQpID0+IHtcbiAgICAgIHRoaXMuX3VwZGF0ZUR5bmFtaWNDb250cm9sKGNvbnRyb2xFbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIF91cGRhdGVEeW5hbWljQ29udHJvbChjb250cm9sRWxlbWVudCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjb250cm9sRWxlbWVudC5jb250cm9sO1xuICAgIGlmIChjb250cm9sWyd4LXNjaGVtYS1mb3JtJ10pIHtcbiAgICAgIHRoaXMuX2R5bmFtaWNBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICBjb25zdCBpcyA9IHRoaXMuX2V2YWx1YXRlQ29uZGl0aW9uKGNvbnRyb2wsIGF0dHJpYnV0ZSk7XG4gICAgICAgIGlmIChpcykge1xuICAgICAgICAgIGNvbnRyb2xFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250cm9sRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgYXN5bmMgcGVyZm9ybVVwZGF0ZSgpIHtcbiAgICB0aGlzLmdldENvbnRyb2xzKCkuZm9yRWFjaCgocykgPT4ge1xuICAgICAgcy5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgfSk7XG4gICAgc3VwZXIucGVyZm9ybVVwZGF0ZSgpO1xuICB9XG5cbiAgX3JlbmRlckNvbnRyb2woa2V5KSB7XG4gICAgLy8gVGhpcyBpcyByZXF1aXJlIHRvIGNsZWFuIGNhY2hlIG9mIDxndi1zY2hlbWEtZm9ybS1jb250cm9sPlxuICAgIGNvbnN0IGNvbnRyb2wgPSB7IC4uLnRoaXMuc2NoZW1hLnByb3BlcnRpZXNba2V5XSB9O1xuICAgIGNvbnN0IGlzUmVxdWlyZWQgPSAodGhpcy5zY2hlbWEucmVxdWlyZWQgJiYgdGhpcy5zY2hlbWEucmVxdWlyZWQuaW5jbHVkZXMoa2V5KSkgfHwgdGhpcy5fZXZhbHVhdGVDb25kaXRpb24oY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9ICh0aGlzLnNjaGVtYS5kaXNhYmxlZCAmJiB0aGlzLnNjaGVtYS5kaXNhYmxlZC5pbmNsdWRlcyhrZXkpKSB8fCB0aGlzLl9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCAnZGlzYWJsZWQnKTtcbiAgICBjb25zdCBpc0hpZGRlbiA9IHRoaXMuX2V2YWx1YXRlQ29uZGl0aW9uKGNvbnRyb2wsICdoaWRkZW4nKTtcbiAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgIHRoaXMuX2lnbm9yZVByb3BlcnRpZXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBjb25zdCBpc1JlYWRvbmx5ID0gdGhpcy5yZWFkb25seSB8fCBjb250cm9sLnJlYWRPbmx5ID09PSB0cnVlO1xuICAgIGNvbnN0IGlzV3JpdGVPbmx5ID0gY29udHJvbC53cml0ZU9ubHkgPT09IHRydWU7XG4gICAgY29uc3QgdmFsdWUgPSBnZXQodGhpcy5fdmFsdWVzLCBrZXkpO1xuICAgIHJldHVybiBodG1sYDxndi1zY2hlbWEtZm9ybS1jb250cm9sXG4gICAgICAuaWQ9XCIke2tleX1cIlxuICAgICAgLmVycm9ycz1cIiR7dGhpcy5lcnJvcnN9XCJcbiAgICAgIC5jb250cm9sPVwiJHtjb250cm9sfVwiXG4gICAgICAuc2tlbGV0b249XCIke3RoaXMuc2tlbGV0b259XCJcbiAgICAgIC52YWx1ZT1cIiR7dmFsdWV9XCJcbiAgICAgID9yZWFkb25seT1cIiR7aXNSZWFkb25seX1cIlxuICAgICAgP3dyaXRlb25seT1cIiR7aXNXcml0ZU9ubHl9XCJcbiAgICAgID9yZXF1aXJlZD1cIiR7aXNSZXF1aXJlZH1cIlxuICAgICAgP2Rpc2FibGVkPVwiJHtpc0Rpc2FibGVkfVwiXG4gICAgICA/aGlkZGVuPVwiJHtpc0hpZGRlbn1cIlxuICAgID48L2d2LXNjaGVtYS1mb3JtLWNvbnRyb2w+YDtcbiAgfVxuXG4gIF9oYXNDb25kaXRpb24oY29udHJvbCkge1xuICAgIGlmIChjb250cm9sWyd4LXNjaGVtYS1mb3JtJ10pIHtcbiAgICAgIHJldHVybiB0aGlzLl9keW5hbWljQXR0cmlidXRlcy5maW5kKChjb25kaXRpb24pID0+IGNvbnRyb2xbJ3gtc2NoZW1hLWZvcm0nXVtjb25kaXRpb25dICE9IG51bGwpICE9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIF9ldmFsdWF0ZUNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb25LZXkpIHtcbiAgICBpZiAoY29udHJvbFsneC1zY2hlbWEtZm9ybSddID09IG51bGwgfHwgY29udHJvbFsneC1zY2hlbWEtZm9ybSddW2NvbmRpdGlvbktleV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjb25kaXRpb24gPSBjb250cm9sWyd4LXNjaGVtYS1mb3JtJ11bY29uZGl0aW9uS2V5XTtcbiAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gY29uZGl0aW9uO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgLy8gY29uZGl0aW9uIGlzbid0IGFuIGFycmF5LCBpZ25vcmUgdGhlIGNvbmRpdGlvblxuICAgICAgY29uc29sZS53YXJuKGAnJHtjb25kaXRpb25LZXl9JyBhdHRyaWJ1dGUgb2YgJ3gtc2NoZW1hLWZvcm0nIHNob3VsZCBiZSBhbiBhcnJheWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQgPSB0cnVlO1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIGNvbmRpdGlvbikge1xuICAgICAgLy8gb3BlcmF0aW9uIG9ubHkgaGF2ZSBvbmUgb3BlcmF0b3Igd2l0aCBhIHNpbmdsZSBvYmplY3QgY29udGFpbmluZyBvcGVyYW5kIHZhbHVlc1xuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBPYmplY3Qua2V5cyhvcGVyYXRpb24pWzBdO1xuXG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgJyRuZXEnOlxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLl9ldmFsdWF0ZU5vdEVxdWFsc0NvbmRpdGlvbihjb250cm9sLCBvcGVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICckZXEnOlxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLl9ldmFsdWF0ZUVxdWFsc0NvbmRpdGlvbihjb250cm9sLCBvcGVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICckbm9kZWYnOlxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLl9ldmFsdWF0ZU5vdERlZkNvbmRpdGlvbihjb250cm9sLCBvcGVyYXRpb24pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICckZGVmJzpcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdGhpcy5fZXZhbHVhdGVEZWZDb25kaXRpb24oY29udHJvbCwgb3BlcmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIG9wZXJhdG9yICcke29wZXJhdG9yfScgb24gZGlzYWJsZSBjb25kaXRpb25gKTtcbiAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgX2V2YWx1YXRlTm90RXF1YWxzQ29uZGl0aW9uKGNvbnRyb2wsIGNvbmRpdGlvbikge1xuICAgIHJldHVybiAhdGhpcy5fZXZhbHVhdGVFcXVhbHNDb25kaXRpb24oY29udHJvbCwgY29uZGl0aW9uKTtcbiAgfVxuXG4gIF9ldmFsdWF0ZUVxdWFsc0NvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbilbMF07XG4gICAgY29uc3Qgb3BlcmFuZHMgPSBjb25kaXRpb25bb3BlcmF0b3JdO1xuICAgIGNvbnN0IG1vZGVsQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKG9wZXJhbmRzKTtcbiAgICByZXR1cm4gbW9kZWxBdHRyaWJ1dGVzXG4gICAgICAubWFwKChtb2RlbEF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0VmFsdWUgPSBvcGVyYW5kc1ttb2RlbEF0dHJpYnV0ZV07XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldCh0aGlzLl92YWx1ZXMsIG1vZGVsQXR0cmlidXRlKTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgJiYgY29udHJvbC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVzdFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0ZXN0VmFsdWUuaW5jbHVkZXModmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdGVzdFZhbHVlO1xuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoKGFjYywgY3VycmVudCkgPT4gYWNjIHx8IGN1cnJlbnQpO1xuICB9XG5cbiAgX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uKGNvbnRyb2wsIGNvbmRpdGlvbikge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gT2JqZWN0LmtleXMoY29uZGl0aW9uKVswXTtcbiAgICBjb25zdCBtb2RlbEF0dHJpYnV0ZSA9IGNvbmRpdGlvbltvcGVyYXRvcl07XG4gICAgcmV0dXJuIGdldCh0aGlzLl92YWx1ZXMsIG1vZGVsQXR0cmlidXRlKSA9PT0gdW5kZWZpbmVkIHx8IGdldCh0aGlzLl92YWx1ZXMsIG1vZGVsQXR0cmlidXRlKSA9PT0gbnVsbDtcbiAgfVxuXG4gIF9ldmFsdWF0ZURlZkNvbmRpdGlvbihjb250cm9sLCBjb25kaXRpb24pIHtcbiAgICByZXR1cm4gIXRoaXMuX2V2YWx1YXRlTm90RGVmQ29uZGl0aW9uKGNvbnRyb2wsIGNvbmRpdGlvbik7XG4gIH1cblxuICBfcmVuZGVyUGFydCgpIHtcbiAgICBpZiAodGhpcy5fY29uZmlybSkge1xuICAgICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImNvbmZpcm0tYm94XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvclwiPlRoZSBjb25maWd1cmF0aW9uIGlzIG5vdCB2YWxpZCBhbmQgY2Fubm90IGJlIHNhdmVkLjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlybS1ib3hfYWN0aW9uc1wiPlxuICAgICAgICAgIDxndi1idXR0b24gQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25Db25maXJtUmVzZXR9XCIgb3V0bGluZWQgaWNvbj1cImdlbmVyYWw6dXBkYXRlXCIgZGFuZ2VyPkxvc2UgY2hhbmdlczwvZ3YtYnV0dG9uPlxuICAgICAgICAgIDxndi1idXR0b24gQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25Db25maXJtRWRpdH1cIiBpY29uPVwiZGVzaWduOmVkaXRcIj5FZGl0PC9ndi1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IHRoaXMuc2NoZW1hLnByb3BlcnRpZXMgPyBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKSA6IFtdO1xuICAgIHRoaXMuX2lnbm9yZVByb3BlcnRpZXMgPSBbXTtcbiAgICByZXR1cm4gaHRtbGAke2tleXMubWFwKChrZXkpID0+IHRoaXMuX3JlbmRlckNvbnRyb2woa2V5KSl9YDtcbiAgfVxuXG4gIGdldENvbnRyb2xzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1zY2hlbWEtZm9ybS1jb250cm9sJykpO1xuICB9XG5cbiAgZ2V0Q29udHJvbChpZCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZH1cIl1gKTtcbiAgfVxuXG4gIHZhbGlkYXRlKCkge1xuICAgIGlmICh0aGlzLnNjaGVtYSkge1xuICAgICAgdGhpcy5fdmFsaWRhdG9yUmVzdWx0cyA9IHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZSh0aGlzLl92YWx1ZXMsIHRoaXMuc2NoZW1hKTtcbiAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB0aGlzLl92YWxpZGF0b3JSZXN1bHRzLmVycm9ycztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvclJlc3VsdHM7XG4gIH1cblxuICBpc1ZhbGlkKCkge1xuICAgIGlmICh0aGlzLl92YWxpZGF0b3JSZXN1bHRzLnZhbGlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSAodGhpcy5fdmFsaWRhdG9yUmVzdWx0cy5lcnJvcnMgfHwgW10pLmZpbHRlcigoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiAhdGhpcy5faWdub3JlUHJvcGVydGllcy5pbmNsdWRlcyhlcnJvci5wcm9wZXJ0eS5yZXBsYWNlKCdpbnN0YW5jZS4nLCAnJykpO1xuICAgIH0pO1xuICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaXNUb3VjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG91Y2ggfHwgKHRoaXMuZGlydHkgJiYgdGhpcy52YWxpZGF0ZU9uUmVuZGVyKTtcbiAgfVxuXG4gIGNhblN1Ym1pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvdWNoKCkgJiYgdGhpcy5pc1ZhbGlkKCk7XG4gIH1cblxuICBfdXBkYXRlQWN0aW9ucygpIHtcbiAgICBjb25zdCBzdWJtaXRCdG4gPSB0aGlzLl9nZXRTdWJtaXRCdG4oKTtcbiAgICBpZiAoc3VibWl0QnRuICE9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmNhblN1Ym1pdCgpKSB7XG4gICAgICAgIHRoaXMuX2dldFN1Ym1pdEJ0bigpLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2dldFN1Ym1pdEJ0bigpLnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzZXRCdG4gPSB0aGlzLl9nZXRSZXNldEJ0bigpO1xuICAgIGlmIChyZXNldEJ0biAhPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICByZXNldEJ0bi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldEJ0bi5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3VwZGF0ZUNoaWxkcmVuKHdpdGhWYWxpZGF0aW9uKSB7XG4gICAgaWYgKHdpdGhWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLl92YWxpZGF0b3JSZXN1bHRzID0ge307XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGw7XG4gICAgICB0aGlzLnJlcXVlc3RWYWxpZGF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUFjdGlvbnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl91cGRhdGVBY3Rpb25zKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlQWN0aW9uc1RpbWVvdXQpO1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ192YWx1ZXMnKSkge1xuICAgICAgdGhpcy5nZXRDb250cm9scygpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29udHJvbC52YWx1ZSA9IGdldCh0aGlzLl92YWx1ZXMsIGNvbnRyb2wuaWQpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUNoaWxkcmVuKHRoaXMudmFsaWRhdGVPblJlbmRlciAmJiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdfdmFsdWVzJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdzY2hlbWEnKSkpO1xuICB9XG5cbiAgYXN5bmMgX2dldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGF3YWl0IHN1cGVyLl9nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZ2V0Q29udHJvbHMoKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gaHRtbGA8Zm9ybSBjbGFzcz1cIiR7Y2xhc3NNYXAoeyBzY3JvbGxhYmxlOiB0aGlzLnNjcm9sbGFibGUgfSl9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiJHtjbGFzc01hcCh7IGNvbnRhaW5lcjogdHJ1ZSwgY29uZmlybTogdGhpcy5fY29uZmlybSB9KX1cIj5cbiAgICAgICAgJHt0aGlzLmhhc0hlYWRlciA9PT0gdHJ1ZVxuICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKHsgdGl0bGU6IHRydWUsIGNlbnRlcjogdGhpcy5oYXNIZWFkZXIgJiYgIXRoaXMuaGFzRm9vdGVyIH0pfVwiPlxuICAgICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInRpdGxlXCI+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiaGVhZGVyLWxlZnRcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgJHt0aGlzLnJlYWRvbmx5ID09PSB0cnVlIHx8IHRoaXMuaGFzRm9vdGVyID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICA6IGh0bWxgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJyZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uUmVzZXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJnZW5lcmFsOnVwZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uU3VibWl0fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY29kZTpjaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAudGl0bGU9XCIke3RoaXMuc3VibWl0TGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICA6ICcnfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPiR7dGhpcy5zY2hlbWEgIT0gbnVsbCA/IHRoaXMuX3JlbmRlclBhcnQoKSA6IGh0bWxgYH08L2Rpdj5cbiAgICAgICAgJHt0aGlzLmhhc0Zvb3RlciA9PT0gdHJ1ZSAmJiB0aGlzLnJlYWRvbmx5ICE9PSB0cnVlXG4gICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDxndi1idXR0b24gaWQ9XCJyZXNldFwiIG91dGxpbmVkIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uUmVzZXR9XCIgaWNvbj1cImdlbmVyYWw6dXBkYXRlXCIgdGl0bGU9XCJSZXNldFwiPlJlc2V0PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uIGlkPVwic3VibWl0XCIgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25TdWJtaXR9XCIgaWNvbj1cImNvZGU6Y2hlY2tcIiAudGl0bGU9XCIke3RoaXMuc3VibWl0TGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgPiR7dGhpcy5zdWJtaXRMYWJlbH08L2d2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICA6ICcnfVxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPmA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgZW1wdHksXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgbWFyZ2luOiAwLjJyZW07XG4gICAgICAgICAgLS1iZ2M6IHZhcigtLWd2LXNjaGVtYS1mb3JtLS1iZ2MsICNmZmZmZmYpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIHtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmdjKTtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgICAgICAgICAvKiBmb3IgRmlyZWZveCAqL1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLFxuICAgICAgICAuZm9vdGVyLFxuICAgICAgICAuY29udGVudCB7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmdjKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250ZW50IHtcbiAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgIC8qIGZvciBGaXJlZm94ICovXG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb250ZW50ID4gZ3Ytc2NoZW1hLWZvcm0tY29udHJvbCB7XG4gICAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybS5zY3JvbGxhYmxlIC5jb250ZW50IHtcbiAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm0uc2Nyb2xsYWJsZSAuY29udGVudCA+IGd2LXNjaGVtYS1mb3JtLWNvbnRyb2wge1xuICAgICAgICAgIG1heC13aWR0aDogNzc1cHg7XG4gICAgICAgICAgd2lkdGg6IDk1JTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIsXG4gICAgICAgIC5mb290ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA0NXB4O1xuICAgICAgICAgIC0tZ3YtaWNvbi0tczogMjZweDtcbiAgICAgICAgICAtLWd2LWljb24tLWM6ICNiZmJmYmY7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIHtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtLnNjcm9sbGFibGUgLmZvb3RlciB7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyIC5sZWZ0LFxuICAgICAgICAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAgbWF4LXdpZHRoOiA0MDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLmxlZnQsXG4gICAgICAgIC5mb290ZXIgLmxlZnQsXG4gICAgICAgIC5oZWFkZXIgLnJpZ2h0LFxuICAgICAgICAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC5yaWdodCxcbiAgICAgICAgLmZvb3RlciAucmlnaHQge1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyIC50aXRsZSB7XG4gICAgICAgICAgY29sb3I6ICMyODQ0NGY7XG4gICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5oZWFkZXIgLnRpdGxlLmNlbnRlciB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb25maXJtLWJveCB7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNvbmZpcm0tYm94X2FjdGlvbnMge1xuICAgICAgICAgIHBhZGRpbmc6IDFyZW0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jb25maXJtIC5oZWFkZXIgLmxlZnQsXG4gICAgICAgIC5jb25maXJtIC5oZWFkZXIgLnJpZ2h0LFxuICAgICAgICAuY29uZmlybSAuZm9vdGVyIC5sZWZ0LFxuICAgICAgICAuY29uZmlybSAuZm9vdGVyIC5yaWdodCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXNjaGVtYS1mb3JtJywgR3ZTY2hlbWFGb3JtKTtcbiJdfQ==