@qaick/runner 0.30.0 → 0.30.2

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 (41) hide show
  1. package/package-dist/fixtures/qaick-local-http-regression.qaick.json +5002 -0
  2. package/package-dist/fixtures/regression-cancel.qaick.json +314 -0
  3. package/package-dist/fixtures/regression-declared-inputs.qaick.json +281 -0
  4. package/package-dist/fixtures/regression-input-conflict.qaick.json +548 -0
  5. package/package-dist/fixtures/regression-script.qaick.json +58 -0
  6. package/package-dist/fixtures/regression-timeout.qaick.json +314 -0
  7. package/package-dist/fixtures/script-worker-http.qaick.json +226 -0
  8. package/package-dist/package.json +4 -4
  9. package/package-dist/src/demo/RunnerWalkthrough.js +1 -1
  10. package/package-dist/src/runner/RunnerModule.d.ts.map +1 -1
  11. package/package-dist/src/runner/RunnerModule.js +43 -30
  12. package/package-dist/src/runner/RunnerModule.js.map +1 -1
  13. package/package-dist/src/runner/action-template-lowering.d.ts.map +1 -1
  14. package/package-dist/src/runner/action-template-lowering.js +7 -3
  15. package/package-dist/src/runner/action-template-lowering.js.map +1 -1
  16. package/package-dist/src/runner/catalog.d.ts +4 -1
  17. package/package-dist/src/runner/catalog.d.ts.map +1 -1
  18. package/package-dist/src/runner/catalog.js +11 -6
  19. package/package-dist/src/runner/catalog.js.map +1 -1
  20. package/package-dist/src/runner/fixture.js +1 -1
  21. package/package-dist/src/runner/fixture.js.map +1 -1
  22. package/package-dist/src/runner/history.js +1 -1
  23. package/package-dist/src/runner/invocation-inputs.d.ts +33 -0
  24. package/package-dist/src/runner/invocation-inputs.d.ts.map +1 -0
  25. package/package-dist/src/runner/invocation-inputs.js +85 -0
  26. package/package-dist/src/runner/invocation-inputs.js.map +1 -0
  27. package/package-dist/src/runner/loaded-target.d.ts +13 -0
  28. package/package-dist/src/runner/loaded-target.d.ts.map +1 -0
  29. package/package-dist/src/runner/loaded-target.js +23 -0
  30. package/package-dist/src/runner/loaded-target.js.map +1 -0
  31. package/package-dist/src/runner/package-loader.js +2 -2
  32. package/package-dist/src/runner/result-export.d.ts +7 -2
  33. package/package-dist/src/runner/result-export.d.ts.map +1 -1
  34. package/package-dist/src/runner/result-export.js +4 -3
  35. package/package-dist/src/runner/result-export.js.map +1 -1
  36. package/package-dist/src/runner/runtime-client-adapter.d.ts.map +1 -1
  37. package/package-dist/src/runner/runtime-client-adapter.js +4 -3
  38. package/package-dist/src/runner/runtime-client-adapter.js.map +1 -1
  39. package/package-dist/src/runner/studio-artifact-loader.js +2 -2
  40. package/package-dist/src/runner/studio-hierarchy-loader.js +2 -2
  41. package/package.json +4 -4
