@skyux/tabs 7.0.0-beta.1 → 7.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/documentation.json +594 -539
  2. package/esm2020/lib/modules/sectioned-form/sectioned-form-section.component.mjs +20 -14
  3. package/esm2020/lib/modules/sectioned-form/sectioned-form.component.mjs +24 -18
  4. package/esm2020/lib/modules/sectioned-form/sectioned-form.service.mjs +1 -1
  5. package/esm2020/lib/modules/shared/sky-tabs-resources.module.mjs +9 -1
  6. package/esm2020/lib/modules/tabs/tab-button-view-model.mjs +1 -1
  7. package/esm2020/lib/modules/tabs/tab-button.component.mjs +44 -5
  8. package/esm2020/lib/modules/tabs/tabset-nav-button.component.mjs +18 -22
  9. package/esm2020/lib/modules/tabs/tabset.component.mjs +6 -14
  10. package/esm2020/lib/modules/tabs/tabset.service.mjs +2 -2
  11. package/esm2020/lib/modules/vertical-tabset/vertical-tab-media-query.service.mjs +11 -12
  12. package/esm2020/lib/modules/vertical-tabset/vertical-tab.component.mjs +64 -53
  13. package/esm2020/lib/modules/vertical-tabset/vertical-tabset-adapter.service.mjs +11 -8
  14. package/esm2020/lib/modules/vertical-tabset/vertical-tabset-group.component.mjs +27 -33
  15. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.component.mjs +22 -19
  16. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.service.mjs +55 -56
  17. package/fesm2015/skyux-tabs.mjs +300 -249
  18. package/fesm2015/skyux-tabs.mjs.map +1 -1
  19. package/fesm2020/skyux-tabs.mjs +295 -246
  20. package/fesm2020/skyux-tabs.mjs.map +1 -1
  21. package/lib/modules/sectioned-form/sectioned-form-section.component.d.ts +7 -10
  22. package/lib/modules/sectioned-form/sectioned-form.component.d.ts +4 -6
  23. package/lib/modules/sectioned-form/sectioned-form.service.d.ts +4 -4
  24. package/lib/modules/tabs/tab-button-view-model.d.ts +2 -0
  25. package/lib/modules/tabs/tab-button.component.d.ts +10 -3
  26. package/lib/modules/tabs/tabset-nav-button.component.d.ts +1 -0
  27. package/lib/modules/tabs/tabset.component.d.ts +0 -3
  28. package/lib/modules/vertical-tabset/vertical-tab-media-query.service.d.ts +2 -3
  29. package/lib/modules/vertical-tabset/vertical-tab.component.d.ts +13 -22
  30. package/lib/modules/vertical-tabset/vertical-tabset-adapter.service.d.ts +1 -2
  31. package/lib/modules/vertical-tabset/vertical-tabset-group.component.d.ts +7 -11
  32. package/lib/modules/vertical-tabset/vertical-tabset.component.d.ts +10 -13
  33. package/lib/modules/vertical-tabset/vertical-tabset.service.d.ts +10 -17
  34. package/package.json +9 -9
@@ -1,6 +1,8 @@
1
+ var _SkyVerticalTabsetService_instances, _SkyVerticalTabsetService_contentAdded, _SkyVerticalTabsetService_tabsVisible, _SkyVerticalTabsetService_isMobile, _SkyVerticalTabsetService_mediaQueryService, _SkyVerticalTabsetService_destroyContent, _SkyVerticalTabsetService_moveContent, _SkyVerticalTabsetService_updateTabClicked;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
1
3
  import { Injectable } from '@angular/core';
2
4
  import { SkyMediaBreakpoints, SkyMediaQueryService } from '@skyux/core';
3
- import { BehaviorSubject, Subject } from 'rxjs';
5
+ import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@skyux/core";
6
8
  export const VISIBLE_STATE = 'shown';
@@ -10,41 +12,40 @@ export const HIDDEN_STATE = 'void';
10
12
  */
