@larvit/log 1.4.0 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- package/index.d.ts +129 -0
- package/index.js +1 -0
- package/index.js.map +1 -0
- package/package.json +1 -1
package/index.d.ts
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
export type Metadata = {
|
2
|
+
[key: string]: string;
|
3
|
+
};
|
4
|
+
export type LogShorthand = (msg: string, metadata?: Metadata) => void;
|
5
|
+
export type LogInt = {
|
6
|
+
conf: LogConf;
|
7
|
+
spanId: string;
|
8
|
+
traceId: string;
|
9
|
+
error: LogShorthand;
|
10
|
+
warn: LogShorthand;
|
11
|
+
info: LogShorthand;
|
12
|
+
verbose: LogShorthand;
|
13
|
+
debug: LogShorthand;
|
14
|
+
silly: LogShorthand;
|
15
|
+
end: () => void;
|
16
|
+
};
|
17
|
+
export declare const LogLevels: {
|
18
|
+
error: {
|
19
|
+
otlpSeverityNumber: number;
|
20
|
+
otlpSeverityText: string;
|
21
|
+
};
|
22
|
+
warn: {
|
23
|
+
otlpSeverityNumber: number;
|
24
|
+
otlpSeverityText: string;
|
25
|
+
};
|
26
|
+
info: {
|
27
|
+
otlpSeverityNumber: number;
|
28
|
+
otlpSeverityText: string;
|
29
|
+
};
|
30
|
+
verbose: {
|
31
|
+
otlpSeverityNumber: number;
|
32
|
+
otlpSeverityText: string;
|
33
|
+
};
|
34
|
+
debug: {
|
35
|
+
otlpSeverityNumber: number;
|
36
|
+
otlpSeverityText: string;
|
37
|
+
};
|
38
|
+
silly: {
|
39
|
+
otlpSeverityNumber: number;
|
40
|
+
otlpSeverityText: string;
|
41
|
+
};
|
42
|
+
};
|
43
|
+
export type LogLevel = keyof typeof LogLevels;
|
44
|
+
export type EntryFormatterConf = {
|
45
|
+
logLevel: LogLevel;
|
46
|
+
metadata?: Metadata;
|
47
|
+
msTimestamp?: number;
|
48
|
+
msg: string;
|
49
|
+
};
|
50
|
+
export type LogConf = {
|
51
|
+
context?: Metadata;
|
52
|
+
entryFormatter?: (conf: EntryFormatterConf) => string;
|
53
|
+
format?: "text" | "json";
|
54
|
+
logLevel?: LogLevel | "none";
|
55
|
+
otlpAdditionalHeaders?: Record<string, string>;
|
56
|
+
otlpHttpBaseURI?: string;
|
57
|
+
parentLog?: LogInt;
|
58
|
+
printTraceInfo?: boolean;
|
59
|
+
spanName?: string;
|
60
|
+
stderr?: (msg: string) => void;
|
61
|
+
stdout?: (msg: string) => void;
|
62
|
+
};
|
63
|
+
export type OtlpAttribute = {
|
64
|
+
key: string;
|
65
|
+
value: {
|
66
|
+
stringValue: string;
|
67
|
+
};
|
68
|
+
};
|
69
|
+
export type OtlpSpanPayload = {
|
70
|
+
resourceSpans: {
|
71
|
+
resource: {
|
72
|
+
attributes: OtlpAttribute[];
|
73
|
+
};
|
74
|
+
scopeSpans: {
|
75
|
+
spans: {
|
76
|
+
attributes?: OtlpAttribute[];
|
77
|
+
endTimeUnixNano: string;
|
78
|
+
kind: 0 | 1 | 2 | 3 | 4 | 5;
|
79
|
+
name: string;
|
80
|
+
parentSpanId?: string;
|
81
|
+
spanId: string;
|
82
|
+
startTimeUnixNano: string;
|
83
|
+
traceId: string;
|
84
|
+
}[];
|
85
|
+
}[];
|
86
|
+
}[];
|
87
|
+
};
|
88
|
+
export type OtlpLogPayload = {
|
89
|
+
resourceLogs: {
|
90
|
+
resource: {
|
91
|
+
attributes: OtlpAttribute[];
|
92
|
+
};
|
93
|
+
scopeLogs: {
|
94
|
+
logRecords: {
|
95
|
+
attributes?: OtlpAttribute[];
|
96
|
+
body: {
|
97
|
+
stringValue: string;
|
98
|
+
};
|
99
|
+
severityNumber: number;
|
100
|
+
severityText: string;
|
101
|
+
spanId?: string;
|
102
|
+
timeUnixNano: string;
|
103
|
+
traceId?: string;
|
104
|
+
}[];
|
105
|
+
}[];
|
106
|
+
}[];
|
107
|
+
};
|
108
|
+
export declare function msgJsonFormatter(conf: EntryFormatterConf): string;
|
109
|
+
export declare function msgTextFormatter(conf: EntryFormatterConf): string;
|
110
|
+
export declare class Log implements LogInt {
|
111
|
+
#private;
|
112
|
+
context: Metadata;
|
113
|
+
otlpAdditionalHeaders: Record<string, string> | null;
|
114
|
+
readonly conf: LogConf;
|
115
|
+
readonly traceId: string;
|
116
|
+
readonly spanId: string;
|
117
|
+
constructor(conf?: LogConf | LogLevel | "none");
|
118
|
+
clone(conf?: LogConf | LogLevel | "none"): Log;
|
119
|
+
error(msg: string, metadata?: Metadata): void;
|
120
|
+
warn(msg: string, metadata?: Metadata): void;
|
121
|
+
info(msg: string, metadata?: Metadata): void;
|
122
|
+
verbose(msg: string, metadata?: Metadata): void;
|
123
|
+
debug(msg: string, metadata?: Metadata): void;
|
124
|
+
silly(msg: string, metadata?: Metadata): void;
|
125
|
+
end(): void;
|
126
|
+
private log;
|
127
|
+
private otlpCall;
|
128
|
+
private otlpCreateSpan;
|
129
|
+
}
|
package/index.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export const LogLevels={error:{otlpSeverityNumber:17,otlpSeverityText:"ERROR"},warn:{otlpSeverityNumber:13,otlpSeverityText:"WARN"},info:{otlpSeverityNumber:9,otlpSeverityText:"INFO"},verbose:{otlpSeverityNumber:8,otlpSeverityText:"DEBUG4"},debug:{otlpSeverityNumber:5,otlpSeverityText:"DEBUG"},silly:{otlpSeverityNumber:3,otlpSeverityText:"TRACE"}};export function msgJsonFormatter(conf){const payload=Object.assign(conf.metadata,{logLevel:conf.logLevel,msg:conf.msg,time:(new Date).toISOString()});return JSON.stringify(payload)}export function msgTextFormatter(conf){let levelOut="";if(conf.logLevel==="silly"){levelOut="[1;37msil[0m"}else if(conf.logLevel==="debug"){levelOut="[1;35mdeb[0m"}else if(conf.logLevel==="verbose"){levelOut="[1;34mver[0m"}else if(conf.logLevel==="info"){levelOut="[1;32minf[0m"}else if(conf.logLevel==="warn"){levelOut="[1;33mwar[0m"}else if(conf.logLevel==="error"){levelOut="[1;31merr[0m"}else{throw new Error(`Invalid conf.logLevel: "${conf.logLevel}"`)}let str=`${(new Date).toISOString().substring(0,19)}Z [${levelOut}] ${conf.msg}`;const metadataStr=JSON.stringify(conf.metadata);if(metadataStr!=="{}"){str+=` ${JSON.stringify(conf.metadata)}`}return str}function generateSpanId(){const bytes=new Uint8Array(8);if(typeof crypto!=="undefined"&&crypto.getRandomValues){crypto.getRandomValues(bytes)}else{for(let i=0;i<8;i++){bytes[i]=Math.floor(Math.random()*256)}}bytes[0]|=1;return Array.from(bytes).map(byte=>byte.toString(16).padStart(2,"0")).join("")}function generateTraceId(){const bytes=new Uint8Array(16);if(typeof crypto!=="undefined"&&crypto.getRandomValues){crypto.getRandomValues(bytes)}else{for(let i=0;i<16;i++){bytes[i]=Math.floor(Math.random()*256)}}bytes[0]|=1;return Array.from(bytes).map(byte=>byte.toString(16).padStart(2,"0")).join("")}function getNsTimestamp(msTimestamp){const nanoseconds=msTimestamp*1e6;const fractionalNanoseconds=Math.floor(performance.now()%1*1e6);return nanoseconds+fractionalNanoseconds}function isFetchError(error){return typeof error==="object"&&error!==null&&"message"in error}export class Log{context;otlpAdditionalHeaders;#entryFormatter;#logLevel;#otlpHttpBaseURI;#parentLog;#printTraceInfo;#spanName;#stderr;#stdout;conf;traceId;spanId;#otlpSpanPayload;constructor(conf){if(conf===undefined){conf={}}else if(typeof conf==="string"){conf={logLevel:conf}}if(typeof conf.parentLog==="object"){for(const[key,value]of Object.entries(conf.parentLog.conf)){if(conf[key]===undefined){conf[key]=value}}}if(conf.logLevel===undefined){conf.logLevel="info"}if(conf.entryFormatter===undefined&&conf.format==="json"){conf.entryFormatter=msgJsonFormatter}else if(conf.entryFormatter===undefined){conf.entryFormatter=msgTextFormatter}if(conf.stderr===undefined){conf.stderr=console.error}if(conf.stdout===undefined){conf.stdout=console.log}this.#entryFormatter=conf.entryFormatter;this.#logLevel=conf.logLevel;this.#otlpHttpBaseURI=conf.otlpHttpBaseURI;this.#parentLog=typeof conf.parentLog==="object"?conf.parentLog:null;this.#printTraceInfo=conf.printTraceInfo===true?true:false;this.#stderr=conf.stderr;this.#stdout=conf.stdout;this.conf=conf;this.context=conf.context||{};this.otlpAdditionalHeaders=conf.otlpAdditionalHeaders;this.spanId=generateSpanId();this.traceId=generateTraceId();this.#spanName=conf.spanName||this.spanId;this.otlpCreateSpan()}clone(conf){if(conf===undefined){conf={}}else if(typeof conf==="string"){conf={logLevel:conf}}if(conf.logLevel===undefined){conf.logLevel=this.#logLevel}if(this.conf.format!=="json"&&conf.format==="json"){conf.entryFormatter=msgJsonFormatter}else{conf.entryFormatter=this.#entryFormatter}if(conf.stderr===undefined){conf.stderr=this.conf.stderr}if(conf.stdout===undefined){conf.stdout=this.conf.stdout}conf.context={...this.context,...conf.context};return new Log(conf)}error(msg,metadata){if(this.#logLevel==="none")return;this.log("error",msg,metadata)}warn(msg,metadata){if(["none","error"].includes(this.#logLevel))return;this.log("warn",msg,metadata)}info(msg,metadata){if(["none","error","warn"].includes(this.#logLevel))return;this.log("info",msg,metadata)}verbose(msg,metadata){if(["none","error","warn","info"].includes(this.#logLevel))return;this.log("verbose",msg,metadata)}debug(msg,metadata){if(["none","error","warn","info","verbose"].includes(this.#logLevel))return;this.log("debug",msg,metadata)}silly(msg,metadata){if(["none","error","warn","info","verbose","debug"].includes(this.#logLevel))return;this.log("silly",msg,metadata)}end(){this.#otlpSpanPayload.resourceSpans[0].scopeSpans[0].spans[0].endTimeUnixNano=String(getNsTimestamp(Date.now()));this.otlpCall({path:"/v1/traces",payload:this.#otlpSpanPayload})}log(logLevel,msg,metadata){const formattedMetadata=Object.assign(metadata||{},this.context);const msTimestamp=Date.now();if(this.#printTraceInfo){Object.assign(metadata,{spanId:this.spanId,traceId:this.traceId})}if(["error","warn"].includes(logLevel)){this.#stderr(this.#entryFormatter({logLevel:logLevel,metadata:formattedMetadata,msTimestamp:msTimestamp,msg:msg}))}else{this.#stdout(this.#entryFormatter({logLevel:logLevel,metadata:formattedMetadata,msTimestamp:msTimestamp,msg:msg}))}if(!this.#otlpHttpBaseURI){return}const payload={resourceLogs:[{resource:{attributes:[]},scopeLogs:[{logRecords:[{body:{stringValue:msg},severityNumber:LogLevels[logLevel].otlpSeverityNumber,severityText:LogLevels[logLevel].otlpSeverityText,timeUnixNano:String(getNsTimestamp(Date.now())),traceId:this.traceId}]}]}]};if(this.#parentLog!==null&&this.#parentLog.spanId){payload.resourceLogs[0].scopeLogs[0].logRecords[0].spanId=this.#parentLog.spanId;payload.resourceLogs[0].scopeLogs[0].logRecords[0].traceId=this.#parentLog.traceId}if(metadata&&Object.keys(metadata).length){payload.resourceLogs[0].scopeLogs[0].logRecords[0].attributes=[];for(const[key,value]of Object.entries(metadata)){payload.resourceLogs[0].scopeLogs[0].logRecords[0].attributes.push({key:key,value:{stringValue:value}})}}this.otlpCall({path:"/v1/logs",payload:payload})}async otlpCall({path,payload}){if(!this.#otlpHttpBaseURI){return true}const urlObj=new URL(this.#otlpHttpBaseURI);const url=`${urlObj.protocol}//${urlObj.username?`${urlObj.username}:${urlObj.password}@`:""}${urlObj.host}${path}`;const headers={"Content-Type":"application/json"};if(this.otlpAdditionalHeaders){Object.assign(headers,this.otlpAdditionalHeaders)}try{const res=await fetch(url,{body:JSON.stringify(payload),headers:headers,method:"POST"});if(!res.ok){const err=new Error("Non-ok return status");err.status=res.status;throw err}const resBody=await res.json();const resBodyStr=JSON.stringify(resBody);if(resBodyStr!=='{"partialSuccess":{}}'&&resBodyStr!=="{}"){throw new Error("Invalid response body from OTLP service. Expected '{\"partialSuccess\":{}}' or '{}' but got: '"+JSON.stringify(resBody)+"'")}return true}catch(err){if(isFetchError(err)){this.#stderr(this.#entryFormatter({logLevel:"error",metadata:{fetchStatus:String(err.status),url:url},msg:err.message}))}else if(err instanceof Error){this.#stderr(this.#entryFormatter({logLevel:"error",metadata:{url:url},msg:err.message}))}else{this.#stderr(this.#entryFormatter({logLevel:"error",metadata:{url:url},msg:"Unknown error sending to OTLP"}))}return false}}async otlpCreateSpan(){const msTimestamp=Date.now();const nsTimestamp=getNsTimestamp(msTimestamp);this.#otlpSpanPayload={resourceSpans:[{resource:{attributes:[]},scopeSpans:[{spans:[{endTimeUnixNano:String(nsTimestamp),kind:0,name:this.#spanName,spanId:this.spanId,startTimeUnixNano:String(nsTimestamp),traceId:this.traceId}]}]}]};if(Object.keys(this.context).length>0){this.#otlpSpanPayload.resourceSpans[0].scopeSpans[0].spans[0].attributes=[];for(const[key,value]of Object.entries(this.context)){this.#otlpSpanPayload.resourceSpans[0].scopeSpans[0].spans[0].attributes.push({key:key,value:{stringValue:String(value)}})}}if(this.#parentLog!==null&&this.#parentLog.spanId){this.#otlpSpanPayload.resourceSpans[0].scopeSpans[0].spans[0].parentSpanId=this.#parentLog.spanId}return this.otlpCall({path:"/v1/traces",payload:this.#otlpSpanPayload})}}
|
package/index.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,8BAA8B;IAC9B,KAAK,EAAE;QACN,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,OAAO;KACzB;IACD,IAAI,EAAE;QACL,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,MAAM;KACxB;IACD,IAAI,EAAE;QACL,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,MAAM;KACxB;IACD,OAAO,EAAE;QACR,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,QAAQ;KAC1B;IACD,KAAK,EAAE;QACN,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,OAAO;KACzB;IACD,KAAK,EAAE;QACN,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,OAAO;KACzB;IACD,6BAA6B;CAC7B,CAAC;AA8EF,MAAM,UAAU,gBAAgB,CAAC,IAAwB;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC9B,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAwB;IACxD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC/B,QAAQ,GAAG,sBAAsB,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACtC,QAAQ,GAAG,sBAAsB,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxC,QAAQ,GAAG,sBAAsB,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACrC,QAAQ,GAAG,sBAAsB,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACrC,QAAQ,GAAG,sBAAsB,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACtC,QAAQ,GAAG,sBAAsB,CAAC;IACnC,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC1B,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,cAAc;IACtB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAEhC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC7D,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACtB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,eAAe;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAEjC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC7D,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACtB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC/C,IAAI,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC;AAED,kDAAkD;AAClD,SAAS,cAAc,CAAC,WAAmB;IAC1C,qEAAqE;IACrE,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;IAE1C,wDAAwD;IACxD,4DAA4D;IAC5D,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;IAE5E,OAAO,WAAW,GAAG,qBAAqB,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC;AAC1E,CAAC;AAED,MAAM,OAAO,GAAG;IACf,OAAO,CAAW;IAClB,qBAAqB,CAAgC;IAC5C,eAAe,CAAuC;IACtD,SAAS,CAAoB;IAC7B,gBAAgB,CAAS;IACzB,UAAU,CAAgB;IAC1B,eAAe,CAAU;IACzB,SAAS,CAAS;IAClB,OAAO,CAAwB;IAC/B,OAAO,CAAwB;IAC/B,IAAI,CAAU,CAAC,wCAAwC;IACvD,OAAO,CAAS;IAChB,MAAM,CAAS;IACxB,gBAAgB,CAAkB;IAElC,YAAY,IAAkC;QAC7C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,GAAG,EAAE,CAAC;QACX,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,2CAA2C;QAC3C,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACnB,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjE,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC9C,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7E,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACnE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,eAAe,EAAE,CAAC;QAEjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;QAE9C,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAED,sDAAsD;IACtD,kEAAkE;IAC3D,KAAK,CAAC,IAAkC;QAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,GAAG,EAAE,CAAC;QACX,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3D,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,OAAO;YACf,GAAG,IAAI,CAAC,OAAO;SACf,CAAC;QAEF,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,GAAW,EAAE,QAAmB;QAC5C,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM;YAAE,OAAO;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEM,IAAI,CAAC,GAAW,EAAE,QAAmB;QAC3C,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QACvD,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEM,IAAI,CAAC,GAAW,EAAE,QAAmB;QAC3C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QAC/D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEM,OAAO,CAAC,GAAW,EAAE,QAAmB;QAC9C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QACvE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,GAAW,EAAE,QAAmB;QAC5C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QAClF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,GAAW,EAAE,QAAmB;QAC5C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO;QAC3F,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAEM,GAAG;QACT,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAEnH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvE,CAAC;IAEO,GAAG,CAAC,QAAkB,EAAE,GAAW,EAAE,QAAmB;QAC/D,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAmB;YAC/B,YAAY,EAAE,CAAC;oBACd,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;oBAC5B,SAAS,EAAE,CAAC;4BACX,UAAU,EAAE,CAAC;oCACZ,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;oCAC1B,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,kBAAkB;oCACtD,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,gBAAgB;oCAClD,YAAY,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oCAChD,OAAO,EAAE,IAAI,CAAC,OAAO;iCACrB,CAAC;yBACF,CAAC;iBACF,CAAC;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACnF,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QACtF,CAAC;QAED,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;YAEnE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;oBAClE,GAAG;oBACH,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;iBAC7B,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,EACtB,IAAI,EACJ,OAAO,GAIP;QACA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAG,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;QAE3H,MAAM,OAAO,GAAG;YACf,cAAc,EAAE,kBAAkB;SAClC,CAAC;QAEF,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,OAAO;gBACP,MAAM,EAAE,MAAM;aACd,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAe,CAAC;gBAE9D,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;gBAExB,MAAM,GAAG,CAAC;YACX,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,UAAU,KAAK,yBAAyB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CAAC,gGAAgG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;YACnJ,CAAC;YAED,OAAO,IAAI,CAAC;QACb,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACvB,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;oBACjC,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE;wBACT,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;wBAC/B,GAAG;qBACH;oBACD,GAAG,EAAE,GAAG,CAAC,OAAO;iBAChB,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;oBACjC,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,EAAE,GAAG,EAAE;oBACjB,GAAG,EAAE,GAAG,CAAC,OAAO;iBAChB,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;oBACjC,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,EAAE,GAAG,EAAE;oBACjB,GAAG,EAAE,+BAA+B;iBACpC,CAAC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,cAAc;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAEhD,IAAI,CAAC,gBAAgB,GAAG;YACvB,aAAa,EAAE,CAAC;oBACf,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;oBAC5B,UAAU,EAAE,CAAC;4BACZ,KAAK,EAAE,CAAC;oCACP,eAAe,EAAE,MAAM,CAAC,WAAW,CAAC;oCACpC,IAAI,EAAE,CAAC;oCACP,IAAI,EAAE,IAAI,CAAC,SAAS;oCACpB,MAAM,EAAE,IAAI,CAAC,MAAM;oCACnB,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC;oCACtC,OAAO,EAAE,IAAI,CAAC,OAAO;iCACrB,CAAC;yBACF,CAAC;iBACF,CAAC;SACF,CAAC;QAEF,4BAA4B;QAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;YAE9E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC7E,GAAG;oBACH,KAAK,EAAE;wBACN,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC;qBAC1B;iBACD,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACrG,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC9E,CAAC;CACD"}
|