jsii-diff 1.53.0 → 1.55.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.
@@ -57,13 +57,13 @@ export declare abstract class ComparableType<T> {
57
57
  */
58
58
  get outputType(): boolean;
59
59
  /**
60
- * Mark this type as occuring in an input rule.
60
+ * Mark this type as occurring in an input rule.
61
61
  *
62
62
  * All types reachable from this type will be marked as input types as well.
63
63
  */
64
64
  markAsInputType(...reasonFragments: string[]): void;
65
65
  /**
66
- * Mark this type as occuring in an input rule.
66
+ * Mark this type as occurring in an input rule.
67
67
  *
68
68
  * All types reachable from this type will be marked as input types as well.
69
69
  */
@@ -135,7 +135,7 @@ class ComparableType {
135
135
  return this._outputTypeReasons.length > 0;
136
136
  }
137
137
  /**
138
- * Mark this type as occuring in an input rule.
138
+ * Mark this type as occurring in an input rule.
139
139
  *
140
140
  * All types reachable from this type will be marked as input types as well.
141
141
  */
@@ -148,7 +148,7 @@ class ComparableType {
148
148
  });
149
149
  }
150
150
  /**
151
- * Mark this type as occuring in an input rule.
151
+ * Mark this type as occurring in an input rule.
152
152
  *
153
153
  * All types reachable from this type will be marked as input types as well.
154
154
  */
@@ -505,4 +505,4 @@ function describeReasons(reasons) {
505
505
  }
506
506
  return `${reasons[0]} (...and ${reasons.length - 1} more...)`;
