nmce-func 0.0.6 → 0.0.7

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.
@@ -0,0 +1,67 @@
1
+ import { DateFunc } from './dateFunc';
2
+ /**
3
+ * Basic JSON functions
4
+ */
5
+ export class JsonFunc {
6
+ /**
7
+ *
8
+ * @param array Group by a property of array element.
9
+ * @param propertyName
10
+ * @returns
11
+ */
12
+ static groupBy(array, propertyName) {
13
+ return array.reduce(function (acc, obj) {
14
+ const key = obj[propertyName];
15
+ if (!acc[key]) {
16
+ acc[key] = [];
17
+ }
18
+ acc[key].push(obj);
19
+ return acc;
20
+ }, {});
21
+ }
22
+ /**
23
+ * Group by a date property. The key is always of string type and representing milliseconds.
24
+ * The client should convert the string to number.
25
+ * Angular date pipe could actually consume such string without explicitly converting to number.
26
+ * @param array
27
+ * @param propertyName
28
+ */
29
+ static groupByDate(array, propertyName) {
30
+ return array.reduce(function (acc, obj) {
31
+ const key = DateFunc.dateTimeUtcToLocalDateNumber(obj[propertyName]);
32
+ if (!acc[key]) {
33
+ acc[key] = [];
34
+ }
35
+ acc[key].push(obj);
36
+ return acc;
37
+ }, {});
38
+ }
39
+ /**
40
+ * Remove null or empty fields including those in nested objects.
41
+ * This is useful for reducing payload of AJAX serialization.
42
+ * @param obj
43
+ */
44
+ static removeNullOrEmptyFields(obj) {
45
+ for (const f in obj) {
46
+ let p = obj[f];
47
+ if (p === null || p === '') {
48
+ delete obj[f];
49
+ }
50
+ else if (typeof p === 'object' && p !== null) {
51
+ this.removeNullOrEmptyFields(p);
52
+ }
53
+ }
54
+ }
55
+ /**
56
+ *
57
+ * @param obj Remove null fields of object at only the 1st level.
58
+ */
59
+ static removeNullFields(obj) {
60
+ for (const f in obj) {
61
+ if (obj[f] === null) {
62
+ delete obj[f];
63
+ }
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL2pzb25GdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTtJQUNwQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUksS0FBZSxFQUFFLFlBQW9CO1FBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFTLEdBQVEsRUFBRSxHQUFRO1lBQzlDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDZDtZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsT0FBTyxHQUFHLENBQUM7UUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxLQUFlLEVBQUUsWUFBb0I7UUFDMUQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVMsR0FBUSxFQUFFLEdBQVE7WUFDOUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNkO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUNaLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQVE7UUFDdEMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2Q7aUJBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Q7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQVE7UUFDL0IsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUU7WUFDcEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNkO1NBQ0Q7SUFDRixDQUFDO0NBRUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlRnVuYyB9IGZyb20gJy4vZGF0ZUZ1bmMnO1xyXG5cclxuLyoqXHJcbiAqIEJhc2ljIEpTT04gZnVuY3Rpb25zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSnNvbkZ1bmMge1xyXG5cdC8qKlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBhcnJheSBHcm91cCBieSBhIHByb3BlcnR5IG9mIGFycmF5IGVsZW1lbnQuXHJcblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBcclxuXHQgKiBAcmV0dXJucyBcclxuXHQgKi9cclxuXHRzdGF0aWMgZ3JvdXBCeTxUPihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gYXJyYXkucmVkdWNlKGZ1bmN0aW9uKGFjYzogYW55LCBvYmo6IGFueSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBvYmpbcHJvcGVydHlOYW1lXTtcclxuXHRcdFx0aWYgKCFhY2Nba2V5XSkge1xyXG5cdFx0XHRcdGFjY1trZXldID0gW107XHJcblx0XHRcdH1cclxuXHRcdFx0YWNjW2tleV0ucHVzaChvYmopO1xyXG5cdFx0XHRyZXR1cm4gYWNjO1xyXG5cdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR3JvdXAgYnkgYSBkYXRlIHByb3BlcnR5LiBUaGUga2V5IGlzIGFsd2F5cyBvZiBzdHJpbmcgdHlwZSBhbmQgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcy4gXHJcblx0ICogVGhlIGNsaWVudCBzaG91bGQgY29udmVydCB0aGUgc3RyaW5nIHRvIG51bWJlci5cclxuXHQgKiBBbmd1bGFyIGRhdGUgcGlwZSBjb3VsZCBhY3R1YWxseSBjb25zdW1lIHN1Y2ggc3RyaW5nIHdpdGhvdXQgZXhwbGljaXRseSBjb252ZXJ0aW5nIHRvIG51bWJlci5cclxuXHQgKiBAcGFyYW0gYXJyYXlcclxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lXHJcblx0ICovXHJcblx0c3RhdGljIGdyb3VwQnlEYXRlPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24oYWNjOiBhbnksIG9iajogYW55KSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IERhdGVGdW5jLmRhdGVUaW1lVXRjVG9Mb2NhbERhdGVOdW1iZXIob2JqW3Byb3BlcnR5TmFtZV0pO1xyXG5cdFx0XHRpZiAoIWFjY1trZXldKSB7XHJcblx0XHRcdFx0YWNjW2tleV0gPSBbXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRhY2Nba2V5XS5wdXNoKG9iaik7XHJcblx0XHRcdHJldHVybiBhY2M7XHJcblx0XHR9LCB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgbnVsbCBvciBlbXB0eSBmaWVsZHMgaW5jbHVkaW5nIHRob3NlIGluIG5lc3RlZCBvYmplY3RzLlxyXG5cdCAqIFRoaXMgaXMgdXNlZnVsIGZvciByZWR1Y2luZyBwYXlsb2FkIG9mIEFKQVggc2VyaWFsaXphdGlvbi5cclxuXHQgKiBAcGFyYW0gb2JqIFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVOdWxsT3JFbXB0eUZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRsZXQgcCA9IG9ialtmXTtcclxuXHRcdFx0aWYgKHAgPT09IG51bGwgfHwgcCA9PT0gJycpIHtcclxuXHRcdFx0XHRkZWxldGUgb2JqW2ZdO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5yZW1vdmVOdWxsT3JFbXB0eUZpZWxkcyhwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG9iaiBSZW1vdmUgbnVsbCBmaWVsZHMgb2Ygb2JqZWN0IGF0IG9ubHkgdGhlIDFzdCBsZXZlbC5cclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlTnVsbEZpZWxkcyhvYmo6IGFueSkge1xyXG5cdFx0Zm9yIChjb25zdCBmIGluIG9iaikge1xyXG5cdFx0XHRpZiAob2JqW2ZdID09PSBudWxsKSB7XHJcblx0XHRcdFx0ZGVsZXRlIG9ialtmXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,200 @@
1
+ /**
2
+ * String functions specific to Australia
3
+ */
4
+ export class StringAusFunc {
5
+ /**
6
+ * Validate medicare number
7
+ * @param n
8
+ * @returns validation error message
9
+ */
10
+ static validateMedicare(n) {
11
+ if (!n) {
12
+ return null;
13
+ }
14
+ if (n && n.length === 10) {
15
+ const matches = n.match(/^(\d{8})(\d)/);
16
+ if (!matches) {
17
+ return {
18
+ code: 2, message: 'Medicare number should be all digit.'
19
+ };
20
+ }
21
+ const base = matches[1];
22
+ const checkDigit = matches[2];
23
+ const weights = [1, 3, 7, 9, 1, 3, 7, 9];
24
+ let sum = 0;
25
+ for (let i = 0; i < weights.length; i++) {
26
+ sum += parseInt(base[i], 10) * weights[i];
27
+ }
28
+ //console.debug(`sum: ${sum} checkDigits: ${checkDigit}`);
29
+ const isValid = sum % 10 === parseInt(checkDigit, 10);
30
+ if (!isValid) {
31
+ return {
32
+ code: 3, message: 'Checksum is incorrect.'
33
+ };
34
+ }
35
+ }
36
+ else {
37
+ return { code: 1, message: 'Length should be 10.' };
38
+ }
39
+ return null;
40
+ }
41
+ static validateMedicareProviderNumber(providerNumber) {
42
+ if (!providerNumber) {
43
+ return null;
44
+ }
45
+ if (!/^[0-9]{6}[0-9ABCDEFGHJKLMNPQRTUVWXY][ABFHJKLTWXY]/.test(providerNumber)) {
46
+ return { code: 1, message: 'Not matching provider number format.' };
47
+ }
48
+ const practiceLocationValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y'];
49
+ const remainderValues = ['Y', 'X', 'W', 'T', 'L', 'K', 'J', 'H', 'F', 'B', 'A'];
50
+ const stemWeights = [3, 5, 8, 4, 2, 1];
51
+ const stemNumbers = providerNumber.substr(0, 6).split('').map((char) => parseInt(char));
52
+ const practiceLoc = practiceLocationValues.findIndex((e) => e === providerNumber[6]);
53
+ const checksum = providerNumber[7];
54
+ const zipped = stemWeights.map((x, i) => [x, stemNumbers[i]]);
55
+ const sumWeights = zipped.map((y) => y[1] * y[0]).reduce((total, num) => total + num);
56
+ const remainder = (sumWeights + practiceLoc * 6) % 11;
57
+ const result = remainderValues[remainder];
58
+ const valid = result === checksum;
59
+ if (!valid) {
60
+ return { code: 2, message: 'Checksum is incorrect.' };
61
+ }
62
+ return null;
63
+ }
64
+ static validateDVAFileNumber(dva) {
65
+ if (!dva) {
66
+ return null;
67
+ }
68
+ const states = ['N', 'V', 'Q', 'S', 'W', 'T'];
69
+ const warCodes = [' ', 'X', 'KM', 'SR', 'SS', 'SM', 'SWP', 'AGX', 'BW', 'GW', 'CGW',
70
+ 'P', 'PX', 'PAD', 'PAM', 'PCA', 'PCR', 'PCV', 'PMS', 'PSW', 'PWO', 'HKX', 'MAL',
71
+ 'CN', 'CNX', 'IV', 'NF', 'NG', 'RD', 'RDX', 'SA', 'SAX', 'A',
72
+ 'N', 'NX', 'NSW', 'NSM',
73
+ 'BUR', 'CNK', 'CNS', 'FIJ', 'GHA', 'HKS', 'IND', 'KYA', 'MAU', 'MLS', 'MTX', 'MWI', 'NK', 'NGR', 'NRD', 'NSS', 'PK']; //British Commonwealth Countries - SP Eligibility
74
+ if (!states.includes(dva.charAt(0))) {
75
+ return { code: 1, message: 'State incorrect.' };
76
+ }
77
+ const ns = dva.match(/\d+/);
78
+ if (!ns) {
79
+ return { code: 2, message: 'No number.' };
80
+ }
81
+ const n = ns[0];
82
+ const idxOfN = dva.indexOf(n);
83
+ const warCode = dva.substring(1, idxOfN);
84
+ if (!warCodes.includes(warCode)) {
85
+ return { code: 3, message: 'War code invalid.' };
86
+ }
87
+ const lenOfN = n.length;
88
+ const lenOfWc = warCode.length;
89
+ if (lenOfN + lenOfWc > 7) {
90
+ return { code: 4, message: 'File number length should not be greater 7.' };
91
+ }
92
+ return null;
93
+ }
94
+ static validateTFN(n) {
95
+ if (!n) {
96
+ return null;
97
+ }
98
+ const tfn = n.replace(/\s+/g, '').replace(/[-]/g, '');
99
+ const isNumber = /^[0-9]+$/.test(tfn);
100
+ if (!isNumber) {
101
+ return { code: 1, message: 'Invalid TFN, only numbers are allowed.' };
102
+ }
103
+ const length = tfn.length;
104
+ if (length !== 9) {
105
+ return {
106
+ code: 2, message: 'Invalid TFN, must have 9 digits.'
107
+ };
108
+ }
109
+ const digits = tfn.split('').map(d => parseInt(d));
110
+ const sum = (digits[0] * 1)
111
+ + (digits[1] * 4)
112
+ + (digits[2] * 3)
113
+ + (digits[3] * 7)
114
+ + (digits[4] * 5)
115
+ + (digits[5] * 8)
116
+ + (digits[6] * 6)
117
+ + (digits[7] * 9)
118
+ + (digits[8] * 10);
119
+ const remainder = sum % 11;
120
+ const valid = remainder === 0;
121
+ if (!valid) {
122
+ return { code: 3, message: 'Checksum is incorrect.' };
123
+ }
124
+ return null;
125
+ }
126
+ static addWeighted(p, v, i) {
127
+ return p + v * StringAusFunc.weights[i];
128
+ }
129
+ static addAcnWeighted(p, v, i) {
130
+ return p + v * StringAusFunc.acnWeights[i];
131
+ }
132
+ static generateLookup() {
133
+ const ns = [];
134
+ for (let i = 0; i < 10; ++i) {
135
+ ns[i * 19 % 89] = i;
136
+ }
137
+ return ns;
138
+ }
139
+ static validateABN(abn) {
140
+ if (!abn) {
141
+ return null;
142
+ }
143
+ const digits = abn.replace(/[^\d]/g, '').split('').map(Number);
144
+ if (digits.length !== 11) {
145
+ return { code: 1, message: 'Expect 11-digit.' };
146
+ }
147
+ digits[0] -= 1;
148
+ const sum = digits.reduce(StringAusFunc.addWeighted, 0);
149
+ if (sum % 89 === 0) {
150
+ return null;
151
+ }
152
+ digits[0] += 1;
153
+ let sum1 = sum - digits[10] * StringAusFunc.weights[10];
154
+ let digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
155
+ if (digit !== undefined) {
156
+ return {
157
+ code: 2,
158
+ message: 'Checksum1 is incorrect.'
159
+ };
160
+ }
161
+ else {
162
+ const sum2 = sum1 - digits[9] * StringAusFunc.weights[9];
163
+ for (let i = 0; i < 10; ++i) {
164
+ sum1 = sum2 + i * StringAusFunc.weights[9];
165
+ digit = StringAusFunc.suggestLookup[89 - sum1 % 89];
166
+ if (digit !== undefined) {
167
+ return {
168
+ code: 3,
169
+ message: 'Checksum2 is incorrect.'
170
+ };
171
+ }
172
+ }
173
+ }
174
+ return null;
175
+ }
176
+ static validateACN(acn) {
177
+ if (!acn) {
178
+ return null;
179
+ }
180
+ const digits = acn.replace(/[^\d]/g, '').split('').map(Number);
181
+ console.log(digits);
182
+ if (digits.length !== 9) {
183
+ return { code: 1, message: 'Expect 9-digit.' };
184
+ }
185
+ const sum = digits.slice(0, 8).reduce(StringAusFunc.addAcnWeighted, 0);
186
+ const lastDigit = 10 - sum % 10;
187
+ if (lastDigit === digits[8]) {
188
+ return null;
189
+ }
190
+ return {
191
+ code: 2,
192
+ message: 'Checksum is incorrect.'
193
+ };
194
+ }
195
+ }
196
+ //thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js
197
+ StringAusFunc.acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];
198
+ StringAusFunc.weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
199
+ StringAusFunc.suggestLookup = StringAusFunc.generateLookup();
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nQXVzRnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvc3RyaW5nQXVzRnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBUXpCOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBNEI7UUFDbkQsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtZQUN6QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2IsT0FBTztvQkFDTixJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQ0FBc0M7aUJBQ3hELENBQUM7YUFDRjtZQUVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFekMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxQztZQUVELDJEQUEyRDtZQUMzRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDYixPQUFPO29CQUNOLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHdCQUF3QjtpQkFDMUMsQ0FBQzthQUNGO1NBQ0Q7YUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDO1NBQ3BEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLDhCQUE4QixDQUFDLGNBQXlDO1FBQzlFLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELElBQUksQ0FBQyxtREFBbUQsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLENBQUM7U0FDcEU7UUFFRCxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hNLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RixNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN0RixNQUFNLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXRELE1BQU0sTUFBTSxHQUFHLGVBQWUs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QUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QyxxQkFBTyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRWxELDJCQUFhLEdBQWEsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFN0cmluZyBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gQXVzdHJhbGlhXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RyaW5nQXVzRnVuYyB7XHJcblxyXG5cdC8vdGhhbmtzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9zaWRvcmFyZXMvYXVzdHJhbGlhbi1idXNpbmVzcy1udW1iZXIvYmxvYi8wNTkxNDc1ZjU5NzhmZDEyMmI0NzJlZGNkYzdlZmU2ZDk2ZDU2ZjI2L2luZGV4LmpzXHJcblx0cHJpdmF0ZSBzdGF0aWMgYWNuV2VpZ2h0cyA9IFs4LCA3LCA2LCA1LCA0LCAzLCAyLCAxXTtcclxuXHRwcml2YXRlIHN0YXRpYyB3ZWlnaHRzID0gWzEwLCAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTldO1xyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBzdWdnZXN0TG9va3VwOiBudW1iZXJbXSA9IFN0cmluZ0F1c0Z1bmMuZ2VuZXJhdGVMb29rdXAoKTtcclxuXHJcblx0LyoqXHJcblx0ICogVmFsaWRhdGUgbWVkaWNhcmUgbnVtYmVyXHJcblx0ICogQHBhcmFtIG5cclxuXHQgKiBAcmV0dXJucyB2YWxpZGF0aW9uIGVycm9yIG1lc3NhZ2VcclxuXHQgKi9cclxuXHRzdGF0aWMgdmFsaWRhdGVNZWRpY2FyZShuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XHJcblx0XHRpZiAoIW4pIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKG4gJiYgbi5sZW5ndGggPT09IDEwKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoZXMgPSBuLm1hdGNoKC9eKFxcZHs4fSkoXFxkKS8pO1xyXG5cclxuXHRcdFx0aWYgKCFtYXRjaGVzKSB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGNvZGU6IDIsIG1lc3NhZ2U6ICdNZWRpY2FyZSBudW1iZXIgc2hvdWxkIGJlIGFsbCBkaWdpdC4nXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgYmFzZSA9IG1hdGNoZXNbMV07XHJcblx0XHRcdGNvbnN0IGNoZWNrRGlnaXQgPSBtYXRjaGVzWzJdO1xyXG5cdFx0XHRjb25zdCB3ZWlnaHRzID0gWzEsIDMsIDcsIDksIDEsIDMsIDcsIDldO1xyXG5cclxuXHRcdFx0bGV0IHN1bSA9IDA7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdHN1bSArPSBwYXJzZUludChiYXNlW2ldLCAxMCkgKiB3ZWlnaHRzW2ldO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvL2NvbnNvbGUuZGVidWcoYHN1bTogJHtzdW19ICBjaGVja0RpZ2l0czogJHtjaGVja0RpZ2l0fWApO1xyXG5cdFx0XHRjb25zdCBpc1ZhbGlkID0gc3VtICUgMTAgPT09IHBhcnNlSW50KGNoZWNrRGlnaXQsIDEwKTtcclxuXHRcdFx0aWYgKCFpc1ZhbGlkKSB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGNvZGU6IDMsIG1lc3NhZ2U6ICdDaGVja3N1bSBpcyBpbmNvcnJlY3QuJ1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdMZW5ndGggc2hvdWxkIGJlIDEwLicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB2YWxpZGF0ZU1lZGljYXJlUHJvdmlkZXJOdW1iZXIocHJvdmlkZXJOdW1iZXI6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRcdGlmICghcHJvdmlkZXJOdW1iZXIpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCEvXlswLTldezZ9WzAtOUFCQ0RFRkdISktMTU5QUVJUVVZXWFldW0FCRkhKS0xUV1hZXS8udGVzdChwcm92aWRlck51bWJlcikpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMSwgbWVzc2FnZTogJ05vdCBtYXRjaGluZyBwcm92aWRlciBudW1iZXIgZm9ybWF0LicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwcmFjdGljZUxvY2F0aW9uVmFsdWVzID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdKJywgJ0snLCAnTCcsICdNJywgJ04nLCAnUCcsICdRJywgJ1InLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knXTtcclxuXHRcdGNvbnN0IHJlbWFpbmRlclZhbHVlcyA9IFsnWScsICdYJywgJ1cnLCAnVCcsICdMJywgJ0snLCAnSicsICdIJywgJ0YnLCAnQicsICdBJ107XHJcblx0XHRjb25zdCBzdGVtV2VpZ2h0cyA9IFszLCA1LCA4LCA0LCAyLCAxXTtcclxuXHJcblx0XHRjb25zdCBzdGVtTnVtYmVycyA9IHByb3ZpZGVyTnVtYmVyLnN1YnN0cigwLCA2KS5zcGxpdCgnJykubWFwKChjaGFyKSA9PiBwYXJzZUludChjaGFyKSk7XHJcblx0XHRjb25zdCBwcmFjdGljZUxvYyA9IHByYWN0aWNlTG9jYXRpb25WYWx1ZXMuZmluZEluZGV4KChlKSA9PiBlID09PSBwcm92aWRlck51bWJlcls2XSk7XHJcblx0XHRjb25zdCBjaGVja3N1bSA9IHByb3ZpZGVyTnVtYmVyWzddO1xyXG5cclxuXHRcdGNvbnN0IHppcHBlZCA9IHN0ZW1XZWlnaHRzLm1hcCgoeCwgaSkgPT4gW3gsIHN0ZW1OdW1iZXJzW2ldXSk7XHJcblx0XHRjb25zdCBzdW1XZWlnaHRzID0gemlwcGVkLm1hcCgoeSkgPT4geVsxXSAqIHlbMF0pLnJlZHVjZSgodG90YWwsIG51bSkgPT4gdG90YWwgKyBudW0pO1xyXG5cdFx0Y29uc3QgcmVtYWluZGVyID0gKHN1bVdlaWdodHMgKyBwcmFjdGljZUxvYyAqIDYpICUgMTE7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0ID0gcmVtYWluZGVyVmFsdWVzW3JlbWFpbmRlcl07XHJcblxyXG5cdFx0Y29uc3QgdmFsaWQgPSByZXN1bHQgPT09IGNoZWNrc3VtO1xyXG5cdFx0aWYgKCF2YWxpZCkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAyLCBtZXNzYWdlOiAnQ2hlY2tzdW0gaXMgaW5jb3JyZWN0LicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB2YWxpZGF0ZURWQUZpbGVOdW1iZXIoZHZhOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XHJcblx0XHRpZiAoIWR2YSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzdGF0ZXMgPSBbJ04nLCAnVicsICdRJywgJ1MnLCAnVycsICdUJ107XHJcblx0XHRjb25zdCB3YXJDb2RlcyA9IFsnICcsICdYJywgJ0tNJywgJ1NSJywgJ1NTJywgJ1NNJywgJ1NXUCcsICdBR1gnLCAnQlcnLCAnR1cnLCAnQ0dXJywgLy9BdXN0cmFsaWFuIEZvcmNlc1xyXG5cdFx0XHQnUCcsICdQWCcsICdQQUQnLCAnUEFNJywgJ1BDQScsICdQQ1InLCAnUENWJywgJ1BNUycsICdQU1cnLCAnUFdPJywgJ0hLWCcsICdNQUwnLCAvL0JyaXRpc2ggQWRtaW5pc3RyYXRpb24gR3JvdXBcclxuXHRcdFx0J0NOJywgJ0NOWCcsICdJVicsICdORicsICdORycsICdSRCcsICdSRFgnLCAnU0EnLCAnU0FYJywgJ0EnLCAvL090aGVyIE92ZXJzZWFzIEZvcmNlc1xyXG5cdFx0XHQnTicsICdOWCcsICdOU1cnLCAnTlNNJywgLy9OZXcgWmVhbGFuZCBBZG1pbmlzdHJhdGlvbiBHcm91cFxyXG5cdFx0XHQnQlVSJywgJ0NOSycsICdDTlMnLCAnRklKJywgJ0dIQScsICdIS1MnLCAnSU5EJywgJ0tZQScsICdNQVUnLCAnTUxTJywgJ01UWCcsICdNV0knLCAnTksnLCAnTkdSJywgJ05SRCcsICdOU1MnLCAnUEsnXS8vQnJpdGlzaCBDb21tb253ZWFsdGggQ291bnRyaWVzIC0gU1AgRWxpZ2liaWxpdHlcclxuXHJcblx0XHRpZiAoIXN0YXRlcy5pbmNsdWRlcyhkdmEuY2hhckF0KDApKSkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnU3RhdGUgaW5jb3JyZWN0LicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBucyA9IGR2YS5tYXRjaCgvXFxkKy8pO1xyXG5cdFx0aWYgKCFucykge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAyLCBtZXNzYWdlOiAnTm8gbnVtYmVyLicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBuID0gbnNbMF07XHJcblx0XHRjb25zdCBpZHhPZk4gPSBkdmEuaW5kZXhPZihuKTtcclxuXHRcdGNvbnN0IHdhckNvZGUgPSBkdmEuc3Vic3RyaW5nKDEsIGlkeE9mTik7XHJcblx0XHRpZiAoIXdhckNvZGVzLmluY2x1ZGVzKHdhckNvZGUpKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDMsIG1lc3NhZ2U6ICdXYXIgY29kZSBpbnZhbGlkLicgfVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGxlbk9mTiA9IG4ubGVuZ3RoO1xyXG5cdFx0Y29uc3QgbGVuT2ZXYyA9IHdhckNvZGUubGVuZ3RoO1xyXG5cdFx0aWYgKGxlbk9mTiArIGxlbk9mV2MgPiA3KSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDQsIG1lc3NhZ2U6ICdGaWxlIG51bWJlciBsZW5ndGggc2hvdWxkIG5vdCBiZSBncmVhdGVyIDcuJyB9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdmFsaWRhdGVURk4objogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFuKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHRmbiA9IG4ucmVwbGFjZSgvXFxzKy9nLCAnJykucmVwbGFjZSgvWy1dL2csICcnKTtcclxuXHJcblx0XHRjb25zdCBpc051bWJlciA9IC9eWzAtOV0rJC8udGVzdCh0Zm4pO1xyXG5cdFx0aWYgKCFpc051bWJlcikge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnSW52YWxpZCBURk4sIG9ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbGVuZ3RoID0gdGZuLmxlbmd0aDtcclxuXHRcdGlmIChsZW5ndGggIT09IDkpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRjb2RlOiAyLCBtZXNzYWdlOiAnSW52YWxpZCBURk4sIG11c3QgaGF2ZSA5IGRpZ2l0cy4nXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZGlnaXRzID0gdGZuLnNwbGl0KCcnKS5tYXAoZCA9PiBwYXJzZUludChkKSk7XHJcblxyXG5cdFx0Y29uc3Qgc3VtID0gKGRpZ2l0c1swXSAqIDEpXHJcblx0XHRcdCsgKGRpZ2l0c1sxXSAqIDQpXHJcblx0XHRcdCsgKGRpZ2l0c1syXSAqIDMpXHJcblx0XHRcdCsgKGRpZ2l0c1szXSAqIDcpXHJcblx0XHRcdCsgKGRpZ2l0c1s0XSAqIDUpXHJcblx0XHRcdCsgKGRpZ2l0c1s1XSAqIDgpXHJcblx0XHRcdCsgKGRpZ2l0c1s2XSAqIDYpXHJcblx0XHRcdCsgKGRpZ2l0c1s3XSAqIDkpXHJcblx0XHRcdCsgKGRpZ2l0c1s4XSAqIDEwKTtcclxuXHJcblx0XHRjb25zdCByZW1haW5kZXIgPSBzdW0gJSAxMTtcclxuXHRcdGNvbnN0IHZhbGlkID0gcmVtYWluZGVyID09PSAwO1xyXG5cdFx0aWYgKCF2YWxpZCkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAzLCBtZXNzYWdlOiAnQ2hlY2tzdW0gaXMgaW5jb3JyZWN0LicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIGFkZFdlaWdodGVkKHA6IG51bWJlciwgdjogbnVtYmVyLCBpOiBudW1iZXIpIHtcclxuXHRcdHJldHVybiBwICsgdiAqIFN0cmluZ0F1c0Z1bmMud2VpZ2h0c1tpXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIGFkZEFjbldlaWdodGVkKHA6IG51bWJlciwgdjogbnVtYmVyLCBpOiBudW1iZXIpIHtcclxuXHRcdHJldHVybiBwICsgdiAqIFN0cmluZ0F1c0Z1bmMuYWNuV2VpZ2h0c1tpXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3RhdGljIGdlbmVyYXRlTG9va3VwKCk6IG51bWJlcltdIHtcclxuXHRcdGNvbnN0IG5zOiBudW1iZXJbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgKytpKSB7XHJcblx0XHRcdG5zW2kgKiAxOSAlIDg5XSA9IGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5zO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHZhbGlkYXRlQUJOKGFibjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFhYm4pIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZGlnaXRzID0gYWJuLnJlcGxhY2UoL1teXFxkXS9nLCAnJykuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG5cdFx0aWYgKGRpZ2l0cy5sZW5ndGggIT09IDExKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdFeHBlY3QgMTEtZGlnaXQuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGRpZ2l0c1swXSAtPSAxO1xyXG5cclxuXHRcdGNvbnN0IHN1bSA9IGRpZ2l0cy5yZWR1Y2UoU3RyaW5nQXVzRnVuYy5hZGRXZWlnaHRlZCwgMCk7XHJcblxyXG5cdFx0aWYgKHN1bSAlIDg5ID09PSAwKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGRpZ2l0c1swXSArPSAxO1xyXG5cclxuXHRcdGxldCBzdW0xID0gc3VtIC0gZGlnaXRzWzEwXSAqIFN0cmluZ0F1c0Z1bmMud2VpZ2h0c1sxMF07XHJcblx0XHRsZXQgZGlnaXQgPSBTdHJpbmdBdXNGdW5jLnN1Z2dlc3RMb29rdXBbODkgLSBzdW0xICUgODldO1xyXG5cdFx0aWYgKGRpZ2l0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRjb2RlOiAyLFxyXG5cdFx0XHRcdG1lc3NhZ2U6ICdDaGVja3N1bTEgaXMgaW5jb3JyZWN0LidcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3Qgc3VtMiA9IHN1bTEgLSBkaWdpdHNbOV0gKiBTdHJpbmdBdXNGdW5jLndlaWdodHNbOV07XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgMTA7ICsraSkge1xyXG5cdFx0XHRcdHN1bTEgPSBzdW0yICsgaSAqIFN0cmluZ0F1c0Z1bmMud2VpZ2h0c1s5XTtcclxuXHRcdFx0XHRkaWdpdCA9IFN0cmluZ0F1c0Z1bmMuc3VnZ2VzdExvb2t1cFs4OSAtIHN1bTEgJSA4OV07XHJcblx0XHRcdFx0aWYgKGRpZ2l0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdGNvZGU6IDMsXHJcblx0XHRcdFx0XHRcdG1lc3NhZ2U6ICdDaGVja3N1bTIgaXMgaW5jb3JyZWN0LidcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbFxyXG5cdH1cclxuXHJcblx0c3RhdGljIHZhbGlkYXRlQUNOKGFjbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFhY24pIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZGlnaXRzID0gYWNuLnJlcGxhY2UoL1teXFxkXS9nLCAnJykuc3BsaXQoJycpLm1hcChOdW1iZXIpO1xyXG5cdFx0Y29uc29sZS5sb2coZGlnaXRzKTtcclxuXHRcdGlmIChkaWdpdHMubGVuZ3RoICE9PSA5KSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdFeHBlY3QgOS1kaWdpdC4nIH07XHJcblx0XHR9XHJcblxyXG5cclxuXHRcdGNvbnN0IHN1bSA9IGRpZ2l0cy5zbGljZSgwLCA4KS5yZWR1Y2UoU3RyaW5nQXVzRnVuYy5hZGRBY25XZWlnaHRlZCwgMCk7XHJcblx0XHRjb25zdCBsYXN0RGlnaXQgPSAxMCAtIHN1bSAlIDEwO1xyXG5cdFx0aWYgKGxhc3REaWdpdCA9PT0gZGlnaXRzWzhdKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGNvZGU6IDIsXHJcblx0XHRcdG1lc3NhZ2U6ICdDaGVja3N1bSBpcyBpbmNvcnJlY3QuJ1xyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuIl19
@@ -1,6 +1,4 @@
1
1
  export class StringFunc {
2
- ;
3
- ;
4
2
  /**
5
3
  * Up to 2 letters. For John Smith, returns JS, for Huang, Zijian, returns ZH
6
4
  * @param s
@@ -44,6 +42,12 @@ export class StringFunc {
44
42
  const st = ss.replace(new RegExp('\n', 'g'), ' ') + ((s.length > length) ? '...' : '');
45
43
  return encodeURI(st.trim()); //need to encode in order to save as meta in Azure.
46
44
  }
45
+ /**
46
+ * Pad number with zero
47
+ * @param num
48
+ * @param size
49
+ * @returns
50
+ */
47
51
  static pad(num, size) {
48
52
  if (num == null) {
49
53
  return '';
@@ -78,197 +82,7 @@ export class StringFunc {
78
82
  }
79
83
  return s.replace(/(?:^|\s)\S/g, (a) => a.toUpperCase());
80
84
  }
81
- /**
82
- * Validate medicare number
83
- * @param n
84
- * @returns validation error message
85
- */
86
- static validateMedicare(n) {
87
- if (!n) {
88
- return null;
89
- }
90
- if (n && n.length === 10) {
91
- const matches = n.match(/^(\d{8})(\d)/);
92
- if (!matches) {
93
- return {
94
- code: 2, message: 'Medicare number should be all digit.'
95
- };
96
- }
97
- const base = matches[1];
98
- const checkDigit = matches[2];
99
- const weights = [1, 3, 7, 9, 1, 3, 7, 9];
100
- let sum = 0;
101
- for (let i = 0; i < weights.length; i++) {
102
- sum += parseInt(base[i], 10) * weights[i];
103
- }
104
- //console.debug(`sum: ${sum} checkDigits: ${checkDigit}`);
105
- const isValid = sum % 10 === parseInt(checkDigit, 10);
106
- if (!isValid) {
107
- return {
108
- code: 3, message: 'Checksum is incorrect.'
109
- };
110
- }
111
- }
112
- else {
113
- return { code: 1, message: 'Length should be 10.' };
114
- }
115
- return null;
116
- }
117
- static validateMedicareProviderNumber(providerNumber) {
118
- if (!providerNumber) {
119
- return null;
120
- }
121
- if (!/^[0-9]{6}[0-9ABCDEFGHJKLMNPQRTUVWXY][ABFHJKLTWXY]/.test(providerNumber)) {
122
- return { code: 1, message: 'Not matching provider number format.' };
123
- }
124
- const practiceLocationValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'V', 'W', 'X', 'Y'];
125
- const remainderValues = ['Y', 'X', 'W', 'T', 'L', 'K', 'J', 'H', 'F', 'B', 'A'];
126
- const stemWeights = [3, 5, 8, 4, 2, 1];
127
- const stemNumbers = providerNumber.substr(0, 6).split('').map((char) => parseInt(char));
128
- const practiceLoc = practiceLocationValues.findIndex((e) => e === providerNumber[6]);
129
- const checksum = providerNumber[7];
130
- const zipped = stemWeights.map((x, i) => [x, stemNumbers[i]]);
131
- const sumWeights = zipped.map((y) => y[1] * y[0]).reduce((total, num) => total + num);
132
- const remainder = (sumWeights + practiceLoc * 6) % 11;
133
- const result = remainderValues[remainder];
134
- const valid = result === checksum;
135
- if (!valid) {
136
- return { code: 2, message: 'Checksum is incorrect.' };
137
- }
138
- return null;
139
- }
140
- static validateDVAFileNumber(dva) {
141
- if (!dva) {
142
- return null;
143
- }
144
- const states = ['N', 'V', 'Q', 'S', 'W', 'T'];
145
- const warCodes = [' ', 'X', 'KM', 'SR', 'SS', 'SM', 'SWP', 'AGX', 'BW', 'GW', 'CGW',
146
- 'P', 'PX', 'PAD', 'PAM', 'PCA', 'PCR', 'PCV', 'PMS', 'PSW', 'PWO', 'HKX', 'MAL',
147
- 'CN', 'CNX', 'IV', 'NF', 'NG', 'RD', 'RDX', 'SA', 'SAX', 'A',
148
- 'N', 'NX', 'NSW', 'NSM',
149
- 'BUR', 'CNK', 'CNS', 'FIJ', 'GHA', 'HKS', 'IND', 'KYA', 'MAU', 'MLS', 'MTX', 'MWI', 'NK', 'NGR', 'NRD', 'NSS', 'PK']; //British Commonwealth Countries - SP Eligibility
150
- if (!states.includes(dva.charAt(0))) {
151
- return { code: 1, message: 'State incorrect.' };
152
- }
153
- const ns = dva.match(/\d+/);
154
- if (!ns) {
155
- return { code: 2, message: 'No number.' };
156
- }
157
- const n = ns[0];
158
- const idxOfN = dva.indexOf(n);
159
- const warCode = dva.substring(1, idxOfN);
160
- if (!warCodes.includes(warCode)) {
161
- return { code: 3, message: 'War code invalid.' };
162
- }
163
- const lenOfN = n.length;
164
- const lenOfWc = warCode.length;
165
- if (lenOfN + lenOfWc > 7) {
166
- return { code: 4, message: 'File number length should not be greater 7.' };
167
- }
168
- return null;
169
- }
170
- static validateTFN(n) {
171
- if (!n) {
172
- return null;
173
- }
174
- const tfn = n.replace(/\s+/g, '').replace(/[-]/g, '');
175
- const isNumber = /^[0-9]+$/.test(tfn);
176
- if (!isNumber) {
177
- return { code: 1, message: 'Invalid TFN, only numbers are allowed.' };
178
- }
179
- const length = tfn.length;
180
- if (length !== 9) {
181
- return {
182
- code: 2, message: 'Invalid TFN, must have 9 digits.'
183
- };
184
- }
185
- const digits = tfn.split('').map(d => parseInt(d));
186
- const sum = (digits[0] * 1)
187
- + (digits[1] * 4)
188
- + (digits[2] * 3)
189
- + (digits[3] * 7)
190
- + (digits[4] * 5)
191
- + (digits[5] * 8)
192
- + (digits[6] * 6)
193
- + (digits[7] * 9)
194
- + (digits[8] * 10);
195
- const remainder = sum % 11;
196
- const valid = remainder === 0;
197
- if (!valid) {
198
- return { code: 3, message: 'Checksum is incorrect.' };
199
- }
200
- return null;
201
- }
202
- static addWeighted(p, v, i) {
203
- return p + v * StringFunc.weights[i];
204
- }
205
- static addAcnWeighted(p, v, i) {
206
- return p + v * StringFunc.acnWeights[i];
207
- }
208
- static generateLookup() {
209
- const ns = [];
210
- for (let i = 0; i < 10; ++i) {
211
- ns[i * 19 % 89] = i;
212
- }
213
- return ns;
214
- }
215
- static validateABN(abn) {
216
- if (!abn) {
217
- return null;
218
- }
219
- const digits = abn.replace(/[^\d]/g, '').split('').map(Number);
220
- if (digits.length !== 11) {
221
- return { code: 1, message: 'Expect 11-digit.' };
222
- }
223
- digits[0] -= 1;
224
- const sum = digits.reduce(this.addWeighted, 0);
225
- if (sum % 89 === 0) {
226
- return null;
227
- }
228
- digits[0] += 1;
229
- let sum1 = sum - digits[10] * StringFunc.weights[10];
230
- let digit = StringFunc.suggestLookup[89 - sum1 % 89];
231
- if (digit !== undefined) {
232
- return {
233
- code: 2,
234
- message: 'Checksum1 is incorrect.'
235
- };
236
- }
237
- else {
238
- const sum2 = sum1 - digits[9] * StringFunc.weights[9];
239
- for (let i = 0; i < 10; ++i) {
240
- sum1 = sum2 + i * StringFunc.weights[9];
241
- digit = StringFunc.suggestLookup[89 - sum1 % 89];
242
- if (digit !== undefined) {
243
- return {
244
- code: 3,
245
- message: 'Checksum2 is incorrect.'
246
- };
247
- }
248
- }
249
- }
250
- return null;
251
- }
252
- static validateACN(acn) {
253
- if (!acn) {
254
- return null;
255
- }
256
- const digits = acn.replace(/[^\d]/g, '').split('').map(Number);
257
- console.log(digits);
258
- if (digits.length !== 9) {
259
- return { code: 1, message: 'Expect 9-digit.' };
260
- }
261
- const sum = digits.slice(0, 8).reduce(StringFunc.addAcnWeighted, 0);
262
- const lastDigit = 10 - sum % 10;
263
- if (lastDigit === digits[8]) {
264
- return null;
265
- }
266
- return {
267
- code: 2,
268
- message: 'Checksum is incorrect.'
269
- };
270
- }
271
- validateEmail(email) {
85
+ static validateEmail(email) {
272
86
  if (!email) {
273
87
  return true;
274
88
  }
@@ -276,8 +90,4 @@ export class StringFunc {
276
90
  return re.test(email.toLowerCase());
277
91
  }
278
92
  }
279
- //thanks to https://github.com/sidorares/australian-business-number/blob/0591475f5978fd122b472edcdc7efe6d96d56f26/index.js
280
- StringFunc.acnWeights = [8, 7, 6, 5, 4, 3, 2, 1];
281
- StringFunc.weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
282
- StringFunc.suggestLookup = StringFunc.generateLookup();
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nRnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvc3RyaW5nRnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sVUFBVTtJQUN0QixDQUFDO0lBQ0QsQ0FBQztJQU9EOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBNEI7UUFDMUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNQLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEI7UUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBNEIsRUFBRSxNQUFjO1FBQ25FLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDUCxPQUFPLEVBQUUsQ0FBQztTQUNWO1FBRUQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxFQUFFLEdB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LEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaE0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLFVBQVUs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QWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNoQyxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE9BQU87WUFDTixJQUFJLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSx3QkFBd0I7U0FDakMsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBZ0M7UUFDN0MsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxNQUFNLEVBQUUsR0FBRyx1SkFBdUosQ0FBQztRQUNuSyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQzs7QUEvVUQsMEhBQTBIO0FBQzNHLHFCQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsa0JBQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUVsRCx3QkFBYSxHQUFhLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTdHJpbmdGdW5jIHtcclxuXHQ7XHJcblx0O1xyXG5cclxuXHQvL3RoYW5rcyB0byBodHRwczovL2dpdGh1Yi5jb20vc2lkb3JhcmVzL2F1c3RyYWxpYW4tYnVzaW5lc3MtbnVtYmVyL2Jsb2IvMDU5MTQ3NWY1OTc4ZmQxMjJiNDcyZWRjZGM3ZWZlNmQ5NmQ1NmYyNi9pbmRleC5qc1xyXG5cdHByaXZhdGUgc3RhdGljIGFjbldlaWdodHMgPSBbOCwgNywgNiwgNSwgNCwgMywgMiwgMV07XHJcblx0cHJpdmF0ZSBzdGF0aWMgd2VpZ2h0cyA9IFsxMCwgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgMTcsIDE5XTtcclxuXHJcblx0cHJpdmF0ZSBzdGF0aWMgc3VnZ2VzdExvb2t1cDogbnVtYmVyW10gPSBTdHJpbmdGdW5jLmdlbmVyYXRlTG9va3VwKCk7XHJcblx0LyoqXHJcblx0ICogVXAgdG8gMiBsZXR0ZXJzLiBGb3IgSm9obiBTbWl0aCwgcmV0dXJucyBKUywgZm9yIEh1YW5nLCBaaWppYW4sIHJldHVybnMgWkhcclxuXHQgKiBAcGFyYW0gc1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRBYmJyKHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuXHRcdGlmICghcykge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc0FycmF5ID0gcy5zcGxpdCgvW1xccyxdKy8pO1xyXG5cdFx0Y29uc3QgY29tbWEgPSBzLmluZGV4T2YoJywnKSA+PSAwO1xyXG5cclxuXHRcdGlmIChzQXJyYXkubGVuZ3RoID09PSAxKSB7XHJcblx0XHRcdHJldHVybiBzQXJyYXlbMF1bMF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbW1hID8gc0FycmF5WzFdWzBdICsgc0FycmF5WzBdWzBdIDogc0FycmF5WzBdWzBdICsgc0FycmF5WzFdWzBdO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQSBzdWJzdHJpbmcgd2l0aCBsaW5lIGJyZWFrcyByZXBsYWNlZCBieSBzcGFjZS5cclxuXHQgKiBAcGFyYW0gc1xyXG5cdCAqIEBwYXJhbSBsZW5ndGhcclxuXHQgKiBAcmV0dXJucyByZXN1bHQsIG9yIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkXHJcblx0ICovXHJcblx0c3RhdGljIGdldE9uZUxpbmVEaWdlc3Qoczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgbGVuZ3RoOiBudW1iZXIpIHtcclxuXHRcdGlmICghcykge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3MgPSBzLnN1YnN0cmluZygwLCBsZW5ndGgpO1xyXG5cdFx0Y29uc3Qgc3QgPSBzcy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcbicsICdnJyksICcgJykgKyAoKHMubGVuZ3RoID4gbGVuZ3RoKSA/ICcuLi4nIDogJycpO1xyXG5cdFx0cmV0dXJuIHN0LnRyaW0oKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbW92ZSBsaW5lIGJyZWFrcyBhbmQgZWNvbmRlIHdpdGggZW5jb2RlVVJJKCkgc28gdGhlIGRhdGEgY291bGQgYmUgc2F2ZWQgaW4gQXp1cmUgYXMgbWV0YS4gSWYgdGhlIHN0cmluZyBpcyB0cnVuY2F0ZWQsIHRoZSByZXR1cm4gd2lsbCBoYXZlIC4uLiBzdWZmaXguXHJcblx0ICogQHBhcmFtIHNcclxuXHQgKiBAcGFyYW0gbGVuZ3RoXHJcblx0ICogQHJldHVybnMgcmVzdWx0LCBvciBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRPbmVMaW5lRGlnZXN0T2ZIdG1sKHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRpZiAoIXMpIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNzID0gcy5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcclxuXHRcdGNvbnN0IHN0ID0gc3MucmVwbGFjZShuZXcgUmVnRXhwKCdcXG4nLCAnZycpLCAnICcpICsgKChzLmxlbmd0aCA+IGxlbmd0aCkgPyAnLi4uJyA6ICcnKTtcclxuXHRcdHJldHVybiBlbmNvZGVVUkkoc3QudHJpbSgpKTsgLy9uZWVkIHRvIGVuY29kZSBpbiBvcmRlciB0byBzYXZlIGFzIG1ldGEgaW4gQXp1cmUuXHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcGFkKG51bTogbnVtYmVyIHwgdW5kZWZpbmVkLCBzaXplOiBudW1iZXIpOiBzdHJpbmcge1xyXG5cdFx0aWYgKG51bSA9PSBudWxsKSB7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgcyA9IG51bSArICcnO1xyXG5cdFx0d2hpbGUgKHMubGVuZ3RoIDwgc2l6ZSkgeyBzID0gJzAnICsgczsgfVxyXG5cdFx0cmV0dXJuIHM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBnZXQgcGxhaW4gdGV4dCBvZiBIVE1MIGNvbnRlbnRcclxuXHQgKiBAcGFyYW0gc1xyXG5cdCAqIEByZXR1cm5zIHJlc3VsdC4gSWYgaW5wdXQgaXMgZW1wdHksIG51bGwsIG9yIHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBzYW1lLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRIdG1sUGxhaW5UZXh0KHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuXHRcdGlmICghcykge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XHJcblx0XHRjb25zdCBodG1sID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzLCAndGV4dC9odG1sJyk7XHJcblx0XHRyZXR1cm4gaHRtbC5ib2R5LnRleHRDb250ZW50O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gc1xyXG5cdCAqIEByZXR1cm5zIHJlc3VsdC4gSWYgaW5wdXQgaXMgZW1wdHksIG51bGwsIG9yIHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBzYW1lLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBjYXBpdGFsaXplV29yZHMoczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgeyAvLyB0aGFua3MgdG8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjMzMjgxMS9jYXBpdGFsaXplLXdvcmRzLWluLXN0cmluZ1xyXG5cdFx0aWYgKCFzKSB7XHJcblx0XHRcdHJldHVybiBzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBzLnJlcGxhY2UoLyg/Ol58XFxzKVxcUy9nLCAoYSkgPT4gYS50b1VwcGVyQ2FzZSgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZhbGlkYXRlIG1lZGljYXJlIG51bWJlclxyXG5cdCAqIEBwYXJhbSBuXHJcblx0ICogQHJldHVybnMgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlXHJcblx0ICovXHJcblx0c3RhdGljIHZhbGlkYXRlTWVkaWNhcmUobjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFuKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChuICYmIG4ubGVuZ3RoID09PSAxMCkge1xyXG5cdFx0XHRjb25zdCBtYXRjaGVzID0gbi5tYXRjaCgvXihcXGR7OH0pKFxcZCkvKTtcclxuXHJcblx0XHRcdGlmICghbWF0Y2hlcykge1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRjb2RlOiAyLCBtZXNzYWdlOiAnTWVkaWNhcmUgbnVtYmVyIHNob3VsZCBiZSBhbGwgZGlnaXQuJ1xyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGJhc2UgPSBtYXRjaGVzWzFdO1xyXG5cdFx0XHRjb25zdCBjaGVja0RpZ2l0ID0gbWF0Y2hlc1syXTtcclxuXHRcdFx0Y29uc3Qgd2VpZ2h0cyA9IFsxLCAzLCA3LCA5LCAxLCAzLCA3LCA5XTtcclxuXHJcblx0XHRcdGxldCBzdW0gPSAwO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRzdW0gKz0gcGFyc2VJbnQoYmFzZVtpXSwgMTApICogd2VpZ2h0c1tpXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly9jb25zb2xlLmRlYnVnKGBzdW06ICR7c3VtfSAgY2hlY2tEaWdpdHM6ICR7Y2hlY2tEaWdpdH1gKTtcclxuXHRcdFx0Y29uc3QgaXNWYWxpZCA9IHN1bSAlIDEwID09PSBwYXJzZUludChjaGVja0RpZ2l0LCAxMCk7XHJcblx0XHRcdGlmICghaXNWYWxpZCkge1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRjb2RlOiAzLCBtZXNzYWdlOiAnQ2hlY2tzdW0gaXMgaW5jb3JyZWN0LidcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnTGVuZ3RoIHNob3VsZCBiZSAxMC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdmFsaWRhdGVNZWRpY2FyZVByb3ZpZGVyTnVtYmVyKHByb3ZpZGVyTnVtYmVyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogeyBjb2RlOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCB7XHJcblx0XHRpZiAoIXByb3ZpZGVyTnVtYmVyKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghL15bMC05XXs2fVswLTlBQkNERUZHSEpLTE1OUFFSVFVWV1hZXVtBQkZISktMVFdYWV0vLnRlc3QocHJvdmlkZXJOdW1iZXIpKSB7XHJcblx0XHRcdHJldHVybiB7IGNvZGU6IDEsIG1lc3NhZ2U6ICdOb3QgbWF0Y2hpbmcgcHJvdmlkZXIgbnVtYmVyIGZvcm1hdC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcHJhY3RpY2VMb2NhdGlvblZhbHVlcyA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ1AnLCAnUScsICdSJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJ107XHJcblx0XHRjb25zdCByZW1haW5kZXJWYWx1ZXMgPSBbJ1knLCAnWCcsICdXJywgJ1QnLCAnTCcsICdLJywgJ0onLCAnSCcsICdGJywgJ0InLCAnQSddO1xyXG5cdFx0Y29uc3Qgc3RlbVdlaWdodHMgPSBbMywgNSwgOCwgNCwgMiwgMV07XHJcblxyXG5cdFx0Y29uc3Qgc3RlbU51bWJlcnMgPSBwcm92aWRlck51bWJlci5zdWJzdHIoMCwgNikuc3BsaXQoJycpLm1hcCgoY2hhcikgPT4gcGFyc2VJbnQoY2hhcikpO1xyXG5cdFx0Y29uc3QgcHJhY3RpY2VMb2MgPSBwcmFjdGljZUxvY2F0aW9uVmFsdWVzLmZpbmRJbmRleCgoZSkgPT4gZSA9PT0gcHJvdmlkZXJOdW1iZXJbNl0pO1xyXG5cdFx0Y29uc3QgY2hlY2tzdW0gPSBwcm92aWRlck51bWJlcls3XTtcclxuXHJcblx0XHRjb25zdCB6aXBwZWQgPSBzdGVtV2VpZ2h0cy5tYXAoKHgsIGkpID0+IFt4LCBzdGVtTnVtYmVyc1tpXV0pO1xyXG5cdFx0Y29uc3Qgc3VtV2VpZ2h0cyA9IHppcHBlZC5tYXAoKHkpID0+IHlbMV0gKiB5WzBdKS5yZWR1Y2UoKHRvdGFsLCBudW0pID0+IHRvdGFsICsgbnVtKTtcclxuXHRcdGNvbnN0IHJlbWFpbmRlciA9IChzdW1XZWlnaHRzICsgcHJhY3RpY2VMb2MgKiA2KSAlIDExO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdCA9IHJlbWFpbmRlclZhbHVlc1tyZW1haW5kZXJdO1xyXG5cclxuXHRcdGNvbnN0IHZhbGlkID0gcmVzdWx0ID09PSBjaGVja3N1bTtcclxuXHRcdGlmICghdmFsaWQpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMiwgbWVzc2FnZTogJ0NoZWNrc3VtIGlzIGluY29ycmVjdC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdmFsaWRhdGVEVkFGaWxlTnVtYmVyKGR2YTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwge1xyXG5cdFx0aWYgKCFkdmEpIHtcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3Qgc3RhdGVzID0gWydOJywgJ1YnLCAnUScsICdTJywgJ1cnLCAnVCddO1xyXG5cdFx0Y29uc3Qgd2FyQ29kZXMgPSBbJyAnLCAnWCcsICdLTScsICdTUicsICdTUycsICdTTScsICdTV1AnLCAnQUdYJywgJ0JXJywgJ0dXJywgJ0NHVycsIC8vQXVzdHJhbGlhbiBGb3JjZXNcclxuXHRcdFx0J1AnLCAnUFgnLCAnUEFEJywgJ1BBTScsICdQQ0EnLCAnUENSJywgJ1BDVicsICdQTVMnLCAnUFNXJywgJ1BXTycsICdIS1gnLCAnTUFMJywgLy9Ccml0aXNoIEFkbWluaXN0cmF0aW9uIEdyb3VwXHJcblx0XHRcdCdDTicsICdDTlgnLCAnSVYnLCAnTkYnLCAnTkcnLCAnUkQnLCAnUkRYJywgJ1NBJywgJ1NBWCcsICdBJywgLy9PdGhlciBPdmVyc2VhcyBGb3JjZXNcclxuXHRcdFx0J04nLCAnTlgnLCAnTlNXJywgJ05TTScsIC8vTmV3IFplYWxhbmQgQWRtaW5pc3RyYXRpb24gR3JvdXBcclxuXHRcdFx0J0JVUicsICdDTksnLCAnQ05TJywgJ0ZJSicsICdHSEEnLCAnSEtTJywgJ0lORCcsICdLWUEnLCAnTUFVJywgJ01MUycsICdNVFgnLCAnTVdJJywgJ05LJywgJ05HUicsICdOUkQnLCAnTlNTJywgJ1BLJ10vL0JyaXRpc2ggQ29tbW9ud2VhbHRoIENvdW50cmllcyAtIFNQIEVsaWdpYmlsaXR5XHJcblxyXG5cdFx0aWYgKCFzdGF0ZXMuaW5jbHVkZXMoZHZhLmNoYXJBdCgwKSkpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMSwgbWVzc2FnZTogJ1N0YXRlIGluY29ycmVjdC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbnMgPSBkdmEubWF0Y2goL1xcZCsvKTtcclxuXHRcdGlmICghbnMpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMiwgbWVzc2FnZTogJ05vIG51bWJlci4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbiA9IG5zWzBdO1xyXG5cdFx0Y29uc3QgaWR4T2ZOID0gZHZhLmluZGV4T2Yobik7XHJcblx0XHRjb25zdCB3YXJDb2RlID0gZHZhLnN1YnN0cmluZygxLCBpZHhPZk4pO1xyXG5cdFx0aWYgKCF3YXJDb2Rlcy5pbmNsdWRlcyh3YXJDb2RlKSkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAzLCBtZXNzYWdlOiAnV2FyIGNvZGUgaW52YWxpZC4nIH1cclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBsZW5PZk4gPSBuLmxlbmd0aDtcclxuXHRcdGNvbnN0IGxlbk9mV2MgPSB3YXJDb2RlLmxlbmd0aDtcclxuXHRcdGlmIChsZW5PZk4gKyBsZW5PZldjID4gNykge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiA0LCBtZXNzYWdlOiAnRmlsZSBudW1iZXIgbGVuZ3RoIHNob3VsZCBub3QgYmUgZ3JlYXRlciA3LicgfVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHZhbGlkYXRlVEZOKG46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRcdGlmICghbikge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB0Zm4gPSBuLnJlcGxhY2UoL1xccysvZywgJycpLnJlcGxhY2UoL1stXS9nLCAnJyk7XHJcblxyXG5cdFx0Y29uc3QgaXNOdW1iZXIgPSAvXlswLTldKyQvLnRlc3QodGZuKTtcclxuXHRcdGlmICghaXNOdW1iZXIpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMSwgbWVzc2FnZTogJ0ludmFsaWQgVEZOLCBvbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGxlbmd0aCA9IHRmbi5sZW5ndGg7XHJcblx0XHRpZiAobGVuZ3RoICE9PSA5KSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Y29kZTogMiwgbWVzc2FnZTogJ0ludmFsaWQgVEZOLCBtdXN0IGhhdmUgOSBkaWdpdHMuJ1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGRpZ2l0cyA9IHRmbi5zcGxpdCgnJykubWFwKGQgPT4gcGFyc2VJbnQoZCkpO1xyXG5cclxuXHRcdGNvbnN0IHN1bSA9IChkaWdpdHNbMF0gKiAxKVxyXG5cdFx0XHQrIChkaWdpdHNbMV0gKiA0KVxyXG5cdFx0XHQrIChkaWdpdHNbMl0gKiAzKVxyXG5cdFx0XHQrIChkaWdpdHNbM10gKiA3KVxyXG5cdFx0XHQrIChkaWdpdHNbNF0gKiA1KVxyXG5cdFx0XHQrIChkaWdpdHNbNV0gKiA4KVxyXG5cdFx0XHQrIChkaWdpdHNbNl0gKiA2KVxyXG5cdFx0XHQrIChkaWdpdHNbN10gKiA5KVxyXG5cdFx0XHQrIChkaWdpdHNbOF0gKiAxMCk7XHJcblxyXG5cdFx0Y29uc3QgcmVtYWluZGVyID0gc3VtICUgMTE7XHJcblx0XHRjb25zdCB2YWxpZCA9IHJlbWFpbmRlciA9PT0gMDtcclxuXHRcdGlmICghdmFsaWQpIHtcclxuXHRcdFx0cmV0dXJuIHsgY29kZTogMywgbWVzc2FnZTogJ0NoZWNrc3VtIGlzIGluY29ycmVjdC4nIH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBhZGRXZWlnaHRlZChwOiBudW1iZXIsIHY6IG51bWJlciwgaTogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gcCArIHYgKiBTdHJpbmdGdW5jLndlaWdodHNbaV07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBhZGRBY25XZWlnaHRlZChwOiBudW1iZXIsIHY6IG51bWJlciwgaTogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gcCArIHYgKiBTdHJpbmdGdW5jLmFjbldlaWdodHNbaV07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUxvb2t1cCgpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCBuczogbnVtYmVyW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgMTA7ICsraSkge1xyXG5cdFx0XHRuc1tpICogMTkgJSA4OV0gPSBpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBucztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB2YWxpZGF0ZUFCTihhYm46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRcdGlmICghYWJuKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGRpZ2l0cyA9IGFibi5yZXBsYWNlKC9bXlxcZF0vZywgJycpLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuXHRcdGlmIChkaWdpdHMubGVuZ3RoICE9PSAxMSkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnRXhwZWN0IDExLWRpZ2l0LicgfTtcclxuXHRcdH1cclxuXHJcblx0XHRkaWdpdHNbMF0gLT0gMTtcclxuXHJcblx0XHRjb25zdCBzdW0gPSBkaWdpdHMucmVkdWNlKHRoaXMuYWRkV2VpZ2h0ZWQsIDApO1xyXG5cclxuXHRcdGlmIChzdW0gJSA4OSA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRkaWdpdHNbMF0gKz0gMTtcclxuXHJcblx0XHRsZXQgc3VtMSA9IHN1bSAtIGRpZ2l0c1sxMF0gKiBTdHJpbmdGdW5jLndlaWdodHNbMTBdO1xyXG5cdFx0bGV0IGRpZ2l0ID0gU3RyaW5nRnVuYy5zdWdnZXN0TG9va3VwWzg5IC0gc3VtMSAlIDg5XTtcclxuXHRcdGlmIChkaWdpdCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Y29kZTogMixcclxuXHRcdFx0XHRtZXNzYWdlOiAnQ2hlY2tzdW0xIGlzIGluY29ycmVjdC4nXHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IHN1bTIgPSBzdW0xIC0gZGlnaXRzWzldICogU3RyaW5nRnVuYy53ZWlnaHRzWzldO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IDEwOyArK2kpIHtcclxuXHRcdFx0XHRzdW0xID0gc3VtMiArIGkgKiBTdHJpbmdGdW5jLndlaWdodHNbOV07XHJcblx0XHRcdFx0ZGlnaXQgPSBTdHJpbmdGdW5jLnN1Z2dlc3RMb29rdXBbODkgLSBzdW0xICUgODldO1xyXG5cdFx0XHRcdGlmIChkaWdpdCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRjb2RlOiAzLFxyXG5cdFx0XHRcdFx0XHRtZXNzYWdlOiAnQ2hlY2tzdW0yIGlzIGluY29ycmVjdC4nXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGxcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB2YWxpZGF0ZUFDTihhY246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfCBudWxsIHtcclxuXHRcdGlmICghYWNuKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGRpZ2l0cyA9IGFjbi5yZXBsYWNlKC9bXlxcZF0vZywgJycpLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuXHRcdGNvbnNvbGUubG9nKGRpZ2l0cyk7XHJcblx0XHRpZiAoZGlnaXRzLmxlbmd0aCAhPT0gOSkge1xyXG5cdFx0XHRyZXR1cm4geyBjb2RlOiAxLCBtZXNzYWdlOiAnRXhwZWN0IDktZGlnaXQuJyB9O1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHRjb25zdCBzdW0gPSBkaWdpdHMuc2xpY2UoMCwgOCkucmVkdWNlKFN0cmluZ0Z1bmMuYWRkQWNuV2VpZ2h0ZWQsIDApO1xyXG5cdFx0Y29uc3QgbGFzdERpZ2l0ID0gMTAgLSBzdW0gJSAxMDtcclxuXHRcdGlmIChsYXN0RGlnaXQgPT09IGRpZ2l0c1s4XSkge1xyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRjb2RlOiAyLFxyXG5cdFx0XHRtZXNzYWdlOiAnQ2hlY2tzdW0gaXMgaW5jb3JyZWN0LidcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZUVtYWlsKGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWVtYWlsKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcmUgPSAvXigoW148PigpW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XHJcblx0XHRyZXR1cm4gcmUudGVzdChlbWFpbC50b0xvd2VyQ2FzZSgpKTtcclxuXHR9XHJcbn1cclxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nRnVuYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25tY2UtZnVuYy9zcmMvX2Z1bmMvc3RyaW5nRnVuYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sVUFBVTtJQUV0Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQTRCO1FBQzFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDUCxPQUFPLEVBQUUsQ0FBQztTQUNWO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQTRCLEVBQUUsTUFBYztRQUNuRSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1AsT0FBTyxFQUFFLENBQUM7U0FDVjtRQUVELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUE0QixFQUFFLE1BQWM7UUFDekUsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNQLE9BQU8sRUFBRSxDQUFDO1NBQ1Y7UUFFRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RixPQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRDtJQUNqRixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQXVCLEVBQUUsSUFBWTtRQUMvQyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDaEIsT0FBTyxFQUFFLENBQUM7U0FDVjtRQUVELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRTtZQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQUU7UUFDeEMsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUE0QjtRQUNuRCxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1AsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBNEI7UUFDbEQsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNQLE9BQU8sQ0FBQyxDQUFDO1NBQ1Q7UUFFRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFnQztRQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDWjtRQUNELE1BQU0sRUFBRSxHQUFHLHVKQUF1SixDQUFDO1FBQ25LLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgU3RyaW5nRnVuYyB7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwIHRvIDIgbGV0dGVycy4gRm9yIEpvaG4gU21pdGgsIHJldHVybnMgSlMsIGZvciBIdWFuZywgWmlqaWFuLCByZXR1cm5zIFpIXHJcblx0ICogQHBhcmFtIHNcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0QWJicihzOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRpZiAoIXMpIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNBcnJheSA9IHMuc3BsaXQoL1tcXHMsXSsvKTtcclxuXHRcdGNvbnN0IGNvbW1hID0gcy5pbmRleE9mKCcsJykgPj0gMDtcclxuXHJcblx0XHRpZiAoc0FycmF5Lmxlbmd0aCA9PT0gMSkge1xyXG5cdFx0XHRyZXR1cm4gc0FycmF5WzBdWzBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb21tYSA/IHNBcnJheVsxXVswXSArIHNBcnJheVswXVswXSA6IHNBcnJheVswXVswXSArIHNBcnJheVsxXVswXTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgc3Vic3RyaW5nIHdpdGggbGluZSBicmVha3MgcmVwbGFjZWQgYnkgc3BhY2UuXHJcblx0ICogQHBhcmFtIHNcclxuXHQgKiBAcGFyYW0gbGVuZ3RoXHJcblx0ICogQHJldHVybnMgcmVzdWx0LCBvciBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBnZXRPbmVMaW5lRGlnZXN0KHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIGxlbmd0aDogbnVtYmVyKSB7XHJcblx0XHRpZiAoIXMpIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNzID0gcy5zdWJzdHJpbmcoMCwgbGVuZ3RoKTtcclxuXHRcdGNvbnN0IHN0ID0gc3MucmVwbGFjZShuZXcgUmVnRXhwKCdcXG4nLCAnZycpLCAnICcpICsgKChzLmxlbmd0aCA+IGxlbmd0aCkgPyAnLi4uJyA6ICcnKTtcclxuXHRcdHJldHVybiBzdC50cmltKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmUgbGluZSBicmVha3MgYW5kIGVjb25kZSB3aXRoIGVuY29kZVVSSSgpIHNvIHRoZSBkYXRhIGNvdWxkIGJlIHNhdmVkIGluIEF6dXJlIGFzIG1ldGEuIElmIHRoZSBzdHJpbmcgaXMgdHJ1bmNhdGVkLCB0aGUgcmV0dXJuIHdpbGwgaGF2ZSAuLi4gc3VmZml4LlxyXG5cdCAqIEBwYXJhbSBzXHJcblx0ICogQHBhcmFtIGxlbmd0aFxyXG5cdCAqIEByZXR1cm5zIHJlc3VsdCwgb3IgZW1wdHkgc3RyaW5nIGlmIHRoZSBpbnB1dCBpcyBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgZ2V0T25lTGluZURpZ2VzdE9mSHRtbChzOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBsZW5ndGg6IG51bWJlcikge1xyXG5cdFx0aWYgKCFzKSB7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzcyA9IHMuc3Vic3RyaW5nKDAsIGxlbmd0aCk7XHJcblx0XHRjb25zdCBzdCA9IHNzLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxuJywgJ2cnKSwgJyAnKSArICgocy5sZW5ndGggPiBsZW5ndGgpID8gJy4uLicgOiAnJyk7XHJcblx0XHRyZXR1cm4gZW5jb2RlVVJJKHN0LnRyaW0oKSk7IC8vbmVlZCB0byBlbmNvZGUgaW4gb3JkZXIgdG8gc2F2ZSBhcyBtZXRhIGluIEF6dXJlLlxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFkIG51bWJlciB3aXRoIHplcm9cclxuXHQgKiBAcGFyYW0gbnVtIFxyXG5cdCAqIEBwYXJhbSBzaXplIFxyXG5cdCAqIEByZXR1cm5zIFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBwYWQobnVtOiBudW1iZXIgfCB1bmRlZmluZWQsIHNpemU6IG51bWJlcik6IHN0cmluZyB7XHJcblx0XHRpZiAobnVtID09IG51bGwpIHtcclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBzID0gbnVtICsgJyc7XHJcblx0XHR3aGlsZSAocy5sZW5ndGggPCBzaXplKSB7IHMgPSAnMCcgKyBzOyB9XHJcblx0XHRyZXR1cm4gcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIGdldCBwbGFpbiB0ZXh0IG9mIEhUTUwgY29udGVudFxyXG5cdCAqIEBwYXJhbSBzXHJcblx0ICogQHJldHVybnMgcmVzdWx0LiBJZiBpbnB1dCBpcyBlbXB0eSwgbnVsbCwgb3IgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHNhbWUuXHJcblx0ICovXHJcblx0c3RhdGljIGdldEh0bWxQbGFpblRleHQoczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xyXG5cdFx0aWYgKCFzKSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcclxuXHRcdGNvbnN0IGh0bWwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHMsICd0ZXh0L2h0bWwnKTtcclxuXHRcdHJldHVybiBodG1sLmJvZHkudGV4dENvbnRlbnQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBzXHJcblx0ICogQHJldHVybnMgcmVzdWx0LiBJZiBpbnB1dCBpcyBlbXB0eSwgbnVsbCwgb3IgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHNhbWUuXHJcblx0ICovXHJcblx0c3RhdGljIGNhcGl0YWxpemVXb3JkcyhzOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7IC8vIHRoYW5rcyB0byBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzMyODExL2NhcGl0YWxpemUtd29yZHMtaW4tc3RyaW5nXHJcblx0XHRpZiAoIXMpIHtcclxuXHRcdFx0cmV0dXJuIHM7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHMucmVwbGFjZSgvKD86XnxcXHMpXFxTL2csIChhKSA9PiBhLnRvVXBwZXJDYXNlKCkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHZhbGlkYXRlRW1haWwoZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuXHRcdGlmICghZW1haWwpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRjb25zdCByZSA9IC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFxdKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLztcclxuXHRcdHJldHVybiByZS50ZXN0KGVtYWlsLnRvTG93ZXJDYXNlKCkpO1xyXG5cdH1cclxufVxyXG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { v4 as uuid } from 'uuid'; //todo: somehow the system could not recognize v5.
2
+ // import { v5 as uuid } from 'uuid/v5 causes ERROR in src / app / _func / helperFunc.ts(1, 10): error TS2305: Module '"C:/VSProjects/ApsCloudTrunk/APS.WebPos.NGCli/NGSource/node_modules/@types/uuid/v5"' has no exported member 'v5'
3
+ // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/28439
4
+ export class UuidFunc {
5
+ /**
6
+ * 36 UUID string including 4 hyphens. MySql stores GUID as 36 bytes anyway rather than 16bytes.
7
+ */
8
+ static newUUID() {
9
+ // return uuid('medilink.com.au', 'apscloud');
10
+ return uuid();
11
+ }
12
+ static newUUIDStartWith0() {
13
+ const s = uuid();
14
+ return '0000' + s.slice(4);
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXVpZEZ1bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ubWNlLWZ1bmMvc3JjL19mdW5jL3V1aWRGdW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsbURBQW1EO0FBQ3RGLHVPQUF1TztBQUN2TyxnRUFBZ0U7QUFFaEUsTUFBTSxPQUFPLFFBQVE7SUFDcEI7O09BRUc7SUFDSCxNQUFNLENBQUMsT0FBTztRQUNmLCtDQUErQztRQUM3QyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUI7UUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDakIsT0FBTyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7IC8vdG9kbzogc29tZWhvdyAgdGhlIHN5c3RlbSBjb3VsZCBub3QgcmVjb2duaXplIHY1LlxyXG4vLyBpbXBvcnQgeyB2NSBhcyB1dWlkIH0gZnJvbSAndXVpZC92NSBjYXVzZXMgRVJST1IgaW4gc3JjIC8gYXBwIC8gX2Z1bmMgLyBoZWxwZXJGdW5jLnRzKDEsIDEwKTogZXJyb3IgVFMyMzA1OiBNb2R1bGUgJ1wiQzovVlNQcm9qZWN0cy9BcHNDbG91ZFRydW5rL0FQUy5XZWJQb3MuTkdDbGkvTkdTb3VyY2Uvbm9kZV9tb2R1bGVzL0B0eXBlcy91dWlkL3Y1XCInIGhhcyBubyBleHBvcnRlZCBtZW1iZXIgJ3Y1J1xyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZC9wdWxsLzI4NDM5XHJcblxyXG5leHBvcnQgY2xhc3MgVXVpZEZ1bmMge1xyXG5cdC8qKlxyXG5cdCAqIDM2IFVVSUQgc3RyaW5nIGluY2x1ZGluZyA0IGh5cGhlbnMuIE15U3FsIHN0b3JlcyBHVUlEIGFzIDM2IGJ5dGVzIGFueXdheSByYXRoZXIgdGhhbiAxNmJ5dGVzLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBuZXdVVUlEKCk6IHN0cmluZyB7XHJcbi8vXHRcdHJldHVybiB1dWlkKCdtZWRpbGluay5jb20uYXUnLCAnYXBzY2xvdWQnKTtcclxuXHRcdHJldHVybiB1dWlkKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmV3VVVJRFN0YXJ0V2l0aDAoKSB7XHJcblx0XHRjb25zdCBzID0gdXVpZCgpO1xyXG5cdFx0cmV0dXJuICcwMDAwJyArIHMuc2xpY2UoNCk7XHJcblx0fVxyXG59XHJcbiJdfQ==