@intuitionrobotics/testelot 0.41.67 → 0.41.70
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/core/Action.js +125 -196
- package/core/Action.js.map +1 -1
- package/core/Action_Container.js +59 -123
- package/core/Action_Container.js.map +1 -1
- package/core/Action_Custom.js +10 -58
- package/core/Action_Custom.js.map +1 -1
- package/core/Action_Http.js +114 -194
- package/core/Action_Http.js.map +1 -1
- package/core/Action_Log.js +12 -58
- package/core/Action_Log.js.map +1 -1
- package/core/Action_Sleep.js +12 -57
- package/core/Action_Sleep.js.map +1 -1
- package/core/Action_ThrowException.js +11 -56
- package/core/Action_ThrowException.js.map +1 -1
- package/core/ContainerContext.js +14 -16
- package/core/ContainerContext.js.map +1 -1
- package/core/Reporter.js +56 -77
- package/core/Reporter.js.map +1 -1
- package/core/Scenario.js +9 -61
- package/core/Scenario.js.map +1 -1
- package/core/TestException.js +5 -20
- package/core/TestException.js.map +1 -1
- package/core/_base_apis.js +14 -46
- package/core/_base_apis.js.map +1 -1
- package/package.json +1 -1
- package/test-app/AppTester.js +32 -85
- package/test-app/AppTester.js.map +1 -1
package/core/_base_apis.js
CHANGED
|
@@ -25,40 +25,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
25
25
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
26
26
|
});
|
|
27
27
|
};
|
|
28
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
29
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
30
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
31
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
32
|
-
function step(op) {
|
|
33
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
34
|
-
while (_) try {
|
|
35
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
36
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
37
|
-
switch (op[0]) {
|
|
38
|
-
case 0: case 1: t = op; break;
|
|
39
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
40
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
41
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
42
|
-
default:
|
|
43
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
44
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
45
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
46
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
47
|
-
if (t[2]) _.ops.pop();
|
|
48
|
-
_.trys.pop(); continue;
|
|
49
|
-
}
|
|
50
|
-
op = body.call(thisArg, _);
|
|
51
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
52
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
29
|
exports._executeScenario = exports.enableTerminalLogReWrite = exports.__throwException = exports.__scenario = exports.__compareKeys = exports.__custom = exports.__http = exports.__sleep = exports.__log = void 0;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
function __log(logMessage, level) {
|
|
61
|
-
if (level === void 0) { level = ts_common_1.LogLevel.Verbose; }
|
|
30
|
+
const ts_common_1 = require("@intuitionrobotics/ts-common");
|
|
31
|
+
const index_1 = require("../index");
|
|
32
|
+
const objectHash = require("object-hash");
|
|
33
|
+
function __log(logMessage, level = ts_common_1.LogLevel.Verbose) {
|
|
62
34
|
// @ts-ignore
|
|
63
35
|
return new index_1.Action_Log(logMessage, level);
|
|
64
36
|
}
|
|
@@ -79,19 +51,15 @@ function __custom(action) {
|
|
|
79
51
|
}
|
|
80
52
|
exports.__custom = __custom;
|
|
81
53
|
function __compareKeys(key1, key2) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
throw new index_1.TestException("NON matched values for keys '" + key1.key + "' !== '" + key2.key + "'");
|
|
87
|
-
return [2 /*return*/];
|
|
88
|
-
});
|
|
89
|
-
}); });
|
|
54
|
+
return __custom((action) => __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
if (objectHash(action.get(key1)) !== objectHash(action.get(key2)))
|
|
56
|
+
throw new index_1.TestException(`NON matched values for keys '${key1.key}' !== '${key2.key}'`);
|
|
57
|
+
}));
|
|
90
58
|
}
|
|
91
59
|
exports.__compareKeys = __compareKeys;
|
|
92
60
|
function __scenario(label, reporter) {
|
|
93
61
|
// @ts-ignore
|
|
94
|
-
|
|
62
|
+
const scenario = new index_1.Scenario();
|
|
95
63
|
scenario.setLabel(label);
|
|
96
64
|
if (reporter) {
|
|
97
65
|
scenario.setReporter(reporter);
|
|
@@ -105,9 +73,9 @@ function __throwException(message) {
|
|
|
105
73
|
}
|
|
106
74
|
exports.__throwException = __throwException;
|
|
107
75
|
function enableTerminalLogReWrite() {
|
|
108
|
-
ts_common_1.BeLogged.rewriteConsole = (
|
|
109
|
-
|
|
110
|
-
for (
|
|
76
|
+
ts_common_1.BeLogged.rewriteConsole = (lineCount => {
|
|
77
|
+
let rewriteCommand = "";
|
|
78
|
+
for (let i = 0; i < lineCount; i++) {
|
|
111
79
|
rewriteCommand += "tput cuu1 tput el;";
|
|
112
80
|
}
|
|
113
81
|
try {
|
|
@@ -120,10 +88,10 @@ function enableTerminalLogReWrite() {
|
|
|
120
88
|
exports.enableTerminalLogReWrite = enableTerminalLogReWrite;
|
|
121
89
|
function _executeScenario(scenario) {
|
|
122
90
|
new Promise(scenario.run)
|
|
123
|
-
.then(
|
|
91
|
+
.then(() => {
|
|
124
92
|
scenario.logInfo("-------------- COMPLETED -----------------");
|
|
125
93
|
})
|
|
126
|
-
.catch(
|
|
94
|
+
.catch(reason => {
|
|
127
95
|
scenario.logError("---------------- ERROR -----------------");
|
|
128
96
|
scenario.logError(reason);
|
|
129
97
|
});
|
package/core/_base_apis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_base_apis.js","sourceRoot":"","sources":["../../src/main/core/_base_apis.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG
|
|
1
|
+
{"version":3,"file":"_base_apis.js","sourceRoot":"","sources":["../../src/main/core/_base_apis.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;AAEH,4DAGsC;AAEtC,oCAUkB;AAGlB,0CAA0C;AAE1C,SAAgB,KAAK,CAAC,UAAkB,EAAE,QAAkB,oBAAQ,CAAC,OAAO;IAC3E,aAAa;IACb,OAAO,IAAI,kBAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC;AAHD,sBAGC;AAED,SAAgB,OAAO,CAAC,OAAe;IACtC,aAAa;IACb,OAAO,IAAI,oBAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAHD,0BAGC;AAED,SAAgB,MAAM,CAAyB,MAAkB;IAChE,aAAa;IACb,OAAO,IAAI,mBAAW,CAAI,MAAM,CAAC,CAAC;AACnC,CAAC;AAHD,wBAGC;AAED,SAAgB,QAAQ,CAA2C,MAAwD;IAC1H,aAAa;IACb,OAAO,IAAI,qBAAa,CAAO,MAAM,CAAC,CAAC;AACxC,CAAC;AAHD,4BAGC;AAED,SAAgB,aAAa,CAAsB,IAAmB,EAAE,IAAmB;IAC1F,OAAO,QAAQ,CAAU,CAAO,MAAqB,EAAE,EAAE;QACxD,IAAI,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,qBAAa,CAAC,gCAAgC,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACzF,CAAC,CAAA,CAAC,CAAC;AACJ,CAAC;AALD,sCAKC;AAED,SAAgB,UAAU,CAAC,KAA8B,EAAE,QAAmB;IAC7E,aAAa;IACb,MAAM,QAAQ,GAAG,IAAI,gBAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,QAAQ,EAAE;QACb,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;KAC/B;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AATD,gCASC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC/C,aAAa;IACb,OAAO,IAAI,6BAAqB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAHD,4CAGC;AAED,SAAgB,wBAAwB;IACvC,oBAAQ,CAAC,cAAc,GAAG,CAAC,SAAS,CAAC,EAAE;QACtC,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YACnC,cAAc,IAAI,oBAAoB,CAAA;SACtC;QAED,IAAI;YACH,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;SACtE;QAAC,OAAO,CAAC,EAAE;SACX;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AAZD,4DAYC;AAGD,SAAgB,gBAAgB,CAAC,QAAkB;IAClD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;SACvB,IAAI,CAAC,GAAG,EAAE;QACV,QAAQ,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC,CAAC;SACD,KAAK,CAAC,MAAM,CAAC,EAAE;QACf,QAAQ,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;QAC9D,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AAEL,CAAC;AAVD,4CAUC"}
|
package/package.json
CHANGED
package/test-app/AppTester.js
CHANGED
|
@@ -1,17 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
extendStatics(d, b);
|
|
11
|
-
function __() { this.constructor = d; }
|
|
12
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
-
};
|
|
14
|
-
})();
|
|
15
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
16
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
17
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -21,92 +8,52 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
21
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
22
9
|
});
|
|
23
10
|
};
|
|
24
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
25
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
26
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
27
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
28
|
-
function step(op) {
|
|
29
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
30
|
-
while (_) try {
|
|
31
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
32
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
33
|
-
switch (op[0]) {
|
|
34
|
-
case 0: case 1: t = op; break;
|
|
35
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
36
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
37
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
38
|
-
default:
|
|
39
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
40
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
41
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
42
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
43
|
-
if (t[2]) _.ops.pop();
|
|
44
|
-
_.trys.pop(); continue;
|
|
45
|
-
}
|
|
46
|
-
op = body.call(thisArg, _);
|
|
47
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
48
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
12
|
exports.AppTester = void 0;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
__1.Action.resolveTestsToRun();
|
|
71
|
-
scenario = __1.__scenario("root", this.reporter);
|
|
72
|
-
scenario.add(this.scenario);
|
|
73
|
-
return [4 /*yield*/, scenario.run()];
|
|
74
|
-
case 1:
|
|
75
|
-
_a.sent();
|
|
76
|
-
return [2 /*return*/];
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}); };
|
|
80
|
-
return _this;
|
|
13
|
+
const ts_common_1 = require("@intuitionrobotics/ts-common");
|
|
14
|
+
const __1 = require("..");
|
|
15
|
+
class AppTester extends ts_common_1.ModuleManager {
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this.reporter = new __1.Reporter();
|
|
19
|
+
this.runTestsImpl = () => __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
if (!this.scenario)
|
|
21
|
+
throw new ts_common_1.ImplementationMissingException("No test specified!!");
|
|
22
|
+
this.prepare();
|
|
23
|
+
this.init();
|
|
24
|
+
this.reporter.init();
|
|
25
|
+
__1.Action.resolveTestsToRun();
|
|
26
|
+
const scenario = __1.__scenario("root", this.reporter);
|
|
27
|
+
scenario.add(this.scenario);
|
|
28
|
+
yield scenario.run();
|
|
29
|
+
});
|
|
81
30
|
}
|
|
82
|
-
|
|
31
|
+
setScenario(scenario) {
|
|
83
32
|
this.scenario = scenario;
|
|
84
33
|
return this;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var packageName;
|
|
34
|
+
}
|
|
35
|
+
build() {
|
|
36
|
+
const pwd = process.env.PWD;
|
|
37
|
+
let packageName;
|
|
90
38
|
if (pwd)
|
|
91
39
|
packageName = pwd.substring(pwd.lastIndexOf("/") + 1);
|
|
92
40
|
this.runTestsImpl()
|
|
93
|
-
.then(
|
|
94
|
-
|
|
41
|
+
.then(() => {
|
|
42
|
+
const errorCount = this.reporter.summary.Error;
|
|
95
43
|
if (errorCount > 0) {
|
|
96
|
-
|
|
44
|
+
this.logError(`Package: ${packageName} - Tests ended with ${errorCount} ${errorCount === 1 ? "error" : "errors"}`);
|
|
97
45
|
process.exit(2);
|
|
98
46
|
}
|
|
99
|
-
|
|
47
|
+
this.logInfo(`Package: ${packageName} - Tests completed successfully`);
|
|
100
48
|
process.exit(0);
|
|
101
49
|
})
|
|
102
|
-
.catch(
|
|
103
|
-
|
|
50
|
+
.catch(reason => {
|
|
51
|
+
this.logError(`Package: ${packageName} - Tests failed`, reason);
|
|
104
52
|
process.exit(3);
|
|
105
53
|
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
}(ts_common_1.ModuleManager));
|
|
54
|
+
}
|
|
55
|
+
prepare() {
|
|
56
|
+
}
|
|
57
|
+
}
|
|
111
58
|
exports.AppTester = AppTester;
|
|
112
59
|
//# sourceMappingURL=AppTester.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppTester.js","sourceRoot":"","sources":["../../src/main/test-app/AppTester.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AppTester.js","sourceRoot":"","sources":["../../src/main/test-app/AppTester.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,4DAGsC;AACtC,0BAKY;AAEZ,MAAa,SACZ,SAAQ,yBAAa;IAKrB;QACC,KAAK,EAAE,CAAC;QAHD,aAAQ,GAAG,IAAI,YAAQ,EAAE,CAAC;QAqClC,iBAAY,GAAG,GAAS,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACjB,MAAM,IAAI,0CAA8B,CAAC,qBAAqB,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACrB,UAAM,CAAC,iBAAiB,EAAE,CAAA;YAE1B,MAAM,QAAQ,GAAG,cAAU,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC,CAAA,CAAC;IA7CF,CAAC;IAED,WAAW,CAAC,QAAkB;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,KAAK;QACJ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B,IAAI,WAAmB,CAAC;QACxB,IAAI,GAAG;YACN,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAY,EAAE;aACd,IAAI,CAAC,GAAG,EAAE;YACV,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/C,IAAI,UAAU,GAAG,CAAC,EAAE;gBACnB,IAAI,CAAC,QAAQ,CAAC,YAAY,WAAW,uBAAuB,UAAU,IAAI,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACnH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChB;YAED,IAAI,CAAC,OAAO,CAAC,YAAY,WAAW,iCAAiC,CAAC,CAAA;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC;aACD,KAAK,CAAC,MAAM,CAAC,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,YAAY,WAAW,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACR,CAAC;IAED,OAAO;IACP,CAAC;CAeD;AAtDD,8BAsDC"}
|