507
507
  }
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1jb21wYXJpc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHlwZS1jb21wYXJpc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF1QztBQUN2Qyx3Q0FBd0M7QUFDeEMsaUNBQWlDO0FBRWpDLDJDQUFrRDtBQUNsRCxtREFBa0U7QUFDbEUsbUNBT2lCO0FBQ2pCLGlDQUEwQztBQUMxQywrQ0FxQnVCO0FBRXZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQW1DLE9BQTBCO1FBQTFCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBRjVDLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUc5RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQVUsQ0FBQztZQUMvQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsbUJBQW1CO2dCQUMzQyxDQUFDLENBQUMsZ0JBQVMsQ0FBQyxZQUFZO2dCQUN4QixDQUFDLENBQUMsZ0JBQVMsQ0FBQyxNQUFNO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSSxDQUFDLFFBQTBCLEVBQUUsT0FBeUI7UUFDL0Qsc0NBQXNDO1FBQ3RDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN2RjtRQUVELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFD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QUFXLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMzQjthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBaUI7SUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQjtJQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhYmlsaXR5IH0gZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgKiBhcyByZWZsZWN0IGZyb20gJ2pzaWktcmVmbGVjdCc7XG5pbXBvcnQgKiBhcyBsb2c0anMgZnJvbSAnbG9nNGpzJztcblxuaW1wb3J0IHsgdmFsaWRhdGVTdGFiaWxpdGllcyB9IGZyb20gJy4vc3RhYmlsaXR5JztcbmltcG9ydCB7IGlzU3RydWN0dXJhbFN1cGVyVHlwZSwgQW5hbHlzaXMgfSBmcm9tICcuL3R5cGUtYW5hbHlzaXMnO1xuaW1wb3J0IHtcbiAgZGVzY3JpYmVJbnRlcmZhY2VUeXBlLFxuICBkZXNjcmliZVR5cGUsXG4gIENvbXBhcmlzb25PcHRpb25zLFxuICBNaXNtYXRjaGVzLFxuICBhcGlFbGVtZW50SWRlbnRpZmllcixcbiAgSVJlcG9ydCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBSZWN1cnNpb25CcmVha2VyIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7XG4gIHZhbGlkYXRlQmFzZVR5cGVBc3NpZ25hYmlsaXR5LFxuICB2YWxpZGF0ZU5vdE1hZGVBYnN0cmFjdCxcbiAgdmFsaWRhdGVTdWJjbGFzc2FibGVOb3RSZW1vdmVkLFxuICB2YWxpZGF0ZU5vTmV3QWJzdHJhY3RNZW1iZXJzLFxuICBzdWJjbGFzc2FibGVUeXBlLFxuICB2YWxpZGF0ZU1ldGhvZENvbXBhdGlibGUsXG4gIG1lbWJlclBhaXJzLFxuICB2YWxpZGF0ZVN0YXRpY1NhbWUsXG4gIHZhbGlkYXRlQXN5bmNTYW1lLFxuICB2YWxpZGF0ZVJldHVyblR5cGVOb3RXZWFrZW5lZCxcbiAgdmFsaWRhdGVOb3RNYWRlTm9uVmFyaWFkaWMsXG4gIHZhbGlkYXRlUmV0dXJuVHlwZVNhbWUsXG4gIHZhbGlkYXRlRXhpc3RpbmdQYXJhbXMsXG4gIHZhbGlkYXRlTm9OZXdSZXF1aXJlZFBhcmFtcyxcbiAgdmFsaWRhdGVQYXJhbWV0ZXJUeXBlV2Vha2VuZWQsXG4gIHZhbGlkYXRlUGFyYW1ldGVyVHlwZVNhbWUsXG4gIHZhbGlkYXRlTm90TWFkZUltbXV0YWJsZSxcbiAgdmFsaWRhdGVQcm9wZXJ0eVR5cGVOb3RXZWFrZW5lZCxcbiAgdmFsaWRhdGVQcm9wZXJ0eVR5cGVTYW1lLFxuICB2YWxpZGF0ZUV4aXN0aW5nTWVtYmVycyxcbn0gZnJvbSAnLi92YWxpZGF0aW9ucyc7XG5cbmNvbnN0IExPRyA9IGxvZzRqcy5nZXRMb2dnZXIoJ2pzaWktZGlmZicpO1xuXG4vKipcbiAqIFJvb3Qgb2JqZWN0IGZvciBjb21wYXJpbmcgdHdvIGFzc2VtYmxpZXNcbiAqXG4gKiBUcmFja3MgbWlzbWF0Y2hlcyBhbmQgdXNlZCBhcyBhIGxvb2t1cCB0YWJsZSB0byBjb252ZXJ0IEZRTnMgLT4gQ29tcGFyYWJsZVR5cGUgb2JqZWN0c1xuICovXG5leHBvcnQgY2xhc3MgQXNzZW1ibHlDb21wYXJpc29uIHtcbiAgcHVibGljIHJlYWRvbmx5IG1pc21hdGNoZXM6IE1pc21hdGNoZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZXMgPSBuZXcgTWFwPHN0cmluZywgQ29tcGFyYWJsZVR5cGU8YW55Pj4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBhcmlzb25PcHRpb25zKSB7XG4gICAgdGhpcy5taXNtYXRjaGVzID0gbmV3IE1pc21hdGNoZXMoe1xuICAgICAgZGVmYXVsdFN0YWJpbGl0eTogb3B0aW9ucy5kZWZhdWx0RXhwZXJpbWVudGFsXG4gICAgICAgID8gU3RhYmlsaXR5LkV4cGVyaW1lbnRhbFxuICAgICAgICA6IFN0YWJpbGl0eS5TdGFibGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgdHlwZXMgZnJvbSB0d28gYXNzZW1ibGllcyB0byBjb21wYXJlXG4gICAqXG4gICAqIEFkZHMgYXBwcm9wcmlhdGUgQ29tcGFyYWJsZVR5cGU8PiBpbnN0YW5jZXMuXG4gICAqL1xuICBwdWJsaWMgbG9hZChvcmlnaW5hbDogcmVmbGVjdC5Bc3NlbWJseSwgdXBkYXRlZDogcmVmbGVjdC5Bc3NlbWJseSkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHByZXR0aWVyL3ByZXR0aWVyICovXG4gICAgZm9yIChjb25zdCBbb3JpZ0NsYXNzLCB1cGRhdGVkQ2xhc3NdIG9mIHRoaXMudHlwZVBhaXJzKG9yaWdpbmFsLmNsYXNzZXMsIHVwZGF0ZWQpKSB7XG4gICAgICB0aGlzLnR5cGVzLnNldChvcmlnQ2xhc3MuZnFuLCBuZXcgQ29tcGFyYWJsZUNsYXNzVHlwZSh0aGlzLCBvcmlnQ2xhc3MsIHVwZGF0ZWRDbGFzcykpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW29yaWdJZmFjZSwgdXBkYXRlZElmYWNlXSBvZiB0aGlzLnR5cGVQYWlycyhvcmlnaW5hbC5pbnRlcmZhY2VzLCB1cGRhdGVkKSkge1xuICAgICAgaWYgKG9yaWdJZmFjZS5kYXRhdHlwZSAhPT0gdXBkYXRlZElmYWNlLmRhdGF0eXBlKSB7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICAgIHJ1bGVLZXk6ICdpZmFjZS10eXBlJyxcbiAgICAgICAgICB2aW9sYXRvcjogb3JpZ0lmYWNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGB1c2VkIHRvIGJlIGEgJHtkZXNjcmliZUludGVyZmFjZVR5cGUoXG4gICAgICAgICAgICBvcmlnSWZhY2UuZGF0YXR5cGUsXG4gICAgICAgICAgKX0sIGlzIG5vdyBhICR7ZGVzY3JpYmVJbnRlcmZhY2VUeXBlKHVwZGF0ZWRJZmFjZS5kYXRhdHlwZSl9LmAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50eXBlcy5zZXQob3JpZ0lmYWNlLmZxbiwgb3JpZ0lmYWNlLmRhdGF0eXBlXG4gICAgICAgID8gbmV3IENvbXBhcmFibGVTdHJ1Y3RUeXBlKHRoaXMsIG9yaWdJZmFjZSwgdXBkYXRlZElmYWNlKVxuICAgICAgICA6IG5ldyBDb21wYXJhYmxlSW50ZXJmYWNlVHlwZSh0aGlzLCBvcmlnSWZhY2UsIHVwZGF0ZWRJZmFjZSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW29yaWdFbnVtLCB1cGRhdGVkRW51bV0gb2YgdGhpcy50eXBlUGFpcnMob3JpZ2luYWwuZW51bXMsIHVwZGF0ZWQpKSB7XG4gICAgICB0aGlzLnR5cGVzLnNldChvcmlnRW51bS5mcW4sIG5ldyBDb21wYXJhYmxlRW51bVR5cGUodGhpcywgb3JpZ0VudW0sIHVwZGF0ZWRFbnVtKSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgcHJldHRpZXIvcHJldHRpZXIgKi9cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBjb21wYXJpc29uIGZvciBhbGwgbG9hZGVkIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgY29tcGFyZSgpIHtcbiAgICB0aGlzLmNvbXBhcmFibGVUeXBlcy5mb3JFYWNoKCh0KSA9PiB0Lm1hcmtUeXBlUm9sZXMoKSk7XG4gICAgdGhpcy5jb21wYXJhYmxlVHlwZXMuZm9yRWFjaCgodCkgPT4gdC5jb21wYXJlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uIGEgSlNJSSBUeXBlUmVmZXJlbmNlLCByZXR1cm4gYWxsIHJlYWNoYWJsZSBDb21wYXJhYmxlVHlwZTw+IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgdHlwZXNJbihyZWY6IHJlZmxlY3QuVHlwZVJlZmVyZW5jZSk6IEFycmF5PENvbXBhcmFibGVUeXBlPGFueT4+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8Q29tcGFyYWJsZVR5cGU8YW55Pj4oKTtcblxuICAgIGZvciAoY29uc3QgZnFuIG9mIGZxbnNGcm9tKHJlZikpIHtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLnR5cGVzLmdldChmcW4pO1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgcmV0LnB1c2godCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIENvbXBhcmFibGVUeXBlPD5zXG4gICAqL1xuICBwcml2YXRlIGdldCBjb21wYXJhYmxlVHlwZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50eXBlcy52YWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgbWF0Y2hpbmcgdHlwZSBpbiB0aGUgdXBkYXRlZCBhc3NlbWJseSBiYXNlZCBvbiBhbGwgdHlwZXMgaW4gdGhlIG9yaWdpbmFsIGFzc2VtYmx5XG4gICAqL1xuICBwcml2YXRlICp0eXBlUGFpcnM8VCBleHRlbmRzIHJlZmxlY3QuVHlwZT4oXG4gICAgeHM6IHJlYWRvbmx5IFRbXSxcbiAgICB1cGRhdGVkQXNzZW1ibHk6IHJlZmxlY3QuQXNzZW1ibHksXG4gICk6IEl0ZXJhYmxlSXRlcmF0b3I8W1QsIFRdPiB7XG4gICAgZm9yIChjb25zdCBvcmlnVHlwZSBvZiB4cykge1xuICAgICAgTE9HLnRyYWNlKG9yaWdUeXBlLmZxbik7XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRUeXBlID0gdXBkYXRlZEFzc2VtYmx5LnRyeUZpbmRUeXBlKG9yaWdUeXBlLmZxbik7XG4gICAgICBpZiAoIXVwZGF0ZWRUeXBlKSB7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICAgIHJ1bGVLZXk6ICdyZW1vdmVkJyxcbiAgICAgICAgICB2aW9sYXRvcjogb3JpZ1R5cGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2hhcyBiZWVuIHJlbW92ZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXNjcmliZVR5cGUob3JpZ1R5cGUpICE9PSBkZXNjcmliZVR5cGUodXBkYXRlZFR5cGUpKSB7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICAgIHJ1bGVLZXk6ICdzdHJ1Y3QtY2hhbmdlJyxcbiAgICAgICAgICB2aW9sYXRvcjogb3JpZ1R5cGUsXG4gICAgICAgICAgbWVzc2FnZTogYGhhcyBiZWVuIHR1cm5lZCBpbnRvIGEgJHtkZXNjcmliZVR5cGUodXBkYXRlZFR5cGUpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgeWllbGQgW29yaWdUeXBlLCB1cGRhdGVkVHlwZSBhcyBUXTsgLy8gVHJ1c3QgbWUgSSBrbm93IHdoYXQgSSdtIGRvaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY29tcGFyYWJsZSB0eXBlc1xuICpcbiAqIE1hbmFnZXMgbm90aW9ucyBvZiBjcmF3bGluZyB0eXBlcyBmb3Igb3RoZXIgcmVmZXJlbmNlIHR5cGVzLCBhbmQgd2hldGhlclxuICogdGhleSBvY2N1ciBpbiBhbiBpbnB1dC9vdXRwdXQgcm9sZSwgYW5kIG1hcmtpbmcgYXMgc3VjaCBvbiB0aGUgY29tcGFyaXNvblxuICogb2JqZWN0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcGFyYWJsZVR5cGU8VD4ge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSByZWN1cnNpb25CcmVha2VyID0gbmV3IFJlY3Vyc2lvbkJyZWFrZXIoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dFR5cGVSZWFzb25zID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0cHV0VHlwZVJlYXNvbnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXNzZW1ibHlDb21wYXJpc29uOiBBc3NlbWJseUNvbXBhcmlzb24sXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9sZFR5cGU6IFQsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5ld1R5cGU6IFQsXG4gICkge31cblxuICAvKipcbiAgICogRG9lcyB0aGlzIHR5cGUgb2NjdXIgaW4gYW4gaW5wdXQgcm9sZT9cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dFR5cGVSZWFzb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogRG9lcyB0aGlzIHR5cGUgb2NjdXIgaW4gYW4gb3V0cHV0IHJvbGU/XG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dHB1dFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dFR5cGVSZWFzb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGlzIHR5cGUgYXMgb2NjdXJpbmcgaW4gYW4gaW5wdXQgcnVsZS5cbiAgICpcbiAgICogQWxsIHR5cGVzIHJlYWNoYWJsZSBmcm9tIHRoaXMgdHlwZSB3aWxsIGJlIG1hcmtlZCBhcyBpbnB1dCB0eXBlcyBhcyB3ZWxsLlxuICAgKi9cbiAgcHVibGljIG1hcmtBc0lucHV0VHlwZSguLi5yZWFzb25GcmFnbWVudHM6IHN0cmluZ1tdKSB7XG4gICAgQ29tcGFyYWJsZVR5cGUucmVjdXJzaW9uQnJlYWtlci5kbyh0aGlzLCAoKSA9PiB7XG4gICAgICB0aGlzLl9pbnB1dFR5cGVSZWFzb25zLnB1c2gocmVhc29uRnJhZ21lbnRzLmpvaW4oJywgJykpO1xuICAgICAgdGhpcy5mb3JFYWNoUm9sZVNoYXJpbmdUeXBlKCh0eXBlLCByZWFzb24pID0+IHtcbiAgICAgICAgdHlwZS5tYXJrQXNJbnB1dFR5cGUocmVhc29uLCAuLi5yZWFzb25GcmFnbWVudHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGlzIHR5cGUgYXMgb2NjdXJpbmcgaW4gYW4gaW5wdXQgcnVsZS5cbiAgICpcbiAgICogQWxsIHR5cGVzIHJlYWNoYWJsZSBmcm9tIHRoaXMgdHlwZSB3aWxsIGJlIG1hcmtlZCBhcyBpbnB1dCB0eXBlcyBhcyB3ZWxsLlxuICAgKi9cbiAgcHVibGljIG1hcmtBc091dHB1dFR5cGUoLi4ucmVhc29uRnJhZ21lbnRzOiBzdHJpbmdbXSkge1xuICAgIENvbXBhcmFibGVUeXBlLnJlY3Vyc2lvbkJyZWFrZXIuZG8odGhpcywgKCkgPT4ge1xuICAgICAgdGhpcy5fb3V0cHV0VHlwZVJlYXNvbnMucHVzaChyZWFzb25GcmFnbWVudHMuam9pbignLCAnKSk7XG4gICAgICB0aGlzLmZvckVhY2hSb2xlU2hhcmluZ1R5cGUoKHR5cGUsIHJlYXNvbikgPT4ge1xuICAgICAgICB0eXBlLm1hcmtBc091dHB1dFR5cGUocmVhc29uLCAuLi5yZWFzb25GcmFnbWVudHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzY3JpYmUgd2h5IHRoaXMgdHlwZSBpcyBhbiBpbnB1dCB0eXBlIChpZiBpdCBpcylcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRUeXBlUmVhc29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlc2NyaWJlUmVhc29ucyh0aGlzLl9pbnB1dFR5cGVSZWFzb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmliZSB3aHkgdGhpcyB0eXBlIGlzIGFuIG91dHB1dCB0eXBlIChpZiBpdCBpcylcbiAgICovXG4gIHB1YmxpYyBnZXQgb3V0cHV0VHlwZVJlYXNvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkZXNjcmliZVJlYXNvbnModGhpcy5fb3V0cHV0VHlwZVJlYXNvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSBvdmVycmlkZW4gaW4gc3ViY2xhc3NlcyB0byBtYXJrIHJlYWNoYWJsZSB0eXBlcyBhcyBpbnB1dC9vdXRwdXQgdHlwZXNcbiAgICpcbiAgICogU2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0aGF0IGNvbnRhaW4gY2FsbGFibGVzLlxuICAgKi9cbiAgcHVibGljIG1hcmtUeXBlUm9sZXMoKSB7XG4gICAgLy8gRW1wdHkgb24gcHVycG9zZVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMgdG8gcGVyZm9ybSB0aGUgY29tcGFyaXNvblxuICAgKlxuICAgKiBJbnB1dC9vdXRwdXQgbWFya2luZyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHBlcmZvcm1lZCBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgY29tcGFyZSgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBbGlhcyBmb3IgdGhlIHJvb3Qgb2JqZWN0IE1pc21hY2hlcyBvYmplY3RcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgbWlzbWF0Y2hlcygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3NlbWJseUNvbXBhcmlzb24ubWlzbWF0Y2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG91bGQgYmUgb3ZlcnJpZGVuIGluIHN1YmNsYXNzZXMgdG8gZXhlY3V0ZSB0aGUgY2FsbGJhY2sgb24gcmVhY2hhYmxlIHR5cGVzXG4gICAqXG4gICAqIFNob3VsZCBiZSBvdmVycmlkZW4gb25seSBmb3IgcHJvZHVjdCB0eXBlcyAoc3RydWN0cykuXG4gICAqL1xuICBwcm90ZWN0ZWQgZm9yRWFjaFJvbGVTaGFyaW5nVHlwZShcbiAgICBjYjogKHQ6IENvbXBhcmFibGVUeXBlPGFueT4sIHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkLFxuICApIHtcbiAgICBBcnJheS5pc0FycmF5KGNiKTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHJlZmVyZW5jZSB0eXBlc1xuICpcbiAqIENvbnRhaW5zIHNoYXJlZCBjb2RlIHRoYXQgYXBwbGllcyB0byBib3RoIGNsYXNzIGFuZCBpbnRlcmZhY2UgdHlwZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wYXJhYmxlUmVmZXJlbmNlVHlwZTxcbiAgVCBleHRlbmRzIHJlZmxlY3QuUmVmZXJlbmNlVHlwZSxcbj4gZXh0ZW5kcyBDb21wYXJhYmxlVHlwZTxUPiB7XG4gIC8qKlxuICAgKiBDb21wYXJlIG1lbWJlcnMgb2YgdGhlIHJlZmVyZW5jZSB0eXBlc1xuICAgKi9cbiAgcHVibGljIGNvbXBhcmUoKSB7XG4gICAgdmFsaWRhdGVTdGFiaWxpdGllcyh0aGlzLm9sZFR5cGUsIHRoaXMubmV3VHlwZSwgdGhpcy5taXNtYXRjaGVzKTtcbiAgICB2YWxpZGF0ZUJhc2VUeXBlQXNzaWduYWJpbGl0eSh0aGlzLm9sZFR5cGUsIHRoaXMubmV3VHlwZSwgdGhpcy5taXNtYXRjaGVzKTtcblxuICAgIHZhbGlkYXRlU3ViY2xhc3NhYmxlTm90UmVtb3ZlZCh0aGlzLm9sZFR5cGUsIHRoaXMubmV3VHlwZSwgdGhpcy5taXNtYXRjaGVzKTtcbiAgICBpZiAodGhpcy5zdWJjbGFzc2FibGVUeXBlKSB7XG4gICAgICB2YWxpZGF0ZU5vTmV3QWJzdHJhY3RNZW1iZXJzKHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVNZXRob2RzKCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BlcnRpZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHR5cGUgYWNjZXNzZXMgKGlucHV0L291dHB1dCkgb2YgbWV0aG9kcyBhbmQgcHJvcGVydGllc1xuICAgKi9cbiAgcHVibGljIG1hcmtUeXBlUm9sZXMoKSB7XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgdGhpcy5vbGRUeXBlLm93bk1ldGhvZHMpIHtcbiAgICAgIGRldGVybWluZVR5cGVSb2xlc0Zyb21NZXRob2QodGhpcy5hc3NlbWJseUNvbXBhcmlzb24sIG1ldGhvZCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgdGhpcy5vbGRUeXBlLm93blByb3BlcnRpZXMpIHtcbiAgICAgIGRldGVybWluZVR5cGVSb2xlc0Zyb21Qcm9wZXJ0eSh0aGlzLmFzc2VtYmx5Q29tcGFyaXNvbiwgcHJvcGVydHkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0eXBlIHNpZ25hdHVyZXMgb24gYWxsIG1ldGhvZHNcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1ldGhvZHMoKSB7XG4gICAgZm9yIChjb25zdCBbb3JpZywgdXBkYXRlZF0gb2YgbWVtYmVyUGFpcnMoXG4gICAgICB0aGlzLm9sZFR5cGUsXG4gICAgICB0aGlzLm9sZFR5cGUuYWxsTWV0aG9kcyxcbiAgICAgIHRoaXMubmV3VHlwZSxcbiAgICAgIHRoaXMubWlzbWF0Y2hlcyxcbiAgICApKSB7XG4gICAgICBpZiAocmVmbGVjdC5pc01ldGhvZCh1cGRhdGVkKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlTWV0aG9kKG9yaWcsIHVwZGF0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0eXBlIHNpZ25hdHVyZSBjaGFuZ2VzIG9uIHRoZSBnaXZlbiBtZXRob2RcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1ldGhvZChvcmlnaW5hbDogcmVmbGVjdC5NZXRob2QsIHVwZGF0ZWQ6IHJlZmxlY3QuTWV0aG9kKSB7XG4gICAgdmFsaWRhdGVTdGF0aWNTYW1lKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIHZhbGlkYXRlQXN5bmNTYW1lKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViY2xhc3NhYmxlVHlwZSkge1xuICAgICAgdmFsaWRhdGVSZXR1cm5UeXBlU2FtZShcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIHVwZGF0ZWQsXG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy53aXRoTW90aXZhdGlvbigndHlwZSBpcyBAc3ViY2xhc3NhYmxlJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZVJldHVyblR5cGVOb3RXZWFrZW5lZChvcmlnaW5hbCwgdXBkYXRlZCwgdGhpcy5taXNtYXRjaGVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlQ2FsbGFibGUob3JpZ2luYWwsIHVwZGF0ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHR5cGUgc2lnbmF0dXJlIGNoYW5nZXMgb24gdGhlIGdpdmVuIGNhbGxhYmxlIChtZXRob2Qgb3IgaW5pdGlhbGl6ZXIpXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVDYWxsYWJsZTxUIGV4dGVuZHMgcmVmbGVjdC5NZXRob2QgfCByZWZsZWN0LkluaXRpYWxpemVyPihcbiAgICBvcmlnaW5hbDogVCxcbiAgICB1cGRhdGVkOiBULFxuICApIHtcbiAgICB2YWxpZGF0ZVN0YWJpbGl0aWVzKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIHZhbGlkYXRlTm90TWFkZU5vblZhcmlhZGljKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuXG4gICAgLy8gQ2hlY2sgdGhhdCBldmVyeSBvcmlnaW5hbCBwYXJhbWV0ZXIgY2FuIHN0aWxsIGJlIG1hcHBlZCB0byBhIHBhcmFtZXRlciBpbiB0aGUgdXBkYXRlZCBtZXRob2RcbiAgICB2YWxpZGF0ZUV4aXN0aW5nUGFyYW1zKFxuICAgICAgb3JpZ2luYWwsXG4gICAgICB1cGRhdGVkLFxuICAgICAgdGhpcy5taXNtYXRjaGVzLFxuICAgICAgKG9sZFBhcmFtLCBuZXdQYXJhbSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdWJjbGFzc2FibGVUeXBlKSB7XG4gICAgICAgICAgdmFsaWRhdGVQYXJhbWV0ZXJUeXBlU2FtZShcbiAgICAgICAgICAgIG9yaWdpbmFsLFxuICAgICAgICAgICAgb2xkUGFyYW0sXG4gICAgICAgICAgICBuZXdQYXJhbSxcbiAgICAgICAgICAgIHRoaXMubWlzbWF0Y2hlcy53aXRoTW90aXZhdGlvbigndHlwZSBpcyBAc3ViY2xhc3NhYmxlJyksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlclR5cGVXZWFrZW5lZChcbiAgICAgICAgICAgIG9yaWdpbmFsLFxuICAgICAgICAgICAgb2xkUGFyYW0sXG4gICAgICAgICAgICBuZXdQYXJhbSxcbiAgICAgICAgICAgIHRoaXMubWlzbWF0Y2hlcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB2YWxpZGF0ZU5vTmV3UmVxdWlyZWRQYXJhbXMob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdHlwZSBzaWduYXR1cmUgY2hhbmdlcyBvbiBhbGwgcHJvcGVydGllc1xuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUHJvcGVydGllcygpIHtcbiAgICBmb3IgKGNvbnN0IFtvcmlnLCB1cGRhdGVkXSBvZiBtZW1iZXJQYWlycyhcbiAgICAgIHRoaXMub2xkVHlwZSxcbiAgICAgIHRoaXMub2xkVHlwZS5hbGxQcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5uZXdUeXBlLFxuICAgICAgdGhpcy5taXNtYXRjaGVzLFxuICAgICkpIHtcbiAgICAgIGlmIChyZWZsZWN0LmlzUHJvcGVydHkodXBkYXRlZCkpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVByb3BlcnR5KG9yaWcsIHVwZGF0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0eXBlIHNpZ25hdHVyZSBjaGFuZ2VzIG9uIHRoZSBnaXZlbiBwcm9wZXJ0eVxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUHJvcGVydHkoXG4gICAgb3JpZ2luYWw6IHJlZmxlY3QuUHJvcGVydHksXG4gICAgdXBkYXRlZDogcmVmbGVjdC5Qcm9wZXJ0eSxcbiAgKSB7XG4gICAgdmFsaWRhdGVTdGFiaWxpdGllcyhvcmlnaW5hbCwgdXBkYXRlZCwgdGhpcy5taXNtYXRjaGVzKTtcbiAgICB2YWxpZGF0ZVN0YXRpY1NhbWUob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgdmFsaWRhdGVOb3RNYWRlSW1tdXRhYmxlKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuXG4gICAgaWYgKHRoaXMuc3ViY2xhc3NhYmxlVHlwZSkge1xuICAgICAgLy8gSGVsbG8gQyMgbXkgb2xkIGZyaWVuZFxuICAgICAgdmFsaWRhdGVQcm9wZXJ0eVR5cGVTYW1lKFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgdXBkYXRlZCxcbiAgICAgICAgdGhpcy5taXNtYXRjaGVzLndpdGhNb3RpdmF0aW9uKCd0eXBlIGlzIEBzdWJjbGFzc2FibGUnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghb3JpZ2luYWwuaW1tdXRhYmxlKSB7XG4gICAgICAvLyBJZiB0aGUgdHlwZSBjYW4gYmUgcmVhZCwgaXQgY2FuJ3QgYmUgd2Vha2VuZWQgKGNhbid0IGNoYW5nZSBEb2cgdG8gQW5pbWFsLCBjb25zdW1lcnMgbWlnaHQgYmUgY291bnRpbmcgb24gYSBEb2cpLlxuICAgICAgLy8gSWYgdGhlIHR5cGUgY2FuIGJlIHdyaXR0ZW4sIGl0IGNhbid0IGJlIHN0cmVuZ3RoZW5lZCAoY2FuJ3QgY2hhbmdlIEFuaW1hbCB0byBEb2csIGNvbnN1bWVycyBtaWdodCBiZSBzZW5kaW5nIGEgQ2F0KS5cbiAgICAgIC8vID0+IGl0IG11c3QgcmVtYWluIHRoZSBzYW1lXG4gICAgICB2YWxpZGF0ZVByb3BlcnR5VHlwZVNhbWUoXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICB1cGRhdGVkLFxuICAgICAgICB0aGlzLm1pc21hdGNoZXMud2l0aE1vdGl2YXRpb24oJ211dGFibGUgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0eXBlJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZVByb3BlcnR5VHlwZU5vdFdlYWtlbmVkKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjdXJyZW50IHJlZmVyZW5jZSB0eXBlIGhhcyBiZWVuIG1hcmtlZCBhcyBzdWJjbGFzc2FibGVcbiAgICovXG4gIHByaXZhdGUgZ2V0IHN1YmNsYXNzYWJsZVR5cGUoKSB7XG4gICAgcmV0dXJuIHN1YmNsYXNzYWJsZVR5cGUodGhpcy5vbGRUeXBlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFyYWJsZUNsYXNzVHlwZSBleHRlbmRzIENvbXBhcmFibGVSZWZlcmVuY2VUeXBlPHJlZmxlY3QuQ2xhc3NUeXBlPiB7XG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSByZWZlcmVuY2UgdHlwZSBjb21wYXJpc29uIGFuZCBpbmNsdWRlIGNsYXNzLXNwZWNpZmljIGNoZWNrc1xuICAgKi9cbiAgcHVibGljIGNvbXBhcmUoKSB7XG4gICAgc3VwZXIuY29tcGFyZSgpO1xuXG4gICAgdmFsaWRhdGVOb3RNYWRlQWJzdHJhY3QodGhpcy5vbGRUeXBlLCB0aGlzLm5ld1R5cGUsIHRoaXMubWlzbWF0Y2hlcyk7XG5cbiAgICAvLyBKU0lJIGFzc2VtYmxlciBoYXMgYWxyZWFkeSB0YWtlbiBjYXJlIG9mIGluaGVyaXRhbmNlIGhlcmVcbiAgICBpZiAodGhpcy5vbGRUeXBlLmluaXRpYWxpemVyICYmIHRoaXMubmV3VHlwZS5pbml0aWFsaXplcikge1xuICAgICAgdmFsaWRhdGVNZXRob2RDb21wYXRpYmxlKFxuICAgICAgICB0aGlzLm9sZFR5cGUuaW5pdGlhbGl6ZXIsXG4gICAgICAgIHRoaXMubmV3VHlwZS5pbml0aWFsaXplcixcbiAgICAgICAgdGhpcy5taXNtYXRjaGVzLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHlwZSByb2xlIG1hcmtpbmcgLS0gaW5jbHVkZSB0aGUgaW5pdGlhbGl6ZXJcbiAgICovXG4gIHB1YmxpYyBtYXJrVHlwZVJvbGVzKCkge1xuICAgIGlmICh0aGlzLm9sZFR5cGUuaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGRldGVybWluZVR5cGVSb2xlc0Zyb21NZXRob2QoXG4gICAgICAgIHRoaXMuYXNzZW1ibHlDb21wYXJpc29uLFxuICAgICAgICB0aGlzLm9sZFR5cGUuaW5pdGlhbGl6ZXIsXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlci5tYXJrVHlwZVJvbGVzKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdHlwZSBjb21wYXJpc29uXG4gKlxuICogKEFjdHVhbGx5IGp1c3QgcGxhaW4gcmVmZXJlbmNlIHR5cGUgY29tcGFyaXNvbilcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBhcmFibGVJbnRlcmZhY2VUeXBlIGV4dGVuZHMgQ29tcGFyYWJsZVJlZmVyZW5jZVR5cGU8cmVmbGVjdC5JbnRlcmZhY2VUeXBlPiB7fVxuXG4vKipcbiAqIFN0cnVjdCB0eXBlIGNvbXBhcmlzb25cbiAqXG4gKiBNb3N0IG5vdGFibHk6IGRvZXMgbm8tc3RyZW5ndGhlbmluZy9uby13ZWFrZW5pbmcgY2hlY2tzIGJhc2VkIG9uIHdoZXRoZXJcbiAqIHN0cnVjdHMgYXBwZWFyIGluIGlucHV0L291dHB1dCBwb3NpdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wYXJhYmxlU3RydWN0VHlwZSBleHRlbmRzIENvbXBhcmFibGVUeXBlPHJlZmxlY3QuSW50ZXJmYWNlVHlwZT4ge1xuICBwdWJsaWMgY29tcGFyZSgpIHtcbiAgICB2YWxpZGF0ZVN0YWJpbGl0aWVzKHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIHZhbGlkYXRlQmFzZVR5cGVBc3NpZ25hYmlsaXR5KHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIHRoaXMudmFsaWRhdGVOb1Byb3BlcnRpZXNSZW1vdmVkKCk7XG5cbiAgICBpZiAodGhpcy5pbnB1dFR5cGUpIHtcbiAgICAgIC8vIElmIHRoZSBzdHJ1Y3QgaXMgd3JpdHRlbiwgaXQgY2FuJ3QgYmUgc3RyZW5ndGhlbmVkIChleDogY2FuJ3QgY2hhbmdlIGFuIG9wdGlvbmFsIHByb3BlcnR5IHRvIHJlcXVpcmVkKVxuICAgICAgdGhpcy52YWxpZGF0ZU5vdFN0cmVuZ3RoZW5lZChcbiAgICAgICAgdGhpcy5taXNtYXRjaGVzLndpdGhNb3RpdmF0aW9uKHRoaXMuaW5wdXRUeXBlUmVhc29uKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3V0cHV0VHlwZSkge1xuICAgICAgLy8gSWYgdGhlIHN0cnVjdCBpcyByZWFkLCBpdCBjYW4ndCBiZSB3ZWFrZW5lZCAoZXg6IGNhbid0IGNoYW5nZSBhIHJlcXVpcmVkIHByb3BlcnR5IHRvIG9wdGlvbmFsKVxuICAgICAgdGhpcy52YWxpZGF0ZU5vdFdlYWtlbmVkKFxuICAgICAgICB0aGlzLm1pc21hdGNoZXMud2l0aE1vdGl2YXRpb24odGhpcy5vdXRwdXRUeXBlUmVhc29uKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IHR5cGUgb2YgZXZlcnkgcHJvcGVydHkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaW4vb3V0IGNsYXNzaWZpY2F0aW9uIGFzIHRoZSBvdXRlciB0eXBlXG4gICAqL1xuICBwcm90ZWN0ZWQgZm9yRWFjaFJvbGVTaGFyaW5nVHlwZShcbiAgICBjYjogKHQ6IENvbXBhcmFibGVUeXBlPGFueT4sIHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkLFxuICApIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5vbGRUeXBlLmFsbFByb3BlcnRpZXMpIHtcbiAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLmFzc2VtYmx5Q29tcGFyaXNvbi50eXBlc0luKHByb3AudHlwZSkpIHtcbiAgICAgICAgY2IodCwgYHR5cGUgb2YgcHJvcGVydHkgJHtwcm9wLm5hbWV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgYWxsIHByb3BlcnRpZXMgYXJlIHN0aWxsIHByZXNlbnRcbiAgICpcbiAgICogVGhpcyBpcyBiZWNhdXNlIGZvciBhbGwgbm9uLXN0cnVjdHVyYWxseSB0eXBlZCBsYW5ndWFnZXMgaXQgaXMgbm90IGFsbG93ZWRcbiAgICogdG8gc3BlY2lmeSBtZW1iZXJzIHdoaWNoIGFyZW4ndCBhY3R1YWxseSBwcmVzZW50IGluIHRoZSB0eXBlLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vUHJvcGVydGllc1JlbW92ZWQoKSB7XG4gICAgLy8gQSBzaW5nbGUgcnVuIG9mIG1lbWJlclBhaXJzKCkgd2l0aCBub3RoaW5nIGVsc2Ugd2lsbCBkbyB0aGlzIGNoZWNrLlxuICAgIEFycmF5LmZyb20oXG4gICAgICBtZW1iZXJQYWlycyhcbiAgICAgICAgdGhpcy5vbGRUeXBlLFxuICAgICAgICB0aGlzLm9sZFR5cGUuYWxsUHJvcGVydGllcyxcbiAgICAgICAgdGhpcy5uZXdUeXBlLFxuICAgICAgICB0aGlzLm1pc21hdGNoZXMsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0eXBlIGlzIG5vdCB3ZWFrZW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vdFdlYWtlbmVkKG1pc21hdGNoZXM6IElSZXBvcnQpIHtcbiAgICBjb25zdCBhbmEgPSB0aGlzLmlzU3RydWN0dXJhbFN1cGVyVHlwZSh0aGlzLm9sZFR5cGUsIHRoaXMubmV3VHlwZSk7XG4gICAgaWYgKCFhbmEuc3VjY2Vzcykge1xuICAgICAgbWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICBydWxlS2V5OiAnd2Vha2VuZWQnLFxuICAgICAgICB2aW9sYXRvcjogdGhpcy5vbGRUeXBlLFxuICAgICAgICBtZXNzYWdlOiBhbmEucmVhc29ucy5qb2luKCcsICcpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdHlwZSBpcyBub3Qgc3RyZW5ndGhlbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm90U3RyZW5ndGhlbmVkKG1pc21hdGNoZXM6IElSZXBvcnQpIHtcbiAgICBjb25zdCBhbmEgPSB0aGlzLmlzU3RydWN0dXJhbFN1cGVyVHlwZSh0aGlzLm5ld1R5cGUsIHRoaXMub2xkVHlwZSk7XG4gICAgaWYgKCFhbmEuc3VjY2Vzcykge1xuICAgICAgbWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICBydWxlS2V5OiAnc3RyZW5ndGhlbmVkJyxcbiAgICAgICAgdmlvbGF0b3I6IHRoaXMub2xkVHlwZSxcbiAgICAgICAgbWVzc2FnZTogYW5hLnJlYXNvbnMuam9pbignLCAnKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNTdHJ1Y3R1cmFsU3VwZXJUeXBlKFxuICAgIGE6IHJlZmxlY3QuSW50ZXJmYWNlVHlwZSxcbiAgICBiOiByZWZsZWN0LkludGVyZmFjZVR5cGUsXG4gICk6IEFuYWx5c2lzIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGlzU3RydWN0dXJhbFN1cGVyVHlwZShhLCBiLCB0aGlzLm5ld1R5cGUuc3lzdGVtKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBXZSBtaWdodCBnZXQgYW4gZXhjZXB0aW9uIGlmIHRoZSB0eXBlIGlzIHN1cHBvc2VkIHRvIGNvbWUgZnJvbSBhIGRpZmZlcmVudFxuICAgICAgLy8gYXNzZW1ibHkgYW5kIHRoZSBsb29rdXAgZmFpbHMuXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgcmVhc29uczogW2UubWVzc2FnZV0gfTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wYXJpc29uIGZvciBlbnVtc1xuICovXG5leHBvcnQgY2xhc3MgQ29tcGFyYWJsZUVudW1UeXBlIGV4dGVuZHMgQ29tcGFyYWJsZVR5cGU8cmVmbGVjdC5FbnVtVHlwZT4ge1xuICAvKipcbiAgICogUGVyZm9ybSBjb21wYXJpc29ucyBvbiBlbnVtIG1lbWJlcnNcbiAgICovXG4gIHB1YmxpYyBjb21wYXJlKCkge1xuICAgIHZhbGlkYXRlU3RhYmlsaXRpZXModGhpcy5vbGRUeXBlLCB0aGlzLm5ld1R5cGUsIHRoaXMubWlzbWF0Y2hlcyk7XG5cbiAgICB2YWxpZGF0ZUV4aXN0aW5nTWVtYmVycyhcbiAgICAgIHRoaXMub2xkVHlwZSxcbiAgICAgIHRoaXMubmV3VHlwZSxcbiAgICAgIHRoaXMubWlzbWF0Y2hlcyxcbiAgICAgIChvbGRNZW1iZXIsIG5ld01lbWJlcikgPT4ge1xuICAgICAgICB2YWxpZGF0ZVN0YWJpbGl0aWVzKG9sZE1lbWJlciwgbmV3TWVtYmVyLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpbnB1dC9vdXRwdXQgcm9sZXMgb2YgdHlwZXMgdXNlZCBpbiB0aGlzIG1ldGhvZFxuICpcbiAqIC0gQXJndW1lbnQgdHlwZXMgYXJlIHRyZWF0ZWQgYXMgSU4gdHlwZXNcbiAqIC0gUmV0dXJuIHR5cGUgaXMgdHJlYXRlZCBhcyBPVVQgdHlwZVxuICovXG5mdW5jdGlvbiBkZXRlcm1pbmVUeXBlUm9sZXNGcm9tTWV0aG9kKFxuICBjb21wYXJpc29uOiBBc3NlbWJseUNvbXBhcmlzb24sXG4gIG1ldGhvZDogcmVmbGVjdC5NZXRob2QgfCByZWZsZWN0LkluaXRpYWxpemVyLFxuKSB7XG4gIGlmIChyZWZsZWN0LmlzTWV0aG9kKG1ldGhvZCkpIHtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tcGFyaXNvbi50eXBlc0luKG1ldGhvZC5yZXR1cm5zLnR5cGUpKSB7XG4gICAgICB0Lm1hcmtBc091dHB1dFR5cGUoYHJldHVybmVkIGZyb20gJHthcGlFbGVtZW50SWRlbnRpZmllcihtZXRob2QpfWApO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgcGFyYW0gb2YgbWV0aG9kLnBhcmFtZXRlcnMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tcGFyaXNvbi50eXBlc0luKHBhcmFtLnR5cGUpKSB7XG4gICAgICB0Lm1hcmtBc0lucHV0VHlwZShgaW5wdXQgdG8gJHthcGlFbGVtZW50SWRlbnRpZmllcihtZXRob2QpfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgaW5wdXQvb3V0cHV0IHJvbGVzIG9mIHR5cGVzIHVzZWQgaW4gdGhpcyBwcm9wZXJ0eVxuICpcbiAqIC0gUHJvcGVydHkgdHlwZSBpcyB0cmVhdGVkIGFzIE9VVCB0eXBlXG4gKiAtIElmIG11dGFibGUsIHByb3BlcnR5IHR5cGUgaXMgYWxzbyB0cmVhdGVkIGFzIElOIHR5cGVcbiAqXG4gKiBJbiBlZmZlY3QsIGEgcHJvcGVydHkgaXMgdHJlYXRlZCBhcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gKlxuICogLSBwcm9wZXJ0eSgpOiBUO1xuICogLSBzZXRQcm9wZXJ0eSg6IFQpOyAgPC0gb25seSBpZiBtdXRhYmxlXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZVR5cGVSb2xlc0Zyb21Qcm9wZXJ0eShcbiAgY29tcGFyaXNvbjogQXNzZW1ibHlDb21wYXJpc29uLFxuICBwcm9wZXJ0eTogcmVmbGVjdC5Qcm9wZXJ0eSxcbikge1xuICBmb3IgKGNvbnN0IHQgb2YgY29tcGFyaXNvbi50eXBlc0luKHByb3BlcnR5LnR5cGUpKSB7XG4gICAgdC5tYXJrQXNPdXRwdXRUeXBlKGB0eXBlIG9mICR7YXBpRWxlbWVudElkZW50aWZpZXIocHJvcGVydHkpfWApO1xuICB9XG4gIGlmICghcHJvcGVydHkuaW1tdXRhYmxlKSB7XG4gICAgZm9yIChjb25zdCB0IG9mIGNvbXBhcmlzb24udHlwZXNJbihwcm9wZXJ0eS50eXBlKSkge1xuICAgICAgdC5tYXJrQXNJbnB1dFR5cGUoYHR5cGUgb2YgbXV0YWJsZSAke2FwaUVsZW1lbnRJZGVudGlmaWVyKHByb3BlcnR5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIHRoZSBGUU5zIGZyb20gYSB0eXBlIHJlZmVyZW5jZVxuICpcbiAqIEluIHRoZSBzaW1wbGUgY2FzZSwgYSBzaW1wbGUgRlFOLCBidXQgdGhlIHR5cGUgbWlnaHRcbiAqIGJlIGEgdW5pb24gb3IgY29tcGxleCB0eXBlIGFzIHdlbGwuXG4gKi9cbmZ1bmN0aW9uIGZxbnNGcm9tKHJlZjogcmVmbGVjdC5UeXBlUmVmZXJlbmNlKSB7XG4gIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHJlY3Vyc2UocmVmKTtcbiAgcmV0dXJuIHJldDtcblxuICBmdW5jdGlvbiByZWN1cnNlKHR5cGU6IHJlZmxlY3QuVHlwZVJlZmVyZW5jZSkge1xuICAgIGlmICh0eXBlLm1hcE9mVHlwZSkge1xuICAgICAgcmVjdXJzZSh0eXBlLm1hcE9mVHlwZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmFycmF5T2ZUeXBlKSB7XG4gICAgICByZWN1cnNlKHR5cGUuYXJyYXlPZlR5cGUpO1xuICAgIH0gZWxzZSBpZiAodHlwZS51bmlvbk9mVHlwZXMpIHtcbiAgICAgIHR5cGUudW5pb25PZlR5cGVzLmZvckVhY2gocmVjdXJzZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlLmZxbikge1xuICAgICAgcmV0LnB1c2godHlwZS5mcW4pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZVJlYXNvbnMocmVhc29uczogc3RyaW5nW10pIHtcbiAgaWYgKHJlYXNvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGlmIChyZWFzb25zLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiByZWFzb25zWzBdO1xuICB9XG4gIHJldHVybiBgJHtyZWFzb25zWzBdfSAoLi4uYW5kICR7cmVhc29ucy5sZW5ndGggLSAxfSBtb3JlLi4uKWA7XG59XG4iXX0=
508
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1jb21wYXJpc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHlwZS1jb21wYXJpc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF1QztBQUN2Qyx3Q0FBd0M7QUFDeEMsaUNBQWlDO0FBRWpDLDJDQUFrRDtBQUNsRCxtREFBa0U7QUFDbEUsbUNBT2lCO0FBQ2pCLGlDQUEwQztBQUMxQywrQ0FxQnVCO0FBRXZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILE1BQWEsa0JBQWtCO0lBSTdCLFlBQW1DLE9BQTBCO1FBQTFCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBRjVDLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBK0IsQ0FBQztRQUc5RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQVUsQ0FBQztZQUMvQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsbUJBQW1CO2dCQUMzQyxDQUFDLENBQUMsZ0JBQVMsQ0FBQyxZQUFZO2dCQUN4QixDQUFDLENBQUMsZ0JBQVMsQ0FBQyxNQUFNO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSSxDQUFDLFFBQTBCLEVBQUUsT0FBeUI7UUFDL0Qsc0NBQXNDO1FBQ3RDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDakYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUN2RjtRQUVELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFD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QUFXLEVBQUU7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMzQjthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBaUI7SUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuQjtJQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUNoRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhYmlsaXR5IH0gZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgKiBhcyByZWZsZWN0IGZyb20gJ2pzaWktcmVmbGVjdCc7XG5pbXBvcnQgKiBhcyBsb2c0anMgZnJvbSAnbG9nNGpzJztcblxuaW1wb3J0IHsgdmFsaWRhdGVTdGFiaWxpdGllcyB9IGZyb20gJy4vc3RhYmlsaXR5JztcbmltcG9ydCB7IGlzU3RydWN0dXJhbFN1cGVyVHlwZSwgQW5hbHlzaXMgfSBmcm9tICcuL3R5cGUtYW5hbHlzaXMnO1xuaW1wb3J0IHtcbiAgZGVzY3JpYmVJbnRlcmZhY2VUeXBlLFxuICBkZXNjcmliZVR5cGUsXG4gIENvbXBhcmlzb25PcHRpb25zLFxuICBNaXNtYXRjaGVzLFxuICBhcGlFbGVtZW50SWRlbnRpZmllcixcbiAgSVJlcG9ydCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBSZWN1cnNpb25CcmVha2VyIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7XG4gIHZhbGlkYXRlQmFzZVR5cGVBc3NpZ25hYmlsaXR5LFxuICB2YWxpZGF0ZU5vdE1hZGVBYnN0cmFjdCxcbiAgdmFsaWRhdGVTdWJjbGFzc2FibGVOb3RSZW1vdmVkLFxuICB2YWxpZGF0ZU5vTmV3QWJzdHJhY3RNZW1iZXJzLFxuICBzdWJjbGFzc2FibGVUeXBlLFxuICB2YWxpZGF0ZU1ldGhvZENvbXBhdGlibGUsXG4gIG1lbWJlclBhaXJzLFxuICB2YWxpZGF0ZVN0YXRpY1NhbWUsXG4gIHZhbGlkYXRlQXN5bmNTYW1lLFxuICB2YWxpZGF0ZVJldHVyblR5cGVOb3RXZWFrZW5lZCxcbiAgdmFsaWRhdGVOb3RNYWRlTm9uVmFyaWFkaWMsXG4gIHZhbGlkYXRlUmV0dXJuVHlwZVNhbWUsXG4gIHZhbGlkYXRlRXhpc3RpbmdQYXJhbXMsXG4gIHZhbGlkYXRlTm9OZXdSZXF1aXJlZFBhcmFtcyxcbiAgdmFsaWRhdGVQYXJhbWV0ZXJUeXBlV2Vha2VuZWQsXG4gIHZhbGlkYXRlUGFyYW1ldGVyVHlwZVNhbWUsXG4gIHZhbGlkYXRlTm90TWFkZUltbXV0YWJsZSxcbiAgdmFsaWRhdGVQcm9wZXJ0eVR5cGVOb3RXZWFrZW5lZCxcbiAgdmFsaWRhdGVQcm9wZXJ0eVR5cGVTYW1lLFxuICB2YWxpZGF0ZUV4aXN0aW5nTWVtYmVycyxcbn0gZnJvbSAnLi92YWxpZGF0aW9ucyc7XG5cbmNvbnN0IExPRyA9IGxvZzRqcy5nZXRMb2dnZXIoJ2pzaWktZGlmZicpO1xuXG4vKipcbiAqIFJvb3Qgb2JqZWN0IGZvciBjb21wYXJpbmcgdHdvIGFzc2VtYmxpZXNcbiAqXG4gKiBUcmFja3MgbWlzbWF0Y2hlcyBhbmQgdXNlZCBhcyBhIGxvb2t1cCB0YWJsZSB0byBjb252ZXJ0IEZRTnMgLT4gQ29tcGFyYWJsZVR5cGUgb2JqZWN0c1xuICovXG5leHBvcnQgY2xhc3MgQXNzZW1ibHlDb21wYXJpc29uIHtcbiAgcHVibGljIHJlYWRvbmx5IG1pc21hdGNoZXM6IE1pc21hdGNoZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZXMgPSBuZXcgTWFwPHN0cmluZywgQ29tcGFyYWJsZVR5cGU8YW55Pj4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IENvbXBhcmlzb25PcHRpb25zKSB7XG4gICAgdGhpcy5taXNtYXRjaGVzID0gbmV3IE1pc21hdGNoZXMoe1xuICAgICAgZGVmYXVsdFN0YWJpbGl0eTogb3B0aW9ucy5kZWZhdWx0RXhwZXJpbWVudGFsXG4gICAgICAgID8gU3RhYmlsaXR5LkV4cGVyaW1lbnRhbFxuICAgICAgICA6IFN0YWJpbGl0eS5TdGFibGUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0aGUgdHlwZXMgZnJvbSB0d28gYXNzZW1ibGllcyB0byBjb21wYXJlXG4gICAqXG4gICAqIEFkZHMgYXBwcm9wcmlhdGUgQ29tcGFyYWJsZVR5cGU8PiBpbnN0YW5jZXMuXG4gICAqL1xuICBwdWJsaWMgbG9hZChvcmlnaW5hbDogcmVmbGVjdC5Bc3NlbWJseSwgdXBkYXRlZDogcmVmbGVjdC5Bc3NlbWJseSkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHByZXR0aWVyL3ByZXR0aWVyICovXG4gICAgZm9yIChjb25zdCBbb3JpZ0NsYXNzLCB1cGRhdGVkQ2xhc3NdIG9mIHRoaXMudHlwZVBhaXJzKG9yaWdpbmFsLmNsYXNzZXMsIHVwZGF0ZWQpKSB7XG4gICAgICB0aGlzLnR5cGVzLnNldChvcmlnQ2xhc3MuZnFuLCBuZXcgQ29tcGFyYWJsZUNsYXNzVHlwZSh0aGlzLCBvcmlnQ2xhc3MsIHVwZGF0ZWRDbGFzcykpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW29yaWdJZmFjZSwgdXBkYXRlZElmYWNlXSBvZiB0aGlzLnR5cGVQYWlycyhvcmlnaW5hbC5pbnRlcmZhY2VzLCB1cGRhdGVkKSkge1xuICAgICAgaWYgKG9yaWdJZmFjZS5kYXRhdHlwZSAhPT0gdXBkYXRlZElmYWNlLmRhdGF0eXBlKSB7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICAgIHJ1bGVLZXk6ICdpZmFjZS10eXBlJyxcbiAgICAgICAgICB2aW9sYXRvcjogb3JpZ0lmYWNlLFxuICAgICAgICAgIG1lc3NhZ2U6IGB1c2VkIHRvIGJlIGEgJHtkZXNjcmliZUludGVyZmFjZVR5cGUoXG4gICAgICAgICAgICBvcmlnSWZhY2UuZGF0YXR5cGUsXG4gICAgICAgICAgKX0sIGlzIG5vdyBhICR7ZGVzY3JpYmVJbnRlcmZhY2VUeXBlKHVwZGF0ZWRJZmFjZS5kYXRhdHlwZSl9LmAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50eXBlcy5zZXQob3JpZ0lmYWNlLmZxbiwgb3JpZ0lmYWNlLmRhdGF0eXBlXG4gICAgICAgID8gbmV3IENvbXBhcmFibGVTdHJ1Y3RUeXBlKHRoaXMsIG9yaWdJZmFjZSwgdXBkYXRlZElmYWNlKVxuICAgICAgICA6IG5ldyBDb21wYXJhYmxlSW50ZXJmYWNlVHlwZSh0aGlzLCBvcmlnSWZhY2UsIHVwZGF0ZWRJZmFjZSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW29yaWdFbnVtLCB1cGRhdGVkRW51bV0gb2YgdGhpcy50eXBlUGFpcnMob3JpZ2luYWwuZW51bXMsIHVwZGF0ZWQpKSB7XG4gICAgICB0aGlzLnR5cGVzLnNldChvcmlnRW51bS5mcW4sIG5ldyBDb21wYXJhYmxlRW51bVR5cGUodGhpcywgb3JpZ0VudW0sIHVwZGF0ZWRFbnVtKSk7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgcHJldHRpZXIvcHJldHRpZXIgKi9cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBjb21wYXJpc29uIGZvciBhbGwgbG9hZGVkIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgY29tcGFyZSgpIHtcbiAgICB0aGlzLmNvbXBhcmFibGVUeXBlcy5mb3JFYWNoKCh0KSA9PiB0Lm1hcmtUeXBlUm9sZXMoKSk7XG4gICAgdGhpcy5jb21wYXJhYmxlVHlwZXMuZm9yRWFjaCgodCkgPT4gdC5jb21wYXJlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhc2VkIG9uIGEgSlNJSSBUeXBlUmVmZXJlbmNlLCByZXR1cm4gYWxsIHJlYWNoYWJsZSBDb21wYXJhYmxlVHlwZTw+IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgdHlwZXNJbihyZWY6IHJlZmxlY3QuVHlwZVJlZmVyZW5jZSk6IEFycmF5PENvbXBhcmFibGVUeXBlPGFueT4+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8Q29tcGFyYWJsZVR5cGU8YW55Pj4oKTtcblxuICAgIGZvciAoY29uc3QgZnFuIG9mIGZxbnNGcm9tKHJlZikpIHtcbiAgICAgIGNvbnN0IHQgPSB0aGlzLnR5cGVzLmdldChmcW4pO1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgcmV0LnB1c2godCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIENvbXBhcmFibGVUeXBlPD5zXG4gICAqL1xuICBwcml2YXRlIGdldCBjb21wYXJhYmxlVHlwZXMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50eXBlcy52YWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB0aGUgbWF0Y2hpbmcgdHlwZSBpbiB0aGUgdXBkYXRlZCBhc3NlbWJseSBiYXNlZCBvbiBhbGwgdHlwZXMgaW4gdGhlIG9yaWdpbmFsIGFzc2VtYmx5XG4gICAqL1xuICBwcml2YXRlICp0eXBlUGFpcnM8VCBleHRlbmRzIHJlZmxlY3QuVHlwZT4oXG4gICAgeHM6IHJlYWRvbmx5IFRbXSxcbiAgICB1cGRhdGVkQXNzZW1ibHk6IHJlZmxlY3QuQXNzZW1ibHksXG4gICk6IEl0ZXJhYmxlSXRlcmF0b3I8W1QsIFRdPiB7XG4gICAgZm9yIChjb25zdCBvcmlnVHlwZSBvZiB4cykge1xuICAgICAgTE9HLnRyYWNlKG9yaWdUeXBlLmZxbik7XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRUeXBlID0gdXBkYXRlZEFzc2VtYmx5LnRyeUZpbmRUeXBlKG9yaWdUeXBlLmZxbik7XG4gICAgICBpZiAoIXVwZGF0ZWRUeXBlKSB7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICAgIHJ1bGVLZXk6ICdyZW1vdmVkJyxcbiAgICAgICAgICB2aW9sYXRvcjogb3JpZ1R5cGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2hhcyBiZWVuIHJlbW92ZWQnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXNjcmliZVR5cGUob3JpZ1R5cGUpICE9PSBkZXNjcmliZVR5cGUodXBkYXRlZFR5cGUpKSB7XG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy5yZXBvcnQoe1xuICAgICAgICAgIHJ1bGVLZXk6ICdzdHJ1Y3QtY2hhbmdlJyxcbiAgICAgICAgICB2aW9sYXRvcjogb3JpZ1R5cGUsXG4gICAgICAgICAgbWVzc2FnZTogYGhhcyBiZWVuIHR1cm5lZCBpbnRvIGEgJHtkZXNjcmliZVR5cGUodXBkYXRlZFR5cGUpfWAsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgeWllbGQgW29yaWdUeXBlLCB1cGRhdGVkVHlwZSBhcyBUXTsgLy8gVHJ1c3QgbWUgSSBrbm93IHdoYXQgSSdtIGRvaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgY29tcGFyYWJsZSB0eXBlc1xuICpcbiAqIE1hbmFnZXMgbm90aW9ucyBvZiBjcmF3bGluZyB0eXBlcyBmb3Igb3RoZXIgcmVmZXJlbmNlIHR5cGVzLCBhbmQgd2hldGhlclxuICogdGhleSBvY2N1ciBpbiBhbiBpbnB1dC9vdXRwdXQgcm9sZSwgYW5kIG1hcmtpbmcgYXMgc3VjaCBvbiB0aGUgY29tcGFyaXNvblxuICogb2JqZWN0LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcGFyYWJsZVR5cGU8VD4ge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSByZWN1cnNpb25CcmVha2VyID0gbmV3IFJlY3Vyc2lvbkJyZWFrZXIoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dFR5cGVSZWFzb25zID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0cHV0VHlwZVJlYXNvbnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXNzZW1ibHlDb21wYXJpc29uOiBBc3NlbWJseUNvbXBhcmlzb24sXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9sZFR5cGU6IFQsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5ld1R5cGU6IFQsXG4gICkge31cblxuICAvKipcbiAgICogRG9lcyB0aGlzIHR5cGUgb2NjdXIgaW4gYW4gaW5wdXQgcm9sZT9cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnB1dFR5cGVSZWFzb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogRG9lcyB0aGlzIHR5cGUgb2NjdXIgaW4gYW4gb3V0cHV0IHJvbGU/XG4gICAqL1xuICBwdWJsaWMgZ2V0IG91dHB1dFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dFR5cGVSZWFzb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogTWFyayB0aGlzIHR5cGUgYXMgb2NjdXJyaW5nIGluIGFuIGlucHV0IHJ1bGUuXG4gICAqXG4gICAqIEFsbCB0eXBlcyByZWFjaGFibGUgZnJvbSB0aGlzIHR5cGUgd2lsbCBiZSBtYXJrZWQgYXMgaW5wdXQgdHlwZXMgYXMgd2VsbC5cbiAgICovXG4gIHB1YmxpYyBtYXJrQXNJbnB1dFR5cGUoLi4ucmVhc29uRnJhZ21lbnRzOiBzdHJpbmdbXSkge1xuICAgIENvbXBhcmFibGVUeXBlLnJlY3Vyc2lvbkJyZWFrZXIuZG8odGhpcywgKCkgPT4ge1xuICAgICAgdGhpcy5faW5wdXRUeXBlUmVhc29ucy5wdXNoKHJlYXNvbkZyYWdtZW50cy5qb2luKCcsICcpKTtcbiAgICAgIHRoaXMuZm9yRWFjaFJvbGVTaGFyaW5nVHlwZSgodHlwZSwgcmVhc29uKSA9PiB7XG4gICAgICAgIHR5cGUubWFya0FzSW5wdXRUeXBlKHJlYXNvbiwgLi4ucmVhc29uRnJhZ21lbnRzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhpcyB0eXBlIGFzIG9jY3VycmluZyBpbiBhbiBpbnB1dCBydWxlLlxuICAgKlxuICAgKiBBbGwgdHlwZXMgcmVhY2hhYmxlIGZyb20gdGhpcyB0eXBlIHdpbGwgYmUgbWFya2VkIGFzIGlucHV0IHR5cGVzIGFzIHdlbGwuXG4gICAqL1xuICBwdWJsaWMgbWFya0FzT3V0cHV0VHlwZSguLi5yZWFzb25GcmFnbWVudHM6IHN0cmluZ1tdKSB7XG4gICAgQ29tcGFyYWJsZVR5cGUucmVjdXJzaW9uQnJlYWtlci5kbyh0aGlzLCAoKSA9PiB7XG4gICAgICB0aGlzLl9vdXRwdXRUeXBlUmVhc29ucy5wdXNoKHJlYXNvbkZyYWdtZW50cy5qb2luKCcsICcpKTtcbiAgICAgIHRoaXMuZm9yRWFjaFJvbGVTaGFyaW5nVHlwZSgodHlwZSwgcmVhc29uKSA9PiB7XG4gICAgICAgIHR5cGUubWFya0FzT3V0cHV0VHlwZShyZWFzb24sIC4uLnJlYXNvbkZyYWdtZW50cyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmliZSB3aHkgdGhpcyB0eXBlIGlzIGFuIGlucHV0IHR5cGUgKGlmIGl0IGlzKVxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dFR5cGVSZWFzb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGVzY3JpYmVSZWFzb25zKHRoaXMuX2lucHV0VHlwZVJlYXNvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlIHdoeSB0aGlzIHR5cGUgaXMgYW4gb3V0cHV0IHR5cGUgKGlmIGl0IGlzKVxuICAgKi9cbiAgcHVibGljIGdldCBvdXRwdXRUeXBlUmVhc29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGRlc2NyaWJlUmVhc29ucyh0aGlzLl9vdXRwdXRUeXBlUmVhc29ucyk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIG92ZXJyaWRlbiBpbiBzdWJjbGFzc2VzIHRvIG1hcmsgcmVhY2hhYmxlIHR5cGVzIGFzIGlucHV0L291dHB1dCB0eXBlc1xuICAgKlxuICAgKiBTaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRoYXQgY29udGFpbiBjYWxsYWJsZXMuXG4gICAqL1xuICBwdWJsaWMgbWFya1R5cGVSb2xlcygpIHtcbiAgICAvLyBFbXB0eSBvbiBwdXJwb3NlXG4gIH1cblxuICAvKipcbiAgICogU2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcyB0byBwZXJmb3JtIHRoZSBjb21wYXJpc29uXG4gICAqXG4gICAqIElucHV0L291dHB1dCBtYXJraW5nIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gcGVyZm9ybWVkIGJlZm9yZSB0aGlzIGlzIGNhbGxlZC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBjb21wYXJlKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciB0aGUgcm9vdCBvYmplY3QgTWlzbWFjaGVzIG9iamVjdFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBtaXNtYXRjaGVzKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2VtYmx5Q29tcGFyaXNvbi5taXNtYXRjaGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3VsZCBiZSBvdmVycmlkZW4gaW4gc3ViY2xhc3NlcyB0byBleGVjdXRlIHRoZSBjYWxsYmFjayBvbiByZWFjaGFibGUgdHlwZXNcbiAgICpcbiAgICogU2hvdWxkIGJlIG92ZXJyaWRlbiBvbmx5IGZvciBwcm9kdWN0IHR5cGVzIChzdHJ1Y3RzKS5cbiAgICovXG4gIHByb3RlY3RlZCBmb3JFYWNoUm9sZVNoYXJpbmdUeXBlKFxuICAgIGNiOiAodDogQ29tcGFyYWJsZVR5cGU8YW55PiwgcmVhc29uOiBzdHJpbmcpID0+IHZvaWQsXG4gICkge1xuICAgIEFycmF5LmlzQXJyYXkoY2IpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcmVmZXJlbmNlIHR5cGVzXG4gKlxuICogQ29udGFpbnMgc2hhcmVkIGNvZGUgdGhhdCBhcHBsaWVzIHRvIGJvdGggY2xhc3MgYW5kIGludGVyZmFjZSB0eXBlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBhcmFibGVSZWZlcmVuY2VUeXBlPFxuICBUIGV4dGVuZHMgcmVmbGVjdC5SZWZlcmVuY2VUeXBlLFxuPiBleHRlbmRzIENvbXBhcmFibGVUeXBlPFQ+IHtcbiAgLyoqXG4gICAqIENvbXBhcmUgbWVtYmVycyBvZiB0aGUgcmVmZXJlbmNlIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgY29tcGFyZSgpIHtcbiAgICB2YWxpZGF0ZVN0YWJpbGl0aWVzKHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIHZhbGlkYXRlQmFzZVR5cGVBc3NpZ25hYmlsaXR5KHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlLCB0aGlzLm1pc21hdGNoZXMpO1xuXG4gICAgdmFsaWRhdGVTdWJjbGFzc2FibGVOb3RSZW1vdmVkKHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIGlmICh0aGlzLnN1YmNsYXNzYWJsZVR5cGUpIHtcbiAgICAgIHZhbGlkYXRlTm9OZXdBYnN0cmFjdE1lbWJlcnModGhpcy5vbGRUeXBlLCB0aGlzLm5ld1R5cGUsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgfVxuXG4gICAgdGhpcy52YWxpZGF0ZU1ldGhvZHMoKTtcbiAgICB0aGlzLnZhbGlkYXRlUHJvcGVydGllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdHlwZSBhY2Nlc3NlcyAoaW5wdXQvb3V0cHV0KSBvZiBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgbWFya1R5cGVSb2xlcygpIHtcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiB0aGlzLm9sZFR5cGUub3duTWV0aG9kcykge1xuICAgICAgZGV0ZXJtaW5lVHlwZVJvbGVzRnJvbU1ldGhvZCh0aGlzLmFzc2VtYmx5Q29tcGFyaXNvbiwgbWV0aG9kKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiB0aGlzLm9sZFR5cGUub3duUHJvcGVydGllcykge1xuICAgICAgZGV0ZXJtaW5lVHlwZVJvbGVzRnJvbVByb3BlcnR5KHRoaXMuYXNzZW1ibHlDb21wYXJpc29uLCBwcm9wZXJ0eSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHR5cGUgc2lnbmF0dXJlcyBvbiBhbGwgbWV0aG9kc1xuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTWV0aG9kcygpIHtcbiAgICBmb3IgKGNvbnN0IFtvcmlnLCB1cGRhdGVkXSBvZiBtZW1iZXJQYWlycyhcbiAgICAgIHRoaXMub2xkVHlwZSxcbiAgICAgIHRoaXMub2xkVHlwZS5hbGxNZXRob2RzLFxuICAgICAgdGhpcy5uZXdUeXBlLFxuICAgICAgdGhpcy5taXNtYXRjaGVzLFxuICAgICkpIHtcbiAgICAgIGlmIChyZWZsZWN0LmlzTWV0aG9kKHVwZGF0ZWQpKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVNZXRob2Qob3JpZywgdXBkYXRlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHR5cGUgc2lnbmF0dXJlIGNoYW5nZXMgb24gdGhlIGdpdmVuIG1ldGhvZFxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTWV0aG9kKG9yaWdpbmFsOiByZWZsZWN0Lk1ldGhvZCwgdXBkYXRlZDogcmVmbGVjdC5NZXRob2QpIHtcbiAgICB2YWxpZGF0ZVN0YXRpY1NhbWUob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgdmFsaWRhdGVBc3luY1NhbWUob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG5cbiAgICBpZiAodGhpcy5zdWJjbGFzc2FibGVUeXBlKSB7XG4gICAgICB2YWxpZGF0ZVJldHVyblR5cGVTYW1lKFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgdXBkYXRlZCxcbiAgICAgICAgdGhpcy5taXNtYXRjaGVzLndpdGhNb3RpdmF0aW9uKCd0eXBlIGlzIEBzdWJjbGFzc2FibGUnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUmV0dXJuVHlwZU5vdFdlYWtlbmVkKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIH1cblxuICAgIHRoaXMudmFsaWRhdGVDYWxsYWJsZShvcmlnaW5hbCwgdXBkYXRlZCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdHlwZSBzaWduYXR1cmUgY2hhbmdlcyBvbiB0aGUgZ2l2ZW4gY2FsbGFibGUgKG1ldGhvZCBvciBpbml0aWFsaXplcilcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUNhbGxhYmxlPFQgZXh0ZW5kcyByZWZsZWN0Lk1ldGhvZCB8IHJlZmxlY3QuSW5pdGlhbGl6ZXI+KFxuICAgIG9yaWdpbmFsOiBULFxuICAgIHVwZGF0ZWQ6IFQsXG4gICkge1xuICAgIHZhbGlkYXRlU3RhYmlsaXRpZXMob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgdmFsaWRhdGVOb3RNYWRlTm9uVmFyaWFkaWMob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG5cbiAgICAvLyBDaGVjayB0aGF0IGV2ZXJ5IG9yaWdpbmFsIHBhcmFtZXRlciBjYW4gc3RpbGwgYmUgbWFwcGVkIHRvIGEgcGFyYW1ldGVyIGluIHRoZSB1cGRhdGVkIG1ldGhvZFxuICAgIHZhbGlkYXRlRXhpc3RpbmdQYXJhbXMoXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIHVwZGF0ZWQsXG4gICAgICB0aGlzLm1pc21hdGNoZXMsXG4gICAgICAob2xkUGFyYW0sIG5ld1BhcmFtKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnN1YmNsYXNzYWJsZVR5cGUpIHtcbiAgICAgICAgICB2YWxpZGF0ZVBhcmFtZXRlclR5cGVTYW1lKFxuICAgICAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgICAgICBvbGRQYXJhbSxcbiAgICAgICAgICAgIG5ld1BhcmFtLFxuICAgICAgICAgICAgdGhpcy5taXNtYXRjaGVzLndpdGhNb3RpdmF0aW9uKCd0eXBlIGlzIEBzdWJjbGFzc2FibGUnKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlUGFyYW1ldGVyVHlwZVdlYWtlbmVkKFxuICAgICAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgICAgICBvbGRQYXJhbSxcbiAgICAgICAgICAgIG5ld1BhcmFtLFxuICAgICAgICAgICAgdGhpcy5taXNtYXRjaGVzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHZhbGlkYXRlTm9OZXdSZXF1aXJlZFBhcmFtcyhvcmlnaW5hbCwgdXBkYXRlZCwgdGhpcy5taXNtYXRjaGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0eXBlIHNpZ25hdHVyZSBjaGFuZ2VzIG9uIGFsbCBwcm9wZXJ0aWVzXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wZXJ0aWVzKCkge1xuICAgIGZvciAoY29uc3QgW29yaWcsIHVwZGF0ZWRdIG9mIG1lbWJlclBhaXJzKFxuICAgICAgdGhpcy5vbGRUeXBlLFxuICAgICAgdGhpcy5vbGRUeXBlLmFsbFByb3BlcnRpZXMsXG4gICAgICB0aGlzLm5ld1R5cGUsXG4gICAgICB0aGlzLm1pc21hdGNoZXMsXG4gICAgKSkge1xuICAgICAgaWYgKHJlZmxlY3QuaXNQcm9wZXJ0eSh1cGRhdGVkKSkge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUHJvcGVydHkob3JpZywgdXBkYXRlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHR5cGUgc2lnbmF0dXJlIGNoYW5nZXMgb24gdGhlIGdpdmVuIHByb3BlcnR5XG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVQcm9wZXJ0eShcbiAgICBvcmlnaW5hbDogcmVmbGVjdC5Qcm9wZXJ0eSxcbiAgICB1cGRhdGVkOiByZWZsZWN0LlByb3BlcnR5LFxuICApIHtcbiAgICB2YWxpZGF0ZVN0YWJpbGl0aWVzKG9yaWdpbmFsLCB1cGRhdGVkLCB0aGlzLm1pc21hdGNoZXMpO1xuICAgIHZhbGlkYXRlU3RhdGljU2FtZShvcmlnaW5hbCwgdXBkYXRlZCwgdGhpcy5taXNtYXRjaGVzKTtcbiAgICB2YWxpZGF0ZU5vdE1hZGVJbW11dGFibGUob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG5cbiAgICBpZiAodGhpcy5zdWJjbGFzc2FibGVUeXBlKSB7XG4gICAgICAvLyBIZWxsbyBDIyBteSBvbGQgZnJpZW5kXG4gICAgICB2YWxpZGF0ZVByb3BlcnR5VHlwZVNhbWUoXG4gICAgICAgIG9yaWdpbmFsLFxuICAgICAgICB1cGRhdGVkLFxuICAgICAgICB0aGlzLm1pc21hdGNoZXMud2l0aE1vdGl2YXRpb24oJ3R5cGUgaXMgQHN1YmNsYXNzYWJsZScpLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFvcmlnaW5hbC5pbW11dGFibGUpIHtcbiAgICAgIC8vIElmIHRoZSB0eXBlIGNhbiBiZSByZWFkLCBpdCBjYW4ndCBiZSB3ZWFrZW5lZCAoY2FuJ3QgY2hhbmdlIERvZyB0byBBbmltYWwsIGNvbnN1bWVycyBtaWdodCBiZSBjb3VudGluZyBvbiBhIERvZykuXG4gICAgICAvLyBJZiB0aGUgdHlwZSBjYW4gYmUgd3JpdHRlbiwgaXQgY2FuJ3QgYmUgc3RyZW5ndGhlbmVkIChjYW4ndCBjaGFuZ2UgQW5pbWFsIHRvIERvZywgY29uc3VtZXJzIG1pZ2h0IGJlIHNlbmRpbmcgYSBDYXQpLlxuICAgICAgLy8gPT4gaXQgbXVzdCByZW1haW4gdGhlIHNhbWVcbiAgICAgIHZhbGlkYXRlUHJvcGVydHlUeXBlU2FtZShcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIHVwZGF0ZWQsXG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy53aXRoTW90aXZhdGlvbignbXV0YWJsZSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHR5cGUnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcGVydHlUeXBlTm90V2Vha2VuZWQob3JpZ2luYWwsIHVwZGF0ZWQsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGN1cnJlbnQgcmVmZXJlbmNlIHR5cGUgaGFzIGJlZW4gbWFya2VkIGFzIHN1YmNsYXNzYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgc3ViY2xhc3NhYmxlVHlwZSgpIHtcbiAgICByZXR1cm4gc3ViY2xhc3NhYmxlVHlwZSh0aGlzLm9sZFR5cGUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYXJhYmxlQ2xhc3NUeXBlIGV4dGVuZHMgQ29tcGFyYWJsZVJlZmVyZW5jZVR5cGU8cmVmbGVjdC5DbGFzc1R5cGU+IHtcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIHJlZmVyZW5jZSB0eXBlIGNvbXBhcmlzb24gYW5kIGluY2x1ZGUgY2xhc3Mtc3BlY2lmaWMgY2hlY2tzXG4gICAqL1xuICBwdWJsaWMgY29tcGFyZSgpIHtcbiAgICBzdXBlci5jb21wYXJlKCk7XG5cbiAgICB2YWxpZGF0ZU5vdE1hZGVBYnN0cmFjdCh0aGlzLm9sZFR5cGUsIHRoaXMubmV3VHlwZSwgdGhpcy5taXNtYXRjaGVzKTtcblxuICAgIC8vIEpTSUkgYXNzZW1ibGVyIGhhcyBhbHJlYWR5IHRha2VuIGNhcmUgb2YgaW5oZXJpdGFuY2UgaGVyZVxuICAgIGlmICh0aGlzLm9sZFR5cGUuaW5pdGlhbGl6ZXIgJiYgdGhpcy5uZXdUeXBlLmluaXRpYWxpemVyKSB7XG4gICAgICB2YWxpZGF0ZU1ldGhvZENvbXBhdGlibGUoXG4gICAgICAgIHRoaXMub2xkVHlwZS5pbml0aWFsaXplcixcbiAgICAgICAgdGhpcy5uZXdUeXBlLmluaXRpYWxpemVyLFxuICAgICAgICB0aGlzLm1pc21hdGNoZXMsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlIHJvbGUgbWFya2luZyAtLSBpbmNsdWRlIHRoZSBpbml0aWFsaXplclxuICAgKi9cbiAgcHVibGljIG1hcmtUeXBlUm9sZXMoKSB7XG4gICAgaWYgKHRoaXMub2xkVHlwZS5pbml0aWFsaXplcikge1xuICAgICAgZGV0ZXJtaW5lVHlwZVJvbGVzRnJvbU1ldGhvZChcbiAgICAgICAgdGhpcy5hc3NlbWJseUNvbXBhcmlzb24sXG4gICAgICAgIHRoaXMub2xkVHlwZS5pbml0aWFsaXplcixcbiAgICAgICk7XG4gICAgfVxuICAgIHN1cGVyLm1hcmtUeXBlUm9sZXMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0eXBlIGNvbXBhcmlzb25cbiAqXG4gKiAoQWN0dWFsbHkganVzdCBwbGFpbiByZWZlcmVuY2UgdHlwZSBjb21wYXJpc29uKVxuICovXG5leHBvcnQgY2xhc3MgQ29tcGFyYWJsZUludGVyZmFjZVR5cGUgZXh0ZW5kcyBDb21wYXJhYmxlUmVmZXJlbmNlVHlwZTxyZWZsZWN0LkludGVyZmFjZVR5cGU+IHt9XG5cbi8qKlxuICogU3RydWN0IHR5cGUgY29tcGFyaXNvblxuICpcbiAqIE1vc3Qgbm90YWJseTogZG9lcyBuby1zdHJlbmd0aGVuaW5nL25vLXdlYWtlbmluZyBjaGVja3MgYmFzZWQgb24gd2hldGhlclxuICogc3RydWN0cyBhcHBlYXIgaW4gaW5wdXQvb3V0cHV0IHBvc2l0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBhcmFibGVTdHJ1Y3RUeXBlIGV4dGVuZHMgQ29tcGFyYWJsZVR5cGU8cmVmbGVjdC5JbnRlcmZhY2VUeXBlPiB7XG4gIHB1YmxpYyBjb21wYXJlKCkge1xuICAgIHZhbGlkYXRlU3RhYmlsaXRpZXModGhpcy5vbGRUeXBlLCB0aGlzLm5ld1R5cGUsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgdmFsaWRhdGVCYXNlVHlwZUFzc2lnbmFiaWxpdHkodGhpcy5vbGRUeXBlLCB0aGlzLm5ld1R5cGUsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgdGhpcy52YWxpZGF0ZU5vUHJvcGVydGllc1JlbW92ZWQoKTtcblxuICAgIGlmICh0aGlzLmlucHV0VHlwZSkge1xuICAgICAgLy8gSWYgdGhlIHN0cnVjdCBpcyB3cml0dGVuLCBpdCBjYW4ndCBiZSBzdHJlbmd0aGVuZWQgKGV4OiBjYW4ndCBjaGFuZ2UgYW4gb3B0aW9uYWwgcHJvcGVydHkgdG8gcmVxdWlyZWQpXG4gICAgICB0aGlzLnZhbGlkYXRlTm90U3RyZW5ndGhlbmVkKFxuICAgICAgICB0aGlzLm1pc21hdGNoZXMud2l0aE1vdGl2YXRpb24odGhpcy5pbnB1dFR5cGVSZWFzb24pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdXRwdXRUeXBlKSB7XG4gICAgICAvLyBJZiB0aGUgc3RydWN0IGlzIHJlYWQsIGl0IGNhbid0IGJlIHdlYWtlbmVkIChleDogY2FuJ3QgY2hhbmdlIGEgcmVxdWlyZWQgcHJvcGVydHkgdG8gb3B0aW9uYWwpXG4gICAgICB0aGlzLnZhbGlkYXRlTm90V2Vha2VuZWQoXG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcy53aXRoTW90aXZhdGlvbih0aGlzLm91dHB1dFR5cGVSZWFzb24pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZlcnkgdHlwZSBvZiBldmVyeSBwcm9wZXJ0eSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBpbi9vdXQgY2xhc3NpZmljYXRpb24gYXMgdGhlIG91dGVyIHR5cGVcbiAgICovXG4gIHByb3RlY3RlZCBmb3JFYWNoUm9sZVNoYXJpbmdUeXBlKFxuICAgIGNiOiAodDogQ29tcGFyYWJsZVR5cGU8YW55PiwgcmVhc29uOiBzdHJpbmcpID0+IHZvaWQsXG4gICkge1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLm9sZFR5cGUuYWxsUHJvcGVydGllcykge1xuICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuYXNzZW1ibHlDb21wYXJpc29uLnR5cGVzSW4ocHJvcC50eXBlKSkge1xuICAgICAgICBjYih0LCBgdHlwZSBvZiBwcm9wZXJ0eSAke3Byb3AubmFtZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhhdCBhbGwgcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudFxuICAgKlxuICAgKiBUaGlzIGlzIGJlY2F1c2UgZm9yIGFsbCBub24tc3RydWN0dXJhbGx5IHR5cGVkIGxhbmd1YWdlcyBpdCBpcyBub3QgYWxsb3dlZFxuICAgKiB0byBzcGVjaWZ5IG1lbWJlcnMgd2hpY2ggYXJlbid0IGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIHR5cGUuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm9Qcm9wZXJ0aWVzUmVtb3ZlZCgpIHtcbiAgICAvLyBBIHNpbmdsZSBydW4gb2YgbWVtYmVyUGFpcnMoKSB3aXRoIG5vdGhpbmcgZWxzZSB3aWxsIGRvIHRoaXMgY2hlY2suXG4gICAgQXJyYXkuZnJvbShcbiAgICAgIG1lbWJlclBhaXJzKFxuICAgICAgICB0aGlzLm9sZFR5cGUsXG4gICAgICAgIHRoaXMub2xkVHlwZS5hbGxQcm9wZXJ0aWVzLFxuICAgICAgICB0aGlzLm5ld1R5cGUsXG4gICAgICAgIHRoaXMubWlzbWF0Y2hlcyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHR5cGUgaXMgbm90IHdlYWtlbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm90V2Vha2VuZWQobWlzbWF0Y2hlczogSVJlcG9ydCkge1xuICAgIGNvbnN0IGFuYSA9IHRoaXMuaXNTdHJ1Y3R1cmFsU3VwZXJUeXBlKHRoaXMub2xkVHlwZSwgdGhpcy5uZXdUeXBlKTtcbiAgICBpZiAoIWFuYS5zdWNjZXNzKSB7XG4gICAgICBtaXNtYXRjaGVzLnJlcG9ydCh7XG4gICAgICAgIHJ1bGVLZXk6ICd3ZWFrZW5lZCcsXG4gICAgICAgIHZpb2xhdG9yOiB0aGlzLm9sZFR5cGUsXG4gICAgICAgIG1lc3NhZ2U6IGFuYS5yZWFzb25zLmpvaW4oJywgJyksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0eXBlIGlzIG5vdCBzdHJlbmd0aGVuZWRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVOb3RTdHJlbmd0aGVuZWQobWlzbWF0Y2hlczogSVJlcG9ydCkge1xuICAgIGNvbnN0IGFuYSA9IHRoaXMuaXNTdHJ1Y3R1cmFsU3VwZXJUeXBlKHRoaXMubmV3VHlwZSwgdGhpcy5vbGRUeXBlKTtcbiAgICBpZiAoIWFuYS5zdWNjZXNzKSB7XG4gICAgICBtaXNtYXRjaGVzLnJlcG9ydCh7XG4gICAgICAgIHJ1bGVLZXk6ICdzdHJlbmd0aGVuZWQnLFxuICAgICAgICB2aW9sYXRvcjogdGhpcy5vbGRUeXBlLFxuICAgICAgICBtZXNzYWdlOiBhbmEucmVhc29ucy5qb2luKCcsICcpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cnVjdHVyYWxTdXBlclR5cGUoXG4gICAgYTogcmVmbGVjdC5JbnRlcmZhY2VUeXBlLFxuICAgIGI6IHJlZmxlY3QuSW50ZXJmYWNlVHlwZSxcbiAgKTogQW5hbHlzaXMge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gaXNTdHJ1Y3R1cmFsU3VwZXJUeXBlKGEsIGIsIHRoaXMubmV3VHlwZS5zeXN0ZW0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFdlIG1pZ2h0IGdldCBhbiBleGNlcHRpb24gaWYgdGhlIHR5cGUgaXMgc3VwcG9zZWQgdG8gY29tZSBmcm9tIGEgZGlmZmVyZW50XG4gICAgICAvLyBhc3NlbWJseSBhbmQgdGhlIGxvb2t1cCBmYWlscy5cbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCByZWFzb25zOiBbZS5tZXNzYWdlXSB9O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbXBhcmlzb24gZm9yIGVudW1zXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wYXJhYmxlRW51bVR5cGUgZXh0ZW5kcyBDb21wYXJhYmxlVHlwZTxyZWZsZWN0LkVudW1UeXBlPiB7XG4gIC8qKlxuICAgKiBQZXJmb3JtIGNvbXBhcmlzb25zIG9uIGVudW0gbWVtYmVyc1xuICAgKi9cbiAgcHVibGljIGNvbXBhcmUoKSB7XG4gICAgdmFsaWRhdGVTdGFiaWxpdGllcyh0aGlzLm9sZFR5cGUsIHRoaXMubmV3VHlwZSwgdGhpcy5taXNtYXRjaGVzKTtcblxuICAgIHZhbGlkYXRlRXhpc3RpbmdNZW1iZXJzKFxuICAgICAgdGhpcy5vbGRUeXBlLFxuICAgICAgdGhpcy5uZXdUeXBlLFxuICAgICAgdGhpcy5taXNtYXRjaGVzLFxuICAgICAgKG9sZE1lbWJlciwgbmV3TWVtYmVyKSA9PiB7XG4gICAgICAgIHZhbGlkYXRlU3RhYmlsaXRpZXMob2xkTWVtYmVyLCBuZXdNZW1iZXIsIHRoaXMubWlzbWF0Y2hlcyk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlucHV0L291dHB1dCByb2xlcyBvZiB0eXBlcyB1c2VkIGluIHRoaXMgbWV0aG9kXG4gKlxuICogLSBBcmd1bWVudCB0eXBlcyBhcmUgdHJlYXRlZCBhcyBJTiB0eXBlc1xuICogLSBSZXR1cm4gdHlwZSBpcyB0cmVhdGVkIGFzIE9VVCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZVR5cGVSb2xlc0Zyb21NZXRob2QoXG4gIGNvbXBhcmlzb246IEFzc2VtYmx5Q29tcGFyaXNvbixcbiAgbWV0aG9kOiByZWZsZWN0Lk1ldGhvZCB8IHJlZmxlY3QuSW5pdGlhbGl6ZXIsXG4pIHtcbiAgaWYgKHJlZmxlY3QuaXNNZXRob2QobWV0aG9kKSkge1xuICAgIGZvciAoY29uc3QgdCBvZiBjb21wYXJpc29uLnR5cGVzSW4obWV0aG9kLnJldHVybnMudHlwZSkpIHtcbiAgICAgIHQubWFya0FzT3V0cHV0VHlwZShgcmV0dXJuZWQgZnJvbSAke2FwaUVsZW1lbnRJZGVudGlmaWVyKG1ldGhvZCl9YCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBwYXJhbSBvZiBtZXRob2QucGFyYW1ldGVycyA/PyBbXSkge1xuICAgIGZvciAoY29uc3QgdCBvZiBjb21wYXJpc29uLnR5cGVzSW4ocGFyYW0udHlwZSkpIHtcbiAgICAgIHQubWFya0FzSW5wdXRUeXBlKGBpbnB1dCB0byAke2FwaUVsZW1lbnRJZGVudGlmaWVyKG1ldGhvZCl9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpbnB1dC9vdXRwdXQgcm9sZXMgb2YgdHlwZXMgdXNlZCBpbiB0aGlzIHByb3BlcnR5XG4gKlxuICogLSBQcm9wZXJ0eSB0eXBlIGlzIHRyZWF0ZWQgYXMgT1VUIHR5cGVcbiAqIC0gSWYgbXV0YWJsZSwgcHJvcGVydHkgdHlwZSBpcyBhbHNvIHRyZWF0ZWQgYXMgSU4gdHlwZVxuICpcbiAqIEluIGVmZmVjdCwgYSBwcm9wZXJ0eSBpcyB0cmVhdGVkIGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczpcbiAqXG4gKiAtIHByb3BlcnR5KCk6IFQ7XG4gKiAtIHNldFByb3BlcnR5KDogVCk7ICA8LSBvbmx5IGlmIG11dGFibGVcbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lVHlwZVJvbGVzRnJvbVByb3BlcnR5KFxuICBjb21wYXJpc29uOiBBc3NlbWJseUNvbXBhcmlzb24sXG4gIHByb3BlcnR5OiByZWZsZWN0LlByb3BlcnR5LFxuKSB7XG4gIGZvciAoY29uc3QgdCBvZiBjb21wYXJpc29uLnR5cGVzSW4ocHJvcGVydHkudHlwZSkpIHtcbiAgICB0Lm1hcmtBc091dHB1dFR5cGUoYHR5cGUgb2YgJHthcGlFbGVtZW50SWRlbnRpZmllcihwcm9wZXJ0eSl9YCk7XG4gIH1cbiAgaWYgKCFwcm9wZXJ0eS5pbW11dGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tcGFyaXNvbi50eXBlc0luKHByb3BlcnR5LnR5cGUpKSB7XG4gICAgICB0Lm1hcmtBc0lucHV0VHlwZShgdHlwZSBvZiBtdXRhYmxlICR7YXBpRWxlbWVudElkZW50aWZpZXIocHJvcGVydHkpfWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiBhbGwgdGhlIEZRTnMgZnJvbSBhIHR5cGUgcmVmZXJlbmNlXG4gKlxuICogSW4gdGhlIHNpbXBsZSBjYXNlLCBhIHNpbXBsZSBGUU4sIGJ1dCB0aGUgdHlwZSBtaWdodFxuICogYmUgYSB1bmlvbiBvciBjb21wbGV4IHR5cGUgYXMgd2VsbC5cbiAqL1xuZnVuY3Rpb24gZnFuc0Zyb20ocmVmOiByZWZsZWN0LlR5cGVSZWZlcmVuY2UpIHtcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgcmVjdXJzZShyZWYpO1xuICByZXR1cm4gcmV0O1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2UodHlwZTogcmVmbGVjdC5UeXBlUmVmZXJlbmNlKSB7XG4gICAgaWYgKHR5cGUubWFwT2ZUeXBlKSB7XG4gICAgICByZWN1cnNlKHR5cGUubWFwT2ZUeXBlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuYXJyYXlPZlR5cGUpIHtcbiAgICAgIHJlY3Vyc2UodHlwZS5hcnJheU9mVHlwZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlLnVuaW9uT2ZUeXBlcykge1xuICAgICAgdHlwZS51bmlvbk9mVHlwZXMuZm9yRWFjaChyZWN1cnNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuZnFuKSB7XG4gICAgICByZXQucHVzaCh0eXBlLmZxbik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUmVhc29ucyhyZWFzb25zOiBzdHJpbmdbXSkge1xuICBpZiAocmVhc29ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKHJlYXNvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHJlYXNvbnNbMF07XG4gIH1cbiAgcmV0dXJuIGAke3JlYXNvbnNbMF19ICguLi5hbmQgJHtyZWFzb25zLmxlbmd0aCAtIDF9IG1vcmUuLi4pYDtcbn1cbiJdfQ==
package/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** The qualified version number for this JSII compiler. */
2
- export declare const VERSION = "1.53.0 (build c071d26)";
2
+ export declare const VERSION = "1.55.1 (build 07d2d90)";
package/lib/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- // Generated at 2022-02-09T20:13:34Z by generate.sh
2
+ // Generated at 2022-03-16T12:53:29Z by generate.sh
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.VERSION = void 0;
5
5
  /** The qualified version number for this JSII compiler. */
