@yelon/bis 16.2.3 → 16.2.5-68d194e

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 (68) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +23 -23
  3. package/esm2022/bis.mjs +4 -4
  4. package/esm2022/index.mjs +1 -1
  5. package/esm2022/layout/bis.config.mjs +14 -14
  6. package/esm2022/layout/html-names.mjs +32 -32
  7. package/esm2022/layout/icon/style-icons.mjs +795 -795
  8. package/esm2022/layout/layout-basic/index.mjs +2 -2
  9. package/esm2022/layout/layout-basic/interface.mjs +1 -1
  10. package/esm2022/layout/layout-basic/layout-basic.component.mjs +372 -372
  11. package/esm2022/layout/layout-nav/index.mjs +3 -3
  12. package/esm2022/layout/layout-nav/layout-nav-application.component.mjs +364 -364
  13. package/esm2022/layout/layout-nav/layout-nav-group.component.mjs +122 -122
  14. package/esm2022/layout/layout-nav/layout-nav-tile.component.mjs +14 -14
  15. package/esm2022/layout/layout.mjs +4 -4
  16. package/esm2022/layout/public_api.mjs +12 -12
  17. package/esm2022/layout/widgets/index.mjs +6 -6
  18. package/esm2022/layout/widgets/yunzai-clear-storage.component.mjs +44 -44
  19. package/esm2022/layout/widgets/yunzai-fullscreen.component.mjs +44 -44
  20. package/esm2022/layout/widgets/yunzai-i18n.component.mjs +145 -145
  21. package/esm2022/layout/widgets/yunzai-notify.component.mjs +182 -182
  22. package/esm2022/layout/widgets/yunzai-theme-btn.component.mjs +199 -199
  23. package/esm2022/layout/widgets/yunzai-user.component.mjs +129 -129
  24. package/esm2022/layout/yunzai-act.guard.mjs +106 -106
  25. package/esm2022/layout/yunzai-auth.service.mjs +107 -107
  26. package/esm2022/layout/yunzai-default.interceptor.mjs +200 -200
  27. package/esm2022/layout/yunzai-i18n.service.mjs +102 -129
  28. package/esm2022/layout/yunzai-lang.mjs +113 -113
  29. package/esm2022/layout/yunzai-layout.module.mjs +76 -76
  30. package/esm2022/layout/yunzai-startup.service.mjs +152 -152
  31. package/esm2022/public_api.mjs +1 -1
  32. package/fesm2022/bis.mjs +6 -6
  33. package/fesm2022/layout.mjs +3198 -3224
  34. package/fesm2022/layout.mjs.map +1 -1
  35. package/index.d.ts +1 -1
  36. package/index.less +1 -1
  37. package/layout/bis.config.d.ts +3 -3
  38. package/layout/html-names.d.ts +31 -31
  39. package/layout/icon/style-icons.d.ts +1 -1
  40. package/layout/index.d.ts +5 -5
  41. package/layout/layout-basic/index.d.ts +2 -2
  42. package/layout/layout-basic/interface.d.ts +8 -8
  43. package/layout/layout-basic/layout-basic.component.d.ts +28 -28
  44. package/layout/layout-nav/index.d.ts +3 -3
  45. package/layout/layout-nav/layout-nav-application.component.d.ts +31 -31
  46. package/layout/layout-nav/layout-nav-group.component.d.ts +16 -16
  47. package/layout/layout-nav/layout-nav-tile.component.d.ts +6 -6
  48. package/layout/public_api.d.ts +12 -12
  49. package/layout/style/index.less +154 -154
  50. package/layout/widgets/index.d.ts +6 -6
  51. package/layout/widgets/yunzai-clear-storage.component.d.ts +11 -11
  52. package/layout/widgets/yunzai-fullscreen.component.d.ts +8 -8
  53. package/layout/widgets/yunzai-i18n.component.d.ts +21 -21
  54. package/layout/widgets/yunzai-notify.component.d.ts +30 -30
  55. package/layout/widgets/yunzai-theme-btn.component.d.ts +32 -32
  56. package/layout/widgets/yunzai-user.component.d.ts +26 -26
  57. package/layout/yunzai-act.guard.d.ts +20 -20
  58. package/layout/yunzai-auth.service.d.ts +19 -19
  59. package/layout/yunzai-default.interceptor.d.ts +27 -27
  60. package/layout/yunzai-i18n.service.d.ts +26 -30
  61. package/layout/yunzai-lang.d.ts +11 -11
  62. package/layout/yunzai-layout.module.d.ts +22 -22
  63. package/layout/yunzai-startup.service.d.ts +34 -34
  64. package/package.json +39 -39
  65. package/public_api.d.ts +2 -2
  66. package/theme-compact.less +3 -3
  67. package/theme-dark.less +46 -46
  68. package/theme-default.less +46 -46
