@oathompsonjones/mini-games 1.0.1 → 1.0.3
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/.github/workflows/lint-and-test.yml +52 -0
- package/.github/workflows/publish.yml +36 -0
- package/build/base/board.d.ts +17 -58
- package/build/base/board.js +23 -75
- package/build/base/controller.d.ts +16 -34
- package/build/base/controller.js +27 -39
- package/build/bitBoard/bitBoard.d.ts +8 -33
- package/build/bitBoard/bitBoard.js +7 -12
- package/build/bitBoard/intBitBoard.d.ts +65 -4
- package/build/bitBoard/intBitBoard.js +66 -5
- package/build/bitBoard/longInt.d.ts +2 -32
- package/build/bitBoard/longInt.js +17 -25
- package/build/bitBoard/longIntBitBoard.d.ts +65 -7
- package/build/bitBoard/longIntBitBoard.js +72 -4
- package/build/console.d.ts +1 -4
- package/build/console.js +4 -7
- package/build/games/connect4/board.d.ts +9 -0
- package/build/games/connect4/board.js +10 -1
- package/build/games/connect4/controller.d.ts +18 -0
- package/build/games/connect4/controller.js +23 -1
- package/build/games/tictactoe/board.d.ts +3 -0
- package/build/games/tictactoe/board.js +4 -1
- package/build/games/tictactoe/controller.d.ts +20 -0
- package/build/games/tictactoe/controller.js +25 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -1
- package/eslint.config.js +3 -0
- package/package.json +6 -8
- package/.eslintrc +0 -6
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* Provides non-static equivalents to the above operations, which are carried out in place.
|
|
5
5
|
*/
|
|
6
6
|
export default class LongInt {
|
|
7
|
+
/** Holds the array of 32-bit numbers. */
|
|
8
|
+
data;
|
|
7
9
|
/**
|
|
8
|
-
*
|
|
10
|
+
* Creates an instance of LongInt.
|
|
11
|
+
* @param args The arguments to construct the `LongInt` out of.
|
|
9
12
|
*/
|
|
10
|
-
data;
|
|
11
13
|
constructor(args) {
|
|
12
14
|
if (args instanceof Array || args instanceof Uint32Array)
|
|
13
15
|
this.data = new Uint32Array(args);
|
|
@@ -16,15 +18,12 @@ export default class LongInt {
|
|
|
16
18
|
else
|
|
17
19
|
this.data = new Uint32Array(args).fill(0);
|
|
18
20
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Gets the number of 32-bit words which make the LongInt.
|
|
21
|
-
*/
|
|
21
|
+
/** Gets the number of 32-bit words which make the LongInt. */
|
|
22
22
|
get wordCount() {
|
|
23
23
|
return this.data.length;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
26
|
* Carries out a bitwise and (&) operation on the two numbers.
|
|
27
|
-
*
|
|
28
27
|
* @param left The left number.
|
|
29
28
|
* @param right The right number.
|
|
30
29
|
* @returns The result of left & right.
|
|
@@ -34,7 +33,6 @@ export default class LongInt {
|
|
|
34
33
|
}
|
|
35
34
|
/**
|
|
36
35
|
* Carries out a bitwise or (|) operation on the two numbers.
|
|
37
|
-
*
|
|
38
36
|
* @param left The left number.
|
|
39
37
|
* @param right The right number.
|
|
40
38
|
* @returns The result of left | right.
|
|
@@ -44,7 +42,6 @@ export default class LongInt {
|
|
|
44
42
|
}
|
|
45
43
|
/**
|
|
46
44
|
* Carries out a bitwise xor (^) operation on the two numbers.
|
|
47
|
-
*
|
|
48
45
|
* @param left The left number.
|
|
49
46
|
* @param right The right number.
|
|
50
47
|
* @returns The result of left ^ right.
|
|
@@ -54,7 +51,6 @@ export default class LongInt {
|
|
|
54
51
|
}
|
|
55
52
|
/**
|
|
56
53
|
* Carries out a bitwise not (~) operation on the number.
|
|
57
|
-
*
|
|
58
54
|
* @param number The number to negate.
|
|
59
55
|
* @returns The result of ~number.
|
|
60
56
|
*/
|
|
@@ -63,7 +59,6 @@ export default class LongInt {
|
|
|
63
59
|
}
|
|
64
60
|
/**
|
|
65
61
|
* Carries out a bitwise left shift (<<) operation on the number.
|
|
66
|
-
*
|
|
67
62
|
* @param number The number to shift.
|
|
68
63
|
* @param shiftAmount The number of places to shift.
|
|
69
64
|
* @returns The result of number << shiftAmount.
|
|
@@ -73,7 +68,6 @@ export default class LongInt {
|
|
|
73
68
|
}
|
|
74
69
|
/**
|
|
75
70
|
* Carries out a bitwise unsigned right shift (>>>) operation on the number.
|
|
76
|
-
*
|
|
77
71
|
* @param number The number to shift.
|
|
78
72
|
* @param shiftAmount The number of places to shift.
|
|
79
73
|
* @returns The result of number >>> shiftAmount.
|
|
@@ -83,7 +77,6 @@ export default class LongInt {
|
|
|
83
77
|
}
|
|
84
78
|
/**
|
|
85
79
|
* Carries out a bitwise arithmetic right shift (>>) operation on the number.
|
|
86
|
-
*
|
|
87
80
|
* @param number The number to shift.
|
|
88
81
|
* @param shiftAmount The number of places to shift.
|
|
89
82
|
* @returns The result of number >> shiftAmount.
|
|
@@ -93,7 +86,6 @@ export default class LongInt {
|
|
|
93
86
|
}
|
|
94
87
|
/**
|
|
95
88
|
* Determines whether or not 2 LongInts have equal values.
|
|
96
|
-
*
|
|
97
89
|
* @param longInt1 The first LongInt.
|
|
98
90
|
* @param longInt2 The second LongInt (can also be a number).
|
|
99
91
|
* @returns Whether or not they are equal.
|
|
@@ -101,12 +93,17 @@ export default class LongInt {
|
|
|
101
93
|
static equals(longInt1, longInt2) {
|
|
102
94
|
return longInt1.equals(longInt2);
|
|
103
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Creates a LongInt with the same dimensions as this one, using the given input.
|
|
98
|
+
* @param longInt The LongInt to match the dimensions of.
|
|
99
|
+
* @param value The value of the LongInt.
|
|
100
|
+
* @returns The new LongInt.
|
|
101
|
+
*/
|
|
104
102
|
static getMatchingLongInt(longInt, value = 0) {
|
|
105
103
|
return new LongInt(longInt).getMatchingLongInt(value);
|
|
106
104
|
}
|
|
107
105
|
/**
|
|
108
106
|
* Carries out an in-place bitwise and (&) operation on this number and the one provided.
|
|
109
|
-
*
|
|
110
107
|
* @param right The right number.
|
|
111
108
|
* @returns The new value of this & right.
|
|
112
109
|
*/
|
|
@@ -118,7 +115,6 @@ export default class LongInt {
|
|
|
118
115
|
}
|
|
119
116
|
/**
|
|
120
117
|
* Carries out an in-place bitwise or (|) operation on this number and the one provided.
|
|
121
|
-
*
|
|
122
118
|
* @param right The right number.
|
|
123
119
|
* @returns The new value of this | right.
|
|
124
120
|
*/
|
|
@@ -130,7 +126,6 @@ export default class LongInt {
|
|
|
130
126
|
}
|
|
131
127
|
/**
|
|
132
128
|
* Carries out an in-place bitwise xor (^) operation on this number and the one provided.
|
|
133
|
-
*
|
|
134
129
|
* @param right The right number.
|
|
135
130
|
* @returns The new value of this ^ right.
|
|
136
131
|
*/
|
|
@@ -142,7 +137,6 @@ export default class LongInt {
|
|
|
142
137
|
}
|
|
143
138
|
/**
|
|
144
139
|
* Carries out an in-place bitwise not (~) operation on this nurmbe.
|
|
145
|
-
*
|
|
146
140
|
* @returns The result of ~this.
|
|
147
141
|
*/
|
|
148
142
|
not() {
|
|
@@ -152,7 +146,6 @@ export default class LongInt {
|
|
|
152
146
|
}
|
|
153
147
|
/**
|
|
154
148
|
* Carries out an in-place bitwise left shift (<<) operation on this number.
|
|
155
|
-
*
|
|
156
149
|
* @param shiftAmount The number of places to shift.
|
|
157
150
|
* @returns The result of this << shiftAmount.
|
|
158
151
|
*/
|
|
@@ -170,7 +163,6 @@ export default class LongInt {
|
|
|
170
163
|
}
|
|
171
164
|
/**
|
|
172
165
|
* Carries out an in-place bitwise unsigned right shift (>>>) operation on this number.
|
|
173
|
-
*
|
|
174
166
|
* @param shiftAmount The number of places to shift.
|
|
175
167
|
* @returns The result of this >>> shiftAmount.
|
|
176
168
|
*/
|
|
@@ -188,7 +180,6 @@ export default class LongInt {
|
|
|
188
180
|
}
|
|
189
181
|
/**
|
|
190
182
|
* Carries out an in-place bitwise arithmetic right shift (>>) operation on this number.
|
|
191
|
-
*
|
|
192
183
|
* @param shiftAmount The number of places to shift.
|
|
193
184
|
* @returns The result of this >> shiftAmount.
|
|
194
185
|
*/
|
|
@@ -206,7 +197,6 @@ export default class LongInt {
|
|
|
206
197
|
}
|
|
207
198
|
/**
|
|
208
199
|
* Determines whether or not this LongInt has equal value to another.
|
|
209
|
-
*
|
|
210
200
|
* @param value The LongInt or number to compare to.
|
|
211
201
|
* @returns Whether or not they are equal.
|
|
212
202
|
*/
|
|
@@ -223,7 +213,6 @@ export default class LongInt {
|
|
|
223
213
|
}
|
|
224
214
|
/**
|
|
225
215
|
* Returns a string representation of the LongInt.
|
|
226
|
-
*
|
|
227
216
|
* @param type The base of the string to print.
|
|
228
217
|
* @returns The string representation.
|
|
229
218
|
*/
|
|
@@ -245,6 +234,11 @@ export default class LongInt {
|
|
|
245
234
|
.map((num) => num.toString(type).padStart(padLength, "0"))
|
|
246
235
|
.join(" ");
|
|
247
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Creates a LongInt with the same dimensions as this one, using the given input.
|
|
239
|
+
* @param value The value of the LongInt.
|
|
240
|
+
* @returns The new LongInt.
|
|
241
|
+
*/
|
|
248
242
|
getMatchingLongInt(value = 0) {
|
|
249
243
|
let integers = [];
|
|
250
244
|
switch (true) {
|
|
@@ -280,7 +274,6 @@ export default class LongInt {
|
|
|
280
274
|
}
|
|
281
275
|
/**
|
|
282
276
|
* Shifts the 32-bit number array to the right.
|
|
283
|
-
*
|
|
284
277
|
* @param count How many places to shift the array.
|
|
285
278
|
* @param fillValue The value to fill empty spaces with.
|
|
286
279
|
* @returns The new value of this.
|
|
@@ -294,7 +287,6 @@ export default class LongInt {
|
|
|
294
287
|
}
|
|
295
288
|
/**
|
|
296
289
|
* Shifts the 32-bit number array to the left.
|
|
297
|
-
*
|
|
298
290
|
* @param count How many places to shift the array.
|
|
299
291
|
* @param fillValue The value to fill empty spaces with.
|
|
300
292
|
* @returns The new value of this.
|
|
@@ -307,4 +299,4 @@ export default class LongInt {
|
|
|
307
299
|
return this;
|
|
308
300
|
}
|
|
309
301
|
}
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXRCb2FyZC9sb25nSW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQU87SUFDeEI7O09BRUc7SUFDYSxJQUFJLENBQWM7SUFvQmxDLFlBQW1CLElBQStDO1FBQzlELElBQUksSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksV0FBVztZQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pDLElBQUksSUFBSSxZQUFZLE9BQU87WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRXZDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQWEsRUFBRSxLQUF1QjtRQUNwRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFhLEVBQUUsS0FBdUI7UUFDbkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBYSxFQUFFLEtBQXVCO1FBQ3BELE9B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QUcsQ0FBQztZQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFvQixDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTdHJpbmdUeXBlID0gMiB8IDEwIHwgMTY7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGxvbmcgaW50ZWdlciB1c2luZyBhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycy5cbiAqIFByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFsdWVzLlxuICogUHJvdmlkZXMgbm9uLXN0YXRpYyBlcXVpdmFsZW50cyB0byB0aGUgYWJvdmUgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGNhcnJpZWQgb3V0IGluIHBsYWNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb25nSW50IHtcbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgYXJyYXkgb2YgMzItYml0IG51bWJlcnMuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IFVpbnQzMkFycmF5O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlcyBBIGxpdHRsZS1lbmRpYW4gYXJyYXkgb2YgMzItYml0IG51bWJlcnMgdG8gZmlsbCB0aGUgYExvbmdJbnRgLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZXM6IG51bWJlcltdIHwgVWludDMyQXJyYXkpO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiAzMi1iaXQgbnVtYmVycyB0byBjb25zdHJ1Y3QgdGhlIGBMb25nSW50YCBvdXQgb2YuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGxlbmd0aDogbnVtYmVyKTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExvbmdJbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9uZ0ludCBBIGBMb25nSW50YCBvYmplY3QgdG8gZHVwbGljYXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihsb25nSW50OiBMb25nSW50KTtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJnczogTG9uZ0ludCB8IG51bWJlcltdIHwgVWludDMyQXJyYXkgfCBudW1iZXIpIHtcbiAgICAgICAgaWYgKGFyZ3MgaW5zdGFuY2VvZiBBcnJheSB8fCBhcmdzIGluc3RhbmNlb2YgVWludDMyQXJyYXkpXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoYXJncyk7XG4gICAgICAgIGVsc2UgaWYgKGFyZ3MgaW5zdGFuY2VvZiBMb25nSW50KVxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQzMkFycmF5KGFyZ3MuZGF0YSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50MzJBcnJheShhcmdzKS5maWxsKDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgd2hpY2ggbWFrZSB0aGUgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHdvcmRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgYW5kICgmKSBvcGVyYXRpb24gb24gdGhlIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxlZnQgVGhlIGxlZnQgbnVtYmVyLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbGVmdCAmIHJpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYW5kKGxlZnQ6IExvbmdJbnQsIHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChsZWZ0KS5hbmQocmlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBvciAofCkgb3BlcmF0aW9uIG9uIHRoZSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgfCByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG9yKGxlZnQ6IExvbmdJbnQsIHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChsZWZ0KS5vcihyaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIHhvciAoXikgb3BlcmF0aW9uIG9uIHRoZSB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgXiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHhvcihsZWZ0OiBMb25nSW50LCByaWdodDogTG9uZ0ludCB8IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobGVmdCkueG9yKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2Ugbm90ICh+KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXIgVGhlIG51bWJlciB0byBuZWdhdGUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB+bnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbm90KG51bWJlcjogTG9uZ0ludCk6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobnVtYmVyKS5ub3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgbGVmdCBzaGlmdCAoPDwpIG9wZXJhdGlvbiBvbiB0aGUgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIHNoaWZ0LlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIG51bWJlciA8PCBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGxlZnRTaGlmdChudW1iZXI6IExvbmdJbnQsIHNoaWZ0QW1vdW50OiBudW1iZXIpOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KG51bWJlcikubGVmdFNoaWZ0KHNoaWZ0QW1vdW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgdW5zaWduZWQgcmlnaHQgc2hpZnQgKD4+Pikgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyID4+PiBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJpZ2h0U2hpZnQobnVtYmVyOiBMb25nSW50LCBzaGlmdEFtb3VudDogbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChudW1iZXIpLnJpZ2h0U2hpZnQoc2hpZnRBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyID4+IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgYXJpdGhtZXRpY1JpZ2h0U2hpZnQobnVtYmVyOiBMb25nSW50LCBzaGlmdEFtb3VudDogbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChudW1iZXIpLmFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IDIgTG9uZ0ludHMgaGF2ZSBlcXVhbCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9uZ0ludDEgVGhlIGZpcnN0IExvbmdJbnQuXG4gICAgICogQHBhcmFtIGxvbmdJbnQyIFRoZSBzZWNvbmQgTG9uZ0ludCAoY2FuIGFsc28gYmUgYSBudW1iZXIpLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGVxdWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZXF1YWxzKGxvbmdJbnQxOiBMb25nSW50LCBsb25nSW50MjogTG9uZ0ludCB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbG9uZ0ludDEuZXF1YWxzKGxvbmdJbnQyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgTG9uZ0ludCBvYmplY3QgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWU6IExvbmdJbnQpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZXMgQW4gYXJyYXkgb2YgMzItYml0IG51bWJlcnMgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWVzOiBudW1iZXJbXSB8IFVpbnQzMkFycmF5KTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZSwgc3RyZXRjaGVkIG9yIHRydW5jYXRlZCB0byB0aGUgc2FtZSBzaXplIGFzIHRoaXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG9uZ0ludCBUaGUgTG9uZ0ludCB0byBtYXRjaCB0aGUgZGltZW5zaW9ucyBvZi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSAzMi1iaXQgbnVtYmVyIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQsIHZhbHVlPzogbnVtYmVyKTogTG9uZ0ludDtcbiAgICBwdWJsaWMgc3RhdGljIGdldE1hdGNoaW5nTG9uZ0ludChsb25nSW50OiBMb25nSW50LCB2YWx1ZTogTG9uZ0ludCB8IG51bWJlcltdIHwgVWludDMyQXJyYXkgfCBudW1iZXIgPSAwKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChsb25nSW50KS5nZXRNYXRjaGluZ0xvbmdJbnQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgYW5kICgmKSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgJiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJpZ2h0TG9uZ0ludCA9IHRoaXMuZ2V0TWF0Y2hpbmdMb25nSW50KHJpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gJj0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIG9yICh8KSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgfCByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3IocmlnaHQ6IExvbmdJbnQgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgcmlnaHRMb25nSW50ID0gdGhpcy5nZXRNYXRjaGluZ0xvbmdJbnQocmlnaHQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSB8PSByaWdodExvbmdJbnQuZGF0YVtpXSE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgXiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgeG9yKHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJpZ2h0TG9uZ0ludCA9IHRoaXMuZ2V0TWF0Y2hpbmdMb25nSW50KHJpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gXj0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIG5vdCAofikgb3BlcmF0aW9uIG9uIHRoaXMgbnVybWJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB+dGhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbm90KCk6IHRoaXMge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IH50aGlzLmRhdGFbaV0hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIGxlZnQgc2hpZnQgKDw8KSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzIDw8IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZWZ0U2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID4gMzEpXG4gICAgICAgICAgICB0aGlzLnNoaWZ0QXJyYXlSaWdodChNYXRoLmZsb29yKHNoaWZ0QW1vdW50IC8gMzIpKTtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSAzMikge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlU2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCAlIDMyO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hIDw8IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgLSAxXSEgPj4+IDMyIC0gc2luZ2xlU2hpZnRBbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSB1bnNpZ25lZCByaWdodCBzaGlmdCAoPj4+KSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzID4+PiBzaGlmdEFtb3VudC5cbiAgICAqL1xuICAgIHB1YmxpYyByaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChzaGlmdEFtb3VudCAhPT0gMzIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgJSAzMjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IHRoaXMuZGF0YVtpXSEgPj4+IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgKyAxXSEgPDwgMzIgLSBzaW5nbGVTaGlmdEFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPiAzMSlcbiAgICAgICAgICAgIHRoaXMuc2hpZnRBcnJheUxlZnQoTWF0aC5mbG9vcihzaGlmdEFtb3VudCAvIDMyKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgYXJpdGhtZXRpYyByaWdodCBzaGlmdCAoPj4pIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoaXMgPj4gc2hpZnRBbW91bnQuXG4gICAgICovXG4gICAgcHVibGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIGlmIChzaGlmdEFtb3VudCAhPT0gMzIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgJSAzMjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IHRoaXMuZGF0YVtpXSEgPj4gc2luZ2xlU2hpZnRBbW91bnQgfCB0aGlzLmRhdGFbaSArIDFdISA8PCAzMiAtIHNpbmdsZVNoaWZ0QW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGlmdEFtb3VudCA+IDMxKVxuICAgICAgICAgICAgdGhpcy5zaGlmdEFycmF5TGVmdChNYXRoLmZsb29yKHNoaWZ0QW1vdW50IC8gMzIpLCB+MCA+Pj4gMCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhpcyBMb25nSW50IGhhcyBlcXVhbCB2YWx1ZSB0byBhbm90aGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBMb25nSW50IG9yIG51bWJlciB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGVxdWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExvbmdJbnQgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbG9uZ0ludCA9IHZhbHVlIGluc3RhbmNlb2YgTG9uZ0ludCA/IHZhbHVlIDogbmV3IExvbmdJbnQoW3ZhbHVlXSk7XG4gICAgICAgIGNvbnN0IGxvbmdlc3RMb25nSW50ID0gdGhpcy5kYXRhLmxlbmd0aCA+IGxvbmdJbnQuZGF0YS5sZW5ndGggPyB0aGlzIDogbG9uZ0ludDtcbiAgICAgICAgY29uc3QgbG9uZ0ludDEgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludChsb25nZXN0TG9uZ0ludCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IGxvbmdJbnQyID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQobG9uZ2VzdExvbmdJbnQsIGxvbmdJbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvbmdlc3RMb25nSW50LmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsb25nSW50MS5kYXRhW2ldICE9PSBsb25nSW50Mi5kYXRhW2ldKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nSW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIGJhc2Ugb2YgdGhlIHN0cmluZyB0byBwcmludC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b1N0cmluZyh0eXBlOiBTdHJpbmdUeXBlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHBhZExlbmd0aCA9IDA7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHBhZExlbmd0aCA9IDMyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICBwYWRMZW5ndGggPSAxMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgICAgICAgcGFkTGVuZ3RoID0gODtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZGF0YV1cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKG51bSkgPT4gbnVtLnRvU3RyaW5nKHR5cGUpLnBhZFN0YXJ0KHBhZExlbmd0aCwgXCIwXCIpKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvbmdJbnQgVGhlIExvbmdJbnQgb2JqZWN0IHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZXMgQW4gYXJyYXkgb2YgMzItYml0IG51bWJlcnMgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNYXRjaGluZ0xvbmdJbnQodmFsdWVzOiBudW1iZXJbXSB8IFVpbnQzMkFycmF5KTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZSwgc3RyZXRjaGVkIG9yIHRydW5jYXRlZCB0byB0aGUgc2FtZSBzaXplIGFzIHRoaXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgQSAzMi1iaXQgbnVtYmVyIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlPzogbnVtYmVyKTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgTG9uZ0ludCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvbnMgYXMgdGhpcyBvbmUsIHVzaW5nIHRoZSBnaXZlbiBpbnB1dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIExvbmdJbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlcik6IExvbmdJbnQ7XG4gICAgcHJpdmF0ZSBnZXRNYXRjaGluZ0xvbmdJbnQodmFsdWU6IExvbmdJbnQgfCBudW1iZXJbXSB8IFVpbnQzMkFycmF5IHwgbnVtYmVyID0gMCk6IExvbmdJbnQge1xuICAgICAgICBsZXQgaW50ZWdlcnM6IG51bWJlcltdIHwgVWludDMyQXJyYXkgPSBbXTtcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgVWludDMyQXJyYXk6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gWy4uLnZhbHVlLCAuLi5BcnJheTxudW1iZXI+KHRoaXMuZGF0YS5sZW5ndGggLSB2YWx1ZS5sZW5ndGgpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB2YWx1ZSBpbnN0YW5jZW9mIExvbmdJbnQ6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmRhdGEubGVuZ3RoIDwgdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbLi4udmFsdWUuZGF0YSwgLi4uQXJyYXk8bnVtYmVyPih0aGlzLmRhdGEubGVuZ3RoIC0gdmFsdWUuZGF0YS5sZW5ndGgpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmRhdGEubGVuZ3RoID4gdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZS5kYXRhLnNsaWNlKDAsIHRoaXMuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZS5kYXRhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5OlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IFsuLi52YWx1ZSwgLi4uQXJyYXk8bnVtYmVyPih0aGlzLmRhdGEubGVuZ3RoIC0gdmFsdWUubGVuZ3RoKS5maWxsKDApXTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlLnNsaWNlKDAsIHRoaXMuZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbdmFsdWUsIC4uLkFycmF5PG51bWJlcj4odGhpcy5kYXRhLmxlbmd0aCAtIDEpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChpbnRlZ2Vycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hpZnRzIHRoZSAzMi1iaXQgbnVtYmVyIGFycmF5IHRvIHRoZSByaWdodC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb3VudCBIb3cgbWFueSBwbGFjZXMgdG8gc2hpZnQgdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBmaWxsVmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZW1wdHkgc3BhY2VzIHdpdGguXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hpZnRBcnJheVJpZ2h0KGNvdW50OiBudW1iZXIsIGZpbGxWYWx1ZTogbnVtYmVyID0gMCk6IHRoaXMge1xuICAgICAgICBpZiAoY291bnQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnRBcnJheUxlZnQoLWNvdW50LCBmaWxsVmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5kYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICAgICAgdGhpcy5kYXRhW2ldID0gdGhpcy5kYXRhW2kgLSBjb3VudF0gPz8gZmlsbFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaGlmdHMgdGhlIDMyLWJpdCBudW1iZXIgYXJyYXkgdG8gdGhlIGxlZnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY291bnQgSG93IG1hbnkgcGxhY2VzIHRvIHNoaWZ0IHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0gZmlsbFZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGVtcHR5IHNwYWNlcyB3aXRoLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgdmFsdWUgb2YgdGhpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNoaWZ0QXJyYXlMZWZ0KGNvdW50OiBudW1iZXIsIGZpbGxWYWx1ZTogbnVtYmVyID0gMCk6IHRoaXMge1xuICAgICAgICBpZiAoY291bnQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnRBcnJheVJpZ2h0KC1jb3VudCwgZmlsbFZhbHVlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaSArIGNvdW50XSA/PyBmaWxsVmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaXRCb2FyZC9sb25nSW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQU87SUFDeEIseUNBQXlDO0lBQ3pCLElBQUksQ0FBYztJQWlCbEM7OztPQUdHO0lBQ0gsWUFBbUIsSUFBK0M7UUFDOUQsSUFBSSxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWSxXQUFXO1lBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakMsSUFBSSxJQUFJLFlBQVksT0FBTztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFFdkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQWEsRUFBRSxLQUF1QjtRQUNwRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQWEsRUFBRSxLQUF1QjtRQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQWEsRUFBRSxL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QixDQUFDO1FBQ3hELElBQUksS0FBSyxHQUFHLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEQsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUM7UUFFckQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFvQixDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUVyRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTdHJpbmdUeXBlID0gMiB8IDEwIHwgMTY7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGxvbmcgaW50ZWdlciB1c2luZyBhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycy5cbiAqIFByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMgd2hpY2ggZG8gbm90IG1vZGlmeSB0aGUgb3JpZ2luYWwgdmFsdWVzLlxuICogUHJvdmlkZXMgbm9uLXN0YXRpYyBlcXVpdmFsZW50cyB0byB0aGUgYWJvdmUgb3BlcmF0aW9ucywgd2hpY2ggYXJlIGNhcnJpZWQgb3V0IGluIHBsYWNlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb25nSW50IHtcbiAgICAvKiogSG9sZHMgdGhlIGFycmF5IG9mIDMyLWJpdCBudW1iZXJzLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBVaW50MzJBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludC5cbiAgICAgKiBAcGFyYW0gdmFsdWVzIEEgbGl0dGxlLWVuZGlhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycyB0byBmaWxsIHRoZSBgTG9uZ0ludGAuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlczogbnVtYmVyW10gfCBVaW50MzJBcnJheSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50LlxuICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiAzMi1iaXQgbnVtYmVycyB0byBjb25zdHJ1Y3QgdGhlIGBMb25nSW50YCBvdXQgb2YuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGxlbmd0aDogbnVtYmVyKTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExvbmdJbnQuXG4gICAgICogQHBhcmFtIGxvbmdJbnQgQSBgTG9uZ0ludGAgb2JqZWN0IHRvIGR1cGxpY2F0ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobG9uZ0ludDogTG9uZ0ludCk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50LlxuICAgICAqIEBwYXJhbSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gY29uc3RydWN0IHRoZSBgTG9uZ0ludGAgb3V0IG9mLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhcmdzOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlcikge1xuICAgICAgICBpZiAoYXJncyBpbnN0YW5jZW9mIEFycmF5IHx8IGFyZ3MgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50MzJBcnJheShhcmdzKTtcbiAgICAgICAgZWxzZSBpZiAoYXJncyBpbnN0YW5jZW9mIExvbmdJbnQpXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoYXJncy5kYXRhKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQzMkFycmF5KGFyZ3MpLmZpbGwoMCk7XG4gICAgfVxuXG4gICAgLyoqIEdldHMgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgd2hpY2ggbWFrZSB0aGUgTG9uZ0ludC4gKi9cbiAgICBwdWJsaWMgZ2V0IHdvcmRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgYW5kICgmKSBvcGVyYXRpb24gb24gdGhlIHR3byBudW1iZXJzLlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgJiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFuZChsZWZ0OiBMb25nSW50LCByaWdodDogTG9uZ0ludCB8IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobGVmdCkuYW5kKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2Ugb3IgKHwpIG9wZXJhdGlvbiBvbiB0aGUgdHdvIG51bWJlcnMuXG4gICAgICogQHBhcmFtIGxlZnQgVGhlIGxlZnQgbnVtYmVyLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbGVmdCB8IHJpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgb3IobGVmdDogTG9uZ0ludCwgcmlnaHQ6IExvbmdJbnQgfCBudW1iZXIpOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KGxlZnQpLm9yKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24gb24gdGhlIHR3byBudW1iZXJzLlxuICAgICAqIEBwYXJhbSBsZWZ0IFRoZSBsZWZ0IG51bWJlci5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIGxlZnQgXiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHhvcihsZWZ0OiBMb25nSW50LCByaWdodDogTG9uZ0ludCB8IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobGVmdCkueG9yKHJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2Ugbm90ICh+KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gbmVnYXRlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2Ygfm51bWJlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG5vdChudW1iZXI6IExvbmdJbnQpOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KG51bWJlcikubm90KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIGxlZnQgc2hpZnQgKDw8KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyIDw8IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgbGVmdFNoaWZ0KG51bWJlcjogTG9uZ0ludCwgc2hpZnRBbW91bnQ6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobnVtYmVyKS5sZWZ0U2hpZnQoc2hpZnRBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSB1bnNpZ25lZCByaWdodCBzaGlmdCAoPj4+KSBvcGVyYXRpb24gb24gdGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gbnVtYmVyIFRoZSBudW1iZXIgdG8gc2hpZnQuXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IFRoZSBudW1iZXIgb2YgcGxhY2VzIHRvIHNoaWZ0LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgbnVtYmVyID4+PiBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJpZ2h0U2hpZnQobnVtYmVyOiBMb25nSW50LCBzaGlmdEFtb3VudDogbnVtYmVyKTogTG9uZ0ludCB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludChudW1iZXIpLnJpZ2h0U2hpZnQoc2hpZnRBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uIG9uIHRoZSBudW1iZXIuXG4gICAgICogQHBhcmFtIG51bWJlciBUaGUgbnVtYmVyIHRvIHNoaWZ0LlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIG51bWJlciA+PiBzaGlmdEFtb3VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KG51bWJlcjogTG9uZ0ludCwgc2hpZnRBbW91bnQ6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnQobnVtYmVyKS5hcml0aG1ldGljUmlnaHRTaGlmdChzaGlmdEFtb3VudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCAyIExvbmdJbnRzIGhhdmUgZXF1YWwgdmFsdWVzLlxuICAgICAqIEBwYXJhbSBsb25nSW50MSBUaGUgZmlyc3QgTG9uZ0ludC5cbiAgICAgKiBAcGFyYW0gbG9uZ0ludDIgVGhlIHNlY29uZCBMb25nSW50IChjYW4gYWxzbyBiZSBhIG51bWJlcikuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhleSBhcmUgZXF1YWwuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlcXVhbHMobG9uZ0ludDE6IExvbmdJbnQsIGxvbmdJbnQyOiBMb25nSW50IHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBsb25nSW50MS5lcXVhbHMobG9uZ0ludDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgTG9uZ0ludCBvYmplY3QgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWU6IExvbmdJbnQpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKiBAcGFyYW0gbG9uZ0ludCBUaGUgTG9uZ0ludCB0byBtYXRjaCB0aGUgZGltZW5zaW9ucyBvZi5cbiAgICAgKiBAcGFyYW0gdmFsdWVzIEFuIGFycmF5IG9mIDMyLWJpdCBudW1iZXJzIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQsIHZhbHVlczogbnVtYmVyW10gfCBVaW50MzJBcnJheSk6IExvbmdJbnQ7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBMb25nSW50IG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBBIDMyLWJpdCBudW1iZXIgdG8gdXNlIGFzIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRNYXRjaGluZ0xvbmdJbnQobG9uZ0ludDogTG9uZ0ludCwgdmFsdWU/OiBudW1iZXIpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb25nSW50IHdpdGggdGhlIHNhbWUgZGltZW5zaW9ucyBhcyB0aGlzIG9uZSwgdXNpbmcgdGhlIGdpdmVuIGlucHV0LlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IHRvIG1hdGNoIHRoZSBkaW1lbnNpb25zIG9mLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIExvbmdJbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TWF0Y2hpbmdMb25nSW50KGxvbmdJbnQ6IExvbmdJbnQsIHZhbHVlOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlciA9IDApOiBMb25nSW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KGxvbmdJbnQpLmdldE1hdGNoaW5nTG9uZ0ludCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSBhbmQgKCYpIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlciBhbmQgdGhlIG9uZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0gcmlnaHQgVGhlIHJpZ2h0IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbmV3IHZhbHVlIG9mIHRoaXMgJiByaWdodC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50IHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IHJpZ2h0TG9uZ0ludCA9IHRoaXMuZ2V0TWF0Y2hpbmdMb25nSW50KHJpZ2h0KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSAmPSByaWdodExvbmdJbnQuZGF0YVtpXSE7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSBvciAofCkgb3BlcmF0aW9uIG9uIHRoaXMgbnVtYmVyIGFuZCB0aGUgb25lIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgdmFsdWUgb2YgdGhpcyB8IHJpZ2h0LlxuICAgICAqL1xuICAgIHB1YmxpYyBvcihyaWdodDogTG9uZ0ludCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICBjb25zdCByaWdodExvbmdJbnQgPSB0aGlzLmdldE1hdGNoaW5nTG9uZ0ludChyaWdodCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gfD0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24gb24gdGhpcyBudW1iZXIgYW5kIHRoZSBvbmUgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHJpZ2h0IFRoZSByaWdodCBudW1iZXIuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzIF4gcmlnaHQuXG4gICAgICovXG4gICAgcHVibGljIHhvcihyaWdodDogTG9uZ0ludCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICBjb25zdCByaWdodExvbmdJbnQgPSB0aGlzLmdldE1hdGNoaW5nTG9uZ0ludChyaWdodCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gXj0gcmlnaHRMb25nSW50LmRhdGFbaV0hO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2Ugbm90ICh+KSBvcGVyYXRpb24gb24gdGhpcyBudXJtYmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB+dGhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbm90KCk6IHRoaXMge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpXSA9IH50aGlzLmRhdGFbaV0hO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGFuIGluLXBsYWNlIGJpdHdpc2UgbGVmdCBzaGlmdCAoPDwpIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzIDw8IHNoaWZ0QW1vdW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBsZWZ0U2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPT09IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPiAzMSlcbiAgICAgICAgICAgIHRoaXMuc2hpZnRBcnJheVJpZ2h0KE1hdGguZmxvb3Ioc2hpZnRBbW91bnQgLyAzMikpO1xuXG4gICAgICAgIGlmIChzaGlmdEFtb3VudCAhPT0gMzIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbmdsZVNoaWZ0QW1vdW50ID0gc2hpZnRBbW91bnQgJSAzMjtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSlcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hIDw8IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgLSAxXSEgPj4+IDMyIC0gc2luZ2xlU2hpZnRBbW91bnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhbiBpbi1wbGFjZSBiaXR3aXNlIHVuc2lnbmVkIHJpZ2h0IHNoaWZ0ICg+Pj4pIG9wZXJhdGlvbiBvbiB0aGlzIG51bWJlci5cbiAgICAgKiBAcGFyYW0gc2hpZnRBbW91bnQgVGhlIG51bWJlciBvZiBwbGFjZXMgdG8gc2hpZnQuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGlzID4+PiBzaGlmdEFtb3VudC5cbiAgICAqL1xuICAgIHB1YmxpYyByaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSAzMikge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlU2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCAlIDMyO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hID4+PiBzaW5nbGVTaGlmdEFtb3VudCB8IHRoaXMuZGF0YVtpICsgMV0hIDw8IDMyIC0gc2luZ2xlU2hpZnRBbW91bnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgPiAzMSlcbiAgICAgICAgICAgIHRoaXMuc2hpZnRBcnJheUxlZnQoTWF0aC5mbG9vcihzaGlmdEFtb3VudCAvIDMyKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYW4gaW4tcGxhY2UgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uIG9uIHRoaXMgbnVtYmVyLlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBUaGUgbnVtYmVyIG9mIHBsYWNlcyB0byBzaGlmdC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0IG9mIHRoaXMgPj4gc2hpZnRBbW91bnQuXG4gICAgICovXG4gICAgcHVibGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSAzMikge1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlU2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCAlIDMyO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaV0hID4+IHNpbmdsZVNoaWZ0QW1vdW50IHwgdGhpcy5kYXRhW2kgKyAxXSEgPDwgMzIgLSBzaW5nbGVTaGlmdEFtb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaGlmdEFtb3VudCA+IDMxKVxuICAgICAgICAgICAgdGhpcy5zaGlmdEFycmF5TGVmdChNYXRoLmZsb29yKHNoaWZ0QW1vdW50IC8gMzIpLCB+MCA+Pj4gMCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGlzIExvbmdJbnQgaGFzIGVxdWFsIHZhbHVlIHRvIGFub3RoZXIuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSBMb25nSW50IG9yIG51bWJlciB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGVxdWFsLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcXVhbHModmFsdWU6IExvbmdJbnQgfCBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbG9uZ0ludCA9IHZhbHVlIGluc3RhbmNlb2YgTG9uZ0ludCA/IHZhbHVlIDogbmV3IExvbmdJbnQoW3ZhbHVlXSk7XG4gICAgICAgIGNvbnN0IGxvbmdlc3RMb25nSW50ID0gdGhpcy5kYXRhLmxlbmd0aCA+IGxvbmdJbnQuZGF0YS5sZW5ndGggPyB0aGlzIDogbG9uZ0ludDtcbiAgICAgICAgY29uc3QgbG9uZ0ludDEgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludChsb25nZXN0TG9uZ0ludCwgdGhpcyk7XG4gICAgICAgIGNvbnN0IGxvbmdJbnQyID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQobG9uZ2VzdExvbmdJbnQsIGxvbmdJbnQpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9uZ2VzdExvbmdJbnQuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxvbmdJbnQxLmRhdGFbaV0gIT09IGxvbmdJbnQyLmRhdGFbaV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgTG9uZ0ludC5cbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgYmFzZSBvZiB0aGUgc3RyaW5nIHRvIHByaW50LlxuICAgICAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHRvU3RyaW5nKHR5cGU6IFN0cmluZ1R5cGUpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcGFkTGVuZ3RoID0gMDtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBwYWRMZW5ndGggPSAzMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgcGFkTGVuZ3RoID0gMTA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgIHBhZExlbmd0aCA9IDg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZGF0YV1cbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5tYXAoKG51bSkgPT4gbnVtLnRvU3RyaW5nKHR5cGUpLnBhZFN0YXJ0KHBhZExlbmd0aCwgXCIwXCIpKVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUsIHN0cmV0Y2hlZCBvciB0cnVuY2F0ZWQgdG8gdGhlIHNhbWUgc2l6ZSBhcyB0aGlzLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBMb25nSW50IG9iamVjdCB0byB1c2UgYXMgdGhlIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nTG9uZ0ludChsb25nSW50OiBMb25nSW50KTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IExvbmdJbnQgb2JqZWN0IHVzaW5nIHRoZSBnaXZlbiB2YWx1ZSwgc3RyZXRjaGVkIG9yIHRydW5jYXRlZCB0byB0aGUgc2FtZSBzaXplIGFzIHRoaXMuXG4gICAgICogQHBhcmFtIHZhbHVlcyBBbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycyB0byB1c2UgYXMgdGhlIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nTG9uZ0ludCh2YWx1ZXM6IG51bWJlcltdIHwgVWludDMyQXJyYXkpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgTG9uZ0ludCBvYmplY3QgdXNpbmcgdGhlIGdpdmVuIHZhbHVlLCBzdHJldGNoZWQgb3IgdHJ1bmNhdGVkIHRvIHRoZSBzYW1lIHNpemUgYXMgdGhpcy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgQSAzMi1iaXQgbnVtYmVyIHRvIHVzZSBhcyB0aGUgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlPzogbnVtYmVyKTogTG9uZ0ludDtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgTG9uZ0ludCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvbnMgYXMgdGhpcyBvbmUsIHVzaW5nIHRoZSBnaXZlbiBpbnB1dC5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBMb25nSW50LlxuICAgICAqIEByZXR1cm5zIFRoZSBuZXcgTG9uZ0ludC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hdGNoaW5nTG9uZ0ludCh2YWx1ZTogTG9uZ0ludCB8IG51bWJlcltdIHwgVWludDMyQXJyYXkgfCBudW1iZXIpOiBMb25nSW50O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBMb25nSW50IHdpdGggdGhlIHNhbWUgZGltZW5zaW9ucyBhcyB0aGlzIG9uZSwgdXNpbmcgdGhlIGdpdmVuIGlucHV0LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIExvbmdJbnQuXG4gICAgICogQHJldHVybnMgVGhlIG5ldyBMb25nSW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWF0Y2hpbmdMb25nSW50KHZhbHVlOiBMb25nSW50IHwgbnVtYmVyW10gfCBVaW50MzJBcnJheSB8IG51bWJlciA9IDApOiBMb25nSW50IHtcbiAgICAgICAgbGV0IGludGVnZXJzOiBudW1iZXJbXSB8IFVpbnQzMkFycmF5ID0gW107XG5cbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgVWludDMyQXJyYXk6XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gWy4uLnZhbHVlLCAuLi5BcnJheTxudW1iZXI+KHRoaXMuZGF0YS5sZW5ndGggLSB2YWx1ZS5sZW5ndGgpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IHRoaXMuZGF0YS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gdmFsdWUuc2xpY2UoMCwgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHZhbHVlIGluc3RhbmNlb2YgTG9uZ0ludDpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuZGF0YS5sZW5ndGggPCB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IFsuLi52YWx1ZS5kYXRhLCAuLi5BcnJheTxudW1iZXI+KHRoaXMuZGF0YS5sZW5ndGggLSB2YWx1ZS5kYXRhLmxlbmd0aCkuZmlsbCgwKV07XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZGF0YS5sZW5ndGggPiB0aGlzLmRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlLmRhdGEuc2xpY2UoMCwgdGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyA9IHZhbHVlLmRhdGE7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdmFsdWUgaW5zdGFuY2VvZiBBcnJheTpcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDwgdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbLi4udmFsdWUsIC4uLkFycmF5PG51bWJlcj4odGhpcy5kYXRhLmxlbmd0aCAtIHZhbHVlLmxlbmd0aCkuZmlsbCgwKV07XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gdGhpcy5kYXRhLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgPSB2YWx1ZS5zbGljZSgwLCB0aGlzLmRhdGEubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGludGVnZXJzID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaW50ZWdlcnMgPSBbdmFsdWUsIC4uLkFycmF5PG51bWJlcj4odGhpcy5kYXRhLmxlbmd0aCAtIDEpLmZpbGwoMCldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50KGludGVnZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaGlmdHMgdGhlIDMyLWJpdCBudW1iZXIgYXJyYXkgdG8gdGhlIHJpZ2h0LlxuICAgICAqIEBwYXJhbSBjb3VudCBIb3cgbWFueSBwbGFjZXMgdG8gc2hpZnQgdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBmaWxsVmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZW1wdHkgc3BhY2VzIHdpdGguXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hpZnRBcnJheVJpZ2h0KGNvdW50OiBudW1iZXIsIGZpbGxWYWx1ZTogbnVtYmVyID0gMCk6IHRoaXMge1xuICAgICAgICBpZiAoY291bnQgPCAwKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpZnRBcnJheUxlZnQoLWNvdW50LCBmaWxsVmFsdWUpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgICAgICB0aGlzLmRhdGFbaV0gPSB0aGlzLmRhdGFbaSAtIGNvdW50XSA/PyBmaWxsVmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hpZnRzIHRoZSAzMi1iaXQgbnVtYmVyIGFycmF5IHRvIHRoZSBsZWZ0LlxuICAgICAqIEBwYXJhbSBjb3VudCBIb3cgbWFueSBwbGFjZXMgdG8gc2hpZnQgdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSBmaWxsVmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgZW1wdHkgc3BhY2VzIHdpdGguXG4gICAgICogQHJldHVybnMgVGhlIG5ldyB2YWx1ZSBvZiB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hpZnRBcnJheUxlZnQoY291bnQ6IG51bWJlciwgZmlsbFZhbHVlOiBudW1iZXIgPSAwKTogdGhpcyB7XG4gICAgICAgIGlmIChjb3VudCA8IDApXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaGlmdEFycmF5UmlnaHQoLWNvdW50LCBmaWxsVmFsdWUpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5kYXRhW2ldID0gdGhpcy5kYXRhW2kgKyBjb3VudF0gPz8gZmlsbFZhbHVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,46 +1,104 @@
|
|
|
1
1
|
import BitBoard from "./bitBoard.js";
|
|
2
2
|
import LongInt from "./longInt.js";
|
|
3
|
-
/**
|
|
4
|
-
* A BitBoard which uses an array of 32-bit numbers.
|
|
5
|
-
*/
|
|
3
|
+
/** A BitBoard which uses an array of 32-bit numbers. */
|
|
6
4
|
export default class LongIntBitBoard extends BitBoard<LongInt> {
|
|
7
5
|
/**
|
|
8
6
|
* Creates an instance of LongIntBitBoard.
|
|
9
|
-
*
|
|
10
7
|
* @param longInt The data to fill the BitBoard with.
|
|
11
8
|
*/
|
|
12
9
|
constructor(longInt: LongInt);
|
|
13
10
|
/**
|
|
14
11
|
* Creates an instance of LongIntBitBoard.
|
|
15
|
-
*
|
|
16
12
|
* @param uint32Array The data to fill the BitBoard with.
|
|
17
13
|
*/
|
|
18
14
|
constructor(uint32Array: Uint32Array);
|
|
19
15
|
/**
|
|
20
16
|
* Creates an instance of LongIntBitBoard.
|
|
21
|
-
*
|
|
22
17
|
* @param numberArray The data to fill the BitBoard with.
|
|
23
18
|
*/
|
|
24
19
|
constructor(numberArray: number[]);
|
|
25
20
|
/**
|
|
26
21
|
* Creates an instance of LongIntBitBoard.
|
|
27
|
-
*
|
|
28
22
|
* @param length The length of the LongInt.
|
|
29
23
|
*/
|
|
30
24
|
constructor(length: number);
|
|
25
|
+
/**
|
|
26
|
+
* Gets the value of a given bit.
|
|
27
|
+
* @param bit The bit to get.
|
|
28
|
+
* @returns The value of the bit.
|
|
29
|
+
*/
|
|
31
30
|
getBit(bit: number): 0 | 1;
|
|
31
|
+
/**
|
|
32
|
+
* Sets the value for a given bit to 1.
|
|
33
|
+
* @param bit The bit to set.
|
|
34
|
+
*/
|
|
32
35
|
setBit(bit: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Sets the value for a given bit to 0.
|
|
38
|
+
* @param bit The bit to clear.
|
|
39
|
+
*/
|
|
33
40
|
clearBit(bit: number): void;
|
|
41
|
+
/**
|
|
42
|
+
* Toggles the data for a given bit between 0 and 1.
|
|
43
|
+
* @param bit The bit to toggle.
|
|
44
|
+
*/
|
|
34
45
|
toggleBit(bit: number): void;
|
|
46
|
+
/** Sets all bits to 0. */
|
|
35
47
|
clearAll(): void;
|
|
48
|
+
/** Sets all bits to 1. */
|
|
36
49
|
setAll(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Gets a given number of bits.
|
|
52
|
+
* @param LSB The least significant bit to get.
|
|
53
|
+
* @param numberOfBits The number of bits to get.
|
|
54
|
+
* @returns The bits.
|
|
55
|
+
*/
|
|
37
56
|
getBits(LSB: number, numberOfBits: number): LongInt;
|
|
57
|
+
/**
|
|
58
|
+
* Carries out a bitwise and (&) operation.
|
|
59
|
+
* @param right The right value.
|
|
60
|
+
* @returns The result.
|
|
61
|
+
*/
|
|
38
62
|
and(right: LongIntBitBoard | number): this;
|
|
63
|
+
/**
|
|
64
|
+
* Carries out a bitwise or (|) operation.
|
|
65
|
+
* @param right The right value.
|
|
66
|
+
* @returns The result.
|
|
67
|
+
*/
|
|
39
68
|
or(right: LongIntBitBoard | number): this;
|
|
69
|
+
/**
|
|
70
|
+
* Carries out a bitwise xor (^) operation.
|
|
71
|
+
* @param right The right value.
|
|
72
|
+
* @returns The result.
|
|
73
|
+
*/
|
|
40
74
|
xor(right: LongIntBitBoard | number): this;
|
|
75
|
+
/**
|
|
76
|
+
* Carries out a bitwise not (~) operation.
|
|
77
|
+
* @returns The result.
|
|
78
|
+
*/
|
|
41
79
|
not(): this;
|
|
80
|
+
/**
|
|
81
|
+
* Carries out a bitwise left shift (<<) operation.
|
|
82
|
+
* @param shiftAmount How much to shift it by.
|
|
83
|
+
* @returns The result.
|
|
84
|
+
*/
|
|
42
85
|
leftShift(shiftAmount: number): this;
|
|
86
|
+
/**
|
|
87
|
+
* Carries out a bitwise logical right shift (>>>) operation.
|
|
88
|
+
* @param shiftAmount How much to shift it by.
|
|
89
|
+
* @returns The result.
|
|
90
|
+
*/
|
|
43
91
|
rightShift(shiftAmount: number): this;
|
|
92
|
+
/**
|
|
93
|
+
* Carries out a bitwise arithmetic right shift (>>) operation.
|
|
94
|
+
* @param shiftAmount How much to shift it by.
|
|
95
|
+
* @returns The result.
|
|
96
|
+
*/
|
|
44
97
|
arithmeticRightShift(shiftAmount: number): this;
|
|
98
|
+
/**
|
|
99
|
+
* Checks if two BitBoards have equal data values.
|
|
100
|
+
* @param value The value to compare against.
|
|
101
|
+
* @returns Whether or not the two BitBoard have the same data value.
|
|
102
|
+
*/
|
|
45
103
|
equals(value: LongInt | LongIntBitBoard | number): boolean;
|
|
46
104
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import BitBoard from "./bitBoard.js";
|
|
2
2
|
import LongInt from "./longInt.js";
|
|
3
|
-
/**
|
|
4
|
-
* A BitBoard which uses an array of 32-bit numbers.
|
|
5
|
-
*/
|
|
3
|
+
/** A BitBoard which uses an array of 32-bit numbers. */
|
|
6
4
|
export default class LongIntBitBoard extends BitBoard {
|
|
5
|
+
/**
|
|
6
|
+
* Creates an instance of LongIntBitBoard.
|
|
7
|
+
* @param args The data to fill the BitBoard with.
|
|
8
|
+
*/
|
|
7
9
|
constructor(args) {
|
|
8
10
|
switch (true) {
|
|
9
11
|
case args === undefined:
|
|
@@ -18,35 +20,62 @@ export default class LongIntBitBoard extends BitBoard {
|
|
|
18
20
|
case typeof args === "number":
|
|
19
21
|
super(new LongInt(Array(args).fill(0)));
|
|
20
22
|
break;
|
|
23
|
+
default:
|
|
24
|
+
throw new Error("Invalid constructor arguments.");
|
|
21
25
|
}
|
|
22
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Gets the value of a given bit.
|
|
29
|
+
* @param bit The bit to get.
|
|
30
|
+
* @returns The value of the bit.
|
|
31
|
+
*/
|
|
23
32
|
getBit(bit) {
|
|
24
33
|
return LongInt.rightShift(this._data, bit).and(1).data[0];
|
|
25
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Sets the value for a given bit to 1.
|
|
37
|
+
* @param bit The bit to set.
|
|
38
|
+
*/
|
|
26
39
|
setBit(bit) {
|
|
27
40
|
const mask = LongInt.getMatchingLongInt(this._data, 1)
|
|
28
41
|
.leftShift(bit);
|
|
29
42
|
this._data.or(mask);
|
|
30
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Sets the value for a given bit to 0.
|
|
46
|
+
* @param bit The bit to clear.
|
|
47
|
+
*/
|
|
31
48
|
clearBit(bit) {
|
|
32
49
|
const mask = LongInt.getMatchingLongInt(this._data, 1)
|
|
33
50
|
.leftShift(bit)
|
|
34
51
|
.not();
|
|
35
52
|
this._data.and(mask);
|
|
36
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Toggles the data for a given bit between 0 and 1.
|
|
56
|
+
* @param bit The bit to toggle.
|
|
57
|
+
*/
|
|
37
58
|
toggleBit(bit) {
|
|
38
59
|
const mask = LongInt.getMatchingLongInt(this._data, 1)
|
|
39
60
|
.leftShift(bit);
|
|
40
61
|
this._data.xor(mask);
|
|
41
62
|
}
|
|
63
|
+
/** Sets all bits to 0. */
|
|
42
64
|
clearAll() {
|
|
43
65
|
for (let i = 0; i < this._data.data.length; i++)
|
|
44
66
|
this._data.data[i] = 0;
|
|
45
67
|
}
|
|
68
|
+
/** Sets all bits to 1. */
|
|
46
69
|
setAll() {
|
|
47
70
|
for (let i = 0; i < this._data.data.length; i++)
|
|
48
71
|
this._data.data[i] = ~0 >>> 0;
|
|
49
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Gets a given number of bits.
|
|
75
|
+
* @param LSB The least significant bit to get.
|
|
76
|
+
* @param numberOfBits The number of bits to get.
|
|
77
|
+
* @returns The bits.
|
|
78
|
+
*/
|
|
50
79
|
getBits(LSB, numberOfBits) {
|
|
51
80
|
const arr = [];
|
|
52
81
|
const arrLength = Math.ceil(numberOfBits / 32);
|
|
@@ -57,29 +86,68 @@ export default class LongIntBitBoard extends BitBoard {
|
|
|
57
86
|
const bits = LongInt.rightShift(LongInt.and(this._data, mask), LSB);
|
|
58
87
|
return bits;
|
|
59
88
|
}
|
|
89
|
+
/**
|
|
90
|
+
* Carries out a bitwise and (&) operation.
|
|
91
|
+
* @param right The right value.
|
|
92
|
+
* @returns The result.
|
|
93
|
+
*/
|
|
60
94
|
and(right) {
|
|
61
95
|
return new LongIntBitBoard(LongInt.and(this._data, right instanceof LongIntBitBoard ? right.data : right));
|
|
62
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Carries out a bitwise or (|) operation.
|
|
99
|
+
* @param right The right value.
|
|
100
|
+
* @returns The result.
|
|
101
|
+
*/
|
|
63
102
|
or(right) {
|
|
64
103
|
return new LongIntBitBoard(LongInt.or(this._data, right instanceof LongIntBitBoard ? right.data : right));
|
|
65
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Carries out a bitwise xor (^) operation.
|
|
107
|
+
* @param right The right value.
|
|
108
|
+
* @returns The result.
|
|
109
|
+
*/
|
|
66
110
|
xor(right) {
|
|
67
111
|
return new LongIntBitBoard(LongInt.xor(this._data, right instanceof LongIntBitBoard ? right.data : right));
|
|
68
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Carries out a bitwise not (~) operation.
|
|
115
|
+
* @returns The result.
|
|
116
|
+
*/
|
|
69
117
|
not() {
|
|
70
118
|
return new LongIntBitBoard(LongInt.not(this._data));
|
|
71
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Carries out a bitwise left shift (<<) operation.
|
|
122
|
+
* @param shiftAmount How much to shift it by.
|
|
123
|
+
* @returns The result.
|
|
124
|
+
*/
|
|
72
125
|
leftShift(shiftAmount) {
|
|
73
126
|
return new LongIntBitBoard(LongInt.leftShift(this._data, shiftAmount));
|
|
74
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Carries out a bitwise logical right shift (>>>) operation.
|
|
130
|
+
* @param shiftAmount How much to shift it by.
|
|
131
|
+
* @returns The result.
|
|
132
|
+
*/
|
|
75
133
|
rightShift(shiftAmount) {
|
|
76
134
|
return new LongIntBitBoard(LongInt.rightShift(this._data, shiftAmount));
|
|
77
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Carries out a bitwise arithmetic right shift (>>) operation.
|
|
138
|
+
* @param shiftAmount How much to shift it by.
|
|
139
|
+
* @returns The result.
|
|
140
|
+
*/
|
|
78
141
|
arithmeticRightShift(shiftAmount) {
|
|
79
142
|
return new LongIntBitBoard(LongInt.arithmeticRightShift(this._data, shiftAmount));
|
|
80
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Checks if two BitBoards have equal data values.
|
|
146
|
+
* @param value The value to compare against.
|
|
147
|
+
* @returns Whether or not the two BitBoard have the same data value.
|
|
148
|
+
*/
|
|
81
149
|
equals(value) {
|
|
82
150
|
return this._data.equals(value instanceof LongIntBitBoard ? value._data : value);
|
|
83
151
|
}
|
|
84
152
|
}
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludEJpdEJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpdEJvYXJkL2xvbmdJbnRCaXRCb2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRW5DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxlQUFnQixTQUFRLFFBQWlCO0lBeUIxRCxZQUFtQixJQUFnRDtRQUMvRCxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ1gsS0FBSyxJQUFJLEtBQUssU0FBUztnQkFDbkIsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNO1lBQ1YsS0FBSyxJQUFJLFlBQVksT0FBTztnQkFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNaLE1BQU07WUFDVixLQUFLLElBQUksWUFBWSxXQUFXLElBQUksSUFBSSxZQUFZLEtBQUs7Z0JBQ3JELEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNO1lBQ1YsS0FBSyxPQUFPLElBQUksS0FBSyxRQUFRO2dCQUN6QixLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFVLENBQUM7SUFDdkUsQ0FBQztJ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QUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRCb2FyZCBmcm9tIFwiLi9iaXRCb2FyZC5qc1wiO1xuaW1wb3J0IExvbmdJbnQgZnJvbSBcIi4vbG9uZ0ludC5qc1wiO1xuXG4vKipcbiAqIEEgQml0Qm9hcmQgd2hpY2ggdXNlcyBhbiBhcnJheSBvZiAzMi1iaXQgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9uZ0ludEJpdEJvYXJkIGV4dGVuZHMgQml0Qm9hcmQ8TG9uZ0ludD4ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludEJpdEJvYXJkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGxvbmdJbnQgVGhlIGRhdGEgdG8gZmlsbCB0aGUgQml0Qm9hcmQgd2l0aC5cbiAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihsb25nSW50OiBMb25nSW50KTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExvbmdJbnRCaXRCb2FyZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1aW50MzJBcnJheSBUaGUgZGF0YSB0byBmaWxsIHRoZSBCaXRCb2FyZCB3aXRoLlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih1aW50MzJBcnJheTogVWludDMyQXJyYXkpO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludEJpdEJvYXJkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlckFycmF5IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG51bWJlckFycmF5OiBudW1iZXJbXSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIExvbmdJbnQuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGxlbmd0aDogbnVtYmVyKTtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJncz86IExvbmdJbnQgfCBudW1iZXJbXSB8IFVpbnQzMkFycmF5IHwgbnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBhcmdzID09PSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgc3VwZXIobmV3IExvbmdJbnQoQXJyYXkoMikuZmlsbCgwKSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBhcmdzIGluc3RhbmNlb2YgTG9uZ0ludDpcbiAgICAgICAgICAgICAgICBzdXBlcihhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYXJncyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8IGFyZ3MgaW5zdGFuY2VvZiBBcnJheTpcbiAgICAgICAgICAgICAgICBzdXBlcihuZXcgTG9uZ0ludChhcmdzKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHR5cGVvZiBhcmdzID09PSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHN1cGVyKG5ldyBMb25nSW50KEFycmF5KGFyZ3MpLmZpbGwoMCkpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCaXQoYml0OiBudW1iZXIpOiAwIHwgMSB7XG4gICAgICAgIHJldHVybiBMb25nSW50LnJpZ2h0U2hpZnQodGhpcy5fZGF0YSwgYml0KS5hbmQoMSkuZGF0YVswXSBhcyAwIHwgMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Qml0KGJpdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCAxKVxuICAgICAgICAgICAgLmxlZnRTaGlmdChiaXQpO1xuICAgICAgICB0aGlzLl9kYXRhLm9yKG1hc2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckJpdChiaXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXNrID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQodGhpcy5fZGF0YSwgMSlcbiAgICAgICAgICAgIC5sZWZ0U2hpZnQoYml0KVxuICAgICAgICAgICAgLm5vdCgpO1xuICAgICAgICB0aGlzLl9kYXRhLmFuZChtYXNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQml0KGJpdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCAxKVxuICAgICAgICAgICAgLmxlZnRTaGlmdChiaXQpO1xuICAgICAgICB0aGlzLl9kYXRhLnhvcihtYXNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YS5kYXRhW2ldID0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QWxsKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2RhdGEuZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGEuZGF0YVtpXSA9IH4wID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCaXRzKExTQjogbnVtYmVyLCBudW1iZXJPZkJpdHM6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICBjb25zdCBhcnI6IG51bWJlcltdID0gW107XG4gICAgICAgIGNvbnN0IGFyckxlbmd0aCA9IE1hdGguY2VpbChudW1iZXJPZkJpdHMgLyAzMik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyTGVuZ3RoIC0gMTsgaSsrKVxuICAgICAgICAgICAgYXJyW2ldID0gfjAgPj4+IDA7XG4gICAgICAgIGFyclthcnJMZW5ndGggLSAxXSA9IDIgKiogKG51bWJlck9mQml0cyAtIChhcnJMZW5ndGggLSAxKSAqIDMyKSAtIDE7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCBhcnIpLmxlZnRTaGlmdChMU0IpO1xuICAgICAgICBjb25zdCBiaXRzID0gTG9uZ0ludC5yaWdodFNoaWZ0KExvbmdJbnQuYW5kKHRoaXMuX2RhdGEsIG1hc2spLCBMU0IpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50Qml0Qm9hcmQgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5hbmQodGhpcy5fZGF0YSwgcmlnaHQgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyByaWdodC5kYXRhIDogcmlnaHQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcihyaWdodDogTG9uZ0ludEJpdEJvYXJkIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQub3IodGhpcy5fZGF0YSwgcmlnaHQgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyByaWdodC5kYXRhIDogcmlnaHQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB4b3IocmlnaHQ6IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50Lnhvcih0aGlzLl9kYXRhLCByaWdodCBpbnN0YW5jZW9mIExvbmdJbnRCaXRCb2FyZCA/IHJpZ2h0LmRhdGEgOiByaWdodCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5ub3QodGhpcy5fZGF0YSkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGxlZnRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQubGVmdFNoaWZ0KHRoaXMuX2RhdGEsIHNoaWZ0QW1vdW50KSkgYXMgdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmlnaHRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQucmlnaHRTaGlmdCh0aGlzLl9kYXRhLCBzaGlmdEFtb3VudCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFyaXRobWV0aWNSaWdodFNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5hcml0aG1ldGljUmlnaHRTaGlmdCh0aGlzLl9kYXRhLCBzaGlmdEFtb3VudCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGVxdWFscyh2YWx1ZTogTG9uZ0ludCB8IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5lcXVhbHModmFsdWUgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyB2YWx1ZS5fZGF0YSA6IHZhbHVlKTtcbiAgICB9XG59XG4iXX0=
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9uZ0ludEJpdEJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpdEJvYXJkL2xvbmdJbnRCaXRCb2FyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRW5DLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWdCLFNBQVEsUUFBaUI7SUFxQjFEOzs7T0FHRztJQUNILFlBQW1CLElBQWdEO1FBQy9ELFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLElBQUksS0FBSyxTQUFTO2dCQUNuQixLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE1BQU07WUFDVixLQUFLLElBQUksWUFBWSxPQUFPO2dCQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ1osTUFBTTtZQUNWLEtBQUssSUFBSSxZQUFZLFdBQVcsSUFBSSxJQUFJLFlBQVksS0FBSztnQkFDckQsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLE1BQU07WUFDVixLQUFLLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0JBQ3pCLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTTtZQUNWO2dCQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsR0FBVztRQUNyQixPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxH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QzNDLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQVMsQ0FBQztJQUM5RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxLQUF5QztRQUNuRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaXRCb2FyZCBmcm9tIFwiLi9iaXRCb2FyZC5qc1wiO1xuaW1wb3J0IExvbmdJbnQgZnJvbSBcIi4vbG9uZ0ludC5qc1wiO1xuXG4vKiogQSBCaXRCb2FyZCB3aGljaCB1c2VzIGFuIGFycmF5IG9mIDMyLWJpdCBudW1iZXJzLiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9uZ0ludEJpdEJvYXJkIGV4dGVuZHMgQml0Qm9hcmQ8TG9uZ0ludD4ge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTG9uZ0ludEJpdEJvYXJkLlxuICAgICAqIEBwYXJhbSBsb25nSW50IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IobG9uZ0ludDogTG9uZ0ludCk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIHVpbnQzMkFycmF5IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHVpbnQzMkFycmF5OiBVaW50MzJBcnJheSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIG51bWJlckFycmF5IFRoZSBkYXRhIHRvIGZpbGwgdGhlIEJpdEJvYXJkIHdpdGguXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG51bWJlckFycmF5OiBudW1iZXJbXSk7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBMb25nSW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihsZW5ndGg6IG51bWJlcik7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBMb25nSW50Qml0Qm9hcmQuXG4gICAgICogQHBhcmFtIGFyZ3MgVGhlIGRhdGEgdG8gZmlsbCB0aGUgQml0Qm9hcmQgd2l0aC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJncz86IExvbmdJbnQgfCBudW1iZXJbXSB8IFVpbnQzMkFycmF5IHwgbnVtYmVyKSB7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBhcmdzID09PSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgc3VwZXIobmV3IExvbmdJbnQoQXJyYXkoMikuZmlsbCgwKSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBhcmdzIGluc3RhbmNlb2YgTG9uZ0ludDpcbiAgICAgICAgICAgICAgICBzdXBlcihhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYXJncyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5IHx8IGFyZ3MgaW5zdGFuY2VvZiBBcnJheTpcbiAgICAgICAgICAgICAgICBzdXBlcihuZXcgTG9uZ0ludChhcmdzKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHR5cGVvZiBhcmdzID09PSBcIm51bWJlclwiOlxuICAgICAgICAgICAgICAgIHN1cGVyKG5ldyBMb25nSW50KEFycmF5KGFyZ3MpLmZpbGwoMCkpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb25zdHJ1Y3RvciBhcmd1bWVudHMuXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBiaXQuXG4gICAgICogQHBhcmFtIGJpdCBUaGUgYml0IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIGJpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Qml0KGJpdDogbnVtYmVyKTogMCB8IDEge1xuICAgICAgICByZXR1cm4gTG9uZ0ludC5yaWdodFNoaWZ0KHRoaXMuX2RhdGEsIGJpdCkuYW5kKDEpLmRhdGFbMF0gYXMgMCB8IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gYml0IHRvIDEuXG4gICAgICogQHBhcmFtIGJpdCBUaGUgYml0IHRvIHNldC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Qml0KGJpdDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBMb25nSW50LmdldE1hdGNoaW5nTG9uZ0ludCh0aGlzLl9kYXRhLCAxKVxuICAgICAgICAgICAgLmxlZnRTaGlmdChiaXQpO1xuXG4gICAgICAgIHRoaXMuX2RhdGEub3IobWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gYml0IHRvIDAuXG4gICAgICogQHBhcmFtIGJpdCBUaGUgYml0IHRvIGNsZWFyLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhckJpdChiaXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXNrID0gTG9uZ0ludC5nZXRNYXRjaGluZ0xvbmdJbnQodGhpcy5fZGF0YSwgMSlcbiAgICAgICAgICAgIC5sZWZ0U2hpZnQoYml0KVxuICAgICAgICAgICAgLm5vdCgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGEuYW5kKG1hc2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGRhdGEgZm9yIGEgZ2l2ZW4gYml0IGJldHdlZW4gMCBhbmQgMS5cbiAgICAgKiBAcGFyYW0gYml0IFRoZSBiaXQgdG8gdG9nZ2xlLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVCaXQoYml0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFzayA9IExvbmdJbnQuZ2V0TWF0Y2hpbmdMb25nSW50KHRoaXMuX2RhdGEsIDEpXG4gICAgICAgICAgICAubGVmdFNoaWZ0KGJpdCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YS54b3IobWFzayk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgYWxsIGJpdHMgdG8gMC4gKi9cbiAgICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YS5kYXRhW2ldID0gMDtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBhbGwgYml0cyB0byAxLiAqL1xuICAgIHB1YmxpYyBzZXRBbGwoKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5kYXRhLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YS5kYXRhW2ldID0gfjAgPj4+IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGdpdmVuIG51bWJlciBvZiBiaXRzLlxuICAgICAqIEBwYXJhbSBMU0IgVGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0byBnZXQuXG4gICAgICogQHBhcmFtIG51bWJlck9mQml0cyBUaGUgbnVtYmVyIG9mIGJpdHMgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIFRoZSBiaXRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRCaXRzKExTQjogbnVtYmVyLCBudW1iZXJPZkJpdHM6IG51bWJlcik6IExvbmdJbnQge1xuICAgICAgICBjb25zdCBhcnI6IG51bWJlcltdID0gW107XG4gICAgICAgIGNvbnN0IGFyckxlbmd0aCA9IE1hdGguY2VpbChudW1iZXJPZkJpdHMgLyAzMik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJMZW5ndGggLSAxOyBpKyspXG4gICAgICAgICAgICBhcnJbaV0gPSB+MCA+Pj4gMDtcbiAgICAgICAgYXJyW2Fyckxlbmd0aCAtIDFdID0gMiAqKiAobnVtYmVyT2ZCaXRzIC0gKGFyckxlbmd0aCAtIDEpICogMzIpIC0gMTtcbiAgICAgICAgY29uc3QgbWFzayA9IExvbmdJbnQuZ2V0TWF0Y2hpbmdMb25nSW50KHRoaXMuX2RhdGEsIGFycikubGVmdFNoaWZ0KExTQik7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBMb25nSW50LnJpZ2h0U2hpZnQoTG9uZ0ludC5hbmQodGhpcy5fZGF0YSwgbWFzayksIExTQik7XG5cbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIGFuZCAoJikgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYW5kKHJpZ2h0OiBMb25nSW50Qml0Qm9hcmQgfCBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5hbmQodGhpcy5fZGF0YSwgcmlnaHQgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyByaWdodC5kYXRhIDogcmlnaHQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBvciAofCkgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSByaWdodCBUaGUgcmlnaHQgdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3IocmlnaHQ6IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50Lm9yKHRoaXMuX2RhdGEsIHJpZ2h0IGluc3RhbmNlb2YgTG9uZ0ludEJpdEJvYXJkID8gcmlnaHQuZGF0YSA6IHJpZ2h0KSkgYXMgdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgeG9yICheKSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHJpZ2h0IFRoZSByaWdodCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyB4b3IocmlnaHQ6IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50Lnhvcih0aGlzLl9kYXRhLCByaWdodCBpbnN0YW5jZW9mIExvbmdJbnRCaXRCb2FyZCA/IHJpZ2h0LmRhdGEgOiByaWdodCkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIG5vdCAofikgb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIG5vdCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb25nSW50Qml0Qm9hcmQoTG9uZ0ludC5ub3QodGhpcy5fZGF0YSkpIGFzIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FycmllcyBvdXQgYSBiaXR3aXNlIGxlZnQgc2hpZnQgKDw8KSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IEhvdyBtdWNoIHRvIHNoaWZ0IGl0IGJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIGxlZnRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQubGVmdFNoaWZ0KHRoaXMuX2RhdGEsIHNoaWZ0QW1vdW50KSkgYXMgdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXJyaWVzIG91dCBhIGJpdHdpc2UgbG9naWNhbCByaWdodCBzaGlmdCAoPj4+KSBvcGVyYXRpb24uXG4gICAgICogQHBhcmFtIHNoaWZ0QW1vdW50IEhvdyBtdWNoIHRvIHNoaWZ0IGl0IGJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIHJpZ2h0U2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3IExvbmdJbnRCaXRCb2FyZChMb25nSW50LnJpZ2h0U2hpZnQodGhpcy5fZGF0YSwgc2hpZnRBbW91bnQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcnJpZXMgb3V0IGEgYml0d2lzZSBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0ICg+Pikgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSBzaGlmdEFtb3VudCBIb3cgbXVjaCB0byBzaGlmdCBpdCBieS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhcml0aG1ldGljUmlnaHRTaGlmdChzaGlmdEFtb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG9uZ0ludEJpdEJvYXJkKExvbmdJbnQuYXJpdGhtZXRpY1JpZ2h0U2hpZnQodGhpcy5fZGF0YSwgc2hpZnRBbW91bnQpKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0d28gQml0Qm9hcmRzIGhhdmUgZXF1YWwgZGF0YSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuXG4gICAgICogQHJldHVybnMgV2hldGhlciBvciBub3QgdGhlIHR3byBCaXRCb2FyZCBoYXZlIHRoZSBzYW1lIGRhdGEgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGVxdWFscyh2YWx1ZTogTG9uZ0ludCB8IExvbmdJbnRCaXRCb2FyZCB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5lcXVhbHModmFsdWUgaW5zdGFuY2VvZiBMb25nSW50Qml0Qm9hcmQgPyB2YWx1ZS5fZGF0YSA6IHZhbHVlKTtcbiAgICB9XG59XG4iXX0=
|
package/build/console.d.ts
CHANGED
|
@@ -7,13 +7,10 @@
|
|
|
7
7
|
declare function readLine(prompt?: string): Promise<string>;
|
|
8
8
|
/**
|
|
9
9
|
* Writes to the console.
|
|
10
|
-
*
|
|
11
10
|
* @param text The text to write.
|
|
12
11
|
*/
|
|
13
12
|
declare function writeLine(...text: string[]): void;
|
|
14
|
-
/**
|
|
15
|
-
* Clears the console.
|
|
16
|
-
*/
|
|
13
|
+
/** Clears the console. */
|
|
17
14
|
declare function clear(): void;
|
|
18
15
|
declare const _default: {
|
|
19
16
|
clear: typeof clear;
|