@magic-xpa/utils 4.1200.0-dev4120.21 → 4.1200.0-dev4120.212
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/fesm2022/magic-xpa-utils.mjs +1222 -72
- package/fesm2022/magic-xpa-utils.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/package.json +2 -4
- package/src/MsgInterface.d.ts +5 -0
- package/src/StrUtil.d.ts +1 -0
- package/src/XMLConstants.d.ts +2 -0
- package/esm2022/index.mjs +0 -27
- package/esm2022/magic-xpa-utils.mjs +0 -2
- package/esm2022/src/Base64.mjs +0 -164
- package/esm2022/src/ChoiceUtils.mjs +0 -79
- package/esm2022/src/Constants.mjs +0 -74
- package/esm2022/src/DateTimeUtils.mjs +0 -54
- package/esm2022/src/DateUtil.mjs +0 -58
- package/esm2022/src/InternalInterface.mjs +0 -341
- package/esm2022/src/JSON_Utils.mjs +0 -7
- package/esm2022/src/Logger.mjs +0 -216
- package/esm2022/src/MagicConstants.mjs +0 -12
- package/esm2022/src/Misc.mjs +0 -98
- package/esm2022/src/MsgInterface.mjs +0 -192
- package/esm2022/src/PICInterface.mjs +0 -60
- package/esm2022/src/PlatformUtils.mjs +0 -11
- package/esm2022/src/Queue.mjs +0 -28
- package/esm2022/src/Randomizer.mjs +0 -34
- package/esm2022/src/RequestInfo.mjs +0 -28
- package/esm2022/src/Rtf.mjs +0 -614
- package/esm2022/src/StorageAttribute.mjs +0 -84
- package/esm2022/src/StrUtil.mjs +0 -453
- package/esm2022/src/SyncExecutionHelper.mjs +0 -21
- package/esm2022/src/UtilDateJpn.mjs +0 -232
- package/esm2022/src/UtilImeJpn.mjs +0 -13
- package/esm2022/src/UtilStrByteMode.mjs +0 -300
- package/esm2022/src/XMLConstants.mjs +0 -169
- package/esm2022/src/Xml/XmlParser.mjs +0 -247
- package/esm2022/src/enums.mjs +0 -1763
package/esm2022/src/StrUtil.mjs
DELETED
|
@@ -1,453 +0,0 @@
|
|
|
1
|
-
import { NString, RefParam, StringBuilder, isNullOrUndefined } from "@magic-xpa/mscorelib";
|
|
2
|
-
import { UtilStrByteMode } from "./UtilStrByteMode";
|
|
3
|
-
import { Rtf } from "./Rtf";
|
|
4
|
-
const HTML_BACKSLASH = "\";
|
|
5
|
-
const HTML_COMMA = ",";
|
|
6
|
-
const HTML_HYPHEN = "-";
|
|
7
|
-
const STR_2_HTML = 1;
|
|
8
|
-
const TASK_PATH_DELIMITER = "@@||@@";
|
|
9
|
-
export const SEQ_2_HTML = 2;
|
|
10
|
-
export const HTML_2_STR = 3;
|
|
11
|
-
const HTML_2_SEQ = 4;
|
|
12
|
-
export const SEQ_2_STR = 5;
|
|
13
|
-
export class StrUtil {
|
|
14
|
-
static _paddingSpaces = null;
|
|
15
|
-
static mem_trim(str, len) {
|
|
16
|
-
let result;
|
|
17
|
-
if (len > 0) {
|
|
18
|
-
if (len > str.length) {
|
|
19
|
-
result = -1;
|
|
20
|
-
return result;
|
|
21
|
-
}
|
|
22
|
-
while (len > 0 && str[len - 1] === ' ') {
|
|
23
|
-
len = len - 1;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
result = len;
|
|
27
|
-
return result;
|
|
28
|
-
}
|
|
29
|
-
static memmove(dest, destCount, src, srcCount, len) {
|
|
30
|
-
let stringBuilder = new StringBuilder(dest.length + len);
|
|
31
|
-
if (UtilStrByteMode.isLocaleDefLangJPN() && dest.length < destCount) {
|
|
32
|
-
stringBuilder.Append(NString.FromChar(' ', destCount));
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
stringBuilder.Append(dest.substr(0, destCount));
|
|
36
|
-
}
|
|
37
|
-
stringBuilder.Append(src.substr(srcCount, len));
|
|
38
|
-
if (stringBuilder.Length < dest.length) {
|
|
39
|
-
stringBuilder.Append(dest.substr(stringBuilder.Length));
|
|
40
|
-
}
|
|
41
|
-
return stringBuilder.ToString();
|
|
42
|
-
}
|
|
43
|
-
static memcpy(dest, destCount, src, scrCountOrSrcCount, count) {
|
|
44
|
-
if (arguments.length === 5 && (dest === null || dest.constructor === String) && (destCount === null || destCount.constructor === Number) && (src === null || src.constructor === String) && (scrCountOrSrcCount === null || scrCountOrSrcCount.constructor === Number) && (count === null || count.constructor === Number)) {
|
|
45
|
-
return StrUtil.memcpy_0(dest, destCount, src, scrCountOrSrcCount, count);
|
|
46
|
-
}
|
|
47
|
-
StrUtil.memcpy_1(dest, destCount, src, scrCountOrSrcCount, count);
|
|
48
|
-
}
|
|
49
|
-
static memcpy_0(dest, destCount, src, scrCount, count) {
|
|
50
|
-
let stringBuilder = new StringBuilder(dest.substr(0, destCount));
|
|
51
|
-
if (scrCount + count < src.length) {
|
|
52
|
-
stringBuilder.Append(src.substr(scrCount, count - scrCount));
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
stringBuilder.Append(src.substr(scrCount));
|
|
56
|
-
}
|
|
57
|
-
let size = dest.length - destCount - count;
|
|
58
|
-
if (size > 0) {
|
|
59
|
-
stringBuilder.Append(dest.substr(destCount + count));
|
|
60
|
-
}
|
|
61
|
-
return stringBuilder.ToString();
|
|
62
|
-
}
|
|
63
|
-
static memcpy_1(dest, destCount, src, srcCount, count) {
|
|
64
|
-
while (count > 0 && destCount < dest.length && srcCount < src.length) {
|
|
65
|
-
dest[destCount++] = src[srcCount++];
|
|
66
|
-
count = count - 1;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
static memset(dest, destCount, inVal, counter) {
|
|
70
|
-
if (arguments.length === 4 && (dest === null || dest.constructor === String) && (destCount === null || destCount.constructor === Number) && (inVal === null || inVal.constructor === Number) && (counter === null || counter.constructor === Number)) {
|
|
71
|
-
return StrUtil.memset_0(dest, destCount, inVal, counter);
|
|
72
|
-
}
|
|
73
|
-
StrUtil.memset_1(dest, destCount, inVal, counter);
|
|
74
|
-
}
|
|
75
|
-
static memset_0(dest, destCount, inVal, counter) {
|
|
76
|
-
let first = new StringBuilder(dest.substr(0, destCount));
|
|
77
|
-
while (counter > 0) {
|
|
78
|
-
first.Append(inVal);
|
|
79
|
-
counter = counter - 1;
|
|
80
|
-
}
|
|
81
|
-
if (first.Length < dest.length) {
|
|
82
|
-
first.Append(dest.substr(first.Length));
|
|
83
|
-
}
|
|
84
|
-
return first.ToString();
|
|
85
|
-
}
|
|
86
|
-
static memset_1(dest, destCount, inVal, counter) {
|
|
87
|
-
while (counter > 0 && destCount < dest.length) {
|
|
88
|
-
dest[destCount++] = inVal;
|
|
89
|
-
counter = counter - 1;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
static strstr(str, substr) {
|
|
93
|
-
let from = str.indexOf(substr);
|
|
94
|
-
let result;
|
|
95
|
-
if (from < 0) {
|
|
96
|
-
result = null;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
result = str.substr(from);
|
|
100
|
-
}
|
|
101
|
-
return result;
|
|
102
|
-
}
|
|
103
|
-
static ReverseString(text) {
|
|
104
|
-
let array = NString.ToCharArray(text.ToString());
|
|
105
|
-
array.reverse();
|
|
106
|
-
return new StringBuilder(NString.FromChars(array));
|
|
107
|
-
}
|
|
108
|
-
static rtrim(str) {
|
|
109
|
-
return StrUtil.rtrimWithNull(str, false);
|
|
110
|
-
}
|
|
111
|
-
static rtrimWithNull(str, trimNullChars) {
|
|
112
|
-
let result;
|
|
113
|
-
if (typeof str === "undefined" || str === null || str.length === 0) {
|
|
114
|
-
result = str;
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
let idx = str.length - 1;
|
|
118
|
-
if (trimNullChars) {
|
|
119
|
-
while (idx >= 0 && (str[idx] === ' ' || str[idx] === String.fromCharCode(0))) {
|
|
120
|
-
idx = idx - 1;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
while (idx >= 0 && str[idx] === ' ') {
|
|
125
|
-
idx = idx - 1;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
idx = idx + 1;
|
|
129
|
-
if (idx < str.length) {
|
|
130
|
-
result = str.substr(0, idx);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
result = str;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return result;
|
|
137
|
-
}
|
|
138
|
-
static ltrim(str) {
|
|
139
|
-
let length = str.length;
|
|
140
|
-
let i = 0;
|
|
141
|
-
let result;
|
|
142
|
-
if (str === null || length === 0) {
|
|
143
|
-
result = str;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
while (i < length && str[i] === ' ') {
|
|
147
|
-
i = i + 1;
|
|
148
|
-
}
|
|
149
|
-
if (i > 0) {
|
|
150
|
-
str = str.substr(i);
|
|
151
|
-
}
|
|
152
|
-
result = str;
|
|
153
|
-
}
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
static DeleteStringsFromEnds(str, strToDelete) {
|
|
157
|
-
if (str.startsWith(strToDelete)) {
|
|
158
|
-
str = str.substr(strToDelete.length);
|
|
159
|
-
}
|
|
160
|
-
if (str.endsWith(strToDelete)) {
|
|
161
|
-
str = str.substr(0, str.length - strToDelete.length);
|
|
162
|
-
}
|
|
163
|
-
let result;
|
|
164
|
-
if (str.length === 0) {
|
|
165
|
-
result = null;
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
result = str;
|
|
169
|
-
}
|
|
170
|
-
return result;
|
|
171
|
-
}
|
|
172
|
-
static padStr(str, len) {
|
|
173
|
-
let padLen = len - str.length;
|
|
174
|
-
if (padLen > 0) {
|
|
175
|
-
if (StrUtil._paddingSpaces === null || StrUtil._paddingSpaces.length < padLen) {
|
|
176
|
-
StrUtil._paddingSpaces = NString.FromChar(' ', padLen);
|
|
177
|
-
}
|
|
178
|
-
let stringBuilder = new StringBuilder(len);
|
|
179
|
-
stringBuilder.Append(str);
|
|
180
|
-
stringBuilder.Append(StrUtil._paddingSpaces, 0, padLen);
|
|
181
|
-
str = stringBuilder.ToString();
|
|
182
|
-
}
|
|
183
|
-
return str;
|
|
184
|
-
}
|
|
185
|
-
static tokenize(source, delim) {
|
|
186
|
-
return source.split(delim);
|
|
187
|
-
}
|
|
188
|
-
static stringToHexaDump(str, minLength) {
|
|
189
|
-
let stringBuilder = new StringBuilder(str.length * minLength);
|
|
190
|
-
for (let indx = 0; indx < str.length; indx = indx + 1) {
|
|
191
|
-
let currInt = str.charCodeAt(indx);
|
|
192
|
-
let hexStr = currInt.toString(16);
|
|
193
|
-
while (hexStr.length < minLength) {
|
|
194
|
-
hexStr = "0" + hexStr;
|
|
195
|
-
}
|
|
196
|
-
stringBuilder.Append(hexStr);
|
|
197
|
-
}
|
|
198
|
-
return stringBuilder.ToString().toUpperCase();
|
|
199
|
-
}
|
|
200
|
-
static searchAndReplace(str, from, to) {
|
|
201
|
-
if (arguments.length === 3 && (str === null || str.constructor === String) && (from === null || from.constructor === String) && (to === null || to.constructor === String)) {
|
|
202
|
-
return StrUtil.searchAndReplace_0(str, from, to);
|
|
203
|
-
}
|
|
204
|
-
return StrUtil.searchAndReplace_1(str, from, to);
|
|
205
|
-
}
|
|
206
|
-
static searchAndReplace_0(str, from, to) {
|
|
207
|
-
let lastSubStr = 0;
|
|
208
|
-
let startSubStr;
|
|
209
|
-
let result;
|
|
210
|
-
if ((startSubStr = str.indexOf(from)) === -1) {
|
|
211
|
-
result = str;
|
|
212
|
-
}
|
|
213
|
-
else {
|
|
214
|
-
let stringBuilder = new StringBuilder(str.length);
|
|
215
|
-
while (startSubStr !== -1) {
|
|
216
|
-
stringBuilder.Append(str.substr(lastSubStr, startSubStr - lastSubStr) + to);
|
|
217
|
-
startSubStr = startSubStr + from.length;
|
|
218
|
-
lastSubStr = startSubStr;
|
|
219
|
-
startSubStr = str.indexOf(from, lastSubStr);
|
|
220
|
-
}
|
|
221
|
-
stringBuilder.Append(str.substr(lastSubStr));
|
|
222
|
-
result = stringBuilder.ToString();
|
|
223
|
-
}
|
|
224
|
-
return result;
|
|
225
|
-
}
|
|
226
|
-
static searchAndReplace_1(str, from, to) {
|
|
227
|
-
let lastSubStr = 0;
|
|
228
|
-
let sarIndex = 0;
|
|
229
|
-
let fromCopy = from.slice();
|
|
230
|
-
let startSubStr;
|
|
231
|
-
let SARindex = new RefParam(0);
|
|
232
|
-
startSubStr = StrUtil.indexOf(str, fromCopy, lastSubStr, SARindex);
|
|
233
|
-
sarIndex = SARindex.value;
|
|
234
|
-
if (startSubStr === -1)
|
|
235
|
-
return str;
|
|
236
|
-
let result;
|
|
237
|
-
let tmpBuf = new StringBuilder(str.length);
|
|
238
|
-
while (startSubStr !== -1) {
|
|
239
|
-
tmpBuf.Append(str.substr(lastSubStr, startSubStr - lastSubStr) + to[sarIndex]);
|
|
240
|
-
startSubStr += fromCopy[sarIndex].length;
|
|
241
|
-
lastSubStr = startSubStr;
|
|
242
|
-
startSubStr = StrUtil.indexOf(str, fromCopy, lastSubStr, SARindex);
|
|
243
|
-
sarIndex = SARindex.value;
|
|
244
|
-
}
|
|
245
|
-
;
|
|
246
|
-
tmpBuf.Append(str.substr(lastSubStr));
|
|
247
|
-
result = tmpBuf.ToString();
|
|
248
|
-
return result;
|
|
249
|
-
}
|
|
250
|
-
static indexOf(str, strings, offset, SARindex) {
|
|
251
|
-
let minOffset = -1;
|
|
252
|
-
for (let i = 0; i < strings.length; i = i + 1) {
|
|
253
|
-
if (!(strings[i] === null)) {
|
|
254
|
-
let resultOffset = str.indexOf(strings[i], offset);
|
|
255
|
-
if (resultOffset === -1) {
|
|
256
|
-
strings[i] = null;
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
if (resultOffset < minOffset || minOffset === -1) {
|
|
260
|
-
minOffset = resultOffset;
|
|
261
|
-
SARindex.value = i;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
let result;
|
|
267
|
-
if (minOffset > -1) {
|
|
268
|
-
result = minOffset;
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
SARindex.value = -1;
|
|
272
|
-
result = -1;
|
|
273
|
-
}
|
|
274
|
-
return result;
|
|
275
|
-
}
|
|
276
|
-
static replaceStringTokens(userString, token, occurrence, val) {
|
|
277
|
-
let tokenLen = token.length;
|
|
278
|
-
let currPosition = 0;
|
|
279
|
-
let newString = userString;
|
|
280
|
-
if (val !== null) {
|
|
281
|
-
let num2 = 0;
|
|
282
|
-
while (num2 < occurrence && currPosition !== -1) {
|
|
283
|
-
currPosition = userString.indexOf(token, currPosition + ((num2 === 0) ? 0 : tokenLen));
|
|
284
|
-
num2 = num2 + 1;
|
|
285
|
-
}
|
|
286
|
-
if (currPosition !== -1) {
|
|
287
|
-
newString = userString.substr(0, currPosition) + val + userString.substr(currPosition + tokenLen, userString.length - (currPosition + tokenLen));
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return newString;
|
|
291
|
-
}
|
|
292
|
-
static makePrintableTokens(source, type) {
|
|
293
|
-
if (arguments.length === 2 && (source === null || source.constructor === String) && (type === null || type.constructor === Number)) {
|
|
294
|
-
return StrUtil.makePrintableTokens_0(source, type);
|
|
295
|
-
}
|
|
296
|
-
StrUtil.makePrintableTokens_1(source, type);
|
|
297
|
-
}
|
|
298
|
-
static makePrintableTokens_0(source, type) {
|
|
299
|
-
let escStr = [
|
|
300
|
-
"\\", "-", ","
|
|
301
|
-
];
|
|
302
|
-
let escSeq = [
|
|
303
|
-
"\\\\", "\\-", "\\,"
|
|
304
|
-
];
|
|
305
|
-
let escHtm = [
|
|
306
|
-
HTML_BACKSLASH, HTML_HYPHEN, HTML_COMMA
|
|
307
|
-
];
|
|
308
|
-
let result;
|
|
309
|
-
switch (type) {
|
|
310
|
-
case STR_2_HTML:
|
|
311
|
-
result = StrUtil.searchAndReplace(source, escStr, escHtm);
|
|
312
|
-
break;
|
|
313
|
-
case SEQ_2_HTML:
|
|
314
|
-
result = StrUtil.searchAndReplace(source, escSeq, escHtm);
|
|
315
|
-
break;
|
|
316
|
-
case HTML_2_SEQ:
|
|
317
|
-
result = StrUtil.searchAndReplace(source, escHtm, escSeq);
|
|
318
|
-
break;
|
|
319
|
-
case HTML_2_STR:
|
|
320
|
-
result = StrUtil.searchAndReplace(source, escHtm, escStr);
|
|
321
|
-
break;
|
|
322
|
-
case SEQ_2_STR:
|
|
323
|
-
result = StrUtil.searchAndReplace(source, escSeq, escStr);
|
|
324
|
-
break;
|
|
325
|
-
default:
|
|
326
|
-
result = source;
|
|
327
|
-
break;
|
|
328
|
-
}
|
|
329
|
-
return result;
|
|
330
|
-
}
|
|
331
|
-
static makePrintableTokens_1(source, type) {
|
|
332
|
-
if (source !== null) {
|
|
333
|
-
let length = source.length;
|
|
334
|
-
for (let i = 0; i < length; i = i + 1) {
|
|
335
|
-
let currElm = source.get_Item(i);
|
|
336
|
-
source.set_Item(i, StrUtil.makePrintableTokens_0(currElm, type));
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
static makePrintable(source) {
|
|
341
|
-
let from = [
|
|
342
|
-
"\n", "\r", "'", "\\", "\"", "\0"
|
|
343
|
-
];
|
|
344
|
-
let to = [
|
|
345
|
-
"\\n", "\\r", "\\'", "\\\\", "\\\"", "\\0"
|
|
346
|
-
];
|
|
347
|
-
return StrUtil.searchAndReplace(source, from, to);
|
|
348
|
-
}
|
|
349
|
-
static makePrintable2(source) {
|
|
350
|
-
let from = [
|
|
351
|
-
"\n", "\r", "\0"
|
|
352
|
-
];
|
|
353
|
-
let to = [
|
|
354
|
-
"\\n", "\\r", "\\0"
|
|
355
|
-
];
|
|
356
|
-
return StrUtil.searchAndReplace(source, from, to);
|
|
357
|
-
}
|
|
358
|
-
static ZstringMake(s, len) {
|
|
359
|
-
len = StrUtil.mem_trim(s, len);
|
|
360
|
-
return s.substr(0, len);
|
|
361
|
-
}
|
|
362
|
-
static GetPlainTextfromRtf(rtfText) {
|
|
363
|
-
if (Rtf.isRtf(rtfText)) {
|
|
364
|
-
let rtf = new Rtf();
|
|
365
|
-
let outputTxt = new StringBuilder("");
|
|
366
|
-
rtf.toTxt(rtfText, outputTxt);
|
|
367
|
-
rtfText = outputTxt.ToString();
|
|
368
|
-
}
|
|
369
|
-
return rtfText;
|
|
370
|
-
}
|
|
371
|
-
static StringsArraysEqual(str1, str2) {
|
|
372
|
-
let result;
|
|
373
|
-
if (str1 === null && str2 === null) {
|
|
374
|
-
result = true;
|
|
375
|
-
}
|
|
376
|
-
else {
|
|
377
|
-
if (str1 === null || str2 === null) {
|
|
378
|
-
result = false;
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
if (str1.length !== str2.length) {
|
|
382
|
-
result = false;
|
|
383
|
-
}
|
|
384
|
-
else {
|
|
385
|
-
for (let index = 0; index < str1.length; index = index + 1) {
|
|
386
|
-
if ((str1[index] !== str2[index])) {
|
|
387
|
-
result = false;
|
|
388
|
-
return result;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
result = true;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
return result;
|
|
396
|
-
}
|
|
397
|
-
static SearchAndReplaceWildChars(buf, len, filler) {
|
|
398
|
-
buf = NString.PadRight(buf, len);
|
|
399
|
-
let escChar = false;
|
|
400
|
-
let tmpBuf = new StringBuilder(len);
|
|
401
|
-
for (let i = 0; i < len; i = i + 1) {
|
|
402
|
-
switch (buf[i]) {
|
|
403
|
-
case ('\\'):
|
|
404
|
-
{
|
|
405
|
-
let isNextCharWild = true;
|
|
406
|
-
if ((i + 1 < len) && (buf[i + 1] != '*' && buf[i + 1] != '\\'))
|
|
407
|
-
isNextCharWild = false;
|
|
408
|
-
if (escChar || !isNextCharWild)
|
|
409
|
-
tmpBuf.Append(buf[i]);
|
|
410
|
-
escChar = !escChar;
|
|
411
|
-
}
|
|
412
|
-
break;
|
|
413
|
-
case ('*'):
|
|
414
|
-
if (escChar)
|
|
415
|
-
tmpBuf.Append(buf[i]);
|
|
416
|
-
else {
|
|
417
|
-
tmpBuf.Append(filler, len - tmpBuf.Length);
|
|
418
|
-
}
|
|
419
|
-
escChar = false;
|
|
420
|
-
break;
|
|
421
|
-
case '?':
|
|
422
|
-
tmpBuf.Append(filler);
|
|
423
|
-
escChar = false;
|
|
424
|
-
break;
|
|
425
|
-
default:
|
|
426
|
-
tmpBuf.Append(buf[i]);
|
|
427
|
-
escChar = false;
|
|
428
|
-
break;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
let text = tmpBuf.ToString();
|
|
432
|
-
return NString.TrimEnd(NString.TrimEnd(text, ['\0']));
|
|
433
|
-
}
|
|
434
|
-
static getConsoleErorString(source) {
|
|
435
|
-
let consoleErorString = "";
|
|
436
|
-
if (!isNullOrUndefined(source))
|
|
437
|
-
consoleErorString = this.searchAndReplace(source, TASK_PATH_DELIMITER, "");
|
|
438
|
-
return consoleErorString;
|
|
439
|
-
}
|
|
440
|
-
static getMsgBoxErorString(source) {
|
|
441
|
-
let tokens;
|
|
442
|
-
let msgBoxErorString = new StringBuilder("");
|
|
443
|
-
if (!isNullOrUndefined(source)) {
|
|
444
|
-
tokens = this.tokenize(source, TASK_PATH_DELIMITER);
|
|
445
|
-
for (let i = 0; i < tokens.length; i++) {
|
|
446
|
-
msgBoxErorString.Append(tokens[i]);
|
|
447
|
-
i++;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
return msgBoxErorString.toString();
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RyVXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TdHJVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE1BQU0sY0FBYyxHQUFXLFFBQVEsQ0FBQztBQUN4QyxNQUFNLFVBQVUsR0FBVyxRQUFRLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQVcsUUFBUSxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFXLENBQUMsQ0FBQztBQUM3QixNQUFNLG1CQUFtQixHQUFXLFFBQVEsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQVcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxDQUFDLENBQUM7QUFFbkMsTUFBTSxPQUFPLE9BQU87SUFDVixNQUFNLENBQUMsY0FBYyxHQUFXLElBQUksQ0FBQztJQUc3QyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3RDLElBQUksTUFBYyxDQUFDO1FBQ25CLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNYLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDWixPQUFPLE1BQU0sQ0FBQzthQUNmO1lBQ0QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FB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S0FBSyxJQUFJLENBQUMsR0FBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQzdDO2dCQUNFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxFQUFFLENBQUM7YUFDTDtTQUNGO1FBSUQsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0LCBOU3RyaW5nLCBSZWZQYXJhbSwgU3RyaW5nQnVpbGRlciwgaXNOdWxsT3JVbmRlZmluZWR9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1V0aWxTdHJCeXRlTW9kZX0gZnJvbSBcIi4vVXRpbFN0ckJ5dGVNb2RlXCI7XHJcbmltcG9ydCB7UnRmfSBmcm9tIFwiLi9SdGZcIjtcclxuXHJcbmNvbnN0IEhUTUxfQkFDS1NMQVNIOiBzdHJpbmcgPSBcIiYjMDkyO1wiO1xyXG5jb25zdCBIVE1MX0NPTU1BOiBzdHJpbmcgPSBcIiYjMDQ0O1wiO1xyXG5jb25zdCBIVE1MX0hZUEhFTjogc3RyaW5nID0gXCImIzA0NTtcIjtcclxuY29uc3QgU1RSXzJfSFRNTDogbnVtYmVyID0gMTtcclxuY29uc3QgVEFTS19QQVRIX0RFTElNSVRFUjogc3RyaW5nID0gXCJAQHx8QEBcIjtcclxuZXhwb3J0IGNvbnN0IFNFUV8yX0hUTUw6IG51bWJlciA9IDI7XHJcbmV4cG9ydCBjb25zdCBIVE1MXzJfU1RSOiBudW1iZXIgPSAzO1xyXG5jb25zdCBIVE1MXzJfU0VROiBudW1iZXIgPSA0O1xyXG5leHBvcnQgY29uc3QgU0VRXzJfU1RSOiBudW1iZXIgPSA1O1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0clV0aWwge1xyXG4gIHByaXZhdGUgc3RhdGljIF9wYWRkaW5nU3BhY2VzOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IHRyaW0gdGhlIGVuZCBvZiB0aGUgc3RyaW5nPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBtZW1fdHJpbShzdHI6IHN0cmluZywgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKGxlbiA+IDApIHtcclxuICAgICAgaWYgKGxlbiA+IHN0ci5sZW5ndGgpIHtcclxuICAgICAgICByZXN1bHQgPSAtMTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIHdoaWxlIChsZW4gPiAwICYmIHN0cltsZW4gLSAxXSA9PT0gJyAnKSB7XHJcbiAgICAgICAgbGVuID0gbGVuIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0ID0gbGVuO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1tb3ZlKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nLCBzcmNDb3VudDogbnVtYmVyLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3QubGVuZ3RoICsgbGVuKTtcclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkgJiYgZGVzdC5sZW5ndGggPCBkZXN0Q291bnQpIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoTlN0cmluZy5Gcm9tQ2hhcignICcsIGRlc3RDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzcmNDb3VudCwgbGVuKSk7XHJcblxyXG4gICAgaWYgKHN0cmluZ0J1aWxkZXIuTGVuZ3RoIDwgZGVzdC5sZW5ndGgpIHtcclxuICAgICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChkZXN0LnN1YnN0cihzdHJpbmdCdWlsZGVyLkxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBzdHJpbmcsIHNjckNvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1lbWNweShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nW10sIHNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkO1xyXG4gIHN0YXRpYyBtZW1jcHkoZGVzdDogYW55LCBkZXN0Q291bnQ6IG51bWJlciwgc3JjOiBhbnksIHNjckNvdW50T3JTcmNDb3VudDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1ICYmIChkZXN0ID09PSBudWxsIHx8IGRlc3QuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGRlc3RDb3VudCA9PT0gbnVsbCB8fCBkZXN0Q291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKHNyYyA9PT0gbnVsbCB8fCBzcmMuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKHNjckNvdW50T3JTcmNDb3VudCA9PT0gbnVsbCB8fCBzY3JDb3VudE9yU3JjQ291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGNvdW50ID09PSBudWxsIHx8IGNvdW50LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLm1lbWNweV8wKGRlc3QsIGRlc3RDb3VudCwgc3JjLCBzY3JDb3VudE9yU3JjQ291bnQsIGNvdW50KTtcclxuICAgIH1cclxuICAgIFN0clV0aWwubWVtY3B5XzEoZGVzdCwgZGVzdENvdW50LCBzcmMsIHNjckNvdW50T3JTcmNDb3VudCwgY291bnQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvcHkgcGFydCBvZiBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZywgbGlrZSBtZW1jcHkgb2YgQywgYnV0IDQgc3RyaW5nIG9ubHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVzdFwiPnN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0Q291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gZGVzdGlnbmF0aW9uIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcmNcIj5zdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2NyQ291bnRcIj5vZiBjb3VudGVyIHN0YXJ0IGZyb20gaW4gc291cmNlIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXcgdmFsdWUgb2YgZGVzdGlnbmF0aW9uIHN0cmluZzwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jcHlfMChkZXN0OiBzdHJpbmcsIGRlc3RDb3VudDogbnVtYmVyLCBzcmM6IHN0cmluZywgc2NyQ291bnQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRlc3Quc3Vic3RyKDAsIGRlc3RDb3VudCkpO1xyXG5cclxuICAgIGlmIChzY3JDb3VudCArIGNvdW50IDwgc3JjLmxlbmd0aCkge1xyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzcmMuc3Vic3RyKHNjckNvdW50LCBjb3VudCAtIHNjckNvdW50KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3JjLnN1YnN0cihzY3JDb3VudCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IGRlc3QubGVuZ3RoIC0gZGVzdENvdW50IC0gY291bnQ7XHJcbiAgICBpZiAoc2l6ZSA+IDApIHtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoZGVzdC5zdWJzdHIoZGVzdENvdW50ICsgY291bnQpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJpbmdCdWlsZGVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtZW1jcHlfMShkZXN0OiBzdHJpbmdbXSwgZGVzdENvdW50OiBudW1iZXIsIHNyYzogc3RyaW5nW10sIHNyY0NvdW50OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlIChjb3VudCA+IDAgJiYgZGVzdENvdW50IDwgZGVzdC5sZW5ndGggJiYgc3JjQ291bnQgPCBzcmMubGVuZ3RoKSB7XHJcbiAgICAgIGRlc3RbZGVzdENvdW50KytdID0gc3JjW3NyY0NvdW50KytdO1xyXG4gICAgICBjb3VudCA9IGNvdW50IC0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogc3RyaW5nLCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiB2b2lkO1xyXG4gIHN0YXRpYyBtZW1zZXQoZGVzdDogYW55LCBkZXN0Q291bnQ6IG51bWJlciwgaW5WYWw6IHN0cmluZywgY291bnRlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIChkZXN0ID09PSBudWxsIHx8IGRlc3QuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGRlc3RDb3VudCA9PT0gbnVsbCB8fCBkZXN0Q291bnQuY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKGluVmFsID09PSBudWxsIHx8IGluVmFsLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChjb3VudGVyID09PSBudWxsIHx8IGNvdW50ZXIuY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwubWVtc2V0XzAoZGVzdCwgZGVzdENvdW50LCBpblZhbCwgY291bnRlcik7XHJcbiAgICB9XHJcbiAgICBTdHJVdGlsLm1lbXNldF8xKGRlc3QsIGRlc3RDb3VudCwgaW5WYWwsIGNvdW50ZXIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluc2VydCB0byBzdHJpbmcgY2hhcnMgbiB0aW1lc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkZXN0XCI+c3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlc3RDb3VudFwiPm9mIGNvdW50ZXIgc3RhcnQgZnJvbSBpbiBkZXN0aWduYXRpb24gc3RyaW5nIHRvIHN0YXJ0IGluc2VydGlvbiBvZiBjaGFyIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5WYWxcIj4yIGluc2VydDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb3VudGVyXCI+LSBudW1iZXIgb2YgdGltZXMgdG8gaW5zZXJ0IHRoZSBjaGFyPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG5ldyB2YWx1ZSBvZiBkZXN0aWduYXRpb24gc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG1lbXNldF8wKGRlc3Q6IHN0cmluZywgZGVzdENvdW50OiBudW1iZXIsIGluVmFsOiBzdHJpbmcsIGNvdW50ZXI6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZmlyc3Q6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkZXN0LnN1YnN0cigwLCBkZXN0Q291bnQpKTtcclxuICAgIHdoaWxlIChjb3VudGVyID4gMCkge1xyXG4gICAgICBmaXJzdC5BcHBlbmQoaW5WYWwpO1xyXG4gICAgICBjb3VudGVyID0gY291bnRlciAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpcnN0Lkxlbmd0aCA8IGRlc3QubGVuZ3RoKSB7XHJcbiAgICAgIGZpcnN0LkFwcGVuZChkZXN0LnN1YnN0cihmaXJzdC5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmaXJzdC5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWVtc2V0XzEoZGVzdDogc3RyaW5nW10sIGRlc3RDb3VudDogbnVtYmVyLCBpblZhbDogc3RyaW5nLCBjb3VudGVyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHdoaWxlIChjb3VudGVyID4gMCAmJiBkZXN0Q291bnQgPCBkZXN0Lmxlbmd0aCkge1xyXG4gICAgICBkZXN0W2Rlc3RDb3VudCsrXSA9IGluVmFsO1xyXG4gICAgICBjb3VudGVyID0gY291bnRlciAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc3Ryc3RyKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogbnVtYmVyID0gc3RyLmluZGV4T2Yoc3Vic3RyKTtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChmcm9tIDwgMCkge1xyXG4gICAgICByZXN1bHQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0ci5zdWJzdHIoZnJvbSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXZlcnNlcyBzdHJpbmcgdmFsdWVzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPlRoZSBTdHJpbmdCdWlsZGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBzdHJpbmcgdG8gYmUgcmV2ZXJzZWQuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+VGhlIHJldmVyc2VkIHN0cmluZyBjb250YWluZWQgaW4gYSBTdHJpbmdCdWlsZGVyIG9iamVjdC48L3JldHVybnM+XHJcbiAgc3RhdGljIFJldmVyc2VTdHJpbmcodGV4dDogU3RyaW5nQnVpbGRlcik6IFN0cmluZ0J1aWxkZXIge1xyXG4gICAgLy8gVE9ETzogdXNlIHN0cmluZy5SZXZlcnNlKClcclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KHRleHQuVG9TdHJpbmcoKSk7XHJcbiAgICBhcnJheS5yZXZlcnNlKCk7XHJcbiAgICByZXR1cm4gbmV3IFN0cmluZ0J1aWxkZXIoTlN0cmluZy5Gcm9tQ2hhcnMoYXJyYXkpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcnRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0clV0aWwucnRyaW1XaXRoTnVsbChzdHIsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVtb3ZlIHNwYWNlcyBhbmQvb3IgTnVsbCBjaGFycyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0cmltTnVsbENoYXJzXCI+V2hldGhlciB0byByZW1vdmUgTlVMTCBjaGFyYWN0ZXJzIG9yIG5vdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHN0YXRpYyBydHJpbVdpdGhOdWxsKHN0cjogc3RyaW5nLCB0cmltTnVsbENoYXJzOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmICh0eXBlb2Ygc3RyID09PSBcInVuZGVmaW5lZFwiIHx8IHN0ciA9PT0gbnVsbCB8fCBzdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaWR4OiBudW1iZXIgPSBzdHIubGVuZ3RoIC0gMTtcclxuICAgICAgaWYgKHRyaW1OdWxsQ2hhcnMpIHtcclxuXHJcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIChzdHJbaWR4XSA9PT0gJyAnIHx8IHN0cltpZHhdID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApLyonXHUwMDAwJyovKSkge1xyXG4gICAgICAgICAgaWR4ID0gaWR4IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIHN0cltpZHhdID09PSAnICcpIHtcclxuICAgICAgICAgIGlkeCA9IGlkeCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlkeCA9IGlkeCArIDE7XHJcblxyXG4gICAgICBpZiAoaWR4IDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdCA9IHN0ci5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlbW92ZSBzcGFjZXMgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHN0cmluZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgc3RyaW5nIHRvIHRyaW1cclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgbHRyaW0oc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc3RyLmxlbmd0aDtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHN0ciA9PT0gbnVsbCB8fCBsZW5ndGggPT09IDApIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHdoaWxlIChpIDwgbGVuZ3RoICYmIHN0cltpXSA9PT0gJyAnLyonICcqLykge1xyXG4gICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cihpKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBzdHI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRoaXMgZnVuY3Rpb24gZm9yIERlbGV0aW5nIFN0cmluZyBmcm9tIGVuZCAmIHN0YXJ0IG9mIGlucHV0XHJcbiAgLy8vIFN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+U3RyaW5nICwgd2hpY2ggY2FuIGluY2x1ZGUgc3RyVG9EZWxldGUgc3BhY2VzIG9uIGlucHV0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyVG9EZWxldGVcIj5uZWVkIGRlbGV0ZSB0aGlzIFN0cmluZyBmcm9tIHN0YXJ0L2VuZCBvZiBzdHIuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBTdHJpbmcgd2l0aG91dCBzdHJUb0RlbGV0ZSBvbiBlbmQgJiBzdGFydCxcclxuICAvLy8gb3IgJ251bGwnIGlmIFN0aW5nIGhhc24ndCBub3QgIGNoYXJhY3RlcnMgaW5zaWRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgRGVsZXRlU3RyaW5nc0Zyb21FbmRzKHN0cjogc3RyaW5nLCBzdHJUb0RlbGV0ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChzdHIuc3RhcnRzV2l0aChzdHJUb0RlbGV0ZSkpIHtcclxuICAgICAgc3RyID0gc3RyLnN1YnN0cihzdHJUb0RlbGV0ZS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHN0ci5lbmRzV2l0aChzdHJUb0RlbGV0ZSkpIHtcclxuICAgICAgc3RyID0gc3RyLnN1YnN0cigwLCBzdHIubGVuZ3RoIC0gc3RyVG9EZWxldGUubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gc3RyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcGFkIGEgc3RyaW5nIHdpdGggdHJhaWxpbmcgc3BhY2VzIHVwIHRvIHRoZSBnaXZlbiBsZW5ndGg8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byBwYWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5cIj50aGUgZXhwZWN0ZWQgbGVuZ3RoIGFmdGVyIHBhZGRpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICBzdGF0aWMgcGFkU3RyKHN0cjogc3RyaW5nLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgcGFkTGVuOiBudW1iZXIgPSBsZW4gLSBzdHIubGVuZ3RoO1xyXG5cclxuICAgIGlmIChwYWRMZW4gPiAwKSB7XHJcbiAgICAgIGlmIChTdHJVdGlsLl9wYWRkaW5nU3BhY2VzID09PSBudWxsIHx8IFN0clV0aWwuX3BhZGRpbmdTcGFjZXMubGVuZ3RoIDwgcGFkTGVuKSB7XHJcbiAgICAgICAgU3RyVXRpbC5fcGFkZGluZ1NwYWNlcyA9IE5TdHJpbmcuRnJvbUNoYXIoJyAnLCBwYWRMZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBzdHJpbmdCdWlsZGVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIobGVuKTtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyKTtcclxuICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoU3RyVXRpbC5fcGFkZGluZ1NwYWNlcywgMCwgcGFkTGVuKTtcclxuICAgICAgc3RyID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhpcyBtZXRob2Qgd2lsbCBzZXJ2ZSBhcyBhIHN0cmluZyB0b2tlbml6ZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgYyMgc3BsaXQgbWV0aG9kXHJcbiAgLy8vIHNpbmNlIHRoZXJlIGFyZSBkaWZmcmVuY2VzIGJ0d2VlbiBqYXZhIHRva2VuaXplciBhbmQgYyMgc3BsaXRcclxuICAvLy8gdGhlIGltcGxpbWVudGF0aW9uIGdpdmVuIGJ5IHRoZSBjb252ZXJzaW9uIHRvb2wgaXMgbm90IFN1ZmZpY2llbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPi0gdGhlIHNvdXJjZSBzdHJpbmcgdG8gYmUgY29udmVydGVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1cIj4tIHRoZSBzdHJpbmcgb2YgZGVsaW1pdGVycyB1c2VkIHRvIHNwbGl0IHRoZSBzdHJpbmcgKGVhY2ggY2hhcmFjdGVyIGluIHRoZSBTdHJpbmcgaXMgYSBkZWxpbWl0ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFycmF5IG9mIHRva2VuIGFjY29yZGluZyB3aGljaCBpcyB0aGUgc2FtZSBhcyBzdHJpbmcgdG9rZW5pemVyIGluIGphdmFcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b2tlbml6ZShzb3VyY2U6IHN0cmluZywgZGVsaW06IHN0cmluZ3xSZWdFeHApOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBJdCBpcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQgdGhhdCB3ZSBzaG91bGQgbm90IHVzZSBTdHJpbmcuU3BsaXQoKVxyXG4gICAgLy8gYmVjYXVzZSBpdHMgYmVoYXZpb3IgaXMgZGlmZmVyZW50IHRoYW4gSmF2YSdzIHRva2VuaXplci5cclxuICAgIC8vIFNvLCB3ZSB3ZXJlIHN1cHBvc2UgdG8gdXNlIG91ciBvd24gaW1wbGVtZW50YXRpb24gKHRoZSBjb21tZW50ZWQgY29kZSBiZWxvdykuXHJcbiAgICAvLyBCdXQgYWxsIHRoZXNlIHllYXJzLCB3ZSB3ZXJlIGNhbGxpbmcgWG1sUGFyc2VyLmdldFRva2VuKCkgd2hpY2ggd2FzIGFjdHVhbGx5XHJcbiAgICAvLyB1c2luZyBTdHJpbmcuU3BsaXQoKS4gQW5kIHdlIGRpZG4ndCBmYWNlIGFueSBwcm9ibGVtLlxyXG4gICAgLy8gU28sIGl0IHNlZW1zIHRoYXQgd2UgZG8gbm90IGhhdmUgcHJvYmxlbSBpbiB1c2luZyBTdHJpbmcuU3BsaXQoKS5cclxuICAgIC8vIEJ1dCBub3csIHdlIGNhbiBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBoZXJlLi4uXHJcbiAgICAvLyBYbWxQYXJzZXIuZ2V0VG9rZW5zKCkgd2FzIGdldHRpbmcgYSBTdHJpbmdbXSB1c2luZyBTdHJpbmcuU3BsaXQoKS5cclxuICAgIC8vIEl0IHdhcyB0aGVuIGNyZWF0aW5nIGEgTGlzdDxTdHJpbmc+IGZyb20gdGhpcyBTdHJpbmdbXSBhbmQgd2FzIHJldHVybmluZyBpdCB0b1xyXG4gICAgLy8gdG9rZW5pemUoKS5cclxuICAgIC8vIHRva2VuaXplKCkgd2FzIGFnYWluIGNvbnZlcnRpbmcgdGhpcyBMaXN0PFN0cmluZz4gYmFjayB0byBTdHJpbmdbXS5cclxuICAgIC8vIFNvIHdoeSBub3QgY2FsbCBTdHJpbmcuU3BsaXQoKSBkaXJlY3RseT9cclxuICAgIHJldHVybiBzb3VyY2Uuc3BsaXQoZGVsaW0pO1xyXG4gICAgLypcclxuU3RyaW5nIFtdIHRva2VucyA9IG51bGw7XHJcblxyXG5jaGFyIFtdIGRlbGltQXJyeSA9IGRlbGltLnRvQ2hhckFycmF5KCk7XHJcblxyXG4vL3NpbmNlIGphdmEgZGlzY2FyZHMgZGVsaW1pdGVycyBmcm9tIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzdHJpbmcgYW5kIGMjIGRvZXMgbm90XHJcbi8vd2UgbmVlZCB0byByZW1vdmUgdGhlbSBtYW51YWxseVxyXG4vLyAgICAgICBzb3VyY2UgPSBzb3VyY2UuVHJpbUVuZChkZWxpbUFycnkpO1xyXG4vLyAgICAgc291cmNlID0gc291cmNlLlRyaW1TdGFydChkZWxpbUFycnkpO1xyXG5zb3VyY2UgPSBzb3VyY2UudHJpbSgpO1xyXG5cclxuLy9ub3cgdGhhdCB3ZSBoYXZlIHJlbW92ZSBzdGFydGluZyBhbmQgZW5kaW5nIGRlbGltaXRlcnMgd2UgY2FuIHNwbGl0XHJcbnRva2VucyA9IHNvdXJjZS5TcGxpdChkZWxpbUFycnkpO1xyXG5cclxuLypcclxuKiBvbmx5IG9uZSBwcm9ibGVtOiBpZiB3ZSBoYXZlIHR3byBTdWJzZXF1ZW50IGRlbGltaXRlcnMgZm9yIGV4YW1wbGUgOlxyXG4qIHRoZSBkZWxpbWl0ZXIgaXMgJzsnIGFuZCB0aGUgc3RyaW5nIGlzOiBcImZpcnN0OztzZWNvbmQ7dGhpcmRcIlxyXG4qIHRoZW4gaW4gamF2YSBTdHJpbmcgdG9rZW5pemVyIHdpbGwgZ2l2ZSB1cyBvbmx5IDMgdG9rZW5zIDpmaXJzdCxzZWNvbmQgYW5kIHRoaXJkXHJcbiogd2hpbGUgaXMgYyMgc3BsaXQgd2V0aG9kIHdpbGwgcmV0dXJuIDQgdG9rZW5zOiBmaXJzdCxlbXB0eSBzdHJpbmcsc2Vjb25kIGFuZCB0aGlyZFxyXG4qIHdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoYXRcclxuKi9cclxuICAgIC8qXHJcbiAgICBMaXN0IHJlcyAgPSBuZXcgTGlzdCgpO1xyXG4gICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKVxyXG4gICAge1xyXG4gICAgaWYgKHRva2Vuc1tpXSAhPSBcIlwiIClcclxuICAgIHJlcy5hZGRJdGVtKHRva2Vuc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChTdHJpbmcgW10pKHJlcy5nZXRBbGxJdGVtcyAoU3RyaW5nLmNsYXNzKSk7Ki9cclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSBmcm9tIHN0cmluZyB0byBoZXhhIGR1bXAgY2hhciBieSBjaGFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ1wiPnRvIHRyYW5zbGF0ZSBpdCB0byB0aGUgYnl0ZSBzdHJlYW08L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWluTGVuZ3RoXCI+dGhlIG1pbmltYWwgbGVuZ3RoIG9mIGhleGEgZGlnaXRzIGZvciBlYWNoIGNoYXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGJ5dGUgc3RyZWFtIGluIGZvcm0gb2Ygc3RyaW5nPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBzdHJpbmdUb0hleGFEdW1wKHN0cjogc3RyaW5nLCBtaW5MZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGggKiBtaW5MZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaW5keDogbnVtYmVyID0gMDsgaW5keCA8IHN0ci5sZW5ndGg7IGluZHggPSBpbmR4ICsgMSkge1xyXG4gICAgICBsZXQgY3VyckludDogbnVtYmVyID0gc3RyLmNoYXJDb2RlQXQoaW5keCk7XHJcbiAgICAgIGxldCBoZXhTdHI6IHN0cmluZyA9IGN1cnJJbnQudG9TdHJpbmcoMTYpO1xyXG4gICAgICB3aGlsZSAoaGV4U3RyLmxlbmd0aCA8IG1pbkxlbmd0aCkge1xyXG4gICAgICAgIGhleFN0ciA9IFwiMFwiICsgaGV4U3RyO1xyXG4gICAgICB9XHJcbiAgICAgIHN0cmluZ0J1aWxkZXIuQXBwZW5kKGhleFN0cik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2VhcmNoQW5kUmVwbGFjZShzdHI6IHN0cmluZywgZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBzdHJpbmdbXSwgdG86IHN0cmluZ1tdKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlKHN0cjogc3RyaW5nLCBmcm9tOiBhbnksIHRvOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHN0ciA9PT0gbnVsbCB8fCBzdHIuY29uc3RydWN0b3IgPT09IFN0cmluZykgJiYgKGZyb20gPT09IG51bGwgfHwgZnJvbS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAodG8gPT09IG51bGwgfHwgdG8uY29uc3RydWN0b3IgPT09IFN0cmluZykpIHtcclxuICAgICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZV8wKHN0ciwgZnJvbSwgdG8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZV8xKHN0ciwgZnJvbSwgdG8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXBsYWNlIGV2ZXJ5IGFwcGVhcmFuY2Ugb2YgJ2Zyb20nIGluICdzdHInIHdpdGggJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgd29ya2luZyBiYXNlIHNvdXJjZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmcm9tXCI+dGhlIHN0cmluZyB0byByZXBsYWNlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj50aGUgc3RyaW5nIHVzZSBpbnN0ZWFkICdmcm9tJyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgU3RyaW5nIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlXzAoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGFzdFN1YlN0cjogbnVtYmVyID0gMDtcclxuICAgIGxldCBzdGFydFN1YlN0cjogbnVtYmVyO1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG5cclxuICAgIGlmICgoc3RhcnRTdWJTdHIgPSBzdHIuaW5kZXhPZihmcm9tKSkgPT09IC0xKSB7XHJcbiAgICAgIHJlc3VsdCA9IHN0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgc3RyaW5nQnVpbGRlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICB3aGlsZSAoc3RhcnRTdWJTdHIgIT09IC0xKSB7XHJcbiAgICAgICAgc3RyaW5nQnVpbGRlci5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyLCBzdGFydFN1YlN0ciAtIGxhc3RTdWJTdHIpICsgdG8pO1xyXG4gICAgICAgIHN0YXJ0U3ViU3RyID0gc3RhcnRTdWJTdHIgKyBmcm9tLmxlbmd0aDtcclxuICAgICAgICBsYXN0U3ViU3RyID0gc3RhcnRTdWJTdHI7XHJcbiAgICAgICAgc3RhcnRTdWJTdHIgPSBzdHIuaW5kZXhPZihmcm9tLCBsYXN0U3ViU3RyKTtcclxuICAgICAgfVxyXG4gICAgICBzdHJpbmdCdWlsZGVyLkFwcGVuZChzdHIuc3Vic3RyKGxhc3RTdWJTdHIpKTtcclxuICAgICAgcmVzdWx0ID0gc3RyaW5nQnVpbGRlci5Ub1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVwbGFjZSBldmVyeSBhcHBlYXJhbmNlIG9mIHN0cmluZ3Mgb2YgJ2Zyb20nIGluICdzdHInIHdpdGggdGhlIGFjY29yZGluZyBzdHJpbmcgaW4gJ3RvJzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJcIj50aGUgd29ya2luZyBiYXNlIHNvdXJjZSBzdHJpbmcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmcm9tXCI+dGhlIHN0cmluZyB0byByZXBsYWNlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9cIj50aGUgc3RyaW5nIHVzZSBpbnN0ZWFkICdmcm9tJyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbW9kaWZpZWQgU3RyaW5nIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBzZWFyY2hBbmRSZXBsYWNlXzEoc3RyOiBzdHJpbmcsIGZyb206IHN0cmluZ1tdLCB0bzogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gICAgbGV0IGxhc3RTdWJTdHI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2FySW5kZXg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZnJvbUNvcHk6IHN0cmluZ1tdID0gZnJvbS5zbGljZSgpO1xyXG4gICAgbGV0IHN0YXJ0U3ViU3RyOiBudW1iZXI7XHJcbiAgICBsZXQgU0FSaW5kZXg6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0oMCk7XHJcbiAgICBzdGFydFN1YlN0ciA9IFN0clV0aWwuaW5kZXhPZihzdHIsIGZyb21Db3B5LCBsYXN0U3ViU3RyLCBTQVJpbmRleCk7XHJcbiAgICBzYXJJbmRleCA9IFNBUmluZGV4LnZhbHVlO1xyXG4gICAgaWYgKHN0YXJ0U3ViU3RyID09PSAtMSlcclxuICAgICAgcmV0dXJuIHN0cjtcclxuXHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBsZXQgdG1wQnVmOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoc3RyLmxlbmd0aCk7XHJcbiAgICB3aGlsZSAoc3RhcnRTdWJTdHIgIT09IC0xKSB7XHJcbiAgICAgIHRtcEJ1Zi5BcHBlbmQoc3RyLnN1YnN0cihsYXN0U3ViU3RyLCBzdGFydFN1YlN0ciAtIGxhc3RTdWJTdHIpICsgdG9bc2FySW5kZXhdKTtcclxuICAgICAgc3RhcnRTdWJTdHIgKz0gZnJvbUNvcHlbc2FySW5kZXhdLmxlbmd0aDtcclxuICAgICAgbGFzdFN1YlN0ciA9IHN0YXJ0U3ViU3RyO1xyXG4gICAgICBzdGFydFN1YlN0ciA9IFN0clV0aWwuaW5kZXhPZihzdHIsIGZyb21Db3B5LCBsYXN0U3ViU3RyLCBTQVJpbmRleCk7XHJcbiAgICAgIHNhckluZGV4ID0gU0FSaW5kZXgudmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB0bXBCdWYuQXBwZW5kKHN0ci5zdWJzdHIobGFzdFN1YlN0cikpO1xyXG4gICAgcmVzdWx0ID0gdG1wQnVmLlRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdGhpcyBmdW5jdGlvbnMgaXMgZm9yIHVzZSBieSB0aGUgc2VhcmNoQW5kUmVwbGFjZSgpIGZ1bmN0aW9uIC1cclxuICAvLy8gc2VhcmNoZXMgdGhlIG9mZnNldCBvZiB0aGUgc3RyaW5ncyBmcm9tIHRoZSBhcnJheSBpbiB0aGUgZ2l2ZW4gc3RyaW5nXHJcbiAgLy8vIGFuZCByZXR1cm5zIHRoZSBtaW5pbXVtIG9mZnNldCBmb3VuZCBhbmQgc2V0cyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHN0cmluZ1xyXG4gIC8vLyB0byBTQVJpbmRleFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyXCI+dGhlIHN0cmluZyB0byBzZWFyY2ggaW4gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHJpbmdzXCI+YW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBzZWFyY2ggZm9yIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2Zmc2V0XCI+d2hlcmUgdG8gc3RhcnQgdGhlIHNlYXJjaCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIGluZGV4T2Yoc3RyOiBzdHJpbmcsIHN0cmluZ3M6IHN0cmluZ1tdLCBvZmZzZXQ6IG51bWJlciwgU0FSaW5kZXg6IFJlZlBhcmFtPG51bWJlcj4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbk9mZnNldDogbnVtYmVyID0gLTE7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICBpZiAoIShzdHJpbmdzW2ldID09PSBudWxsKSkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQ6IG51bWJlciA9IHN0ci5pbmRleE9mKHN0cmluZ3NbaV0sIG9mZnNldCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICBzdHJpbmdzW2ldID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0T2Zmc2V0IDwgbWluT2Zmc2V0IHx8IG1pbk9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgbWluT2Zmc2V0ID0gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBTQVJpbmRleC52YWx1ZSA9IGk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyO1xyXG4gICAgaWYgKG1pbk9mZnNldCA+IC0xKSB7XHJcbiAgICAgIHJlc3VsdCA9IG1pbk9mZnNldDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBTQVJpbmRleC52YWx1ZSA9IC0xO1xyXG4gICAgICByZXN1bHQgPSAtMTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlcGxhY2UgdG9rZW5zIGluIHVzZXIgc3RyaW5nIGJ5IHZlY3RvciB2YWx1ZXMgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVzZXJTdHJpbmdcIj4tIHVzZXIgYnVmZmVyIGxpa2UgXCJVc2VyICVkLCAlZCBzdHJpbmdcIlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRva2VuXCI+LSB0b2tlbiB1c2VkIGluIHVzZXIgc3RyaW5nIC0gaS5lLiBcIiVkXCJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvY2N1cnJlbmNlXCI+LSBudW1iZXIgb2YgdG9rZW4gd2hlcmUgcmVwbGFjZSB3aWxsIHRha2UgcGFydCAoMSBmb3IgZmlyc3Qgb2NjdXJyZW5jZSlcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPi0gdmFsdWUgdG8gYmUgaW5zZXJ0ZWQgaW5zdGVkIG9mIHRva2VuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgc3RhdGljIHJlcGxhY2VTdHJpbmdUb2tlbnModXNlclN0cmluZzogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvY2N1cnJlbmNlOiBudW1iZXIsIHZhbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB0b2tlbkxlbjogbnVtYmVyID0gdG9rZW4ubGVuZ3RoO1xyXG4gICAgbGV0IGN1cnJQb3NpdGlvbjogbnVtYmVyID0gMDtcclxuICAgIGxldCBuZXdTdHJpbmc6IHN0cmluZyA9IHVzZXJTdHJpbmc7XHJcblxyXG4gICAgaWYgKHZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgbnVtMjogbnVtYmVyID0gMDtcclxuICAgICAgd2hpbGUgKG51bTIgPCBvY2N1cnJlbmNlICYmIGN1cnJQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICBjdXJyUG9zaXRpb24gPSB1c2VyU3RyaW5nLmluZGV4T2YodG9rZW4sIGN1cnJQb3NpdGlvbiArICgobnVtMiA9PT0gMCkgPyAwIDogdG9rZW5MZW4pKTtcclxuICAgICAgICBudW0yID0gbnVtMiArIDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjdXJyUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgbmV3U3RyaW5nID0gdXNlclN0cmluZy5zdWJzdHIoMCwgY3VyclBvc2l0aW9uKSArIHZhbCArIHVzZXJTdHJpbmcuc3Vic3RyKGN1cnJQb3NpdGlvbiArIHRva2VuTGVuLCB1c2VyU3RyaW5nLmxlbmd0aCAtIChjdXJyUG9zaXRpb24gKyB0b2tlbkxlbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3U3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHN0cmluZztcclxuICBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vucyhzb3VyY2U6IHN0cmluZywgdHlwZTogbnVtYmVyKTogc3RyaW5nO1xyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zKHNvdXJjZTogTGlzdDxzdHJpbmc+LCB0eXBlOiBudW1iZXIpOiBzdHJpbmc7XHJcbiAgc3RhdGljIG1ha2VQcmludGFibGVUb2tlbnMoc291cmNlOiBhbnksIHR5cGU6IGFueSk6IHN0cmluZyB8IHZvaWR7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSAmJiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnNfMChzb3VyY2UsIHR5cGUpO1xyXG4gICAgfVxyXG4gICAgU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zXzEoc291cmNlLCB0eXBlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb252ZXJ0cyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSB0b2tlbiB0byBhIHByaW50YWJsZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+YSB0b2tlbiA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPnR5cGUgb2YgY29udmVyc2lvbjogU1RSXzJfSFRNTCwgU0VRXzJfSFRNTCwgSFRNTF8yX1NFUSwgSFRNTF8yX1NUUiwgU0VRXzJfU1RSIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0b2tlbiB3aXRoIGNvbnZlcnRlZCBzcGVjaWFsIGNoYXJhY3RlcnMgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlVG9rZW5zXzAoc291cmNlOiBzdHJpbmcsIHR5cGU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZXNjU3RyOiBzdHJpbmdbXSA9IFtcclxuICAgICAgXCJcXFxcXCIsIFwiLVwiLCBcIixcIlxyXG4gICAgXTtcclxuICAgIGxldCBlc2NTZXE6IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxcXFxcXCIsIFwiXFxcXC1cIiwgXCJcXFxcLFwiXHJcbiAgICBdO1xyXG4gICAgbGV0IGVzY0h0bTogc3RyaW5nW10gPSBbXHJcbiAgICAgIEhUTUxfQkFDS1NMQVNILCBIVE1MX0hZUEhFTiwgSFRNTF9DT01NQVxyXG4gICAgXTtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFNUUl8yX0hUTUw6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjU3RyLCBlc2NIdG0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNFUV8yX0hUTUw6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjU2VxLCBlc2NIdG0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEhUTUxfMl9TRVE6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjSHRtLCBlc2NTZXEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEhUTUxfMl9TVFI6XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5zZWFyY2hBbmRSZXBsYWNlKHNvdXJjZSwgZXNjSHRtLCBlc2NTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFNFUV8yX1NUUjpcclxuICAgICAgICByZXN1bHQgPSBTdHJVdGlsLnNlYXJjaEFuZFJlcGxhY2Uoc291cmNlLCBlc2NTZXEsIGVzY1N0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmVzdWx0ID0gc291cmNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29udmVydHMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgdG9rZW5zIGNvbGxlY3Rpb24gdG8gYSBwcmludGFibGUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPnZlY3RvciBvZiBzdHJpbmdzIGJlZm9yZSB0b2tlbmFpemVyIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+dHlwZSBvZiBjb252ZXJzaW9uOiBTVFJfMl9IVE1MLCBTRVFfMl9IVE1MLCBIVE1MXzJfU0VRLCBIVE1MXzJfU1RSIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbWFrZVByaW50YWJsZVRva2Vuc18xKHNvdXJjZTogTGlzdDxzdHJpbmc+LCB0eXBlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc291cmNlLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGN1cnJFbG06IHN0cmluZyA9IHNvdXJjZS5nZXRfSXRlbShpKTtcclxuICAgICAgICBzb3VyY2Uuc2V0X0l0ZW0oaSwgU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zXzAoY3VyckVsbSwgdHlwZSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hhbmdlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBsaWtlIFwibmV3IGxpbmVcIiBhbmQgXCJsaW5lIGZlZWRcIiB0byB0aGVpclxyXG4gIC8vLyAgIHByaW50YWJsZSByZXByZXNlbnRhdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5pcyB0aGUgc3RyaW5nIHdpdGggbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbmV3IHN0cmluZyB3aGVyZSBhbGwgdGhlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIDwvcmV0dXJucz5cclxuICBzdGF0aWMgbWFrZVByaW50YWJsZShzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxuXCIsIFwiXFxyXCIsIFwiJ1wiLCBcIlxcXFxcIiwgXCJcXFwiXCIsIFwiXFwwXCJcclxuICAgIF07XHJcbiAgICBsZXQgdG86IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxuXCIsIFwiXFxcXHJcIiwgXCJcXFxcJ1wiLCBcIlxcXFxcXFxcXCIsIFwiXFxcXFxcXCJcIiwgXCJcXFxcMFwiXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGFuZ2Ugbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGxpa2UgXCJuZXcgbGluZVwiIGFuZCBcImxpbmUgZmVlZFwiIHRvIHRoZWlyXHJcbiAgLy8vICAgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uIChzaW1wbGlmaWVkIHZlcnNpb24gZm9yIHJhbmdlIGVycm9yIG1lc3NhZ2UpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmlzIHRoZSBzdHJpbmcgd2l0aCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBuZXcgc3RyaW5nIHdoZXJlIGFsbCB0aGUgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBtYWtlUHJpbnRhYmxlMihzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZnJvbTogc3RyaW5nW10gPSBbXHJcbiAgICAgIFwiXFxuXCIsIFwiXFxyXCIsIFwiXFwwXCJcclxuICAgIF07XHJcbiAgICBsZXQgdG86IHN0cmluZ1tdID0gW1xyXG4gICAgICBcIlxcXFxuXCIsIFwiXFxcXHJcIiwgXCJcXFxcMFwiXHJcbiAgICBdO1xyXG4gICAgcmV0dXJuIFN0clV0aWwuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgWnN0cmluZ01ha2Uoczogc3RyaW5nLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZW4gPSBTdHJVdGlsLm1lbV90cmltKHMsIGxlbik7XHJcbiAgICByZXR1cm4gcy5zdWJzdHIoMCwgbGVuKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHVibGljKVxyXG4gIC8vLyByZXR1cm5zIHBsYWluIHRleHQgZnJvbSBydGYgdGV4dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicnRmVGV4dFwiPnJlZmVyIHRvIHRoZSBzdW1tYXJ5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+cmVmZXIgdG8gdGhlIHN1bW1hcnk8L3JldHVybnM+XHJcbiAgc3RhdGljIEdldFBsYWluVGV4dGZyb21SdGYocnRmVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChSdGYuaXNSdGYocnRmVGV4dCkpIHtcclxuICAgICAgbGV0IHJ0ZjogUnRmID0gbmV3IFJ0ZigpO1xyXG4gICAgICBsZXQgb3V0cHV0VHh0OiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoXCJcIik7XHJcbiAgICAgIHJ0Zi50b1R4dChydGZUZXh0LCBvdXRwdXRUeHQpO1xyXG4gICAgICBydGZUZXh0ID0gb3V0cHV0VHh0LlRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcnRmVGV4dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdHJpbmcgYXJyYXlzIHN0cjEgJiBzdHIyIGFyZSBlcXVhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyMVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RyMlwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgU3RyaW5nc0FycmF5c0VxdWFsKHN0cjE6IHN0cmluZ1tdLCBzdHIyOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcclxuICAgIGlmIChzdHIxID09PSBudWxsICYmIHN0cjIgPT09IG51bGwpIHtcclxuICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoc3RyMSA9PT0gbnVsbCB8fCBzdHIyID09PSBudWxsKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHN0cjEubGVuZ3RoICE9PSBzdHIyLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZm9yIChsZXQgaW5kZXg6IG51bWJlciA9IDA7IGluZGV4IDwgPG51bWJlcj5zdHIxLmxlbmd0aDsgaW5kZXggPSBpbmRleCArIDEpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIxW2luZGV4XSAhPT0gc3RyMltpbmRleF0pKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoZSBjb2RlIGlzIGNvcGllZCBmcm9tIHRza19vcGVuX2JuZF93aWxkIGFuZCBTZWFyY2hBbmRSZXBsYWNlV2lsZENoYXJzXHJcbiAgLy8vIFRoZSByZWZhY3RvcmluZyBpcyBub3QgcGVyZm9ybWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxyXG4gIC8vLyBUaGUgY29kZSByZXBsYWNlcyBzcGVjaWFsIGNoYXJhY2h0ZXJzIDoqID8gd2l0aCByZWNpZXZlZCBmaWxsZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc3RhdGljIFNlYXJjaEFuZFJlcGxhY2VXaWxkQ2hhcnMoYnVmOiBzdHJpbmcsIGxlbjogbnVtYmVyLCBmaWxsZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBidWYgPSBOU3RyaW5nLlBhZFJpZ2h0KGJ1ZiwgbGVuKTtcclxuXHJcbiAgICBsZXQgZXNjQ2hhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHRtcEJ1ZjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGxlbik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpID0gaSArIDEpIHtcclxuICAgICAgc3dpdGNoIChidWZbaV0pIHtcclxuICAgICAgICBjYXNlICgnXFxcXCcpOiB7XHJcbiAgICAgICAgICBsZXQgaXNOZXh0Q2hhcldpbGQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIC8vSWYgbmV4dCBjaGFyIGlzIG5vdCB3aWxkICwgdGhlbiBjb3B5ICdcXCcsIGlmIHRoaXMgaXMgZmlyc3QgY2hhci5cclxuICAgICAgICAgIGlmICgoaSArIDEgPCBsZW4pICYmIChidWZbaSArIDFdICE9ICcqJyAmJiBidWZbaSArIDFdICE9ICdcXFxcJykpXHJcbiAgICAgICAgICAgIGlzTmV4dENoYXJXaWxkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZXNjQ2hhciB8fCAhaXNOZXh0Q2hhcldpbGQpXHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoYnVmW2ldKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSAhZXNjQ2hhcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICgnKicpOlxyXG4gICAgICAgICAgaWYgKGVzY0NoYXIpXHJcbiAgICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoYnVmW2ldKTtcclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bXBCdWYuQXBwZW5kKGZpbGxlciwgbGVuIC0gdG1wQnVmLkxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIHRtcEJ1Zi5BcHBlbmQoZmlsbGVyKTtcclxuICAgICAgICAgIGVzY0NoYXIgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0bXBCdWYuQXBwZW5kKGJ1ZltpXSk7XHJcbiAgICAgICAgICBlc2NDaGFyID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0bXBCdWYuVG9TdHJpbmcoKTtcclxuICAgIHJldHVybiBOU3RyaW5nLlRyaW1FbmQoTlN0cmluZy5UcmltRW5kKHRleHQsIFsnXFwwJ10pKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZGVsaW1pdGVyIGZyb20gdGhlIGVycm9yIHN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic291cmNlXCI+c3RyaW5nIHdpdGggZGVsaW1pdGVyIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgZm9yIGNvbnNvbGUgZXJyb3IgPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXRDb25zb2xlRXJvclN0cmluZyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgY29uc29sZUVyb3JTdHJpbmc6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzb3VyY2UpKVxyXG4gICAgICBjb25zb2xlRXJvclN0cmluZyA9IHRoaXMuc2VhcmNoQW5kUmVwbGFjZShzb3VyY2UsIFRBU0tfUEFUSF9ERUxJTUlURVIsIFwiXCIpO1xyXG5cclxuICAgIHJldHVybiBjb25zb2xlRXJvclN0cmluZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlIHRoZSB0YXNrIHBhdGggZnJvbSB0aGUgZXJyb3Igc3RyaW5nLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzb3VyY2VcIj5zdHJpbmcgd2l0aCBkZWxpbWl0ZXIgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyBmb3IgY29uc29sZSBlcnJvciA8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldE1zZ0JveEVyb3JTdHJpbmcoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRva2Vuczogc3RyaW5nIFtdO1xyXG4gICAgbGV0IG1zZ0JveEVyb3JTdHJpbmc6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuXHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHNvdXJjZSkpe1xyXG4gICAgICB0b2tlbnMgPSB0aGlzLnRva2VuaXplKHNvdXJjZSwgVEFTS19QQVRIX0RFTElNSVRFUik7XHJcblxyXG4gICAgICBmb3IgKGxldCBpOm51bWJlciA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgIHtcclxuICAgICAgICBtc2dCb3hFcm9yU3RyaW5nLkFwcGVuZCh0b2tlbnNbaV0pO1xyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgcmV0dXJuIG1zZ0JveEVyb3JTdHJpbmcudG9TdHJpbmcoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export class SyncExecutionHelper {
|
|
2
|
-
static _instance = null;
|
|
3
|
-
static get Instance() {
|
|
4
|
-
if (SyncExecutionHelper._instance === null)
|
|
5
|
-
SyncExecutionHelper._instance = new SyncExecutionHelper();
|
|
6
|
-
return SyncExecutionHelper._instance;
|
|
7
|
-
}
|
|
8
|
-
resolver = null;
|
|
9
|
-
Wait() {
|
|
10
|
-
return new Promise((resolve) => {
|
|
11
|
-
this.resolver = resolve;
|
|
12
|
-
}).then();
|
|
13
|
-
}
|
|
14
|
-
Pulse() {
|
|
15
|
-
let resolver = this.resolver;
|
|
16
|
-
if (resolver != null) {
|
|
17
|
-
resolver();
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3luY0V4ZWN1dGlvbkhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3V0aWxzL3NyYy9TeW5jRXhlY3V0aW9uSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyxtQkFBbUI7SUFFdEIsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFLaEMsTUFBTSxLQUFLLFFBQVE7UUFDakIsSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEtBQUssSUFBSTtZQUN4QyxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1FBRTVELE9BQU8sbUJBQW1CLENBQUMsU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFHTyxRQUFRLEdBQVEsSUFBSSxDQUFDO0lBS3RCLElBQUk7UUFFVCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDWixDQUFDO0lBS00sS0FBSztRQUNWLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDN0IsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBRXBCLFFBQVEsRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxzdW1tYXJ5PlxyXG4vLy8gSGVscGVyIGNsYXNzIGZvciBzeW5jaHJvbml6ZWQgZXhlY3V0aW9uLlxyXG4vLy8gSXQgd29ya3MgYnkgY3JlYXRpbmcgYSBwcm9taXNlIGFuZCB0aGVuIHdhaXRpbmcgZm9yIHRoZSBwcm9taXNlIHRvIGJlIGNvbXBsZXRlZFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgU3luY0V4ZWN1dGlvbkhlbHBlciB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZSA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IGluc3RhbmNlIG9mIFN5bmNFeGVjdXRpb25IZWxwZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogU3luY0V4ZWN1dGlvbkhlbHBlciB7XHJcbiAgICBpZiAoU3luY0V4ZWN1dGlvbkhlbHBlci5faW5zdGFuY2UgPT09IG51bGwpXHJcbiAgICAgIFN5bmNFeGVjdXRpb25IZWxwZXIuX2luc3RhbmNlID0gbmV3IFN5bmNFeGVjdXRpb25IZWxwZXIoKTtcclxuXHJcbiAgICByZXR1cm4gU3luY0V4ZWN1dGlvbkhlbHBlci5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICAvLyByZXNvbHZlciBpcyBjYWxsZXIgd2hlbiBwcm9taXNlIGlzIGZ1bGxmaWxsZWRcclxuICBwcml2YXRlIHJlc29sdmVyOiBhbnkgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRvIHdhaXQsIGNyZWF0ZSBhIHByb21pc2UgYW5kIGFkZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIFdhaXQoKTogYW55IHtcclxuICAgIC8vIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiU3luY0V4ZWN1dGlvbkhlbHBlci5XYWl0KClcIik7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmU7XHJcbiAgICB9KS50aGVuKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRvIHJlc3VtZSBjYWxsIHRoZSByZXNvbHZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIFB1bHNlKCkge1xyXG4gICAgbGV0IHJlc29sdmVyID0gdGhpcy5yZXNvbHZlcjtcclxuICAgIGlmIChyZXNvbHZlciAhPSBudWxsKSB7XHJcbiAgICAgIC8vIExvZ2dlci5JbnN0YW5jZS5Xcml0ZURldlRvTG9nKFwiU3luY0V4ZWN1dGlvbkhlbHBlci5QdWxzZSgpXCIpO1xyXG4gICAgICByZXNvbHZlcigpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|