11
13
  export class SkyVerticalTabsetService {
12
14
  constructor(mediaQueryService) {
13
- this.mediaQueryService = mediaQueryService;
15
+ _SkyVerticalTabsetService_instances.add(this);
14
16
  this.activeIndex = undefined;
15
17
  this.hidingTabs = new BehaviorSubject(false);
16
- this.indexChanged = new BehaviorSubject(undefined);
18
+ this.indexChanged = new ReplaySubject(1);
17
19
  this.maintainTabContent = false;
18
20
  this.showingTabs = new BehaviorSubject(false);
19
21
  this.switchingMobile = new Subject();
20
22
  this.tabs = [];
21
23
  this.tabAdded = new Subject();
22
- this.tabClicked = new BehaviorSubject(undefined);
23
- this._contentAdded = false;
24
- this._tabsVisible = false;
25
- this._isMobile = false;
26
- this.mediaQueryService.subscribe((breakpoint) => {
24
+ this.tabClicked = new ReplaySubject(1);
25
+ _SkyVerticalTabsetService_contentAdded.set(this, false);
26
+ _SkyVerticalTabsetService_tabsVisible.set(this, false);
27
+ _SkyVerticalTabsetService_isMobile.set(this, false);
28
+ _SkyVerticalTabsetService_mediaQueryService.set(this, void 0);
29
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_mediaQueryService, mediaQueryService, "f");
30
+ __classPrivateFieldGet(this, _SkyVerticalTabsetService_mediaQueryService, "f").subscribe((breakpoint) => {
27
31
  const nowMobile = breakpoint === SkyMediaBreakpoints.xs;
28
- if (nowMobile && !this._isMobile) {
32
+ if (nowMobile && !__classPrivateFieldGet(this, _SkyVerticalTabsetService_isMobile, "f")) {
29
33
  // switching to mobile
30
34
  this.switchingMobile.next(true);
31
- if (!this._tabsVisible) {
35
+ if (!__classPrivateFieldGet(this, _SkyVerticalTabsetService_tabsVisible, "f")) {
32
36
  this.hidingTabs.next(true);
33
37
  }
34
38
  }
35
- else if (!nowMobile && this._isMobile) {
39
+ else if (!nowMobile && __classPrivateFieldGet(this, _SkyVerticalTabsetService_isMobile, "f")) {
36
40
  // switching to widescreen
37
41
  this.switchingMobile.next(false);
38
- if (!this._tabsVisible) {
42
+ if (!__classPrivateFieldGet(this, _SkyVerticalTabsetService_tabsVisible, "f")) {
39
43
  this.showingTabs.next(true);
40
44
  }
41
45
  }
42
- this._isMobile = nowMobile;
46
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_isMobile, nowMobile, "f");
43
47
  });
44
48
  }
45
- set content(value) {
46
- this._content = value;
47
- }
48
49
  addTab(tab) {
49
50
  const index = this.tabs.length;
50
51
  tab.index = index;
@@ -62,15 +63,15 @@ export class SkyVerticalTabsetService {
62
63
  if (this.maintainTabContent &&
63
64
  tab.contentRendered &&
64
65
  /* istanbul ignore next */
65
- this._content?.nativeElement.contains(tab.tabContent.nativeElement)) {
66
- this._content.nativeElement.removeChild(tab.tabContent.nativeElement);
66
+ this.content?.nativeElement.contains(tab.tabContent?.nativeElement)) {
67
+ this.content?.nativeElement.removeChild(tab.tabContent?.nativeElement);
67
68
  }
68
69
  this.tabs.splice(tabIndex, 1);
69
70
  // update tab indices
70
71
  this.tabs.forEach((tabItem, index) => (tabItem.index = index));
71
72
  if (tab.active) {
72
73
  if (!this.maintainTabContent) {
73
- this.destroyContent();
74
+ __classPrivateFieldGet(this, _SkyVerticalTabsetService_instances, "m", _SkyVerticalTabsetService_destroyContent).call(this);
74
75
  }
75
76
  // Try selecting the next tab first, and if there's no next tab then
76
77
  // try selecting the previous one.
@@ -90,79 +91,77 @@ export class SkyVerticalTabsetService {
90
91
  }
91
92
  this.activeIndex = tab.index;
92
93
  this.tabClicked.next(true);
93
- this.updateTabClicked();
94
+ __classPrivateFieldGet(this, _SkyVerticalTabsetService_instances, "m", _SkyVerticalTabsetService_updateTabClicked).call(this);
94
95
  }
95
96
  activeTab() {
96
97
  return this.tabs.find((t) => t.index === this.activeIndex);
97
98
  }
98
99
  isMobile() {
99
- return this._isMobile;
100
+ return __classPrivateFieldGet(this, _SkyVerticalTabsetService_isMobile, "f");
100
101
  }
101
102
  updateContent() {
102
103
  if (!this.maintainTabContent) {
103
- if (!this._contentAdded && this.contentVisible()) {
104
+ if (!__classPrivateFieldGet(this, _SkyVerticalTabsetService_contentAdded, "f") && this.contentVisible()) {
104
105
  // content needs to be moved
105
- this.moveContent();
106
+ __classPrivateFieldGet(this, _SkyVerticalTabsetService_instances, "m", _SkyVerticalTabsetService_moveContent).call(this);
106
107
  }
107
- else if (this._contentAdded && !this.contentVisible()) {
108
+ else if (__classPrivateFieldGet(this, _SkyVerticalTabsetService_contentAdded, "f") && !this.contentVisible()) {
108
109
  // content hidden
109
- this._contentAdded = false;
110
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_contentAdded, false, "f");
110
111
  }
111
112
  }
112
113
  else {
113
114
  this.tabs.forEach((tab) => {
114
115
  if (!tab.contentRendered) {
115
- this._content.nativeElement.appendChild(tab.tabContent.nativeElement);
116
+ this.content?.nativeElement.appendChild(tab.tabContent?.nativeElement);
116
117
  tab.contentRendered = true;
117
118
  }
118
119
  });
119
120
  }
120
121
  }
121
122
  tabsVisible() {
122
- return !this.isMobile() || this._tabsVisible;
123
+ return !this.isMobile() || __classPrivateFieldGet(this, _SkyVerticalTabsetService_tabsVisible, "f");
123
124
  }
124
125
  contentVisible() {
125
- return !this.isMobile() || !this._tabsVisible;
126
+ return !this.isMobile() || !__classPrivateFieldGet(this, _SkyVerticalTabsetService_tabsVisible, "f");
126
127
  }
127
128
  showTabs() {
128
- this._tabsVisible = true;
129
- this._contentAdded = false;
129
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_tabsVisible, true, "f");
130
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_contentAdded, false, "f");
130
131
  this.animationTabsVisibleState = VISIBLE_STATE;
131
132
  this.animationContentVisibleState = HIDDEN_STATE;
132
133
  this.showingTabs.next(true);
133
134
  }
134
- destroyContent() {
135
- if (this._content) {
136
- this._content.nativeElement.innerHTML = '';
137
- }
138
- this.content = undefined;
135
+ }
136
+ _SkyVerticalTabsetService_contentAdded = new WeakMap(), _SkyVerticalTabsetService_tabsVisible = new WeakMap(), _SkyVerticalTabsetService_isMobile = new WeakMap(), _SkyVerticalTabsetService_mediaQueryService = new WeakMap(), _SkyVerticalTabsetService_instances = new WeakSet(), _SkyVerticalTabsetService_destroyContent = function _SkyVerticalTabsetService_destroyContent() {
137
+ if (this.content) {
138
+ this.content.nativeElement.innerHTML = '';
139
139
  }
140
- moveContent() {
141
- /* istanbul ignore else */
142
- if (this._content && !this._contentAdded) {
143
- const activeTab = this.activeTab();
144
- const activeContent = activeTab ? activeTab.tabContent : undefined;
145
- if (activeContent && activeContent.nativeElement) {
146
- this._content.nativeElement.appendChild(activeContent.nativeElement);
147
- activeTab.contentRendered = true;
148
- this._contentAdded = true;
149
- }
140
+ this.content = undefined;
141
+ }, _SkyVerticalTabsetService_moveContent = function _SkyVerticalTabsetService_moveContent() {
142
+ /* istanbul ignore else */
143
+ if (this.content && !__classPrivateFieldGet(this, _SkyVerticalTabsetService_contentAdded, "f")) {
144
+ const activeTab = this.activeTab();
145
+ const activeContent = activeTab ? activeTab.tabContent : undefined;
146
+ if (activeContent && activeTab && activeContent.nativeElement) {
147
+ this.content.nativeElement.appendChild(activeContent.nativeElement);
148
+ activeTab.contentRendered = true;
149
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_contentAdded, true, "f");
150
150
  }
151
151
  }
152
- updateTabClicked() {
153
- this._contentAdded = false;
154
- if (this.isMobile()) {
155
- this._tabsVisible = false;
156
- this.animationContentVisibleState = VISIBLE_STATE;
157
- this.animationTabsVisibleState = HIDDEN_STATE;
158
- this.hidingTabs.next(true);
159
- }
160
- this.indexChanged.next(this.activeIndex);
152
+ }, _SkyVerticalTabsetService_updateTabClicked = function _SkyVerticalTabsetService_updateTabClicked() {
153
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_contentAdded, false, "f");
154
+ if (this.isMobile()) {
155
+ __classPrivateFieldSet(this, _SkyVerticalTabsetService_tabsVisible, false, "f");
156
+ this.animationContentVisibleState = VISIBLE_STATE;
157
+ this.animationTabsVisibleState = HIDDEN_STATE;
158
+ this.hidingTabs.next(true);
161
159
  }
162
- }
160
+ this.indexChanged.next(this.activeIndex);
161
+ };
163
162
  SkyVerticalTabsetService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyVerticalTabsetService, deps: [{ token: i1.SkyMediaQueryService }], target: i0.ɵɵFactoryTarget.Injectable });
164
163
  SkyVerticalTabsetService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyVerticalTabsetService });
165
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SkyVerticalTabsetService, decorators: [{
166
165
  type: Injectable
167
166
  }], ctorParameters: function () { return [{ type: i1.SkyMediaQueryService }]; } });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwtdGFic2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGFicy9zcmMvbGliL21vZHVsZXMvdmVydGljYWwtdGFic2V0L3ZlcnRpY2FsLXRhYnNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJaEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBRW5DOztHQUVHO0FBRUgsTUFBTSxPQUFPLHdCQUF3QjtJQW1DbkMsWUFBMkIsaUJBQXVDO1FBQXZDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFsQzNELGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBVWhDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxpQkFBWSxHQUE0QixJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2RSx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0IsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QyxvQkFBZSxHQUFxQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWxELFNBQUksR0FBbUMsRUFBRSxDQUFDO1FBRTFDLGFBQVEsR0FBcUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUzRCxlQUFVLEdBQTZCLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSXJFLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRC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QUNqQiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFFbkUsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLGFBQWEsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDckUsU0FBUyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQzNCO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxhQUFhLENBQUM7WUFDbEQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFlBQVksQ0FBQztZQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDOztxSEFqTVUsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreU1lZGlhQnJlYWtwb2ludHMsIFNreU1lZGlhUXVlcnlTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2t5VmVydGljYWxUYWJDb21wb25lbnQgfSBmcm9tICcuL3ZlcnRpY2FsLXRhYi5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgVklTSUJMRV9TVEFURSA9ICdzaG93bic7XG5leHBvcnQgY29uc3QgSElEREVOX1NUQVRFID0gJ3ZvaWQnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5VmVydGljYWxUYWJzZXRTZXJ2aWNlIHtcbiAgcHVibGljIGFjdGl2ZUluZGV4OiBudW1iZXIgPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFuaW1hdGlvbkNvbnRlbnRWaXNpYmxlU3RhdGU6IHN0cmluZztcblxuICBwdWJsaWMgYW5pbWF0aW9uVGFic1Zpc2libGVTdGF0ZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBzZXQgY29udGVudCh2YWx1ZTogRWxlbWVudFJlZikge1xuICAgIHRoaXMuX2NvbnRlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBoaWRpbmdUYWJzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHVibGljIGluZGV4Q2hhbmdlZDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgcHVibGljIG1haW50YWluVGFiQ29udGVudCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzaG93aW5nVGFicyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHB1YmxpYyBzd2l0Y2hpbmdNb2JpbGU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyB0YWJzOiBBcnJheTxTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudD4gPSBbXTtcblxuICBwdWJsaWMgdGFiQWRkZWQ6IFN1YmplY3Q8U2t5VmVydGljYWxUYWJDb21wb25lbnQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgdGFiQ2xpY2tlZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIHByaXZhdGUgX2NvbnRlbnQ6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBfY29udGVudEFkZGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfdGFic1Zpc2libGUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pc01vYmlsZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG1lZGlhUXVlcnlTZXJ2aWNlOiBTa3lNZWRpYVF1ZXJ5U2VydmljZSkge1xuICAgIHRoaXMubWVkaWFRdWVyeVNlcnZpY2Uuc3Vic2NyaWJlKChicmVha3BvaW50KSA9PiB7XG4gICAgICBjb25zdCBub3dNb2JpbGUgPSBicmVha3BvaW50ID09PSBTa3lNZWRpYUJyZWFrcG9pbnRzLnhzO1xuXG4gICAgICBpZiAobm93TW9iaWxlICYmICF0aGlzLl9pc01vYmlsZSkge1xuICAgICAgICAvLyBzd2l0Y2hpbmcgdG8gbW9iaWxlXG4gICAgICAgIHRoaXMuc3dpdGNoaW5nTW9iaWxlLm5leHQodHJ1ZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YWJzVmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaGlkaW5nVGFicy5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFub3dNb2JpbGUgJiYgdGhpcy5faXNNb2JpbGUpIHtcbiAgICAgICAgLy8gc3dpdGNoaW5nIHRvIHdpZGVzY3JlZW5cbiAgICAgICAgdGhpcy5zd2l0Y2hpbmdNb2JpbGUubmV4dChmYWxzZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YWJzVmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuc2hvd2luZ1RhYnMubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc01vYmlsZSA9IG5vd01vYmlsZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUYWIodGFiOiBTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWJzLmxlbmd0aDtcbiAgICB0YWIuaW5kZXggPSBpbmRleDtcblxuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XG5cbiAgICBpZiAodGFiLmFjdGl2ZSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZVRhYih0YWIpO1xuICAgIH1cblxuICAgIHRoaXMudGFiQWRkZWQubmV4dCh0YWIpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lUYWIodGFiOiBTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YodGFiKTtcbiAgICBpZiAodGFiSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5tYWludGFpblRhYkNvbnRlbnQgJiZcbiAgICAgIHRhYi5jb250ZW50UmVuZGVyZWQgJiZcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLl9jb250ZW50Py5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhYi50YWJDb250ZW50Lm5hdGl2ZUVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLl9jb250ZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQodGFiLnRhYkNvbnRlbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy50YWJzLnNwbGljZSh0YWJJbmRleCwgMSk7XG4gICAgLy8gdXBkYXRlIHRhYiBpbmRpY2VzXG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYkl0ZW0sIGluZGV4KSA9PiAodGFiSXRlbS5pbmRleCA9IGluZGV4KSk7XG5cbiAgICBpZiAodGFiLmFjdGl2ZSkge1xuICAgICAgaWYgKCF0aGlzLm1haW50YWluVGFiQ29udGVudCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lDb250ZW50KCk7XG4gICAgICB9XG4gICAgICAvLyBUcnkgc2VsZWN0aW5nIHRoZSBuZXh0IHRhYiBmaXJzdCwgYW5kIGlmIHRoZXJlJ3Mgbm8gbmV4dCB0YWIgdGhlblxuICAgICAgLy8gdHJ5IHNlbGVjdGluZyB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgY29uc3QgbmV3QWN0aXZlVGFiID0gdGhpcy50YWJzW3RhYkluZGV4XSB8fCB0aGlzLnRhYnNbdGFiSW5kZXggLSAxXTtcbiAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChuZXdBY3RpdmVUYWIpIHtcbiAgICAgICAgbmV3QWN0aXZlVGFiLmFjdGl2YXRlVGFiKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjdGl2YXRlVGFiKHRhYjogU2t5VmVydGljYWxUYWJDb21wb25lbnQpIHtcbiAgICAvLyB1bmFjdGl2YXRlIGFjdGl2ZSB0YWJcbiAgICBjb25zdCBhY3RpdmVUYWIgPSB0aGlzLnRhYnMuZmluZCgodCkgPT4gdC5pbmRleCA9PT0gdGhpcy5hY3RpdmVJbmRleCk7XG4gICAgaWYgKGFjdGl2ZVRhYiAmJiBhY3RpdmVUYWIuaW5kZXggIT09IHRhYi5pbmRleCkge1xuICAgICAgYWN0aXZlVGFiLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgYWN0aXZlVGFiLnRhYkRlYWN0aXZhdGVkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IHRhYi5pbmRleDtcbiAgICB0aGlzLnRhYkNsaWNrZWQubmV4dCh0cnVlKTtcbiAgICB0aGlzLnVwZGF0ZVRhYkNsaWNrZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmVUYWIoKTogU2t5VmVydGljYWxUYWJDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLnRhYnMuZmluZCgodCkgPT4gdC5pbmRleCA9PT0gdGhpcy5hY3RpdmVJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTW9iaWxlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgaWYgKCF0aGlzLm1haW50YWluVGFiQ29udGVudCkge1xuICAgICAgaWYgKCF0aGlzLl9jb250ZW50QWRkZWQgJiYgdGhpcy5jb250ZW50VmlzaWJsZSgpKSB7XG4gICAgICAgIC8vIGNvbnRlbnQgbmVlZHMgdG8gYmUgbW92ZWRcbiAgICAgICAgdGhpcy5tb3ZlQ29udGVudCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9jb250ZW50QWRkZWQgJiYgIXRoaXMuY29udGVudFZpc2libGUoKSkge1xuICAgICAgICAvLyBjb250ZW50IGhpZGRlblxuICAgICAgICB0aGlzLl9jb250ZW50QWRkZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50YWJzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgICBpZiAoIXRhYi5jb250ZW50UmVuZGVyZWQpIHtcbiAgICAgICAgICB0aGlzLl9jb250ZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGFiLnRhYkNvbnRlbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgdGFiLmNvbnRlbnRSZW5kZXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0YWJzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNNb2JpbGUoKSB8fCB0aGlzLl90YWJzVmlzaWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBjb250ZW50VmlzaWJsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNNb2JpbGUoKSB8fCAhdGhpcy5fdGFic1Zpc2libGU7XG4gIH1cblxuICBwdWJsaWMgc2hvd1RhYnMoKSB7XG4gICAgdGhpcy5fdGFic1Zpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuX2NvbnRlbnRBZGRlZCA9IGZhbHNlO1xuICAgIHRoaXMuYW5pbWF0aW9uVGFic1Zpc2libGVTdGF0ZSA9IFZJU0lCTEVfU1RBVEU7XG4gICAgdGhpcy5hbmltYXRpb25Db250ZW50VmlzaWJsZVN0YXRlID0gSElEREVOX1NUQVRFO1xuICAgIHRoaXMuc2hvd2luZ1RhYnMubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUNvbnRlbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgIHRoaXMuX2NvbnRlbnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jb250ZW50ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQ29udGVudCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLl9jb250ZW50ICYmICF0aGlzLl9jb250ZW50QWRkZWQpIHtcbiAgICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRoaXMuYWN0aXZlVGFiKCk7XG4gICAgICBjb25zdCBhY3RpdmVDb250ZW50ID0gYWN0aXZlVGFiID8gYWN0aXZlVGFiLnRhYkNvbnRlbnQgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChhY3RpdmVDb250ZW50ICYmIGFjdGl2ZUNvbnRlbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9jb250ZW50Lm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoYWN0aXZlQ29udGVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYWN0aXZlVGFiLmNvbnRlbnRSZW5kZXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRBZGRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUYWJDbGlja2VkKCkge1xuICAgIHRoaXMuX2NvbnRlbnRBZGRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuaXNNb2JpbGUoKSkge1xuICAgICAgdGhpcy5fdGFic1Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuYW5pbWF0aW9uQ29udGVudFZpc2libGVTdGF0ZSA9IFZJU0lCTEVfU1RBVEU7XG4gICAgICB0aGlzLmFuaW1hdGlvblRhYnNWaXNpYmxlU3RhdGUgPSBISURERU5fU1RBVEU7XG4gICAgICB0aGlzLmhpZGluZ1RhYnMubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmluZGV4Q2hhbmdlZC5uZXh0KHRoaXMuYWN0aXZlSW5kZXgpO1xuICB9XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwtdGFic2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGFicy9zcmMvbGliL21vZHVsZXMvdmVydGljYWwtdGFic2V0L3ZlcnRpY2FsLXRhYnNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJL0QsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBRW5DOztHQUVHO0FBRUgsTUFBTSxPQUFPLHdCQUF3QjtJQWlDbkMsWUFBbUIsaUJBQXVDOztRQWhDbkQsZ0JBQVcsR0FBdUIsU0FBUyxDQUFDO1FBUTVDLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxpQkFBWSxHQUEwQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCx1QkFBa0IsR0FBd0IsS0FBSyxDQUFDO1FBRWhELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekMsb0JBQWUsR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVsRCxTQUFJLEdBQW1DLEVBQUUsQ0FBQztRQUUxQyxhQUFRLEdBQXFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFFM0QsZUFBVSxHQUEyQixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRSxpREFBZ0IsS0FBSyxFQUFDO1FBRXRCLGdEQUFlLEtBQUssRUFBQztRQUVyQiw2Q0FBWSxLQUFLLEVBQUM7UUFFbEIsOERBQXlDO1FBR3ZDLHVCQUFBLElBQUksK0NBQXNCLGlCQUFpQixNQUFBLENBQUM7UUFDNUMsdUJBQUEsSUFBSSxtREFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUMvQyxNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBRXhELElBQUksU0FBUyxJQUFJLENBQUMsdUJBQUEsSUFBSSwwQ0FBVSxFQUFFO2dCQUNoQyxzQkFBc0I7Z0JBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVoQyxJQUFJLENBQUMsdUJBQUEsSUFBSSw2Q0FBYSxFQUFFO29CQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDNUI7YUFDRjtpQkFBTSxJQUFJLENBQUMsU0FBUyxJQUFJLHVCQUFBLElBQUksMENBQVUsRUFBRTtnQkFDdkMsMEJBQTBCO2dCQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFakMsSUFBSSxDQUFDLHVCQUFBLElBQUksNkNBQWEsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzdCO2FBQ0Y7WUFFRCx1QkFBQSxJQUFJLHNDQUFhLFNBQVMsTUFBQSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUE0QjtRQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQixHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVsQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUE0QjtRQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNuQixPQUFPO1NBQ1I7UUFFRCxJQUNFLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsR0FBRyxDQUFDLGVBQWU7WUFDbkIsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxFQUNuRTtZQUNBLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVCLHVCQUFBLElBQUkscUZBQWdCLE1BQXBCLElBQUksQ0FBa0IsQ0FBQzthQUN4QjtZQUNELG9FQUFvRTtZQUNwRSxrQ0FBa0M7WUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNwRSx5QkFBeUI7WUFDekIsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUM1QjtTQUNGO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxHQUE0QjtRQUM3Qyx3QkFBd0I7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRTtZQUM5QyxTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN6QixTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsdUJBQUEsSUFBSSx1RkFBa0IsTUFBdEIsSUFBSSxDQUFvQixDQUFDO0lBQzNCLENBQUM7SUFFTSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLHVCQUFBLElBQUksMENBQVUsQ0FBQztJQUN4QixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLElBQUksQ0FBQyx1QkFBQSxJQUFJLDhDQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUNoRCw0QkFBNEI7Z0JBQzVCLHVCQUFBLElBQUksa0ZBQWEsTUFBakIsSUFBSSxDQUFlLENBQUM7YUFDckI7aUJBQU0sSUFBSSx1QkFBQSxJQUFJLDhDQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ3ZELGlCQUFpQjtnQkFDakIsdUJBQUEsSUFBSSwwQ0FBaUIsS0FBSyxNQUFBLENBQUM7YUFDNUI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FDckMsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQzlCLENBQUM7b0JBQ0YsR0FBRyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksdUJBQUEsSUFBSSw2Q0FBYSxDQUFDO0lBQy9DLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyx1QkFBQSxJQUFJLDZDQUFhLENBQUM7SUFDaEQsQ0FBQztJQUVNLFFBQVE7UUFDYix1QkFBQSxJQUFJLHlDQUFnQixJQUFJLE1BQUEsQ0FBQztRQUN6Qix1QkFBQSxJQUFJLDBDQUFpQixLQUFLLE1BQUEsQ0FBQztRQUMzQixJQUFJLENBQUMseUJBQXlCLEdBQUcsYUFBYSxDQUFDO1FBQy9DLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxZQUFZLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7O0lBR0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7S0FDM0M7SUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUMzQixDQUFDO0lBR0MsMEJBQTBCO0lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLHVCQUFBLElBQUksOENBQWMsRUFBRTtRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFbkUsSUFBSSxhQUFhLElBQUksU0FBUyxJQUFJLGFBQWEsQ0FBQyxhQUFhLEVBQUU7WUFDN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRSxTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNqQyx1QkFBQSxJQUFJLDBDQUFpQixJQUFJLE1BQUEsQ0FBQztTQUMzQjtLQUNGO0FBQ0gsQ0FBQztJQUdDLHVCQUFBLElBQUksMENBQWlCLEtBQUssTUFBQSxDQUFDO0lBRTNCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ25CLHVCQUFBLElBQUkseUNBQWdCLEtBQUssTUFBQSxDQUFDO1FBQzFCLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFlBQVksQ0FBQztRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM1QjtJQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMzQyxDQUFDO3FIQWxNVSx3QkFBd0I7eUhBQXhCLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TWVkaWFCcmVha3BvaW50cywgU2t5TWVkaWFRdWVyeVNlcnZpY2UgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudCB9IGZyb20gJy4vdmVydGljYWwtdGFiLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjb25zdCBWSVNJQkxFX1NUQVRFID0gJ3Nob3duJztcbmV4cG9ydCBjb25zdCBISURERU5fU1RBVEUgPSAndm9pZCc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lWZXJ0aWNhbFRhYnNldFNlcnZpY2Uge1xuICBwdWJsaWMgYWN0aXZlSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgYW5pbWF0aW9uQ29udGVudFZpc2libGVTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBhbmltYXRpb25UYWJzVmlzaWJsZVN0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnRlbnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGhpZGluZ1RhYnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBwdWJsaWMgaW5kZXhDaGFuZ2VkOiBSZXBsYXlTdWJqZWN0PG51bWJlcj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcblxuICBwdWJsaWMgbWFpbnRhaW5UYWJDb250ZW50OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgcHVibGljIHNob3dpbmdUYWJzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHVibGljIHN3aXRjaGluZ01vYmlsZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIHRhYnM6IEFycmF5PFNreVZlcnRpY2FsVGFiQ29tcG9uZW50PiA9IFtdO1xuXG4gIHB1YmxpYyB0YWJBZGRlZDogU3ViamVjdDxTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyB0YWJDbGlja2VkOiBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG5cbiAgI2NvbnRlbnRBZGRlZCA9IGZhbHNlO1xuXG4gICN0YWJzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICNpc01vYmlsZSA9IGZhbHNlO1xuXG4gICNtZWRpYVF1ZXJ5U2VydmljZTogU2t5TWVkaWFRdWVyeVNlcnZpY2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lZGlhUXVlcnlTZXJ2aWNlOiBTa3lNZWRpYVF1ZXJ5U2VydmljZSkge1xuICAgIHRoaXMuI21lZGlhUXVlcnlTZXJ2aWNlID0gbWVkaWFRdWVyeVNlcnZpY2U7XG4gICAgdGhpcy4jbWVkaWFRdWVyeVNlcnZpY2Uuc3Vic2NyaWJlKChicmVha3BvaW50KSA9PiB7XG4gICAgICBjb25zdCBub3dNb2JpbGUgPSBicmVha3BvaW50ID09PSBTa3lNZWRpYUJyZWFrcG9pbnRzLnhzO1xuXG4gICAgICBpZiAobm93TW9iaWxlICYmICF0aGlzLiNpc01vYmlsZSkge1xuICAgICAgICAvLyBzd2l0Y2hpbmcgdG8gbW9iaWxlXG4gICAgICAgIHRoaXMuc3dpdGNoaW5nTW9iaWxlLm5leHQodHJ1ZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLiN0YWJzVmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaGlkaW5nVGFicy5uZXh0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFub3dNb2JpbGUgJiYgdGhpcy4jaXNNb2JpbGUpIHtcbiAgICAgICAgLy8gc3dpdGNoaW5nIHRvIHdpZGVzY3JlZW5cbiAgICAgICAgdGhpcy5zd2l0Y2hpbmdNb2JpbGUubmV4dChmYWxzZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLiN0YWJzVmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuc2hvd2luZ1RhYnMubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLiNpc01vYmlsZSA9IG5vd01vYmlsZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUYWIodGFiOiBTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWJzLmxlbmd0aDtcbiAgICB0YWIuaW5kZXggPSBpbmRleDtcblxuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XG5cbiAgICBpZiAodGFiLmFjdGl2ZSkge1xuICAgICAgdGhpcy5hY3RpdmF0ZVRhYih0YWIpO1xuICAgIH1cblxuICAgIHRoaXMudGFiQWRkZWQubmV4dCh0YWIpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3lUYWIodGFiOiBTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YodGFiKTtcbiAgICBpZiAodGFiSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5tYWludGFpblRhYkNvbnRlbnQgJiZcbiAgICAgIHRhYi5jb250ZW50UmVuZGVyZWQgJiZcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmNvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFiLnRhYkNvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQodGFiLnRhYkNvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMudGFicy5zcGxpY2UodGFiSW5kZXgsIDEpO1xuICAgIC8vIHVwZGF0ZSB0YWIgaW5kaWNlc1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWJJdGVtLCBpbmRleCkgPT4gKHRhYkl0ZW0uaW5kZXggPSBpbmRleCkpO1xuXG4gICAgaWYgKHRhYi5hY3RpdmUpIHtcbiAgICAgIGlmICghdGhpcy5tYWludGFpblRhYkNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy4jZGVzdHJveUNvbnRlbnQoKTtcbiAgICAgIH1cbiAgICAgIC8vIFRyeSBzZWxlY3RpbmcgdGhlIG5leHQgdGFiIGZpcnN0LCBhbmQgaWYgdGhlcmUncyBubyBuZXh0IHRhYiB0aGVuXG4gICAgICAvLyB0cnkgc2VsZWN0aW5nIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICBjb25zdCBuZXdBY3RpdmVUYWIgPSB0aGlzLnRhYnNbdGFiSW5kZXhdIHx8IHRoaXMudGFic1t0YWJJbmRleCAtIDFdO1xuICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG5ld0FjdGl2ZVRhYikge1xuICAgICAgICBuZXdBY3RpdmVUYWIuYWN0aXZhdGVUYWIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGVUYWIodGFiOiBTa3lWZXJ0aWNhbFRhYkNvbXBvbmVudCkge1xuICAgIC8vIHVuYWN0aXZhdGUgYWN0aXZlIHRhYlxuICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHRoaXMudGFicy5maW5kKCh0KSA9PiB0LmluZGV4ID09PSB0aGlzLmFjdGl2ZUluZGV4KTtcbiAgICBpZiAoYWN0aXZlVGFiICYmIGFjdGl2ZVRhYi5pbmRleCAhPT0gdGFiLmluZGV4KSB7XG4gICAgICBhY3RpdmVUYWIuYWN0aXZlID0gZmFsc2U7XG4gICAgICBhY3RpdmVUYWIudGFiRGVhY3RpdmF0ZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGFiLmluZGV4O1xuICAgIHRoaXMudGFiQ2xpY2tlZC5uZXh0KHRydWUpO1xuICAgIHRoaXMuI3VwZGF0ZVRhYkNsaWNrZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmVUYWIoKTogU2t5VmVydGljYWxUYWJDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYnMuZmluZCgodCkgPT4gdC5pbmRleCA9PT0gdGhpcy5hY3RpdmVJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2lzTW9iaWxlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNvbnRlbnQoKSB7XG4gICAgaWYgKCF0aGlzLm1haW50YWluVGFiQ29udGVudCkge1xuICAgICAgaWYgKCF0aGlzLiNjb250ZW50QWRkZWQgJiYgdGhpcy5jb250ZW50VmlzaWJsZSgpKSB7XG4gICAgICAgIC8vIGNvbnRlbnQgbmVlZHMgdG8gYmUgbW92ZWRcbiAgICAgICAgdGhpcy4jbW92ZUNvbnRlbnQoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jY29udGVudEFkZGVkICYmICF0aGlzLmNvbnRlbnRWaXNpYmxlKCkpIHtcbiAgICAgICAgLy8gY29udGVudCBoaWRkZW5cbiAgICAgICAgdGhpcy4jY29udGVudEFkZGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgaWYgKCF0YWIuY29udGVudFJlbmRlcmVkKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50Py5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgdGFiLnRhYkNvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRhYi5jb250ZW50UmVuZGVyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdGFic1Zpc2libGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTW9iaWxlKCkgfHwgdGhpcy4jdGFic1Zpc2libGU7XG4gIH1cblxuICBwdWJsaWMgY29udGVudFZpc2libGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzTW9iaWxlKCkgfHwgIXRoaXMuI3RhYnNWaXNpYmxlO1xuICB9XG5cbiAgcHVibGljIHNob3dUYWJzKCkge1xuICAgIHRoaXMuI3RhYnNWaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLiNjb250ZW50QWRkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmFuaW1hdGlvblRhYnNWaXNpYmxlU3RhdGUgPSBWSVNJQkxFX1NUQVRFO1xuICAgIHRoaXMuYW5pbWF0aW9uQ29udGVudFZpc2libGVTdGF0ZSA9IEhJRERFTl9TVEFURTtcbiAgICB0aGlzLnNob3dpbmdUYWJzLm5leHQodHJ1ZSk7XG4gIH1cblxuICAjZGVzdHJveUNvbnRlbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxuICAgIHRoaXMuY29udGVudCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gICNtb3ZlQ29udGVudCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgIXRoaXMuI2NvbnRlbnRBZGRlZCkge1xuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUNvbnRlbnQgPSBhY3RpdmVUYWIgPyBhY3RpdmVUYWIudGFiQ29udGVudCA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGFjdGl2ZUNvbnRlbnQgJiYgYWN0aXZlVGFiICYmIGFjdGl2ZUNvbnRlbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChhY3RpdmVDb250ZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBhY3RpdmVUYWIuY29udGVudFJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4jY29udGVudEFkZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAjdXBkYXRlVGFiQ2xpY2tlZCgpIHtcbiAgICB0aGlzLiNjb250ZW50QWRkZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzTW9iaWxlKCkpIHtcbiAgICAgIHRoaXMuI3RhYnNWaXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmFuaW1hdGlvbkNvbnRlbnRWaXNpYmxlU3RhdGUgPSBWSVNJQkxFX1NUQVRFO1xuICAgICAgdGhpcy5hbmltYXRpb25UYWJzVmlzaWJsZVN0YXRlID0gSElEREVOX1NUQVRFO1xuICAgICAgdGhpcy5oaWRpbmdUYWJzLm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmRleENoYW5nZWQubmV4dCh0aGlzLmFjdGl2ZUluZGV4KTtcbiAgfVxufVxuIl19