6
- exports.VERSION = '1.53.0 (build c071d26)';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1EQUFtRDs7O0FBRW5ELDJEQUEyRDtBQUM5QyxRQUFBLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBhdCAyMDIyLTAyLTA5VDIwOjEzOjM0WiBieSBnZW5lcmF0ZS5zaFxuXG4vKiogVGhlIHF1YWxpZmllZCB2ZXJzaW9uIG51bWJlciBmb3IgdGhpcyBKU0lJIGNvbXBpbGVyLiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnMS41My4wIChidWlsZCBjMDcxZDI2KSc7XG4iXX0=
6
+ exports.VERSION = '1.55.1 (build 07d2d90)';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1EQUFtRDs7O0FBRW5ELDJEQUEyRDtBQUM5QyxRQUFBLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBhdCAyMDIyLTAzLTE2VDEyOjUzOjI5WiBieSBnZW5lcmF0ZS5zaFxuXG4vKiogVGhlIHF1YWxpZmllZCB2ZXJzaW9uIG51bWJlciBmb3IgdGhpcyBKU0lJIGNvbXBpbGVyLiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnMS41NS4xIChidWlsZCAwN2QyZDkwKSc7XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsii-diff",
3
- "version": "1.53.0",
3
+ "version": "1.55.1",
4
4
  "description": "Assembly comparison for jsii",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -33,24 +33,24 @@
