@gnwebsoft/ui 3.0.9 → 4.0.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.
Files changed (54) hide show
  1. package/dist/chunk-246MYJX6.js +479 -0
  2. package/dist/chunk-CE4CSA36.cjs +2262 -0
  3. package/dist/chunk-DJSMLHFO.js +140 -0
  4. package/dist/chunk-GHW77WIM.cjs +72 -0
  5. package/dist/chunk-L3QQX3BK.js +1596 -0
  6. package/dist/chunk-MULSVYFT.js +72 -0
  7. package/dist/chunk-MVPLBJRK.cjs +1 -1
  8. package/dist/chunk-NC3JINIM.cjs +1596 -0
  9. package/dist/chunk-R45OPW5A.js +2262 -0
  10. package/dist/chunk-UEBN47RB.cjs +140 -0
  11. package/dist/chunk-YUVXLOSA.cjs +479 -0
  12. package/dist/core/index.cjs +121 -0
  13. package/dist/core/index.js +121 -0
  14. package/dist/hooks/index.cjs +3 -3
  15. package/dist/hooks/index.js +1 -1
  16. package/dist/index.cjs +81 -7
  17. package/dist/index.js +126 -52
  18. package/dist/types/index.cjs +3 -3
  19. package/dist/types/index.js +1 -1
  20. package/dist/utils/index.cjs +3 -25
  21. package/dist/utils/index.js +3 -25
  22. package/dist/wrappers/index.cjs +4 -4
  23. package/dist/wrappers/index.js +16 -16
  24. package/package.json +22 -17
  25. package/dist/AsyncSelectPayload-B9-6l33R.d.cts +0 -10
  26. package/dist/AsyncSelectPayload-B9-6l33R.d.ts +0 -10
  27. package/dist/chunk-3OPVOWQK.js +0 -140
  28. package/dist/chunk-AEOF2TUF.cjs +0 -2273
  29. package/dist/chunk-ALHC7RLK.js +0 -575
  30. package/dist/chunk-BRRLB22L.js +0 -72
  31. package/dist/chunk-CHZU4PZB.js +0 -2273
  32. package/dist/chunk-EBRUE2WR.cjs +0 -493
  33. package/dist/chunk-HEHPKM4B.cjs +0 -140
  34. package/dist/chunk-K2EJ4YKO.cjs +0 -72
  35. package/dist/chunk-U6SDYCWF.js +0 -493
  36. package/dist/chunk-XY4U6A77.cjs +0 -575
  37. package/dist/components/index.cjs +0 -25
  38. package/dist/components/index.d.cts +0 -752
  39. package/dist/components/index.d.ts +0 -752
  40. package/dist/components/index.js +0 -25
  41. package/dist/enhanced-CDTkKUlj.d.ts +0 -134
  42. package/dist/enhanced-ZQoS03Cd.d.cts +0 -134
  43. package/dist/events-BcHVCLBz.d.cts +0 -77
  44. package/dist/events-BcHVCLBz.d.ts +0 -77
  45. package/dist/hooks/index.d.cts +0 -96
  46. package/dist/hooks/index.d.ts +0 -96
  47. package/dist/index.d.cts +0 -16
  48. package/dist/index.d.ts +0 -16
  49. package/dist/types/index.d.cts +0 -820
  50. package/dist/types/index.d.ts +0 -820
  51. package/dist/utils/index.d.cts +0 -683
  52. package/dist/utils/index.d.ts +0 -683
  53. package/dist/wrappers/index.d.cts +0 -1753
  54. package/dist/wrappers/index.d.ts +0 -1753