@@ -1,146 +1,146 @@
1
- import { __decorate } from "tslib";
2
- import { DOCUMENT } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
4
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
- import { InputBoolean } from '@yelon/util/decorator';
6
- import { Subject, takeUntil } from "rxjs";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@yelon/theme";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "ng-zorro-antd/core/transition-patch";
11
- import * as i4 from "ng-zorro-antd/menu";
12
- import * as i5 from "ng-zorro-antd/dropdown";
13
- import * as i6 from "ng-zorro-antd/icon";
14
- import * as i7 from "../yunzai-i18n.service";
15
- export class YunzaiI18NComponent {
16
- get curLangCode() {
17
- return this.settings.layout.lang;
18
- }
19
- constructor(settings, i18n, doc) {
20
- this.settings = settings;
21
- this.i18n = i18n;
22
- this.doc = doc;
23
- /** Whether to display language text */
24
- this.showLangText = true;
25
- this.$destroy = new Subject();
26
- this.langs = [];
27
- this.i18n
28
- .getLangs()
29
- .pipe(takeUntil(this.$destroy))
30
- .subscribe(langs => {
31
- this.langs = langs;
32
- });
33
- }
34
- change(lang) {
35
- const spinEl = this.doc.createElement('div');
36
- spinEl.setAttribute('class', `page-loading ant-spin ant-spin-lg ant-spin-spinning`);
37
- spinEl.innerHTML = `<span class="ant-spin-dot ant-spin-dot-spin"><i></i><i></i><i></i><i></i></span>`;
38
- this.doc.body.appendChild(spinEl);
39
- this.i18n.loadLangData(lang).subscribe(res => {
40
- this.i18n.use(lang, res);
41
- this.settings.setLayout('lang', lang);
42
- setTimeout(() => this.doc.location.reload());
43
- });
44
- }
45
- ngOnDestroy() {
46
- this.$destroy.complete();
47
- }
48
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
49
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
50
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
51
- <i nz-icon nzType="global"></i>
52
- {{ 'lang.nav' | i18n }}
53
- <i nz-icon nzType="down"></i>
54
- </div>
55
- <i
56
- *ngIf="!showLangText"
57
- nz-dropdown
58
- [nzDropdownMenu]="langMenu"
59
- nzPlacement="bottomRight"
60
- nz-icon
61
- nzType="global"
62
- ></i>
63
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
64
- <ul nz-menu>
65
- <li
66
- data-event-id="_nav_lang"
67
- [attr.data-text]="item.text"
68
- nz-menu-item
69
- *ngFor="let item of langs"
70
- [nzSelected]="item.code === curLangCode"
71
- (click)="change(item.code)"
72
- >
73
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
74
- <img
75
- *ngIf="item.icon"
76
- style="margin-right:4px"
77
- width="50px"
78
- height="30px"
79
- [src]="'data:image/png;base64,' + item.icon"
80
- [alt]="item.abbr"
81
- class="pr-xs"
82
- />
83
- {{ item.text }}
84
- </li>
85
- </ul>
86
- </nz-dropdown-menu>
87
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "directive", type: i4.NzMenuItemDirective, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i5.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
- }
89
- __decorate([
90
- InputBoolean()
91
- ], YunzaiI18NComponent.prototype, "showLangText", void 0);
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: YunzaiI18NComponent, decorators: [{
93
- type: Component,
94
- args: [{
95
- selector: 'yunzai-i18n',
96
- template: `
97
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
98
- <i nz-icon nzType="global"></i>
99
- {{ 'lang.nav' | i18n }}
100
- <i nz-icon nzType="down"></i>
101
- </div>
102
- <i
103
- *ngIf="!showLangText"
104
- nz-dropdown
105
- [nzDropdownMenu]="langMenu"
106
- nzPlacement="bottomRight"
107
- nz-icon
108
- nzType="global"
109
- ></i>
110
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
111
- <ul nz-menu>
112
- <li
113
- data-event-id="_nav_lang"
114
- [attr.data-text]="item.text"
115
- nz-menu-item
116
- *ngFor="let item of langs"
117
- [nzSelected]="item.code === curLangCode"
118
- (click)="change(item.code)"
119
- >
120
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
121
- <img
122
- *ngIf="item.icon"
123
- style="margin-right:4px"
124
- width="50px"
125
- height="30px"
126
- [src]="'data:image/png;base64,' + item.icon"
127
- [alt]="item.abbr"
128
- class="pr-xs"
129
- />
130
- {{ item.text }}
131
- </li>
132
- </ul>
133
- </nz-dropdown-menu>
134
- `,
135
- changeDetection: ChangeDetectionStrategy.OnPush
136
- }]
137
- }], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i7.YunzaiI18NService, decorators: [{
138
- type: Inject,
139
- args: [YUNZAI_I18N_TOKEN]
140
- }] }, { type: undefined, decorators: [{
141
- type: Inject,
142
- args: [DOCUMENT]
143
- }] }]; }, propDecorators: { showLangText: [{
144
- type: Input
145
- }] } });
1
+ import { __decorate } from "tslib";
2
+ import { DOCUMENT } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
4
+ import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
5
+ import { InputBoolean } from '@yelon/util/decorator';
6
+ import { Subject, takeUntil } from "rxjs";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@yelon/theme";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "ng-zorro-antd/core/transition-patch";
11
+ import * as i4 from "ng-zorro-antd/menu";
12
+ import * as i5 from "ng-zorro-antd/dropdown";
13
+ import * as i6 from "ng-zorro-antd/icon";
14
+ import * as i7 from "../yunzai-i18n.service";
15
+ export class YunzaiI18NComponent {
16
+ get curLangCode() {
17
+ return this.settings.layout.lang;
18
+ }
19
+ constructor(settings, i18n, doc) {
20
+ this.settings = settings;
21
+ this.i18n = i18n;
22
+ this.doc = doc;
23
+ /** Whether to display language text */
24
+ this.showLangText = true;
25
+ this.$destroy = new Subject();
26
+ this.langs = [];
27
+ this.i18n
28
+ .getLangs()
29
+ .pipe(takeUntil(this.$destroy))
30
+ .subscribe(langs => {
31
+ this.langs = langs;
32
+ });
33
+ }
34
+ change(lang) {
35
+ const spinEl = this.doc.createElement('div');
36
+ spinEl.setAttribute('class', `page-loading ant-spin ant-spin-lg ant-spin-spinning`);
37
+ spinEl.innerHTML = `<span class="ant-spin-dot ant-spin-dot-spin"><i></i><i></i><i></i><i></i></span>`;
38
+ this.doc.body.appendChild(spinEl);
39
+ this.i18n.loadLangData(lang).subscribe(res => {
40
+ this.i18n.use(lang, res);
41
+ this.settings.setLayout('lang', lang);
42
+ setTimeout(() => this.doc.location.reload());
43
+ });
44
+ }
45
+ ngOnDestroy() {
46
+ this.$destroy.complete();
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
49
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
50
+ <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
51
+ <i nz-icon nzType="global"></i>
52
+ {{ 'lang.nav' | i18n }}
53
+ <i nz-icon nzType="down"></i>
54
+ </div>
55
+ <i
56
+ *ngIf="!showLangText"
57
+ nz-dropdown
58
+ [nzDropdownMenu]="langMenu"
59
+ nzPlacement="bottomRight"
60
+ nz-icon
61
+ nzType="global"
62
+ ></i>
63
+ <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
64
+ <ul nz-menu>
65
+ <li
66
+ data-event-id="_nav_lang"
67
+ [attr.data-text]="item.text"
68
+ nz-menu-item
69
+ *ngFor="let item of langs"
70
+ [nzSelected]="item.code === curLangCode"
71
+ (click)="change(item.code)"
72
+ >
73
+ <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
74
+ <img
75
+ *ngIf="item.icon"
76
+ style="margin-right:4px"
77
+ width="50px"
78
+ height="30px"
79
+ [src]="'data:image/png;base64,' + item.icon"
80
+ [alt]="item.abbr"
81
+ class="pr-xs"
82
+ />
83
+ {{ item.text }}
84
+ </li>
85
+ </ul>
86
+ </nz-dropdown-menu>
87
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i4.NzMenuDirective, selector: "[nz-menu]", inputs: ["nzInlineIndent", "nzTheme", "nzMode", "nzInlineCollapsed", "nzSelectable"], outputs: ["nzClick"], exportAs: ["nzMenu"] }, { kind: "directive", type: i4.NzMenuItemDirective, selector: "[nz-menu-item]", inputs: ["nzPaddingLeft", "nzDisabled", "nzSelected", "nzDanger", "nzMatchRouterExact", "nzMatchRouter"], exportAs: ["nzMenuItem"] }, { kind: "directive", type: i5.NzDropDownDirective, selector: "[nz-dropdown]", inputs: ["nzDropdownMenu", "nzTrigger", "nzMatchWidthElement", "nzBackdrop", "nzClickHide", "nzDisabled", "nzVisible", "nzOverlayClassName", "nzOverlayStyle", "nzPlacement"], outputs: ["nzVisibleChange"], exportAs: ["nzDropdown"] }, { kind: "component", type: i5.NzDropdownMenuComponent, selector: "nz-dropdown-menu", exportAs: ["nzDropdownMenu"] }, { kind: "directive", type: i6.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "pipe", type: i1.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ }
89
+ __decorate([
90
+ InputBoolean()
91
+ ], YunzaiI18NComponent.prototype, "showLangText", void 0);
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: YunzaiI18NComponent, decorators: [{
93
+ type: Component,
94
+ args: [{
95
+ selector: 'yunzai-i18n',
96
+ template: `
97
+ <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
98
+ <i nz-icon nzType="global"></i>
99
+ {{ 'lang.nav' | i18n }}
100
+ <i nz-icon nzType="down"></i>
101
+ </div>
102
+ <i
103
+ *ngIf="!showLangText"
104
+ nz-dropdown
105
+ [nzDropdownMenu]="langMenu"
106
+ nzPlacement="bottomRight"
107
+ nz-icon
108
+ nzType="global"
109
+ ></i>
110
+ <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
111
+ <ul nz-menu>
112
+ <li
113
+ data-event-id="_nav_lang"
114
+ [attr.data-text]="item.text"
115
+ nz-menu-item
116
+ *ngFor="let item of langs"
117
+ [nzSelected]="item.code === curLangCode"
118
+ (click)="change(item.code)"
119
+ >
120
+ <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
121
+ <img
122
+ *ngIf="item.icon"
123
+ style="margin-right:4px"
124
+ width="50px"
125
+ height="30px"
126
+ [src]="'data:image/png;base64,' + item.icon"
127
+ [alt]="item.abbr"
128
+ class="pr-xs"
129
+ />
130
+ {{ item.text }}
131
+ </li>
132
+ </ul>
133
+ </nz-dropdown-menu>
134
+ `,
135
+ changeDetection: ChangeDetectionStrategy.OnPush
136
+ }]
137
+ }], ctorParameters: function () { return [{ type: i1.SettingsService }, { type: i7.YunzaiI18NService, decorators: [{
138
+ type: Inject,
139
+ args: [YUNZAI_I18N_TOKEN]
140
+ }] }, { type: undefined, decorators: [{
141
+ type: Inject,
142
+ args: [DOCUMENT]
143
+ }] }]; }, propDecorators: { showLangText: [{
144
+ type: Input
145
+ }] } });
146
146
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWkxOG4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC93aWRnZXRzL3l1bnphaS1pMThuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUMsaUJBQWlCLEVBQWtDLE1BQU0sY0FBYyxDQUFDO0FBRWhGLE9BQU8sRUFBZSxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBNkN4QyxNQUFNLE9BQU8sbUJBQW1CO0lBUTlCLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUNVLFFBQXlCLEVBQ0UsSUFBdUIsRUFDaEMsR0FBUTtRQUYxQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUNFLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQUs7UUFicEMsdUNBQXVDO1FBQ2QsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7UUFFaEMsVUFBSyxHQUFxQixFQUFFLENBQUM7UUFXM0IsSUFBSSxDQUFDLElBQUk7YUFDTixRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUscURBQXFELENBQUMsQ0FBQztRQUNwRixNQUFNLENBQUMsU0FBUyxHQUFHLGtGQUFrRixDQUFDO1FBQ3RHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMxQixDQUFDOzhHQXhDVSxtQkFBbUIsaURBY3BCLGlCQUFpQixhQUNqQixRQUFRO2tHQWZQLG1CQUFtQiw2RkF6Q3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVDs7QUFNd0I7SUFBZixZQUFZLEVBQUU7eURBQXFCOzJGQUhsQyxtQkFBbUI7a0JBM0MvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7MEJBZUksTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLFFBQVE7NENBWk8sWUFBWTtzQkFBcEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7WVVOWkFJX0kxOE5fVE9LRU4sIFNldHRpbmdzU2VydmljZSwgWXVuemFpSTE4TlR5cGV9IGZyb20gJ0B5ZWxvbi90aGVtZSc7XG5pbXBvcnQge1l1bnphaUkxOE5TZXJ2aWNlfSBmcm9tIFwiLi4veXVuemFpLWkxOG4uc2VydmljZVwiXG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgSW5wdXRCb29sZWFufSBmcm9tICdAeWVsb24vdXRpbC9kZWNvcmF0b3InO1xuXG5pbXBvcnQge1N1YmplY3QsIHRha2VVbnRpbH0gZnJvbSBcInJ4anNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXVuemFpLWkxOG4nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgKm5nSWY9XCJzaG93TGFuZ1RleHRcIiBuei1kcm9wZG93biBbbnpEcm9wZG93bk1lbnVdPVwibGFuZ01lbnVcIiBuelBsYWNlbWVudD1cImJvdHRvbVJpZ2h0XCI+XG4gICAgICA8aSBuei1pY29uIG56VHlwZT1cImdsb2JhbFwiPjwvaT5cbiAgICAgIHt7ICdsYW5nLm5hdicgfCBpMThuIH19XG4gICAgICA8aSBuei1pY29uIG56VHlwZT1cImRvd25cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGlcbiAgICAgICpuZ0lmPVwiIXNob3dMYW5nVGV4dFwiXG4gICAgICBuei1kcm9wZG93blxuICAgICAgW256RHJvcGRvd25NZW51XT1cImxhbmdNZW51XCJcbiAgICAgIG56UGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxuICAgICAgbnotaWNvblxuICAgICAgbnpUeXBlPVwiZ2xvYmFsXCJcbiAgICA+PC9pPlxuICAgIDxuei1kcm9wZG93bi1tZW51IGRhdGEtZXZlbnQtaWQ9XCJfbmF2X2xhbmdcIiAjbGFuZ01lbnU9XCJuekRyb3Bkb3duTWVudVwiPlxuICAgICAgPHVsIG56LW1lbnU+XG4gICAgICAgIDxsaVxuICAgICAgICAgIGRhdGEtZXZlbnQtaWQ9XCJfbmF2X2xhbmdcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdGV4dF09XCJpdGVtLnRleHRcIlxuICAgICAgICAgIG56LW1lbnUtaXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxhbmdzXCJcbiAgICAgICAgICBbbnpTZWxlY3RlZF09XCJpdGVtLmNvZGUgPT09IGN1ckxhbmdDb2RlXCJcbiAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlKGl0ZW0uY29kZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXRlbS5pY29uXCIgcm9sZT1cImltZ1wiIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS50ZXh0XCIgY2xhc3M9XCJwci14c1wiPnt7IGl0ZW0uYWJiciB9fTwvc3Bhbj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDo0cHhcIlxuICAgICAgICAgICAgd2lkdGg9XCI1MHB4XCJcbiAgICAgICAgICAgIGhlaWdodD1cIjMwcHhcIlxuICAgICAgICAgICAgW3NyY109XCInZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBpdGVtLmljb25cIlxuICAgICAgICAgICAgW2FsdF09XCJpdGVtLmFiYnJcIlxuICAgICAgICAgICAgY2xhc3M9XCJwci14c1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9uei1kcm9wZG93bi1tZW51PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBZdW56YWlJMThOQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95e1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2hvd0xhbmdUZXh0OiBCb29sZWFuSW5wdXQ7XG4gIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgbGFuZ3VhZ2UgdGV4dCAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0xhbmdUZXh0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSAkZGVzdHJveSA9IG5ldyBTdWJqZWN0KClcblxuICBsYW5nczogWXVuemFpSTE4TlR5cGVbXSA9IFtdO1xuXG4gIGdldCBjdXJMYW5nQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmxheW91dC5sYW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pIHByaXZhdGUgaTE4bjogWXVuemFpSTE4TlNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueVxuICApIHtcbiAgICB0aGlzLmkxOG5cbiAgICAgIC5nZXRMYW5ncygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4kZGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKGxhbmdzID0+IHtcbiAgICAgICAgdGhpcy5sYW5ncyA9IGxhbmdzO1xuICAgICAgfSk7XG4gIH1cblxuICBjaGFuZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3BpbkVsID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc3BpbkVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBgcGFnZS1sb2FkaW5nIGFudC1zcGluIGFudC1zcGluLWxnIGFudC1zcGluLXNwaW5uaW5nYCk7XG4gICAgc3BpbkVsLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz1cImFudC1zcGluLWRvdCBhbnQtc3Bpbi1kb3Qtc3BpblwiPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48L3NwYW4+YDtcbiAgICB0aGlzLmRvYy5ib2R5LmFwcGVuZENoaWxkKHNwaW5FbCk7XG5cbiAgICB0aGlzLmkxOG4ubG9hZExhbmdEYXRhKGxhbmcpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5pMThuLnVzZShsYW5nLCByZXMpO1xuICAgICAgdGhpcy5zZXR0aW5ncy5zZXRMYXlvdXQoJ2xhbmcnLCBsYW5nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kb2MubG9jYXRpb24ucmVsb2FkKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4kZGVzdHJveS5jb21wbGV0ZSgpXG4gIH1cblxufVxuIl19