@drincs/pixi-vn 1.5.19 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{HistoryChoiceMenuOption-BOHqf57l.d.ts → HistoryChoiceMenuOption-BQc_jAe-.d.ts} +2 -7
- package/dist/{HistoryChoiceMenuOption-PzBGGqOC.d.cts → HistoryChoiceMenuOption-ok3Zd5pB.d.cts} +2 -7
- package/dist/{StoredClassModel-BgRY86sq.d.ts → StoredClassModel-CUrGRJi0.d.cts} +5 -2
- package/dist/{StoredClassModel-BgRY86sq.d.cts → StoredClassModel-D-s0mEVj.d.ts} +5 -2
- package/dist/canvas.cjs +2 -3
- package/dist/canvas.d.cts +32 -38
- package/dist/canvas.d.ts +32 -38
- package/dist/canvas.mjs +2 -3
- package/dist/characters.cjs +1 -2
- package/dist/characters.d.cts +3 -2
- package/dist/characters.d.ts +3 -2
- package/dist/characters.mjs +1 -2
- package/dist/chunk-D45QSSXG.mjs +1 -0
- package/dist/chunk-HACUDOYJ.mjs +1 -0
- package/dist/chunk-IWAXXFXE.mjs +1 -0
- package/dist/chunk-L4IHQ3VT.mjs +1 -0
- package/dist/{chunk-JJFD2BVW.mjs → chunk-TTRUPDAB.mjs} +1 -2
- package/dist/chunk-XSN6P5JL.mjs +0 -0
- package/dist/chunk-ZW3MIPMS.mjs +1 -0
- package/dist/core.cjs +1 -1
- package/dist/core.d.cts +43 -16
- package/dist/core.d.ts +43 -16
- package/dist/core.mjs +1 -1
- package/dist/history.cjs +1 -2
- package/dist/history.d.cts +3 -4
- package/dist/history.d.ts +3 -4
- package/dist/history.mjs +1 -2
- package/dist/index.cjs +2 -3
- package/dist/index.d.cts +294 -122
- package/dist/index.d.ts +294 -122
- package/dist/index.mjs +2 -3
- package/dist/motion.cjs +1 -2
- package/dist/motion.d.cts +18 -0
- package/dist/motion.d.ts +18 -0
- package/dist/motion.mjs +1 -2
- package/dist/narration.cjs +2 -3
- package/dist/narration.d.cts +9 -20
- package/dist/narration.d.ts +9 -20
- package/dist/narration.mjs +2 -3
- package/dist/pixi/browser.js +35 -35
- package/dist/sound.cjs +1 -2
- package/dist/sound.d.cts +193 -72
- package/dist/sound.d.ts +193 -72
- package/dist/sound.mjs +1 -2
- package/dist/storage.cjs +1 -2
- package/dist/storage.d.cts +20 -71
- package/dist/storage.d.ts +20 -71
- package/dist/storage.mjs +1 -2
- package/dist/vite-listener.cjs +1 -2
- package/dist/vite-listener.mjs +1 -2
- package/dist/vite.cjs +1 -2
- package/dist/vite.mjs +1 -2
- package/package.json +10 -12
- package/dist/chunk-46QBDRUK.mjs +0 -2
- package/dist/chunk-52EK6LYW.mjs +0 -2
- package/dist/chunk-INJYRMJ3.mjs +0 -2
- package/dist/chunk-JJFD2BVW.mjs.map +0 -1
- package/dist/chunk-OXRIVLY2.mjs +0 -2
- package/dist/chunk-SOFV7YZ5.mjs +0 -2
- package/dist/chunk-XZMYXKAY.mjs +0 -2
- package/dist/index.cjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/motion.cjs.map +0 -1
- package/dist/motion.mjs.map +0 -1
- package/dist/vite-listener.cjs.map +0 -1
- package/dist/vite-listener.mjs.map +0 -1
- package/dist/vite.cjs.map +0 -1
- package/dist/vite.mjs.map +0 -1
package/dist/sound.d.ts
CHANGED
|
@@ -1,21 +1,91 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IMediaInstance as IMediaInstance$1, PlayOptions, Options, SoundLibrary, Sound, filters as filters$1 } from '@pixi/sound';
|
|
2
|
+
|
|
3
|
+
type IMediaInstance = Omit<IMediaInstance$1, "on" | "destroy" | "init" | "off" | "once" | "toString">;
|
|
2
4
|
|
|
3
5
|
interface SoundOptions extends Omit<Options, "complete" | "loaded" | "sprites" | "source"> {
|
|
4
6
|
}
|
|
5
7
|
interface SoundPlayOptions extends Omit<PlayOptions, "complete" | "loaded"> {
|
|
8
|
+
/**
|
|
9
|
+
* The delay in seconds before playback becomes audible or resumes. If specified, the sound will be started immediately but delayed (for example, via pause/unpause) so that it is effectively heard only after the delay. If not specified, the sound will play without any additional delay.
|
|
10
|
+
*/
|
|
11
|
+
delay?: number;
|
|
12
|
+
}
|
|
13
|
+
interface SoundPlayOptionsWithChannel extends SoundPlayOptions {
|
|
14
|
+
/**
|
|
15
|
+
* The alias of the audio channel to play the sound on. If the channel does not exist, it will be created.
|
|
16
|
+
* If not specified, the sound will be played on the default channel (see `SoundManagerInterface.defaultChannelAlias`).
|
|
17
|
+
*/
|
|
18
|
+
channel?: string;
|
|
19
|
+
}
|
|
20
|
+
interface ChannelOptions extends Pick<SoundPlayOptions, "filters" | "muted" | "volume"> {
|
|
21
|
+
/**
|
|
22
|
+
* Whether this channel is a background channel.
|
|
23
|
+
* Background channels are special channels. Unlike normal channels, media connected to a background channel does not stop when a scene changes, but continues to play in the background.
|
|
24
|
+
*/
|
|
25
|
+
background?: boolean;
|
|
6
26
|
}
|
|
7
27
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
28
|
+
interface AudioChannelInterface {
|
|
29
|
+
/**
|
|
30
|
+
* The alias of the audio channel. This is used to reference the channel when playing sounds. The alias must be unique among all channels.
|
|
31
|
+
*/
|
|
32
|
+
readonly alias: string;
|
|
33
|
+
/**
|
|
34
|
+
* Plays a sound.
|
|
35
|
+
* @param alias The media and sound (asset) alias reference.
|
|
36
|
+
* @param options The options
|
|
37
|
+
* @return The sound instance,
|
|
38
|
+
* this cannot be reused after it is done playing. Returns a Promise if the sound
|
|
39
|
+
* has not yet loaded.
|
|
40
|
+
*/
|
|
41
|
+
play(alias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;
|
|
42
|
+
/**
|
|
43
|
+
* Plays a sound.
|
|
44
|
+
* @param mediaAlias The media alias reference.
|
|
45
|
+
* @param soundAlias The sound (asset) alias reference.
|
|
46
|
+
* @param options The options
|
|
47
|
+
* @return The sound instance,
|
|
48
|
+
* this cannot be reused after it is done playing. Returns a Promise if the sound
|
|
49
|
+
* has not yet loaded.
|
|
50
|
+
*/
|
|
51
|
+
play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;
|
|
52
|
+
/**
|
|
53
|
+
* The volume of the audio channel, between 0 and 1. This is multiplied with the volume of each sound played through this channel.
|
|
54
|
+
*/
|
|
55
|
+
volume: number;
|
|
56
|
+
/**
|
|
57
|
+
* Whether the audio channel is muted. This is combined with the muted state of each sound played through this channel.
|
|
58
|
+
*/
|
|
59
|
+
muted: boolean;
|
|
15
60
|
/**
|
|
16
|
-
*
|
|
61
|
+
* The MediaInstances currently playing through this channel. This is read-only and cannot be modified directly. Use the play method to add new MediaInstances to this channel.
|
|
17
62
|
*/
|
|
18
|
-
|
|
63
|
+
readonly mediaInstances: IMediaInstance[];
|
|
64
|
+
/**
|
|
65
|
+
* Whether this channel is a background channel.
|
|
66
|
+
* Background channels are special channels. Unlike normal channels, media connected to a background channel does not stop when a scene changes, but continues to play in the background.
|
|
67
|
+
*/
|
|
68
|
+
readonly background: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Stops all media currently playing through this channel.
|
|
71
|
+
* @return Instance for chaining.
|
|
72
|
+
*/
|
|
73
|
+
stopAll(): this;
|
|
74
|
+
/**
|
|
75
|
+
* Pauses any playing sounds.
|
|
76
|
+
* @return Instance for chaining.
|
|
77
|
+
*/
|
|
78
|
+
pauseAll(): this;
|
|
79
|
+
/**
|
|
80
|
+
* Resumes any sounds.
|
|
81
|
+
* @return Instance for chaining.
|
|
82
|
+
*/
|
|
83
|
+
resumeAll(): this;
|
|
84
|
+
/**
|
|
85
|
+
* Toggle muted property for all sounds.
|
|
86
|
+
* @return `true` if all sounds are muted.
|
|
87
|
+
*/
|
|
88
|
+
toggleMuteAll(): boolean;
|
|
19
89
|
}
|
|
20
90
|
|
|
21
91
|
type DistortionFilter = {
|
|
@@ -72,76 +142,121 @@ interface ExportedSoundPlay extends SoundPlay {
|
|
|
72
142
|
* Interface exported sounds
|
|
73
143
|
*/
|
|
74
144
|
interface SoundGameState {
|
|
75
|
-
soundAliasesOrder: string[];
|
|
76
145
|
filters?: SoundFilterMemory[];
|
|
77
|
-
soundsPlaying: {
|
|
78
|
-
[key: string]: ExportedSoundPlay;
|
|
79
|
-
};
|
|
80
146
|
/**
|
|
81
147
|
* @deprecated
|
|
82
148
|
*/
|
|
83
|
-
|
|
84
|
-
[key: string]:
|
|
149
|
+
soundsPlaying?: {
|
|
150
|
+
[key: string]: ExportedSoundPlay;
|
|
85
151
|
};
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
152
|
+
mediaInstances: {
|
|
153
|
+
[key: string]: {
|
|
154
|
+
channelAlias: string;
|
|
155
|
+
soundAlias: string;
|
|
156
|
+
stepCounter: number;
|
|
157
|
+
options: Omit<SoundPlayOptions, "filters"> & {
|
|
158
|
+
filters?: SoundFilterMemory[];
|
|
159
|
+
};
|
|
160
|
+
paused: boolean;
|
|
161
|
+
};
|
|
95
162
|
};
|
|
96
163
|
}
|
|
97
164
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
*
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
165
|
+
interface SoundManagerInterface extends Omit<SoundLibrary, "init" | "close" | "add" | "play" | "volume" | "speed" | "remove" | "exists" | "find" | "stop" | "pause" | "resume" | "pauseAll" | "resumeAll" | "muteAll" | "unmuteAll" | "stopAll" | "removeAll" | "togglePauseAll"> {
|
|
166
|
+
/**
|
|
167
|
+
* @deprecated You can define sound assets directly in `PIXI.Assets`
|
|
168
|
+
*/
|
|
169
|
+
add(alias: string, options: string): Sound;
|
|
170
|
+
/**
|
|
171
|
+
* Plays a sound.
|
|
172
|
+
* @param alias The media and sound (asset) alias reference.
|
|
173
|
+
* @param options The options
|
|
174
|
+
* @return The sound instance,
|
|
175
|
+
* this cannot be reused after it is done playing. Returns a Promise if the sound
|
|
176
|
+
* has not yet loaded.
|
|
177
|
+
*/
|
|
178
|
+
play(alias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;
|
|
179
|
+
play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;
|
|
180
|
+
/**
|
|
181
|
+
* Find a media by alias.
|
|
182
|
+
* @param alias - The media alias reference.
|
|
183
|
+
* @return Media object.
|
|
184
|
+
*/
|
|
185
|
+
find(alias: string): IMediaInstance | undefined;
|
|
186
|
+
/**
|
|
187
|
+
* Stops a media and removes it from the manager.
|
|
188
|
+
* @param alias - The media alias reference.
|
|
189
|
+
*/
|
|
190
|
+
stop(alias: string): void;
|
|
191
|
+
/**
|
|
192
|
+
* Pauses a media.
|
|
193
|
+
* @param alias - The media alias reference.
|
|
194
|
+
* @return Media object.
|
|
195
|
+
*/
|
|
196
|
+
pause(alias: string): IMediaInstance | undefined;
|
|
197
|
+
/**
|
|
198
|
+
* Resumes a media.
|
|
199
|
+
* @param alias - The media alias reference.
|
|
200
|
+
* @return Media object.
|
|
201
|
+
*/
|
|
202
|
+
resume(alias: string): IMediaInstance | undefined;
|
|
203
|
+
/**
|
|
204
|
+
* Edits the options of an existing sound (asset).
|
|
205
|
+
* If the asset is not yet loaded, it will be loaded with the new options.
|
|
206
|
+
*/
|
|
207
|
+
edit(alias: string, options: SoundOptions): Promise<void>;
|
|
208
|
+
/**
|
|
209
|
+
* Pauses any playing sounds.
|
|
210
|
+
* @return Instance for chaining.
|
|
211
|
+
*/
|
|
123
212
|
pauseAll(): this;
|
|
213
|
+
/**
|
|
214
|
+
* Resumes any sounds.
|
|
215
|
+
* @return Instance for chaining.
|
|
216
|
+
*/
|
|
124
217
|
resumeAll(): this;
|
|
125
|
-
|
|
218
|
+
/**
|
|
219
|
+
* Mutes all playing sounds.
|
|
220
|
+
* @return Instance for chaining.
|
|
221
|
+
*/
|
|
126
222
|
muteAll(): this;
|
|
223
|
+
/**
|
|
224
|
+
* Unmutes all playing sounds.
|
|
225
|
+
* @return Instance for chaining.
|
|
226
|
+
*/
|
|
127
227
|
unmuteAll(): this;
|
|
128
|
-
|
|
228
|
+
/**
|
|
229
|
+
* Stops all sounds.
|
|
230
|
+
* @return Instance for chaining.
|
|
231
|
+
*/
|
|
129
232
|
stopAll(): this;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
play(alias: string, options?: SoundPlayOptions | string): IMediaInstance | Promise<IMediaInstance>;
|
|
134
|
-
stop(alias: string): Sound;
|
|
135
|
-
pause(alias: string): Sound;
|
|
136
|
-
resume(alias: string): Sound;
|
|
137
|
-
volume(alias: string, volume?: number): number;
|
|
138
|
-
speed(alias: string, speed?: number): number;
|
|
139
|
-
duration(alias: string): number;
|
|
140
|
-
close(): this;
|
|
233
|
+
load(alias: string | string[]): Promise<void>;
|
|
234
|
+
backgroundLoad(alias: string | string[]): Promise<void>;
|
|
235
|
+
backgroundLoadBundle(alias: string): Promise<void>;
|
|
141
236
|
clear(): void;
|
|
237
|
+
/**
|
|
238
|
+
* Adds a new audio channel with the specified alias(es).
|
|
239
|
+
* @param alias The alias or aliases for the new channel.
|
|
240
|
+
* @returns The created AudioChannelInterface instance, or undefined if a channel with the alias already exists.
|
|
241
|
+
*/
|
|
242
|
+
addChannel(alias: string | string[], options?: ChannelOptions): AudioChannelInterface | undefined;
|
|
243
|
+
/**
|
|
244
|
+
* Finds and returns the audio channel associated with the given alias. If the channel does not exist, it will be created.
|
|
245
|
+
* @param alias The alias of the audio channel to find.
|
|
246
|
+
* @returns The AudioChannelInterface instance associated with the alias.
|
|
247
|
+
*/
|
|
248
|
+
findChannel(alias: string): AudioChannelInterface;
|
|
249
|
+
/**
|
|
250
|
+
* Returns an array of all existing audio channels.
|
|
251
|
+
*/
|
|
252
|
+
readonly channels: AudioChannelInterface[];
|
|
253
|
+
/**
|
|
254
|
+
* The default channel alias to use when playing a sound without specifying a channel.
|
|
255
|
+
* By default, this is set to `GENERAL_CHANNEL` ("general"), but it can be changed to any string; if the channel does not yet exist, it will be created on demand when used.
|
|
256
|
+
*/
|
|
257
|
+
defaultChannelAlias: string;
|
|
142
258
|
export(): SoundGameState;
|
|
143
|
-
|
|
144
|
-
restore(data: object): void;
|
|
259
|
+
restore(data: object): Promise<void>;
|
|
145
260
|
}
|
|
146
261
|
|
|
147
262
|
declare const filters: {
|
|
@@ -156,15 +271,21 @@ declare const filters: {
|
|
|
156
271
|
|
|
157
272
|
declare class SoundManagerStatic {
|
|
158
273
|
private constructor();
|
|
159
|
-
static
|
|
160
|
-
|
|
161
|
-
|
|
274
|
+
static mediaInstances: {
|
|
275
|
+
[alias: string]: {
|
|
276
|
+
channelAlias: string;
|
|
277
|
+
soundAlias: string;
|
|
278
|
+
instance: IMediaInstance;
|
|
279
|
+
stepCounter: number;
|
|
280
|
+
options: SoundPlayOptions;
|
|
281
|
+
};
|
|
162
282
|
};
|
|
163
|
-
static
|
|
164
|
-
[
|
|
283
|
+
static channels: {
|
|
284
|
+
[alias: string]: AudioChannelInterface;
|
|
165
285
|
};
|
|
286
|
+
static delayTimeoutInstances: [number | NodeJS.Timeout, string][];
|
|
166
287
|
}
|
|
167
288
|
|
|
168
|
-
declare const sound:
|
|
289
|
+
declare const sound: SoundManagerInterface;
|
|
169
290
|
|
|
170
|
-
export { type ExportedSound,
|
|
291
|
+
export { type AudioChannelInterface, type ChannelOptions, type ExportedSound, type ExportedSoundPlay, type IMediaInstance, type SoundFilterMemory, type SoundGameState, SoundManagerStatic, type SoundOptions, type SoundPlay, type SoundPlayOptions, type SoundPlayOptionsWithChannel, filters, sound };
|
package/dist/sound.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import'./chunk-
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXJTdGF0aWMudHMiLCIuLi9zcmMvc291bmQvY2xhc3Nlcy9Tb3VuZC50cyIsIi4uL3NyYy9zb3VuZC9mdW5jdGlvbnMvc291bmQtdXRpbGl0eS50cyIsIi4uL3NyYy9zb3VuZC9Tb3VuZE1hbmFnZXIudHMiLCIuLi9zcmMvc291bmQvY29uc3RhbnRzLnRzIiwiLi4vc3JjL3NvdW5kL2luZGV4LnRzIl0sIm5hbWVzIjpbIlNvdW5kTWFuYWdlclN0YXRpYyIsIl9fcHVibGljRmllbGQiLCJTb3VuZCIsIl9Tb3VuZCIsIlBpeGlTb3VuZCIsIlBpeGlFcnJvciIsIml0ZW0iLCJHYW1lVW5pZmllciIsIm9wdGlvbnMiLCJzb3VyY2UiLCJzIiwiRmlsdGVyTWVtb3J5VG9GaWx0ZXIiLCJmaWx0ZXIiLCJyZXMiLCJmIiwiZmlsdGVycyIsImxvZ2dlciIsIkZpbHRlclRvRmlsdGVyTWVtb3J5IiwiU291bmRNYW5hZ2VyIiwiU291bmRMaWJyYXJ5Iiwic291bmQiLCJmaWx0ZXJzQWxsIiwib3ZlcnJpZGVzIiwiYWxpYXMiLCJzb3VyY2VPcHRpb25zIiwibGVnYWN5IiwiYXV0b1BhdXNlIiwidCIsInZvbHVtZSIsInNwZWVkIiwiYXNzZXJ0Iiwic291bmRFbGVtZW50cyIsImNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IiwiZGF0YSIsInN0ZXBDb3VudGVyIiwicGxheUluU3RlcEluZGV4Iiwic291bmRzIiwiYXV0b1BsYXkiLCJzdGVwIiwic291bmRzUGxheWluZyIsIm9wIiwiZSJdLCJtYXBwaW5ncyI6InFNQUdxQkEsQ0FBQUEsQ0FBckIsS0FBd0MsQ0FDNUIsV0FBQSxFQUFjLENBQUMsQ0FJM0IsRUFISUMsQ0FBQUEsQ0FGaUJELEVBRVYsbUJBQUEsQ0FBOEIsSUFDckNDLENBQUFBLENBSGlCRCxDQUFBQSxDQUdWLGdCQUE4QyxFQUFDLENBQUEsQ0FDdERDLENBQUFBLENBSmlCRCxDQUFBQSxDQUlWLFNBQW1DLEVBQUMsQ0FB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T0FBQSxFQUFXLE9BQU9BLENBQUFBLENBQUssT0FBQSxFQUFZLFVBQVlBLENBQUFBLENBQUssT0FBQSxDQUFRLE1BRzNEQSxDQUFBQSxDQUFLLFNBQUEsR0FBY0osQ0FBQUEsSUFDMUJHLENBQUFBLENBQVcsSUFHWC9CLENBQUFBLENBQUssT0FBQSxHQUNMSSxFQUFFLE9BQUEsQ0FBVUMsQ0FBQUEsQ0FBcUJMLEVBQUssT0FBTyxDQUFBLENBQUEsQ0FHN0MrQixHQUNBM0IsQ0FBQUEsQ0FBRSxJQUFBLEdBRVYsQ0FDSixDQUNKLE1BQU8sQ0FDSE0sQ0FBQUEsQ0FBTyxNQUFNLHFEQUFxRCxDQUFBLENBQ2xFLE1BQ0osQ0FDSixPQUFTeUIsQ0FBQUEsQ0FBRyxDQUNSekIsRUFBTyxLQUFBLENBQU0sc0JBQUEsQ0FBd0J5QixDQUFDLEVBQzFDLENBQ0osQ0FDSixDQUFBLEtDaFlhMUIsQ0FBQUEsQ0FBVSxDQUNuQixpQkFBa0JELE9BQUFBLENBQUUsZ0JBQUEsQ0FDcEIsZUFBQSxDQUFpQkEsT0FBQUEsQ0FBRSxnQkFDbkIsVUFBQSxDQUFZQSxPQUFBQSxDQUFFLFdBQ2QsWUFBQSxDQUFjQSxPQUFBQSxDQUFFLGFBQ2hCLFlBQUEsQ0FBY0EsT0FBQUEsQ0FBRSxhQUNoQixZQUFBLENBQWNBLE9BQUFBLENBQUUsYUFDaEIsZUFBQSxDQUFpQkEsT0FBQUEsQ0FBRSxlQUN2QixFQ0FBLElBQU1NLEdBQVEsSUFBSUYiLCJmaWxlIjoic291bmQubWpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNvdW5kIGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmltcG9ydCB7IFNvdW5kUGxheSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmRNYW5hZ2VyU3RhdGljIHtcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbiAgICBzdGF0aWMgc291bmRBbGlhc2VzT3JkZXI6IHN0cmluZ1tdID0gW107XG4gICAgc3RhdGljIHNvdW5kc1BsYXlpbmc6IHsgW2tleTogc3RyaW5nXTogU291bmRQbGF5IH0gPSB7fTtcbiAgICBzdGF0aWMgc291bmRzOiB7IFtrZXk6IHN0cmluZ106IFNvdW5kIH0gPSB7fTtcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7IElNZWRpYUluc3RhbmNlLCBTb3VuZCBhcyBQaXhpU291bmQgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4uL1NvdW5kTWFuYWdlclN0YXRpY1wiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvU291bmRPcHRpb25zXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kIGV4dGVuZHMgUGl4aVNvdW5kIHtcbiAgICBhbGlhcz86IHN0cmluZztcbiAgICBvdmVycmlkZSBwYXVzZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHBhdXNlZDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnBhdXNlKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZSgpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdO1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGZvdW5kIGluIHRoZSBwbGF5SW5TdGVwSW5kZXguXCIpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW3RoaXMuYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5yZXN1bWUoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgICBvdmVycmlkZSBzdG9wKCk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuYWxpYXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXCJ1bmtub3duX2VsZW1lbnRcIiwgXCJUaGUgYWxpYXMgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1t0aGlzLmFsaWFzXTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLnN0b3AoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGxheShvcHRpb25zPzogc3RyaW5nIHwgU291bmRQbGF5T3B0aW9ucyk6IElNZWRpYUluc3RhbmNlIHwgUHJvbWlzZTxJTWVkaWFJbnN0YW5jZT4ge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYWxpYXMgPSBvcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hbGlhcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbdGhpcy5hbGlhc10gPSB7XG4gICAgICAgICAgICBzdGVwSW5kZXg6IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzdXBlci5wbGF5KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9waXhpanMvc291bmQvYmxvYi9tYWluL3NyYy9Tb3VuZC50cyNMMjM1XG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tKHNvdXJjZTogc3RyaW5nIHwgc3RyaW5nW10gfCBTb3VuZE9wdGlvbnMgfCBBcnJheUJ1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBBdWRpb0J1ZmZlcik6IFNvdW5kIHtcbiAgICAgICAgbGV0IHMgPSBQaXhpU291bmQuZnJvbShzb3VyY2UpO1xuICAgICAgICByZXR1cm4gbmV3IFNvdW5kKHMubWVkaWEsIHMub3B0aW9ucyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRmlsdGVyLCBmaWx0ZXJzIH0gZnJvbSBcIkBwaXhpL3NvdW5kXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZEZpbHRlck1lbW9yeSBmcm9tIFwiLi4vdHlwZXMvU291bmRGaWx0ZXJNZW1vcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlck1lbW9yeVRvRmlsdGVyKGZpbHRlcjogU291bmRGaWx0ZXJNZW1vcnlbXSk6IEZpbHRlcltdIHtcbiAgICBsZXQgcmVzOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmLnR5cGUgPT09IFwiVGVsZXBob25lRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlRlbGVwaG9uZUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RyZWFtRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0cmVhbUZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiU3RlcmVvRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcihmLnBhbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJSZXZlcmJGaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuUmV2ZXJiRmlsdGVyKGYuc2Vjb25kcywgZi5kZWNheSwgZi5yZXZlcnNlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZi50eXBlID09PSBcIk1vbm9GaWx0ZXJcIikge1xuICAgICAgICAgICAgcmVzLnB1c2gobmV3IGZpbHRlcnMuTW9ub0ZpbHRlcigpKTtcbiAgICAgICAgfSBlbHNlIGlmIChmLnR5cGUgPT09IFwiRXF1YWxpemVyRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcihmLmYzMiwgZi5mNjQsIGYuZjEyNSwgZi5mMjUwLCBmLmY1MDAsIGYuZjFrLCBmLmYyaywgZi5mNGssIGYuZjhrLCBmLmYxNmspXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGYudHlwZSA9PT0gXCJEaXN0b3J0aW9uRmlsdGVyXCIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKG5ldyBmaWx0ZXJzLkRpc3RvcnRpb25GaWx0ZXIoZi5hbW91bnQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEZpbHRlclRvRmlsdGVyTWVtb3J5KGZpbHRlcj86IEZpbHRlcltdKTogU291bmRGaWx0ZXJNZW1vcnlbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IHJlczogU291bmRGaWx0ZXJNZW1vcnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGYgb2YgZmlsdGVyKSB7XG4gICAgICAgIGlmIChmIGluc3RhbmNlb2YgZmlsdGVycy5UZWxlcGhvbmVGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlRlbGVwaG9uZUZpbHRlclwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuU3RyZWFtRmlsdGVyKSB7XG4gICAgICAgICAgICByZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJTdHJlYW1GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlN0ZXJlb0ZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiU3RlcmVvRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgcGFuOiBmLnBhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLlJldmVyYkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiUmV2ZXJiRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgc2Vjb25kczogZi5zZWNvbmRzLFxuICAgICAgICAgICAgICAgIGRlY2F5OiBmLmRlY2F5LFxuICAgICAgICAgICAgICAgIHJldmVyc2U6IGYucmV2ZXJzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLk1vbm9GaWx0ZXIpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIk1vbm9GaWx0ZXJcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGYgaW5zdGFuY2VvZiBmaWx0ZXJzLkVxdWFsaXplckZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRXF1YWxpemVyRmlsdGVyXCIsXG4gICAgICAgICAgICAgICAgZjMyOiBmLmYzMixcbiAgICAgICAgICAgICAgICBmNjQ6IGYuZjY0LFxuICAgICAgICAgICAgICAgIGYxMjU6IGYuZjEyNSxcbiAgICAgICAgICAgICAgICBmMjUwOiBmLmYyNTAsXG4gICAgICAgICAgICAgICAgZjUwMDogZi5mNTAwLFxuICAgICAgICAgICAgICAgIGYxazogZi5mMWssXG4gICAgICAgICAgICAgICAgZjJrOiBmLmYyayxcbiAgICAgICAgICAgICAgICBmNGs6IGYuZjRrLFxuICAgICAgICAgICAgICAgIGY4azogZi5mOGssXG4gICAgICAgICAgICAgICAgZjE2azogZi5mMTZrLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZiBpbnN0YW5jZW9mIGZpbHRlcnMuRGlzdG9ydGlvbkZpbHRlcikge1xuICAgICAgICAgICAgcmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiRGlzdG9ydGlvbkZpbHRlclwiLFxuICAgICAgICAgICAgICAgIGFtb3VudDogZi5hbW91bnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIlVua25vd24gc291bmQgZmlsdGVyIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsImltcG9ydCB7IEdhbWVVbmlmaWVyLCBQaXhpRXJyb3IgfSBmcm9tIFwiQGRyaW5jcy9waXhpLXZuL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgRmlsdGVyLFxuICAgIGZpbHRlcnMsXG4gICAgSU1lZGlhQ29udGV4dCxcbiAgICBJTWVkaWFJbnN0YW5jZSxcbiAgICBTb3VuZCBhcyBQaXhpU291bmQsXG4gICAgc291bmQsXG4gICAgU291bmRMaWJyYXJ5LFxuICAgIFNvdW5kTWFwLFxufSBmcm9tIFwiQHBpeGkvc291bmRcIjtcbmltcG9ydCB7IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vdXRpbHMvbG9nLXV0aWxpdHlcIjtcbmltcG9ydCBTb3VuZCBmcm9tIFwiLi9jbGFzc2VzL1NvdW5kXCI7XG5pbXBvcnQgeyBGaWx0ZXJNZW1vcnlUb0ZpbHRlciwgRmlsdGVyVG9GaWx0ZXJNZW1vcnkgfSBmcm9tIFwiLi9mdW5jdGlvbnMvc291bmQtdXRpbGl0eVwiO1xuaW1wb3J0IFNvdW5kR2FtZVN0YXRlLCB7IEV4cG9ydGVkU291bmRQbGF5IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZEdhbWVTdGF0ZVwiO1xuaW1wb3J0IFNvdW5kT3B0aW9ucywgeyBTb3VuZFBsYXlPcHRpb25zIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9Tb3VuZE9wdGlvbnNcIjtcbmltcG9ydCBTb3VuZE1hbmFnZXJTdGF0aWMgZnJvbSBcIi4vU291bmRNYW5hZ2VyU3RhdGljXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kTWFuYWdlciBleHRlbmRzIFNvdW5kTGlicmFyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBjb250ZXh0KCk6IElNZWRpYUNvbnRleHQge1xuICAgICAgICByZXR1cm4gc291bmQuY29udGV4dDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGZpbHRlcnNBbGwoKTogRmlsdGVyW10ge1xuICAgICAgICByZXR1cm4gc291bmQuZmlsdGVyc0FsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IGZpbHRlcnNBbGwoZmlsdGVyc0FsbDogRmlsdGVyW10pIHtcbiAgICAgICAgc291bmQuZmlsdGVyc0FsbCA9IGZpbHRlcnNBbGwuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIShmIGluc3RhbmNlb2YgZmlsdGVycy5GaWx0ZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IHN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN1cHBvcnRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3NvdW5kL2Jsb2IvbWFpbi9zcmMvU291bmRMaWJyYXJ5LnRzI0wxODdcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE9wdGlvbnMoXG4gICAgICAgIHNvdXJjZTogc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZE9wdGlvbnMsXG4gICAgICAgIG92ZXJyaWRlcz86IFNvdW5kT3B0aW9ucyxcbiAgICApOiBTb3VuZE9wdGlvbnMge1xuICAgICAgICBsZXQgb3B0aW9uczogU291bmRPcHRpb25zO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zID0geyB1cmw6IHNvdXJjZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBzb3VyY2UgfTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHNvdXJjZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgICAgICAgICBzb3VyY2UgaW5zdGFuY2VvZiBBdWRpb0J1ZmZlciB8fFxuICAgICAgICAgICAgc291cmNlIGluc3RhbmNlb2YgSFRNTEF1ZGlvRWxlbWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHNvdXJjZSB9IGFzIGFueTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBzb3VyY2UgYXMgU291bmRPcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLihvdmVycmlkZXMgfHwge30pIH07XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBTb3VuZE9wdGlvbnMgfCBzdHJpbmcpOiBTb3VuZDtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZDogVXNlIGBhZGQoYWxpYXM6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucyB8IHN0cmluZyB8IEFycmF5QnVmZmVyIHwgQXVkaW9CdWZmZXIgfCBIVE1MQXVkaW9FbGVtZW50IHwgU291bmQpOiBTb3VuZDtgIGluc3RlYWQuXG4gICAgICovXG4gICAgb3ZlcnJpZGUgYWRkKG1hcDogYW55LCBnbG9iYWxPcHRpb25zPzogU291bmRPcHRpb25zKTogU291bmRNYXA7XG4gICAgcHVibGljIG92ZXJyaWRlIGFkZChhbGlhczogc3RyaW5nLCBzb3VyY2VPcHRpb25zPzogU291bmRPcHRpb25zIHwgc3RyaW5nKTogU291bmQgfCBTb3VuZE1hcCB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQaXhpRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJpbnZhbGlkX3VzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJUaGUgbWV0aG9kIGFkZChtYXA6IFNvdW5kU291cmNlTWFwLCBnbG9iYWxPcHRpb25zPzogT3B0aW9ucykgaXMgZGVwcmVjYXRlZC4gVXNlIGFkZChhbGlhczogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zIHwgc3RyaW5nIHwgQXJyYXlCdWZmZXIgfCBBdWRpb0J1ZmZlciB8IEhUTUxBdWRpb0VsZW1lbnQgfCBTb3VuZCk6IFNvdW5kOyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShhbGlhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc291cmNlT3B0aW9ucyBpbnN0YW5jZW9mIFBpeGlTb3VuZCkge1xuICAgICAgICAgICAgc291cmNlT3B0aW9ucyA9IHNvdXJjZU9wdGlvbnMub3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBsZXQgczogU291bmQ7XG4gICAgICAgIGlmIChzb3VyY2VPcHRpb25zIGluc3RhbmNlb2YgU291bmQpIHtcbiAgICAgICAgICAgIHMgPSBzb3VyY2VPcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9wdGlvbnM6IFNvdW5kT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhzb3VyY2VPcHRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIHMgPSBTb3VuZC5mcm9tKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHMuYWxpYXMgPSBhbGlhcztcblxuICAgICAgICAhU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmluY2x1ZGVzKGFsaWFzKSAmJiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIucHVzaChhbGlhcyk7XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdID0gcztcbiAgICAgICAgc291bmQuYWRkKGFsaWFzLCBzKTtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB1c2VMZWdhY3koKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC51c2VMZWdhY3k7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCB1c2VMZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG4gICAgICAgIHNvdW5kLnVzZUxlZ2FjeSA9IGxlZ2FjeTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZ2V0IGRpc2FibGVBdXRvUGF1c2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kaXNhYmxlQXV0b1BhdXNlO1xuICAgIH1cbiAgICBvdmVycmlkZSBzZXQgZGlzYWJsZUF1dG9QYXVzZShhdXRvUGF1c2U6IGJvb2xlYW4pIHtcbiAgICAgICAgc291bmQuZGlzYWJsZUF1dG9QYXVzZSA9IGF1dG9QYXVzZTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlKGFsaWFzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kQWxpYXNlc09yZGVyLmZpbHRlcigodCkgPT4gdCAhPT0gYWxpYXMpO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICBkZWxldGUgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc107XG4gICAgICAgIHJldHVybiBzb3VuZC5yZW1vdmUoYWxpYXMpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCB2b2x1bWVBbGwoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZUFsbDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc2V0IHZvbHVtZUFsbCh2b2x1bWU6IG51bWJlcikge1xuICAgICAgICBzb3VuZC52b2x1bWVBbGwgPSB2b2x1bWU7XG4gICAgfVxuICAgIG92ZXJyaWRlIGdldCBzcGVlZEFsbCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWRBbGw7XG4gICAgfVxuICAgIG92ZXJyaWRlIHNldCBzcGVlZEFsbChzcGVlZDogbnVtYmVyKSB7XG4gICAgICAgIHNvdW5kLnNwZWVkQWxsID0gc3BlZWQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZVBhdXNlQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc291bmQudG9nZ2xlUGF1c2VBbGwoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgcGF1c2VBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5wYXVzZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlc3VtZUFsbCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnJlc3VtZUFsbCgpIGFzIHRoaXM7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvZ2dsZU11dGVBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC50b2dnbGVNdXRlQWxsKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIG11dGVBbGwoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBzb3VuZC5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgdW5tdXRlQWxsKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQudW5tdXRlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgcmVtb3ZlQWxsKCk6IHRoaXMge1xuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRBbGlhc2VzT3JkZXIgPSBbXTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSB7fTtcbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcyA9IHt9O1xuICAgICAgICByZXR1cm4gc291bmQucmVtb3ZlQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3RvcEFsbCgpOiB0aGlzIHtcbiAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kcykge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10uc3RvcCgpO1xuICAgICAgICB9XG4gICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nID0ge307XG4gICAgICAgIHJldHVybiBzb3VuZC5zdG9wQWxsKCkgYXMgdGhpcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgZXhpc3RzKGFsaWFzOiBzdHJpbmcsIGFzc2VydD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLmV4aXN0cyhhbGlhcywgYXNzZXJ0KSB8fCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzO1xuICAgIH1cbiAgICBvdmVycmlkZSBpc1BsYXlpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3VuZC5pc1BsYXlpbmcoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZmluZChhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNbYWxpYXNdO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaXRlbSA9IHNvdW5kLmZpbmQoYWxpYXMpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1thbGlhc10gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBvdmVycmlkZSBwbGF5KGFsaWFzOiBzdHJpbmcsIG9wdGlvbnM/OiBTb3VuZFBsYXlPcHRpb25zIHwgc3RyaW5nKTogSU1lZGlhSW5zdGFuY2UgfCBQcm9taXNlPElNZWRpYUluc3RhbmNlPiB7XG4gICAgICAgIGlmICghdGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgc291bmQgbGlicmFyeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBwYXVzZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGxheShhbGlhcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHN0b3AoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgZGVsZXRlIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnN0b3AoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSBwYXVzZShhbGlhczogc3RyaW5nKTogU291bmQge1xuICAgICAgICBsZXQgaXRlbSA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGl4aUVycm9yKFwidW5rbm93bl9lbGVtZW50XCIsIFwiVGhlIGFsaWFzIGlzIG5vdCBmb3VuZCBpbiB0aGUgcGxheUluU3RlcEluZGV4LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcGF1c2VkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc291bmQucGF1c2UoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSByZXN1bWUoYWxpYXM6IHN0cmluZyk6IFNvdW5kIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc107XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFBpeGlFcnJvcihcInVua25vd25fZWxlbWVudFwiLCBcIlRoZSBhbGlhcyBpcyBub3QgZm91bmQgaW4gdGhlIHBsYXlJblN0ZXBJbmRleC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdID0ge1xuICAgICAgICAgICAgb3B0aW9uczogaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgc3RlcEluZGV4OiBHYW1lVW5pZmllci5zdGVwQ291bnRlcixcbiAgICAgICAgICAgIHBhdXNlZDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzb3VuZC5yZXN1bWUoYWxpYXMpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2b2x1bWUoYWxpYXM6IHN0cmluZywgdm9sdW1lPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHNvdW5kLnZvbHVtZShhbGlhcywgdm9sdW1lKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgc3BlZWQoYWxpYXM6IHN0cmluZywgc3BlZWQ/OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gc291bmQuc3BlZWQoYWxpYXMsIHNwZWVkKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgZHVyYXRpb24oYWxpYXM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBzb3VuZC5kdXJhdGlvbihhbGlhcyk7XG4gICAgfVxuICAgIG92ZXJyaWRlIGNsb3NlKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gc291bmQuY2xvc2UoKSBhcyB0aGlzO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnN0b3BBbGwoKTtcbiAgICB9XG5cbiAgICAvKiBFeHBvcnQgYW5kIEltcG9ydCBNZXRob2RzICovXG5cbiAgICBwdWJsaWMgZXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgbGV0IHNvdW5kRWxlbWVudHM6IHsgW2tleTogc3RyaW5nXTogRXhwb3J0ZWRTb3VuZFBsYXkgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZykge1xuICAgICAgICAgICAgbGV0IHNvdW5kID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmZpbmQoYWxpYXMpO1xuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBzb3VuZEVsZW1lbnRzW2FsaWFzXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc291bmQsXG4gICAgICAgICAgICAgICAgICAgIHNvdW5kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBpdGVtLmF1dG9QbGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A6IGl0ZW0ubG9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkOiBpdGVtLnByZWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlSW5zdGFuY2U6IGl0ZW0uc2luZ2xlSW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLm9wdGlvbnMudXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZTogaXRlbS5vcHRpb25zLnZvbHVtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBGaWx0ZXJUb0ZpbHRlck1lbW9yeShpdGVtLm1lZGlhLmZpbHRlcnMpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNvdW5kc1BsYXlpbmc6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KHNvdW5kRWxlbWVudHMpLFxuICAgICAgICAgICAgc291bmRBbGlhc2VzT3JkZXI6IGNyZWF0ZUV4cG9ydGFibGVFbGVtZW50KFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciksXG4gICAgICAgICAgICBmaWx0ZXJzOiBjcmVhdGVFeHBvcnRhYmxlRWxlbWVudChGaWx0ZXJUb0ZpbHRlck1lbW9yeSh0aGlzLmZpbHRlcnNBbGwpKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHVibGljIHJlbW92ZU9sZFNvdW5kQW5kRXhwb3J0KCk6IFNvdW5kR2FtZVN0YXRlIHtcbiAgICAgICAgLy8gbGV0IHNvdW5kQWxpYXNlc09yZGVyID0gW11cbiAgICAgICAgLy8gZm9yIChsZXQgYWxpYXMgb2YgR2FtZVNvdW5kTWFuYWdlci5zb3VuZEFsaWFzZXNPcmRlcikge1xuICAgICAgICAvLyAgICAgaWYgKHNvdW5kLmV4aXN0cyhhbGlhcykpIHtcbiAgICAgICAgLy8gICAgICAgICBsZXQgcyA9IHNvdW5kLmZpbmQoYWxpYXMpXG4gICAgICAgIC8vICAgICAgICAgaWYgKHMubG9vcCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBzb3VuZEFsaWFzZXNPcmRlci5wdXNoKGFsaWFzKVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBHYW1lU291bmRNYW5hZ2VyLnNvdW5kQWxpYXNlc09yZGVyID0gc291bmRBbGlhc2VzT3JkZXJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0KCk7XG4gICAgfVxuICAgIHB1YmxpYyByZXN0b3JlKGRhdGE6IG9iamVjdCkge1xuICAgICAgICBjb25zdCBzdGVwQ291bnRlciA9IEdhbWVVbmlmaWVyLnN0ZXBDb3VudGVyIC0gMTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJzb3VuZEFsaWFzZXNPcmRlclwiKSkge1xuICAgICAgICAgICAgICAgIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZEFsaWFzZXNPcmRlciA9IChkYXRhIGFzIFNvdW5kR2FtZVN0YXRlKVtcInNvdW5kQWxpYXNlc09yZGVyXCJdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJUaGUgZGF0YSBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXJ0aWVzIHNvdW5kQWxpYXNlc09yZGVyXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJmaWx0ZXJzXCIpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGYgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJmaWx0ZXJzXCJdO1xuICAgICAgICAgICAgICAgIGlmIChmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc0FsbCA9IEZpbHRlck1lbW9yeVRvRmlsdGVyKGYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoXCJwbGF5SW5TdGVwSW5kZXhcIikpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGxheUluU3RlcEluZGV4ID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wicGxheUluU3RlcEluZGV4XCJdO1xuICAgICAgICAgICAgICAgIGlmIChwbGF5SW5TdGVwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcgPSBwbGF5SW5TdGVwSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNvdW5kc1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHMgPSAoZGF0YSBhcyBTb3VuZEdhbWVTdGF0ZSlbXCJzb3VuZHNcIl07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYWxpYXMgaW4gc291bmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtID0gc291bmRzW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsaWFzIGluIFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RlcCA9IFNvdW5kTWFuYWdlclN0YXRpYy5zb3VuZHNQbGF5aW5nW2FsaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wdGlvbnMubG9vcCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGVwLm9wdGlvbnMgJiYgdHlwZW9mIHN0ZXAub3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBzdGVwLm9wdGlvbnMubG9vcClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcC5zdGVwSW5kZXggPT09IHN0ZXBDb3VudGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5maWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5maWx0ZXJzID0gRmlsdGVyTWVtb3J5VG9GaWx0ZXIoaXRlbS5maWx0ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9QbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5wbGF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic291bmRzUGxheWluZ1wiKSkge1xuICAgICAgICAgICAgICAgIGxldCBzb3VuZHNQbGF5aW5nID0gKGRhdGEgYXMgU291bmRHYW1lU3RhdGUpW1wic291bmRzUGxheWluZ1wiXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhbGlhcyBpbiBzb3VuZHNQbGF5aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcCA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICBTb3VuZE1hbmFnZXJTdGF0aWMuc291bmRzUGxheWluZ1thbGlhc10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZWQ6IG9wLnBhdXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBJbmRleDogb3Auc3RlcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3Aub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHNvdW5kc1BsYXlpbmdbYWxpYXNdLnNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXV0b1BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHM6IFNvdW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leGlzdHMoYWxpYXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5maW5kKGFsaWFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy51cmwgPSBzLm9wdGlvbnMudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLnZvbHVtZSA9IHMub3B0aW9ucy52b2x1bWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLm9wdGlvbnMgPSBpdGVtLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmF1dG9QbGF5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBpdGVtLmZpbHRlcnMgPyBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpIDogW107XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzID0gdGhpcy5hZGQoYWxpYXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoYWxpYXMgaW4gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdGVwID0gU291bmRNYW5hZ2VyU3RhdGljLnNvdW5kc1BsYXlpbmdbYWxpYXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5sb29wIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0ZXAub3B0aW9ucyAmJiB0eXBlb2Ygc3RlcC5vcHRpb25zID09PSBcIm9iamVjdFwiICYmIHN0ZXAub3B0aW9ucy5sb29wKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1BsYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwLnN0ZXBJbmRleCA9PT0gc3RlcENvdW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvUGxheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmZpbHRlcnMgPSBGaWx0ZXJNZW1vcnlUb0ZpbHRlcihpdGVtLmZpbHRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b1BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnBsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiVGhlIGRhdGEgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVydGllcyBzb3VuZHNQbGF5aW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgaW1wb3J0aW5nIGRhdGFcIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBmaWx0ZXJzIGFzIGYgfSBmcm9tIFwiQHBpeGkvc291bmRcIjtcblxuZXhwb3J0IGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgRGlzdG9ydGlvbkZpbHRlcjogZi5EaXN0b3J0aW9uRmlsdGVyLFxuICAgIEVxdWFsaXplckZpbHRlcjogZi5FcXVhbGl6ZXJGaWx0ZXIsXG4gICAgTW9ub0ZpbHRlcjogZi5Nb25vRmlsdGVyLFxuICAgIFJldmVyYkZpbHRlcjogZi5SZXZlcmJGaWx0ZXIsXG4gICAgU3RlcmVvRmlsdGVyOiBmLlN0ZXJlb0ZpbHRlcixcbiAgICBTdHJlYW1GaWx0ZXI6IGYuU3RyZWFtRmlsdGVyLFxuICAgIFRlbGVwaG9uZUZpbHRlcjogZi5UZWxlcGhvbmVGaWx0ZXIsXG59O1xuIiwiaW1wb3J0IFNvdW5kTWFuYWdlciBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZCB9IGZyb20gXCIuL2NsYXNzZXMvU291bmRcIjtcbmV4cG9ydCB7IGZpbHRlcnMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCB0eXBlIHsgRXhwb3J0ZWRTb3VuZCwgZGVmYXVsdCBhcyBTb3VuZEdhbWVTdGF0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvU291bmRHYW1lU3RhdGVcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZE9wdGlvbnMsIFNvdW5kUGxheU9wdGlvbnMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL1NvdW5kT3B0aW9uc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTb3VuZE1hbmFnZXJTdGF0aWMgfSBmcm9tIFwiLi9Tb3VuZE1hbmFnZXJTdGF0aWNcIjtcbmV4cG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBTb3VuZEZpbHRlck1lbW9yeSB9IGZyb20gXCIuL3R5cGVzL1NvdW5kRmlsdGVyTWVtb3J5XCI7XG5leHBvcnQgeyBzb3VuZCB9O1xuXG5jb25zdCBzb3VuZCA9IG5ldyBTb3VuZE1hbmFnZXIoKTtcbiJdfQ==
|
|
1
|
+
import'./chunk-XSN6P5JL.mjs';import {i}from'./chunk-IWAXXFXE.mjs';import {d,j,k}from'./chunk-D45QSSXG.mjs';import {GameUnifier}from'@drincs/pixi-vn/core';import h from'@drincs/pixi-vn/pixi.js';import {filters,sound,Sound}from'@pixi/sound';function S(u,t){return u===void 0&&t===void 0?1:t===void 0?u:u===void 0?t:u*t}var s=class{constructor(){}};d(s,"mediaInstances",{}),d(s,"channels",{}),d(s,"delayTimeoutInstances",[]);function C(u,t,e){return new Proxy(t,{get(n,i,r){switch(i){case "volume":case "muted":{let a=s.mediaInstances[u];return a?a.options[i]:Reflect.get(n,i,r)}default:return Reflect.get(n,i,r)}},set(n,i,r,a){if(u in s.mediaInstances)switch(i){case "volume":return s.mediaInstances[u].options[i]=r,r=S(r,e.channelOptions.volume),Reflect.set(n,i,r,a);case "muted":return s.mediaInstances[u].options[i]=r,e.channelOptions.muted?Reflect.set(n,i,true,a):Reflect.set(n,i,r,a);case "loop":case "delay":case "end":case "filters":case "singleInstance":case "speed":case "sprite":case "start":s.mediaInstances[u].options[i]=r;default:return Reflect.set(n,i,r,a)}return Reflect.set(n,i,r,a)}})}var I=class{constructor(t,e={}){this.alias=t;this.channelOptions=e;}async play(t,e,n){let i,r;if(typeof e=="string"?(i=t,r=e):(i=t,r=t,n=e),i in s.mediaInstances){let o=s.mediaInstances[i];o.instance.stop(),n={...o.options,...n};}let a=C(i,await sound.play(r,{...n??{},filters:[...this.channelOptions.filters||[],...n?.filters||[]],muted:!!this.channelOptions.muted||!!n?.muted,volume:S(n?.volume,this.channelOptions.volume)}),this);if(n?.delay){a.paused=true;let o=setTimeout(()=>{a.paused=false,s.delayTimeoutInstances=s.delayTimeoutInstances.filter(y=>y[0]!==o);},n.delay*1e3);s.delayTimeoutInstances.push([o,i]);}return s.mediaInstances[i]={channelAlias:this.alias,soundAlias:r,instance:a,stepCounter:GameUnifier.stepCounter,options:{volume:n?.volume??1,muted:n?.muted??false,loop:n?.loop??false,...n??{}}},a.on("end",()=>{delete s.mediaInstances[i];}),a}updateMediaVolume(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];if(e.channelAlias===this.alias){let n=e.options.volume??1;e.instance.volume=n;}}}get volume(){return this.channelOptions.volume??1}set volume(t){this.channelOptions.volume=t,this.updateMediaVolume();}updateMediaMuted(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];if(e.channelAlias===this.alias){let n=e.options.muted??false;e.instance.muted=n;}}}get muted(){return this.channelOptions.muted??false}set muted(t){this.channelOptions.muted=t,this.updateMediaMuted();}toggleMuteAll(){return this.muted=!this.muted,this.muted}get mediaInstances(){return Object.values(s.mediaInstances).reduce((t,e)=>(e.channelAlias===this.alias&&t.push(e.instance),t),[])}get background(){return this.channelOptions.background||false}stopAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.channelAlias===this.alias&&(e.instance.stop(),delete s.mediaInstances[t]);}return this}pauseAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.channelAlias===this.alias&&!e.instance.paused&&(e.instance.paused=true);}return this}resumeAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.channelAlias===this.alias&&e.instance.paused&&(e.instance.paused=false);}return this}};function g(u){let t=[];for(let e of u)e.type==="TelephoneFilter"?t.push(new filters.TelephoneFilter):e.type==="StreamFilter"?t.push(new filters.StreamFilter):e.type==="StereoFilter"?t.push(new filters.StereoFilter(e.pan)):e.type==="ReverbFilter"?t.push(new filters.ReverbFilter(e.seconds,e.decay,e.reverse)):e.type==="MonoFilter"?t.push(new filters.MonoFilter):e.type==="EqualizerFilter"?t.push(new filters.EqualizerFilter(e.f32,e.f64,e.f125,e.f250,e.f500,e.f1k,e.f2k,e.f4k,e.f8k,e.f16k)):e.type==="DistortionFilter"?t.push(new filters.DistortionFilter(e.amount)):j.error("Unknown sound filter type");return t}function b(u){if(!u)return;let t=[];for(let e of u)e instanceof filters.TelephoneFilter?t.push({type:"TelephoneFilter"}):e instanceof filters.StreamFilter?t.push({type:"StreamFilter"}):e instanceof filters.StereoFilter?t.push({type:"StereoFilter",pan:e.pan}):e instanceof filters.ReverbFilter?t.push({type:"ReverbFilter",seconds:e.seconds,decay:e.decay,reverse:e.reverse}):e instanceof filters.MonoFilter?t.push({type:"MonoFilter"}):e instanceof filters.EqualizerFilter?t.push({type:"EqualizerFilter",f32:e.f32,f64:e.f64,f125:e.f125,f250:e.f250,f500:e.f500,f1k:e.f1k,f2k:e.f2k,f4k:e.f4k,f8k:e.f8k,f16k:e.f16k}):e instanceof filters.DistortionFilter?t.push({type:"DistortionFilter",amount:e.amount}):j.error("Unknown sound filter type");return t}var A=class{constructor(){d(this,"_defaultChannelAlias",i);}get context(){return sound.context}get filtersAll(){return sound.filtersAll}set filtersAll(t){sound.filtersAll=t.filter(e=>!(e instanceof filters.Filter));}get supported(){return sound.supported}get defaultChannelAlias(){return this._defaultChannelAlias}set defaultChannelAlias(t){this._defaultChannelAlias=t;}add(t,e){return sound.add(t,e)}async edit(t,e){let n=sound.find(t);if(!n&&(await this.load(t),n=sound.find(t),!n)){j.error(`Sound with alias ${t} not found after loading.`);return}n.options=e;}get useLegacy(){return sound.useLegacy}set useLegacy(t){sound.useLegacy=t;}get disableAutoPause(){return sound.disableAutoPause}set disableAutoPause(t){sound.disableAutoPause=t;}get volumeAll(){return sound.volumeAll}set volumeAll(t){sound.volumeAll=t;}get speedAll(){return sound.speedAll}set speedAll(t){sound.speedAll=t;}pauseAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.instance.paused||(e.instance.paused=true);}return this}resumeAll(){for(let t in s.mediaInstances){let e=s.mediaInstances[t];e.instance.paused&&(e.instance.paused=false);}return this}toggleMuteAll(){return sound.toggleMuteAll()}muteAll(){return sound.muteAll(),this}unmuteAll(){return sound.unmuteAll(),this}stopAll(){return s.mediaInstances={},sound.stopAll(),this}isPlaying(){return sound.isPlaying()}async play(t,e,n){let i,r;typeof e=="string"?(i=t,r=e):(i=t,r=t,n=e);let{channel:a=this.defaultChannelAlias,...o}=n??{};return await this.findChannel(a).play(i,r,o)}find(t){return s.mediaInstances[t]?.instance}stop(t){let e=this.find(t);e?(e.stop(),delete s.mediaInstances[t]):j.warn(`No media instance found with alias ${t} to stop.`);}pause(t){let e=this.find(t);if(!e){j.warn(`No media instance found with alias ${t} to pause.`);return}return e.paused=true,e}resume(t){let e=this.find(t);if(!e){j.warn(`No media instance found with alias ${t} to resume.`);return}return e.paused=false,e}duration(t){return sound.duration(t)}async load(t){await h.Assets.load(t),typeof t=="string"&&(t=[t]),t.forEach(e=>{let n=h.Assets.get(e);sound.exists(e)||sound.add(e,n);});}backgroundLoad(t){let e=h.Assets.backgroundLoad(t);return e.then(()=>{typeof t=="string"&&(t=[t]),t.forEach(n=>{let i=h.Assets.get(n);sound.exists(n)||sound.add(n,i);});}),e}backgroundLoadBundle(t){let e=h.Assets.backgroundLoadBundle(t);return e.then(async()=>{try{let n=await h.Assets.loadBundle(t);for(let i in n){let r=n[i];r instanceof Sound&&(sound.exists(i)||sound.add(i,r));}}catch(n){j.error("Error loading sound bundle",n);}}),e}clear(){this.stopAll();}addChannel(t,e={}){if(typeof t!="string"){t.forEach(i=>{let r={...e,filters:e.filters?[...e.filters]:e.filters};this.addChannel(i,r);});return}if(s.channels[t]){j.warn(`Channel with alias ${t} already exists.`);return}let n=new I(t,e);return s.channels[t]=n,n}findChannel(t){let e=s.channels[t];return e||this.addChannel(t)}get channels(){return Object.values(s.channels)}export(){let t=Object.entries(s.mediaInstances).reduce((e,[n,i])=>(e[n]={channelAlias:i.channelAlias,soundAlias:i.soundAlias,stepCounter:i.stepCounter,options:{...i.options,filters:b(i.options.filters)},paused:i.instance.paused},e),{});return {mediaInstances:k(t),filters:k(b(this.filtersAll))}}async restore(t){try{if(t.hasOwnProperty("soundsPlaying")){let e=t.soundsPlaying;if(e){let n=Object.keys(e).map(async i=>{await this.load(i),await this.play(i);});await Promise.all(n);}}if(t.hasOwnProperty("mediaInstances")){let e=t.mediaInstances;if(e){let n=new Set,i=Object.values(e).map(async({soundAlias:a,channelAlias:o})=>(n.add(o),await this.load(a)));await Promise.all(i),this.channels.forEach(a=>{(!a.background||!n.has(a.alias))&&a.stopAll();});let r=Object.keys(e).map(async a=>{let o=e[a],y=this.findChannel(o.channelAlias);if(y.background)if(o.stepCounter===GameUnifier.stepCounter||!this.find(a)){let d=await y.play(a,o.soundAlias,{...o.options,filters:g(o.options.filters||[])});o.paused&&(d.paused=o.paused);}else {let d=this.find(a);d&&(s.mediaInstances[a].options={...o.options,filters:g(o.options.filters||[])},d.paused!==o.paused&&(d.paused=o.paused),d.loop!==(o.options.loop||!1)&&(d.loop=o.options.loop||!1),d.volume!==(o.options.volume??1)&&(d.volume=o.options.volume??1),d.muted!==(o.options.muted||!1)&&(d.muted=o.options.muted||!1),d.speed!==(o.options.speed??1)&&(d.speed=o.options.speed??1));}else {let d=await y.play(a,o.soundAlias,{...o.options,filters:g(o.options.filters||[])});o.paused&&(d.paused=o.paused);}});await Promise.all(r);}}if(t.hasOwnProperty("filters")){let e=t.filters;e&&(this.filtersAll=g(e));}}catch(e){j.error("Error importing data",e);}}};var v={DistortionFilter:filters.DistortionFilter,EqualizerFilter:filters.EqualizerFilter,MonoFilter:filters.MonoFilter,ReverbFilter:filters.ReverbFilter,StereoFilter:filters.StereoFilter,StreamFilter:filters.StreamFilter,TelephoneFilter:filters.TelephoneFilter};var ce=new A;GameUnifier.addOnPreContinue(async()=>{try{s.delayTimeoutInstances.forEach(u=>{clearTimeout(u[0]);let t=s.mediaInstances[u[1]];t&&(t.instance.paused=!1);}),s.delayTimeoutInstances=[],Object.values(s.channels).forEach(u=>{u.background||u.stopAll();});}catch{}});export{s as SoundManagerStatic,v as filters,ce as sound};
|