@intuitionrobotics/testelot 0.47.58 → 1.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.
- package/LICENSE +3 -0
- package/README.md +3 -0
- package/{core → dist/core}/Action.d.ts +7 -4
- package/dist/core/Action.d.ts.map +1 -0
- package/dist/core/Action.js +214 -0
- package/dist/core/Action.js.map +1 -0
- package/{core → dist/core}/Action_Container.d.ts +6 -3
- package/dist/core/Action_Container.d.ts.map +1 -0
- package/dist/core/Action_Container.js +97 -0
- package/dist/core/Action_Container.js.map +1 -0
- package/{core → dist/core}/Action_Custom.d.ts +2 -1
- package/dist/core/Action_Custom.d.ts.map +1 -0
- package/dist/core/Action_Custom.js +32 -0
- package/dist/core/Action_Custom.js.map +1 -0
- package/{core → dist/core}/Action_Http.d.ts +2 -1
- package/dist/core/Action_Http.d.ts.map +1 -0
- package/dist/core/Action_Http.js +181 -0
- package/dist/core/Action_Http.js.map +1 -0
- package/{core → dist/core}/Action_Log.d.ts +2 -1
- package/dist/core/Action_Log.d.ts.map +1 -0
- package/dist/core/Action_Log.js +36 -0
- package/dist/core/Action_Log.js.map +1 -0
- package/{core → dist/core}/Action_Sleep.d.ts +2 -1
- package/dist/core/Action_Sleep.d.ts.map +1 -0
- package/dist/core/Action_Sleep.js +34 -0
- package/dist/core/Action_Sleep.js.map +1 -0
- package/{core → dist/core}/Action_ThrowException.d.ts +2 -1
- package/dist/core/Action_ThrowException.d.ts.map +1 -0
- package/dist/core/Action_ThrowException.js +33 -0
- package/dist/core/Action_ThrowException.js.map +1 -0
- package/{core → dist/core}/ContainerContext.d.ts +1 -0
- package/dist/core/ContainerContext.d.ts.map +1 -0
- package/{core → dist/core}/ContainerContext.js +5 -10
- package/dist/core/ContainerContext.js.map +1 -0
- package/{core → dist/core}/Reporter.d.ts +2 -1
- package/dist/core/Reporter.d.ts.map +1 -0
- package/{core → dist/core}/Reporter.js +36 -40
- package/dist/core/Reporter.js.map +1 -0
- package/{core → dist/core}/Scenario.d.ts +2 -1
- package/dist/core/Scenario.d.ts.map +1 -0
- package/dist/core/Scenario.js +31 -0
- package/dist/core/Scenario.js.map +1 -0
- package/{core → dist/core}/TestException.d.ts +1 -0
- package/dist/core/TestException.d.ts.map +1 -0
- package/{core → dist/core}/TestException.js +2 -6
- package/dist/core/TestException.js.map +1 -0
- package/{core → dist/core}/_base_apis.d.ts +3 -2
- package/dist/core/_base_apis.d.ts.map +1 -0
- package/dist/core/_base_apis.js +81 -0
- package/dist/core/_base_apis.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/{test-app → dist/test-app}/AppTester.d.ts +2 -1
- package/dist/test-app/AppTester.d.ts.map +1 -0
- package/dist/test-app/AppTester.js +47 -0
- package/dist/test-app/AppTester.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +23 -12
- package/core/Action.js +0 -210
- package/core/Action.js.map +0 -1
- package/core/Action_Container.js +0 -112
- package/core/Action_Container.js.map +0 -1
- package/core/Action_Custom.js +0 -46
- package/core/Action_Custom.js.map +0 -1
- package/core/Action_Http.js +0 -197
- package/core/Action_Http.js.map +0 -1
- package/core/Action_Log.js +0 -48
- package/core/Action_Log.js.map +0 -1
- package/core/Action_Sleep.js +0 -48
- package/core/Action_Sleep.js.map +0 -1
- package/core/Action_ThrowException.js +0 -47
- package/core/Action_ThrowException.js.map +0 -1
- package/core/ContainerContext.js.map +0 -1
- package/core/Reporter.js.map +0 -1
- package/core/Scenario.js +0 -44
- package/core/Scenario.js.map +0 -1
- package/core/TestException.js.map +0 -1
- package/core/_base_apis.js +0 -99
- package/core/_base_apis.js.map +0 -1
- package/index.d.ts +0 -13
- package/index.js +0 -47
- package/index.js.map +0 -1
- package/test-app/AppTester.js +0 -59
- package/test-app/AppTester.js.map +0 -1
package/core/_base_apis.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Testelot is a typescript scenario composing framework
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2020 Intuition Robotics
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
20
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
21
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
22
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
23
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
24
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
25
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.__log = __log;
|
|
30
|
-
exports.__sleep = __sleep;
|
|
31
|
-
exports.__http = __http;
|
|
32
|
-
exports.__custom = __custom;
|
|
33
|
-
exports.__compareKeys = __compareKeys;
|
|
34
|
-
exports.__scenario = __scenario;
|
|
35
|
-
exports.__throwException = __throwException;
|
|
36
|
-
exports.enableTerminalLogReWrite = enableTerminalLogReWrite;
|
|
37
|
-
exports._executeScenario = _executeScenario;
|
|
38
|
-
const ts_common_1 = require("@intuitionrobotics/ts-common");
|
|
39
|
-
const index_1 = require("../index");
|
|
40
|
-
const objectHash = require("object-hash");
|
|
41
|
-
function __log(logMessage, level = ts_common_1.LogLevel.Verbose) {
|
|
42
|
-
// @ts-ignore
|
|
43
|
-
return new index_1.Action_Log(logMessage, level);
|
|
44
|
-
}
|
|
45
|
-
function __sleep(sleepMs) {
|
|
46
|
-
// @ts-ignore
|
|
47
|
-
return new index_1.Action_Sleep(sleepMs);
|
|
48
|
-
}
|
|
49
|
-
function __http(method) {
|
|
50
|
-
// @ts-ignore
|
|
51
|
-
return new index_1.Action_Http(method);
|
|
52
|
-
}
|
|
53
|
-
function __custom(action) {
|
|
54
|
-
// @ts-ignore
|
|
55
|
-
return new index_1.Action_Custom(action);
|
|
56
|
-
}
|
|
57
|
-
function __compareKeys(key1, key2) {
|
|
58
|
-
return __custom((action) => __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
if (objectHash(action.get(key1)) !== objectHash(action.get(key2)))
|
|
60
|
-
throw new index_1.TestException(`NON matched values for keys '${key1.key}' !== '${key2.key}'`);
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
function __scenario(label, reporter) {
|
|
64
|
-
// @ts-ignore
|
|
65
|
-
const scenario = new index_1.Scenario();
|
|
66
|
-
scenario.setLabel(label);
|
|
67
|
-
if (reporter) {
|
|
68
|
-
scenario.setReporter(reporter);
|
|
69
|
-
}
|
|
70
|
-
return scenario;
|
|
71
|
-
}
|
|
72
|
-
function __throwException(message) {
|
|
73
|
-
// @ts-ignore
|
|
74
|
-
return new index_1.Action_ThrowException(message);
|
|
75
|
-
}
|
|
76
|
-
function enableTerminalLogReWrite() {
|
|
77
|
-
ts_common_1.BeLogged.rewriteConsole = (lineCount => {
|
|
78
|
-
let rewriteCommand = "";
|
|
79
|
-
for (let i = 0; i < lineCount; i++) {
|
|
80
|
-
rewriteCommand += "tput cuu1 tput el;";
|
|
81
|
-
}
|
|
82
|
-
try {
|
|
83
|
-
require("child_process").execSync(rewriteCommand, { stdio: 'inherit' });
|
|
84
|
-
}
|
|
85
|
-
catch (e) {
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function _executeScenario(scenario) {
|
|
90
|
-
new Promise(scenario.run)
|
|
91
|
-
.then(() => {
|
|
92
|
-
scenario.logInfo("-------------- COMPLETED -----------------");
|
|
93
|
-
})
|
|
94
|
-
.catch(reason => {
|
|
95
|
-
scenario.logError("---------------- ERROR -----------------");
|
|
96
|
-
scenario.logError(reason);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=_base_apis.js.map
|
package/core/_base_apis.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_base_apis.js","sourceRoot":"","sources":["../../src/main/core/_base_apis.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;AAsBH,sBAGC;AAED,0BAGC;AAED,wBAGC;AAED,4BAGC;AAED,sCAKC;AAED,gCASC;AAED,4CAGC;AAED,4DAYC;AAGD,4CAUC;AAxFD,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;AAED,SAAgB,OAAO,CAAC,OAAe;IACtC,aAAa;IACb,OAAO,IAAI,oBAAY,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,SAAgB,MAAM,CAAyB,MAAkB;IAChE,aAAa;IACb,OAAO,IAAI,mBAAW,CAAI,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,QAAQ,CAAiB,MAAwD;IAChG,aAAa;IACb,OAAO,IAAI,qBAAa,CAAO,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,aAAa,CAAS,IAAmB,EAAE,IAAmB;IAC7E,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;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,CAAC;QACd,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC/C,aAAa;IACb,OAAO,IAAI,6BAAqB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;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,CAAC;YACpC,cAAc,IAAI,oBAAoB,CAAA;QACvC,CAAC;QAED,IAAI,CAAC;YACJ,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;QACb,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;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"}
|
package/index.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export * from './core/TestException';
|
|
2
|
-
export * from './core/Action';
|
|
3
|
-
export * from './core/Action_Container';
|
|
4
|
-
export * from './core/Action_Custom';
|
|
5
|
-
export * from './core/Action_Http';
|
|
6
|
-
export * from './core/Action_Log';
|
|
7
|
-
export * from './core/Action_Sleep';
|
|
8
|
-
export * from './core/Action_ThrowException';
|
|
9
|
-
export * from './core/ContainerContext';
|
|
10
|
-
export * from './core/Reporter';
|
|
11
|
-
export * from './core/Scenario';
|
|
12
|
-
export * from './core/_base_apis';
|
|
13
|
-
export * from './test-app/AppTester';
|
package/index.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Testelot is a typescript scenario composing framework
|
|
4
|
-
*
|
|
5
|
-
* Copyright (C) 2020 Intuition Robotics
|
|
6
|
-
*
|
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
-
* you may not use this file except in compliance with the License.
|
|
9
|
-
* You may obtain a copy of the License at
|
|
10
|
-
*
|
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
*
|
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
* See the License for the specific language governing permissions and
|
|
17
|
-
* limitations under the License.
|
|
18
|
-
*/
|
|
19
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
|
-
if (k2 === undefined) k2 = k;
|
|
21
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
22
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
23
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
24
|
-
}
|
|
25
|
-
Object.defineProperty(o, k2, desc);
|
|
26
|
-
}) : (function(o, m, k, k2) {
|
|
27
|
-
if (k2 === undefined) k2 = k;
|
|
28
|
-
o[k2] = m[k];
|
|
29
|
-
}));
|
|
30
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
31
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
32
|
-
};
|
|
33
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
-
__exportStar(require("./core/TestException"), exports);
|
|
35
|
-
__exportStar(require("./core/Action"), exports);
|
|
36
|
-
__exportStar(require("./core/Action_Container"), exports);
|
|
37
|
-
__exportStar(require("./core/Action_Custom"), exports);
|
|
38
|
-
__exportStar(require("./core/Action_Http"), exports);
|
|
39
|
-
__exportStar(require("./core/Action_Log"), exports);
|
|
40
|
-
__exportStar(require("./core/Action_Sleep"), exports);
|
|
41
|
-
__exportStar(require("./core/Action_ThrowException"), exports);
|
|
42
|
-
__exportStar(require("./core/ContainerContext"), exports);
|
|
43
|
-
__exportStar(require("./core/Reporter"), exports);
|
|
44
|
-
__exportStar(require("./core/Scenario"), exports);
|
|
45
|
-
__exportStar(require("./core/_base_apis"), exports);
|
|
46
|
-
__exportStar(require("./test-app/AppTester"), exports);
|
|
47
|
-
//# sourceMappingURL=index.js.map
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/main/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,gDAA8B;AAC9B,0DAAwC;AACxC,uDAAqC;AACrC,qDAAmC;AACnC,oDAAkC;AAClC,sDAAoC;AACpC,+DAA6C;AAC7C,0DAAwC;AACxC,kDAAgC;AAChC,kDAAgC;AAChC,oDAAkC;AAClC,uDAAqC"}
|
package/test-app/AppTester.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AppTester = void 0;
|
|
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 = (0, __1.__scenario)("root", this.reporter);
|
|
27
|
-
scenario.add(this.scenario);
|
|
28
|
-
yield scenario.run();
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
setScenario(scenario) {
|
|
32
|
-
this.scenario = scenario;
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
build() {
|
|
36
|
-
const pwd = process.env.PWD;
|
|
37
|
-
let packageName;
|
|
38
|
-
if (pwd)
|
|
39
|
-
packageName = pwd.substring(pwd.lastIndexOf("/") + 1);
|
|
40
|
-
this.runTestsImpl()
|
|
41
|
-
.then(() => {
|
|
42
|
-
const errorCount = this.reporter.summary.Error;
|
|
43
|
-
if (errorCount > 0) {
|
|
44
|
-
this.logError(`Package: ${packageName} - Tests ended with ${errorCount} ${errorCount === 1 ? "error" : "errors"}`);
|
|
45
|
-
process.exit(2);
|
|
46
|
-
}
|
|
47
|
-
this.logInfo(`Package: ${packageName} - Tests completed successfully`);
|
|
48
|
-
process.exit(0);
|
|
49
|
-
})
|
|
50
|
-
.catch(reason => {
|
|
51
|
-
this.logError(`Package: ${packageName} - Tests failed`, reason);
|
|
52
|
-
process.exit(3);
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
prepare() {
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
exports.AppTester = AppTester;
|
|
59
|
-
//# sourceMappingURL=AppTester.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,IAAA,cAAU,EAAC,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,CAAC;gBACpB,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;YACjB,CAAC;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"}
|