@@ -0,0 +1,1596 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;// src/core/api/CorrelationIdGenerator.ts
2
+ var CorrelationIdGenerator = class {
3
+ static generateUUID() {
4
+ if (typeof crypto !== "undefined" && crypto.randomUUID) {
5
+ return crypto.randomUUID();
6
+ }
7
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
8
+ const r = Math.random() * 16 | 0;
9
+ const v = c === "x" ? r : r & 3 | 8;
10
+ return v.toString(16);
11
+ });
12
+ }
13
+ static generate(prefix) {
14
+ const uuid = this.generateUUID();
15
+ return prefix ? `${prefix}-${uuid}` : uuid;
16
+ }
17
+ };
18
+
19
+ // src/core/api/RequestManager.ts
20
+ var RequestManager = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
21
+ __init() {this.activeRequests = /* @__PURE__ */ new Map()}
22
+ __init2() {this.correlationMap = /* @__PURE__ */ new Map()}
23
+ add(key, controller, correlationId) {
24
+ this.cancel(key);
25
+ this.activeRequests.set(key, controller);
26
+ this.correlationMap.set(key, correlationId);
27
+ }
28
+ remove(key) {
29
+ this.activeRequests.delete(key);
30
+ this.correlationMap.delete(key);
31
+ }
32
+ cancel(key) {
33
+ const controller = this.activeRequests.get(key);
34
+ if (controller) {
35
+ controller.abort();
36
+ this.activeRequests.delete(key);
37
+ this.correlationMap.delete(key);
38
+ }
39
+ }
40
+ cancelAll() {
41
+ this.activeRequests.forEach((controller) => controller.abort());
42
+ this.activeRequests.clear();
43
+ this.correlationMap.clear();
44
+ }
45
+ has(key) {
46
+ return this.activeRequests.has(key);
47
+ }
48
+ getCorrelationId(key) {
49
+ return this.correlationMap.get(key);
50
+ }
51
+ }, _class);
52
+
53
+ // src/core/api/ApiClient.ts
54
+ var ApiClient = (_class2 = class {
55
+
56
+
57
+ __init3() {this.requestInterceptors = []}
58
+ __init4() {this.responseInterceptors = []}
59
+ __init5() {this.errorInterceptors = []}
60
+ __init6() {this.authToken = null}
61
+ __init7() {this.refreshTokenPromise = null}
62
+ __init8() {this.requestManager = new RequestManager()}
63
+ __init9() {this.correlationIdPrefix = "api"}
64
+ __init10() {this.includeCorrelationId = true}
65
+ constructor(baseURL = "", defaultTimeout = 3e4) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);_class2.prototype.__init8.call(this);_class2.prototype.__init9.call(this);_class2.prototype.__init10.call(this);
66
+ this.baseURL = baseURL;
67
+ this.defaultTimeout = defaultTimeout;
68
+ }
69
+ // Configuration methods
70
+ setCorrelationIdPrefix(prefix) {
71
+ this.correlationIdPrefix = prefix;
72
+ }
73
+ setIncludeCorrelationId(include) {
74
+ this.includeCorrelationId = include;
75
+ }
76
+ // Interceptor management
77
+ addRequestInterceptor(interceptor) {
78
+ this.requestInterceptors.push(interceptor);
79
+ return () => {
80
+ const index = this.requestInterceptors.indexOf(interceptor);
81
+ if (index > -1) this.requestInterceptors.splice(index, 1);
82
+ };
83
+ }
84
+ addResponseInterceptor(interceptor) {
85
+ this.responseInterceptors.push(interceptor);
86
+ return () => {
87
+ const index = this.responseInterceptors.indexOf(interceptor);
88
+ if (index > -1) this.responseInterceptors.splice(index, 1);
89
+ };
90
+ }
91
+ addErrorInterceptor(interceptor) {
92
+ this.errorInterceptors.push(interceptor);
93
+ return () => {
94
+ const index = this.errorInterceptors.indexOf(interceptor);
95
+ if (index > -1) this.errorInterceptors.splice(index, 1);
96
+ };
97
+ }
98
+ // Auth token management
99
+ setAuthToken(token) {
100
+ this.authToken = token;
101
+ }
102
+ getAuthToken() {
103
+ return this.authToken;
104
+ }
105
+ // Request cancellation
106
+ cancelRequest(key) {
107
+ this.requestManager.cancel(key);
108
+ }
109
+ cancelAllRequests() {
110
+ this.requestManager.cancelAll();
111
+ }
112
+ // URL and params handling
113
+ buildURL(endpoint, params) {
114
+ const url = new URL(endpoint, this.baseURL);
115
+ if (params) {
116
+ Object.keys(params).forEach((key) => {
117
+ const value = params[key];
118
+ if (value !== void 0 && value !== null) {
119
+ if (Array.isArray(value)) {
120
+ value.forEach((v) => url.searchParams.append(key, String(v)));
121
+ } else {
122
+ url.searchParams.append(key, String(value));
123
+ }
124
+ }
125
+ });
126
+ }
127
+ return url.toString();
128
+ }
129
+ // Apply request interceptors
130
+ async applyRequestInterceptors(config) {
131
+ let modifiedConfig = { ...config };
132
+ for (const interceptor of this.requestInterceptors) {
133
+ modifiedConfig = await interceptor(modifiedConfig);
134
+ }
135
+ return modifiedConfig;
136
+ }
137
+ // Apply response interceptors
138
+ async applyResponseInterceptors(response) {
139
+ let modifiedResponse = response;
140
+ for (const interceptor of this.responseInterceptors) {
141
+ modifiedResponse = await interceptor(modifiedResponse);
142
+ }
143
+ return modifiedResponse;
144
+ }
145
+ // Apply error interceptors
146
+ async applyErrorInterceptors(error) {
147
+ let modifiedError = error;
148
+ for (const interceptor of this.errorInterceptors) {
149
+ try {
150
+ modifiedError = await interceptor(modifiedError);
151
+ } catch (e) {
152
+ modifiedError = e;
153
+ }
154
+ }
155
+ throw modifiedError;
156
+ }
157
+ // Create combined abort signal
158
+ createCombinedSignal(signals) {
159
+ const controller = new AbortController();
160
+ for (const signal of signals) {
161
+ if (signal) {
162
+ if (signal.aborted) {
163
+ controller.abort(signal.reason);
164
+ break;
165
+ }
166
+ signal.addEventListener(
167
+ "abort",
168
+ () => {
169
+ controller.abort(signal.reason);
170
+ },
171
+ { once: true }
172
+ );
173
+ }
174
+ }
175
+ return controller;
176
+ }
177
+ // Timeout handling with AbortSignal
178
+ createTimeoutSignal(timeout) {
179
+ const controller = new AbortController();
180
+ const timeoutId = setTimeout(() => {
181
+ controller.abort(`Request timeout after ${timeout}ms`);
182
+ }, timeout);
183
+ controller.signal.addEventListener(
184
+ "abort",
185
+ () => {
186
+ clearTimeout(timeoutId);
187
+ },
188
+ { once: true }
189
+ );
190
+ return controller;
191
+ }
192
+ // Retry logic with abort support
193
+ async retryRequest(fn, retries, delay, signal) {
194
+ try {
195
+ if (_optionalChain([signal, 'optionalAccess', _ => _.aborted])) {
196
+ throw new Error(signal.reason || "Request aborted");
197
+ }
198
+ return await fn();
199
+ } catch (error) {
200
+ if (error.name === "AbortError" || _optionalChain([signal, 'optionalAccess', _2 => _2.aborted])) {
201
+ throw error;
202
+ }
203
+ if (error.type === "validation_error" || error.status === 400) {
204
+ throw error;
205
+ }
206
+ if (retries === 0) throw error;
207
+ await new Promise((resolve, reject) => {
208
+ const timeoutId = setTimeout(resolve, delay);
209
+ if (signal) {
210
+ signal.addEventListener(
211
+ "abort",
212
+ () => {
213
+ clearTimeout(timeoutId);
214
+ reject(new Error(signal.reason || "Request aborted"));
215
+ },
216
+ { once: true }
217
+ );
218
+ }
219
+ });
220
+ return this.retryRequest(fn, retries - 1, delay * 2, signal);
221
+ }
222
+ }
223
+ // Main request method implementation
224
+ async request(endpoint, config = {}) {
225
+ const correlationId = config.correlationId || (!config.skipCorrelationId && this.includeCorrelationId ? CorrelationIdGenerator.generate(this.correlationIdPrefix) : void 0);
226
+ const requestKey = `${config.method || "GET"}_${endpoint}_${Date.now()}`;
227
+ const masterController = new AbortController();
228
+ try {
229
+ const signals = [
230
+ config.signal,
231
+ _optionalChain([config, 'access', _3 => _3.cancelToken, 'optionalAccess', _4 => _4.signal]),
232
+ masterController.signal
233
+ ];
234
+ const timeout = config.timeout || this.defaultTimeout;
235
+ const timeoutController = this.createTimeoutSignal(timeout);
236
+ signals.push(timeoutController.signal);
237
+ const combinedController = this.createCombinedSignal(signals);
238
+ if (correlationId) {
239
+ this.requestManager.add(requestKey, masterController, correlationId);
240
+ }
241
+ const finalConfig = await this.applyRequestInterceptors({
242
+ ...config,
243
+ signal: combinedController.signal,
244
+ correlationId
245
+ });
246
+ const url = this.buildURL(endpoint, finalConfig.params);
247
+ const headers = new Headers(finalConfig.headers);
248
+ if (correlationId) {
249
+ headers.set("X-Correlation-Id", correlationId);
250
+ headers.set("X-Request-Id", correlationId);
251
+ }
252
+ if (this.authToken && !finalConfig.skipAuthRefresh) {
253
+ headers.set("Authorization", `Bearer ${this.authToken}`);
254
+ }
255
+ if (finalConfig.body && typeof finalConfig.body === "object" && !(finalConfig.body instanceof FormData)) {
256
+ headers.set("Content-Type", "application/json");
257
+ finalConfig.body = JSON.stringify(finalConfig.body);
258
+ }
259
+ finalConfig.headers = headers;
260
+ const fetchPromise = async () => {
261
+ try {
262
+ const response = await fetch(url, {
263
+ ...finalConfig,
264
+ signal: combinedController.signal
265
+ });
266
+ const responseData = await this.parseResponseData(response);
267
+ if (!response.ok) {
268
+ const error = Object.assign(
269
+ new Error(
270
+ responseData.title || `HTTP ${response.status}: ${response.statusText}`
271
+ ),
272
+ {
273
+ type: responseData.type || this.getErrorType(response.status),
274
+ title: responseData.title || this.getErrorTitle(response.status),
275
+ status: response.status,
276
+ traceId: responseData.traceId || correlationId,
277
+ errors: responseData.errors,
278
+ isAborted: false,
279
+ config: finalConfig
280
+ }
281
+ );
282
+ if (finalConfig.throwErrors !== false) {
283
+ throw error;
284
+ } else {
285
+ return await this.applyResponseInterceptors({
286
+ error
287
+ });
288
+ }
289
+ }
290
+ const apiResponse = {
291
+ data: responseData
292
+ };
293
+ return await this.applyResponseInterceptors(apiResponse);
294
+ } catch (error) {
295
+ if (error.name === "AbortError") {
296
+ const abortError = Object.assign(
297
+ new Error(error.message || "Request aborted"),
298
+ {
299
+ type: "request_cancelled",
300
+ title: "Request was cancelled",
301
+ status: 0,
302
+ traceId: correlationId,
303
+ isAborted: true,
304
+ config: finalConfig
305
+ }
306
+ );
307
+ if (finalConfig.throwErrors !== false) {
308
+ throw abortError;
309
+ } else {
310
+ return await this.applyResponseInterceptors({
311
+ error: abortError
312
+ });
313
+ }
314
+ }
315
+ throw error;
316
+ }
317
+ };
318
+ if (finalConfig.retries && finalConfig.retries > 0) {
319
+ return await this.retryRequest(
320
+ fetchPromise,
321
+ finalConfig.retries,
322
+ finalConfig.retryDelay || 1e3,
323
+ combinedController.signal
324
+ );
325
+ }
326
+ return await fetchPromise();
327
+ } catch (error) {
328
+ const apiError = this.normalizeError(
329
+ error,
330
+ config,
331
+ correlationId
332
+ );
333
+ if (config.throwErrors !== false) {
334
+ await this.applyErrorInterceptors(apiError);
335
+ throw apiError;
336
+ } else {
337
+ return {
338
+ error: apiError
339
+ };
340
+ }
341
+ } finally {
342
+ this.requestManager.remove(requestKey);
343
+ }
344
+ }
345
+ // Get error type based on status code
346
+ getErrorType(status) {
347
+ if (status >= 400 && status < 500) {
348
+ return status === 400 ? "validation_error" : "client_error";
349
+ } else if (status >= 500) {
350
+ return "server_error";
351
+ }
352
+ return "unknown_error";
353
+ }
354
+ // Get error title based on status code
355
+ getErrorTitle(status) {
356
+ const titles = {
357
+ 400: "Bad Request",
358
+ 401: "Unauthorized",
359
+ 403: "Forbidden",
360
+ 404: "Not Found",
361
+ 405: "Method Not Allowed",
362
+ 408: "Request Timeout",
363
+ 409: "Conflict",
364
+ 422: "Unprocessable Entity",
365
+ 429: "Too Many Requests",
366
+ 500: "Internal Server Error",
367
+ 502: "Bad Gateway",
368
+ 503: "Service Unavailable",
369
+ 504: "Gateway Timeout"
370
+ };
371
+ return titles[status] || `HTTP Error ${status}`;
372
+ }
373
+ // Parse response data based on content type
374
+ async parseResponseData(response) {
375
+ const contentType = response.headers.get("content-type");
376
+ if (_optionalChain([contentType, 'optionalAccess', _5 => _5.includes, 'call', _6 => _6("application/json")])) {
377
+ return response.json();
378
+ } else if (_optionalChain([contentType, 'optionalAccess', _7 => _7.includes, 'call', _8 => _8("text/")])) {
379
+ return response.text();
380
+ } else if (_optionalChain([contentType, 'optionalAccess', _9 => _9.includes, 'call', _10 => _10("application/octet-stream")])) {
381
+ return response.blob();
382
+ } else {
383
+ const text = await response.text();
384
+ try {
385
+ return JSON.parse(text);
386
+ } catch (e2) {
387
+ return text;
388
+ }
389
+ }
390
+ }
391
+ // Normalize errors
392
+ normalizeError(error, config, correlationId) {
393
+ if (error.type || error.title || error.errors) {
394
+ return Object.assign(
395
+ error instanceof Error ? error : new Error(error.message || "Unknown error"),
396
+ {
397
+ type: error.type,
398
+ title: error.title,
399
+ status: error.status,
400
+ traceId: error.traceId || correlationId,
401
+ errors: error.errors,
402
+ isAborted: error.isAborted || false,
403
+ config
404
+ }
405
+ );
406
+ }
407
+ if (error.name === "AbortError" || error.isAborted) {
408
+ return Object.assign(new Error(error.message || "Request was aborted"), {
409
+ type: "request_cancelled",
410
+ title: "Request was cancelled",
411
+ status: 0,
412
+ traceId: correlationId,
413
+ isAborted: true,
414
+ config
415
+ });
416
+ }
417
+ if (_optionalChain([error, 'access', _11 => _11.message, 'optionalAccess', _12 => _12.includes, 'call', _13 => _13("timeout")])) {
418
+ return Object.assign(new Error(error.message), {
419
+ type: "timeout_error",
420
+ title: "Request Timeout",
421
+ status: 408,
422
+ traceId: correlationId,
423
+ isAborted: true,
424
+ config
425
+ });
426
+ }
427
+ if (_optionalChain([error, 'access', _14 => _14.message, 'optionalAccess', _15 => _15.includes, 'call', _16 => _16("network")])) {
428
+ return Object.assign(
429
+ new Error(error.message || "Network request failed"),
430
+ {
431
+ type: "network_error",
432
+ title: "Network Error",
433
+ status: 0,
434
+ traceId: correlationId,
435
+ isAborted: false,
436
+ config
437
+ }
438
+ );
439
+ }
440
+ return Object.assign(
441
+ new Error(error.message || "An unknown error occurred"),
442
+ {
443
+ type: "unknown_error",
444
+ title: "Unknown Error",
445
+ status: 0,
446
+ traceId: correlationId,
447
+ isAborted: false,
448
+ config
449
+ }
450
+ );
451
+ }
452
+ get(endpoint, config) {
453
+ return this.request(endpoint, { ...config, method: "GET" });
454
+ }
455
+ post(endpoint, data, config) {
456
+ return this.request(endpoint, { ...config, method: "POST", body: data });
457
+ }
458
+ put(endpoint, data, config) {
459
+ return this.request(endpoint, { ...config, method: "PUT", body: data });
460
+ }
461
+ patch(endpoint, data, config) {
462
+ return this.request(endpoint, {
463
+ ...config,
464
+ method: "PATCH",
465
+ body: data
466
+ });
467
+ }
468
+ delete(endpoint, config) {
469
+ return this.request(endpoint, { ...config, method: "DELETE" });
470
+ }
471
+ filter(url, data, config) {
472
+ const mergedData = { ...data, ...data.filterModel };
473
+ return this.request(url, {
474
+ ...config,
475
+ method: "POST",
476
+ body: mergedData
477
+ });
478
+ }
479
+ }, _class2);
480
+
481
+ // src/core/api/createApiClient.ts
482
+ var globalApiClient = null;
483
+ function createApiClient(config = {}) {
484
+ const {
485
+ baseURL = import.meta.env.VITE_API_URL,
486
+ timeout = 3e4,
487
+ correlationIdPrefix = "api",
488
+ includeCorrelationId = true,
489
+ requestInterceptors = [],
490
+ responseInterceptors = [],
491
+ errorInterceptors = []
492
+ } = config;
493
+ const client = new ApiClient(baseURL, timeout);
494
+ client.addRequestInterceptor((config2) => {
495
+ const token = localStorage.getItem("serviceToken");
496
+ if (token && !config2.skipAuthRefresh) {
497
+ config2.headers = {
498
+ ...config2.headers,
499
+ Authorization: `Bearer ${token}`
500
+ };
501
+ }
502
+ return config2;
503
+ });
504
+ client.setCorrelationIdPrefix(correlationIdPrefix);
505
+ client.setIncludeCorrelationId(includeCorrelationId);
506
+ requestInterceptors.forEach((interceptor) => {
507
+ client.addRequestInterceptor(interceptor);
508
+ });
509
+ responseInterceptors.forEach((interceptor) => {
510
+ client.addResponseInterceptor(interceptor);
511
+ });
512
+ errorInterceptors.forEach((interceptor) => {
513
+ client.addErrorInterceptor(interceptor);
514
+ });
515
+ return client;
516
+ }
517
+ function getGlobalApiClient(config) {
518
+ if (!globalApiClient) {
519
+ globalApiClient = createApiClient(config);
520
+ }
521
+ return globalApiClient;
522
+ }
523
+ function setGlobalApiClient(client) {
524
+ globalApiClient = client;
525
+ }
526
+ function resetGlobalApiClient() {
527
+ globalApiClient = null;
528
+ }
529
+
530
+ // src/core/api/types/CancelToken.ts
531
+ var CancelToken = class _CancelToken {
532
+
533
+
534
+
535
+ constructor() {
536
+ this.abortController = new AbortController();
537
+ this.cancelPromise = new Promise((resolve) => {
538
+ this.cancelResolve = resolve;
539
+ });
540
+ }
541
+ get signal() {
542
+ return this.abortController.signal;
543
+ }
544
+ cancel(reason) {
545
+ this.abortController.abort(reason);
546
+ _optionalChain([this, 'access', _17 => _17.cancelResolve, 'optionalCall', _18 => _18()]);
547
+ }
548
+ get isCancelled() {
549
+ return this.abortController.signal.aborted;
550
+ }
551
+ throwIfCancelled() {
552
+ if (this.isCancelled) {
553
+ throw new Error("Request cancelled");
554
+ }
555
+ }
556
+ static source() {
557
+ const token = new _CancelToken();
558
+ return {
559
+ token,
560
+ cancel: (reason) => token.cancel(reason)
561
+ };
562
+ }
563
+ };
564
+
565
+ // src/core/api/useValidationErrors.ts
566
+ var _react = require('react');
567
+ function useValidationErrors(error) {
568
+ const getFieldError = _react.useCallback.call(void 0,
569
+ (field) => {
570
+ if (!_optionalChain([error, 'optionalAccess', _19 => _19.errors]) || !error.errors[field]) return null;
571
+ const fieldError = error.errors[field];
572
+ if (typeof fieldError === "string") return fieldError;
573
+ if (Array.isArray(fieldError)) return fieldError[0];
574
+ if (typeof fieldError === "object" && "message" in fieldError) {
575
+ return fieldError.message;
576
+ }
577
+ return null;
578
+ },
579
+ [error]
580
+ );
581
+ const hasFieldError = _react.useCallback.call(void 0,
582
+ (field) => {
583
+ return !!getFieldError(field);
584
+ },
585
+ [getFieldError]
586
+ );
587
+ const getAllErrors = _react.useCallback.call(void 0, () => {
588
+ if (!_optionalChain([error, 'optionalAccess', _20 => _20.errors])) return {};
589
+ const result = {};
590
+ Object.entries(error.errors).forEach(([key, value]) => {
591
+ if (typeof value === "string") {
592
+ result[key] = value;
593
+ } else if (Array.isArray(value)) {
594
+ result[key] = value.join(", ");
595
+ } else if (typeof value === "object" && value && "message" in value) {
596
+ result[key] = value.message;
597
+ }
598
+ });
599
+ return result;
600
+ }, [error]);
601
+ return {
602
+ getFieldError,
603
+ hasFieldError,
604
+ getAllErrors,
605
+ hasErrors: _optionalChain([error, 'optionalAccess', _21 => _21.errors])
606
+ };
607
+ }
608
+
609
+ // src/core/components/AuthorizedView/AuthorizedView.tsx
610
+ var _jsxruntime = require('react/jsx-runtime');
611
+ var AuthorizedView = ({ children, show }) => {
612
+ if (!show) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {});
613
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children });
614
+ };
615
+
616
+ // src/core/components/CancelButton/CancelButton.tsx
617
+ var _material = require('@mui/material');
618
+
619
+ var CancelButton = ({
620
+ children = "Cancel",
621
+ variant = "outlined",
622
+ sx,
623
+ ...rest
624
+ }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Button, { variant, sx: { width: "6rem", ...sx }, ...rest, children });
625
+
626
+ // src/core/components/ClearButton/ClearButton.tsx
627
+
628
+
629
+ var ClearButton = ({
630
+ isSubmitting,
631
+ handleClear,
632
+ sx,
633
+ storeKey
634
+ }) => {
635
+ const onClick = () => {
636
+ handleClear();
637
+ if (storeKey != null) {
638
+ localStorage.removeItem(storeKey);
639
+ }
640
+ };
641
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
642
+ _material.Button,
643
+ {
644
+ variant: "outlined",
645
+ onClick,
646
+ disabled: isSubmitting,
647
+ sx,
648
+ children: "Clear"
649
+ }
650
+ );
651
+ };
652
+
653
+ // src/core/components/Containers/SimpleContainer.tsx
654
+
655
+
656
+ var SimpleContainer = ({
657
+ children,
658
+ className,
659
+ sx
660
+ }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Container, { className, sx: { ...sx }, children });
661
+
662
+ // src/core/components/FilterButton/FilterButton.tsx
663
+ var _FilterAlt = require('@mui/icons-material/FilterAlt'); var _FilterAlt2 = _interopRequireDefault(_FilterAlt);
664
+ var _lab = require('@mui/lab');
665
+
666
+
667
+ var FilterButton = ({
668
+ isSubmitting,
669
+ show,
670
+ title,
671
+ icon,
672
+ sx,
673
+ iconSx
674
+ }) => {
675
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
676
+ _lab.LoadingButton,
677
+ {
678
+ type: "submit",
679
+ variant: "contained",
680
+ loading: isSubmitting,
681
+ disabled: !show,
682
+ disableRipple: true,
683
+ color: "primary",
684
+ sx: {
685
+ display: "flex",
686
+ alignItems: "center",
687
+ ...sx
688
+ },
689
+ startIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Badge, { color: "error", variant: "standard", children: icon ? icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _FilterAlt2.default, { width: "20", height: "20", sx: iconSx }) }),
690
+ children: _optionalChain([title, 'optionalAccess', _22 => _22.trim, 'call', _23 => _23()]) === "" || !title ? "Filter" : title
691
+ }
692
+ );
693
+ };
694
+
695
+ // src/core/components/FilterDisplay/FilterChip.tsx
696
+ var _Chip = require('@mui/material/Chip'); var _Chip2 = _interopRequireDefault(_Chip);
697
+
698
+
699
+ var FilterChip = _react.memo.call(void 0,
700
+ ({
701
+ fieldKey,
702
+ filter,
703
+ onDelete
704
+ }) => {
705
+ const hasValue = filter.Value !== null && filter.Value !== void 0 && filter.Value !== "";
706
+ const label = `${fieldKey.replace("PK", "")}: ${filter.Label}`;
707
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
708
+ _Chip2.default,
709
+ {
710
+ label,
711
+ variant: hasValue ? "filled" : "outlined",
712
+ size: "small",
713
+ onDelete: hasValue ? onDelete : void 0
714
+ },
715
+ fieldKey
716
+ );
717
+ }
718
+ );
719
+ FilterChip.displayName = "FilterChip";
720
+
721
+ // src/core/components/FilterDisplay/FilterDisplay.tsx
722
+
723
+
724
+
725
+ var ProgramsFilterDisplay = _react.memo.call(void 0,
726
+ (props) => {
727
+ const { friendlyFilter, onFriendlyFilterChange } = props;
728
+ const deleteHandlers = _react.useMemo.call(void 0, () => {
729
+ if (!onFriendlyFilterChange) return {};
730
+ const handlers = {};
731
+ for (const key of Object.keys(friendlyFilter)) {
732
+ handlers[key] = () => onFriendlyFilterChange(key);
733
+ }
734
+ return handlers;
735
+ }, [onFriendlyFilterChange, friendlyFilter]);
736
+ const chipList = _react.useMemo.call(void 0, () => {
737
+ return Object.entries(friendlyFilter).map(([key, filter]) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
738
+ FilterChip,
739
+ {
740
+ fieldKey: key,
741
+ filter,
742
+ onDelete: deleteHandlers[key]
743
+ },
744
+ key
745
+ ));
746
+ }, [friendlyFilter, deleteHandlers]);
747
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Card, { sx: { mb: 2 }, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.CardContent, { children: [
748
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "h6", gutterBottom: true, children: "Active Filters" }),
749
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { display: "flex", gap: 1, flexWrap: "wrap", children: chipList })
750
+ ] }) });
751
+ }
752
+ );
753
+ ProgramsFilterDisplay.displayName = "FilterDisplay";
754
+
755
+ // src/core/components/FilterWrapper/FilterWrapper.tsx
756
+ var _ManageSearch = require('@mui/icons-material/ManageSearch'); var _ManageSearch2 = _interopRequireDefault(_ManageSearch);
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+ var FilterWrapper = ({
769
+ children,
770
+ title,
771
+ filterCount,
772
+ cardSx,
773
+ textSx,
774
+ icon,
775
+ iconSx,
776
+ showCount
777
+ }) => {
778
+ const theme = _material.useTheme.call(void 0, );
779
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
780
+ _material.Card,
781
+ {
782
+ sx: {
783
+ position: "relative",
784
+ borderRadius: "0px",
785
+ mb: 2,
786
+ ...cardSx
787
+ },
788
+ children: [
789
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
790
+ _material.CardHeader,
791
+ {
792
+ sx: {
793
+ display: "flex",
794
+ flexWrap: "wrap",
795
+ p: "1rem",
796
+ ".MuiCardHeader-action": {
797
+ margin: 0,
798
+ alignSelf: "center"
799
+ },
800
+ alignItems: "center"
801
+ },
802
+ title: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 }, children: [
803
+ icon ? icon : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
804
+ _ManageSearch2.default,
805
+ {
806
+ sx: {
807
+ height: "2.5rem",
808
+ color: theme.palette.primary.main,
809
+ ...iconSx
810
+ }
811
+ }
812
+ ),
813
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
814
+ _material.Typography,
815
+ {
816
+ variant: "h5",
817
+ sx: {
818
+ fontWeight: "bold",
819
+ color: theme.palette.primary.main,
820
+ ...textSx
821
+ },
822
+ children: [
823
+ title ? title : "Filter",
824
+ " ",
825
+ showCount ? `(${filterCount ? filterCount : 0})` : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {})
826
+ ]
827
+ }
828
+ )
829
+ ] })
830
+ }
831
+ ),
832
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, {}),
833
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.CardContent, { sx: { py: 2 }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { container: true, spacing: 2, children }) })
834
+ ]
835
+ }
836
+ );
837
+ };
838
+
839
+ // src/core/components/Footer/Footer.tsx
840
+
841
+
842
+ var Footer = () => {
843
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
844
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
845
+ _material.Box,
846
+ {
847
+ component: "footer",
848
+ sx: {
849
+ py: 2,
850
+ px: 4,
851
+ mt: "auto",
852
+ backgroundColor: (theme) => theme.palette.mode === "light" ? theme.palette.grey[200] : theme.palette.grey[800]
853
+ },
854
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { variant: "body2", color: "text.secondary", align: "center", children: `\xA9 Copyright ${currentYear} GN. All rights reserved by Parul University.` })
855
+ }
856
+ );
857
+ };
858
+
859
+ // src/core/components/LabelText/LabelText.tsx
860
+
861
+
862
+ var LabelText = ({
863
+ label,
864
+ value,
865
+ gridSize,
866
+ containerSize,
867
+ labelSx,
868
+ valueSx
869
+ }) => {
870
+ const defaultGridSize = {
871
+ labelSize: { xs: 6, sm: 6, md: 6 },
872
+ valueSize: { xs: 12, sm: 6, md: 6 }
873
+ };
874
+ const defaultContainerSize = { xs: 12, sm: 6, md: 6 };
875
+ const size = gridSize || defaultGridSize;
876
+ const container = containerSize || defaultContainerSize;
877
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
878
+ _material.Grid,
879
+ {
880
+ size: container,
881
+ sx: {
882
+ display: "flex",
883
+ flexDirection: { xs: "column", sm: "row", md: "row" },
884
+ "&:hover": { bgcolor: "#efefef", overflow: "hidden" }
885
+ },
886
+ children: [
887
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
888
+ _material.Grid,
889
+ {
890
+ size: size.labelSize,
891
+ sx: {
892
+ padding: "5px",
893
+ fontSize: "14px",
894
+ textAlign: { xs: "left", sm: "right", md: "right" },
895
+ ...labelSx
896
+ },
897
+ children: [
898
+ label,
899
+ " :"
900
+ ]
901
+ }
902
+ ),
903
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
904
+ _material.Grid,
905
+ {
906
+ size: size.valueSize,
907
+ sx: { padding: "5px", display: "flex", flexWrap: "wrap" },
908
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Tooltip, { title: value, arrow: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
909
+ _material.Typography,
910
+ {
911
+ sx: {
912
+ fontSize: "14px",
913
+ wordBreak: "break-word",
914
+ overflow: "hidden",
915
+ display: "-webkit-box",
916
+ textOverflow: "ellipsis",
917
+ WebkitLineClamp: 2,
918
+ WebkitBoxOrient: "vertical",
919
+ ...valueSx,
920
+ color: "#078dee"
921
+ },
922
+ children: value ? value : "-"
923
+ }
924
+ ) })
925
+ }
926
+ )
927
+ ]
928
+ }
929
+ );
930
+ };
931
+
932
+ // src/core/components/RenderIf/RenderIf.tsx
933
+
934
+ var RenderIf = ({
935
+ show,
936
+ children
937
+ }) => {
938
+ return show ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children }) : null;
939
+ };
940
+
941
+ // src/core/components/SectionBox/SectionBox.tsx
942
+
943
+
944
+
945
+ var getSectionTheme = (variant = "default") => {
946
+ const themes = {
947
+ default: {
948
+ bgcolor: "#faebd7",
949
+ color: "#925d21"
950
+ },
951
+ form: {
952
+ bgcolor: "#cdced1",
953
+ color: "black"
954
+ },
955
+ info: {
956
+ bgcolor: "#e3f2fd",
957
+ color: "#1976d2"
958
+ },
959
+ warning: {
960
+ bgcolor: "#fff3e0",
961
+ color: "#f57c00"
962
+ },
963
+ error: {
964
+ bgcolor: "#ffebee",
965
+ color: "#d32f2f"
966
+ }
967
+ };
968
+ return themes[variant];
969
+ };
970
+ var SectionBox = _react.memo.call(void 0,
971
+ ({
972
+ title,
973
+ children,
974
+ spacing = 0,
975
+ containerSx,
976
+ titleSx,
977
+ variant = "default",
978
+ icon,
979
+ actions
980
+ }) => {
981
+ const themeColors = _react.useMemo.call(void 0, () => getSectionTheme(variant), [variant]);
982
+ const headerSx = _react.useMemo.call(void 0,
983
+ () => ({
984
+ px: 1.5,
985
+ py: 0.1,
986
+ width: "fit-content",
987
+ ...themeColors,
988
+ ...titleSx
989
+ }),
990
+ [themeColors, titleSx]
991
+ );
992
+ const contentSx = _react.useMemo.call(void 0,
993
+ () => ({
994
+ padding: "16px",
995
+ ...containerSx
996
+ }),
997
+ [containerSx]
998
+ );
999
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
1000
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Box, { sx: { display: "flex", flexDirection: "column", width: "100%" }, children: [
1001
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
1002
+ _material.Stack,
1003
+ {
1004
+ direction: "row",
1005
+ justifyContent: "space-between",
1006
+ alignItems: "center",
1007
+ sx: headerSx,
1008
+ children: [
1009
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _material.Stack, { direction: "row", alignItems: "center", spacing: 1, children: [
1010
+ icon,
1011
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Typography, { sx: { fontSize: "15px", fontWeight: 400 }, children: title })
1012
+ ] }),
1013
+ actions
1014
+ ]
1015
+ }
1016
+ ),
1017
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Divider, {})
1018
+ ] }),
1019
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Grid, { container: true, spacing, sx: contentSx, children })
1020
+ ] });
1021
+ }
1022
+ );
1023
+
1024
+ // src/core/components/SimpleTabs/SimpleTabs.tsx
1025
+
1026
+
1027
+
1028
+
1029
+ var SimpleTabs = ({
1030
+ tabs,
1031
+ defaultValue = 1,
1032
+ onTabChange,
1033
+ children,
1034
+ tabSx,
1035
+ tabsSx
1036
+ }) => {
1037
+ const [value, setValue] = _react.useState.call(void 0, defaultValue);
1038
+ const handleChange = (event, newValue) => {
1039
+ setValue(newValue);
1040
+ if (onTabChange) onTabChange(newValue);
1041
+ };
1042
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _lab.TabContext, { value, children: [
1043
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _material.Box, { sx: { borderBottom: 1, borderColor: "divider", width: "100%" }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1044
+ _material.Tabs,
1045
+ {
1046
+ value,
1047
+ onChange: handleChange,
1048
+ sx: { px: 2, py: 0, ...tabsSx },
1049
+ children: tabs.map((tab) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1050
+ _material.Tab,
1051
+ {
1052
+ label: tab.label,
1053
+ value: tab.value,
1054
+ disabled: tab.permission === false,
1055
+ sx: { fontSize: "1rem", ...tabSx }
1056
+ },
1057
+ tab.value
1058
+ ))
1059
+ }
1060
+ ) }),
1061
+ children
1062
+ ] });
1063
+ };
1064
+
1065
+ // src/core/components/SubmitButton/SubmitButton.tsx
1066
+
1067
+
1068
+ var SubmitButton = ({
1069
+ loading = false,
1070
+ ...rest
1071
+ }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1072
+ _lab.LoadingButton,
1073
+ {
1074
+ loading,
1075
+ variant: "contained",
1076
+ color: "primary",
1077
+ type: "submit",
1078
+ ...rest,
1079
+ sx: { fontWeight: 400 },
1080
+ children: "Submit"
1081
+ }
1082
+ );
1083
+
1084
+ // src/core/components/WithRef/WithRef.tsx
1085
+
1086
+ function withDataModal(component) {
1087
+ return _react.forwardRef.call(void 0,
1088
+ (props, ref) => component({ ...props, ref })
1089
+ );
1090
+ }
1091
+
1092
+ // src/core/config.ts
1093
+ var Config = {
1094
+ defaultPageSize: 20,
1095
+ apiBaseUrl: "http://localhost:5143"
1096
+ // apiBaseUrl: 'http://192.168.1.246:5143',
1097
+ };
1098
+ var dateTimePatterns = {
1099
+ dateTime: "DD MMM YYYY h:mm A",
1100
+ // 17 Apr 2022 12:00 am
1101
+ date: "DD MMM YYYY",
1102
+ // 17 Apr 2022
1103
+ month_year_short_format: "MMM YYYY",
1104
+ month_year_full_format: "MMMM YYYY",
1105
+ year: "YYYY",
1106
+ time: "h:mm a",
1107
+ // 12:00 am
1108
+ split: {
1109
+ dateTime: "DD/MM/YYYY h:mm A",
1110
+ // 17/04/2022 12:00 am
1111
+ date: "DD/MM/YYYY"
1112
+ // 17/04/2022
1113
+ },
1114
+ paramCase: {
1115
+ dateTime: "DD-MM-YYYY h:mm A",
1116
+ // 17-04-2022 12:00 am
1117
+ date: "DD-MM-YYYY",
1118
+ // 17-04-2022
1119
+ dateReverse: "YYYY-MM-DD",
1120
+ // 2022-04-17 for compare date
1121
+ MonthYear: "MMM-YYYY"
1122
+ }
1123
+ };
1124
+
1125
+ // src/core/hooks/useApiClient.ts
1126
+
1127
+ function useApiClient(config = {}) {
1128
+ return _react.useMemo.call(void 0, () => {
1129
+ return createApiClient(config);
1130
+ }, [
1131
+ config.baseURL,
1132
+ config.timeout,
1133
+ config.correlationIdPrefix,
1134
+ config.includeCorrelationId,
1135
+ config.authToken,
1136
+ config.requestInterceptors,
1137
+ config.responseInterceptors,
1138
+ config.errorInterceptors
1139
+ ]);
1140
+ }
1141
+
1142
+ // src/core/hooks/useFormErrorHandler.ts
1143
+
1144
+ var _sonner = require('sonner');
1145
+ var useFormErrorHandler = ({
1146
+ setError,
1147
+ successMessage = {
1148
+ create: "Created successfully",
1149
+ update: "Updated successfully"
1150
+ },
1151
+ errorMessage = {
1152
+ noChanges: "No changes were made",
1153
+ general: "Failed to save. Please try again."
1154
+ }
1155
+ }) => {
1156
+ const getFieldError = _react.useCallback.call(void 0,
1157
+ (fields, fieldName) => {
1158
+ if (!fields || !fields[fieldName]) return void 0;
1159
+ const fieldError = fields[fieldName];
1160
+ if (typeof fieldError === "string") {
1161
+ return fieldError;
1162
+ }
1163
+ if (Array.isArray(fieldError)) {
1164
+ return fieldError.join(", ");
1165
+ }
1166
+ if (typeof fieldError === "object" && "message" in fieldError) {
1167
+ return fieldError.message;
1168
+ }
1169
+ return void 0;
1170
+ },
1171
+ []
1172
+ );
1173
+ const handleSuccess = _react.useCallback.call(void 0,
1174
+ (isEditing, rowsAffected) => {
1175
+ if (rowsAffected !== void 0 && rowsAffected > 0) {
1176
+ _sonner.toast.success(isEditing ? successMessage.update : successMessage.create);
1177
+ return true;
1178
+ } else if (rowsAffected === 0) {
1179
+ _sonner.toast.error(errorMessage.noChanges);
1180
+ return false;
1181
+ }
1182
+ _sonner.toast.success(isEditing ? successMessage.update : successMessage.create);
1183
+ return true;
1184
+ },
1185
+ [successMessage, errorMessage]
1186
+ );
1187
+ const handleError = _react.useCallback.call(void 0,
1188
+ (processedError) => {
1189
+ if (processedError.type === "validation_error" && processedError.errors && setError) {
1190
+ Object.keys(processedError.errors).forEach((fieldName) => {
1191
+ const fieldError = getFieldError(processedError.errors, fieldName);
1192
+ if (fieldError) {
1193
+ setError(fieldName, {
1194
+ type: "server",
1195
+ message: fieldError
1196
+ });
1197
+ }
1198
+ });
1199
+ _sonner.toast.error(processedError.title || "Please check the form for validation errors");
1200
+ } else {
1201
+ _sonner.toast.error(processedError.title || errorMessage.general);
1202
+ }
1203
+ },
1204
+ [errorMessage.general, getFieldError, setError]
1205
+ );
1206
+ return {
1207
+ handleSuccess,
1208
+ handleError
1209
+ };
1210
+ };
1211
+ var useDeleteHandler = ({
1212
+ successMessage = "Deleted successfully",
1213
+ errorMessage = "Failed to delete. Please try again."
1214
+ } = {}) => {
1215
+ return useFormErrorHandler({
1216
+ successMessage: {
1217
+ create: successMessage,
1218
+ // Not used for delete, but required for type
1219
+ update: successMessage
1220
+ },
1221
+ errorMessage: {
1222
+ noChanges: "No changes were made",
1223
+ // Not typically used for delete
1224
+ general: errorMessage
1225
+ }
1226
+ // setError is omitted (undefined) for delete operations
1227
+ });
1228
+ };
1229
+
1230
+ // src/core/utils/CacheUtility/index.ts
1231
+ var _reactquery = require('@tanstack/react-query');
1232
+
1233
+ var CacheUtility = class {
1234
+ constructor(queryClient) {
1235
+ this.queryClient = queryClient;
1236
+ }
1237
+ /**
1238
+ * Get cached data using only the queryKey from query factory
1239
+ */
1240
+ getCachedData(queryKey) {
1241
+ return this.queryClient.getQueryData(queryKey);
1242
+ }
1243
+ /**
1244
+ * Get cached data with transformation using select function
1245
+ */
1246
+ getCachedDataWithSelect(queryKey, select) {
1247
+ const cachedData = this.queryClient.getQueryData(queryKey);
1248
+ if (cachedData === void 0) {
1249
+ return void 0;
1250
+ }
1251
+ return select(cachedData);
1252
+ }
1253
+ };
1254
+ function useCacheUtility() {
1255
+ const queryClient = _reactquery.useQueryClient.call(void 0, );
1256
+ return _react.useMemo.call(void 0, () => new CacheUtility(queryClient), [queryClient]);
1257
+ }
1258
+
1259
+ // src/core/utils/watch/core.ts
1260
+ var _reacthookform = require('react-hook-form');
1261
+ var useWatchForm = (control) => _reacthookform.useWatch.call(void 0, { control });
1262
+ var useWatchField = (control, name) => _reacthookform.useWatch.call(void 0, { control, name });
1263
+ var useWatchFields = (control, names) => _reacthookform.useWatch.call(void 0, { control, name: names });
1264
+
1265
+ // src/core/utils/watch/utilities.ts
1266
+
1267
+
1268
+ var useWatchTransform = (control, name, transform) => {
1269
+ const value = _reacthookform.useWatch.call(void 0, { control, name });
1270
+ return _react.useMemo.call(void 0, () => transform(value), [value, transform]);
1271
+ };
1272
+ var useWatchDefault = (control, name, defaultValue) => {
1273
+ const value = _reacthookform.useWatch.call(void 0, { control, name });
1274
+ return _nullishCoalesce(value, () => ( defaultValue));
1275
+ };
1276
+ var useWatchBoolean = (control, name, defaultValue = false) => {
1277
+ const value = _reacthookform.useWatch.call(void 0, { control, name });
1278
+ return Boolean(_nullishCoalesce(value, () => ( defaultValue)));
1279
+ };
1280
+ var useWatchBatch = (control, fields) => {
1281
+ const values = _reacthookform.useWatch.call(void 0, { control, name: fields });
1282
+ return _react.useMemo.call(void 0, () => {
1283
+ const result = {};
1284
+ fields.forEach((field, index) => {
1285
+ result[field] = values[index];
1286
+ });
1287
+ return result;
1288
+ }, [values, fields]);
1289
+ };
1290
+ var useWatchConditional = (control, name, shouldWatch, fallback) => {
1291
+ const activeValue = _reacthookform.useWatch.call(void 0, {
1292
+ control,
1293
+ name,
1294
+ disabled: !shouldWatch
1295
+ });
1296
+ return shouldWatch ? activeValue : fallback;
1297
+ };
1298
+ var useWatchDebounced = (control, name, delay = 300) => {
1299
+ const value = _reacthookform.useWatch.call(void 0, { control, name });
1300
+ const [debouncedValue, setDebouncedValue] = _react.useState.call(void 0, value);
1301
+ _react.useEffect.call(void 0, () => {
1302
+ const timer = setTimeout(() => {
1303
+ setDebouncedValue(value);
1304
+ }, delay);
1305
+ return () => clearTimeout(timer);
1306
+ }, [value, delay]);
1307
+ return debouncedValue;
1308
+ };
1309
+ var useWatchSelector = (control, name, selector, deps = []) => {
1310
+ const value = _reacthookform.useWatch.call(void 0, { control, name });
1311
+ return _react.useMemo.call(void 0,
1312
+ () => selector(value),
1313
+ [value, selector, ...deps]
1314
+ // eslint-disable-line react-hooks/exhaustive-deps
1315
+ );
1316
+ };
1317
+
1318
+ // src/core/utils/watch/index.ts
1319
+ var typedWatch = {
1320
+ // === CORE FUNCTIONS ===
1321
+ /** Watch entire form */
1322
+ form: useWatchForm,
1323
+ /** Watch single field */
1324
+ field: useWatchField,
1325
+ /** Watch multiple fields */
1326
+ fields: useWatchFields,
1327
+ // === UTILITY FUNCTIONS ===
1328
+ /** Watch with transformation */
1329
+ transform: useWatchTransform,
1330
+ /** Watch with default value */
1331
+ withDefault: useWatchDefault,
1332
+ /** Watch as boolean */
1333
+ boolean: useWatchBoolean,
1334
+ /** Watch multiple with custom keys */
1335
+ batch: useWatchBatch,
1336
+ /** Watch conditionally */
1337
+ conditional: useWatchConditional,
1338
+ /** Watch with debouncing */
1339
+ debounced: useWatchDebounced,
1340
+ /** Watch with selector */
1341
+ selector: useWatchSelector
1342
+ };
1343
+
1344
+ // src/core/utils/calculateFilterCount.ts
1345
+ var calculateFilterCount = (model) => Object.values(model).filter(
1346
+ (v) => v !== null && v !== void 0 && String(v).trim() !== ""
1347
+ ).length;
1348
+
1349
+ // src/core/utils/format-time.ts
1350
+ var _dayjs = require('dayjs'); var _dayjs2 = _interopRequireDefault(_dayjs);
1351
+ var _duration = require('dayjs/plugin/duration'); var _duration2 = _interopRequireDefault(_duration);
1352
+ var _relativeTime = require('dayjs/plugin/relativeTime'); var _relativeTime2 = _interopRequireDefault(_relativeTime);
1353
+ _dayjs2.default.extend(_duration2.default);
1354
+ _dayjs2.default.extend(_relativeTime2.default);
1355
+ var formatPatterns = {
1356
+ dateTime: "DD MMM YYYY h:mm A",
1357
+ // 17 Apr 2022 12:00 am
1358
+ date: "DD MMM YYYY",
1359
+ // 17 Apr 2022
1360
+ month_year_short_format: "MMM YYYY",
1361
+ month_year_full_format: "MMMM YYYY",
1362
+ year: "YYYY",
1363
+ time: "h:mm a",
1364
+ // 12:00 am
1365
+ split: {
1366
+ dateTime: "DD/MM/YYYY h:mm A",
1367
+ // 17/04/2022 12:00 am
1368
+ date: "DD/MM/YYYY"
1369
+ // 17/04/2022
1370
+ },
1371
+ paramCase: {
1372
+ dateTime: "DD-MM-YYYY h:mm A",
1373
+ // 17-04-2022 12:00 am
1374
+ date: "DD-MM-YYYY",
1375
+ // 17-04-2022
1376
+ dateReverse: "YYYY-MM-DD",
1377
+ // 2022-04-17 for compare date
1378
+ MonthYear: "MMM-YYYY"
1379
+ }
1380
+ };
1381
+ var isValidDate = (date) => date !== null && date !== void 0 && _dayjs2.default.call(void 0, date).isValid();
1382
+ function today(template) {
1383
+ return _dayjs2.default.call(void 0, /* @__PURE__ */ new Date()).startOf("day").format(template);
1384
+ }
1385
+ function fDateTime(date, template) {
1386
+ if (!isValidDate(date)) {
1387
+ return "Invalid date";
1388
+ }
1389
+ return _dayjs2.default.call(void 0, date).format(_nullishCoalesce(template, () => ( formatPatterns.dateTime)));
1390
+ }
1391
+ function fDate(date, template) {
1392
+ if (!isValidDate(date)) {
1393
+ return "Invalid date";
1394
+ }
1395
+ return _dayjs2.default.call(void 0, date).format(_nullishCoalesce(template, () => ( formatPatterns.date)));
1396
+ }
1397
+ function fTime(date, template) {
1398
+ if (!isValidDate(date)) {
1399
+ return "Invalid date";
1400
+ }
1401
+ return _dayjs2.default.call(void 0, date).format(_nullishCoalesce(template, () => ( formatPatterns.time)));
1402
+ }
1403
+ function fTimestamp(date) {
1404
+ if (!isValidDate(date)) {
1405
+ return "Invalid date";
1406
+ }
1407
+ return _dayjs2.default.call(void 0, date).valueOf();
1408
+ }
1409
+ function fToNow(date) {
1410
+ if (!isValidDate(date)) {
1411
+ return "Invalid date";
1412
+ }
1413
+ return _dayjs2.default.call(void 0, date).toNow(true);
1414
+ }
1415
+ function fIsBetween(inputDate, startDate, endDate) {
1416
+ if (!isValidDate(inputDate) || !isValidDate(startDate) || !isValidDate(endDate)) {
1417
+ return false;
1418
+ }
1419
+ const formattedInputDate = fTimestamp(inputDate);
1420
+ const formattedStartDate = fTimestamp(startDate);
1421
+ const formattedEndDate = fTimestamp(endDate);
1422
+ if (formattedInputDate === "Invalid date" || formattedStartDate === "Invalid date" || formattedEndDate === "Invalid date") {
1423
+ return false;
1424
+ }
1425
+ return formattedInputDate >= formattedStartDate && formattedInputDate <= formattedEndDate;
1426
+ }
1427
+ function fIsAfter(startDate, endDate) {
1428
+ if (!isValidDate(startDate) || !isValidDate(endDate)) {
1429
+ return false;
1430
+ }
1431
+ return _dayjs2.default.call(void 0, startDate).isAfter(endDate);
1432
+ }
1433
+ function fIsSame(startDate, endDate, unitToCompare) {
1434
+ if (!isValidDate(startDate) || !isValidDate(endDate)) {
1435
+ return false;
1436
+ }
1437
+ return _dayjs2.default.call(void 0, startDate).isSame(endDate, _nullishCoalesce(unitToCompare, () => ( "year")));
1438
+ }
1439
+ function fDateRangeShortLabel(startDate, endDate, initial) {
1440
+ if (!isValidDate(startDate) || !isValidDate(endDate) || fIsAfter(startDate, endDate)) {
1441
+ return "Invalid date";
1442
+ }
1443
+ let label = `${fDate(startDate)} - ${fDate(endDate)}`;
1444
+ if (initial) {
1445
+ return label;
1446
+ }
1447
+ const isSameYear = fIsSame(startDate, endDate, "year");
1448
+ const isSameMonth = fIsSame(startDate, endDate, "month");
1449
+ const isSameDay = fIsSame(startDate, endDate, "day");
1450
+ if (isSameYear && !isSameMonth) {
1451
+ label = `${fDate(startDate, "DD MMM")} - ${fDate(endDate)}`;
1452
+ } else if (isSameYear && isSameMonth && !isSameDay) {
1453
+ label = `${fDate(startDate, "DD")} - ${fDate(endDate)}`;
1454
+ } else if (isSameYear && isSameMonth && isSameDay) {
1455
+ label = `${fDate(endDate)}`;
1456
+ }
1457
+ return label;
1458
+ }
1459
+ function fAdd({
1460
+ years = 0,
1461
+ months = 0,
1462
+ days = 0,
1463
+ hours = 0,
1464
+ minutes = 0,
1465
+ seconds = 0,
1466
+ milliseconds = 0
1467
+ }) {
1468
+ const result = _dayjs2.default.call(void 0, ).add(
1469
+ _dayjs2.default.duration({
1470
+ years,
1471
+ months,
1472
+ days,
1473
+ hours,
1474
+ minutes,
1475
+ seconds,
1476
+ milliseconds
1477
+ })
1478
+ ).format();
1479
+ return result;
1480
+ }
1481
+ function fSub({
1482
+ years = 0,
1483
+ months = 0,
1484
+ days = 0,
1485
+ hours = 0,
1486
+ minutes = 0,
1487
+ seconds = 0,
1488
+ milliseconds = 0
1489
+ }) {
1490
+ const result = _dayjs2.default.call(void 0, ).subtract(
1491
+ _dayjs2.default.duration({
1492
+ years,
1493
+ months,
1494
+ days,
1495
+ hours,
1496
+ minutes,
1497
+ seconds,
1498
+ milliseconds
1499
+ })
1500
+ ).format();
1501
+ return result;
1502
+ }
1503
+
1504
+ // src/core/utils/getEmptyObject.ts
1505
+ function getEmptyObject(data, defaultValues = {}) {
1506
+ const obj = {};
1507
+ for (const key of Object.keys(data)) {
1508
+ const value = data[key];
1509
+ const type = typeof value;
1510
+ if (type === "number") {
1511
+ obj[key] = 0;
1512
+ } else if (type === "string" || type === "boolean") {
1513
+ obj[key] = null;
1514
+ } else if (value instanceof Date) {
1515
+ obj[key] = null;
1516
+ } else {
1517
+ obj[key] = null;
1518
+ }
1519
+ }
1520
+ return { ...obj, ...defaultValues };
1521
+ }
1522
+
1523
+ // src/core/utils/useStableRowCount.ts
1524
+
1525
+ function useStableRowCount(currentTotal) {
1526
+ const rowCountRef = _react.useRef.call(void 0, currentTotal || 0);
1527
+ const stableRowCount = _react.useMemo.call(void 0, () => {
1528
+ if (currentTotal !== void 0) {
1529
+ rowCountRef.current = currentTotal;
1530
+ }
1531
+ return rowCountRef.current;
1532
+ }, [currentTotal]);
1533
+ return stableRowCount;
1534
+ }
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+
1587
+
1588
+
1589
+
1590
+
1591
+
1592
+
1593
+
1594
+
1595
+ exports.CorrelationIdGenerator = CorrelationIdGenerator; exports.RequestManager = RequestManager; exports.ApiClient = ApiClient; exports.createApiClient = createApiClient; exports.getGlobalApiClient = getGlobalApiClient; exports.setGlobalApiClient = setGlobalApiClient; exports.resetGlobalApiClient = resetGlobalApiClient; exports.CancelToken = CancelToken; exports.useValidationErrors = useValidationErrors; exports.AuthorizedView = AuthorizedView; exports.CancelButton = CancelButton; exports.ClearButton = ClearButton; exports.SimpleContainer = SimpleContainer; exports.FilterButton = FilterButton; exports.FilterChip = FilterChip; exports.ProgramsFilterDisplay = ProgramsFilterDisplay; exports.FilterWrapper = FilterWrapper; exports.Footer = Footer; exports.LabelText = LabelText; exports.RenderIf = RenderIf; exports.SectionBox = SectionBox; exports.SimpleTabs = SimpleTabs; exports.SubmitButton = SubmitButton; exports.withDataModal = withDataModal; exports.Config = Config; exports.dateTimePatterns = dateTimePatterns; exports.useApiClient = useApiClient; exports.useFormErrorHandler = useFormErrorHandler; exports.useDeleteHandler = useDeleteHandler; exports.CacheUtility = CacheUtility; exports.useCacheUtility = useCacheUtility; exports.useWatchForm = useWatchForm; exports.useWatchField = useWatchField; exports.useWatchFields = useWatchFields; exports.useWatchTransform = useWatchTransform; exports.useWatchDefault = useWatchDefault; exports.useWatchBoolean = useWatchBoolean; exports.useWatchBatch = useWatchBatch; exports.useWatchConditional = useWatchConditional; exports.useWatchDebounced = useWatchDebounced; exports.useWatchSelector = useWatchSelector; exports.typedWatch = typedWatch; exports.calculateFilterCount = calculateFilterCount; exports.formatPatterns = formatPatterns; exports.today = today; exports.fDateTime = fDateTime; exports.fDate = fDate; exports.fTime = fTime; exports.fTimestamp = fTimestamp; exports.fToNow = fToNow; exports.fIsBetween = fIsBetween; exports.fIsAfter = fIsAfter; exports.fIsSame = fIsSame; exports.fDateRangeShortLabel = fDateRangeShortLabel; exports.fAdd = fAdd; exports.fSub = fSub; exports.getEmptyObject = getEmptyObject; exports.useStableRowCount = useStableRowCount;
1596
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImQ6XFxQcm9qZWN0c1xcR05XZWJTb2Z0LlVJXFxwYWNrYWdlc1xcdWlcXGRpc3RcXGNodW5rLU5DM0pJTklNLmNqcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQUksdUJBQXVCLEVBQUUsTUFBTTtBQUNuQyxFQUFFLE9BQU8sWUFBWSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxHQUFHLENBQUMsT0FBTyxPQUFPLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUU7QUFDNUQsTUFBTSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoQyxJQUFJO0FBQ0osSUFBSSxPQUFPLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRztBQUMxRSxNQUFNLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUMzQixJQUFJLENBQUMsQ0FBQztBQUNOLEVBQUU7QUFDRixFQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLE1BQU0sS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwQyxJQUFJLE9BQU8sT0FBTyxFQUFFLENBQUMsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFBO0FBQ0Esa0JBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLGtCQUFBO0FBQ0Esa0JBQUE7QUFDQSxrQkFBQTtBQUNBLGtCQUFBO0FBQ0Esa0JBQUE7QUFDQSxrQkFBQTtBQUNBLGtCQUFBO0FBQ0EsbUJBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0Esd0JBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGdCQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGdCQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxjQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxjQUFBO0FBQ0EsZ0JBQUE7QUFDQSxjQUFBO0FBQ0EsWUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0Esb0JBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLHNCQUFBO0FBQ0Esc0JBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSx3QkFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQTtBQUNBLGdCQUFBO0FBQ0Esa0JBQUE7QUFDQSxvQkFBQTtBQUNBLG9CQUFBO0FBQ0Esb0JBQUE7QUFDQSxrQkFBQTtBQUNBLGdCQUFBO0FBQ0EsY0FBQTtBQUNBLDhCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxnQkFBQTtBQUNBLGtCQUFBO0FBQ0Esa0JBQUE7QUFDQSxvQkFBQTtBQUNBLG9CQUFBO0FBQ0Esb0JBQUE7QUFDQSxrQkFBQTtBQUNBLGtCQUFBO0FBQ0Esb0JBQUE7QUFDQSxvQkFBQTtBQUNBLG9CQUFBO0FBQ0Esa0JBQUE7QUFDQSxnQkFBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSx3QkFBQTtBQUNBLHdCQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0Esd0JBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSx3QkFBQTtBQUNBLFVBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxnQkFBQTtBQUNBLGtCQUFBO0FBQ0Esa0JBQUE7QUFDQSxrQkFBQTtBQUNBLGtCQUFBO0FBQ0Esa0JBQUE7QUFDQSxrQkFBQTtBQUNBLGtCQUFBO0FBQ0Esa0JBQUE7QUFDQSxrQkFBQTtBQUNBLGdCQUFBO0FBQ0EsZ0JBQUE7QUFDQSxjQUFBO0FBQ0EsWUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLHNCQUFBO0FBQ0Esd0JBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsOEJBQUE7QUFDQSxnQkFBQTtBQUNBLGdDQUFBO0FBQ0EsY0FBQTtBQUNBLGNBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSx3QkFBQTtBQUNBLE1BQUE7QUFDQSxzQkFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0Esb0JBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsWUFBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0E7QUFDQSxJQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxVQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxjQUFBO0FBQ0EsY0FBQTtBQUNBLFlBQUE7QUFDQSxVQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0E7QUFDQSxJQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiRDpcXFByb2plY3RzXFxHTldlYlNvZnQuVUlcXHBhY2thZ2VzXFx1aVxcZGlzdFxcY2h1bmstTkMzSklOSU0uY2pzIiwic291cmNlc0NvbnRlbnQiOltudWxsXX0=