@acorex/core 5.0.6 → 5.0.10
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/bundles/acorex-core.umd.js +477 -75
- package/bundles/acorex-core.umd.js.map +1 -1
- package/config/tailwind.config.js +209 -0
- package/esm2015/lib/config/configs.js +2 -1
- package/esm2015/lib/dateTime/datetime.class.js +73 -49
- package/esm2015/lib/dateTime/datetime.module.js +15 -2
- package/esm2015/lib/dateTime/georgian.calendar.js +26 -9
- package/esm2015/lib/dateTime/jalali.calendar.js +327 -0
- package/esm2015/lib/platform/platform.service.js +14 -1
- package/fesm2015/acorex-core.js +463 -72
- package/fesm2015/acorex-core.js.map +1 -1
- package/lib/dateTime/datetime.class.d.ts +16 -26
- package/lib/dateTime/datetime.module.d.ts +1 -0
- package/lib/dateTime/georgian.calendar.d.ts +4 -2
- package/lib/dateTime/jalali.calendar.d.ts +34 -0
- package/lib/platform/platform.service.d.ts +1 -0
- package/package.json +17 -17
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { AXDateTime } from "./datetime.class";
|
|
2
|
+
export class JalaliCalendar {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.monthNames = ("فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند").split("_");
|
|
5
|
+
this.monthShortNames = ("فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند").split("_");
|
|
6
|
+
this.dayNames = ("شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه").split("_");
|
|
7
|
+
this.dayShortNames = "ش_ی_د_س_چ_پ_ج".split("_");
|
|
8
|
+
}
|
|
9
|
+
name() {
|
|
10
|
+
return 'jalali';
|
|
11
|
+
}
|
|
12
|
+
dayOfMonth(date) {
|
|
13
|
+
return this.toJalali(date).day;
|
|
14
|
+
}
|
|
15
|
+
dayOfYear(date) {
|
|
16
|
+
const j = this.toJalali(date);
|
|
17
|
+
return (j.month <= 6 ? ((j.month - 1) * 31) : ((6 * 31) + (j.month - 7) * 30)) + j.day;
|
|
18
|
+
}
|
|
19
|
+
dayOfWeek(date) {
|
|
20
|
+
return date.getDay() == 6 ? 1 : date.getDay() + 2;
|
|
21
|
+
}
|
|
22
|
+
weekOfYear(date) {
|
|
23
|
+
//TODO : apply jalali
|
|
24
|
+
const firstDay = new AXDateTime(date).startOf('year');
|
|
25
|
+
return Math.ceil((((date.getTime() - firstDay.date.getTime()) / 86400000) + firstDay.date.getDay() + 1) / 7);
|
|
26
|
+
}
|
|
27
|
+
year(date) {
|
|
28
|
+
return this.toJalali(date).year;
|
|
29
|
+
}
|
|
30
|
+
monthOfYear(date) {
|
|
31
|
+
return this.toJalali(date).month;
|
|
32
|
+
}
|
|
33
|
+
add(date, unit, amount) {
|
|
34
|
+
let value = date.valueOf();
|
|
35
|
+
switch (unit) {
|
|
36
|
+
case 'second':
|
|
37
|
+
value += 1000 * amount;
|
|
38
|
+
break;
|
|
39
|
+
case 'minute':
|
|
40
|
+
value += 60000 * amount;
|
|
41
|
+
break;
|
|
42
|
+
case 'hour':
|
|
43
|
+
value += 3600000 * amount;
|
|
44
|
+
break;
|
|
45
|
+
case 'month':
|
|
46
|
+
{
|
|
47
|
+
const v = new Date(value);
|
|
48
|
+
let jd = this.dayOfMonth(date);
|
|
49
|
+
let jm = this.monthOfYear(date);
|
|
50
|
+
let jy = this.year(date);
|
|
51
|
+
jm = (jm + amount) % 12;
|
|
52
|
+
if (0 > jm) {
|
|
53
|
+
jy += (this.monthOfYear(date) + amount - jm - 12) / 12;
|
|
54
|
+
jm += 12;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
jy += ((this.monthOfYear(date) + amount - jm) / 12);
|
|
58
|
+
}
|
|
59
|
+
const vv = this.toGregorian(jy, jm, jd);
|
|
60
|
+
v.setFullYear(vv.getFullYear());
|
|
61
|
+
v.setMonth(vv.getMonth());
|
|
62
|
+
v.setDate(vv.getDate());
|
|
63
|
+
value = v.valueOf();
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
case 'week':
|
|
67
|
+
value += 7 * 86400000 * amount;
|
|
68
|
+
break;
|
|
69
|
+
case 'year':
|
|
70
|
+
{
|
|
71
|
+
const v = new Date(value);
|
|
72
|
+
let jd = this.dayOfMonth(date);
|
|
73
|
+
let jm = this.monthOfYear(date);
|
|
74
|
+
let jy = this.year(date);
|
|
75
|
+
const vv = this.toGregorian(jy + amount, jm, jd);
|
|
76
|
+
v.setFullYear(vv.getFullYear());
|
|
77
|
+
v.setMonth(vv.getMonth());
|
|
78
|
+
v.setDate(vv.getDate());
|
|
79
|
+
value = v.valueOf();
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
case 'day':
|
|
83
|
+
default:
|
|
84
|
+
value += 86400000 * amount;
|
|
85
|
+
}
|
|
86
|
+
return new AXDateTime(new Date(value), this.name());
|
|
87
|
+
}
|
|
88
|
+
set(date, unit, value) {
|
|
89
|
+
throw new Error("Method not implemented.");
|
|
90
|
+
}
|
|
91
|
+
startOf(date, unit) {
|
|
92
|
+
const clone = new Date(date.valueOf());
|
|
93
|
+
switch (unit) {
|
|
94
|
+
case 'second':
|
|
95
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
|
|
96
|
+
return new AXDateTime(clone, this.name());
|
|
97
|
+
case 'minute':
|
|
98
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
|
|
99
|
+
return new AXDateTime(clone, this.name());
|
|
100
|
+
case 'hour':
|
|
101
|
+
clone.setHours(clone.getHours(), 0, 0, 0);
|
|
102
|
+
return new AXDateTime(clone, this.name());
|
|
103
|
+
default:
|
|
104
|
+
case 'day':
|
|
105
|
+
clone.setHours(0, 0, 0, 0);
|
|
106
|
+
return new AXDateTime(clone, this.name());
|
|
107
|
+
case "week":
|
|
108
|
+
return new AXDateTime(clone, this.name()).add('day', -this.dayOfWeek(clone) + 1).startOf('day');
|
|
109
|
+
case "month":
|
|
110
|
+
{
|
|
111
|
+
const jy = this.year(date);
|
|
112
|
+
const jm = this.monthOfYear(date);
|
|
113
|
+
const gDate = this.toGregorian(jy, jm, 1);
|
|
114
|
+
return new AXDateTime(gDate, this.name()).startOf('day');
|
|
115
|
+
}
|
|
116
|
+
case "year":
|
|
117
|
+
{
|
|
118
|
+
const jy = this.year(date);
|
|
119
|
+
const gDate = this.toGregorian(jy, 1, 1);
|
|
120
|
+
return new AXDateTime(gDate, this.name()).startOf('day');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
endOf(date, unit) {
|
|
125
|
+
const clone = new Date(date.valueOf());
|
|
126
|
+
switch (unit) {
|
|
127
|
+
case 'second':
|
|
128
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
|
|
129
|
+
return new AXDateTime(clone, this.name());
|
|
130
|
+
case 'minute':
|
|
131
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
|
|
132
|
+
return new AXDateTime(clone, this.name());
|
|
133
|
+
case 'hour':
|
|
134
|
+
clone.setHours(clone.getHours(), 59, 59, 999);
|
|
135
|
+
return new AXDateTime(clone, this.name());
|
|
136
|
+
default:
|
|
137
|
+
case 'day':
|
|
138
|
+
clone.setHours(23, 59, 59, 999);
|
|
139
|
+
return new AXDateTime(clone, this.name());
|
|
140
|
+
case 'week':
|
|
141
|
+
{
|
|
142
|
+
return this.startOf(date, 'week').add('day', 6).endOf('day');
|
|
143
|
+
}
|
|
144
|
+
case 'month':
|
|
145
|
+
{
|
|
146
|
+
const jy = this.year(date);
|
|
147
|
+
const jm = this.monthOfYear(date);
|
|
148
|
+
const jd = this.monthLength(jy, jm);
|
|
149
|
+
const gDate = this.toGregorian(jy, jm, jd);
|
|
150
|
+
return new AXDateTime(gDate, this.name()).endOf('day');
|
|
151
|
+
}
|
|
152
|
+
case "year":
|
|
153
|
+
let jy = this.year(date);
|
|
154
|
+
const gDate = this.toGregorian(jy, 12, this.monthLength(jy, 12));
|
|
155
|
+
return new AXDateTime(gDate, this.name()).endOf('day');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
toJalali(date) {
|
|
159
|
+
const gy = date.getFullYear();
|
|
160
|
+
const gm = date.getMonth() + 1;
|
|
161
|
+
const gd = date.getDate();
|
|
162
|
+
const r = this.d2j(this.g2d(gy, gm, gd));
|
|
163
|
+
return {
|
|
164
|
+
year: r.jy,
|
|
165
|
+
month: r.jm,
|
|
166
|
+
day: r.jd,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/*
|
|
170
|
+
Converts a Jalaali date to Gregorian.
|
|
171
|
+
*/
|
|
172
|
+
toGregorian(jy, jm, jd) {
|
|
173
|
+
const g = this.d2g(this.j2d(jy, jm, jd));
|
|
174
|
+
return new Date(g.gy, g.gm - 1, g.gd);
|
|
175
|
+
}
|
|
176
|
+
/*
|
|
177
|
+
Checks whether a Jalaali date is valid or not.
|
|
178
|
+
*/
|
|
179
|
+
isValid(jy, jm, jd) {
|
|
180
|
+
return jy >= -61 && jy <= 3177 &&
|
|
181
|
+
jm >= 1 && jm <= 12 &&
|
|
182
|
+
jd >= 1 && jd <= this.monthLength(jy, jm);
|
|
183
|
+
}
|
|
184
|
+
/*
|
|
185
|
+
Is this a leap year or not?
|
|
186
|
+
*/
|
|
187
|
+
isLeapYear(jy) {
|
|
188
|
+
return this.jalCal(jy).leap === 0;
|
|
189
|
+
}
|
|
190
|
+
/*
|
|
191
|
+
Number of days in a given month in a Jalaali year.
|
|
192
|
+
*/
|
|
193
|
+
monthLength(jy, jm) {
|
|
194
|
+
if (jm <= 6)
|
|
195
|
+
return 31;
|
|
196
|
+
if (jm <= 11)
|
|
197
|
+
return 30;
|
|
198
|
+
if (this.isLeapYear(jy))
|
|
199
|
+
return 30;
|
|
200
|
+
return 29;
|
|
201
|
+
}
|
|
202
|
+
jalCal(jy) {
|
|
203
|
+
// Jalaali years starting the 33-year rule.
|
|
204
|
+
let breaks = [-61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210,
|
|
205
|
+
1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178
|
|
206
|
+
], bl = breaks.length, gy = jy + 621, leapJ = -14, jp = breaks[0], jm, jump, leap, leapG, march, n, i;
|
|
207
|
+
if (jy < jp || jy >= breaks[bl - 1])
|
|
208
|
+
throw new Error('Invalid Jalaali year ' + jy);
|
|
209
|
+
// Find the limiting years for the Jalaali year jy.
|
|
210
|
+
for (i = 1; i < bl; i += 1) {
|
|
211
|
+
jm = breaks[i];
|
|
212
|
+
jump = jm - jp;
|
|
213
|
+
if (jy < jm)
|
|
214
|
+
break;
|
|
215
|
+
leapJ = leapJ + this.div(jump, 33) * 8 + this.div(this.mod(jump, 33), 4);
|
|
216
|
+
jp = jm;
|
|
217
|
+
}
|
|
218
|
+
n = jy - jp;
|
|
219
|
+
// Find the number of leap years from AD 621 to the beginning
|
|
220
|
+
// of the current Jalaali year in the Persian calendar.
|
|
221
|
+
leapJ = leapJ + this.div(n, 33) * 8 + this.div(this.mod(n, 33) + 3, 4);
|
|
222
|
+
if (this.mod(jump, 33) === 4 && jump - n === 4)
|
|
223
|
+
leapJ += 1;
|
|
224
|
+
// And the same in the Gregorian calendar (until the year gy).
|
|
225
|
+
leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;
|
|
226
|
+
// Determine the Gregorian date of Farvardin the 1st.
|
|
227
|
+
march = 20 + leapJ - leapG;
|
|
228
|
+
// Find how many years have passed since the last leap year.
|
|
229
|
+
if (jump - n < 6)
|
|
230
|
+
n = n - jump + this.div(jump + 4, 33) * 33;
|
|
231
|
+
leap = this.mod(this.mod(n + 1, 33) - 1, 4);
|
|
232
|
+
if (leap === -1) {
|
|
233
|
+
leap = 4;
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
leap: leap,
|
|
237
|
+
gy: gy,
|
|
238
|
+
march: march
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/*
|
|
242
|
+
Converts a date of the Jalaali calendar to the Julian Day number.
|
|
243
|
+
@param jy Jalaali year (1 to 3100)
|
|
244
|
+
@param jm Jalaali month (1 to 12)
|
|
245
|
+
@param jd Jalaali day (1 to 29/31)
|
|
246
|
+
@return Julian Day number
|
|
247
|
+
*/
|
|
248
|
+
j2d(jy, jm, jd) {
|
|
249
|
+
let r = this.jalCal(jy);
|
|
250
|
+
return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;
|
|
251
|
+
}
|
|
252
|
+
/*
|
|
253
|
+
Converts the Julian Day number to a date in the Jalaali calendar.
|
|
254
|
+
@param jdn Julian Day number
|
|
255
|
+
@return
|
|
256
|
+
jy: Jalaali year (1 to 3100)
|
|
257
|
+
jm: Jalaali month (1 to 12)
|
|
258
|
+
jd: Jalaali day (1 to 29/31)
|
|
259
|
+
*/
|
|
260
|
+
d2j(jdn) {
|
|
261
|
+
let gy = this.d2g(jdn).gy // Calculate Gregorian year (gy).
|
|
262
|
+
, jy = gy - 621, r = this.jalCal(jy), jdn1f = this.g2d(gy, 3, r.march), jd, jm, k;
|
|
263
|
+
// Find number of days that passed since 1 Farvardin.
|
|
264
|
+
k = jdn - jdn1f;
|
|
265
|
+
if (k >= 0) {
|
|
266
|
+
if (k <= 185) {
|
|
267
|
+
// The first 6 months.
|
|
268
|
+
jm = 1 + this.div(k, 31);
|
|
269
|
+
jd = this.mod(k, 31) + 1;
|
|
270
|
+
return {
|
|
271
|
+
jy: jy,
|
|
272
|
+
jm: jm,
|
|
273
|
+
jd: jd
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// The remaining months.
|
|
278
|
+
k -= 186;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
// Previous Jalaali year.
|
|
283
|
+
jy -= 1;
|
|
284
|
+
k += 179;
|
|
285
|
+
if (r.leap === 1)
|
|
286
|
+
k += 1;
|
|
287
|
+
}
|
|
288
|
+
jm = 7 + this.div(k, 30);
|
|
289
|
+
jd = this.mod(k, 30) + 1;
|
|
290
|
+
return {
|
|
291
|
+
jy: jy,
|
|
292
|
+
jm: jm,
|
|
293
|
+
jd: jd
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
g2d(gy, gm, gd) {
|
|
297
|
+
let d = this.div((gy + this.div(gm - 8, 6) + 100100) * 1461, 4)
|
|
298
|
+
+ this.div(153 * this.mod(gm + 9, 12) + 2, 5)
|
|
299
|
+
+ gd - 34840408;
|
|
300
|
+
d = d - this.div(this.div(gy + 100100 + this.div(gm - 8, 6), 100) * 3, 4) + 752;
|
|
301
|
+
return d;
|
|
302
|
+
}
|
|
303
|
+
d2g(jdn) {
|
|
304
|
+
let j, i, gd, gm, gy;
|
|
305
|
+
j = 4 * jdn + 139361631;
|
|
306
|
+
j = j + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;
|
|
307
|
+
i = this.div(this.mod(j, 1461), 4) * 5 + 308;
|
|
308
|
+
gd = this.div(this.mod(i, 153), 5) + 1;
|
|
309
|
+
gm = this.mod(this.div(i, 153), 12) + 1;
|
|
310
|
+
gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);
|
|
311
|
+
return {
|
|
312
|
+
gy: gy,
|
|
313
|
+
gm: gm,
|
|
314
|
+
gd: gd
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
/*
|
|
318
|
+
Utility helper functions.
|
|
319
|
+
*/
|
|
320
|
+
div(a, b) {
|
|
321
|
+
return ~~(a / b);
|
|
322
|
+
}
|
|
323
|
+
mod(a, b) {
|
|
324
|
+
return a - ~~(a / b) * b;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFsYWxpLmNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvcmUvc3JjL2xpYi9kYXRlVGltZS9qYWxhbGkuY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBRXBFLE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBRUksZUFBVSxHQUFHLENBQUMsb0VBQW9FLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0Ysb0JBQWUsR0FBRyxDQUFDLG9FQUFvRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBHLGFBQVEsR0FBRyxDQUFDLG1EQUFtRCxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVFLGtCQUFhLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQW1YOUMsQ0FBQztJQWpYRyxJQUFJO1FBQ0EsT0FBTyxRQUFRLENBQUE7SUFDbkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFVO1FBQ2hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFB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TUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBVSxFQUFFLElBQWM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkMsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLFFBQVE7Z0JBQ1QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsS0FBSyxRQUFRO2dCQUNULEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLEtBQUssTUFBTTtnQkFDUCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxRQUFRO1lBQ1IsS0FBSyxLQUFLO2dCQUNOLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLEtBQUssTUFBTTtnQkFD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QUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN2QyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNyRCxPQUFPO1lBQ0gsRUFBRSxFQUFFLEVBQUU7WUFDSixFQUFFLEVBQUUsRUFBRTtZQUNOLEVBQUUsRUFBRSxFQUFFO1NBQ1gsQ0FBQTtJQUNMLENBQUM7SUFFRDs7TUFFRTtJQUNNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNaLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzVCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ2FsZW5kYXIsIEFYRGF0ZVRpbWUsIFRpbWVVbml0IH0gZnJvbSBcIi4vZGF0ZXRpbWUuY2xhc3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBKYWxhbGlDYWxlbmRhciBpbXBsZW1lbnRzIEFYQ2FsZW5kYXIge1xyXG5cclxuICAgIG1vbnRoTmFtZXMgPSAoXCLZgdix2YjYsdiv24zZhl/Yp9ix2K/bjNio2YfYtNiqX9iu2LHYr9in2K9f2KrbjNixX9mF2LHYr9in2K9f2LTZh9ix24zZiNixX9mF2YfYsV/Yotio2KfZhl/Yotiw2LFf2K/bjF/YqNmH2YXZhl/Yp9iz2YHZhtivXCIpLnNwbGl0KFwiX1wiKTtcclxuXHJcbiAgICBtb250aFNob3J0TmFtZXMgPSAoXCLZgdix2YjYsdiv24zZhl/Yp9ix2K/bjNio2YfYtNiqX9iu2LHYr9in2K9f2KrbjNixX9mF2LHYr9in2K9f2LTZh9ix24zZiNixX9mF2YfYsV/Yotio2KfZhl/Yotiw2LFf2K/bjF/YqNmH2YXZhl/Yp9iz2YHZhtivXCIpLnNwbGl0KFwiX1wiKTtcclxuXHJcbiAgICBkYXlOYW1lcyA9IChcIti02YbYqNmHX9uM2qnYtNmG2KjZh1/Yr9mI2LTZhtio2Ydf2LPZhyDYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrCDYtNmG2KjZh1/YrNmF2LnZh1wiKS5zcGxpdChcIl9cIik7XHJcblxyXG4gICAgZGF5U2hvcnROYW1lcyA9IFwi2LRf24xf2K9f2LNf2oZf2b5f2KxcIi5zcGxpdChcIl9cIilcclxuXHJcbiAgICBuYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdqYWxhbGknXHJcbiAgICB9XHJcblxyXG4gICAgZGF5T2ZNb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0phbGFsaShkYXRlKS5kYXk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGogPSB0aGlzLnRvSmFsYWxpKGRhdGUpO1xyXG4gICAgICAgIHJldHVybiAoai5tb250aCA8PSA2ID8gKChqLm1vbnRoIC0gMSkgKiAzMSkgOiAoKDYgKiAzMSkgKyAoai5tb250aCAtIDcpICogMzApKSArIGouZGF5O1xyXG4gICAgfVxyXG5cclxuICAgIGRheU9mV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXkoKSA9PSA2ID8gMSA6IGRhdGUuZ2V0RGF5KCkgKyAyO1xyXG4gICAgfVxyXG5cclxuICAgIHdlZWtPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICAgICAgLy9UT0RPIDogYXBwbHkgamFsYWxpXHJcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgQVhEYXRlVGltZShkYXRlKS5zdGFydE9mKCd5ZWFyJyk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCgoKChkYXRlLmdldFRpbWUoKSAtIGZpcnN0RGF5LmRhdGUuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKSArIGZpcnN0RGF5LmRhdGUuZ2V0RGF5KCkgKyAxKSAvIDcpO1xyXG4gICAgfVxyXG5cclxuICAgIHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KYWxhbGkoZGF0ZSkueWVhcjtcclxuICAgIH1cclxuXHJcbiAgICBtb250aE9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b0phbGFsaShkYXRlKS5tb250aDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgYWRkKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCBhbW91bnQ6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGUudmFsdWVPZigpO1xyXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xyXG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gMTAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA2MDAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gMzYwMDAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqZCA9IHRoaXMuZGF5T2ZNb250aChkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqeSA9IHRoaXMueWVhcihkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBqbSA9IChqbSArIGFtb3VudCkgJSAxMjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoMCA+IGptKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGp5ICs9ICh0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpICsgYW1vdW50IC0gam0gLSAxMikgLyAxMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgam0gKz0gMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBqeSArPSAoKHRoaXMubW9udGhPZlllYXIoZGF0ZSkgKyBhbW91bnQgLSBqbSkgLyAxMik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZ2ID0gdGhpcy50b0dyZWdvcmlhbihqeSwgam0sIGpkKTtcclxuICAgICAgICAgICAgICAgICAgICB2LnNldEZ1bGxZZWFyKHZ2LmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHYuc2V0TW9udGgodnYuZ2V0TW9udGgoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdi5zZXREYXRlKHZ2LmdldERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2LnZhbHVlT2YoKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcclxuICAgICAgICAgICAgICAgIHZhbHVlICs9IDcgKiA4NjQwMDAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGpkID0gdGhpcy5kYXlPZk1vbnRoKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqbSA9IHRoaXMubW9udGhPZlllYXIoZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGp5ID0gdGhpcy55ZWFyKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZ2ID0gdGhpcy50b0dyZWdvcmlhbihqeSArIGFtb3VudCwgam0sIGpkKTtcclxuICAgICAgICAgICAgICAgICAgICB2LnNldEZ1bGxZZWFyKHZ2LmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHYuc2V0TW9udGgodnYuZ2V0TW9udGgoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdi5zZXREYXRlKHZ2LmdldERhdGUoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2LnZhbHVlT2YoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA4NjQwMDAwMCAqIGFtb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKHZhbHVlKSwgdGhpcy5uYW1lKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0T2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcclxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcclxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcclxuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xyXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xyXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xyXG4gICAgICAgICAgICBjYXNlIFwid2Vla1wiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSkuYWRkKCdkYXknLCAtdGhpcy5kYXlPZldlZWsoY2xvbmUpICsgMSkuc3RhcnRPZignZGF5Jyk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp5ID0gdGhpcy55ZWFyKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoZ0RhdGUsIHRoaXMubmFtZSgpKS5zdGFydE9mKCdkYXknKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShnRGF0ZSwgdGhpcy5uYW1lKCkpLnN0YXJ0T2YoJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbmRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWUge1xyXG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xyXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xyXG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCBjbG9uZS5nZXRTZWNvbmRzKCksIDk5OSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcclxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgNTksIDk5OSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcclxuICAgICAgICAgICAgY2FzZSAnaG91cic6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCA1OSwgNTksIDk5OSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcclxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZihkYXRlLCAnd2VlaycpLmFkZCgnZGF5JywgNikuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgankgPSB0aGlzLnllYXIoZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpkID0gdGhpcy5tb250aExlbmd0aChqeSwgam0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdEYXRlID0gdGhpcy50b0dyZWdvcmlhbihqeSwgam0sIGpkKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoZ0RhdGUsIHRoaXMubmFtZSgpKS5lbmRPZignZGF5Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XHJcbiAgICAgICAgICAgICAgICBsZXQgankgPSB0aGlzLnllYXIoZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIDEyLCB0aGlzLm1vbnRoTGVuZ3RoKGp5LCAxMikpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHRvSmFsYWxpKGRhdGU6IERhdGUpOiB7IHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIgfSB7XHJcbiAgICAgICAgY29uc3QgZ3kgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgZ20gPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICAgIGNvbnN0IGdkID0gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICAgICAgY29uc3QgciA9IHRoaXMuZDJqKHRoaXMuZzJkKGd5LCBnbSwgZ2QpKVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHllYXI6IHIuanksXHJcbiAgICAgICAgICAgIG1vbnRoOiByLmptLFxyXG4gICAgICAgICAgICBkYXk6IHIuamQsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIENvbnZlcnRzIGEgSmFsYWFsaSBkYXRlIHRvIEdyZWdvcmlhbi5cclxuICAgICovXHJcbiAgICB0b0dyZWdvcmlhbihqeSwgam0sIGpkKSB7XHJcbiAgICAgICAgY29uc3QgZyA9IHRoaXMuZDJnKHRoaXMuajJkKGp5LCBqbSwgamQpKVxyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShnLmd5LCBnLmdtIC0gMSwgZy5nZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAgQ2hlY2tzIHdoZXRoZXIgYSBKYWxhYWxpIGRhdGUgaXMgdmFsaWQgb3Igbm90LlxyXG4gICAgKi9cclxuICAgIGlzVmFsaWQoanksIGptLCBqZCkge1xyXG4gICAgICAgIHJldHVybiBqeSA+PSAtNjEgJiYgankgPD0gMzE3NyAmJlxyXG4gICAgICAgICAgICBqbSA+PSAxICYmIGptIDw9IDEyICYmXHJcbiAgICAgICAgICAgIGpkID49IDEgJiYgamQgPD0gdGhpcy5tb250aExlbmd0aChqeSwgam0pXHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAgSXMgdGhpcyBhIGxlYXAgeWVhciBvciBub3Q/XHJcbiAgICAqL1xyXG4gICAgaXNMZWFwWWVhcihqeSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmphbENhbChqeSkubGVhcCA9PT0gMFxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIE51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGggaW4gYSBKYWxhYWxpIHllYXIuXHJcbiAgICAqL1xyXG4gICAgbW9udGhMZW5ndGgoanksIGptKSB7XHJcbiAgICAgICAgaWYgKGptIDw9IDYpIHJldHVybiAzMVxyXG4gICAgICAgIGlmIChqbSA8PSAxMSkgcmV0dXJuIDMwXHJcbiAgICAgICAgaWYgKHRoaXMuaXNMZWFwWWVhcihqeSkpIHJldHVybiAzMFxyXG4gICAgICAgIHJldHVybiAyOVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGphbENhbChqeSkge1xyXG4gICAgICAgIC8vIEphbGFhbGkgeWVhcnMgc3RhcnRpbmcgdGhlIDMzLXllYXIgcnVsZS5cclxuICAgICAgICBsZXQgYnJlYWtzID0gWy02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwXHJcbiAgICAgICAgICAgICwgMTYzNSwgMjA2MCwgMjA5NywgMjE5MiwgMjI2MiwgMjMyNCwgMjM5NCwgMjQ1NiwgMzE3OFxyXG4gICAgICAgIF1cclxuICAgICAgICAgICAgLCBibCA9IGJyZWFrcy5sZW5ndGhcclxuICAgICAgICAgICAgLCBneSA9IGp5ICsgNjIxXHJcbiAgICAgICAgICAgICwgbGVhcEogPSAtMTRcclxuICAgICAgICAgICAgLCBqcCA9IGJyZWFrc1swXVxyXG4gICAgICAgICAgICAsIGptXHJcbiAgICAgICAgICAgICwganVtcFxyXG4gICAgICAgICAgICAsIGxlYXBcclxuICAgICAgICAgICAgLCBsZWFwR1xyXG4gICAgICAgICAgICAsIG1hcmNoXHJcbiAgICAgICAgICAgICwgblxyXG4gICAgICAgICAgICAsIGlcclxuXHJcbiAgICAgICAgaWYgKGp5IDwganAgfHwgankgPj0gYnJlYWtzW2JsIC0gMV0pXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBKYWxhYWxpIHllYXIgJyArIGp5KVxyXG5cclxuICAgICAgICAvLyBGaW5kIHRoZSBsaW1pdGluZyB5ZWFycyBmb3IgdGhlIEphbGFhbGkgeWVhciBqeS5cclxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYmw7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICBqbSA9IGJyZWFrc1tpXVxyXG4gICAgICAgICAgICBqdW1wID0gam0gLSBqcFxyXG4gICAgICAgICAgICBpZiAoankgPCBqbSlcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGxlYXBKID0gbGVhcEogKyB0aGlzLmRpdihqdW1wLCAzMykgKiA4ICsgdGhpcy5kaXYodGhpcy5tb2QoanVtcCwgMzMpLCA0KVxyXG4gICAgICAgICAgICBqcCA9IGptXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG4gPSBqeSAtIGpwXHJcblxyXG4gICAgICAgIC8vIEZpbmQgdGhlIG51bWJlciBvZiBsZWFwIHllYXJzIGZyb20gQUQgNjIxIHRvIHRoZSBiZWdpbm5pbmdcclxuICAgICAgICAvLyBvZiB0aGUgY3VycmVudCBKYWxhYWxpIHllYXIgaW4gdGhlIFBlcnNpYW4gY2FsZW5kYXIuXHJcbiAgICAgICAgbGVhcEogPSBsZWFwSiArIHRoaXMuZGl2KG4sIDMzKSAqIDggKyB0aGlzLmRpdih0aGlzLm1vZChuLCAzMykgKyAzLCA0KVxyXG4gICAgICAgIGlmICh0aGlzLm1vZChqdW1wLCAzMykgPT09IDQgJiYganVtcCAtIG4gPT09IDQpXHJcbiAgICAgICAgICAgIGxlYXBKICs9IDFcclxuXHJcbiAgICAgICAgLy8gQW5kIHRoZSBzYW1lIGluIHRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgKHVudGlsIHRoZSB5ZWFyIGd5KS5cclxuICAgICAgICBsZWFwRyA9IHRoaXMuZGl2KGd5LCA0KSAtIHRoaXMuZGl2KCh0aGlzLmRpdihneSwgMTAwKSArIDEpICogMywgNCkgLSAxNTBcclxuXHJcbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBHcmVnb3JpYW4gZGF0ZSBvZiBGYXJ2YXJkaW4gdGhlIDFzdC5cclxuICAgICAgICBtYXJjaCA9IDIwICsgbGVhcEogLSBsZWFwR1xyXG5cclxuICAgICAgICAvLyBGaW5kIGhvdyBtYW55IHllYXJzIGhhdmUgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGxlYXAgeWVhci5cclxuICAgICAgICBpZiAoanVtcCAtIG4gPCA2KVxyXG4gICAgICAgICAgICBuID0gbiAtIGp1bXAgKyB0aGlzLmRpdihqdW1wICsgNCwgMzMpICogMzNcclxuICAgICAgICBsZWFwID0gdGhpcy5tb2QodGhpcy5tb2QobiArIDEsIDMzKSAtIDEsIDQpXHJcbiAgICAgICAgaWYgKGxlYXAgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGxlYXAgPSA0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsZWFwOiBsZWFwXHJcbiAgICAgICAgICAgICwgZ3k6IGd5XHJcbiAgICAgICAgICAgICwgbWFyY2g6IG1hcmNoXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIENvbnZlcnRzIGEgZGF0ZSBvZiB0aGUgSmFsYWFsaSBjYWxlbmRhciB0byB0aGUgSnVsaWFuIERheSBudW1iZXIuXHJcbiAgICAgIEBwYXJhbSBqeSBKYWxhYWxpIHllYXIgKDEgdG8gMzEwMClcclxuICAgICAgQHBhcmFtIGptIEphbGFhbGkgbW9udGggKDEgdG8gMTIpXHJcbiAgICAgIEBwYXJhbSBqZCBKYWxhYWxpIGRheSAoMSB0byAyOS8zMSlcclxuICAgICAgQHJldHVybiBKdWxpYW4gRGF5IG51bWJlclxyXG4gICAgKi9cclxuICAgIHByaXZhdGUgajJkKGp5LCBqbSwgamQpIHtcclxuICAgICAgICBsZXQgciA9IHRoaXMuamFsQ2FsKGp5KVxyXG4gICAgICAgIHJldHVybiB0aGlzLmcyZChyLmd5LCAzLCByLm1hcmNoKSArIChqbSAtIDEpICogMzEgLSB0aGlzLmRpdihqbSwgNykgKiAoam0gLSA3KSArIGpkIC0gMVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIENvbnZlcnRzIHRoZSBKdWxpYW4gRGF5IG51bWJlciB0byBhIGRhdGUgaW4gdGhlIEphbGFhbGkgY2FsZW5kYXIuXHJcbiAgICAgIEBwYXJhbSBqZG4gSnVsaWFuIERheSBudW1iZXJcclxuICAgICAgQHJldHVyblxyXG4gICAgICAgIGp5OiBKYWxhYWxpIHllYXIgKDEgdG8gMzEwMClcclxuICAgICAgICBqbTogSmFsYWFsaSBtb250aCAoMSB0byAxMilcclxuICAgICAgICBqZDogSmFsYWFsaSBkYXkgKDEgdG8gMjkvMzEpXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBkMmooamRuKSB7XHJcbiAgICAgICAgbGV0IGd5ID0gdGhpcy5kMmcoamRuKS5neSAvLyBDYWxjdWxhdGUgR3JlZ29yaWFuIHllYXIgKGd5KS5cclxuICAgICAgICAgICAgLCBqeSA9IGd5IC0gNjIxXHJcbiAgICAgICAgICAgICwgciA9IHRoaXMuamFsQ2FsKGp5KVxyXG4gICAgICAgICAgICAsIGpkbjFmID0gdGhpcy5nMmQoZ3ksIDMsIHIubWFyY2gpXHJcbiAgICAgICAgICAgICwgamRcclxuICAgICAgICAgICAgLCBqbVxyXG4gICAgICAgICAgICAsIGtcclxuXHJcbiAgICAgICAgLy8gRmluZCBudW1iZXIgb2YgZGF5cyB0aGF0IHBhc3NlZCBzaW5jZSAxIEZhcnZhcmRpbi5cclxuICAgICAgICBrID0gamRuIC0gamRuMWZcclxuICAgICAgICBpZiAoayA+PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChrIDw9IDE4NSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IDYgbW9udGhzLlxyXG4gICAgICAgICAgICAgICAgam0gPSAxICsgdGhpcy5kaXYoaywgMzEpXHJcbiAgICAgICAgICAgICAgICBqZCA9IHRoaXMubW9kKGssIDMxKSArIDFcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgank6IGp5XHJcbiAgICAgICAgICAgICAgICAgICAgLCBqbTogam1cclxuICAgICAgICAgICAgICAgICAgICAsIGpkOiBqZFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBtb250aHMuXHJcbiAgICAgICAgICAgICAgICBrIC09IDE4NlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUHJldmlvdXMgSmFsYWFsaSB5ZWFyLlxyXG4gICAgICAgICAgICBqeSAtPSAxXHJcbiAgICAgICAgICAgIGsgKz0gMTc5XHJcbiAgICAgICAgICAgIGlmIChyLmxlYXAgPT09IDEpXHJcbiAgICAgICAgICAgICAgICBrICs9IDFcclxuICAgICAgICB9XHJcbiAgICAgICAgam0gPSA3ICsgdGhpcy5kaXYoaywgMzApXHJcbiAgICAgICAgamQgPSB0aGlzLm1vZChrLCAzMCkgKyAxXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgank6IGp5XHJcbiAgICAgICAgICAgICwgam06IGptXHJcbiAgICAgICAgICAgICwgamQ6IGpkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIGcyZChneSwgZ20sIGdkKSB7XHJcbiAgICAgICAgbGV0IGQgPSB0aGlzLmRpdigoZ3kgKyB0aGlzLmRpdihnbSAtIDgsIDYpICsgMTAwMTAwKSAqIDE0NjEsIDQpXHJcbiAgICAgICAgICAgICsgdGhpcy5kaXYoMTUzICogdGhpcy5tb2QoZ20gKyA5LCAxMikgKyAyLCA1KVxyXG4gICAgICAgICAgICArIGdkIC0gMzQ4NDA0MDhcclxuICAgICAgICBkID0gZCAtIHRoaXMuZGl2KHRoaXMuZGl2KGd5ICsgMTAwMTAwICsgdGhpcy5kaXYoZ20gLSA4LCA2KSwgMTAwKSAqIDMsIDQpICsgNzUyXHJcbiAgICAgICAgcmV0dXJuIGRcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBkMmcoamRuKSB7XHJcbiAgICAgICAgbGV0IGpcclxuICAgICAgICAgICAgLCBpXHJcbiAgICAgICAgICAgICwgZ2RcclxuICAgICAgICAgICAgLCBnbVxyXG4gICAgICAgICAgICAsIGd5XHJcbiAgICAgICAgaiA9IDQgKiBqZG4gKyAxMzkzNjE2MzFcclxuICAgICAgICBqID0gaiArIHRoaXMuZGl2KHRoaXMuZGl2KDQgKiBqZG4gKyAxODMxODc3MjAsIDE0NjA5NykgKiAzLCA0KSAqIDQgLSAzOTA4XHJcbiAgICAgICAgaSA9IHRoaXMuZGl2KHRoaXMubW9kKGosIDE0NjEpLCA0KSAqIDUgKyAzMDhcclxuICAgICAgICBnZCA9IHRoaXMuZGl2KHRoaXMubW9kKGksIDE1MyksIDUpICsgMVxyXG4gICAgICAgIGdtID0gdGhpcy5tb2QodGhpcy5kaXYoaSwgMTUzKSwgMTIpICsgMVxyXG4gICAgICAgIGd5ID0gdGhpcy5kaXYoaiwgMTQ2MSkgLSAxMDAxMDAgKyB0aGlzLmRpdig4IC0gZ20sIDYpXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZ3k6IGd5XHJcbiAgICAgICAgICAgICwgZ206IGdtXHJcbiAgICAgICAgICAgICwgZ2Q6IGdkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgIFV0aWxpdHkgaGVscGVyIGZ1bmN0aW9ucy5cclxuICAgICovXHJcbiAgICBwcml2YXRlIGRpdihhLCBiKSB7XHJcbiAgICAgICAgcmV0dXJuIH5+KGEgLyBiKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbW9kKGEsIGIpIHtcclxuICAgICAgICByZXR1cm4gYSAtIH5+KGEgLyBiKSAqIGJcclxuICAgIH1cclxuXHJcbn0iXX0=
|
|
@@ -107,6 +107,19 @@ export class AXPlatform {
|
|
|
107
107
|
is(name) {
|
|
108
108
|
return PLATFORMS_MAP[name](window) || false;
|
|
109
109
|
}
|
|
110
|
+
switchDarkMode() {
|
|
111
|
+
const _html = document.getElementsByTagName("html")[0];
|
|
112
|
+
const _class = 'ax-dark-mode';
|
|
113
|
+
const _isDark = _html.classList.contains(_class);
|
|
114
|
+
if (_isDark) {
|
|
115
|
+
_html.classList.remove(_class);
|
|
116
|
+
localStorage.setItem("MODE", "light");
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
_html.classList.add(_class);
|
|
120
|
+
localStorage.setItem("MODE", "dark");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
110
123
|
}
|
|
111
124
|
AXPlatform.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: AXPlatform, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
112
125
|
AXPlatform.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.6", ngImport: i0, type: AXPlatform, providedIn: 'platform' });
|
|
@@ -116,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.6", ngImpor
|
|
|
116
129
|
providedIn: 'platform',
|
|
117
130
|
}]
|
|
118
131
|
}], ctorParameters: function () { return []; } });
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb3JlL3NyYy9saWIvcGxhdGZvcm0vcGxhdGZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBVS9CLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3ZDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFbkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQVcsRUFBRSxDQUNwQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3JDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3BDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUdsRSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3pDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FB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LEdBQUcsSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBR0QsV0FBVztRQUNQLE9BQU8sTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsRUFBRSxDQUFDLElBQStDO1FBQzlDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNoRCxDQUFDOzt1R0FwQlEsVUFBVTsyR0FBVixVQUFVLGNBRlAsVUFBVTsyRkFFYixVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxVQUFVO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgdHlwZSBBWFBsYXRmb3JtcyA9ICdBbmRyb2lkJyB8ICdEZXNrdG9wJyB8ICdpT1MnIHwgJ01vYmlsZSc7XHJcbmV4cG9ydCB0eXBlIEFYQnJvd3NlcnMgPSAnQ2hyb21lJyB8ICdTYWZhcmknIHwgJ0VkZ2UnIHwgJ0ZpcmVmb3gnIHwgJ09wZXJhJyB8ICdNU0lFJztcclxuZXhwb3J0IHR5cGUgQVhUZWNobm9sb2dpZXMgPSAnUFdBJyB8ICdIeWJyaWQnIHwgJ0VsZWN0cm9uJztcclxuXHJcblxyXG5cclxuXHJcbmNvbnN0IGlzQ2hyb21lID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9DaHJvbWUvaSk7XHJcblxyXG5jb25zdCBpc0ZpcmVmb3ggPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL0ZpcmVmb3gvaSk7XHJcblxyXG5jb25zdCBpc0VkZ2UgPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL0VkZ2UvaSk7XHJcblxyXG5jb25zdCBpc1NhZmFyaSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cclxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvU2FmYXJpL2kpO1xyXG5cclxuY29uc3QgaXNPcGVyYSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cclxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvT3BlcmEvaSkgfHwgdGVzdFVzZXJBZ2VudCh3aW4sIC9PUFIvaSk7XHJcblxyXG5jb25zdCBpc01TSUUgPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL01TSUUvaSkgfHwgdGVzdFVzZXJBZ2VudCh3aW4sIC9UcmlkZW50L2kpO1xyXG5cclxuXHJcbmNvbnN0IGlzTW9iaWxlV2ViID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgaXNNb2JpbGUod2luKSAmJiAhaXNIeWJyaWQod2luKTtcclxuXHJcbmNvbnN0IGlzSXBhZCA9ICh3aW46IFdpbmRvdykgPT4ge1xyXG4gICAgLy8gaU9TIDEyIGFuZCBiZWxvd1xyXG4gICAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlPUyAxMytcclxuICAgIGlmICh0ZXN0VXNlckFnZW50KHdpbiwgL01hY2ludG9zaC9pKSAmJiBpc01vYmlsZSh3aW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgaXNJcGhvbmUgPSAod2luOiBXaW5kb3cpID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL2lQaG9uZS9pKTtcclxuXHJcbmNvbnN0IGlzSU9TID0gKHdpbjogV2luZG93KSA9PlxyXG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9pUGhvbmV8aVBvZC9pKSB8fCBpc0lwYWQod2luKTtcclxuXHJcbmNvbnN0IGlzQW5kcm9pZCA9ICh3aW46IFdpbmRvdykgPT5cclxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvYW5kcm9pZHxzaW5rL2kpO1xyXG5cclxuY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKHdpbjogV2luZG93KSA9PiB7XHJcbiAgICByZXR1cm4gaXNBbmRyb2lkKHdpbikgJiYgIXRlc3RVc2VyQWdlbnQod2luLCAvbW9iaWxlL2kpO1xyXG59O1xyXG5cclxuY29uc3QgaXNQaGFibGV0ID0gKHdpbjogV2luZG93KSA9PiB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHdpbi5pbm5lcldpZHRoO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xyXG4gICAgY29uc3Qgc21hbGxlc3QgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcclxuICAgIGNvbnN0IGxhcmdlc3QgPSBNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gKHNtYWxsZXN0ID4gMzkwICYmIHNtYWxsZXN0IDwgNTIwKSAmJlxyXG4gICAgICAgIChsYXJnZXN0ID4gNjIwICYmIGxhcmdlc3QgPCA4MDApO1xyXG59O1xyXG5cclxuY29uc3QgaXNUYWJsZXQgPSAod2luOiBXaW5kb3cpID0+IHtcclxuICAgIGNvbnN0IHdpZHRoID0gd2luLmlubmVyV2lkdGg7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB3aW4uaW5uZXJIZWlnaHQ7XHJcbiAgICBjb25zdCBzbWFsbGVzdCA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgY29uc3QgbGFyZ2VzdCA9IE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgaXNJcGFkKHdpbikgfHxcclxuICAgICAgICBpc0FuZHJvaWRUYWJsZXQod2luKSB8fFxyXG4gICAgICAgIChcclxuICAgICAgICAgICAgKHNtYWxsZXN0ID4gNDYwICYmIHNtYWxsZXN0IDwgODIwKSAmJlxyXG4gICAgICAgICAgICAobGFyZ2VzdCA+IDc4MCAmJiBsYXJnZXN0IDwgMTQwMClcclxuICAgICAgICApXHJcbiAgICApO1xyXG59O1xyXG5cclxuY29uc3QgaXNNb2JpbGUgPSAod2luOiBXaW5kb3cpID0+XHJcbiAgICBtYXRjaE1lZGlhKHdpbiwgJyhhbnktcG9pbnRlcjpjb2Fyc2UpJyk7XHJcblxyXG5jb25zdCBpc0Rlc2t0b3AgPSAod2luOiBXaW5kb3cpID0+XHJcbiAgICAhaXNNb2JpbGUod2luKTtcclxuXHJcbmNvbnN0IGlzSHlicmlkID0gKHdpbjogV2luZG93KSA9PlxyXG4gICAgaXNDb3Jkb3ZhKHdpbikgfHwgaXNDYXBhY2l0b3JOYXRpdmUod2luKTtcclxuXHJcbmNvbnN0IGlzQ29yZG92YSA9ICh3aW46IGFueSk6IGJvb2xlYW4gPT5cclxuICAgICEhKHdpblsnY29yZG92YSddIHx8IHdpblsncGhvbmVnYXAnXSB8fCB3aW5bJ1Bob25lR2FwJ10pO1xyXG5cclxuY29uc3QgaXNDYXBhY2l0b3JOYXRpdmUgPSAod2luOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGNhcGFjaXRvciA9IHdpblsnQ2FwYWNpdG9yJ107XHJcbiAgICByZXR1cm4gISEoY2FwYWNpdG9yICYmIGNhcGFjaXRvci5pc05hdGl2ZSk7XHJcbn07XHJcblxyXG5jb25zdCBpc0VsZWN0cm9uID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9lbGVjdHJvbi9pKTtcclxuXHJcbmNvbnN0IGlzUFdBID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgISEod2luLm1hdGNoTWVkaWEoJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyB8fCAod2luLm5hdmlnYXRvciBhcyBhbnkpLnN0YW5kYWxvbmUpO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRlc3RVc2VyQWdlbnQgPSAod2luOiBXaW5kb3csIGV4cHI6IFJlZ0V4cCkgPT5cclxuICAgIGV4cHIudGVzdCh3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG5jb25zdCBtYXRjaE1lZGlhID0gKHdpbjogV2luZG93LCBxdWVyeTogc3RyaW5nKTogYm9vbGVhbiA9PlxyXG4gICAgd2luLm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XHJcblxyXG5cclxuY29uc3QgUExBVEZPUk1TX01BUCA9IHtcclxuICAgICdBbmRyb2lkJzogaXNBbmRyb2lkLFxyXG4gICAgJ2lPUyc6IGlzSU9TLFxyXG4gICAgJ0Rlc2t0b3AnOiBpc0Rlc2t0b3AsXHJcbiAgICAnTW9iaWxlJzogaXNNb2JpbGUsXHJcbiAgICAnQ2hyb21lJzogaXNDaHJvbWUsXHJcbiAgICAnRmlyZWZveCc6IGlzRmlyZWZveCxcclxuICAgICdTYWZhcmknOiBpc1NhZmFyaSxcclxuICAgICdFZGdlJzogaXNFZGdlLFxyXG4gICAgJ09wZXJhJzogaXNPcGVyYSxcclxuICAgICdIeWJyaWQnOiBpc0h5YnJpZCxcclxuICAgICdQV0EnOiBpc1BXQSxcclxuICAgICdFbGVjdHJvbic6IGlzRWxlY3Ryb24sXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEFYUGxhdGZvcm1FdmVudCB7XHJcbiAgICBuYXRpdmVFdmVudDogVUlFdmVudCB8IEV2ZW50O1xyXG4gICAgc291cmNlOiBBWFBsYXRmb3JtXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdwbGF0Zm9ybScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFBsYXRmb3JtIHtcclxuICAgIHJlc2l6ZTogU3ViamVjdDxBWFBsYXRmb3JtRXZlbnQ+ID0gbmV3IFN1YmplY3Q8QVhQbGF0Zm9ybUV2ZW50PigpO1xyXG4gICAgY2xpY2s6IFN1YmplY3Q8QVhQbGF0Zm9ybUV2ZW50PiA9IG5ldyBTdWJqZWN0PEFYUGxhdGZvcm1FdmVudD4oKVxyXG4gICAgc2Nyb2xsOiBTdWJqZWN0PEFYUGxhdGZvcm1FdmVudD4gPSBuZXcgU3ViamVjdDxBWFBsYXRmb3JtRXZlbnQ+KClcclxuXHJcbiAgICBpc1J0bCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGlyID09ICdydGwnIHx8IGRvY3VtZW50LmJvZHkuZGlyID09ICdydGwnIHx8IGRvY3VtZW50LmJvZHkuc3R5bGUuZGlyZWN0aW9uID09ICdydGwnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0xhbmRzY2FwZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0IDwgd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaXNQb3J0cmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNMYW5kc2NhcGUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlzKG5hbWU6IEFYUGxhdGZvcm1zIHwgQVhCcm93c2VycyB8IEFYVGVjaG5vbG9naWVzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIFBMQVRGT1JNU19NQVBbbmFtZV0od2luZG93KSB8fCBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNpemUubmV4dCh7XHJcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudDogZSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpY2submV4dCh7XHJcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudDogZSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LCB0cnVlKVxyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRydWUpXHJcbiAgICB9XHJcbn0iXX0=
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb3JlL3NyYy9saWIvcGxhdGZvcm0vcGxhdGZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBVS9CLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3ZDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFbkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQVcsRUFBRSxDQUNwQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3JDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3BDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUdsRSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3pDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FB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LEdBQUcsSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBR0QsV0FBVztRQUNQLE9BQU8sTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ2xELENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsRUFBRSxDQUFDLElBQStDO1FBQzlDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNoRCxDQUFDO0lBRUQsY0FBYztRQUNWLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakQsSUFBSSxPQUFPLEVBQUU7WUFDVCxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUM5QixZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDM0IsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FFeEM7SUFFTCxDQUFDOzt1R0FwQ1EsVUFBVTsyR0FBVixVQUFVLGNBRlAsVUFBVTsyRkFFYixVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxVQUFVO2lCQUN6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcblxyXG5leHBvcnQgdHlwZSBBWFBsYXRmb3JtcyA9ICdBbmRyb2lkJyB8ICdEZXNrdG9wJyB8ICdpT1MnIHwgJ01vYmlsZSc7XHJcbmV4cG9ydCB0eXBlIEFYQnJvd3NlcnMgPSAnQ2hyb21lJyB8ICdTYWZhcmknIHwgJ0VkZ2UnIHwgJ0ZpcmVmb3gnIHwgJ09wZXJhJyB8ICdNU0lFJztcclxuZXhwb3J0IHR5cGUgQVhUZWNobm9sb2dpZXMgPSAnUFdBJyB8ICdIeWJyaWQnIHwgJ0VsZWN0cm9uJztcclxuXHJcblxyXG5cclxuXHJcbmNvbnN0IGlzQ2hyb21lID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9DaHJvbWUvaSk7XHJcblxyXG5jb25zdCBpc0ZpcmVmb3ggPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL0ZpcmVmb3gvaSk7XHJcblxyXG5jb25zdCBpc0VkZ2UgPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL0VkZ2UvaSk7XHJcblxyXG5jb25zdCBpc1NhZmFyaSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cclxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvU2FmYXJpL2kpO1xyXG5cclxuY29uc3QgaXNPcGVyYSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cclxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvT3BlcmEvaSkgfHwgdGVzdFVzZXJBZ2VudCh3aW4sIC9PUFIvaSk7XHJcblxyXG5jb25zdCBpc01TSUUgPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL01TSUUvaSkgfHwgdGVzdFVzZXJBZ2VudCh3aW4sIC9UcmlkZW50L2kpO1xyXG5cclxuXHJcbmNvbnN0IGlzTW9iaWxlV2ViID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgaXNNb2JpbGUod2luKSAmJiAhaXNIeWJyaWQod2luKTtcclxuXHJcbmNvbnN0IGlzSXBhZCA9ICh3aW46IFdpbmRvdykgPT4ge1xyXG4gICAgLy8gaU9TIDEyIGFuZCBiZWxvd1xyXG4gICAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlPUyAxMytcclxuICAgIGlmICh0ZXN0VXNlckFnZW50KHdpbiwgL01hY2ludG9zaC9pKSAmJiBpc01vYmlsZSh3aW4pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5cclxuY29uc3QgaXNJcGhvbmUgPSAod2luOiBXaW5kb3cpID0+XHJcbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL2lQaG9uZS9pKTtcclxuXHJcbmNvbnN0IGlzSU9TID0gKHdpbjogV2luZG93KSA9PlxyXG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9pUGhvbmV8aVBvZC9pKSB8fCBpc0lwYWQod2luKTtcclxuXHJcbmNvbnN0IGlzQW5kcm9pZCA9ICh3aW46IFdpbmRvdykgPT5cclxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvYW5kcm9pZHxzaW5rL2kpO1xyXG5cclxuY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKHdpbjogV2luZG93KSA9PiB7XHJcbiAgICByZXR1cm4gaXNBbmRyb2lkKHdpbikgJiYgIXRlc3RVc2VyQWdlbnQod2luLCAvbW9iaWxlL2kpO1xyXG59O1xyXG5cclxuY29uc3QgaXNQaGFibGV0ID0gKHdpbjogV2luZG93KSA9PiB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHdpbi5pbm5lcldpZHRoO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xyXG4gICAgY29uc3Qgc21hbGxlc3QgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcclxuICAgIGNvbnN0IGxhcmdlc3QgPSBNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm4gKHNtYWxsZXN0ID4gMzkwICYmIHNtYWxsZXN0IDwgNTIwKSAmJlxyXG4gICAgICAgIChsYXJnZXN0ID4gNjIwICYmIGxhcmdlc3QgPCA4MDApO1xyXG59O1xyXG5cclxuY29uc3QgaXNUYWJsZXQgPSAod2luOiBXaW5kb3cpID0+IHtcclxuICAgIGNvbnN0IHdpZHRoID0gd2luLmlubmVyV2lkdGg7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB3aW4uaW5uZXJIZWlnaHQ7XHJcbiAgICBjb25zdCBzbWFsbGVzdCA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgY29uc3QgbGFyZ2VzdCA9IE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgaXNJcGFkKHdpbikgfHxcclxuICAgICAgICBpc0FuZHJvaWRUYWJsZXQod2luKSB8fFxyXG4gICAgICAgIChcclxuICAgICAgICAgICAgKHNtYWxsZXN0ID4gNDYwICYmIHNtYWxsZXN0IDwgODIwKSAmJlxyXG4gICAgICAgICAgICAobGFyZ2VzdCA+IDc4MCAmJiBsYXJnZXN0IDwgMTQwMClcclxuICAgICAgICApXHJcbiAgICApO1xyXG59O1xyXG5cclxuY29uc3QgaXNNb2JpbGUgPSAod2luOiBXaW5kb3cpID0+XHJcbiAgICBtYXRjaE1lZGlhKHdpbiwgJyhhbnktcG9pbnRlcjpjb2Fyc2UpJyk7XHJcblxyXG5jb25zdCBpc0Rlc2t0b3AgPSAod2luOiBXaW5kb3cpID0+XHJcbiAgICAhaXNNb2JpbGUod2luKTtcclxuXHJcbmNvbnN0IGlzSHlicmlkID0gKHdpbjogV2luZG93KSA9PlxyXG4gICAgaXNDb3Jkb3ZhKHdpbikgfHwgaXNDYXBhY2l0b3JOYXRpdmUod2luKTtcclxuXHJcbmNvbnN0IGlzQ29yZG92YSA9ICh3aW46IGFueSk6IGJvb2xlYW4gPT5cclxuICAgICEhKHdpblsnY29yZG92YSddIHx8IHdpblsncGhvbmVnYXAnXSB8fCB3aW5bJ1Bob25lR2FwJ10pO1xyXG5cclxuY29uc3QgaXNDYXBhY2l0b3JOYXRpdmUgPSAod2luOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGNhcGFjaXRvciA9IHdpblsnQ2FwYWNpdG9yJ107XHJcbiAgICByZXR1cm4gISEoY2FwYWNpdG9yICYmIGNhcGFjaXRvci5pc05hdGl2ZSk7XHJcbn07XHJcblxyXG5jb25zdCBpc0VsZWN0cm9uID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9lbGVjdHJvbi9pKTtcclxuXHJcbmNvbnN0IGlzUFdBID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxyXG4gICAgISEod2luLm1hdGNoTWVkaWEoJyhkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpJykubWF0Y2hlcyB8fCAod2luLm5hdmlnYXRvciBhcyBhbnkpLnN0YW5kYWxvbmUpO1xyXG5cclxuZXhwb3J0IGNvbnN0IHRlc3RVc2VyQWdlbnQgPSAod2luOiBXaW5kb3csIGV4cHI6IFJlZ0V4cCkgPT5cclxuICAgIGV4cHIudGVzdCh3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG5jb25zdCBtYXRjaE1lZGlhID0gKHdpbjogV2luZG93LCBxdWVyeTogc3RyaW5nKTogYm9vbGVhbiA9PlxyXG4gICAgd2luLm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XHJcblxyXG5cclxuY29uc3QgUExBVEZPUk1TX01BUCA9IHtcclxuICAgICdBbmRyb2lkJzogaXNBbmRyb2lkLFxyXG4gICAgJ2lPUyc6IGlzSU9TLFxyXG4gICAgJ0Rlc2t0b3AnOiBpc0Rlc2t0b3AsXHJcbiAgICAnTW9iaWxlJzogaXNNb2JpbGUsXHJcbiAgICAnQ2hyb21lJzogaXNDaHJvbWUsXHJcbiAgICAnRmlyZWZveCc6IGlzRmlyZWZveCxcclxuICAgICdTYWZhcmknOiBpc1NhZmFyaSxcclxuICAgICdFZGdlJzogaXNFZGdlLFxyXG4gICAgJ09wZXJhJzogaXNPcGVyYSxcclxuICAgICdIeWJyaWQnOiBpc0h5YnJpZCxcclxuICAgICdQV0EnOiBpc1BXQSxcclxuICAgICdFbGVjdHJvbic6IGlzRWxlY3Ryb24sXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEFYUGxhdGZvcm1FdmVudCB7XHJcbiAgICBuYXRpdmVFdmVudDogVUlFdmVudCB8IEV2ZW50O1xyXG4gICAgc291cmNlOiBBWFBsYXRmb3JtXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdwbGF0Zm9ybScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFBsYXRmb3JtIHtcclxuICAgIHJlc2l6ZTogU3ViamVjdDxBWFBsYXRmb3JtRXZlbnQ+ID0gbmV3IFN1YmplY3Q8QVhQbGF0Zm9ybUV2ZW50PigpO1xyXG4gICAgY2xpY2s6IFN1YmplY3Q8QVhQbGF0Zm9ybUV2ZW50PiA9IG5ldyBTdWJqZWN0PEFYUGxhdGZvcm1FdmVudD4oKVxyXG4gICAgc2Nyb2xsOiBTdWJqZWN0PEFYUGxhdGZvcm1FdmVudD4gPSBuZXcgU3ViamVjdDxBWFBsYXRmb3JtRXZlbnQ+KClcclxuXHJcbiAgICBpc1J0bCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGlyID09ICdydGwnIHx8IGRvY3VtZW50LmJvZHkuZGlyID09ICdydGwnIHx8IGRvY3VtZW50LmJvZHkuc3R5bGUuZGlyZWN0aW9uID09ICdydGwnO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0xhbmRzY2FwZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0IDwgd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaXNQb3J0cmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNMYW5kc2NhcGUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlzKG5hbWU6IEFYUGxhdGZvcm1zIHwgQVhCcm93c2VycyB8IEFYVGVjaG5vbG9naWVzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIFBMQVRGT1JNU19NQVBbbmFtZV0od2luZG93KSB8fCBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hEYXJrTW9kZSgpIHtcclxuICAgICAgICBjb25zdCBfaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaHRtbFwiKVswXTtcclxuICAgICAgICBjb25zdCBfY2xhc3MgPSAnYXgtZGFyay1tb2RlJztcclxuICAgICAgICBjb25zdCBfaXNEYXJrID0gX2h0bWwuY2xhc3NMaXN0LmNvbnRhaW5zKF9jbGFzcyk7XHJcblxyXG4gICAgICAgIGlmIChfaXNEYXJrKSB7XHJcbiAgICAgICAgICAgIF9odG1sLmNsYXNzTGlzdC5yZW1vdmUoX2NsYXNzKVxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIk1PREVcIiwgXCJsaWdodFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfaHRtbC5jbGFzc0xpc3QuYWRkKF9jbGFzcylcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJNT0RFXCIsIFwiZGFya1wiKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZS5uZXh0KHtcclxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGljay5uZXh0KHtcclxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxyXG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRydWUpXHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IGUsXHJcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSlcclxuICAgIH1cclxufSJdfQ==
|