@yelon/bis 15.2.0 → 15.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +23 -23
  3. package/esm2020/bis.mjs +4 -4
  4. package/esm2020/index.mjs +1 -1
  5. package/esm2020/layout/bis.config.mjs +10 -10
  6. package/esm2020/layout/html-names.mjs +32 -32
  7. package/esm2020/layout/icon/style-icons.mjs +795 -795
  8. package/esm2020/layout/layout-basic/index.mjs +2 -2
  9. package/esm2020/layout/layout-basic/interface.mjs +6 -6
  10. package/esm2020/layout/layout-basic/layout-basic.component.mjs +355 -355
  11. package/esm2020/layout/layout-nav/index.mjs +4 -4
  12. package/esm2020/layout/layout-nav/layout-nav-application.component.mjs +326 -326
  13. package/esm2020/layout/layout-nav/layout-nav-group.component.mjs +123 -123
  14. package/esm2020/layout/layout-nav/layout-nav-tile.component.mjs +14 -14
  15. package/esm2020/layout/layout-nav/types.mjs +1 -1
  16. package/esm2020/layout/layout.mjs +4 -4
  17. package/esm2020/layout/public_api.mjs +12 -12
  18. package/esm2020/layout/widgets/index.mjs +6 -6
  19. package/esm2020/layout/widgets/yunzai-clear-storage.component.mjs +44 -44
  20. package/esm2020/layout/widgets/yunzai-fullscreen.component.mjs +44 -44
  21. package/esm2020/layout/widgets/yunzai-i18n.component.mjs +145 -145
  22. package/esm2020/layout/widgets/yunzai-notify.component.mjs +182 -182
  23. package/esm2020/layout/widgets/yunzai-theme-btn.component.mjs +200 -200
  24. package/esm2020/layout/widgets/yunzai-user.component.mjs +129 -129
  25. package/esm2020/layout/yunzai-act.guard.mjs +106 -106
  26. package/esm2020/layout/yunzai-auth.service.mjs +169 -167
  27. package/esm2020/layout/yunzai-default.interceptor.mjs +208 -208
  28. package/esm2020/layout/yunzai-i18n.service.mjs +130 -130
  29. package/esm2020/layout/yunzai-lang.mjs +113 -113
  30. package/esm2020/layout/yunzai-layout.module.mjs +75 -75
  31. package/esm2020/layout/yunzai-startup.service.mjs +156 -156
  32. package/esm2020/public_api.mjs +1 -1
  33. package/fesm2015/bis.mjs +6 -6
  34. package/fesm2015/layout.mjs +3232 -3230
  35. package/fesm2015/layout.mjs.map +1 -1
  36. package/fesm2020/bis.mjs +6 -6
  37. package/fesm2020/layout.mjs +3240 -3238
  38. package/fesm2020/layout.mjs.map +1 -1
  39. package/index.d.ts +1 -1
  40. package/index.less +1 -1
  41. package/layout/bis.config.d.ts +3 -3
  42. package/layout/html-names.d.ts +31 -31
  43. package/layout/icon/style-icons.d.ts +1 -1
  44. package/layout/index.d.ts +5 -5
  45. package/layout/layout-basic/index.d.ts +2 -2
  46. package/layout/layout-basic/interface.d.ts +24 -24
  47. package/layout/layout-basic/layout-basic.component.d.ts +32 -32
  48. package/layout/layout-nav/index.d.ts +4 -4
  49. package/layout/layout-nav/layout-nav-application.component.d.ts +27 -27
  50. package/layout/layout-nav/layout-nav-group.component.d.ts +17 -17
  51. package/layout/layout-nav/layout-nav-tile.component.d.ts +6 -6
  52. package/layout/layout-nav/types.d.ts +15 -15
  53. package/layout/public_api.d.ts +12 -12
  54. package/layout/style/index.less +154 -154
  55. package/layout/widgets/index.d.ts +6 -6
  56. package/layout/widgets/yunzai-clear-storage.component.d.ts +11 -11
  57. package/layout/widgets/yunzai-fullscreen.component.d.ts +8 -8
  58. package/layout/widgets/yunzai-i18n.component.d.ts +21 -21
  59. package/layout/widgets/yunzai-notify.component.d.ts +30 -30
  60. package/layout/widgets/yunzai-theme-btn.component.d.ts +32 -32
  61. package/layout/widgets/yunzai-user.component.d.ts +28 -28
  62. package/layout/yunzai-act.guard.d.ts +22 -22
  63. package/layout/yunzai-auth.service.d.ts +21 -21
  64. package/layout/yunzai-default.interceptor.d.ts +27 -27
  65. package/layout/yunzai-i18n.service.d.ts +33 -33
  66. package/layout/yunzai-lang.d.ts +11 -11
  67. package/layout/yunzai-layout.module.d.ts +21 -21
  68. package/layout/yunzai-startup.service.d.ts +37 -37
  69. package/package.json +47 -47
  70. package/public_api.d.ts +2 -2
  71. package/theme-compact.less +3 -3
  72. package/theme-dark.less +46 -46
  73. 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 { Subject, takeUntil } from 'rxjs';
