@ai-ecoverse/slicc-kernel 1.102.6 → 1.103.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.
Files changed (178) hide show
  1. package/README.md +1 -1
  2. package/dist/kernel-worker.js +1 -1
  3. package/dist/node-process-worker.js +1 -1
  4. package/dist/node.js +1 -1
  5. package/dist/process-worker.js +1 -1
  6. package/dist/types/body-idle.d.ts +3 -0
  7. package/dist/types/bytes.d.ts +1 -0
  8. package/dist/types/cdp/facade.d.ts +27 -0
  9. package/dist/types/cdp/hosts.d.ts +14 -0
  10. package/dist/types/cdp/port.d.ts +24 -0
  11. package/dist/types/cdp/types.d.ts +12 -0
  12. package/dist/types/cdp/websocket.d.ts +61 -0
  13. package/dist/types/client/attach.d.ts +132 -0
  14. package/dist/types/client/dial-stream.d.ts +23 -0
  15. package/dist/types/client/loopback-fetch.d.ts +5 -0
  16. package/dist/types/client/protocol.d.ts +153 -0
  17. package/dist/types/client/serve-client.d.ts +18 -0
  18. package/dist/types/clipboard-relay.d.ts +25 -0
  19. package/dist/types/commands.d.ts +38 -0
  20. package/dist/types/cron/clock.d.ts +13 -0
  21. package/dist/types/driver.d.ts +3 -0
  22. package/dist/types/facade/hosts.d.ts +12 -0
  23. package/dist/types/facade/port.d.ts +16 -0
  24. package/dist/types/facade/types.d.ts +23 -0
  25. package/dist/types/fs/access.d.ts +29 -0
  26. package/dist/types/fs/attest.d.ts +41 -0
  27. package/dist/types/fs/changes.d.ts +19 -0
  28. package/dist/types/fs/commands.d.ts +4 -0
  29. package/dist/types/fs/dac.d.ts +64 -0
  30. package/dist/types/fs/dev-removal.d.ts +9 -0
  31. package/dist/types/fs/fresh-modules.d.ts +9 -0
  32. package/dist/types/fs/integrity.d.ts +53 -0
  33. package/dist/types/fs/meta.d.ts +85 -0
  34. package/dist/types/fs/opfs.d.ts +141 -0
  35. package/dist/types/fs/owners.d.ts +17 -0
  36. package/dist/types/fs/pages.d.ts +41 -0
  37. package/dist/types/fs/path-map.d.ts +16 -0
  38. package/dist/types/fs/physical-path.d.ts +14 -0
  39. package/dist/types/fs/protect.d.ts +27 -0
  40. package/dist/types/fs/ranged.d.ts +73 -0
  41. package/dist/types/fs/remote.d.ts +45 -0
  42. package/dist/types/fs/types.d.ts +115 -0
  43. package/dist/types/fs/unlinked.d.ts +75 -0
  44. package/dist/types/fs/view.d.ts +1 -0
  45. package/dist/types/fs/walk.d.ts +12 -0
  46. package/dist/types/fs/watch.d.ts +23 -0
  47. package/dist/types/index.d.ts +159 -0
  48. package/dist/types/integrity-relay.d.ts +18 -0
  49. package/dist/types/kernel/children.d.ts +90 -0
  50. package/dist/types/kernel/clipboard.d.ts +49 -0
  51. package/dist/types/kernel/cpu-clock.d.ts +56 -0
  52. package/dist/types/kernel/cred.d.ts +17 -0
  53. package/dist/types/kernel/dgram.d.ts +56 -0
  54. package/dist/types/kernel/dial.d.ts +20 -0
  55. package/dist/types/kernel/epoll.d.ts +67 -0
  56. package/dist/types/kernel/eventfd.d.ts +19 -0
  57. package/dist/types/kernel/exec-ticket.d.ts +25 -0
  58. package/dist/types/kernel/fd-table.d.ts +107 -0
  59. package/dist/types/kernel/host-ops.d.ts +98 -0
  60. package/dist/types/kernel/host.d.ts +116 -0
  61. package/dist/types/kernel/jobs.d.ts +50 -0
  62. package/dist/types/kernel/locks.d.ts +40 -0
  63. package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
  64. package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
  65. package/dist/types/kernel/net/http1.d.ts +48 -0
  66. package/dist/types/kernel/net/loopback-names.d.ts +14 -0
  67. package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
  68. package/dist/types/kernel/net/network.d.ts +29 -0
  69. package/dist/types/kernel/net/proxy-service.d.ts +70 -0
  70. package/dist/types/kernel/net/realm-ca.d.ts +28 -0
  71. package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
  72. package/dist/types/kernel/net/remote-transport.d.ts +98 -0
  73. package/dist/types/kernel/net/resolver.d.ts +29 -0
  74. package/dist/types/kernel/net/routes.d.ts +15 -0
  75. package/dist/types/kernel/net/tls-engine.d.ts +46 -0
  76. package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
  77. package/dist/types/kernel/net/transport.d.ts +64 -0
  78. package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
  79. package/dist/types/kernel/net/uplink.d.ts +163 -0
  80. package/dist/types/kernel/net/ws-queue.d.ts +21 -0
  81. package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
  82. package/dist/types/kernel/net/x509.d.ts +34 -0
  83. package/dist/types/kernel/pipe.d.ts +29 -0
  84. package/dist/types/kernel/proc-info.d.ts +44 -0
  85. package/dist/types/kernel/process.d.ts +525 -0
  86. package/dist/types/kernel/protocol.d.ts +126 -0
  87. package/dist/types/kernel/pty.d.ts +84 -0
  88. package/dist/types/kernel/run-child.d.ts +39 -0
  89. package/dist/types/kernel/scrub-file.d.ts +13 -0
  90. package/dist/types/kernel/sealed.d.ts +74 -0
  91. package/dist/types/kernel/select.d.ts +7 -0
  92. package/dist/types/kernel/sem.d.ts +72 -0
  93. package/dist/types/kernel/settling.d.ts +16 -0
  94. package/dist/types/kernel/signals.d.ts +44 -0
  95. package/dist/types/kernel/socket-syscalls.d.ts +74 -0
  96. package/dist/types/kernel/socket.d.ts +125 -0
  97. package/dist/types/kernel/timer.d.ts +4 -0
  98. package/dist/types/kernel/tty.d.ts +53 -0
  99. package/dist/types/kernel/vfs-file.d.ts +149 -0
  100. package/dist/types/launcher.d.ts +359 -0
  101. package/dist/types/local-proxy-transport.d.ts +39 -0
  102. package/dist/types/meta.d.ts +11 -0
  103. package/dist/types/mount/chunked.d.ts +9 -0
  104. package/dist/types/mount/connection.d.ts +35 -0
  105. package/dist/types/mount/driver.d.ts +50 -0
  106. package/dist/types/mount/fsa.d.ts +26 -0
  107. package/dist/types/mount/fstab.d.ts +17 -0
  108. package/dist/types/mount/host.d.ts +24 -0
  109. package/dist/types/mount/hostfs.d.ts +129 -0
  110. package/dist/types/mount/media.d.ts +8 -0
  111. package/dist/types/mount/medium.d.ts +12 -0
  112. package/dist/types/mount/mount-fs.d.ts +136 -0
  113. package/dist/types/mount/protocol.d.ts +140 -0
  114. package/dist/types/mount/syscall.d.ts +27 -0
  115. package/dist/types/mount/tmpfs.d.ts +2 -0
  116. package/dist/types/node/loopback.d.ts +11 -0
  117. package/dist/types/node/memory-root.d.ts +2 -0
  118. package/dist/types/node/ws-diagnose.d.ts +4 -0
  119. package/dist/types/node.d.ts +85 -0
  120. package/dist/types/process/fd-metadata.d.ts +4 -0
  121. package/dist/types/process/js/async-sab.d.ts +15 -0
  122. package/dist/types/process/js/js-children.d.ts +63 -0
  123. package/dist/types/process/js/js-context.d.ts +133 -0
  124. package/dist/types/process/js/js-dev.d.ts +50 -0
  125. package/dist/types/process/js/js-exit.d.ts +15 -0
  126. package/dist/types/process/js/js-fetch.d.ts +2 -0
  127. package/dist/types/process/js/js-io.d.ts +81 -0
  128. package/dist/types/process/js/js-kernel.d.ts +61 -0
  129. package/dist/types/process/js/js-net.d.ts +42 -0
  130. package/dist/types/process/js/js-proc.d.ts +31 -0
  131. package/dist/types/process/js/js-run.d.ts +35 -0
  132. package/dist/types/process/js/js-sync.d.ts +86 -0
  133. package/dist/types/process/js/js-tty.d.ts +30 -0
  134. package/dist/types/process/js/js-websocket.d.ts +21 -0
  135. package/dist/types/process/kernel-streams.d.ts +196 -0
  136. package/dist/types/process/process-fds.d.ts +95 -0
  137. package/dist/types/process/process-locks.d.ts +29 -0
  138. package/dist/types/process/process-pty.d.ts +20 -0
  139. package/dist/types/process/process-signals.d.ts +33 -0
  140. package/dist/types/process/procfs.d.ts +41 -0
  141. package/dist/types/process/wasi/dylink.d.ts +9 -0
  142. package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
  143. package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
  144. package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
  145. package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
  146. package/dist/types/process/wasi/wasi-files.d.ts +99 -0
  147. package/dist/types/process/wasi/wasi-host.d.ts +104 -0
  148. package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
  149. package/dist/types/process/wasi/wasi-module.d.ts +13 -0
  150. package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
  151. package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
  152. package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
  153. package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
  154. package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
  155. package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
  156. package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
  157. package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
  158. package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
  159. package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
  160. package/dist/types/process/wasi-errno.d.ts +1 -0
  161. package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
  162. package/dist/types/realm/live-vfs-fs.d.ts +186 -0
  163. package/dist/types/realm/sync-fs-dispatch.d.ts +26 -0
  164. package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
  165. package/dist/types/realm/sync-fs-wire.d.ts +118 -0
  166. package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
  167. package/dist/types/realm/sync-sab-responder.d.ts +16 -0
  168. package/dist/types/realm/sync-sab-wire.d.ts +64 -0
  169. package/dist/types/sealed-relay.d.ts +26 -0
  170. package/dist/types/serve.d.ts +190 -0
  171. package/dist/types/sudo-command.d.ts +4 -0
  172. package/dist/types/sudo.d.ts +105 -0
  173. package/dist/types/testing.d.ts +46 -0
  174. package/dist/types/transport.d.ts +25 -0
  175. package/dist/types/users.d.ts +86 -0
  176. package/dist/types/version.d.ts +3 -0
  177. package/dist/types/websocket-transport.d.ts +12 -0
  178. package/package.json +22 -6
