@quenk/potoo 4.1.13 → 4.1.14
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/lib/actor/system/vm/conf.d.ts +7 -0
- package/lib/actor/system/vm/index.js +1 -1
- package/lib/actor/system/vm/index.js.map +1 -1
- package/lib/actor/system/vm/strategy/error.d.ts +3 -1
- package/lib/actor/system/vm/strategy/error.js +10 -5
- package/lib/actor/system/vm/strategy/error.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Err } from '@quenk/noni/lib/control/err';
|
|
2
|
+
import { TrapAction } from '../../template';
|
|
1
3
|
import { LogSink } from './log';
|
|
2
4
|
/**
|
|
3
5
|
* PartialConf allows only some values to be specified in a Conf object
|
|
@@ -5,6 +7,7 @@ import { LogSink } from './log';
|
|
|
5
7
|
*/
|
|
6
8
|
export interface PartialConf {
|
|
7
9
|
log?: Partial<Conf['log']>;
|
|
10
|
+
trap?: Conf['trap'];
|
|
8
11
|
}
|
|
9
12
|
/**
|
|
10
13
|
* Conf objects are used to create and configue various aspects of thhe VM.
|
|
@@ -27,4 +30,8 @@ export interface Conf {
|
|
|
27
30
|
*/
|
|
28
31
|
sink: LogSink;
|
|
29
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* trap if specified is used as the default trap handler for all actors.
|
|
35
|
+
*/
|
|
36
|
+
trap?: (e: Err) => TrapAction;
|
|
30
37
|
}
|
|
@@ -50,7 +50,7 @@ class PVM {
|
|
|
50
50
|
let vm;
|
|
51
51
|
let allocator = new map_1.MapAllocator(() => vm);
|
|
52
52
|
let log = new writer_1.LogWriter(config.log.sink, (0, log_1.toLogLevelValue)(config.log.level));
|
|
53
|
-
vm = new PVM(allocator, new scheduler_1.Scheduler(), new collector_1.ThreadCollector(() => vm), new error_1.SupervisorErrorStrategy(allocator), log, new dispatcher_1.EventDispatcher(log), new runner_1.ThreadRunner(() => vm), new group_1.GroupMap());
|
|
53
|
+
vm = new PVM(allocator, new scheduler_1.Scheduler(), new collector_1.ThreadCollector(() => vm), new error_1.SupervisorErrorStrategy(allocator, conf.trap), log, new dispatcher_1.EventDispatcher(log), new runner_1.ThreadRunner(() => vm), new group_1.GroupMap());
|
|
54
54
|
return vm;
|
|
55
55
|
}
|
|
56
56
|
// Actor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actor/system/vm/index.ts"],"names":[],"mappings":";;;AACA,0CAA0C;AAC1C,kCAAkC;AAGlC,iEAA8D;AAC9D,sDAAyD;AACzD,wDAAoD;AAEpD,2CAMuB;AACvB,6CAA+C;AAE/C,yCAA+C;AAC/C,4CAA0E;AAE1E,mCAAmC;AACnC,2CAAwC;AAGxC,yCAAsD;AACtD,mDAAqD;AACrD,4CAA+C;AAE/C,+BAAwC;AACxC,kDAAqD;AA4ErD;;;;;;;GAOG;AACH,MAAa,GAAG;IACZ,YACW,YAAuB,IAAI,kBAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACnD,YAAuB,IAAI,qBAAS,EAAE,EACtC,YAA6B,IAAI,2BAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAC5D,SAAwB,IAAI,+BAAuB,CAAC,SAAS,CAAC,EAC9D,MAAmB,IAAI,kBAAS,CAAC,OAAO,CAAC,EACzC,SAAS,IAAI,4BAAe,CAAC,GAAG,CAAC,EACjC,SAAuB,IAAI,qBAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACnD,SAAmB,IAAI,gBAAQ,EAAE,EACjC,UAAU,wBAAc,EACxB,OAAO,wBAAc,EACrB,WAA8B,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;QAVpD,cAAS,GAAT,SAAS,CAA0C;QACnD,cAAS,GAAT,SAAS,CAA6B;QACtC,cAAS,GAAT,SAAS,CAAmD;QAC5D,WAAM,GAAN,MAAM,CAAwD;QAC9D,QAAG,GAAH,GAAG,CAAsC;QACzC,WAAM,GAAN,MAAM,CAA2B;QACjC,WAAM,GAAN,MAAM,CAA6C;QACnD,WAAM,GAAN,MAAM,CAA2B;QACjC,YAAO,GAAP,OAAO,CAAiB;QACxB,SAAI,GAAJ,IAAI,CAAiB;QACrB,aAAQ,GAAR,QAAQ,CAA4C;IAC5D,CAAC;IAEJ;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAoB,EAAE;;QAChC,IAAI,MAAM,GAAS;YACf,GAAG,EAAE,IAAA,cAAK,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAA,IAAI,CAAC,GAAG,mCAAI,EAAE,CAAC;SAC/D,CAAC;QAEF,IAAI,EAAO,CAAC;QAEZ,IAAI,SAAS,GAAG,IAAI,kBAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,GAAG,GAAG,IAAI,kBAAS,CACnB,MAAM,CAAC,GAAG,CAAC,IAAI,EACf,IAAA,qBAAe,EAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CACpC,CAAC;QAEF,EAAE,GAAG,IAAI,GAAG,CACR,SAAS,EACT,IAAI,qBAAS,EAAE,EACf,IAAI,2BAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAC7B,IAAI,+BAAuB,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/actor/system/vm/index.ts"],"names":[],"mappings":";;;AACA,0CAA0C;AAC1C,kCAAkC;AAGlC,iEAA8D;AAC9D,sDAAyD;AACzD,wDAAoD;AAEpD,2CAMuB;AACvB,6CAA+C;AAE/C,yCAA+C;AAC/C,4CAA0E;AAE1E,mCAAmC;AACnC,2CAAwC;AAGxC,yCAAsD;AACtD,mDAAqD;AACrD,4CAA+C;AAE/C,+BAAwC;AACxC,kDAAqD;AA4ErD;;;;;;;GAOG;AACH,MAAa,GAAG;IACZ,YACW,YAAuB,IAAI,kBAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACnD,YAAuB,IAAI,qBAAS,EAAE,EACtC,YAA6B,IAAI,2BAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAC5D,SAAwB,IAAI,+BAAuB,CAAC,SAAS,CAAC,EAC9D,MAAmB,IAAI,kBAAS,CAAC,OAAO,CAAC,EACzC,SAAS,IAAI,4BAAe,CAAC,GAAG,CAAC,EACjC,SAAuB,IAAI,qBAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACnD,SAAmB,IAAI,gBAAQ,EAAE,EACjC,UAAU,wBAAc,EACxB,OAAO,wBAAc,EACrB,WAA8B,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;QAVpD,cAAS,GAAT,SAAS,CAA0C;QACnD,cAAS,GAAT,SAAS,CAA6B;QACtC,cAAS,GAAT,SAAS,CAAmD;QAC5D,WAAM,GAAN,MAAM,CAAwD;QAC9D,QAAG,GAAH,GAAG,CAAsC;QACzC,WAAM,GAAN,MAAM,CAA2B;QACjC,WAAM,GAAN,MAAM,CAA6C;QACnD,WAAM,GAAN,MAAM,CAA2B;QACjC,YAAO,GAAP,OAAO,CAAiB;QACxB,SAAI,GAAJ,IAAI,CAAiB;QACrB,aAAQ,GAAR,QAAQ,CAA4C;IAC5D,CAAC;IAEJ;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAoB,EAAE;;QAChC,IAAI,MAAM,GAAS;YACf,GAAG,EAAE,IAAA,cAAK,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAA,IAAI,CAAC,GAAG,mCAAI,EAAE,CAAC;SAC/D,CAAC;QAEF,IAAI,EAAO,CAAC;QAEZ,IAAI,SAAS,GAAG,IAAI,kBAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,GAAG,GAAG,IAAI,kBAAS,CACnB,MAAM,CAAC,GAAG,CAAC,IAAI,EACf,IAAA,qBAAe,EAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CACpC,CAAC;QAEF,EAAE,GAAG,IAAI,GAAG,CACR,SAAS,EACT,IAAI,qBAAS,EAAE,EACf,IAAI,2BAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAC7B,IAAI,+BAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,EACjD,GAAG,EACH,IAAI,4BAAe,CAAC,GAAG,CAAC,EACxB,IAAI,qBAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAC1B,IAAI,gBAAQ,EAAE,CACjB,CAAC;QACF,OAAO,EAAE,CAAC;IACd,CAAC;IAED,QAAQ;IAER,KAAK,CAAC,KAAK,KAAI,CAAC;IAEhB,wCAAwC;IACxC,KAAK,CAAC,MAAM,KAAI,CAAC;IAEjB,KAAK,CAAC,IAAI;QACN,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAC1C,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,IAAA,qBAAW,EAAC,MAAM,CAAC,OAAO,CAAC;gBAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAED,MAAM;IAEN,IAAI,EAAE;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAwB;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAW,EAAE,GAAY;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAQ;QAChB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAa;QACpB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO;QACT,OAAmB,eAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,WAAW;IAEX,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,EAAW,EAAE,GAAY;QACrD,IAAI,OAAO,GAAG,IAAA,iBAAO,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9D,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAEjD,IAAI,OAAO,GAAG,IAAA,YAAI,EACd,OAAO,EACP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAC9B,CAAC;QAEF,IAAI,CAAC,IAAA,aAAK,EAAC,OAAO,CAAC,EAAE,CAAC;YAClB,KAAK,IAAI,OAAO,IAAI,OAAO;gBACvB,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAClC,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,oBAAoB,EAC3B,OAAO,EACP,GAAG,CACN,CAAC;QACV,CAAC;QAED,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAClC,IAAI,CAAC,OAAO,EACZ,MAAM,CAAC,kBAAkB,EACzB,EAAE,EACF,GAAG,CACN,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,MAAe;QAC7C,IAAI,GAAG,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,IAAA,iBAAO,EAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YAC1D,OAAO,eAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,MAAc,EAAE,IAAyB;QAC7C,OAAO,eAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;CACJ;AAvID,kBAuIC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Err } from '@quenk/noni/lib/control/err';
|
|
2
2
|
import { Thread } from '../thread';
|
|
3
3
|
import { Allocator } from '../allocator';
|
|
4
|
+
import { TrapFunc } from '../../../template';
|
|
4
5
|
/**
|
|
5
6
|
* ErrorStrategy is the interface used by threads to communicate errors that
|
|
6
7
|
* have occurred within the system.
|
|
@@ -23,6 +24,7 @@ export interface ErrorStrategy {
|
|
|
23
24
|
*/
|
|
24
25
|
export declare class SupervisorErrorStrategy implements ErrorStrategy {
|
|
25
26
|
allocator: Allocator;
|
|
26
|
-
|
|
27
|
+
defaultTrap: TrapFunc;
|
|
28
|
+
constructor(allocator: Allocator, defaultTrap?: TrapFunc);
|
|
27
29
|
raise(src: Thread, error: Err): Promise<void>;
|
|
28
30
|
}
|
|
@@ -5,20 +5,23 @@ const template = require("../../../template");
|
|
|
5
5
|
const errors = require("../runtime/error");
|
|
6
6
|
const err_1 = require("@quenk/noni/lib/control/err");
|
|
7
7
|
const address_1 = require("../../../address");
|
|
8
|
+
const js_1 = require("../thread/shared/js");
|
|
9
|
+
const shared_1 = require("../thread/shared");
|
|
8
10
|
/**
|
|
9
11
|
* SupervisorErrorStrategy defaults to raising the error with the parent actor
|
|
10
12
|
* if no trap function is specified.
|
|
11
13
|
*/
|
|
12
14
|
class SupervisorErrorStrategy {
|
|
13
|
-
constructor(allocator) {
|
|
15
|
+
constructor(allocator, defaultTrap = () => template.ACTION_RAISE) {
|
|
14
16
|
this.allocator = allocator;
|
|
17
|
+
this.defaultTrap = defaultTrap;
|
|
15
18
|
}
|
|
16
19
|
async raise(src, error) {
|
|
17
20
|
var _a;
|
|
18
21
|
let prevThread;
|
|
19
22
|
let err = error;
|
|
20
23
|
let currentThread = src;
|
|
21
|
-
let allocator = this
|
|
24
|
+
let { allocator } = this;
|
|
22
25
|
while (true) {
|
|
23
26
|
if (prevThread) {
|
|
24
27
|
await allocator.deallocate(prevThread);
|
|
@@ -30,10 +33,13 @@ class SupervisorErrorStrategy {
|
|
|
30
33
|
err = new errors.ActorTerminatedErr(currentThread.address, src.address, error);
|
|
31
34
|
}
|
|
32
35
|
let tmpl = allocator.getTemplate(currentThread.address).get();
|
|
33
|
-
let trap = (_a = tmpl.trap) !== null && _a !== void 0 ? _a : defaultTrap;
|
|
36
|
+
let trap = (_a = tmpl.trap) !== null && _a !== void 0 ? _a : this.defaultTrap;
|
|
34
37
|
let action = trap(err);
|
|
35
38
|
if (action === template.ACTION_IGNORE) {
|
|
36
|
-
//TODO:
|
|
39
|
+
//TODO: figure this out correctly.
|
|
40
|
+
if (currentThread instanceof js_1.JSThread) {
|
|
41
|
+
currentThread.state = shared_1.ThreadState.IDLE;
|
|
42
|
+
}
|
|
37
43
|
return;
|
|
38
44
|
}
|
|
39
45
|
else if (action === template.ACTION_RESTART) {
|
|
@@ -53,5 +59,4 @@ class SupervisorErrorStrategy {
|
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
61
|
exports.SupervisorErrorStrategy = SupervisorErrorStrategy;
|
|
56
|
-
const defaultTrap = () => template.ACTION_RAISE;
|
|
57
62
|
//# sourceMappingURL=error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/strategy/error.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,2CAA2C;AAE3C,qDAA2D;AAE3D,8CAA6D;
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../../src/actor/system/vm/strategy/error.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,2CAA2C;AAE3C,qDAA2D;AAE3D,8CAA6D;AAG7D,4CAA+C;AAC/C,6CAA+C;AAoB/C;;;GAGG;AACH,MAAa,uBAAuB;IAChC,YACW,SAAoB,EACpB,cAAwB,GAAE,EAAE,CAAC,QAAQ,CAAC,YAAY;QADlD,cAAS,GAAT,SAAS,CAAW;QACpB,gBAAW,GAAX,WAAW,CAAuC;IAC1D,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,KAAU;;QAC/B,IAAI,UAAU,CAAC;QAEf,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,aAAa,GAAG,GAAG,CAAC;QAExB,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAEzB,OAAO,IAAI,EAAE,CAAC;YACV,IAAI,UAAU,EAAE,CAAC;gBACb,MAAM,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBACvC,IAAI,cAAc,GAAG,SAAS,CAAC,SAAS,CACpC,IAAA,mBAAS,EAAC,UAAU,CAAC,OAAO,CAAC,CAChC,CAAC;gBAEF,8BAA8B;gBAC9B,IAAI,cAAc,CAAC,SAAS,EAAE;oBAAE,MAAM;gBAEtC,aAAa,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC;gBAErC,GAAG,GAAG,IAAI,MAAM,CAAC,kBAAkB,CAC/B,aAAa,CAAC,OAAO,EACrB,GAAG,CAAC,OAAO,EACX,KAAK,CACR,CAAC;YACN,CAAC;YAED,IAAI,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;YAE9D,IAAI,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,WAAW,CAAC;YAEzC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAEvB,IAAI,MAAM,KAAK,QAAQ,CAAC,aAAa,EAAE,CAAC;gBACpC,kCAAkC;gBAClC,IAAI,aAAa,YAAY,aAAQ,EAAE,CAAC;oBACpC,aAAa,CAAC,KAAK,GAAG,oBAAW,CAAC,IAAI,CAAC;gBAC3C,CAAC;gBACD,OAAO;YACX,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBAC1C,OAAO;YACX,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzC,MAAM,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;gBAC1C,OAAO;YACX,CAAC;iBAAM,IAAI,aAAa,CAAC,OAAO,KAAK,wBAAc,EAAE,CAAC;gBAClD,MAAM;YACV,CAAC;YAED,UAAU,GAAG,aAAa,CAAC;QAC/B,CAAC;QAED,MAAM,IAAA,aAAO,EAAC,GAAG,CAAC,CAAC;IACvB,CAAC;CACJ;AA7DD,0DA6DC"}
|