@textbus/collaborate 2.2.0-alpha.0 → 2.3.0-alpha.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  import { SelectionBridge } from '@textbus/browser';
2
2
  import { Selection, SelectionPaths, AbstractSelection, Scheduler, Rect } from '@textbus/core';
3
3
  export interface RemoteSelection {
4
+ id: string;
4
5
  color: string;
5
6
  username: string;
6
7
  paths: SelectionPaths;
@@ -8,6 +9,7 @@ export interface RemoteSelection {
8
9
  export interface SelectionRect extends Rect {
9
10
  color: string;
10
11
  username: string;
12
+ id: string;
11
13
  }
12
14
  export interface RemoteSelectionCursor {
13
15
  cursor: HTMLElement;
@@ -35,6 +37,6 @@ export declare class CollaborateCursor {
35
37
  refresh(): void;
36
38
  destroy(): void;
37
39
  draw(paths: RemoteSelection[]): void;
38
- private drawUserCursor;
40
+ protected drawUserCursor(rects: SelectionRect[]): void;
39
41
  private getUserCursor;
40
42
  }
@@ -147,6 +147,7 @@ let CollaborateCursor = class CollaborateCursor {
147
147
  for (let i = rects.length - 1; i >= 0; i--) {
148
148
  const rect = rects[i];
149
149
  selectionRects.push({
150
+ id: item.id,
150
151
  color: item.color,
151
152
  username: item.username,
152
153
  left: rect.left - containerRect.left,
@@ -161,6 +162,7 @@ let CollaborateCursor = class CollaborateCursor {
161
162
  cursorRange.collapse(true);
162
163
  const cursorRect = getLayoutRectByRange(cursorRange);
163
164
  const rect = {
165
+ id: item.id,
164
166
  username: item.username,
165
167
  color: item.color,
166
168
  left: cursorRect.left - containerRect.left,
@@ -268,4 +270,4 @@ CollaborateCursor = __decorate([
268
270
  Selection])
269
271
  ], CollaborateCursor);
270
272
  export { CollaborateCursor };
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFib3JhdGUtY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbGxhYm9yYXRlLWN1cnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEQsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsU0FBUyxFQUFxQyxTQUFTLEVBQVEsTUFBTSxlQUFlLENBQUE7QUFDN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBbUJoRSxNQUFNLE9BQWdCLHFDQUFxQztDQUUxRDtBQUdELElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBb0Q1QixZQUE0QyxTQUFzQixFQUNsQyxpQkFBd0QsRUFDcEUsZUFBZ0MsRUFDaEMsU0FBb0IsRUFDcEIsU0FBb0I7UUFKSSxjQUFTLEdBQVQsU0FBUyxDQUFhO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUM7UUFDcEUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXZEaEMsU0FBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDbEMsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixJQUFJLEVBQUUsQ0FBQztnQkFDUCxHQUFHLEVBQUUsQ0FBQztnQkFDTixLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxhQUFhLEVBQUUsTUFBTTtnQkFDckIsTUFBTSxFQUFFLENBQUM7YUFDVjtTQUNGLENBQUMsQ0FBQTtRQUNNLG9CQUFlLEdBQUcsYUFB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QUNMLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTTtZQUNOLE9BQU87U0FDUixDQUFBO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFoUVksaUJBQWlCO0lBRDdCLFVBQVUsRUFBRTtJQXFERSxXQUFBLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUN0QixXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQURnQyxXQUFXO1FBQ2YscUNBQXFDO1FBQ25ELGVBQWU7UUFDckIsU0FBUztRQUNULFNBQVM7R0F4RDdCLGlCQUFpQixDQWdRN0I7U0FoUVksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0B0YW5iby9kaSdcbmltcG9ydCB7XG4gIGNyZWF0ZUVsZW1lbnQsXG4gIFZJRVdfQ09OVEFJTkVSLFxuICBnZXRMYXlvdXRSZWN0QnlSYW5nZSxcbiAgU2VsZWN0aW9uQnJpZGdlXG59IGZyb20gJ0B0ZXh0YnVzL2Jyb3dzZXInXG5pbXBvcnQgeyBTZWxlY3Rpb24sIFNlbGVjdGlvblBhdGhzLCBBYnN0cmFjdFNlbGVjdGlvbiwgU2NoZWR1bGVyLCBSZWN0IH0gZnJvbSAnQHRleHRidXMvY29yZSdcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAnQHRhbmJvL3N0cmVhbSdcblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVTZWxlY3Rpb24ge1xuICBjb2xvcjogc3RyaW5nXG4gIHVzZXJuYW1lOiBzdHJpbmdcbiAgcGF0aHM6IFNlbGVjdGlvblBhdGhzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uUmVjdCBleHRlbmRzIFJlY3Qge1xuICBjb2xvcjogc3RyaW5nXG4gIHVzZXJuYW1lOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVTZWxlY3Rpb25DdXJzb3Ige1xuICBjdXJzb3I6IEhUTUxFbGVtZW50XG4gIGFuY2hvcjogSFRNTEVsZW1lbnRcbiAgdXNlclRpcDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbGxhYm9yYXRlU2VsZWN0aW9uQXdhcmVuZXNzRGVsZWdhdGUge1xuICBhYnN0cmFjdCBnZXRSZWN0cyhhYnN0cmFjdFNlbGVjdGlvbjogQWJzdHJhY3RTZWxlY3Rpb24sIG5hdGl2ZVJhbmdlOiBSYW5nZSk6IGZhbHNlIHwgUmVjdFtdXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2xsYWJvcmF0ZUN1cnNvciB7XG4gIHByaXZhdGUgaG9zdCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIHtcbiAgICBzdHlsZXM6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIHpJbmRleDogMVxuICAgIH1cbiAgfSlcbiAgcHJpdmF0ZSBjYW52YXNDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCB7XG4gICAgc3R5bGVzOiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICB9XG4gIH0pXG4gIHByaXZhdGUgY2FudmFzID0gY3JlYXRlRWxlbWVudCgnY2FudmFzJywge1xuICAgIHN0eWxlczoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBvcGFjaXR5OiAwLjUsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCArICdweCcsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfVxuICB9KSBhcyBIVE1MQ2FudmFzRWxlbWVudFxuICBwcml2YXRlIGNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIVxuICBwcml2YXRlIHRvb2x0aXBzID0gY3JlYXRlRWxlbWVudCgnZGl2Jywge1xuICAgIHN0eWxlczoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICAgIHpJbmRleDogMTBcbiAgICB9XG4gIH0pXG5cbiAgcHJpdmF0ZSBvblJlY3RzQ2hhbmdlID0gbmV3IFN1YmplY3Q8U2VsZWN0aW9uUmVjdFtdPigpXG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKClcbiAgcHJpdmF0ZSBjdXJyZW50U2VsZWN0aW9uOiBSZW1vdGVTZWxlY3Rpb25bXSA9IFtdXG5cbiAgY29uc3RydWN0b3IoQEluamVjdChWSUVXX0NPTlRBSU5FUikgcHJpdmF0ZSBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGF3YXJlbmVzc0RlbGVnYXRlOiBDb2xsYWJvcmF0ZVNlbGVjdGlvbkF3YXJlbmVzc0RlbGVnYXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIG5hdGl2ZVNlbGVjdGlvbjogU2VsZWN0aW9uQnJpZGdlLFxuICAgICAgICAgICAgICBwcml2YXRlIHNjaGVkdWxlcjogU2NoZWR1bGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uKSB7XG4gICAgdGhpcy5jYW52YXNDb250YWluZXIuYXBwZW5kKHRoaXMuY2FudmFzKVxuICAgIHRoaXMuaG9zdC5hcHBlbmQodGhpcy5jYW52YXNDb250YWluZXIsIHRoaXMudG9vbHRpcHMpXG4gICAgY29udGFpbmVyLnByZXBlbmQodGhpcy5ob3N0KVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm9uUmVjdHNDaGFuZ2Uuc3Vic2NyaWJlKHJlY3RzID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gcmVjdC5jb2xvclxuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKClcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpXG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsKClcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsb3NlUGF0aCgpXG4gICAgICB9XG4gICAgfSksIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCArICdweCdcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfSksIHRoaXMuc2NoZWR1bGVyLm9uRG9jQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKClcbiAgICB9KSlcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5kcmF3KHRoaXMuY3VycmVudFNlbGVjdGlvbilcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgZHJhdyhwYXRoczogUmVtb3RlU2VsZWN0aW9uW10pIHtcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBwYXRoc1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIHRoaXMuY2FudmFzLnN0eWxlLnRvcCA9IGNvbnRhaW5lclJlY3QudG9wICogLTEgKyAncHgnXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmNhbnZhcy5vZmZzZXRXaWR0aFxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuY2FudmFzLm9mZnNldEhlaWdodFxuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodClcblxuICAgIGNvbnN0IHVzZXJzOiBTZWxlY3Rpb25SZWN0W10gPSBbXVxuXG4gICAgcGF0aHMuZmlsdGVyKGkgPT4ge1xuICAgICAgcmV0dXJuIGkucGF0aHMuYW5jaG9yLmxlbmd0aCAmJiBpLnBhdGhzLmZvY3VzLmxlbmd0aFxuICAgIH0pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBhbmNob3JQYXRocyA9IFsuLi5pdGVtLnBhdGhzLmFuY2hvcl1cbiAgICAgIGNvbnN0IGZvY3VzUGF0aHMgPSBbLi4uaXRlbS5wYXRocy5mb2N1c11cbiAgICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGFuY2hvclBhdGhzLnBvcCgpIVxuICAgICAgY29uc3QgYW5jaG9yU2xvdCA9IHRoaXMuc2VsZWN0aW9uLmZpbmRTbG90QnlQYXRocyhhbmNob3JQYXRocylcbiAgICAgIGNvbnN0IGZvY3VzT2Zmc2V0ID0gZm9jdXNQYXRocy5wb3AoKSFcbiAgICAgIGNvbnN0IGZvY3VzU2xvdCA9IHRoaXMuc2VsZWN0aW9uLmZpbmRTbG90QnlQYXRocyhmb2N1c1BhdGhzKVxuICAgICAgaWYgKCFhbmNob3JTbG90IHx8ICFmb2N1c1Nsb3QpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZm9jdXMsIGFuY2hvciB9ID0gdGhpcy5uYXRpdmVTZWxlY3Rpb24uZ2V0UG9zaXRpb25CeVJhbmdlKHtcbiAgICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICAgIGFuY2hvck9mZnNldCxcbiAgICAgICAgZm9jdXNTbG90LFxuICAgICAgICBhbmNob3JTbG90XG4gICAgICB9KVxuICAgICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbmF0aXZlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICBuYXRpdmVSYW5nZS5zZXRTdGFydChhbmNob3Iubm9kZSwgYW5jaG9yLm9mZnNldClcbiAgICAgIG5hdGl2ZVJhbmdlLnNldEVuZChmb2N1cy5ub2RlLCBmb2N1cy5vZmZzZXQpXG4gICAgICBpZiAoKGFuY2hvci5ub2RlICE9PSBmb2N1cy5ub2RlIHx8IGFuY2hvci5vZmZzZXQgIT09IGZvY3VzLm9mZnNldCkgJiYgbmF0aXZlUmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIG5hdGl2ZVJhbmdlLnNldFN0YXJ0KGZvY3VzLm5vZGUsIGZvY3VzLm9mZnNldClcbiAgICAgICAgbmF0aXZlUmFuZ2Uuc2V0RW5kKGFuY2hvci5ub2RlLCBhbmNob3Iub2Zmc2V0KVxuICAgICAgfVxuXG4gICAgICBsZXQgcmVjdHM6IFJlY3RbXSB8IERPTVJlY3RMaXN0IHwgZmFsc2UgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuYXdhcmVuZXNzRGVsZWdhdGUpIHtcbiAgICAgICAgcmVjdHMgPSB0aGlzLmF3YXJlbmVzc0RlbGVnYXRlLmdldFJlY3RzKHtcbiAgICAgICAgICBmb2N1c09mZnNldCxcbiAgICAgICAgICBhbmNob3JPZmZzZXQsXG4gICAgICAgICAgZm9jdXNTbG90LFxuICAgICAgICAgIGFuY2hvclNsb3RcbiAgICAgICAgfSwgbmF0aXZlUmFuZ2UpXG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzKSB7XG4gICAgICAgIHJlY3RzID0gbmF0aXZlUmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0aW9uUmVjdHM6IFNlbGVjdGlvblJlY3RbXSA9IFtdXG4gICAgICBmb3IgKGxldCBpID0gcmVjdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2ldXG4gICAgICAgIHNlbGVjdGlvblJlY3RzLnB1c2goe1xuICAgICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICAgIHVzZXJuYW1lOiBpdGVtLnVzZXJuYW1lLFxuICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCxcbiAgICAgICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLm9uUmVjdHNDaGFuZ2UubmV4dChzZWxlY3Rpb25SZWN0cylcblxuICAgICAgY29uc3QgY3Vyc29yUmFuZ2UgPSBuYXRpdmVSYW5nZS5jbG9uZVJhbmdlKClcbiAgICAgIGN1cnNvclJhbmdlLnNldFN0YXJ0KGZvY3VzLm5vZGUsIGZvY3VzLm9mZnNldClcbiAgICAgIGN1cnNvclJhbmdlLmNvbGxhcHNlKHRydWUpXG5cbiAgICAgIGNvbnN0IGN1cnNvclJlY3QgPSBnZXRMYXlvdXRSZWN0QnlSYW5nZShjdXJzb3JSYW5nZSlcblxuICAgICAgY29uc3QgcmVjdDogU2VsZWN0aW9uUmVjdCA9IHtcbiAgICAgICAgdXNlcm5hbWU6IGl0ZW0udXNlcm5hbWUsXG4gICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICBsZWZ0OiBjdXJzb3JSZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQsXG4gICAgICAgIHRvcDogY3Vyc29yUmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcCxcbiAgICAgICAgd2lkdGg6IDIsXG4gICAgICAgIGhlaWdodDogY3Vyc29yUmVjdC5oZWlnaHRcbiAgICAgIH1cbiAgICAgIGlmIChyZWN0LmxlZnQgPCAwIHx8IHJlY3QudG9wIDwgMCB8fCByZWN0LmxlZnQgPiBjb250YWluZXJSZWN0LndpZHRoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXNlcnMucHVzaChyZWN0KVxuICAgIH0pXG4gICAgdGhpcy5kcmF3VXNlckN1cnNvcih1c2VycylcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1VzZXJDdXJzb3IocmVjdHM6IFNlbGVjdGlvblJlY3RbXSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlY3QgPSByZWN0c1tpXVxuICAgICAgY29uc3QgeyBjdXJzb3IsIHVzZXJUaXAsIGFuY2hvciB9ID0gdGhpcy5nZXRVc2VyQ3Vyc29yKGkpXG4gICAgICBPYmplY3QuYXNzaWduKGN1cnNvci5zdHlsZSwge1xuICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyAncHgnLFxuICAgICAgICB0b3A6IHJlY3QudG9wICsgJ3B4JyxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGggKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgYmFja2dyb3VuZDogcmVjdC5jb2xvcixcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfSlcbiAgICAgIGFuY2hvci5zdHlsZS5iYWNrZ3JvdW5kID0gcmVjdC5jb2xvclxuICAgICAgdXNlclRpcC5pbm5lclRleHQgPSByZWN0LnVzZXJuYW1lXG4gICAgICB1c2VyVGlwLnN0eWxlLmJhY2tncm91bmQgPSByZWN0LmNvbG9yXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHJlY3RzLmxlbmd0aDsgaSA8IHRoaXMudG9vbHRpcHMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudG9vbHRpcHMucmVtb3ZlQ2hpbGQodGhpcy50b29sdGlwcy5jaGlsZHJlbltpXSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFVzZXJDdXJzb3IoaW5kZXg6IG51bWJlcik6IFJlbW90ZVNlbGVjdGlvbkN1cnNvciB7XG4gICAgbGV0IGNoaWxkOiBIVE1MRWxlbWVudCA9IHRoaXMudG9vbHRpcHMuY2hpbGRyZW5baW5kZXhdIGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBjaGlsZC5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3Vyc29yOiBjaGlsZCxcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICB1c2VyVGlwOiBhbmNob3IuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXNlclRpcCA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgbGVmdDogJzUwJScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTUwJSknLFxuICAgICAgICBtYXJnaW5Cb3R0b206ICcycHgnLFxuICAgICAgICBib3R0b206ICcxMDAlJyxcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgIGJveFNoYWRvdzogJzAgMXB4IDJweCByZ2JhKDAsMCwwLC4xKScsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzNweCcsXG4gICAgICAgIHBhZGRpbmc6ICczcHggNXB4JyxcbiAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhbmNob3IgPSBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6ICctMnB4JyxcbiAgICAgICAgbGVmdDogJy0ycHgnLFxuICAgICAgICB3aWR0aDogJzZweCcsXG4gICAgICAgIGhlaWdodDogJzZweCcsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgICAgICAgcG9pbnRlcjogJ2N1cnNvcicsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFt1c2VyVGlwXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXIoKSB7XG4gICAgICAgICAgdXNlclRpcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9LFxuICAgICAgICBtb3VzZWxlYXZlKCkge1xuICAgICAgICAgIHVzZXJUaXAuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBjaGlsZCA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgYW5jaG9yXG4gICAgICBdXG4gICAgfSlcbiAgICB0aGlzLnRvb2x0aXBzLmFwcGVuZChjaGlsZClcbiAgICByZXR1cm4ge1xuICAgICAgY3Vyc29yOiBjaGlsZCxcbiAgICAgIGFuY2hvcixcbiAgICAgIHVzZXJUaXBcbiAgICB9XG4gIH1cbn1cbiJdfQ==
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFib3JhdGUtY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbGxhYm9yYXRlLWN1cnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDeEQsT0FBTyxFQUNMLGFBQWEsRUFDYixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsU0FBUyxFQUFxQyxTQUFTLEVBQVEsTUFBTSxlQUFlLENBQUE7QUFDN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBcUJoRSxNQUFNLE9BQWdCLHFDQUFxQztDQUUxRDtBQUdELElBQWEsaUJBQWlCLEdBQTlCLE1BQWEsaUJBQWlCO0lBb0Q1QixZQUE0QyxTQUFzQixFQUNsQyxpQkFBd0QsRUFDcEUsZUFBZ0MsRUFDaEMsU0FBb0IsRUFDcEIsU0FBb0I7UUFKSSxjQUFTLEdBQVQsU0FBUyxDQUFhO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBdUM7UUFDcEUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQXZEaEMsU0FBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDbEMsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixJQUFJLEVBQUUsQ0FBQztnQkFDUCxHQUFHLEVBQUUsQ0FBQztnQkFDTixLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsTUFBTTtnQkFDZCxhQUFhLEVBQUUsTUFBTTtnQkFDckIsTUFBTSxFQUFFLENBQUM7YUFDVjtTQUNGLENBQUMsQ0FBQTtRQUNNLG9CQUFlLEdBQUcsYUFB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UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzQixPQUFPO1lBQ0wsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNO1lBQ04sT0FBTztTQUNSLENBQUE7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQWxRWSxpQkFBaUI7SUFEN0IsVUFBVSxFQUFFO0lBcURFLFdBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3RCLFdBQUEsUUFBUSxFQUFFLENBQUE7cUNBRGdDLFdBQVc7UUFDZixxQ0FBcUM7UUFDbkQsZUFBZTtRQUNyQixTQUFTO1FBQ1QsU0FBUztHQXhEN0IsaUJBQWlCLENBa1E3QjtTQWxRWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQHRhbmJvL2RpJ1xuaW1wb3J0IHtcbiAgY3JlYXRlRWxlbWVudCxcbiAgVklFV19DT05UQUlORVIsXG4gIGdldExheW91dFJlY3RCeVJhbmdlLFxuICBTZWxlY3Rpb25CcmlkZ2Vcbn0gZnJvbSAnQHRleHRidXMvYnJvd3NlcidcbmltcG9ydCB7IFNlbGVjdGlvbiwgU2VsZWN0aW9uUGF0aHMsIEFic3RyYWN0U2VsZWN0aW9uLCBTY2hlZHVsZXIsIFJlY3QgfSBmcm9tICdAdGV4dGJ1cy9jb3JlJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdAdGFuYm8vc3RyZWFtJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVNlbGVjdGlvbiB7XG4gIGlkOiBzdHJpbmdcbiAgY29sb3I6IHN0cmluZ1xuICB1c2VybmFtZTogc3RyaW5nXG4gIHBhdGhzOiBTZWxlY3Rpb25QYXRoc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvblJlY3QgZXh0ZW5kcyBSZWN0IHtcbiAgY29sb3I6IHN0cmluZ1xuICB1c2VybmFtZTogc3RyaW5nXG4gIGlkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdGVTZWxlY3Rpb25DdXJzb3Ige1xuICBjdXJzb3I6IEhUTUxFbGVtZW50XG4gIGFuY2hvcjogSFRNTEVsZW1lbnRcbiAgdXNlclRpcDogSFRNTEVsZW1lbnRcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbGxhYm9yYXRlU2VsZWN0aW9uQXdhcmVuZXNzRGVsZWdhdGUge1xuICBhYnN0cmFjdCBnZXRSZWN0cyhhYnN0cmFjdFNlbGVjdGlvbjogQWJzdHJhY3RTZWxlY3Rpb24sIG5hdGl2ZVJhbmdlOiBSYW5nZSk6IGZhbHNlIHwgUmVjdFtdXG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2xsYWJvcmF0ZUN1cnNvciB7XG4gIHByaXZhdGUgaG9zdCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIHtcbiAgICBzdHlsZXM6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgIHpJbmRleDogMVxuICAgIH1cbiAgfSlcbiAgcHJpdmF0ZSBjYW52YXNDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCB7XG4gICAgc3R5bGVzOiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbidcbiAgICB9XG4gIH0pXG4gIHByaXZhdGUgY2FudmFzID0gY3JlYXRlRWxlbWVudCgnY2FudmFzJywge1xuICAgIHN0eWxlczoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBvcGFjaXR5OiAwLjUsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCArICdweCcsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgfVxuICB9KSBhcyBIVE1MQ2FudmFzRWxlbWVudFxuICBwcml2YXRlIGNvbnRleHQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpIVxuICBwcml2YXRlIHRvb2x0aXBzID0gY3JlYXRlRWxlbWVudCgnZGl2Jywge1xuICAgIHN0eWxlczoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICAgIHpJbmRleDogMTBcbiAgICB9XG4gIH0pXG5cbiAgcHJpdmF0ZSBvblJlY3RzQ2hhbmdlID0gbmV3IFN1YmplY3Q8U2VsZWN0aW9uUmVjdFtdPigpXG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKClcbiAgcHJpdmF0ZSBjdXJyZW50U2VsZWN0aW9uOiBSZW1vdGVTZWxlY3Rpb25bXSA9IFtdXG5cbiAgY29uc3RydWN0b3IoQEluamVjdChWSUVXX0NPTlRBSU5FUikgcHJpdmF0ZSBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGF3YXJlbmVzc0RlbGVnYXRlOiBDb2xsYWJvcmF0ZVNlbGVjdGlvbkF3YXJlbmVzc0RlbGVnYXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIG5hdGl2ZVNlbGVjdGlvbjogU2VsZWN0aW9uQnJpZGdlLFxuICAgICAgICAgICAgICBwcml2YXRlIHNjaGVkdWxlcjogU2NoZWR1bGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uKSB7XG4gICAgdGhpcy5jYW52YXNDb250YWluZXIuYXBwZW5kKHRoaXMuY2FudmFzKVxuICAgIHRoaXMuaG9zdC5hcHBlbmQodGhpcy5jYW52YXNDb250YWluZXIsIHRoaXMudG9vbHRpcHMpXG4gICAgY29udGFpbmVyLnByZXBlbmQodGhpcy5ob3N0KVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm9uUmVjdHNDaGFuZ2Uuc3Vic2NyaWJlKHJlY3RzID0+IHtcbiAgICAgIGZvciAoY29uc3QgcmVjdCBvZiByZWN0cykge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gcmVjdC5jb2xvclxuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKClcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpXG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsKClcbiAgICAgICAgdGhpcy5jb250ZXh0LmNsb3NlUGF0aCgpXG4gICAgICB9XG4gICAgfSksIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCArICdweCdcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfSksIHRoaXMuc2NoZWR1bGVyLm9uRG9jQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKClcbiAgICB9KSlcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5kcmF3KHRoaXMuY3VycmVudFNlbGVjdGlvbilcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgZHJhdyhwYXRoczogUmVtb3RlU2VsZWN0aW9uW10pIHtcbiAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBwYXRoc1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgIHRoaXMuY2FudmFzLnN0eWxlLnRvcCA9IGNvbnRhaW5lclJlY3QudG9wICogLTEgKyAncHgnXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLmNhbnZhcy5vZmZzZXRXaWR0aFxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuY2FudmFzLm9mZnNldEhlaWdodFxuICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodClcblxuICAgIGNvbnN0IHVzZXJzOiBTZWxlY3Rpb25SZWN0W10gPSBbXVxuXG4gICAgcGF0aHMuZmlsdGVyKGkgPT4ge1xuICAgICAgcmV0dXJuIGkucGF0aHMuYW5jaG9yLmxlbmd0aCAmJiBpLnBhdGhzLmZvY3VzLmxlbmd0aFxuICAgIH0pLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBhbmNob3JQYXRocyA9IFsuLi5pdGVtLnBhdGhzLmFuY2hvcl1cbiAgICAgIGNvbnN0IGZvY3VzUGF0aHMgPSBbLi4uaXRlbS5wYXRocy5mb2N1c11cbiAgICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGFuY2hvclBhdGhzLnBvcCgpIVxuICAgICAgY29uc3QgYW5jaG9yU2xvdCA9IHRoaXMuc2VsZWN0aW9uLmZpbmRTbG90QnlQYXRocyhhbmNob3JQYXRocylcbiAgICAgIGNvbnN0IGZvY3VzT2Zmc2V0ID0gZm9jdXNQYXRocy5wb3AoKSFcbiAgICAgIGNvbnN0IGZvY3VzU2xvdCA9IHRoaXMuc2VsZWN0aW9uLmZpbmRTbG90QnlQYXRocyhmb2N1c1BhdGhzKVxuICAgICAgaWYgKCFhbmNob3JTbG90IHx8ICFmb2N1c1Nsb3QpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZm9jdXMsIGFuY2hvciB9ID0gdGhpcy5uYXRpdmVTZWxlY3Rpb24uZ2V0UG9zaXRpb25CeVJhbmdlKHtcbiAgICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICAgIGFuY2hvck9mZnNldCxcbiAgICAgICAgZm9jdXNTbG90LFxuICAgICAgICBhbmNob3JTbG90XG4gICAgICB9KVxuICAgICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbmF0aXZlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICBuYXRpdmVSYW5nZS5zZXRTdGFydChhbmNob3Iubm9kZSwgYW5jaG9yLm9mZnNldClcbiAgICAgIG5hdGl2ZVJhbmdlLnNldEVuZChmb2N1cy5ub2RlLCBmb2N1cy5vZmZzZXQpXG4gICAgICBpZiAoKGFuY2hvci5ub2RlICE9PSBmb2N1cy5ub2RlIHx8IGFuY2hvci5vZmZzZXQgIT09IGZvY3VzLm9mZnNldCkgJiYgbmF0aXZlUmFuZ2UuY29sbGFwc2VkKSB7XG4gICAgICAgIG5hdGl2ZVJhbmdlLnNldFN0YXJ0KGZvY3VzLm5vZGUsIGZvY3VzLm9mZnNldClcbiAgICAgICAgbmF0aXZlUmFuZ2Uuc2V0RW5kKGFuY2hvci5ub2RlLCBhbmNob3Iub2Zmc2V0KVxuICAgICAgfVxuXG4gICAgICBsZXQgcmVjdHM6IFJlY3RbXSB8IERPTVJlY3RMaXN0IHwgZmFsc2UgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuYXdhcmVuZXNzRGVsZWdhdGUpIHtcbiAgICAgICAgcmVjdHMgPSB0aGlzLmF3YXJlbmVzc0RlbGVnYXRlLmdldFJlY3RzKHtcbiAgICAgICAgICBmb2N1c09mZnNldCxcbiAgICAgICAgICBhbmNob3JPZmZzZXQsXG4gICAgICAgICAgZm9jdXNTbG90LFxuICAgICAgICAgIGFuY2hvclNsb3RcbiAgICAgICAgfSwgbmF0aXZlUmFuZ2UpXG4gICAgICB9XG4gICAgICBpZiAoIXJlY3RzKSB7XG4gICAgICAgIHJlY3RzID0gbmF0aXZlUmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKVxuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0aW9uUmVjdHM6IFNlbGVjdGlvblJlY3RbXSA9IFtdXG4gICAgICBmb3IgKGxldCBpID0gcmVjdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2ldXG4gICAgICAgIHNlbGVjdGlvblJlY3RzLnB1c2goe1xuICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgIGNvbG9yOiBpdGVtLmNvbG9yLFxuICAgICAgICAgIHVzZXJuYW1lOiBpdGVtLnVzZXJuYW1lLFxuICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCAtIGNvbnRhaW5lclJlY3QubGVmdCxcbiAgICAgICAgICB0b3A6IHJlY3QudG9wLFxuICAgICAgICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICB0aGlzLm9uUmVjdHNDaGFuZ2UubmV4dChzZWxlY3Rpb25SZWN0cylcblxuICAgICAgY29uc3QgY3Vyc29yUmFuZ2UgPSBuYXRpdmVSYW5nZS5jbG9uZVJhbmdlKClcbiAgICAgIGN1cnNvclJhbmdlLnNldFN0YXJ0KGZvY3VzLm5vZGUsIGZvY3VzLm9mZnNldClcbiAgICAgIGN1cnNvclJhbmdlLmNvbGxhcHNlKHRydWUpXG5cbiAgICAgIGNvbnN0IGN1cnNvclJlY3QgPSBnZXRMYXlvdXRSZWN0QnlSYW5nZShjdXJzb3JSYW5nZSlcblxuICAgICAgY29uc3QgcmVjdDogU2VsZWN0aW9uUmVjdCA9IHtcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgIHVzZXJuYW1lOiBpdGVtLnVzZXJuYW1lLFxuICAgICAgICBjb2xvcjogaXRlbS5jb2xvcixcbiAgICAgICAgbGVmdDogY3Vyc29yUmVjdC5sZWZ0IC0gY29udGFpbmVyUmVjdC5sZWZ0LFxuICAgICAgICB0b3A6IGN1cnNvclJlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3AsXG4gICAgICAgIHdpZHRoOiAyLFxuICAgICAgICBoZWlnaHQ6IGN1cnNvclJlY3QuaGVpZ2h0XG4gICAgICB9XG4gICAgICBpZiAocmVjdC5sZWZ0IDwgMCB8fCByZWN0LnRvcCA8IDAgfHwgcmVjdC5sZWZ0ID4gY29udGFpbmVyUmVjdC53aWR0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVzZXJzLnB1c2gocmVjdClcbiAgICB9KVxuICAgIHRoaXMuZHJhd1VzZXJDdXJzb3IodXNlcnMpXG4gIH1cblxuICBwcm90ZWN0ZWQgZHJhd1VzZXJDdXJzb3IocmVjdHM6IFNlbGVjdGlvblJlY3RbXSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlY3QgPSByZWN0c1tpXVxuICAgICAgY29uc3QgeyBjdXJzb3IsIHVzZXJUaXAsIGFuY2hvciB9ID0gdGhpcy5nZXRVc2VyQ3Vyc29yKGkpXG4gICAgICBPYmplY3QuYXNzaWduKGN1cnNvci5zdHlsZSwge1xuICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyAncHgnLFxuICAgICAgICB0b3A6IHJlY3QudG9wICsgJ3B4JyxcbiAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGggKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgYmFja2dyb3VuZDogcmVjdC5jb2xvcixcbiAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgfSlcbiAgICAgIGFuY2hvci5zdHlsZS5iYWNrZ3JvdW5kID0gcmVjdC5jb2xvclxuICAgICAgdXNlclRpcC5pbm5lclRleHQgPSByZWN0LnVzZXJuYW1lXG4gICAgICB1c2VyVGlwLnN0eWxlLmJhY2tncm91bmQgPSByZWN0LmNvbG9yXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHJlY3RzLmxlbmd0aDsgaSA8IHRoaXMudG9vbHRpcHMuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudG9vbHRpcHMucmVtb3ZlQ2hpbGQodGhpcy50b29sdGlwcy5jaGlsZHJlbltpXSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFVzZXJDdXJzb3IoaW5kZXg6IG51bWJlcik6IFJlbW90ZVNlbGVjdGlvbkN1cnNvciB7XG4gICAgbGV0IGNoaWxkOiBIVE1MRWxlbWVudCA9IHRoaXMudG9vbHRpcHMuY2hpbGRyZW5baW5kZXhdIGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKGNoaWxkKSB7XG4gICAgICBjb25zdCBhbmNob3IgPSBjaGlsZC5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3Vyc29yOiBjaGlsZCxcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICB1c2VyVGlwOiBhbmNob3IuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdXNlclRpcCA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgbGVmdDogJzUwJScsXG4gICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoLTUwJSknLFxuICAgICAgICBtYXJnaW5Cb3R0b206ICcycHgnLFxuICAgICAgICBib3R0b206ICcxMDAlJyxcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICAgIGJveFNoYWRvdzogJzAgMXB4IDJweCByZ2JhKDAsMCwwLC4xKScsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzNweCcsXG4gICAgICAgIHBhZGRpbmc6ICczcHggNXB4JyxcbiAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBhbmNob3IgPSBjcmVhdGVFbGVtZW50KCdzcGFuJywge1xuICAgICAgc3R5bGVzOiB7XG4gICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICB0b3A6ICctMnB4JyxcbiAgICAgICAgbGVmdDogJy0ycHgnLFxuICAgICAgICB3aWR0aDogJzZweCcsXG4gICAgICAgIGhlaWdodDogJzZweCcsXG4gICAgICAgIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgICAgICAgcG9pbnRlcjogJ2N1cnNvcicsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFt1c2VyVGlwXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXIoKSB7XG4gICAgICAgICAgdXNlclRpcC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgICAgICB9LFxuICAgICAgICBtb3VzZWxlYXZlKCkge1xuICAgICAgICAgIHVzZXJUaXAuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICBjaGlsZCA9IGNyZWF0ZUVsZW1lbnQoJ3NwYW4nLCB7XG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgYW5jaG9yXG4gICAgICBdXG4gICAgfSlcbiAgICB0aGlzLnRvb2x0aXBzLmFwcGVuZChjaGlsZClcbiAgICByZXR1cm4ge1xuICAgICAgY3Vyc29yOiBjaGlsZCxcbiAgICAgIGFuY2hvcixcbiAgICAgIHVzZXJUaXBcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,17 +1,34 @@
1
- import { Observable } from '@tanbo/stream';
2
- import { Controller, History, Registry, RootComponentRef, Scheduler, Selection, SelectionPaths, Starter, Translator } from '@textbus/core';
3
- import { Doc as YDoc } from 'yjs';
1
+ import { Observable, Subject, Subscription } from '@tanbo/stream';
2
+ import { ComponentInstance, Controller, History, Registry, RootComponentRef, Scheduler, Selection, SelectionPaths, Slot, Starter, Translator } from '@textbus/core';
3
+ import { Array as YArray, Doc as YDoc, Map as YMap, RelativePosition, Text as YText, Transaction, UndoManager } from 'yjs';
4
4
  import { CollaborateCursor, RemoteSelection } from './collaborate-cursor';
5
+ interface CursorPosition {
6
+ anchor: RelativePosition;
7
+ focus: RelativePosition;
8
+ }
9
+ declare class ContentMap {
10
+ private slotAndYTextMap;
11
+ private yTextAndSLotMap;
12
+ set(key: Slot, value: YText): void;
13
+ set(key: YText, value: Slot): void;
14
+ get(key: Slot): YText | null;
15
+ get(key: YText): Slot | null;
16
+ delete(key: Slot | YText): void;
17
+ }
18
+ interface UpdateItem {
19
+ record: boolean;
20
+ action(): void;
21
+ }
5
22
  export declare class Collaborate implements History {
6
- private stackSize;
7
- private rootComponentRef;
8
- private collaborateCursor;
9
- private controller;
10
- private scheduler;
11
- private translator;
12
- private registry;
13
- private selection;
14
- private starter;
23
+ protected stackSize: number;
24
+ protected rootComponentRef: RootComponentRef;
25
+ protected collaborateCursor: CollaborateCursor;
26
+ protected controller: Controller;
27
+ protected scheduler: Scheduler;
28
+ protected translator: Translator;
29
+ protected registry: Registry;
30
+ protected selection: Selection;
31
+ protected starter: Starter;
15
32
  onSelectionChange: Observable<SelectionPaths>;
16
33
  yDoc: YDoc;
17
34
  onBack: Observable<void>;
@@ -20,21 +37,21 @@ export declare class Collaborate implements History {
20
37
  onPush: Observable<void>;
21
38
  get canBack(): boolean;
22
39
  get canForward(): boolean;
23
- private backEvent;
24
- private forwardEvent;
25
- private changeEvent;
26
- private pushEvent;
27
- private manager;
28
- private subscriptions;
29
- private updateFromRemote;
30
- private contentSyncCaches;
31
- private slotStateSyncCaches;
32
- private slotsSyncCaches;
33
- private componentStateSyncCaches;
34
- private selectionChangeEvent;
35
- private contentMap;
36
- private updateRemoteActions;
37
- private noRecord;
40
+ protected backEvent: Subject<void>;
41
+ protected forwardEvent: Subject<void>;
42
+ protected changeEvent: Subject<void>;
43
+ protected pushEvent: Subject<void>;
44
+ protected manager: UndoManager | null;
45
+ protected subscriptions: Subscription[];
46
+ protected updateFromRemote: boolean;
47
+ protected contentSyncCaches: WeakMap<Slot<any>, () => void>;
48
+ protected slotStateSyncCaches: WeakMap<Slot<any>, () => void>;
49
+ protected slotsSyncCaches: WeakMap<ComponentInstance<import("@textbus/core").ComponentExtends, any, unknown>, () => void>;
50
+ protected componentStateSyncCaches: WeakMap<ComponentInstance<import("@textbus/core").ComponentExtends, any, unknown>, () => void>;
51
+ protected selectionChangeEvent: Subject<SelectionPaths>;
52
+ protected contentMap: ContentMap;
53
+ protected updateRemoteActions: Array<UpdateItem>;
54
+ protected noRecord: {};
38
55
  constructor(stackSize: number, rootComponentRef: RootComponentRef, collaborateCursor: CollaborateCursor, controller: Controller, scheduler: Scheduler, translator: Translator, registry: Registry, selection: Selection, starter: Starter);
39
56
  listen(): void;
40
57
  updateRemoteSelection(paths: RemoteSelection[]): void;
@@ -42,19 +59,20 @@ export declare class Collaborate implements History {
42
59
  forward(): void;
43
60
  clear(): void;
44
61
  destroy(): void;
45
- private syncRootComponent;
46
- private restoreCursorLocation;
47
- private getRelativeCursorLocation;
48
- private syncContent;
49
- private syncSlot;
50
- private syncSlots;
51
- private syncComponent;
52
- private runLocalUpdate;
53
- private runRemoteUpdate;
54
- private createSharedComponentByComponent;
55
- private createSharedSlotBySlot;
56
- private createComponentBySharedComponent;
57
- private createSlotBySharedSlot;
58
- private cleanSubscriptionsBySlot;
59
- private cleanSubscriptionsByComponent;
62
+ protected syncRootComponent(root: YMap<any>, rootComponent: ComponentInstance): void;
63
+ protected restoreCursorLocation(position: CursorPosition): void;
64
+ protected getRelativeCursorLocation(): CursorPosition | null;
65
+ protected syncContent(content: YText, slot: Slot): void;
66
+ protected syncSlot(remoteSlot: YMap<any>, slot: Slot): void;
67
+ protected syncSlots(remoteSlots: YArray<any>, component: ComponentInstance): void;
68
+ protected syncComponent(remoteComponent: YMap<any>, component: ComponentInstance): void;
69
+ protected runLocalUpdate(fn: () => void, record?: boolean): void;
70
+ protected runRemoteUpdate(tr: Transaction, fn: () => void): void;
71
+ protected createSharedComponentByComponent(component: ComponentInstance): YMap<any>;
72
+ protected createSharedSlotBySlot(slot: Slot): YMap<any>;
73
+ protected createComponentBySharedComponent(yMap: YMap<any>, canInsertInlineComponent: boolean): ComponentInstance;
74
+ protected createSlotBySharedSlot(sharedSlot: YMap<any>): Slot;
75
+ protected cleanSubscriptionsBySlot(slot: Slot): void;
76
+ protected cleanSubscriptionsByComponent(component: ComponentInstance): void;
60
77
  }
78
+ export {};
@@ -680,4 +680,4 @@ function remoteFormatsToLocal(registry, attrs) {
680
680
  }
681
681
  return formats;
682
682
  }
683
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFib3JhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29sbGFib3JhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxlQUFlLENBQUE7QUFDckYsT0FBTyxFQUNMLFlBQVksRUFFWixXQUFXLEVBQ1gsVUFBVSxFQUdWLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsU0FBUyxFQUVULElBQUksRUFDSixPQUFPLEVBQ1AsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFDTCxLQUFLLElBQUksTUFBTSxFQUNmLEdBQUcsSUFBSSxJQUFJLEVBQ1gsR0FBRyxJQUFJLElBQUksRUFFWCxJQUFJLElBQUksS0FBSyxFQUViLFdBQVcsRUFDWCwwQ0FBMEMsRUFDMUMsbUNBQW1DLEVBQ3BDLE1BQU0sS0FBSyxDQUFBO0FBRVosT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHNCQUFzQixDQUFBO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTVELE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBT25ELE1BQU0sVUFBVTtJQUFoQjtRQUNVLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQTtRQUM1QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUE7SUFzQ3RELENBQUM7SUFsQ0MsR0FBRyxDQUFDLEdBQVEsRUFBRSxLQUFVO1FBQ3RCLElBQUksR0FBRyxZQUFZLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVB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QjtRQUN4QixVQUFVO1FBQ1gsU0FBUztRQUNSLFVBQVU7UUFDWixRQUFRO1FBQ1AsU0FBUztRQUNYLE9BQU87R0E3Q3pCLFdBQVcsQ0E4bUJ2QjtTQTltQlksV0FBVztBQWduQnhCLFNBQVMsb0JBQW9CLENBQUMsUUFBa0IsRUFBRSxLQUFXO0lBQzNELE1BQU0sT0FBTyxHQUFZLEVBQUUsQ0FBQTtJQUMzQixJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDNUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ3RDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7S0FDSDtJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAdGFuYm8vZGknXG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ0B0YW5iby9zdHJlYW0nXG5pbXBvcnQge1xuICBDaGFuZ2VPcmlnaW4sXG4gIENvbXBvbmVudEluc3RhbmNlLFxuICBDb250ZW50VHlwZSxcbiAgQ29udHJvbGxlcixcbiAgRm9ybWF0cyxcbiAgSGlzdG9yeSxcbiAgSElTVE9SWV9TVEFDS19TSVpFLFxuICBtYWtlRXJyb3IsXG4gIFJlZ2lzdHJ5LFxuICBSb290Q29tcG9uZW50UmVmLFxuICBTY2hlZHVsZXIsXG4gIFNlbGVjdGlvbixcbiAgU2VsZWN0aW9uUGF0aHMsXG4gIFNsb3QsXG4gIFN0YXJ0ZXIsXG4gIFRyYW5zbGF0b3Jcbn0gZnJvbSAnQHRleHRidXMvY29yZSdcbmltcG9ydCB7XG4gIEFycmF5IGFzIFlBcnJheSxcbiAgRG9jIGFzIFlEb2MsXG4gIE1hcCBhcyBZTWFwLFxuICBSZWxhdGl2ZVBvc2l0aW9uLFxuICBUZXh0IGFzIFlUZXh0LFxuICBUcmFuc2FjdGlvbixcbiAgVW5kb01hbmFnZXIsXG4gIGNyZWF0ZUFic29sdXRlUG9zaXRpb25Gcm9tUmVsYXRpdmVQb3NpdGlvbixcbiAgY3JlYXRlUmVsYXRpdmVQb3NpdGlvbkZyb21UeXBlSW5kZXhcbn0gZnJvbSAneWpzJ1xuXG5pbXBvcnQgeyBDb2xsYWJvcmF0ZUN1cnNvciwgUmVtb3RlU2VsZWN0aW9uIH0gZnJvbSAnLi9jb2xsYWJvcmF0ZS1jdXJzb3InXG5pbXBvcnQgeyBjcmVhdGVVbmtub3duQ29tcG9uZW50IH0gZnJvbSAnLi91bmtub3duLmNvbXBvbmVudCdcblxuY29uc3QgY29sbGFib3JhdGVFcnJvckZuID0gbWFrZUVycm9yKCdDb2xsYWJvcmF0ZScpXG5cbmludGVyZmFjZSBDdXJzb3JQb3NpdGlvbiB7XG4gIGFuY2hvcjogUmVsYXRpdmVQb3NpdGlvblxuICBmb2N1czogUmVsYXRpdmVQb3NpdGlvblxufVxuXG5jbGFzcyBDb250ZW50TWFwIHtcbiAgcHJpdmF0ZSBzbG90QW5kWVRleHRNYXAgPSBuZXcgV2Vha01hcDxTbG90LCBZVGV4dD4oKVxuICBwcml2YXRlIHlUZXh0QW5kU0xvdE1hcCA9IG5ldyBXZWFrTWFwPFlUZXh0LCBTbG90PigpXG5cbiAgc2V0KGtleTogU2xvdCwgdmFsdWU6IFlUZXh0KTogdm9pZFxuICBzZXQoa2V5OiBZVGV4dCwgdmFsdWU6IFNsb3QpOiB2b2lkXG4gIHNldChrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBTbG90KSB7XG4gICAgICB0aGlzLnNsb3RBbmRZVGV4dE1hcC5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgIHRoaXMueVRleHRBbmRTTG90TWFwLnNldCh2YWx1ZSwga2V5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNsb3RBbmRZVGV4dE1hcC5zZXQodmFsdWUsIGtleSlcbiAgICAgIHRoaXMueVRleHRBbmRTTG90TWFwLnNldChrZXksIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIGdldChrZXk6IFNsb3QpOiBZVGV4dCB8IG51bGxcbiAgZ2V0KGtleTogWVRleHQpOiBTbG90IHwgbnVsbFxuICBnZXQoa2V5OiBhbnkpIHtcbiAgICBpZiAoa2V5IGluc3RhbmNlb2YgU2xvdCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2xvdEFuZFlUZXh0TWFwLmdldChrZXkpIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMueVRleHRBbmRTTG90TWFwLmdldChrZXkpIHx8IG51bGxcbiAgfVxuXG4gIGRlbGV0ZShrZXk6IFNsb3QgfCBZVGV4dCkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBTbG90KSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy5zbG90QW5kWVRleHRNYXAuZ2V0KGtleSlcbiAgICAgIHRoaXMuc2xvdEFuZFlUZXh0TWFwLmRlbGV0ZShrZXkpXG4gICAgICBpZiAodikge1xuICAgICAgICB0aGlzLnlUZXh0QW5kU0xvdE1hcC5kZWxldGUodilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdiA9IHRoaXMueVRleHRBbmRTTG90TWFwLmdldChrZXkpXG4gICAgICB0aGlzLnlUZXh0QW5kU0xvdE1hcC5kZWxldGUoa2V5KVxuICAgICAgaWYgKHYpIHtcbiAgICAgICAgdGhpcy5zbG90QW5kWVRleHRNYXAuZGVsZXRlKHYpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBVcGRhdGUge1xuICByZWNvcmQ6IGJvb2xlYW5cbiAgYWN0aW9uczogQXJyYXk8KCkgPT4gdm9pZD5cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZUl0ZW0ge1xuICByZWNvcmQ6IGJvb2xlYW5cblxuICBhY3Rpb24oKTogdm9pZFxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sbGFib3JhdGUgaW1wbGVtZW50cyBIaXN0b3J5IHtcbiAgb25TZWxlY3Rpb25DaGFuZ2U6IE9ic2VydmFibGU8U2VsZWN0aW9uUGF0aHM+XG4gIHlEb2MgPSBuZXcgWURvYygpXG4gIG9uQmFjazogT2JzZXJ2YWJsZTx2b2lkPlxuICBvbkZvcndhcmQ6IE9ic2VydmFibGU8dm9pZD5cbiAgb25DaGFuZ2U6IE9ic2VydmFibGU8dm9pZD5cbiAgb25QdXNoOiBPYnNlcnZhYmxlPHZvaWQ+XG5cbiAgZ2V0IGNhbkJhY2soKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlcj8uY2FuVW5kbygpIHx8IGZhbHNlXG4gIH1cblxuICBnZXQgY2FuRm9yd2FyZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VyPy5jYW5SZWRvKCkgfHwgZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYmFja0V2ZW50ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuICBwcml2YXRlIGZvcndhcmRFdmVudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgcHJpdmF0ZSBjaGFuZ2VFdmVudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgcHJpdmF0ZSBwdXNoRXZlbnQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgcHJpdmF0ZSBtYW5hZ2VyOiBVbmRvTWFuYWdlciB8IG51bGwgPSBudWxsXG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdXG4gIHByaXZhdGUgdXBkYXRlRnJvbVJlbW90ZSA9IGZhbHNlXG5cbiAgcHJpdmF0ZSBjb250ZW50U3luY0NhY2hlcyA9IG5ldyBXZWFrTWFwPFNsb3QsICgpID0+IHZvaWQ+KClcbiAgcHJpdmF0ZSBzbG90U3RhdGVTeW5jQ2FjaGVzID0gbmV3IFdlYWtNYXA8U2xvdCwgKCkgPT4gdm9pZD4oKVxuICBwcml2YXRlIHNsb3RzU3luY0NhY2hlcyA9IG5ldyBXZWFrTWFwPENvbXBvbmVudEluc3RhbmNlLCAoKSA9PiB2b2lkPigpXG4gIHByaXZhdGUgY29tcG9uZW50U3RhdGVTeW5jQ2FjaGVzID0gbmV3IFdlYWtNYXA8Q29tcG9uZW50SW5zdGFuY2UsICgpID0+IHZvaWQ+KClcblxuICBwcml2YXRlIHNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gbmV3IFN1YmplY3Q8U2VsZWN0aW9uUGF0aHM+KClcbiAgcHJpdmF0ZSBjb250ZW50TWFwID0gbmV3IENvbnRlbnRNYXAoKVxuXG4gIHByaXZhdGUgdXBkYXRlUmVtb3RlQWN0aW9uczogQXJyYXk8VXBkYXRlSXRlbT4gPSBbXVxuICBwcml2YXRlIG5vUmVjb3JkID0ge31cblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEhJU1RPUllfU1RBQ0tfU0laRSkgcHJpdmF0ZSBzdGFja1NpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSByb290Q29tcG9uZW50UmVmOiBSb290Q29tcG9uZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGNvbGxhYm9yYXRlQ3Vyc29yOiBDb2xsYWJvcmF0ZUN1cnNvcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHNjaGVkdWxlcjogU2NoZWR1bGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHRyYW5zbGF0b3I6IFRyYW5zbGF0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVnaXN0cnk6IFJlZ2lzdHJ5LFxuICAgICAgICAgICAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uLFxuICAgICAgICAgICAgICBwcml2YXRlIHN0YXJ0ZXI6IFN0YXJ0ZXIpIHtcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5zZWxlY3Rpb25DaGFuZ2VFdmVudC5hc09ic2VydmFibGUoKS5waXBlKGRlbGF5KCkpXG4gICAgdGhpcy5vbkJhY2sgPSB0aGlzLmJhY2tFdmVudC5hc09ic2VydmFibGUoKVxuICAgIHRoaXMub25Gb3J3YXJkID0gdGhpcy5mb3J3YXJkRXZlbnQuYXNPYnNlcnZhYmxlKClcbiAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5jaGFuZ2VFdmVudC5hc09ic2VydmFibGUoKVxuICAgIHRoaXMub25QdXNoID0gdGhpcy5wdXNoRXZlbnQuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIGxpc3RlbigpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy55RG9jLmdldE1hcCgnUm9vdENvbXBvbmVudCcpXG4gICAgY29uc3Qgcm9vdENvbXBvbmVudCA9IHRoaXMucm9vdENvbXBvbmVudFJlZi5jb21wb25lbnQhXG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFVuZG9NYW5hZ2VyKHJvb3QsIHtcbiAgICAgIHRyYWNrZWRPcmlnaW5zOiBuZXcgU2V0PGFueT4oW3RoaXMueURvY10pXG4gICAgfSlcbiAgICBjb25zdCBjdXJzb3JLZXkgPSAnY3Vyc29yLXBvc2l0aW9uJ1xuICAgIHRoaXMubWFuYWdlci5vbignc3RhY2staXRlbS1hZGRlZCcsIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnN0YWNrSXRlbS5tZXRhLnNldChjdXJzb3JLZXksIHRoaXMuZ2V0UmVsYXRpdmVDdXJzb3JMb2NhdGlvbigpKVxuICAgICAgaWYgKHRoaXMubWFuYWdlciEudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMuc3RhY2tTaXplKSB7XG4gICAgICAgIHRoaXMubWFuYWdlciEudW5kb1N0YWNrLnNoaWZ0KClcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5vcmlnaW4gPT09IHRoaXMueURvYykge1xuICAgICAgICB0aGlzLnB1c2hFdmVudC5uZXh0KClcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRXZlbnQubmV4dCgpXG4gICAgfSlcbiAgICB0aGlzLm1hbmFnZXIub24oJ3N0YWNrLWl0ZW0tcG9wcGVkJywgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBldmVudC5zdGFja0l0ZW0ubWV0YS5nZXQoY3Vyc29yS2V5KSBhcyBDdXJzb3JQb3NpdGlvblxuICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZUN1cnNvckxvY2F0aW9uKHBvc2l0aW9uKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnNlbGVjdGlvbi5vbkNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IHRoaXMuc2VsZWN0aW9uLmdldFBhdGhzKClcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VFdmVudC5uZXh0KHBhdGhzKVxuICAgICAgfSksXG4gICAgICB0aGlzLnNjaGVkdWxlci5vbkRvY0NoYW5nZWQucGlwZShcbiAgICAgICAgbWFwKGl0ZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLmZpbHRlcihpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpLmZyb20gIT09IENoYW5nZU9yaWdpbi5SZW1vdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLmxlbmd0aFxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVzOiBVcGRhdGVbXSA9IFtdXG5cbiAgICAgICAgbGV0IHVwZGF0ZTogVXBkYXRlIHwgbnVsbCA9IG51bGxcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy51cGRhdGVSZW1vdGVBY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGUpIHtcbiAgICAgICAgICAgIHVwZGF0ZSA9IHtcbiAgICAgICAgICAgICAgcmVjb3JkOiBpdGVtLnJlY29yZCxcbiAgICAgICAgICAgICAgYWN0aW9uczogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1cGRhdGUucmVjb3JkID09PSBpdGVtLnJlY29yZCkge1xuICAgICAgICAgICAgdXBkYXRlLmFjdGlvbnMucHVzaChpdGVtLmFjdGlvbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlID0ge1xuICAgICAgICAgICAgICByZWNvcmQ6IGl0ZW0ucmVjb3JkLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbaXRlbS5hY3Rpb25dXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVzLnB1c2godXBkYXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUmVtb3RlQWN0aW9ucyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHVwZGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLnlEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb25zLmZvckVhY2goZm4gPT4ge1xuICAgICAgICAgICAgICBmbigpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIGl0ZW0ucmVjb3JkID8gdGhpcy55RG9jIDogdGhpcy5ub1JlY29yZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICAgdGhpcy5zeW5jUm9vdENvbXBvbmVudChyb290LCByb290Q29tcG9uZW50KVxuICB9XG5cbiAgdXBkYXRlUmVtb3RlU2VsZWN0aW9uKHBhdGhzOiBSZW1vdGVTZWxlY3Rpb25bXSkge1xuICAgIHRoaXMuY29sbGFib3JhdGVDdXJzb3IuZHJhdyhwYXRocylcbiAgfVxuXG4gIGJhY2soKSB7XG4gICAgaWYgKHRoaXMuY2FuQmFjaykge1xuICAgICAgdGhpcy5tYW5hZ2VyPy51bmRvKClcbiAgICAgIHRoaXMuYmFja0V2ZW50Lm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIGZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY2FuRm9yd2FyZCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5yZWRvKClcbiAgICAgIHRoaXMuZm9yd2FyZEV2ZW50Lm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMubWFuYWdlcj8uY2xlYXIoKVxuICAgIHRoaXMuY2hhbmdlRXZlbnQubmV4dCgpXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGkgPT4gaS51bnN1YnNjcmliZSgpKVxuICAgIHRoaXMuY29sbGFib3JhdGVDdXJzb3IuZGVzdHJveSgpXG4gICAgdGhpcy5tYW5hZ2VyPy5kZXN0cm95KClcbiAgfVxuXG4gIHByaXZhdGUgc3luY1Jvb3RDb21wb25lbnQocm9vdDogWU1hcDxhbnk+LCByb290Q29tcG9uZW50OiBDb21wb25lbnRJbnN0YW5jZSkge1xuICAgIGxldCBzbG90cyA9IHJvb3QuZ2V0KCdzbG90cycpIGFzIFlBcnJheTxZTWFwPGFueT4+XG4gICAgaWYgKCFzbG90cykge1xuICAgICAgc2xvdHMgPSBuZXcgWUFycmF5KClcbiAgICAgIHJvb3RDb21wb25lbnQuc2xvdHMudG9BcnJheSgpLmZvckVhY2goaSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYXJlZFNsb3QgPSB0aGlzLmNyZWF0ZVNoYXJlZFNsb3RCeVNsb3QoaSlcbiAgICAgICAgc2xvdHMucHVzaChbc2hhcmVkU2xvdF0pXG4gICAgICB9KVxuICAgICAgdGhpcy55RG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgcm9vdC5zZXQoJ3N0YXRlJywgcm9vdENvbXBvbmVudC5zdGF0ZSlcbiAgICAgICAgcm9vdC5zZXQoJ3Nsb3RzJywgc2xvdHMpXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoc2xvdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByb290Q29tcG9uZW50LnVwZGF0ZVN0YXRlKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJvb3QuZ2V0KCdzdGF0ZScpXG4gICAgICB9KVxuICAgICAgdGhpcy55RG9jLnRyYW5zYWN0KCgpID0+IHtcbiAgICAgICAgcm9vdENvbXBvbmVudC5zbG90cy50b0FycmF5KCkuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICBjb25zdCBzaGFyZWRTbG90ID0gdGhpcy5jcmVhdGVTaGFyZWRTbG90QnlTbG90KGkpXG4gICAgICAgICAgc2xvdHMucHVzaChbc2hhcmVkU2xvdF0pXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb290Q29tcG9uZW50LnVwZGF0ZVN0YXRlKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJvb3QuZ2V0KCdzdGF0ZScpXG4gICAgICB9KVxuICAgICAgcm9vdENvbXBvbmVudC5zbG90cy5jbGVhbigpXG4gICAgICBzbG90cy5mb3JFYWNoKHNoYXJlZFNsb3QgPT4ge1xuICAgICAgICBjb25zdCBzbG90ID0gdGhpcy5jcmVhdGVTbG90QnlTaGFyZWRTbG90KHNoYXJlZFNsb3QpXG4gICAgICAgIHRoaXMuc3luY0NvbnRlbnQoc2hhcmVkU2xvdC5nZXQoJ2NvbnRlbnQnKSwgc2xvdClcbiAgICAgICAgdGhpcy5zeW5jU2xvdChzaGFyZWRTbG90LCBzbG90KVxuICAgICAgICByb290Q29tcG9uZW50LnNsb3RzLmluc2VydChzbG90KVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5zeW5jQ29tcG9uZW50KHJvb3QsIHJvb3RDb21wb25lbnQpXG4gICAgdGhpcy5zeW5jU2xvdHMoc2xvdHMsIHJvb3RDb21wb25lbnQpXG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVDdXJzb3JMb2NhdGlvbihwb3NpdGlvbjogQ3Vyc29yUG9zaXRpb24pIHtcbiAgICBjb25zdCBhbmNob3JQb3NpdGlvbiA9IGNyZWF0ZUFic29sdXRlUG9zaXRpb25Gcm9tUmVsYXRpdmVQb3NpdGlvbihwb3NpdGlvbi5hbmNob3IsIHRoaXMueURvYylcbiAgICBjb25zdCBmb2N1c1Bvc2l0aW9uID0gY3JlYXRlQWJzb2x1dGVQb3NpdGlvbkZyb21SZWxhdGl2ZVBvc2l0aW9uKHBvc2l0aW9uLmZvY3VzLCB0aGlzLnlEb2MpXG4gICAgaWYgKGFuY2hvclBvc2l0aW9uICYmIGZvY3VzUG9zaXRpb24pIHtcbiAgICAgIGNvbnN0IGZvY3VzU2xvdCA9IHRoaXMuY29udGVudE1hcC5nZXQoZm9jdXNQb3NpdGlvbi50eXBlIGFzIFlUZXh0KVxuICAgICAgY29uc3QgYW5jaG9yU2xvdCA9IHRoaXMuY29udGVudE1hcC5nZXQoYW5jaG9yUG9zaXRpb24udHlwZSBhcyBZVGV4dClcbiAgICAgIGlmIChmb2N1c1Nsb3QgJiYgYW5jaG9yU2xvdCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KGFuY2hvclNsb3QsIGFuY2hvclBvc2l0aW9uLmluZGV4LCBmb2N1c1Nsb3QsIGZvY3VzUG9zaXRpb24uaW5kZXgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbi51blNlbGVjdCgpXG4gIH1cblxuICBwcml2YXRlIGdldFJlbGF0aXZlQ3Vyc29yTG9jYXRpb24oKTogQ3Vyc29yUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCB7IGFuY2hvclNsb3QsIGFuY2hvck9mZnNldCwgZm9jdXNTbG90LCBmb2N1c09mZnNldCB9ID0gdGhpcy5zZWxlY3Rpb25cbiAgICBpZiAoYW5jaG9yU2xvdCkge1xuICAgICAgY29uc3QgYW5jaG9yWVRleHQgPSB0aGlzLmNvbnRlbnRNYXAuZ2V0KGFuY2hvclNsb3QpXG4gICAgICBpZiAoYW5jaG9yWVRleHQpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yUG9zaXRpb24gPSBjcmVhdGVSZWxhdGl2ZVBvc2l0aW9uRnJvbVR5cGVJbmRleChhbmNob3JZVGV4dCwgYW5jaG9yT2Zmc2V0ISlcbiAgICAgICAgaWYgKGZvY3VzU2xvdCkge1xuICAgICAgICAgIGNvbnN0IGZvY3VzWVRleHQgPSB0aGlzLmNvbnRlbnRNYXAuZ2V0KGZvY3VzU2xvdClcbiAgICAgICAgICBpZiAoZm9jdXNZVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNQb3NpdGlvbiA9IGNyZWF0ZVJlbGF0aXZlUG9zaXRpb25Gcm9tVHlwZUluZGV4KGZvY3VzWVRleHQsIGZvY3VzT2Zmc2V0ISlcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGZvY3VzOiBmb2N1c1Bvc2l0aW9uLFxuICAgICAgICAgICAgICBhbmNob3I6IGFuY2hvclBvc2l0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBwcml2YXRlIHN5bmNDb250ZW50KGNvbnRlbnQ6IFlUZXh0LCBzbG90OiBTbG90KSB7XG4gICAgdGhpcy5jb250ZW50TWFwLnNldChzbG90LCBjb250ZW50KVxuICAgIGNvbnN0IHN5bmNSZW1vdGUgPSAoZXYsIHRyKSA9PiB7XG4gICAgICB0aGlzLnJ1blJlbW90ZVVwZGF0ZSh0ciwgKCkgPT4ge1xuICAgICAgICBzbG90LnJldGFpbigwKVxuICAgICAgICBldi5kZWx0YS5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKFJlZmxlY3QuaGFzKGFjdGlvbiwgJ3JldGFpbicpKSB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZm9ybWF0cyA9IHJlbW90ZUZvcm1hdHNUb0xvY2FsKHRoaXMucmVnaXN0cnksIGFjdGlvbi5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICBpZiAoZm9ybWF0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzbG90LnJldGFpbihhY3Rpb24ucmV0YWluISwgZm9ybWF0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzbG90LnJldGFpbihzbG90LmluZGV4ICsgYWN0aW9uLnJldGFpbilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNsb3QucmV0YWluKGFjdGlvbi5yZXRhaW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uaW5zZXJ0KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNsb3QuaW5kZXhcbiAgICAgICAgICAgIGxldCBsZW5ndGggPSAxXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5pbnNlcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIGxlbmd0aCA9IGFjdGlvbi5pbnNlcnQubGVuZ3RoXG4gICAgICAgICAgICAgIHNsb3QuaW5zZXJ0KGFjdGlvbi5pbnNlcnQsIHJlbW90ZUZvcm1hdHNUb0xvY2FsKHRoaXMucmVnaXN0cnksIGFjdGlvbi5hdHRyaWJ1dGVzKSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNoYXJlZENvbXBvbmVudCA9IGFjdGlvbi5pbnNlcnQgYXMgWU1hcDxhbnk+XG4gICAgICAgICAgICAgIGNvbnN0IGNhbkluc2VydElubGluZUNvbXBvbmVudCA9IHNsb3Quc2NoZW1hLmluY2x1ZGVzKENvbnRlbnRUeXBlLklubGluZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jcmVhdGVDb21wb25lbnRCeVNoYXJlZENvbXBvbmVudChzaGFyZWRDb21wb25lbnQsIGNhbkluc2VydElubGluZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgdGhpcy5zeW5jU2xvdHMoc2hhcmVkQ29tcG9uZW50LmdldCgnc2xvdHMnKSwgY29tcG9uZW50KVxuICAgICAgICAgICAgICB0aGlzLnN5bmNDb21wb25lbnQoc2hhcmVkQ29tcG9uZW50LCBjb21wb25lbnQpXG4gICAgICAgICAgICAgIHNsb3QuaW5zZXJ0KGNvbXBvbmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIGlmIChzbG90ID09PSB0aGlzLnNlbGVjdGlvbi5hbmNob3JTbG90ICYmIHRoaXMuc2VsZWN0aW9uLmFuY2hvck9mZnNldCEgPiBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldEFuY2hvcihzbG90LCB0aGlzLnNlbGVjdGlvbi5hbmNob3JPZmZzZXQhICsgbGVuZ3RoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzbG90ID09PSB0aGlzLnNlbGVjdGlvbi5mb2N1c1Nsb3QgJiYgdGhpcy5zZWxlY3Rpb24uZm9jdXNPZmZzZXQhID4gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRGb2N1cyhzbG90LCB0aGlzLnNlbGVjdGlvbi5mb2N1c09mZnNldCEgKyBsZW5ndGgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5kZWxldGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2xvdC5pbmRleFxuICAgICAgICAgICAgc2xvdC5yZXRhaW4oc2xvdC5pbmRleClcbiAgICAgICAgICAgIHNsb3QuZGVsZXRlKGFjdGlvbi5kZWxldGUpXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICBpZiAoc2xvdCA9PT0gdGhpcy5zZWxlY3Rpb24uYW5jaG9yU2xvdCAmJiB0aGlzLnNlbGVjdGlvbi5hbmNob3JPZmZzZXQhID49IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0QW5jaG9yKHNsb3QsIHRoaXMuc2VsZWN0aW9uLnN0YXJ0T2Zmc2V0ISAtIGFjdGlvbi5kZWxldGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNsb3QgPT09IHRoaXMuc2VsZWN0aW9uLmZvY3VzU2xvdCAmJiB0aGlzLnNlbGVjdGlvbi5mb2N1c09mZnNldCEgPj0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRGb2N1cyhzbG90LCB0aGlzLnNlbGVjdGlvbi5mb2N1c09mZnNldCEgLSBhY3Rpb24uZGVsZXRlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uYXR0cmlidXRlcykge1xuICAgICAgICAgICAgc2xvdC51cGRhdGVTdGF0ZShkcmFmdCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZHJhZnQgPT09ICdvYmplY3QnICYmIGRyYWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkcmFmdCwgYWN0aW9uLmF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29udGVudC5vYnNlcnZlKHN5bmNSZW1vdGUpXG5cbiAgICBjb25zdCBzdWIgPSBzbG90Lm9uQ29udGVudENoYW5nZS5zdWJzY3JpYmUoYWN0aW9ucyA9PiB7XG4gICAgICB0aGlzLnJ1bkxvY2FsVXBkYXRlKCgpID0+IHtcbiAgICAgICAgbGV0IG9mZnNldCA9IDBcbiAgICAgICAgbGV0IGxlbmd0aCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ3JldGFpbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHMgPSBhY3Rpb24uZm9ybWF0c1xuICAgICAgICAgICAgaWYgKGZvcm1hdHMpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZvcm1hdHMpXG4gICAgICAgICAgICAgIGxldCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnJlZ2lzdHJ5LmdldEZvcm1hdHRlcihrZXkpXG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgIGxlbmd0aC0tXG4gICAgICAgICAgICAgICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGZvcm1hdHMsIGtleSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50LmZvcm1hdChvZmZzZXQsIGFjdGlvbi5vZmZzZXQsIGZvcm1hdHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9mZnNldCA9IGFjdGlvbi5vZmZzZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAnaW5zZXJ0Jykge1xuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBjb250ZW50LnRvRGVsdGEoKVxuICAgICAgICAgICAgY29uc3QgaXNFbXB0eSA9IGRlbHRhLmxlbmd0aCA9PT0gMSAmJiBkZWx0YVswXS5pbnNlcnQgPT09IFNsb3QuZW1wdHlQbGFjZWhvbGRlclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgbGVuZ3RoID0gYWN0aW9uLmNvbnRlbnQubGVuZ3RoXG4gICAgICAgICAgICAgIGNvbnRlbnQuaW5zZXJ0KG9mZnNldCwgYWN0aW9uLmNvbnRlbnQsIGFjdGlvbi5mb3JtYXRzIHx8IHt9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGVuZ3RoID0gMVxuICAgICAgICAgICAgICBjb25zdCBzaGFyZWRDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVNoYXJlZENvbXBvbmVudEJ5Q29tcG9uZW50KGFjdGlvbi5yZWYgYXMgQ29tcG9uZW50SW5zdGFuY2UpXG4gICAgICAgICAgICAgIGNvbnRlbnQuaW5zZXJ0RW1iZWQob2Zmc2V0LCBzaGFyZWRDb21wb25lbnQsIGFjdGlvbi5mb3JtYXRzIHx8IHt9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNFbXB0eSAmJiBvZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgY29udGVudC5kZWxldGUoY29udGVudC5sZW5ndGggLSAxLCAxKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbmd0aFxuICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGNvbnRlbnQudG9EZWx0YSgpXG4gICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29udGVudC5kZWxldGUob2Zmc2V0LCBhY3Rpb24uY291bnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgY29udGVudC5pbnNlcnQoMCwgJ1xcbicsIGRlbHRhWzBdPy5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgc3ViLmFkZChzbG90Lm9uQ2hpbGRDb21wb25lbnRSZW1vdmUuc3Vic2NyaWJlKGNvbXBvbmVudHMgPT4ge1xuICAgICAgY29tcG9uZW50cy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICB0aGlzLmNsZWFuU3Vic2NyaXB0aW9uc0J5Q29tcG9uZW50KGMpXG4gICAgICB9KVxuICAgIH0pKVxuICAgIHRoaXMuY29udGVudFN5bmNDYWNoZXMuc2V0KHNsb3QsICgpID0+IHtcbiAgICAgIGNvbnRlbnQudW5vYnNlcnZlKHN5bmNSZW1vdGUpXG4gICAgICBzdWIudW5zdWJzY3JpYmUoKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHN5bmNTbG90KHJlbW90ZVNsb3Q6IFlNYXA8YW55Piwgc2xvdDogU2xvdCkge1xuICAgIGNvbnN0IHN5bmNSZW1vdGUgPSAoZXYsIHRyKSA9PiB7XG4gICAgICB0aGlzLnJ1blJlbW90ZVVwZGF0ZSh0ciwgKCkgPT4ge1xuICAgICAgICBldi5rZXlzQ2hhbmdlZC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXRlJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSAoZXYudGFyZ2V0IGFzIFlNYXA8YW55PikuZ2V0KCdzdGF0ZScpXG4gICAgICAgICAgICBzbG90LnVwZGF0ZVN0YXRlKGRyYWZ0ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkcmFmdCA9PT0gJ29iamVjdCcgJiYgZHJhZnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRyYWZ0LCBzdGF0ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICByZW1vdGVTbG90Lm9ic2VydmUoc3luY1JlbW90ZSlcblxuICAgIGNvbnN0IHN1YiA9IHNsb3Qub25TdGF0ZUNoYW5nZS5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgIHRoaXMucnVuTG9jYWxVcGRhdGUoKCkgPT4ge1xuICAgICAgICByZW1vdGVTbG90LnNldCgnc3RhdGUnLCBjaGFuZ2UubmV3U3RhdGUpXG4gICAgICB9LCBjaGFuZ2UucmVjb3JkKVxuICAgIH0pXG4gICAgdGhpcy5zbG90U3RhdGVTeW5jQ2FjaGVzLnNldChzbG90LCAoKSA9PiB7XG4gICAgICByZW1vdGVTbG90LnVub2JzZXJ2ZShzeW5jUmVtb3RlKVxuICAgICAgc3ViLnVuc3Vic2NyaWJlKClcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2xvdHMocmVtb3RlU2xvdHM6IFlBcnJheTxhbnk+LCBjb21wb25lbnQ6IENvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgY29uc3Qgc2xvdHMgPSBjb21wb25lbnQuc2xvdHNcbiAgICBjb25zdCBzeW5jUmVtb3RlID0gKGV2LCB0cikgPT4ge1xuICAgICAgdGhpcy5ydW5SZW1vdGVVcGRhdGUodHIsICgpID0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBldi5kZWx0YS5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKFJlZmxlY3QuaGFzKGFjdGlvbiwgJ3JldGFpbicpKSB7XG4gICAgICAgICAgICBpbmRleCArPSBhY3Rpb24ucmV0YWluXG4gICAgICAgICAgICBzbG90cy5yZXRhaW4oaW5kZXgpXG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uaW5zZXJ0KSB7XG4gICAgICAgICAgICAoYWN0aW9uLmluc2VydCBhcyBBcnJheTxZTWFwPGFueT4+KS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzbG90ID0gdGhpcy5jcmVhdGVTbG90QnlTaGFyZWRTbG90KGl0ZW0pXG4gICAgICAgICAgICAgIHNsb3RzLmluc2VydChzbG90KVxuICAgICAgICAgICAgICB0aGlzLnN5bmNDb250ZW50KGl0ZW0uZ2V0KCdjb250ZW50JyksIHNsb3QpXG4gICAgICAgICAgICAgIHRoaXMuc3luY1Nsb3QoaXRlbSwgc2xvdClcbiAgICAgICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5kZWxldGUpIHtcbiAgICAgICAgICAgIHNsb3RzLnJldGFpbihpbmRleClcbiAgICAgICAgICAgIHNsb3RzLmRlbGV0ZShhY3Rpb24uZGVsZXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIHJlbW90ZVNsb3RzLm9ic2VydmUoc3luY1JlbW90ZSlcblxuICAgIGNvbnN0IHN1YiA9IHNsb3RzLm9uQ2hhbmdlLnN1YnNjcmliZShvcGVyYXRpb25zID0+IHtcbiAgICAgIHRoaXMucnVuTG9jYWxVcGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCBhcHBseUFjdGlvbnMgPSBvcGVyYXRpb25zLmFwcGx5XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyXG4gICAgICAgIGFwcGx5QWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSAncmV0YWluJykge1xuICAgICAgICAgICAgaW5kZXggPSBhY3Rpb24ub2Zmc2V0XG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2luc2VydFNsb3QnKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRTbG90ID0gdGhpcy5jcmVhdGVTaGFyZWRTbG90QnlTbG90KGFjdGlvbi5yZWYpXG4gICAgICAgICAgICByZW1vdGVTbG90cy5pbnNlcnQoaW5kZXgsIFtzaGFyZWRTbG90XSlcbiAgICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgcmVtb3RlU2xvdHMuZGVsZXRlKGluZGV4LCBhY3Rpb24uY291bnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgc3ViLmFkZChzbG90cy5vbkNoaWxkU2xvdFJlbW92ZS5zdWJzY3JpYmUoc2xvdHMgPT4ge1xuICAgICAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICAgICAgdGhpcy5jbGVhblN1YnNjcmlwdGlvbnNCeVNsb3Qoc2xvdClcbiAgICAgIH0pXG4gICAgfSkpXG5cbiAgICB0aGlzLnNsb3RzU3luY0NhY2hlcy5zZXQoY29tcG9uZW50LCAoKSA9PiB7XG4gICAgICByZW1vdGVTbG90cy51bm9ic2VydmUoc3luY1JlbW90ZSlcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NvbXBvbmVudChyZW1vdGVDb21wb25lbnQ6IFlNYXA8YW55PiwgY29tcG9uZW50OiBDb21wb25lbnRJbnN0YW5jZSkge1xuICAgIGNvbnN0IHN5bmNSZW1vdGUgPSAoZXYsIHRyKSA9PiB7XG4gICAgICB0aGlzLnJ1blJlbW90ZVVwZGF0ZSh0ciwgKCkgPT4ge1xuICAgICAgICBldi5rZXlzQ2hhbmdlZC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXRlJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSAoZXYudGFyZ2V0IGFzIFlNYXA8YW55PikuZ2V0KCdzdGF0ZScpXG4gICAgICAgICAgICBjb21wb25lbnQudXBkYXRlU3RhdGUoZHJhZnQgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRyYWZ0ID09PSAnb2JqZWN0JyAmJiBkcmFmdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZHJhZnQsIHN0YXRlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIHJlbW90ZUNvbXBvbmVudC5vYnNlcnZlKHN5bmNSZW1vdGUpXG5cbiAgICBjb25zdCBzdWIgPSBjb21wb25lbnQub25TdGF0ZUNoYW5nZS5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgIHRoaXMucnVuTG9jYWxVcGRhdGUoKCkgPT4ge1xuICAgICAgICByZW1vdGVDb21wb25lbnQuc2V0KCdzdGF0ZScsIGNoYW5nZS5uZXdTdGF0ZSlcbiAgICAgIH0sIGNoYW5nZS5yZWNvcmQpXG4gICAgfSlcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlU3luY0NhY2hlcy5zZXQoY29tcG9uZW50LCAoKSA9PiB7XG4gICAgICByZW1vdGVDb21wb25lbnQudW5vYnNlcnZlKHN5bmNSZW1vdGUpXG4gICAgICBzdWIudW5zdWJzY3JpYmUoKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHJ1bkxvY2FsVXBkYXRlKGZuOiAoKSA9PiB2b2lkLCByZWNvcmQgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMudXBkYXRlRnJvbVJlbW90ZSB8fCB0aGlzLmNvbnRyb2xsZXIucmVhZG9ubHkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVJlbW90ZUFjdGlvbnMucHVzaCh7XG4gICAgICByZWNvcmQsXG4gICAgICBhY3Rpb246IGZuXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgcnVuUmVtb3RlVXBkYXRlKHRyOiBUcmFuc2FjdGlvbiwgZm46ICgpID0+IHZvaWQpIHtcbiAgICBpZiAodHIub3JpZ2luID09PSB0aGlzLnlEb2MpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUZyb21SZW1vdGUgPSB0cnVlXG4gICAgaWYgKHRyLm9yaWdpbiA9PT0gdGhpcy5tYW5hZ2VyKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlci5oaXN0b3J5QXBwbHlUcmFuc2FjdChmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZXIucmVtb3RlVXBkYXRlVHJhbnNhY3QoZm4pXG4gICAgfVxuICAgIHRoaXMudXBkYXRlRnJvbVJlbW90ZSA9IGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNoYXJlZENvbXBvbmVudEJ5Q29tcG9uZW50KGNvbXBvbmVudDogQ29tcG9uZW50SW5zdGFuY2UpOiBZTWFwPGFueT4ge1xuICAgIGNvbnN0IHNoYXJlZENvbXBvbmVudCA9IG5ldyBZTWFwKClcbiAgICBzaGFyZWRDb21wb25lbnQuc2V0KCdzdGF0ZScsIGNvbXBvbmVudC5zdGF0ZSlcbiAgICBzaGFyZWRDb21wb25lbnQuc2V0KCduYW1lJywgY29tcG9uZW50Lm5hbWUpXG4gICAgY29uc3Qgc2hhcmVkU2xvdHMgPSBuZXcgWUFycmF5KClcbiAgICBzaGFyZWRDb21wb25lbnQuc2V0KCdzbG90cycsIHNoYXJlZFNsb3RzKVxuICAgIGNvbXBvbmVudC5zbG90cy50b0FycmF5KCkuZm9yRWFjaChzbG90ID0+IHtcbiAgICAgIGNvbnN0IHNoYXJlZFNsb3QgPSB0aGlzLmNyZWF0ZVNoYXJlZFNsb3RCeVNsb3Qoc2xvdClcbiAgICAgIHNoYXJlZFNsb3RzLnB1c2goW3NoYXJlZFNsb3RdKVxuICAgIH0pXG4gICAgdGhpcy5zeW5jU2xvdHMoc2hhcmVkU2xvdHMsIGNvbXBvbmVudClcbiAgICB0aGlzLnN5bmNDb21wb25lbnQoc2hhcmVkQ29tcG9uZW50LCBjb21wb25lbnQpXG4gICAgcmV0dXJuIHNoYXJlZENvbXBvbmVudFxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTaGFyZWRTbG90QnlTbG90KHNsb3Q6IFNsb3QpOiBZTWFwPGFueT4ge1xuICAgIGNvbnN0IHNoYXJlZFNsb3QgPSBuZXcgWU1hcCgpXG4gICAgc2hhcmVkU2xvdC5zZXQoJ3NjaGVtYScsIHNsb3Quc2NoZW1hKVxuICAgIHNoYXJlZFNsb3Quc2V0KCdzdGF0ZScsIHNsb3Quc3RhdGUpXG4gICAgY29uc3Qgc2hhcmVkQ29udGVudCA9IG5ldyBZVGV4dCgpXG4gICAgc2hhcmVkU2xvdC5zZXQoJ2NvbnRlbnQnLCBzaGFyZWRDb250ZW50KVxuICAgIGxldCBvZmZzZXQgPSAwXG4gICAgc2xvdC50b0RlbHRhKCkuZm9yRWFjaChpID0+IHtcbiAgICAgIGxldCBmb3JtYXRzOiBhbnkgPSB7fVxuICAgICAgaWYgKGkuZm9ybWF0cykge1xuICAgICAgICBpLmZvcm1hdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBmb3JtYXRzW2l0ZW1bMF0ubmFtZV0gPSBpdGVtWzFdXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXRzID0gbnVsbFxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBpLmluc2VydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2hhcmVkQ29udGVudC5pbnNlcnQob2Zmc2V0LCBpLmluc2VydCwgZm9ybWF0cylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNoYXJlZENvbXBvbmVudCA9IHRoaXMuY3JlYXRlU2hhcmVkQ29tcG9uZW50QnlDb21wb25lbnQoaS5pbnNlcnQpXG4gICAgICAgIHNoYXJlZENvbnRlbnQuaW5zZXJ0RW1iZWQob2Zmc2V0LCBzaGFyZWRDb21wb25lbnQsIGZvcm1hdHMpXG4gICAgICB9XG4gICAgICBvZmZzZXQgKz0gaS5pbnNlcnQubGVuZ3RoXG4gICAgfSlcbiAgICB0aGlzLnN5bmNDb250ZW50KHNoYXJlZENvbnRlbnQsIHNsb3QpXG4gICAgdGhpcy5zeW5jU2xvdChzaGFyZWRTbG90LCBzbG90KVxuICAgIHJldHVybiBzaGFyZWRTbG90XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudEJ5U2hhcmVkQ29tcG9uZW50KHlNYXA6IFlNYXA8YW55PiwgY2FuSW5zZXJ0SW5saW5lQ29tcG9uZW50OiBib29sZWFuKTogQ29tcG9uZW50SW5zdGFuY2Uge1xuICAgIGNvbnN0IHNoYXJlZFNsb3RzID0geU1hcC5nZXQoJ3Nsb3RzJykgYXMgWUFycmF5PFlNYXA8YW55Pj5cbiAgICBjb25zdCBzbG90czogU2xvdFtdID0gW11cbiAgICBzaGFyZWRTbG90cy5mb3JFYWNoKHNoYXJlZFNsb3QgPT4ge1xuICAgICAgY29uc3Qgc2xvdCA9IHRoaXMuY3JlYXRlU2xvdEJ5U2hhcmVkU2xvdChzaGFyZWRTbG90KVxuICAgICAgc2xvdHMucHVzaChzbG90KVxuICAgIH0pXG4gICAgY29uc3QgbmFtZSA9IHlNYXAuZ2V0KCduYW1lJylcbiAgICBjb25zdCBzdGF0ZSA9IHlNYXAuZ2V0KCdzdGF0ZScpXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnRyYW5zbGF0b3IuY3JlYXRlQ29tcG9uZW50QnlEYXRhKG5hbWUsIHtcbiAgICAgIHN0YXRlLFxuICAgICAgc2xvdHNcbiAgICB9KVxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2Uuc2xvdHMudG9BcnJheSgpLmZvckVhY2goKHNsb3QsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBzaGFyZWRTbG90ID0gc2hhcmVkU2xvdHMuZ2V0KGluZGV4KVxuICAgICAgICBpZiAoIXNoYXJlZFNsb3QpIHtcbiAgICAgICAgICBzaGFyZWRTbG90ID0gdGhpcy5jcmVhdGVTaGFyZWRTbG90QnlTbG90KHNsb3QpXG4gICAgICAgICAgc2hhcmVkU2xvdHMucHVzaChbc2hhcmVkU2xvdF0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jU2xvdChzaGFyZWRTbG90LCBzbG90KVxuICAgICAgICB0aGlzLnN5bmNDb250ZW50KHNoYXJlZFNsb3QuZ2V0KCdjb250ZW50JyksIHNsb3QpXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGluc3RhbmNlXG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVVbmtub3duQ29tcG9uZW50KG5hbWUsIGNhbkluc2VydElubGluZUNvbXBvbmVudCkuY3JlYXRlSW5zdGFuY2UodGhpcy5zdGFydGVyKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTbG90QnlTaGFyZWRTbG90KHNoYXJlZFNsb3Q6IFlNYXA8YW55Pik6IFNsb3Qge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBzaGFyZWRTbG90LmdldCgnY29udGVudCcpIGFzIFlUZXh0XG4gICAgY29uc3QgZGVsdGEgPSBjb250ZW50LnRvRGVsdGEoKVxuXG4gICAgY29uc3Qgc2xvdCA9IHRoaXMudHJhbnNsYXRvci5jcmVhdGVTbG90KHtcbiAgICAgIHNjaGVtYTogc2hhcmVkU2xvdC5nZXQoJ3NjaGVtYScpLFxuICAgICAgc3RhdGU6IHNoYXJlZFNsb3QuZ2V0KCdzdGF0ZScpLFxuICAgICAgZm9ybWF0czoge30sXG4gICAgICBjb250ZW50OiBbXVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBkZWx0YSkge1xuICAgICAgaWYgKGFjdGlvbi5pbnNlcnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uaW5zZXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHNsb3QuaW5zZXJ0KGFjdGlvbi5pbnNlcnQsIHJlbW90ZUZvcm1hdHNUb0xvY2FsKHRoaXMucmVnaXN0cnksIGFjdGlvbi5hdHRyaWJ1dGVzKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzaGFyZWRDb21wb25lbnQgPSBhY3Rpb24uaW5zZXJ0IGFzIFlNYXA8YW55PlxuICAgICAgICAgIGNvbnN0IGNhbkluc2VydElubGluZUNvbXBvbmVudCA9IHNsb3Quc2NoZW1hLmluY2x1ZGVzKENvbnRlbnRUeXBlLklubGluZUNvbXBvbmVudClcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudEJ5U2hhcmVkQ29tcG9uZW50KHNoYXJlZENvbXBvbmVudCwgY2FuSW5zZXJ0SW5saW5lQ29tcG9uZW50KVxuICAgICAgICAgIHNsb3QuaW5zZXJ0KGNvbXBvbmVudCwgcmVtb3RlRm9ybWF0c1RvTG9jYWwodGhpcy5yZWdpc3RyeSwgYWN0aW9uLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgIHRoaXMuc3luY1Nsb3RzKHNoYXJlZENvbXBvbmVudC5nZXQoJ3Nsb3RzJyksIGNvbXBvbmVudClcbiAgICAgICAgICB0aGlzLnN5bmNDb21wb25lbnQoc2hhcmVkQ29tcG9uZW50LCBjb21wb25lbnQpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGNvbGxhYm9yYXRlRXJyb3JGbigndW5leHBlY3RlZCBkZWx0YSBhY3Rpb24uJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNsb3RcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5TdWJzY3JpcHRpb25zQnlTbG90KHNsb3Q6IFNsb3QpIHtcbiAgICB0aGlzLmNvbnRlbnRNYXAuZGVsZXRlKHNsb3QpO1xuICAgIFt0aGlzLmNvbnRlbnRTeW5jQ2FjaGVzLmdldChzbG90KSwgdGhpcy5zbG90U3RhdGVTeW5jQ2FjaGVzLmdldChzbG90KV0uZm9yRWFjaChmbiA9PiB7XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgZm4oKVxuICAgICAgfVxuICAgIH0pXG4gICAgc2xvdC5zbGljZUNvbnRlbnQoKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmNsZWFuU3Vic2NyaXB0aW9uc0J5Q29tcG9uZW50KGkpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5TdWJzY3JpcHRpb25zQnlDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRJbnN0YW5jZSkge1xuICAgIFt0aGlzLnNsb3RzU3luY0NhY2hlcy5nZXQoY29tcG9uZW50KSwgdGhpcy5jb21wb25lbnRTdGF0ZVN5bmNDYWNoZXMuZ2V0KGNvbXBvbmVudCldLmZvckVhY2goZm4gPT4ge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIGZuKClcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbXBvbmVudC5zbG90cy50b0FycmF5KCkuZm9yRWFjaChzbG90ID0+IHtcbiAgICAgIHRoaXMuY2xlYW5TdWJzY3JpcHRpb25zQnlTbG90KHNsb3QpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdGVGb3JtYXRzVG9Mb2NhbChyZWdpc3RyeTogUmVnaXN0cnksIGF0dHJzPzogYW55LCkge1xuICBjb25zdCBmb3JtYXRzOiBGb3JtYXRzID0gW11cbiAgaWYgKGF0dHJzKSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHJlZ2lzdHJ5LmdldEZvcm1hdHRlcihrZXkpXG4gICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgIGZvcm1hdHMucHVzaChbZm9ybWF0dGVyLCBhdHRyc1trZXldXSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHJldHVybiBmb3JtYXRzXG59XG4iXX0=
683
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFib3JhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29sbGFib3JhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDOUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxlQUFlLENBQUE7QUFDckYsT0FBTyxFQUNMLFlBQVksRUFFWixXQUFXLEVBQ1gsVUFBVSxFQUdWLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsU0FBUyxFQUVULElBQUksRUFDSixPQUFPLEVBQ1AsVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFDTCxLQUFLLElBQUksTUFBTSxFQUNmLEdBQUcsSUFBSSxJQUFJLEVBQ1gsR0FBRyxJQUFJLElBQUksRUFFWCxJQUFJLElBQUksS0FBSyxFQUViLFdBQVcsRUFDWCwwQ0FBMEMsRUFDMUMsbUNBQW1DLEVBQ3BDLE1BQU0sS0FBSyxDQUFBO0FBRVosT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLHNCQUFzQixDQUFBO0FBQ3pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRTVELE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0FBT25ELE1BQU0sVUFBVTtJQUFoQjtRQUNVLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQTtRQUM1QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFlLENBQUE7SUFzQ3RELENBQUM7SUFsQ0MsR0FBRyxDQUFDLEdBQVEsRUFBRSxLQUFVO1FBQ3RCLElBQUksR0FBRyxZQUFZLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQ3JDO0lBQ0gsQ0FBQztJQUlELEdBQUcsQ0FBQyxHQUFRO1FBQ1YsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFBO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUE7SUFDOUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFpQjtRQUN0QixJQUFJLEdBQUcsWUFBWSxJQUFJLEVBQUU7WUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEMsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDL0I7U0FDRjthQUFNO1lBQ0wsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEMsSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDL0I7U0FDRjtJQUNILENBQUM7Q0FDRjtBQWNELElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFxQ3RCLFlBQWtELFNBQWlCLEVBQzdDLGdCQUFrQyxFQUNsQyxpQkFBb0MsRUFDcEMsVUFBc0IsRUFDdEIsU0FBb0IsRUFDcEIsVUFBc0IsRUFDdEIsUUFBa0IsRUFDbEIsU0FBb0IsRUFDcEIsT0FBZ0I7UUFSWSxjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQzdDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQTNDdEMsU0FBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFjUCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQUMvQixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUE7UUFDbEMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFBO1FBQ2pDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFBO1FBRS9CLFlBQU8sR0FBdUIsSUFBSSxDQUFBO1FBRWxDLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQTtRQUNsQyxxQkFBZ0IsR0FBRyxLQUFLLENBQUE7UUFFeEIsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUE7UUFDbkQsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUE7UUFDckQsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQTtRQUM5RCw2QkFBd0IsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQTtRQUV2RSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBa0IsQ0FBQTtRQUNwRCxlQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQTtRQUU3Qix3QkFBbUIsR0FBc0IsRUFBRSxDQUFBO1FBQzNDLGFBQVEsR0FBRyxFQUFFLENBQUE7UUFXckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUMvRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQTtRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDN0MsQ0FBQztJQTNDRCxJQUFJLE9BQU87O1FBQ1QsT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsT0FBTyxFQUFFLEtBQUksS0FBSyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFVBQVU7O1FBQ1osT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsT0FBTyxFQUFFLEtBQUksS0FBSyxDQUFBO0lBQ3pDLENBQUM7SUF1Q0QsTUFBTTtRQUNKLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFVLENBQUE7UUFDdEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDbkMsY0FBYyxFQUFFLElBQUksR0FBRyxDQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFBO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQTtZQUNyRSxJQUFJLElBQUksQ0FBQyxPQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsT0FBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTthQUNoQztZQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFBO2FBQ3RCO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUN6QixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzNDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQW1CLENBQUE7WUFDdEUsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFBO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFBO1lBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdkMsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFBO1lBQ3ZDLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQTtZQUU1QixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFBO1lBRWhDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUMzQyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNYLE1BQU0sR0FBRzt3QkFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ25CLE9BQU8sRUFBRSxFQUFFO3FCQUNaLENBQUE7b0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDckI7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDakM7cUJBQU07b0JBQ0wsTUFBTSxHQUFHO3dCQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDbkIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztxQkFDdkIsQ0FBQTtvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2lCQUNyQjthQUNGO1lBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQTtZQUU3QixLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFO29CQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDeEIsRUFBRSxFQUFFLENBQUE7b0JBQ04sQ0FBQyxDQUFDLENBQUE7Z0JBQ0osQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTthQUM1QztRQUNILENBQUMsQ0FBQyxDQUNILENBQUE7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUF3QjtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFJOztRQUNGLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLElBQUksRUFBRSxDQUFBO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUE7U0FDdEI7SUFDSCxDQUFDO0lBRUQsT0FBTzs7UUFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxJQUFJLEVBQUUsQ0FBQTtZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFBO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELEtBQUs7O1FBQ0gsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxLQUFLLEVBQUUsQ0FBQTtRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxPQUFPOztRQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2hDLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsT0FBTyxFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVTLGlCQUFpQixDQUFDLElBQWUsRUFBRSxhQUFnQztRQUMzRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBc0IsQ0FBQTtRQUNsRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsS0FBSyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUE7WUFDcEIsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDakQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFDMUIsQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDMUIsQ0FBQyxDQUFDLENBQUE7U0FDSDthQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0IsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUMxQixDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDakQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7Z0JBQzFCLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7U0FDSDthQUFNO1lBQ0wsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUMxQixDQUFDLENBQUMsQ0FBQTtZQUNGLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDM0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUMvQixhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNsQyxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVTLHFCQUFxQixDQUFDLFFBQXdCO1FBQ3RELE1BQU0sY0FBYyxHQUFHLDBDQUEwQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdGLE1BQU0sYUFBYSxHQUFHLDBDQUEwQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNGLElBQUksY0FBYyxJQUFJLGFBQWEsRUFBRTtZQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBYSxDQUFDLENBQUE7WUFDbEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQWEsQ0FBQyxDQUFBO1lBQ3BFLElBQUksU0FBUyxJQUFJLFVBQVUsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNqRyxPQUFNO2FBQ1A7U0FDRjtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDM0IsQ0FBQztJQUVTLHlCQUF5QjtRQUNqQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQTtRQUMzRSxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ25ELElBQUksV0FBVyxFQUFFO2dCQUNmLE1BQU0sY0FBYyxHQUFHLG1DQUFtQyxDQUFDLFdBQVcsRUFBRSxZQUFhLENBQUMsQ0FBQTtnQkFDdEYsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQ2pELElBQUksVUFBVSxFQUFFO3dCQUNkLE1BQU0sYUFBYSxHQUFHLG1DQUFtQyxDQUFDLFVBQVUsRUFBRSxXQUFZLENBQUMsQ0FBQTt3QkFDbkYsT0FBTzs0QkFDTCxLQUFLLEVBQUUsYUFBYTs0QkFDcEIsTUFBTSxFQUFFLGNBQWM7eUJBQ3ZCLENBQUE7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRVMsV0FBVyxDQUFDLE9BQWMsRUFBRSxJQUFVO1FBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2QsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3hCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUU7d0JBQ2pDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTs0QkFDckIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7NEJBQ3RFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQ0FDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBOzZCQUNyQzs0QkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO3lCQUN4Qzs2QkFBTTs0QkFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTt5QkFDM0I7cUJBQ0Y7eUJBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO3dCQUN4QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7d0JBQ2QsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFOzRCQUNyQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUE7NEJBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO3lCQUNuRjs2QkFBTTs0QkFDTCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBbUIsQ0FBQTs0QkFDbEQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUE7NEJBQ2xGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxlQUFlLEVBQUUsd0JBQXdCLENBQUMsQ0FBQTs0QkFDbEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFBOzRCQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQTs0QkFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTt5QkFDdkI7d0JBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTs0QkFDN0IsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFhLEdBQUcsS0FBSyxFQUFFO2dDQUM5RSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFhLEdBQUcsTUFBTSxDQUFDLENBQUE7NkJBQ3RFOzRCQUNELElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBWSxHQUFHLEtBQUssRUFBRTtnQ0FDNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBWSxHQUFHLE1BQU0sQ0FBQyxDQUFBOzZCQUNwRTt5QkFDRjtxQkFDRjt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7d0JBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7d0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTt3QkFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTs0QkFDN0IsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFhLElBQUksS0FBSyxFQUFFO2dDQUMvRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBOzZCQUM1RTs0QkFDRCxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVksSUFBSSxLQUFLLEVBQUU7Z0NBQzdFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7NkJBQzNFO3lCQUNGO3FCQUNGO3lCQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDdkIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQ0FDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBOzZCQUN4QztpQ0FBTTtnQ0FDTCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUE7NkJBQ3pCO3dCQUNILENBQUMsQ0FBQyxDQUFBO3FCQUNIO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUE7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFOztnQkFDdkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFBO2dCQUNkLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtnQkFDZCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtvQkFDNUIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQTt3QkFDOUIsSUFBSSxPQUFPLEVBQUU7NEJBQ1gsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTs0QkFDakMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTs0QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQ0FDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7Z0NBQ2pELElBQUksQ0FBQyxTQUFTLEVBQUU7b0NBQ2QsTUFBTSxFQUFFLENBQUE7b0NBQ1IsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7aUNBQ3JDOzRCQUNILENBQUMsQ0FBQyxDQUFBOzRCQUNGLElBQUksTUFBTSxFQUFFO2dDQUNWLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7NkJBQy9DO3lCQUNGOzZCQUFNOzRCQUNMLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO3lCQUN2QjtxQkFDRjt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUNuQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7d0JBQy9CLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFBO3dCQUMvRSxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUU7NEJBQ3RDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQTs0QkFDOUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO3lCQUM3RDs2QkFBTTs0QkFDTCxNQUFNLEdBQUcsQ0FBQyxDQUFBOzRCQUNWLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsR0FBd0IsQ0FBQyxDQUFBOzRCQUM5RixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTt5QkFDbkU7d0JBRUQsSUFBSSxPQUFPLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTs0QkFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTt5QkFDdEM7d0JBQ0QsTUFBTSxJQUFJLE1BQU0sQ0FBQTtxQkFDakI7eUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTt3QkFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO3dCQUMvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7NEJBQ2xCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTt5QkFDckM7d0JBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTs0QkFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQUEsS0FBSyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxVQUFVLENBQUMsQ0FBQTt5QkFDOUM7cUJBQ0Y7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN2QyxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDcEMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUM3QixHQUFHLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDbkIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRVMsUUFBUSxDQUFDLFVBQXFCLEVBQUUsSUFBVTtRQUNsRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQzVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUU7d0JBQ25CLE1BQU0sS0FBSyxHQUFJLEVBQUUsQ0FBQyxNQUFvQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTt3QkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDdkIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQ0FDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7NkJBQzVCO2lDQUFNO2dDQUNMLE9BQU8sS0FBSyxDQUFBOzZCQUNiO3dCQUNILENBQUMsQ0FBQyxDQUFBO3FCQUNIO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUE7UUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRTlCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFO2dCQUN2QixVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDMUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUN0QyxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2hDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNuQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFUyxTQUFTLENBQUMsV0FBd0IsRUFBRSxTQUE0QjtRQUN4RSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFBO1FBQzdCLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDNUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFBO2dCQUNiLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN4QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO3dCQUNqQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQTt3QkFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtxQkFDcEI7eUJBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUN2QixNQUFNLENBQUMsTUFBMkIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTs0QkFDOUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTs0QkFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBOzRCQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTs0QkFDekIsS0FBSyxFQUFFLENBQUE7d0JBQ1QsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7eUJBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO3dCQUN4QixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUNuQixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtxQkFDNUI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQTtRQUNELFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3ZCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUE7Z0JBQ3JDLElBQUksS0FBYSxDQUFBO2dCQUNqQixZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUM1QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUM1QixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtxQkFDdEI7eUJBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRTt3QkFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTt3QkFDMUQsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO3dCQUN2QyxLQUFLLEVBQUUsQ0FBQTtxQkFDUjt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUNuQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7cUJBQ3hDO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtRQUVGLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDckMsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUN2QyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ2pDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNuQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFUyxhQUFhLENBQUMsZUFBMEIsRUFBRSxTQUE0QjtRQUM5RSxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQzVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUU7d0JBQ25CLE1BQU0sS0FBSyxHQUFJLEVBQUUsQ0FBQyxNQUFvQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTt3QkFDbkQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQ0FDL0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7NkJBQzVCO2lDQUFNO2dDQUNMLE9BQU8sS0FBSyxDQUFBOzZCQUNiO3dCQUNILENBQUMsQ0FBQyxDQUFBO3FCQUNIO2dCQUNILENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUE7UUFDRCxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRW5DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFO2dCQUN2QixlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDL0MsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3JDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNuQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFUyxjQUFjLENBQUMsRUFBYyxFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQ3BELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ3JELE9BQU07U0FDUDtRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDNUIsTUFBTTtZQUNOLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVTLGVBQWUsQ0FBQyxFQUFlLEVBQUUsRUFBYztRQUN2RCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtZQUMzQixPQUFNO1NBQ1A7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO1FBQzVCLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDeEM7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDeEM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO0lBQy9CLENBQUM7SUFFUyxnQ0FBZ0MsQ0FBQyxTQUE0QjtRQUNyRSxNQUFNLGVBQWUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO1FBQ2xDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQTtRQUNoQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUN6QyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDcEQsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDaEMsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM5QyxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRVMsc0JBQXNCLENBQUMsSUFBVTtRQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFBO1FBQzdCLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtRQUNqQyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtRQUN4QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQTtZQUNyQixJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNqQyxDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxJQUFJLENBQUE7YUFDZjtZQUNELElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDaEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTthQUNoRDtpQkFBTTtnQkFDTCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUN2RSxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUE7YUFDNUQ7WUFDRCxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMvQixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRVMsZ0NBQWdDLENBQUMsSUFBZSxFQUFFLHdCQUFpQztRQUMzRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBc0IsQ0FBQTtRQUMxRCxNQUFNLEtBQUssR0FBVyxFQUFFLENBQUE7UUFDeEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsQixDQUFDLENBQUMsQ0FBQTtRQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRTtZQUMzRCxLQUFLO1lBQ0wsS0FBSztTQUNOLENBQUMsQ0FBQTtRQUNGLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ3ZDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2YsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDOUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7aUJBQy9CO2dCQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDbkQsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLFFBQVEsQ0FBQTtTQUNoQjtRQUNELE9BQU8sc0JBQXNCLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBRVMsc0JBQXNCLENBQUMsVUFBcUI7UUFDcEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQVUsQ0FBQTtRQUNsRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDdEMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2hDLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUM5QixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFBO1FBRUYsS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLEVBQUU7WUFDMUIsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUNqQixJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO2lCQUNuRjtxQkFBTTtvQkFDTCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBbUIsQ0FBQTtvQkFDbEQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUE7b0JBQ2xGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxlQUFlLEVBQUUsd0JBQXdCLENBQUMsQ0FBQTtvQkFDbEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtvQkFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFBO29CQUN2RCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQTtpQkFDL0M7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLGtCQUFrQixDQUFDLDBCQUEwQixDQUFDLENBQUE7YUFDckQ7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVTLHdCQUF3QixDQUFDLElBQVU7UUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDbEYsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sRUFBRSxFQUFFLENBQUE7YUFDTDtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM5QixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDekIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ3RDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRVMsNkJBQTZCLENBQUMsU0FBNEI7UUFDbEUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQy9GLElBQUksRUFBRSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxDQUFBO2FBQ0w7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyQyxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRixDQUFBO0FBOW1CWSxXQUFXO0lBRHZCLFVBQVUsRUFBRTtJQXNDRSxXQUFBLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBOzZDQUNDLGdCQUFnQjtRQUNmLGlCQUFpQjtRQUN4QixVQUFVO1FBQ1gsU0FBUztRQUNSLFVBQVU7UUFDWixRQUFRO1FBQ1AsU0FBUztRQUNYLE9BQU87R0E3QzNCLFdBQVcsQ0E4bUJ2QjtTQTltQlksV0FBVztBQWduQnhCLFNBQVMsb0JBQW9CLENBQUMsUUFBa0IsRUFBRSxLQUFXO0lBQzNELE1BQU0sT0FBTyxHQUFZLEVBQUUsQ0FBQTtJQUMzQixJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDNUMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ3RDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7S0FDSDtJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAdGFuYm8vZGknXG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ0B0YW5iby9zdHJlYW0nXG5pbXBvcnQge1xuICBDaGFuZ2VPcmlnaW4sXG4gIENvbXBvbmVudEluc3RhbmNlLFxuICBDb250ZW50VHlwZSxcbiAgQ29udHJvbGxlcixcbiAgRm9ybWF0cyxcbiAgSGlzdG9yeSxcbiAgSElTVE9SWV9TVEFDS19TSVpFLFxuICBtYWtlRXJyb3IsXG4gIFJlZ2lzdHJ5LFxuICBSb290Q29tcG9uZW50UmVmLFxuICBTY2hlZHVsZXIsXG4gIFNlbGVjdGlvbixcbiAgU2VsZWN0aW9uUGF0aHMsXG4gIFNsb3QsXG4gIFN0YXJ0ZXIsXG4gIFRyYW5zbGF0b3Jcbn0gZnJvbSAnQHRleHRidXMvY29yZSdcbmltcG9ydCB7XG4gIEFycmF5IGFzIFlBcnJheSxcbiAgRG9jIGFzIFlEb2MsXG4gIE1hcCBhcyBZTWFwLFxuICBSZWxhdGl2ZVBvc2l0aW9uLFxuICBUZXh0IGFzIFlUZXh0LFxuICBUcmFuc2FjdGlvbixcbiAgVW5kb01hbmFnZXIsXG4gIGNyZWF0ZUFic29sdXRlUG9zaXRpb25Gcm9tUmVsYXRpdmVQb3NpdGlvbixcbiAgY3JlYXRlUmVsYXRpdmVQb3NpdGlvbkZyb21UeXBlSW5kZXhcbn0gZnJvbSAneWpzJ1xuXG5pbXBvcnQgeyBDb2xsYWJvcmF0ZUN1cnNvciwgUmVtb3RlU2VsZWN0aW9uIH0gZnJvbSAnLi9jb2xsYWJvcmF0ZS1jdXJzb3InXG5pbXBvcnQgeyBjcmVhdGVVbmtub3duQ29tcG9uZW50IH0gZnJvbSAnLi91bmtub3duLmNvbXBvbmVudCdcblxuY29uc3QgY29sbGFib3JhdGVFcnJvckZuID0gbWFrZUVycm9yKCdDb2xsYWJvcmF0ZScpXG5cbmludGVyZmFjZSBDdXJzb3JQb3NpdGlvbiB7XG4gIGFuY2hvcjogUmVsYXRpdmVQb3NpdGlvblxuICBmb2N1czogUmVsYXRpdmVQb3NpdGlvblxufVxuXG5jbGFzcyBDb250ZW50TWFwIHtcbiAgcHJpdmF0ZSBzbG90QW5kWVRleHRNYXAgPSBuZXcgV2Vha01hcDxTbG90LCBZVGV4dD4oKVxuICBwcml2YXRlIHlUZXh0QW5kU0xvdE1hcCA9IG5ldyBXZWFrTWFwPFlUZXh0LCBTbG90PigpXG5cbiAgc2V0KGtleTogU2xvdCwgdmFsdWU6IFlUZXh0KTogdm9pZFxuICBzZXQoa2V5OiBZVGV4dCwgdmFsdWU6IFNsb3QpOiB2b2lkXG4gIHNldChrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBTbG90KSB7XG4gICAgICB0aGlzLnNsb3RBbmRZVGV4dE1hcC5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgIHRoaXMueVRleHRBbmRTTG90TWFwLnNldCh2YWx1ZSwga2V5KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNsb3RBbmRZVGV4dE1hcC5zZXQodmFsdWUsIGtleSlcbiAgICAgIHRoaXMueVRleHRBbmRTTG90TWFwLnNldChrZXksIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIGdldChrZXk6IFNsb3QpOiBZVGV4dCB8IG51bGxcbiAgZ2V0KGtleTogWVRleHQpOiBTbG90IHwgbnVsbFxuICBnZXQoa2V5OiBhbnkpIHtcbiAgICBpZiAoa2V5IGluc3RhbmNlb2YgU2xvdCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2xvdEFuZFlUZXh0TWFwLmdldChrZXkpIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMueVRleHRBbmRTTG90TWFwLmdldChrZXkpIHx8IG51bGxcbiAgfVxuXG4gIGRlbGV0ZShrZXk6IFNsb3QgfCBZVGV4dCkge1xuICAgIGlmIChrZXkgaW5zdGFuY2VvZiBTbG90KSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy5zbG90QW5kWVRleHRNYXAuZ2V0KGtleSlcbiAgICAgIHRoaXMuc2xvdEFuZFlUZXh0TWFwLmRlbGV0ZShrZXkpXG4gICAgICBpZiAodikge1xuICAgICAgICB0aGlzLnlUZXh0QW5kU0xvdE1hcC5kZWxldGUodilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdiA9IHRoaXMueVRleHRBbmRTTG90TWFwLmdldChrZXkpXG4gICAgICB0aGlzLnlUZXh0QW5kU0xvdE1hcC5kZWxldGUoa2V5KVxuICAgICAgaWYgKHYpIHtcbiAgICAgICAgdGhpcy5zbG90QW5kWVRleHRNYXAuZGVsZXRlKHYpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmludGVyZmFjZSBVcGRhdGUge1xuICByZWNvcmQ6IGJvb2xlYW5cbiAgYWN0aW9uczogQXJyYXk8KCkgPT4gdm9pZD5cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZUl0ZW0ge1xuICByZWNvcmQ6IGJvb2xlYW5cblxuICBhY3Rpb24oKTogdm9pZFxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sbGFib3JhdGUgaW1wbGVtZW50cyBIaXN0b3J5IHtcbiAgb25TZWxlY3Rpb25DaGFuZ2U6IE9ic2VydmFibGU8U2VsZWN0aW9uUGF0aHM+XG4gIHlEb2MgPSBuZXcgWURvYygpXG4gIG9uQmFjazogT2JzZXJ2YWJsZTx2b2lkPlxuICBvbkZvcndhcmQ6IE9ic2VydmFibGU8dm9pZD5cbiAgb25DaGFuZ2U6IE9ic2VydmFibGU8dm9pZD5cbiAgb25QdXNoOiBPYnNlcnZhYmxlPHZvaWQ+XG5cbiAgZ2V0IGNhbkJhY2soKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlcj8uY2FuVW5kbygpIHx8IGZhbHNlXG4gIH1cblxuICBnZXQgY2FuRm9yd2FyZCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYW5hZ2VyPy5jYW5SZWRvKCkgfHwgZmFsc2VcbiAgfVxuXG4gIHByb3RlY3RlZCBiYWNrRXZlbnQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gIHByb3RlY3RlZCBmb3J3YXJkRXZlbnQgPSBuZXcgU3ViamVjdDx2b2lkPigpXG4gIHByb3RlY3RlZCBjaGFuZ2VFdmVudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgcHJvdGVjdGVkIHB1c2hFdmVudCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBwcm90ZWN0ZWQgbWFuYWdlcjogVW5kb01hbmFnZXIgfCBudWxsID0gbnVsbFxuXG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdXG4gIHByb3RlY3RlZCB1cGRhdGVGcm9tUmVtb3RlID0gZmFsc2VcblxuICBwcm90ZWN0ZWQgY29udGVudFN5bmNDYWNoZXMgPSBuZXcgV2Vha01hcDxTbG90LCAoKSA9PiB2b2lkPigpXG4gIHByb3RlY3RlZCBzbG90U3RhdGVTeW5jQ2FjaGVzID0gbmV3IFdlYWtNYXA8U2xvdCwgKCkgPT4gdm9pZD4oKVxuICBwcm90ZWN0ZWQgc2xvdHNTeW5jQ2FjaGVzID0gbmV3IFdlYWtNYXA8Q29tcG9uZW50SW5zdGFuY2UsICgpID0+IHZvaWQ+KClcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFN0YXRlU3luY0NhY2hlcyA9IG5ldyBXZWFrTWFwPENvbXBvbmVudEluc3RhbmNlLCAoKSA9PiB2b2lkPigpXG5cbiAgcHJvdGVjdGVkIHNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gbmV3IFN1YmplY3Q8U2VsZWN0aW9uUGF0aHM+KClcbiAgcHJvdGVjdGVkIGNvbnRlbnRNYXAgPSBuZXcgQ29udGVudE1hcCgpXG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVJlbW90ZUFjdGlvbnM6IEFycmF5PFVwZGF0ZUl0ZW0+ID0gW11cbiAgcHJvdGVjdGVkIG5vUmVjb3JkID0ge31cblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEhJU1RPUllfU1RBQ0tfU0laRSkgcHJvdGVjdGVkIHN0YWNrU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgcm9vdENvbXBvbmVudFJlZjogUm9vdENvbXBvbmVudFJlZixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGNvbGxhYm9yYXRlQ3Vyc29yOiBDb2xsYWJvcmF0ZUN1cnNvcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBzY2hlZHVsZXI6IFNjaGVkdWxlcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHRyYW5zbGF0b3I6IFRyYW5zbGF0b3IsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCByZWdpc3RyeTogUmVnaXN0cnksXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb246IFNlbGVjdGlvbixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHN0YXJ0ZXI6IFN0YXJ0ZXIpIHtcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlID0gdGhpcy5zZWxlY3Rpb25DaGFuZ2VFdmVudC5hc09ic2VydmFibGUoKS5waXBlKGRlbGF5KCkpXG4gICAgdGhpcy5vbkJhY2sgPSB0aGlzLmJhY2tFdmVudC5hc09ic2VydmFibGUoKVxuICAgIHRoaXMub25Gb3J3YXJkID0gdGhpcy5mb3J3YXJkRXZlbnQuYXNPYnNlcnZhYmxlKClcbiAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5jaGFuZ2VFdmVudC5hc09ic2VydmFibGUoKVxuICAgIHRoaXMub25QdXNoID0gdGhpcy5wdXNoRXZlbnQuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIGxpc3RlbigpIHtcbiAgICBjb25zdCByb290ID0gdGhpcy55RG9jLmdldE1hcCgnUm9vdENvbXBvbmVudCcpXG4gICAgY29uc3Qgcm9vdENvbXBvbmVudCA9IHRoaXMucm9vdENvbXBvbmVudFJlZi5jb21wb25lbnQhXG4gICAgdGhpcy5tYW5hZ2VyID0gbmV3IFVuZG9NYW5hZ2VyKHJvb3QsIHtcbiAgICAgIHRyYWNrZWRPcmlnaW5zOiBuZXcgU2V0PGFueT4oW3RoaXMueURvY10pXG4gICAgfSlcbiAgICBjb25zdCBjdXJzb3JLZXkgPSAnY3Vyc29yLXBvc2l0aW9uJ1xuICAgIHRoaXMubWFuYWdlci5vbignc3RhY2staXRlbS1hZGRlZCcsIGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnN0YWNrSXRlbS5tZXRhLnNldChjdXJzb3JLZXksIHRoaXMuZ2V0UmVsYXRpdmVDdXJzb3JMb2NhdGlvbigpKVxuICAgICAgaWYgKHRoaXMubWFuYWdlciEudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMuc3RhY2tTaXplKSB7XG4gICAgICAgIHRoaXMubWFuYWdlciEudW5kb1N0YWNrLnNoaWZ0KClcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5vcmlnaW4gPT09IHRoaXMueURvYykge1xuICAgICAgICB0aGlzLnB1c2hFdmVudC5uZXh0KClcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hhbmdlRXZlbnQubmV4dCgpXG4gICAgfSlcbiAgICB0aGlzLm1hbmFnZXIub24oJ3N0YWNrLWl0ZW0tcG9wcGVkJywgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBldmVudC5zdGFja0l0ZW0ubWV0YS5nZXQoY3Vyc29yS2V5KSBhcyBDdXJzb3JQb3NpdGlvblxuICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZUN1cnNvckxvY2F0aW9uKHBvc2l0aW9uKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnNlbGVjdGlvbi5vbkNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IHRoaXMuc2VsZWN0aW9uLmdldFBhdGhzKClcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VFdmVudC5uZXh0KHBhdGhzKVxuICAgICAgfSksXG4gICAgICB0aGlzLnNjaGVkdWxlci5vbkRvY0NoYW5nZWQucGlwZShcbiAgICAgICAgbWFwKGl0ZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLmZpbHRlcihpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpLmZyb20gIT09IENoYW5nZU9yaWdpbi5SZW1vdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLmxlbmd0aFxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVzOiBVcGRhdGVbXSA9IFtdXG5cbiAgICAgICAgbGV0IHVwZGF0ZTogVXBkYXRlIHwgbnVsbCA9IG51bGxcblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy51cGRhdGVSZW1vdGVBY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGUpIHtcbiAgICAgICAgICAgIHVwZGF0ZSA9IHtcbiAgICAgICAgICAgICAgcmVjb3JkOiBpdGVtLnJlY29yZCxcbiAgICAgICAgICAgICAgYWN0aW9uczogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZXMucHVzaCh1cGRhdGUpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1cGRhdGUucmVjb3JkID09PSBpdGVtLnJlY29yZCkge1xuICAgICAgICAgICAgdXBkYXRlLmFjdGlvbnMucHVzaChpdGVtLmFjdGlvbilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXBkYXRlID0ge1xuICAgICAgICAgICAgICByZWNvcmQ6IGl0ZW0ucmVjb3JkLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbaXRlbS5hY3Rpb25dXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVzLnB1c2godXBkYXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlUmVtb3RlQWN0aW9ucyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHVwZGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLnlEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5hY3Rpb25zLmZvckVhY2goZm4gPT4ge1xuICAgICAgICAgICAgICBmbigpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIGl0ZW0ucmVjb3JkID8gdGhpcy55RG9jIDogdGhpcy5ub1JlY29yZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICAgdGhpcy5zeW5jUm9vdENvbXBvbmVudChyb290LCByb290Q29tcG9uZW50KVxuICB9XG5cbiAgdXBkYXRlUmVtb3RlU2VsZWN0aW9uKHBhdGhzOiBSZW1vdGVTZWxlY3Rpb25bXSkge1xuICAgIHRoaXMuY29sbGFib3JhdGVDdXJzb3IuZHJhdyhwYXRocylcbiAgfVxuXG4gIGJhY2soKSB7XG4gICAgaWYgKHRoaXMuY2FuQmFjaykge1xuICAgICAgdGhpcy5tYW5hZ2VyPy51bmRvKClcbiAgICAgIHRoaXMuYmFja0V2ZW50Lm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIGZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY2FuRm9yd2FyZCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5yZWRvKClcbiAgICAgIHRoaXMuZm9yd2FyZEV2ZW50Lm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMubWFuYWdlcj8uY2xlYXIoKVxuICAgIHRoaXMuY2hhbmdlRXZlbnQubmV4dCgpXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGkgPT4gaS51bnN1YnNjcmliZSgpKVxuICAgIHRoaXMuY29sbGFib3JhdGVDdXJzb3IuZGVzdHJveSgpXG4gICAgdGhpcy5tYW5hZ2VyPy5kZXN0cm95KClcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jUm9vdENvbXBvbmVudChyb290OiBZTWFwPGFueT4sIHJvb3RDb21wb25lbnQ6IENvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgbGV0IHNsb3RzID0gcm9vdC5nZXQoJ3Nsb3RzJykgYXMgWUFycmF5PFlNYXA8YW55Pj5cbiAgICBpZiAoIXNsb3RzKSB7XG4gICAgICBzbG90cyA9IG5ldyBZQXJyYXkoKVxuICAgICAgcm9vdENvbXBvbmVudC5zbG90cy50b0FycmF5KCkuZm9yRWFjaChpID0+IHtcbiAgICAgICAgY29uc3Qgc2hhcmVkU2xvdCA9IHRoaXMuY3JlYXRlU2hhcmVkU2xvdEJ5U2xvdChpKVxuICAgICAgICBzbG90cy5wdXNoKFtzaGFyZWRTbG90XSlcbiAgICAgIH0pXG4gICAgICB0aGlzLnlEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICByb290LnNldCgnc3RhdGUnLCByb290Q29tcG9uZW50LnN0YXRlKVxuICAgICAgICByb290LnNldCgnc2xvdHMnLCBzbG90cylcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChzbG90cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJvb3RDb21wb25lbnQudXBkYXRlU3RhdGUoKCkgPT4ge1xuICAgICAgICByZXR1cm4gcm9vdC5nZXQoJ3N0YXRlJylcbiAgICAgIH0pXG4gICAgICB0aGlzLnlEb2MudHJhbnNhY3QoKCkgPT4ge1xuICAgICAgICByb290Q29tcG9uZW50LnNsb3RzLnRvQXJyYXkoKS5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNoYXJlZFNsb3QgPSB0aGlzLmNyZWF0ZVNoYXJlZFNsb3RCeVNsb3QoaSlcbiAgICAgICAgICBzbG90cy5wdXNoKFtzaGFyZWRTbG90XSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RDb21wb25lbnQudXBkYXRlU3RhdGUoKCkgPT4ge1xuICAgICAgICByZXR1cm4gcm9vdC5nZXQoJ3N0YXRlJylcbiAgICAgIH0pXG4gICAgICByb290Q29tcG9uZW50LnNsb3RzLmNsZWFuKClcbiAgICAgIHNsb3RzLmZvckVhY2goc2hhcmVkU2xvdCA9PiB7XG4gICAgICAgIGNvbnN0IHNsb3QgPSB0aGlzLmNyZWF0ZVNsb3RCeVNoYXJlZFNsb3Qoc2hhcmVkU2xvdClcbiAgICAgICAgdGhpcy5zeW5jQ29udGVudChzaGFyZWRTbG90LmdldCgnY29udGVudCcpLCBzbG90KVxuICAgICAgICB0aGlzLnN5bmNTbG90KHNoYXJlZFNsb3QsIHNsb3QpXG4gICAgICAgIHJvb3RDb21wb25lbnQuc2xvdHMuaW5zZXJ0KHNsb3QpXG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLnN5bmNDb21wb25lbnQocm9vdCwgcm9vdENvbXBvbmVudClcbiAgICB0aGlzLnN5bmNTbG90cyhzbG90cywgcm9vdENvbXBvbmVudClcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN0b3JlQ3Vyc29yTG9jYXRpb24ocG9zaXRpb246IEN1cnNvclBvc2l0aW9uKSB7XG4gICAgY29uc3QgYW5jaG9yUG9zaXRpb24gPSBjcmVhdGVBYnNvbHV0ZVBvc2l0aW9uRnJvbVJlbGF0aXZlUG9zaXRpb24ocG9zaXRpb24uYW5jaG9yLCB0aGlzLnlEb2MpXG4gICAgY29uc3QgZm9jdXNQb3NpdGlvbiA9IGNyZWF0ZUFic29sdXRlUG9zaXRpb25Gcm9tUmVsYXRpdmVQb3NpdGlvbihwb3NpdGlvbi5mb2N1cywgdGhpcy55RG9jKVxuICAgIGlmIChhbmNob3JQb3NpdGlvbiAmJiBmb2N1c1Bvc2l0aW9uKSB7XG4gICAgICBjb25zdCBmb2N1c1Nsb3QgPSB0aGlzLmNvbnRlbnRNYXAuZ2V0KGZvY3VzUG9zaXRpb24udHlwZSBhcyBZVGV4dClcbiAgICAgIGNvbnN0IGFuY2hvclNsb3QgPSB0aGlzLmNvbnRlbnRNYXAuZ2V0KGFuY2hvclBvc2l0aW9uLnR5cGUgYXMgWVRleHQpXG4gICAgICBpZiAoZm9jdXNTbG90ICYmIGFuY2hvclNsb3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0QmFzZUFuZEV4dGVudChhbmNob3JTbG90LCBhbmNob3JQb3NpdGlvbi5pbmRleCwgZm9jdXNTbG90LCBmb2N1c1Bvc2l0aW9uLmluZGV4KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb24udW5TZWxlY3QoKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJlbGF0aXZlQ3Vyc29yTG9jYXRpb24oKTogQ3Vyc29yUG9zaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCB7IGFuY2hvclNsb3QsIGFuY2hvck9mZnNldCwgZm9jdXNTbG90LCBmb2N1c09mZnNldCB9ID0gdGhpcy5zZWxlY3Rpb25cbiAgICBpZiAoYW5jaG9yU2xvdCkge1xuICAgICAgY29uc3QgYW5jaG9yWVRleHQgPSB0aGlzLmNvbnRlbnRNYXAuZ2V0KGFuY2hvclNsb3QpXG4gICAgICBpZiAoYW5jaG9yWVRleHQpIHtcbiAgICAgICAgY29uc3QgYW5jaG9yUG9zaXRpb24gPSBjcmVhdGVSZWxhdGl2ZVBvc2l0aW9uRnJvbVR5cGVJbmRleChhbmNob3JZVGV4dCwgYW5jaG9yT2Zmc2V0ISlcbiAgICAgICAgaWYgKGZvY3VzU2xvdCkge1xuICAgICAgICAgIGNvbnN0IGZvY3VzWVRleHQgPSB0aGlzLmNvbnRlbnRNYXAuZ2V0KGZvY3VzU2xvdClcbiAgICAgICAgICBpZiAoZm9jdXNZVGV4dCkge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNQb3NpdGlvbiA9IGNyZWF0ZVJlbGF0aXZlUG9zaXRpb25Gcm9tVHlwZUluZGV4KGZvY3VzWVRleHQsIGZvY3VzT2Zmc2V0ISlcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGZvY3VzOiBmb2N1c1Bvc2l0aW9uLFxuICAgICAgICAgICAgICBhbmNob3I6IGFuY2hvclBvc2l0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBwcm90ZWN0ZWQgc3luY0NvbnRlbnQoY29udGVudDogWVRleHQsIHNsb3Q6IFNsb3QpIHtcbiAgICB0aGlzLmNvbnRlbnRNYXAuc2V0KHNsb3QsIGNvbnRlbnQpXG4gICAgY29uc3Qgc3luY1JlbW90ZSA9IChldiwgdHIpID0+IHtcbiAgICAgIHRoaXMucnVuUmVtb3RlVXBkYXRlKHRyLCAoKSA9PiB7XG4gICAgICAgIHNsb3QucmV0YWluKDApXG4gICAgICAgIGV2LmRlbHRhLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgICBpZiAoUmVmbGVjdC5oYXMoYWN0aW9uLCAncmV0YWluJykpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24uYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBjb25zdCBmb3JtYXRzID0gcmVtb3RlRm9ybWF0c1RvTG9jYWwodGhpcy5yZWdpc3RyeSwgYWN0aW9uLmF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgIGlmIChmb3JtYXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNsb3QucmV0YWluKGFjdGlvbi5yZXRhaW4hLCBmb3JtYXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNsb3QucmV0YWluKHNsb3QuaW5kZXggKyBhY3Rpb24ucmV0YWluKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2xvdC5yZXRhaW4oYWN0aW9uLnJldGFpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5pbnNlcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2xvdC5pbmRleFxuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDFcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmluc2VydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgbGVuZ3RoID0gYWN0aW9uLmluc2VydC5sZW5ndGhcbiAgICAgICAgICAgICAgc2xvdC5pbnNlcnQoYWN0aW9uLmluc2VydCwgcmVtb3RlRm9ybWF0c1RvTG9jYWwodGhpcy5yZWdpc3RyeSwgYWN0aW9uLmF0dHJpYnV0ZXMpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2hhcmVkQ29tcG9uZW50ID0gYWN0aW9uLmluc2VydCBhcyBZTWFwPGFueT5cbiAgICAgICAgICAgICAgY29uc3QgY2FuSW5zZXJ0SW5saW5lQ29tcG9uZW50ID0gc2xvdC5zY2hlbWEuaW5jbHVkZXMoQ29udGVudFR5cGUuSW5saW5lQ29tcG9uZW50KVxuICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNyZWF0ZUNvbXBvbmVudEJ5U2hhcmVkQ29tcG9uZW50KHNoYXJlZENvbXBvbmVudCwgY2FuSW5zZXJ0SW5saW5lQ29tcG9uZW50KVxuICAgICAgICAgICAgICB0aGlzLnN5bmNTbG90cyhzaGFyZWRDb21wb25lbnQuZ2V0KCdzbG90cycpLCBjb21wb25lbnQpXG4gICAgICAgICAgICAgIHRoaXMuc3luY0NvbXBvbmVudChzaGFyZWRDb21wb25lbnQsIGNvbXBvbmVudClcbiAgICAgICAgICAgICAgc2xvdC5pbnNlcnQoY29tcG9uZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgaWYgKHNsb3QgPT09IHRoaXMuc2VsZWN0aW9uLmFuY2hvclNsb3QgJiYgdGhpcy5zZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ISA+IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0QW5jaG9yKHNsb3QsIHRoaXMuc2VsZWN0aW9uLmFuY2hvck9mZnNldCEgKyBsZW5ndGgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNsb3QgPT09IHRoaXMuc2VsZWN0aW9uLmZvY3VzU2xvdCAmJiB0aGlzLnNlbGVjdGlvbi5mb2N1c09mZnNldCEgPiBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldEZvY3VzKHNsb3QsIHRoaXMuc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ISArIGxlbmd0aClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmRlbGV0ZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzbG90LmluZGV4XG4gICAgICAgICAgICBzbG90LnJldGFpbihzbG90LmluZGV4KVxuICAgICAgICAgICAgc2xvdC5kZWxldGUoYWN0aW9uLmRlbGV0ZSlcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgIGlmIChzbG90ID09PSB0aGlzLnNlbGVjdGlvbi5hbmNob3JTbG90ICYmIHRoaXMuc2VsZWN0aW9uLmFuY2hvck9mZnNldCEgPj0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRBbmNob3Ioc2xvdCwgdGhpcy5zZWxlY3Rpb24uc3RhcnRPZmZzZXQhIC0gYWN0aW9uLmRlbGV0ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoc2xvdCA9PT0gdGhpcy5zZWxlY3Rpb24uZm9jdXNTbG90ICYmIHRoaXMuc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ISA+PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldEZvY3VzKHNsb3QsIHRoaXMuc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ISAtIGFjdGlvbi5kZWxldGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBzbG90LnVwZGF0ZVN0YXRlKGRyYWZ0ID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkcmFmdCA9PT0gJ29iamVjdCcgJiYgZHJhZnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRyYWZ0LCBhY3Rpb24uYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBjb250ZW50Lm9ic2VydmUoc3luY1JlbW90ZSlcblxuICAgIGNvbnN0IHN1YiA9IHNsb3Qub25Db250ZW50Q2hhbmdlLnN1YnNjcmliZShhY3Rpb25zID0+IHtcbiAgICAgIHRoaXMucnVuTG9jYWxVcGRhdGUoKCkgPT4ge1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMFxuICAgICAgICBsZXQgbGVuZ3RoID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSAncmV0YWluJykge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0cyA9IGFjdGlvbi5mb3JtYXRzXG4gICAgICAgICAgICBpZiAoZm9ybWF0cykge1xuICAgICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZm9ybWF0cylcbiAgICAgICAgICAgICAgbGV0IGxlbmd0aCA9IGtleXMubGVuZ3RoXG4gICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMucmVnaXN0cnkuZ2V0Rm9ybWF0dGVyKGtleSlcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoLS1cbiAgICAgICAgICAgICAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZm9ybWF0cywga2V5KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgaWYgKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQuZm9ybWF0KG9mZnNldCwgYWN0aW9uLm9mZnNldCwgZm9ybWF0cylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2Zmc2V0ID0gYWN0aW9uLm9mZnNldFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09ICdpbnNlcnQnKSB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGNvbnRlbnQudG9EZWx0YSgpXG4gICAgICAgICAgICBjb25zdCBpc0VtcHR5ID0gZGVsdGEubGVuZ3RoID09PSAxICYmIGRlbHRhWzBdLmluc2VydCA9PT0gU2xvdC5lbXB0eVBsYWNlaG9sZGVyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5jb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBsZW5ndGggPSBhY3Rpb24uY29udGVudC5sZW5ndGhcbiAgICAgICAgICAgICAgY29udGVudC5pbnNlcnQob2Zmc2V0LCBhY3Rpb24uY29udGVudCwgYWN0aW9uLmZvcm1hdHMgfHwge30pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsZW5ndGggPSAxXG4gICAgICAgICAgICAgIGNvbnN0IHNoYXJlZENvbXBvbmVudCA9IHRoaXMuY3JlYXRlU2hhcmVkQ29tcG9uZW50QnlDb21wb25lbnQoYWN0aW9uLnJlZiBhcyBDb21wb25lbnRJbnN0YW5jZSlcbiAgICAgICAgICAgICAgY29udGVudC5pbnNlcnRFbWJlZChvZmZzZXQsIHNoYXJlZENvbXBvbmVudCwgYWN0aW9uLmZvcm1hdHMgfHwge30pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0VtcHR5ICYmIG9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb250ZW50LmRlbGV0ZShjb250ZW50Lmxlbmd0aCAtIDEsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgKz0gbGVuZ3RoXG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gY29udGVudC50b0RlbHRhKClcbiAgICAgICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb250ZW50LmRlbGV0ZShvZmZzZXQsIGFjdGlvbi5jb3VudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb250ZW50Lmluc2VydCgwLCAnXFxuJywgZGVsdGFbMF0/LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBzdWIuYWRkKHNsb3Qub25DaGlsZENvbXBvbmVudFJlbW92ZS5zdWJzY3JpYmUoY29tcG9uZW50cyA9PiB7XG4gICAgICBjb21wb25lbnRzLmZvckVhY2goYyA9PiB7XG4gICAgICAgIHRoaXMuY2xlYW5TdWJzY3JpcHRpb25zQnlDb21wb25lbnQoYylcbiAgICAgIH0pXG4gICAgfSkpXG4gICAgdGhpcy5jb250ZW50U3luY0NhY2hlcy5zZXQoc2xvdCwgKCkgPT4ge1xuICAgICAgY29udGVudC51bm9ic2VydmUoc3luY1JlbW90ZSlcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgfSlcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jU2xvdChyZW1vdGVTbG90OiBZTWFwPGFueT4sIHNsb3Q6IFNsb3QpIHtcbiAgICBjb25zdCBzeW5jUmVtb3RlID0gKGV2LCB0cikgPT4ge1xuICAgICAgdGhpcy5ydW5SZW1vdGVVcGRhdGUodHIsICgpID0+IHtcbiAgICAgICAgZXYua2V5c0NoYW5nZWQuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgPT09ICdzdGF0ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gKGV2LnRhcmdldCBhcyBZTWFwPGFueT4pLmdldCgnc3RhdGUnKVxuICAgICAgICAgICAgc2xvdC51cGRhdGVTdGF0ZShkcmFmdCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZHJhZnQgPT09ICdvYmplY3QnICYmIGRyYWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkcmFmdCwgc3RhdGUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgcmVtb3RlU2xvdC5vYnNlcnZlKHN5bmNSZW1vdGUpXG5cbiAgICBjb25zdCBzdWIgPSBzbG90Lm9uU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICB0aGlzLnJ1bkxvY2FsVXBkYXRlKCgpID0+IHtcbiAgICAgICAgcmVtb3RlU2xvdC5zZXQoJ3N0YXRlJywgY2hhbmdlLm5ld1N0YXRlKVxuICAgICAgfSwgY2hhbmdlLnJlY29yZClcbiAgICB9KVxuICAgIHRoaXMuc2xvdFN0YXRlU3luY0NhY2hlcy5zZXQoc2xvdCwgKCkgPT4ge1xuICAgICAgcmVtb3RlU2xvdC51bm9ic2VydmUoc3luY1JlbW90ZSlcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgfSlcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jU2xvdHMocmVtb3RlU2xvdHM6IFlBcnJheTxhbnk+LCBjb21wb25lbnQ6IENvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgY29uc3Qgc2xvdHMgPSBjb21wb25lbnQuc2xvdHNcbiAgICBjb25zdCBzeW5jUmVtb3RlID0gKGV2LCB0cikgPT4ge1xuICAgICAgdGhpcy5ydW5SZW1vdGVVcGRhdGUodHIsICgpID0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBldi5kZWx0YS5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKFJlZmxlY3QuaGFzKGFjdGlvbiwgJ3JldGFpbicpKSB7XG4gICAgICAgICAgICBpbmRleCArPSBhY3Rpb24ucmV0YWluXG4gICAgICAgICAgICBzbG90cy5yZXRhaW4oaW5kZXgpXG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uaW5zZXJ0KSB7XG4gICAgICAgICAgICAoYWN0aW9uLmluc2VydCBhcyBBcnJheTxZTWFwPGFueT4+KS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzbG90ID0gdGhpcy5jcmVhdGVTbG90QnlTaGFyZWRTbG90KGl0ZW0pXG4gICAgICAgICAgICAgIHNsb3RzLmluc2VydChzbG90KVxuICAgICAgICAgICAgICB0aGlzLnN5bmNDb250ZW50KGl0ZW0uZ2V0KCdjb250ZW50JyksIHNsb3QpXG4gICAgICAgICAgICAgIHRoaXMuc3luY1Nsb3QoaXRlbSwgc2xvdClcbiAgICAgICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5kZWxldGUpIHtcbiAgICAgICAgICAgIHNsb3RzLnJldGFpbihpbmRleClcbiAgICAgICAgICAgIHNsb3RzLmRlbGV0ZShhY3Rpb24uZGVsZXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIHJlbW90ZVNsb3RzLm9ic2VydmUoc3luY1JlbW90ZSlcblxuICAgIGNvbnN0IHN1YiA9IHNsb3RzLm9uQ2hhbmdlLnN1YnNjcmliZShvcGVyYXRpb25zID0+IHtcbiAgICAgIHRoaXMucnVuTG9jYWxVcGRhdGUoKCkgPT4ge1xuICAgICAgICBjb25zdCBhcHBseUFjdGlvbnMgPSBvcGVyYXRpb25zLmFwcGx5XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyXG4gICAgICAgIGFwcGx5QWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSAncmV0YWluJykge1xuICAgICAgICAgICAgaW5kZXggPSBhY3Rpb24ub2Zmc2V0XG4gICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24udHlwZSA9PT0gJ2luc2VydFNsb3QnKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRTbG90ID0gdGhpcy5jcmVhdGVTaGFyZWRTbG90QnlTbG90KGFjdGlvbi5yZWYpXG4gICAgICAgICAgICByZW1vdGVTbG90cy5pbnNlcnQoaW5kZXgsIFtzaGFyZWRTbG90XSlcbiAgICAgICAgICAgIGluZGV4KytcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgcmVtb3RlU2xvdHMuZGVsZXRlKGluZGV4LCBhY3Rpb24uY291bnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgc3ViLmFkZChzbG90cy5vbkNoaWxkU2xvdFJlbW92ZS5zdWJzY3JpYmUoc2xvdHMgPT4ge1xuICAgICAgc2xvdHMuZm9yRWFjaChzbG90ID0+IHtcbiAgICAgICAgdGhpcy5jbGVhblN1YnNjcmlwdGlvbnNCeVNsb3Qoc2xvdClcbiAgICAgIH0pXG4gICAgfSkpXG5cbiAgICB0aGlzLnNsb3RzU3luY0NhY2hlcy5zZXQoY29tcG9uZW50LCAoKSA9PiB7XG4gICAgICByZW1vdGVTbG90cy51bm9ic2VydmUoc3luY1JlbW90ZSlcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgfSlcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW5jQ29tcG9uZW50KHJlbW90ZUNvbXBvbmVudDogWU1hcDxhbnk+LCBjb21wb25lbnQ6IENvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgY29uc3Qgc3luY1JlbW90ZSA9IChldiwgdHIpID0+IHtcbiAgICAgIHRoaXMucnVuUmVtb3RlVXBkYXRlKHRyLCAoKSA9PiB7XG4gICAgICAgIGV2LmtleXNDaGFuZ2VkLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoa2V5ID09PSAnc3RhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IChldi50YXJnZXQgYXMgWU1hcDxhbnk+KS5nZXQoJ3N0YXRlJylcbiAgICAgICAgICAgIGNvbXBvbmVudC51cGRhdGVTdGF0ZShkcmFmdCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZHJhZnQgPT09ICdvYmplY3QnICYmIGRyYWZ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkcmFmdCwgc3RhdGUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgcmVtb3RlQ29tcG9uZW50Lm9ic2VydmUoc3luY1JlbW90ZSlcblxuICAgIGNvbnN0IHN1YiA9IGNvbXBvbmVudC5vblN0YXRlQ2hhbmdlLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgdGhpcy5ydW5Mb2NhbFVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIHJlbW90ZUNvbXBvbmVudC5zZXQoJ3N0YXRlJywgY2hhbmdlLm5ld1N0YXRlKVxuICAgICAgfSwgY2hhbmdlLnJlY29yZClcbiAgICB9KVxuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTeW5jQ2FjaGVzLnNldChjb21wb25lbnQsICgpID0+IHtcbiAgICAgIHJlbW90ZUNvbXBvbmVudC51bm9ic2VydmUoc3luY1JlbW90ZSlcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpXG4gICAgfSlcbiAgfVxuXG4gIHByb3RlY3RlZCBydW5Mb2NhbFVwZGF0ZShmbjogKCkgPT4gdm9pZCwgcmVjb3JkID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnVwZGF0ZUZyb21SZW1vdGUgfHwgdGhpcy5jb250cm9sbGVyLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy51cGRhdGVSZW1vdGVBY3Rpb25zLnB1c2goe1xuICAgICAgcmVjb3JkLFxuICAgICAgYWN0aW9uOiBmblxuICAgIH0pXG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuUmVtb3RlVXBkYXRlKHRyOiBUcmFuc2FjdGlvbiwgZm46ICgpID0+IHZvaWQpIHtcbiAgICBpZiAodHIub3JpZ2luID09PSB0aGlzLnlEb2MpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUZyb21SZW1vdGUgPSB0cnVlXG4gICAgaWYgKHRyLm9yaWdpbiA9PT0gdGhpcy5tYW5hZ2VyKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlci5oaXN0b3J5QXBwbHlUcmFuc2FjdChmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZXIucmVtb3RlVXBkYXRlVHJhbnNhY3QoZm4pXG4gICAgfVxuICAgIHRoaXMudXBkYXRlRnJvbVJlbW90ZSA9IGZhbHNlXG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU2hhcmVkQ29tcG9uZW50QnlDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRJbnN0YW5jZSk6IFlNYXA8YW55PiB7XG4gICAgY29uc3Qgc2hhcmVkQ29tcG9uZW50ID0gbmV3IFlNYXAoKVxuICAgIHNoYXJlZENvbXBvbmVudC5zZXQoJ3N0YXRlJywgY29tcG9uZW50LnN0YXRlKVxuICAgIHNoYXJlZENvbXBvbmVudC5zZXQoJ25hbWUnLCBjb21wb25lbnQubmFtZSlcbiAgICBjb25zdCBzaGFyZWRTbG90cyA9IG5ldyBZQXJyYXkoKVxuICAgIHNoYXJlZENvbXBvbmVudC5zZXQoJ3Nsb3RzJywgc2hhcmVkU2xvdHMpXG4gICAgY29tcG9uZW50LnNsb3RzLnRvQXJyYXkoKS5mb3JFYWNoKHNsb3QgPT4ge1xuICAgICAgY29uc3Qgc2hhcmVkU2xvdCA9IHRoaXMuY3JlYXRlU2hhcmVkU2xvdEJ5U2xvdChzbG90KVxuICAgICAgc2hhcmVkU2xvdHMucHVzaChbc2hhcmVkU2xvdF0pXG4gICAgfSlcbiAgICB0aGlzLnN5bmNTbG90cyhzaGFyZWRTbG90cywgY29tcG9uZW50KVxuICAgIHRoaXMuc3luY0NvbXBvbmVudChzaGFyZWRDb21wb25lbnQsIGNvbXBvbmVudClcbiAgICByZXR1cm4gc2hhcmVkQ29tcG9uZW50XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlU2hhcmVkU2xvdEJ5U2xvdChzbG90OiBTbG90KTogWU1hcDxhbnk+IHtcbiAgICBjb25zdCBzaGFyZWRTbG90ID0gbmV3IFlNYXAoKVxuICAgIHNoYXJlZFNsb3Quc2V0KCdzY2hlbWEnLCBzbG90LnNjaGVtYSlcbiAgICBzaGFyZWRTbG90LnNldCgnc3RhdGUnLCBzbG90LnN0YXRlKVxuICAgIGNvbnN0IHNoYXJlZENvbnRlbnQgPSBuZXcgWVRleHQoKVxuICAgIHNoYXJlZFNsb3Quc2V0KCdjb250ZW50Jywgc2hhcmVkQ29udGVudClcbiAgICBsZXQgb2Zmc2V0ID0gMFxuICAgIHNsb3QudG9EZWx0YSgpLmZvckVhY2goaSA9PiB7XG4gICAgICBsZXQgZm9ybWF0czogYW55ID0ge31cbiAgICAgIGlmIChpLmZvcm1hdHMpIHtcbiAgICAgICAgaS5mb3JtYXRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgZm9ybWF0c1tpdGVtWzBdLm5hbWVdID0gaXRlbVsxXVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0cyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaS5pbnNlcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNoYXJlZENvbnRlbnQuaW5zZXJ0KG9mZnNldCwgaS5pbnNlcnQsIGZvcm1hdHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaGFyZWRDb21wb25lbnQgPSB0aGlzLmNyZWF0ZVNoYXJlZENvbXBvbmVudEJ5Q29tcG9uZW50KGkuaW5zZXJ0KVxuICAgICAgICBzaGFyZWRDb250ZW50Lmluc2VydEVtYmVkKG9mZnNldCwgc2hhcmVkQ29tcG9uZW50LCBmb3JtYXRzKVxuICAgICAgfVxuICAgICAgb2Zmc2V0ICs9IGkuaW5zZXJ0Lmxlbmd0aFxuICAgIH0pXG4gICAgdGhpcy5zeW5jQ29udGVudChzaGFyZWRDb250ZW50LCBzbG90KVxuICAgIHRoaXMuc3luY1Nsb3Qoc2hhcmVkU2xvdCwgc2xvdClcbiAgICByZXR1cm4gc2hhcmVkU2xvdFxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUNvbXBvbmVudEJ5U2hhcmVkQ29tcG9uZW50KHlNYXA6IFlNYXA8YW55PiwgY2FuSW5zZXJ0SW5saW5lQ29tcG9uZW50OiBib29sZWFuKTogQ29tcG9uZW50SW5zdGFuY2Uge1xuICAgIGNvbnN0IHNoYXJlZFNsb3RzID0geU1hcC5nZXQoJ3Nsb3RzJykgYXMgWUFycmF5PFlNYXA8YW55Pj5cbiAgICBjb25zdCBzbG90czogU2xvdFtdID0gW11cbiAgICBzaGFyZWRTbG90cy5mb3JFYWNoKHNoYXJlZFNsb3QgPT4ge1xuICAgICAgY29uc3Qgc2xvdCA9IHRoaXMuY3JlYXRlU2xvdEJ5U2hhcmVkU2xvdChzaGFyZWRTbG90KVxuICAgICAgc2xvdHMucHVzaChzbG90KVxuICAgIH0pXG4gICAgY29uc3QgbmFtZSA9IHlNYXAuZ2V0KCduYW1lJylcbiAgICBjb25zdCBzdGF0ZSA9IHlNYXAuZ2V0KCdzdGF0ZScpXG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLnRyYW5zbGF0b3IuY3JlYXRlQ29tcG9uZW50QnlEYXRhKG5hbWUsIHtcbiAgICAgIHN0YXRlLFxuICAgICAgc2xvdHNcbiAgICB9KVxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2Uuc2xvdHMudG9BcnJheSgpLmZvckVhY2goKHNsb3QsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBzaGFyZWRTbG90ID0gc2hhcmVkU2xvdHMuZ2V0KGluZGV4KVxuICAgICAgICBpZiAoIXNoYXJlZFNsb3QpIHtcbiAgICAgICAgICBzaGFyZWRTbG90ID0gdGhpcy5jcmVhdGVTaGFyZWRTbG90QnlTbG90KHNsb3QpXG4gICAgICAgICAgc2hhcmVkU2xvdHMucHVzaChbc2hhcmVkU2xvdF0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jU2xvdChzaGFyZWRTbG90LCBzbG90KVxuICAgICAgICB0aGlzLnN5bmNDb250ZW50KHNoYXJlZFNsb3QuZ2V0KCdjb250ZW50JyksIHNsb3QpXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGluc3RhbmNlXG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVVbmtub3duQ29tcG9uZW50KG5hbWUsIGNhbkluc2VydElubGluZUNvbXBvbmVudCkuY3JlYXRlSW5zdGFuY2UodGhpcy5zdGFydGVyKVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNsb3RCeVNoYXJlZFNsb3Qoc2hhcmVkU2xvdDogWU1hcDxhbnk+KTogU2xvdCB7XG4gICAgY29uc3QgY29udGVudCA9IHNoYXJlZFNsb3QuZ2V0KCdjb250ZW50JykgYXMgWVRleHRcbiAgICBjb25zdCBkZWx0YSA9IGNvbnRlbnQudG9EZWx0YSgpXG5cbiAgICBjb25zdCBzbG90ID0gdGhpcy50cmFuc2xhdG9yLmNyZWF0ZVNsb3Qoe1xuICAgICAgc2NoZW1hOiBzaGFyZWRTbG90LmdldCgnc2NoZW1hJyksXG4gICAgICBzdGF0ZTogc2hhcmVkU2xvdC5nZXQoJ3N0YXRlJyksXG4gICAgICBmb3JtYXRzOiB7fSxcbiAgICAgIGNvbnRlbnQ6IFtdXG4gICAgfSlcblxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGRlbHRhKSB7XG4gICAgICBpZiAoYWN0aW9uLmluc2VydCkge1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5pbnNlcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgc2xvdC5pbnNlcnQoYWN0aW9uLmluc2VydCwgcmVtb3RlRm9ybWF0c1RvTG9jYWwodGhpcy5yZWdpc3RyeSwgYWN0aW9uLmF0dHJpYnV0ZXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNoYXJlZENvbXBvbmVudCA9IGFjdGlvbi5pbnNlcnQgYXMgWU1hcDxhbnk+XG4gICAgICAgICAgY29uc3QgY2FuSW5zZXJ0SW5saW5lQ29tcG9uZW50ID0gc2xvdC5zY2hlbWEuaW5jbHVkZXMoQ29udGVudFR5cGUuSW5saW5lQ29tcG9uZW50KVxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY3JlYXRlQ29tcG9uZW50QnlTaGFyZWRDb21wb25lbnQoc2hhcmVkQ29tcG9uZW50LCBjYW5JbnNlcnRJbmxpbmVDb21wb25lbnQpXG4gICAgICAgICAgc2xvdC5pbnNlcnQoY29tcG9uZW50LCByZW1vdGVGb3JtYXRzVG9Mb2NhbCh0aGlzLnJlZ2lzdHJ5LCBhY3Rpb24uYXR0cmlidXRlcykpXG4gICAgICAgICAgdGhpcy5zeW5jU2xvdHMoc2hhcmVkQ29tcG9uZW50LmdldCgnc2xvdHMnKSwgY29tcG9uZW50KVxuICAgICAgICAgIHRoaXMuc3luY0NvbXBvbmVudChzaGFyZWRDb21wb25lbnQsIGNvbXBvbmVudClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgY29sbGFib3JhdGVFcnJvckZuKCd1bmV4cGVjdGVkIGRlbHRhIGFjdGlvbi4nKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2xvdFxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFuU3Vic2NyaXB0aW9uc0J5U2xvdChzbG90OiBTbG90KSB7XG4gICAgdGhpcy5jb250ZW50TWFwLmRlbGV0ZShzbG90KTtcbiAgICBbdGhpcy5jb250ZW50U3luY0NhY2hlcy5nZXQoc2xvdCksIHRoaXMuc2xvdFN0YXRlU3luY0NhY2hlcy5nZXQoc2xvdCldLmZvckVhY2goZm4gPT4ge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIGZuKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHNsb3Quc2xpY2VDb250ZW50KCkuZm9yRWFjaChpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5jbGVhblN1YnNjcmlwdGlvbnNCeUNvbXBvbmVudChpKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5TdWJzY3JpcHRpb25zQnlDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnRJbnN0YW5jZSkge1xuICAgIFt0aGlzLnNsb3RzU3luY0NhY2hlcy5nZXQoY29tcG9uZW50KSwgdGhpcy5jb21wb25lbnRTdGF0ZVN5bmNDYWNoZXMuZ2V0KGNvbXBvbmVudCldLmZvckVhY2goZm4gPT4ge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIGZuKClcbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbXBvbmVudC5zbG90cy50b0FycmF5KCkuZm9yRWFjaChzbG90ID0+IHtcbiAgICAgIHRoaXMuY2xlYW5TdWJzY3JpcHRpb25zQnlTbG90KHNsb3QpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdGVGb3JtYXRzVG9Mb2NhbChyZWdpc3RyeTogUmVnaXN0cnksIGF0dHJzPzogYW55LCkge1xuICBjb25zdCBmb3JtYXRzOiBGb3JtYXRzID0gW11cbiAgaWYgKGF0dHJzKSB7XG4gICAgT2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHJlZ2lzdHJ5LmdldEZvcm1hdHRlcihrZXkpXG4gICAgICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgICAgIGZvcm1hdHMucHVzaChbZm9ybWF0dGVyLCBhdHRyc1trZXldXSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHJldHVybiBmb3JtYXRzXG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@textbus/collaborate",
3
- "version": "2.2.0-alpha.0",
3
+ "version": "2.3.0-alpha.0",
4
4
  "description": "Textbus is a rich text editor and framework that is highly customizable and extensible to achieve rich wysiwyg effects.",
5
5
  "main": "./bundles/public-api.js",
6
6
  "module": "./bundles/public-api.js",
@@ -27,8 +27,8 @@
27
27
  "dependencies": {
28
28
  "@tanbo/di": "^1.1.3",
29
29
  "@tanbo/stream": "^1.1.8",
30
- "@textbus/browser": "^2.2.0-alpha.0",
31
- "@textbus/core": "^2.2.0-alpha.0",
30
+ "@textbus/browser": "^2.3.0-alpha.0",
31
+ "@textbus/core": "^2.3.0-alpha.0",
32
32
  "reflect-metadata": "^0.1.13",
33
33
  "y-protocols": "^1.0.5",
34
34
  "yjs": "^13.5.39"
@@ -44,5 +44,5 @@
44
44
  "bugs": {
45
45
  "url": "https://github.com/textbus/textbus.git/issues"
46
46
  },
47
- "gitHead": "52008fb37d5871b5c2d952157cae7ae45aad44ff"
47
+ "gitHead": "74a364ab9a43e4942bbbc710f9b769060c9bfd07"
48
48
  }