@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,66 +0,0 @@
1
- /**
2
- * Generic BitField class
3
- * API compatible with Discord.js BitField
4
- */
5
- export type BitFieldResolvable<S extends string, N extends bigint | number> = N | N[] | S | S[] | BitField<S, N>;
6
- /**
7
- * Data structure for bit fields
8
- */
9
- export declare class BitField<S extends string = string, N extends bigint | number = bigint> {
10
- /** The raw bits */
11
- bitfield: N;
12
- /** Flags for this bitfield (override in subclass) */
13
- static Flags: Record<string, bigint | number>;
14
- /** Default bit value */
15
- static DefaultBit: bigint | number;
16
- constructor(bits?: BitFieldResolvable<S, N>);
17
- /**
18
- * Check if this bitfield has a bit
19
- */
20
- has(bit: BitFieldResolvable<S, N>): boolean;
21
- /**
22
- * Check if this bitfield has any of the bits
23
- */
24
- any(bits: BitFieldResolvable<S, N>): boolean;
25
- /**
26
- * Add bits to this bitfield
27
- */
28
- add(...bits: BitFieldResolvable<S, N>[]): this;
29
- /**
30
- * Remove bits from this bitfield
31
- */
32
- remove(...bits: BitFieldResolvable<S, N>[]): this;
33
- /**
34
- * Serialize to array of flag names
35
- */
36
- toArray(): S[];
37
- /**
38
- * Serialize to JSON
39
- */
40
- toJSON(): string | number;
41
- /**
42
- * Get string representation
43
- */
44
- toString(): string;
45
- /**
46
- * Get iterator
47
- */
48
- [Symbol.iterator](): IterableIterator<S>;
49
- /**
50
- * Freeze this bitfield
51
- */
52
- freeze(): Readonly<this>;
53
- /**
54
- * Check equality
55
- */
56
- equals(other: BitFieldResolvable<S, N>): boolean;
57
- /**
58
- * Clone this bitfield
59
- */
60
- clone(): BitField<S, N>;
61
- /**
62
- * Resolve a bit to the numeric type
63
- */
64
- static resolve<S extends string, N extends bigint | number>(bit: BitFieldResolvable<S, N>): N;
65
- }
66
- export default BitField;
@@ -1,138 +0,0 @@
1
- "use strict";
2
- /**
3
- * Generic BitField class
4
- * API compatible with Discord.js BitField
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.BitField = void 0;
8
- /**
9
- * Data structure for bit fields
10
- */
11
- class BitField {
12
- /** The raw bits */
13
- bitfield;
14
- /** Flags for this bitfield (override in subclass) */
15
- static Flags = {};
16
- /** Default bit value */
17
- static DefaultBit = 0n;
18
- constructor(bits = BitField.DefaultBit) {
19
- this.bitfield = this.constructor.resolve(bits);
20
- }
21
- /**
22
- * Check if this bitfield has a bit
23
- */
24
- has(bit) {
25
- const resolved = this.constructor.resolve(bit);
26
- return (this.bitfield & resolved) === resolved;
27
- }
28
- /**
29
- * Check if this bitfield has any of the bits
30
- */
31
- any(bits) {
32
- const resolved = this.constructor.resolve(bits);
33
- return (this.bitfield & resolved) !== 0n;
34
- }
35
- /**
36
- * Add bits to this bitfield
37
- */
38
- add(...bits) {
39
- let total = 0n;
40
- for (const bit of bits) {
41
- total |= this.constructor.resolve(bit);
42
- }
43
- this.bitfield |= total;
44
- return this;
45
- }
46
- /**
47
- * Remove bits from this bitfield
48
- */
49
- remove(...bits) {
50
- let total = 0n;
51
- for (const bit of bits) {
52
- total |= this.constructor.resolve(bit);
53
- }
54
- this.bitfield &= ~total;
55
- return this;
56
- }
57
- /**
58
- * Serialize to array of flag names
59
- */
60
- toArray() {
61
- const flags = this.constructor.Flags;
62
- const result = [];
63
- for (const [name, bit] of Object.entries(flags)) {
64
- if (this.bitfield & bit) {
65
- result.push(name);
66
- }
67
- }
68
- return result;
69
- }
70
- /**
71
- * Serialize to JSON
72
- */
73
- toJSON() {
74
- return typeof this.bitfield === 'bigint'
75
- ? this.bitfield.toString()
76
- : this.bitfield;
77
- }
78
- /**
79
- * Get string representation
80
- */
81
- toString() {
82
- return this.bitfield.toString();
83
- }
84
- /**
85
- * Get iterator
86
- */
87
- *[Symbol.iterator]() {
88
- yield* this.toArray();
89
- }
90
- /**
91
- * Freeze this bitfield
92
- */
93
- freeze() {
94
- return Object.freeze(this);
95
- }
96
- /**
97
- * Check equality
98
- */
99
- equals(other) {
100
- return this.bitfield === this.constructor.resolve(other);
101
- }
102
- /**
103
- * Clone this bitfield
104
- */
105
- clone() {
106
- return new this.constructor(this.bitfield);
107
- }
108
- /**
109
- * Resolve a bit to the numeric type
110
- */
111
- static resolve(bit) {
112
- if (typeof bit === 'bigint' || typeof bit === 'number') {
113
- return bit;
114
- }
115
- if (bit instanceof BitField) {
116
- return bit.bitfield;
117
- }
118
- if (typeof bit === 'string') {
119
- const resolved = this.Flags[bit];
120
- if (resolved === undefined) {
121
- throw new Error(`Unknown bit: ${bit}`);
122
- }
123
- return resolved;
124
- }
125
- if (Array.isArray(bit)) {
126
- let result = this.DefaultBit;
127
- for (const b of bit) {
128
- const resolved = this.resolve(b);
129
- result |= resolved;
130
- }
131
- return result;
132
- }
133
- throw new Error(`Invalid bit: ${bit}`);
134
- }
135
- }
136
- exports.BitField = BitField;
137
- exports.default = BitField;
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQml0RmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvQml0RmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBU0g7O0dBRUc7QUFDSCxNQUFhLFFBQVE7SUFDbkIsbUJBQW1CO0lBQ1osUUFBUSxDQUFJO0lBRW5CLHFEQUFxRDtJQUNyRCxNQUFNLENBQUMsS0FBSyxHQUFvQyxFQUFFLENBQUM7SUFFbkQsd0JBQXdCO0lBQ3hCLE1BQU0sQ0FBQyxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUV4QyxZQUFZLE9BQWlDLFFBQVEsQ0FBQyxVQUFlO1FBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUksSUFBSSxDQUFDLFdBQStCLENBQUMsT0FBTyxDQUFPLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxHQUE2QjtRQUMvQixNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBK0IsQ0FBQyxPQUFPLENBQU8sR0FBRyxDQUFDLENBQUM7UUFDMUUsT0FBTyxDQUFFLElBQUksQ0FBQyxRQUFtQixHQUFJLFFBQW1CLENBQUMsS0FBTSxRQUFtQixDQUFDO0lBQ3JGLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxJQUE4QjtRQUNoQyxNQUFNLFFBQVEsR0FBSSxJQUFJLENBQUMsV0FBK0IsQ0FBQyxPQUFPLENBQU8sSUFBSSxDQUFDLENBQUM7UUFDM0UsT0FBTyxDQUFFLElBQUksQ0FBQyxRQUFtQixHQUFJLFFBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFDLEdBQUcsSUFBZ0M7UUFDckMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLElBQUssSUFBSSxDQUFDLFdBQStCLENBQUMsT0FBTyxD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WUFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQW9CLENBQUM7WUFDdkMsS0FBSyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxJQUFJLFFBQWtCLENBQUM7WUFDL0IsQ0FBQztZQUNELE9BQU8sTUFBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7O0FBaEpILDRCQWlKQztBQUVELGtCQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJpYyBCaXRGaWVsZCBjbGFzc1xuICogQVBJIGNvbXBhdGlibGUgd2l0aCBEaXNjb3JkLmpzIEJpdEZpZWxkXG4gKi9cblxuZXhwb3J0IHR5cGUgQml0RmllbGRSZXNvbHZhYmxlPFMgZXh0ZW5kcyBzdHJpbmcsIE4gZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXI+ID0gXG4gIHwgTiBcbiAgfCBOW10gXG4gIHwgUyBcbiAgfCBTW10gXG4gIHwgQml0RmllbGQ8UywgTj47XG5cbi8qKlxuICogRGF0YSBzdHJ1Y3R1cmUgZm9yIGJpdCBmaWVsZHNcbiAqL1xuZXhwb3J0IGNsYXNzIEJpdEZpZWxkPFMgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIE4gZXh0ZW5kcyBiaWdpbnQgfCBudW1iZXIgPSBiaWdpbnQ+IHtcbiAgLyoqIFRoZSByYXcgYml0cyAqL1xuICBwdWJsaWMgYml0ZmllbGQ6IE47XG5cbiAgLyoqIEZsYWdzIGZvciB0aGlzIGJpdGZpZWxkIChvdmVycmlkZSBpbiBzdWJjbGFzcykgKi9cbiAgc3RhdGljIEZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBiaWdpbnQgfCBudW1iZXI+ID0ge307XG5cbiAgLyoqIERlZmF1bHQgYml0IHZhbHVlICovXG4gIHN0YXRpYyBEZWZhdWx0Qml0OiBiaWdpbnQgfCBudW1iZXIgPSAwbjtcblxuICBjb25zdHJ1Y3RvcihiaXRzOiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4gPSBCaXRGaWVsZC5EZWZhdWx0Qml0IGFzIE4pIHtcbiAgICB0aGlzLmJpdGZpZWxkID0gKHRoaXMuY29uc3RydWN0b3IgYXMgdHlwZW9mIEJpdEZpZWxkKS5yZXNvbHZlPFMsIE4+KGJpdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgYml0ZmllbGQgaGFzIGEgYml0XG4gICAqL1xuICBoYXMoYml0OiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4pOiBib29sZWFuIHtcbiAgICBjb25zdCByZXNvbHZlZCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBCaXRGaWVsZCkucmVzb2x2ZTxTLCBOPihiaXQpO1xuICAgIHJldHVybiAoKHRoaXMuYml0ZmllbGQgYXMgYmlnaW50KSAmIChyZXNvbHZlZCBhcyBiaWdpbnQpKSA9PT0gKHJlc29sdmVkIGFzIGJpZ2ludCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBiaXRmaWVsZCBoYXMgYW55IG9mIHRoZSBiaXRzXG4gICAqL1xuICBhbnkoYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0cyk7XG4gICAgcmV0dXJuICgodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICYgKHJlc29sdmVkIGFzIGJpZ2ludCkpICE9PSAwbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYml0cyB0byB0aGlzIGJpdGZpZWxkXG4gICAqL1xuICBhZGQoLi4uYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+W10pOiB0aGlzIHtcbiAgICBsZXQgdG90YWwgPSAwbjtcbiAgICBmb3IgKGNvbnN0IGJpdCBvZiBiaXRzKSB7XG4gICAgICB0b3RhbCB8PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0KSBhcyBiaWdpbnQ7XG4gICAgfVxuICAgICh0aGlzLmJpdGZpZWxkIGFzIGJpZ2ludCkgfD0gdG90YWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGJpdHMgZnJvbSB0aGlzIGJpdGZpZWxkXG4gICAqL1xuICByZW1vdmUoLi4uYml0czogQml0RmllbGRSZXNvbHZhYmxlPFMsIE4+W10pOiB0aGlzIHtcbiAgICBsZXQgdG90YWwgPSAwbjtcbiAgICBmb3IgKGNvbnN0IGJpdCBvZiBiaXRzKSB7XG4gICAgICB0b3RhbCB8PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4oYml0KSBhcyBiaWdpbnQ7XG4gICAgfVxuICAgICh0aGlzLmJpdGZpZWxkIGFzIGJpZ2ludCkgJj0gfnRvdGFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0byBhcnJheSBvZiBmbGFnIG5hbWVzXG4gICAqL1xuICB0b0FycmF5KCk6IFNbXSB7XG4gICAgY29uc3QgZmxhZ3MgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLkZsYWdzO1xuICAgIGNvbnN0IHJlc3VsdDogU1tdID0gW107XG4gICAgXG4gICAgZm9yIChjb25zdCBbbmFtZSwgYml0XSBvZiBPYmplY3QuZW50cmllcyhmbGFncykpIHtcbiAgICAgIGlmICgodGhpcy5iaXRmaWVsZCBhcyBiaWdpbnQpICYgKGJpdCBhcyBiaWdpbnQpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5hbWUgYXMgUyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRvIEpTT05cbiAgICovXG4gIHRvSlNPTigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5iaXRmaWVsZCA9PT0gJ2JpZ2ludCcgXG4gICAgICA/IHRoaXMuYml0ZmllbGQudG9TdHJpbmcoKSBcbiAgICAgIDogdGhpcy5iaXRmaWVsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJpdGZpZWxkLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGl0ZXJhdG9yXG4gICAqL1xuICAqW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxTPiB7XG4gICAgeWllbGQqIHRoaXMudG9BcnJheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyZWV6ZSB0aGlzIGJpdGZpZWxkXG4gICAqL1xuICBmcmVlemUoKTogUmVhZG9ubHk8dGhpcz4ge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGVxdWFsaXR5XG4gICAqL1xuICBlcXVhbHMob3RoZXI6IEJpdEZpZWxkUmVzb2x2YWJsZTxTLCBOPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJpdGZpZWxkID09PSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQml0RmllbGQpLnJlc29sdmU8UywgTj4ob3RoZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoaXMgYml0ZmllbGRcbiAgICovXG4gIGNsb25lKCk6IEJpdEZpZWxkPFMsIE4+IHtcbiAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIG5ldyAoYml0czogTikgPT4gQml0RmllbGQ8UywgTj4pKHRoaXMuYml0ZmllbGQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBiaXQgdG8gdGhlIG51bWVyaWMgdHlwZVxuICAgKi9cbiAgc3RhdGljIHJlc29sdmU8UyBleHRlbmRzIHN0cmluZywgTiBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oYml0OiBCaXRGaWVsZFJlc29sdmFibGU8UywgTj4pOiBOIHtcbiAgICBpZiAodHlwZW9mIGJpdCA9PT0gJ2JpZ2ludCcgfHwgdHlwZW9mIGJpdCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBiaXQgYXMgTjtcbiAgICB9XG5cbiAgICBpZiAoYml0IGluc3RhbmNlb2YgQml0RmllbGQpIHtcbiAgICAgIHJldHVybiBiaXQuYml0ZmllbGQgYXMgTjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGJpdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5GbGFnc1tiaXRdO1xuICAgICAgaWYgKHJlc29sdmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGJpdDogJHtiaXR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZWQgYXMgTjtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShiaXQpKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5EZWZhdWx0Qml0IGFzIGJpZ2ludDtcbiAgICAgIGZvciAoY29uc3QgYiBvZiBiaXQpIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmU8UywgTj4oYik7XG4gICAgICAgIHJlc3VsdCB8PSByZXNvbHZlZCBhcyBiaWdpbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0IGFzIE47XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJpdDogJHtiaXR9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQml0RmllbGQ7XG4iXX0=
@@ -1,116 +0,0 @@
1
- /**
2
- * A Map with additional utility methods
3
- */
4
- export declare class Collection<K, V> extends Map<K, V> {
5
- /**
6
- * Identical to Map.get()
7
- * Ensures the value exists
8
- */
9
- ensure(key: K, defaultValueGenerator: (key: K, collection: this) => V): V;
10
- /**
11
- * Checks if all items pass a test
12
- */
13
- every(fn: (value: V, key: K, collection: this) => boolean): boolean;
14
- /**
15
- * Checks if any item passes a test
16
- */
17
- some(fn: (value: V, key: K, collection: this) => boolean): boolean;
18
- /**
19
- * Identical to Array.filter(), but returns a Collection
20
- */
21
- filter(fn: (value: V, key: K, collection: this) => boolean): Collection<K, V>;
22
- /**
23
- * Partitions the collection into two collections
24
- */
25
- partition(fn: (value: V, key: K, collection: this) => boolean): [Collection<K, V>, Collection<K, V>];
26
- /**
27
- * Maps each item to another value
28
- */
29
- map<T>(fn: (value: V, key: K, collection: this) => T): T[];
30
- /**
31
- * Maps each item to another value into a Collection
32
- */
33
- mapValues<T>(fn: (value: V, key: K, collection: this) => T): Collection<K, T>;
34
- /**
35
- * Searches for a single item
36
- */
37
- find(fn: (value: V, key: K, collection: this) => boolean): V | undefined;
38
- /**
39
- * Searches for the key of a single item
40
- */
41
- findKey(fn: (value: V, key: K, collection: this) => boolean): K | undefined;
42
- /**
43
- * Removes items that satisfy the provided filter function
44
- */
45
- sweep(fn: (value: V, key: K, collection: this) => boolean): number;
46
- /**
47
- * Reduces the collection to a single value
48
- */
49
- reduce<T>(fn: (accumulator: T, value: V, key: K, collection: this) => T, initialValue: T): T;
50
- /**
51
- * Identical to Array.forEach()
52
- */
53
- each(fn: (value: V, key: K, collection: this) => void): this;
54
- /**
55
- * Returns the first item(s) in the collection
56
- */
57
- first(): V | undefined;
58
- first(amount: number): V[];
59
- /**
60
- * Returns the first key(s) in the collection
61
- */
62
- firstKey(): K | undefined;
63
- firstKey(amount: number): K[];
64
- /**
65
- * Returns the last item(s) in the collection
66
- */
67
- last(): V | undefined;
68
- last(amount: number): V[];
69
- /**
70
- * Returns the last key(s) in the collection
71
- */
72
- lastKey(): K | undefined;
73
- lastKey(amount: number): K[];
74
- /**
75
- * Returns a random item from the collection
76
- */
77
- random(): V | undefined;
78
- random(amount: number): V[];
79
- /**
80
- * Returns a random key from the collection
81
- */
82
- randomKey(): K | undefined;
83
- randomKey(amount: number): K[];
84
- /**
85
- * Combines this collection with others
86
- */
87
- concat(...collections: Collection<K, V>[]): Collection<K, V>;
88
- /**
89
- * Checks if this collection shares identical items with another
90
- */
91
- equals(collection: Collection<K, V>): boolean;
92
- /**
93
- * Creates an identical shallow copy of this collection
94
- */
95
- clone(): Collection<K, V>;
96
- /**
97
- * Sorts the collection and returns it
98
- */
99
- sort(compareFunction?: (firstValue: V, secondValue: V, firstKey: K, secondKey: K) => number): this;
100
- /**
101
- * Sorts the collection by keys and returns it
102
- */
103
- sortByKey(compareFunction?: (firstKey: K, secondKey: K, firstValue: V, secondValue: V) => number): this;
104
- /**
105
- * Returns an array of items
106
- */
107
- toJSON(): V[];
108
- /**
109
- * Default sort function
110
- */
111
- private static defaultSort;
112
- /**
113
- * Creates a Collection from an array
114
- */
115
- static from<K, V>(entries: Iterable<readonly [K, V]>): Collection<K, V>;
116
- }
@@ -1,265 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Collection = void 0;
4
- /**
5
- * A Map with additional utility methods
6
- */
7
- class Collection extends Map {
8
- /**
9
- * Identical to Map.get()
10
- * Ensures the value exists
11
- */
12
- ensure(key, defaultValueGenerator) {
13
- if (this.has(key))
14
- return this.get(key);
15
- const defaultValue = defaultValueGenerator(key, this);
16
- this.set(key, defaultValue);
17
- return defaultValue;
18
- }
19
- /**
20
- * Checks if all items pass a test
21
- */
22
- every(fn) {
23
- for (const [key, val] of this) {
24
- if (!fn(val, key, this))
25
- return false;
26
- }
27
- return true;
28
- }
29
- /**
30
- * Checks if any item passes a test
31
- */
32
- some(fn) {
33
- for (const [key, val] of this) {
34
- if (fn(val, key, this))
35
- return true;
36
- }
37
- return false;
38
- }
39
- /**
40
- * Identical to Array.filter(), but returns a Collection
41
- */
42
- filter(fn) {
43
- const results = new Collection();
44
- for (const [key, val] of this) {
45
- if (fn(val, key, this))
46
- results.set(key, val);
47
- }
48
- return results;
49
- }
50
- /**
51
- * Partitions the collection into two collections
52
- */
53
- partition(fn) {
54
- const results = [new Collection(), new Collection()];
55
- for (const [key, val] of this) {
56
- if (fn(val, key, this)) {
57
- results[0].set(key, val);
58
- }
59
- else {
60
- results[1].set(key, val);
61
- }
62
- }
63
- return results;
64
- }
65
- /**
66
- * Maps each item to another value
67
- */
68
- map(fn) {
69
- const results = [];
70
- for (const [key, val] of this) {
71
- results.push(fn(val, key, this));
72
- }
73
- return results;
74
- }
75
- /**
76
- * Maps each item to another value into a Collection
77
- */
78
- mapValues(fn) {
79
- const results = new Collection();
80
- for (const [key, val] of this) {
81
- results.set(key, fn(val, key, this));
82
- }
83
- return results;
84
- }
85
- /**
86
- * Searches for a single item
87
- */
88
- find(fn) {
89
- for (const [key, val] of this) {
90
- if (fn(val, key, this))
91
- return val;
92
- }
93
- return undefined;
94
- }
95
- /**
96
- * Searches for the key of a single item
97
- */
98
- findKey(fn) {
99
- for (const [key, val] of this) {
100
- if (fn(val, key, this))
101
- return key;
102
- }
103
- return undefined;
104
- }
105
- /**
106
- * Removes items that satisfy the provided filter function
107
- */
108
- sweep(fn) {
109
- const previousSize = this.size;
110
- for (const [key, val] of this) {
111
- if (fn(val, key, this))
112
- this.delete(key);
113
- }
114
- return previousSize - this.size;
115
- }
116
- /**
117
- * Reduces the collection to a single value
118
- */
119
- reduce(fn, initialValue) {
120
- let accumulator = initialValue;
121
- for (const [key, val] of this) {
122
- accumulator = fn(accumulator, val, key, this);
123
- }
124
- return accumulator;
125
- }
126
- /**
127
- * Identical to Array.forEach()
128
- */
129
- each(fn) {
130
- for (const [key, val] of this) {
131
- fn(val, key, this);
132
- }
133
- return this;
134
- }
135
- first(amount) {
136
- if (amount === undefined)
137
- return this.values().next().value;
138
- if (amount < 0)
139
- return this.last(amount * -1);
140
- amount = Math.min(this.size, amount);
141
- const iter = this.values();
142
- return Array.from({ length: amount }, () => iter.next().value);
143
- }
144
- firstKey(amount) {
145
- if (amount === undefined)
146
- return this.keys().next().value;
147
- if (amount < 0)
148
- return this.lastKey(amount * -1);
149
- amount = Math.min(this.size, amount);
150
- const iter = this.keys();
151
- return Array.from({ length: amount }, () => iter.next().value);
152
- }
153
- last(amount) {
154
- const arr = [...this.values()];
155
- if (amount === undefined)
156
- return arr[arr.length - 1];
157
- if (amount < 0)
158
- return this.first(amount * -1);
159
- if (!amount)
160
- return [];
161
- return arr.slice(-amount);
162
- }
163
- lastKey(amount) {
164
- const arr = [...this.keys()];
165
- if (amount === undefined)
166
- return arr[arr.length - 1];
167
- if (amount < 0)
168
- return this.firstKey(amount * -1);
169
- if (!amount)
170
- return [];
171
- return arr.slice(-amount);
172
- }
173
- random(amount) {
174
- const arr = [...this.values()];
175
- if (amount === undefined)
176
- return arr[Math.floor(Math.random() * arr.length)];
177
- if (!arr.length || !amount)
178
- return [];
179
- return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
180
- }
181
- randomKey(amount) {
182
- const arr = [...this.keys()];
183
- if (amount === undefined)
184
- return arr[Math.floor(Math.random() * arr.length)];
185
- if (!arr.length || !amount)
186
- return [];
187
- return Array.from({ length: Math.min(amount, arr.length) }, () => arr.splice(Math.floor(Math.random() * arr.length), 1)[0]);
188
- }
189
- /**
190
- * Combines this collection with others
191
- */
192
- concat(...collections) {
193
- const newColl = this.clone();
194
- for (const coll of collections) {
195
- for (const [key, val] of coll)
196
- newColl.set(key, val);
197
- }
198
- return newColl;
199
- }
200
- /**
201
- * Checks if this collection shares identical items with another
202
- */
203
- equals(collection) {
204
- if (this === collection)
205
- return true;
206
- if (this.size !== collection.size)
207
- return false;
208
- for (const [key, value] of this) {
209
- if (!collection.has(key) || value !== collection.get(key)) {
210
- return false;
211
- }
212
- }
213
- return true;
214
- }
215
- /**
216
- * Creates an identical shallow copy of this collection
217
- */
218
- clone() {
219
- return new Collection(this);
220
- }
221
- /**
222
- * Sorts the collection and returns it
223
- */
224
- sort(compareFunction = Collection.defaultSort) {
225
- const entries = [...this.entries()];
226
- entries.sort((a, b) => compareFunction(a[1], b[1], a[0], b[0]));
227
- this.clear();
228
- for (const [k, v] of entries) {
229
- this.set(k, v);
230
- }
231
- return this;
232
- }
233
- /**
234
- * Sorts the collection by keys and returns it
235
- */
236
- sortByKey(compareFunction = Collection.defaultSort) {
237
- const entries = [...this.entries()];
238
- entries.sort((a, b) => compareFunction(a[0], b[0], a[1], b[1]));
239
- this.clear();
240
- for (const [k, v] of entries) {
241
- this.set(k, v);
242
- }
243
- return this;
244
- }
245
- /**
246
- * Returns an array of items
247
- */
248
- toJSON() {
249
- return [...this.values()];
250
- }
251
- /**
252
- * Default sort function
253
- */
254
- static defaultSort(firstValue, secondValue) {
255
- return Number(firstValue > secondValue) || Number(firstValue === secondValue) - 1;
256
- }
257
- /**
258
- * Creates a Collection from an array
259
- */
260
- static from(entries) {
261
- return new Collection(entries);
262
- }
263
- }
264
- exports.Collection = Collection;
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9Db2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOztHQUVHO0FBQ0gsTUFBYSxVQUFpQixTQUFRLEdBQVM7SUFDN0M7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEdBQU0sRUFBRSxxQkFBc0Q7UUFDbkUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEVBQW1EO1FBQ3ZELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxFQUFtRDtRQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQW1EO1FBQ3hELE1BQU0sT0FBTyxH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QUFDO1FBQzdCLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBT0QsTUFBTSxDQUFDLE1BQWU7UUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBT0QsU0FBUyxDQUFDLE1BQWU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBTSxLQUFL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Q0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsV0FBVyxDQUFJLFVBQWEsRUFBRSxXQUFjO1FBQ3pELE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFPLE9BQWtDO1FBQ2xELE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBOVJELGdDQThSQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBNYXAgd2l0aCBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kc1xuICovXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbjxLLCBWPiBleHRlbmRzIE1hcDxLLCBWPiB7XG4gIC8qKlxuICAgKiBJZGVudGljYWwgdG8gTWFwLmdldCgpXG4gICAqIEVuc3VyZXMgdGhlIHZhbHVlIGV4aXN0c1xuICAgKi9cbiAgZW5zdXJlKGtleTogSywgZGVmYXVsdFZhbHVlR2VuZXJhdG9yOiAoa2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBWKTogViB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHJldHVybiB0aGlzLmdldChrZXkpITtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWVHZW5lcmF0b3Ioa2V5LCB0aGlzKTtcbiAgICB0aGlzLnNldChrZXksIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWxsIGl0ZW1zIHBhc3MgYSB0ZXN0XG4gICAqL1xuICBldmVyeShmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKCFmbih2YWwsIGtleSwgdGhpcykpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFueSBpdGVtIHBhc3NlcyBhIHRlc3RcbiAgICovXG4gIHNvbWUoZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpY2FsIHRvIEFycmF5LmZpbHRlcigpLCBidXQgcmV0dXJucyBhIENvbGxlY3Rpb25cbiAgICovXG4gIGZpbHRlcihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBDb2xsZWN0aW9uPEssIFY+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IENvbGxlY3Rpb248SywgVj4oKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmVzdWx0cy5zZXQoa2V5LCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJ0aXRpb25zIHRoZSBjb2xsZWN0aW9uIGludG8gdHdvIGNvbGxlY3Rpb25zXG4gICAqL1xuICBwYXJ0aXRpb24oZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBib29sZWFuKTogW0NvbGxlY3Rpb248SywgVj4sIENvbGxlY3Rpb248SywgVj5dIHtcbiAgICBjb25zdCByZXN1bHRzOiBbQ29sbGVjdGlvbjxLLCBWPiwgQ29sbGVjdGlvbjxLLCBWPl0gPSBbbmV3IENvbGxlY3Rpb248SywgVj4oKSwgbmV3IENvbGxlY3Rpb248SywgVj4oKV07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGlmIChmbih2YWwsIGtleSwgdGhpcykpIHtcbiAgICAgICAgcmVzdWx0c1swXS5zZXQoa2V5LCB2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0c1sxXS5zZXQoa2V5LCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGVhY2ggaXRlbSB0byBhbm90aGVyIHZhbHVlXG4gICAqL1xuICBtYXA8VD4oZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBUKTogVFtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgcmVzdWx0cy5wdXNoKGZuKHZhbCwga2V5LCB0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgZWFjaCBpdGVtIHRvIGFub3RoZXIgdmFsdWUgaW50byBhIENvbGxlY3Rpb25cbiAgICovXG4gIG1hcFZhbHVlczxUPihmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IFQpOiBDb2xsZWN0aW9uPEssIFQ+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IENvbGxlY3Rpb248SywgVD4oKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgcmVzdWx0cy5zZXQoa2V5LCBmbih2YWwsIGtleSwgdGhpcykpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgYSBzaW5nbGUgaXRlbVxuICAgKi9cbiAgZmluZChmbjogKHZhbHVlOiBWLCBrZXk6IEssIGNvbGxlY3Rpb246IHRoaXMpID0+IGJvb2xlYW4pOiBWIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcykge1xuICAgICAgaWYgKGZuKHZhbCwga2V5LCB0aGlzKSkgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgdGhlIGtleSBvZiBhIHNpbmdsZSBpdGVtXG4gICAqL1xuICBmaW5kS2V5KGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IEsgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSByZXR1cm4ga2V5O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgaXRlbXMgdGhhdCBzYXRpc2Z5IHRoZSBwcm92aWRlZCBmaWx0ZXIgZnVuY3Rpb25cbiAgICovXG4gIHN3ZWVwKGZuOiAodmFsdWU6IFYsIGtleTogSywgY29sbGVjdGlvbjogdGhpcykgPT4gYm9vbGVhbik6IG51bWJlciB7XG4gICAgY29uc3QgcHJldmlvdXNTaXplID0gdGhpcy5zaXplO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzKSB7XG4gICAgICBpZiAoZm4odmFsLCBrZXksIHRoaXMpKSB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcHJldmlvdXNTaXplIC0gdGhpcy5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZHVjZXMgdGhlIGNvbGxlY3Rpb24gdG8gYSBzaW5nbGUgdmFsdWVcbiAgICovXG4gIHJlZHVjZTxUPihmbjogKGFjY3VtdWxhdG9yOiBULCB2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiBULCBpbml0aWFsVmFsdWU6IFQpOiBUIHtcbiAgICBsZXQgYWNjdW11bGF0b3IgPSBpbml0aWFsVmFsdWU7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGFjY3VtdWxhdG9yID0gZm4oYWNjdW11bGF0b3IsIHZhbCwga2V5LCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWNhbCB0byBBcnJheS5mb3JFYWNoKClcbiAgICovXG4gIGVhY2goZm46ICh2YWx1ZTogViwga2V5OiBLLCBjb2xsZWN0aW9uOiB0aGlzKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIHRoaXMpIHtcbiAgICAgIGZuKHZhbCwga2V5LCB0aGlzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgaXRlbShzKSBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgZmlyc3QoKTogViB8IHVuZGVmaW5lZDtcbiAgZmlyc3QoYW1vdW50OiBudW1iZXIpOiBWW107XG4gIGZpcnN0KGFtb3VudD86IG51bWJlcik6IFYgfCBWW10gfCB1bmRlZmluZWQge1xuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5sYXN0KGFtb3VudCAqIC0xKTtcbiAgICBhbW91bnQgPSBNYXRoLm1pbih0aGlzLnNpemUsIGFtb3VudCk7XG4gICAgY29uc3QgaXRlciA9IHRoaXMudmFsdWVzKCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGFtb3VudCB9LCAoKSA9PiBpdGVyLm5leHQoKS52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3Qga2V5KHMpIGluIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICBmaXJzdEtleSgpOiBLIHwgdW5kZWZpbmVkO1xuICBmaXJzdEtleShhbW91bnQ6IG51bWJlcik6IEtbXTtcbiAgZmlyc3RLZXkoYW1vdW50PzogbnVtYmVyKTogSyB8IEtbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5sYXN0S2V5KGFtb3VudCAqIC0xKTtcbiAgICBhbW91bnQgPSBNYXRoLm1pbih0aGlzLnNpemUsIGFtb3VudCk7XG4gICAgY29uc3QgaXRlciA9IHRoaXMua2V5cygpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBhbW91bnQgfSwgKCkgPT4gaXRlci5uZXh0KCkudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3QgaXRlbShzKSBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgbGFzdCgpOiBWIHwgdW5kZWZpbmVkO1xuICBsYXN0KGFtb3VudDogbnVtYmVyKTogVltdO1xuICBsYXN0KGFtb3VudD86IG51bWJlcik6IFYgfCBWW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLnZhbHVlcygpXTtcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5maXJzdChhbW91bnQgKiAtMSk7XG4gICAgaWYgKCFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKC1hbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3Qga2V5KHMpIGluIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICBsYXN0S2V5KCk6IEsgfCB1bmRlZmluZWQ7XG4gIGxhc3RLZXkoYW1vdW50OiBudW1iZXIpOiBLW107XG4gIGxhc3RLZXkoYW1vdW50PzogbnVtYmVyKTogSyB8IEtbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMua2V5cygpXTtcbiAgICBpZiAoYW1vdW50ID09PSB1bmRlZmluZWQpIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuICAgIGlmIChhbW91bnQgPCAwKSByZXR1cm4gdGhpcy5maXJzdEtleShhbW91bnQgKiAtMSk7XG4gICAgaWYgKCFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYXJyLnNsaWNlKC1hbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByYW5kb20gaXRlbSBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICByYW5kb20oKTogViB8IHVuZGVmaW5lZDtcbiAgcmFuZG9tKGFtb3VudDogbnVtYmVyKTogVltdO1xuICByYW5kb20oYW1vdW50PzogbnVtYmVyKTogViB8IFZbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJyID0gWy4uLnRoaXMudmFsdWVzKCldO1xuICAgIGlmIChhbW91bnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKV07XG4gICAgaWYgKCFhcnIubGVuZ3RoIHx8ICFhbW91bnQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogTWF0aC5taW4oYW1vdW50LCBhcnIubGVuZ3RoKSB9LCAoKSA9PiBhcnIuc3BsaWNlKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpLCAxKVswXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJhbmRvbSBrZXkgZnJvbSB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgcmFuZG9tS2V5KCk6IEsgfCB1bmRlZmluZWQ7XG4gIHJhbmRvbUtleShhbW91bnQ6IG51bWJlcik6IEtbXTtcbiAgcmFuZG9tS2V5KGFtb3VudD86IG51bWJlcik6IEsgfCBLW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGFyciA9IFsuLi50aGlzLmtleXMoKV07XG4gICAgaWYgKGFtb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gYXJyW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFyci5sZW5ndGgpXTtcbiAgICBpZiAoIWFyci5sZW5ndGggfHwgIWFtb3VudCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBNYXRoLm1pbihhbW91bnQsIGFyci5sZW5ndGgpIH0sICgpID0+IGFyci5zcGxpY2UoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCksIDEpWzBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21iaW5lcyB0aGlzIGNvbGxlY3Rpb24gd2l0aCBvdGhlcnNcbiAgICovXG4gIGNvbmNhdCguLi5jb2xsZWN0aW9uczogQ29sbGVjdGlvbjxLLCBWPltdKTogQ29sbGVjdGlvbjxLLCBWPiB7XG4gICAgY29uc3QgbmV3Q29sbCA9IHRoaXMuY2xvbmUoKTtcbiAgICBmb3IgKGNvbnN0IGNvbGwgb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBjb2xsKSBuZXdDb2xsLnNldChrZXksIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdDb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGNvbGxlY3Rpb24gc2hhcmVzIGlkZW50aWNhbCBpdGVtcyB3aXRoIGFub3RoZXJcbiAgICovXG4gIGVxdWFscyhjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPEssIFY+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMgPT09IGNvbGxlY3Rpb24pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLnNpemUgIT09IGNvbGxlY3Rpb24uc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMpIHtcbiAgICAgIGlmICghY29sbGVjdGlvbi5oYXMoa2V5KSB8fCB2YWx1ZSAhPT0gY29sbGVjdGlvbi5nZXQoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpY2FsIHNoYWxsb3cgY29weSBvZiB0aGlzIGNvbGxlY3Rpb25cbiAgICovXG4gIGNsb25lKCk6IENvbGxlY3Rpb248SywgVj4ge1xuICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbih0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgY29sbGVjdGlvbiBhbmQgcmV0dXJucyBpdFxuICAgKi9cbiAgc29ydChjb21wYXJlRnVuY3Rpb246IChmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogViwgZmlyc3RLZXk6IEssIHNlY29uZEtleTogSykgPT4gbnVtYmVyID0gQ29sbGVjdGlvbi5kZWZhdWx0U29ydCk6IHRoaXMge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzKCldO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gY29tcGFyZUZ1bmN0aW9uKGFbMV0sIGJbMV0sIGFbMF0sIGJbMF0pKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgZW50cmllcykge1xuICAgICAgdGhpcy5zZXQoaywgdik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBjb2xsZWN0aW9uIGJ5IGtleXMgYW5kIHJldHVybnMgaXRcbiAgICovXG4gIHNvcnRCeUtleShjb21wYXJlRnVuY3Rpb246IChmaXJzdEtleTogSywgc2Vjb25kS2V5OiBLLCBmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogVikgPT4gbnVtYmVyID0gQ29sbGVjdGlvbi5kZWZhdWx0U29ydCk6IHRoaXMge1xuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzKCldO1xuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gY29tcGFyZUZ1bmN0aW9uKGFbMF0sIGJbMF0sIGFbMV0sIGJbMV0pKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgZW50cmllcykge1xuICAgICAgdGhpcy5zZXQoaywgdik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXNcbiAgICovXG4gIHRvSlNPTigpOiBWW10ge1xuICAgIHJldHVybiBbLi4udGhpcy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBzb3J0IGZ1bmN0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0U29ydDxWPihmaXJzdFZhbHVlOiBWLCBzZWNvbmRWYWx1ZTogVik6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihmaXJzdFZhbHVlID4gc2Vjb25kVmFsdWUpIHx8IE51bWJlcihmaXJzdFZhbHVlID09PSBzZWNvbmRWYWx1ZSkgLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDb2xsZWN0aW9uIGZyb20gYW4gYXJyYXlcbiAgICovXG4gIHN0YXRpYyBmcm9tPEssIFY+KGVudHJpZXM6IEl0ZXJhYmxlPHJlYWRvbmx5IFtLLCBWXT4pOiBDb2xsZWN0aW9uPEssIFY+IHtcbiAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oZW50cmllcyk7XG4gIH1cbn1cbiJdfQ==