treste 2.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/INSTALL.md +264 -0
  3. package/LICENSE +22 -0
  4. package/README.md +388 -0
  5. package/README_PT.md +261 -0
  6. package/dist/ast.d.ts +140 -0
  7. package/dist/ast.d.ts.map +1 -0
  8. package/dist/ast.js +3 -0
  9. package/dist/ast.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +201 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/compiler/exe.d.ts +13 -0
  15. package/dist/compiler/exe.d.ts.map +1 -0
  16. package/dist/compiler/exe.js +129 -0
  17. package/dist/compiler/exe.js.map +1 -0
  18. package/dist/compiler/web.d.ts +43 -0
  19. package/dist/compiler/web.d.ts.map +1 -0
  20. package/dist/compiler/web.js +413 -0
  21. package/dist/compiler/web.js.map +1 -0
  22. package/dist/compiler.d.ts +3 -0
  23. package/dist/compiler.d.ts.map +1 -0
  24. package/dist/compiler.js +195 -0
  25. package/dist/compiler.js.map +1 -0
  26. package/dist/errors.d.ts +21 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +56 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/index.d.ts +5 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +26 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/interpreter.d.ts +32 -0
  35. package/dist/interpreter.d.ts.map +1 -0
  36. package/dist/interpreter.js +425 -0
  37. package/dist/interpreter.js.map +1 -0
  38. package/dist/lexer.d.ts +113 -0
  39. package/dist/lexer.d.ts.map +1 -0
  40. package/dist/lexer.js +446 -0
  41. package/dist/lexer.js.map +1 -0
  42. package/dist/module.d.ts +19 -0
  43. package/dist/module.d.ts.map +1 -0
  44. package/dist/module.js +112 -0
  45. package/dist/module.js.map +1 -0
  46. package/dist/parser.d.ts +45 -0
  47. package/dist/parser.d.ts.map +1 -0
  48. package/dist/parser.js +599 -0
  49. package/dist/parser.js.map +1 -0
  50. package/dist/std/array.trest +85 -0
  51. package/dist/std/index.trest +13 -0
  52. package/dist/std/io.trest +17 -0
  53. package/dist/std/math.trest +66 -0
  54. package/dist/std/string.trest +61 -0
  55. package/dist/types.d.ts +29 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +86 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +101 -0
  60. package/scripts/postbuild.js +90 -0
  61. package/scripts/postinstall.js +89 -0
  62. package/scripts/preinstall.js +92 -0
  63. package/scripts/version.js +52 -0
  64. package/src/std/array.trest +85 -0
  65. package/src/std/index.trest +13 -0
  66. package/src/std/io.trest +17 -0
  67. package/src/std/math.trest +66 -0
  68. package/src/std/string.trest +61 -0
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Interpreter = void 0;
4
+ class Interpreter {
5
+ constructor() {
6
+ this.globalEnv = {
7
+ variables: new Map(),
8
+ functions: new Map(),
9
+ };
10
+ }
11
+ interpret(program) {
12
+ for (const statement of program.body) {
13
+ this.evaluateStatement(statement, this.globalEnv);
14
+ }
15
+ }
16
+ evaluateStatement(statement, env) {
17
+ switch (statement.type) {
18
+ case 'VariableDeclaration':
19
+ return this.evaluateVariableDeclaration(statement, env);
20
+ case 'FunctionDeclaration':
21
+ return this.evaluateFunctionDeclaration(statement, env);
22
+ case 'BlockStatement':
23
+ return this.evaluateBlockStatement(statement, env);
24
+ case 'IfStatement':
25
+ return this.evaluateIfStatement(statement, env);
26
+ case 'WhileStatement':
27
+ return this.evaluateWhileStatement(statement, env);
28
+ case 'ForStatement':
29
+ return this.evaluateForStatement(statement, env);
30
+ case 'ReturnStatement':
31
+ return this.evaluateReturnStatement(statement, env);
32
+ case 'PrintStatement':
33
+ return this.evaluatePrintStatement(statement, env);
34
+ case 'ExpressionStatement':
35
+ return this.evaluateExpression(statement.expression, env);
36
+ case 'BreakStatement':
37
+ return { type: 'break' };
38
+ case 'ContinueStatement':
39
+ return { type: 'continue' };
40
+ case 'TryStatement':
41
+ return this.evaluateTryStatement(statement, env);
42
+ case 'ThrowStatement':
43
+ return this.evaluateThrowStatement(statement, env);
44
+ case 'ImportStatement':
45
+ case 'ExportStatement':
46
+ // Imports/exports são tratados pelo compilador
47
+ return null;
48
+ default:
49
+ throw new Error(`Tipo de declaração não suportado: ${statement.type}`);
50
+ }
51
+ }
52
+ evaluateVariableDeclaration(decl, env) {
53
+ const name = decl.name;
54
+ let value = null;
55
+ if (decl.value) {
56
+ value = this.evaluateExpression(decl.value, env);
57
+ }
58
+ if (decl.kind === 'const' && env.variables.has(name)) {
59
+ throw new Error(`Variável constante '${name}' não pode ser reatribuída`);
60
+ }
61
+ env.variables.set(name, value);
62
+ return null;
63
+ }
64
+ evaluateFunctionDeclaration(decl, env) {
65
+ const funcValue = {
66
+ type: 'function',
67
+ name: decl.name,
68
+ params: decl.params,
69
+ body: decl.body,
70
+ closure: env,
71
+ };
72
+ env.functions.set(decl.name, funcValue);
73
+ return null;
74
+ }
75
+ evaluateBlockStatement(block, env) {
76
+ const newEnv = {
77
+ variables: new Map(),
78
+ functions: new Map(),
79
+ parent: env,
80
+ };
81
+ for (const statement of block.body) {
82
+ const result = this.evaluateStatement(statement, newEnv);
83
+ if (result !== null && this.isReturnValue(result)) {
84
+ return result;
85
+ }
86
+ }
87
+ return null;
88
+ }
89
+ evaluateIfStatement(stmt, env) {
90
+ const condition = this.evaluateExpression(stmt.condition, env);
91
+ if (this.isTruthy(condition)) {
92
+ return this.evaluateBlockStatement(stmt.consequent, env);
93
+ }
94
+ else if (stmt.alternate) {
95
+ if (stmt.alternate.type === 'IfStatement') {
96
+ return this.evaluateIfStatement(stmt.alternate, env);
97
+ }
98
+ else {
99
+ return this.evaluateBlockStatement(stmt.alternate, env);
100
+ }
101
+ }
102
+ return null;
103
+ }
104
+ evaluateReturnStatement(stmt, env) {
105
+ const value = stmt.argument
106
+ ? this.evaluateExpression(stmt.argument, env)
107
+ : null;
108
+ return { type: 'return', value };
109
+ }
110
+ evaluatePrintStatement(stmt, env) {
111
+ const values = stmt.arguments.map((arg) => this.evaluateExpression(arg, env));
112
+ console.log(...values.map((v) => this.formatValue(v)));
113
+ return null;
114
+ }
115
+ evaluateExpression(expr, env) {
116
+ switch (expr.type) {
117
+ case 'AssignmentExpression':
118
+ return this.evaluateAssignment(expr, env);
119
+ case 'BinaryExpression':
120
+ return this.evaluateBinaryExpression(expr, env);
121
+ case 'UnaryExpression':
122
+ return this.evaluateUnaryExpression(expr, env);
123
+ case 'CallExpression':
124
+ return this.evaluateCallExpression(expr, env);
125
+ case 'Identifier':
126
+ return this.evaluateIdentifier(expr, env);
127
+ case 'Literal':
128
+ return expr.value;
129
+ case 'ArrayLiteral':
130
+ return this.evaluateArrayLiteral(expr, env);
131
+ case 'IndexExpression':
132
+ return this.evaluateIndexExpression(expr, env);
133
+ default:
134
+ throw new Error(`Tipo de expressão não suportado: ${expr.type}`);
135
+ }
136
+ }
137
+ evaluateAssignment(expr, env) {
138
+ const value = this.evaluateExpression(expr.right, env);
139
+ if (expr.left.type === 'Identifier') {
140
+ const name = expr.left.name;
141
+ const targetEnv = this.findEnvironment(name, env);
142
+ if (targetEnv) {
143
+ targetEnv.variables.set(name, value);
144
+ }
145
+ else {
146
+ env.variables.set(name, value);
147
+ }
148
+ }
149
+ else if (expr.left.type === 'IndexExpression') {
150
+ const indexExpr = expr.left;
151
+ const array = this.evaluateExpression(indexExpr.object, env);
152
+ const index = this.evaluateExpression(indexExpr.index, env);
153
+ if (!Array.isArray(array)) {
154
+ throw new Error('Indexação só é permitida em arrays');
155
+ }
156
+ if (index < 0) {
157
+ throw new Error(`Índice fora dos limites: ${index}`);
158
+ }
159
+ // Permite expansão automática do array se o índice estiver além do tamanho atual
160
+ if (index >= array.length) {
161
+ // Expande array até o índice necessário
162
+ while (array.length <= index) {
163
+ array.push(null);
164
+ }
165
+ }
166
+ array[index] = value;
167
+ }
168
+ return value;
169
+ }
170
+ evaluateBinaryExpression(expr, env) {
171
+ const left = this.evaluateExpression(expr.left, env);
172
+ const right = this.evaluateExpression(expr.right, env);
173
+ switch (expr.operator) {
174
+ case '+':
175
+ if (typeof left === 'string' || typeof right === 'string') {
176
+ return String(left) + String(right);
177
+ }
178
+ return left + right;
179
+ case '-':
180
+ return left - right;
181
+ case '*':
182
+ return left * right;
183
+ case '/':
184
+ return left / right;
185
+ case '%':
186
+ return left % right;
187
+ case '==':
188
+ return left === right;
189
+ case '!=':
190
+ return left !== right;
191
+ case '<':
192
+ return left < right;
193
+ case '<=':
194
+ return left <= right;
195
+ case '>':
196
+ return left > right;
197
+ case '>=':
198
+ return left >= right;
199
+ case '&&':
200
+ return this.isTruthy(left) && this.isTruthy(right);
201
+ case '||':
202
+ return this.isTruthy(left) || this.isTruthy(right);
203
+ default:
204
+ throw new Error(`Operador binário não suportado: ${expr.operator}`);
205
+ }
206
+ }
207
+ evaluateUnaryExpression(expr, env) {
208
+ const operand = this.evaluateExpression(expr.argument, env);
209
+ switch (expr.operator) {
210
+ case '-':
211
+ return -operand;
212
+ case '!':
213
+ return !this.isTruthy(operand);
214
+ default:
215
+ throw new Error(`Operador unário não suportado: ${expr.operator}`);
216
+ }
217
+ }
218
+ evaluateCallExpression(expr, env) {
219
+ const callee = this.evaluateExpression(expr.callee, env);
220
+ if (typeof callee !== 'object' || callee === null || !('type' in callee) || callee.type !== 'function') {
221
+ throw new Error(`Não é uma função: ${expr.callee.name}`);
222
+ }
223
+ const func = callee;
224
+ const args = expr.arguments.map((arg) => this.evaluateExpression(arg, env));
225
+ if (args.length !== func.params.length) {
226
+ throw new Error(`Número incorreto de argumentos. Esperado ${func.params.length}, recebido ${args.length}`);
227
+ }
228
+ const newEnv = {
229
+ variables: new Map(),
230
+ functions: new Map(),
231
+ parent: func.closure,
232
+ };
233
+ for (let i = 0; i < func.params.length; i++) {
234
+ newEnv.variables.set(func.params[i], args[i]);
235
+ }
236
+ const result = this.evaluateBlockStatement(func.body, newEnv);
237
+ if (result !== null && this.isReturnValue(result)) {
238
+ return result.value;
239
+ }
240
+ return null;
241
+ }
242
+ evaluateIdentifier(expr, env) {
243
+ const name = expr.name;
244
+ const targetEnv = this.findEnvironment(name, env);
245
+ if (targetEnv && targetEnv.variables.has(name)) {
246
+ return targetEnv.variables.get(name);
247
+ }
248
+ // Procura função no ambiente atual e nos pais
249
+ let current = env;
250
+ while (current) {
251
+ if (current.functions.has(name)) {
252
+ return current.functions.get(name);
253
+ }
254
+ current = current.parent;
255
+ }
256
+ throw new Error(`Variável ou função não definida: ${name}`);
257
+ }
258
+ evaluateArrayLiteral(expr, env) {
259
+ return expr.elements.map((el) => this.evaluateExpression(el, env));
260
+ }
261
+ evaluateIndexExpression(expr, env) {
262
+ const array = this.evaluateExpression(expr.object, env);
263
+ const index = this.evaluateExpression(expr.index, env);
264
+ if (!Array.isArray(array) && typeof array !== 'object') {
265
+ throw new Error('Indexação só é permitida em arrays ou objetos');
266
+ }
267
+ if (Array.isArray(array)) {
268
+ if (typeof index !== 'number') {
269
+ throw new Error('Índice deve ser um número para arrays');
270
+ }
271
+ if (index < 0 || index >= array.length) {
272
+ throw new Error(`Índice fora dos limites: ${index}`);
273
+ }
274
+ return array[index];
275
+ }
276
+ // Para objetos
277
+ const key = String(index);
278
+ return array[key];
279
+ }
280
+ evaluateObjectLiteral(expr, env) {
281
+ const obj = {};
282
+ for (const prop of expr.properties) {
283
+ const key = prop.key;
284
+ const value = this.evaluateExpression(prop.value, env);
285
+ obj[key] = value;
286
+ }
287
+ return obj;
288
+ }
289
+ evaluateMemberExpression(expr, env) {
290
+ const object = this.evaluateExpression(expr.object, env);
291
+ if (object === null || (typeof object !== 'object' && !Array.isArray(object))) {
292
+ throw new Error('Acesso a propriedade só é permitido em objetos');
293
+ }
294
+ const property = expr.computed
295
+ ? this.evaluateExpression(expr.property, env)
296
+ : expr.property;
297
+ const key = String(property);
298
+ return object[key];
299
+ }
300
+ findEnvironment(name, env) {
301
+ let current = env;
302
+ while (current) {
303
+ if (current.variables.has(name)) {
304
+ return current;
305
+ }
306
+ current = current.parent;
307
+ }
308
+ return null;
309
+ }
310
+ isTruthy(value) {
311
+ if (value === null || value === false) {
312
+ return false;
313
+ }
314
+ if (typeof value === 'number') {
315
+ return value !== 0;
316
+ }
317
+ if (typeof value === 'string') {
318
+ return value.length > 0;
319
+ }
320
+ return true;
321
+ }
322
+ isReturnValue(value) {
323
+ return value !== null && typeof value === 'object' && 'type' in value && value.type === 'return';
324
+ }
325
+ formatValue(value) {
326
+ if (Array.isArray(value)) {
327
+ return '[' + value.map((v) => this.formatValue(v)).join(', ') + ']';
328
+ }
329
+ if (value === null) {
330
+ return 'null';
331
+ }
332
+ if (typeof value === 'object' && 'type' in value && value.type === 'function') {
333
+ return '<função>';
334
+ }
335
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
336
+ const entries = Object.entries(value).map(([k, v]) => `${k}: ${this.formatValue(v)}`);
337
+ return '{' + entries.join(', ') + '}';
338
+ }
339
+ return String(value);
340
+ }
341
+ evaluateTryStatement(stmt, env) {
342
+ try {
343
+ const result = this.evaluateBlockStatement(stmt.block, env);
344
+ if (result !== null && (this.isReturnValue(result) || result.type === 'break' || result.type === 'continue')) {
345
+ return result;
346
+ }
347
+ return null;
348
+ }
349
+ catch (error) {
350
+ if (stmt.handler) {
351
+ const newEnv = {
352
+ variables: new Map(),
353
+ functions: new Map(),
354
+ parent: env,
355
+ };
356
+ if (stmt.handler.param) {
357
+ newEnv.variables.set(stmt.handler.param, error.message || error);
358
+ }
359
+ return this.evaluateBlockStatement(stmt.handler.body, newEnv);
360
+ }
361
+ throw error;
362
+ }
363
+ finally {
364
+ if (stmt.finalizer) {
365
+ this.evaluateBlockStatement(stmt.finalizer, env);
366
+ }
367
+ }
368
+ }
369
+ evaluateThrowStatement(stmt, env) {
370
+ const value = this.evaluateExpression(stmt.argument, env);
371
+ throw new Error(String(value));
372
+ }
373
+ evaluateWhileStatement(stmt, env) {
374
+ while (this.isTruthy(this.evaluateExpression(stmt.condition, env))) {
375
+ const result = this.evaluateBlockStatement(stmt.body, env);
376
+ if (result !== null) {
377
+ if (this.isReturnValue(result)) {
378
+ return result;
379
+ }
380
+ if (result.type === 'break') {
381
+ break;
382
+ }
383
+ if (result.type === 'continue') {
384
+ continue;
385
+ }
386
+ }
387
+ }
388
+ return null;
389
+ }
390
+ evaluateForStatement(stmt, env) {
391
+ const newEnv = {
392
+ variables: new Map(),
393
+ functions: new Map(),
394
+ parent: env,
395
+ };
396
+ if (stmt.init) {
397
+ this.evaluateStatement(stmt.init, newEnv);
398
+ }
399
+ while (stmt.condition === undefined ||
400
+ this.isTruthy(this.evaluateExpression(stmt.condition, newEnv))) {
401
+ const result = this.evaluateBlockStatement(stmt.body, newEnv);
402
+ if (result !== null) {
403
+ if (this.isReturnValue(result)) {
404
+ return result;
405
+ }
406
+ if (result.type === 'break') {
407
+ break;
408
+ }
409
+ if (result.type === 'continue') {
410
+ // Continue com update
411
+ if (stmt.update) {
412
+ this.evaluateExpression(stmt.update, newEnv);
413
+ }
414
+ continue;
415
+ }
416
+ }
417
+ if (stmt.update) {
418
+ this.evaluateExpression(stmt.update, newEnv);
419
+ }
420
+ }
421
+ return null;
422
+ }
423
+ }
424
+ exports.Interpreter = Interpreter;
425
+ //# sourceMappingURL=interpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.js","sourceRoot":"","sources":["../src/interpreter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ export declare enum TokenType {
2
+ NUMBER = "NUMBER",
3
+ STRING = "STRING",
4
+ BOOLEAN = "BOOLEAN",
5
+ IDENTIFIER = "IDENTIFIER",
6
+ PLUS = "PLUS",
7
+ MINUS = "MINUS",
8
+ MULTIPLY = "MULTIPLY",
9
+ DIVIDE = "DIVIDE",
10
+ MODULO = "MODULO",
11
+ EQUAL = "EQUAL",
12
+ NOT_EQUAL = "NOT_EQUAL",
13
+ LESS = "LESS",
14
+ LESS_EQUAL = "LESS_EQUAL",
15
+ GREATER = "GREATER",
16
+ GREATER_EQUAL = "GREATER_EQUAL",
17
+ AND = "AND",
18
+ OR = "OR",
19
+ NOT = "NOT",
20
+ ASSIGN = "ASSIGN",
21
+ LPAREN = "LPAREN",
22
+ RPAREN = "RPAREN",
23
+ LBRACE = "LBRACE",
24
+ RBRACE = "RBRACE",
25
+ LBRACKET = "LBRACKET",
26
+ RBRACKET = "RBRACKET",
27
+ COMMA = "COMMA",
28
+ SEMICOLON = "SEMICOLON",
29
+ DOT = "DOT",
30
+ IF = "IF",
31
+ ELSE = "ELSE",
32
+ WHILE = "WHILE",
33
+ FOR = "FOR",
34
+ FUNC = "FUNC",
35
+ RETURN = "RETURN",
36
+ TRUE = "TRUE",
37
+ FALSE = "FALSE",
38
+ VAR = "VAR",
39
+ LET = "LET",
40
+ CONST = "CONST",
41
+ PRINT = "PRINT",
42
+ IMPORT = "IMPORT",
43
+ EXPORT = "EXPORT",
44
+ FROM = "FROM",
45
+ AS = "AS",
46
+ BREAK = "BREAK",
47
+ CONTINUE = "CONTINUE",
48
+ CLASS = "CLASS",
49
+ NEW = "NEW",
50
+ THIS = "THIS",
51
+ TRY = "TRY",
52
+ CATCH = "CATCH",
53
+ THROW = "THROW",
54
+ FINALLY = "FINALLY",
55
+ SWITCH = "SWITCH",
56
+ CASE = "CASE",
57
+ DEFAULT = "DEFAULT",
58
+ DO = "DO",
59
+ INTERFACE = "INTERFACE",
60
+ EXTENDS = "EXTENDS",
61
+ IMPLEMENTS = "IMPLEMENTS",
62
+ STATIC = "STATIC",
63
+ PUBLIC = "PUBLIC",
64
+ PRIVATE = "PRIVATE",
65
+ PROTECTED = "PROTECTED",
66
+ ASYNC = "ASYNC",
67
+ AWAIT = "AWAIT",
68
+ ALL = "ALL",
69
+ MODULE = "MODULE",
70
+ IN = "IN",
71
+ OF = "OF",
72
+ NULL = "NULL",
73
+ UNDEFINED = "UNDEFINED",
74
+ TEMPLATE_START = "TEMPLATE_START",
75
+ TEMPLATE_END = "TEMPLATE_END",
76
+ TEMPLATE_EXPR = "TEMPLATE_EXPR",
77
+ SPREAD = "SPREAD",
78
+ REST = "REST",
79
+ POW = "POW",
80
+ NULLISH_COALESCING = "NULLISH_COALESCING",
81
+ OPTIONAL_CHAIN = "OPTIONAL_CHAIN",
82
+ INCREMENT = "INCREMENT",
83
+ DECREMENT = "DECREMENT",
84
+ PLUS_ASSIGN = "PLUS_ASSIGN",
85
+ MINUS_ASSIGN = "MINUS_ASSIGN",
86
+ MULTIPLY_ASSIGN = "MULTIPLY_ASSIGN",
87
+ DIVIDE_ASSIGN = "DIVIDE_ASSIGN",
88
+ EOF = "EOF",
89
+ NEWLINE = "NEWLINE"
90
+ }
91
+ export interface Token {
92
+ type: TokenType;
93
+ value: string | number | boolean;
94
+ line: number;
95
+ column: number;
96
+ }
97
+ export declare class Lexer {
98
+ private input;
99
+ private position;
100
+ private line;
101
+ private column;
102
+ private currentChar;
103
+ private keywords;
104
+ constructor(input: string);
105
+ private advance;
106
+ private skipWhitespace;
107
+ private skipComment;
108
+ private readNumber;
109
+ private readString;
110
+ private readIdentifier;
111
+ tokenize(): Token[];
112
+ }
113
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IAEnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IAGnB,UAAU,eAAe;IAGzB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,MAAM,WAAW;IAGjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,GAAG,QAAQ;IAGX,EAAE,OAAO;IACT,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,EAAE,OAAO;IACT,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,EAAE,OAAO;IACT,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,IAAI,SAAS;IACb,SAAS,cAAc;IAGvB,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAG/B,MAAM,WAAW;IACjB,IAAI,SAAS;IAGb,GAAG,QAAQ;IACX,kBAAkB,uBAAuB;IACzC,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAG/B,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAuB;IAE1C,OAAO,CAAC,QAAQ,CA+Cd;gBAEU,KAAK,EAAE,MAAM;IAKzB,OAAO,CAAC,OAAO;IAaf,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,UAAU;IAyClB,OAAO,CAAC,cAAc;IAgCf,QAAQ,IAAI,KAAK,EAAE;CAwK3B"}