@bazariodev/docket 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/LICENSE +21 -0
- package/README.md +985 -2
- package/dist/browser/constants.d.cts +14 -0
- package/dist/browser/constants.d.ts +14 -0
- package/dist/browser/index.cjs +192 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +29 -0
- package/dist/browser/index.d.ts +29 -0
- package/dist/browser/index.js +187 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/chunk-7ld72rnl.js +376 -0
- package/dist/chunk-7ld72rnl.js.map +1 -0
- package/dist/chunk-BLf-eCDO.cjs +53 -0
- package/dist/chunk-BLf-eCDO.cjs.map +1 -0
- package/dist/chunk-CEhpwtwJ.cjs +379 -0
- package/dist/chunk-CEhpwtwJ.cjs.map +1 -0
- package/dist/chunk-CSS3f4_M.js +46 -0
- package/dist/chunk-CSS3f4_M.js.map +1 -0
- package/dist/chunk-CXZYNALm.cjs +124 -0
- package/dist/chunk-CXZYNALm.cjs.map +1 -0
- package/dist/chunk-DYcNnkOV.js +50 -0
- package/dist/chunk-DYcNnkOV.js.map +1 -0
- package/dist/chunk-DkvWLziD.js +437 -0
- package/dist/chunk-DkvWLziD.js.map +1 -0
- package/dist/chunk-DqK_3eFr.cjs +53 -0
- package/dist/chunk-DqK_3eFr.cjs.map +1 -0
- package/dist/chunk-LRCHwVuE.js +110 -0
- package/dist/chunk-LRCHwVuE.js.map +1 -0
- package/dist/chunk-ieB8yTEn.cjs +439 -0
- package/dist/chunk-ieB8yTEn.cjs.map +1 -0
- package/dist/client/index.cjs +167 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +40 -0
- package/dist/client/index.d.ts +40 -0
- package/dist/client/index.js +165 -0
- package/dist/client/index.js.map +1 -0
- package/dist/constants.d.cts +4 -0
- package/dist/constants.d.ts +4 -0
- package/dist/core/constants.d.cts +43 -0
- package/dist/core/constants.d.ts +43 -0
- package/dist/devtools/index.cjs +37 -0
- package/dist/devtools/index.cjs.map +1 -0
- package/dist/devtools/index.d.cts +11 -0
- package/dist/devtools/index.d.ts +11 -0
- package/dist/devtools/index.js +35 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/export/index.cjs +139 -0
- package/dist/export/index.cjs.map +1 -0
- package/dist/export/index.d.cts +49 -0
- package/dist/export/index.d.ts +49 -0
- package/dist/export/index.js +137 -0
- package/dist/export/index.js.map +1 -0
- package/dist/history/index.cjs +30 -0
- package/dist/history/index.cjs.map +1 -0
- package/dist/history/index.d.cts +11 -0
- package/dist/history/index.d.ts +11 -0
- package/dist/history/index.js +28 -0
- package/dist/history/index.js.map +1 -0
- package/dist/index.cjs +14 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +159 -0
- package/dist/index.d.ts +159 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/indexeddb/index.cjs +26 -0
- package/dist/indexeddb/index.cjs.map +1 -0
- package/dist/indexeddb/index.d.cts +61 -0
- package/dist/indexeddb/index.d.ts +61 -0
- package/dist/indexeddb/index.js +23 -0
- package/dist/indexeddb/index.js.map +1 -0
- package/dist/redaction/index.cjs +154 -0
- package/dist/redaction/index.cjs.map +1 -0
- package/dist/redaction/index.d.cts +70 -0
- package/dist/redaction/index.d.ts +70 -0
- package/dist/redaction/index.js +152 -0
- package/dist/redaction/index.js.map +1 -0
- package/dist/sip/index.cjs +336 -0
- package/dist/sip/index.cjs.map +1 -0
- package/dist/sip/index.d.cts +34 -0
- package/dist/sip/index.d.ts +34 -0
- package/dist/sip/index.js +333 -0
- package/dist/sip/index.js.map +1 -0
- package/dist/storage/constants.d.cts +11 -0
- package/dist/storage/constants.d.ts +11 -0
- package/dist/storage/contracts.d.cts +31 -0
- package/dist/storage/contracts.d.ts +31 -0
- package/dist/upload/constants.d.cts +17 -0
- package/dist/upload/constants.d.ts +17 -0
- package/dist/upload/index.cjs +246 -0
- package/dist/upload/index.cjs.map +1 -0
- package/dist/upload/index.d.cts +51 -0
- package/dist/upload/index.d.ts +51 -0
- package/dist/upload/index.js +244 -0
- package/dist/upload/index.js.map +1 -0
- package/package.json +150 -3
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { L as LEVELS, a as LIMITS } from './chunk-CSS3f4_M.js';
|
|
2
|
+
|
|
3
|
+
const levelOrder = Object.values(LEVELS);
|
|
4
|
+
|
|
5
|
+
const scheduler = Object.freeze({
|
|
6
|
+
setTimeout: (callback, delay) => globalThis.setTimeout(callback, delay),
|
|
7
|
+
clearTimeout: (handle) => globalThis.clearTimeout(handle),
|
|
8
|
+
});
|
|
9
|
+
const levelRank = (level) => levelOrder.indexOf(level);
|
|
10
|
+
|
|
11
|
+
function assertLevel(level) {
|
|
12
|
+
if (levelRank(level) < 0) throw new TypeError('Invalid log level');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function assertStormLimit(value) {
|
|
16
|
+
if (
|
|
17
|
+
value !== undefined &&
|
|
18
|
+
value !== false &&
|
|
19
|
+
(!Number.isSafeInteger(value) || value < 1)
|
|
20
|
+
)
|
|
21
|
+
throw new TypeError('Invalid storm limit');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function positive(value, name) {
|
|
25
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
26
|
+
throw new TypeError(`${name} must be a positive safe integer`);
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function resolveLimits(limits = {}) {
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const [key, fallback] of Object.entries(LIMITS))
|
|
33
|
+
result[key] = positive(limits[key] ?? fallback, key);
|
|
34
|
+
return Object.freeze(result);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function report(callback, ...args) {
|
|
38
|
+
try {
|
|
39
|
+
const result = callback?.(...args);
|
|
40
|
+
if (result) Promise.resolve(result).catch(() => {});
|
|
41
|
+
} catch {
|
|
42
|
+
/* The reporter cannot interrupt cleanup. */
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function define(target, key, value) {
|
|
47
|
+
Object.defineProperty(target, key, {
|
|
48
|
+
value,
|
|
49
|
+
enumerable: true,
|
|
50
|
+
configurable: true,
|
|
51
|
+
writable: true,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function own(value, key) {
|
|
56
|
+
return Object.getOwnPropertyDescriptor(value, key)?.value;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function isError(value) {
|
|
60
|
+
try {
|
|
61
|
+
return Error.isError?.(value) || value instanceof Error;
|
|
62
|
+
} catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function randomHex(length) {
|
|
68
|
+
if (!globalThis.crypto?.getRandomValues)
|
|
69
|
+
throw new Error('Cryptographic randomness is unavailable');
|
|
70
|
+
return Array.from(
|
|
71
|
+
globalThis.crypto.getRandomValues(new Uint8Array(length)),
|
|
72
|
+
(byte) => byte.toString(16).padStart(2, '0'),
|
|
73
|
+
).join('');
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function copyBindings(value = {}) {
|
|
77
|
+
const result = {};
|
|
78
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
79
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
80
|
+
if (
|
|
81
|
+
typeof key === 'string' &&
|
|
82
|
+
descriptor?.enumerable &&
|
|
83
|
+
Object.hasOwn(descriptor, 'value')
|
|
84
|
+
)
|
|
85
|
+
Object.defineProperty(result, key, descriptor);
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function validateQuery(query = {}) {
|
|
91
|
+
const { from, to, areas } = query;
|
|
92
|
+
if (
|
|
93
|
+
(from !== undefined && !Number.isFinite(from)) ||
|
|
94
|
+
(to !== undefined && !Number.isFinite(to)) ||
|
|
95
|
+
(from ?? -Infinity) > (to ?? Infinity)
|
|
96
|
+
)
|
|
97
|
+
throw new TypeError('Invalid record time range');
|
|
98
|
+
if (
|
|
99
|
+
areas !== undefined &&
|
|
100
|
+
(!Array.isArray(areas) || areas.some((area) => typeof area !== 'string'))
|
|
101
|
+
)
|
|
102
|
+
throw new TypeError('Invalid record areas');
|
|
103
|
+
return (record) =>
|
|
104
|
+
(!areas || areas.includes(record.area)) &&
|
|
105
|
+
record.at >= (from ?? -Infinity) &&
|
|
106
|
+
record.at <= (to ?? Infinity);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export { assertLevel as a, report as b, assertStormLimit as c, define as d, randomHex as e, copyBindings as f, isError as i, levelRank as l, own as o, positive as p, resolveLimits as r, scheduler as s, validateQuery as v };
|
|
110
|
+
//# sourceMappingURL=chunk-LRCHwVuE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-LRCHwVuE.js","sources":["../src/core/common.js"],"sourcesContent":["import { LEVELS, LIMITS } from './constants.js';\n\nconst levelOrder = Object.values(LEVELS);\n\nexport const scheduler = Object.freeze({\n setTimeout: (callback, delay) => globalThis.setTimeout(callback, delay),\n clearTimeout: (handle) => globalThis.clearTimeout(handle),\n});\nexport const levelRank = (level) => levelOrder.indexOf(level);\n\nexport function assertLevel(level) {\n if (levelRank(level) < 0) throw new TypeError('Invalid log level');\n}\n\nexport function assertStormLimit(value) {\n if (\n value !== undefined &&\n value !== false &&\n (!Number.isSafeInteger(value) || value < 1)\n )\n throw new TypeError('Invalid storm limit');\n}\n\nexport function positive(value, name) {\n if (!Number.isSafeInteger(value) || value < 1)\n throw new TypeError(`${name} must be a positive safe integer`);\n return value;\n}\n\nexport function resolveLimits(limits = {}) {\n const result = {};\n for (const [key, fallback] of Object.entries(LIMITS))\n result[key] = positive(limits[key] ?? fallback, key);\n return Object.freeze(result);\n}\n\nexport function report(callback, ...args) {\n try {\n const result = callback?.(...args);\n if (result) Promise.resolve(result).catch(() => {});\n } catch {\n /* The reporter cannot interrupt cleanup. */\n }\n}\n\nexport function define(target, key, value) {\n Object.defineProperty(target, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n}\n\nexport function own(value, key) {\n return Object.getOwnPropertyDescriptor(value, key)?.value;\n}\n\nexport function isError(value) {\n try {\n return Error.isError?.(value) || value instanceof Error;\n } catch {\n return false;\n }\n}\n\nexport function randomHex(length) {\n if (!globalThis.crypto?.getRandomValues)\n throw new Error('Cryptographic randomness is unavailable');\n return Array.from(\n globalThis.crypto.getRandomValues(new Uint8Array(length)),\n (byte) => byte.toString(16).padStart(2, '0'),\n ).join('');\n}\n\nexport function copyBindings(value = {}) {\n const result = {};\n for (const key of Reflect.ownKeys(value)) {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (\n typeof key === 'string' &&\n descriptor?.enumerable &&\n Object.hasOwn(descriptor, 'value')\n )\n Object.defineProperty(result, key, descriptor);\n }\n return result;\n}\n\nexport function validateQuery(query = {}) {\n const { from, to, areas } = query;\n if (\n (from !== undefined && !Number.isFinite(from)) ||\n (to !== undefined && !Number.isFinite(to)) ||\n (from ?? -Infinity) > (to ?? Infinity)\n )\n throw new TypeError('Invalid record time range');\n if (\n areas !== undefined &&\n (!Array.isArray(areas) || areas.some((area) => typeof area !== 'string'))\n )\n throw new TypeError('Invalid record areas');\n return (record) =>\n (!areas || areas.includes(record.area)) &&\n record.at >= (from ?? -Infinity) &&\n record.at <= (to ?? Infinity);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var common = require('./chunk-CXZYNALm.cjs');
|
|
4
|
+
var constants = require('./chunk-BLf-eCDO.cjs');
|
|
5
|
+
var conversion = require('./chunk-CEhpwtwJ.cjs');
|
|
6
|
+
|
|
7
|
+
const LOGGING_ERRORS = /* @__PURE__ */ Object.freeze({
|
|
8
|
+
[constants.LOGGING_ERROR_CODES.RECURSIVE_LOGGING]: 'Recursive logging is rejected',
|
|
9
|
+
[constants.LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT]:
|
|
10
|
+
'Root logger cache exceeds 1000 pairs',
|
|
11
|
+
[constants.LOGGING_ERROR_CODES.STOPPED]: 'Logging is stopped',
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
function loggingError(code) {
|
|
15
|
+
return Object.assign(new Error(LOGGING_ERRORS[code]), { code });
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function createLevels(options, reportError) {
|
|
19
|
+
const { now, scheduler, levelStorage, areas } = options;
|
|
20
|
+
const maxDuration = common.positive(
|
|
21
|
+
options.maxOverrideMs ?? constants.LOGGING_LIMITS.DEFAULT_LEVEL_OVERRIDE_MS,
|
|
22
|
+
'maxOverrideMs',
|
|
23
|
+
);
|
|
24
|
+
const states = new Map();
|
|
25
|
+
let stopped = false;
|
|
26
|
+
for (const { id, level = 'info' } of areas) {
|
|
27
|
+
common.assertLevel(level);
|
|
28
|
+
if (typeof id !== 'string' || !id || states.has(id))
|
|
29
|
+
throw new TypeError('Areas must have unique non-empty IDs');
|
|
30
|
+
states.set(id, {
|
|
31
|
+
level,
|
|
32
|
+
defaultLevel: level,
|
|
33
|
+
rank: common.levelRank(level),
|
|
34
|
+
until: undefined,
|
|
35
|
+
timer: undefined,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const requireArea = (area) => {
|
|
39
|
+
const state = states.get(area);
|
|
40
|
+
if (!state) throw new TypeError('Unknown log area');
|
|
41
|
+
return state;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
function save() {
|
|
45
|
+
if (!levelStorage || stopped) return;
|
|
46
|
+
const overrides = {};
|
|
47
|
+
for (const [id, state] of states)
|
|
48
|
+
if (state.until)
|
|
49
|
+
common.define(overrides, id, { level: state.level, until: state.until });
|
|
50
|
+
try {
|
|
51
|
+
levelStorage.storage.setItem(levelStorage.key, JSON.stringify(overrides));
|
|
52
|
+
} catch (error) {
|
|
53
|
+
reportError(error, constants.LOGGING_ERROR_SOURCES.STORAGE);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function reset(state) {
|
|
58
|
+
scheduler.clearTimeout(state.timer);
|
|
59
|
+
state.timer = undefined;
|
|
60
|
+
state.until = undefined;
|
|
61
|
+
state.level = state.defaultLevel;
|
|
62
|
+
state.rank = common.levelRank(state.level);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function apply(state, level, until) {
|
|
66
|
+
reset(state);
|
|
67
|
+
state.level = level;
|
|
68
|
+
state.rank = common.levelRank(level);
|
|
69
|
+
state.until = until;
|
|
70
|
+
state.timer = scheduler.setTimeout(
|
|
71
|
+
() => {
|
|
72
|
+
if (stopped) return;
|
|
73
|
+
if (until > now()) {
|
|
74
|
+
apply(state, level, until);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
reset(state);
|
|
78
|
+
save();
|
|
79
|
+
},
|
|
80
|
+
Math.min(constants.LOGGING_LIMITS.MAX_TIMER_DELAY_MS, Math.max(0, until - now())),
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function reloadLevels() {
|
|
85
|
+
if (stopped) return;
|
|
86
|
+
for (const state of states.values()) reset(state);
|
|
87
|
+
if (!levelStorage) return;
|
|
88
|
+
try {
|
|
89
|
+
const saved = JSON.parse(
|
|
90
|
+
levelStorage.storage.getItem(levelStorage.key) ?? '{}',
|
|
91
|
+
);
|
|
92
|
+
if (!saved || typeof saved !== 'object') return;
|
|
93
|
+
const time = now();
|
|
94
|
+
for (const [id, state] of states) {
|
|
95
|
+
const override = Object.hasOwn(saved, id) && saved[id];
|
|
96
|
+
if (
|
|
97
|
+
override &&
|
|
98
|
+
common.levelRank(override.level) >= 0 &&
|
|
99
|
+
Number.isFinite(override.until) &&
|
|
100
|
+
override.until > time
|
|
101
|
+
)
|
|
102
|
+
apply(
|
|
103
|
+
state,
|
|
104
|
+
override.level,
|
|
105
|
+
Math.min(override.until, time + maxDuration),
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
} catch (error) {
|
|
109
|
+
reportError(error, constants.LOGGING_ERROR_SOURCES.STORAGE);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
reloadLevels();
|
|
113
|
+
return {
|
|
114
|
+
requireArea,
|
|
115
|
+
enabled(area, level) {
|
|
116
|
+
const state = requireArea(area);
|
|
117
|
+
if (state.until && state.until <= now()) {
|
|
118
|
+
reset(state);
|
|
119
|
+
save();
|
|
120
|
+
}
|
|
121
|
+
return common.levelRank(level) >= state.rank;
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
setLevel(area, level, { durationMs = maxDuration } = {}) {
|
|
125
|
+
common.assertLevel(level);
|
|
126
|
+
common.positive(durationMs, 'durationMs');
|
|
127
|
+
const state = requireArea(area);
|
|
128
|
+
if (stopped) return;
|
|
129
|
+
apply(state, level, now() + Math.min(durationMs, maxDuration));
|
|
130
|
+
save();
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
resetLevel(area) {
|
|
134
|
+
if (stopped) return;
|
|
135
|
+
if (area !== undefined) reset(requireArea(area));
|
|
136
|
+
else for (const state of states.values()) reset(state);
|
|
137
|
+
save();
|
|
138
|
+
},
|
|
139
|
+
reloadLevels,
|
|
140
|
+
getLevels() {
|
|
141
|
+
const result = {};
|
|
142
|
+
for (const [id, state] of states) {
|
|
143
|
+
if (state.until && state.until <= now()) {
|
|
144
|
+
reset(state);
|
|
145
|
+
save();
|
|
146
|
+
}
|
|
147
|
+
common.define(
|
|
148
|
+
result,
|
|
149
|
+
id,
|
|
150
|
+
Object.freeze({
|
|
151
|
+
level: state.level,
|
|
152
|
+
defaultLevel: state.defaultLevel,
|
|
153
|
+
...(state.until ? { until: state.until } : {}),
|
|
154
|
+
}),
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
return Object.freeze(result);
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
stop() {
|
|
161
|
+
stopped = true;
|
|
162
|
+
for (const state of states.values()) scheduler.clearTimeout(state.timer);
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function createLogging(options) {
|
|
168
|
+
if (
|
|
169
|
+
!Array.isArray(options?.areas) ||
|
|
170
|
+
!options.redactor ||
|
|
171
|
+
typeof options.redactor.redact !== 'function'
|
|
172
|
+
)
|
|
173
|
+
throw new TypeError('Areas and an explicit redactor are required');
|
|
174
|
+
const {
|
|
175
|
+
redactor,
|
|
176
|
+
now = Date.now,
|
|
177
|
+
monotonicNow = () => globalThis.performance?.now() ?? Date.now(),
|
|
178
|
+
scheduler = common.scheduler,
|
|
179
|
+
stormLimit = constants.LOGGING_LIMITS.DEFAULT_STORM_LIMIT,
|
|
180
|
+
} = options;
|
|
181
|
+
const limits = common.resolveLimits(redactor.limits);
|
|
182
|
+
if (
|
|
183
|
+
!redactor.limits ||
|
|
184
|
+
Object.keys(limits).some((key) => !Object.hasOwn(redactor.limits, key))
|
|
185
|
+
)
|
|
186
|
+
throw new TypeError('Redactor limits are required');
|
|
187
|
+
common.assertStormLimit(stormLimit);
|
|
188
|
+
const runId = options.createRunId?.() ?? common.randomHex(16);
|
|
189
|
+
if (typeof runId !== 'string' || !runId)
|
|
190
|
+
throw new TypeError('Invalid run ID');
|
|
191
|
+
const sinks = new Set();
|
|
192
|
+
const roots = new Map();
|
|
193
|
+
const storms = new Map();
|
|
194
|
+
let context = common.copyBindings(options.context);
|
|
195
|
+
let seq = 0;
|
|
196
|
+
let closed = false;
|
|
197
|
+
let busy = false;
|
|
198
|
+
let scopeReported = false;
|
|
199
|
+
let reporting = false;
|
|
200
|
+
let stormTimer;
|
|
201
|
+
let stopPromise;
|
|
202
|
+
|
|
203
|
+
function onError(error, source) {
|
|
204
|
+
if (reporting) return;
|
|
205
|
+
reporting = true;
|
|
206
|
+
const wasBusy = busy;
|
|
207
|
+
busy = true;
|
|
208
|
+
common.report(options.onError, error, source);
|
|
209
|
+
busy = wasBusy;
|
|
210
|
+
reporting = false;
|
|
211
|
+
}
|
|
212
|
+
for (const sink of options.sinks ?? []) addSink(sink);
|
|
213
|
+
const levels = createLevels({ ...options, now, scheduler }, onError);
|
|
214
|
+
|
|
215
|
+
function emit(area, scope, binding, level, message, data, bypass = false) {
|
|
216
|
+
try {
|
|
217
|
+
if (busy) {
|
|
218
|
+
onError(
|
|
219
|
+
loggingError(constants.LOGGING_ERROR_CODES.RECURSIVE_LOGGING),
|
|
220
|
+
constants.LOGGING_ERROR_SOURCES.REENTRY,
|
|
221
|
+
);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (
|
|
225
|
+
closed ||
|
|
226
|
+
options.isActive?.() === false ||
|
|
227
|
+
sinks.size === 0 ||
|
|
228
|
+
(!bypass && !levels.enabled(area, level))
|
|
229
|
+
)
|
|
230
|
+
return;
|
|
231
|
+
if (!bypass && stormLimit !== false) {
|
|
232
|
+
const key = JSON.stringify([area, scope]);
|
|
233
|
+
let counter = storms.get(key);
|
|
234
|
+
if (!counter) {
|
|
235
|
+
const cacheKey =
|
|
236
|
+
storms.size < constants.LOGGING_LIMITS.STORM_SCOPE_PAIRS ? key : 'overflow';
|
|
237
|
+
counter = storms.get(cacheKey);
|
|
238
|
+
if (!counter) {
|
|
239
|
+
counter = {
|
|
240
|
+
area,
|
|
241
|
+
scope,
|
|
242
|
+
start: monotonicNow(),
|
|
243
|
+
count: 0,
|
|
244
|
+
dropped: 0,
|
|
245
|
+
};
|
|
246
|
+
storms.set(cacheKey, counter);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const time = monotonicNow();
|
|
250
|
+
if (
|
|
251
|
+
time - counter.start >= constants.LOGGING_LIMITS.STORM_WINDOW_MS ||
|
|
252
|
+
time < counter.start
|
|
253
|
+
) {
|
|
254
|
+
counter.start = time;
|
|
255
|
+
counter.count = 0;
|
|
256
|
+
}
|
|
257
|
+
if (counter.count++ >= stormLimit) {
|
|
258
|
+
counter.dropped++;
|
|
259
|
+
if (stormTimer === undefined)
|
|
260
|
+
stormTimer = scheduler.setTimeout(
|
|
261
|
+
summarize,
|
|
262
|
+
constants.LOGGING_LIMITS.STORM_SUMMARY_DELAY_MS,
|
|
263
|
+
);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
const registrations = Array.from(sinks);
|
|
268
|
+
busy = true;
|
|
269
|
+
try {
|
|
270
|
+
let value;
|
|
271
|
+
try {
|
|
272
|
+
value = typeof data === 'function' ? data() : data;
|
|
273
|
+
} catch (error) {
|
|
274
|
+
onError(error, constants.LOGGING_ERROR_SOURCES.DATA);
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
if (options.isActive?.() === false || sinks.size === 0) return;
|
|
278
|
+
let record;
|
|
279
|
+
try {
|
|
280
|
+
record = conversion.ownRecord(
|
|
281
|
+
redactor.redact({
|
|
282
|
+
runId,
|
|
283
|
+
seq: ++seq,
|
|
284
|
+
at: now(),
|
|
285
|
+
area,
|
|
286
|
+
scope,
|
|
287
|
+
level,
|
|
288
|
+
message,
|
|
289
|
+
context: { ...context, ...binding },
|
|
290
|
+
data: value,
|
|
291
|
+
}),
|
|
292
|
+
limits,
|
|
293
|
+
);
|
|
294
|
+
} catch (error) {
|
|
295
|
+
onError(error, constants.LOGGING_ERROR_SOURCES.REDACTOR);
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (options.isActive?.() === false) return;
|
|
299
|
+
for (const registration of registrations) {
|
|
300
|
+
if (options.isActive?.() === false || !sinks.has(registration))
|
|
301
|
+
continue;
|
|
302
|
+
try {
|
|
303
|
+
registration.sink.write(record);
|
|
304
|
+
} catch (error) {
|
|
305
|
+
onError(error, constants.LOGGING_ERROR_SOURCES.SINK);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
} finally {
|
|
309
|
+
busy = false;
|
|
310
|
+
}
|
|
311
|
+
} catch (error) {
|
|
312
|
+
busy = false;
|
|
313
|
+
onError(error, constants.LOGGING_ERROR_SOURCES.DATA);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
function summarize() {
|
|
318
|
+
stormTimer = undefined;
|
|
319
|
+
for (const counter of storms.values()) {
|
|
320
|
+
if (!counter.dropped) continue;
|
|
321
|
+
const dropped = counter.dropped;
|
|
322
|
+
counter.dropped = 0;
|
|
323
|
+
emit(
|
|
324
|
+
counter.area,
|
|
325
|
+
counter.scope,
|
|
326
|
+
{},
|
|
327
|
+
'warn',
|
|
328
|
+
'logging.suppressed',
|
|
329
|
+
{ scope: counter.scope, dropped },
|
|
330
|
+
true,
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
function logger(area, scope, binding = {}) {
|
|
336
|
+
const result = {};
|
|
337
|
+
for (const level of Object.values(constants.LEVELS))
|
|
338
|
+
result[level] = (message, data) =>
|
|
339
|
+
emit(area, scope, binding, level, message, data);
|
|
340
|
+
result.child = ({
|
|
341
|
+
scope: childScope = scope,
|
|
342
|
+
context: childContext = {},
|
|
343
|
+
} = {}) =>
|
|
344
|
+
logger(area, childScope, { ...binding, ...common.copyBindings(childContext) });
|
|
345
|
+
return Object.freeze(result);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function addSink(sink) {
|
|
349
|
+
if (!sink || typeof sink.write !== 'function')
|
|
350
|
+
throw new TypeError('A sink must have write');
|
|
351
|
+
if (closed) throw loggingError(constants.LOGGING_ERROR_CODES.STOPPED);
|
|
352
|
+
const registration = { sink };
|
|
353
|
+
sinks.add(registration);
|
|
354
|
+
return () => {
|
|
355
|
+
sinks.delete(registration);
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
async function lifecycle(registrations, methods) {
|
|
360
|
+
const failures = [];
|
|
361
|
+
for (const method of methods) {
|
|
362
|
+
await Promise.all(
|
|
363
|
+
registrations.map(async ({ sink }) => {
|
|
364
|
+
try {
|
|
365
|
+
const previous = busy;
|
|
366
|
+
busy = true;
|
|
367
|
+
let result;
|
|
368
|
+
try {
|
|
369
|
+
result = sink[method]?.();
|
|
370
|
+
} finally {
|
|
371
|
+
busy = previous;
|
|
372
|
+
}
|
|
373
|
+
await result;
|
|
374
|
+
} catch (error) {
|
|
375
|
+
failures.push(error);
|
|
376
|
+
onError(error, constants.LOGGING_ERROR_SOURCES.SINK);
|
|
377
|
+
}
|
|
378
|
+
}),
|
|
379
|
+
);
|
|
380
|
+
}
|
|
381
|
+
if (failures.length)
|
|
382
|
+
throw new AggregateError(failures, 'Logging lifecycle failed');
|
|
383
|
+
}
|
|
384
|
+
return Object.freeze({
|
|
385
|
+
runId,
|
|
386
|
+
getLogger(area, scope) {
|
|
387
|
+
levels.requireArea(area);
|
|
388
|
+
if (typeof scope !== 'string')
|
|
389
|
+
throw new TypeError('Scope must be a string');
|
|
390
|
+
const key = JSON.stringify([area, scope]);
|
|
391
|
+
const cached = roots.get(key);
|
|
392
|
+
if (cached) return cached;
|
|
393
|
+
const created = logger(area, scope);
|
|
394
|
+
if (roots.size < constants.LOGGING_LIMITS.ROOT_LOGGER_CACHE_PAIRS) {
|
|
395
|
+
roots.set(key, created);
|
|
396
|
+
return created;
|
|
397
|
+
}
|
|
398
|
+
if (!scopeReported) {
|
|
399
|
+
scopeReported = true;
|
|
400
|
+
onError(
|
|
401
|
+
loggingError(constants.LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT),
|
|
402
|
+
constants.LOGGING_ERROR_SOURCES.SCOPE,
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
return created;
|
|
406
|
+
},
|
|
407
|
+
|
|
408
|
+
setContext(values) {
|
|
409
|
+
context = { ...context, ...common.copyBindings(values) };
|
|
410
|
+
for (const key of Object.keys(context))
|
|
411
|
+
if (context[key] === undefined) delete context[key];
|
|
412
|
+
},
|
|
413
|
+
setLevel: levels.setLevel,
|
|
414
|
+
resetLevel: levels.resetLevel,
|
|
415
|
+
reloadLevels: levels.reloadLevels,
|
|
416
|
+
getLevels: levels.getLevels,
|
|
417
|
+
addSink,
|
|
418
|
+
flush() {
|
|
419
|
+
const registrations = Array.from(sinks);
|
|
420
|
+
return Promise.resolve().then(() => lifecycle(registrations, ['flush']));
|
|
421
|
+
},
|
|
422
|
+
|
|
423
|
+
stop() {
|
|
424
|
+
if (!stopPromise) {
|
|
425
|
+
closed = true;
|
|
426
|
+
levels.stop();
|
|
427
|
+
scheduler.clearTimeout(stormTimer);
|
|
428
|
+
const registrations = Array.from(sinks);
|
|
429
|
+
stopPromise = Promise.resolve().then(() =>
|
|
430
|
+
lifecycle(registrations, ['flush', 'stop']),
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
return stopPromise;
|
|
434
|
+
},
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
exports.createLogging = createLogging;
|
|
439
|
+
//# sourceMappingURL=chunk-ieB8yTEn.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-ieB8yTEn.cjs","sources":["../src/core/errors.js","../src/core/levels.js","../src/core/hub.js"],"sourcesContent":["import { LOGGING_ERROR_CODES } from './constants.js';\n\nexport const LOGGING_ERRORS = /* @__PURE__ */ Object.freeze({\n [LOGGING_ERROR_CODES.RECURSIVE_LOGGING]: 'Recursive logging is rejected',\n [LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT]:\n 'Root logger cache exceeds 1000 pairs',\n [LOGGING_ERROR_CODES.STOPPED]: 'Logging is stopped',\n});\n\nexport function loggingError(code) {\n return Object.assign(new Error(LOGGING_ERRORS[code]), { code });\n}\n","import { assertLevel, define, levelRank, positive } from './common.js';\nimport { LOGGING_ERROR_SOURCES, LOGGING_LIMITS } from './constants.js';\n\nexport function createLevels(options, reportError) {\n const { now, scheduler, levelStorage, areas } = options;\n const maxDuration = positive(\n options.maxOverrideMs ?? LOGGING_LIMITS.DEFAULT_LEVEL_OVERRIDE_MS,\n 'maxOverrideMs',\n );\n const states = new Map();\n let stopped = false;\n for (const { id, level = 'info' } of areas) {\n assertLevel(level);\n if (typeof id !== 'string' || !id || states.has(id))\n throw new TypeError('Areas must have unique non-empty IDs');\n states.set(id, {\n level,\n defaultLevel: level,\n rank: levelRank(level),\n until: undefined,\n timer: undefined,\n });\n }\n const requireArea = (area) => {\n const state = states.get(area);\n if (!state) throw new TypeError('Unknown log area');\n return state;\n };\n\n function save() {\n if (!levelStorage || stopped) return;\n const overrides = {};\n for (const [id, state] of states)\n if (state.until)\n define(overrides, id, { level: state.level, until: state.until });\n try {\n levelStorage.storage.setItem(levelStorage.key, JSON.stringify(overrides));\n } catch (error) {\n reportError(error, LOGGING_ERROR_SOURCES.STORAGE);\n }\n }\n\n function reset(state) {\n scheduler.clearTimeout(state.timer);\n state.timer = undefined;\n state.until = undefined;\n state.level = state.defaultLevel;\n state.rank = levelRank(state.level);\n }\n\n function apply(state, level, until) {\n reset(state);\n state.level = level;\n state.rank = levelRank(level);\n state.until = until;\n state.timer = scheduler.setTimeout(\n () => {\n if (stopped) return;\n if (until > now()) {\n apply(state, level, until);\n return;\n }\n reset(state);\n save();\n },\n Math.min(LOGGING_LIMITS.MAX_TIMER_DELAY_MS, Math.max(0, until - now())),\n );\n }\n\n function reloadLevels() {\n if (stopped) return;\n for (const state of states.values()) reset(state);\n if (!levelStorage) return;\n try {\n const saved = JSON.parse(\n levelStorage.storage.getItem(levelStorage.key) ?? '{}',\n );\n if (!saved || typeof saved !== 'object') return;\n const time = now();\n for (const [id, state] of states) {\n const override = Object.hasOwn(saved, id) && saved[id];\n if (\n override &&\n levelRank(override.level) >= 0 &&\n Number.isFinite(override.until) &&\n override.until > time\n )\n apply(\n state,\n override.level,\n Math.min(override.until, time + maxDuration),\n );\n }\n } catch (error) {\n reportError(error, LOGGING_ERROR_SOURCES.STORAGE);\n }\n }\n reloadLevels();\n return {\n requireArea,\n enabled(area, level) {\n const state = requireArea(area);\n if (state.until && state.until <= now()) {\n reset(state);\n save();\n }\n return levelRank(level) >= state.rank;\n },\n\n setLevel(area, level, { durationMs = maxDuration } = {}) {\n assertLevel(level);\n positive(durationMs, 'durationMs');\n const state = requireArea(area);\n if (stopped) return;\n apply(state, level, now() + Math.min(durationMs, maxDuration));\n save();\n },\n\n resetLevel(area) {\n if (stopped) return;\n if (area !== undefined) reset(requireArea(area));\n else for (const state of states.values()) reset(state);\n save();\n },\n reloadLevels,\n getLevels() {\n const result = {};\n for (const [id, state] of states) {\n if (state.until && state.until <= now()) {\n reset(state);\n save();\n }\n define(\n result,\n id,\n Object.freeze({\n level: state.level,\n defaultLevel: state.defaultLevel,\n ...(state.until ? { until: state.until } : {}),\n }),\n );\n }\n return Object.freeze(result);\n },\n\n stop() {\n stopped = true;\n for (const state of states.values()) scheduler.clearTimeout(state.timer);\n },\n };\n}\n","import {\n assertStormLimit,\n copyBindings,\n scheduler as hostScheduler,\n randomHex,\n report,\n resolveLimits,\n} from './common.js';\nimport {\n LEVELS,\n LOGGING_ERROR_CODES,\n LOGGING_ERROR_SOURCES,\n LOGGING_LIMITS,\n} from './constants.js';\nimport { ownRecord } from './conversion.js';\nimport { loggingError } from './errors.js';\nimport { createLevels } from './levels.js';\n\nexport function createLogging(options) {\n if (\n !Array.isArray(options?.areas) ||\n !options.redactor ||\n typeof options.redactor.redact !== 'function'\n )\n throw new TypeError('Areas and an explicit redactor are required');\n const {\n redactor,\n now = Date.now,\n monotonicNow = () => globalThis.performance?.now() ?? Date.now(),\n scheduler = hostScheduler,\n stormLimit = LOGGING_LIMITS.DEFAULT_STORM_LIMIT,\n } = options;\n const limits = resolveLimits(redactor.limits);\n if (\n !redactor.limits ||\n Object.keys(limits).some((key) => !Object.hasOwn(redactor.limits, key))\n )\n throw new TypeError('Redactor limits are required');\n assertStormLimit(stormLimit);\n const runId = options.createRunId?.() ?? randomHex(16);\n if (typeof runId !== 'string' || !runId)\n throw new TypeError('Invalid run ID');\n const sinks = new Set();\n const roots = new Map();\n const storms = new Map();\n let context = copyBindings(options.context);\n let seq = 0;\n let closed = false;\n let busy = false;\n let scopeReported = false;\n let reporting = false;\n let stormTimer;\n let stopPromise;\n\n function onError(error, source) {\n if (reporting) return;\n reporting = true;\n const wasBusy = busy;\n busy = true;\n report(options.onError, error, source);\n busy = wasBusy;\n reporting = false;\n }\n for (const sink of options.sinks ?? []) addSink(sink);\n const levels = createLevels({ ...options, now, scheduler }, onError);\n\n function emit(area, scope, binding, level, message, data, bypass = false) {\n try {\n if (busy) {\n onError(\n loggingError(LOGGING_ERROR_CODES.RECURSIVE_LOGGING),\n LOGGING_ERROR_SOURCES.REENTRY,\n );\n return;\n }\n if (\n closed ||\n options.isActive?.() === false ||\n sinks.size === 0 ||\n (!bypass && !levels.enabled(area, level))\n )\n return;\n if (!bypass && stormLimit !== false) {\n const key = JSON.stringify([area, scope]);\n let counter = storms.get(key);\n if (!counter) {\n const cacheKey =\n storms.size < LOGGING_LIMITS.STORM_SCOPE_PAIRS ? key : 'overflow';\n counter = storms.get(cacheKey);\n if (!counter) {\n counter = {\n area,\n scope,\n start: monotonicNow(),\n count: 0,\n dropped: 0,\n };\n storms.set(cacheKey, counter);\n }\n }\n const time = monotonicNow();\n if (\n time - counter.start >= LOGGING_LIMITS.STORM_WINDOW_MS ||\n time < counter.start\n ) {\n counter.start = time;\n counter.count = 0;\n }\n if (counter.count++ >= stormLimit) {\n counter.dropped++;\n if (stormTimer === undefined)\n stormTimer = scheduler.setTimeout(\n summarize,\n LOGGING_LIMITS.STORM_SUMMARY_DELAY_MS,\n );\n return;\n }\n }\n const registrations = Array.from(sinks);\n busy = true;\n try {\n let value;\n try {\n value = typeof data === 'function' ? data() : data;\n } catch (error) {\n onError(error, LOGGING_ERROR_SOURCES.DATA);\n return;\n }\n if (options.isActive?.() === false || sinks.size === 0) return;\n let record;\n try {\n record = ownRecord(\n redactor.redact({\n runId,\n seq: ++seq,\n at: now(),\n area,\n scope,\n level,\n message,\n context: { ...context, ...binding },\n data: value,\n }),\n limits,\n );\n } catch (error) {\n onError(error, LOGGING_ERROR_SOURCES.REDACTOR);\n return;\n }\n if (options.isActive?.() === false) return;\n for (const registration of registrations) {\n if (options.isActive?.() === false || !sinks.has(registration))\n continue;\n try {\n registration.sink.write(record);\n } catch (error) {\n onError(error, LOGGING_ERROR_SOURCES.SINK);\n }\n }\n } finally {\n busy = false;\n }\n } catch (error) {\n busy = false;\n onError(error, LOGGING_ERROR_SOURCES.DATA);\n }\n }\n\n function summarize() {\n stormTimer = undefined;\n for (const counter of storms.values()) {\n if (!counter.dropped) continue;\n const dropped = counter.dropped;\n counter.dropped = 0;\n emit(\n counter.area,\n counter.scope,\n {},\n 'warn',\n 'logging.suppressed',\n { scope: counter.scope, dropped },\n true,\n );\n }\n }\n\n function logger(area, scope, binding = {}) {\n const result = {};\n for (const level of Object.values(LEVELS))\n result[level] = (message, data) =>\n emit(area, scope, binding, level, message, data);\n result.child = ({\n scope: childScope = scope,\n context: childContext = {},\n } = {}) =>\n logger(area, childScope, { ...binding, ...copyBindings(childContext) });\n return Object.freeze(result);\n }\n\n function addSink(sink) {\n if (!sink || typeof sink.write !== 'function')\n throw new TypeError('A sink must have write');\n if (closed) throw loggingError(LOGGING_ERROR_CODES.STOPPED);\n const registration = { sink };\n sinks.add(registration);\n return () => {\n sinks.delete(registration);\n };\n }\n\n async function lifecycle(registrations, methods) {\n const failures = [];\n for (const method of methods) {\n await Promise.all(\n registrations.map(async ({ sink }) => {\n try {\n const previous = busy;\n busy = true;\n let result;\n try {\n result = sink[method]?.();\n } finally {\n busy = previous;\n }\n await result;\n } catch (error) {\n failures.push(error);\n onError(error, LOGGING_ERROR_SOURCES.SINK);\n }\n }),\n );\n }\n if (failures.length)\n throw new AggregateError(failures, 'Logging lifecycle failed');\n }\n return Object.freeze({\n runId,\n getLogger(area, scope) {\n levels.requireArea(area);\n if (typeof scope !== 'string')\n throw new TypeError('Scope must be a string');\n const key = JSON.stringify([area, scope]);\n const cached = roots.get(key);\n if (cached) return cached;\n const created = logger(area, scope);\n if (roots.size < LOGGING_LIMITS.ROOT_LOGGER_CACHE_PAIRS) {\n roots.set(key, created);\n return created;\n }\n if (!scopeReported) {\n scopeReported = true;\n onError(\n loggingError(LOGGING_ERROR_CODES.ROOT_LOGGER_CACHE_LIMIT),\n LOGGING_ERROR_SOURCES.SCOPE,\n );\n }\n return created;\n },\n\n setContext(values) {\n context = { ...context, ...copyBindings(values) };\n for (const key of Object.keys(context))\n if (context[key] === undefined) delete context[key];\n },\n setLevel: levels.setLevel,\n resetLevel: levels.resetLevel,\n reloadLevels: levels.reloadLevels,\n getLevels: levels.getLevels,\n addSink,\n flush() {\n const registrations = Array.from(sinks);\n return Promise.resolve().then(() => lifecycle(registrations, ['flush']));\n },\n\n stop() {\n if (!stopPromise) {\n closed = true;\n levels.stop();\n scheduler.clearTimeout(stormTimer);\n const registrations = Array.from(sinks);\n stopPromise = Promise.resolve().then(() =>\n lifecycle(registrations, ['flush', 'stop']),\n );\n }\n return stopPromise;\n },\n });\n}\n"],"names":["LOGGING_ERROR_CODES","positive","LOGGING_LIMITS","assertLevel","levelRank","define","LOGGING_ERROR_SOURCES","hostScheduler","resolveLimits","assertStormLimit","randomHex","copyBindings","report","ownRecord","LEVELS"],"mappings":";;;;;;AAEO,MAAM,cAAc,mBAAmB,MAAM,CAAC,MAAM,CAAC;AAC5D,EAAE,CAACA,6BAAmB,CAAC,iBAAiB,GAAG,+BAA+B;AAC1E,EAAE,CAACA,6BAAmB,CAAC,uBAAuB;AAC9C,IAAI,sCAAsC;AAC1C,EAAE,CAACA,6BAAmB,CAAC,OAAO,GAAG,oBAAoB;AACrD,CAAC,CAAC;;AAEK,SAAS,YAAY,CAAC,IAAI,EAAE;AACnC,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;AACjE;;ACRO,SAAS,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE;AACnD,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,OAAO;AACzD,EAAE,MAAM,WAAW,GAAGC,eAAQ;AAC9B,IAAI,OAAO,CAAC,aAAa,IAAIC,wBAAc,CAAC,yBAAyB;AACrE,IAAI,eAAe;AACnB,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;AAC1B,EAAE,IAAI,OAAO,GAAG,KAAK;AACrB,EAAE,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,GAAG,MAAM,EAAE,IAAI,KAAK,EAAE;AAC9C,IAAIC,kBAAW,CAAC,KAAK,CAAC;AACtB,IAAI,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACvD,MAAM,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC;AACjE,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;AACnB,MAAM,KAAK;AACX,MAAM,YAAY,EAAE,KAAK;AACzB,MAAM,IAAI,EAAEC,gBAAS,CAAC,KAAK,CAAC;AAC5B,MAAM,KAAK,EAAE,SAAS;AACtB,MAAM,KAAK,EAAE,SAAS;AACtB,KAAK,CAAC;AACN,EAAE;AACF,EAAE,MAAM,WAAW,GAAG,CAAC,IAAI,KAAK;AAChC,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAClC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC;AACvD,IAAI,OAAO,KAAK;AAChB,EAAE,CAAC;;AAEH,EAAE,SAAS,IAAI,GAAG;AAClB,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE;AAClC,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM;AACpC,MAAM,IAAI,KAAK,CAAC,KAAK;AACrB,QAAQC,aAAM,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AACzE,IAAI,IAAI;AACR,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC/E,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,WAAW,CAAC,KAAK,EAAEC,+BAAqB,CAAC,OAAO,CAAC;AACvD,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE;AACxB,IAAI,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AACvC,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS;AAC3B,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS;AAC3B,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY;AACpC,IAAI,KAAK,CAAC,IAAI,GAAGF,gBAAS,CAAC,KAAK,CAAC,KAAK,CAAC;AACvC,EAAE;;AAEF,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AACtC,IAAI,KAAK,CAAC,KAAK,CAAC;AAChB,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK;AACvB,IAAI,KAAK,CAAC,IAAI,GAAGA,gBAAS,CAAC,KAAK,CAAC;AACjC,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK;AACvB,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,UAAU;AACtC,MAAM,MAAM;AACZ,QAAQ,IAAI,OAAO,EAAE;AACrB,QAAQ,IAAI,KAAK,GAAG,GAAG,EAAE,EAAE;AAC3B,UAAU,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACpC,UAAU;AACV,QAAQ;AACR,QAAQ,KAAK,CAAC,KAAK,CAAC;AACpB,QAAQ,IAAI,EAAE;AACd,MAAM,CAAC;AACP,MAAM,IAAI,CAAC,GAAG,CAACF,wBAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;AAC7E,KAAK;AACL,EAAE;;AAEF,EAAE,SAAS,YAAY,GAAG;AAC1B,IAAI,IAAI,OAAO,EAAE;AACjB,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AACrD,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,IAAI,IAAI;AACR,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAC9B,QAAQ,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI;AAC9D,OAAO;AACP,MAAM,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC/C,MAAM,MAAM,IAAI,GAAG,GAAG,EAAE;AACxB,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;AACxC,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;AAC9D,QAAQ;AACR,UAAU,QAAQ;AAClB,UAAUE,gBAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AACxC,UAAU,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzC,UAAU,QAAQ,CAAC,KAAK,GAAG;AAC3B;AACA,UAAU,KAAK;AACf,YAAY,KAAK;AACjB,YAAY,QAAQ,CAAC,KAAK;AAC1B,YAAY,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC;AACxD,WAAW;AACX,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,WAAW,CAAC,KAAK,EAAEE,+BAAqB,CAAC,OAAO,CAAC;AACvD,IAAI;AACJ,EAAE;AACF,EAAE,YAAY,EAAE;AAChB,EAAE,OAAO;AACT,IAAI,WAAW;AACf,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;AACzB,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACrC,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE;AAC/C,QAAQ,KAAK,CAAC,KAAK,CAAC;AACpB,QAAQ,IAAI,EAAE;AACd,MAAM;AACN,MAAM,OAAOF,gBAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI;AAC3C,IAAI,CAAC;;AAEL,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,UAAU,GAAG,WAAW,EAAE,GAAG,EAAE,EAAE;AAC7D,MAAMD,kBAAW,CAAC,KAAK,CAAC;AACxB,MAAMF,eAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;AACxC,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC;AACrC,MAAM,IAAI,OAAO,EAAE;AACnB,MAAM,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACpE,MAAM,IAAI,EAAE;AACZ,IAAI,CAAC;;AAEL,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,MAAM,IAAI,OAAO,EAAE;AACnB,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACtD,WAAW,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AAC5D,MAAM,IAAI,EAAE;AACZ,IAAI,CAAC;AACL,IAAI,YAAY;AAChB,IAAI,SAAS,GAAG;AAChB,MAAM,MAAM,MAAM,GAAG,EAAE;AACvB,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE;AACxC,QAAQ,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE;AACjD,UAAU,KAAK,CAAC,KAAK,CAAC;AACtB,UAAU,IAAI,EAAE;AAChB,QAAQ;AACR,QAAQI,aAAM;AACd,UAAU,MAAM;AAChB,UAAU,EAAE;AACZ,UAAU,MAAM,CAAC,MAAM,CAAC;AACxB,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK;AAC9B,YAAY,YAAY,EAAE,KAAK,CAAC,YAAY;AAC5C,YAAY,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AAC1D,WAAW,CAAC;AACZ,SAAS;AACT,MAAM;AACN,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,IAAI,CAAC;;AAEL,IAAI,IAAI,GAAG;AACX,MAAM,OAAO,GAAG,IAAI;AACpB,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9E,IAAI,CAAC;AACL,GAAG;AACH;;ACpIO,SAAS,aAAa,CAAC,OAAO,EAAE;AACvC,EAAE;AACF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;AAClC,IAAI,CAAC,OAAO,CAAC,QAAQ;AACrB,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK;AACvC;AACA,IAAI,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC;AACtE,EAAE,MAAM;AACR,IAAI,QAAQ;AACZ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG;AAClB,IAAI,YAAY,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;AACpE,IAAI,SAAS,GAAGE,gBAAa;AAC7B,IAAI,UAAU,GAAGL,wBAAc,CAAC,mBAAmB;AACnD,GAAG,GAAG,OAAO;AACb,EAAE,MAAM,MAAM,GAAGM,oBAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/C,EAAE;AACF,IAAI,CAAC,QAAQ,CAAC,MAAM;AACpB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;AAC1E;AACA,IAAI,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC;AACvD,EAAEC,uBAAgB,CAAC,UAAU,CAAC;AAC9B,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,IAAI,IAAIC,gBAAS,CAAC,EAAE,CAAC;AACxD,EAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK;AACzC,IAAI,MAAM,IAAI,SAAS,CAAC,gBAAgB,CAAC;AACzC,EAAE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;AACzB,EAAE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE;AACzB,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;AAC1B,EAAE,IAAI,OAAO,GAAGC,mBAAY,CAAC,OAAO,CAAC,OAAO,CAAC;AAC7C,EAAE,IAAI,GAAG,GAAG,CAAC;AACb,EAAE,IAAI,MAAM,GAAG,KAAK;AACpB,EAAE,IAAI,IAAI,GAAG,KAAK;AAClB,EAAE,IAAI,aAAa,GAAG,KAAK;AAC3B,EAAE,IAAI,SAAS,GAAG,KAAK;AACvB,EAAE,IAAI,UAAU;AAChB,EAAE,IAAI,WAAW;;AAEjB,EAAE,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;AAClC,IAAI,IAAI,SAAS,EAAE;AACnB,IAAI,SAAS,GAAG,IAAI;AACpB,IAAI,MAAM,OAAO,GAAG,IAAI;AACxB,IAAI,IAAI,GAAG,IAAI;AACf,IAAIC,aAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;AAC1C,IAAI,IAAI,GAAG,OAAO;AAClB,IAAI,SAAS,GAAG,KAAK;AACrB,EAAE;AACF,EAAE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;AACvD,EAAE,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC;;AAEtE,EAAE,SAAS,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE;AAC5E,IAAI,IAAI;AACR,MAAM,IAAI,IAAI,EAAE;AAChB,QAAQ,OAAO;AACf,UAAU,YAAY,CAACZ,6BAAmB,CAAC,iBAAiB,CAAC;AAC7D,UAAUM,+BAAqB,CAAC,OAAO;AACvC,SAAS;AACT,QAAQ;AACR,MAAM;AACN,MAAM;AACN,QAAQ,MAAM;AACd,QAAQ,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK;AACtC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC;AACxB,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;AAChD;AACA,QAAQ;AACR,MAAM,IAAI,CAAC,MAAM,IAAI,UAAU,KAAK,KAAK,EAAE;AAC3C,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACjD,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,UAAU,MAAM,QAAQ;AACxB,YAAY,MAAM,CAAC,IAAI,GAAGJ,wBAAc,CAAC,iBAAiB,GAAG,GAAG,GAAG,UAAU;AAC7E,UAAU,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxC,UAAU,IAAI,CAAC,OAAO,EAAE;AACxB,YAAY,OAAO,GAAG;AACtB,cAAc,IAAI;AAClB,cAAc,KAAK;AACnB,cAAc,KAAK,EAAE,YAAY,EAAE;AACnC,cAAc,KAAK,EAAE,CAAC;AACtB,cAAc,OAAO,EAAE,CAAC;AACxB,aAAa;AACb,YAAY,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;AACzC,UAAU;AACV,QAAQ;AACR,QAAQ,MAAM,IAAI,GAAG,YAAY,EAAE;AACnC,QAAQ;AACR,UAAU,IAAI,GAAG,OAAO,CAAC,KAAK,IAAIA,wBAAc,CAAC,eAAe;AAChE,UAAU,IAAI,GAAG,OAAO,CAAC;AACzB,UAAU;AACV,UAAU,OAAO,CAAC,KAAK,GAAG,IAAI;AAC9B,UAAU,OAAO,CAAC,KAAK,GAAG,CAAC;AAC3B,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,UAAU,EAAE;AAC3C,UAAU,OAAO,CAAC,OAAO,EAAE;AAC3B,UAAU,IAAI,UAAU,KAAK,SAAS;AACtC,YAAY,UAAU,GAAG,SAAS,CAAC,UAAU;AAC7C,cAAc,SAAS;AACvB,cAAcA,wBAAc,CAAC,sBAAsB;AACnD,aAAa;AACb,UAAU;AACV,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,MAAM,IAAI,GAAG,IAAI;AACjB,MAAM,IAAI;AACV,QAAQ,IAAI,KAAK;AACjB,QAAQ,IAAI;AACZ,UAAU,KAAK,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI;AAC5D,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,EAAEI,+BAAqB,CAAC,IAAI,CAAC;AACpD,UAAU;AACV,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE;AAChE,QAAQ,IAAI,MAAM;AAClB,QAAQ,IAAI;AACZ,UAAU,MAAM,GAAGO,oBAAS;AAC5B,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,cAAc,KAAK;AACnB,cAAc,GAAG,EAAE,EAAE,GAAG;AACxB,cAAc,EAAE,EAAE,GAAG,EAAE;AACvB,cAAc,IAAI;AAClB,cAAc,KAAK;AACnB,cAAc,KAAK;AACnB,cAAc,OAAO;AACrB,cAAc,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE;AACjD,cAAc,IAAI,EAAE,KAAK;AACzB,aAAa,CAAC;AACd,YAAY,MAAM;AAClB,WAAW;AACX,QAAQ,CAAC,CAAC,OAAO,KAAK,EAAE;AACxB,UAAU,OAAO,CAAC,KAAK,EAAEP,+BAAqB,CAAC,QAAQ,CAAC;AACxD,UAAU;AACV,QAAQ;AACR,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE;AAC5C,QAAQ,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AAClD,UAAU,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AACxE,YAAY;AACZ,UAAU,IAAI;AACd,YAAY,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3C,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,OAAO,CAAC,KAAK,EAAEA,+BAAqB,CAAC,IAAI,CAAC;AACtD,UAAU;AACV,QAAQ;AACR,MAAM,CAAC,SAAS;AAChB,QAAQ,IAAI,GAAG,KAAK;AACpB,MAAM;AACN,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,IAAI,GAAG,KAAK;AAClB,MAAM,OAAO,CAAC,KAAK,EAAEA,+BAAqB,CAAC,IAAI,CAAC;AAChD,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,SAAS,GAAG;AACvB,IAAI,UAAU,GAAG,SAAS;AAC1B,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AAC5B,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;AACrC,MAAM,OAAO,CAAC,OAAO,GAAG,CAAC;AACzB,MAAM,IAAI;AACV,QAAQ,OAAO,CAAC,IAAI;AACpB,QAAQ,OAAO,CAAC,KAAK;AACrB,QAAQ,EAAE;AACV,QAAQ,MAAM;AACd,QAAQ,oBAAoB;AAC5B,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AACzC,QAAQ,IAAI;AACZ,OAAO;AACP,IAAI;AACJ,EAAE;;AAEF,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AAC7C,IAAI,MAAM,MAAM,GAAG,EAAE;AACrB,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAACQ,gBAAM,CAAC;AAC7C,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI;AACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AACxD,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC;AACpB,MAAM,KAAK,EAAE,UAAU,GAAG,KAAK;AAC/B,MAAM,OAAO,EAAE,YAAY,GAAG,EAAE;AAChC,KAAK,GAAG,EAAE;AACV,MAAM,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,GAAGH,mBAAY,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7E,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AAChC,EAAE;;AAEF,EAAE,SAAS,OAAO,CAAC,IAAI,EAAE;AACzB,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;AACjD,MAAM,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;AACnD,IAAI,IAAI,MAAM,EAAE,MAAM,YAAY,CAACX,6BAAmB,CAAC,OAAO,CAAC;AAC/D,IAAI,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE;AACjC,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC3B,IAAI,OAAO,MAAM;AACjB,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;AAChC,IAAI,CAAC;AACL,EAAE;;AAEF,EAAE,eAAe,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE;AACnD,IAAI,MAAM,QAAQ,GAAG,EAAE;AACvB,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAClC,MAAM,MAAM,OAAO,CAAC,GAAG;AACvB,QAAQ,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK;AAC9C,UAAU,IAAI;AACd,YAAY,MAAM,QAAQ,GAAG,IAAI;AACjC,YAAY,IAAI,GAAG,IAAI;AACvB,YAAY,IAAI,MAAM;AACtB,YAAY,IAAI;AAChB,cAAc,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;AACvC,YAAY,CAAC,SAAS;AACtB,cAAc,IAAI,GAAG,QAAQ;AAC7B,YAAY;AACZ,YAAY,MAAM,MAAM;AACxB,UAAU,CAAC,CAAC,OAAO,KAAK,EAAE;AAC1B,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAY,OAAO,CAAC,KAAK,EAAEM,+BAAqB,CAAC,IAAI,CAAC;AACtD,UAAU;AACV,QAAQ,CAAC,CAAC;AACV,OAAO;AACP,IAAI;AACJ,IAAI,IAAI,QAAQ,CAAC,MAAM;AACvB,MAAM,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,0BAA0B,CAAC;AACpE,EAAE;AACF,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,IAAI,KAAK;AACT,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3B,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;AAC9B,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;AACnC,QAAQ,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC;AACrD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/C,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC,MAAM,IAAI,MAAM,EAAE,OAAO,MAAM;AAC/B,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,MAAM,IAAI,KAAK,CAAC,IAAI,GAAGJ,wBAAc,CAAC,uBAAuB,EAAE;AAC/D,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC;AAC/B,QAAQ,OAAO,OAAO;AACtB,MAAM;AACN,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAQ,aAAa,GAAG,IAAI;AAC5B,QAAQ,OAAO;AACf,UAAU,YAAY,CAACF,6BAAmB,CAAC,uBAAuB,CAAC;AACnE,UAAUM,+BAAqB,CAAC,KAAK;AACrC,SAAS;AACT,MAAM;AACN,MAAM,OAAO,OAAO;AACpB,IAAI,CAAC;;AAEL,IAAI,UAAU,CAAC,MAAM,EAAE;AACvB,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAGK,mBAAY,CAAC,MAAM,CAAC,EAAE;AACvD,MAAM,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AAC5C,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;AAC3D,IAAI,CAAC;AACL,IAAI,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC7B,IAAI,UAAU,EAAE,MAAM,CAAC,UAAU;AACjC,IAAI,YAAY,EAAE,MAAM,CAAC,YAAY;AACrC,IAAI,SAAS,EAAE,MAAM,CAAC,SAAS;AAC/B,IAAI,OAAO;AACX,IAAI,KAAK,GAAG;AACZ,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,MAAM,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9E,IAAI,CAAC;;AAEL,IAAI,IAAI,GAAG;AACX,MAAM,IAAI,CAAC,WAAW,EAAE;AACxB,QAAQ,MAAM,GAAG,IAAI;AACrB,QAAQ,MAAM,CAAC,IAAI,EAAE;AACrB,QAAQ,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC;AAC1C,QAAQ,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/C,QAAQ,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;AAC7C,UAAU,SAAS,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACrD,SAAS;AACT,MAAM;AACN,MAAM,OAAO,WAAW;AACxB,IAAI,CAAC;AACL,GAAG,CAAC;AACJ;;"}
|