@@ -0,0 +1,314 @@
1
+ {
2
+ "schemaVersion": 10,
3
+ "project": {
4
+ "id": "regression-timeout",
5
+ "name": "HTTP timeout regression",
6
+ "actions": [],
7
+ "operations": [],
8
+ "variables": [],
9
+ "flows": [
10
+ {
11
+ "id": "regression-timeout",
12
+ "name": "HTTP timeout regression",
13
+ "nodes": [
14
+ {
15
+ "id": "wait",
16
+ "type": "action",
17
+ "clientId": "project",
18
+ "actionId": "http-wait",
19
+ "label": "slow/timeout",
20
+ "position": {
21
+ "x": 820,
22
+ "y": -160
23
+ },
24
+ "inputs": {
25
+ "namespace": {
26
+ "type": "variable",
27
+ "variableName": "customerId"
28
+ }
29
+ },
30
+ "actionDefinition": {
31
+ "id": "http-wait",
32
+ "name": "slow/timeout",
33
+ "type": "api",
34
+ "inputs": [
35
+ {
36
+ "id": "p-namespace",
37
+ "name": "namespace",
38
+ "type": "string",
39
+ "required": false
40
+ },
41
+ {
42
+ "id": "p-sampleValue",
43
+ "name": "sampleValue",
44
+ "type": "string",
45
+ "required": false
46
+ }
47
+ ],
48
+ "outputs": [
49
+ {
50
+ "id": "p-token",
51
+ "name": "token",
52
+ "type": "string",
53
+ "required": false
54
+ },
55
+ {
56
+ "id": "p-sampleValue",
57
+ "name": "sampleValue",
58
+ "type": "string",
59
+ "required": false
60
+ },
61
+ {
62
+ "id": "p-number",
63
+ "name": "number",
64
+ "type": "number",
65
+ "required": false
66
+ },
67
+ {
68
+ "id": "p-decimal",
69
+ "name": "decimal",
70
+ "type": "number",
71
+ "required": false
72
+ },
73
+ {
74
+ "id": "p-falseValue",
75
+ "name": "falseValue",
76
+ "type": "boolean",
77
+ "required": false
78
+ },
79
+ {
80
+ "id": "p-nullValue",
81
+ "name": "nullValue",
82
+ "type": "json",
83
+ "required": false
84
+ },
85
+ {
86
+ "id": "p-object",
87
+ "name": "object",
88
+ "type": "json",
89
+ "required": false
90
+ },
91
+ {
92
+ "id": "p-array",
93
+ "name": "array",
94
+ "type": "json",
95
+ "required": false
96
+ }
97
+ ],
98
+ "api": {
99
+ "method": "POST",
100
+ "url": "http://127.0.0.1:5197/slow/timeout",
101
+ "query": "{\"namespace\":\"$namespace\"}",
102
+ "headers": "{\"Content-Type\":\"text/plain\"}",
103
+ "body": "fixed request",
104
+ "response": {
105
+ "fields": [
106
+ {
107
+ "name": "token",
108
+ "path": "$.token",
109
+ "type": "string"
110
+ },
111
+ {
112
+ "name": "sampleValue",
113
+ "path": "$.sampleValue",
114
+ "type": "string"
115
+ },
116
+ {
117
+ "name": "number",
118
+ "path": "$.number",
119
+ "type": "number"
120
+ },
121
+ {
122
+ "name": "decimal",
123
+ "path": "$.decimal",
124
+ "type": "number"
125
+ },
126
+ {
127
+ "name": "falseValue",
128
+ "path": "$.falseValue",
129
+ "type": "boolean"
130
+ },
131
+ {
132
+ "name": "nullValue",
133
+ "path": "$.nullValue",
134
+ "type": "json"
135
+ },
136
+ {
137
+ "name": "object",
138
+ "path": "$.object",
139
+ "type": "json"
140
+ },
141
+ {
142
+ "name": "array",
143
+ "path": "$.array",
144
+ "type": "json"
145
+ }
146
+ ]
147
+ }
148
+ }
149
+ }
150
+ },
151
+ {
152
+ "id": "after",
153
+ "type": "action",
154
+ "clientId": "project",
155
+ "actionId": "http-after",
156
+ "label": "mark/AFTER-TIMEOUT",
157
+ "position": {
158
+ "x": 800,
159
+ "y": -200
160
+ },
161
+ "inputs": {
162
+ "namespace": {
163
+ "type": "variable",
164
+ "variableName": "customerId"
165
+ }
166
+ },
167
+ "actionDefinition": {
168
+ "id": "http-after",
169
+ "name": "mark/AFTER-TIMEOUT",
170
+ "type": "api",
171
+ "inputs": [
172
+ {
173
+ "id": "p-namespace",
174
+ "name": "namespace",
175
+ "type": "string",
176
+ "required": false
177
+ },
178
+ {
179
+ "id": "p-sampleValue",
180
+ "name": "sampleValue",
181
+ "type": "string",
182
+ "required": false
183
+ }
184
+ ],
185
+ "outputs": [
186
+ {
187
+ "id": "p-token",
188
+ "name": "token",
189
+ "type": "string",
190
+ "required": false
191
+ },
192
+ {
193
+ "id": "p-sampleValue",
194
+ "name": "sampleValue",
195
+ "type": "string",
196
+ "required": false
197
+ },
198
+ {
199
+ "id": "p-number",
200
+ "name": "number",
201
+ "type": "number",
202
+ "required": false
203
+ },
204
+ {
205
+ "id": "p-decimal",
206
+ "name": "decimal",
207
+ "type": "number",
208
+ "required": false
209
+ },
210
+ {
211
+ "id": "p-falseValue",
212
+ "name": "falseValue",
213
+ "type": "boolean",
214
+ "required": false
215
+ },
216
+ {
217
+ "id": "p-nullValue",
218
+ "name": "nullValue",
219
+ "type": "json",
220
+ "required": false
221
+ },
222
+ {
223
+ "id": "p-object",
224
+ "name": "object",
225
+ "type": "json",
226
+ "required": false
227
+ },
228
+ {
229
+ "id": "p-array",
230
+ "name": "array",
231
+ "type": "json",
232
+ "required": false
233
+ }
234
+ ],
235
+ "api": {
236
+ "method": "POST",
237
+ "url": "http://127.0.0.1:5197/mark/AFTER-TIMEOUT",
238
+ "query": "{\"namespace\":\"$namespace\"}",
239
+ "headers": "{\"Content-Type\":\"text/plain\"}",
240
+ "body": "fixed request",
241
+ "response": {
242
+ "fields": [
243
+ {
244
+ "name": "token",
245
+ "path": "$.token",
246
+ "type": "string"
247
+ },
248
+ {
249
+ "name": "sampleValue",
250
+ "path": "$.sampleValue",
251
+ "type": "string"
252
+ },
253
+ {
254
+ "name": "number",
255
+ "path": "$.number",
256
+ "type": "number"
257
+ },
258
+ {
259
+ "name": "decimal",
260
+ "path": "$.decimal",
261
+ "type": "number"
262
+ },
263
+ {
264
+ "name": "falseValue",
265
+ "path": "$.falseValue",
266
+ "type": "boolean"
267
+ },
268
+ {
269
+ "name": "nullValue",
270
+ "path": "$.nullValue",
271
+ "type": "json"
272
+ },
273
+ {
274
+ "name": "object",
275
+ "path": "$.object",
276
+ "type": "json"
277
+ },
278
+ {
279
+ "name": "array",
280
+ "path": "$.array",
281
+ "type": "json"
282
+ }
283
+ ]
284
+ }
285
+ }
286
+ }
287
+ }
288
+ ],
289
+ "sequence": [
290
+ "wait",
291
+ "after"
292
+ ],
293
+ "edges": [],
294
+ "inputs": [
295
+ {
296
+ "id": "p-customerId",
297
+ "name": "customerId",
298
+ "type": "string",
299
+ "required": false,
300
+ "defaultValue": "timeout"
301
+ }
302
+ ],
303
+ "outputs": [],
304
+ "variables": []
305
+ }
306
+ ],
307
+ "flowReferences": [
308
+ {
309
+ "source": "project",
310
+ "flowId": "regression-timeout"
311
+ }
312
+ ]
313
+ }
314
+ }
@@ -0,0 +1,226 @@
1
+ {
2
+ "schemaVersion": 10,
3
+ "project": {
4
+ "id": "script-gap",
5
+ "name": "Script execution regression",
6
+ "actions": [],
7
+ "operations": [],
8
+ "variables": [],
9
+ "flows": [
10
+ {
11
+ "id": "script-gap",
12
+ "name": "Script execution regression",
13
+ "nodes": [
14
+ {
15
+ "id": "compute",
16
+ "type": "action",
17
+ "clientId": "project",
18
+ "actionId": "compute-script",
19
+ "label": "Compute 42 from script",
20
+ "position": {
21
+ "x": 0,
22
+ "y": 0
23
+ },
24
+ "inputs": {
25
+ "amount": {
26
+ "type": "literal",
27
+ "value": 7
28
+ }
29
+ },
30
+ "actionDefinition": {
31
+ "id": "compute-script",
32
+ "name": "Compute 42",
33
+ "type": "script",
34
+ "inputs": [
35
+ {
36
+ "id": "amount",
37
+ "name": "amount",
38
+ "type": "number",
39
+ "required": false
40
+ }
41
+ ],
42
+ "outputs": [
43
+ {
44
+ "id": "p-computed",
45
+ "name": "computed",
46
+ "type": "number",
47
+ "required": false
48
+ }
49
+ ],
50
+ "script": "function run(args) { return { computed: 42 }; }"
51
+ }
52
+ },
53
+ {
54
+ "id": "consume-42",
55
+ "type": "action",
56
+ "clientId": "project",
57
+ "actionId": "consume-42",
58
+ "label": "consume-42",
59
+ "position": {
60
+ "x": 780,
61
+ "y": -240
62
+ },
63
+ "inputs": {
64
+ "computed": {
65
+ "type": "hierarchy-output",
66
+ "address": {
67
+ "scope": "routine",
68
+ "segments": [
69
+ {
70
+ "kind": "flow",
71
+ "position": 1
72
+ },
73
+ {
74
+ "kind": "step",
75
+ "position": 1
76
+ }
77
+ ]
78
+ },
79
+ "iterations": [],
80
+ "outputName": "computed",
81
+ "reconciliation": {
82
+ "occurrencePath": [
83
+ "script-gap",
84
+ "compute"
85
+ ]
86
+ }
87
+ }
88
+ },
89
+ "actionDefinition": {
90
+ "id": "consume-42",
91
+ "name": "produce/basics",
92
+ "type": "api",
93
+ "inputs": [
94
+ {
95
+ "id": "computed",
96
+ "name": "computed",
97
+ "type": "number",
98
+ "required": true
99
+ }
100
+ ],
101
+ "outputs": [],
102
+ "api": {
103
+ "method": "POST",
104
+ "url": "http://127.0.0.1:5197/consume/consume-42?namespace=script-browser",
105
+ "headers": "{\"Content-Type\":\"application/json\"}",
106
+ "body": "$computed"
107
+ }
108
+ }
109
+ },
110
+ {
111
+ "id": "compute-args",
112
+ "type": "action",
113
+ "clientId": "project",
114
+ "actionId": "compute-args",
115
+ "label": "Compute args",
116
+ "position": {
117
+ "x": 0,
118
+ "y": 0
119
+ },
120
+ "inputs": {
121
+ "amount": {
122
+ "type": "literal",
123
+ "value": 7
124
+ }
125
+ },
126
+ "actionDefinition": {
127
+ "id": "compute-args",
128
+ "name": "Compute 42",
129
+ "type": "script",
130
+ "inputs": [
131
+ {
132
+ "id": "amount",
133
+ "name": "amount",
134
+ "type": "number",
135
+ "required": false
136
+ }
137
+ ],
138
+ "outputs": [
139
+ {
140
+ "id": "p-computed",
141
+ "name": "computed",
142
+ "type": "number",
143
+ "required": false
144
+ }
145
+ ],
146
+ "script": "function run(args) { return { computed: args.amount * 3 }; }"
147
+ }
148
+ },
149
+ {
150
+ "id": "consume-args",
151
+ "type": "action",
152
+ "clientId": "project",
153
+ "actionId": "consume-args",
154
+ "label": "consume-args",
155
+ "position": {
156
+ "x": 780,
157
+ "y": -240
158
+ },
159
+ "inputs": {
160
+ "computed": {
161
+ "type": "hierarchy-output",
162
+ "address": {
163
+ "scope": "routine",
164
+ "segments": [
165
+ {
166
+ "kind": "flow",
167
+ "position": 1
168
+ },
169
+ {
170
+ "kind": "step",
171
+ "position": 3
172
+ }
173
+ ]
174
+ },
175
+ "iterations": [],
176
+ "outputName": "computed",
177
+ "reconciliation": {
178
+ "occurrencePath": [
179
+ "script-gap",
180
+ "compute-args"
181
+ ]
182
+ }
183
+ }
184
+ },
185
+ "actionDefinition": {
186
+ "id": "consume-args",
187
+ "name": "produce/basics",
188
+ "type": "api",
189
+ "inputs": [
190
+ {
191
+ "id": "computed",
192
+ "name": "computed",
193
+ "type": "number",
194
+ "required": true
195
+ }
196
+ ],
197
+ "outputs": [],
198
+ "api": {
199
+ "method": "POST",
200
+ "url": "http://127.0.0.1:5197/consume/consume-args?namespace=script-browser",
201
+ "headers": "{\"Content-Type\":\"application/json\"}",
202
+ "body": "$computed"
203
+ }
204
+ }
205
+ }
206
+ ],
207
+ "sequence": [
208
+ "compute",
209
+ "consume-42",
210
+ "compute-args",
211
+ "consume-args"
212
+ ],
213
+ "edges": [],
214
+ "inputs": [],
215
+ "outputs": [],
216
+ "variables": []
217
+ }
218
+ ],
219
+ "flowReferences": [
220
+ {
221
+ "source": "project",
222
+ "flowId": "script-gap"
223
+ }
224
+ ]
225
+ }
226
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qaick/runner",
3
3
  "description": "Reusable QAick Runner module and standalone execution application.",
4
- "version": "0.30.0",
4
+ "version": "0.30.2",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "package-dist",
@@ -59,9 +59,9 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@qaick/contract": "0.3.0",
62
- "@qaick/executor": "0.2.0",
63
- "@qaick/http-executor": "0.2.0",
64
- "@qaick/runtime": "0.2.0",
62
+ "@qaick/executor": "0.2.1",
63
+ "@qaick/http-executor": "0.2.1",
64
+ "@qaick/runtime": "0.2.2",
65
65
  "zustand": "^5.0.15"
66
66
  },
