summaryrefslogtreecommitdiff
path: root/public/SomhairlesDream.Shared
diff options
context:
space:
mode:
Diffstat (limited to 'public/SomhairlesDream.Shared')
-rw-r--r--public/SomhairlesDream.Shared/Artifact.js277
-rw-r--r--public/SomhairlesDream.Shared/Domain.js114
-rw-r--r--public/SomhairlesDream.Shared/Replay.js29
3 files changed, 420 insertions, 0 deletions
diff --git a/public/SomhairlesDream.Shared/Artifact.js b/public/SomhairlesDream.Shared/Artifact.js
new file mode 100644
index 0000000..389d39c
--- /dev/null
+++ b/public/SomhairlesDream.Shared/Artifact.js
@@ -0,0 +1,277 @@
+import { Union, Record } from "../fable_modules/fable-library-js.4.24.0/Types.js";
+import { bool_type, array_type, int64_type, union_type, option_type, int32_type, class_type, record_type, string_type } from "../fable_modules/fable-library-js.4.24.0/Reflection.js";
+import { isMatch, create } from "../fable_modules/fable-library-js.4.24.0/RegExp.js";
+import { FSharpResult$2 } from "../fable_modules/fable-library-js.4.24.0/Result.js";
+
+export class RunIds extends Record {
+ constructor(ProjectId, RunId, BaseId, TargetId) {
+ super();
+ this.ProjectId = ProjectId;
+ this.RunId = RunId;
+ this.BaseId = BaseId;
+ this.TargetId = TargetId;
+ }
+}
+
+export function RunIds_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunIds", [], RunIds, () => [["ProjectId", string_type], ["RunId", string_type], ["BaseId", string_type], ["TargetId", string_type]]);
+}
+
+const Ids_resourcePattern = create("^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$", 512);
+
+const Ids_objectPattern = create("^[a-z0-9]+(?:[._-][a-z0-9]+)*$", 512);
+
+export function Ids_validateResourceId(value) {
+ if ((value == null) ? true : !isMatch(Ids_resourcePattern, value)) {
+ return new FSharpResult$2(1, ["resource id must contain only lower-case letters, digits, and hyphens"]);
+ }
+ else {
+ return new FSharpResult$2(0, [undefined]);
+ }
+}
+
+export function Ids_validateObjectId(value) {
+ if ((value == null) ? true : !isMatch(Ids_objectPattern, value)) {
+ return new FSharpResult$2(1, ["object id must use the dotted lower-case namespace"]);
+ }
+ else {
+ return new FSharpResult$2(0, [undefined]);
+ }
+}
+
+export class RunStart extends Record {
+ constructor(Ids, At, TotalSteps) {
+ super();
+ this.Ids = Ids;
+ this.At = At;
+ this.TotalSteps = (TotalSteps | 0);
+ }
+}
+
+export function RunStart_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunStart", [], RunStart, () => [["Ids", RunIds_$reflection()], ["At", class_type("System.DateTimeOffset")], ["TotalSteps", int32_type]]);
+}
+
+export class RunHeartbeat extends Record {
+ constructor(Ids, At, Message) {
+ super();
+ this.Ids = Ids;
+ this.At = At;
+ this.Message = Message;
+ }
+}
+
+export function RunHeartbeat_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunHeartbeat", [], RunHeartbeat, () => [["Ids", RunIds_$reflection()], ["At", class_type("System.DateTimeOffset")], ["Message", string_type]]);
+}
+
+export class RunCheckpoint extends Record {
+ constructor(Ids, At, StepId, StepIndex, TotalSteps, Message, ArtifactPath) {
+ super();
+ this.Ids = Ids;
+ this.At = At;
+ this.StepId = StepId;
+ this.StepIndex = (StepIndex | 0);
+ this.TotalSteps = (TotalSteps | 0);
+ this.Message = Message;
+ this.ArtifactPath = ArtifactPath;
+ }
+}
+
+export function RunCheckpoint_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunCheckpoint", [], RunCheckpoint, () => [["Ids", RunIds_$reflection()], ["At", class_type("System.DateTimeOffset")], ["StepId", string_type], ["StepIndex", int32_type], ["TotalSteps", int32_type], ["Message", string_type], ["ArtifactPath", string_type]]);
+}
+
+export class RunComplete extends Record {
+ constructor(Ids, At, ManifestPath) {
+ super();
+ this.Ids = Ids;
+ this.At = At;
+ this.ManifestPath = ManifestPath;
+ }
+}
+
+export function RunComplete_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunComplete", [], RunComplete, () => [["Ids", RunIds_$reflection()], ["At", class_type("System.DateTimeOffset")], ["ManifestPath", string_type]]);
+}
+
+export class RunFail extends Record {
+ constructor(Ids, At, StepId, Message) {
+ super();
+ this.Ids = Ids;
+ this.At = At;
+ this.StepId = StepId;
+ this.Message = Message;
+ }
+}
+
+export function RunFail_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunFail", [], RunFail, () => [["Ids", RunIds_$reflection()], ["At", class_type("System.DateTimeOffset")], ["StepId", option_type(string_type)], ["Message", string_type]]);
+}
+
+export class RunEvent extends Union {
+ constructor(tag, fields) {
+ super();
+ this.tag = tag;
+ this.fields = fields;
+ }
+ cases() {
+ return ["Start", "Heartbeat", "Checkpoint", "Complete", "Fail"];
+ }
+}
+
+export function RunEvent_$reflection() {
+ return union_type("SomhairlesDream.Shared.RunEvent", [], RunEvent, () => [[["Item", RunStart_$reflection()]], [["Item", RunHeartbeat_$reflection()]], [["Item", RunCheckpoint_$reflection()]], [["Item", RunComplete_$reflection()]], [["Item", RunFail_$reflection()]]]);
+}
+
+export class RunEventWire extends Record {
+ constructor(Kind, At, ProjectId, RunId, BaseId, TargetId, TotalSteps, StepId, StepIndex, Message, ArtifactPath, ManifestPath) {
+ super();
+ this.Kind = Kind;
+ this.At = At;
+ this.ProjectId = ProjectId;
+ this.RunId = RunId;
+ this.BaseId = BaseId;
+ this.TargetId = TargetId;
+ this.TotalSteps = TotalSteps;
+ this.StepId = StepId;
+ this.StepIndex = StepIndex;
+ this.Message = Message;
+ this.ArtifactPath = ArtifactPath;
+ this.ManifestPath = ManifestPath;
+ }
+}
+
+export function RunEventWire_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunEventWire", [], RunEventWire, () => [["Kind", string_type], ["At", class_type("System.DateTimeOffset")], ["ProjectId", string_type], ["RunId", string_type], ["BaseId", string_type], ["TargetId", string_type], ["TotalSteps", option_type(int32_type)], ["StepId", option_type(string_type)], ["StepIndex", option_type(int32_type)], ["Message", option_type(string_type)], ["ArtifactPath", option_type(string_type)], ["ManifestPath", option_type(string_type)]]);
+}
+
+function RunEventModule_ids(value) {
+ return [value.ProjectId, value.RunId, value.BaseId, value.TargetId];
+}
+
+export function RunEventModule_toWire(event) {
+ let patternInput;
+ switch (event.tag) {
+ case 1: {
+ const value_1 = event.fields[0];
+ patternInput = ["heartbeat", value_1.Ids, value_1.At, undefined, undefined, undefined, value_1.Message, undefined, undefined];
+ break;
+ }
+ case 2: {
+ const value_2 = event.fields[0];
+ patternInput = ["checkpoint", value_2.Ids, value_2.At, value_2.TotalSteps, value_2.StepId, value_2.StepIndex, value_2.Message, value_2.ArtifactPath, undefined];
+ break;
+ }
+ case 3: {
+ const value_3 = event.fields[0];
+ patternInput = ["complete", value_3.Ids, value_3.At, undefined, undefined, undefined, undefined, undefined, value_3.ManifestPath];
+ break;
+ }
+ case 4: {
+ const value_4 = event.fields[0];
+ patternInput = ["fail", value_4.Ids, value_4.At, undefined, value_4.StepId, undefined, value_4.Message, undefined, undefined];
+ break;
+ }
+ default: {
+ const value = event.fields[0];
+ patternInput = ["start", value.Ids, value.At, value.TotalSteps, undefined, undefined, undefined, undefined, undefined];
+ }
+ }
+ const patternInput_1 = RunEventModule_ids(patternInput[1]);
+ return new RunEventWire(patternInput[0], patternInput[2], patternInput_1[0], patternInput_1[1], patternInput_1[2], patternInput_1[3], patternInput[3], patternInput[4], patternInput[5], patternInput[6], patternInput[7], patternInput[8]);
+}
+
+export class ArtifactChange extends Record {
+ constructor(ObjectId, Kind, Summary) {
+ super();
+ this.ObjectId = ObjectId;
+ this.Kind = Kind;
+ this.Summary = Summary;
+ }
+}
+
+export function ArtifactChange_$reflection() {
+ return record_type("SomhairlesDream.Shared.ArtifactChange", [], ArtifactChange, () => [["ObjectId", string_type], ["Kind", string_type], ["Summary", string_type]]);
+}
+
+export class RenderArtifact extends Record {
+ constructor(ArtifactPath, Sha256, Bytes, ExportedAt) {
+ super();
+ this.ArtifactPath = ArtifactPath;
+ this.Sha256 = Sha256;
+ this.Bytes = Bytes;
+ this.ExportedAt = ExportedAt;
+ }
+}
+
+export function RenderArtifact_$reflection() {
+ return record_type("SomhairlesDream.Shared.RenderArtifact", [], RenderArtifact, () => [["ArtifactPath", string_type], ["Sha256", string_type], ["Bytes", int64_type], ["ExportedAt", class_type("System.DateTimeOffset")]]);
+}
+
+export class StepArtifact extends Record {
+ constructor(StepId, StepIndex, ArtifactPath, LogPath, Sha256, Bytes, ExportedAt, ObjectIds, VerifiedObjectIds, Changes, Render) {
+ super();
+ this.StepId = StepId;
+ this.StepIndex = (StepIndex | 0);
+ this.ArtifactPath = ArtifactPath;
+ this.LogPath = LogPath;
+ this.Sha256 = Sha256;
+ this.Bytes = Bytes;
+ this.ExportedAt = ExportedAt;
+ this.ObjectIds = ObjectIds;
+ this.VerifiedObjectIds = VerifiedObjectIds;
+ this.Changes = Changes;
+ this.Render = Render;
+ }
+}
+
+export function StepArtifact_$reflection() {
+ return record_type("SomhairlesDream.Shared.StepArtifact", [], StepArtifact, () => [["StepId", string_type], ["StepIndex", int32_type], ["ArtifactPath", string_type], ["LogPath", string_type], ["Sha256", string_type], ["Bytes", int64_type], ["ExportedAt", class_type("System.DateTimeOffset")], ["ObjectIds", array_type(string_type)], ["VerifiedObjectIds", array_type(string_type)], ["Changes", array_type(ArtifactChange_$reflection())], ["Render", option_type(RenderArtifact_$reflection())]]);
+}
+
+export class ArtifactManifest extends Record {
+ constructor(SchemaVersion, ProjectId, RunId, BaseId, TargetId, Status, StartedAt, CompletedAt, BlenderVersion, Steps) {
+ super();
+ this.SchemaVersion = (SchemaVersion | 0);
+ this.ProjectId = ProjectId;
+ this.RunId = RunId;
+ this.BaseId = BaseId;
+ this.TargetId = TargetId;
+ this.Status = Status;
+ this.StartedAt = StartedAt;
+ this.CompletedAt = CompletedAt;
+ this.BlenderVersion = BlenderVersion;
+ this.Steps = Steps;
+ }
+}
+
+export function ArtifactManifest_$reflection() {
+ return record_type("SomhairlesDream.Shared.ArtifactManifest", [], ArtifactManifest, () => [["SchemaVersion", int32_type], ["ProjectId", string_type], ["RunId", string_type], ["BaseId", string_type], ["TargetId", string_type], ["Status", string_type], ["StartedAt", class_type("System.DateTimeOffset")], ["CompletedAt", class_type("System.DateTimeOffset")], ["BlenderVersion", string_type], ["Steps", array_type(StepArtifact_$reflection())]]);
+}
+
+export class RunSnapshot extends Record {
+ constructor(ProjectId, RunId, BaseId, TargetId, Status, CurrentStepId, CurrentStepIndex, TotalSteps, LastHeartbeatAt, UpdatedAt, Message, ManifestPath, ManifestUrl, Error$, IsStale) {
+ super();
+ this.ProjectId = ProjectId;
+ this.RunId = RunId;
+ this.BaseId = BaseId;
+ this.TargetId = TargetId;
+ this.Status = Status;
+ this.CurrentStepId = CurrentStepId;
+ this.CurrentStepIndex = (CurrentStepIndex | 0);
+ this.TotalSteps = (TotalSteps | 0);
+ this.LastHeartbeatAt = LastHeartbeatAt;
+ this.UpdatedAt = UpdatedAt;
+ this.Message = Message;
+ this.ManifestPath = ManifestPath;
+ this.ManifestUrl = ManifestUrl;
+ this.Error = Error$;
+ this.IsStale = IsStale;
+ }
+}
+
+export function RunSnapshot_$reflection() {
+ return record_type("SomhairlesDream.Shared.RunSnapshot", [], RunSnapshot, () => [["ProjectId", string_type], ["RunId", string_type], ["BaseId", string_type], ["TargetId", string_type], ["Status", string_type], ["CurrentStepId", option_type(string_type)], ["CurrentStepIndex", int32_type], ["TotalSteps", int32_type], ["LastHeartbeatAt", option_type(class_type("System.DateTimeOffset"))], ["UpdatedAt", class_type("System.DateTimeOffset")], ["Message", string_type], ["ManifestPath", option_type(string_type)], ["ManifestUrl", option_type(string_type)], ["Error", option_type(string_type)], ["IsStale", bool_type]]);
+}
+
diff --git a/public/SomhairlesDream.Shared/Domain.js b/public/SomhairlesDream.Shared/Domain.js
new file mode 100644
index 0000000..5384715
--- /dev/null
+++ b/public/SomhairlesDream.Shared/Domain.js
@@ -0,0 +1,114 @@
+import { Record } from "../fable_modules/fable-library-js.4.24.0/Types.js";
+import { bool_type, option_type, class_type, enum_type, array_type, string_type, int32_type, record_type, float64_type } from "../fable_modules/fable-library-js.4.24.0/Reflection.js";
+import { item, collect } from "../fable_modules/fable-library-js.4.24.0/Array.js";
+import { singleton, append, collect as collect_1, delay, toArray } from "../fable_modules/fable-library-js.4.24.0/Seq.js";
+import { rangeDouble } from "../fable_modules/fable-library-js.4.24.0/Range.js";
+import { op_Subtraction } from "../fable_modules/fable-library-js.4.24.0/DateOffset.js";
+
+export class Vector3 extends Record {
+ constructor(X, Y, Z) {
+ super();
+ this.X = X;
+ this.Y = Y;
+ this.Z = Z;
+ }
+}
+
+export function Vector3_$reflection() {
+ return record_type("SomhairlesDream.Shared.Vector3", [], Vector3, () => [["X", float64_type], ["Y", float64_type], ["Z", float64_type]]);
+}
+
+export class MeshSnapshot extends Record {
+ constructor(Version, Label, Vertices, Faces) {
+ super();
+ this.Version = (Version | 0);
+ this.Label = Label;
+ this.Vertices = Vertices;
+ this.Faces = Faces;
+ }
+}
+
+export function MeshSnapshot_$reflection() {
+ return record_type("SomhairlesDream.Shared.MeshSnapshot", [], MeshSnapshot, () => [["Version", int32_type], ["Label", string_type], ["Vertices", array_type(Vector3_$reflection())], ["Faces", array_type(array_type(int32_type))]]);
+}
+
+export class LiveSnapshot extends Record {
+ constructor(ProjectId, RunId, Status, CurrentVersion, TargetVersion, HeartbeatAt, UpdatedAt, Message, Mesh, NextDesignRunScheduled) {
+ super();
+ this.ProjectId = ProjectId;
+ this.RunId = RunId;
+ this.Status = (Status | 0);
+ this.CurrentVersion = (CurrentVersion | 0);
+ this.TargetVersion = (TargetVersion | 0);
+ this.HeartbeatAt = HeartbeatAt;
+ this.UpdatedAt = UpdatedAt;
+ this.Message = Message;
+ this.Mesh = Mesh;
+ this.NextDesignRunScheduled = NextDesignRunScheduled;
+ }
+}
+
+export function LiveSnapshot_$reflection() {
+ return record_type("SomhairlesDream.Shared.LiveSnapshot", [], LiveSnapshot, () => [["ProjectId", string_type], ["RunId", string_type], ["Status", enum_type("SomhairlesDream.Shared.RunStatus", int32_type, [["Idle", 0], ["Queued", 1], ["Running", 2], ["Succeeded", 3], ["Failed", 4], ["Stale", 5]])], ["CurrentVersion", int32_type], ["TargetVersion", int32_type], ["HeartbeatAt", option_type(class_type("System.DateTimeOffset"))], ["UpdatedAt", class_type("System.DateTimeOffset")], ["Message", string_type], ["Mesh", option_type(MeshSnapshot_$reflection())], ["NextDesignRunScheduled", bool_type]]);
+}
+
+export function MeshData_positionData(mesh) {
+ return collect((vertex) => (new Float64Array([vertex.X, vertex.Y, vertex.Z])), mesh.Vertices, Float64Array);
+}
+
+export function MeshData_triangleIndices(mesh) {
+ return collect((face) => {
+ if (face.length < 3) {
+ return new Int32Array([]);
+ }
+ else {
+ return toArray(delay(() => collect_1((index) => append(singleton(item(0, face)), delay(() => append(singleton(item(index, face)), delay(() => singleton(item(index + 1, face)))))), rangeDouble(1, 1, face.length - 2))));
+ }
+ }, mesh.Faces, Int32Array);
+}
+
+export function RunState_initial(projectId, runId, now) {
+ return new LiveSnapshot(projectId, runId, 0, 0, 0, undefined, now, "等待设计运行", undefined, false);
+}
+
+export function RunState_start(now, state) {
+ const targetVersion = (state.TargetVersion + 1) | 0;
+ return new LiveSnapshot(state.ProjectId, state.RunId, 2, state.CurrentVersion, targetVersion, now, now, `正在生成第 ${targetVersion} 版几何`, state.Mesh, false);
+}
+
+export function RunState_heartbeat(now, state) {
+ if (state.Status === 2) {
+ return new LiveSnapshot(state.ProjectId, state.RunId, state.Status, state.CurrentVersion, state.TargetVersion, now, now, state.Message, state.Mesh, state.NextDesignRunScheduled);
+ }
+ else {
+ return state;
+ }
+}
+
+export function RunState_statusAt(timeout, now, state) {
+ const matchValue = state.HeartbeatAt;
+ let matchResult, heartbeatAt_1;
+ if (matchValue != null) {
+ if ((state.Status === 2) && (op_Subtraction(now, matchValue) > timeout)) {
+ matchResult = 0;
+ heartbeatAt_1 = matchValue;
+ }
+ else {
+ matchResult = 1;
+ }
+ }
+ else {
+ matchResult = 1;
+ }
+ switch (matchResult) {
+ case 0:
+ return new LiveSnapshot(state.ProjectId, state.RunId, 5, state.CurrentVersion, state.TargetVersion, state.HeartbeatAt, now, "心跳超时,等待重连", state.Mesh, state.NextDesignRunScheduled);
+ default:
+ return state;
+ }
+}
+
+export function RunState_publish(now, mesh, state) {
+ return new LiveSnapshot(state.ProjectId, state.RunId, 3, mesh.Version, state.TargetVersion, now, now, `已发布${mesh.Label}`, mesh, false);
+}
+
diff --git a/public/SomhairlesDream.Shared/Replay.js b/public/SomhairlesDream.Shared/Replay.js
new file mode 100644
index 0000000..9ad2fa2
--- /dev/null
+++ b/public/SomhairlesDream.Shared/Replay.js
@@ -0,0 +1,29 @@
+import { Record } from "../fable_modules/fable-library-js.4.24.0/Types.js";
+import { record_type, string_type, int32_type } from "../fable_modules/fable-library-js.4.24.0/Reflection.js";
+import { MeshSnapshot, Vector3, MeshSnapshot_$reflection } from "./Domain.js";
+
+export class ReplayFrame extends Record {
+ constructor(Version, Label, Mesh) {
+ super();
+ this.Version = (Version | 0);
+ this.Label = Label;
+ this.Mesh = Mesh;
+ }
+}
+
+export function ReplayFrame_$reflection() {
+ return record_type("SomhairlesDream.Shared.ReplayFrame", [], ReplayFrame, () => [["Version", int32_type], ["Label", string_type], ["Mesh", MeshSnapshot_$reflection()]]);
+}
+
+function Replay_vertex(x, y, z) {
+ return new Vector3(x, y, z);
+}
+
+function Replay_frame(version, label, vertices, faces) {
+ return new ReplayFrame(version, label, new MeshSnapshot(version, label, vertices, faces));
+}
+
+export function Replay_frames() {
+ return [Replay_frame(1, "重建起点", [Replay_vertex(-2, 0, -1), Replay_vertex(2, 0, -1), Replay_vertex(2, 0, 1), Replay_vertex(-2, 0, 1), Replay_vertex(-1, 2, -0.5), Replay_vertex(1, 2, -0.5), Replay_vertex(1, 2, 0.5), Replay_vertex(-1, 2, 0.5)], [new Int32Array([0, 1, 2]), new Int32Array([0, 2, 3]), new Int32Array([4, 6, 5]), new Int32Array([4, 7, 6]), new Int32Array([0, 4, 5]), new Int32Array([0, 5, 1]), new Int32Array([1, 5, 6]), new Int32Array([1, 6, 2]), new Int32Array([2, 6, 7]), new Int32Array([2, 7, 3]), new Int32Array([3, 7, 4]), new Int32Array([3, 4, 0])]), Replay_frame(2, "主承力骨架", [Replay_vertex(-2.5, 0, -1), Replay_vertex(2.5, 0, -1), Replay_vertex(2.5, 0, 1), Replay_vertex(-2.5, 0, 1), Replay_vertex(-1.5, 2.2, -0.7), Replay_vertex(1.5, 2.2, -0.7), Replay_vertex(1.5, 2.2, 0.7), Replay_vertex(-1.5, 2.2, 0.7), Replay_vertex(-0.45, 0, -0.45), Replay_vertex(0.45, 0, -0.45), Replay_vertex(0.45, 3, 0.45), Replay_vertex(-0.45, 3, 0.45)], [new Int32Array([0, 1, 2]), new Int32Array([0, 2, 3]), new Int32Array([4, 6, 5]), new Int32Array([4, 7, 6]), new Int32Array([8, 9, 10]), new Int32Array([8, 10, 11]), new Int32Array([0, 4, 8]), new Int32Array([4, 11, 8]), new Int32Array([1, 9, 5]), new Int32Array([1, 5, 2]), new Int32Array([2, 5, 10]), new Int32Array([2, 10, 3]), new Int32Array([3, 10, 7]), new Int32Array([3, 7, 0])]), Replay_frame(3, "舱段重构", [Replay_vertex(-3, 0, -1.3), Replay_vertex(3, 0, -1.3), Replay_vertex(3, 0, 1.3), Replay_vertex(-3, 0, 1.3), Replay_vertex(-2, 2, -1), Replay_vertex(2, 2, -1), Replay_vertex(2, 2, 1), Replay_vertex(-2, 2, 1), Replay_vertex(-1, 3.4, -0.65), Replay_vertex(1, 3.4, -0.65), Replay_vertex(1, 3.4, 0.65), Replay_vertex(-1, 3.4, 0.65), Replay_vertex(-3.8, 0.6, 0), Replay_vertex(3.8, 0.6, 0)], [new Int32Array([0, 1, 2]), new Int32Array([0, 2, 3]), new Int32Array([4, 6, 5]), new Int32Array([4, 7, 6]), new Int32Array([8, 9, 10]), new Int32Array([8, 10, 11]), new Int32Array([0, 4, 8]), new Int32Array([0, 8, 12]), new Int32Array([1, 13, 5]), new Int32Array([1, 2, 13]), new Int32Array([2, 6, 10]), new Int32Array([2, 10, 13]), new Int32Array([3, 11, 7]), new Int32Array([3, 12, 11]), new Int32Array([3, 0, 12])])];
+}
+