@jubbio/core 1.3.2 → 1.3.4

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.
Files changed (130) hide show
  1. package/dist/Client.js +50 -10
  2. package/dist/rest/REST.d.ts +1 -0
  3. package/dist/rest/REST.js +1 -1
  4. package/dist/structures/Channel.d.ts +1 -1
  5. package/dist/structures/Channel.js +11 -4
  6. package/dist/structures/Guild.d.ts +1 -1
  7. package/dist/structures/Guild.js +7 -3
  8. package/dist/structures/Message.d.ts +2 -0
  9. package/dist/structures/Message.js +13 -33
  10. package/package.json +4 -14
  11. package/dist/cjs/Client.d.ts +0 -157
  12. package/dist/cjs/Client.js +0 -640
  13. package/dist/cjs/builders/ActionRowBuilder.d.ts +0 -53
  14. package/dist/cjs/builders/ActionRowBuilder.js +0 -68
  15. package/dist/cjs/builders/ButtonBuilder.d.ts +0 -77
  16. package/dist/cjs/builders/ButtonBuilder.js +0 -96
  17. package/dist/cjs/builders/EmbedBuilder.d.ts +0 -157
  18. package/dist/cjs/builders/EmbedBuilder.js +0 -208
  19. package/dist/cjs/builders/ModalBuilder.d.ts +0 -122
  20. package/dist/cjs/builders/ModalBuilder.js +0 -162
  21. package/dist/cjs/builders/SelectMenuBuilder.d.ts +0 -123
  22. package/dist/cjs/builders/SelectMenuBuilder.js +0 -165
  23. package/dist/cjs/builders/SlashCommandBuilder.d.ts +0 -197
  24. package/dist/cjs/builders/SlashCommandBuilder.js +0 -324
  25. package/dist/cjs/builders/index.d.ts +0 -9
  26. package/dist/cjs/builders/index.js +0 -26
  27. package/dist/cjs/enums.d.ts +0 -191
  28. package/dist/cjs/enums.js +0 -211
  29. package/dist/cjs/index.d.ts +0 -25
  30. package/dist/cjs/index.js +0 -130
  31. package/dist/cjs/managers/BaseManager.d.ts +0 -69
  32. package/dist/cjs/managers/BaseManager.js +0 -106
  33. package/dist/cjs/managers/ChannelManager.d.ts +0 -95
  34. package/dist/cjs/managers/ChannelManager.js +0 -205
  35. package/dist/cjs/managers/GuildMemberManager.d.ts +0 -74
  36. package/dist/cjs/managers/GuildMemberManager.js +0 -157
  37. package/dist/cjs/managers/RoleManager.d.ts +0 -84
  38. package/dist/cjs/managers/RoleManager.js +0 -207
  39. package/dist/cjs/managers/index.d.ts +0 -7
  40. package/dist/cjs/managers/index.js +0 -24
  41. package/dist/cjs/rest/REST.d.ts +0 -527
  42. package/dist/cjs/rest/REST.js +0 -904
  43. package/dist/cjs/rest/index.d.ts +0 -1
  44. package/dist/cjs/rest/index.js +0 -18
  45. package/dist/cjs/sharding/ShardingManager.d.ts +0 -179
  46. package/dist/cjs/sharding/ShardingManager.js +0 -375
  47. package/dist/cjs/sharding/index.d.ts +0 -4
  48. package/dist/cjs/sharding/index.js +0 -21
  49. package/dist/cjs/structures/Channel.d.ts +0 -122
  50. package/dist/cjs/structures/Channel.js +0 -240
  51. package/dist/cjs/structures/Collection.d.ts +0 -53
  52. package/dist/cjs/structures/Collection.js +0 -115
  53. package/dist/cjs/structures/Guild.d.ts +0 -59
  54. package/dist/cjs/structures/Guild.js +0 -94
  55. package/dist/cjs/structures/GuildMember.d.ts +0 -174
  56. package/dist/cjs/structures/GuildMember.js +0 -311
  57. package/dist/cjs/structures/Interaction.d.ts +0 -245
  58. package/dist/cjs/structures/Interaction.js +0 -450
  59. package/dist/cjs/structures/Message.d.ts +0 -98
  60. package/dist/cjs/structures/Message.js +0 -195
  61. package/dist/cjs/structures/User.d.ts +0 -37
  62. package/dist/cjs/structures/User.js +0 -65
  63. package/dist/cjs/structures/index.d.ts +0 -7
  64. package/dist/cjs/structures/index.js +0 -25
  65. package/dist/cjs/structures.d.ts +0 -1
  66. package/dist/cjs/structures.js +0 -19
  67. package/dist/cjs/types.d.ts +0 -255
  68. package/dist/cjs/types.js +0 -3
  69. package/dist/cjs/utils/BitField.d.ts +0 -66
  70. package/dist/cjs/utils/BitField.js +0 -138
  71. package/dist/cjs/utils/Collection.d.ts +0 -116
  72. package/dist/cjs/utils/Collection.js +0 -265
  73. package/dist/cjs/utils/Collector.d.ts +0 -152
  74. package/dist/cjs/utils/Collector.js +0 -314
  75. package/dist/cjs/utils/DataResolver.d.ts +0 -61
  76. package/dist/cjs/utils/DataResolver.js +0 -146
  77. package/dist/cjs/utils/Formatters.d.ts +0 -145
  78. package/dist/cjs/utils/Formatters.js +0 -213
  79. package/dist/cjs/utils/IntentsBitField.d.ts +0 -85
  80. package/dist/cjs/utils/IntentsBitField.js +0 -99
  81. package/dist/cjs/utils/Partials.d.ts +0 -104
  82. package/dist/cjs/utils/Partials.js +0 -148
  83. package/dist/cjs/utils/PermissionsBitField.d.ts +0 -118
  84. package/dist/cjs/utils/PermissionsBitField.js +0 -145
  85. package/dist/cjs/utils/SnowflakeUtil.d.ts +0 -63
  86. package/dist/cjs/utils/SnowflakeUtil.js +0 -93
  87. package/dist/cjs/utils/Sweepers.d.ts +0 -119
  88. package/dist/cjs/utils/Sweepers.js +0 -249
  89. package/dist/cjs/utils/index.d.ts +0 -13
  90. package/dist/cjs/utils/index.js +0 -30
  91. package/dist/esm/Client.js +0 -634
  92. package/dist/esm/builders/ActionRowBuilder.js +0 -64
  93. package/dist/esm/builders/ButtonBuilder.js +0 -92
  94. package/dist/esm/builders/EmbedBuilder.js +0 -204
  95. package/dist/esm/builders/ModalBuilder.js +0 -157
  96. package/dist/esm/builders/SelectMenuBuilder.js +0 -161
  97. package/dist/esm/builders/SlashCommandBuilder.js +0 -311
  98. package/dist/esm/builders/index.js +0 -10
  99. package/dist/esm/enums.js +0 -208
  100. package/dist/esm/index.js +0 -34
  101. package/dist/esm/managers/BaseManager.js +0 -100
  102. package/dist/esm/managers/ChannelManager.js +0 -200
  103. package/dist/esm/managers/GuildMemberManager.js +0 -153
  104. package/dist/esm/managers/RoleManager.js +0 -203
  105. package/dist/esm/managers/index.js +0 -8
  106. package/dist/esm/rest/REST.js +0 -900
  107. package/dist/esm/rest/index.js +0 -2
  108. package/dist/esm/sharding/ShardingManager.js +0 -366
  109. package/dist/esm/sharding/index.js +0 -5
  110. package/dist/esm/structures/Channel.js +0 -232
  111. package/dist/esm/structures/Collection.js +0 -111
  112. package/dist/esm/structures/Guild.js +0 -90
  113. package/dist/esm/structures/GuildMember.js +0 -306
  114. package/dist/esm/structures/Interaction.js +0 -438
  115. package/dist/esm/structures/Message.js +0 -191
  116. package/dist/esm/structures/User.js +0 -61
  117. package/dist/esm/structures/index.js +0 -9
  118. package/dist/esm/structures.js +0 -3
  119. package/dist/esm/types.js +0 -2
  120. package/dist/esm/utils/BitField.js +0 -134
  121. package/dist/esm/utils/Collection.js +0 -261
  122. package/dist/esm/utils/Collector.js +0 -305
  123. package/dist/esm/utils/DataResolver.js +0 -142
  124. package/dist/esm/utils/Formatters.js +0 -191
  125. package/dist/esm/utils/IntentsBitField.js +0 -93
  126. package/dist/esm/utils/Partials.js +0 -137
  127. package/dist/esm/utils/PermissionsBitField.js +0 -141
  128. package/dist/esm/utils/SnowflakeUtil.js +0 -89
  129. package/dist/esm/utils/Sweepers.js +0 -245
  130. package/dist/esm/utils/index.js +0 -14
