@oneuptime/common 8.0.5479 → 8.0.5488
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/Server/Utils/Execute.ts +8 -13
- package/UI/Components/LogsViewer/LogsViewer.tsx +331 -367
- package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +343 -0
- package/UI/Components/LogsViewer/components/LogsFilterCard.tsx +74 -0
- package/UI/Components/LogsViewer/components/LogsPagination.tsx +109 -0
- package/UI/Components/LogsViewer/components/LogsTable.tsx +270 -0
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +51 -0
- package/UI/Components/LogsViewer/components/SeverityBadge.tsx +28 -0
- package/UI/Components/LogsViewer/components/severityTheme.ts +69 -0
- package/build/dist/Server/Utils/Execute.js +1 -1
- package/build/dist/Server/Utils/Execute.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +211 -201
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +151 -0
- package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsFilterCard.js +40 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsFilterCard.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsPagination.js +49 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsPagination.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +130 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +20 -0
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/components/SeverityBadge.js +13 -0
- package/build/dist/UI/Components/LogsViewer/components/SeverityBadge.js.map +1 -0
- package/build/dist/UI/Components/LogsViewer/components/severityTheme.js +54 -0
- package/build/dist/UI/Components/LogsViewer/components/severityTheme.js.map +1 -0
- package/package.json +1 -1
- package/UI/Components/LogsViewer/LogItem.tsx +0 -503
- package/build/dist/UI/Components/LogsViewer/LogItem.js +0 -221
- package/build/dist/UI/Components/LogsViewer/LogItem.js.map +0 -1
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LogItem UI
|
|
3
|
-
* - Collapsed row: compact line with timestamp, service, severity badge, message preview, quick copy.
|
|
4
|
-
* - Expanded panel: left severity-colored border, header with service, severity, timestamp; sections for Message, JSON body, Trace/Span IDs, and Attributes, each with copy buttons.
|
|
5
|
-
* - Accessibility: entire item is keyboard-activatable (Enter/Space) and exposes aria-expanded.
|
|
6
|
-
* - Styling hooks: severityBadgeClasses and leftBorderColor derive from props.log.severityText for consistent theming.
|
|
7
|
-
* - Non-breaking: props and behavior remain backward compatible.
|
|
8
|
-
*/
|
|
9
|
-
import CopyTextButton from "../CopyTextButton/CopyTextButton";
|
|
10
|
-
import OneUptimeDate from "../../../Types/Date";
|
|
11
|
-
import JSONFunctions from "../../../Types/JSONFunctions";
|
|
12
|
-
import LogSeverity from "../../../Types/Log/LogSeverity";
|
|
13
|
-
import React, { useEffect } from "react";
|
|
14
|
-
import { Logger } from "../../Utils/Logger";
|
|
15
|
-
import Icon from "../Icon/Icon";
|
|
16
|
-
import IconProp from "../../../Types/Icon/IconProp";
|
|
17
|
-
import Link from "../Link/Link";
|
|
18
|
-
import Route from "../../../Types/API/Route";
|
|
19
|
-
import URL from "../../../Types/API/URL";
|
|
20
|
-
const LogItem = (props) => {
|
|
21
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
22
|
-
const serviceId = ((_a = props.log.serviceId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
23
|
-
const serviceName = ((_b = props.serviceMap[serviceId]) === null || _b === void 0 ? void 0 : _b.name) || serviceId;
|
|
24
|
-
const serviceColor = ((_d = (_c = props.serviceMap[serviceId]) === null || _c === void 0 ? void 0 : _c.serviceColor) === null || _d === void 0 ? void 0 : _d.toString()) || "text-slate-200";
|
|
25
|
-
const [isCollapsed, setIsCollapsed] = React.useState(true);
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
setIsCollapsed(true);
|
|
28
|
-
}, []);
|
|
29
|
-
let bodyColor = "text-slate-200";
|
|
30
|
-
let leftBorderColor = "border-l-slate-700";
|
|
31
|
-
let severityDotClass = "bg-slate-400";
|
|
32
|
-
const getCopyButton = (textToBeCopied) => {
|
|
33
|
-
return (React.createElement(CopyTextButton, { textToBeCopied: textToBeCopied, size: "xs", variant: "ghost", iconOnly: true, title: "Copy", className: "flex-none" }));
|
|
34
|
-
};
|
|
35
|
-
const renderTraceId = () => {
|
|
36
|
-
var _a;
|
|
37
|
-
const traceId = ((_a = props.log.traceId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
38
|
-
const traceRoute = traceId && props.getTraceRoute
|
|
39
|
-
? props.getTraceRoute(traceId, props.log)
|
|
40
|
-
: undefined;
|
|
41
|
-
const baseContainerClassName = `${bodyColor} font-mono text-sm bg-slate-950 px-2.5 py-1.5 rounded border border-slate-800 flex-1 transition-colors`;
|
|
42
|
-
if (traceRoute) {
|
|
43
|
-
const linkContainerClassName = `${baseContainerClassName} flex items-center gap-1 min-w-0 hover:border-blue-500/60 hover:text-blue-200`;
|
|
44
|
-
return (React.createElement("div", { className: "flex-1", onClick: (event) => {
|
|
45
|
-
event.stopPropagation();
|
|
46
|
-
}, onAuxClick: (event) => {
|
|
47
|
-
event.stopPropagation();
|
|
48
|
-
} },
|
|
49
|
-
React.createElement(Link, { to: traceRoute, className: "group flex-1 min-w-0 block hover:no-underline" },
|
|
50
|
-
React.createElement("div", { className: linkContainerClassName, title: `View trace ${traceId}` },
|
|
51
|
-
React.createElement("span", { className: "truncate underline underline-offset-2 decoration-slate-500 group-hover:decoration-blue-300" }, traceId),
|
|
52
|
-
React.createElement(Icon, { icon: IconProp.ExternalLink, className: "w-3.5 h-3.5 flex-none text-slate-500 group-hover:text-blue-300" })))));
|
|
53
|
-
}
|
|
54
|
-
return (React.createElement("div", { className: `${baseContainerClassName} truncate`, title: traceId }, traceId));
|
|
55
|
-
};
|
|
56
|
-
const renderSpanId = () => {
|
|
57
|
-
var _a;
|
|
58
|
-
const spanId = ((_a = props.log.spanId) === null || _a === void 0 ? void 0 : _a.toString()) || "";
|
|
59
|
-
if (!spanId) {
|
|
60
|
-
return (React.createElement("div", { className: "text-slate-500 italic text-sm", title: "No span id" }, "No span"));
|
|
61
|
-
}
|
|
62
|
-
const resolveSpanRoute = () => {
|
|
63
|
-
if (props.getSpanRoute) {
|
|
64
|
-
return props.getSpanRoute(spanId, props.log);
|
|
65
|
-
}
|
|
66
|
-
if (props.getTraceRoute && props.log.traceId) {
|
|
67
|
-
const baseRoute = props.getTraceRoute(props.log.traceId.toString(), props.log);
|
|
68
|
-
if (!baseRoute) {
|
|
69
|
-
return undefined;
|
|
70
|
-
}
|
|
71
|
-
if (baseRoute instanceof Route) {
|
|
72
|
-
const clonedRoute = new Route(baseRoute.toString());
|
|
73
|
-
clonedRoute.addQueryParams({ spanId });
|
|
74
|
-
return clonedRoute;
|
|
75
|
-
}
|
|
76
|
-
if (baseRoute instanceof URL) {
|
|
77
|
-
const clonedURL = URL.fromURL(baseRoute);
|
|
78
|
-
clonedURL.addQueryParam("spanId", spanId);
|
|
79
|
-
return clonedURL;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return undefined;
|
|
83
|
-
};
|
|
84
|
-
const spanRoute = resolveSpanRoute();
|
|
85
|
-
const baseContainerClassName = `${bodyColor} font-mono text-sm bg-slate-950 px-2.5 py-1.5 rounded border border-slate-800 flex-1 transition-colors`;
|
|
86
|
-
if (spanRoute) {
|
|
87
|
-
const linkContainerClassName = `${baseContainerClassName} flex items-center gap-1 min-w-0 hover:border-blue-500/60 hover:text-blue-200`;
|
|
88
|
-
return (React.createElement("div", { className: "flex-1", onClick: (event) => {
|
|
89
|
-
event.stopPropagation();
|
|
90
|
-
}, onAuxClick: (event) => {
|
|
91
|
-
event.stopPropagation();
|
|
92
|
-
} },
|
|
93
|
-
React.createElement(Link, { to: spanRoute, className: "group flex-1 min-w-0 block hover:no-underline" },
|
|
94
|
-
React.createElement("div", { className: linkContainerClassName, title: `View span ${spanId}` },
|
|
95
|
-
React.createElement("span", { className: `truncate underline underline-offset-2` }, spanId),
|
|
96
|
-
React.createElement(Icon, { icon: IconProp.ExternalLink, className: `w-3.5 h-3.5 flex-none` })))));
|
|
97
|
-
}
|
|
98
|
-
return (React.createElement("div", { className: `${baseContainerClassName} truncate`, title: spanId }, spanId));
|
|
99
|
-
};
|
|
100
|
-
if (props.log.severityText === LogSeverity.Warning) {
|
|
101
|
-
bodyColor = "text-amber-400";
|
|
102
|
-
leftBorderColor = "border-l-amber-500/60";
|
|
103
|
-
severityDotClass = "bg-amber-500";
|
|
104
|
-
}
|
|
105
|
-
else if (props.log.severityText === LogSeverity.Error) {
|
|
106
|
-
bodyColor = "text-rose-400";
|
|
107
|
-
leftBorderColor = "border-l-rose-500/60";
|
|
108
|
-
severityDotClass = "bg-rose-500";
|
|
109
|
-
}
|
|
110
|
-
else if (props.log.severityText === LogSeverity.Trace ||
|
|
111
|
-
props.log.severityText === LogSeverity.Debug) {
|
|
112
|
-
bodyColor = "text-slate-400";
|
|
113
|
-
leftBorderColor =
|
|
114
|
-
props.log.severityText === LogSeverity.Debug
|
|
115
|
-
? "border-l-purple-500/60"
|
|
116
|
-
: "border-l-slate-500/60";
|
|
117
|
-
severityDotClass =
|
|
118
|
-
props.log.severityText === LogSeverity.Debug
|
|
119
|
-
? "bg-purple-500"
|
|
120
|
-
: "bg-slate-500";
|
|
121
|
-
}
|
|
122
|
-
else if (props.log.severityText === LogSeverity.Information) {
|
|
123
|
-
leftBorderColor = "border-l-blue-500/60";
|
|
124
|
-
severityDotClass = "bg-blue-500";
|
|
125
|
-
}
|
|
126
|
-
else if (props.log.severityText === LogSeverity.Fatal) {
|
|
127
|
-
leftBorderColor = "border-l-rose-700/70";
|
|
128
|
-
severityDotClass = "bg-rose-700";
|
|
129
|
-
}
|
|
130
|
-
let logBody = ((_e = props.log.body) === null || _e === void 0 ? void 0 : _e.toString()) || "";
|
|
131
|
-
let logBodyMinified = "";
|
|
132
|
-
let isBodyInJSON = false;
|
|
133
|
-
try {
|
|
134
|
-
const parsed = JSON.parse(logBody);
|
|
135
|
-
logBody = JSON.stringify(parsed, null, 2);
|
|
136
|
-
logBodyMinified = JSON.stringify(parsed);
|
|
137
|
-
isBodyInJSON = true;
|
|
138
|
-
}
|
|
139
|
-
catch (e) {
|
|
140
|
-
Logger.error(e);
|
|
141
|
-
isBodyInJSON = false;
|
|
142
|
-
}
|
|
143
|
-
const toggleCollapsed = () => {
|
|
144
|
-
setIsCollapsed((v) => {
|
|
145
|
-
return !v;
|
|
146
|
-
});
|
|
147
|
-
};
|
|
148
|
-
const handleKeyDown = (e) => {
|
|
149
|
-
if (e.key === "Enter" || e.key === " ") {
|
|
150
|
-
e.preventDefault();
|
|
151
|
-
toggleCollapsed();
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
if (isCollapsed) {
|
|
155
|
-
return (React.createElement("div", { className: `group relative text-slate-200 flex items-center gap-2 cursor-pointer hover:bg-slate-800/40 px-2 py-0.5 border border-transparent border-l ${leftBorderColor} rounded-sm transition-colors duration-100 font-mono`, onClick: toggleCollapsed, role: "button", "aria-expanded": !isCollapsed, tabIndex: 0, onKeyDown: handleKeyDown },
|
|
156
|
-
props.log.time && (React.createElement("div", { className: "flex items-center space-x-2 flex-none w-52" },
|
|
157
|
-
React.createElement("div", { className: "text-[10px] text-slate-400 font-mono tabular-nums" }, OneUptimeDate.getDateAsUserFriendlyFormattedString(props.log.time)
|
|
158
|
-
.split(" ")
|
|
159
|
-
.slice(1)
|
|
160
|
-
.join(" ")),
|
|
161
|
-
React.createElement("div", { className: "text-[11px] font-medium truncate", style: { color: serviceColor }, title: serviceName }, serviceName))),
|
|
162
|
-
React.createElement("div", { className: "flex-none mr-1" },
|
|
163
|
-
React.createElement("span", { className: "inline-flex items-center gap-2" },
|
|
164
|
-
React.createElement("span", { className: `inline-block w-1.5 h-1.5 rounded-full ${severityDotClass}`, "aria-hidden": "true" }),
|
|
165
|
-
React.createElement("span", { className: "text-[9px] uppercase tracking-wide text-slate-400" }, (props.log.severityText || "").toString() || "UNKNOWN"))),
|
|
166
|
-
React.createElement("div", { className: `${bodyColor} font-mono text-[13px] md:text-sm leading-5 tracking-tight subpixel-antialiased flex-1 min-w-0` }, isBodyInJSON ? (React.createElement("div", { className: "truncate font-mono", title: logBodyMinified }, logBodyMinified)) : (React.createElement("div", { className: "truncate font-mono", title: (_f = props.log.body) === null || _f === void 0 ? void 0 : _f.toString() }, (_g = props.log.body) === null || _g === void 0 ? void 0 : _g.toString()))),
|
|
167
|
-
React.createElement("div", { className: "opacity-0 group-hover:opacity-100 transition-opacity ml-1" }, getCopyButton(((_h = props.log.body) === null || _h === void 0 ? void 0 : _h.toString()) || "")),
|
|
168
|
-
React.createElement("div", { className: "flex-none ml-1 text-slate-500 group-hover:text-slate-300 transition-transform duration-200" },
|
|
169
|
-
React.createElement(Icon, { icon: IconProp.ChevronDown, className: "w-3 h-3" }))));
|
|
170
|
-
}
|
|
171
|
-
return (React.createElement("div", { className: `group relative text-slate-200 bg-slate-950/70 border ${leftBorderColor} border-l border-slate-900 rounded-sm p-2 hover:border-slate-700 transition-colors` },
|
|
172
|
-
React.createElement("div", { className: "flex items-center justify-between mb-1 pb-1 border-b border-slate-800/80", onClick: () => {
|
|
173
|
-
toggleCollapsed();
|
|
174
|
-
} },
|
|
175
|
-
serviceName && (React.createElement("div", { className: "text-[13px] font-semibold", style: { color: serviceColor } }, serviceName)),
|
|
176
|
-
React.createElement("div", { className: "flex items-center gap-2" },
|
|
177
|
-
React.createElement("span", { className: "inline-flex items-center gap-2" },
|
|
178
|
-
React.createElement("span", { className: `inline-block w-1.5 h-1.5 rounded-full ${severityDotClass}`, "aria-hidden": "true" }),
|
|
179
|
-
React.createElement("span", { className: "text-[9px] uppercase tracking-wide text-slate-400" }, (props.log.severityText || "").toString() || "UNKNOWN")),
|
|
180
|
-
props.log.time && (React.createElement("div", { className: "text-[11px] text-slate-400 font-mono tabular-nums" }, OneUptimeDate.getDateAsUserFriendlyFormattedString(props.log.time))),
|
|
181
|
-
React.createElement("button", { type: "button", title: "Collapse", "aria-label": "Collapse", onClick: (e) => {
|
|
182
|
-
e.stopPropagation();
|
|
183
|
-
toggleCollapsed();
|
|
184
|
-
}, className: "flex-none text-slate-500 hover:text-slate-300 transition-colors" },
|
|
185
|
-
React.createElement(Icon, { icon: IconProp.ChevronUp, className: "w-3.5 h-3.5" })))),
|
|
186
|
-
React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-1.5 mb-1.5 text-[11px] text-slate-400" },
|
|
187
|
-
props.log.time && (React.createElement("div", { className: "flex items-center gap-2" },
|
|
188
|
-
React.createElement("span", { className: "uppercase tracking-wide" }, "Timestamp"),
|
|
189
|
-
React.createElement("span", { className: "text-slate-300 font-mono tabular-nums" }, OneUptimeDate.getDateAsUserFriendlyFormattedString(props.log.time)))),
|
|
190
|
-
props.log.severityText && (React.createElement("div", { className: "flex items-center gap-2" },
|
|
191
|
-
React.createElement("span", { className: "uppercase tracking-wide" }, "Severity"),
|
|
192
|
-
React.createElement("span", { className: "inline-flex items-center gap-2 text-slate-300" },
|
|
193
|
-
React.createElement("span", { className: `inline-block w-1.5 h-1.5 rounded-full ${severityDotClass}` }),
|
|
194
|
-
React.createElement("span", { className: "text-[10px] uppercase" }, (props.log.severityText || "").toString()))))),
|
|
195
|
-
React.createElement("div", { className: "mb-1.5" },
|
|
196
|
-
React.createElement("div", { className: "flex items-center justify-between text-[10px] font-semibold text-slate-400 uppercase tracking-wide mb-1" },
|
|
197
|
-
"Message",
|
|
198
|
-
React.createElement("div", { className: "flex items-center gap-2 normal-case" }, getCopyButton(isBodyInJSON ? logBody : ((_j = props.log.body) === null || _j === void 0 ? void 0 : _j.toString()) || ""))),
|
|
199
|
-
React.createElement("div", { className: "bg-slate-950 rounded p-1.5 border border-slate-800" },
|
|
200
|
-
!isBodyInJSON && (React.createElement("div", { className: `${bodyColor} font-mono text-sm leading-snug` }, (_k = props.log.body) === null || _k === void 0 ? void 0 : _k.toString())),
|
|
201
|
-
isBodyInJSON && (React.createElement("pre", { className: `${bodyColor} font-mono text-sm leading-snug whitespace-pre overflow-auto max-h-40 w-full block` }, logBody)))),
|
|
202
|
-
(props.log.traceId || props.log.spanId) && (React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-1.5 mb-1.5" },
|
|
203
|
-
props.log.traceId && (React.createElement("div", { className: "flex flex-col space-y-2" },
|
|
204
|
-
React.createElement("div", { className: "text-[10px] font-semibold text-slate-400 uppercase tracking-wide" }, "Trace ID"),
|
|
205
|
-
React.createElement("div", { className: "flex items-center space-x-2" },
|
|
206
|
-
renderTraceId(),
|
|
207
|
-
getCopyButton(((_l = props.log.traceId) === null || _l === void 0 ? void 0 : _l.toString()) || "")))),
|
|
208
|
-
props.log.spanId && (React.createElement("div", { className: "flex flex-col space-y-2" },
|
|
209
|
-
React.createElement("div", { className: "text-[10px] font-semibold text-slate-400 uppercase tracking-wide" }, "Span ID"),
|
|
210
|
-
React.createElement("div", { className: "flex items-center space-x-2" },
|
|
211
|
-
renderSpanId(),
|
|
212
|
-
getCopyButton(((_m = props.log.spanId) === null || _m === void 0 ? void 0 : _m.toString()) || "")))))),
|
|
213
|
-
props.log.attributes && (React.createElement("div", null,
|
|
214
|
-
React.createElement("div", { className: "flex items-center justify-between text-[10px] font-semibold text-slate-400 uppercase tracking-wide mb-1" },
|
|
215
|
-
"Attributes",
|
|
216
|
-
getCopyButton(JSON.stringify(JSONFunctions.unflattenObject(props.log.attributes || {}), null, 2) || "")),
|
|
217
|
-
React.createElement("div", { className: "bg-slate-950 rounded p-1.5 border border-slate-800" },
|
|
218
|
-
React.createElement("pre", { className: `${bodyColor} font-mono text-sm leading-snug whitespace-pre overflow-auto max-h-40 w-full block` }, JSON.stringify(JSONFunctions.unflattenObject(props.log.attributes || {}), null, 2)))))));
|
|
219
|
-
};
|
|
220
|
-
export default LogItem;
|
|
221
|
-
//# sourceMappingURL=LogItem.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LogItem.js","sourceRoot":"","sources":["../../../../../UI/Components/LogsViewer/LogItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAC9D,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,OAAO,aAAa,MAAM,8BAA8B,CAAC;AAEzD,OAAO,WAAW,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,EAAmC,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AACpD,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,KAAK,MAAM,0BAA0B,CAAC;AAC7C,OAAO,GAAG,MAAM,wBAAwB,CAAC;AASzC,MAAM,OAAO,GAAsC,CACjD,KAAqB,EACP,EAAE;;IAChB,MAAM,SAAS,GAAW,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,SAAS,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;IAChE,MAAM,WAAW,GAAW,CAAA,MAAA,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,0CAAE,IAAI,KAAI,SAAS,CAAC;IAC3E,MAAM,YAAY,GAChB,CAAA,MAAA,MAAA,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,0CAAE,YAAY,0CAAE,QAAQ,EAAE,KAAI,gBAAgB,CAAC;IAE5E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,IAAI,CAAC,CAAC;IAEpE,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,SAAS,GAAW,gBAAgB,CAAC;IACzC,IAAI,eAAe,GAAW,oBAAoB,CAAC;IACnD,IAAI,gBAAgB,GAAW,cAAc,CAAC;IAI9C,MAAM,aAAa,GAA0B,CAAC,cAAsB,EAAE,EAAE;QACtE,OAAO,CACL,oBAAC,cAAc,IACb,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,OAAO,EACf,QAAQ,EAAE,IAAI,EACd,KAAK,EAAC,MAAM,EACZ,SAAS,EAAC,WAAW,GACrB,CACH,CAAC;IACJ,CAAC,CAAC;IAIF,MAAM,aAAa,GAA0B,GAAiB,EAAE;;QAC9D,MAAM,OAAO,GAAW,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,OAAO,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;QAE5D,MAAM,UAAU,GACd,OAAO,IAAI,KAAK,CAAC,aAAa;YAC5B,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,sBAAsB,GAAW,GAAG,SAAS,wGAAwG,CAAC;QAE5J,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,sBAAsB,GAAW,GAAG,sBAAsB,+EAA+E,CAAC;YAEhJ,OAAO,CACL,6BACE,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,CAAC,KAAuC,EAAE,EAAE;oBACnD,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,CAAC,EACD,UAAU,EAAE,CAAC,KAAuC,EAAE,EAAE;oBACtD,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,CAAC;gBAED,oBAAC,IAAI,IACH,EAAE,EAAE,UAAU,EACd,SAAS,EAAC,+CAA+C;oBAEzD,6BACE,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,cAAc,OAAO,EAAE;wBAE9B,8BAAM,SAAS,EAAC,4FAA4F,IACzG,OAAO,CACH;wBACP,oBAAC,IAAI,IACH,IAAI,EAAE,QAAQ,CAAC,YAAY,EAC3B,SAAS,EAAC,gEAAgE,GAC1E,CACE,CACD,CACH,CACP,CAAC;QACJ,CAAC;QAED,OAAO,CACL,6BAAK,SAAS,EAAE,GAAG,sBAAsB,WAAW,EAAE,KAAK,EAAE,OAAO,IACjE,OAAO,CACJ,CACP,CAAC;IACJ,CAAC,CAAC;IAIF,MAAM,YAAY,GAAyB,GAAiB,EAAE;;QAC5D,MAAM,MAAM,GAAW,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,MAAM,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;QAE1D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CACL,6BAAK,SAAS,EAAC,+BAA+B,EAAC,KAAK,EAAC,YAAY,cAE3D,CACP,CAAC;QACJ,CAAC;QAED,MAAM,gBAAgB,GAAkC,GAAG,EAAE;YAC3D,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC7C,MAAM,SAAS,GAA4B,KAAK,CAAC,aAAa,CAC5D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAC5B,KAAK,CAAC,GAAG,CACV,CAAC;gBAEF,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAED,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;oBAC/B,MAAM,WAAW,GAAU,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC3D,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvC,OAAO,WAAW,CAAC;gBACrB,CAAC;gBAED,IAAI,SAAS,YAAY,GAAG,EAAE,CAAC;oBAC7B,MAAM,SAAS,GAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBAC9C,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAC1C,OAAO,SAAS,CAAC;gBACnB,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,SAAS,GAA4B,gBAAgB,EAAE,CAAC;QAE9D,MAAM,sBAAsB,GAAW,GAAG,SAAS,wGAAwG,CAAC;QAE5J,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,sBAAsB,GAAW,GAAG,sBAAsB,+EAA+E,CAAC;YAEhJ,OAAO,CACL,6BACE,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,CAAC,KAAuC,EAAE,EAAE;oBACnD,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,CAAC,EACD,UAAU,EAAE,CAAC,KAAuC,EAAE,EAAE;oBACtD,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC1B,CAAC;gBAED,oBAAC,IAAI,IACH,EAAE,EAAE,SAAS,EACb,SAAS,EAAC,+CAA+C;oBAEzD,6BACE,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,aAAa,MAAM,EAAE;wBAE5B,8BAAM,SAAS,EAAE,uCAAuC,IACrD,MAAM,CACF;wBACP,oBAAC,IAAI,IACH,IAAI,EAAE,QAAQ,CAAC,YAAY,EAC3B,SAAS,EAAE,uBAAuB,GAClC,CACE,CACD,CACH,CACP,CAAC;QACJ,CAAC;QAED,OAAO,CACL,6BAAK,SAAS,EAAE,GAAG,sBAAsB,WAAW,EAAE,KAAK,EAAE,MAAM,IAChE,MAAM,CACH,CACP,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;QACnD,SAAS,GAAG,gBAAgB,CAAC;QAC7B,eAAe,GAAG,uBAAuB,CAAC;QAC1C,gBAAgB,GAAG,cAAc,CAAC;IACpC,CAAC;SAAM,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QACxD,SAAS,GAAG,eAAe,CAAC;QAC5B,eAAe,GAAG,sBAAsB,CAAC;QACzC,gBAAgB,GAAG,aAAa,CAAC;IACnC,CAAC;SAAM,IACL,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK;QAC5C,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK,EAC5C,CAAC;QACD,SAAS,GAAG,gBAAgB,CAAC;QAC7B,eAAe;YACb,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK;gBAC1C,CAAC,CAAC,wBAAwB;gBAC1B,CAAC,CAAC,uBAAuB,CAAC;QAC9B,gBAAgB;YACd,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK;gBAC1C,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,cAAc,CAAC;IACvB,CAAC;SAAM,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;QAC9D,eAAe,GAAG,sBAAsB,CAAC;QACzC,gBAAgB,GAAG,aAAa,CAAC;IACnC,CAAC;SAAM,IAAI,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,WAAW,CAAC,KAAK,EAAE,CAAC;QACxD,eAAe,GAAG,sBAAsB,CAAC;QACzC,gBAAgB,GAAG,aAAa,CAAC;IACnC,CAAC;IAED,IAAI,OAAO,GAAW,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,IAAI,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;IACvD,IAAI,eAAe,GAAW,EAAE,CAAC;IAEjC,IAAI,YAAY,GAAY,KAAK,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,GAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1C,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;QACzB,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,eAAe,GAAe,GAAS,EAAE;QAC7C,cAAc,CAAC,CAAC,CAAU,EAAE,EAAE;YAC5B,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAqD,CACtE,CAAsC,EAChC,EAAE;QACR,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACvC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,eAAe,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CACL,6BACE,SAAS,EAAE,6IAA6I,eAAe,sDAAsD,EAC7N,OAAO,EAAE,eAAe,EACxB,IAAI,EAAC,QAAQ,mBACE,CAAC,WAAW,EAC3B,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,aAAa;YAGvB,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CACjB,6BAAK,SAAS,EAAC,4CAA4C;gBACzD,6BAAK,SAAS,EAAC,mDAAmD,IAC/D,aAAa,CAAC,oCAAoC,CACjD,KAAK,CAAC,GAAG,CAAC,IAAI,CACf;qBACE,KAAK,CAAC,GAAG,CAAC;qBACV,KAAK,CAAC,CAAC,CAAC;qBACR,IAAI,CAAC,GAAG,CAAC,CACR;gBACN,6BACE,SAAS,EAAC,kCAAkC,EAC5C,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAC9B,KAAK,EAAE,WAAW,IAEjB,WAAW,CACR,CACF,CACP;YAGD,6BAAK,SAAS,EAAC,gBAAgB;gBAC7B,8BAAM,SAAS,EAAC,gCAAgC;oBAC9C,8BACE,SAAS,EAAE,yCAAyC,gBAAgB,EAAE,iBAC1D,MAAM,GAClB;oBACF,8BAAM,SAAS,EAAC,mDAAmD,IAChE,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,SAAS,CAClD,CACF,CACH;YAGN,6BACE,SAAS,EAAE,GAAG,SAAS,gGAAgG,IAEtH,YAAY,CAAC,CAAC,CAAC,CACd,6BAAK,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,eAAe,IACvD,eAAe,CACZ,CACP,CAAC,CAAC,CAAC,CACF,6BACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,MAAA,KAAK,CAAC,GAAG,CAAC,IAAI,0CAAE,QAAQ,EAAE,IAEhC,MAAA,KAAK,CAAC,GAAG,CAAC,IAAI,0CAAE,QAAQ,EAAE,CACvB,CACP,CACG;YAGN,6BAAK,SAAS,EAAC,2DAA2D,IACvE,aAAa,CAAC,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,IAAI,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC,CAC5C;YAGN,6BAAK,SAAS,EAAC,4FAA4F;gBACzG,oBAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAC,SAAS,GAAG,CACpD,CACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,6BACE,SAAS,EAAE,wDAAwD,eAAe,oFAAoF;QAGtK,6BACE,SAAS,EAAC,0EAA0E,EACpF,OAAO,EAAE,GAAG,EAAE;gBACZ,eAAe,EAAE,CAAC;YACpB,CAAC;YAEA,WAAW,IAAI,CACd,6BACE,SAAS,EAAC,2BAA2B,EACrC,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAE7B,WAAW,CACR,CACP;YACD,6BAAK,SAAS,EAAC,yBAAyB;gBACtC,8BAAM,SAAS,EAAC,gCAAgC;oBAC9C,8BACE,SAAS,EAAE,yCAAyC,gBAAgB,EAAE,iBAC1D,MAAM,GAClB;oBACF,8BAAM,SAAS,EAAC,mDAAmD,IAChE,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,SAAS,CAClD,CACF;gBACN,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CACjB,6BAAK,SAAS,EAAC,mDAAmD,IAC/D,aAAa,CAAC,oCAAoC,CACjD,KAAK,CAAC,GAAG,CAAC,IAAI,CACf,CACG,CACP;gBACD,gCACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,UAAU,gBACL,UAAU,EACrB,OAAO,EAAE,CAAC,CAAsC,EAAE,EAAE;wBAClD,CAAC,CAAC,eAAe,EAAE,CAAC;wBACpB,eAAe,EAAE,CAAC;oBACpB,CAAC,EACD,SAAS,EAAC,iEAAiE;oBAE3E,oBAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAC,aAAa,GAAG,CACnD,CACL,CACF;QAGN,6BAAK,SAAS,EAAC,2EAA2E;YACvF,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CACjB,6BAAK,SAAS,EAAC,yBAAyB;gBACtC,8BAAM,SAAS,EAAC,yBAAyB,gBAAiB;gBAC1D,8BAAM,SAAS,EAAC,uCAAuC,IACpD,aAAa,CAAC,oCAAoC,CACjD,KAAK,CAAC,GAAG,CAAC,IAAI,CACf,CACI,CACH,CACP;YACA,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,CACzB,6BAAK,SAAS,EAAC,yBAAyB;gBACtC,8BAAM,SAAS,EAAC,yBAAyB,eAAgB;gBACzD,8BAAM,SAAS,EAAC,+CAA+C;oBAC7D,8BACE,SAAS,EAAE,yCAAyC,gBAAgB,EAAE,GACtE;oBACF,8BAAM,SAAS,EAAC,uBAAuB,IACpC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CACrC,CACF,CACH,CACP,CACG;QAGN,6BAAK,SAAS,EAAC,QAAQ;YACrB,6BAAK,SAAS,EAAC,yGAAyG;;gBAEtH,6BAAK,SAAS,EAAC,qCAAqC,IACjD,aAAa,CACZ,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,IAAI,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAC1D,CACG,CACF;YACN,6BAAK,SAAS,EAAC,oDAAoD;gBAChE,CAAC,YAAY,IAAI,CAChB,6BAAK,SAAS,EAAE,GAAG,SAAS,iCAAiC,IAC1D,MAAA,KAAK,CAAC,GAAG,CAAC,IAAI,0CAAE,QAAQ,EAAE,CACvB,CACP;gBACA,YAAY,IAAI,CACf,6BACE,SAAS,EAAE,GAAG,SAAS,oFAAoF,IAE1G,OAAO,CACJ,CACP,CACG,CACF;QAGL,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAC1C,6BAAK,SAAS,EAAC,gDAAgD;YAC5D,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,CACpB,6BAAK,SAAS,EAAC,yBAAyB;gBACtC,6BAAK,SAAS,EAAC,kEAAkE,eAE3E;gBACN,6BAAK,SAAS,EAAC,6BAA6B;oBACzC,aAAa,EAAE;oBACf,aAAa,CAAC,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,OAAO,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC,CAC/C,CACF,CACP;YAEA,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CACnB,6BAAK,SAAS,EAAC,yBAAyB;gBACtC,6BAAK,SAAS,EAAC,kEAAkE,cAE3E;gBACN,6BAAK,SAAS,EAAC,6BAA6B;oBACzC,YAAY,EAAE;oBACd,aAAa,CAAC,CAAA,MAAA,KAAK,CAAC,GAAG,CAAC,MAAM,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC,CAC9C,CACF,CACP,CACG,CACP;QAGA,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,CACvB;YACE,6BAAK,SAAS,EAAC,yGAAyG;;gBAErH,aAAa,CACZ,IAAI,CAAC,SAAS,CACZ,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EACzD,IAAI,EACJ,CAAC,CACF,IAAI,EAAE,CACR,CACG;YACN,6BAAK,SAAS,EAAC,oDAAoD;gBACjE,6BACE,SAAS,EAAE,GAAG,SAAS,oFAAoF,IAE1G,IAAI,CAAC,SAAS,CACb,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EACzD,IAAI,EACJ,CAAC,CACF,CACG,CACF,CACF,CACP,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
|