@muritavo/testing-toolkit 0.4.1 → 0.4.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.
|
@@ -39,5 +39,6 @@ export declare function deployContract<const ABI extends any[] = []>({ contractA
|
|
|
39
39
|
*/
|
|
40
40
|
export declare function deployGraph(graphPath: string, contractAddresses: {
|
|
41
41
|
[deployedContractName: string]: string;
|
|
42
|
-
}): Promise<void>;
|
|
42
|
+
}, graphName: string, networkName: string): Promise<void>;
|
|
43
|
+
export declare function stopBlockchain(): Promise<void>;
|
|
43
44
|
export {};
|
|
@@ -69,30 +69,44 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
69
69
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
73
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
74
|
+
if (ar || !(i in from)) {
|
|
75
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
76
|
+
ar[i] = from[i];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
80
|
+
};
|
|
72
81
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
73
82
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
74
83
|
};
|
|
75
84
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
76
|
-
exports.deployGraph = exports.deployContract = exports.deriveWallet = exports.startBlockchain = exports.blockchainLogger = void 0;
|
|
85
|
+
exports.stopBlockchain = exports.deployGraph = exports.deployContract = exports.deriveWallet = exports.startBlockchain = exports.blockchainLogger = void 0;
|
|
77
86
|
var debug_1 = __importDefault(require("debug"));
|
|
78
87
|
var blockchain_1 = require("../client/blockchain");
|
|
79
88
|
var child_process_1 = require("child_process");
|
|
80
89
|
var utility_1 = require("../utility");
|
|
81
90
|
var fs_1 = require("fs");
|
|
82
91
|
var path_1 = require("path");
|
|
92
|
+
var ethers_1 = require("ethers");
|
|
83
93
|
exports.blockchainLogger = (0, debug_1.default)("@muritavo/testing-toolkit/blockchain");
|
|
84
94
|
var instance;
|
|
85
95
|
function startBlockchain(_a) {
|
|
86
96
|
return __awaiter(this, arguments, void 0, function (_b) {
|
|
87
|
-
var prevFork, serverInstance, accounts;
|
|
97
|
+
var prevFork, blockNumberBeforeReset, blockNumberAfterReset, advanceBlockNumbersBy, _c, _d, _e, serverInstance, hardhatServer, accounts;
|
|
88
98
|
var _this = this;
|
|
89
|
-
var projectFolder = _b.projectRootFolder,
|
|
90
|
-
return __generator(this, function (
|
|
91
|
-
switch (
|
|
99
|
+
var projectFolder = _b.projectRootFolder, _f = _b.port, port = _f === void 0 ? 8545 : _f, graphqlProject = _b.graphqlProject;
|
|
100
|
+
return __generator(this, function (_g) {
|
|
101
|
+
switch (_g.label) {
|
|
92
102
|
case 0:
|
|
93
|
-
if (!instance) return [3 /*break*/,
|
|
103
|
+
if (!instance) return [3 /*break*/, 7];
|
|
94
104
|
prevFork = instance.process.config.networks.hardhat.forking;
|
|
95
|
-
if (!prevFork) return [3 /*break*/,
|
|
105
|
+
if (!prevFork) return [3 /*break*/, 6];
|
|
106
|
+
return [4 /*yield*/, instance.process.ethers.provider.getBlockNumber()];
|
|
107
|
+
case 1:
|
|
108
|
+
blockNumberBeforeReset = _g.sent();
|
|
109
|
+
/** This will clear any logs/changes made during testing */
|
|
96
110
|
return [4 /*yield*/, instance.process.network.provider.request({
|
|
97
111
|
method: "hardhat_reset",
|
|
98
112
|
params: [
|
|
@@ -104,27 +118,63 @@ function startBlockchain(_a) {
|
|
|
104
118
|
},
|
|
105
119
|
],
|
|
106
120
|
})];
|
|
107
|
-
case
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
case 2:
|
|
122
|
+
/** This will clear any logs/changes made during testing */
|
|
123
|
+
_g.sent();
|
|
124
|
+
return [4 /*yield*/, instance.process.ethers.provider.getBlockNumber()];
|
|
111
125
|
case 3:
|
|
126
|
+
blockNumberAfterReset = _g.sent();
|
|
127
|
+
advanceBlockNumbersBy = blockNumberBeforeReset - blockNumberAfterReset;
|
|
128
|
+
/**
|
|
129
|
+
* When using graph-node, it refuses to reprocess previous blocks
|
|
130
|
+
* So in a cenario where we republish a graph after this reset, it doesn't read the new logs
|
|
131
|
+
*
|
|
132
|
+
* That's why, after the reset, we "skip" blocks back to the latest block, and continue testing from there
|
|
133
|
+
* */
|
|
134
|
+
return [4 /*yield*/, instance.process.network.provider.request({
|
|
135
|
+
method: "hardhat_mine",
|
|
136
|
+
params: ["0x".concat(advanceBlockNumbersBy.toString(16))],
|
|
137
|
+
})];
|
|
138
|
+
case 4:
|
|
139
|
+
/**
|
|
140
|
+
* When using graph-node, it refuses to reprocess previous blocks
|
|
141
|
+
* So in a cenario where we republish a graph after this reset, it doesn't read the new logs
|
|
142
|
+
*
|
|
143
|
+
* That's why, after the reset, we "skip" blocks back to the latest block, and continue testing from there
|
|
144
|
+
* */
|
|
145
|
+
_g.sent();
|
|
146
|
+
_c = exports.blockchainLogger;
|
|
147
|
+
_e = (_d = "Reset hardhat state (#".concat(blockNumberBeforeReset, " to #").concat(blockNumberAfterReset, ") and now it's at block ")).concat;
|
|
148
|
+
return [4 /*yield*/, instance.process.ethers.provider.getBlockNumber()];
|
|
149
|
+
case 5:
|
|
150
|
+
_c.apply(void 0, [_e.apply(_d, [_g.sent()])]);
|
|
151
|
+
_g.label = 6;
|
|
152
|
+
case 6: return [2 /*return*/, instance.addresses];
|
|
153
|
+
case 7:
|
|
112
154
|
if (projectFolder)
|
|
113
155
|
(0, exports.blockchainLogger)("Starting blockchain server at \"".concat(projectFolder, "\""));
|
|
114
|
-
if (graphqlProject)
|
|
115
|
-
(0, child_process_1.execSync)("docker
|
|
156
|
+
if (graphqlProject) {
|
|
157
|
+
(0, child_process_1.execSync)("docker compose up --detach", {
|
|
116
158
|
cwd: graphqlProject,
|
|
117
159
|
stdio: "ignore",
|
|
118
160
|
});
|
|
161
|
+
process.on("SIGINT", function () {
|
|
162
|
+
(0, child_process_1.execSync)("docker compose down", {
|
|
163
|
+
cwd: graphqlProject,
|
|
164
|
+
stdio: "ignore",
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
}
|
|
119
168
|
return [4 /*yield*/, initHardhat(projectFolder)];
|
|
120
|
-
case
|
|
121
|
-
serverInstance =
|
|
169
|
+
case 8:
|
|
170
|
+
serverInstance = _g.sent();
|
|
122
171
|
return [4 /*yield*/, new Promise(function (r, rej) {
|
|
123
172
|
var timeoutId = setTimeout(function () {
|
|
124
173
|
rej(new Error("Something went wrong while starting hardhat node"));
|
|
125
174
|
}, 30000);
|
|
126
|
-
serverInstance.tasks[serverInstance.taskNames.TASK_NODE_SERVER_READY].setAction(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
175
|
+
serverInstance.tasks[serverInstance.taskNames.TASK_NODE_SERVER_READY].setAction(function (args) { return __awaiter(_this, void 0, void 0, function () {
|
|
127
176
|
return __generator(this, function (_a) {
|
|
177
|
+
hardhatServer = args.server;
|
|
128
178
|
clearTimeout(timeoutId);
|
|
129
179
|
r();
|
|
130
180
|
return [2 /*return*/];
|
|
@@ -132,10 +182,11 @@ function startBlockchain(_a) {
|
|
|
132
182
|
}); });
|
|
133
183
|
serverInstance.run("node", {
|
|
134
184
|
port: port,
|
|
185
|
+
noDeploy: true,
|
|
135
186
|
});
|
|
136
187
|
})];
|
|
137
|
-
case
|
|
138
|
-
|
|
188
|
+
case 9:
|
|
189
|
+
_g.sent();
|
|
139
190
|
accounts = new Array(serverInstance.config.networks.hardhat.accounts.count)
|
|
140
191
|
.fill(undefined)
|
|
141
192
|
.reduce(function (res, _, idx) {
|
|
@@ -151,6 +202,8 @@ function startBlockchain(_a) {
|
|
|
151
202
|
contracts: {},
|
|
152
203
|
addresses: accounts,
|
|
153
204
|
port: port,
|
|
205
|
+
graphqlProject: graphqlProject,
|
|
206
|
+
hardhatServer: hardhatServer,
|
|
154
207
|
};
|
|
155
208
|
(0, blockchain_1.setPort)(port);
|
|
156
209
|
return [2 /*return*/, accounts];
|
|
@@ -278,8 +331,16 @@ function deployContract(_a) {
|
|
|
278
331
|
initializationKey_1 = funcName;
|
|
279
332
|
});
|
|
280
333
|
if (!connection[initializationKey_1]) return [3 /*break*/, 8];
|
|
281
|
-
|
|
334
|
+
/**
|
|
335
|
+
* The way to decide which overloaded function to call is to pass overrides at the end 🤡
|
|
336
|
+
* https://github.com/ethers-io/ethers.js/issues/4383
|
|
337
|
+
*/
|
|
338
|
+
return [4 /*yield*/, connection[initializationKey_1].apply(connection, __spreadArray(__spreadArray([], args, false), [ethers_1.Typed.overrides({})], false))];
|
|
282
339
|
case 7:
|
|
340
|
+
/**
|
|
341
|
+
* The way to decide which overloaded function to call is to pass overrides at the end 🤡
|
|
342
|
+
* https://github.com/ethers-io/ethers.js/issues/4383
|
|
343
|
+
*/
|
|
283
344
|
_e.sent();
|
|
284
345
|
_e.label = 8;
|
|
285
346
|
case 8:
|
|
@@ -318,10 +379,9 @@ exports.deployContract = deployContract;
|
|
|
318
379
|
/**
|
|
319
380
|
* Takes a graph and deploys it into the graph-node
|
|
320
381
|
*/
|
|
321
|
-
function deployGraph(graphPath, contractAddresses) {
|
|
382
|
+
function deployGraph(graphPath, contractAddresses, graphName, networkName) {
|
|
322
383
|
return __awaiter(this, void 0, void 0, function () {
|
|
323
384
|
function generateGraphManifest() {
|
|
324
|
-
var graphManifestCacheDir = cacheDir({ name: "graph-manifest" });
|
|
325
385
|
var subgraphYml = parse((0, fs_1.readFileSync)((0, path_1.resolve)(graphPath, "subgraph.yaml")).toString());
|
|
326
386
|
function relativeToAbsolutePath(relativePath) {
|
|
327
387
|
return (0, path_1.resolve)(graphPath, relativePath);
|
|
@@ -329,10 +389,12 @@ function deployGraph(graphPath, contractAddresses) {
|
|
|
329
389
|
subgraphYml.schema.file = relativeToAbsolutePath(subgraphYml.schema.file);
|
|
330
390
|
for (var _i = 0, _a = subgraphYml.dataSources; _i < _a.length; _i++) {
|
|
331
391
|
var dataSource = _a[_i];
|
|
332
|
-
dataSource.network =
|
|
392
|
+
dataSource.network = networkName;
|
|
333
393
|
if (!contractAddresses[dataSource.source.abi])
|
|
334
394
|
throw new Error("Please, provide the address for the contract \"".concat(dataSource.source.abi, "\" deployed on the local hardhat node"));
|
|
335
395
|
dataSource.source.address = contractAddresses[dataSource.source.abi];
|
|
396
|
+
if (instance.process.config.networks.hardhat.forking)
|
|
397
|
+
dataSource.source.startBlock = currentBlock;
|
|
336
398
|
dataSource.mapping.file = relativeToAbsolutePath(dataSource.mapping.file);
|
|
337
399
|
for (var _b = 0, _c = dataSource.mapping.abis; _b < _c.length; _b++) {
|
|
338
400
|
var abi = _c[_b];
|
|
@@ -345,7 +407,7 @@ function deployGraph(graphPath, contractAddresses) {
|
|
|
345
407
|
(0, fs_1.writeFileSync)(graphManifestPath, stringify(subgraphYml));
|
|
346
408
|
return graphManifestPath;
|
|
347
409
|
}
|
|
348
|
-
var _a, parse, stringify, cacheDir, stdioMode, error_1, localhostGraphManifest;
|
|
410
|
+
var _a, parse, stringify, cacheDir, graphManifestCacheDir, currentBlock, stdioMode, error_1, localhostGraphManifest;
|
|
349
411
|
return __generator(this, function (_b) {
|
|
350
412
|
switch (_b.label) {
|
|
351
413
|
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("yaml")); })];
|
|
@@ -354,33 +416,57 @@ function deployGraph(graphPath, contractAddresses) {
|
|
|
354
416
|
return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("find-cache-dir")); })];
|
|
355
417
|
case 2:
|
|
356
418
|
cacheDir = (_b.sent()).default;
|
|
357
|
-
|
|
358
|
-
|
|
419
|
+
graphManifestCacheDir = cacheDir({
|
|
420
|
+
name: "graph-manifest",
|
|
421
|
+
cwd: graphPath,
|
|
422
|
+
});
|
|
423
|
+
return [4 /*yield*/, instance.process.ethers.provider.getBlockNumber()];
|
|
359
424
|
case 3:
|
|
360
|
-
|
|
425
|
+
currentBlock = _b.sent();
|
|
426
|
+
stdioMode = exports.blockchainLogger.enabled ? "inherit" : "ignore";
|
|
361
427
|
_b.label = 4;
|
|
362
428
|
case 4:
|
|
363
|
-
|
|
364
|
-
|
|
429
|
+
if (!true) return [3 /*break*/, 9];
|
|
430
|
+
_b.label = 5;
|
|
431
|
+
case 5:
|
|
432
|
+
_b.trys.push([5, 6, , 8]);
|
|
433
|
+
(0, exports.blockchainLogger)("Trying to create graph");
|
|
434
|
+
(0, child_process_1.execSync)("graph create --node http://localhost:8020/ ".concat(graphName), {
|
|
365
435
|
cwd: graphPath,
|
|
366
436
|
stdio: stdioMode,
|
|
437
|
+
env: {
|
|
438
|
+
PATH: process.env.PATH,
|
|
439
|
+
},
|
|
367
440
|
});
|
|
368
|
-
return [3 /*break*/,
|
|
369
|
-
case
|
|
441
|
+
return [3 /*break*/, 9];
|
|
442
|
+
case 6:
|
|
370
443
|
error_1 = _b.sent();
|
|
371
444
|
return [4 /*yield*/, (0, utility_1.wait)(1000)];
|
|
372
|
-
case
|
|
445
|
+
case 7:
|
|
373
446
|
_b.sent();
|
|
374
|
-
return [3 /*break*/,
|
|
375
|
-
case
|
|
376
|
-
case
|
|
447
|
+
return [3 /*break*/, 8];
|
|
448
|
+
case 8: return [3 /*break*/, 4];
|
|
449
|
+
case 9:
|
|
377
450
|
localhostGraphManifest = generateGraphManifest();
|
|
378
|
-
(0,
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
451
|
+
(0, exports.blockchainLogger)("Trying to deploy graph");
|
|
452
|
+
return [4 /*yield*/, new Promise(function (res, rej) {
|
|
453
|
+
(0, child_process_1.exec)("graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 ".concat(graphName, " ").concat(localhostGraphManifest, " -l v0.0.1"), {
|
|
454
|
+
cwd: graphPath,
|
|
455
|
+
env: {
|
|
456
|
+
PATH: "".concat(process.env.PATH),
|
|
457
|
+
},
|
|
458
|
+
}, function (error, stdOut) {
|
|
459
|
+
console.log(stdOut);
|
|
460
|
+
if (error) {
|
|
461
|
+
rej(error);
|
|
462
|
+
}
|
|
463
|
+
res();
|
|
464
|
+
});
|
|
465
|
+
})];
|
|
466
|
+
case 10:
|
|
467
|
+
_b.sent();
|
|
382
468
|
return [4 /*yield*/, (0, utility_1.wait)(1000)];
|
|
383
|
-
case
|
|
469
|
+
case 11:
|
|
384
470
|
_b.sent();
|
|
385
471
|
return [2 /*return*/];
|
|
386
472
|
}
|
|
@@ -388,4 +474,35 @@ function deployGraph(graphPath, contractAddresses) {
|
|
|
388
474
|
});
|
|
389
475
|
}
|
|
390
476
|
exports.deployGraph = deployGraph;
|
|
477
|
+
function stopBlockchain() {
|
|
478
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
479
|
+
var e_3;
|
|
480
|
+
return __generator(this, function (_a) {
|
|
481
|
+
switch (_a.label) {
|
|
482
|
+
case 0:
|
|
483
|
+
if (!instance) return [3 /*break*/, 5];
|
|
484
|
+
_a.label = 1;
|
|
485
|
+
case 1:
|
|
486
|
+
_a.trys.push([1, 3, , 4]);
|
|
487
|
+
return [4 /*yield*/, instance.hardhatServer.close()];
|
|
488
|
+
case 2:
|
|
489
|
+
_a.sent();
|
|
490
|
+
if (instance.graphqlProject)
|
|
491
|
+
(0, child_process_1.execSync)("docker compose down", {
|
|
492
|
+
cwd: instance.graphqlProject,
|
|
493
|
+
stdio: "ignore",
|
|
494
|
+
});
|
|
495
|
+
return [3 /*break*/, 4];
|
|
496
|
+
case 3:
|
|
497
|
+
e_3 = _a.sent();
|
|
498
|
+
return [3 /*break*/, 4];
|
|
499
|
+
case 4:
|
|
500
|
+
instance = null;
|
|
501
|
+
_a.label = 5;
|
|
502
|
+
case 5: return [2 /*return*/];
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
exports.stopBlockchain = stopBlockchain;
|
|
391
508
|
//# sourceMappingURL=blockchain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../src/native/blockchain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../src/native/blockchain.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAE1B,mDAA+C;AAC/C,+CAA+C;AAC/C,sCAAkC;AAClC,yBAAwE;AACxE,6BAA+B;AAC/B,iCAA+B;AAGlB,QAAA,gBAAgB,GAAG,IAAA,eAAK,EAAC,sCAAsC,CAAC,CAAC;AAI9E,IAAI,QAcI,CAAC;AAET,SAAsB,eAAe;wDAAC,EAgBrC;;;YAfoB,aAAa,uBAAA,EAChC,YAAW,EAAX,IAAI,mBAAG,IAAI,KAAA,EACX,cAAc,oBAAA;;;;yBAcV,QAAQ,EAAR,wBAAQ;oBACJ,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;yBAC9D,QAAQ,EAAR,wBAAQ;oBAER,qBAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAA;;oBADnD,sBAAsB,GAC1B,SAAuD;oBACzD,2DAA2D;oBAC3D,qBAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;4BAC9C,MAAM,EAAE,eAAe;4BACvB,MAAM,EAAE;gCACN;oCACE,OAAO,EAAE;wCACP,UAAU,EAAE,QAAQ,CAAC,GAAG;wCACxB,WAAW,EAAE,QAAQ,CAAC,WAAW;qCAClC;iCACF;6BACF;yBACF,CAAC,EAAA;;oBAXF,2DAA2D;oBAC3D,SAUE,CAAC;oBAED,qBAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAA;;oBADnD,qBAAqB,GACzB,SAAuD;oBACnD,qBAAqB,GACzB,sBAAsB,GAAG,qBAAqB,CAAC;oBACjD;;;;;yBAKK;oBACL,qBAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;4BAC9C,MAAM,EAAE,cAAc;4BACtB,MAAM,EAAE,CAAC,YAAK,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAE,CAAC;yBACpD,CAAC,EAAA;;oBATF;;;;;yBAKK;oBACL,SAGE,CAAC;oBAEH,KAAA,wBAAgB,CAAA;+DACW,sBAAsB,kBAAQ,qBAAqB;oBAA2B,qBAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAA;;oBADhK,kBACE,cAAuG,SAAuD,EAAE,EACjK,CAAC;;wBAGJ,sBAAO,QAAQ,CAAC,SAAS,EAAC;;oBAE5B,IAAI,aAAa;wBACf,IAAA,wBAAgB,EAAC,0CAAkC,aAAa,OAAG,CAAC,CAAC;oBACvE,IAAI,cAAc,EAAE,CAAC;wBACnB,IAAA,wBAAQ,EAAC,4BAA4B,EAAE;4BACrC,GAAG,EAAE,cAAc;4BACnB,KAAK,EAAE,QAAQ;yBAChB,CAAC,CAAC;wBACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;4BACnB,IAAA,wBAAQ,EAAC,qBAAqB,EAAE;gCAC9B,GAAG,EAAE,cAAc;gCACnB,KAAK,EAAE,QAAQ;6BAChB,CAAC,CAAC;wBACL,CAAC,CAAC,CAAC;oBACL,CAAC;oBAKsB,qBAAM,WAAW,CAAC,aAAa,CAAC,EAAA;;oBAAjD,cAAc,GAAG,SAAgC;oBAEvD,qBAAM,IAAI,OAAO,CAAO,UAAC,CAAC,EAAE,GAAG;4BAC7B,IAAM,SAAS,GAAG,UAAU,CAAC;gCAC3B,GAAG,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;4BACrE,CAAC,EAAE,KAAK,CAAC,CAAC;4BACV,cAAc,CAAC,KAAK,CAClB,cAAc,CAAC,SAAS,CAAC,sBAAsB,CAChD,CAAC,SAAS,CAAC,UAAO,IAAI;;oCACrB,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;oCAC5B,YAAY,CAAC,SAAS,CAAC,CAAC;oCACxB,CAAC,EAAE,CAAC;;;iCACL,CAAC,CAAC;4BACH,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;gCACzB,IAAI,MAAA;gCACJ,QAAQ,EAAE,IAAI;6BACf,CAAC,CAAC;wBACL,CAAC,CAAC,EAAA;;oBAfF,SAeE,CAAC;oBACG,QAAQ,GAAG,IAAI,KAAK,CACvB,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAgB,CAAC,KAAK,CAC/D;yBACE,IAAI,CAAC,SAAS,CAAC;yBACf,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,EAAE,GAAG;;wBAClB,IAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;wBAClD,6BACK,GAAG,gBACL,OAAO,CAAC,OAAO,IAAG;4BACjB,SAAS,EAAE,OAAO,CAAC,GAAG;yBACvB,OACD;oBACJ,CAAC,EAAE,EAAE,CAAgD,CAAC;oBACxD,QAAQ,GAAG;wBACT,OAAO,EAAE,cAAc;wBACvB,UAAU,EAAE,aAAa;wBACzB,SAAS,EAAE,EAAE;wBACb,SAAS,EAAE,QAAQ;wBACnB,IAAI,MAAA;wBACJ,cAAc,gBAAA;wBACd,aAAa,eAAA;qBACd,CAAC;oBACF,IAAA,oBAAO,EAAC,IAAI,CAAC,CAAC;oBACd,sBAAO,QAAQ,EAAC;;;;CACjB;AApHD,0CAoHC;AAED,SAAgB,YAAY,CAAC,KAAiB,EAAE,OAAY;IAA/B,sBAAA,EAAA,SAAiB;IAC5C,IAAM,MAAM,GAAG,OAAO,CAAC,MAAiC,CAAC;IACzD,IAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC1D,IAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAC7C,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC7C,QAAQ,CAAC,IAAI,GAAG,WAAI,KAAK,CAAE,CAC5B,CAAC;IACF,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,UAAU;QACtB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAXD,oCAWC;AAED,SAAe,WAAW,CAAC,GAAW;;;;;;;oBAC9B,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBAClC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;;;oBAEA,qBAAM,CAAC;;;;6CAClB,OAAO,EAAP,wBAAO;wCAAE,sBAAO,OAAO,CAAC,SAAS,CAAC,EAAC;4CAC1B,sFAAa,SAAS,QAAC;4CAA/B,sBAAO,CAAC,SAAuB,CAAC,CAAC,OAAO,EAAC;;;6BAC/C,CAAC,EAAE,EAAA;;oBAHE,OAAO,GAAG,CAAC,SAGb,CAEH;oBACD,KAAA,OAAO,CAAA;oBAAc,qBAAM,CAAC;;;;6CACtB,OAAO,EAAP,wBAAO;wCAAE,sBAAO,OAAO,CAAC,kCAAkC,CAAC,EAAC;4CACpD,sFAAa,kCAAkC,QAAC;4CAAvD,sBAAO,SAAgD,EAAC;;;6BAC9D,CAAC,EAAE,EAAA;;oBAHJ,GAAQ,SAAS,GAAG,CAAC,SAGjB,CAAsD,CAAC;oBAC3D,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC3B,sBAAO,OAEN,EAAC;;;oBAEF,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC3B,MAAM,GAAC,CAAC;;;;;CAEX;AAED,SAAsB,cAAc;wDAA+B,EAQlE;;;;YAPC,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,IAAI,UAAA;;;;oBAMJ,IAAA,wBAAgB,EACd,6BAAsB,YAAY,mBAAS,IAAI,CAAC,MAAM,yBAAe,IAAI;yBACtE,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,UAAG,CAAC,eAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAG,EAAjD,CAAiD,CAAC;yBAC7D,IAAI,CAAC,IAAI,CAAC,CAAE,CAChB,CAAC;;;;oBAEA,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,CAAA;wBACvB,MAAM,IAAI,KAAK,CACb,kIAAkI,CACnI,CAAC;oBACE,WAAW,GAAG;;;;wCACQ,sFAAa,MAAM,QAAC;;oCAA7B,IAAI,GAAK,CAAA,SAAoB,CAAA,QAAzB;oCACf,IAAI,GAAG,IAAI,IAAI,CACnB,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAC7B,iBAAU,WAAW,cAAI,QAAQ,CAAC,IAAI,CAAE,CACzC,CACF,CAAC;yCACS,CAAA,KAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;kDAC1B,WAAW;oCACX,qBAAM,MAAI,CAAC,UAAU,EAAE,EAAA;wCAFzB,sBAAO,6BAEL,SAAuB,MACA,EAAC;;;yBAC3B,CAAC;oBACiB,qBAAM,WAAW,CAAC,QAAS,CAAC,UAAU,CAAC,EAAA;;oBAAlD,MAAM,GAAK,CAAA,SAAuC,CAAA,OAA5C;oBACE,qBAAM,MAAM,CAAC,UAAU,EAAE,EAAA;;oBAAlC,KAAK,GAAI,CAAA,SAAyB,CAAA,GAA7B;oBACI,qBAAM,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAA;;oBAAvD,OAAO,GAAG,SAA6C;oBAEhD,qBAAM,OAAO,CAAC,MAAM,EAAE,EAAA;;oBAA7B,SAAO,SAAsB;oBACnC,qBAAM,MAAI,CAAC,iBAAiB,EAAE,EAAA;;oBAA9B,SAA8B,CAAC;yBAE3B,CAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA,EAAf,yBAAe;oBACjB,IAAA,wBAAgB,EACd,2CAAoC,KAAK,uBAAa,IAAI,CAAE,CAC7D,CAAC;oBACI,UAAU,GAAG,MAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBACnC,sBAAoB,YAAY,CAAC;oBACrC,UAAU,CAAC,SAAS,CAAC,eAAe,CAAC,UAAC,IAAI;wBACxC,IAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;wBAC3B,IACE,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;4BAChC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;4BAElC,mBAAiB,GAAG,QAAQ,CAAC;oBACjC,CAAC,CAAC,CAAC;yBACC,UAAU,CAAC,mBAAiB,CAAC,EAA7B,wBAA6B;oBAC/B;;;uBAGG;oBACH,qBAAM,UAAU,CAAC,mBAAiB,CAAC,OAA7B,UAAU,kCAAuB,IAAI,WAAE,cAAK,CAAC,SAAS,CAAC,EAAE,CAAC,YAAC;;oBAJjE;;;uBAGG;oBACH,SAAiE,CAAC;;;;oBAGzD,qBAAM,MAAI,CAAC,UAAU,EAAE,EAAA;;oBAAhC,UAAO,GAAE,SAAuB;oBACzB,qBAAM,KAAK,CAAC,UAAU,EAAE,EAAA;;oBAA/B,QAAK,GAAE,SAAwB;oBACrB,qBAAM,WAAW,EAAE,EAAA;yBAH/B,uBAGE,WAAQ,GAAE,SAAmB;6BAC7B;;;oBAGS,qBAAM,MAAI,CAAC,UAAU,EAAE,EAAA;;oBAAhC,UAAO,GAAE,SAAuB;oBACzB,qBAAM,KAAK,CAAC,UAAU,EAAE,EAAA;;oBAA/B,QAAK,GAAE,SAAwB;oBACrB,qBAAM,WAAW,EAAE,EAAA;yBAH/B,uBAGE,WAAQ,GAAE,SAAmB;6BAC7B;;;;oBAGJ,IAAA,wBAAgB,EAAC,0BAA0B,EAAE,GAAC,CAAC,CAAC;oBAChD,MAAM,GAAC,CAAC;;;;;CAEX;AA3ED,wCA2EC;AAED;;GAEG;AACH,SAAsB,WAAW,CAC/B,SAAiB,EACjB,iBAEC,EACD,SAAiB,EACjB,WAAmB;;QAUnB,SAAS,qBAAqB;YAC5B,IAAM,WAAW,GAAG,KAAK,CACvB,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAC7D,CAAC;YACF,SAAS,sBAAsB,CAAC,YAAoB;gBAClD,OAAO,IAAA,cAAO,EAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAC1C,CAAC;YACD,WAAW,CAAC,MAAM,CAAC,IAAI,GAAG,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1E,KAAuB,UAAuB,EAAvB,KAAA,WAAW,CAAC,WAAW,EAAvB,cAAuB,EAAvB,IAAuB,EAAE,CAAC;gBAA5C,IAAI,UAAU,SAAA;gBACjB,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC;gBACjC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;oBAC3C,MAAM,IAAI,KAAK,CACb,yDAAiD,UAAU,CAAC,MAAM,CAAC,GAAG,0CAAsC,CAC7G,CAAC;gBACJ,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrE,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;oBAClD,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC;gBAC9C,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1E,KAAgB,UAAuB,EAAvB,KAAA,UAAU,CAAC,OAAO,CAAC,IAAI,EAAvB,cAAuB,EAAvB,IAAuB;oBAAlC,IAAI,GAAG,SAAA;oBACV,GAAG,CAAC,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAAA;YAChD,CAAC;YACD,IAAM,iBAAiB,GAAG,IAAA,cAAO,EAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAA,eAAU,EAAC,qBAAqB,CAAC;gBACpC,IAAA,cAAS,EAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,IAAA,kBAAa,EAAC,iBAAiB,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YACzD,OAAO,iBAAiB,CAAC;QAC3B,CAAC;;;;wBAlC4B,sFAAa,MAAM,QAAC;;oBAA3C,KAAuB,SAAoB,EAAzC,KAAK,WAAA,EAAE,SAAS,eAAA;oBACM,sFAAa,gBAAgB,QAAC;;oBAA3C,QAAQ,GAAK,CAAA,SAA8B,CAAA,QAAnC;oBACnB,qBAAqB,GAAG,QAAQ,CAAC;wBACrC,IAAI,EAAE,gBAAgB;wBACtB,GAAG,EAAE,SAAS;qBACf,CAAC,CAAC;oBACkB,qBAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAA;;oBAAtE,YAAY,GAAG,SAAuD;oBA6BtE,SAAS,GAAG,wBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;;;yBAC3D,IAAI;;;;oBAEP,IAAA,wBAAgB,EAAC,wBAAwB,CAAC,CAAC;oBAC3C,IAAA,wBAAQ,EAAC,qDAA8C,SAAS,CAAE,EAAE;wBAClE,GAAG,EAAE,SAAS;wBACd,KAAK,EAAE,SAAS;wBAChB,GAAG,EAAE;4BACH,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;yBACvB;qBACF,CAAC,CAAC;oBACH,wBAAM;;;oBAEN,qBAAM,IAAA,cAAI,EAAC,IAAI,CAAC,EAAA;;oBAAhB,SAAgB,CAAC;;;;oBAIf,sBAAsB,GAAG,qBAAqB,EAAE,CAAC;oBACvD,IAAA,wBAAgB,EAAC,wBAAwB,CAAC,CAAC;oBAC3C,qBAAM,IAAI,OAAO,CAAO,UAAC,GAAG,EAAE,GAAG;4BAC/B,IAAA,oBAAI,EACF,kFAA2E,SAAS,cAAI,sBAAsB,eAAY,EAC1H;gCACE,GAAG,EAAE,SAAS;gCACd,GAAG,EAAE;oCACH,IAAI,EAAE,UAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE;iCAC5B;6BACF,EACD,UAAC,KAAK,EAAE,MAAM;gCACZ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gCACpB,IAAI,KAAK,EAAE,CAAC;oCACV,GAAG,CAAC,KAAK,CAAC,CAAC;gCACb,CAAC;gCACD,GAAG,EAAE,CAAC;4BACR,CAAC,CACF,CAAC;wBACJ,CAAC,CAAC,EAAA;;oBAjBF,SAiBE,CAAC;oBAEH,qBAAM,IAAA,cAAI,EAAC,IAAI,CAAC,EAAA;;oBAAhB,SAAgB,CAAC;;;;;CAClB;AAlFD,kCAkFC;AAED,SAAsB,cAAc;;;;;;yBAC9B,QAAQ,EAAR,wBAAQ;;;;oBAER,qBAAM,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,EAAA;;oBAApC,SAAoC,CAAC;oBACrC,IAAI,QAAQ,CAAC,cAAc;wBACzB,IAAA,wBAAQ,EAAC,qBAAqB,EAAE;4BAC9B,GAAG,EAAE,QAAQ,CAAC,cAAc;4BAC5B,KAAK,EAAE,QAAQ;yBAChB,CAAC,CAAC;;;;;;oBAEP,QAAQ,GAAG,IAAI,CAAC;;;;;;CAEnB;AAZD,wCAYC"}
|