ngx-auto-logout 1.0.0
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.
- package/README.md +247 -0
- package/dist/README.md +247 -0
- package/dist/bundles/ngx-auto-logout.umd.js +864 -0
- package/dist/bundles/ngx-auto-logout.umd.js.map +1 -0
- package/dist/bundles/ngx-auto-logout.umd.min.js +16 -0
- package/dist/bundles/ngx-auto-logout.umd.min.js.map +1 -0
- package/dist/esm2015/lib/auto-logout.component.js +351 -0
- package/dist/esm2015/lib/auto-logout.module.js +26 -0
- package/dist/esm2015/lib/auto-logout.service.js +384 -0
- package/dist/esm2015/lib/models/auto-logout-config.interface.js +10 -0
- package/dist/esm2015/lib/models/auto-logout-config.token.js +7 -0
- package/dist/esm2015/lib/provide-auto-logout.js +11 -0
- package/dist/esm2015/ngx-auto-logout.js +5 -0
- package/dist/esm2015/public-api.js +10 -0
- package/dist/esm5/lib/auto-logout.component.js +196 -0
- package/dist/esm5/lib/auto-logout.module.js +30 -0
- package/dist/esm5/lib/auto-logout.service.js +391 -0
- package/dist/esm5/lib/models/auto-logout-config.interface.js +10 -0
- package/dist/esm5/lib/models/auto-logout-config.token.js +7 -0
- package/dist/esm5/lib/provide-auto-logout.js +11 -0
- package/dist/esm5/ngx-auto-logout.js +5 -0
- package/dist/esm5/public-api.js +10 -0
- package/dist/fesm2015/ngx-auto-logout.js +787 -0
- package/dist/fesm2015/ngx-auto-logout.js.map +1 -0
- package/dist/fesm5/ngx-auto-logout.js +643 -0
- package/dist/fesm5/ngx-auto-logout.js.map +1 -0
- package/dist/lib/auto-logout.component.d.ts +81 -0
- package/dist/lib/auto-logout.module.d.ts +8 -0
- package/dist/lib/auto-logout.service.d.ts +108 -0
- package/dist/lib/models/auto-logout-config.interface.d.ts +46 -0
- package/dist/lib/models/auto-logout-config.token.d.ts +7 -0
- package/dist/lib/provide-auto-logout.d.ts +6 -0
- package/dist/ngx-auto-logout.d.ts +4 -0
- package/dist/ngx-auto-logout.metadata.json +1 -0
- package/dist/package.json +41 -0
- package/dist/public-api.d.ts +6 -0
- package/package.json +53 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
3
|
+
import { AutoLogoutService } from './auto-logout.service';
|
|
4
|
+
let AutoLogoutComponent = class AutoLogoutComponent {
|
|
5
|
+
constructor(autoLogout) {
|
|
6
|
+
this.autoLogout = autoLogout;
|
|
7
|
+
// ==================== 输入属性 ====================
|
|
8
|
+
/**
|
|
9
|
+
* 是否显示延长按钮
|
|
10
|
+
*/
|
|
11
|
+
this.showExtendButton = true;
|
|
12
|
+
/**
|
|
13
|
+
* 是否显示暂停按钮
|
|
14
|
+
*/
|
|
15
|
+
this.showPauseButton = true;
|
|
16
|
+
/**
|
|
17
|
+
* 延长的秒数(默认30分钟)
|
|
18
|
+
*/
|
|
19
|
+
this.extendSeconds = 1800;
|
|
20
|
+
// ==================== 输出事件 ====================
|
|
21
|
+
/**
|
|
22
|
+
* 警告事件
|
|
23
|
+
*/
|
|
24
|
+
this.onWarning = new EventEmitter();
|
|
25
|
+
/**
|
|
26
|
+
* 超时事件
|
|
27
|
+
*/
|
|
28
|
+
this.onTimeout = new EventEmitter();
|
|
29
|
+
/**
|
|
30
|
+
* 延长成功事件
|
|
31
|
+
*/
|
|
32
|
+
this.onExtended = new EventEmitter();
|
|
33
|
+
/**
|
|
34
|
+
* 暂停事件
|
|
35
|
+
*/
|
|
36
|
+
this.onPaused = new EventEmitter();
|
|
37
|
+
/**
|
|
38
|
+
* 恢复事件
|
|
39
|
+
*/
|
|
40
|
+
this.onResumed = new EventEmitter();
|
|
41
|
+
// ==================== 内部状态 ====================
|
|
42
|
+
this.subscription = null;
|
|
43
|
+
this.countdown = '00:00';
|
|
44
|
+
this.isWarning = false;
|
|
45
|
+
this.isUrgent = false;
|
|
46
|
+
this.isPaused = false;
|
|
47
|
+
this.canExtend = true;
|
|
48
|
+
this.remainingExtends = -1;
|
|
49
|
+
}
|
|
50
|
+
ngOnInit() {
|
|
51
|
+
// 如果提供了自定义配置,启动监控
|
|
52
|
+
if (this.config) {
|
|
53
|
+
this.autoLogout.startMonitoring(this.config);
|
|
54
|
+
}
|
|
55
|
+
// 订阅倒计时
|
|
56
|
+
this.subscription = this.autoLogout.getCountdown().subscribe((seconds) => {
|
|
57
|
+
var _a;
|
|
58
|
+
this.countdown = this.autoLogout.formatCountdown(seconds);
|
|
59
|
+
this.isWarning = this.autoLogout.isWarningState(seconds);
|
|
60
|
+
this.isUrgent = this.autoLogout.isUrgentState(seconds);
|
|
61
|
+
// 触发警告事件
|
|
62
|
+
const warningTime = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.warningTime) || 30;
|
|
63
|
+
if (seconds === warningTime) {
|
|
64
|
+
this.onWarning.emit(seconds);
|
|
65
|
+
}
|
|
66
|
+
// 触发超时事件
|
|
67
|
+
if (seconds <= 0) {
|
|
68
|
+
this.onTimeout.emit();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
// 定期检查状态
|
|
72
|
+
setInterval(() => {
|
|
73
|
+
this.updateStatus();
|
|
74
|
+
}, 1000);
|
|
75
|
+
this.updateStatus();
|
|
76
|
+
}
|
|
77
|
+
ngOnDestroy() {
|
|
78
|
+
if (this.subscription) {
|
|
79
|
+
this.subscription.unsubscribe();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ==================== 公开方法 ====================
|
|
83
|
+
/**
|
|
84
|
+
* 延长会话
|
|
85
|
+
*/
|
|
86
|
+
extendSession() {
|
|
87
|
+
this.handleExtend();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 暂停
|
|
91
|
+
*/
|
|
92
|
+
pause() {
|
|
93
|
+
this.handleTogglePause();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 恢复
|
|
97
|
+
*/
|
|
98
|
+
resume() {
|
|
99
|
+
this.handleTogglePause();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 获取模板上下文(用于自定义模板)
|
|
103
|
+
*/
|
|
104
|
+
get templateContext() {
|
|
105
|
+
return {
|
|
106
|
+
countdown: this.countdown,
|
|
107
|
+
isWarning: this.isWarning,
|
|
108
|
+
isUrgent: this.isUrgent,
|
|
109
|
+
isPaused: this.isPaused,
|
|
110
|
+
canExtend: this.canExtend,
|
|
111
|
+
remainingExtends: this.remainingExtends,
|
|
112
|
+
extendSession: () => this.handleExtend(),
|
|
113
|
+
togglePause: () => this.handleTogglePause(),
|
|
114
|
+
formatCountdown: (seconds) => this.autoLogout.formatCountdown(seconds)
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// ==================== 内部方法 ====================
|
|
118
|
+
updateStatus() {
|
|
119
|
+
this.isPaused = this.autoLogout.isAutoLogoutPaused();
|
|
120
|
+
this.canExtend = this.autoLogout.canExtendSession();
|
|
121
|
+
this.remainingExtends = this.autoLogout.getRemainingExtendTimes();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 处理延长会话(模板调用)
|
|
125
|
+
*/
|
|
126
|
+
handleExtend() {
|
|
127
|
+
const success = this.autoLogout.extendSession(this.extendSeconds);
|
|
128
|
+
if (success) {
|
|
129
|
+
this.onExtended.emit(this.extendSeconds);
|
|
130
|
+
}
|
|
131
|
+
this.updateStatus();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* 处理暂停/恢复切换(模板调用)
|
|
135
|
+
*/
|
|
136
|
+
handleTogglePause() {
|
|
137
|
+
if (this.isPaused) {
|
|
138
|
+
this.autoLogout.resume();
|
|
139
|
+
this.onResumed.emit();
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this.autoLogout.pause();
|
|
143
|
+
this.onPaused.emit();
|
|
144
|
+
}
|
|
145
|
+
this.updateStatus();
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
AutoLogoutComponent.ctorParameters = () => [
|
|
149
|
+
{ type: AutoLogoutService }
|
|
150
|
+
];
|
|
151
|
+
__decorate([
|
|
152
|
+
Input()
|
|
153
|
+
], AutoLogoutComponent.prototype, "showExtendButton", void 0);
|
|
154
|
+
__decorate([
|
|
155
|
+
Input()
|
|
156
|
+
], AutoLogoutComponent.prototype, "showPauseButton", void 0);
|
|
157
|
+
__decorate([
|
|
158
|
+
Input()
|
|
159
|
+
], AutoLogoutComponent.prototype, "extendSeconds", void 0);
|
|
160
|
+
__decorate([
|
|
161
|
+
Input()
|
|
162
|
+
], AutoLogoutComponent.prototype, "config", void 0);
|
|
163
|
+
__decorate([
|
|
164
|
+
Input()
|
|
165
|
+
], AutoLogoutComponent.prototype, "customTemplate", void 0);
|
|
166
|
+
__decorate([
|
|
167
|
+
Output()
|
|
168
|
+
], AutoLogoutComponent.prototype, "onWarning", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
Output()
|
|
171
|
+
], AutoLogoutComponent.prototype, "onTimeout", void 0);
|
|
172
|
+
__decorate([
|
|
173
|
+
Output()
|
|
174
|
+
], AutoLogoutComponent.prototype, "onExtended", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
Output()
|
|
177
|
+
], AutoLogoutComponent.prototype, "onPaused", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
Output()
|
|
180
|
+
], AutoLogoutComponent.prototype, "onResumed", void 0);
|
|
181
|
+
AutoLogoutComponent = __decorate([
|
|
182
|
+
Component({
|
|
183
|
+
selector: 'ngx-auto-logout',
|
|
184
|
+
template: `
|
|
185
|
+
<!-- 默认UI模式(傻瓜模式) -->
|
|
186
|
+
<div *ngIf="!customTemplate" class="ngx-auto-logout-container">
|
|
187
|
+
<!-- 倒计时显示 -->
|
|
188
|
+
<div class="countdown-display" [class.warning]="isWarning" [class.urgent]="isUrgent" [class.paused]="isPaused">
|
|
189
|
+
<span class="icon">{{ isPaused ? '⏸️' : '⏱️' }}</span>
|
|
190
|
+
<span class="time">{{ countdown }}</span>
|
|
191
|
+
<span *ngIf="isPaused" class="pause-label">(已暂停)</span>
|
|
192
|
+
</div>
|
|
193
|
+
|
|
194
|
+
<!-- 控制按钮 -->
|
|
195
|
+
<div class="controls">
|
|
196
|
+
<!-- 延长会话按钮 -->
|
|
197
|
+
<button *ngIf="showExtendButton && canExtend" class="btn btn-extend" (click)="handleExtend()" [disabled]="!canExtend" title="延长30分钟">
|
|
198
|
+
➕ 延长
|
|
199
|
+
<span *ngIf="remainingExtends !== -1" class="extend-count"> ({{ remainingExtends }}) </span>
|
|
200
|
+
</button>
|
|
201
|
+
|
|
202
|
+
<!-- 暂停/恢复按钮 -->
|
|
203
|
+
<button
|
|
204
|
+
*ngIf="showPauseButton"
|
|
205
|
+
class="btn btn-pause"
|
|
206
|
+
[class.paused]="isPaused"
|
|
207
|
+
(click)="handleTogglePause()"
|
|
208
|
+
[title]="isPaused ? '恢复自动登出' : '暂停自动登出'"
|
|
209
|
+
>
|
|
210
|
+
{{ isPaused ? '▶️ 恢复' : '⏸️ 暂停' }}
|
|
211
|
+
</button>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
<!-- 自定义模板模式(专家模式) -->
|
|
216
|
+
<ng-container *ngIf="customTemplate">
|
|
217
|
+
<ng-container [ngTemplateOutlet]="customTemplate" [ngTemplateOutletContext]="templateContext"></ng-container>
|
|
218
|
+
</ng-container>
|
|
219
|
+
`,
|
|
220
|
+
styles: [`
|
|
221
|
+
.ngx-auto-logout-container {
|
|
222
|
+
display: inline-flex;
|
|
223
|
+
align-items: center;
|
|
224
|
+
gap: 12px;
|
|
225
|
+
padding: 8px 12px;
|
|
226
|
+
background: #f8f9fa;
|
|
227
|
+
border-radius: 6px;
|
|
228
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.countdown-display {
|
|
232
|
+
display: flex;
|
|
233
|
+
align-items: center;
|
|
234
|
+
gap: 8px;
|
|
235
|
+
padding: 6px 12px;
|
|
236
|
+
background: white;
|
|
237
|
+
border-radius: 4px;
|
|
238
|
+
font-weight: bold;
|
|
239
|
+
font-size: 16px;
|
|
240
|
+
transition: all 0.3s ease;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.countdown-display.warning {
|
|
244
|
+
background: #fff3cd;
|
|
245
|
+
color: #856404;
|
|
246
|
+
animation: blink-warning 1s ease-in-out infinite;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.countdown-display.urgent {
|
|
250
|
+
background: #f8d7da;
|
|
251
|
+
color: #721c24;
|
|
252
|
+
animation: blink-urgent 0.5s ease-in-out infinite;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.countdown-display.paused {
|
|
256
|
+
opacity: 0.6;
|
|
257
|
+
background: #e9ecef;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.icon {
|
|
261
|
+
font-size: 18px;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.time {
|
|
265
|
+
min-width: 50px;
|
|
266
|
+
text-align: center;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.pause-label {
|
|
270
|
+
font-size: 12px;
|
|
271
|
+
color: #6c757d;
|
|
272
|
+
font-weight: normal;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.controls {
|
|
276
|
+
display: flex;
|
|
277
|
+
gap: 8px;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.btn {
|
|
281
|
+
padding: 6px 12px;
|
|
282
|
+
font-size: 13px;
|
|
283
|
+
border: none;
|
|
284
|
+
border-radius: 4px;
|
|
285
|
+
cursor: pointer;
|
|
286
|
+
transition: all 0.2s;
|
|
287
|
+
font-weight: 500;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.btn-extend {
|
|
291
|
+
background: #28a745;
|
|
292
|
+
color: white;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
.btn-extend:hover:not(:disabled) {
|
|
296
|
+
background: #218838;
|
|
297
|
+
transform: translateY(-1px);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.btn-extend:disabled {
|
|
301
|
+
background: #ccc;
|
|
302
|
+
cursor: not-allowed;
|
|
303
|
+
opacity: 0.6;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.btn-pause {
|
|
307
|
+
background: #007bff;
|
|
308
|
+
color: white;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
.btn-pause:hover {
|
|
312
|
+
background: #0056b3;
|
|
313
|
+
transform: translateY(-1px);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.btn-pause.paused {
|
|
317
|
+
background: #ffc107;
|
|
318
|
+
color: #212529;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.extend-count {
|
|
322
|
+
font-size: 11px;
|
|
323
|
+
opacity: 0.9;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
@keyframes blink-warning {
|
|
327
|
+
0%,
|
|
328
|
+
100% {
|
|
329
|
+
opacity: 1;
|
|
330
|
+
}
|
|
331
|
+
50% {
|
|
332
|
+
opacity: 0.7;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
@keyframes blink-urgent {
|
|
337
|
+
0%,
|
|
338
|
+
100% {
|
|
339
|
+
opacity: 1;
|
|
340
|
+
transform: scale(1);
|
|
341
|
+
}
|
|
342
|
+
50% {
|
|
343
|
+
opacity: 0.6;
|
|
344
|
+
transform: scale(1.05);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
`]
|
|
348
|
+
})
|
|
349
|
+
], AutoLogoutComponent);
|
|
350
|
+
export { AutoLogoutComponent };
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBa0MsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE2SzFELElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBaUU5QixZQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQWhFakQsaURBQWlEO1FBRWpEOztXQUVHO1FBQ00scUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRWpDOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQVk5QixpREFBaUQ7UUFFakQ7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DOztXQUVHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbEQ7O1dBRUc7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5Qzs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLGlEQUFpRDtRQUV6QyxpQkFBWSxHQUF3QixJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRThCLENBQUM7SUFFckQsUUFBUTtRQUNOLGtCQUFrQjtRQUNsQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUM7UUFFRCxRQUFRO1FBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFOztZQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV2RCxTQUFTO1lBQ1QsTUFBTSxXQUFXLEdBQUcsT0FBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxXQUFXLEtBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUI7WUFFRCxTQUFTO1lBQ1QsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3ZCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTO1FBQ1QsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxpREFBaUQ7SUFFakQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2pCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQyxlQUFlLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztTQUMvRSxDQUFDO0lBQ0osQ0FBQztJQUVELGlEQUFpRDtJQUV6QyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRSxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztDQUNGLENBQUE7O1lBaEhpQyxpQkFBaUI7O0FBM0R4QztJQUFSLEtBQUssRUFBRTs2REFBeUI7QUFLeEI7SUFBUixLQUFLLEVBQUU7NERBQXdCO0FBS3ZCO0lBQVIsS0FBSyxFQUFFOzBEQUFzQjtBQUtyQjtJQUFSLEtBQUssRUFBRTttREFBb0M7QUFLbkM7SUFBUixLQUFLLEVBQUU7MkRBQW1DO0FBT2pDO0lBQVQsTUFBTSxFQUFFO3NEQUF3QztBQUt2QztJQUFULE1BQU0sRUFBRTtzREFBc0M7QUFLckM7SUFBVCxNQUFNLEVBQUU7dURBQXlDO0FBS3hDO0lBQVQsTUFBTSxFQUFFO3FEQUFxQztBQUtwQztJQUFULE1BQU0sRUFBRTtzREFBc0M7QUFyRHBDLG1CQUFtQjtJQXpLL0IsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNUO2lCQUVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBK0hDO0tBRUosQ0FBQztHQUNXLG1CQUFtQixDQWlML0I7U0FqTFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0b0xvZ291dFNlcnZpY2UgfSBmcm9tICcuL2F1dG8tbG9nb3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2F1dG8tbG9nb3V0LWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hdXRvLWxvZ291dCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSDpu5jorqRVSeaooeW8j++8iOWCu+eTnOaooeW8j++8iSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWN1c3RvbVRlbXBsYXRlXCIgY2xhc3M9XCJuZ3gtYXV0by1sb2dvdXQtY29udGFpbmVyXCI+XG4gICAgICA8IS0tIOWAkuiuoeaXtuaYvuekuiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGRvd24tZGlzcGxheVwiIFtjbGFzcy53YXJuaW5nXT1cImlzV2FybmluZ1wiIFtjbGFzcy51cmdlbnRdPVwiaXNVcmdlbnRcIiBbY2xhc3MucGF1c2VkXT1cImlzUGF1c2VkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPnt7IGlzUGF1c2VkID8gJ+KPuO+4jycgOiAn4o+x77iPJyB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+e3sgY291bnRkb3duIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUGF1c2VkXCIgY2xhc3M9XCJwYXVzZS1sYWJlbFwiPijlt7LmmoLlgZwpPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0g5o6n5Yi25oyJ6ZKuIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgIDwhLS0g5bu26ZW/5Lya6K+d5oyJ6ZKuIC0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0V4dGVuZEJ1dHRvbiAmJiBjYW5FeHRlbmRcIiBjbGFzcz1cImJ0biBidG4tZXh0ZW5kXCIgKGNsaWNrKT1cImhhbmRsZUV4dGVuZCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5FeHRlbmRcIiB0aXRsZT1cIuW7tumVvzMw5YiG6ZKfXCI+XG4gICAgICAgICAg4p6VIOW7tumVv1xuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtYWluaW5nRXh0ZW5kcyAhPT0gLTFcIiBjbGFzcz1cImV4dGVuZC1jb3VudFwiPiAoe3sgcmVtYWluaW5nRXh0ZW5kcyB9fSkgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tIOaaguWBnC/mgaLlpI3mjInpkq4gLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dQYXVzZUJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXBhdXNlXCJcbiAgICAgICAgICBbY2xhc3MucGF1c2VkXT1cImlzUGF1c2VkXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlVG9nZ2xlUGF1c2UoKVwiXG4gICAgICAgICAgW3RpdGxlXT1cImlzUGF1c2VkID8gJ+aBouWkjeiHquWKqOeZu+WHuicgOiAn5pqC5YGc6Ieq5Yqo55m75Ye6J1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpc1BhdXNlZCA/ICfilrbvuI8g5oGi5aSNJyA6ICfij7jvuI8g5pqC5YGcJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSDoh6rlrprkuYnmqKHmnb/mqKHlvI/vvIjkuJPlrrbmqKHlvI/vvIkgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInRlbXBsYXRlQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAubmd4LWF1dG8tbG9nb3V0LWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjtcbiAgICAgIH1cblxuICAgICAgLmNvdW50ZG93bi1kaXNwbGF5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY291bnRkb3duLWRpc3BsYXkud2FybmluZyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYzY2Q7XG4gICAgICAgIGNvbG9yOiAjODU2NDA0O1xuICAgICAgICBhbmltYXRpb246IGJsaW5rLXdhcm5pbmcgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jb3VudGRvd24tZGlzcGxheS51cmdlbnQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhkN2RhO1xuICAgICAgICBjb2xvcjogIzcyMWMyNDtcbiAgICAgICAgYW5pbWF0aW9uOiBibGluay11cmdlbnQgMC41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgLmNvdW50ZG93bi1kaXNwbGF5LnBhdXNlZCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgYmFja2dyb3VuZDogI2U5ZWNlZjtcbiAgICAgIH1cblxuICAgICAgLmljb24ge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICB9XG5cbiAgICAgIC50aW1lIHtcbiAgICAgICAgbWluLXdpZHRoOiA1MHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5wYXVzZS1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6ICM2Yzc1N2Q7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG5cbiAgICAgIC5jb250cm9scyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuXG4gICAgICAuYnRuIHtcbiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB9XG5cbiAgICAgIC5idG4tZXh0ZW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzI4YTc0NTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgfVxuXG4gICAgICAuYnRuLWV4dGVuZDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMyMTg4Mzg7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICAgIH1cblxuICAgICAgLmJ0bi1leHRlbmQ6ZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjY2NjO1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG5cbiAgICAgIC5idG4tcGF1c2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB9XG5cbiAgICAgIC5idG4tcGF1c2U6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1NmIzO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICB9XG5cbiAgICAgIC5idG4tcGF1c2UucGF1c2VkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmYzEwNztcbiAgICAgICAgY29sb3I6ICMyMTI1Mjk7XG4gICAgICB9XG5cbiAgICAgIC5leHRlbmQtY291bnQge1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBibGluay13YXJuaW5nIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBibGluay11cmdlbnQge1xuICAgICAgICAwJSxcbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXV0b0xvZ291dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g6L6T5YWl5bGe5oCnID09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuW7tumVv+aMiemSrlxuICAgKi9cbiAgQElucHV0KCkgc2hvd0V4dGVuZEJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuaaguWBnOaMiemSrlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1BhdXNlQnV0dG9uID0gdHJ1ZTtcblxuICAvKipcbiAgICog5bu26ZW/55qE56eS5pWw77yI6buY6K6kMzDliIbpkp/vvIlcbiAgICovXG4gIEBJbnB1dCgpIGV4dGVuZFNlY29uZHMgPSAxODAwO1xuXG4gIC8qKlxuICAgKiDoh6rlrprkuYnphY3nva7vvIjkvJropobnm5bmqKHlnZfphY3nva7vvIlcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IFBhcnRpYWw8QXV0b0xvZ291dENvbmZpZz47XG5cbiAgLyoqXG4gICAqIOiHquWumuS5ieaooeadv++8iOS4k+WutuaooeW8j++8iVxuICAgKi9cbiAgQElucHV0KCkgY3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOi+k+WHuuS6i+S7tiA9PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDorablkYrkuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvbldhcm5pbmcgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICog6LaF5pe25LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25UaW1lb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiDlu7bplb/miJDlip/kuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvbkV4dGVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIOaaguWBnOS6i+S7tlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUGF1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiDmgaLlpI3kuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvblJlc3VtZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YaF6YOo54q25oCBID09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBjb3VudGRvd24gPSAnMDA6MDAnO1xuICBpc1dhcm5pbmcgPSBmYWxzZTtcbiAgaXNVcmdlbnQgPSBmYWxzZTtcbiAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgY2FuRXh0ZW5kID0gdHJ1ZTtcbiAgcmVtYWluaW5nRXh0ZW5kcyA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0b0xvZ291dDogQXV0b0xvZ291dFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8g5aaC5p6c5o+Q5L6b5LqG6Ieq5a6a5LmJ6YWN572u77yM5ZCv5Yqo55uR5o6nXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmF1dG9Mb2dvdXQuc3RhcnRNb25pdG9yaW5nKHRoaXMuY29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyDorqLpmIXlgJLorqHml7ZcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0b0xvZ291dC5nZXRDb3VudGRvd24oKS5zdWJzY3JpYmUoKHNlY29uZHMpID0+IHtcbiAgICAgIHRoaXMuY291bnRkb3duID0gdGhpcy5hdXRvTG9nb3V0LmZvcm1hdENvdW50ZG93bihzZWNvbmRzKTtcbiAgICAgIHRoaXMuaXNXYXJuaW5nID0gdGhpcy5hdXRvTG9nb3V0LmlzV2FybmluZ1N0YXRlKHNlY29uZHMpO1xuICAgICAgdGhpcy5pc1VyZ2VudCA9IHRoaXMuYXV0b0xvZ291dC5pc1VyZ2VudFN0YXRlKHNlY29uZHMpO1xuXG4gICAgICAvLyDop6blj5HorablkYrkuovku7ZcbiAgICAgIGNvbnN0IHdhcm5pbmdUaW1lID0gdGhpcy5jb25maWc/Lndhcm5pbmdUaW1lIHx8IDMwO1xuICAgICAgaWYgKHNlY29uZHMgPT09IHdhcm5pbmdUaW1lKSB7XG4gICAgICAgIHRoaXMub25XYXJuaW5nLmVtaXQoc2Vjb25kcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIOinpuWPkei2heaXtuS6i+S7tlxuICAgICAgaWYgKHNlY29uZHMgPD0gMCkge1xuICAgICAgICB0aGlzLm9uVGltZW91dC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyDlrprmnJ/mo4Dmn6XnirbmgIFcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXR1cygpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDlhazlvIDmlrnms5UgPT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog5bu26ZW/5Lya6K+dXG4gICAqL1xuICBleHRlbmRTZXNzaW9uKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRXh0ZW5kKCk7XG4gIH1cblxuICAvKipcbiAgICog5pqC5YGcXG4gICAqL1xuICBwYXVzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVRvZ2dsZVBhdXNlKCk7XG4gIH1cblxuICAvKipcbiAgICog5oGi5aSNXG4gICAqL1xuICByZXN1bWUoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVUb2dnbGVQYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaooeadv+S4iuS4i+aWh++8iOeUqOS6juiHquWumuS5ieaooeadv++8iVxuICAgKi9cbiAgZ2V0IHRlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3VudGRvd246IHRoaXMuY291bnRkb3duLFxuICAgICAgaXNXYXJuaW5nOiB0aGlzLmlzV2FybmluZyxcbiAgICAgIGlzVXJnZW50OiB0aGlzLmlzVXJnZW50LFxuICAgICAgaXNQYXVzZWQ6IHRoaXMuaXNQYXVzZWQsXG4gICAgICBjYW5FeHRlbmQ6IHRoaXMuY2FuRXh0ZW5kLFxuICAgICAgcmVtYWluaW5nRXh0ZW5kczogdGhpcy5yZW1haW5pbmdFeHRlbmRzLFxuICAgICAgZXh0ZW5kU2Vzc2lvbjogKCkgPT4gdGhpcy5oYW5kbGVFeHRlbmQoKSxcbiAgICAgIHRvZ2dsZVBhdXNlOiAoKSA9PiB0aGlzLmhhbmRsZVRvZ2dsZVBhdXNlKCksXG4gICAgICBmb3JtYXRDb3VudGRvd246IChzZWNvbmRzOiBudW1iZXIpID0+IHRoaXMuYXV0b0xvZ291dC5mb3JtYXRDb3VudGRvd24oc2Vjb25kcylcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YaF6YOo5pa55rOVID09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IHRoaXMuYXV0b0xvZ291dC5pc0F1dG9Mb2dvdXRQYXVzZWQoKTtcbiAgICB0aGlzLmNhbkV4dGVuZCA9IHRoaXMuYXV0b0xvZ291dC5jYW5FeHRlbmRTZXNzaW9uKCk7XG4gICAgdGhpcy5yZW1haW5pbmdFeHRlbmRzID0gdGhpcy5hdXRvTG9nb3V0LmdldFJlbWFpbmluZ0V4dGVuZFRpbWVzKCk7XG4gIH1cblxuICAvKipcbiAgICog5aSE55CG5bu26ZW/5Lya6K+d77yI5qih5p2/6LCD55So77yJXG4gICAqL1xuICBoYW5kbGVFeHRlbmQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuYXV0b0xvZ291dC5leHRlbmRTZXNzaW9uKHRoaXMuZXh0ZW5kU2Vjb25kcyk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMub25FeHRlbmRlZC5lbWl0KHRoaXMuZXh0ZW5kU2Vjb25kcyk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gIH1cblxuICAvKipcbiAgICog5aSE55CG5pqC5YGcL+aBouWkjeWIh+aNou+8iOaooeadv+iwg+eUqO+8iVxuICAgKi9cbiAgaGFuZGxlVG9nZ2xlUGF1c2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQYXVzZWQpIHtcbiAgICAgIHRoaXMuYXV0b0xvZ291dC5yZXN1bWUoKTtcbiAgICAgIHRoaXMub25SZXN1bWVkLmVtaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRvTG9nb3V0LnBhdXNlKCk7XG4gICAgICB0aGlzLm9uUGF1c2VkLmVtaXQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0dXMoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
var AutoLogoutModule_1;
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import { AutoLogoutComponent } from './auto-logout.component';
|
|
6
|
+
/**
|
|
7
|
+
* Auto logout module
|
|
8
|
+
* Note: Service uses providedIn: 'root', module only declares/exports component
|
|
9
|
+
*/
|
|
10
|
+
let AutoLogoutModule = AutoLogoutModule_1 = class AutoLogoutModule {
|
|
11
|
+
static forRoot() {
|
|
12
|
+
return {
|
|
13
|
+
ngModule: AutoLogoutModule_1,
|
|
14
|
+
providers: []
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
AutoLogoutModule = AutoLogoutModule_1 = __decorate([
|
|
19
|
+
NgModule({
|
|
20
|
+
declarations: [AutoLogoutComponent],
|
|
21
|
+
imports: [CommonModule],
|
|
22
|
+
exports: [AutoLogoutComponent]
|
|
23
|
+
})
|
|
24
|
+
], AutoLogoutModule);
|
|
25
|
+
export { AutoLogoutModule };
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RDs7O0dBR0c7QUFNSCxJQUFhLGdCQUFnQix3QkFBN0IsTUFBYSxnQkFBZ0I7SUFDM0IsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLGtCQUFnQjtZQUMxQixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQTtBQVBZLGdCQUFnQjtJQUw1QixRQUFRLENBQUM7UUFDUixZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztRQUNuQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7S0FDL0IsQ0FBQztHQUNXLGdCQUFnQixDQU81QjtTQVBZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbXBvbmVudCB9IGZyb20gJy4vYXV0by1sb2dvdXQuY29tcG9uZW50JztcblxuLyoqXG4gKiBBdXRvIGxvZ291dCBtb2R1bGVcbiAqIE5vdGU6IFNlcnZpY2UgdXNlcyBwcm92aWRlZEluOiAncm9vdCcsIG1vZHVsZSBvbmx5IGRlY2xhcmVzL2V4cG9ydHMgY29tcG9uZW50XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0F1dG9Mb2dvdXRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW0F1dG9Mb2dvdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dvdXRNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEF1dG9Mb2dvdXRNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEF1dG9Mb2dvdXRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtdXG4gICAgfTtcbiAgfVxufVxuIl19
|