@@ -0,0 +1,163 @@
1
+ import { type RouteTable } from './routes.js';
2
+ export interface UplinkTraits {
3
+ tcp: true;
4
+ udp: boolean;
5
+ ipv6: boolean;
6
+ }
7
+ export type ResolveFamily = 0 | 4 | 6;
8
+ export interface ResolveAnswer {
9
+ addresses: string[];
10
+ ttl?: number;
11
+ }
12
+ export interface UplinkConn {
13
+ readonly localAddr: string;
14
+ readonly remoteAddr: string;
15
+ read(): Promise<Uint8Array | null>;
16
+ write(bytes: Uint8Array): Promise<number>;
17
+ closeWrite(): void;
18
+ close(): void;
19
+ }
20
+ export interface UplinkDial {
21
+ network: 'tcp';
22
+ host: string;
23
+ port: number;
24
+ signal: AbortSignal;
25
+ }
26
+ export interface UplinkDatagram {
27
+ bytes: Uint8Array;
28
+ host: string;
29
+ port: number;
30
+ }
31
+ export interface UplinkUnreachable {
32
+ error: string;
33
+ host: string;
34
+ port: number;
35
+ }
36
+ export type UplinkMessage = UplinkDatagram | UplinkUnreachable;
37
+ export interface UplinkUdpOpen {
38
+ family: 4 | 6;
39
+ signal: AbortSignal;
40
+ }
41
+ export interface UplinkUdp {
42
+ readonly localAddr: string;
43
+ send(bytes: Uint8Array, host: string, port: number): Promise<void>;
44
+ readonly messages: AsyncIterable<UplinkMessage>;
45
+ close(): void;
46
+ }
47
+ export interface NetworkUplink {
48
+ readonly traits: UplinkTraits;
49
+ readonly routes?: RouteTable;
50
+ resolve(name: string, family: ResolveFamily, signal?: AbortSignal): Promise<string[] | ResolveAnswer>;
51
+ dial(req: UplinkDial): Promise<UplinkConn>;
52
+ udp?(req: UplinkUdpOpen): Promise<UplinkUdp>;
53
+ }
54
+ export declare function carriesUdp(uplink: NetworkUplink): boolean;
55
+ export type UplinkCall = {
56
+ uplink: 'resolve';
57
+ uid: number;
58
+ name: string;
59
+ family: ResolveFamily;
60
+ } | {
61
+ uplink: 'dial';
62
+ uid: number;
63
+ host: string;
64
+ port: number;
65
+ } | {
66
+ uplink: 'cancel';
67
+ uid: number;
68
+ } | {
69
+ uplink: 'read';
70
+ uid: number;
71
+ cid: number;
72
+ } | {
73
+ uplink: 'write';
74
+ uid: number;
75
+ cid: number;
76
+ bytes: Uint8Array;
77
+ } | {
78
+ uplink: 'close-write';
79
+ cid: number;
80
+ } | {
81
+ uplink: 'close';
82
+ cid: number;
83
+ } | {
84
+ uplink: 'udp-open';
85
+ uid: number;
86
+ family: 4 | 6;
87
+ } | {
88
+ uplink: 'udp-send';
89
+ uid: number;
90
+ cid: number;
91
+ bytes: Uint8Array;
92
+ host: string;
93
+ port: number;
94
+ } | {
95
+ uplink: 'udp-recv';
96
+ uid: number;
97
+ cid: number;
98
+ } | {
99
+ uplink: 'udp-close';
100
+ cid: number;
101
+ };
102
+ export type UplinkReply = {
103
+ uplink: 'resolved';
104
+ uid: number;
105
+ addresses: string[];
106
+ ttl?: number;
107
+ } | {
108
+ uplink: 'dialled';
109
+ uid: number;
110
+ cid: number;
111
+ localAddr: string;
112
+ remoteAddr: string;
113
+ } | {
114
+ uplink: 'data';
115
+ uid: number;
116
+ bytes: Uint8Array | null;
117
+ } | {
118
+ uplink: 'written';
119
+ uid: number;
120
+ n: number;
121
+ } | {
122
+ uplink: 'udp-opened';
123
+ uid: number;
124
+ cid: number;
125
+ localAddr: string;
126
+ } | {
127
+ uplink: 'udp-sent';
128
+ uid: number;
129
+ } | {
130
+ uplink: 'udp-message';
131
+ uid: number;
132
+ message: UplinkMessage | null;
133
+ } | {
134
+ uplink: 'error';
135
+ uid: number;
136
+ message: string;
137
+ code?: string;
138
+ };
139
+ export interface UplinkPeer {
140
+ postMessage(message: UplinkReply, transfer?: Transferable[]): void;
141
+ }
142
+ export interface UplinkPort {
143
+ postMessage(message: UplinkCall, transfer?: Transferable[]): void;
144
+ }
145
+ export interface UplinkServer {
146
+ answer(call: UplinkCall): void;
147
+ close(): void;
148
+ }
149
+ export declare function answerOf(result: string[] | ResolveAnswer): ResolveAnswer;
150
+ export declare function serveUplink(peer: UplinkPeer, uplink: NetworkUplink): UplinkServer;
151
+ export declare class RemoteUplink implements NetworkUplink {
152
+ readonly traits: UplinkTraits;
153
+ readonly routes: RouteTable | undefined;
154
+ private readonly port;
155
+ private readonly waiting;
156
+ private nextId;
157
+ constructor(port: UplinkPort, traits: UplinkTraits, routes?: RouteTable);
158
+ receive(reply: UplinkReply): void;
159
+ private ask;
160
+ resolve(name: string, family: ResolveFamily, signal?: AbortSignal): Promise<ResolveAnswer>;
161
+ dial(req: UplinkDial): Promise<UplinkConn>;
162
+ udp(req: UplinkUdpOpen): Promise<UplinkUdp>;
163
+ }
@@ -0,0 +1,21 @@
1
+ import type { RealmWebSocketClose, RealmWebSocketMessage } from './transport.js';
2
+ export declare const INBOUND_LIMIT: number;
3
+ export declare const MESSAGE_LIMIT: number;
4
+ export declare const TOO_BIG = 1009;
5
+ export declare function payloadSize(message: RealmWebSocketMessage): number;
6
+ export declare class MessageQueue implements AsyncIterable<RealmWebSocketMessage> {
7
+ private readonly items;
8
+ private readonly limit;
9
+ private waiter;
10
+ private size;
11
+ private ended;
12
+ private readonly overflow;
13
+ private readonly taken;
14
+ readonly closed: Promise<RealmWebSocketClose>;
15
+ private settle;
16
+ constructor(overflow: () => void, limit?: number, taken?: (n: number) => void);
17
+ push(message: RealmWebSocketMessage): void;
18
+ end(close: RealmWebSocketClose): void;
19
+ private wake;
20
+ [Symbol.asyncIterator](): AsyncIterator<RealmWebSocketMessage>;
21
+ }
@@ -0,0 +1,45 @@
1
+ import type { SyncFsResult } from '../../realm/sync-fs-wire.js';
2
+ import type { KernelLoopback } from './loopback-transport.js';
3
+ import type { HeaderList, RealmTransport } from './transport.js';
4
+ export type WsSyscall = {
5
+ op: 'net-ws-open';
6
+ url: string;
7
+ protocols: string[];
8
+ headers: HeaderList;
9
+ } | {
10
+ op: 'net-ws-ready';
11
+ handle: number;
12
+ } | {
13
+ op: 'net-ws-recv';
14
+ handle: number;
15
+ } | {
16
+ op: 'net-ws-wait';
17
+ handle: number;
18
+ } | {
19
+ op: 'net-ws-send';
20
+ handle: number;
21
+ text?: string;
22
+ body?: Uint8Array;
23
+ } | {
24
+ op: 'net-ws-close';
25
+ handle: number;
26
+ code?: number;
27
+ reason?: string;
28
+ };
29
+ export declare const WS_OPS: readonly string[];
30
+ export declare class WsHandles {
31
+ private readonly transport;
32
+ private readonly open;
33
+ private readonly next;
34
+ private readonly local;
35
+ constructor(transport: RealmTransport, next: () => number, local?: KernelLoopback);
36
+ owns(handle: number): boolean;
37
+ syscall(req: WsSyscall): Promise<SyncFsResult>;
38
+ private start;
39
+ private connect;
40
+ private recv;
41
+ private closed;
42
+ private send;
43
+ close(handle: number): void;
44
+ closeAll(): void;
45
+ }
@@ -0,0 +1,34 @@
1
+ export type Signer = (tbs: Uint8Array) => Promise<Uint8Array>;
2
+ export declare function tlv(tag: number, ...contents: readonly Uint8Array[]): Uint8Array;
3
+ export declare function integer(magnitude: Uint8Array): Uint8Array;
4
+ export declare function oid(dotted: string): Uint8Array;
5
+ export interface DistinguishedName {
6
+ commonName: string;
7
+ organization?: string;
8
+ }
9
+ export declare function children(der: Uint8Array): Uint8Array[];
10
+ export declare function contents(element: Uint8Array): Uint8Array;
11
+ export declare function publicKeyBits(spki: Uint8Array): Uint8Array;
12
+ export declare function keyId(spki: Uint8Array): Promise<Uint8Array>;
13
+ export declare function ecdsaDer(raw: Uint8Array): Uint8Array;
14
+ export declare function randomSerial(): Uint8Array;
15
+ export declare function ipv4(host: string): Uint8Array | undefined;
16
+ export declare function ipv6(host: string): Uint8Array | undefined;
17
+ export interface CertificateRequest {
18
+ serial: Uint8Array;
19
+ issuer: DistinguishedName;
20
+ subject: DistinguishedName;
21
+ notBefore: Date;
22
+ notAfter: Date;
23
+ spki: Uint8Array;
24
+ issuerSpki: Uint8Array;
25
+ kind: {
26
+ ca: true;
27
+ } | {
28
+ ca: false;
29
+ host: string;
30
+ };
31
+ sign: Signer;
32
+ }
33
+ export declare function certificate(req: CertificateRequest): Promise<Uint8Array>;
34
+ export declare function pem(der: Uint8Array): string;
@@ -0,0 +1,29 @@
1
+ export declare const PIPE_CAPACITY: number;
2
+ export declare class PipeError extends Error {
3
+ readonly code: 'EPIPE' | 'EINTR';
4
+ constructor(code: 'EPIPE' | 'EINTR');
5
+ }
6
+ export declare class KernelPipe {
7
+ private chunks;
8
+ private size;
9
+ private readers;
10
+ private writers;
11
+ private waiters;
12
+ readonly capacity: number;
13
+ constructor(capacity?: number);
14
+ get buffered(): number;
15
+ get readReady(): boolean;
16
+ get writeReady(): boolean;
17
+ get writersGone(): boolean;
18
+ get readersGone(): boolean;
19
+ openRead(): void;
20
+ openWrite(): void;
21
+ closeRead(): void;
22
+ closeWrite(): void;
23
+ read(max: number, signal?: AbortSignal): Promise<Uint8Array>;
24
+ peek(max: number, signal?: AbortSignal): Promise<Uint8Array>;
25
+ write(bytes: Uint8Array, signal?: AbortSignal): Promise<number>;
26
+ private take;
27
+ changed(signal?: AbortSignal): Promise<void>;
28
+ private wake;
29
+ }
@@ -0,0 +1,44 @@
1
+ import type { Cred } from './cred.js';
2
+ export interface ProcessInfo {
3
+ pid: number;
4
+ tid: number;
5
+ ppid: number;
6
+ pgid: number;
7
+ sid: number;
8
+ argv: string[];
9
+ tty: string | null;
10
+ started: number;
11
+ state: 'S' | 'T' | 'Z';
12
+ threads?: Array<{
13
+ tid: number;
14
+ state: 'R' | 'S';
15
+ }>;
16
+ memory: number;
17
+ utime?: number;
18
+ stime?: number;
19
+ cutime?: number;
20
+ cstime?: number;
21
+ umask?: number;
22
+ cred?: Cred;
23
+ sigIgn?: number;
24
+ sigCgt?: number;
25
+ sigBlk?: number;
26
+ tag?: string;
27
+ }
28
+ export interface MountLine {
29
+ type: string;
30
+ source: string;
31
+ target: string;
32
+ options: Record<string, string>;
33
+ state: 'ok' | 'failed' | 'nomedium' | 'pending';
34
+ }
35
+ export interface ProcessListing {
36
+ boot: number;
37
+ processes: ProcessInfo[];
38
+ load?: readonly [number, number, number];
39
+ cpu?: {
40
+ utime: number;
41
+ stime: number;
42
+ idle: number;
43
+ };
44
+ }