@@ -1,261 +0,0 @@
1
- /**
2
- * A Map with additional utility methods
3
- */
4
- export class Collection extends Map {
5
- /**
6
- * Identical to Map.get()
7
- * Ensures the value exists
8
- */
9
- ensure(key, defaultValueGenerator) {
10
- if (this.has(key))
11
- return this.get(key);
12
- const defaultValue = defaultValueGenerator(key, this);
13
- this.set(key, defaultValue);
14
- return defaultValue;
15
- }
16
- /**
17
- * Checks if all items pass a test
18
- */
19
- every(fn) {
20
- for (const [key, val] of this) {
21
- if (!fn(val, key, this))
22
- return false;
23
- }
24
- return true;
25
- }
26
- /**
27
- * Checks if any item passes a test
28
- */
29
- some(fn) {
30
- for (const [key, val] of this) {
31
- if (fn(val, key, this))
32
- return true;
33
- }
34
- return false;
35
- }
36
- /**
37
- * Identical to Array.filter(), but returns a Collection
38
- */
39
- filter(fn) {
40
- const results = new Collection();
41
- for (const [key, val] of this) {
42
- if (fn(val, key, this))
43
- results.set(key, val);
44
- }
45
- return results;
46
- }
47
- /**
48
- * Partitions the collection into two collections
49
- */
50
- partition(fn) {
51
- const results = [new Collection(), new Collection()];
52
- for (const [key, val] of this) {
53
- if (fn(val, key, this)) {
54
- results[0].set(key, val);
55
- }
56
- else {
57
- results[1].set(key, val);
58
- }
59
- }
60
- return results;
61
- }
62
- /**
63
- * Maps each item to another value
64
- */
65
- map(fn) {
66
- const results = [];
67
- for (const [key, val] of this) {
68
- results.push(fn(val, key, this));
69
- }
70
- return results;
71
- }
72
- /**
73
- * Maps each item to another value into a Collection
74
- */
75
- mapValues(fn) {
76
- const results = new Collection();
77
- for (const [key, val] of this) {
78
- results.set(key, fn(val, key, this));
79
- }
80
- return results;
81
- }
82
- /**
83
- * Searches for a single item
84
- */
85
- find(fn) {
86
- for (const [key, val] of this) {
87
- if (fn(val, key, this))
88
- return val;
89
- }
90
- return undefined;
91
- }
92
- /**
93
- * Searches for the key of a single item
94
- */
95
- findKey(fn) {
96
- for (const [key, val] of this) {
97
- if (fn(val, key, this))
98
- return key;
99
- }
100
- return undefined;
101
- }
102
- /**
103
- * Removes items that satisfy the provided filter function
104
- */
105
- sweep(fn) {
106
- const previousSize = this.size;
107
- for (const [key, val] of this) {
108
- if (fn(val, key, this))
109
- this.delete(key);
110
- }
111
- return previousSize - this.size;
112
- }
113
- /**
114
- * Reduces the collection to a single value
115
- */
116
- reduce(fn, initialValue) {
117
- let accumulator = initialValue;
118
- for (const [key, val] of this) {
119
- accumulator = fn(accumulator, val, key, this);
120
- }
121
- return accumulator;
122
- }
123
- /**
124
- * Identical to Array.forEach()
125
- */
126
- each(fn) {
127
- for (const [key, val] of this) {
128
- fn(val, key, this);
129
- }
130
- return this;
131
- }
132
- first(amount) {
133
- if (amount === undefined)
134
- return this.values().next().value;
135
- if (amount < 0)
136
- return this.last(amount * -1);
137
- amount = Math.min(this.size, amount);
138
- const iter = this.values();
139
- return Array.from({ length: amount }, () => iter.next().value);
140
- }
141
- firstKey(amount) {
142
- if (amount === undefined)
143
- return this.keys().next().value;
144
- if (amount < 0)
145
- return this.lastKey(amount * -1);
146
- amount = Math.min(this.size, amount);
147
- const iter = this.keys();
148
- return Array.from({ length: amount }, () => iter.next().value);
149
- }
150
- last(amount) {
151
- const arr = [...this.values()];
152
- if (amount === undefined)
153
- return arr[arr.length - 1];
154
- if (amount < 0)
155
- return this.first(amount * -1);
156
- if (!amount)
157
- return [];
158
- return arr.slice(-amount);
159
- }
160
- lastKey(amount) {
161
- const arr = [...this.keys()];
162
- if (amount === undefined)
163
- return arr[arr.length - 1];
164
- if (amount < 0)
165
- return this.firstKey(amount * -1);
166
- if (!amount)
167
- return [];
168
- return arr.slice(-amount);
169
- }
170
- random(amount) {
171
- const arr = [...this.values()];
172
- if (amount === undefined)
173
- return arr[Math.floor(Math.random() * arr.length)];
174
- if (!arr.length || !amount)
175
- return [];
176
- return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
177
- }
178
- randomKey(amount) {
179
- const arr = [...this.keys()];
180
- if (amount === undefined)
181
- return arr[Math.floor(Math.random() * arr.length)];
182
- if (!arr.length || !amount)
183
- return [];
184
- return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
185
- }
186
- /**
187
- * Combines this collection with others
188
- */
189
- concat(...collections) {
190
- const newColl = this.clone();
191
- for (const coll of collections) {
192
- for (const [key, val] of coll)
193
- newColl.set(key, val);
194
- }
195
- return newColl;
196
- }
197
- /**
198
- * Checks if this collection shares identical items with another
199
- */
200
- equals(collection) {
201
- if (this === collection)
202
- return true;
203
- if (this.size !== collection.size)
204
- return false;
205
- for (const [key, value] of this) {
206
- if (!collection.has(key) || value !== collection.get(key)) {
207
- return false;
208
- }
209
- }
210
- return true;
211
- }
212
- /**
213
- * Creates an identical shallow copy of this collection
214
- */
215
- clone() {
216
- return new Collection(this);
217
- }
218
- /**
219
- * Sorts the collection and returns it
220
- */
221
- sort(compareFunction = Collection.defaultSort) {
222
- const entries = [...this.entries()];
223
- entries.sort((a, b) => compareFunction(a[1], b[1], a[0], b[0]));
224
- this.clear();
225
- for (const [k, v] of entries) {
226
- this.set(k, v);
227
- }
228
- return this;
229
- }
230
- /**
231
- * Sorts the collection by keys and returns it
232
- */
233
- sortByKey(compareFunction = Collection.defaultSort) {
234
- const entries = [...this.entries()];
235
- entries.sort((a, b) => compareFunction(a[0], b[0], a[1], b[1]));
236
- this.clear();
237
- for (const [k, v] of entries) {
238
- this.set(k, v);
239
- }
240
- return this;
241
- }
242
- /**
243
- * Returns an array of items
244
- */
245
- toJSON() {
246
- return [...this.values()];
247
- }
248
- /**
249
- * Default sort function
250
- */
251
- static defaultSort(firstValue, secondValue) {
252
- return Number(firstValue > secondValue) || Number(firstValue === secondValue) - 1;
253
- }
254
- /**
255
- * Creates a Collection from an array
256
- */
257
- static from(entries) {
258
- return new Collection(entries);
259
- }
260
- }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9Db2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQWlCLFNBQVEsR0FBUztJQUM3Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBTSxFQUFFLHFCQUFzRDtRQUNuRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsRUFBbUQ7UUFDdkQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLEVBQW1EO1FBQ3RELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsRUFBbUQ7UUFDeEQsTUFBTSxPQUFP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LENBQUM7UUFDN0IsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFPRCxNQUFNLENBQUMsTUFBZTtRQUNwQixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFPRCxTQUFTLENBQUMsTUFBZTtRQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0IsSUFBSSxNQUFNLEtB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QyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxXQUFXLENBQUksVUFBYSxFQUFFLFdBQWM7UUFDekQsT0FBTyxNQUFNLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQU8sT0FBa0M7UUFDbEQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgTWFwIHdpdGggYWRkaXRpb25hbCB1dGlsaXR5IG1ldGhvZHNcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb248SywgVj4gZXh0ZW5kcyBNYXA8SywgVj4ge1xuICAvKipcbiAgICogSWRlbnRpY2FsIHRvIE1hcC5nZXQoKVxuICAgKiBFbnN1cmVzIHRoZSB2YWx1ZSBleGlzdHNcbiAgICovXG4gIGVuc3VyZShrZXk6IEssIGRlZmF1bHRWYWx1ZUdlbmVyYXRvcjogKGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gVik6IFYge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSByZXR1cm4gdGhpcy5nZXQoa2V5KSE7XG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlR2VuZXJhdG9yKGtleSwgdGhpcyk7XG4gICAgdGhpcy5zZXQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFsbCBpdGVtcyBwYXNzIGEgdGVzdFxuICAgKi9cbiAgZXZlcnkoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmICghZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBwYXNzZXMgYSB0ZXN0XG4gICAqL1xuICBzb21lKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWNhbCB0byBBcnJheS5maWx0ZXIoKSwgYnV0IHJldHVybnMgYSBDb2xsZWN0aW9uXG4gICAqL1xuICBmaWx0ZXIoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogQ29sbGVjdGlvbjxLLCBWPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IG5ldyBDb2xsZWN0aW9uPEssIFY+KCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJlc3VsdHMuc2V0KGtleSwgdmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUGFydGl0aW9ucyB0aGUgY29sbGVjdGlvbiBpbnRvIHR3byBjb2xsZWN0aW9uc1xuICAgKi9cbiAgcGFydGl0aW9uKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IFtDb2xsZWN0aW9uPEssIFY+LCBDb2xsZWN0aW9uPEssIFY+XSB7XG4gICAgY29uc3QgcmVzdWx0czogW0NvbGxlY3Rpb248SywgVj4sIENvbGxlY3Rpb248SywgVj5dID0gW25ldyBDb2xsZWN0aW9uPEssIFY+KCksIG5ldyBDb2xsZWN0aW9uPEssIFY+KCldO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSB7XG4gICAgICAgIHJlc3VsdHNbMF0uc2V0KGtleSwgdmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdHNbMV0uc2V0KGtleSwgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBlYWNoIGl0ZW0gdG8gYW5vdGhlciB2YWx1ZVxuICAgKi9cbiAgbWFwPFQ+KGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gVCk6IFRbXSB7XG4gICAgY29uc3QgcmVzdWx0czogVFtdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIHJlc3VsdHMucHVzaChmbih2YWwsIGtleSwgdGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGVhY2ggaXRlbSB0byBhbm90aGVyIHZhbHVlIGludG8gYSBDb2xsZWN0aW9uXG4gICAqL1xuICBtYXBWYWx1ZXM8VD4oZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBUKTogQ29sbGVjdGlvbjxLLCBUPiB7XG4gICAgY29uc3QgcmVzdWx0cyA9IG5ldyBDb2xsZWN0aW9uPEssIFQ+KCk7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIHJlc3VsdHMuc2V0KGtleSwgZm4odmFsLCBrZXksIHRoaXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZm9yIGEgc2luZ2xlIGl0ZW1cbiAgICovXG4gIGZpbmQoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogViB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZm9yIHRoZSBrZXkgb2YgYSBzaW5nbGUgaXRlbVxuICAgKi9cbiAgZmluZEtleShmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBLIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGl0ZW1zIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgZmlsdGVyIGZ1bmN0aW9uXG4gICAqL1xuICBzd2VlcChmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGNvbnN0IHByZXZpb3VzU2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgdGhpcy5kZWxldGUoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZpb3VzU2l6ZSAtIHRoaXMuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWR1Y2VzIHRoZSBjb2xsZWN0aW9uIHRvIGEgc2luZ2xlIHZhbHVlXG4gICAqL1xuICByZWR1Y2U8VD4oZm46IChhY2N1bXVsYXRvcjogVCwgdmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gVCwgaW5pdGlhbFZhbHVlOiBUKTogVCB7XG4gICAgbGV0IGFjY3VtdWxhdG9yID0gaW5pdGlhbFZhbHVlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGZuKGFjY3VtdWxhdG9yLCB2YWwsIGtleSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGljYWwgdG8gQXJyYXkuZm9yRWFjaCgpXG4gICAqL1xuICBlYWNoKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gdm9pZCk6IHRoaXMge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBmbih2YWwsIGtleSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGl0ZW0ocykgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIGZpcnN0KCk6IFYgfCB1bmRlZmluZWQ7XG4gIGZpcnN0KGFtb3VudDogbnVtYmVyKTogVltdO1xuICBmaXJzdChhbW91bnQ/OiBudW1iZXIpOiBWIHwgVltdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoYW1vdW50IDwgMCkgcmV0dXJuIHRoaXMubGFzdChhbW91bnQgKiAtMSk7XG4gICAgYW1vdW50ID0gTWF0aC5taW4odGhpcy5zaXplLCBhbW91bnQpO1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLnZhbHVlcygpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBhbW91bnQgfSwgKCkgPT4gaXRlci5uZXh0KCkudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGtleShzKSBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgZmlyc3RLZXkoKTogSyB8IHVuZGVmaW5lZDtcbiAgZmlyc3RLZXkoYW1vdW50OiBudW1iZXIpOiBLW107XG4gIGZpcnN0S2V5KGFtb3VudD86IG51bWJlcik6IEsgfCBLW10gfCB1bmRlZmluZWQge1xuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMua2V5cygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoYW1vdW50IDwgMCkgcmV0dXJuIHRoaXMubGFzdEtleShhbW91bnQgKiAtMSk7XG4gICAgYW1vdW50ID0gTWF0aC5taW4odGhpcy5zaXplLCBhbW91bnQpO1xuICAgIGNvbnN0IGl0ZXIgPSB0aGlzLmtleXMoKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogYW1vdW50IH0sICgpID0+IGl0ZXIubmV4dCgpLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IGl0ZW0ocykgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIGxhc3QoKTogViB8IHVuZGVmaW5lZDtcbiAgbGFzdChhbW91bnQ6IG51bWJlcik6IFZbXTtcbiAgbGFzdChhbW91bnQ/OiBudW1iZXIpOiBWIHwgVltdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhcnIgPSBbLi4udGhpcy52YWx1ZXMoKV07XG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICBpZiAoYW1vdW50IDwgMCkgcmV0dXJuIHRoaXMuZmlyc3QoYW1vdW50ICogLTEpO1xuICAgIGlmICghYW1vdW50KSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZSgtYW1vdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IGtleShzKSBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgbGFzdEtleSgpOiBLIHwgdW5kZWZpbmVkO1xuICBsYXN0S2V5KGFtb3VudDogbnVtYmVyKTogS1tdO1xuICBsYXN0S2V5KGFtb3VudD86IG51bWJlcik6IEsgfCBLW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLmtleXMoKV07XG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICBpZiAoYW1vdW50IDwgMCkgcmV0dXJuIHRoaXMuZmlyc3RLZXkoYW1vdW50ICogLTEpO1xuICAgIGlmICghYW1vdW50KSByZXR1cm4gW107XG4gICAgcmV0dXJuIGFyci5zbGljZSgtYW1vdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmFuZG9tIGl0ZW0gZnJvbSB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgcmFuZG9tKCk6IFYgfCB1bmRlZmluZWQ7XG4gIHJhbmRvbShhbW91bnQ6IG51bWJlcik6IFZbXTtcbiAgcmFuZG9tKGFtb3VudD86IG51bWJlcik6IFYgfCBWW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLnZhbHVlcygpXTtcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCldO1xuICAgIGlmICghYXJyLmxlbmd0aCB8fCAhYW1vdW50KSByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGgubWluKGFtb3VudCwgYXJyLmxlbmd0aCkgfSwgKCkgPT4gYXJyLnNwbGljZShNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKSwgMSlbMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByYW5kb20ga2V5IGZyb20gdGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIHJhbmRvbUtleSgpOiBLIHwgdW5kZWZpbmVkO1xuICByYW5kb21LZXkoYW1vdW50OiBudW1iZXIpOiBLW107XG4gIHJhbmRvbUtleShhbW91bnQ/OiBudW1iZXIpOiBLIHwgS1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhcnIgPSBbLi4udGhpcy5rZXlzKCldO1xuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XG4gICAgaWYgKCFhcnIubGVuZ3RoIHx8ICFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogTWF0aC5taW4oYW1vdW50LCBhcnIubGVuZ3RoKSB9LCAoKSA9PiBhcnIuc3BsaWNlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpLCAxKVswXSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tYmluZXMgdGhpcyBjb2xsZWN0aW9uIHdpdGggb3RoZXJzXG4gICAqL1xuICBjb25jYXQoLi4uY29sbGVjdGlvbnM6IENvbGxlY3Rpb248SywgVj5bXSk6IENvbGxlY3Rpb248SywgVj4ge1xuICAgIGNvbnN0IG5ld0NvbGwgPSB0aGlzLmNsb25lKCk7XG4gICAgZm9yIChjb25zdCBjb2xsIG9mIGNvbGxlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgY29sbCkgbmV3Q29sbC5zZXQoa2V5LCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3Q29sbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBjb2xsZWN0aW9uIHNoYXJlcyBpZGVudGljYWwgaXRlbXMgd2l0aCBhbm90aGVyXG4gICAqL1xuICBlcXVhbHMoY29sbGVjdGlvbjogQ29sbGVjdGlvbjxLLCBWPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzID09PSBjb2xsZWN0aW9uKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5zaXplICE9PSBjb2xsZWN0aW9uLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoIWNvbGxlY3Rpb24uaGFzKGtleSkgfHwgdmFsdWUgIT09IGNvbGxlY3Rpb24uZ2V0KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGlkZW50aWNhbCBzaGFsbG93IGNvcHkgb2YgdGhpcyBjb2xsZWN0aW9uXG4gICAqL1xuICBjbG9uZSgpOiBDb2xsZWN0aW9uPEssIFY+IHtcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIGNvbGxlY3Rpb24gYW5kIHJldHVybnMgaXRcbiAgICovXG4gIHNvcnQoY29tcGFyZUZ1bmN0aW9uOiAoZmlyc3RWYWx1ZTogViwgc2Vjb25kVmFsdWU6IFYsIGZpcnN0S2V5OiBLLCBzZWNvbmRLZXk6IEspID0+IG51bWJlciA9IENvbGxlY3Rpb24uZGVmYXVsdFNvcnQpOiB0aGlzIHtcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcygpXTtcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVGdW5jdGlvbihhWzFdLCBiWzFdLCBhWzBdLCBiWzBdKSk7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIGVudHJpZXMpIHtcbiAgICAgIHRoaXMuc2V0KGssIHYpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgY29sbGVjdGlvbiBieSBrZXlzIGFuZCByZXR1cm5zIGl0XG4gICAqL1xuICBzb3J0QnlLZXkoY29tcGFyZUZ1bmN0aW9uOiAoZmlyc3RLZXk6IEssIHNlY29uZEtleTogSywgZmlyc3RWYWx1ZTogViwgc2Vjb25kVmFsdWU6IFYpID0+IG51bWJlciA9IENvbGxlY3Rpb24uZGVmYXVsdFNvcnQpOiB0aGlzIHtcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcygpXTtcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IGNvbXBhcmVGdW5jdGlvbihhWzBdLCBiWzBdLCBhWzFdLCBiWzFdKSk7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIGVudHJpZXMpIHtcbiAgICAgIHRoaXMuc2V0KGssIHYpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGl0ZW1zXG4gICAqL1xuICB0b0pTT04oKTogVltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgc29ydCBmdW5jdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdFNvcnQ8Vj4oZmlyc3RWYWx1ZTogViwgc2Vjb25kVmFsdWU6IFYpOiBudW1iZXIge1xuICAgIHJldHVybiBOdW1iZXIoZmlyc3RWYWx1ZSA+IHNlY29uZFZhbHVlKSB8fCBOdW1iZXIoZmlyc3RWYWx1ZSA9PT0gc2Vjb25kVmFsdWUpIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ29sbGVjdGlvbiBmcm9tIGFuIGFycmF5XG4gICAqL1xuICBzdGF0aWMgZnJvbTxLLCBWPihlbnRyaWVzOiBJdGVyYWJsZTxyZWFkb25seSBbSywgVl0+KTogQ29sbGVjdGlvbjxLLCBWPiB7XG4gICAgcmV0dXJuIG5ldyBDb2xsZWN0aW9uKGVudHJpZXMpO1xuICB9XG59XG4iXX0=
@@ -1,305 +0,0 @@
1
- /**
2
- * Collectors for awaiting messages, reactions, and interactions
3
- * API compatible with Discord.js Collectors
4
- */
5
- import { EventEmitter } from 'events';
6
- import { Collection } from './Collection';
7
- /**
8
- * Abstract base class for collectors
9
- */
10
- export class Collector extends EventEmitter {
11
- /** The client that instantiated this collector */
12
- client;
13
- /** The items collected */
14
- collected = new Collection();
15
- /** Whether the collector has ended */
16
- ended = false;
17
- /** The reason the collector ended */
18
- endReason = null;
19
- /** Filter function */
20
- filter;
21
- /** Collector options */
22
- options;
23
- /** Number of items processed */
24
- _processedCount = 0;
25
- /** Timeout for time limit */
26
- _timeout = null;
27
- /** Timeout for idle limit */
28
- _idleTimeout = null;
29
- constructor(client, options = {}) {
30
- super();
31
- this.client = client;
32
- this.options = options;
33
- this.filter = options.filter ?? (() => true);
34
- this.handleCollect = this.handleCollect.bind(this);
35
- this.handleDispose = this.handleDispose.bind(this);
36
- if (options.time) {
37
- this._timeout = setTimeout(() => this.stop('time'), options.time);
38
- }
39
- if (options.idle) {
40
- this._idleTimeout = setTimeout(() => this.stop('idle'), options.idle);
41
- }
42
- }
43
- /**
44
- * Handle an item being collected
45
- */
46
- async handleCollect(item) {
47
- if (this.ended)
48
- return;
49
- this._processedCount++;
50
- const filterResult = await this.filter(item, this.collected);
51
- if (!filterResult)
52
- return;
53
- const key = this.collect(item);
54
- if (key === null)
55
- return;
56
- this.collected.set(key, item);
57
- this.emit('collect', item);
58
- // Reset idle timer
59
- if (this._idleTimeout) {
60
- clearTimeout(this._idleTimeout);
61
- this._idleTimeout = setTimeout(() => this.stop('idle'), this.options.idle);
62
- }
63
- // Check limits
64
- if (this.options.max && this.collected.size >= this.options.max) {
65
- this.stop('limit');
66
- }
67
- if (this.options.maxProcessed && this._processedCount >= this.options.maxProcessed) {
68
- this.stop('processedLimit');
69
- }
70
- }
71
- /**
72
- * Handle an item being disposed
73
- */
74
- handleDispose(item) {
75
- if (!this.options.dispose)
76
- return;
77
- const key = this.dispose(item);
78
- if (key === null)
79
- return;
80
- if (this.collected.has(key)) {
81
- this.collected.delete(key);
82
- this.emit('dispose', item);
83
- }
84
- }
85
- /**
86
- * Stop the collector
87
- */
88
- stop(reason = 'user') {
89
- if (this.ended)
90
- return;
91
- this.ended = true;
92
- this.endReason = reason;
93
- if (this._timeout) {
94
- clearTimeout(this._timeout);
95
- this._timeout = null;
96
- }
97
- if (this._idleTimeout) {
98
- clearTimeout(this._idleTimeout);
99
- this._idleTimeout = null;
100
- }
101
- this.emit('end', this.collected, reason);
102
- }
103
- /**
104
- * Reset the collector's timer
105
- */
106
- resetTimer(options = {}) {
107
- if (this._timeout) {
108
- clearTimeout(this._timeout);
109
- this._timeout = null;
110
- }
111
- if (this._idleTimeout) {
112
- clearTimeout(this._idleTimeout);
113
- this._idleTimeout = null;
114
- }
115
- if (options.time ?? this.options.time) {
116
- this._timeout = setTimeout(() => this.stop('time'), options.time ?? this.options.time);
117
- }
118
- if (options.idle ?? this.options.idle) {
119
- this._idleTimeout = setTimeout(() => this.stop('idle'), options.idle ?? this.options.idle);
120
- }
121
- }
122
- /**
123
- * Check the end conditions
124
- */
125
- checkEnd() {
126
- const reason = this.endReason;
127
- if (reason) {
128
- this.stop(reason);
129
- return true;
130
- }
131
- return false;
132
- }
133
- /**
134
- * Get the next item
135
- */
136
- get next() {
137
- return new Promise((resolve, reject) => {
138
- if (this.ended) {
139
- reject(new Error('Collector has ended'));
140
- return;
141
- }
142
- const cleanup = () => {
143
- this.removeListener('collect', onCollect);
144
- this.removeListener('end', onEnd);
145
- };
146
- const onCollect = (item) => {
147
- cleanup();
148
- resolve(item);
149
- };
150
- const onEnd = () => {
151
- cleanup();
152
- reject(new Error('Collector ended'));
153
- };
154
- this.on('collect', onCollect);
155
- this.on('end', onEnd);
156
- });
157
- }
158
- }
159
- /**
160
- * Collector for messages
161
- */
162
- export class MessageCollector extends Collector {
163
- channelId;
164
- messageHandler;
165
- constructor(client, channelId, options = {}) {
166
- super(client, options);
167
- this.channelId = channelId;
168
- // Get bot's user ID to filter out bot's own messages
169
- const botUserId = client.user?.id;
170
- this.messageHandler = (message) => {
171
- if (message.channel_id === this.channelId || message.channelId === this.channelId) {
172
- // Automatically filter out bot's own messages
173
- const authorId = message.author?.id || message.author_id;
174
- if (botUserId && authorId === botUserId)
175
- return;
176
- // Also filter by application_id (bot messages have this)
177
- if (message.application_id || message.applicationId)
178
- return;
179
- this.handleCollect(message);
180
- }
181
- };
182
- client.on('messageCreate', this.messageHandler);
183
- this.once('end', () => {
184
- client.removeListener('messageCreate', this.messageHandler);
185
- });
186
- }
187
- collect(message) {
188
- return message.id ?? null;
189
- }
190
- dispose(message) {
191
- return message.id ?? null;
192
- }
193
- }
194
- /**
195
- * Collector for interactions (buttons, select menus, etc.)
196
- */
197
- export class InteractionCollector extends Collector {
198
- channelId;
199
- guildId;
200
- messageId;
201
- interactionType;
202
- componentType;
203
- interactionHandler;
204
- constructor(client, options = {}) {
205
- super(client, options);
206
- this.channelId = options.channelId;
207
- this.guildId = options.guildId;
208
- this.messageId = options.messageId;
209
- this.interactionType = options.interactionType
210
- ? Array.isArray(options.interactionType) ? options.interactionType : [options.interactionType]
211
- : undefined;
212
- this.componentType = options.componentType
213
- ? Array.isArray(options.componentType) ? options.componentType : [options.componentType]
214
- : undefined;
215
- this.interactionHandler = (interaction) => {
216
- // Filter by channel
217
- if (this.channelId && interaction.channelId !== this.channelId)
218
- return;
219
- // Filter by guild
220
- if (this.guildId && interaction.guildId !== this.guildId)
221
- return;
222
- // Filter by message
223
- if (this.messageId && interaction.message?.id !== this.messageId)
224
- return;
225
- // Filter by interaction type
226
- if (this.interactionType && !this.interactionType.includes(interaction.type))
227
- return;
228
- // Filter by component type
229
- if (this.componentType && interaction.componentType && !this.componentType.includes(interaction.componentType))
230
- return;
231
- this.handleCollect(interaction);
232
- };
233
- client.on('interactionCreate', this.interactionHandler);
234
- this.once('end', () => {
235
- client.removeListener('interactionCreate', this.interactionHandler);
236
- });
237
- }
238
- collect(interaction) {
239
- return interaction.id ?? null;
240
- }
241
- dispose(interaction) {
242
- return interaction.id ?? null;
243
- }
244
- }
245
- /**
246
- * Collector for reactions
247
- */
248
- export class ReactionCollector extends Collector {
249
- messageId;
250
- reactionHandler;
251
- constructor(client, messageId, options) {
252
- super(client, options);
253
- this.messageId = messageId;
254
- this.reactionHandler = (reaction) => {
255
- if (reaction.message_id === this.messageId || reaction.messageId === this.messageId) {
256
- this.handleCollect(reaction);
257
- }
258
- };
259
- client.on('messageReactionAdd', this.reactionHandler);
260
- this.once('end', () => {
261
- client.removeListener('messageReactionAdd', this.reactionHandler);
262
- });
263
- }
264
- collect(reaction) {
265
- // Key is emoji identifier
266
- return reaction.emoji?.id ?? reaction.emoji?.name ?? null;
267
- }
268
- dispose(reaction) {
269
- return reaction.emoji?.id ?? reaction.emoji?.name ?? null;
270
- }
271
- }
272
- /**
273
- * Await messages helper
274
- */
275
- export function awaitMessages(client, channelId, options = {}) {
276
- return new Promise((resolve, reject) => {
277
- const collector = new MessageCollector(client, channelId, options);
278
- collector.once('end', (collected, reason) => {
279
- if (options.max && collected.size < options.max) {
280
- reject(new Error(`Collector ended with reason: ${reason}`));
281
- }
282
- else {
283
- resolve(collected);
284
- }
285
- });
286
- });
287
- }
288
- /**
289
- * Await reactions helper
290
- */
291
- export function awaitReactions(client, messageId, options) {
292
- return new Promise((resolve, reject) => {
293
- const collector = new ReactionCollector(client, messageId, options);
294
- collector.once('end', (collected, reason) => {
295
- if (options.max && collected.size < options.max) {
296
- reject(new Error(`Collector ended with reason: ${reason}`));
297
- }
298
- else {
299
- resolve(collected);
300
- }
301
- });
302
- });
303
- }
304
- export default Collector;
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFzQjFDOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixTQUErQixTQUFRLFlBQVk7SUFDdkUsa0RBQWtEO0lBQ2xDLE1BQU0sQ0FBTTtJQUU1QiwwQkFBMEI7SUFDVixTQUFTLEdBQXFCLElBQUksVUFBVSxFQUFFLENBQUM7SUFFL0Qsc0NBQXNDO0lBQy9CLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFckIscUNBQXFDO0lBQzlCLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRXZDLHNCQUFzQjtJQUNmLE1BQU0sQ0FBdUU7SUFFcEYsd0JBQXdCO0lBQ2pCLE9BQU8sQ0FBc0I7SUFFcEMsZ0NBQWdDO0lBQ3hCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFNUIsNkJBQTZCO0lBQ3JCLFFBQVEsR0FBMEIsSUFBSSxDQUFDO0lBRS9DLDZCQUE2QjtJQUNyQixZQUFZLEdBQTBCLElBQUksQ0FBQztJQUVuRCxZQUFZLE1BQVcsRUFBRSxVQUErQixFQUFFO1FBQ3hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBSSxPQUFPLENBQUMsTUFBYyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUks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QztRQUVwRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsZUFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RvcnMgZm9yIGF3YWl0aW5nIG1lc3NhZ2VzLCByZWFjdGlvbnMsIGFuZCBpbnRlcmFjdGlvbnNcbiAqIEFQSSBjb21wYXRpYmxlIHdpdGggRGlzY29yZC5qcyBDb2xsZWN0b3JzXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rvck9wdGlvbnM8VD4ge1xuICAvKiogSG93IGxvbmcgdG8gcnVuIHRoZSBjb2xsZWN0b3IgZm9yIGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lPzogbnVtYmVyO1xuICAvKiogSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIG5leHQgaXRlbSBpbiBtaWxsaXNlY29uZHMgKi9cbiAgaWRsZT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGNvbGxlY3QgKi9cbiAgbWF4PzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcHJvY2VzcyAqL1xuICBtYXhQcm9jZXNzZWQ/OiBudW1iZXI7XG4gIC8qKiBGaWx0ZXIgZnVuY3Rpb24gKi9cbiAgZmlsdGVyPzogKGl0ZW06IFQsIGNvbGxlY3RlZDogQ29sbGVjdGlvbjxzdHJpbmcsIFQ+KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdG8gZGlzcG9zZSBvZiBpdGVtcyB3aGVuIHRoZSBjb2xsZWN0b3IgZW5kcyAqL1xuICBkaXNwb3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0b3JSZXNldFRpbWVyT3B0aW9ucyB7XG4gIHRpbWU/OiBudW1iZXI7XG4gIGlkbGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29sbGVjdG9yc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29sbGVjdG9yPEsgZXh0ZW5kcyBzdHJpbmcsIFY+IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqIFRoZSBjbGllbnQgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBjb2xsZWN0b3IgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogYW55O1xuICBcbiAgLyoqIFRoZSBpdGVtcyBjb2xsZWN0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbGxlY3RlZDogQ29sbGVjdGlvbjxLLCBWPiA9IG5ldyBDb2xsZWN0aW9uKCk7XG4gIFxuICAvKiogV2hldGhlciB0aGUgY29sbGVjdG9yIGhhcyBlbmRlZCAqL1xuICBwdWJsaWMgZW5kZWQgPSBmYWxzZTtcbiAgXG4gIC8qKiBUaGUgcmVhc29uIHRoZSBjb2xsZWN0b3IgZW5kZWQgKi9cbiAgcHVibGljIGVuZFJlYXNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKiogRmlsdGVyIGZ1bmN0aW9uICovXG4gIHB1YmxpYyBmaWx0ZXI6IChpdGVtOiBWLCBjb2xsZWN0ZWQ6IENvbGxlY3Rpb248SywgVj4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICBcbiAgLyoqIENvbGxlY3RvciBvcHRpb25zICovXG4gIHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0b3JPcHRpb25zPFY+O1xuICBcbiAgLyoqIE51bWJlciBvZiBpdGVtcyBwcm9jZXNzZWQgKi9cbiAgcHJpdmF0ZSBfcHJvY2Vzc2VkQ291bnQgPSAwO1xuICBcbiAgLyoqIFRpbWVvdXQgZm9yIHRpbWUgbGltaXQgKi9cbiAgcHJpdmF0ZSBfdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKiBUaW1lb3V0IGZvciBpZGxlIGxpbWl0ICovXG4gIHByaXZhdGUgX2lkbGVUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBvcHRpb25zOiBDb2xsZWN0b3JPcHRpb25zPFY+ID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5maWx0ZXIgPSAob3B0aW9ucy5maWx0ZXIgYXMgYW55KSA/PyAoKCkgPT4gdHJ1ZSk7XG4gICAgXG4gICAgdGhpcy5oYW5kbGVDb2xsZWN0ID0gdGhpcy5oYW5kbGVDb2xsZWN0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEaXNwb3NlID0gdGhpcy5oYW5kbGVEaXNwb3NlLmJpbmQodGhpcyk7XG4gICAgXG4gICAgaWYgKG9wdGlvbnMudGltZSkge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCd0aW1lJyksIG9wdGlvbnMudGltZSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlkbGUpIHtcbiAgICAgIHRoaXMuX2lkbGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0b3AoJ2lkbGUnKSwgb3B0aW9ucy5pZGxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGl0ZW0gYmVpbmcgY29sbGVjdGVkXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb2xsZWN0KGl0ZW06IFYpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuX3Byb2Nlc3NlZENvdW50Kys7XG4gICAgXG4gICAgY29uc3QgZmlsdGVyUmVzdWx0ID0gYXdhaXQgdGhpcy5maWx0ZXIoaXRlbSwgdGhpcy5jb2xsZWN0ZWQpO1xuICAgIGlmICghZmlsdGVyUmVzdWx0KSByZXR1cm47XG4gICAgXG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb2xsZWN0KGl0ZW0pO1xuICAgIGlmIChrZXkgPT09IG51bGwpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLmNvbGxlY3RlZC5zZXQoa2V5LCBpdGVtKTtcbiAgICB0aGlzLmVtaXQoJ2NvbGxlY3QnLCBpdGVtKTtcbiAgICBcbiAgICAvLyBSZXNldCBpZGxlIHRpbWVyXG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpO1xuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcCgnaWRsZScpLCB0aGlzLm9wdGlvbnMuaWRsZSEpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBsaW1pdHNcbiAgICBpZiAodGhpcy5vcHRpb25zLm1heCAmJiB0aGlzLmNvbGxlY3RlZC5zaXplID49IHRoaXMub3B0aW9ucy5tYXgpIHtcbiAgICAgIHRoaXMuc3RvcCgnbGltaXQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhQcm9jZXNzZWQgJiYgdGhpcy5fcHJvY2Vzc2VkQ291bnQgPj0gdGhpcy5vcHRpb25zLm1heFByb2Nlc3NlZCkge1xuICAgICAgdGhpcy5zdG9wKCdwcm9jZXNzZWRMaW1pdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gaXRlbSBiZWluZyBkaXNwb3NlZFxuICAgKi9cbiAgaGFuZGxlRGlzcG9zZShpdGVtOiBWKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZGlzcG9zZSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGtleSA9IHRoaXMuZGlzcG9zZShpdGVtKTtcbiAgICBpZiAoa2V5ID09PSBudWxsKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMuY29sbGVjdGVkLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLmNvbGxlY3RlZC5kZWxldGUoa2V5KTtcbiAgICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGtleSBmb3IgYW4gaXRlbVxuICAgKi9cbiAgYWJzdHJhY3QgY29sbGVjdChpdGVtOiBWKTogSyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUga2V5IGZvciBkaXNwb3NpbmcgYW4gaXRlbVxuICAgKi9cbiAgYWJzdHJhY3QgZGlzcG9zZShpdGVtOiBWKTogSyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFN0b3AgdGhlIGNvbGxlY3RvclxuICAgKi9cbiAgc3RvcChyZWFzb24gPSAndXNlcicpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgIHRoaXMuZW5kUmVhc29uID0gcmVhc29uO1xuICAgIFxuICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpO1xuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXQoJ2VuZCcsIHRoaXMuY29sbGVjdGVkLCByZWFzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjb2xsZWN0b3IncyB0aW1lclxuICAgKi9cbiAgcmVzZXRUaW1lcihvcHRpb25zOiBDb2xsZWN0b3JSZXNldFRpbWVyT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5faWRsZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pZGxlVGltZW91dCk7XG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIFxuICAgIGlmIChvcHRpb25zLnRpbWUgPz8gdGhpcy5vcHRpb25zLnRpbWUpIHtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcCgndGltZScpLCBvcHRpb25zLnRpbWUgPz8gdGhpcy5vcHRpb25zLnRpbWUpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pZGxlID8/IHRoaXMub3B0aW9ucy5pZGxlKSB7XG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCdpZGxlJyksIG9wdGlvbnMuaWRsZSA/PyB0aGlzLm9wdGlvbnMuaWRsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBlbmQgY29uZGl0aW9uc1xuICAgKi9cbiAgY2hlY2tFbmQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVhc29uID0gdGhpcy5lbmRSZWFzb247XG4gICAgaWYgKHJlYXNvbikge1xuICAgICAgdGhpcy5zdG9wKHJlYXNvbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV4dCBpdGVtXG4gICAqL1xuICBnZXQgbmV4dCgpOiBQcm9taXNlPFY+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW5kZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ29sbGVjdG9yIGhhcyBlbmRlZCcpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdjb2xsZWN0Jywgb25Db2xsZWN0KTtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3Qgb25Db2xsZWN0ID0gKGl0ZW06IFYpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGl0ZW0pO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3Qgb25FbmQgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ29sbGVjdG9yIGVuZGVkJykpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgdGhpcy5vbignY29sbGVjdCcsIG9uQ29sbGVjdCk7XG4gICAgICB0aGlzLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGNvbGxlY3RvciBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgZXh0ZW5kcyBDb2xsZWN0b3JPcHRpb25zPGFueT4ge1xuICAvKiogQ2hhbm5lbCB0byBjb2xsZWN0IG1lc3NhZ2VzIGZyb20gKi9cbiAgY2hhbm5lbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbGxlY3RvciBmb3IgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE1lc3NhZ2VDb2xsZWN0b3IgZXh0ZW5kcyBDb2xsZWN0b3I8c3RyaW5nLCBhbnk+IHtcbiAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIYW5kbGVyOiAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBjaGFubmVsSWQ6IHN0cmluZywgb3B0aW9uczogTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKGNsaWVudCwgb3B0aW9ucyk7XG4gICAgdGhpcy5jaGFubmVsSWQgPSBjaGFubmVsSWQ7XG4gICAgXG4gICAgLy8gR2V0IGJvdCdzIHVzZXIgSUQgdG8gZmlsdGVyIG91dCBib3QncyBvd24gbWVzc2FnZXNcbiAgICBjb25zdCBib3RVc2VySWQgPSBjbGllbnQudXNlcj8uaWQ7XG4gICAgXG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLmNoYW5uZWxfaWQgPT09IHRoaXMuY2hhbm5lbElkIHx8IG1lc3NhZ2UuY2hhbm5lbElkID09PSB0aGlzLmNoYW5uZWxJZCkge1xuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGZpbHRlciBvdXQgYm90J3Mgb3duIG1lc3NhZ2VzXG4gICAgICAgIGNvbnN0IGF1dGhvcklkID0gbWVzc2FnZS5hdXRob3I/LmlkIHx8IG1lc3NhZ2UuYXV0aG9yX2lkO1xuICAgICAgICBpZiAoYm90VXNlcklkICYmIGF1dGhvcklkID09PSBib3RVc2VySWQpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIC8vIEFsc28gZmlsdGVyIGJ5IGFwcGxpY2F0aW9uX2lkIChib3QgbWVzc2FnZXMgaGF2ZSB0aGlzKVxuICAgICAgICBpZiAobWVzc2FnZS5hcHBsaWNhdGlvbl9pZCB8fCBtZXNzYWdlLmFwcGxpY2F0aW9uSWQpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIGNsaWVudC5vbignbWVzc2FnZUNyZWF0ZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgIFxuICAgIHRoaXMub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdtZXNzYWdlQ3JlYXRlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBjb2xsZWN0KG1lc3NhZ2U6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBtZXNzYWdlLmlkID8/IG51bGw7XG4gIH1cblxuICBkaXNwb3NlKG1lc3NhZ2U6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBtZXNzYWdlLmlkID8/IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmFjdGlvbiBjb2xsZWN0b3Igb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyYWN0aW9uQ29sbGVjdG9yT3B0aW9ucyBleHRlbmRzIENvbGxlY3Rvck9wdGlvbnM8YW55PiB7XG4gIC8qKiBDaGFubmVsIHRvIGNvbGxlY3QgaW50ZXJhY3Rpb25zIGZyb20gKi9cbiAgY2hhbm5lbElkPzogc3RyaW5nO1xuICAvKiogR3VpbGQgdG8gY29sbGVjdCBpbnRlcmFjdGlvbnMgZnJvbSAqL1xuICBndWlsZElkPzogc3RyaW5nO1xuICAvKiogTWVzc2FnZSB0byBjb2xsZWN0IGludGVyYWN0aW9ucyBmcm9tICovXG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgLyoqIEludGVyYWN0aW9uIHR5cGVzIHRvIGNvbGxlY3QgKi9cbiAgaW50ZXJhY3Rpb25UeXBlPzogbnVtYmVyIHwgbnVtYmVyW107XG4gIC8qKiBDb21wb25lbnQgdHlwZXMgdG8gY29sbGVjdCAqL1xuICBjb21wb25lbnRUeXBlPzogbnVtYmVyIHwgbnVtYmVyW107XG59XG5cbi8qKlxuICogQ29sbGVjdG9yIGZvciBpbnRlcmFjdGlvbnMgKGJ1dHRvbnMsIHNlbGVjdCBtZW51cywgZXRjLilcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uQ29sbGVjdG9yIGV4dGVuZHMgQ29sbGVjdG9yPHN0cmluZywgYW55PiB7XG4gIHB1YmxpYyByZWFkb25seSBjaGFubmVsSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBndWlsZElkPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnZUlkPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJhY3Rpb25UeXBlPzogbnVtYmVyW107XG4gIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRUeXBlPzogbnVtYmVyW107XG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25IYW5kbGVyOiAoaW50ZXJhY3Rpb246IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IGFueSwgb3B0aW9uczogSW50ZXJhY3Rpb25Db2xsZWN0b3JPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihjbGllbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2hhbm5lbElkID0gb3B0aW9ucy5jaGFubmVsSWQ7XG4gICAgdGhpcy5ndWlsZElkID0gb3B0aW9ucy5ndWlsZElkO1xuICAgIHRoaXMubWVzc2FnZUlkID0gb3B0aW9ucy5tZXNzYWdlSWQ7XG4gICAgdGhpcy5pbnRlcmFjdGlvblR5cGUgPSBvcHRpb25zLmludGVyYWN0aW9uVHlwZSBcbiAgICAgID8gQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyYWN0aW9uVHlwZSkgPyBvcHRpb25zLmludGVyYWN0aW9uVHlwZSA6IFtvcHRpb25zLmludGVyYWN0aW9uVHlwZV1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IG9wdGlvbnMuY29tcG9uZW50VHlwZVxuICAgICAgPyBBcnJheS5pc0FycmF5KG9wdGlvbnMuY29tcG9uZW50VHlwZSkgPyBvcHRpb25zLmNvbXBvbmVudFR5cGUgOiBbb3B0aW9ucy5jb21wb25lbnRUeXBlXVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgXG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIgPSAoaW50ZXJhY3Rpb246IGFueSkgPT4ge1xuICAgICAgLy8gRmlsdGVyIGJ5IGNoYW5uZWxcbiAgICAgIGlmICh0aGlzLmNoYW5uZWxJZCAmJiBpbnRlcmFjdGlvbi5jaGFubmVsSWQgIT09IHRoaXMuY2hhbm5lbElkKSByZXR1cm47XG4gICAgICAvLyBGaWx0ZXIgYnkgZ3VpbGRcbiAgICAgIGlmICh0aGlzLmd1aWxkSWQgJiYgaW50ZXJhY3Rpb24uZ3VpbGRJZCAhPT0gdGhpcy5ndWlsZElkKSByZXR1cm47XG4gICAgICAvLyBGaWx0ZXIgYnkgbWVzc2FnZVxuICAgICAgaWYgKHRoaXMubWVzc2FnZUlkICYmIGludGVyYWN0aW9uLm1lc3NhZ2U/LmlkICE9PSB0aGlzLm1lc3NhZ2VJZCkgcmV0dXJuO1xuICAgICAgLy8gRmlsdGVyIGJ5IGludGVyYWN0aW9uIHR5cGVcbiAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uVHlwZSAmJiAhdGhpcy5pbnRlcmFjdGlvblR5cGUuaW5jbHVkZXMoaW50ZXJhY3Rpb24udHlwZSkpIHJldHVybjtcbiAgICAgIC8vIEZpbHRlciBieSBjb21wb25lbnQgdHlwZVxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50VHlwZSAmJiBpbnRlcmFjdGlvbi5jb21wb25lbnRUeXBlICYmICF0aGlzLmNvbXBvbmVudFR5cGUuaW5jbHVkZXMoaW50ZXJhY3Rpb24uY29tcG9uZW50VHlwZSkpIHJldHVybjtcbiAgICAgIFxuICAgICAgdGhpcy5oYW5kbGVDb2xsZWN0KGludGVyYWN0aW9uKTtcbiAgICB9O1xuICAgIFxuICAgIGNsaWVudC5vbignaW50ZXJhY3Rpb25DcmVhdGUnLCB0aGlzLmludGVyYWN0aW9uSGFuZGxlcik7XG4gICAgXG4gICAgdGhpcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICBjbGllbnQucmVtb3ZlTGlzdGVuZXIoJ2ludGVyYWN0aW9uQ3JlYXRlJywgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgY29sbGVjdChpbnRlcmFjdGlvbjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGludGVyYWN0aW9uLmlkID8/IG51bGw7XG4gIH1cblxuICBkaXNwb3NlKGludGVyYWN0aW9uOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gaW50ZXJhY3Rpb24uaWQgPz8gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWN0aW9uIGNvbGxlY3RvciBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25Db2xsZWN0b3JPcHRpb25zIGV4dGVuZHMgQ29sbGVjdG9yT3B0aW9uczxhbnk+IHtcbiAgLyoqIE1lc3NhZ2UgdG8gY29sbGVjdCByZWFjdGlvbnMgZnJvbSAqL1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2xsZWN0b3IgZm9yIHJlYWN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUmVhY3Rpb25Db2xsZWN0b3IgZXh0ZW5kcyBDb2xsZWN0b3I8c3RyaW5nLCBhbnk+IHtcbiAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2VJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWN0aW9uSGFuZGxlcjogKHJlYWN0aW9uOiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBhbnksIG1lc3NhZ2VJZDogc3RyaW5nLCBvcHRpb25zOiBSZWFjdGlvbkNvbGxlY3Rvck9wdGlvbnMpIHtcbiAgICBzdXBlcihjbGllbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMubWVzc2FnZUlkID0gbWVzc2FnZUlkO1xuICAgIFxuICAgIHRoaXMucmVhY3Rpb25IYW5kbGVyID0gKHJlYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZWFjdGlvbi5tZXNzYWdlX2lkID09PSB0aGlzLm1lc3NhZ2VJZCB8fCByZWFjdGlvbi5tZXNzYWdlSWQgPT09IHRoaXMubWVzc2FnZUlkKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChyZWFjdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICBjbGllbnQub24oJ21lc3NhZ2VSZWFjdGlvbkFkZCcsIHRoaXMucmVhY3Rpb25IYW5kbGVyKTtcbiAgICBcbiAgICB0aGlzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgIGNsaWVudC5yZW1vdmVMaXN0ZW5lcignbWVzc2FnZVJlYWN0aW9uQWRkJywgdGhpcy5yZWFjdGlvbkhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgY29sbGVjdChyZWFjdGlvbjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gS2V5IGlzIGVtb2ppIGlkZW50aWZpZXJcbiAgICByZXR1cm4gcmVhY3Rpb24uZW1vamk/LmlkID8/IHJlYWN0aW9uLmVtb2ppPy5uYW1lID8/IG51bGw7XG4gIH1cblxuICBkaXNwb3NlKHJlYWN0aW9uOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gcmVhY3Rpb24uZW1vamk/LmlkID8/IHJlYWN0aW9uLmVtb2ppPy5uYW1lID8/IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBd2FpdCBtZXNzYWdlcyBoZWxwZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0TWVzc2FnZXMoXG4gIGNsaWVudDogYW55LFxuICBjaGFubmVsSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBNZXNzYWdlQ29sbGVjdG9yKGNsaWVudCwgY2hhbm5lbElkLCBvcHRpb25zKTtcbiAgICBcbiAgICBjb2xsZWN0b3Iub25jZSgnZW5kJywgKGNvbGxlY3RlZCwgcmVhc29uKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5tYXggJiYgY29sbGVjdGVkLnNpemUgPCBvcHRpb25zLm1heCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb2xsZWN0b3IgZW5kZWQgd2l0aCByZWFzb246ICR7cmVhc29ufWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoY29sbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXdhaXQgcmVhY3Rpb25zIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYXdhaXRSZWFjdGlvbnMoXG4gIGNsaWVudDogYW55LFxuICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25Db2xsZWN0b3JPcHRpb25zXG4pOiBQcm9taXNlPENvbGxlY3Rpb248c3RyaW5nLCBhbnk+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY29sbGVjdG9yID0gbmV3IFJlYWN0aW9uQ29sbGVjdG9yKGNsaWVudCwgbWVzc2FnZUlkLCBvcHRpb25zKTtcbiAgICBcbiAgICBjb2xsZWN0b3Iub25jZSgnZW5kJywgKGNvbGxlY3RlZCwgcmVhc29uKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5tYXggJiYgY29sbGVjdGVkLnNpemUgPCBvcHRpb25zLm1heCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb2xsZWN0b3IgZW5kZWQgd2l0aCByZWFzb246ICR7cmVhc29ufWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoY29sbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxlY3RvcjtcbiJdfQ==