@electron-forge/plugin-vite 8.0.0-alpha.3 → 8.0.0-alpha.5

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.
@@ -1,330 +1,414 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.VitePlugin = void 0;
7
- // TODO(erickzhao): Remove this when upgrading to Vite 6 and converting to ESM
8
- process.env.VITE_CJS_IGNORE_WARNING = 'true';
9
- const node_path_1 = __importDefault(require("node:path"));
10
- const plugin_base_1 = require("@electron-forge/plugin-base");
11
- const chalk_1 = __importDefault(require("chalk"));
12
- const debug_1 = __importDefault(require("debug"));
13
- const fs_extra_1 = __importDefault(require("fs-extra"));
14
- const listr2_1 = require("listr2");
15
- const vite_1 = __importDefault(require("vite"));
16
- const ViteConfig_1 = __importDefault(require("./ViteConfig"));
17
- const d = (0, debug_1.default)('electron-forge:plugin:vite');
18
- class VitePlugin extends plugin_base_1.PluginBase {
19
- constructor() {
20
- super(...arguments);
21
- this.name = 'vite';
22
- this.isProd = false;
23
- this.watchers = [];
24
- this.servers = [];
25
- // Matches the format of the default Vite logger
26
- this.timeFormatter = new Intl.DateTimeFormat(undefined, {
27
- hour: 'numeric',
28
- minute: 'numeric',
29
- second: 'numeric',
1
+ import { spawn } from 'node:child_process';
2
+ import path from 'node:path';
3
+ import { namedHookWithTaskFn, PluginBase } from '@electron-forge/plugin-base';
4
+ import chalk from 'chalk';
5
+ import debug from 'debug';
6
+ import fs from 'fs-extra';
7
+ import { PRESET_TIMER } from 'listr2';
8
+ import * as vite from 'vite';
9
+ import ViteConfigGenerator from './ViteConfig.js';
10
+ const d = debug('electron-forge:plugin:vite');
11
+ const subprocessWorkerPath = path.resolve(import.meta.dirname, 'subprocess-worker.js');
12
+ function spawnViteBuild(pluginConfig, kind, index, projectDir) {
13
+ return new Promise((resolve, reject) => {
14
+ const child = spawn(process.execPath, [subprocessWorkerPath], {
15
+ cwd: projectDir,
16
+ env: {
17
+ ...process.env,
18
+ FORGE_VITE_PROJECT_DIR: projectDir,
19
+ FORGE_VITE_KIND: kind,
20
+ FORGE_VITE_INDEX: String(index),
21
+ FORGE_VITE_CONFIG: JSON.stringify(pluginConfig),
22
+ },
23
+ stdio: ['ignore', 'pipe', 'pipe'],
30
24
  });
31
- this.init = (dir) => {
32
- this.setDirectories(dir);
33
- d('hooking process events');
34
- process.on('exit', (_code) => {
35
- this.exitHandler({ cleanup: true });
36
- });
37
- process.on('SIGINT', (_signal) => {
38
- this.exitHandler({ exit: true });
39
- });
40
- };
41
- this.getHooks = () => {
42
- return {
43
- preStart: [
44
- (0, plugin_base_1.namedHookWithTaskFn)(async (task) => {
45
- if (VitePlugin.alreadyStarted)
46
- return;
47
- VitePlugin.alreadyStarted = true;
48
- d(`preStart: removing old content from ${this.baseDir}`);
49
- await fs_extra_1.default.remove(this.baseDir);
50
- return task?.newListr([
51
- {
52
- title: 'Launching Vite dev servers for renderer process code...',
53
- task: async (_ctx, task) => {
54
- const result = await this.launchRendererDevServers(task);
55
- task.title =
56
- 'Launched Vite dev servers for renderer process code';
57
- return result;
58
- },
59
- rendererOptions: {
60
- persistentOutput: true,
61
- timer: { ...listr2_1.PRESET_TIMER },
62
- },
25
+ let stdout = '';
26
+ child.stdout.setEncoding('utf8');
27
+ child.stdout.on('data', (chunk) => {
28
+ stdout += chunk;
29
+ });
30
+ let stderr = '';
31
+ child.stderr.setEncoding('utf8');
32
+ child.stderr.on('data', (chunk) => {
33
+ stderr += chunk;
34
+ });
35
+ child.on('error', reject);
36
+ child.on('close', (code, signal) => {
37
+ if (code === 0) {
38
+ resolve();
39
+ }
40
+ else {
41
+ const output = [stdout, stderr].filter(Boolean).join('\n');
42
+ const reason = signal
43
+ ? `killed by signal ${signal}`
44
+ : `exited with code ${code}`;
45
+ reject(new Error(`Vite build subprocess ${reason}${output ? `:\n${output}` : ''}`));
46
+ }
47
+ });
48
+ });
49
+ }
50
+ function entryToDisplay(entry) {
51
+ if (typeof entry === 'string')
52
+ return entry;
53
+ if (Array.isArray(entry))
54
+ return entry.join(' ');
55
+ return Object.keys(entry).join(' ');
56
+ }
57
+ export default class VitePlugin extends PluginBase {
58
+ static alreadyStarted = false;
59
+ name = 'vite';
60
+ isProd = false;
61
+ /**
62
+ * Path to the root of the Electron app
63
+ */
64
+ projectDir;
65
+ /**
66
+ * Path where Vite output is generated. Usually `${projectDir}/.vite`
67
+ */
68
+ baseDir;
69
+ configGeneratorCache;
70
+ watchers = [];
71
+ servers = [];
72
+ // Matches the format of the default Vite logger
73
+ timeFormatter = new Intl.DateTimeFormat(undefined, {
74
+ hour: 'numeric',
75
+ minute: 'numeric',
76
+ second: 'numeric',
77
+ });
78
+ init = (dir) => {
79
+ this.setDirectories(dir);
80
+ d('hooking process events');
81
+ process.on('exit', (_code) => {
82
+ this.exitHandler({ cleanup: true });
83
+ });
84
+ process.on('SIGINT', (_signal) => {
85
+ this.exitHandler({ exit: true });
86
+ });
87
+ };
88
+ setDirectories(dir) {
89
+ this.projectDir = dir;
90
+ this.baseDir = path.join(dir, '.vite');
91
+ }
92
+ get configGenerator() {
93
+ return (this.configGeneratorCache ??= new ViteConfigGenerator(this.config, this.projectDir, this.isProd));
94
+ }
95
+ getHooks = () => {
96
+ return {
97
+ preStart: [
98
+ namedHookWithTaskFn(async (task) => {
99
+ if (VitePlugin.alreadyStarted)
100
+ return;
101
+ VitePlugin.alreadyStarted = true;
102
+ d(`preStart: removing old content from ${this.baseDir}`);
103
+ await fs.remove(this.baseDir);
104
+ return task?.newListr([
105
+ {
106
+ title: 'Launching Vite dev servers for renderer process code...',
107
+ task: async (_ctx, task) => {
108
+ const result = await this.launchRendererDevServers(task);
109
+ task.title =
110
+ 'Launched Vite dev servers for renderer process code';
111
+ return result;
63
112
  },
64
- // The main process depends on the `server.port` of the renderer process, so the renderer process is run first.
65
- {
66
- title: 'Building main process and preload bundles...',
67
- task: async (_ctx, task) => {
68
- const result = await this.build(task);
69
- task.title = 'Built main process and preload bundles';
70
- return result;
71
- },
72
- rendererOptions: {
73
- persistentOutput: true,
74
- timer: { ...listr2_1.PRESET_TIMER },
75
- },
113
+ rendererOptions: {
114
+ persistentOutput: true,
115
+ timer: { ...PRESET_TIMER },
76
116
  },
77
- ], { concurrent: false });
78
- }, 'Preparing Vite bundles'),
79
- ],
80
- prePackage: [
81
- (0, plugin_base_1.namedHookWithTaskFn)(async (task) => {
82
- this.isProd = true;
83
- await fs_extra_1.default.remove(this.baseDir);
84
- return task?.newListr([
85
- {
86
- title: 'Building main and preload targets...',
87
- task: async (_ctx, subtask) => {
88
- const results = await this.build(subtask);
89
- return results;
90
- },
117
+ },
118
+ // The main process depends on the `server.port` of the renderer process, so the renderer process is run first.
119
+ {
120
+ title: 'Building main process and preload bundles...',
121
+ task: async (_ctx, task) => {
122
+ const result = await this.build(task);
123
+ task.title = 'Built main process and preload bundles';
124
+ return result;
91
125
  },
92
- {
93
- title: 'Building renderer targets...',
94
- task: async (_ctx, subtask) => {
95
- const results = await this.buildRenderer(subtask);
96
- return results;
97
- },
126
+ rendererOptions: {
127
+ persistentOutput: true,
128
+ timer: { ...PRESET_TIMER },
98
129
  },
99
- ], { concurrent: true });
100
- }, 'Building production Vite bundles'),
101
- ],
102
- postStart: async (_config, child) => {
103
- d('hooking electron process exit');
104
- child.on('exit', () => {
105
- if (child.restarted)
106
- return;
107
- this.exitHandler({ cleanup: true, exit: true });
108
- });
109
- },
110
- resolveForgeConfig: this.resolveForgeConfig,
111
- packageAfterCopy: this.packageAfterCopy,
112
- };
130
+ },
131
+ ], { concurrent: false });
132
+ }, 'Preparing Vite bundles'),
133
+ ],
134
+ prePackage: [
135
+ namedHookWithTaskFn(async (task) => {
136
+ this.isProd = true;
137
+ await fs.remove(this.baseDir);
138
+ return task?.newListr([
139
+ {
140
+ title: 'Building main and preload targets...',
141
+ task: async (_ctx, subtask) => {
142
+ const results = await this.build(subtask);
143
+ return results;
144
+ },
145
+ },
146
+ {
147
+ title: 'Building renderer targets...',
148
+ task: async (_ctx, subtask) => {
149
+ const results = await this.buildRenderer(subtask);
150
+ return results;
151
+ },
152
+ },
153
+ ], { concurrent: true });
154
+ }, 'Building production Vite bundles'),
155
+ ],
156
+ postStart: async (_config, child) => {
157
+ d('hooking electron process exit');
158
+ child.on('exit', () => {
159
+ if (child.restarted)
160
+ return;
161
+ this.exitHandler({ cleanup: true, exit: true });
162
+ });
163
+ },
164
+ resolveForgeConfig: this.resolveForgeConfig,
165
+ packageAfterCopy: this.packageAfterCopy,
113
166
  };
114
- this.resolveForgeConfig = async (forgeConfig) => {
115
- forgeConfig.packagerConfig ??= {};
116
- if (forgeConfig.packagerConfig.ignore) {
117
- if (typeof forgeConfig.packagerConfig.ignore !== 'function') {
118
- console.error(chalk_1.default.yellow(`You have set packagerConfig.ignore, the Electron Forge Vite plugin normally sets this automatically.
167
+ };
168
+ resolveForgeConfig = async (forgeConfig) => {
169
+ forgeConfig.packagerConfig ??= {};
170
+ if (forgeConfig.packagerConfig.ignore) {
171
+ if (typeof forgeConfig.packagerConfig.ignore !== 'function') {
172
+ console.error(chalk.yellow(`You have set packagerConfig.ignore, the Electron Forge Vite plugin normally sets this automatically.
119
173
 
120
174
  Your packaged app may be larger than expected if you dont ignore everything other than the '.vite' folder`));
121
- }
122
- return forgeConfig;
123
175
  }
124
- forgeConfig.packagerConfig.ignore = (file) => {
125
- if (!file)
126
- return false;
127
- // `file` always starts with `/`
128
- // @see - https://github.com/electron/packager/blob/v18.1.3/src/copy-filter.ts#L89-L93
129
- // Collect the files built by Vite
130
- return !file.startsWith('/.vite');
131
- };
132
176
  return forgeConfig;
177
+ }
178
+ forgeConfig.packagerConfig.ignore = (file) => {
179
+ if (!file)
180
+ return false;
181
+ // `file` always starts with `/`
182
+ // @see - https://github.com/electron/packager/blob/v18.1.3/src/copy-filter.ts#L89-L93
183
+ // Collect the files built by Vite
184
+ return !file.startsWith('/.vite');
133
185
  };
134
- this.packageAfterCopy = async (_forgeConfig, buildPath) => {
135
- const pj = await fs_extra_1.default.readJson(node_path_1.default.resolve(this.projectDir, 'package.json'));
136
- if (!pj.main?.includes('.vite/')) {
137
- throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
186
+ return forgeConfig;
187
+ };
188
+ packageAfterCopy = async (_forgeConfig, buildPath) => {
189
+ const pj = await fs.readJson(path.resolve(this.projectDir, 'package.json'));
190
+ if (!pj.main?.includes('.vite/')) {
191
+ throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
138
192
  "main" entry point in "package.json" to be ".vite/*" (where the plugin outputs
139
193
  the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
140
- }
141
- if (pj.config) {
142
- delete pj.config.forge;
143
- }
144
- await fs_extra_1.default.writeJson(node_path_1.default.resolve(buildPath, 'package.json'), pj, {
145
- spaces: 2,
146
- });
147
- };
148
- // Main process, Preload scripts and Worker process, etc.
149
- this.build = async (task) => {
150
- const configs = await this.configGenerator.getBuildConfigs();
151
- /**
152
- * Checks if the result of the Vite build is a Rollup watcher.
153
- * This should happen iff we're running `electron-forge start`.
154
- */
155
- const isRollupWatcher = (x) => x &&
156
- typeof x === 'object' &&
157
- 'on' in x &&
158
- typeof x.on === 'function' &&
159
- 'close' in x &&
160
- typeof x.close === 'function';
161
- /**
162
- * Rollup's `input` can be a string, an array of strings, or an object.
163
- * This function converts the input to a string for the Forge CLI to consume.
164
- *
165
- * @see https://rollupjs.org/configuration-options/#input
166
- */
167
- const parseInputOptionToString = (input) => {
168
- if (typeof input === 'string') {
169
- return input;
170
- }
171
- else if (Array.isArray(input)) {
172
- return input.join(' ');
173
- }
174
- else {
175
- return Object.keys(input).join(' ');
176
- }
177
- };
178
- return task?.newListr(configs.map((userConfig) => {
179
- let target = '';
180
- const input = userConfig.build?.rollupOptions?.input;
181
- if (input) {
182
- target = parseInputOptionToString(input);
183
- }
184
- else if (typeof userConfig.build?.lib !== 'boolean' &&
185
- userConfig.build?.lib?.entry) {
186
- target = parseInputOptionToString(userConfig.build.lib.entry);
187
- }
188
- return {
189
- title: `Building ${chalk_1.default.green(target)} target`,
190
- task: async (_ctx, subtask) => {
191
- // We wrap this function in a Promise to ensure that the task is marked as completed
192
- // only after all bundles are done generated. This is done in the `closeBundle` Rollup hook
193
- // rather than when the `vite.build` promise resolves.
194
- await new Promise((resolve, reject) => {
195
- vite_1.default
196
- .build({
197
- // Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
198
- configFile: false,
199
- // We suppress Vite output and instead log lines using RollupWatcher events
200
- logLevel: 'silent',
201
- ...userConfig,
202
- plugins: [
203
- // This plugin controls the output of the first-time Vite build that happens.
204
- // `buildEnd` and `closeBundle` are Rollup output generation hooks.
205
- // See https://rollupjs.org/plugin-development/#output-generation-hooks
206
- {
207
- name: '@electron-forge/plugin-vite:build-done',
208
- buildEnd(err) {
209
- if (err instanceof Error) {
210
- d('buildEnd rollup hook called with error so build failed');
211
- reject(err);
212
- }
213
- },
214
- closeBundle() {
215
- d('no error in buildEnd and reached closeBundle so build succeeded');
216
- resolve();
217
- },
218
- },
219
- ...(userConfig.plugins ?? []),
220
- ],
221
- clearScreen: false,
222
- })
223
- .then((result) => {
224
- // When running `start` and enabling watch mode in Vite, the Rollup watcher
225
- // emits events for subsequent builds.
226
- if (isRollupWatcher(result)) {
227
- result.on('event', (event) => {
228
- if (event.code === 'ERROR' &&
229
- userConfig.logLevel !== 'silent') {
230
- console.error(`\n${chalk_1.default.dim(this.timeFormatter.format(new Date()))} ${event.error.message}`);
231
- }
232
- else if (event.code === 'BUNDLE_END' &&
233
- (!userConfig.logLevel || userConfig.logLevel === 'info')) {
234
- console.log(`${chalk_1.default.dim(this.timeFormatter.format(new Date()))} ${chalk_1.default.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk_1.default.green('target built')} ${chalk_1.default.dim(target)}`);
235
- }
236
- });
237
- this.watchers.push(result);
238
- }
239
- else {
240
- subtask.title = `Built target ${chalk_1.default.dim(target)}`;
241
- }
242
- return result;
243
- })
244
- .catch(reject);
245
- });
246
- },
247
- };
248
- }), {
249
- concurrent: this.config.concurrent ?? true,
250
- exitOnError: this.isProd,
251
- });
194
+ }
195
+ if (pj.config) {
196
+ delete pj.config.forge;
197
+ }
198
+ await fs.writeJson(path.resolve(buildPath, 'package.json'), pj, {
199
+ spaces: 2,
200
+ });
201
+ };
202
+ /**
203
+ * Serializable snapshot of the plugin config to pass to subprocess workers.
204
+ * We only include build[] and renderer[] — the worker needs the full renderer
205
+ * list for defines even when building a single main target.
206
+ */
207
+ get serializableConfig() {
208
+ return {
209
+ build: this.config.build,
210
+ renderer: this.config.renderer,
252
211
  };
253
- // Renderer process
254
- this.buildRenderer = async (task) => {
255
- const rendererConfigs = await this.configGenerator.getRendererConfig();
256
- return task?.newListr(rendererConfigs.map((userConfig) => ({
212
+ }
213
+ // Main process, Preload scripts and Worker process, etc.
214
+ build = async (task) => {
215
+ if (this.isProd) {
216
+ const targets = this.config.build
217
+ .map((spec, index) => ({ spec, index }))
218
+ .filter(({ spec }) => spec.config);
219
+ return task?.newListr(targets.map(({ spec, index }) => ({
220
+ title: `Building ${chalk.green(entryToDisplay(spec.entry))}`,
257
221
  task: async (_ctx, subtask) => {
258
- await vite_1.default.build({
259
- configFile: false,
260
- logLevel: 'error',
261
- ...userConfig,
262
- });
263
- subtask.title = `Built target ${chalk_1.default.dim(node_path_1.default.basename(userConfig.build?.outDir ?? ''))}`;
222
+ await spawnViteBuild(this.serializableConfig, 'build', index, this.projectDir);
223
+ subtask.title = `Built target ${chalk.dim(entryToDisplay(spec.entry))}`;
264
224
  },
265
225
  })), {
266
226
  concurrent: this.config.concurrent ?? true,
227
+ exitOnError: true,
267
228
  });
229
+ }
230
+ const configs = await this.configGenerator.getBuildConfigs();
231
+ /**
232
+ * Checks if the result of the Vite build is a Rollup watcher.
233
+ * This should happen iff we're running `electron-forge start`.
234
+ */
235
+ const isRollupWatcher = (x) => x &&
236
+ typeof x === 'object' &&
237
+ 'on' in x &&
238
+ typeof x.on === 'function' &&
239
+ 'close' in x &&
240
+ typeof x.close === 'function';
241
+ /**
242
+ * Rollup's `input` can be a string, an array of strings, or an object.
243
+ * This function converts the input to a string for the Forge CLI to consume.
244
+ *
245
+ * @see https://rollupjs.org/configuration-options/#input
246
+ */
247
+ const parseInputOptionToString = (input) => {
248
+ if (typeof input === 'string') {
249
+ return input;
250
+ }
251
+ else if (Array.isArray(input)) {
252
+ return input.join(' ');
253
+ }
254
+ else {
255
+ return Object.keys(input).join(' ');
256
+ }
268
257
  };
269
- this.launchRendererDevServers = async (task) => {
270
- const rendererConfigs = await this.configGenerator.getRendererConfig();
271
- return task?.newListr(rendererConfigs.map((userConfig) => ({
272
- title: `Target ${chalk_1.default.cyan(node_path_1.default.basename(userConfig.build?.outDir ?? ''))}`,
258
+ return task?.newListr(configs.map((userConfig) => {
259
+ let target = '';
260
+ const input = userConfig.build?.rollupOptions?.input;
261
+ if (input) {
262
+ target = parseInputOptionToString(input);
263
+ }
264
+ else if (typeof userConfig.build?.lib !== 'boolean' &&
265
+ userConfig.build?.lib?.entry) {
266
+ target = parseInputOptionToString(userConfig.build.lib.entry);
267
+ }
268
+ return {
269
+ title: `Building ${chalk.green(target)} target`,
273
270
  task: async (_ctx, subtask) => {
274
- const viteDevServer = await vite_1.default.createServer({
275
- configFile: false,
276
- ...userConfig,
271
+ // We wrap this function in a Promise to ensure that the task is marked as completed
272
+ // only after all bundles are done generated. This is done in the `closeBundle` Rollup hook
273
+ // rather than when the `vite.build` promise resolves.
274
+ await new Promise((resolve, reject) => {
275
+ vite
276
+ .build({
277
+ // Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
278
+ configFile: false,
279
+ // We suppress Vite output and instead log lines using RollupWatcher events
280
+ logLevel: 'silent',
281
+ ...userConfig,
282
+ plugins: [
283
+ // This plugin controls the output of the first-time Vite build that happens.
284
+ // `buildEnd` and `closeBundle` are Rollup output generation hooks.
285
+ // See https://rollupjs.org/plugin-development/#output-generation-hooks
286
+ {
287
+ name: '@electron-forge/plugin-vite:build-done',
288
+ buildEnd(err) {
289
+ if (err instanceof Error) {
290
+ d('buildEnd rollup hook called with error so build failed');
291
+ reject(err);
292
+ }
293
+ },
294
+ closeBundle() {
295
+ d('no error in buildEnd and reached closeBundle so build succeeded');
296
+ resolve();
297
+ },
298
+ },
299
+ ...(userConfig.plugins ?? []),
300
+ ],
301
+ clearScreen: false,
302
+ })
303
+ .then((result) => {
304
+ // When running `start` and enabling watch mode in Vite, the Rollup watcher
305
+ // emits events for subsequent builds.
306
+ if (isRollupWatcher(result)) {
307
+ result.on('event', (event) => {
308
+ if (event.code === 'ERROR' &&
309
+ userConfig.logLevel !== 'silent') {
310
+ console.error(`\n${chalk.dim(this.timeFormatter.format(new Date()))} ${event.error.message}`);
311
+ }
312
+ else if (event.code === 'BUNDLE_END' &&
313
+ (!userConfig.logLevel || userConfig.logLevel === 'info')) {
314
+ console.log(`${chalk.dim(this.timeFormatter.format(new Date()))} ${chalk.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk.green('target built')} ${chalk.dim(target)}`);
315
+ }
316
+ });
317
+ this.watchers.push(result);
318
+ }
319
+ else {
320
+ subtask.title = `Built target ${chalk.dim(target)}`;
321
+ }
322
+ return result;
323
+ })
324
+ .catch(reject);
277
325
  });
278
- await viteDevServer.listen();
279
- const urls = getServerURLs(viteDevServer.resolvedUrls);
280
- subtask.output = urls;
281
- this.servers.push(viteDevServer);
282
- if (viteDevServer.httpServer) {
283
- // Make sure that `getDefines` in VitePlugin.ts gets the correct `server.port`. (#3198)
284
- const addressInfo = viteDevServer.httpServer.address();
285
- const isAddressInfo = (x) => typeof x === 'object' ? typeof x?.address === 'string' : false;
286
- if (isAddressInfo(addressInfo)) {
287
- userConfig.server ??= {};
288
- userConfig.server.port = addressInfo.port;
289
- }
290
- }
291
326
  },
292
- rendererOptions: {
293
- persistentOutput: true,
327
+ };
328
+ }), {
329
+ concurrent: this.config.concurrent ?? true,
330
+ exitOnError: this.isProd,
331
+ });
332
+ };
333
+ // Renderer process
334
+ buildRenderer = async (task) => {
335
+ if (this.isProd) {
336
+ const targets = this.config.renderer
337
+ .map((spec, index) => ({ spec, index }))
338
+ .filter(({ spec }) => spec.config);
339
+ return task?.newListr(targets.map(({ spec, index }) => ({
340
+ title: `Building ${chalk.green(spec.name)}`,
341
+ task: async (_ctx, subtask) => {
342
+ await spawnViteBuild(this.serializableConfig, 'renderer', index, this.projectDir);
343
+ subtask.title = `Built target ${chalk.dim(spec.name)}`;
294
344
  },
295
- })));
296
- };
297
- this.exitHandler = (options, err) => {
298
- d('handling process exit with:', options);
299
- if (options.cleanup) {
300
- for (const watcher of this.watchers) {
301
- d('cleaning vite watcher');
302
- watcher.close();
303
- }
304
- this.watchers = [];
305
- for (const server of this.servers) {
306
- d('cleaning http server');
307
- server.close();
345
+ })), {
346
+ concurrent: this.config.concurrent ?? true,
347
+ exitOnError: true,
348
+ });
349
+ }
350
+ const rendererConfigs = await this.configGenerator.getRendererConfig();
351
+ return task?.newListr(rendererConfigs.map((userConfig) => ({
352
+ task: async (_ctx, subtask) => {
353
+ await vite.build({
354
+ configFile: false,
355
+ logLevel: 'error',
356
+ ...userConfig,
357
+ });
358
+ subtask.title = `Built target ${chalk.dim(path.basename(userConfig.build?.outDir ?? ''))}`;
359
+ },
360
+ })), {
361
+ concurrent: this.config.concurrent ?? true,
362
+ });
363
+ };
364
+ launchRendererDevServers = async (task) => {
365
+ const rendererConfigs = await this.configGenerator.getRendererConfig();
366
+ return task?.newListr(rendererConfigs.map((userConfig) => ({
367
+ title: `Target ${chalk.cyan(path.basename(userConfig.build?.outDir ?? ''))}`,
368
+ task: async (_ctx, subtask) => {
369
+ const viteDevServer = await vite.createServer({
370
+ configFile: false,
371
+ ...userConfig,
372
+ });
373
+ await viteDevServer.listen();
374
+ const urls = getServerURLs(viteDevServer.resolvedUrls);
375
+ subtask.output = urls;
376
+ this.servers.push(viteDevServer);
377
+ if (viteDevServer.httpServer) {
378
+ // Make sure that `getDefines` in VitePlugin.ts gets the correct `server.port`. (#3198)
379
+ const addressInfo = viteDevServer.httpServer.address();
380
+ const isAddressInfo = (x) => typeof x === 'object' ? typeof x?.address === 'string' : false;
381
+ if (isAddressInfo(addressInfo)) {
382
+ userConfig.server ??= {};
383
+ userConfig.server.port = addressInfo.port;
384
+ }
308
385
  }
309
- this.servers = [];
386
+ },
387
+ rendererOptions: {
388
+ persistentOutput: true,
389
+ },
390
+ })));
391
+ };
392
+ exitHandler = (options, err) => {
393
+ d('handling process exit with:', options);
394
+ if (options.cleanup) {
395
+ for (const watcher of this.watchers) {
396
+ d('cleaning vite watcher');
397
+ watcher.close();
310
398
  }
311
- if (err)
312
- console.error(err.stack);
313
- if (options.exit)
314
- process.exit(0);
315
- };
316
- }
317
- setDirectories(dir) {
318
- this.projectDir = dir;
319
- this.baseDir = node_path_1.default.join(dir, '.vite');
320
- }
321
- get configGenerator() {
322
- return (this.configGeneratorCache ??= new ViteConfig_1.default(this.config, this.projectDir, this.isProd));
323
- }
399
+ this.watchers = [];
400
+ for (const server of this.servers) {
401
+ d('cleaning http server');
402
+ server.close();
403
+ }
404
+ this.servers = [];
405
+ }
406
+ if (err)
407
+ console.error(err.stack);
408
+ if (options.exit)
409
+ process.exit(0);
410
+ };
324
411
  }
325
- exports.VitePlugin = VitePlugin;
326
- VitePlugin.alreadyStarted = false;
327
- exports.default = VitePlugin;
328
412
  /**
329
413
  * Get a string for Vite's printServerUrls function without actually printing it.
330
414
  * Allows us to set `task.output` to that value without having to pass a custom logger into Vite.
@@ -332,19 +416,20 @@ exports.default = VitePlugin;
332
416
  */
333
417
  function getServerURLs(urls) {
334
418
  let output = '';
335
- const colorUrl = (url) => chalk_1.default.cyan(url.replace(/:(\d+)\//, (_, port) => `:${chalk_1.default.bold(port)}/`));
419
+ const colorUrl = (url) => chalk.cyan(url.replace(/:(\d+)\//, (_, port) => `:${chalk.bold(port)}/`));
336
420
  for (const url of urls.local) {
337
- output += ` ${chalk_1.default.green('➜')} ${chalk_1.default.bold('Local')}: ${colorUrl(url)}`;
421
+ output += ` ${chalk.green('➜')} ${chalk.bold('Local')}: ${colorUrl(url)}`;
338
422
  }
339
423
  for (const url of urls.network) {
340
- output += ` \n${chalk_1.default.green('➜')} ${chalk_1.default.bold('Network')}: ${colorUrl(url)}`;
424
+ output += ` \n${chalk.green('➜')} ${chalk.bold('Network')}: ${colorUrl(url)}`;
341
425
  }
342
426
  if (urls.network.length === 0) {
343
427
  output +=
344
- chalk_1.default.dim(` \n${chalk_1.default.green('➜')} ${chalk_1.default.bold('Network')}: use `) +
345
- chalk_1.default.bold('--host') +
346
- chalk_1.default.dim(' to expose');
428
+ chalk.dim(` \n${chalk.green('➜')} ${chalk.bold('Network')}: use `) +
429
+ chalk.bold('--host') +
430
+ chalk.dim(' to expose');
347
431
  }
348
432
  return output;
349
433
  }
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhFQUE4RTtBQUM5RSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztBQUU3QywwREFBNkI7QUFFN0IsNkRBQThFO0FBQzlFLGtEQUEwQjtBQUMxQixrREFBMEI7QUFDMUIsd0RBQTBCO0FBQzFCLG1DQUE2QztBQUM3QyxnREFBdUM7QUFFdkMsOERBQStDO0FBVS9DLE1BQU0sQ0FBQyxHQUFHLElBQUEsZUFBSyxFQUFDLDRCQUE0QixDQUFDLENBQUM7QUFFOUMsTUFBcUIsVUFBVyxTQUFRLHdCQUE0QjtJQUFwRTs7UUFHUyxTQUFJLEdBQUcsTUFBTSxDQUFDO1FBRWIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQWNmLGFBQVEsR0FBZ0MsRUFBRSxDQUFDO1FBRTNDLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBRTNDLGdEQUFnRDtRQUN4QyxrQkFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7WUFDekQsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDLENBQUM7UUFFSCxTQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQVEsRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBMEIsRUFBRSxD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
434
+ export { VitePlugin };
435
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxtQkFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQVdsRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNuQixzQkFBc0IsQ0FDdkIsQ0FBQztBQUVGLFNBQVMsY0FBYyxDQUNyQixZQUEwRCxFQUMxRCxJQUEwQixFQUMxQixLQUFhLEVBQ2IsVUFBa0I7SUFFbEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDNUQsR0FBRyxFQUFFLFVBQVU7WUFDZixHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztnQkFDZCxzQkFBc0IsRUFBRSxVQUFVO2dCQUNsQyxlQUFlLEVBQUUsSUFBSTtnQkFDckIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDL0IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7YUFDaEQ7WUFDRCxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztTQUNsQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDakMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTTtvQkFDbkIsQ0FBQyxDQUFDLG9CQUFvQixNQUFNLEVBQUU7b0JBQzlCLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FDSixJQUFJLEtBQUssQ0FDUCx5QkFBeUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ2pFLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQThCO0lBQ3BELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBTyxVQUFXLFNBQVEsVUFBNEI7SUFDMUQsTUFBTSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFFL0IsSUFBSSxHQUFHLE1BQU0sQ0FBQztJQUViLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFdkI7O09BRUc7SUFDSyxVQUFVLENBQVU7SUFFNUI7O09BRUc7SUFDSyxPQUFPLENBQVU7SUFFakIsb0JBQW9CLENBQXVCO0lBRTNDLFFBQVEsR0FBZ0MsRUFBRSxDQUFDO0lBRTNDLE9BQU8sR0FBeUIsRUFBRSxDQUFDO0lBRTNDLGdEQUFnRDtJQUN4QyxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtRQUN6RCxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE1BQU0sRUFBRSxTQUFTO0tBQ2xCLENBQUMsQ0FBQztJQUVILElBQUksR0FBRyxDQUFDLEdBQVcsRUFBUSxFQUFFO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQTBCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFSyxjQUFjLENBQUMsR0FBVztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFZLGVBQWU7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLG1CQUFtQixDQUMzRCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxHQUFHLEdBQXNCLEVBQUU7UUFDakMsT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDUixtQkFBbUIsQ0FBYSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQzdDLElBQUksVUFBVSxDQUFDLGNBQWM7d0JBQUUsT0FBTztvQkFDdEMsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBRWpDLENBQUMsQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ3pELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRTlCLE9BQU8sSUFBSSxFQUFFLFFBQVEsQ0FDbkI7d0JBQ0U7NEJBQ0UsS0FBSyxFQUNILHlEQUF5RDs0QkFDM0QsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0NBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUN6RCxJQUFJLENBQUMsS0FBSztvQ0FDUixxREFBcUQsQ0FBQztnQ0FDeEQsT0FBTyxNQUFNLENBQUM7NEJBQ2hCLENBQUM7NEJBQ0QsZUFBZSxFQUFFO2dDQUNmLGdCQUFnQixFQUFFLElBQUk7Z0NBQ3RCLEtBQUssRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFOzZCQUMzQjt5QkFDRjt3QkFDRCwrR0FBK0c7d0JBQy9HOzRCQUNFLEtBQUssRUFBRSw4Q0FBOEM7NEJBQ3JELElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dDQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsd0NBQXdDLENBQUM7Z0NBQ3RELE9BQU8sTUFBTSxDQUFDOzRCQUNoQixDQUFDOzRCQUNELGVBQWUsRUFBRTtnQ0FDZixnQkFBZ0IsRUFBRSxJQUFJO2dDQUN0QixLQUFLLEVBQUUsRUFBRSxHQUFHLFlBQVksRUFBRTs2QkFDM0I7eUJBQ0Y7cUJBQ0YsRUFDRCxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FDdEIsQ0FBQztnQkFDSixDQUFDLEVBQUUsd0JBQXdCLENBQUM7YUFDN0I7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsbUJBQW1CLENBQWUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDbkIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFOUIsT0FBTyxJQUFJLEVBQUUsUUFBUSxDQUNuQjt3QkFDRTs0QkFDRSxLQUFLLEVBQUUsc0NBQXNDOzRCQUM3QyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtnQ0FDNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUMxQyxPQUFPLE9BQU8sQ0FBQzs0QkFDakIsQ0FBQzt5QkFDRjt3QkFDRDs0QkFDRSxLQUFLLEVBQUUsOEJBQThCOzRCQUNyQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtnQ0FDNUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dDQUNsRCxPQUFPLE9BQU8sQ0FBQzs0QkFDakIsQ0FBQzt5QkFDRjtxQkFDRixFQUNELEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUNyQixDQUFDO2dCQUNKLENBQUMsRUFBRSxrQ0FBa0MsQ0FBQzthQUN2QztZQUNELFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNsQyxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO29CQUNwQixJQUFJLEtBQUssQ0FBQyxTQUFTO3dCQUFFLE9BQU87b0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDeEMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLGtCQUFrQixHQUFHLEtBQUssRUFDeEIsV0FBZ0MsRUFDRixFQUFFO1FBQ2hDLFdBQVcsQ0FBQyxjQUFjLEtBQUssRUFBRSxDQUFDO1FBRWxDLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxJQUFJLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzVELE9BQU8sQ0FBQyxLQUFLLENBQ1gsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7MEdBRW1GLENBQUMsQ0FDbEcsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsSUFBSTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUV4QixnQ0FBZ0M7WUFDaEMsc0ZBQXNGO1lBRXRGLGtDQUFrQztZQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7UUFDRixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixnQkFBZ0IsR0FBRyxLQUFLLEVBQ3RCLFlBQWlDLEVBQ2pDLFNBQWlCLEVBQ0YsRUFBRTtRQUNqQixNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQzs7dUNBRWlCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQzlELE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILElBQVksa0JBQWtCO1FBSTVCLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsS0FBSyxHQUFHLEtBQUssRUFBRSxJQUEyQixFQUF5QixFQUFFO1FBQ25FLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztpQkFDOUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUN2QyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsT0FBTyxJQUFJLEVBQUUsUUFBUSxDQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxZQUFZLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM1RCxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDNUIsTUFBTSxjQUFjLENBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO29CQUNGLE9BQU8sQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFFLENBQUM7YUFDRixDQUFDLENBQUMsRUFDSDtnQkFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSTtnQkFDMUMsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3RDs7O1dBR0c7UUFDSCxNQUFNLGVBQWUsR0FBRyxDQUN0QixDQUc4QixFQUNFLEVBQUUsQ0FDbEMsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFDckIsSUFBSSxJQUFJLENBQUM7WUFDVCxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVTtZQUMxQixPQUFPLElBQUksQ0FBQztZQUNaLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7UUFFaEM7Ozs7O1dBS0c7UUFDSCxNQUFNLHdCQUF3QixHQUFHLENBQUMsS0FBOEIsRUFBRSxFQUFFO1lBQ2xFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPLElBQUksRUFBRSxRQUFRLENBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN6QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDO1lBQ3JELElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLENBQUM7aUJBQU0sSUFDTCxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLFNBQVM7Z0JBQzFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFDNUIsQ0FBQztnQkFDRCxNQUFNLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUVELE9BQU87Z0JBQ0wsS0FBSyxFQUFFLFlBQVksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFDL0MsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQzVCLG9GQUFvRjtvQkFDcEYsMkZBQTJGO29CQUMzRixzREFBc0Q7b0JBQ3RELE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7d0JBQzFDLElBQUk7NkJBQ0QsS0FBSyxDQUFDOzRCQUNMLHNHQUFzRzs0QkFDdEcsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLDJFQUEyRTs0QkFDM0UsUUFBUSxFQUFFLFFBQVE7NEJBQ2xCLEdBQUcsVUFBVTs0QkFDYixPQUFPLEVBQUU7Z0NBQ1AsNkVBQTZFO2dDQUM3RSxtRUFBbUU7Z0NBQ25FLHVFQUF1RTtnQ0FDdkU7b0NBQ0UsSUFBSSxFQUFFLHdDQUF3QztvQ0FDOUMsUUFBUSxDQUFDLEdBQUc7d0NBQ1YsSUFBSSxHQUFHLFlBQVksS0FBSyxFQUFFLENBQUM7NENBQ3pCLENBQUMsQ0FDQyx3REFBd0QsQ0FDekQsQ0FBQzs0Q0FDRixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7d0NBQ2QsQ0FBQztvQ0FDSCxDQUFDO29DQUNELFdBQVc7d0NBQ1QsQ0FBQyxDQUNDLGlFQUFpRSxDQUNsRSxDQUFDO3dDQUNGLE9BQU8sRUFBRSxDQUFDO29DQUNaLENBQUM7aUNBQ0Y7Z0NBQ0QsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDOzZCQUM5Qjs0QkFDRCxXQUFXLEVBQUUsS0FBSzt5QkFDbkIsQ0FBQzs2QkFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs0QkFDZiwyRUFBMkU7NEJBQzNFLHNDQUFzQzs0QkFDdEMsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQ0FDNUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQ0FDM0IsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87d0NBQ3RCLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUNoQyxDQUFDO3dDQUNELE9BQU8sQ0FBQyxLQUFLLENBQ1gsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQy9FLENBQUM7b0NBQ0osQ0FBQzt5Q0FBTSxJQUNMLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWTt3Q0FDM0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFDeEQsQ0FBQzt3Q0FDRCxPQUFPLENBQUMsR0FBRyxDQUNULEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQ3BILGNBQWMsQ0FDZixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDekIsQ0FBQztvQ0FDSixDQUFDO2dDQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUM3QixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sT0FBTyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDOzRCQUN0RCxDQUFDOzRCQUNELE9BQU8sTUFBTSxDQUFDO3dCQUNoQixDQUFDLENBQUM7NkJBQ0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGO1lBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUk7WUFDMUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3pCLENBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLG1CQUFtQjtJQUNuQixhQUFhLEdBQUcsS0FBSyxFQUFFLElBQTJCLEVBQUUsRUFBRTtRQUNwRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7aUJBQ2pDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDdkMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxFQUFFLFFBQVEsQ0FDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLEVBQUUsWUFBWSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDM0MsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQzVCLE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLFVBQVUsRUFDVixLQUFLLEVBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztvQkFDRixPQUFPLENBQUMsS0FBSyxHQUFHLGdCQUFnQixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxDQUFDO2FBQ0YsQ0FBQyxDQUFDLEVBQ0g7Z0JBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQzFDLFdBQVcsRUFBRSxJQUFJO2FBQ2xCLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2RSxPQUFPLElBQUksRUFBRSxRQUFRLENBQ25CLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDZixVQUFVLEVBQUUsS0FBSztvQkFDakIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLEdBQUcsVUFBVTtpQkFDZCxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3RixDQUFDO1NBQ0YsQ0FBQyxDQUFDLEVBQ0g7WUFDRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSTtTQUMzQyxDQUNGLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRix3QkFBd0IsR0FBRyxLQUFLLEVBQUUsSUFBMkIsRUFBRSxFQUFFO1FBQy9ELE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sSUFBSSxFQUFFLFFBQVEsQ0FDbkIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQyxLQUFLLEVBQUUsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtZQUM1RSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUM1QyxVQUFVLEVBQUUsS0FBSztvQkFDakIsR0FBRyxVQUFVO2lCQUNkLENBQUMsQ0FBQztnQkFFSCxNQUFNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxZQUFhLENBQUMsQ0FBQztnQkFDeEQsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBRXRCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUVqQyxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDN0IsdUZBQXVGO29CQUN2RixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN2RCxNQUFNLGFBQWEsR0FBRyxDQUNwQixDQUE4QixFQUNaLEVBQUUsQ0FDcEIsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBRWpFLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7d0JBQy9CLFVBQVUsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO3dCQUN6QixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO29CQUM1QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsZUFBZSxFQUFFO2dCQUNmLGdCQUFnQixFQUFFLElBQUk7YUFDdkI7U0FDRixDQUFDLENBQUMsQ0FDSixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsV0FBVyxHQUFHLENBQ1osT0FBOEMsRUFDOUMsR0FBVyxFQUNMLEVBQUU7UUFDUixDQUFDLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUMzQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEIsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBRW5CLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxHQUFHO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxPQUFPLENBQUMsSUFBSTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDOztBQUdKOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUE2QjtJQUNsRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVFLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2xGLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU07WUFDSixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNwQixLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDIn0=