33
33
  "package": "package-js"
34
34
  },
35
35
  "dependencies": {
36
- "@jsii/check-node": "1.53.0",
37
- "@jsii/spec": "^1.53.0",
36
+ "@jsii/check-node": "1.55.1",
37
+ "@jsii/spec": "^1.55.1",
38
38
  "fs-extra": "^9.1.0",
39
- "jsii-reflect": "^1.53.0",
40
- "log4js": "^6.4.1",
39
+ "jsii-reflect": "^1.55.1",
40
+ "log4js": "^6.4.2",
41
41
  "typescript": "~3.9.10",
42
42
  "yargs": "^16.2.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/fs-extra": "^9.0.13",
46
- "@types/jest": "^27.4.0",
47
- "@types/node": "^12.20.43",
46
+ "@types/jest": "^27.4.1",
47
+ "@types/node": "^12.20.47",
48
48
  "@types/tar-fs": "^2.0.1",
49
- "eslint": "^8.8.0",
50
- "jest": "^27.4.7",
49
+ "eslint": "^8.10.0",
50
+ "jest": "^27.5.1",
51
51
  "jest-expect-message": "^1.0.2",
52
- "jsii": "^1.53.0",
53
- "jsii-build-tools": "^1.53.0",
52
+ "jsii": "^1.55.1",
53
+ "jsii-build-tools": "^1.55.1",
54
54
  "prettier": "^2.5.1"
55
55
  }
56
56
  }