5
- import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
6
- import { InputBoolean } from '@yelon/util/decorator';
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
- this.destroy$ = new Subject();
24
- /** Whether to display language text */
25
- this.showLangText = true;
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
- }
49
- YunzaiI18NComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
50
- YunzaiI18NComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
51
- <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
52
- <i nz-icon nzType="global"></i>
53
- {{ 'lang.nav' | i18n }}
54
- <i nz-icon nzType="down"></i>
55
- </div>
56
- <i
57
- *ngIf="!showLangText"
58
- nz-dropdown
59
- [nzDropdownMenu]="langMenu"
60
- nzPlacement="bottomRight"
61
- nz-icon
62
- nzType="global"
63
- ></i>
64
- <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
65
- <ul nz-menu>
66
- <li
67
- data-event-id="_nav_lang"
68
- [attr.data-text]="item.text"
69
- nz-menu-item
70
- *ngFor="let item of langs"
71
- [nzSelected]="item.code === curLangCode"
72
- (click)="change(item.code)"
73
- >
74
- <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
75
- <img
76
- *ngIf="item.icon"
77
- style="margin-right:4px"
78
- width="50px"
79
- height="30px"
80
- [src]="'data:image/png;base64,' + item.icon"
81
- [alt]="item.abbr"
82
- class="pr-xs"
83
- />
84
- {{ item.text }}
85
- </li>
86
- </ul>
87
- </nz-dropdown-menu>
88
- `, 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 });
89
- __decorate([
90
- InputBoolean()
91
- ], YunzaiI18NComponent.prototype, "showLangText", void 0);
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", 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 { Subject, takeUntil } from 'rxjs';
5
+ import { YUNZAI_I18N_TOKEN } from '@yelon/theme';
6
+ import { InputBoolean } from '@yelon/util/decorator';
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
+ this.destroy$ = new Subject();
24
+ /** Whether to display language text */
25
+ this.showLangText = true;
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
+ }
49
+ YunzaiI18NComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: YunzaiI18NComponent, deps: [{ token: i1.SettingsService }, { token: YUNZAI_I18N_TOKEN }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
50
+ YunzaiI18NComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: YunzaiI18NComponent, selector: "yunzai-i18n", inputs: { showLangText: "showLangText" }, ngImport: i0, template: `
51
+ <div *ngIf="showLangText" nz-dropdown [nzDropdownMenu]="langMenu" nzPlacement="bottomRight">
52
+ <i nz-icon nzType="global"></i>
53
+ {{ 'lang.nav' | i18n }}
54
+ <i nz-icon nzType="down"></i>
55
+ </div>
56
+ <i
57
+ *ngIf="!showLangText"
58
+ nz-dropdown
59
+ [nzDropdownMenu]="langMenu"
60
+ nzPlacement="bottomRight"
61
+ nz-icon
62
+ nzType="global"
63
+ ></i>
64
+ <nz-dropdown-menu data-event-id="_nav_lang" #langMenu="nzDropdownMenu">
65
+ <ul nz-menu>
66
+ <li
67
+ data-event-id="_nav_lang"
68
+ [attr.data-text]="item.text"
69
+ nz-menu-item
70
+ *ngFor="let item of langs"
71
+ [nzSelected]="item.code === curLangCode"
72
+ (click)="change(item.code)"
73
+ >
74
+ <span *ngIf="!item.icon" role="img" [attr.aria-label]="item.text" class="pr-xs">{{ item.abbr }}</span>
75
+ <img
76
+ *ngIf="item.icon"
77
+ style="margin-right:4px"
78
+ width="50px"
79
+ height="30px"
80
+ [src]="'data:image/png;base64,' + item.icon"
81
+ [alt]="item.abbr"
82
+ class="pr-xs"
83
+ />
84
+ {{ item.text }}
85
+ </li>
86
+ </ul>
87
+ </nz-dropdown-menu>
88
+ `, 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 });
89
+ __decorate([
90
+ InputBoolean()
91
+ ], YunzaiI18NComponent.prototype, "showLangText", void 0);
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXVuemFpLWkxOG4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYmlzL2xheW91dC93aWRnZXRzL3l1bnphaS1pMThuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1DLE1BQU0sY0FBYyxDQUFDO0FBQ2xGLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQStDbkUsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QixJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsWUFDVSxRQUF5QixFQUNFLElBQXVCLEVBQ2hDLEdBQVE7UUFGMUIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDRSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFLO1FBYjVCLGFBQVEsR0FBaUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMvQyx1Q0FBdUM7UUFDZCxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUU3QyxVQUFLLEdBQXFCLEVBQUUsQ0FBQztRQVczQixJQUFJLENBQUMsSUFBSTthQUNOLFFBQVEsRUFBRTthQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsa0ZBQWtGLENBQUM7UUFDdEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7O2dIQXhDVSxtQkFBbUIsaURBY3BCLGlCQUFpQixhQUNqQixRQUFRO29HQWZQLG1CQUFtQiw2RkF6Q3BCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDVDtBQU93QjtJQUFmLFlBQVksRUFBRTt5REFBcUI7MkZBSmxDLG1CQUFtQjtrQkEzQy9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1Q7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzswQkFlSSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsUUFBUTs0Q0FYTyxZQUFZO3NCQUFwQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgWVVOWkFJX0kxOE5fVE9LRU4sIFNldHRpbmdzU2VydmljZSwgWXVuemFpSTE4TlR5cGUgfSBmcm9tICdAeWVsb24vdGhlbWUnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBJbnB1dEJvb2xlYW4gfSBmcm9tICdAeWVsb24vdXRpbC9kZWNvcmF0b3InO1xuXG5pbXBvcnQgeyBZdW56YWlJMThOU2VydmljZSB9IGZyb20gJy4uL3l1bnphaS1pMThuLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dW56YWktaTE4bicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAqbmdJZj1cInNob3dMYW5nVGV4dFwiIG56LWRyb3Bkb3duIFtuekRyb3Bkb3duTWVudV09XCJsYW5nTWVudVwiIG56UGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIj5cbiAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiZ2xvYmFsXCI+PC9pPlxuICAgICAge3sgJ2xhbmcubmF2JyB8IGkxOG4gfX1cbiAgICAgIDxpIG56LWljb24gbnpUeXBlPVwiZG93blwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8aVxuICAgICAgKm5nSWY9XCIhc2hvd0xhbmdUZXh0XCJcbiAgICAgIG56LWRyb3Bkb3duXG4gICAgICBbbnpEcm9wZG93bk1lbnVdPVwibGFuZ01lbnVcIlxuICAgICAgbnpQbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXG4gICAgICBuei1pY29uXG4gICAgICBuelR5cGU9XCJnbG9iYWxcIlxuICAgID48L2k+XG4gICAgPG56LWRyb3Bkb3duLW1lbnUgZGF0YS1ldmVudC1pZD1cIl9uYXZfbGFuZ1wiICNsYW5nTWVudT1cIm56RHJvcGRvd25NZW51XCI+XG4gICAgICA8dWwgbnotbWVudT5cbiAgICAgICAgPGxpXG4gICAgICAgICAgZGF0YS1ldmVudC1pZD1cIl9uYXZfbGFuZ1wiXG4gICAgICAgICAgW2F0dHIuZGF0YS10ZXh0XT1cIml0ZW0udGV4dFwiXG4gICAgICAgICAgbnotbWVudS1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGFuZ3NcIlxuICAgICAgICAgIFtuelNlbGVjdGVkXT1cIml0ZW0uY29kZSA9PT0gY3VyTGFuZ0NvZGVcIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2UoaXRlbS5jb2RlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLmljb25cIiByb2xlPVwiaW1nXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLnRleHRcIiBjbGFzcz1cInByLXhzXCI+e3sgaXRlbS5hYmJyIH19PC9zcGFuPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjRweFwiXG4gICAgICAgICAgICB3aWR0aD1cIjUwcHhcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMzBweFwiXG4gICAgICAgICAgICBbc3JjXT1cIidkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGl0ZW0uaWNvblwiXG4gICAgICAgICAgICBbYWx0XT1cIml0ZW0uYWJiclwiXG4gICAgICAgICAgICBjbGFzcz1cInByLXhzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L256LWRyb3Bkb3duLW1lbnU+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFl1bnphaUkxOE5Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2hvd0xhbmdUZXh0OiBCb29sZWFuSW5wdXQ7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgbGFuZ3VhZ2UgdGV4dCAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2hvd0xhbmdUZXh0ID0gdHJ1ZTtcblxuICBsYW5nczogWXVuemFpSTE4TlR5cGVbXSA9IFtdO1xuXG4gIGdldCBjdXJMYW5nQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmxheW91dC5sYW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogU2V0dGluZ3NTZXJ2aWNlLFxuICAgIEBJbmplY3QoWVVOWkFJX0kxOE5fVE9LRU4pIHByaXZhdGUgaTE4bjogWXVuemFpSTE4TlNlcnZpY2UsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2M6IGFueVxuICApIHtcbiAgICB0aGlzLmkxOG5cbiAgICAgIC5nZXRMYW5ncygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKGxhbmdzID0+IHtcbiAgICAgICAgdGhpcy5sYW5ncyA9IGxhbmdzO1xuICAgICAgfSk7XG4gIH1cblxuICBjaGFuZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3BpbkVsID0gdGhpcy5kb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc3BpbkVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBgcGFnZS1sb2FkaW5nIGFudC1zcGluIGFudC1zcGluLWxnIGFudC1zcGluLXNwaW5uaW5nYCk7XG4gICAgc3BpbkVsLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz1cImFudC1zcGluLWRvdCBhbnQtc3Bpbi1kb3Qtc3BpblwiPjxpPjwvaT48aT48L2k+PGk+PC9pPjxpPjwvaT48L3NwYW4+YDtcbiAgICB0aGlzLmRvYy5ib2R5LmFwcGVuZENoaWxkKHNwaW5FbCk7XG5cbiAgICB0aGlzLmkxOG4ubG9hZExhbmdEYXRhKGxhbmcpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgdGhpcy5pMThuLnVzZShsYW5nLCByZXMpO1xuICAgICAgdGhpcy5zZXR0aW5ncy5zZXRMYXlvdXQoJ2xhbmcnLCBsYW5nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kb2MubG9jYXRpb24ucmVsb2FkKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=