67
67
  "peerDependencies": {
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { RUNNER_UI_VERSION } from '../build-info.js';
3
+ import { RUNNER_UI_VERSION } from "../build-info.js";
4
4
  const steps = [
5
5
  { id: 'overview', title: 'Runner overview', action: 'Start with the loaded execution package.', detail: 'Runner loads a durable QAick artifact, lets you choose a target, executes it, and presents structured evidence.' },
6
6
  { id: 'package', title: 'Load and select a package', action: 'Choose a Project or Flow target.', detail: 'The package selector lists the available target. Load package accepts the serialized file produced by Studio.' },
@@ -1 +1 @@
1
- {"version":3,"file":"RunnerModule.d.ts","sourceRoot":"","sources":["../../../src/runner/RunnerModule.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAOtD,OAAO,KAAK,EAAkB,gBAAgB,EAAmB,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAiB5D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AASD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAoC,EAAE,MAAM,EAAE,EAAE,iBAAiB,+BAEvG;AAwID,KAAK,WAAW,GAAG;IAAE,iBAAiB,CAAC,EAAC,gBAAgB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAkBrQ,wBAAgB,yBAAyB,CAAC,KAAK,EAAC,WAAW,EAAE,EAAC,QAAQ,EAAC,UAAU,EAAE,GAAE,WAAW,EAAE,CAAe;AACjH,eAAO,MAAM,aAAa,GAAE,UAAS,gBAAgB,WAA8D,CAAC;AACpH,wBAAgB,oBAAoB,CAAC,OAAO,EAAC,UAAU,EAAE,EAAC,OAAO,CAAC,EAAC,gBAAgB,GAAE,UAAU,EAAE,CAAkG;AACnM,wBAAgB,mBAAmB,CAAC,OAAO,EAAC,UAAU,EAAE,EAAC,OAAO,CAAC,EAAC,gBAAgB,GAAE,UAAU,GAAC,SAAS,CAAsG;AAC9M,wBAAgB,kBAAkB,CAAC,OAAO,EAAC,UAAU,EAAE,EAAC,OAAO,CAAC,EAAC,gBAAgB,GAAE,eAAe,GAAC,SAAS,CAS3G;AACD,wBAAgB,mBAAmB,CAAC,EAAC,OAAO,EAAC,EAAC;IAAC,OAAO,EAAC,UAAU,EAAE,CAAA;CAAC,+BAGnE"}
1
+ {"version":3,"file":"RunnerModule.d.ts","sourceRoot":"","sources":["../../../src/runner/RunnerModule.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAQtD,OAAO,KAAK,EAAkB,gBAAgB,EAAmB,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAkB5D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AASD,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,QAAoC,EAAE,MAAM,EAAE,EAAE,iBAAiB,+BAEvG;AA6ID,KAAK,WAAW,GAAG;IAAE,iBAAiB,CAAC,EAAC,gBAAgB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAkBrQ,wBAAgB,yBAAyB,CAAC,KAAK,EAAC,WAAW,EAAE,EAAC,QAAQ,EAAC,UAAU,EAAE,GAAE,WAAW,EAAE,CAAe;AACjH,eAAO,MAAM,aAAa,GAAE,UAAS,gBAAgB,WAA8D,CAAC;AACpH,wBAAgB,oBAAoB,CAAC,OAAO,EAAC,UAAU,EAAE,EAAC,OAAO,CAAC,EAAC,gBAAgB,GAAE,UAAU,EAAE,CAAkG;AACnM,wBAAgB,mBAAmB,CAAC,OAAO,EAAC,UAAU,EAAE,EAAC,OAAO,CAAC,EAAC,gBAAgB,GAAE,UAAU,GAAC,SAAS,CAAsG;AAC9M,wBAAgB,kBAAkB,CAAC,OAAO,EAAC,UAAU,EAAE,EAAC,OAAO,CAAC,EAAC,gBAAgB,GAAE,eAAe,GAAC,SAAS,CAS3G;AACD,wBAAgB,mBAAmB,CAAC,EAAC,OAAO,EAAC,EAAC;IAAC,OAAO,EAAC,UAAU,EAAE,CAAA;CAAC,+BAGnE"}